@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
@@ -0,0 +1,602 @@
1
+ import AIService, {
2
+ AILogResponse,
3
+ AI_ALERT_INVESTIGATION_FEATURE,
4
+ AI_CODE_FIX_FEATURE,
5
+ AI_CONFIDENCE_CLASSIFICATION_FEATURE,
6
+ AI_DISABLED_MESSAGE,
7
+ AI_INCIDENT_INVESTIGATION_FEATURE,
8
+ AI_INVESTIGATION_GRADING_FEATURE,
9
+ RUNBOOK_AI_STEP_FEATURE,
10
+ WORKFLOW_AI_FEATURE,
11
+ } from "../../../Server/Services/AIService";
12
+ import AIBillingService from "../../../Server/Services/AIBillingService";
13
+ import IncidentService from "../../../Server/Services/IncidentService";
14
+ import LlmLogService from "../../../Server/Services/LlmLogService";
15
+ import LlmProviderService from "../../../Server/Services/LlmProviderService";
16
+ import ProjectService from "../../../Server/Services/ProjectService";
17
+ import IncidentAIContextBuilder from "../../../Server/Utils/AI/IncidentAIContextBuilder";
18
+ import InvestigationGrader from "../../../Server/Utils/AI/SRE/InvestigationGrader";
19
+ import LLMService from "../../../Server/Utils/LLM/LLMService";
20
+ import Incident from "../../../Models/DatabaseModels/Incident";
21
+ import LlmLog from "../../../Models/DatabaseModels/LlmLog";
22
+ import LlmProvider from "../../../Models/DatabaseModels/LlmProvider";
23
+ import Project from "../../../Models/DatabaseModels/Project";
24
+ import Dictionary from "../../../Types/Dictionary";
25
+ import BadDataException from "../../../Types/Exception/BadDataException";
26
+ import LlmType from "../../../Types/LLM/LlmType";
27
+ import ObjectID from "../../../Types/ObjectID";
28
+ import { afterEach, beforeEach, describe, expect, test } from "@jest/globals";
29
+ import fs from "fs";
30
+ import path from "path";
31
+
32
+ /*
33
+ * Project.enableAi is the per-project kill switch for AI — the switch a
34
+ * project flips when it does not want its data going to a model, or does not
35
+ * want to spend money on one.
36
+ *
37
+ * It used to be enforced as ADMISSION CONTROL: each entry point that wanted to
38
+ * honour it read the toggle itself. That is the arrangement this suite exists
39
+ * to prevent coming back, because it leaked exactly the way per-site checks
40
+ * always leak — five "Generate with AI" endpoints were gated while nine other
41
+ * paths into the same provider call were not. A project with AI switched off
42
+ * could still be billed for tokens through a runbook step, a Slack question, a
43
+ * Teams question, on-resolve grading, the code-fix agent loop, or the
44
+ * postmortem service method under the gated route.
45
+ *
46
+ * The gate now lives INSIDE AIService.executeWithLogging, which every AI call
47
+ * in the codebase passes through. That is the guarantee, and it is what the
48
+ * first two describes below pin: the refusal, its cost (nothing), and the
49
+ * single project read that pays for it.
50
+ *
51
+ * Entry-point checks still exist, but their job is DELIVERY, not enforcement:
52
+ * - throw — the caller already turns exceptions into a message a
53
+ * human reads (runbook step, HTTP handler, agent worker)
54
+ * - post-to-thread — Slack/Teams run their work in a detached IIFE whose
55
+ * .catch only logs, so an exception reaches nobody
56
+ * - silent skip — fire-and-forget autonomous work, where "AI is off" is
57
+ * a setting and logging it as an error is noise
58
+ *
59
+ * The last describe is the anti-drift guard. A new executeWithLogging caller
60
+ * is covered by the backstop automatically, but it still has to declare which
61
+ * of those three lanes it is in — and no caller may be handed a way to switch
62
+ * the gate off.
63
+ */
64
+
65
+ type MockBillingGlobal = typeof globalThis & {
66
+ __oneuptimeKillSwitchTestBillingEnabled: boolean;
67
+ };
68
+
69
+ jest.mock("../../../Server/EnvironmentConfig", () => {
70
+ const actual: Record<string, unknown> = jest.requireActual(
71
+ "../../../Server/EnvironmentConfig",
72
+ ) as Record<string, unknown>;
73
+ const mocked: Record<string, unknown> = { ...actual };
74
+ const mockGlobal: MockBillingGlobal = globalThis as MockBillingGlobal;
75
+ mockGlobal.__oneuptimeKillSwitchTestBillingEnabled = false;
76
+
77
+ Object.defineProperty(mocked, "IsBillingEnabled", {
78
+ configurable: true,
79
+ enumerable: true,
80
+ get: (): boolean => {
81
+ return mockGlobal.__oneuptimeKillSwitchTestBillingEnabled;
82
+ },
83
+ });
84
+
85
+ return mocked;
86
+ });
87
+
88
+ function setMockIsBillingEnabled(value: boolean): void {
89
+ (globalThis as MockBillingGlobal).__oneuptimeKillSwitchTestBillingEnabled =
90
+ value;
91
+ }
92
+
93
+ const PROJECT_ID: ObjectID = new ObjectID(
94
+ "11111111-1111-4111-8111-111111111111",
95
+ );
96
+
97
+ /*
98
+ * A feature OUTSIDE AUTONOMOUS_AI_FEATURES, used wherever a test counts
99
+ * project reads. The autonomous features carry a second, unrelated read of
100
+ * their own — getAutonomousDailyBudgetStatus loads the project's daily token
101
+ * limits — which would make "how many times was the project read?" measure
102
+ * the daily budget rather than the kill switch.
103
+ */
104
+ const INTERACTIVE_FEATURE: string = "Slack ChatOps";
105
+
106
+ const INCIDENT_ID: ObjectID = new ObjectID(
107
+ "44444444-4444-4444-8444-444444444444",
108
+ );
109
+
110
+ const REPO_ROOT: string = path.join(__dirname, "..", "..", "..", "..");
111
+
112
+ /*
113
+ * The shape of a field that would let a caller ask executeWithLogging to skip
114
+ * the kill switch. No such field may exist on AILogRequest.
115
+ */
116
+ const OPT_OUT_FIELD_PATTERN: RegExp =
117
+ /skip|bypass|ignore|force|disableCheck|unsafe/i;
118
+
119
+ // Spies asserted against on every row of the table below.
120
+ let projectLookup: jest.SpyInstance;
121
+ let getProvider: jest.SpyInstance;
122
+ let getCompletion: jest.SpyInstance;
123
+ let createLlmLog: jest.SpyInstance;
124
+
125
+ function mockProject(
126
+ enableAi: boolean | undefined,
127
+ balanceInUSDCents: number = 1000,
128
+ ): void {
129
+ projectLookup.mockResolvedValue({
130
+ id: PROJECT_ID,
131
+ enableAi,
132
+ aiCurrentBalanceInUSDCents: balanceInUSDCents,
133
+ } as unknown as Project);
134
+ }
135
+
136
+ function mockProvider(
137
+ overrides: Partial<LlmProvider> = {},
138
+ ): jest.SpyInstance<Promise<LlmProvider | null>> {
139
+ return getProvider.mockResolvedValue({
140
+ id: ObjectID.generate(),
141
+ llmType: LlmType.OpenAI,
142
+ name: "test-provider",
143
+ modelName: "test-model",
144
+ isGlobalLlm: false,
145
+ costPerMillionTokensInUSDCents: 0,
146
+ ...overrides,
147
+ } as unknown as LlmProvider) as jest.SpyInstance<Promise<LlmProvider | null>>;
148
+ }
149
+
150
+ async function execute(feature: string): Promise<unknown> {
151
+ return AIService.executeWithLogging({
152
+ projectId: PROJECT_ID,
153
+ feature,
154
+ messages: [{ role: "user", content: "do the thing" }],
155
+ });
156
+ }
157
+
158
+ beforeEach(() => {
159
+ setMockIsBillingEnabled(false);
160
+ projectLookup = jest.spyOn(ProjectService, "findOneById");
161
+ getProvider = jest.spyOn(LlmProviderService, "getProviderForChat");
162
+ getCompletion = jest.spyOn(LLMService, "getCompletion");
163
+ createLlmLog = jest
164
+ .spyOn(LlmLogService, "create")
165
+ .mockResolvedValue(new LlmLog());
166
+
167
+ /*
168
+ * The metered tail of a successful call — only reached by the billing-path
169
+ * tests below, and only ever a write. Stubbed so those tests can assert on
170
+ * the READS the gate makes without a real balance deduction on the end.
171
+ */
172
+ jest
173
+ .spyOn(ProjectService, "deductAiBalanceInUSDCents")
174
+ .mockResolvedValue(undefined);
175
+ jest
176
+ .spyOn(AIBillingService, "rechargeIfBalanceIsLow")
177
+ .mockResolvedValue(undefined as never);
178
+
179
+ mockProvider();
180
+ getCompletion.mockResolvedValue({
181
+ content: "the model answered",
182
+ usage: { totalTokens: 10 },
183
+ } as Awaited<ReturnType<typeof LLMService.getCompletion>>);
184
+ mockProject(true);
185
+ });
186
+
187
+ afterEach(() => {
188
+ jest.restoreAllMocks();
189
+ setMockIsBillingEnabled(false);
190
+ });
191
+
192
+ /*
193
+ * Every lane that reaches a provider does so through executeWithLogging, so
194
+ * every lane is represented here by the feature label it actually writes to
195
+ * LlmLog. The point of the table is that the verdict does NOT vary by lane:
196
+ * interactive, autonomous, chat-ops and agent-loop features are refused
197
+ * identically, because the switch is about the project, not about who asked.
198
+ */
199
+ const LANES: Array<{ name: string; feature: string }> = [
200
+ { name: "a runbook AI step", feature: RUNBOOK_AI_STEP_FEATURE },
201
+ { name: "the code-fix agent loop", feature: AI_CODE_FIX_FEATURE },
202
+ { name: "a workflow AI component", feature: WORKFLOW_AI_FEATURE },
203
+ { name: "Slack / Teams chat-ops", feature: "Slack ChatOps" },
204
+ {
205
+ name: "an autonomous incident investigation",
206
+ feature: AI_INCIDENT_INVESTIGATION_FEATURE,
207
+ },
208
+ {
209
+ name: "an autonomous alert investigation",
210
+ feature: AI_ALERT_INVESTIGATION_FEATURE,
211
+ },
212
+ {
213
+ name: "on-resolve investigation grading",
214
+ feature: AI_INVESTIGATION_GRADING_FEATURE,
215
+ },
216
+ {
217
+ name: "the post-run confidence signal",
218
+ feature: AI_CONFIDENCE_CLASSIFICATION_FEATURE,
219
+ },
220
+ ];
221
+
222
+ describe.each(LANES)(
223
+ "AIService.executeWithLogging refuses $name when the project switch is off",
224
+ ({ feature }: { name: string; feature: string }) => {
225
+ test("throws, naming the screen where the switch can be turned back on", async () => {
226
+ mockProject(false);
227
+
228
+ await expect(execute(feature)).rejects.toBeInstanceOf(BadDataException);
229
+ await expect(execute(feature)).rejects.toThrow(AI_DISABLED_MESSAGE);
230
+ });
231
+
232
+ /*
233
+ * The whole point of the bug. A refusal that still reached the provider
234
+ * would still cost the project money — which is what the switch was
235
+ * flipped to prevent.
236
+ */
237
+ test("spends no provider tokens", async () => {
238
+ mockProject(false);
239
+
240
+ await expect(execute(feature)).rejects.toThrow();
241
+
242
+ expect(getCompletion).not.toHaveBeenCalled();
243
+ });
244
+
245
+ /*
246
+ * Ordering. Resolving a provider is a query, and on the metered path it
247
+ * is the step that decides who gets billed. A gate that fires after it
248
+ * has already done work for a request it is about to refuse.
249
+ */
250
+ test("refuses before a provider is even resolved", async () => {
251
+ mockProject(false);
252
+
253
+ await expect(execute(feature)).rejects.toThrow();
254
+
255
+ expect(getProvider).not.toHaveBeenCalled();
256
+ });
257
+
258
+ /*
259
+ * No LlmLog row. Nothing was spent, so nothing belongs in the ledger —
260
+ * and for the autonomous features in this table that ledger IS the daily
261
+ * budget (LlmLogService.getTotalTokensUsedSince matches on feature), so a
262
+ * refusal row would be a refusal that eats the budget it never used.
263
+ */
264
+ test("writes no LlmLog row, so the autonomous budget ledger is untouched", async () => {
265
+ mockProject(false);
266
+
267
+ await expect(execute(feature)).rejects.toThrow();
268
+
269
+ expect(createLlmLog).not.toHaveBeenCalled();
270
+ });
271
+
272
+ test("runs normally once the switch is on", async () => {
273
+ mockProject(true);
274
+
275
+ const response: AILogResponse = (await execute(feature)) as AILogResponse;
276
+
277
+ expect(response.content).toBe("the model answered");
278
+ expect(getCompletion).toHaveBeenCalledTimes(1);
279
+ });
280
+ },
281
+ );
282
+
283
+ describe("the shape of the backstop's project read", () => {
284
+ /*
285
+ * enableAi is NOT NULL DEFAULT true, so an unselected column means "not
286
+ * disabled". A backstop that read undefined as off would switch AI off for
287
+ * every project that never touched the setting — the loudest possible
288
+ * regression, and one no "it refuses when false" test would catch.
289
+ */
290
+ test("an unselected enableAi is not a disabled one", async () => {
291
+ mockProject(undefined);
292
+
293
+ await expect(execute(INTERACTIVE_FEATURE)).resolves.toBeDefined();
294
+ expect(getCompletion).toHaveBeenCalledTimes(1);
295
+ });
296
+
297
+ /*
298
+ * Fail closed. With no readable row there is no basis for saying AI is
299
+ * enabled, and "enabled" is the expensive guess.
300
+ */
301
+ test("fails closed when the project row cannot be read", async () => {
302
+ projectLookup.mockResolvedValue(null);
303
+
304
+ await expect(execute(INTERACTIVE_FEATURE)).rejects.toThrow(
305
+ "Project not found.",
306
+ );
307
+ expect(getProvider).not.toHaveBeenCalled();
308
+ expect(getCompletion).not.toHaveBeenCalled();
309
+ });
310
+
311
+ /*
312
+ * Both halves of this read are load-bearing, and each fails silently rather
313
+ * than loudly if it drifts:
314
+ *
315
+ * - drop enableAi from `select` and every row comes back with it
316
+ * undefined, which this gate deliberately reads as "not disabled". The
317
+ * kill switch would pass every request and stay green above.
318
+ * - drop isRoot and a permission-filtered read returns null for callers
319
+ * who cannot see the project row, flipping fail-closed into refusing
320
+ * legitimate traffic.
321
+ */
322
+ test("asks for enableAi as root", async () => {
323
+ await execute(INTERACTIVE_FEATURE);
324
+
325
+ const read: {
326
+ select: Dictionary<boolean>;
327
+ props: { isRoot?: boolean };
328
+ } = projectLookup.mock.calls[0]![0] as {
329
+ select: Dictionary<boolean>;
330
+ props: { isRoot?: boolean };
331
+ };
332
+
333
+ expect(read.select["enableAi"]).toBe(true);
334
+ expect(read.props.isRoot).toBe(true);
335
+ });
336
+
337
+ /*
338
+ * The gate is on the hot path of every AI call, so it does not get to add a
339
+ * query. It reads the balance column in the same round trip and hands the
340
+ * row to the billing check below — one read where there used to be one,
341
+ * not two.
342
+ */
343
+ test("reads the balance in the same round trip, not a second one", async () => {
344
+ setMockIsBillingEnabled(true);
345
+ mockProvider({
346
+ isGlobalLlm: true,
347
+ costPerMillionTokensInUSDCents: 100,
348
+ });
349
+
350
+ await execute(INTERACTIVE_FEATURE);
351
+
352
+ expect(projectLookup).toHaveBeenCalledTimes(1);
353
+
354
+ const read: { select: Dictionary<boolean> } = projectLookup.mock
355
+ .calls[0]![0] as {
356
+ select: Dictionary<boolean>;
357
+ };
358
+
359
+ expect(read.select["enableAi"]).toBe(true);
360
+ expect(read.select["aiCurrentBalanceInUSDCents"]).toBe(true);
361
+ });
362
+
363
+ /*
364
+ * Sharing the row must not have cost the billing gate its teeth: an
365
+ * enabled project with no balance is still refused, and still logged as
366
+ * InsufficientBalance.
367
+ */
368
+ test("the billing gate still fires on the shared row", async () => {
369
+ setMockIsBillingEnabled(true);
370
+ mockProject(true, 0);
371
+ mockProvider({
372
+ isGlobalLlm: true,
373
+ costPerMillionTokensInUSDCents: 100,
374
+ });
375
+
376
+ await expect(execute(INTERACTIVE_FEATURE)).rejects.toThrow(
377
+ /Insufficient AI balance/,
378
+ );
379
+ expect(getCompletion).not.toHaveBeenCalled();
380
+ expect(createLlmLog).toHaveBeenCalledTimes(1);
381
+ });
382
+
383
+ /*
384
+ * Order between the two gates the shared row now serves. A project that
385
+ * switched AI off and also has no balance is refused for the reason it
386
+ * chose, not for a billing state it never asked about.
387
+ */
388
+ test("the kill switch is reported ahead of the balance", async () => {
389
+ setMockIsBillingEnabled(true);
390
+ mockProject(false, 0);
391
+ mockProvider({
392
+ isGlobalLlm: true,
393
+ costPerMillionTokensInUSDCents: 100,
394
+ });
395
+
396
+ await expect(execute(INTERACTIVE_FEATURE)).rejects.toThrow(
397
+ AI_DISABLED_MESSAGE,
398
+ );
399
+ });
400
+ });
401
+
402
+ /*
403
+ * The delivery lanes. Each of these already reaches the backstop; what is
404
+ * asserted here is that it reaches the USER the way that lane can actually
405
+ * deliver a message.
406
+ */
407
+ describe("delivery: fire-and-forget autonomous work skips silently", () => {
408
+ /*
409
+ * gradeInvestigationOnResolve runs detached off an incident resolve, inside
410
+ * a catch that logs at error level. Letting the backstop throw would file a
411
+ * permanent error for every incident a switched-off project ever resolves —
412
+ * so this lane asks first and returns.
413
+ */
414
+ test("on-resolve grading returns without touching AI, and without erroring", async () => {
415
+ mockProject(false);
416
+ const execution: jest.SpyInstance = jest.spyOn(
417
+ AIService,
418
+ "executeWithLogging",
419
+ );
420
+
421
+ await expect(
422
+ InvestigationGrader.gradeInvestigationOnResolve({
423
+ incidentId: INCIDENT_ID,
424
+ projectId: PROJECT_ID,
425
+ }),
426
+ ).resolves.toBeUndefined();
427
+
428
+ expect(execution).not.toHaveBeenCalled();
429
+ });
430
+ });
431
+
432
+ describe("delivery: the postmortem service method refuses at its own layer", () => {
433
+ /*
434
+ * generatePostmortemFromAI is public and has two callers — the (gated) HTTP
435
+ * handler and IncidentPostmortemRunner. Gating only the route would leave
436
+ * the switch true for one entry point and false for the other, so the
437
+ * service method reads it too.
438
+ */
439
+ test("refuses before the context builder reads the incident dossier", async () => {
440
+ mockProject(false);
441
+ jest.spyOn(IncidentService, "findOneById").mockResolvedValue({
442
+ id: INCIDENT_ID,
443
+ projectId: PROJECT_ID,
444
+ } as unknown as Incident);
445
+ const buildContext: jest.SpyInstance = jest.spyOn(
446
+ IncidentAIContextBuilder,
447
+ "buildIncidentContext",
448
+ );
449
+
450
+ await expect(
451
+ IncidentService.generatePostmortemFromAI({ incidentId: INCIDENT_ID }),
452
+ ).rejects.toThrow(AI_DISABLED_MESSAGE);
453
+
454
+ expect(buildContext).not.toHaveBeenCalled();
455
+ expect(getCompletion).not.toHaveBeenCalled();
456
+ });
457
+ });
458
+
459
+ /*
460
+ * ============================== anti-drift ==============================
461
+ *
462
+ * The backstop covers a new caller the moment it is written, which is the
463
+ * point of putting it inside executeWithLogging. But two things can still go
464
+ * wrong silently, and both are architectural rather than behavioural — no
465
+ * assertion above would notice either.
466
+ */
467
+ type CallSite = {
468
+ file: string;
469
+ /*
470
+ * How a refusal reaches whoever triggered this call:
471
+ * "throw" — an exception here already becomes a message a human reads
472
+ * "post" — detached work; an exception reaches nobody, so the site
473
+ * checks first and posts the refusal itself
474
+ * "skip" — autonomous; "AI is off" is a setting, not an error
475
+ */
476
+ delivery: "throw" | "post" | "skip";
477
+ };
478
+
479
+ /*
480
+ * Every place in the codebase that calls executeWithLogging, and the lane it
481
+ * belongs to. Adding a caller without adding it here fails the test below —
482
+ * which is the prompt to decide, once, whether an exception can actually
483
+ * reach that caller's user.
484
+ */
485
+ const KNOWN_CALL_SITES: Array<CallSite> = [
486
+ {
487
+ file: "App/FeatureSet/Runbook/Services/AIStepExecutor.ts",
488
+ delivery: "throw",
489
+ },
490
+ {
491
+ file: "Common/Server/Types/Workflow/Components/AI/GenerateText.ts",
492
+ delivery: "throw",
493
+ },
494
+ {
495
+ file: "Common/Server/Utils/AI/Chat/ObservabilityAssistant.ts",
496
+ delivery: "post",
497
+ },
498
+ { file: "Common/Server/Utils/AI/Chat/ChatAgentRunner.ts", delivery: "throw" },
499
+ {
500
+ file: "Common/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts",
501
+ delivery: "throw",
502
+ },
503
+ {
504
+ file: "Common/Server/Utils/AI/SRE/InvestigationGrader.ts",
505
+ delivery: "skip",
506
+ },
507
+ { file: "Common/Server/Utils/AI/SRE/ConfidenceSignal.ts", delivery: "skip" },
508
+ { file: "Common/Server/Utils/AI/SRE/InvestigationTldr.ts", delivery: "skip" },
509
+ { file: "Common/Server/API/IncidentAPI.ts", delivery: "throw" },
510
+ { file: "Common/Server/API/IncidentEpisodeAPI.ts", delivery: "throw" },
511
+ { file: "Common/Server/API/AlertAPI.ts", delivery: "throw" },
512
+ { file: "Common/Server/API/ScheduledMaintenanceAPI.ts", delivery: "throw" },
513
+ { file: "Common/Server/Services/IncidentService.ts", delivery: "throw" },
514
+ ];
515
+
516
+ function sourceFilesUnder(dir: string): Array<string> {
517
+ const absolute: string = path.join(REPO_ROOT, dir);
518
+
519
+ if (!fs.existsSync(absolute)) {
520
+ return [];
521
+ }
522
+
523
+ const found: Array<string> = [];
524
+
525
+ const walk: (current: string) => void = (current: string): void => {
526
+ for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
527
+ const full: string = path.join(current, entry.name);
528
+
529
+ if (entry.isDirectory()) {
530
+ if (entry.name === "node_modules" || entry.name === "Tests") {
531
+ continue;
532
+ }
533
+ walk(full);
534
+ continue;
535
+ }
536
+
537
+ if (entry.name.endsWith(".ts") && !entry.name.endsWith(".test.ts")) {
538
+ found.push(path.relative(REPO_ROOT, full));
539
+ }
540
+ }
541
+ };
542
+
543
+ walk(absolute);
544
+
545
+ return found;
546
+ }
547
+
548
+ describe("no executeWithLogging caller escapes the kill switch", () => {
549
+ /*
550
+ * The registry is only a guarantee if it is exhaustive. A caller that is
551
+ * not listed is a caller whose error-delivery lane nobody chose — and the
552
+ * lanes are not interchangeable: a throw into detached Slack work is a
553
+ * question that never gets answered, and a throw into on-resolve grading is
554
+ * a permanent error on a correctly-configured project.
555
+ */
556
+ test("every call site is in the registry", () => {
557
+ const calling: Array<string> = [
558
+ ...sourceFilesUnder("Common/Server"),
559
+ ...sourceFilesUnder("App/FeatureSet"),
560
+ ]
561
+ .filter((file: string) => {
562
+ return fs
563
+ .readFileSync(path.join(REPO_ROOT, file), "utf8")
564
+ .includes("AIService.executeWithLogging(");
565
+ })
566
+ .sort();
567
+
568
+ const registered: Array<string> = KNOWN_CALL_SITES.map((site: CallSite) => {
569
+ return site.file;
570
+ }).sort();
571
+
572
+ expect(calling).toEqual(registered);
573
+ });
574
+
575
+ /*
576
+ * The other way this decision could be undone. An opt-out on the request —
577
+ * `skipProjectAICheck`, `force`, anything of that shape — would hand every
578
+ * future caller a one-word way back to the bug this suite is about, and the
579
+ * caller most likely to reach for it is the one that has not thought about
580
+ * the switch. The gate takes no parameters, and that is deliberate.
581
+ */
582
+ test("executeWithLogging offers no way to switch the gate off", () => {
583
+ const source: string = fs.readFileSync(
584
+ path.join(REPO_ROOT, "Common/Server/Services/AIService.ts"),
585
+ "utf8",
586
+ );
587
+
588
+ const requestInterface: string = (source.match(
589
+ /export interface AILogRequest \{[\s\S]*?\n\}/,
590
+ ) || [""])[0];
591
+
592
+ expect(requestInterface).toContain("projectId");
593
+
594
+ const optOutFields: Array<string> = (
595
+ requestInterface.match(/^\s*(\w+)\??:/gm) || []
596
+ ).filter((field: string) => {
597
+ return OPT_OUT_FIELD_PATTERN.test(field);
598
+ });
599
+
600
+ expect(optOutFields).toEqual([]);
601
+ });
602
+ });
@@ -151,6 +151,7 @@ describe("BaseAPI", () => {
151
151
  } as OneUptimeRequest;
152
152
 
153
153
  beforeAll(async () => {
154
+ mockRouter.routes.length = 0;
154
155
  mockRouter.post.mockClear();
155
156
  mockRouter.get.mockClear();
156
157
  mockRouter.put.mockClear();
@@ -208,11 +209,49 @@ describe("BaseAPI", () => {
208
209
  expect.any(Function),
209
210
  );
210
211
 
212
+ expect(Express.getRouter().post).toHaveBeenCalledWith(
213
+ "/mock/:id/update-item",
214
+ UserMiddleware.getUserMiddleware,
215
+ expect.any(Function),
216
+ );
217
+
211
218
  expect(Express.getRouter().delete).toHaveBeenCalledWith(
212
219
  "/mock/:id",
213
220
  UserMiddleware.getUserMiddleware,
214
221
  expect.any(Function),
215
222
  );
223
+
224
+ expect(Express.getRouter().post).toHaveBeenCalledWith(
225
+ "/mock/:id/delete-item",
226
+ UserMiddleware.getUserMiddleware,
227
+ expect.any(Function),
228
+ );
229
+ });
230
+
231
+ it("does not register state-changing GET aliases", () => {
232
+ const registeredGetPaths: Array<string> = mockRouter.routes
233
+ .filter((route: { method: string }) => {
234
+ return route.method === "GET";
235
+ })
236
+ .map((route: { uri: string }) => {
237
+ return route.uri;
238
+ });
239
+
240
+ expect(registeredGetPaths).not.toContain("/mock/:id/update-item");
241
+ expect(registeredGetPaths).not.toContain("/mock/:id/delete-item");
242
+ });
243
+
244
+ it("keeps read-only GET compatibility routes", () => {
245
+ const registeredGetPaths: Array<string> = mockRouter.routes
246
+ .filter((route: { method: string }) => {
247
+ return route.method === "GET";
248
+ })
249
+ .map((route: { uri: string }) => {
250
+ return route.uri;
251
+ });
252
+
253
+ expect(registeredGetPaths).toContain("/mock/get-list");
254
+ expect(registeredGetPaths).toContain("/mock/:id/get-item");
216
255
  });
217
256
  });
218
257
 
@@ -226,7 +265,9 @@ describe("BaseAPI", () => {
226
265
  ["POST", "/mock/:id/get-item", "getItem"],
227
266
  ["GET", "/mock/:id/get-item", "getItem"],
228
267
  ["PUT", "/mock/:id", "updateItem"],
268
+ ["POST", "/mock/:id/update-item", "updateItem"],
229
269
  ["DELETE", "/mock/:id", "deleteItem"],
270
+ ["POST", "/mock/:id/delete-item", "deleteItem"],
230
271
  ] as [string, string, string][];
231
272
 
232
273
  for (const [method, uri, shouldBeCalled] of checkRoutes) {