@oneuptime/common 12.0.24 → 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 (870) hide show
  1. package/Models/AnalyticsModels/Index.ts +2 -0
  2. package/Models/AnalyticsModels/Span.ts +101 -0
  3. package/Models/AnalyticsModels/ThreatIntelIndicator.ts +413 -0
  4. package/Models/DatabaseModels/AlertSeverity.ts +4 -1
  5. package/Models/DatabaseModels/CephClusterFeed.ts +625 -0
  6. package/Models/DatabaseModels/CloudResourceFeed.ts +625 -0
  7. package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +13 -0
  8. package/Models/DatabaseModels/DetectionRule.ts +9 -3
  9. package/Models/DatabaseModels/DockerHostFeed.ts +625 -0
  10. package/Models/DatabaseModels/DockerSwarmClusterFeed.ts +628 -0
  11. package/Models/DatabaseModels/GoogleSecOpsConnection.ts +9 -3
  12. package/Models/DatabaseModels/HostFeed.ts +625 -0
  13. package/Models/DatabaseModels/IncidentSeverity.ts +4 -1
  14. package/Models/DatabaseModels/Index.ts +22 -0
  15. package/Models/DatabaseModels/KubernetesClusterFeed.ts +628 -0
  16. package/Models/DatabaseModels/Monitor.ts +87 -0
  17. package/Models/DatabaseModels/NetworkDevice.ts +96 -5
  18. package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +92 -6
  19. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +301 -31
  20. package/Models/DatabaseModels/NetworkSite.ts +120 -0
  21. package/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.ts +1 -0
  22. package/Models/DatabaseModels/PodmanHostFeed.ts +625 -0
  23. package/Models/DatabaseModels/ProxmoxClusterFeed.ts +626 -0
  24. package/Models/DatabaseModels/ScheduledMaintenance.ts +67 -0
  25. package/Models/DatabaseModels/ServiceFeed.ts +625 -0
  26. package/Models/DatabaseModels/TelemetrySourceMap.ts +474 -0
  27. package/Models/DatabaseModels/ThreatIntelFeed.ts +758 -0
  28. package/Models/DatabaseModels/UserOnCallLog.ts +1 -0
  29. package/Models/DatabaseModels/UserTotpAuth.ts +1 -0
  30. package/Models/DatabaseModels/UserWebAuthn.ts +1 -0
  31. package/Server/API/AlertAPI.ts +23 -1
  32. package/Server/API/BaseAPI.ts +14 -27
  33. package/Server/API/IncidentAPI.ts +41 -1
  34. package/Server/API/IncidentEpisodeAPI.ts +23 -1
  35. package/Server/API/MicrosoftTeamsAPI.ts +31 -2
  36. package/Server/API/ScheduledMaintenanceAPI.ts +23 -1
  37. package/Server/API/SlackAPI.ts +48 -2
  38. package/Server/API/TelemetryAPI.ts +167 -42
  39. package/Server/API/UserOnCallLogTimelineAPI.ts +75 -61
  40. package/Server/API/UserTotpAuthAPI.ts +67 -1
  41. package/Server/API/UserWebAuthnAPI.ts +44 -1
  42. package/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.ts +57 -0
  43. package/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.ts +49 -0
  44. package/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.ts +129 -0
  45. package/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.ts +54 -0
  46. package/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.ts +64 -0
  47. package/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.ts +64 -0
  48. package/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.ts +72 -0
  49. package/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.ts +31 -0
  50. package/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.ts +489 -0
  51. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +18 -0
  52. package/Server/Middleware/IdentityRateLimit.ts +53 -3
  53. package/Server/Middleware/SlackAuthorization.ts +96 -18
  54. package/Server/Services/AIService.ts +181 -41
  55. package/Server/Services/CephClusterFeedService.ts +99 -0
  56. package/Server/Services/CephClusterLabelRuleEngineService.ts +29 -0
  57. package/Server/Services/CephClusterOwnerRuleEngineService.ts +23 -0
  58. package/Server/Services/CephClusterOwnerTeamService.ts +129 -0
  59. package/Server/Services/CephClusterOwnerUserService.ts +123 -0
  60. package/Server/Services/CephClusterService.ts +223 -2
  61. package/Server/Services/CloudResourceFeedService.ts +99 -0
  62. package/Server/Services/CloudResourceLabelRuleEngineService.ts +30 -0
  63. package/Server/Services/CloudResourceOwnerRuleEngineService.ts +33 -0
  64. package/Server/Services/CloudResourceOwnerTeamService.ts +129 -0
  65. package/Server/Services/CloudResourceOwnerUserService.ts +123 -0
  66. package/Server/Services/CloudResourceService.ts +227 -2
  67. package/Server/Services/DatabaseService.ts +265 -0
  68. package/Server/Services/DockerHostFeedService.ts +99 -0
  69. package/Server/Services/DockerHostLabelRuleEngineService.ts +29 -0
  70. package/Server/Services/DockerHostOwnerRuleEngineService.ts +23 -0
  71. package/Server/Services/DockerHostOwnerTeamService.ts +129 -0
  72. package/Server/Services/DockerHostOwnerUserService.ts +123 -0
  73. package/Server/Services/DockerHostService.ts +227 -2
  74. package/Server/Services/DockerSwarmClusterFeedService.ts +102 -0
  75. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +30 -0
  76. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +24 -0
  77. package/Server/Services/DockerSwarmClusterOwnerTeamService.ts +133 -0
  78. package/Server/Services/DockerSwarmClusterOwnerUserService.ts +127 -0
  79. package/Server/Services/DockerSwarmClusterService.ts +229 -2
  80. package/Server/Services/EnterpriseLicenseService.ts +15 -7
  81. package/Server/Services/ExceptionAggregationService.ts +12 -2
  82. package/Server/Services/HostFeedService.ts +99 -0
  83. package/Server/Services/HostLabelRuleEngineService.ts +29 -0
  84. package/Server/Services/HostOwnerRuleEngineService.ts +23 -0
  85. package/Server/Services/HostOwnerTeamService.ts +129 -0
  86. package/Server/Services/HostOwnerUserService.ts +123 -0
  87. package/Server/Services/HostService.ts +215 -2
  88. package/Server/Services/IncidentService.ts +11 -0
  89. package/Server/Services/Index.ts +24 -0
  90. package/Server/Services/KubernetesClusterFeedService.ts +99 -0
  91. package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +30 -0
  92. package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +24 -0
  93. package/Server/Services/KubernetesClusterOwnerTeamService.ts +133 -0
  94. package/Server/Services/KubernetesClusterOwnerUserService.ts +127 -0
  95. package/Server/Services/KubernetesClusterService.ts +231 -2
  96. package/Server/Services/LogAggregationService.ts +23 -280
  97. package/Server/Services/MetricAggregationService.ts +98 -1
  98. package/Server/Services/MonitorService.ts +177 -13
  99. package/Server/Services/MonitorTemplateService.ts +111 -0
  100. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +777 -86
  101. package/Server/Services/NetworkDeviceAutoImportRuleService.ts +199 -16
  102. package/Server/Services/NetworkDeviceDiscoveryScanService.ts +1055 -14
  103. package/Server/Services/NetworkDeviceService.ts +750 -4
  104. package/Server/Services/NetworkInterfaceService.ts +415 -0
  105. package/Server/Services/NetworkSiteService.ts +485 -52
  106. package/Server/Services/PodmanHostFeedService.ts +99 -0
  107. package/Server/Services/PodmanHostLabelRuleEngineService.ts +29 -0
  108. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +23 -0
  109. package/Server/Services/PodmanHostOwnerTeamService.ts +129 -0
  110. package/Server/Services/PodmanHostOwnerUserService.ts +123 -0
  111. package/Server/Services/PodmanHostService.ts +227 -2
  112. package/Server/Services/ProjectService.ts +16 -10
  113. package/Server/Services/ProxmoxClusterFeedService.ts +99 -0
  114. package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +30 -0
  115. package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +24 -0
  116. package/Server/Services/ProxmoxClusterOwnerTeamService.ts +131 -0
  117. package/Server/Services/ProxmoxClusterOwnerUserService.ts +124 -0
  118. package/Server/Services/ProxmoxClusterService.ts +225 -2
  119. package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +61 -0
  120. package/Server/Services/ServiceFeedService.ts +99 -0
  121. package/Server/Services/ServiceLabelRuleEngineService.ts +29 -0
  122. package/Server/Services/ServiceOwnerRuleEngineService.ts +26 -0
  123. package/Server/Services/ServiceOwnerTeamService.ts +129 -0
  124. package/Server/Services/ServiceOwnerUserService.ts +123 -0
  125. package/Server/Services/ServiceService.ts +227 -3
  126. package/Server/Services/StatusPageSubscriberService.ts +7 -0
  127. package/Server/Services/TelemetryAttributeService.ts +13 -3
  128. package/Server/Services/TelemetrySourceMapService.ts +307 -0
  129. package/Server/Services/ThreatIntelFeedService.ts +222 -0
  130. package/Server/Services/ThreatIntelIndicatorService.ts +428 -0
  131. package/Server/Services/TraceAggregationService.ts +101 -11
  132. package/Server/Services/UserService.ts +13 -6
  133. package/Server/Services/UserTwoFactorBackupCodeService.ts +127 -0
  134. package/Server/Services/UserWebhookService.ts +11 -2
  135. package/Server/Static/Brand/README.md +38 -0
  136. package/Server/Static/Brand/favicons/apple-touch-icon.png +0 -0
  137. package/Server/Static/Brand/favicons/favicon-16x16.png +0 -0
  138. package/Server/Static/Brand/favicons/favicon-32x32.png +0 -0
  139. package/Server/Static/Brand/favicons/favicon.ico +0 -0
  140. package/Server/Static/Brand/favicons/safari-pinned-tab.svg +31 -0
  141. package/Server/Static/Brand/hou-wb.svg +1 -0
  142. package/Server/Static/Brand/oneuptime-logo.svg +1 -0
  143. package/Server/Static/Brand/ou-wb.svg +1 -0
  144. package/Server/Static/Vendor/README.md +4 -0
  145. package/Server/Types/AnalyticsDatabase/ModelPermission.ts +13 -3
  146. package/Server/Types/Database/AggregateBy.ts +83 -0
  147. package/Server/Types/Database/AggregateResultUtil.ts +126 -0
  148. package/Server/Types/Database/JSONColumnQuery.ts +18 -0
  149. package/Server/Types/Database/QueryHelper.ts +40 -0
  150. package/Server/Types/Database/QueryUtil.ts +26 -0
  151. package/Server/Types/Workflow/Components/API/Utils.ts +10 -1
  152. package/Server/Types/Workflow/Components/JavaScript.ts +8 -0
  153. package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +9 -0
  154. package/Server/Utils/AI/SRE/InvestigationGrader.ts +18 -0
  155. package/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.ts +422 -0
  156. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +176 -0
  157. package/Server/Utils/DataSource/HttpFetch.ts +18 -0
  158. package/Server/Utils/Database/RelationIdUtil.ts +42 -0
  159. package/Server/Utils/Marketing/MarketingEventUtil.ts +38 -9
  160. package/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.ts +34 -3
  161. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +9 -1
  162. package/Server/Utils/Monitor/Criteria/SyntheticMonitor.ts +28 -10
  163. package/Server/Utils/Monitor/MonitorAlert.ts +541 -332
  164. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +330 -64
  165. package/Server/Utils/Monitor/MonitorIncident.ts +640 -434
  166. package/Server/Utils/Monitor/MonitorResource.ts +226 -49
  167. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +46 -3
  168. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +23 -102
  169. package/Server/Utils/Monitor/PerEntityCriteriaFanOut.ts +329 -0
  170. package/Server/Utils/NetworkDevice/DeviceHealthAggregation.ts +427 -0
  171. package/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.ts +310 -0
  172. package/Server/Utils/OnCallNotificationContext.ts +686 -0
  173. package/Server/Utils/PrivateNetworkWebhookConfig.ts +549 -0
  174. package/Server/Utils/ResourceFeed/ResourceFeedUtil.ts +139 -0
  175. package/Server/Utils/Response.ts +11 -1
  176. package/Server/Utils/SSRFProtection.ts +230 -60
  177. package/Server/Utils/SecurityEvent/ConnectorErrorMessage.ts +106 -0
  178. package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +84 -284
  179. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +47 -20
  180. package/Server/Utils/SecurityEvent/SecurityEventAlerting.ts +318 -0
  181. package/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.ts +199 -0
  182. package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.ts +252 -0
  183. package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.ts +739 -0
  184. package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.ts +533 -0
  185. package/Server/Utils/StartServer.ts +83 -56
  186. package/Server/Utils/StatusPageSubscriberWebhook.ts +3 -0
  187. package/Server/Utils/Telemetry/LlmMetricSpend.ts +56 -5
  188. package/Server/Utils/Telemetry/LlmSpan.ts +46 -0
  189. package/Server/Utils/Telemetry/SourceMapResolver.ts +480 -0
  190. package/Server/Utils/TwoFactorBackupCodeNotification.ts +106 -0
  191. package/Server/Utils/VM/VMAPI.ts +3 -0
  192. package/Server/Utils/VM/VMRunner.ts +27 -1
  193. package/Server/Utils/VendorAssets.ts +42 -0
  194. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +136 -6
  195. package/Server/Utils/Workspace/Slack/Actions/Auth.ts +0 -12
  196. package/Server/Views/AcknowledgeUserOnCallNotification.ejs +11 -9
  197. package/Server/Views/Partials/Head.ejs +9 -9
  198. package/Server/Views/Partials/OnCallNotificationDetails.ejs +48 -0
  199. package/Server/Views/ViewMessage.ejs +11 -9
  200. package/Tests/App/Accounts/LoginTwoFactorRecovery.test.tsx +972 -0
  201. package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +401 -0
  202. package/Tests/App/Dashboard/DiscoveryScanEditForm.test.tsx +707 -0
  203. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +1908 -18
  204. package/Tests/App/Dashboard/LlmCallsTableIdentity.test.tsx +322 -0
  205. package/Tests/App/Dashboard/LlmOverview.test.tsx +335 -0
  206. package/Tests/App/Dashboard/LlmSpanDisplay.test.ts +391 -0
  207. package/Tests/App/Dashboard/LlmUsageBreakdown.test.tsx +1007 -0
  208. package/Tests/App/Dashboard/ResourceFeed.test.tsx +230 -0
  209. package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +216 -0
  210. package/Tests/App/Dashboard/TopologyAddToMonitoring.test.tsx +192 -0
  211. package/Tests/App/Dashboard/WorkspaceNotificationRuleConditions.test.tsx +439 -0
  212. package/Tests/Models/DatabaseModels/DateColumnDeserialization.test.ts +182 -0
  213. package/Tests/Models/DatabaseModels/RelationColumnModelTypeCoverage.test.ts +82 -0
  214. package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +398 -0
  215. package/Tests/Models/DiscoveryScanNameColumn.test.ts +151 -16
  216. package/Tests/Models/DiscoveryScanSnmpEnabledColumn.test.ts +593 -0
  217. package/Tests/Models/NetworkDeviceCreateContract.test.ts +102 -0
  218. package/Tests/Server/API/AIGenerationProjectAIToggle.test.ts +607 -0
  219. package/Tests/Server/API/AIGenerationRequestBudget.test.ts +355 -0
  220. package/Tests/Server/API/AIKillSwitchBackstop.test.ts +602 -0
  221. package/Tests/Server/API/BaseAPI.test.ts +41 -0
  222. package/Tests/Server/API/BaseAPIUpdateDateColumns.test.ts +154 -0
  223. package/Tests/Server/API/BaseAPIUpdatePayloadValidation.test.ts +9 -16
  224. package/Tests/Server/API/MicrosoftTeamsBotTestEndpoint.test.ts +335 -0
  225. package/Tests/Server/API/UserOnCallLogTimelineAcknowledgePage.test.ts +611 -0
  226. package/Tests/Server/API/UserTotpAuthAPI.test.ts +498 -4
  227. package/Tests/Server/API/UserWebAuthnBackupCodeMinting.test.ts +682 -0
  228. package/Tests/Server/Infrastructure/ExampleDockerfiles.test.ts +595 -0
  229. package/Tests/Server/Middleware/SlackAuthorization.test.ts +262 -5
  230. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +9 -0
  231. package/Tests/Server/Services/AIServiceProjectAccess.test.ts +6 -0
  232. package/Tests/Server/Services/AutoImportScanCredentialSelect.test.ts +18 -0
  233. package/Tests/Server/Services/DatabaseServiceAggregateBy.test.ts +590 -0
  234. package/Tests/Server/Services/DatabaseServiceUpdateWriteRouting.test.ts +12 -0
  235. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +162 -26
  236. package/Tests/Server/Services/EnterpriseLicenseServiceCreate.test.ts +292 -0
  237. package/Tests/Server/Services/FeedRetentionConsistency.test.ts +119 -12
  238. package/Tests/Server/Services/LogAggregationAttributeOperators.test.ts +109 -0
  239. package/Tests/Server/Services/MetricAggregationAttributeOperators.test.ts +170 -0
  240. package/Tests/Server/Services/MonitorTemplateServiceNetworkDeviceSync.test.ts +383 -0
  241. package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +997 -3
  242. package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +830 -0
  243. package/Tests/Server/Services/NetworkDeviceAutoMonitorLifecycle.test.ts +528 -0
  244. package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +3141 -1
  245. package/Tests/Server/Services/NetworkDeviceRegisteredHostnames.test.ts +1023 -0
  246. package/Tests/Server/Services/NetworkDeviceSiteAssignmentRuleSkip.test.ts +728 -0
  247. package/Tests/Server/Services/NetworkInterfaceServiceUpsert.test.ts +795 -0
  248. package/Tests/Server/Services/NetworkSiteRollupPolicyAndMaintenance.test.ts +903 -0
  249. package/Tests/Server/Services/NetworkSiteService.test.ts +165 -24
  250. package/Tests/Server/Services/ProjectServiceChangePlan.test.ts +5 -3
  251. package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +5 -2
  252. package/Tests/Server/Services/ResourceCreationFeedWrites.test.ts +304 -0
  253. package/Tests/Server/Services/ResourceFeedServices.test.ts +269 -0
  254. package/Tests/Server/Services/ResourceOwnerFeedWrites.test.ts +245 -0
  255. package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +792 -0
  256. package/Tests/Server/Services/TelemetrySourceMapService.test.ts +483 -0
  257. package/Tests/Server/Services/ThreatIntelFeedService.test.ts +351 -0
  258. package/Tests/Server/Services/ThreatIntelIndicatorService.test.ts +366 -0
  259. package/Tests/Server/Services/TraceAggregationAttributeOperators.test.ts +507 -0
  260. package/Tests/Server/Services/UserTwoFactorBackupCodeGenerateIfNone.test.ts +705 -0
  261. package/Tests/Server/Services/WorkspaceNotificationRuleOnCallDutyPolicy.test.ts +306 -0
  262. package/Tests/Server/Types/Database/AggregateResultUtil.test.ts +386 -0
  263. package/Tests/Server/Types/Database/Permissions/SelectRejectionMessageContract.test.ts +424 -0
  264. package/Tests/Server/Types/Database/QueryHelperWildcard.test.ts +142 -0
  265. package/Tests/Server/Types/Workflow/Components/ApiComponentPrivateNetwork.test.ts +163 -0
  266. package/Tests/Server/Types/Workflow/Components/JavaScriptPrivateNetwork.test.ts +124 -0
  267. package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +5 -0
  268. package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +39 -1
  269. package/Tests/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.test.ts +338 -0
  270. package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorWildcard.test.ts +383 -0
  271. package/Tests/Server/Utils/Marketing/EmittedMarketingEvent.ts +23 -0
  272. package/Tests/Server/Utils/Marketing/MarketingEventUtil.test.ts +51 -0
  273. package/Tests/Server/Utils/Monitor/Criteria/SyntheticMonitorCriteria.test.ts +259 -0
  274. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPerSeriesFanout.test.ts +557 -0
  275. package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +12 -2
  276. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +404 -0
  277. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +8 -2
  278. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +125 -98
  279. package/Tests/Server/Utils/Monitor/PerEntityCriteriaFanOut.test.ts +444 -0
  280. package/Tests/Server/Utils/Monitor/PerSeriesSecondEntityAlerting.test.ts +1112 -0
  281. package/Tests/Server/Utils/NetworkDevice/DeviceHealthAggregation.test.ts +717 -0
  282. package/Tests/Server/Utils/NetworkDevice/RulePatternValidator.test.ts +78 -0
  283. package/Tests/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.test.ts +363 -0
  284. package/Tests/Server/Utils/OfflineAssetHygiene.test.ts +35 -0
  285. package/Tests/Server/Utils/OnCallNotificationContext.test.ts +908 -0
  286. package/Tests/Server/Utils/PrivateNetworkWebhookConfig.test.ts +423 -0
  287. package/Tests/Server/Utils/ResourceFeed/ResourceFeedUtil.test.ts +191 -0
  288. package/Tests/Server/Utils/SSRFProtectionPrivateNetwork.test.ts +597 -0
  289. package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +819 -0
  290. package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +381 -0
  291. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +417 -0
  292. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +819 -0
  293. package/Tests/Server/Utils/SecurityEvent/SecurityEventAlerting.test.ts +246 -0
  294. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.test.ts +282 -0
  295. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.test.ts +312 -0
  296. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.test.ts +854 -0
  297. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.test.ts +437 -0
  298. package/Tests/Server/Utils/StartServerErrorStatus.test.ts +225 -0
  299. package/Tests/Server/Utils/StatusPage/MonitorRulePatternValidator.test.ts +62 -0
  300. package/Tests/Server/Utils/StatusPageSubscriberWebhookPrivateNetwork.test.ts +119 -0
  301. package/Tests/Server/Utils/Telemetry/LlmCostBudgetEvaluator.test.ts +37 -18
  302. package/Tests/Server/Utils/Telemetry/LlmMetricSpend.test.ts +143 -2
  303. package/Tests/Server/Utils/Telemetry/LlmSpan.test.ts +804 -0
  304. package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +542 -0
  305. package/Tests/Server/Utils/TwoFactorBackupCodeNotification.test.ts +272 -0
  306. package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +111 -0
  307. package/Tests/Server/Utils/VendorAssets.test.ts +117 -0
  308. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +101 -4
  309. package/Tests/Server/Utils/Workspace/MicrosoftTeamsInstallStateDiagnostics.test.ts +922 -0
  310. package/Tests/Server/Utils/Workspace/MicrosoftTeamsRosterDiagnosticMessages.test.ts +642 -0
  311. package/Tests/Server/Views/OnCallAcknowledgePage.test.ts +430 -0
  312. package/Tests/Types/API/URLQueryString.test.ts +472 -0
  313. package/Tests/Types/BaseDatabase/Wildcard.test.ts +163 -0
  314. package/Tests/Types/BaseDatabase/WildcardPattern.test.ts +149 -0
  315. package/Tests/Types/Database/DateColumnValue.test.ts +265 -0
  316. package/Tests/Types/DateToIsoStringOrNull.test.ts +67 -0
  317. package/Tests/Types/Log/LogQueryToFilter.test.ts +218 -43
  318. package/Tests/Types/Monitor/KubernetesTemplateGroupByKeys.test.ts +225 -0
  319. package/Tests/Types/Monitor/TemplateGroupByKeys.test.ts +296 -0
  320. package/Tests/Types/NetworkAutomation/RuleRunResult.test.ts +102 -0
  321. package/Tests/Types/NetworkAutomation/RuleRunResultDescribe.test.ts +145 -0
  322. package/Tests/Types/NetworkSite/SiteHealthRollupPolicy.test.ts +58 -0
  323. package/Tests/Types/SerializableObjectDictionaryImportCycle.test.ts +15 -0
  324. package/Tests/Types/Telemetry/LlmMetricConventions.test.ts +391 -0
  325. package/Tests/Types/Telemetry/TelemetrySearchQuery.test.ts +620 -0
  326. package/Tests/Types/WhatsApp/WhatsAppTemplates.test.ts +110 -0
  327. package/Tests/Types/Workspace/NotificationRuleConditionUtil.test.ts +76 -6
  328. package/Tests/Types/Workspace/NotificationRules/NotificationRuleCondition.test.ts +16 -4
  329. package/Tests/Types/Workspace/NotificationRules/OnCallDutyPolicyConditions.test.ts +669 -0
  330. package/Tests/UI/Components/DictionaryFilterOperatorWildcard.test.ts +175 -0
  331. package/Tests/UI/Components/IconOpticalSize.test.tsx +377 -0
  332. package/Tests/UI/MicrosoftTeams/MicrosoftTeamsChatsCardInstallGuidance.test.tsx +332 -0
  333. package/Tests/UI/MicrosoftTeams/MicrosoftTeamsInstallGuidanceContent.test.tsx +643 -0
  334. package/Tests/Utils/Monitor/InterfaceInventoryUtil.test.ts +824 -0
  335. package/Tests/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.test.ts +626 -0
  336. package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +718 -0
  337. package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +59 -0
  338. package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +287 -2
  339. package/Tests/Utils/NetworkDiscovery/DiscoveryImportEligibility.test.ts +73 -0
  340. package/Tests/Utils/NetworkDiscovery/PingMonitorBuilder.test.ts +317 -0
  341. package/Tests/Utils/NetworkDiscovery/RescanIntervalUtil.test.ts +262 -0
  342. package/Tests/Utils/NetworkDiscovery/ScanModeUtil.test.ts +474 -0
  343. package/Tests/Utils/NetworkDiscovery/SnmpScanConfigUtil.test.ts +2442 -0
  344. package/Tests/Utils/NetworkSite/SiteMaintenanceUtil.test.ts +188 -0
  345. package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +522 -0
  346. package/Tests/Utils/NetworkSite/SiteUptimeUtil.test.ts +694 -0
  347. package/Tests/Utils/SecurityEvent/ThreatIntel/StixPatternParser.test.ts +281 -0
  348. package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +87 -67
  349. package/Tests/Utils/Telemetry/LlmMetricQuery.test.ts +298 -0
  350. package/Types/API/URL.ts +45 -10
  351. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +8 -0
  352. package/Types/BaseDatabase/NotWildcard.ts +86 -0
  353. package/Types/BaseDatabase/Wildcard.ts +89 -0
  354. package/Types/BaseDatabase/WildcardPattern.ts +176 -0
  355. package/Types/Database/DateColumnValue.ts +184 -0
  356. package/Types/Database/TableColumn.ts +40 -5
  357. package/Types/Date.ts +37 -0
  358. package/Types/Email/EmailTemplateType.ts +1 -0
  359. package/Types/JSON.ts +8 -0
  360. package/Types/Log/LogQueryToFilter.ts +167 -129
  361. package/Types/Monitor/DockerAlertTemplates.ts +43 -12
  362. package/Types/Monitor/HostAlertTemplates.ts +31 -3
  363. package/Types/Monitor/KubernetesAlertTemplates.ts +98 -0
  364. package/Types/Monitor/MonitorStep.ts +49 -0
  365. package/Types/Monitor/PodmanAlertTemplates.ts +39 -12
  366. package/Types/Monitor/SnmpMonitor/CdpNeighbor.ts +14 -0
  367. package/Types/Monitor/SnmpMonitor/LldpNeighbor.ts +11 -0
  368. package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +11 -4
  369. package/Types/NetworkAutomation/RuleRunResult.ts +191 -2
  370. package/Types/NetworkSite/SiteHealthRollupPolicy.ts +96 -0
  371. package/Types/Permission.ts +411 -0
  372. package/Types/Probe/ProbeApiIngestResponse.ts +42 -0
  373. package/Types/SecurityEvent/ThreatIntelConstants.ts +118 -0
  374. package/Types/SerializableObjectDictionary.ts +8 -0
  375. package/Types/Telemetry/LlmConventions.ts +255 -0
  376. package/Types/Telemetry/LlmMetricConventions.ts +212 -7
  377. package/Types/Telemetry/SourceMap.ts +56 -0
  378. package/Types/Telemetry/TelemetrySearchQuery.ts +949 -0
  379. package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +12 -1
  380. package/UI/Components/Dictionary/DictionaryFilterOperator.ts +83 -0
  381. package/UI/Components/Icon/Icon.tsx +28 -1
  382. package/UI/Components/LogsViewer/components/LogSearchBar.tsx +26 -4
  383. package/UI/Components/LogsViewer/components/LogSearchHelp.tsx +34 -16
  384. package/UI/Components/TelemetryViewer/components/TelemetrySearchBar.tsx +15 -2
  385. package/Utils/Metrics/MetricExplorerUrl.ts +77 -15
  386. package/Utils/Monitor/InterfaceInventoryUtil.ts +251 -0
  387. package/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.ts +333 -0
  388. package/Utils/Monitor/NetworkTopologyUtil.ts +249 -28
  389. package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +14 -6
  390. package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +2 -0
  391. package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +49 -18
  392. package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +215 -0
  393. package/Utils/NetworkDiscovery/RescanIntervalUtil.ts +148 -0
  394. package/Utils/NetworkDiscovery/ScanModeUtil.ts +105 -0
  395. package/Utils/NetworkDiscovery/SnmpScanConfigUtil.ts +827 -0
  396. package/Utils/NetworkSite/SiteMaintenanceUtil.ts +110 -0
  397. package/Utils/NetworkSite/SiteStatusRollupUtil.ts +350 -19
  398. package/Utils/NetworkSite/SiteUptimeUtil.ts +422 -21
  399. package/Utils/SecurityEvent/ThreatIntel/StixPatternParser.ts +383 -0
  400. package/Utils/Telemetry/CrossSignalScope.ts +37 -39
  401. package/Utils/Telemetry/LlmMetricQuery.ts +83 -0
  402. package/build/dist/Models/AnalyticsModels/Index.js +2 -0
  403. package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
  404. package/build/dist/Models/AnalyticsModels/Span.js +89 -0
  405. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  406. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +325 -0
  407. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -0
  408. package/build/dist/Models/DatabaseModels/AlertSeverity.js +4 -1
  409. package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
  410. package/build/dist/Models/DatabaseModels/CephClusterFeed.js +648 -0
  411. package/build/dist/Models/DatabaseModels/CephClusterFeed.js.map +1 -0
  412. package/build/dist/Models/DatabaseModels/CloudResourceFeed.js +648 -0
  413. package/build/dist/Models/DatabaseModels/CloudResourceFeed.js.map +1 -0
  414. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +11 -0
  415. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
  416. package/build/dist/Models/DatabaseModels/DetectionRule.js +9 -3
  417. package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
  418. package/build/dist/Models/DatabaseModels/DockerHostFeed.js +648 -0
  419. package/build/dist/Models/DatabaseModels/DockerHostFeed.js.map +1 -0
  420. package/build/dist/Models/DatabaseModels/DockerSwarmClusterFeed.js +648 -0
  421. package/build/dist/Models/DatabaseModels/DockerSwarmClusterFeed.js.map +1 -0
  422. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +9 -3
  423. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
  424. package/build/dist/Models/DatabaseModels/HostFeed.js +648 -0
  425. package/build/dist/Models/DatabaseModels/HostFeed.js.map +1 -0
  426. package/build/dist/Models/DatabaseModels/IncidentSeverity.js +4 -1
  427. package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
  428. package/build/dist/Models/DatabaseModels/Index.js +22 -0
  429. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  430. package/build/dist/Models/DatabaseModels/KubernetesClusterFeed.js +648 -0
  431. package/build/dist/Models/DatabaseModels/KubernetesClusterFeed.js.map +1 -0
  432. package/build/dist/Models/DatabaseModels/Monitor.js +81 -0
  433. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  434. package/build/dist/Models/DatabaseModels/NetworkDevice.js +103 -7
  435. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  436. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +91 -6
  437. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
  438. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +276 -31
  439. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  440. package/build/dist/Models/DatabaseModels/NetworkSite.js +124 -1
  441. package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
  442. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js +1 -0
  443. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js.map +1 -1
  444. package/build/dist/Models/DatabaseModels/PodmanHostFeed.js +648 -0
  445. package/build/dist/Models/DatabaseModels/PodmanHostFeed.js.map +1 -0
  446. package/build/dist/Models/DatabaseModels/ProxmoxClusterFeed.js +648 -0
  447. package/build/dist/Models/DatabaseModels/ProxmoxClusterFeed.js.map +1 -0
  448. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +66 -0
  449. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  450. package/build/dist/Models/DatabaseModels/ServiceFeed.js +648 -0
  451. package/build/dist/Models/DatabaseModels/ServiceFeed.js.map +1 -0
  452. package/build/dist/Models/DatabaseModels/TelemetrySourceMap.js +496 -0
  453. package/build/dist/Models/DatabaseModels/TelemetrySourceMap.js.map +1 -0
  454. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +800 -0
  455. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -0
  456. package/build/dist/Models/DatabaseModels/UserOnCallLog.js +1 -0
  457. package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
  458. package/build/dist/Models/DatabaseModels/UserTotpAuth.js +1 -0
  459. package/build/dist/Models/DatabaseModels/UserTotpAuth.js.map +1 -1
  460. package/build/dist/Models/DatabaseModels/UserWebAuthn.js +1 -0
  461. package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
  462. package/build/dist/Server/API/AlertAPI.js +18 -1
  463. package/build/dist/Server/API/AlertAPI.js.map +1 -1
  464. package/build/dist/Server/API/BaseAPI.js +11 -20
  465. package/build/dist/Server/API/BaseAPI.js.map +1 -1
  466. package/build/dist/Server/API/IncidentAPI.js +35 -1
  467. package/build/dist/Server/API/IncidentAPI.js.map +1 -1
  468. package/build/dist/Server/API/IncidentEpisodeAPI.js +18 -1
  469. package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -1
  470. package/build/dist/Server/API/MicrosoftTeamsAPI.js +30 -2
  471. package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
  472. package/build/dist/Server/API/ScheduledMaintenanceAPI.js +18 -1
  473. package/build/dist/Server/API/ScheduledMaintenanceAPI.js.map +1 -1
  474. package/build/dist/Server/API/SlackAPI.js +45 -2
  475. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  476. package/build/dist/Server/API/TelemetryAPI.js +100 -35
  477. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  478. package/build/dist/Server/API/UserOnCallLogTimelineAPI.js +64 -59
  479. package/build/dist/Server/API/UserOnCallLogTimelineAPI.js.map +1 -1
  480. package/build/dist/Server/API/UserTotpAuthAPI.js +65 -1
  481. package/build/dist/Server/API/UserTotpAuthAPI.js.map +1 -1
  482. package/build/dist/Server/API/UserWebAuthnAPI.js +42 -1
  483. package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
  484. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.js +26 -0
  485. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.js.map +1 -0
  486. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.js +22 -0
  487. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.js.map +1 -0
  488. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.js +88 -0
  489. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.js.map +1 -0
  490. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.js +39 -0
  491. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.js.map +1 -0
  492. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.js +34 -0
  493. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.js.map +1 -0
  494. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.js +32 -0
  495. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.js.map +1 -0
  496. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.js +61 -0
  497. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.js.map +1 -0
  498. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.js +23 -0
  499. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.js.map +1 -0
  500. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.js +179 -0
  501. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.js.map +1 -0
  502. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +18 -0
  503. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  504. package/build/dist/Server/Middleware/IdentityRateLimit.js +40 -3
  505. package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
  506. package/build/dist/Server/Middleware/SlackAuthorization.js +58 -7
  507. package/build/dist/Server/Middleware/SlackAuthorization.js.map +1 -1
  508. package/build/dist/Server/Services/AIService.js +177 -30
  509. package/build/dist/Server/Services/AIService.js.map +1 -1
  510. package/build/dist/Server/Services/CephClusterFeedService.js +89 -0
  511. package/build/dist/Server/Services/CephClusterFeedService.js.map +1 -0
  512. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +27 -3
  513. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
  514. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +21 -0
  515. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
  516. package/build/dist/Server/Services/CephClusterOwnerTeamService.js +120 -0
  517. package/build/dist/Server/Services/CephClusterOwnerTeamService.js.map +1 -1
  518. package/build/dist/Server/Services/CephClusterOwnerUserService.js +113 -0
  519. package/build/dist/Server/Services/CephClusterOwnerUserService.js.map +1 -1
  520. package/build/dist/Server/Services/CephClusterService.js +175 -1
  521. package/build/dist/Server/Services/CephClusterService.js.map +1 -1
  522. package/build/dist/Server/Services/CloudResourceFeedService.js +89 -0
  523. package/build/dist/Server/Services/CloudResourceFeedService.js.map +1 -0
  524. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +27 -3
  525. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
  526. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +28 -3
  527. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
  528. package/build/dist/Server/Services/CloudResourceOwnerTeamService.js +120 -0
  529. package/build/dist/Server/Services/CloudResourceOwnerTeamService.js.map +1 -1
  530. package/build/dist/Server/Services/CloudResourceOwnerUserService.js +113 -0
  531. package/build/dist/Server/Services/CloudResourceOwnerUserService.js.map +1 -1
  532. package/build/dist/Server/Services/CloudResourceService.js +177 -1
  533. package/build/dist/Server/Services/CloudResourceService.js.map +1 -1
  534. package/build/dist/Server/Services/DatabaseService.js +201 -0
  535. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  536. package/build/dist/Server/Services/DockerHostFeedService.js +89 -0
  537. package/build/dist/Server/Services/DockerHostFeedService.js.map +1 -0
  538. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +27 -3
  539. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
  540. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +21 -0
  541. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
  542. package/build/dist/Server/Services/DockerHostOwnerTeamService.js +120 -0
  543. package/build/dist/Server/Services/DockerHostOwnerTeamService.js.map +1 -1
  544. package/build/dist/Server/Services/DockerHostOwnerUserService.js +113 -0
  545. package/build/dist/Server/Services/DockerHostOwnerUserService.js.map +1 -1
  546. package/build/dist/Server/Services/DockerHostService.js +177 -1
  547. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  548. package/build/dist/Server/Services/DockerSwarmClusterFeedService.js +90 -0
  549. package/build/dist/Server/Services/DockerSwarmClusterFeedService.js.map +1 -0
  550. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +27 -3
  551. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
  552. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +21 -0
  553. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
  554. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js +120 -0
  555. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js.map +1 -1
  556. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js +113 -0
  557. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js.map +1 -1
  558. package/build/dist/Server/Services/DockerSwarmClusterService.js +175 -1
  559. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
  560. package/build/dist/Server/Services/EnterpriseLicenseService.js +40 -30
  561. package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
  562. package/build/dist/Server/Services/ExceptionAggregationService.js +8 -2
  563. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  564. package/build/dist/Server/Services/HostFeedService.js +89 -0
  565. package/build/dist/Server/Services/HostFeedService.js.map +1 -0
  566. package/build/dist/Server/Services/HostLabelRuleEngineService.js +27 -3
  567. package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
  568. package/build/dist/Server/Services/HostOwnerRuleEngineService.js +21 -0
  569. package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
  570. package/build/dist/Server/Services/HostOwnerTeamService.js +120 -0
  571. package/build/dist/Server/Services/HostOwnerTeamService.js.map +1 -1
  572. package/build/dist/Server/Services/HostOwnerUserService.js +113 -0
  573. package/build/dist/Server/Services/HostOwnerUserService.js.map +1 -1
  574. package/build/dist/Server/Services/HostService.js +175 -1
  575. package/build/dist/Server/Services/HostService.js.map +1 -1
  576. package/build/dist/Server/Services/IncidentService.js +10 -0
  577. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  578. package/build/dist/Server/Services/Index.js +24 -0
  579. package/build/dist/Server/Services/Index.js.map +1 -1
  580. package/build/dist/Server/Services/KubernetesClusterFeedService.js +89 -0
  581. package/build/dist/Server/Services/KubernetesClusterFeedService.js.map +1 -0
  582. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +27 -3
  583. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
  584. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +21 -0
  585. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
  586. package/build/dist/Server/Services/KubernetesClusterOwnerTeamService.js +120 -0
  587. package/build/dist/Server/Services/KubernetesClusterOwnerTeamService.js.map +1 -1
  588. package/build/dist/Server/Services/KubernetesClusterOwnerUserService.js +113 -0
  589. package/build/dist/Server/Services/KubernetesClusterOwnerUserService.js.map +1 -1
  590. package/build/dist/Server/Services/KubernetesClusterService.js +177 -1
  591. package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
  592. package/build/dist/Server/Services/LogAggregationService.js +19 -196
  593. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  594. package/build/dist/Server/Services/MetricAggregationService.js +59 -0
  595. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  596. package/build/dist/Server/Services/MonitorService.js +115 -13
  597. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  598. package/build/dist/Server/Services/MonitorTemplateService.js +86 -0
  599. package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
  600. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +561 -67
  601. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  602. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +130 -16
  603. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
  604. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +850 -8
  605. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
  606. package/build/dist/Server/Services/NetworkDeviceService.js +594 -5
  607. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  608. package/build/dist/Server/Services/NetworkInterfaceService.js +306 -0
  609. package/build/dist/Server/Services/NetworkInterfaceService.js.map +1 -1
  610. package/build/dist/Server/Services/NetworkSiteService.js +408 -47
  611. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
  612. package/build/dist/Server/Services/PodmanHostFeedService.js +89 -0
  613. package/build/dist/Server/Services/PodmanHostFeedService.js.map +1 -0
  614. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +27 -3
  615. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
  616. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +21 -0
  617. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
  618. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js +120 -0
  619. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js.map +1 -1
  620. package/build/dist/Server/Services/PodmanHostOwnerUserService.js +113 -0
  621. package/build/dist/Server/Services/PodmanHostOwnerUserService.js.map +1 -1
  622. package/build/dist/Server/Services/PodmanHostService.js +177 -1
  623. package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
  624. package/build/dist/Server/Services/ProjectService.js +40 -30
  625. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  626. package/build/dist/Server/Services/ProxmoxClusterFeedService.js +89 -0
  627. package/build/dist/Server/Services/ProxmoxClusterFeedService.js.map +1 -0
  628. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +27 -3
  629. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
  630. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +21 -0
  631. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
  632. package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js +120 -0
  633. package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js.map +1 -1
  634. package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js +113 -0
  635. package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js.map +1 -1
  636. package/build/dist/Server/Services/ProxmoxClusterService.js +175 -1
  637. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
  638. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +56 -0
  639. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
  640. package/build/dist/Server/Services/ServiceFeedService.js +89 -0
  641. package/build/dist/Server/Services/ServiceFeedService.js.map +1 -0
  642. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +27 -3
  643. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
  644. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +24 -0
  645. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
  646. package/build/dist/Server/Services/ServiceOwnerTeamService.js +120 -0
  647. package/build/dist/Server/Services/ServiceOwnerTeamService.js.map +1 -1
  648. package/build/dist/Server/Services/ServiceOwnerUserService.js +113 -0
  649. package/build/dist/Server/Services/ServiceOwnerUserService.js.map +1 -1
  650. package/build/dist/Server/Services/ServiceService.js +173 -2
  651. package/build/dist/Server/Services/ServiceService.js.map +1 -1
  652. package/build/dist/Server/Services/StatusPageSubscriberService.js +7 -0
  653. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  654. package/build/dist/Server/Services/TelemetryAttributeService.js +9 -3
  655. package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
  656. package/build/dist/Server/Services/TelemetrySourceMapService.js +265 -0
  657. package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -0
  658. package/build/dist/Server/Services/ThreatIntelFeedService.js +157 -0
  659. package/build/dist/Server/Services/ThreatIntelFeedService.js.map +1 -0
  660. package/build/dist/Server/Services/ThreatIntelIndicatorService.js +276 -0
  661. package/build/dist/Server/Services/ThreatIntelIndicatorService.js.map +1 -0
  662. package/build/dist/Server/Services/TraceAggregationService.js +62 -6
  663. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  664. package/build/dist/Server/Services/UserService.js +22 -13
  665. package/build/dist/Server/Services/UserService.js.map +1 -1
  666. package/build/dist/Server/Services/UserTwoFactorBackupCodeService.js +120 -0
  667. package/build/dist/Server/Services/UserTwoFactorBackupCodeService.js.map +1 -1
  668. package/build/dist/Server/Services/UserWebhookService.js +11 -2
  669. package/build/dist/Server/Services/UserWebhookService.js.map +1 -1
  670. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +12 -1
  671. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
  672. package/build/dist/Server/Types/Database/AggregateBy.js +2 -0
  673. package/build/dist/Server/Types/Database/AggregateBy.js.map +1 -0
  674. package/build/dist/Server/Types/Database/AggregateResultUtil.js +90 -0
  675. package/build/dist/Server/Types/Database/AggregateResultUtil.js.map +1 -0
  676. package/build/dist/Server/Types/Database/JSONColumnQuery.js +14 -0
  677. package/build/dist/Server/Types/Database/JSONColumnQuery.js.map +1 -1
  678. package/build/dist/Server/Types/Database/QueryHelper.js +42 -0
  679. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  680. package/build/dist/Server/Types/Database/QueryUtil.js +18 -0
  681. package/build/dist/Server/Types/Database/QueryUtil.js.map +1 -1
  682. package/build/dist/Server/Types/Workflow/Components/API/Utils.js +10 -1
  683. package/build/dist/Server/Types/Workflow/Components/API/Utils.js.map +1 -1
  684. package/build/dist/Server/Types/Workflow/Components/JavaScript.js +8 -0
  685. package/build/dist/Server/Types/Workflow/Components/JavaScript.js.map +1 -1
  686. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +8 -0
  687. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -1
  688. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +15 -0
  689. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
  690. package/build/dist/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.js +266 -0
  691. package/build/dist/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.js.map +1 -0
  692. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +134 -0
  693. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  694. package/build/dist/Server/Utils/DataSource/HttpFetch.js +8 -0
  695. package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
  696. package/build/dist/Server/Utils/Database/RelationIdUtil.js +31 -0
  697. package/build/dist/Server/Utils/Database/RelationIdUtil.js.map +1 -1
  698. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js +26 -8
  699. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js.map +1 -1
  700. package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js +42 -17
  701. package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js.map +1 -1
  702. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +9 -1
  703. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  704. package/build/dist/Server/Utils/Monitor/Criteria/SyntheticMonitor.js +15 -2
  705. package/build/dist/Server/Utils/Monitor/Criteria/SyntheticMonitor.js.map +1 -1
  706. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +386 -271
  707. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  708. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +278 -64
  709. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  710. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +469 -350
  711. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  712. package/build/dist/Server/Utils/Monitor/MonitorResource.js +183 -44
  713. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  714. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +46 -3
  715. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
  716. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +18 -91
  717. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  718. package/build/dist/Server/Utils/Monitor/PerEntityCriteriaFanOut.js +194 -0
  719. package/build/dist/Server/Utils/Monitor/PerEntityCriteriaFanOut.js.map +1 -0
  720. package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js +332 -0
  721. package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js.map +1 -0
  722. package/build/dist/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.js +279 -0
  723. package/build/dist/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.js.map +1 -0
  724. package/build/dist/Server/Utils/OnCallNotificationContext.js +415 -0
  725. package/build/dist/Server/Utils/OnCallNotificationContext.js.map +1 -0
  726. package/build/dist/Server/Utils/PrivateNetworkWebhookConfig.js +424 -0
  727. package/build/dist/Server/Utils/PrivateNetworkWebhookConfig.js.map +1 -0
  728. package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js +108 -0
  729. package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js.map +1 -0
  730. package/build/dist/Server/Utils/Response.js +12 -1
  731. package/build/dist/Server/Utils/Response.js.map +1 -1
  732. package/build/dist/Server/Utils/SSRFProtection.js +160 -58
  733. package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
  734. package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js +89 -0
  735. package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js.map +1 -0
  736. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +75 -234
  737. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
  738. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +41 -16
  739. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
  740. package/build/dist/Server/Utils/SecurityEvent/SecurityEventAlerting.js +217 -0
  741. package/build/dist/Server/Utils/SecurityEvent/SecurityEventAlerting.js.map +1 -0
  742. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.js +103 -0
  743. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.js.map +1 -0
  744. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.js +168 -0
  745. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.js.map +1 -0
  746. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js +527 -0
  747. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js.map +1 -0
  748. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js +376 -0
  749. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js.map +1 -0
  750. package/build/dist/Server/Utils/StartServer.js +70 -44
  751. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  752. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js +3 -0
  753. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js.map +1 -1
  754. package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js +52 -3
  755. package/build/dist/Server/Utils/Telemetry/LlmMetricSpend.js.map +1 -1
  756. package/build/dist/Server/Utils/Telemetry/LlmSpan.js +24 -1
  757. package/build/dist/Server/Utils/Telemetry/LlmSpan.js.map +1 -1
  758. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +327 -0
  759. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -0
  760. package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js +84 -0
  761. package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js.map +1 -0
  762. package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
  763. package/build/dist/Server/Utils/VM/VMRunner.js +10 -1
  764. package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
  765. package/build/dist/Server/Utils/VendorAssets.js +29 -0
  766. package/build/dist/Server/Utils/VendorAssets.js.map +1 -1
  767. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +121 -6
  768. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  769. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js +0 -10
  770. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js.map +1 -1
  771. package/build/dist/Types/API/URL.js +40 -10
  772. package/build/dist/Types/API/URL.js.map +1 -1
  773. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +8 -0
  774. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
  775. package/build/dist/Types/BaseDatabase/NotWildcard.js +72 -0
  776. package/build/dist/Types/BaseDatabase/NotWildcard.js.map +1 -0
  777. package/build/dist/Types/BaseDatabase/Wildcard.js +75 -0
  778. package/build/dist/Types/BaseDatabase/Wildcard.js.map +1 -0
  779. package/build/dist/Types/BaseDatabase/WildcardPattern.js +137 -0
  780. package/build/dist/Types/BaseDatabase/WildcardPattern.js.map +1 -0
  781. package/build/dist/Types/Database/DateColumnValue.js +125 -0
  782. package/build/dist/Types/Database/DateColumnValue.js.map +1 -0
  783. package/build/dist/Types/Database/TableColumn.js +18 -2
  784. package/build/dist/Types/Database/TableColumn.js.map +1 -1
  785. package/build/dist/Types/Date.js +31 -0
  786. package/build/dist/Types/Date.js.map +1 -1
  787. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  788. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  789. package/build/dist/Types/JSON.js +2 -0
  790. package/build/dist/Types/JSON.js.map +1 -1
  791. package/build/dist/Types/Log/LogQueryToFilter.js +111 -108
  792. package/build/dist/Types/Log/LogQueryToFilter.js.map +1 -1
  793. package/build/dist/Types/Monitor/DockerAlertTemplates.js +40 -16
  794. package/build/dist/Types/Monitor/DockerAlertTemplates.js.map +1 -1
  795. package/build/dist/Types/Monitor/HostAlertTemplates.js +29 -7
  796. package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -1
  797. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +98 -4
  798. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
  799. package/build/dist/Types/Monitor/MonitorStep.js +40 -0
  800. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  801. package/build/dist/Types/Monitor/PodmanAlertTemplates.js +36 -16
  802. package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -1
  803. package/build/dist/Types/NetworkAutomation/RuleRunResult.js +90 -0
  804. package/build/dist/Types/NetworkAutomation/RuleRunResult.js.map +1 -1
  805. package/build/dist/Types/NetworkSite/SiteHealthRollupPolicy.js +84 -0
  806. package/build/dist/Types/NetworkSite/SiteHealthRollupPolicy.js.map +1 -0
  807. package/build/dist/Types/Permission.js +354 -0
  808. package/build/dist/Types/Permission.js.map +1 -1
  809. package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js +100 -0
  810. package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js.map +1 -0
  811. package/build/dist/Types/SerializableObjectDictionary.js +8 -0
  812. package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
  813. package/build/dist/Types/Telemetry/LlmConventions.js +236 -0
  814. package/build/dist/Types/Telemetry/LlmConventions.js.map +1 -1
  815. package/build/dist/Types/Telemetry/LlmMetricConventions.js +197 -5
  816. package/build/dist/Types/Telemetry/LlmMetricConventions.js.map +1 -1
  817. package/build/dist/Types/Telemetry/SourceMap.js +9 -0
  818. package/build/dist/Types/Telemetry/SourceMap.js.map +1 -0
  819. package/build/dist/Types/Telemetry/TelemetrySearchQuery.js +661 -0
  820. package/build/dist/Types/Telemetry/TelemetrySearchQuery.js.map +1 -0
  821. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +12 -1
  822. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
  823. package/build/dist/UI/Components/Dictionary/DictionaryFilterOperator.js +67 -0
  824. package/build/dist/UI/Components/Dictionary/DictionaryFilterOperator.js.map +1 -1
  825. package/build/dist/UI/Components/Icon/Icon.js +28 -1
  826. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  827. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js +25 -4
  828. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js.map +1 -1
  829. package/build/dist/UI/Components/LogsViewer/components/LogSearchHelp.js +36 -16
  830. package/build/dist/UI/Components/LogsViewer/components/LogSearchHelp.js.map +1 -1
  831. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js +14 -2
  832. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js.map +1 -1
  833. package/build/dist/Utils/Metrics/MetricExplorerUrl.js +54 -9
  834. package/build/dist/Utils/Metrics/MetricExplorerUrl.js.map +1 -1
  835. package/build/dist/Utils/Monitor/InterfaceInventoryUtil.js +128 -0
  836. package/build/dist/Utils/Monitor/InterfaceInventoryUtil.js.map +1 -0
  837. package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js +190 -0
  838. package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js.map +1 -0
  839. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +206 -28
  840. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  841. package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +14 -7
  842. package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -1
  843. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
  844. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +34 -18
  845. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
  846. package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +163 -0
  847. package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -0
  848. package/build/dist/Utils/NetworkDiscovery/RescanIntervalUtil.js +99 -0
  849. package/build/dist/Utils/NetworkDiscovery/RescanIntervalUtil.js.map +1 -0
  850. package/build/dist/Utils/NetworkDiscovery/ScanModeUtil.js +85 -0
  851. package/build/dist/Utils/NetworkDiscovery/ScanModeUtil.js.map +1 -0
  852. package/build/dist/Utils/NetworkDiscovery/SnmpScanConfigUtil.js +560 -0
  853. package/build/dist/Utils/NetworkDiscovery/SnmpScanConfigUtil.js.map +1 -0
  854. package/build/dist/Utils/NetworkSite/SiteMaintenanceUtil.js +56 -0
  855. package/build/dist/Utils/NetworkSite/SiteMaintenanceUtil.js.map +1 -0
  856. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +185 -10
  857. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
  858. package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js +248 -21
  859. package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js.map +1 -1
  860. package/build/dist/Utils/SecurityEvent/ThreatIntel/StixPatternParser.js +255 -0
  861. package/build/dist/Utils/SecurityEvent/ThreatIntel/StixPatternParser.js.map +1 -0
  862. package/build/dist/Utils/Telemetry/CrossSignalScope.js +27 -30
  863. package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
  864. package/build/dist/Utils/Telemetry/LlmMetricQuery.js +57 -1
  865. package/build/dist/Utils/Telemetry/LlmMetricQuery.js.map +1 -1
  866. package/package.json +2 -1
  867. package/Tests/Types/Log/LogQueryParser.test.ts +0 -186
  868. package/Types/Log/LogQueryParser.ts +0 -252
  869. package/build/dist/Types/Log/LogQueryParser.js +0 -200
  870. package/build/dist/Types/Log/LogQueryParser.js.map +0 -1
