@oneuptime/common 12.0.25 → 12.0.27

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 (856) hide show
  1. package/Models/AnalyticsModels/Index.ts +2 -0
  2. package/Models/AnalyticsModels/ThreatIntelIndicator.ts +413 -0
  3. package/Models/DatabaseModels/AlertSeverity.ts +4 -1
  4. package/Models/DatabaseModels/CephClusterFeed.ts +625 -0
  5. package/Models/DatabaseModels/CloudResourceFeed.ts +625 -0
  6. package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +13 -0
  7. package/Models/DatabaseModels/DetectionRule.ts +9 -3
  8. package/Models/DatabaseModels/DockerHostFeed.ts +625 -0
  9. package/Models/DatabaseModels/DockerSwarmClusterFeed.ts +628 -0
  10. package/Models/DatabaseModels/GoogleSecOpsConnection.ts +9 -3
  11. package/Models/DatabaseModels/HostFeed.ts +625 -0
  12. package/Models/DatabaseModels/IncidentSeverity.ts +4 -1
  13. package/Models/DatabaseModels/Index.ts +22 -0
  14. package/Models/DatabaseModels/KubernetesClusterFeed.ts +628 -0
  15. package/Models/DatabaseModels/Monitor.ts +87 -0
  16. package/Models/DatabaseModels/NetworkDevice.ts +96 -5
  17. package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +92 -6
  18. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +301 -31
  19. package/Models/DatabaseModels/NetworkSite.ts +120 -0
  20. package/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.ts +1 -0
  21. package/Models/DatabaseModels/PodmanHostFeed.ts +625 -0
  22. package/Models/DatabaseModels/ProxmoxClusterFeed.ts +626 -0
  23. package/Models/DatabaseModels/ScheduledMaintenance.ts +67 -0
  24. package/Models/DatabaseModels/ServiceFeed.ts +625 -0
  25. package/Models/DatabaseModels/TelemetrySourceMap.ts +474 -0
  26. package/Models/DatabaseModels/ThreatIntelFeed.ts +758 -0
  27. package/Models/DatabaseModels/UserOnCallLog.ts +1 -0
  28. package/Models/DatabaseModels/UserTotpAuth.ts +1 -0
  29. package/Models/DatabaseModels/UserWebAuthn.ts +1 -0
  30. package/Server/API/AlertAPI.ts +23 -1
  31. package/Server/API/BaseAPI.ts +14 -3
  32. package/Server/API/IncidentAPI.ts +41 -1
  33. package/Server/API/IncidentEpisodeAPI.ts +23 -1
  34. package/Server/API/MicrosoftTeamsAPI.ts +31 -2
  35. package/Server/API/ScheduledMaintenanceAPI.ts +23 -1
  36. package/Server/API/SlackAPI.ts +48 -0
  37. package/Server/API/TelemetryAPI.ts +167 -42
  38. package/Server/API/UserOnCallLogTimelineAPI.ts +75 -61
  39. package/Server/API/UserTotpAuthAPI.ts +67 -1
  40. package/Server/API/UserWebAuthnAPI.ts +44 -1
  41. package/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.ts +57 -0
  42. package/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.ts +49 -0
  43. package/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.ts +129 -0
  44. package/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.ts +54 -0
  45. package/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.ts +64 -0
  46. package/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.ts +64 -0
  47. package/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.ts +72 -0
  48. package/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.ts +31 -0
  49. package/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.ts +489 -0
  50. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +18 -0
  51. package/Server/Middleware/IdentityRateLimit.ts +53 -3
  52. package/Server/Services/AIService.ts +181 -41
  53. package/Server/Services/CephClusterFeedService.ts +99 -0
  54. package/Server/Services/CephClusterLabelRuleEngineService.ts +29 -0
  55. package/Server/Services/CephClusterOwnerRuleEngineService.ts +23 -0
  56. package/Server/Services/CephClusterOwnerTeamService.ts +129 -0
  57. package/Server/Services/CephClusterOwnerUserService.ts +123 -0
  58. package/Server/Services/CephClusterService.ts +223 -2
  59. package/Server/Services/CloudResourceFeedService.ts +99 -0
  60. package/Server/Services/CloudResourceLabelRuleEngineService.ts +30 -0
  61. package/Server/Services/CloudResourceOwnerRuleEngineService.ts +33 -0
  62. package/Server/Services/CloudResourceOwnerTeamService.ts +129 -0
  63. package/Server/Services/CloudResourceOwnerUserService.ts +123 -0
  64. package/Server/Services/CloudResourceService.ts +227 -2
  65. package/Server/Services/DatabaseService.ts +265 -0
  66. package/Server/Services/DockerHostFeedService.ts +99 -0
  67. package/Server/Services/DockerHostLabelRuleEngineService.ts +29 -0
  68. package/Server/Services/DockerHostOwnerRuleEngineService.ts +23 -0
  69. package/Server/Services/DockerHostOwnerTeamService.ts +129 -0
  70. package/Server/Services/DockerHostOwnerUserService.ts +123 -0
  71. package/Server/Services/DockerHostService.ts +227 -2
  72. package/Server/Services/DockerSwarmClusterFeedService.ts +102 -0
  73. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +30 -0
  74. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +24 -0
  75. package/Server/Services/DockerSwarmClusterOwnerTeamService.ts +133 -0
  76. package/Server/Services/DockerSwarmClusterOwnerUserService.ts +127 -0
  77. package/Server/Services/DockerSwarmClusterService.ts +229 -2
  78. package/Server/Services/EnterpriseLicenseService.ts +15 -7
  79. package/Server/Services/ExceptionAggregationService.ts +12 -2
  80. package/Server/Services/HostFeedService.ts +99 -0
  81. package/Server/Services/HostLabelRuleEngineService.ts +29 -0
  82. package/Server/Services/HostOwnerRuleEngineService.ts +23 -0
  83. package/Server/Services/HostOwnerTeamService.ts +129 -0
  84. package/Server/Services/HostOwnerUserService.ts +123 -0
  85. package/Server/Services/HostService.ts +215 -2
  86. package/Server/Services/IncidentService.ts +11 -0
  87. package/Server/Services/Index.ts +24 -0
  88. package/Server/Services/KubernetesClusterFeedService.ts +99 -0
  89. package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +30 -0
  90. package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +24 -0
  91. package/Server/Services/KubernetesClusterOwnerTeamService.ts +133 -0
  92. package/Server/Services/KubernetesClusterOwnerUserService.ts +127 -0
  93. package/Server/Services/KubernetesClusterService.ts +231 -2
  94. package/Server/Services/LogAggregationService.ts +23 -280
  95. package/Server/Services/MetricAggregationService.ts +98 -1
  96. package/Server/Services/MonitorService.ts +177 -13
  97. package/Server/Services/MonitorTemplateService.ts +111 -0
  98. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +777 -86
  99. package/Server/Services/NetworkDeviceAutoImportRuleService.ts +199 -16
  100. package/Server/Services/NetworkDeviceDiscoveryScanService.ts +1055 -14
  101. package/Server/Services/NetworkDeviceService.ts +750 -4
  102. package/Server/Services/NetworkInterfaceService.ts +415 -0
  103. package/Server/Services/NetworkSiteService.ts +485 -52
  104. package/Server/Services/PodmanHostFeedService.ts +99 -0
  105. package/Server/Services/PodmanHostLabelRuleEngineService.ts +29 -0
  106. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +23 -0
  107. package/Server/Services/PodmanHostOwnerTeamService.ts +129 -0
  108. package/Server/Services/PodmanHostOwnerUserService.ts +123 -0
  109. package/Server/Services/PodmanHostService.ts +227 -2
  110. package/Server/Services/ProjectService.ts +16 -10
  111. package/Server/Services/ProxmoxClusterFeedService.ts +99 -0
  112. package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +30 -0
  113. package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +24 -0
  114. package/Server/Services/ProxmoxClusterOwnerTeamService.ts +131 -0
  115. package/Server/Services/ProxmoxClusterOwnerUserService.ts +124 -0
  116. package/Server/Services/ProxmoxClusterService.ts +225 -2
  117. package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +61 -0
  118. package/Server/Services/ServiceFeedService.ts +99 -0
  119. package/Server/Services/ServiceLabelRuleEngineService.ts +29 -0
  120. package/Server/Services/ServiceOwnerRuleEngineService.ts +26 -0
  121. package/Server/Services/ServiceOwnerTeamService.ts +129 -0
  122. package/Server/Services/ServiceOwnerUserService.ts +123 -0
  123. package/Server/Services/ServiceService.ts +227 -3
  124. package/Server/Services/StatusPageSubscriberService.ts +7 -0
  125. package/Server/Services/TelemetryAttributeService.ts +13 -3
  126. package/Server/Services/TelemetrySourceMapService.ts +307 -0
  127. package/Server/Services/ThreatIntelFeedService.ts +222 -0
  128. package/Server/Services/ThreatIntelIndicatorService.ts +428 -0
  129. package/Server/Services/TraceAggregationService.ts +101 -11
  130. package/Server/Services/UserService.ts +13 -6
  131. package/Server/Services/UserTwoFactorBackupCodeService.ts +127 -0
  132. package/Server/Services/UserWebhookService.ts +11 -2
  133. package/Server/Static/Brand/README.md +38 -0
  134. package/Server/Static/Brand/favicons/apple-touch-icon.png +0 -0
  135. package/Server/Static/Brand/favicons/favicon-16x16.png +0 -0
  136. package/Server/Static/Brand/favicons/favicon-32x32.png +0 -0
  137. package/Server/Static/Brand/favicons/favicon.ico +0 -0
  138. package/Server/Static/Brand/favicons/safari-pinned-tab.svg +31 -0
  139. package/Server/Static/Brand/hou-wb.svg +1 -0
  140. package/Server/Static/Brand/oneuptime-logo.svg +1 -0
  141. package/Server/Static/Brand/ou-wb.svg +1 -0
  142. package/Server/Static/Vendor/README.md +4 -0
  143. package/Server/Types/AnalyticsDatabase/ModelPermission.ts +13 -3
  144. package/Server/Types/Database/AggregateBy.ts +83 -0
  145. package/Server/Types/Database/AggregateResultUtil.ts +126 -0
  146. package/Server/Types/Database/JSONColumnQuery.ts +18 -0
  147. package/Server/Types/Database/QueryHelper.ts +40 -0
  148. package/Server/Types/Database/QueryUtil.ts +26 -0
  149. package/Server/Types/Workflow/Components/API/Utils.ts +10 -1
  150. package/Server/Types/Workflow/Components/JavaScript.ts +8 -0
  151. package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +9 -0
  152. package/Server/Utils/AI/SRE/InvestigationGrader.ts +18 -0
  153. package/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.ts +422 -0
  154. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +176 -0
  155. package/Server/Utils/DataSource/HttpFetch.ts +18 -0
  156. package/Server/Utils/Database/RelationIdUtil.ts +42 -0
  157. package/Server/Utils/Marketing/MarketingEventUtil.ts +38 -9
  158. package/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.ts +34 -3
  159. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +9 -1
  160. package/Server/Utils/Monitor/Criteria/SyntheticMonitor.ts +28 -10
  161. package/Server/Utils/Monitor/MonitorAlert.ts +541 -332
  162. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +330 -64
  163. package/Server/Utils/Monitor/MonitorIncident.ts +640 -434
  164. package/Server/Utils/Monitor/MonitorResource.ts +226 -49
  165. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +46 -3
  166. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +23 -102
  167. package/Server/Utils/Monitor/PerEntityCriteriaFanOut.ts +329 -0
  168. package/Server/Utils/NetworkDevice/DeviceHealthAggregation.ts +427 -0
  169. package/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.ts +310 -0
  170. package/Server/Utils/OnCallNotificationContext.ts +686 -0
  171. package/Server/Utils/PrivateNetworkWebhookConfig.ts +549 -0
  172. package/Server/Utils/ResourceFeed/ResourceFeedUtil.ts +139 -0
  173. package/Server/Utils/Response.ts +11 -1
  174. package/Server/Utils/SSRFProtection.ts +230 -60
  175. package/Server/Utils/SecurityEvent/ConnectorErrorMessage.ts +106 -0
  176. package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +84 -284
  177. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +47 -20
  178. package/Server/Utils/SecurityEvent/SecurityEventAlerting.ts +318 -0
  179. package/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.ts +199 -0
  180. package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.ts +252 -0
  181. package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.ts +739 -0
  182. package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.ts +533 -0
  183. package/Server/Utils/StartServer.ts +83 -56
  184. package/Server/Utils/StatusPageSubscriberWebhook.ts +3 -0
  185. package/Server/Utils/Telemetry/SourceMapResolver.ts +480 -0
  186. package/Server/Utils/TwoFactorBackupCodeNotification.ts +106 -0
  187. package/Server/Utils/VM/VMAPI.ts +3 -0
  188. package/Server/Utils/VM/VMRunner.ts +27 -1
  189. package/Server/Utils/VendorAssets.ts +42 -0
  190. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +136 -6
  191. package/Server/Views/AcknowledgeUserOnCallNotification.ejs +11 -9
  192. package/Server/Views/Partials/Head.ejs +9 -9
  193. package/Server/Views/Partials/OnCallNotificationDetails.ejs +48 -0
  194. package/Server/Views/ViewMessage.ejs +11 -9
  195. package/Tests/App/Accounts/LoginTwoFactorRecovery.test.tsx +972 -0
  196. package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +401 -0
  197. package/Tests/App/Dashboard/DiscoveryScanEditForm.test.tsx +707 -0
  198. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +1908 -18
  199. package/Tests/App/Dashboard/ResourceFeed.test.tsx +230 -0
  200. package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +216 -0
  201. package/Tests/App/Dashboard/TopologyAddToMonitoring.test.tsx +192 -0
  202. package/Tests/App/Dashboard/WorkspaceNotificationRuleConditions.test.tsx +439 -0
  203. package/Tests/Models/DatabaseModels/DateColumnDeserialization.test.ts +182 -0
  204. package/Tests/Models/DatabaseModels/RelationColumnModelTypeCoverage.test.ts +82 -0
  205. package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +398 -0
  206. package/Tests/Models/DiscoveryScanNameColumn.test.ts +151 -16
  207. package/Tests/Models/DiscoveryScanSnmpEnabledColumn.test.ts +593 -0
  208. package/Tests/Models/NetworkDeviceCreateContract.test.ts +102 -0
  209. package/Tests/Server/API/AIGenerationProjectAIToggle.test.ts +607 -0
  210. package/Tests/Server/API/AIGenerationRequestBudget.test.ts +355 -0
  211. package/Tests/Server/API/AIKillSwitchBackstop.test.ts +602 -0
  212. package/Tests/Server/API/BaseAPIUpdateDateColumns.test.ts +154 -0
  213. package/Tests/Server/API/MicrosoftTeamsBotTestEndpoint.test.ts +335 -0
  214. package/Tests/Server/API/UserOnCallLogTimelineAcknowledgePage.test.ts +611 -0
  215. package/Tests/Server/API/UserTotpAuthAPI.test.ts +498 -4
  216. package/Tests/Server/API/UserWebAuthnBackupCodeMinting.test.ts +682 -0
  217. package/Tests/Server/Infrastructure/ExampleDockerfiles.test.ts +595 -0
  218. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +9 -0
  219. package/Tests/Server/Services/AIServiceProjectAccess.test.ts +6 -0
  220. package/Tests/Server/Services/AutoImportScanCredentialSelect.test.ts +18 -0
  221. package/Tests/Server/Services/DatabaseServiceAggregateBy.test.ts +590 -0
  222. package/Tests/Server/Services/DatabaseServiceUpdateWriteRouting.test.ts +12 -0
  223. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +162 -26
  224. package/Tests/Server/Services/EnterpriseLicenseServiceCreate.test.ts +292 -0
  225. package/Tests/Server/Services/FeedRetentionConsistency.test.ts +119 -12
  226. package/Tests/Server/Services/LogAggregationAttributeOperators.test.ts +109 -0
  227. package/Tests/Server/Services/MetricAggregationAttributeOperators.test.ts +170 -0
  228. package/Tests/Server/Services/MonitorTemplateServiceNetworkDeviceSync.test.ts +383 -0
  229. package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +997 -3
  230. package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +830 -0
  231. package/Tests/Server/Services/NetworkDeviceAutoMonitorLifecycle.test.ts +528 -0
  232. package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +3141 -1
  233. package/Tests/Server/Services/NetworkDeviceRegisteredHostnames.test.ts +1023 -0
  234. package/Tests/Server/Services/NetworkDeviceSiteAssignmentRuleSkip.test.ts +728 -0
  235. package/Tests/Server/Services/NetworkInterfaceServiceUpsert.test.ts +795 -0
  236. package/Tests/Server/Services/NetworkSiteRollupPolicyAndMaintenance.test.ts +903 -0
  237. package/Tests/Server/Services/NetworkSiteService.test.ts +165 -24
  238. package/Tests/Server/Services/ProjectServiceChangePlan.test.ts +5 -3
  239. package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +5 -2
  240. package/Tests/Server/Services/ResourceCreationFeedWrites.test.ts +304 -0
  241. package/Tests/Server/Services/ResourceFeedServices.test.ts +269 -0
  242. package/Tests/Server/Services/ResourceOwnerFeedWrites.test.ts +245 -0
  243. package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +792 -0
  244. package/Tests/Server/Services/TelemetrySourceMapService.test.ts +483 -0
  245. package/Tests/Server/Services/ThreatIntelFeedService.test.ts +351 -0
  246. package/Tests/Server/Services/ThreatIntelIndicatorService.test.ts +366 -0
  247. package/Tests/Server/Services/TraceAggregationAttributeOperators.test.ts +507 -0
  248. package/Tests/Server/Services/UserTwoFactorBackupCodeGenerateIfNone.test.ts +705 -0
  249. package/Tests/Server/Services/WorkspaceNotificationRuleOnCallDutyPolicy.test.ts +306 -0
  250. package/Tests/Server/Types/Database/AggregateResultUtil.test.ts +386 -0
  251. package/Tests/Server/Types/Database/Permissions/SelectRejectionMessageContract.test.ts +424 -0
  252. package/Tests/Server/Types/Database/QueryHelperWildcard.test.ts +142 -0
  253. package/Tests/Server/Types/Workflow/Components/ApiComponentPrivateNetwork.test.ts +163 -0
  254. package/Tests/Server/Types/Workflow/Components/JavaScriptPrivateNetwork.test.ts +124 -0
  255. package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +5 -0
  256. package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +39 -1
  257. package/Tests/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.test.ts +338 -0
  258. package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorWildcard.test.ts +383 -0
  259. package/Tests/Server/Utils/Marketing/EmittedMarketingEvent.ts +23 -0
  260. package/Tests/Server/Utils/Marketing/MarketingEventUtil.test.ts +51 -0
  261. package/Tests/Server/Utils/Monitor/Criteria/SyntheticMonitorCriteria.test.ts +259 -0
  262. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPerSeriesFanout.test.ts +557 -0
  263. package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +12 -2
  264. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +404 -0
  265. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +8 -2
  266. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +125 -98
  267. package/Tests/Server/Utils/Monitor/PerEntityCriteriaFanOut.test.ts +444 -0
  268. package/Tests/Server/Utils/Monitor/PerSeriesSecondEntityAlerting.test.ts +1112 -0
  269. package/Tests/Server/Utils/NetworkDevice/DeviceHealthAggregation.test.ts +717 -0
  270. package/Tests/Server/Utils/NetworkDevice/RulePatternValidator.test.ts +78 -0
  271. package/Tests/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.test.ts +363 -0
  272. package/Tests/Server/Utils/OfflineAssetHygiene.test.ts +35 -0
  273. package/Tests/Server/Utils/OnCallNotificationContext.test.ts +908 -0
  274. package/Tests/Server/Utils/PrivateNetworkWebhookConfig.test.ts +423 -0
  275. package/Tests/Server/Utils/ResourceFeed/ResourceFeedUtil.test.ts +191 -0
  276. package/Tests/Server/Utils/SSRFProtectionPrivateNetwork.test.ts +597 -0
  277. package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +819 -0
  278. package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +381 -0
  279. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +417 -0
  280. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +819 -0
  281. package/Tests/Server/Utils/SecurityEvent/SecurityEventAlerting.test.ts +246 -0
  282. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.test.ts +282 -0
  283. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.test.ts +312 -0
  284. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.test.ts +854 -0
  285. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.test.ts +437 -0
  286. package/Tests/Server/Utils/StartServerErrorStatus.test.ts +225 -0
  287. package/Tests/Server/Utils/StatusPage/MonitorRulePatternValidator.test.ts +62 -0
  288. package/Tests/Server/Utils/StatusPageSubscriberWebhookPrivateNetwork.test.ts +119 -0
  289. package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +542 -0
  290. package/Tests/Server/Utils/TwoFactorBackupCodeNotification.test.ts +272 -0
  291. package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +111 -0
  292. package/Tests/Server/Utils/VendorAssets.test.ts +117 -0
  293. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +101 -4
  294. package/Tests/Server/Utils/Workspace/MicrosoftTeamsInstallStateDiagnostics.test.ts +922 -0
  295. package/Tests/Server/Utils/Workspace/MicrosoftTeamsRosterDiagnosticMessages.test.ts +642 -0
  296. package/Tests/Server/Views/OnCallAcknowledgePage.test.ts +430 -0
  297. package/Tests/Types/API/HostnameAuthorityParsing.test.ts +1 -0
  298. package/Tests/Types/API/URLMailtoQueryString.test.ts +439 -0
  299. package/Tests/Types/API/URLQueryString.test.ts +481 -0
  300. package/Tests/Types/API/URLRouteQuerySeparation.test.ts +491 -0
  301. package/Tests/Types/BaseDatabase/Wildcard.test.ts +163 -0
  302. package/Tests/Types/BaseDatabase/WildcardPattern.test.ts +149 -0
  303. package/Tests/Types/Database/DateColumnValue.test.ts +265 -0
  304. package/Tests/Types/DateToIsoStringOrNull.test.ts +67 -0
  305. package/Tests/Types/Log/LogQueryToFilter.test.ts +218 -43
  306. package/Tests/Types/Monitor/KubernetesTemplateGroupByKeys.test.ts +225 -0
  307. package/Tests/Types/Monitor/TemplateGroupByKeys.test.ts +296 -0
  308. package/Tests/Types/NetworkAutomation/RuleRunResult.test.ts +102 -0
  309. package/Tests/Types/NetworkAutomation/RuleRunResultDescribe.test.ts +145 -0
  310. package/Tests/Types/NetworkSite/SiteHealthRollupPolicy.test.ts +58 -0
  311. package/Tests/Types/SerializableObjectDictionaryImportCycle.test.ts +15 -0
  312. package/Tests/Types/Telemetry/TelemetrySearchQuery.test.ts +620 -0
  313. package/Tests/Types/WhatsApp/WhatsAppTemplates.test.ts +110 -0
  314. package/Tests/Types/Workspace/NotificationRuleConditionUtil.test.ts +76 -6
  315. package/Tests/Types/Workspace/NotificationRules/NotificationRuleCondition.test.ts +16 -4
  316. package/Tests/Types/Workspace/NotificationRules/OnCallDutyPolicyConditions.test.ts +669 -0
  317. package/Tests/UI/Components/DictionaryFilterOperatorWildcard.test.ts +175 -0
  318. package/Tests/UI/Components/IconOpticalSize.test.tsx +377 -0
  319. package/Tests/UI/Components/LogsHistogramDragTooltip.test.tsx +393 -0
  320. package/Tests/UI/Components/LogsViewerHistogramZoom.test.tsx +248 -0
  321. package/Tests/UI/Components/TelemetryHistogramDragTooltip.test.tsx +205 -0
  322. package/Tests/UI/Components/UseHistogramZoom.test.tsx +262 -0
  323. package/Tests/UI/MicrosoftTeams/MicrosoftTeamsChatsCardInstallGuidance.test.tsx +332 -0
  324. package/Tests/UI/MicrosoftTeams/MicrosoftTeamsInstallGuidanceContent.test.tsx +643 -0
  325. package/Tests/Utils/Monitor/InterfaceInventoryUtil.test.ts +824 -0
  326. package/Tests/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.test.ts +626 -0
  327. package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +718 -0
  328. package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +59 -0
  329. package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +287 -2
  330. package/Tests/Utils/NetworkDiscovery/DiscoveryImportEligibility.test.ts +73 -0
  331. package/Tests/Utils/NetworkDiscovery/PingMonitorBuilder.test.ts +317 -0
  332. package/Tests/Utils/NetworkDiscovery/RescanIntervalUtil.test.ts +262 -0
  333. package/Tests/Utils/NetworkDiscovery/ScanModeUtil.test.ts +474 -0
  334. package/Tests/Utils/NetworkDiscovery/SnmpScanConfigUtil.test.ts +2442 -0
  335. package/Tests/Utils/NetworkSite/SiteMaintenanceUtil.test.ts +188 -0
  336. package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +522 -0
  337. package/Tests/Utils/NetworkSite/SiteUptimeUtil.test.ts +694 -0
  338. package/Tests/Utils/SecurityEvent/ThreatIntel/StixPatternParser.test.ts +281 -0
  339. package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +87 -67
  340. package/Types/API/URL.ts +100 -28
  341. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +8 -0
  342. package/Types/BaseDatabase/NotWildcard.ts +86 -0
  343. package/Types/BaseDatabase/Wildcard.ts +89 -0
  344. package/Types/BaseDatabase/WildcardPattern.ts +176 -0
  345. package/Types/Database/DateColumnValue.ts +184 -0
  346. package/Types/Database/TableColumn.ts +40 -5
  347. package/Types/Date.ts +37 -0
  348. package/Types/Email/EmailTemplateType.ts +1 -0
  349. package/Types/JSON.ts +8 -0
  350. package/Types/Log/LogQueryToFilter.ts +167 -129
  351. package/Types/Monitor/DockerAlertTemplates.ts +43 -12
  352. package/Types/Monitor/HostAlertTemplates.ts +31 -3
  353. package/Types/Monitor/KubernetesAlertTemplates.ts +98 -0
  354. package/Types/Monitor/MonitorStep.ts +49 -0
  355. package/Types/Monitor/PodmanAlertTemplates.ts +39 -12
  356. package/Types/Monitor/SnmpMonitor/CdpNeighbor.ts +14 -0
  357. package/Types/Monitor/SnmpMonitor/LldpNeighbor.ts +11 -0
  358. package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +11 -4
  359. package/Types/NetworkAutomation/RuleRunResult.ts +191 -2
  360. package/Types/NetworkSite/SiteHealthRollupPolicy.ts +96 -0
  361. package/Types/Permission.ts +411 -0
  362. package/Types/Probe/ProbeApiIngestResponse.ts +42 -0
  363. package/Types/SecurityEvent/ThreatIntelConstants.ts +118 -0
  364. package/Types/SerializableObjectDictionary.ts +8 -0
  365. package/Types/Telemetry/SourceMap.ts +56 -0
  366. package/Types/Telemetry/TelemetrySearchQuery.ts +949 -0
  367. package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +12 -1
  368. package/UI/Components/Charts/Utils/useHistogramZoom.ts +101 -0
  369. package/UI/Components/Dictionary/DictionaryFilterOperator.ts +83 -0
  370. package/UI/Components/Icon/Icon.tsx +28 -1
  371. package/UI/Components/LogsViewer/LogsViewer.tsx +19 -3
  372. package/UI/Components/LogsViewer/components/LogSearchBar.tsx +26 -4
  373. package/UI/Components/LogsViewer/components/LogSearchHelp.tsx +34 -16
  374. package/UI/Components/LogsViewer/components/LogsHistogram.tsx +52 -1
  375. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +18 -2
  376. package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +52 -1
  377. package/UI/Components/TelemetryViewer/components/TelemetrySearchBar.tsx +15 -2
  378. package/Utils/Metrics/MetricExplorerUrl.ts +77 -15
  379. package/Utils/Monitor/InterfaceInventoryUtil.ts +251 -0
  380. package/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.ts +333 -0
  381. package/Utils/Monitor/NetworkTopologyUtil.ts +249 -28
  382. package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +14 -6
  383. package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +2 -0
  384. package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +49 -18
  385. package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +215 -0
  386. package/Utils/NetworkDiscovery/RescanIntervalUtil.ts +148 -0
  387. package/Utils/NetworkDiscovery/ScanModeUtil.ts +105 -0
  388. package/Utils/NetworkDiscovery/SnmpScanConfigUtil.ts +827 -0
  389. package/Utils/NetworkSite/SiteMaintenanceUtil.ts +110 -0
  390. package/Utils/NetworkSite/SiteStatusRollupUtil.ts +350 -19
  391. package/Utils/NetworkSite/SiteUptimeUtil.ts +422 -21
  392. package/Utils/SecurityEvent/ThreatIntel/StixPatternParser.ts +383 -0
  393. package/Utils/Telemetry/CrossSignalScope.ts +37 -39
  394. package/build/dist/Models/AnalyticsModels/Index.js +2 -0
  395. package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
  396. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +325 -0
  397. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -0
  398. package/build/dist/Models/DatabaseModels/AlertSeverity.js +4 -1
  399. package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
  400. package/build/dist/Models/DatabaseModels/CephClusterFeed.js +648 -0
  401. package/build/dist/Models/DatabaseModels/CephClusterFeed.js.map +1 -0
  402. package/build/dist/Models/DatabaseModels/CloudResourceFeed.js +648 -0
  403. package/build/dist/Models/DatabaseModels/CloudResourceFeed.js.map +1 -0
  404. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +11 -0
  405. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
  406. package/build/dist/Models/DatabaseModels/DetectionRule.js +9 -3
  407. package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
  408. package/build/dist/Models/DatabaseModels/DockerHostFeed.js +648 -0
  409. package/build/dist/Models/DatabaseModels/DockerHostFeed.js.map +1 -0
  410. package/build/dist/Models/DatabaseModels/DockerSwarmClusterFeed.js +648 -0
  411. package/build/dist/Models/DatabaseModels/DockerSwarmClusterFeed.js.map +1 -0
  412. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +9 -3
  413. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
  414. package/build/dist/Models/DatabaseModels/HostFeed.js +648 -0
  415. package/build/dist/Models/DatabaseModels/HostFeed.js.map +1 -0
  416. package/build/dist/Models/DatabaseModels/IncidentSeverity.js +4 -1
  417. package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
  418. package/build/dist/Models/DatabaseModels/Index.js +22 -0
  419. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  420. package/build/dist/Models/DatabaseModels/KubernetesClusterFeed.js +648 -0
  421. package/build/dist/Models/DatabaseModels/KubernetesClusterFeed.js.map +1 -0
  422. package/build/dist/Models/DatabaseModels/Monitor.js +81 -0
  423. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  424. package/build/dist/Models/DatabaseModels/NetworkDevice.js +103 -7
  425. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  426. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +91 -6
  427. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
  428. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +276 -31
  429. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  430. package/build/dist/Models/DatabaseModels/NetworkSite.js +124 -1
  431. package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
  432. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js +1 -0
  433. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js.map +1 -1
  434. package/build/dist/Models/DatabaseModels/PodmanHostFeed.js +648 -0
  435. package/build/dist/Models/DatabaseModels/PodmanHostFeed.js.map +1 -0
  436. package/build/dist/Models/DatabaseModels/ProxmoxClusterFeed.js +648 -0
  437. package/build/dist/Models/DatabaseModels/ProxmoxClusterFeed.js.map +1 -0
  438. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +66 -0
  439. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  440. package/build/dist/Models/DatabaseModels/ServiceFeed.js +648 -0
  441. package/build/dist/Models/DatabaseModels/ServiceFeed.js.map +1 -0
  442. package/build/dist/Models/DatabaseModels/TelemetrySourceMap.js +496 -0
  443. package/build/dist/Models/DatabaseModels/TelemetrySourceMap.js.map +1 -0
  444. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +800 -0
  445. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -0
  446. package/build/dist/Models/DatabaseModels/UserOnCallLog.js +1 -0
  447. package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
  448. package/build/dist/Models/DatabaseModels/UserTotpAuth.js +1 -0
  449. package/build/dist/Models/DatabaseModels/UserTotpAuth.js.map +1 -1
  450. package/build/dist/Models/DatabaseModels/UserWebAuthn.js +1 -0
  451. package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
  452. package/build/dist/Server/API/AlertAPI.js +18 -1
  453. package/build/dist/Server/API/AlertAPI.js.map +1 -1
  454. package/build/dist/Server/API/BaseAPI.js +8 -1
  455. package/build/dist/Server/API/BaseAPI.js.map +1 -1
  456. package/build/dist/Server/API/IncidentAPI.js +35 -1
  457. package/build/dist/Server/API/IncidentAPI.js.map +1 -1
  458. package/build/dist/Server/API/IncidentEpisodeAPI.js +18 -1
  459. package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -1
  460. package/build/dist/Server/API/MicrosoftTeamsAPI.js +30 -2
  461. package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
  462. package/build/dist/Server/API/ScheduledMaintenanceAPI.js +18 -1
  463. package/build/dist/Server/API/ScheduledMaintenanceAPI.js.map +1 -1
  464. package/build/dist/Server/API/SlackAPI.js +45 -0
  465. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  466. package/build/dist/Server/API/TelemetryAPI.js +100 -35
  467. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  468. package/build/dist/Server/API/UserOnCallLogTimelineAPI.js +64 -59
  469. package/build/dist/Server/API/UserOnCallLogTimelineAPI.js.map +1 -1
  470. package/build/dist/Server/API/UserTotpAuthAPI.js +65 -1
  471. package/build/dist/Server/API/UserTotpAuthAPI.js.map +1 -1
  472. package/build/dist/Server/API/UserWebAuthnAPI.js +42 -1
  473. package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
  474. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.js +26 -0
  475. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.js.map +1 -0
  476. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.js +22 -0
  477. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.js.map +1 -0
  478. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.js +88 -0
  479. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.js.map +1 -0
  480. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.js +39 -0
  481. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.js.map +1 -0
  482. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.js +34 -0
  483. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.js.map +1 -0
  484. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.js +32 -0
  485. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.js.map +1 -0
  486. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.js +61 -0
  487. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.js.map +1 -0
  488. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.js +23 -0
  489. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.js.map +1 -0
  490. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.js +179 -0
  491. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.js.map +1 -0
  492. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +18 -0
  493. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  494. package/build/dist/Server/Middleware/IdentityRateLimit.js +40 -3
  495. package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
  496. package/build/dist/Server/Services/AIService.js +177 -30
  497. package/build/dist/Server/Services/AIService.js.map +1 -1
  498. package/build/dist/Server/Services/CephClusterFeedService.js +89 -0
  499. package/build/dist/Server/Services/CephClusterFeedService.js.map +1 -0
  500. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +27 -3
  501. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
  502. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +21 -0
  503. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
  504. package/build/dist/Server/Services/CephClusterOwnerTeamService.js +120 -0
  505. package/build/dist/Server/Services/CephClusterOwnerTeamService.js.map +1 -1
  506. package/build/dist/Server/Services/CephClusterOwnerUserService.js +113 -0
  507. package/build/dist/Server/Services/CephClusterOwnerUserService.js.map +1 -1
  508. package/build/dist/Server/Services/CephClusterService.js +175 -1
  509. package/build/dist/Server/Services/CephClusterService.js.map +1 -1
  510. package/build/dist/Server/Services/CloudResourceFeedService.js +89 -0
  511. package/build/dist/Server/Services/CloudResourceFeedService.js.map +1 -0
  512. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +27 -3
  513. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
  514. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +28 -3
  515. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
  516. package/build/dist/Server/Services/CloudResourceOwnerTeamService.js +120 -0
  517. package/build/dist/Server/Services/CloudResourceOwnerTeamService.js.map +1 -1
  518. package/build/dist/Server/Services/CloudResourceOwnerUserService.js +113 -0
  519. package/build/dist/Server/Services/CloudResourceOwnerUserService.js.map +1 -1
  520. package/build/dist/Server/Services/CloudResourceService.js +177 -1
  521. package/build/dist/Server/Services/CloudResourceService.js.map +1 -1
  522. package/build/dist/Server/Services/DatabaseService.js +201 -0
  523. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  524. package/build/dist/Server/Services/DockerHostFeedService.js +89 -0
  525. package/build/dist/Server/Services/DockerHostFeedService.js.map +1 -0
  526. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +27 -3
  527. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
  528. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +21 -0
  529. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
  530. package/build/dist/Server/Services/DockerHostOwnerTeamService.js +120 -0
  531. package/build/dist/Server/Services/DockerHostOwnerTeamService.js.map +1 -1
  532. package/build/dist/Server/Services/DockerHostOwnerUserService.js +113 -0
  533. package/build/dist/Server/Services/DockerHostOwnerUserService.js.map +1 -1
  534. package/build/dist/Server/Services/DockerHostService.js +177 -1
  535. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  536. package/build/dist/Server/Services/DockerSwarmClusterFeedService.js +90 -0
  537. package/build/dist/Server/Services/DockerSwarmClusterFeedService.js.map +1 -0
  538. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +27 -3
  539. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
  540. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +21 -0
  541. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
  542. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js +120 -0
  543. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js.map +1 -1
  544. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js +113 -0
  545. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js.map +1 -1
  546. package/build/dist/Server/Services/DockerSwarmClusterService.js +175 -1
  547. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
  548. package/build/dist/Server/Services/EnterpriseLicenseService.js +40 -30
  549. package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
  550. package/build/dist/Server/Services/ExceptionAggregationService.js +8 -2
  551. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  552. package/build/dist/Server/Services/HostFeedService.js +89 -0
  553. package/build/dist/Server/Services/HostFeedService.js.map +1 -0
  554. package/build/dist/Server/Services/HostLabelRuleEngineService.js +27 -3
  555. package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
  556. package/build/dist/Server/Services/HostOwnerRuleEngineService.js +21 -0
  557. package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
  558. package/build/dist/Server/Services/HostOwnerTeamService.js +120 -0
  559. package/build/dist/Server/Services/HostOwnerTeamService.js.map +1 -1
  560. package/build/dist/Server/Services/HostOwnerUserService.js +113 -0
  561. package/build/dist/Server/Services/HostOwnerUserService.js.map +1 -1
  562. package/build/dist/Server/Services/HostService.js +175 -1
  563. package/build/dist/Server/Services/HostService.js.map +1 -1
  564. package/build/dist/Server/Services/IncidentService.js +10 -0
  565. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  566. package/build/dist/Server/Services/Index.js +24 -0
  567. package/build/dist/Server/Services/Index.js.map +1 -1
  568. package/build/dist/Server/Services/KubernetesClusterFeedService.js +89 -0
  569. package/build/dist/Server/Services/KubernetesClusterFeedService.js.map +1 -0
  570. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +27 -3
  571. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
  572. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +21 -0
  573. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
  574. package/build/dist/Server/Services/KubernetesClusterOwnerTeamService.js +120 -0
  575. package/build/dist/Server/Services/KubernetesClusterOwnerTeamService.js.map +1 -1
  576. package/build/dist/Server/Services/KubernetesClusterOwnerUserService.js +113 -0
  577. package/build/dist/Server/Services/KubernetesClusterOwnerUserService.js.map +1 -1
  578. package/build/dist/Server/Services/KubernetesClusterService.js +177 -1
  579. package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
  580. package/build/dist/Server/Services/LogAggregationService.js +19 -196
  581. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  582. package/build/dist/Server/Services/MetricAggregationService.js +59 -0
  583. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  584. package/build/dist/Server/Services/MonitorService.js +115 -13
  585. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  586. package/build/dist/Server/Services/MonitorTemplateService.js +86 -0
  587. package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
  588. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +561 -67
  589. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  590. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +130 -16
  591. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
  592. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +850 -8
  593. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
  594. package/build/dist/Server/Services/NetworkDeviceService.js +594 -5
  595. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  596. package/build/dist/Server/Services/NetworkInterfaceService.js +306 -0
  597. package/build/dist/Server/Services/NetworkInterfaceService.js.map +1 -1
  598. package/build/dist/Server/Services/NetworkSiteService.js +408 -47
  599. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
  600. package/build/dist/Server/Services/PodmanHostFeedService.js +89 -0
  601. package/build/dist/Server/Services/PodmanHostFeedService.js.map +1 -0
  602. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +27 -3
  603. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
  604. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +21 -0
  605. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
  606. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js +120 -0
  607. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js.map +1 -1
  608. package/build/dist/Server/Services/PodmanHostOwnerUserService.js +113 -0
  609. package/build/dist/Server/Services/PodmanHostOwnerUserService.js.map +1 -1
  610. package/build/dist/Server/Services/PodmanHostService.js +177 -1
  611. package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
  612. package/build/dist/Server/Services/ProjectService.js +40 -30
  613. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  614. package/build/dist/Server/Services/ProxmoxClusterFeedService.js +89 -0
  615. package/build/dist/Server/Services/ProxmoxClusterFeedService.js.map +1 -0
  616. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +27 -3
  617. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
  618. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +21 -0
  619. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
  620. package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js +120 -0
  621. package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js.map +1 -1
  622. package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js +113 -0
  623. package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js.map +1 -1
  624. package/build/dist/Server/Services/ProxmoxClusterService.js +175 -1
  625. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
  626. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +56 -0
  627. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
  628. package/build/dist/Server/Services/ServiceFeedService.js +89 -0
  629. package/build/dist/Server/Services/ServiceFeedService.js.map +1 -0
  630. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +27 -3
  631. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
  632. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +24 -0
  633. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
  634. package/build/dist/Server/Services/ServiceOwnerTeamService.js +120 -0
  635. package/build/dist/Server/Services/ServiceOwnerTeamService.js.map +1 -1
  636. package/build/dist/Server/Services/ServiceOwnerUserService.js +113 -0
  637. package/build/dist/Server/Services/ServiceOwnerUserService.js.map +1 -1
  638. package/build/dist/Server/Services/ServiceService.js +173 -2
  639. package/build/dist/Server/Services/ServiceService.js.map +1 -1
  640. package/build/dist/Server/Services/StatusPageSubscriberService.js +7 -0
  641. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  642. package/build/dist/Server/Services/TelemetryAttributeService.js +9 -3
  643. package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
  644. package/build/dist/Server/Services/TelemetrySourceMapService.js +265 -0
  645. package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -0
  646. package/build/dist/Server/Services/ThreatIntelFeedService.js +157 -0
  647. package/build/dist/Server/Services/ThreatIntelFeedService.js.map +1 -0
  648. package/build/dist/Server/Services/ThreatIntelIndicatorService.js +276 -0
  649. package/build/dist/Server/Services/ThreatIntelIndicatorService.js.map +1 -0
  650. package/build/dist/Server/Services/TraceAggregationService.js +62 -6
  651. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  652. package/build/dist/Server/Services/UserService.js +22 -13
  653. package/build/dist/Server/Services/UserService.js.map +1 -1
  654. package/build/dist/Server/Services/UserTwoFactorBackupCodeService.js +120 -0
  655. package/build/dist/Server/Services/UserTwoFactorBackupCodeService.js.map +1 -1
  656. package/build/dist/Server/Services/UserWebhookService.js +11 -2
  657. package/build/dist/Server/Services/UserWebhookService.js.map +1 -1
  658. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +12 -1
  659. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
  660. package/build/dist/Server/Types/Database/AggregateBy.js +2 -0
  661. package/build/dist/Server/Types/Database/AggregateBy.js.map +1 -0
  662. package/build/dist/Server/Types/Database/AggregateResultUtil.js +90 -0
  663. package/build/dist/Server/Types/Database/AggregateResultUtil.js.map +1 -0
  664. package/build/dist/Server/Types/Database/JSONColumnQuery.js +14 -0
  665. package/build/dist/Server/Types/Database/JSONColumnQuery.js.map +1 -1
  666. package/build/dist/Server/Types/Database/QueryHelper.js +42 -0
  667. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  668. package/build/dist/Server/Types/Database/QueryUtil.js +18 -0
  669. package/build/dist/Server/Types/Database/QueryUtil.js.map +1 -1
  670. package/build/dist/Server/Types/Workflow/Components/API/Utils.js +10 -1
  671. package/build/dist/Server/Types/Workflow/Components/API/Utils.js.map +1 -1
  672. package/build/dist/Server/Types/Workflow/Components/JavaScript.js +8 -0
  673. package/build/dist/Server/Types/Workflow/Components/JavaScript.js.map +1 -1
  674. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +8 -0
  675. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -1
  676. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +15 -0
  677. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
  678. package/build/dist/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.js +266 -0
  679. package/build/dist/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.js.map +1 -0
  680. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +134 -0
  681. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  682. package/build/dist/Server/Utils/DataSource/HttpFetch.js +8 -0
  683. package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
  684. package/build/dist/Server/Utils/Database/RelationIdUtil.js +31 -0
  685. package/build/dist/Server/Utils/Database/RelationIdUtil.js.map +1 -1
  686. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js +26 -8
  687. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js.map +1 -1
  688. package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js +42 -17
  689. package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js.map +1 -1
  690. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +9 -1
  691. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  692. package/build/dist/Server/Utils/Monitor/Criteria/SyntheticMonitor.js +15 -2
  693. package/build/dist/Server/Utils/Monitor/Criteria/SyntheticMonitor.js.map +1 -1
  694. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +386 -271
  695. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  696. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +278 -64
  697. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  698. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +469 -350
  699. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  700. package/build/dist/Server/Utils/Monitor/MonitorResource.js +183 -44
  701. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  702. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +46 -3
  703. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
  704. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +18 -91
  705. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  706. package/build/dist/Server/Utils/Monitor/PerEntityCriteriaFanOut.js +194 -0
  707. package/build/dist/Server/Utils/Monitor/PerEntityCriteriaFanOut.js.map +1 -0
  708. package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js +332 -0
  709. package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js.map +1 -0
  710. package/build/dist/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.js +279 -0
  711. package/build/dist/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.js.map +1 -0
  712. package/build/dist/Server/Utils/OnCallNotificationContext.js +415 -0
  713. package/build/dist/Server/Utils/OnCallNotificationContext.js.map +1 -0
  714. package/build/dist/Server/Utils/PrivateNetworkWebhookConfig.js +424 -0
  715. package/build/dist/Server/Utils/PrivateNetworkWebhookConfig.js.map +1 -0
  716. package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js +108 -0
  717. package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js.map +1 -0
  718. package/build/dist/Server/Utils/Response.js +12 -1
  719. package/build/dist/Server/Utils/Response.js.map +1 -1
  720. package/build/dist/Server/Utils/SSRFProtection.js +160 -58
  721. package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
  722. package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js +89 -0
  723. package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js.map +1 -0
  724. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +75 -234
  725. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
  726. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +41 -16
  727. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
  728. package/build/dist/Server/Utils/SecurityEvent/SecurityEventAlerting.js +217 -0
  729. package/build/dist/Server/Utils/SecurityEvent/SecurityEventAlerting.js.map +1 -0
  730. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.js +103 -0
  731. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.js.map +1 -0
  732. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.js +168 -0
  733. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.js.map +1 -0
  734. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js +527 -0
  735. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js.map +1 -0
  736. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js +376 -0
  737. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js.map +1 -0
  738. package/build/dist/Server/Utils/StartServer.js +70 -44
  739. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  740. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js +3 -0
  741. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js.map +1 -1
  742. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +327 -0
  743. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -0
  744. package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js +84 -0
  745. package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js.map +1 -0
  746. package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
  747. package/build/dist/Server/Utils/VM/VMRunner.js +10 -1
  748. package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
  749. package/build/dist/Server/Utils/VendorAssets.js +29 -0
  750. package/build/dist/Server/Utils/VendorAssets.js.map +1 -1
  751. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +121 -6
  752. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  753. package/build/dist/Types/API/URL.js +88 -27
  754. package/build/dist/Types/API/URL.js.map +1 -1
  755. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +8 -0
  756. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
  757. package/build/dist/Types/BaseDatabase/NotWildcard.js +72 -0
  758. package/build/dist/Types/BaseDatabase/NotWildcard.js.map +1 -0
  759. package/build/dist/Types/BaseDatabase/Wildcard.js +75 -0
  760. package/build/dist/Types/BaseDatabase/Wildcard.js.map +1 -0
  761. package/build/dist/Types/BaseDatabase/WildcardPattern.js +137 -0
  762. package/build/dist/Types/BaseDatabase/WildcardPattern.js.map +1 -0
  763. package/build/dist/Types/Database/DateColumnValue.js +125 -0
  764. package/build/dist/Types/Database/DateColumnValue.js.map +1 -0
  765. package/build/dist/Types/Database/TableColumn.js +18 -2
  766. package/build/dist/Types/Database/TableColumn.js.map +1 -1
  767. package/build/dist/Types/Date.js +31 -0
  768. package/build/dist/Types/Date.js.map +1 -1
  769. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  770. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  771. package/build/dist/Types/JSON.js +2 -0
  772. package/build/dist/Types/JSON.js.map +1 -1
  773. package/build/dist/Types/Log/LogQueryToFilter.js +111 -108
  774. package/build/dist/Types/Log/LogQueryToFilter.js.map +1 -1
  775. package/build/dist/Types/Monitor/DockerAlertTemplates.js +40 -16
  776. package/build/dist/Types/Monitor/DockerAlertTemplates.js.map +1 -1
  777. package/build/dist/Types/Monitor/HostAlertTemplates.js +29 -7
  778. package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -1
  779. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +98 -4
  780. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
  781. package/build/dist/Types/Monitor/MonitorStep.js +40 -0
  782. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  783. package/build/dist/Types/Monitor/PodmanAlertTemplates.js +36 -16
  784. package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -1
  785. package/build/dist/Types/NetworkAutomation/RuleRunResult.js +90 -0
  786. package/build/dist/Types/NetworkAutomation/RuleRunResult.js.map +1 -1
  787. package/build/dist/Types/NetworkSite/SiteHealthRollupPolicy.js +84 -0
  788. package/build/dist/Types/NetworkSite/SiteHealthRollupPolicy.js.map +1 -0
  789. package/build/dist/Types/Permission.js +354 -0
  790. package/build/dist/Types/Permission.js.map +1 -1
  791. package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js +100 -0
  792. package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js.map +1 -0
  793. package/build/dist/Types/SerializableObjectDictionary.js +8 -0
  794. package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
  795. package/build/dist/Types/Telemetry/SourceMap.js +9 -0
  796. package/build/dist/Types/Telemetry/SourceMap.js.map +1 -0
  797. package/build/dist/Types/Telemetry/TelemetrySearchQuery.js +661 -0
  798. package/build/dist/Types/Telemetry/TelemetrySearchQuery.js.map +1 -0
  799. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +12 -1
  800. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
  801. package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js +47 -0
  802. package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js.map +1 -0
  803. package/build/dist/UI/Components/Dictionary/DictionaryFilterOperator.js +67 -0
  804. package/build/dist/UI/Components/Dictionary/DictionaryFilterOperator.js.map +1 -1
  805. package/build/dist/UI/Components/Icon/Icon.js +28 -1
  806. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  807. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +15 -3
  808. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  809. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js +25 -4
  810. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js.map +1 -1
  811. package/build/dist/UI/Components/LogsViewer/components/LogSearchHelp.js +36 -16
  812. package/build/dist/UI/Components/LogsViewer/components/LogSearchHelp.js.map +1 -1
  813. package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +33 -5
  814. package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
  815. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +14 -2
  816. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  817. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +33 -5
  818. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
  819. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js +14 -2
  820. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js.map +1 -1
  821. package/build/dist/Utils/Metrics/MetricExplorerUrl.js +54 -9
  822. package/build/dist/Utils/Metrics/MetricExplorerUrl.js.map +1 -1
  823. package/build/dist/Utils/Monitor/InterfaceInventoryUtil.js +128 -0
  824. package/build/dist/Utils/Monitor/InterfaceInventoryUtil.js.map +1 -0
  825. package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js +190 -0
  826. package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js.map +1 -0
  827. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +206 -28
  828. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  829. package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +14 -7
  830. package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -1
  831. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
  832. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +34 -18
  833. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
  834. package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +163 -0
  835. package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -0
  836. package/build/dist/Utils/NetworkDiscovery/RescanIntervalUtil.js +99 -0
  837. package/build/dist/Utils/NetworkDiscovery/RescanIntervalUtil.js.map +1 -0
  838. package/build/dist/Utils/NetworkDiscovery/ScanModeUtil.js +85 -0
  839. package/build/dist/Utils/NetworkDiscovery/ScanModeUtil.js.map +1 -0
  840. package/build/dist/Utils/NetworkDiscovery/SnmpScanConfigUtil.js +560 -0
  841. package/build/dist/Utils/NetworkDiscovery/SnmpScanConfigUtil.js.map +1 -0
  842. package/build/dist/Utils/NetworkSite/SiteMaintenanceUtil.js +56 -0
  843. package/build/dist/Utils/NetworkSite/SiteMaintenanceUtil.js.map +1 -0
  844. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +185 -10
  845. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
  846. package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js +248 -21
  847. package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js.map +1 -1
  848. package/build/dist/Utils/SecurityEvent/ThreatIntel/StixPatternParser.js +255 -0
  849. package/build/dist/Utils/SecurityEvent/ThreatIntel/StixPatternParser.js.map +1 -0
  850. package/build/dist/Utils/Telemetry/CrossSignalScope.js +27 -30
  851. package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
  852. package/package.json +2 -1
  853. package/Tests/Types/Log/LogQueryParser.test.ts +0 -186
  854. package/Types/Log/LogQueryParser.ts +0 -252
  855. package/build/dist/Types/Log/LogQueryParser.js +0 -200
  856. package/build/dist/Types/Log/LogQueryParser.js.map +0 -1