@@ -61,15 +61,18 @@ export default class MonitorIncident {
61
61
  },
62
62
  });
63
63
  // check if should close the incident.
64
+ const resolvedIncidentIds = new Set();
64
65
  for (const openIncident of openIncidents) {
65
66
  const shouldClose = this.shouldCloseIncident({
66
67
  openIncident,
67
68
  autoResolveCriteriaInstanceIdIncidentIdsDictionary: input.autoResolveCriteriaInstanceIdIncidentIdsDictionary,
68
69
  criteriaInstance: input.criteriaInstance,
69
70
  breachingSeriesFingerprints: input.breachingSeriesFingerprints,
71
+ breachingSeriesFingerprintsByCriteriaId: input.breachingSeriesFingerprintsByCriteriaId,
70
72
  disableSeriesAbsenceResolution: input.disableSeriesAbsenceResolution,
71
73
  });
72
74
  if (shouldClose) {
75
+ resolvedIncidentIds.add(openIncident.id.toString());
73
76
  // then resolve incident.
74
77
  await this.resolveOpenIncident({
75
78
  openIncident: openIncident,
@@ -88,7 +91,19 @@ export default class MonitorIncident {
88
91
  });
89
92
  }
90
93
  }
91
- return openIncidents;
94
+ /*
95
+ * Return the incidents still open AFTER this pass. The create path
96
+ * dedupes against this list, and an incident this pass just resolved
97
+ * must not count as "already active" — that combination resolved a
98
+ * stale whole-monitor incident and then refused to create the
99
+ * per-series incidents meant to replace it.
100
+ */
101
+ if (resolvedIncidentIds.size === 0) {
102
+ return openIncidents;
103
+ }
104
+ return openIncidents.filter((openIncident) => {
105
+ return !resolvedIncidentIds.has(openIncident.id.toString());
106
+ });
92
107
  }
93
108
  /**
94
109
  * Event-driven (incoming-request / webhook) resolution: resolve the
@@ -163,7 +178,7 @@ export default class MonitorIncident {
163
178
  }
164
179
  }
165
180
  static async criteriaMetCreateIncidentsAndUpdateMonitorStatus(input) {
166
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16;
181
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19;
167
182
  const incidentLogAttributes = {
168
183
  projectId: (_a = input.monitor.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
169
184
  };
@@ -180,19 +195,37 @@ export default class MonitorIncident {
180
195
  }))
181
196
  : undefined;
182
197
  // check active incidents and if there are open incidents, do not cretae anothr incident.
183
- const openIncidents = await this.checkOpenIncidentsAndCloseIfResolved({
184
- monitorId: input.monitor.id,
185
- autoResolveCriteriaInstanceIdIncidentIdsDictionary: input.autoResolveCriteriaInstanceIdIncidentIdsDictionary,
186
- rootCause: input.rootCause,
187
- criteriaInstance: input.criteriaInstance,
188
- dataToProcess: input.dataToProcess,
189
- evaluationSummary: input.evaluationSummary,
190
- breachingSeriesFingerprints,
191
- disableSeriesAbsenceResolution: input.disableSeriesAbsenceResolution,
192
- });
198
+ const openIncidents = input.openIncidents !== undefined
199
+ ? input.openIncidents
200
+ : await this.checkOpenIncidentsAndCloseIfResolved({
201
+ monitorId: input.monitor.id,
202
+ autoResolveCriteriaInstanceIdIncidentIdsDictionary: input.autoResolveCriteriaInstanceIdIncidentIdsDictionary,
203
+ rootCause: input.rootCause,
204
+ criteriaInstance: input.criteriaInstance,
205
+ dataToProcess: input.dataToProcess,
206
+ evaluationSummary: input.evaluationSummary,
207
+ breachingSeriesFingerprints,
208
+ breachingSeriesFingerprintsByCriteriaId: input.breachingSeriesFingerprintsByCriteriaId,
209
+ disableSeriesAbsenceResolution: input.disableSeriesAbsenceResolution,
210
+ });
193
211
  if (!((_c = input.criteriaInstance.data) === null || _c === void 0 ? void 0 : _c.createIncidents)) {
194
212
  return;
195
213
  }
214
+ /*
215
+ * Checked once, up front. It used to be tested deep inside the
216
+ * template x series loops with a `return`, which on a grouped
217
+ * monitor abandoned every series after the first.
218
+ */
219
+ if (DisableAutomaticIncidentCreation) {
220
+ (_d = input.evaluationSummary) === null || _d === void 0 ? void 0 : _d.events.push({
221
+ type: "incident-skipped",
222
+ title: "Incident creation skipped",
223
+ message: "Automatic incident creation is disabled by environment configuration.",
224
+ relatedCriteriaId: (_e = input.criteriaInstance.data) === null || _e === void 0 ? void 0 : _e.id,
225
+ at: OneUptimeDate.getCurrentDate(),
226
+ });
227
+ return;
228
+ }
196
229
  /*
197
230
  * Alert-dependency suppression: a parent monitor is in a suppressing
198
231
  * status (offline by default), so skip creating any incident for this
@@ -200,14 +233,14 @@ export default class MonitorIncident {
200
233
  * purpose — an incident raised before the parent went down must still
201
234
  * resolve normally; only new creation is silenced.
202
235
  */