@@ -0,0 +1,922 @@
1
+ import { describe, expect, test, afterEach, beforeEach } from "@jest/globals";
2
+
3
+ /*
4
+ * Tests for the two pieces of MicrosoftTeamsUtil that turn "Microsoft said no"
5
+ * into something a OneUptime admin can act on:
6
+ *
7
+ * - isGraphPermissionDeniedResponse: tells a REFUSAL (401/403, or one of the
8
+ * Graph authorization error codes returned with some other status) apart from
9
+ * a FAILURE (transport error, throttling, Graph outage). Only a refusal names
10
+ * a permission the admin can grant.
11
+ *
12
+ * - isAppInstalledInTeam: asks Graph whether a package carrying THIS
13
+ * deployment's MICROSOFT_TEAMS_APP_CLIENT_ID is installed in a team, matching
14
+ * on teamsApp.externalId. The customer scenario this whole diagnostic exists
15
+ * for is an admin staring at a tile literally named "OneUptime" that was
16
+ * installed from the Teams store and therefore carries OneUptime Cloud's app
17
+ * id, not this deployment's — that MUST come back NotInstalled, because the
18
+ * bot behind it will never accept posts from this deployment.
19
+ *
20
+ * The load-bearing invariant across the whole file: no failure mode is ever
21
+ * reported as NotInstalled. A tenant that answers "I won't tell you" is
22
+ * PermissionDenied (fixable in a minute by granting one permission) and
23
+ * everything else is Unknown — never a false "the app is missing", which is
24
+ * what sends admins round the install loop a second time.
25
+ */
26
+
27
+ /*
28
+ * The client id has to be a literal here: jest.mock factories run while the
29
+ * module graph is being required, which is before any of this file's own consts
30
+ * exist. CLIENT_ID below repeats the same value, and a test asserts the two
31
+ * still agree so a copy-paste drift cannot quietly make every "Installed" case
32
+ * vacuous.
33
+ */
34
+ jest.mock("../../../../Server/EnvironmentConfig", () => {
35
+ return {
36
+ ...(jest.requireActual("../../../../Server/EnvironmentConfig") as Record<
37
+ string,
38
+ unknown
39
+ >),
40
+ MicrosoftTeamsAppClientId: "11111111-2222-3333-4444-555555555555",
41
+ MicrosoftTeamsAppClientSecret: "test-secret",
42
+ MicrosoftTeamsAppTenantId: "test-tenant",
43
+ };
44
+ });
45
+
46
+ /*
47
+ * Same botbuilder module factory as the other MicrosoftTeams suites — the
48
+ * repo-wide manual mock does not expose everything MicrosoftTeams.ts touches at
49
+ * import time.
50
+ */
51
+ jest.mock("botbuilder", () => {
52
+ return {
53
+ CloudAdapter: class CloudAdapter {},
54
+ ConfigurationBotFrameworkAuthentication: class ConfigurationBotFrameworkAuthentication {},
55
+ TeamsActivityHandler: class TeamsActivityHandler {},
56
+ TurnContext: class TurnContext {},
57
+ ActivityHandler: class ActivityHandler {},
58
+ MessageFactory: {
59
+ text: jest.fn(),
60
+ attachment: jest.fn(),
61
+ },
62
+ CardFactory: { heroCard: jest.fn() },
63
+ TeamsInfo: {
64
+ getMembers: jest.fn(),
65
+ getPagedMembers: jest.fn(),
66
+ },
67
+ };
68
+ });
69
+
70
+ import MicrosoftTeamsUtil, {
71
+ MicrosoftTeamsAppInstallState,
72
+ MICROSOFT_TEAMS_INSTALL_READ_PERMISSION,
73
+ } from "../../../../Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams";
74
+ import API from "../../../../Utils/API";
75
+ import HTTPResponse from "../../../../Types/API/HTTPResponse";
76
+ import HTTPErrorResponse from "../../../../Types/API/HTTPErrorResponse";
77
+ import URL from "../../../../Types/API/URL";
78
+ import Headers from "../../../../Types/API/Headers";
79
+ import { JSONObject } from "../../../../Types/JSON";
80
+ import ObjectID from "../../../../Types/ObjectID";
81
+ import { MessageFactory, CardFactory, TeamsInfo } from "botbuilder";
82
+
83
+ const CLIENT_ID: string = "11111111-2222-3333-4444-555555555555";
84
+ const GRAPH_TOKEN: string = "graph-token";
85
+ const AUTH_TOKEN: string = "stored-auth-token";
86
+ const TEAM_ID: string = "team-42";
87
+
88
+ // Mirrors MICROSOFT_TEAMS_MAX_PAGES in MicrosoftTeams.ts, which is not exported.
89
+ const MAX_PAGES: number = 500;
90
+
91
+ const FIRST_PAGE_URL: string = `https://graph.microsoft.com/v1.0/teams/${TEAM_ID}/installedApps?$expand=teamsApp`;
92
+ const SECOND_PAGE_URL: string = `https://graph.microsoft.com/v1.0/teams/${TEAM_ID}/installedApps?$expand=teamsApp&$skiptoken=page-2`;
93
+
94
+ interface CapturedGetCall {
95
+ url: URL;
96
+ headers: Headers;
97
+ }
98
+
99
+ /*
100
+ * MicrosoftTeams.ts reads MicrosoftTeamsAppClientId off the module object on
101
+ * every call, so overwriting the property on the mocked module is enough to
102
+ * make the deployment look unconfigured for one test. afterEach puts it back.
103
+ */
104
+ /*
105
+ * require(), not a top-level `import * as`, and deliberately so: an ES
106
+ * namespace import gives getter-only properties, and assigning to one throws
107
+ * "Cannot set property ... which has only a getter". The raw CommonJS module
108
+ * object is writable, which is the whole point — this flips the deployment to
109
+ * "unconfigured" for a single test and puts it back afterwards.
110
+ */
111
+ function mutableEnvironmentConfig(): Record<string, unknown> {
112
+ /* eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires */
113
+ return require("../../../../Server/EnvironmentConfig") as Record<
114
+ string,
115
+ unknown
116
+ >;
117
+ }
118
+
119
+ function setConfiguredClientId(clientId: string | null): void {
120
+ mutableEnvironmentConfig()["MicrosoftTeamsAppClientId"] = clientId;
121
+ }
122
+
123
+ function getConfiguredClientId(): unknown {
124
+ return mutableEnvironmentConfig()["MicrosoftTeamsAppClientId"];
125
+ }
126
+
127
+ function errorResponse(
128
+ statusCode: number,
129
+ body: JSONObject,
130
+ ): HTTPErrorResponse {
131
+ return new HTTPErrorResponse(statusCode, body, {});
132
+ }
133
+
134
+ function mockAccessToken(): jest.SpyInstance {
135
+ return jest
136
+ .spyOn(MicrosoftTeamsUtil, "getValidAccessToken")
137
+ .mockResolvedValue(GRAPH_TOKEN);
138
+ }
139
+
140
+ /*
141
+ * Queues one Graph result per page, in order. Each entry is either a raw JSON
142
+ * body (wrapped in a 200) or an already-built HTTPErrorResponse.
143
+ */
144
+ function mockGraphPages(
145
+ pages: Array<JSONObject | HTTPErrorResponse>,
146
+ ): jest.SpyInstance {
147
+ const getSpy: jest.SpyInstance = jest.spyOn(API, "get");
148
+
149
+ for (const page of pages) {
150
+ if (page instanceof HTTPErrorResponse) {
151
+ getSpy.mockResolvedValueOnce(page);
152
+ } else {
153
+ getSpy.mockResolvedValueOnce(new HTTPResponse<JSONObject>(200, page, {}));
154
+ }
155
+ }
156
+
157
+ return getSpy;
158
+ }
159
+
160
+ function installedAppJson(teamsApp: JSONObject | null): JSONObject {
161
+ const installedApp: JSONObject = {
162
+ id: `install-${JSON.stringify(teamsApp)}`,
163
+ };
164
+ if (teamsApp !== null) {
165
+ installedApp["teamsApp"] = teamsApp;
166
+ }
167
+ return installedApp;
168
+ }
169
+
170
+ async function callIsAppInstalledInTeam(data?: {
171
+ teamId?: string | undefined;
172
+ }): Promise<MicrosoftTeamsAppInstallState> {
173
+ return MicrosoftTeamsUtil.isAppInstalledInTeam({
174
+ authToken: AUTH_TOKEN,
175
+ projectId: ObjectID.generate(),
176
+ teamId: data?.teamId || TEAM_ID,
177
+ });
178
+ }
179
+
180
+ afterEach(() => {
181
+ jest.restoreAllMocks();
182
+ setConfiguredClientId(CLIENT_ID);
183
+ });
184
+
185
+ /*
186
+ * The botbuilder module mock's jest.fn()s are shared across test files in this
187
+ * suite run — jest.spyOn on an existing mock returns the same function, so call
188
+ * history and mockResolvedValueOnce queues leak between tests unless reset.
189
+ */
190
+ beforeEach(() => {
191
+ (MessageFactory.text as jest.Mock).mockReset();
192
+ (MessageFactory.attachment as jest.Mock).mockReset();
193
+ (CardFactory.heroCard as jest.Mock).mockReset();
194
+ (TeamsInfo.getMembers as jest.Mock).mockReset();
195
+ (TeamsInfo.getPagedMembers as jest.Mock).mockReset();
196
+ });
197
+
198
+ describe("MicrosoftTeamsUtil.isGraphPermissionDeniedResponse", () => {
199
+ describe("status codes", () => {
200
+ test("returns FALSE for a 401 expired token — that is a credential problem, not a missing grant", () => {
201
+ /*
202
+ * Graph answers a missing application permission with 403 and reserves 401
203
+ * for a token it will not accept. getValidAccessToken can hand back a
204
+ * cached app token without revalidating it when miscData carries no
205
+ * expiry, so this 401 is reachable in practice — and answering it with
206
+ * "grant TeamsAppInstallation.ReadForTeam.All" would be exactly the
207
+ * confidently-wrong diagnosis this whole change exists to stop producing.
208
+ */
209
+ expect(
210
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
211
+ errorResponse(401, { message: "Access token has expired." }),
212
+ ),
213
+ ).toBe(false);
214
+ });
215
+
216
+ test("returns true for 403, regardless of body", () => {
217
+ expect(
218
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
219
+ errorResponse(403, { message: "Forbidden." }),
220
+ ),
221
+ ).toBe(true);
222
+ });
223
+
224
+ test("returns false for a bare 401 with no message", () => {
225
+ expect(
226
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
227
+ errorResponse(401, {}),
228
+ ),
229
+ ).toBe(false);
230
+ });
231
+
232
+ test("returns true for a 401 that DOES carry an authorization error code", () => {
233
+ /*
234
+ * Status alone is not the whole signal. If Graph names an authorization
235
+ * refusal, honour it whatever status it arrived on.
236
+ */
237
+ expect(
238
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
239
+ errorResponse(401, {
240
+ error: { code: "Authorization_RequestDenied" },
241
+ }),
242
+ ),
243
+ ).toBe(true);
244
+ });
245
+
246
+ test("returns true for 403 even when the body carries no message at all", () => {
247
+ expect(
248
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
249
+ errorResponse(403, {}),
250
+ ),
251
+ ).toBe(true);
252
+ });
253
+
254
+ test("returns false for 500 with an unrelated message", () => {
255
+ expect(
256
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
257
+ errorResponse(500, {
258
+ message: "An internal server error occurred. Please try again.",
259
+ }),
260
+ ),
261
+ ).toBe(false);
262
+ });
263
+
264
+ test("returns false for 404 with an unrelated message", () => {
265
+ expect(
266
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
267
+ errorResponse(404, {
268
+ message: "No team found with the specified id.",
269
+ }),
270
+ ),
271
+ ).toBe(false);
272
+ });
273
+
274
+ test("returns false for 429 with an unrelated message (throttling is a failure, not a refusal)", () => {
275
+ expect(
276
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
277
+ errorResponse(429, {
278
+ message: "Too many requests. Retry after 30 seconds.",
279
+ }),
280
+ ),
281
+ ).toBe(false);
282
+ });
283
+
284
+ test("returns false when the body yields an empty message", () => {
285
+ expect(
286
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
287
+ errorResponse(500, {}),
288
+ ),
289
+ ).toBe(false);
290
+ });
291
+
292
+ test("returns false when the body has only unrelated keys, so message resolves empty", () => {
293
+ expect(
294
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
295
+ errorResponse(503, { requestId: "abc-123", date: "2026-01-01" }),
296
+ ),
297
+ ).toBe(false);
298
+ });
299
+ });
300
+
301
+ describe("message fragments on a non-401/403 status", () => {
302
+ /*
303
+ * Graph is not consistent about the status it returns with these codes, so
304
+ * each has to be recognised on its own. 400 is used here precisely because
305
+ * the status alone would not trip the check.
306
+ */
307
+ const fragmentCases: Array<{ name: string; message: string }> = [
308
+ {
309
+ name: "Authorization_RequestDenied (as written by Graph)",
310
+ message:
311
+ "Authorization_RequestDenied: Insufficient privileges to complete the operation.",
312
+ },
313
+ {
314
+ name: "accessDenied (as written by Graph)",
315
+ message: "accessDenied: Failed to execute Skype backend request.",
316
+ },
317
+ {
318
+ name: "Insufficient privileges (as written by Graph)",
319
+ message: "Insufficient privileges to complete the operation.",
320
+ },
321
+ ];
322
+
323
+ for (const fragmentCase of fragmentCases) {
324
+ test(`returns true for a 400 whose message contains ${fragmentCase.name}`, () => {
325
+ expect(
326
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
327
+ errorResponse(400, { message: fragmentCase.message }),
328
+ ),
329
+ ).toBe(true);
330
+ });
331
+
332
+ test(`matches ${fragmentCase.name} case-insensitively (all upper case)`, () => {
333
+ expect(
334
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
335
+ errorResponse(400, {
336
+ message: fragmentCase.message.toUpperCase(),
337
+ }),
338
+ ),
339
+ ).toBe(true);
340
+ });
341
+
342
+ test(`matches ${fragmentCase.name} case-insensitively (all lower case)`, () => {
343
+ expect(
344
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
345
+ errorResponse(400, {
346
+ message: fragmentCase.message.toLowerCase(),
347
+ }),
348
+ ),
349
+ ).toBe(true);
350
+ });
351
+ }
352
+
353
+ test("matches a fragment embedded mid-sentence, not just at the start", () => {
354
+ expect(
355
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
356
+ errorResponse(400, {
357
+ message:
358
+ 'Graph replied with code "Authorization_RequestDenied" while reading installedApps.',
359
+ }),
360
+ ),
361
+ ).toBe(true);
362
+ });
363
+ });
364
+
365
+ describe("nested body shapes (HTTPErrorResponse.message coercion)", () => {
366
+ test("finds the fragment in { error: { code, message } }, Graph's real error envelope", () => {
367
+ expect(
368
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
369
+ errorResponse(400, {
370
+ error: {
371
+ code: "Authorization_RequestDenied",
372
+ message: "Insufficient privileges to complete the operation.",
373
+ },
374
+ }),
375
+ ),
376
+ ).toBe(true);
377
+ });
378
+
379
+ test("finds the fragment in { error: { error: '...' } }, the nested-error shape", () => {
380
+ expect(
381
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
382
+ errorResponse(400, {
383
+ error: { error: "accessDenied while expanding teamsApp" },
384
+ }),
385
+ ),
386
+ ).toBe(true);
387
+ });
388
+
389
+ test("finds the fragment in { data: { message } }, since data is checked first", () => {
390
+ expect(
391
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
392
+ errorResponse(400, {
393
+ data: { message: "Authorization_RequestDenied" },
394
+ }),
395
+ ),
396
+ ).toBe(true);
397
+ });
398
+
399
+ test("finds the fragment via the JSON.stringify fallback when the object has neither message nor error", () => {
400
+ /*
401
+ * coerceToMessage falls back to JSON.stringify for an object it cannot
402
+ * read a message out of, so the code survives inside the serialised blob.
403
+ */
404
+ expect(
405
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
406
+ errorResponse(400, {
407
+ error: {
408
+ code: "Authorization_RequestDenied",
409
+ innerError: { requestId: "abc" },
410
+ },
411
+ }),
412
+ ),
413
+ ).toBe(true);
414
+ });
415
+
416
+ test("returns false for a nested body whose message is unrelated", () => {
417
+ expect(
418
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
419
+ errorResponse(500, {
420
+ error: {
421
+ code: "InternalServerError",
422
+ message: "An unexpected error occurred.",
423
+ },
424
+ }),
425
+ ),
426
+ ).toBe(false);
427
+ });
428
+ });
429
+
430
+ describe("near-misses (documenting the REAL matching behaviour)", () => {
431
+ /*
432
+ * The check is a plain substring test against three exact fragments, so
433
+ * English prose that MEANS the same thing does not match. These tests pin
434
+ * the real behaviour rather than the intended one: if someone later swaps
435
+ * the substring list for a looser regex, these will fail and force the
436
+ * change to be a deliberate one.
437
+ */
438
+ test("returns FALSE for 'access is denied for this user' on a 500 — the fragment is 'accessdenied' with no words between", () => {
439
+ expect(
440
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
441
+ errorResponse(500, {
442
+ message: "Access is denied for this user.",
443
+ }),
444
+ ),
445
+ ).toBe(false);
446
+ });
447
+
448
+ test("returns FALSE for 'Access denied' (with a space) on a 500 — only the run-together Graph code matches", () => {
449
+ expect(
450
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
451
+ errorResponse(500, { message: "Access denied." }),
452
+ ),
453
+ ).toBe(false);
454
+ });
455
+
456
+ test("returns FALSE for 'insufficient permissions' on a 500 — the fragment is 'insufficient privileges'", () => {
457
+ expect(
458
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
459
+ errorResponse(500, {
460
+ message: "Insufficient permissions to complete the operation.",
461
+ }),
462
+ ),
463
+ ).toBe(false);
464
+ });
465
+
466
+ test("returns FALSE for 'unauthorized' on a 500 — a word the check deliberately does not carry", () => {
467
+ expect(
468
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
469
+ errorResponse(500, { message: "Unauthorized." }),
470
+ ),
471
+ ).toBe(false);
472
+ });
473
+
474
+ test("returns TRUE for the bare code 'accessDenied' on a 500 — the run-together form is what matches", () => {
475
+ expect(
476
+ MicrosoftTeamsUtil.isGraphPermissionDeniedResponse(
477
+ errorResponse(500, { message: "accessDenied" }),
478
+ ),
479
+ ).toBe(true);
480
+ });
481
+ });
482
+ });
483
+
484
+ describe("MicrosoftTeamsUtil.isAppInstalledInTeam", () => {
485
+ test("test fixture guard: the mocked deployment really is configured with CLIENT_ID", () => {
486
+ /*
487
+ * Every Installed assertion below is only meaningful if the client id the
488
+ * fixtures hand to Graph is the client id the code compares against. If
489
+ * these ever drift apart, the Installed cases would silently become
490
+ * NotInstalled cases and stop testing anything.
491
+ */
492
+ expect(getConfiguredClientId()).toBe(CLIENT_ID);
493
+ });
494
+
495
+ describe("Installed", () => {
496
+ test("Installed when a teamsApp externalId equals this deployment's client id", async () => {
497
+ mockAccessToken();
498
+ mockGraphPages([
499
+ {
500
+ value: [
501
+ installedAppJson({
502
+ id: "graph-generated-id",
503
+ displayName: "OneUptime",
504
+ externalId: CLIENT_ID,
505
+ }),
506
+ ],
507
+ },
508
+ ]);
509
+
510
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
511
+ MicrosoftTeamsAppInstallState.Installed,
512
+ );
513
+ });
514
+
515
+ test("Installed when the match is on the SECOND page (@odata.nextLink pagination)", async () => {
516
+ mockAccessToken();
517
+ const getSpy: jest.SpyInstance = mockGraphPages([
518
+ {
519
+ value: [
520
+ installedAppJson({
521
+ displayName: "Planner",
522
+ externalId: "some-other-app-id",
523
+ }),
524
+ ],
525
+ "@odata.nextLink": SECOND_PAGE_URL,
526
+ },
527
+ {
528
+ value: [
529
+ installedAppJson({
530
+ displayName: "OneUptime",
531
+ externalId: CLIENT_ID,
532
+ }),
533
+ ],
534
+ },
535
+ ]);
536
+
537
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
538
+ MicrosoftTeamsAppInstallState.Installed,
539
+ );
540
+
541
+ expect(getSpy).toHaveBeenCalledTimes(2);
542
+
543
+ const firstCall: CapturedGetCall = getSpy.mock
544
+ .calls[0]?.[0] as CapturedGetCall;
545
+ const secondCall: CapturedGetCall = getSpy.mock
546
+ .calls[1]?.[0] as CapturedGetCall;
547
+
548
+ expect(firstCall.url.toString()).toBe(FIRST_PAGE_URL);
549
+ expect(secondCall.url.toString()).toBe(SECOND_PAGE_URL);
550
+ expect(firstCall.headers["Authorization"]).toBe(`Bearer ${GRAPH_TOKEN}`);
551
+ expect(secondCall.headers["Authorization"]).toBe(`Bearer ${GRAPH_TOKEN}`);
552
+ });
553
+
554
+ test("stops paginating as soon as it finds the match", async () => {
555
+ mockAccessToken();
556
+ const getSpy: jest.SpyInstance = mockGraphPages([
557
+ {
558
+ value: [
559
+ installedAppJson({
560
+ displayName: "OneUptime",
561
+ externalId: CLIENT_ID,
562
+ }),
563
+ ],
564
+ "@odata.nextLink": SECOND_PAGE_URL,
565
+ },
566
+ ]);
567
+
568
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
569
+ MicrosoftTeamsAppInstallState.Installed,
570
+ );
571
+ expect(getSpy).toHaveBeenCalledTimes(1);
572
+ });
573
+
574
+ test("matches on externalId, not on displayName — a renamed package still counts as installed", async () => {
575
+ mockAccessToken();
576
+ mockGraphPages([
577
+ {
578
+ value: [
579
+ installedAppJson({
580
+ displayName: "Acme Status (self-hosted)",
581
+ externalId: CLIENT_ID,
582
+ }),
583
+ ],
584
+ },
585
+ ]);
586
+
587
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
588
+ MicrosoftTeamsAppInstallState.Installed,
589
+ );
590
+ });
591
+ });
592
+
593
+ describe("NotInstalled", () => {
594
+ test("NotInstalled when a single page has no matching externalId", async () => {
595
+ mockAccessToken();
596
+ mockGraphPages([
597
+ {
598
+ value: [
599
+ installedAppJson({
600
+ displayName: "Planner",
601
+ externalId: "planner-app-id",
602
+ }),
603
+ installedAppJson({
604
+ displayName: "Approvals",
605
+ externalId: "approvals-app-id",
606
+ }),
607
+ ],
608
+ },
609
+ ]);
610
+
611
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
612
+ MicrosoftTeamsAppInstallState.NotInstalled,
613
+ );
614
+ });
615
+
616
+ test("NotInstalled when the team has no installed apps at all", async () => {
617
+ mockAccessToken();
618
+ mockGraphPages([{ value: [] }]);
619
+
620
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
621
+ MicrosoftTeamsAppInstallState.NotInstalled,
622
+ );
623
+ });
624
+
625
+ test("NotInstalled when the response omits value entirely", async () => {
626
+ mockAccessToken();
627
+ mockGraphPages([{}]);
628
+
629
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
630
+ MicrosoftTeamsAppInstallState.NotInstalled,
631
+ );
632
+ });
633
+
634
+ test("NotInstalled when every page is exhausted with no matching externalId", async () => {
635
+ mockAccessToken();
636
+ const getSpy: jest.SpyInstance = mockGraphPages([
637
+ {
638
+ value: [
639
+ installedAppJson({ displayName: "Planner", externalId: "a" }),
640
+ ],
641
+ "@odata.nextLink": SECOND_PAGE_URL,
642
+ },
643
+ {
644
+ value: [installedAppJson({ displayName: "Forms", externalId: "b" })],
645
+ },
646
+ ]);
647
+
648
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
649
+ MicrosoftTeamsAppInstallState.NotInstalled,
650
+ );
651
+ expect(getSpy).toHaveBeenCalledTimes(2);
652
+ });
653
+
654
+ /*
655
+ * THE customer scenario. An admin installs "OneUptime" from the Teams
656
+ * store, sees the tile in Manage team > Apps, and reasonably concludes the
657
+ * integration is set up. That package carries OneUptime Cloud's app id, so
658
+ * its bot is a different bot and will never accept a proactive post from
659
+ * this deployment. Answering "Installed" here — matching on the name, or on
660
+ * anything other than this deployment's client id — would turn the whole
661
+ * diagnostic into a lie and send the admin looking at the Azure Bot
662
+ * resource for a problem that is really the wrong package.
663
+ */
664
+ test("NotInstalled for a DIFFERENT app that is also called OneUptime (the Teams-store package)", async () => {
665
+ mockAccessToken();
666
+ mockGraphPages([
667
+ {
668
+ value: [
669
+ installedAppJson({
670
+ id: "store-catalog-id",
671
+ displayName: "OneUptime",
672
+ distributionMethod: "store",
673
+ externalId: "99999999-8888-7777-6666-555555555555",
674
+ }),
675
+ ],
676
+ },
677
+ ]);
678
+
679
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
680
+ MicrosoftTeamsAppInstallState.NotInstalled,
681
+ );
682
+ });
683
+
684
+ test("NotInstalled when an installed app carries no teamsApp expansion", async () => {
685
+ mockAccessToken();
686
+ mockGraphPages([{ value: [installedAppJson(null)] }]);
687
+
688
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
689
+ MicrosoftTeamsAppInstallState.NotInstalled,
690
+ );
691
+ });
692
+
693
+ test("NotInstalled when a teamsApp has no externalId at all", async () => {
694
+ mockAccessToken();
695
+ mockGraphPages([
696
+ { value: [installedAppJson({ displayName: "OneUptime" })] },
697
+ ]);
698
+
699
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
700
+ MicrosoftTeamsAppInstallState.NotInstalled,
701
+ );
702
+ });
703
+ });
704
+
705
+ describe("PermissionDenied", () => {
706
+ test("PermissionDenied when Graph answers 403", async () => {
707
+ mockAccessToken();
708
+ mockGraphPages([
709
+ errorResponse(403, {
710
+ error: {
711
+ code: "Authorization_RequestDenied",
712
+ message: "Insufficient privileges to complete the operation.",
713
+ },
714
+ }),
715
+ ]);
716
+
717
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
718
+ MicrosoftTeamsAppInstallState.PermissionDenied,
719
+ );
720
+ });
721
+
722
+ test("Unknown — not PermissionDenied — when Graph answers 401 with a bad token", async () => {
723
+ /*
724
+ * An expired or empty token is a credential problem. Reporting it as
725
+ * PermissionDenied would put "grant this Graph permission" in front of an
726
+ * admin whose permission was never the issue.
727
+ */
728
+ mockAccessToken();
729
+ mockGraphPages([
730
+ errorResponse(401, {
731
+ error: {
732
+ code: "InvalidAuthenticationToken",
733
+ message: "Access token is empty.",
734
+ },
735
+ }),
736
+ ]);
737
+
738
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
739
+ MicrosoftTeamsAppInstallState.Unknown,
740
+ );
741
+ });
742
+
743
+ test("PermissionDenied on a non-401/403 status carrying an authorization code", async () => {
744
+ mockAccessToken();
745
+ mockGraphPages([
746
+ errorResponse(400, {
747
+ error: {
748
+ code: "Authorization_RequestDenied",
749
+ message: "Insufficient privileges to complete the operation.",
750
+ },
751
+ }),
752
+ ]);
753
+
754
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
755
+ MicrosoftTeamsAppInstallState.PermissionDenied,
756
+ );
757
+ });
758
+
759
+ test("PermissionDenied when the refusal arrives on the SECOND page, not the first", async () => {
760
+ mockAccessToken();
761
+ mockGraphPages([
762
+ {
763
+ value: [
764
+ installedAppJson({ displayName: "Planner", externalId: "a" }),
765
+ ],
766
+ "@odata.nextLink": SECOND_PAGE_URL,
767
+ },
768
+ errorResponse(403, { message: "Forbidden." }),
769
+ ]);
770
+
771
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
772
+ MicrosoftTeamsAppInstallState.PermissionDenied,
773
+ );
774
+ });
775
+
776
+ test("a refusal is never reported as NotInstalled", async () => {
777
+ mockAccessToken();
778
+ mockGraphPages([errorResponse(403, { message: "Forbidden." })]);
779
+
780
+ const state: MicrosoftTeamsAppInstallState =
781
+ await callIsAppInstalledInTeam();
782
+
783
+ expect(state).not.toBe(MicrosoftTeamsAppInstallState.NotInstalled);
784
+ expect(state).not.toBe(MicrosoftTeamsAppInstallState.Installed);
785
+ });
786
+
787
+ test("names the grant that fixes it in the roster rejection message", () => {
788
+ const message: string = MicrosoftTeamsUtil.getRosterRejectionMessage({
789
+ channelName: "Ops",
790
+ installState: MicrosoftTeamsAppInstallState.PermissionDenied,
791
+ });
792
+
793
+ expect(message).toContain(MICROSOFT_TEAMS_INSTALL_READ_PERMISSION);
794
+ expect(MICROSOFT_TEAMS_INSTALL_READ_PERMISSION).toBe(
795
+ "TeamsAppInstallation.ReadForTeam.All",
796
+ );
797
+ });
798
+ });
799
+
800
+ describe("Unknown", () => {
801
+ test("Unknown when Graph answers 500 with an unrelated message", async () => {
802
+ mockAccessToken();
803
+ mockGraphPages([
804
+ errorResponse(500, {
805
+ error: {
806
+ code: "InternalServerError",
807
+ message: "An unexpected error occurred.",
808
+ },
809
+ }),
810
+ ]);
811
+
812
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
813
+ MicrosoftTeamsAppInstallState.Unknown,
814
+ );
815
+ });
816
+
817
+ test("Unknown when Graph answers 429 (throttling is a failure, not a refusal)", async () => {
818
+ mockAccessToken();
819
+ mockGraphPages([errorResponse(429, { message: "Too many requests." })]);
820
+
821
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
822
+ MicrosoftTeamsAppInstallState.Unknown,
823
+ );
824
+ });
825
+
826
+ test("Unknown when Graph answers 404 for the team", async () => {
827
+ mockAccessToken();
828
+ mockGraphPages([
829
+ errorResponse(404, { message: "No team found with the specified id." }),
830
+ ]);
831
+
832
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
833
+ MicrosoftTeamsAppInstallState.Unknown,
834
+ );
835
+ });
836
+
837
+ test("Unknown when getValidAccessToken throws", async () => {
838
+ jest
839
+ .spyOn(MicrosoftTeamsUtil, "getValidAccessToken")
840
+ .mockRejectedValue(new Error("Refresh token expired"));
841
+ const getSpy: jest.SpyInstance = jest.spyOn(API, "get");
842
+
843
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
844
+ MicrosoftTeamsAppInstallState.Unknown,
845
+ );
846
+ expect(getSpy).not.toHaveBeenCalled();
847
+ });
848
+
849
+ test("Unknown when API.get itself rejects (transport failure)", async () => {
850
+ mockAccessToken();
851
+ jest
852
+ .spyOn(API, "get")
853
+ .mockRejectedValue(new Error("getaddrinfo ENOTFOUND"));
854
+
855
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
856
+ MicrosoftTeamsAppInstallState.Unknown,
857
+ );
858
+ });
859
+
860
+ test("Unknown when the client id is not configured, without calling Graph", async () => {
861
+ setConfiguredClientId(null);
862
+ const tokenSpy: jest.SpyInstance = mockAccessToken();
863
+ /*
864
+ * A rejecting implementation rather than a bare spy, so that a
865
+ * regression which does reach Graph fails loudly here instead of
866
+ * attempting a real network call.
867
+ */
868
+ const getSpy: jest.SpyInstance = jest
869
+ .spyOn(API, "get")
870
+ .mockRejectedValue(new Error("Graph must not be called"));
871
+
872
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
873
+ MicrosoftTeamsAppInstallState.Unknown,
874
+ );
875
+ expect(tokenSpy).not.toHaveBeenCalled();
876
+ expect(getSpy).not.toHaveBeenCalled();
877
+ });
878
+
879
+ test("Unknown when the client id is configured as an empty string", async () => {
880
+ setConfiguredClientId("");
881
+ const getSpy: jest.SpyInstance = jest
882
+ .spyOn(API, "get")
883
+ .mockRejectedValue(new Error("Graph must not be called"));
884
+
885
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
886
+ MicrosoftTeamsAppInstallState.Unknown,
887
+ );
888
+ expect(getSpy).not.toHaveBeenCalled();
889
+ });
890
+
891
+ test(`Unknown when pagination exceeds the ${MAX_PAGES}-page cap, and it stops after exactly ${MAX_PAGES} requests`, async () => {
892
+ mockAccessToken();
893
+
894
+ /*
895
+ * A Graph response that always points at another page. Without the cap
896
+ * this is an infinite loop, so the assertion on the call count is the
897
+ * one that matters: the guard must fire, and it must fire before the
898
+ * request that would have been page 501.
899
+ */
900
+ const getSpy: jest.SpyInstance = jest.spyOn(API, "get").mockResolvedValue(
901
+ new HTTPResponse<JSONObject>(
902
+ 200,
903
+ {
904
+ value: [
905
+ installedAppJson({
906
+ displayName: "Planner",
907
+ externalId: "not-this-deployment",
908
+ }),
909
+ ],
910
+ "@odata.nextLink": SECOND_PAGE_URL,
911
+ },
912
+ {},
913
+ ),
914
+ );
915
+
916
+ await expect(callIsAppInstalledInTeam()).resolves.toBe(
917
+ MicrosoftTeamsAppInstallState.Unknown,
918
+ );
919
+ expect(getSpy).toHaveBeenCalledTimes(MAX_PAGES);
920
+ });
921
+ });
922
+ });