203
- if ((_d = input.dependencySuppression) === null || _d === void 0 ? void 0 : _d.isSuppressed) {
236
+ if ((_f = input.dependencySuppression) === null || _f === void 0 ? void 0 : _f.isSuppressed) {
204
237
  const suppressionReason = MonitorDependencySuppression.buildSuppressionReason(input.dependencySuppression.suppressingParents);
205
- logger.debug(`${(_e = input.monitor.id) === null || _e === void 0 ? void 0 : _e.toString()} - Skipping incident creation: ${suppressionReason}.`, incidentLogAttributes);
206
- (_f = input.evaluationSummary) === null || _f === void 0 ? void 0 : _f.events.push({
238
+ logger.debug(`${(_g = input.monitor.id) === null || _g === void 0 ? void 0 : _g.toString()} - Skipping incident creation: ${suppressionReason}.`, incidentLogAttributes);
239
+ (_h = input.evaluationSummary) === null || _h === void 0 ? void 0 : _h.events.push({
207
240
  type: "incident-skipped",
208
241
  title: "Incident suppressed by monitor dependency",
209
242
  message: `Skipped creating incidents because ${suppressionReason}. This monitor's status still updates normally; open incidents still auto-resolve.`,
210
- relatedCriteriaId: (_g = input.criteriaInstance.data) === null || _g === void 0 ? void 0 : _g.id,
243
+ relatedCriteriaId: (_j = input.criteriaInstance.data) === null || _j === void 0 ? void 0 : _j.id,
211
244
  at: OneUptimeDate.getCurrentDate(),
212
245
  });
213
246
  return;
@@ -247,320 +280,337 @@ export default class MonitorIncident {
247
280
  * created incident's owners alongside the criteria-configured ones.
248
281
  */
249
282
  let networkDeviceOwners = null;
250
- for (const criteriaIncident of ((_h = input.criteriaInstance.data) === null || _h === void 0 ? void 0 : _h.incidents) ||
283
+ for (const criteriaIncident of ((_k = input.criteriaInstance.data) === null || _k === void 0 ? void 0 : _k.incidents) ||
251
284
  []) {
252
285
  for (const seriesMatch of seriesToProcess) {
253
- const seriesFingerprint = seriesMatch === null || seriesMatch === void 0 ? void 0 : seriesMatch.fingerprint;
254
- const seriesLabels = seriesMatch === null || seriesMatch === void 0 ? void 0 : seriesMatch.labels;
255
- const seriesRootCause = (seriesMatch === null || seriesMatch === void 0 ? void 0 : seriesMatch.rootCause) || input.rootCause;
256
- /*
257
- * Per-series scheduled-maintenance suppression: this series'
258
- * resource is inside an ongoing maintenance window, so skip
259
- * creating an incident for it. Other series on the same monitor
260
- * whose resources are not under maintenance still get incidents.
261
- * Note: we only suppress *new* creation — any incident already
262
- * open for this series is left to the normal resolve path
263
- * (checkOpenIncidentsAndCloseIfResolved still sees the full
264
- * breaching set), so a real incident raised before maintenance
265
- * is not silently closed.
266
- */
267
- if (seriesFingerprint &&
268
- ((_j = input.suppressedSeriesFingerprints) === null || _j === void 0 ? void 0 : _j.has(seriesFingerprint))) {
269
- logger.debug(`${(_k = input.monitor.id) === null || _k === void 0 ? void 0 : _k.toString()} - Skipping incident for series ${seriesFingerprint}: its resource is under an active scheduled maintenance window.`, incidentLogAttributes);
270
- (_l = input.evaluationSummary) === null || _l === void 0 ? void 0 : _l.events.push({
271
- type: "incident-skipped",
272
- title: "Incident suppressed by scheduled maintenance",
273
- message: "Skipped creating an incident because the resource for this series is under an active scheduled maintenance window.",
274
- relatedCriteriaId: (_m = input.criteriaInstance.data) === null || _m === void 0 ? void 0 : _m.id,
275
- at: OneUptimeDate.getCurrentDate(),
276
- });
277
- continue;
278
- }
279
- /*
280
- * Dedupe match must mirror the create path below (which sets
281
- * `createdCriteriaId` / `createdIncidentTemplateId` only when the
282
- * corresponding id is present). A criteria incident template can be
283
- * missing its `id` (legacy/API-authored criteria), so guard the
284
- * `.toString()` with `?.` — an unguarded call previously threw
285
- * "Cannot read properties of undefined (reading 'toString')" here and
286
- * failed the probe/telemetry queue job on every cycle for the affected
287
- * monitor. Normalise both sides to `undefined` on missing so a created
288
- * incident (whose template id was left NULL) still matches itself next
289
- * cycle instead of being recreated as a duplicate.
290
- */
291
- const alreadyOpenIncident = openIncidents.find((incident) => {
292
- var _a, _b, _c;
293
- return ((incident.createdCriteriaId || undefined) ===
294
- (((_b = (_a = input.criteriaInstance.data) === null || _a === void 0 ? void 0 : _a.id) === null || _b === void 0 ? void 0 : _b.toString()) || undefined) &&
295
- (incident.createdIncidentTemplateId || undefined) ===
296
- (((_c = criteriaIncident.id) === null || _c === void 0 ? void 0 : _c.toString()) || undefined) &&
297
- (incident.seriesFingerprint || undefined) === seriesFingerprint);
298
- });
299
- const hasAlreadyOpenIncident = Boolean(alreadyOpenIncident);
300
- logger.debug(`${(_o = input.monitor.id) === null || _o === void 0 ? void 0 : _o.toString()} - Open Incident ${(_p = alreadyOpenIncident === null || alreadyOpenIncident === void 0 ? void 0 : alreadyOpenIncident.id) === null || _p === void 0 ? void 0 : _p.toString()}`, incidentLogAttributes);
301
- logger.debug(`${(_q = input.monitor.id) === null || _q === void 0 ? void 0 : _q.toString()} - Has open incident ${hasAlreadyOpenIncident}`, incidentLogAttributes);
302
- if (hasAlreadyOpenIncident) {
286
+ try {
287
+ const seriesFingerprint = seriesMatch === null || seriesMatch === void 0 ? void 0 : seriesMatch.fingerprint;
288
+ const seriesLabels = seriesMatch === null || seriesMatch === void 0 ? void 0 : seriesMatch.labels;
289
+ const seriesRootCause = (seriesMatch === null || seriesMatch === void 0 ? void 0 : seriesMatch.rootCause) || input.rootCause;
303
290
  /*
304
- * Use the open incident's already-rendered title when
305
- * available the template (`criteriaIncident.title`) still
306
- * contains unresolved `{{…}}` placeholders because it's the
307
- * criterion's template string, not the instance's rendered
308
- * output. Falling back to the template only when the open
309
- * incident somehow has no title.
291
+ * Per-series scheduled-maintenance suppression: this series'
292
+ * resource is inside an ongoing maintenance window, so skip
293
+ * creating an incident for it. Other series on the same monitor
294
+ * whose resources are not under maintenance still get incidents.
295
+ * Note: we only suppress *new* creation any incident already
296
+ * open for this series is left to the normal resolve path
297
+ * (checkOpenIncidentsAndCloseIfResolved still sees the full
298
+ * breaching set), so a real incident raised before maintenance
299
+ * is not silently closed.
310
300
  */
311
- const renderedTitle = (alreadyOpenIncident === null || alreadyOpenIncident === void 0 ? void 0 : alreadyOpenIncident.title) || criteriaIncident.title;
312
- (_r = input.evaluationSummary) === null || _r === void 0 ? void 0 : _r.events.push({
313
- type: "incident-skipped",
314
- title: `Incident already active: ${renderedTitle}`,
315
- message: "Skipped creating a new incident because an active incident exists for this criteria.",
316
- relatedCriteriaId: (_s = input.criteriaInstance.data) === null || _s === void 0 ? void 0 : _s.id,
317
- relatedIncidentId: (_t = alreadyOpenIncident === null || alreadyOpenIncident === void 0 ? void 0 : alreadyOpenIncident.id) === null || _t === void 0 ? void 0 : _t.toString(),
318
- relatedIncidentNumber: alreadyOpenIncident === null || alreadyOpenIncident === void 0 ? void 0 : alreadyOpenIncident.incidentNumber,
319
- relatedIncidentNumberWithPrefix: alreadyOpenIncident === null || alreadyOpenIncident === void 0 ? void 0 : alreadyOpenIncident.incidentNumberWithPrefix,
320
- at: OneUptimeDate.getCurrentDate(),
321
- });
322
- continue;
323
- }
324
- logger.debug(`${(_u = input.monitor.id) === null || _u === void 0 ? void 0 : _u.toString()} - Create incident.`, incidentLogAttributes);
325
- const incident = new Incident();
326
- const storageMap = MonitorTemplateUtil.buildTemplateStorageMap({
327
- monitorType: input.monitor.monitorType,
328
- dataToProcess: input.dataToProcess,
329
- monitor: input.monitor,
330
- seriesLabels,
331
- });
332
- incident.title = MonitorTemplateUtil.processTemplateString({
333
- value: criteriaIncident.title,
334
- storageMap,
335
- });
336
- incident.description = MonitorTemplateUtil.processTemplateString({
337
- value: criteriaIncident.description,
338
- storageMap,
339
- });
340
- /*
341
- * Resolve the incident severity. `criteriaIncident.incidentSeverityId`
342
- * can be a truthy-but-EMPTY ObjectID (id === "") — a stored
343
- * `{"_type":"ObjectID","value":""}` deserializes to `new ObjectID("")`,
344
- * which is an object so `!incidentSeverityId` is false. That empty id
345
- * serializes to "" for the `uuid` (not-null) column and lands as NULL,
346
- * throwing 23502 inside the probe-ingest worker and retrying forever.
347
- * Use `?.toString()` truthiness so an empty/blank ObjectID is treated
348
- * the same as "missing" and falls through to the project-default lookup.
349
- */
350
- /*
351
- * A criteria severity that belongs to *another* project is rejected by
352
- * IncidentService on create. Throwing here would fail the whole
353
- * probe/telemetry ingest job for this monitor — no incident, and no
354
- * payload or monitor log persisted either, because those run after the
355
- * create. Treat it as "missing" and fall back to this project's own
356
- * default, which is also what stops the bad id spreading onto new
357
- * incidents. monitorSteps can still hold one: the 1785240000000
358
- * repair skipped ids it could not resolve.
359
- */
360
- const isCriteriaSeverityUsable = await ProjectScopedReferenceValidator.isUsableInProject({
361
- projectId: input.monitor.projectId,
362
- id: criteriaIncident.incidentSeverityId,
363
- service: IncidentSeverityService,
364
- });
365
- if (((_v = criteriaIncident.incidentSeverityId) === null || _v === void 0 ? void 0 : _v.toString()) &&
366
- !isCriteriaSeverityUsable) {
367
- logger.error(`${(_w = input.monitor.id) === null || _w === void 0 ? void 0 : _w.toString()} - Criteria "${(_x = input.criteriaInstance.data) === null || _x === void 0 ? void 0 : _x.name}" references incident severity ${criteriaIncident.incidentSeverityId.toString()}, which does not belong to project ${(_y = input.monitor.projectId) === null || _y === void 0 ? void 0 : _y.toString()}. Falling back to this project's default severity.`);
368
- }
369
- if (!isCriteriaSeverityUsable) {
370
- // pick the critical (first/lowest-order root) severity.
371
- const severity = await IncidentSeverityService.findOneBy({
372
- query: {
373
- projectId: input.monitor.projectId,
374
- },
375
- sort: {
376
- order: SortOrder.Ascending,
377
- },
378
- props: {
379
- isRoot: true,
380
- },
381
- select: {
382
- _id: true,
383
- },
301
+ if (seriesFingerprint &&
302
+ ((_l = input.suppressedSeriesFingerprints) === null || _l === void 0 ? void 0 : _l.has(seriesFingerprint))) {
303
+ logger.debug(`${(_m = input.monitor.id) === null || _m === void 0 ? void 0 : _m.toString()} - Skipping incident for series ${seriesFingerprint}: its resource is under an active scheduled maintenance window.`, incidentLogAttributes);
304
+ (_o = input.evaluationSummary) === null || _o === void 0 ? void 0 : _o.events.push({
305
+ type: "incident-skipped",
306
+ title: "Incident suppressed by scheduled maintenance",
307
+ message: "Skipped creating an incident because the resource for this series is under an active scheduled maintenance window.",
308
+ relatedCriteriaId: (_p = input.criteriaInstance.data) === null || _p === void 0 ? void 0 : _p.id,
309
+ at: OneUptimeDate.getCurrentDate(),
310
+ });
311
+ continue;
312
+ }
313
+ /*
314
+ * Dedupe match must mirror the create path below (which sets
315
+ * `createdCriteriaId` / `createdIncidentTemplateId` only when the
316
+ * corresponding id is present). A criteria incident template can be
317
+ * missing its `id` (legacy/API-authored criteria), so guard the
318
+ * `.toString()` with `?.` — an unguarded call previously threw
319
+ * "Cannot read properties of undefined (reading 'toString')" here and
320
+ * failed the probe/telemetry queue job on every cycle for the affected
321
+ * monitor. Normalise both sides to `undefined` on missing so a created
322
+ * incident (whose template id was left NULL) still matches itself next
323
+ * cycle instead of being recreated as a duplicate.
324
+ */
325
+ const alreadyOpenIncident = openIncidents.find((incident) => {
326
+ var _a, _b, _c;
327
+ return ((incident.createdCriteriaId || undefined) ===
328
+ (((_b = (_a = input.criteriaInstance.data) === null || _a === void 0 ? void 0 : _a.id) === null || _b === void 0 ? void 0 : _b.toString()) || undefined) &&
329
+ (incident.createdIncidentTemplateId || undefined) ===
330
+ (((_c = criteriaIncident.id) === null || _c === void 0 ? void 0 : _c.toString()) || undefined) &&
331
+ (incident.seriesFingerprint || undefined) === seriesFingerprint);
384
332
  });
385
- if (!((_z = severity === null || severity === void 0 ? void 0 : severity.id) === null || _z === void 0 ? void 0 : _z.toString())) {
333
+ const hasAlreadyOpenIncident = Boolean(alreadyOpenIncident);
334
+ logger.debug(`${(_q = input.monitor.id) === null || _q === void 0 ? void 0 : _q.toString()} - Open Incident ${(_r = alreadyOpenIncident === null || alreadyOpenIncident === void 0 ? void 0 : alreadyOpenIncident.id) === null || _r === void 0 ? void 0 : _r.toString()}`, incidentLogAttributes);
335
+ logger.debug(`${(_s = input.monitor.id) === null || _s === void 0 ? void 0 : _s.toString()} - Has open incident ${hasAlreadyOpenIncident}`, incidentLogAttributes);
336
+ if (hasAlreadyOpenIncident) {
386
337
  /*
387
- * The project has no incident severity configured. Throwing here
388
- * would fail the entire probe/telemetry ingest job, which then
389
- * retries forever for a misconfiguration the worker cannot fix.
390
- * Skip incident creation gracefully and log instead.
338
+ * Use the open incident's already-rendered title when
339
+ * available the template (`criteriaIncident.title`) still
340
+ * contains unresolved `{{…}}` placeholders because it's the
341
+ * criterion's template string, not the instance's rendered
342
+ * output. Falling back to the template only when the open
343
+ * incident somehow has no title.
391
344
  */
392
- logger.error(`${(_0 = input.monitor.id) === null || _0 === void 0 ? void 0 : _0.toString()} - Cannot create incident: project ${(_1 = input.monitor.projectId) === null || _1 === void 0 ? void 0 : _1.toString()} has no incident severity configured. Skipping incident creation for criteria "${(_2 = input.criteriaInstance.data) === null || _2 === void 0 ? void 0 : _2.name}".`);
393
- (_3 = input.evaluationSummary) === null || _3 === void 0 ? void 0 : _3.events.push({
345
+ const renderedTitle = (alreadyOpenIncident === null || alreadyOpenIncident === void 0 ? void 0 : alreadyOpenIncident.title) || criteriaIncident.title;
346
+ (_t = input.evaluationSummary) === null || _t === void 0 ? void 0 : _t.events.push({
394
347
  type: "incident-skipped",
395
- title: "Incident creation skipped",
396
- message: "Skipped creating an incident because the project has no incident severity configured.",
397
- relatedCriteriaId: (_4 = input.criteriaInstance.data) === null || _4 === void 0 ? void 0 : _4.id,
348
+ title: `Incident already active: ${renderedTitle}`,
349
+ message: "Skipped creating a new incident because an active incident exists for this criteria.",
350
+ relatedCriteriaId: (_u = input.criteriaInstance.data) === null || _u === void 0 ? void 0 : _u.id,
351
+ relatedIncidentId: (_v = alreadyOpenIncident === null || alreadyOpenIncident === void 0 ? void 0 : alreadyOpenIncident.id) === null || _v === void 0 ? void 0 : _v.toString(),
352
+ relatedIncidentNumber: alreadyOpenIncident === null || alreadyOpenIncident === void 0 ? void 0 : alreadyOpenIncident.incidentNumber,
353
+ relatedIncidentNumberWithPrefix: alreadyOpenIncident === null || alreadyOpenIncident === void 0 ? void 0 : alreadyOpenIncident.incidentNumberWithPrefix,
398
354
  at: OneUptimeDate.getCurrentDate(),
399
355
  });
400
356
  continue;
401
357
  }
402
- incident.incidentSeverityId = severity.id;
403
- }
404
- else {
405
- incident.incidentSeverityId = criteriaIncident.incidentSeverityId;
406
- }
407
- incident.monitors = [input.monitor];
408
- incident.projectId = input.monitor.projectId;
409
- incident.rootCause = seriesRootCause;
410
- incident.createdStateLog = JSON.parse(JSON.stringify(input.dataToProcess, null, 2));
411
- /*
412
- * Same capture on every incident this evaluation opens - they all
413
- * came from the one check.
414
- */
415
- const serializedMonitorSummary = MonitorSummarySnapshotUtil.serialize(input.monitorSummary);
416
- if (serializedMonitorSummary) {
417
- incident.monitorSummary = serializedMonitorSummary;
418
- }
419
- /*
420
- * Guard against missing ids — these are optional reference fields and
421
- * must not crash incident creation (which runs inside the probe /
422
- * telemetry queue workers). A missing id previously threw
423
- * "Cannot read properties of undefined (reading 'toString')" and failed
424
- * the job on every cycle for the affected monitor.
425
- */
426
- if ((_5 = input.criteriaInstance.data) === null || _5 === void 0 ? void 0 : _5.id) {
427
- incident.createdCriteriaId =
428
- input.criteriaInstance.data.id.toString();
429
- }
430
- if (criteriaIncident.id) {
431
- incident.createdIncidentTemplateId = criteriaIncident.id.toString();
432
- }
433
- if (seriesFingerprint) {
434
- incident.seriesFingerprint = seriesFingerprint;
435
- }
436
- if (seriesLabels && Object.keys(seriesLabels).length > 0) {
437
- incident.seriesLabels = seriesLabels;
438
- await SeriesResourceLinker.linkSeriesResourcesToModel({
439
- model: incident,
440
- seriesLabels,
441
- projectId: input.monitor.projectId,
358
+ logger.debug(`${(_w = input.monitor.id) === null || _w === void 0 ? void 0 : _w.toString()} - Create incident.`, incidentLogAttributes);
359
+ const incident = new Incident();
360
+ const storageMap = MonitorTemplateUtil.buildTemplateStorageMap({
442
361
  monitorType: input.monitor.monitorType,
362
+ dataToProcess: input.dataToProcess,
363
+ monitor: input.monitor,
364
+ seriesLabels,
443
365
  });
444
- }
445
- /*
446
- * Deterministic resource link from the monitor's step config
447
- * (resolved once above). Runs for both grouped and ungrouped
448
- * incidents and merges with anything the series-label path
449
- * resolved, so the per-resource Activity tabs always see
450
- * monitor-created incidents.
451
- */
452
- SeriesResourceLinker.attachResolvedResources({
453
- model: incident,
454
- resolved: resourceContext,
455
- });
456
- incident.onCallDutyPolicies =
457
- ((_6 = criteriaIncident.onCallPolicyIds) === null || _6 === void 0 ? void 0 : _6.map((id) => {
458
- const onCallPolicy = new OnCallDutyPolicy();
459
- onCallPolicy._id = id.toString();
460
- return onCallPolicy;
461
- })) || [];
462
- // Set labels from criteria
463
- incident.labels =
464
- ((_7 = criteriaIncident.labelIds) === null || _7 === void 0 ? void 0 : _7.map((id) => {
465
- const label = new Label();
466
- label._id = id.toString();
467
- return label;
468
- })) || [];
469
- incident.isCreatedAutomatically = true;
470
- // Set status page visibility (defaults to true if not specified)
471
- if (criteriaIncident.showIncidentOnStatusPage !== undefined) {
472
- incident.isVisibleOnStatusPage =
473
- criteriaIncident.showIncidentOnStatusPage;
474
- }
475
- if (criteriaIncident.isPrivate === true) {
476
- incident.isPrivate = true;
477
- }
478
- if (input.props.telemetryQuery) {
479
- incident.telemetryQuery = input.props.telemetryQuery;
480
- }
481
- if (input.dataToProcess &&
482
- input.dataToProcess.probeId) {
483
- incident.createdByProbeId = input.dataToProcess.probeId;
484
- }
485
- if (criteriaIncident.remediationNotes) {
486
- incident.remediationNotes = MonitorTemplateUtil.processTemplateString({
487
- value: criteriaIncident.remediationNotes,
366
+ incident.title = MonitorTemplateUtil.processTemplateString({
367
+ value: criteriaIncident.title,
488
368
  storageMap,
489
369
  });
490
- }
491
- if (DisableAutomaticIncidentCreation) {
492
- (_8 = input.evaluationSummary) === null || _8 === void 0 ? void 0 : _8.events.push({
493
- type: "incident-skipped",
494
- title: "Incident creation skipped",
495
- message: "Automatic incident creation is disabled by environment configuration.",
496
- relatedCriteriaId: (_9 = input.criteriaInstance.data) === null || _9 === void 0 ? void 0 : _9.id,
497
- at: OneUptimeDate.getCurrentDate(),
370
+ incident.description = MonitorTemplateUtil.processTemplateString({
371
+ value: criteriaIncident.description,
372
+ storageMap,
498
373
  });
499
- return;
500
- }
501
- const createdIncident = await IncidentService.create({
502
- data: incident,
503
- props: {
504
- isRoot: true,
505
- },
506
- });
507
- /*
508
- * Add owner teams and users after incident creation. Owners
509
- * configured on the criteria template are merged (deduped) with the
510
- * owners of the network device this monitor watches, so device
511
- * ownership flows into the incidents its monitor raises.
512
- */
513
- if (networkDeviceOwners === null) {
514
- networkDeviceOwners =
515
- await NetworkDeviceOwnerUserService.getDeviceOwnersForMonitor({
516
- monitor: input.monitor,
517
- monitorStepId: (_10 = input.dataToProcess.monitorStepId) === null || _10 === void 0 ? void 0 : _10.toString(),
374
+ /*
375
+ * Resolve the incident severity. `criteriaIncident.incidentSeverityId`
376
+ * can be a truthy-but-EMPTY ObjectID (id === "") — a stored
377
+ * `{"_type":"ObjectID","value":""}` deserializes to `new ObjectID("")`,
378
+ * which is an object so `!incidentSeverityId` is false. That empty id
379
+ * serializes to "" for the `uuid` (not-null) column and lands as NULL,
380
+ * throwing 23502 inside the probe-ingest worker and retrying forever.
381
+ * Use `?.toString()` truthiness so an empty/blank ObjectID is treated
382
+ * the same as "missing" and falls through to the project-default lookup.
383
+ */
384
+ /*
385
+ * A criteria severity that belongs to *another* project is rejected by
386
+ * IncidentService on create. Throwing here would fail the whole
387
+ * probe/telemetry ingest job for this monitor — no incident, and no
388
+ * payload or monitor log persisted either, because those run after the
389
+ * create. Treat it as "missing" and fall back to this project's own
390
+ * default, which is also what stops the bad id spreading onto new
391
+ * incidents. monitorSteps can still hold one: the 1785240000000
392
+ * repair skipped ids it could not resolve.
393
+ */
394
+ const isCriteriaSeverityUsable = await ProjectScopedReferenceValidator.isUsableInProject({
395
+ projectId: input.monitor.projectId,
396
+ id: criteriaIncident.incidentSeverityId,
397
+ service: IncidentSeverityService,
398
+ });
399
+ if (((_x = criteriaIncident.incidentSeverityId) === null || _x === void 0 ? void 0 : _x.toString()) &&
400
+ !isCriteriaSeverityUsable) {
401
+ logger.error(`${(_y = input.monitor.id) === null || _y === void 0 ? void 0 : _y.toString()} - Criteria "${(_z = input.criteriaInstance.data) === null || _z === void 0 ? void 0 : _z.name}" references incident severity ${criteriaIncident.incidentSeverityId.toString()}, which does not belong to project ${(_0 = input.monitor.projectId) === null || _0 === void 0 ? void 0 : _0.toString()}. Falling back to this project's default severity.`);
402
+ }
403
+ if (!isCriteriaSeverityUsable) {
404
+ // pick the critical (first/lowest-order root) severity.
405
+ const severity = await IncidentSeverityService.findOneBy({
406
+ query: {
407
+ projectId: input.monitor.projectId,
408
+ },
409
+ sort: {
410
+ order: SortOrder.Ascending,
411
+ },
412
+ props: {
413
+ isRoot: true,
414
+ },
415
+ select: {
416
+ _id: true,
417
+ },
518
418
  });
519
- }
520
- const ownerUserIds = this.mergeOwnerIds(criteriaIncident.ownerUserIds || [], networkDeviceOwners.ownerUserIds);
521
- const ownerTeamIds = this.mergeOwnerIds(criteriaIncident.ownerTeamIds || [], networkDeviceOwners.ownerTeamIds);
522
- if (ownerTeamIds.length || ownerUserIds.length) {
523
- await IncidentService.addOwners(input.monitor.projectId, createdIncident.id, ownerUserIds, ownerTeamIds, true, // notify owners
524
- {
525
- isRoot: true,
419
+ if (!((_1 = severity === null || severity === void 0 ? void 0 : severity.id) === null || _1 === void 0 ? void 0 : _1.toString())) {
420
+ /*
421
+ * The project has no incident severity configured. Throwing here
422
+ * would fail the entire probe/telemetry ingest job, which then
423
+ * retries forever for a misconfiguration the worker cannot fix.
424
+ * Skip incident creation gracefully and log instead.
425
+ */
426
+ logger.error(`${(_2 = input.monitor.id) === null || _2 === void 0 ? void 0 : _2.toString()} - Cannot create incident: project ${(_3 = input.monitor.projectId) === null || _3 === void 0 ? void 0 : _3.toString()} has no incident severity configured. Skipping incident creation for criteria "${(_4 = input.criteriaInstance.data) === null || _4 === void 0 ? void 0 : _4.name}".`);
427
+ (_5 = input.evaluationSummary) === null || _5 === void 0 ? void 0 : _5.events.push({
428
+ type: "incident-skipped",
429
+ title: "Incident creation skipped",
430
+ message: "Skipped creating an incident because the project has no incident severity configured.",
431
+ relatedCriteriaId: (_6 = input.criteriaInstance.data) === null || _6 === void 0 ? void 0 : _6.id,
432
+ at: OneUptimeDate.getCurrentDate(),
433
+ });
434
+ continue;
435
+ }
436
+ incident.incidentSeverityId = severity.id;
437
+ }
438
+ else {
439
+ incident.incidentSeverityId = criteriaIncident.incidentSeverityId;
440
+ }
441
+ incident.monitors = [input.monitor];
442
+ incident.projectId = input.monitor.projectId;
443
+ incident.rootCause = seriesRootCause;
444
+ incident.createdStateLog = JSON.parse(JSON.stringify(input.dataToProcess, null, 2));
445
+ /*
446
+ * Same capture on every incident this evaluation opens - they all
447
+ * came from the one check.
448
+ */
449
+ const serializedMonitorSummary = MonitorSummarySnapshotUtil.serialize(input.monitorSummary);
450
+ if (serializedMonitorSummary) {
451
+ incident.monitorSummary = serializedMonitorSummary;
452
+ }
453
+ /*
454
+ * Guard against missing ids — these are optional reference fields and
455
+ * must not crash incident creation (which runs inside the probe /
456
+ * telemetry queue workers). A missing id previously threw
457
+ * "Cannot read properties of undefined (reading 'toString')" and failed
458
+ * the job on every cycle for the affected monitor.
459
+ */
460
+ if ((_7 = input.criteriaInstance.data) === null || _7 === void 0 ? void 0 : _7.id) {
461
+ incident.createdCriteriaId =
462
+ input.criteriaInstance.data.id.toString();
463
+ }
464
+ if (criteriaIncident.id) {
465
+ incident.createdIncidentTemplateId = criteriaIncident.id.toString();
466
+ }
467
+ if (seriesFingerprint) {
468
+ incident.seriesFingerprint = seriesFingerprint;
469
+ }
470
+ if (seriesLabels && Object.keys(seriesLabels).length > 0) {
471
+ incident.seriesLabels = seriesLabels;
472
+ await SeriesResourceLinker.linkSeriesResourcesToModel({
473
+ model: incident,
474
+ seriesLabels,
475
+ projectId: input.monitor.projectId,
476
+ monitorType: input.monitor.monitorType,
477
+ });
478
+ }
479
+ /*
480
+ * Deterministic resource link from the monitor's step config
481
+ * (resolved once above). Runs for both grouped and ungrouped
482
+ * incidents and merges with anything the series-label path
483
+ * resolved, so the per-resource Activity tabs always see
484
+ * monitor-created incidents.
485
+ */
486
+ SeriesResourceLinker.attachResolvedResources({
487
+ model: incident,
488
+ resolved: resourceContext,
526
489
  });
527
- }
528
- // Add incident member role assignments after incident creation
529
- if (criteriaIncident.incidentMemberRoles &&
530
- criteriaIncident.incidentMemberRoles.length > 0) {
531
- for (const roleAssignment of criteriaIncident.incidentMemberRoles) {
532
- try {
533
- const assignment = roleAssignment;
534
- if (assignment.roleId && assignment.userId) {
535
- const incidentMember = new IncidentMember();
536
- incidentMember.incidentId = createdIncident.id;
537
- incidentMember.projectId = input.monitor.projectId;
538
- incidentMember.userId = new ObjectID(assignment.userId.toString());
539
- incidentMember.incidentRoleId = new ObjectID(assignment.roleId.toString());
540
- await IncidentMemberService.create({
541
- data: incidentMember,
542
- props: {
543
- isRoot: true,
544
- },
545
- });
546
- logger.debug(`${(_11 = input.monitor.id) === null || _11 === void 0 ? void 0 : _11.toString()} - Assigned incident member role ${assignment.roleId.toString()} to user ${assignment.userId.toString()}`, incidentLogAttributes);
490
+ incident.onCallDutyPolicies =
491
+ ((_8 = criteriaIncident.onCallPolicyIds) === null || _8 === void 0 ? void 0 : _8.map((id) => {
492
+ const onCallPolicy = new OnCallDutyPolicy();
493
+ onCallPolicy._id = id.toString();
494
+ return onCallPolicy;
495
+ })) || [];
496
+ // Set labels from criteria
497
+ incident.labels =
498
+ ((_9 = criteriaIncident.labelIds) === null || _9 === void 0 ? void 0 : _9.map((id) => {
499
+ const label = new Label();
500
+ label._id = id.toString();
501
+ return label;
502
+ })) || [];
503
+ incident.isCreatedAutomatically = true;
504
+ // Set status page visibility (defaults to true if not specified)
505
+ if (criteriaIncident.showIncidentOnStatusPage !== undefined) {
506
+ incident.isVisibleOnStatusPage =
507
+ criteriaIncident.showIncidentOnStatusPage;
508
+ }
509
+ if (criteriaIncident.isPrivate === true) {
510
+ incident.isPrivate = true;
511
+ }
512
+ if (input.props.telemetryQuery) {
513
+ incident.telemetryQuery = input.props.telemetryQuery;
514
+ }
515
+ if (input.dataToProcess &&
516
+ input.dataToProcess.probeId) {
517
+ incident.createdByProbeId = input.dataToProcess.probeId;
518
+ }
519
+ if (criteriaIncident.remediationNotes) {
520
+ incident.remediationNotes =
521
+ MonitorTemplateUtil.processTemplateString({
522
+ value: criteriaIncident.remediationNotes,
523
+ storageMap,
524
+ });
525
+ }
526
+ const createdIncident = await IncidentService.create({
527
+ data: incident,
528
+ props: {
529
+ isRoot: true,
530
+ },
531
+ });
532
+ /*
533
+ * Add owner teams and users after incident creation. Owners
534
+ * configured on the criteria template are merged (deduped) with the
535
+ * owners of the network device this monitor watches, so device
536
+ * ownership flows into the incidents its monitor raises.
537
+ */
538
+ if (networkDeviceOwners === null) {
539
+ networkDeviceOwners =
540
+ await NetworkDeviceOwnerUserService.getDeviceOwnersForMonitor({
541
+ monitor: input.monitor,
542
+ monitorStepId: (_10 = input.dataToProcess.monitorStepId) === null || _10 === void 0 ? void 0 : _10.toString(),
543
+ });
544
+ }
545
+ const ownerUserIds = this.mergeOwnerIds(criteriaIncident.ownerUserIds || [], networkDeviceOwners.ownerUserIds);
546
+ const ownerTeamIds = this.mergeOwnerIds(criteriaIncident.ownerTeamIds || [], networkDeviceOwners.ownerTeamIds);
547
+ if (ownerTeamIds.length || ownerUserIds.length) {
548
+ await IncidentService.addOwners(input.monitor.projectId, createdIncident.id, ownerUserIds, ownerTeamIds, true, // notify owners
549
+ {
550
+ isRoot: true,
551
+ });
552
+ }
553
+ // Add incident member role assignments after incident creation
554
+ if (criteriaIncident.incidentMemberRoles &&
555
+ criteriaIncident.incidentMemberRoles.length > 0) {
556
+ for (const roleAssignment of criteriaIncident.incidentMemberRoles) {
557
+ try {
558
+ const assignment = roleAssignment;
559
+ if (assignment.roleId && assignment.userId) {
560
+ const incidentMember = new IncidentMember();
561
+ incidentMember.incidentId = createdIncident.id;
562
+ incidentMember.projectId = input.monitor.projectId;
563
+ incidentMember.userId = new ObjectID(assignment.userId.toString());
564
+ incidentMember.incidentRoleId = new ObjectID(assignment.roleId.toString());
565
+ await IncidentMemberService.create({
566
+ data: incidentMember,
567
+ props: {
568
+ isRoot: true,
569
+ },
570
+ });
571
+ logger.debug(`${(_11 = input.monitor.id) === null || _11 === void 0 ? void 0 : _11.toString()} - Assigned incident member role ${assignment.roleId.toString()} to user ${assignment.userId.toString()}`, incidentLogAttributes);
572
+ }
573
+ }
574
+ catch (memberError) {
575
+ logger.error(`${(_12 = input.monitor.id) === null || _12 === void 0 ? void 0 : _12.toString()} - Failed to assign incident member role: ${memberError}`, incidentLogAttributes);
547
576
  }
548
- }
549
- catch (memberError) {
550
- logger.error(`${(_12 = input.monitor.id) === null || _12 === void 0 ? void 0 : _12.toString()} - Failed to assign incident member role: ${memberError}`, incidentLogAttributes);
551
577
  }
552
578
  }
579
+ (_13 = input.evaluationSummary) === null || _13 === void 0 ? void 0 : _13.events.push({
580
+ type: "incident-created",
581
+ title: `Incident created: ${createdIncident.title || criteriaIncident.title}`,
582
+ message: `Incident triggered from criteria "${((_14 = input.criteriaInstance.data) === null || _14 === void 0 ? void 0 : _14.name) || "Unnamed criteria"}".`,
583
+ relatedCriteriaId: (_15 = input.criteriaInstance.data) === null || _15 === void 0 ? void 0 : _15.id,
584
+ relatedIncidentId: (_16 = createdIncident.id) === null || _16 === void 0 ? void 0 : _16.toString(),
585
+ relatedIncidentNumber: createdIncident.incidentNumber,
586
+ relatedIncidentNumberWithPrefix: createdIncident.incidentNumberWithPrefix,
587
+ at: OneUptimeDate.getCurrentDate(),
588
+ });
589
+ }
590
+ catch (err) {
591
+ /*
592
+ * One series must not take the rest of the fleet down with it.
593
+ * Everything in this loop happens per host/container/key and
594
+ * touches the database; an error thrown from here used to
595
+ * propagate out of MonitorResource (which has no catch, only a
596
+ * `finally` that releases the lock) and abandon every series
597
+ * after the failing one, plus the monitor log for the tick.
598
+ */
599
+ logger.error(`${(_17 = input.monitor.id) === null || _17 === void 0 ? void 0 : _17.toString()} - Failed to create incident${(seriesMatch === null || seriesMatch === void 0 ? void 0 : seriesMatch.fingerprint)
600
+ ? ` for series ${seriesMatch.fingerprint}`
601
+ : ""}.`);
602
+ logger.error(err);
603
+ (_18 = input.evaluationSummary) === null || _18 === void 0 ? void 0 : _18.events.push({
604
+ type: "incident-skipped",
605
+ title: "Incident creation failed",
606
+ message: `Could not create an incident${(seriesMatch === null || seriesMatch === void 0 ? void 0 : seriesMatch.fingerprint)
607
+ ? ` for series ${seriesMatch.fingerprint}`
608
+ : ""}: ${err instanceof Error ? err.message : String(err)}`,
609
+ relatedCriteriaId: (_19 = input.criteriaInstance.data) === null || _19 === void 0 ? void 0 : _19.id,
610
+ at: OneUptimeDate.getCurrentDate(),
611
+ });
612
+ continue;
553
613
  }
554
- (_13 = input.evaluationSummary) === null || _13 === void 0 ? void 0 : _13.events.push({
555
- type: "incident-created",
556
- title: `Incident created: ${createdIncident.title || criteriaIncident.title}`,
557
- message: `Incident triggered from criteria "${((_14 = input.criteriaInstance.data) === null || _14 === void 0 ? void 0 : _14.name) || "Unnamed criteria"}".`,
558
- relatedCriteriaId: (_15 = input.criteriaInstance.data) === null || _15 === void 0 ? void 0 : _15.id,
559
- relatedIncidentId: (_16 = createdIncident.id) === null || _16 === void 0 ? void 0 : _16.toString(),
560
- relatedIncidentNumber: createdIncident.incidentNumber,
561
- relatedIncidentNumberWithPrefix: createdIncident.incidentNumberWithPrefix,
562
- at: OneUptimeDate.getCurrentDate(),
563
- });
564
614
  }
565
615
  }
566
616
  }
@@ -627,8 +677,65 @@ export default class MonitorIncident {
627
677
  }
628
678
  }
629
679
  }
680
+ /**
681
+ * Is `openIncident`'s series still breaching the criteria that raised
682
+ * it?
683
+ *
684
+ * Prefers the per-criteria dictionary, which answers the question for
685
+ * the criteria that actually owns this incident. The single-set
686
+ * fallback only knows the winning criteria's breaches, so it has to
687
+ * approximate with `createIncidents` — a criteria that creates no
688
+ * incidents is a recovery criteria whose "matches" are healthy series,
689
+ * and counting those as breaches would pin an offline incident open
690
+ * forever.
691
+ */
692
+ static isSeriesStillBreaching(input) {
693
+ var _a, _b, _c, _d;
694
+ const owningCriteriaId = ((_a = input.openIncident.createdCriteriaId) === null || _a === void 0 ? void 0 : _a.toString()) || undefined;
695
+ if (input.breachingSeriesFingerprintsByCriteriaId && owningCriteriaId) {
696
+ return Boolean((_b = input.breachingSeriesFingerprintsByCriteriaId[owningCriteriaId]) === null || _b === void 0 ? void 0 : _b.has(input.openSeriesFingerprint));
697
+ }
698
+ const matchedCriteriaCreatesIncidents = ((_d = (_c = input.criteriaInstance) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.createIncidents) === true;
699
+ return (matchedCriteriaCreatesIncidents &&
700
+ input.breachingSeriesFingerprints.has(input.openSeriesFingerprint));
701
+ }
702
+ static wasCriteriaEvaluated(input) {
703
+ var _a;
704
+ const owningCriteriaId = ((_a = input.openIncident.createdCriteriaId) === null || _a === void 0 ? void 0 : _a.toString()) || undefined;
705
+ if (!owningCriteriaId) {
706
+ return true;
707
+ }
708
+ return (input.breachingSeriesFingerprintsByCriteriaId[owningCriteriaId] !==
709
+ undefined);
710
+ }
711
+ /**
712
+ * Did the criteria that raised this incident opt into auto-resolve for
713
+ * the template that raised it?
714
+ *
715
+ * An incident whose `createdIncidentTemplateId` is missing (legacy or
716
+ * API-authored criteria whose template carries no id) is matched
717
+ * against the criteria as a whole. Requiring an exact template id
718
+ * there meant such an incident could never auto-resolve — and, because
719
+ * it stayed open, its criteria could never raise a new one either.
720
+ */
721
+ static isAutoResolveConfiguredForIncident(input) {
722
+ var _a, _b;
723
+ const createdCriteriaId = ((_a = input.openIncident.createdCriteriaId) === null || _a === void 0 ? void 0 : _a.toString()) || undefined;
724
+ if (!createdCriteriaId) {
725
+ return false;
726
+ }
727
+ const autoResolveTemplates = input.autoResolveCriteriaInstanceIdIncidentIdsDictionary[createdCriteriaId];
728
+ if (!autoResolveTemplates || autoResolveTemplates.length === 0) {
729
+ return false;
730
+ }
731
+ const createdTemplateId = ((_b = input.openIncident.createdIncidentTemplateId) === null || _b === void 0 ? void 0 : _b.toString()) || undefined;
732
+ if (!createdTemplateId) {
733
+ return true;
734
+ }
735
+ return autoResolveTemplates.includes(createdTemplateId);
736
+ }
630
737
  static shouldCloseIncident(input) {
631
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
738
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
632
739
  const openSeriesFingerprint = input.openIncident.seriesFingerprint || undefined;
633
740
  /*
634
741
  * Event-driven (incoming-request / webhook) per-key incidents must
@@ -644,66 +751,78 @@ export default class MonitorIncident {
644
751
  if (input.disableSeriesAbsenceResolution && openSeriesFingerprint) {
645
752
  return false;
646
753
  }
647
- /*
648
- * Per-series auto-resolve: when the monitor emits a breaching-
649
- * series set and this open incident has a fingerprint, resolve
650
- * whenever the fingerprint is no longer in the set — regardless
651
- * of whether some *other* series is still breaching the same
652
- * criteria. This is the whole point of per-host incidents.
653
- */
654
- if (input.breachingSeriesFingerprints !== undefined &&
655
- openSeriesFingerprint) {
754
+ // Per-series mode: this evaluation knows which series are breaching.
755
+ if (input.breachingSeriesFingerprints !== undefined) {
656
756
  /*
657
- * The breaching set is the matched criteria's per-series matches.
658
- * Only ONE criteria wins per evaluation tick, so on a recovery
659
- * tick the matched criteria is the RECOVERY criteria (e.g.
660
- * Min(iot_device_up) >= 1) and its "matches" are healthy series
661
- * NOT breaches. Treating them as breaching would leave the open
662
- * offline incident's fingerprint in the set and pin it open
663
- * forever once no other series is down. So membership only counts
664
- * as still-breaching when the matched criteria actually creates
665
- * incidents (an offline/breach criteria); a recovery criteria
666
- * (createIncidents=false) contributes no breaches and lets the
667
- * per-series incident auto-resolve.
757
+ * A whole-monitor incident (no fingerprint) on a monitor that now
758
+ * raises incidents per series. It was raised before the monitor
759
+ * was grouped, and nothing can ever dedupe against it again —
760
+ * every incident from here on carries a fingerprint. Left alone it
761
+ * stays open forever while its replacements come and go. Resolve
762
+ * it, on the same auto-resolve terms as any other incident from
763
+ * its criteria.
668
764
  */
669
- const matchedCriteriaCreatesIncidents = ((_b = (_a = input.criteriaInstance) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.createIncidents) === true;
670
- const stillBreaching = matchedCriteriaCreatesIncidents &&
671
- input.breachingSeriesFingerprints.has(openSeriesFingerprint);
672
- if (stillBreaching) {
673
- return false;
765
+ if (!openSeriesFingerprint) {
766
+ if (input.disableSeriesAbsenceResolution) {
767
+ return false;
768
+ }
769
+ return MonitorIncident.isAutoResolveConfiguredForIncident({
770
+ openIncident: input.openIncident,
771
+ autoResolveCriteriaInstanceIdIncidentIdsDictionary: input.autoResolveCriteriaInstanceIdIncidentIdsDictionary,
772
+ });
674
773
  }
675
774
  /*
676
- * Series no longer breaching. Only auto-close if the criteria
677
- * was configured to auto-resolve in the first place; otherwise
678
- * stay open so a human can acknowledge.
775
+ * Per-series auto-resolve: resolve whenever this fingerprint is no
776
+ * longer breaching the criteria that raised it regardless of
777
+ * whether some *other* series is still breaching. That is the
778
+ * whole point of per-host incidents.
679
779
  */
680
- if (!((_c = input.openIncident.createdCriteriaId) === null || _c === void 0 ? void 0 : _c.toString())) {
780
+ if (MonitorIncident.isSeriesStillBreaching({
781
+ openIncident: input.openIncident,
782
+ criteriaInstance: input.criteriaInstance,
783
+ openSeriesFingerprint,
784
+ breachingSeriesFingerprints: input.breachingSeriesFingerprints,
785
+ breachingSeriesFingerprintsByCriteriaId: input.breachingSeriesFingerprintsByCriteriaId,
786
+ })) {
681
787
  return false;
682
788
  }
683
- if (!((_d = input.openIncident.createdIncidentTemplateId) === null || _d === void 0 ? void 0 : _d.toString())) {
789
+ /*
790
+ * The criteria that raised this incident was not evaluated on this
791
+ * tick at all (disabled, deleted, or the monitor stops at its
792
+ * first match). Absence of a breaching set for it is not evidence
793
+ * of recovery, so leave the incident alone.
794
+ */
795
+ if (input.breachingSeriesFingerprintsByCriteriaId &&
796
+ !MonitorIncident.wasCriteriaEvaluated({
797
+ openIncident: input.openIncident,
798
+ breachingSeriesFingerprintsByCriteriaId: input.breachingSeriesFingerprintsByCriteriaId,
799
+ })) {
684
800
  return false;
685
801
  }
686
- const autoResolveTemplates = input.autoResolveCriteriaInstanceIdIncidentIdsDictionary[input.openIncident.createdCriteriaId.toString()];
687
- if (autoResolveTemplates &&
688
- autoResolveTemplates.includes(input.openIncident.createdIncidentTemplateId.toString())) {
689
- return true;
690
- }
691
- return false;
802
+ /*
803
+ * Series no longer breaching. Only auto-close if the criteria was
804
+ * configured to auto-resolve in the first place; otherwise stay
805
+ * open so a human can acknowledge.
806
+ */
807
+ return MonitorIncident.isAutoResolveConfiguredForIncident({
808
+ openIncident: input.openIncident,
809
+ autoResolveCriteriaInstanceIdIncidentIdsDictionary: input.autoResolveCriteriaInstanceIdIncidentIdsDictionary,
810
+ });
692
811
  }
693
- if (((_e = input.openIncident.createdCriteriaId) === null || _e === void 0 ? void 0 : _e.toString()) ===
694
- ((_h = (_g = (_f = input.criteriaInstance) === null || _f === void 0 ? void 0 : _f.data) === null || _g === void 0 ? void 0 : _g.id) === null || _h === void 0 ? void 0 : _h.toString())) {
812
+ if (((_a = input.openIncident.createdCriteriaId) === null || _a === void 0 ? void 0 : _a.toString()) ===
813
+ ((_d = (_c = (_b = input.criteriaInstance) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.id) === null || _d === void 0 ? void 0 : _d.toString())) {
695
814
  // same incident active. So, do not close.
696
815
  return false;
697
816
  }
698
817
  // If antoher criteria is active then, check if the incident id is present in the map.
699
- if (!((_j = input.openIncident.createdCriteriaId) === null || _j === void 0 ? void 0 : _j.toString())) {
818
+ if (!((_e = input.openIncident.createdCriteriaId) === null || _e === void 0 ? void 0 : _e.toString())) {
700
819
  return false;
701
820
  }
702
- if (!((_k = input.openIncident.createdIncidentTemplateId) === null || _k === void 0 ? void 0 : _k.toString())) {
821
+ if (!((_f = input.openIncident.createdIncidentTemplateId) === null || _f === void 0 ? void 0 : _f.toString())) {
703
822
  return false;
704
823
  }
705
- if (input.autoResolveCriteriaInstanceIdIncidentIdsDictionary[(_l = input.openIncident.createdCriteriaId) === null || _l === void 0 ? void 0 : _l.toString()]) {
706
- if ((_o = input.autoResolveCriteriaInstanceIdIncidentIdsDictionary[(_m = input.openIncident.createdCriteriaId) === null || _m === void 0 ? void 0 : _m.toString()]) === null || _o === void 0 ? void 0 : _o.includes((_p = input.openIncident.createdIncidentTemplateId) === null || _p === void 0 ? void 0 : _p.toString())) {
824
+ if (input.autoResolveCriteriaInstanceIdIncidentIdsDictionary[(_g = input.openIncident.createdCriteriaId) === null || _g === void 0 ? void 0 : _g.toString()]) {
825
+ if ((_j = input.autoResolveCriteriaInstanceIdIncidentIdsDictionary[(_h = input.openIncident.createdCriteriaId) === null || _h === void 0 ? void 0 : _h.toString()]) === null || _j === void 0 ? void 0 : _j.includes((_k = input.openIncident.createdIncidentTemplateId) === null || _k === void 0 ? void 0 : _k.toString())) {
707
826
  return true;
708
827
  }
709
828
  }