@oneuptime/common 12.0.25 → 12.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (834) hide show
  1. package/Models/AnalyticsModels/Index.ts +2 -0
  2. package/Models/AnalyticsModels/ThreatIntelIndicator.ts +413 -0
  3. package/Models/DatabaseModels/AlertSeverity.ts +4 -1
  4. package/Models/DatabaseModels/CephClusterFeed.ts +625 -0
  5. package/Models/DatabaseModels/CloudResourceFeed.ts +625 -0
  6. package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +13 -0
  7. package/Models/DatabaseModels/DetectionRule.ts +9 -3
  8. package/Models/DatabaseModels/DockerHostFeed.ts +625 -0
  9. package/Models/DatabaseModels/DockerSwarmClusterFeed.ts +628 -0
  10. package/Models/DatabaseModels/GoogleSecOpsConnection.ts +9 -3
  11. package/Models/DatabaseModels/HostFeed.ts +625 -0
  12. package/Models/DatabaseModels/IncidentSeverity.ts +4 -1
  13. package/Models/DatabaseModels/Index.ts +22 -0
  14. package/Models/DatabaseModels/KubernetesClusterFeed.ts +628 -0
  15. package/Models/DatabaseModels/Monitor.ts +87 -0
  16. package/Models/DatabaseModels/NetworkDevice.ts +96 -5
  17. package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +92 -6
  18. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +301 -31
  19. package/Models/DatabaseModels/NetworkSite.ts +120 -0
  20. package/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.ts +1 -0
  21. package/Models/DatabaseModels/PodmanHostFeed.ts +625 -0
  22. package/Models/DatabaseModels/ProxmoxClusterFeed.ts +626 -0
  23. package/Models/DatabaseModels/ScheduledMaintenance.ts +67 -0
  24. package/Models/DatabaseModels/ServiceFeed.ts +625 -0
  25. package/Models/DatabaseModels/TelemetrySourceMap.ts +474 -0
  26. package/Models/DatabaseModels/ThreatIntelFeed.ts +758 -0
  27. package/Models/DatabaseModels/UserOnCallLog.ts +1 -0
  28. package/Models/DatabaseModels/UserTotpAuth.ts +1 -0
  29. package/Models/DatabaseModels/UserWebAuthn.ts +1 -0
  30. package/Server/API/AlertAPI.ts +23 -1
  31. package/Server/API/BaseAPI.ts +14 -3
  32. package/Server/API/IncidentAPI.ts +41 -1
  33. package/Server/API/IncidentEpisodeAPI.ts +23 -1
  34. package/Server/API/MicrosoftTeamsAPI.ts +31 -2
  35. package/Server/API/ScheduledMaintenanceAPI.ts +23 -1
  36. package/Server/API/SlackAPI.ts +48 -0
  37. package/Server/API/TelemetryAPI.ts +167 -42
  38. package/Server/API/UserOnCallLogTimelineAPI.ts +75 -61
  39. package/Server/API/UserTotpAuthAPI.ts +67 -1
  40. package/Server/API/UserWebAuthnAPI.ts +44 -1
  41. package/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.ts +57 -0
  42. package/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.ts +49 -0
  43. package/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.ts +129 -0
  44. package/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.ts +54 -0
  45. package/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.ts +64 -0
  46. package/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.ts +64 -0
  47. package/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.ts +72 -0
  48. package/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.ts +31 -0
  49. package/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.ts +489 -0
  50. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +18 -0
  51. package/Server/Middleware/IdentityRateLimit.ts +53 -3
  52. package/Server/Services/AIService.ts +181 -41
  53. package/Server/Services/CephClusterFeedService.ts +99 -0
  54. package/Server/Services/CephClusterLabelRuleEngineService.ts +29 -0
  55. package/Server/Services/CephClusterOwnerRuleEngineService.ts +23 -0
  56. package/Server/Services/CephClusterOwnerTeamService.ts +129 -0
  57. package/Server/Services/CephClusterOwnerUserService.ts +123 -0
  58. package/Server/Services/CephClusterService.ts +223 -2
  59. package/Server/Services/CloudResourceFeedService.ts +99 -0
  60. package/Server/Services/CloudResourceLabelRuleEngineService.ts +30 -0
  61. package/Server/Services/CloudResourceOwnerRuleEngineService.ts +33 -0
  62. package/Server/Services/CloudResourceOwnerTeamService.ts +129 -0
  63. package/Server/Services/CloudResourceOwnerUserService.ts +123 -0
  64. package/Server/Services/CloudResourceService.ts +227 -2
  65. package/Server/Services/DatabaseService.ts +265 -0
  66. package/Server/Services/DockerHostFeedService.ts +99 -0
  67. package/Server/Services/DockerHostLabelRuleEngineService.ts +29 -0
  68. package/Server/Services/DockerHostOwnerRuleEngineService.ts +23 -0
  69. package/Server/Services/DockerHostOwnerTeamService.ts +129 -0
  70. package/Server/Services/DockerHostOwnerUserService.ts +123 -0
  71. package/Server/Services/DockerHostService.ts +227 -2
  72. package/Server/Services/DockerSwarmClusterFeedService.ts +102 -0
  73. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +30 -0
  74. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +24 -0
  75. package/Server/Services/DockerSwarmClusterOwnerTeamService.ts +133 -0
  76. package/Server/Services/DockerSwarmClusterOwnerUserService.ts +127 -0
  77. package/Server/Services/DockerSwarmClusterService.ts +229 -2
  78. package/Server/Services/EnterpriseLicenseService.ts +15 -7
  79. package/Server/Services/ExceptionAggregationService.ts +12 -2
  80. package/Server/Services/HostFeedService.ts +99 -0
  81. package/Server/Services/HostLabelRuleEngineService.ts +29 -0
  82. package/Server/Services/HostOwnerRuleEngineService.ts +23 -0
  83. package/Server/Services/HostOwnerTeamService.ts +129 -0
  84. package/Server/Services/HostOwnerUserService.ts +123 -0
  85. package/Server/Services/HostService.ts +215 -2
  86. package/Server/Services/IncidentService.ts +11 -0
  87. package/Server/Services/Index.ts +24 -0
  88. package/Server/Services/KubernetesClusterFeedService.ts +99 -0
  89. package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +30 -0
  90. package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +24 -0
  91. package/Server/Services/KubernetesClusterOwnerTeamService.ts +133 -0
  92. package/Server/Services/KubernetesClusterOwnerUserService.ts +127 -0
  93. package/Server/Services/KubernetesClusterService.ts +231 -2
  94. package/Server/Services/LogAggregationService.ts +23 -280
  95. package/Server/Services/MetricAggregationService.ts +98 -1
  96. package/Server/Services/MonitorService.ts +177 -13
  97. package/Server/Services/MonitorTemplateService.ts +111 -0
  98. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +777 -86
  99. package/Server/Services/NetworkDeviceAutoImportRuleService.ts +199 -16
  100. package/Server/Services/NetworkDeviceDiscoveryScanService.ts +1055 -14
  101. package/Server/Services/NetworkDeviceService.ts +750 -4
  102. package/Server/Services/NetworkInterfaceService.ts +415 -0
  103. package/Server/Services/NetworkSiteService.ts +485 -52
  104. package/Server/Services/PodmanHostFeedService.ts +99 -0
  105. package/Server/Services/PodmanHostLabelRuleEngineService.ts +29 -0
  106. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +23 -0
  107. package/Server/Services/PodmanHostOwnerTeamService.ts +129 -0
  108. package/Server/Services/PodmanHostOwnerUserService.ts +123 -0
  109. package/Server/Services/PodmanHostService.ts +227 -2
  110. package/Server/Services/ProjectService.ts +16 -10
  111. package/Server/Services/ProxmoxClusterFeedService.ts +99 -0
  112. package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +30 -0
  113. package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +24 -0
  114. package/Server/Services/ProxmoxClusterOwnerTeamService.ts +131 -0
  115. package/Server/Services/ProxmoxClusterOwnerUserService.ts +124 -0
  116. package/Server/Services/ProxmoxClusterService.ts +225 -2
  117. package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +61 -0
  118. package/Server/Services/ServiceFeedService.ts +99 -0
  119. package/Server/Services/ServiceLabelRuleEngineService.ts +29 -0
  120. package/Server/Services/ServiceOwnerRuleEngineService.ts +26 -0
  121. package/Server/Services/ServiceOwnerTeamService.ts +129 -0
  122. package/Server/Services/ServiceOwnerUserService.ts +123 -0
  123. package/Server/Services/ServiceService.ts +227 -3
  124. package/Server/Services/StatusPageSubscriberService.ts +7 -0
  125. package/Server/Services/TelemetryAttributeService.ts +13 -3
  126. package/Server/Services/TelemetrySourceMapService.ts +307 -0
  127. package/Server/Services/ThreatIntelFeedService.ts +222 -0
  128. package/Server/Services/ThreatIntelIndicatorService.ts +428 -0
  129. package/Server/Services/TraceAggregationService.ts +101 -11
  130. package/Server/Services/UserService.ts +13 -6
  131. package/Server/Services/UserTwoFactorBackupCodeService.ts +127 -0
  132. package/Server/Services/UserWebhookService.ts +11 -2
  133. package/Server/Static/Brand/README.md +38 -0
  134. package/Server/Static/Brand/favicons/apple-touch-icon.png +0 -0
  135. package/Server/Static/Brand/favicons/favicon-16x16.png +0 -0
  136. package/Server/Static/Brand/favicons/favicon-32x32.png +0 -0
  137. package/Server/Static/Brand/favicons/favicon.ico +0 -0
  138. package/Server/Static/Brand/favicons/safari-pinned-tab.svg +31 -0
  139. package/Server/Static/Brand/hou-wb.svg +1 -0
  140. package/Server/Static/Brand/oneuptime-logo.svg +1 -0
  141. package/Server/Static/Brand/ou-wb.svg +1 -0
  142. package/Server/Static/Vendor/README.md +4 -0
  143. package/Server/Types/AnalyticsDatabase/ModelPermission.ts +13 -3
  144. package/Server/Types/Database/AggregateBy.ts +83 -0
  145. package/Server/Types/Database/AggregateResultUtil.ts +126 -0
  146. package/Server/Types/Database/JSONColumnQuery.ts +18 -0
  147. package/Server/Types/Database/QueryHelper.ts +40 -0
  148. package/Server/Types/Database/QueryUtil.ts +26 -0
  149. package/Server/Types/Workflow/Components/API/Utils.ts +10 -1
  150. package/Server/Types/Workflow/Components/JavaScript.ts +8 -0
  151. package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +9 -0
  152. package/Server/Utils/AI/SRE/InvestigationGrader.ts +18 -0
  153. package/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.ts +422 -0
  154. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +176 -0
  155. package/Server/Utils/DataSource/HttpFetch.ts +18 -0
  156. package/Server/Utils/Database/RelationIdUtil.ts +42 -0
  157. package/Server/Utils/Marketing/MarketingEventUtil.ts +38 -9
  158. package/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.ts +34 -3
  159. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +9 -1
  160. package/Server/Utils/Monitor/Criteria/SyntheticMonitor.ts +28 -10
  161. package/Server/Utils/Monitor/MonitorAlert.ts +541 -332
  162. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +330 -64
  163. package/Server/Utils/Monitor/MonitorIncident.ts +640 -434
  164. package/Server/Utils/Monitor/MonitorResource.ts +226 -49
  165. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +46 -3
  166. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +23 -102
  167. package/Server/Utils/Monitor/PerEntityCriteriaFanOut.ts +329 -0
  168. package/Server/Utils/NetworkDevice/DeviceHealthAggregation.ts +427 -0
  169. package/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.ts +310 -0
  170. package/Server/Utils/OnCallNotificationContext.ts +686 -0
  171. package/Server/Utils/PrivateNetworkWebhookConfig.ts +549 -0
  172. package/Server/Utils/ResourceFeed/ResourceFeedUtil.ts +139 -0
  173. package/Server/Utils/Response.ts +11 -1
  174. package/Server/Utils/SSRFProtection.ts +230 -60
  175. package/Server/Utils/SecurityEvent/ConnectorErrorMessage.ts +106 -0
  176. package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +84 -284
  177. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +47 -20
  178. package/Server/Utils/SecurityEvent/SecurityEventAlerting.ts +318 -0
  179. package/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.ts +199 -0
  180. package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.ts +252 -0
  181. package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.ts +739 -0
  182. package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.ts +533 -0
  183. package/Server/Utils/StartServer.ts +83 -56
  184. package/Server/Utils/StatusPageSubscriberWebhook.ts +3 -0
  185. package/Server/Utils/Telemetry/SourceMapResolver.ts +480 -0
  186. package/Server/Utils/TwoFactorBackupCodeNotification.ts +106 -0
  187. package/Server/Utils/VM/VMAPI.ts +3 -0
  188. package/Server/Utils/VM/VMRunner.ts +27 -1
  189. package/Server/Utils/VendorAssets.ts +42 -0
  190. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +136 -6
  191. package/Server/Views/AcknowledgeUserOnCallNotification.ejs +11 -9
  192. package/Server/Views/Partials/Head.ejs +9 -9
  193. package/Server/Views/Partials/OnCallNotificationDetails.ejs +48 -0
  194. package/Server/Views/ViewMessage.ejs +11 -9
  195. package/Tests/App/Accounts/LoginTwoFactorRecovery.test.tsx +972 -0
  196. package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +401 -0
  197. package/Tests/App/Dashboard/DiscoveryScanEditForm.test.tsx +707 -0
  198. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +1908 -18
  199. package/Tests/App/Dashboard/ResourceFeed.test.tsx +230 -0
  200. package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +216 -0
  201. package/Tests/App/Dashboard/TopologyAddToMonitoring.test.tsx +192 -0
  202. package/Tests/App/Dashboard/WorkspaceNotificationRuleConditions.test.tsx +439 -0
  203. package/Tests/Models/DatabaseModels/DateColumnDeserialization.test.ts +182 -0
  204. package/Tests/Models/DatabaseModels/RelationColumnModelTypeCoverage.test.ts +82 -0
  205. package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +398 -0
  206. package/Tests/Models/DiscoveryScanNameColumn.test.ts +151 -16
  207. package/Tests/Models/DiscoveryScanSnmpEnabledColumn.test.ts +593 -0
  208. package/Tests/Models/NetworkDeviceCreateContract.test.ts +102 -0
  209. package/Tests/Server/API/AIGenerationProjectAIToggle.test.ts +607 -0
  210. package/Tests/Server/API/AIGenerationRequestBudget.test.ts +355 -0
  211. package/Tests/Server/API/AIKillSwitchBackstop.test.ts +602 -0
  212. package/Tests/Server/API/BaseAPIUpdateDateColumns.test.ts +154 -0
  213. package/Tests/Server/API/MicrosoftTeamsBotTestEndpoint.test.ts +335 -0
  214. package/Tests/Server/API/UserOnCallLogTimelineAcknowledgePage.test.ts +611 -0
  215. package/Tests/Server/API/UserTotpAuthAPI.test.ts +498 -4
  216. package/Tests/Server/API/UserWebAuthnBackupCodeMinting.test.ts +682 -0
  217. package/Tests/Server/Infrastructure/ExampleDockerfiles.test.ts +595 -0
  218. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +9 -0
  219. package/Tests/Server/Services/AIServiceProjectAccess.test.ts +6 -0
  220. package/Tests/Server/Services/AutoImportScanCredentialSelect.test.ts +18 -0
  221. package/Tests/Server/Services/DatabaseServiceAggregateBy.test.ts +590 -0
  222. package/Tests/Server/Services/DatabaseServiceUpdateWriteRouting.test.ts +12 -0
  223. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +162 -26
  224. package/Tests/Server/Services/EnterpriseLicenseServiceCreate.test.ts +292 -0
  225. package/Tests/Server/Services/FeedRetentionConsistency.test.ts +119 -12
  226. package/Tests/Server/Services/LogAggregationAttributeOperators.test.ts +109 -0
  227. package/Tests/Server/Services/MetricAggregationAttributeOperators.test.ts +170 -0
  228. package/Tests/Server/Services/MonitorTemplateServiceNetworkDeviceSync.test.ts +383 -0
  229. package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +997 -3
  230. package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +830 -0
  231. package/Tests/Server/Services/NetworkDeviceAutoMonitorLifecycle.test.ts +528 -0
  232. package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +3141 -1
  233. package/Tests/Server/Services/NetworkDeviceRegisteredHostnames.test.ts +1023 -0
  234. package/Tests/Server/Services/NetworkDeviceSiteAssignmentRuleSkip.test.ts +728 -0
  235. package/Tests/Server/Services/NetworkInterfaceServiceUpsert.test.ts +795 -0
  236. package/Tests/Server/Services/NetworkSiteRollupPolicyAndMaintenance.test.ts +903 -0
  237. package/Tests/Server/Services/NetworkSiteService.test.ts +165 -24
  238. package/Tests/Server/Services/ProjectServiceChangePlan.test.ts +5 -3
  239. package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +5 -2
  240. package/Tests/Server/Services/ResourceCreationFeedWrites.test.ts +304 -0
  241. package/Tests/Server/Services/ResourceFeedServices.test.ts +269 -0
  242. package/Tests/Server/Services/ResourceOwnerFeedWrites.test.ts +245 -0
  243. package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +792 -0
  244. package/Tests/Server/Services/TelemetrySourceMapService.test.ts +483 -0
  245. package/Tests/Server/Services/ThreatIntelFeedService.test.ts +351 -0
  246. package/Tests/Server/Services/ThreatIntelIndicatorService.test.ts +366 -0
  247. package/Tests/Server/Services/TraceAggregationAttributeOperators.test.ts +507 -0
  248. package/Tests/Server/Services/UserTwoFactorBackupCodeGenerateIfNone.test.ts +705 -0
  249. package/Tests/Server/Services/WorkspaceNotificationRuleOnCallDutyPolicy.test.ts +306 -0
  250. package/Tests/Server/Types/Database/AggregateResultUtil.test.ts +386 -0
  251. package/Tests/Server/Types/Database/Permissions/SelectRejectionMessageContract.test.ts +424 -0
  252. package/Tests/Server/Types/Database/QueryHelperWildcard.test.ts +142 -0
  253. package/Tests/Server/Types/Workflow/Components/ApiComponentPrivateNetwork.test.ts +163 -0
  254. package/Tests/Server/Types/Workflow/Components/JavaScriptPrivateNetwork.test.ts +124 -0
  255. package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +5 -0
  256. package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +39 -1
  257. package/Tests/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.test.ts +338 -0
  258. package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorWildcard.test.ts +383 -0
  259. package/Tests/Server/Utils/Marketing/EmittedMarketingEvent.ts +23 -0
  260. package/Tests/Server/Utils/Marketing/MarketingEventUtil.test.ts +51 -0
  261. package/Tests/Server/Utils/Monitor/Criteria/SyntheticMonitorCriteria.test.ts +259 -0
  262. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPerSeriesFanout.test.ts +557 -0
  263. package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +12 -2
  264. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +404 -0
  265. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +8 -2
  266. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +125 -98
  267. package/Tests/Server/Utils/Monitor/PerEntityCriteriaFanOut.test.ts +444 -0
  268. package/Tests/Server/Utils/Monitor/PerSeriesSecondEntityAlerting.test.ts +1112 -0
  269. package/Tests/Server/Utils/NetworkDevice/DeviceHealthAggregation.test.ts +717 -0
  270. package/Tests/Server/Utils/NetworkDevice/RulePatternValidator.test.ts +78 -0
  271. package/Tests/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.test.ts +363 -0
  272. package/Tests/Server/Utils/OfflineAssetHygiene.test.ts +35 -0
  273. package/Tests/Server/Utils/OnCallNotificationContext.test.ts +908 -0
  274. package/Tests/Server/Utils/PrivateNetworkWebhookConfig.test.ts +423 -0
  275. package/Tests/Server/Utils/ResourceFeed/ResourceFeedUtil.test.ts +191 -0
  276. package/Tests/Server/Utils/SSRFProtectionPrivateNetwork.test.ts +597 -0
  277. package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +819 -0
  278. package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +381 -0
  279. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +417 -0
  280. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +819 -0
  281. package/Tests/Server/Utils/SecurityEvent/SecurityEventAlerting.test.ts +246 -0
  282. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.test.ts +282 -0
  283. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.test.ts +312 -0
  284. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.test.ts +854 -0
  285. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.test.ts +437 -0
  286. package/Tests/Server/Utils/StartServerErrorStatus.test.ts +225 -0
  287. package/Tests/Server/Utils/StatusPage/MonitorRulePatternValidator.test.ts +62 -0
  288. package/Tests/Server/Utils/StatusPageSubscriberWebhookPrivateNetwork.test.ts +119 -0
  289. package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +542 -0
  290. package/Tests/Server/Utils/TwoFactorBackupCodeNotification.test.ts +272 -0
  291. package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +111 -0
  292. package/Tests/Server/Utils/VendorAssets.test.ts +117 -0
  293. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +101 -4
  294. package/Tests/Server/Utils/Workspace/MicrosoftTeamsInstallStateDiagnostics.test.ts +922 -0
  295. package/Tests/Server/Utils/Workspace/MicrosoftTeamsRosterDiagnosticMessages.test.ts +642 -0
  296. package/Tests/Server/Views/OnCallAcknowledgePage.test.ts +430 -0
  297. package/Tests/Types/API/URLQueryString.test.ts +472 -0
  298. package/Tests/Types/BaseDatabase/Wildcard.test.ts +163 -0
  299. package/Tests/Types/BaseDatabase/WildcardPattern.test.ts +149 -0
  300. package/Tests/Types/Database/DateColumnValue.test.ts +265 -0
  301. package/Tests/Types/DateToIsoStringOrNull.test.ts +67 -0
  302. package/Tests/Types/Log/LogQueryToFilter.test.ts +218 -43
  303. package/Tests/Types/Monitor/KubernetesTemplateGroupByKeys.test.ts +225 -0
  304. package/Tests/Types/Monitor/TemplateGroupByKeys.test.ts +296 -0
  305. package/Tests/Types/NetworkAutomation/RuleRunResult.test.ts +102 -0
  306. package/Tests/Types/NetworkAutomation/RuleRunResultDescribe.test.ts +145 -0
  307. package/Tests/Types/NetworkSite/SiteHealthRollupPolicy.test.ts +58 -0
  308. package/Tests/Types/SerializableObjectDictionaryImportCycle.test.ts +15 -0
  309. package/Tests/Types/Telemetry/TelemetrySearchQuery.test.ts +620 -0
  310. package/Tests/Types/WhatsApp/WhatsAppTemplates.test.ts +110 -0
  311. package/Tests/Types/Workspace/NotificationRuleConditionUtil.test.ts +76 -6
  312. package/Tests/Types/Workspace/NotificationRules/NotificationRuleCondition.test.ts +16 -4
  313. package/Tests/Types/Workspace/NotificationRules/OnCallDutyPolicyConditions.test.ts +669 -0
  314. package/Tests/UI/Components/DictionaryFilterOperatorWildcard.test.ts +175 -0
  315. package/Tests/UI/Components/IconOpticalSize.test.tsx +377 -0
  316. package/Tests/UI/MicrosoftTeams/MicrosoftTeamsChatsCardInstallGuidance.test.tsx +332 -0
  317. package/Tests/UI/MicrosoftTeams/MicrosoftTeamsInstallGuidanceContent.test.tsx +643 -0
  318. package/Tests/Utils/Monitor/InterfaceInventoryUtil.test.ts +824 -0
  319. package/Tests/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.test.ts +626 -0
  320. package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +718 -0
  321. package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +59 -0
  322. package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +287 -2
  323. package/Tests/Utils/NetworkDiscovery/DiscoveryImportEligibility.test.ts +73 -0
  324. package/Tests/Utils/NetworkDiscovery/PingMonitorBuilder.test.ts +317 -0
  325. package/Tests/Utils/NetworkDiscovery/RescanIntervalUtil.test.ts +262 -0
  326. package/Tests/Utils/NetworkDiscovery/ScanModeUtil.test.ts +474 -0
  327. package/Tests/Utils/NetworkDiscovery/SnmpScanConfigUtil.test.ts +2442 -0
  328. package/Tests/Utils/NetworkSite/SiteMaintenanceUtil.test.ts +188 -0
  329. package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +522 -0
  330. package/Tests/Utils/NetworkSite/SiteUptimeUtil.test.ts +694 -0
  331. package/Tests/Utils/SecurityEvent/ThreatIntel/StixPatternParser.test.ts +281 -0
  332. package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +87 -67
  333. package/Types/API/URL.ts +45 -10
  334. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +8 -0
  335. package/Types/BaseDatabase/NotWildcard.ts +86 -0
  336. package/Types/BaseDatabase/Wildcard.ts +89 -0
  337. package/Types/BaseDatabase/WildcardPattern.ts +176 -0
  338. package/Types/Database/DateColumnValue.ts +184 -0
  339. package/Types/Database/TableColumn.ts +40 -5
  340. package/Types/Date.ts +37 -0
  341. package/Types/Email/EmailTemplateType.ts +1 -0
  342. package/Types/JSON.ts +8 -0
  343. package/Types/Log/LogQueryToFilter.ts +167 -129
  344. package/Types/Monitor/DockerAlertTemplates.ts +43 -12
  345. package/Types/Monitor/HostAlertTemplates.ts +31 -3
  346. package/Types/Monitor/KubernetesAlertTemplates.ts +98 -0
  347. package/Types/Monitor/MonitorStep.ts +49 -0
  348. package/Types/Monitor/PodmanAlertTemplates.ts +39 -12
  349. package/Types/Monitor/SnmpMonitor/CdpNeighbor.ts +14 -0
  350. package/Types/Monitor/SnmpMonitor/LldpNeighbor.ts +11 -0
  351. package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +11 -4
  352. package/Types/NetworkAutomation/RuleRunResult.ts +191 -2
  353. package/Types/NetworkSite/SiteHealthRollupPolicy.ts +96 -0
  354. package/Types/Permission.ts +411 -0
  355. package/Types/Probe/ProbeApiIngestResponse.ts +42 -0
  356. package/Types/SecurityEvent/ThreatIntelConstants.ts +118 -0
  357. package/Types/SerializableObjectDictionary.ts +8 -0
  358. package/Types/Telemetry/SourceMap.ts +56 -0
  359. package/Types/Telemetry/TelemetrySearchQuery.ts +949 -0
  360. package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +12 -1
  361. package/UI/Components/Dictionary/DictionaryFilterOperator.ts +83 -0
  362. package/UI/Components/Icon/Icon.tsx +28 -1
  363. package/UI/Components/LogsViewer/components/LogSearchBar.tsx +26 -4
  364. package/UI/Components/LogsViewer/components/LogSearchHelp.tsx +34 -16
  365. package/UI/Components/TelemetryViewer/components/TelemetrySearchBar.tsx +15 -2
  366. package/Utils/Metrics/MetricExplorerUrl.ts +77 -15
  367. package/Utils/Monitor/InterfaceInventoryUtil.ts +251 -0
  368. package/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.ts +333 -0
  369. package/Utils/Monitor/NetworkTopologyUtil.ts +249 -28
  370. package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +14 -6
  371. package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +2 -0
  372. package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +49 -18
  373. package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +215 -0
  374. package/Utils/NetworkDiscovery/RescanIntervalUtil.ts +148 -0
  375. package/Utils/NetworkDiscovery/ScanModeUtil.ts +105 -0
  376. package/Utils/NetworkDiscovery/SnmpScanConfigUtil.ts +827 -0
  377. package/Utils/NetworkSite/SiteMaintenanceUtil.ts +110 -0
  378. package/Utils/NetworkSite/SiteStatusRollupUtil.ts +350 -19
  379. package/Utils/NetworkSite/SiteUptimeUtil.ts +422 -21
  380. package/Utils/SecurityEvent/ThreatIntel/StixPatternParser.ts +383 -0
  381. package/Utils/Telemetry/CrossSignalScope.ts +37 -39
  382. package/build/dist/Models/AnalyticsModels/Index.js +2 -0
  383. package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
  384. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +325 -0
  385. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -0
  386. package/build/dist/Models/DatabaseModels/AlertSeverity.js +4 -1
  387. package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
  388. package/build/dist/Models/DatabaseModels/CephClusterFeed.js +648 -0
  389. package/build/dist/Models/DatabaseModels/CephClusterFeed.js.map +1 -0
  390. package/build/dist/Models/DatabaseModels/CloudResourceFeed.js +648 -0
  391. package/build/dist/Models/DatabaseModels/CloudResourceFeed.js.map +1 -0
  392. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +11 -0
  393. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
  394. package/build/dist/Models/DatabaseModels/DetectionRule.js +9 -3
  395. package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
  396. package/build/dist/Models/DatabaseModels/DockerHostFeed.js +648 -0
  397. package/build/dist/Models/DatabaseModels/DockerHostFeed.js.map +1 -0
  398. package/build/dist/Models/DatabaseModels/DockerSwarmClusterFeed.js +648 -0
  399. package/build/dist/Models/DatabaseModels/DockerSwarmClusterFeed.js.map +1 -0
  400. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +9 -3
  401. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
  402. package/build/dist/Models/DatabaseModels/HostFeed.js +648 -0
  403. package/build/dist/Models/DatabaseModels/HostFeed.js.map +1 -0
  404. package/build/dist/Models/DatabaseModels/IncidentSeverity.js +4 -1
  405. package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
  406. package/build/dist/Models/DatabaseModels/Index.js +22 -0
  407. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  408. package/build/dist/Models/DatabaseModels/KubernetesClusterFeed.js +648 -0
  409. package/build/dist/Models/DatabaseModels/KubernetesClusterFeed.js.map +1 -0
  410. package/build/dist/Models/DatabaseModels/Monitor.js +81 -0
  411. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  412. package/build/dist/Models/DatabaseModels/NetworkDevice.js +103 -7
  413. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  414. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +91 -6
  415. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
  416. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +276 -31
  417. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  418. package/build/dist/Models/DatabaseModels/NetworkSite.js +124 -1
  419. package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
  420. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js +1 -0
  421. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js.map +1 -1
  422. package/build/dist/Models/DatabaseModels/PodmanHostFeed.js +648 -0
  423. package/build/dist/Models/DatabaseModels/PodmanHostFeed.js.map +1 -0
  424. package/build/dist/Models/DatabaseModels/ProxmoxClusterFeed.js +648 -0
  425. package/build/dist/Models/DatabaseModels/ProxmoxClusterFeed.js.map +1 -0
  426. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +66 -0
  427. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  428. package/build/dist/Models/DatabaseModels/ServiceFeed.js +648 -0
  429. package/build/dist/Models/DatabaseModels/ServiceFeed.js.map +1 -0
  430. package/build/dist/Models/DatabaseModels/TelemetrySourceMap.js +496 -0
  431. package/build/dist/Models/DatabaseModels/TelemetrySourceMap.js.map +1 -0
  432. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +800 -0
  433. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -0
  434. package/build/dist/Models/DatabaseModels/UserOnCallLog.js +1 -0
  435. package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
  436. package/build/dist/Models/DatabaseModels/UserTotpAuth.js +1 -0
  437. package/build/dist/Models/DatabaseModels/UserTotpAuth.js.map +1 -1
  438. package/build/dist/Models/DatabaseModels/UserWebAuthn.js +1 -0
  439. package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
  440. package/build/dist/Server/API/AlertAPI.js +18 -1
  441. package/build/dist/Server/API/AlertAPI.js.map +1 -1
  442. package/build/dist/Server/API/BaseAPI.js +8 -1
  443. package/build/dist/Server/API/BaseAPI.js.map +1 -1
  444. package/build/dist/Server/API/IncidentAPI.js +35 -1
  445. package/build/dist/Server/API/IncidentAPI.js.map +1 -1
  446. package/build/dist/Server/API/IncidentEpisodeAPI.js +18 -1
  447. package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -1
  448. package/build/dist/Server/API/MicrosoftTeamsAPI.js +30 -2
  449. package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
  450. package/build/dist/Server/API/ScheduledMaintenanceAPI.js +18 -1
  451. package/build/dist/Server/API/ScheduledMaintenanceAPI.js.map +1 -1
  452. package/build/dist/Server/API/SlackAPI.js +45 -0
  453. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  454. package/build/dist/Server/API/TelemetryAPI.js +100 -35
  455. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  456. package/build/dist/Server/API/UserOnCallLogTimelineAPI.js +64 -59
  457. package/build/dist/Server/API/UserOnCallLogTimelineAPI.js.map +1 -1
  458. package/build/dist/Server/API/UserTotpAuthAPI.js +65 -1
  459. package/build/dist/Server/API/UserTotpAuthAPI.js.map +1 -1
  460. package/build/dist/Server/API/UserWebAuthnAPI.js +42 -1
  461. package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
  462. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.js +26 -0
  463. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.js.map +1 -0
  464. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.js +22 -0
  465. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.js.map +1 -0
  466. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.js +88 -0
  467. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.js.map +1 -0
  468. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.js +39 -0
  469. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.js.map +1 -0
  470. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.js +34 -0
  471. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.js.map +1 -0
  472. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.js +32 -0
  473. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.js.map +1 -0
  474. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.js +61 -0
  475. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.js.map +1 -0
  476. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.js +23 -0
  477. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.js.map +1 -0
  478. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.js +179 -0
  479. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.js.map +1 -0
  480. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +18 -0
  481. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  482. package/build/dist/Server/Middleware/IdentityRateLimit.js +40 -3
  483. package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
  484. package/build/dist/Server/Services/AIService.js +177 -30
  485. package/build/dist/Server/Services/AIService.js.map +1 -1
  486. package/build/dist/Server/Services/CephClusterFeedService.js +89 -0
  487. package/build/dist/Server/Services/CephClusterFeedService.js.map +1 -0
  488. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +27 -3
  489. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
  490. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +21 -0
  491. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
  492. package/build/dist/Server/Services/CephClusterOwnerTeamService.js +120 -0
  493. package/build/dist/Server/Services/CephClusterOwnerTeamService.js.map +1 -1
  494. package/build/dist/Server/Services/CephClusterOwnerUserService.js +113 -0
  495. package/build/dist/Server/Services/CephClusterOwnerUserService.js.map +1 -1
  496. package/build/dist/Server/Services/CephClusterService.js +175 -1
  497. package/build/dist/Server/Services/CephClusterService.js.map +1 -1
  498. package/build/dist/Server/Services/CloudResourceFeedService.js +89 -0
  499. package/build/dist/Server/Services/CloudResourceFeedService.js.map +1 -0
  500. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +27 -3
  501. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
  502. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +28 -3
  503. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
  504. package/build/dist/Server/Services/CloudResourceOwnerTeamService.js +120 -0
  505. package/build/dist/Server/Services/CloudResourceOwnerTeamService.js.map +1 -1
  506. package/build/dist/Server/Services/CloudResourceOwnerUserService.js +113 -0
  507. package/build/dist/Server/Services/CloudResourceOwnerUserService.js.map +1 -1
  508. package/build/dist/Server/Services/CloudResourceService.js +177 -1
  509. package/build/dist/Server/Services/CloudResourceService.js.map +1 -1
  510. package/build/dist/Server/Services/DatabaseService.js +201 -0
  511. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  512. package/build/dist/Server/Services/DockerHostFeedService.js +89 -0
  513. package/build/dist/Server/Services/DockerHostFeedService.js.map +1 -0
  514. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +27 -3
  515. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
  516. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +21 -0
  517. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
  518. package/build/dist/Server/Services/DockerHostOwnerTeamService.js +120 -0
  519. package/build/dist/Server/Services/DockerHostOwnerTeamService.js.map +1 -1
  520. package/build/dist/Server/Services/DockerHostOwnerUserService.js +113 -0
  521. package/build/dist/Server/Services/DockerHostOwnerUserService.js.map +1 -1
  522. package/build/dist/Server/Services/DockerHostService.js +177 -1
  523. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  524. package/build/dist/Server/Services/DockerSwarmClusterFeedService.js +90 -0
  525. package/build/dist/Server/Services/DockerSwarmClusterFeedService.js.map +1 -0
  526. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +27 -3
  527. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
  528. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +21 -0
  529. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
  530. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js +120 -0
  531. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js.map +1 -1
  532. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js +113 -0
  533. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js.map +1 -1
  534. package/build/dist/Server/Services/DockerSwarmClusterService.js +175 -1
  535. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
  536. package/build/dist/Server/Services/EnterpriseLicenseService.js +40 -30
  537. package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
  538. package/build/dist/Server/Services/ExceptionAggregationService.js +8 -2
  539. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  540. package/build/dist/Server/Services/HostFeedService.js +89 -0
  541. package/build/dist/Server/Services/HostFeedService.js.map +1 -0
  542. package/build/dist/Server/Services/HostLabelRuleEngineService.js +27 -3
  543. package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
  544. package/build/dist/Server/Services/HostOwnerRuleEngineService.js +21 -0
  545. package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
  546. package/build/dist/Server/Services/HostOwnerTeamService.js +120 -0
  547. package/build/dist/Server/Services/HostOwnerTeamService.js.map +1 -1
  548. package/build/dist/Server/Services/HostOwnerUserService.js +113 -0
  549. package/build/dist/Server/Services/HostOwnerUserService.js.map +1 -1
  550. package/build/dist/Server/Services/HostService.js +175 -1
  551. package/build/dist/Server/Services/HostService.js.map +1 -1
  552. package/build/dist/Server/Services/IncidentService.js +10 -0
  553. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  554. package/build/dist/Server/Services/Index.js +24 -0
  555. package/build/dist/Server/Services/Index.js.map +1 -1
  556. package/build/dist/Server/Services/KubernetesClusterFeedService.js +89 -0
  557. package/build/dist/Server/Services/KubernetesClusterFeedService.js.map +1 -0
  558. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +27 -3
  559. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
  560. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +21 -0
  561. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
  562. package/build/dist/Server/Services/KubernetesClusterOwnerTeamService.js +120 -0
  563. package/build/dist/Server/Services/KubernetesClusterOwnerTeamService.js.map +1 -1
  564. package/build/dist/Server/Services/KubernetesClusterOwnerUserService.js +113 -0
  565. package/build/dist/Server/Services/KubernetesClusterOwnerUserService.js.map +1 -1
  566. package/build/dist/Server/Services/KubernetesClusterService.js +177 -1
  567. package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
  568. package/build/dist/Server/Services/LogAggregationService.js +19 -196
  569. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  570. package/build/dist/Server/Services/MetricAggregationService.js +59 -0
  571. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  572. package/build/dist/Server/Services/MonitorService.js +115 -13
  573. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  574. package/build/dist/Server/Services/MonitorTemplateService.js +86 -0
  575. package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
  576. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +561 -67
  577. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  578. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +130 -16
  579. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
  580. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +850 -8
  581. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
  582. package/build/dist/Server/Services/NetworkDeviceService.js +594 -5
  583. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  584. package/build/dist/Server/Services/NetworkInterfaceService.js +306 -0
  585. package/build/dist/Server/Services/NetworkInterfaceService.js.map +1 -1
  586. package/build/dist/Server/Services/NetworkSiteService.js +408 -47
  587. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
  588. package/build/dist/Server/Services/PodmanHostFeedService.js +89 -0
  589. package/build/dist/Server/Services/PodmanHostFeedService.js.map +1 -0
  590. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +27 -3
  591. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
  592. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +21 -0
  593. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
  594. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js +120 -0
  595. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js.map +1 -1
  596. package/build/dist/Server/Services/PodmanHostOwnerUserService.js +113 -0
  597. package/build/dist/Server/Services/PodmanHostOwnerUserService.js.map +1 -1
  598. package/build/dist/Server/Services/PodmanHostService.js +177 -1
  599. package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
  600. package/build/dist/Server/Services/ProjectService.js +40 -30
  601. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  602. package/build/dist/Server/Services/ProxmoxClusterFeedService.js +89 -0
  603. package/build/dist/Server/Services/ProxmoxClusterFeedService.js.map +1 -0
  604. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +27 -3
  605. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
  606. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +21 -0
  607. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
  608. package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js +120 -0
  609. package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js.map +1 -1
  610. package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js +113 -0
  611. package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js.map +1 -1
  612. package/build/dist/Server/Services/ProxmoxClusterService.js +175 -1
  613. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
  614. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +56 -0
  615. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
  616. package/build/dist/Server/Services/ServiceFeedService.js +89 -0
  617. package/build/dist/Server/Services/ServiceFeedService.js.map +1 -0
  618. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +27 -3
  619. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
  620. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +24 -0
  621. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
  622. package/build/dist/Server/Services/ServiceOwnerTeamService.js +120 -0
  623. package/build/dist/Server/Services/ServiceOwnerTeamService.js.map +1 -1
  624. package/build/dist/Server/Services/ServiceOwnerUserService.js +113 -0
  625. package/build/dist/Server/Services/ServiceOwnerUserService.js.map +1 -1
  626. package/build/dist/Server/Services/ServiceService.js +173 -2
  627. package/build/dist/Server/Services/ServiceService.js.map +1 -1
  628. package/build/dist/Server/Services/StatusPageSubscriberService.js +7 -0
  629. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  630. package/build/dist/Server/Services/TelemetryAttributeService.js +9 -3
  631. package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
  632. package/build/dist/Server/Services/TelemetrySourceMapService.js +265 -0
  633. package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -0
  634. package/build/dist/Server/Services/ThreatIntelFeedService.js +157 -0
  635. package/build/dist/Server/Services/ThreatIntelFeedService.js.map +1 -0
  636. package/build/dist/Server/Services/ThreatIntelIndicatorService.js +276 -0
  637. package/build/dist/Server/Services/ThreatIntelIndicatorService.js.map +1 -0
  638. package/build/dist/Server/Services/TraceAggregationService.js +62 -6
  639. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  640. package/build/dist/Server/Services/UserService.js +22 -13
  641. package/build/dist/Server/Services/UserService.js.map +1 -1
  642. package/build/dist/Server/Services/UserTwoFactorBackupCodeService.js +120 -0
  643. package/build/dist/Server/Services/UserTwoFactorBackupCodeService.js.map +1 -1
  644. package/build/dist/Server/Services/UserWebhookService.js +11 -2
  645. package/build/dist/Server/Services/UserWebhookService.js.map +1 -1
  646. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +12 -1
  647. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
  648. package/build/dist/Server/Types/Database/AggregateBy.js +2 -0
  649. package/build/dist/Server/Types/Database/AggregateBy.js.map +1 -0
  650. package/build/dist/Server/Types/Database/AggregateResultUtil.js +90 -0
  651. package/build/dist/Server/Types/Database/AggregateResultUtil.js.map +1 -0
  652. package/build/dist/Server/Types/Database/JSONColumnQuery.js +14 -0
  653. package/build/dist/Server/Types/Database/JSONColumnQuery.js.map +1 -1
  654. package/build/dist/Server/Types/Database/QueryHelper.js +42 -0
  655. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  656. package/build/dist/Server/Types/Database/QueryUtil.js +18 -0
  657. package/build/dist/Server/Types/Database/QueryUtil.js.map +1 -1
  658. package/build/dist/Server/Types/Workflow/Components/API/Utils.js +10 -1
  659. package/build/dist/Server/Types/Workflow/Components/API/Utils.js.map +1 -1
  660. package/build/dist/Server/Types/Workflow/Components/JavaScript.js +8 -0
  661. package/build/dist/Server/Types/Workflow/Components/JavaScript.js.map +1 -1
  662. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +8 -0
  663. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -1
  664. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +15 -0
  665. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
  666. package/build/dist/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.js +266 -0
  667. package/build/dist/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.js.map +1 -0
  668. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +134 -0
  669. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  670. package/build/dist/Server/Utils/DataSource/HttpFetch.js +8 -0
  671. package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
  672. package/build/dist/Server/Utils/Database/RelationIdUtil.js +31 -0
  673. package/build/dist/Server/Utils/Database/RelationIdUtil.js.map +1 -1
  674. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js +26 -8
  675. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js.map +1 -1
  676. package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js +42 -17
  677. package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js.map +1 -1
  678. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +9 -1
  679. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  680. package/build/dist/Server/Utils/Monitor/Criteria/SyntheticMonitor.js +15 -2
  681. package/build/dist/Server/Utils/Monitor/Criteria/SyntheticMonitor.js.map +1 -1
  682. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +386 -271
  683. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  684. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +278 -64
  685. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  686. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +469 -350
  687. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  688. package/build/dist/Server/Utils/Monitor/MonitorResource.js +183 -44
  689. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  690. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +46 -3
  691. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
  692. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +18 -91
  693. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  694. package/build/dist/Server/Utils/Monitor/PerEntityCriteriaFanOut.js +194 -0
  695. package/build/dist/Server/Utils/Monitor/PerEntityCriteriaFanOut.js.map +1 -0
  696. package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js +332 -0
  697. package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js.map +1 -0
  698. package/build/dist/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.js +279 -0
  699. package/build/dist/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.js.map +1 -0
  700. package/build/dist/Server/Utils/OnCallNotificationContext.js +415 -0
  701. package/build/dist/Server/Utils/OnCallNotificationContext.js.map +1 -0
  702. package/build/dist/Server/Utils/PrivateNetworkWebhookConfig.js +424 -0
  703. package/build/dist/Server/Utils/PrivateNetworkWebhookConfig.js.map +1 -0
  704. package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js +108 -0
  705. package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js.map +1 -0
  706. package/build/dist/Server/Utils/Response.js +12 -1
  707. package/build/dist/Server/Utils/Response.js.map +1 -1
  708. package/build/dist/Server/Utils/SSRFProtection.js +160 -58
  709. package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
  710. package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js +89 -0
  711. package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js.map +1 -0
  712. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +75 -234
  713. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
  714. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +41 -16
  715. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
  716. package/build/dist/Server/Utils/SecurityEvent/SecurityEventAlerting.js +217 -0
  717. package/build/dist/Server/Utils/SecurityEvent/SecurityEventAlerting.js.map +1 -0
  718. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.js +103 -0
  719. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.js.map +1 -0
  720. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.js +168 -0
  721. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.js.map +1 -0
  722. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js +527 -0
  723. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js.map +1 -0
  724. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js +376 -0
  725. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js.map +1 -0
  726. package/build/dist/Server/Utils/StartServer.js +70 -44
  727. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  728. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js +3 -0
  729. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js.map +1 -1
  730. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +327 -0
  731. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -0
  732. package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js +84 -0
  733. package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js.map +1 -0
  734. package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
  735. package/build/dist/Server/Utils/VM/VMRunner.js +10 -1
  736. package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
  737. package/build/dist/Server/Utils/VendorAssets.js +29 -0
  738. package/build/dist/Server/Utils/VendorAssets.js.map +1 -1
  739. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +121 -6
  740. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  741. package/build/dist/Types/API/URL.js +40 -10
  742. package/build/dist/Types/API/URL.js.map +1 -1
  743. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +8 -0
  744. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
  745. package/build/dist/Types/BaseDatabase/NotWildcard.js +72 -0
  746. package/build/dist/Types/BaseDatabase/NotWildcard.js.map +1 -0
  747. package/build/dist/Types/BaseDatabase/Wildcard.js +75 -0
  748. package/build/dist/Types/BaseDatabase/Wildcard.js.map +1 -0
  749. package/build/dist/Types/BaseDatabase/WildcardPattern.js +137 -0
  750. package/build/dist/Types/BaseDatabase/WildcardPattern.js.map +1 -0
  751. package/build/dist/Types/Database/DateColumnValue.js +125 -0
  752. package/build/dist/Types/Database/DateColumnValue.js.map +1 -0
  753. package/build/dist/Types/Database/TableColumn.js +18 -2
  754. package/build/dist/Types/Database/TableColumn.js.map +1 -1
  755. package/build/dist/Types/Date.js +31 -0
  756. package/build/dist/Types/Date.js.map +1 -1
  757. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  758. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  759. package/build/dist/Types/JSON.js +2 -0
  760. package/build/dist/Types/JSON.js.map +1 -1
  761. package/build/dist/Types/Log/LogQueryToFilter.js +111 -108
  762. package/build/dist/Types/Log/LogQueryToFilter.js.map +1 -1
  763. package/build/dist/Types/Monitor/DockerAlertTemplates.js +40 -16
  764. package/build/dist/Types/Monitor/DockerAlertTemplates.js.map +1 -1
  765. package/build/dist/Types/Monitor/HostAlertTemplates.js +29 -7
  766. package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -1
  767. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +98 -4
  768. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
  769. package/build/dist/Types/Monitor/MonitorStep.js +40 -0
  770. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  771. package/build/dist/Types/Monitor/PodmanAlertTemplates.js +36 -16
  772. package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -1
  773. package/build/dist/Types/NetworkAutomation/RuleRunResult.js +90 -0
  774. package/build/dist/Types/NetworkAutomation/RuleRunResult.js.map +1 -1
  775. package/build/dist/Types/NetworkSite/SiteHealthRollupPolicy.js +84 -0
  776. package/build/dist/Types/NetworkSite/SiteHealthRollupPolicy.js.map +1 -0
  777. package/build/dist/Types/Permission.js +354 -0
  778. package/build/dist/Types/Permission.js.map +1 -1
  779. package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js +100 -0
  780. package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js.map +1 -0
  781. package/build/dist/Types/SerializableObjectDictionary.js +8 -0
  782. package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
  783. package/build/dist/Types/Telemetry/SourceMap.js +9 -0
  784. package/build/dist/Types/Telemetry/SourceMap.js.map +1 -0
  785. package/build/dist/Types/Telemetry/TelemetrySearchQuery.js +661 -0
  786. package/build/dist/Types/Telemetry/TelemetrySearchQuery.js.map +1 -0
  787. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +12 -1
  788. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
  789. package/build/dist/UI/Components/Dictionary/DictionaryFilterOperator.js +67 -0
  790. package/build/dist/UI/Components/Dictionary/DictionaryFilterOperator.js.map +1 -1
  791. package/build/dist/UI/Components/Icon/Icon.js +28 -1
  792. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  793. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js +25 -4
  794. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js.map +1 -1
  795. package/build/dist/UI/Components/LogsViewer/components/LogSearchHelp.js +36 -16
  796. package/build/dist/UI/Components/LogsViewer/components/LogSearchHelp.js.map +1 -1
  797. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js +14 -2
  798. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js.map +1 -1
  799. package/build/dist/Utils/Metrics/MetricExplorerUrl.js +54 -9
  800. package/build/dist/Utils/Metrics/MetricExplorerUrl.js.map +1 -1
  801. package/build/dist/Utils/Monitor/InterfaceInventoryUtil.js +128 -0
  802. package/build/dist/Utils/Monitor/InterfaceInventoryUtil.js.map +1 -0
  803. package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js +190 -0
  804. package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js.map +1 -0
  805. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +206 -28
  806. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  807. package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +14 -7
  808. package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -1
  809. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
  810. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +34 -18
  811. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
  812. package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +163 -0
  813. package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -0
  814. package/build/dist/Utils/NetworkDiscovery/RescanIntervalUtil.js +99 -0
  815. package/build/dist/Utils/NetworkDiscovery/RescanIntervalUtil.js.map +1 -0
  816. package/build/dist/Utils/NetworkDiscovery/ScanModeUtil.js +85 -0
  817. package/build/dist/Utils/NetworkDiscovery/ScanModeUtil.js.map +1 -0
  818. package/build/dist/Utils/NetworkDiscovery/SnmpScanConfigUtil.js +560 -0
  819. package/build/dist/Utils/NetworkDiscovery/SnmpScanConfigUtil.js.map +1 -0
  820. package/build/dist/Utils/NetworkSite/SiteMaintenanceUtil.js +56 -0
  821. package/build/dist/Utils/NetworkSite/SiteMaintenanceUtil.js.map +1 -0
  822. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +185 -10
  823. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
  824. package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js +248 -21
  825. package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js.map +1 -1
  826. package/build/dist/Utils/SecurityEvent/ThreatIntel/StixPatternParser.js +255 -0
  827. package/build/dist/Utils/SecurityEvent/ThreatIntel/StixPatternParser.js.map +1 -0
  828. package/build/dist/Utils/Telemetry/CrossSignalScope.js +27 -30
  829. package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
  830. package/package.json +2 -1
  831. package/Tests/Types/Log/LogQueryParser.test.ts +0 -186
  832. package/Types/Log/LogQueryParser.ts +0 -252
  833. package/build/dist/Types/Log/LogQueryParser.js +0 -200
  834. package/build/dist/Types/Log/LogQueryParser.js.map +0 -1
@@ -0,0 +1,949 @@
1
+ import EndsWith from "../BaseDatabase/EndsWith";
2
+ import GreaterThan from "../BaseDatabase/GreaterThan";
3
+ import GreaterThanOrEqual from "../BaseDatabase/GreaterThanOrEqual";
4
+ import Includes from "../BaseDatabase/Includes";
5
+ import IncludesNone from "../BaseDatabase/IncludesNone";
6
+ import IsNull from "../BaseDatabase/IsNull";
7
+ import LessThan from "../BaseDatabase/LessThan";
8
+ import LessThanOrEqual from "../BaseDatabase/LessThanOrEqual";
9
+ import NotContains from "../BaseDatabase/NotContains";
10
+ import NotEqual from "../BaseDatabase/NotEqual";
11
+ import NotNull from "../BaseDatabase/NotNull";
12
+ import NotWildcard from "../BaseDatabase/NotWildcard";
13
+ import Search from "../BaseDatabase/Search";
14
+ import StartsWith from "../BaseDatabase/StartsWith";
15
+ import Wildcard from "../BaseDatabase/Wildcard";
16
+ import {
17
+ escapeWildcards,
18
+ hasWildcard,
19
+ unescapeWildcards,
20
+ } from "../BaseDatabase/WildcardPattern";
21
+ import ObjectID from "../ObjectID";
22
+ import { JSONObject } from "../JSON";
23
+
24
+ /*
25
+ * The OneUptime telemetry search language — one grammar for logs, traces,
26
+ * metrics, exceptions and every other signal with an attributes map.
27
+ *
28
+ * Before this module each explorer carried its own tokenizer and its own idea
29
+ * of what a value meant: logs stripped `*` and searched for a substring,
30
+ * traces needed a bespoke `~` marker for "contains" and read `*` literally,
31
+ * metrics and exceptions supported nothing but equality. The same keystrokes
32
+ * produced three different queries, and `@platform.team:a*` — the shape every
33
+ * search UI in the industry teaches — matched nothing anywhere.
34
+ *
35
+ * free text connection refused message contains the phrase
36
+ * "quoted phrase" "out of memory" keeps spaces together
37
+ * field:value severity:error a top-level column
38
+ * @attribute:value @http.status_code:500 an attributes map entry
39
+ * -<filter> -severity:debug negate any filter
40
+ *
41
+ * and, as the value of either a field or an attribute:
42
+ *
43
+ * abc exact match (case-sensitive, like the stored value)
44
+ * a* *a a*b glob — `*` is any run of characters
45
+ * a?c glob — `?` is exactly one character
46
+ * \* a literal asterisk (also \? and \\)
47
+ * * the key exists with a non-empty value
48
+ * ~abc contains
49
+ * !abc not equal
50
+ * >10 >=10 <10 <=10 numeric comparison
51
+ * (a OR b) [a, b] any of these
52
+ * "a b*" quotes protect spaces, NOT wildcards
53
+ *
54
+ * Negation composes with all of them: `-@k:a*` is "does not match a*",
55
+ * `-@k:>10` is "<= 10", `-@k:(a OR b)` is "none of these", `-@k:*` is "the
56
+ * key is absent or empty".
57
+ */
58
+
59
+ export enum SearchTokenType {
60
+ FreeText = "FreeText",
61
+ Field = "Field",
62
+ Attribute = "Attribute",
63
+ }
64
+
65
+ export enum SearchValueOperator {
66
+ Equals = "Equals",
67
+ NotEquals = "NotEquals",
68
+ Contains = "Contains",
69
+ NotContains = "NotContains",
70
+ StartsWith = "StartsWith",
71
+ EndsWith = "EndsWith",
72
+ Wildcard = "Wildcard",
73
+ NotWildcard = "NotWildcard",
74
+ GreaterThan = "GreaterThan",
75
+ GreaterThanOrEqual = "GreaterThanOrEqual",
76
+ LessThan = "LessThan",
77
+ LessThanOrEqual = "LessThanOrEqual",
78
+ In = "In",
79
+ NotIn = "NotIn",
80
+ Exists = "Exists",
81
+ NotExists = "NotExists",
82
+ }
83
+
84
+ export interface SearchValuePredicate {
85
+ operator: SearchValueOperator;
86
+ /**
87
+ * The single literal this predicate compares against. For a glob it is the
88
+ * glob as typed (escapes intact) so it can be re-rendered; for everything
89
+ * else the escapes are already resolved. Empty for Exists / NotExists.
90
+ */
91
+ value: string;
92
+ /** Populated for In / NotIn only. */
93
+ values: Array<string>;
94
+ }
95
+
96
+ export interface SearchToken {
97
+ type: SearchTokenType;
98
+ /** Field name or attribute key, with the user's casing preserved. */
99
+ key: string;
100
+ predicate: SearchValuePredicate;
101
+ negated: boolean;
102
+ /** The token exactly as typed, so a search string can be rebuilt. */
103
+ raw: string;
104
+ }
105
+
106
+ export interface ParseSearchQueryOptions {
107
+ /**
108
+ * Field names this surface understands, lowercased. A `name: value` token
109
+ * (a space after the colon) is only glued back together for one of these or
110
+ * for an `@attribute`, so ordinary prose like "note: check this" stays free
111
+ * text rather than becoming a filter on a field called "note".
112
+ */
113
+ knownFieldKeys?: Set<string> | undefined;
114
+ /**
115
+ * Map a user-facing field name to the column it filters, e.g.
116
+ * `severity → severityText`. Looked up case-insensitively. Attribute keys
117
+ * are never aliased.
118
+ */
119
+ fieldAliases?: Record<string, string> | undefined;
120
+ }
121
+
122
+ const BOOLEAN_KEYWORDS: Set<string> = new Set(["AND", "OR", "NOT"]);
123
+
124
+ const LIST_SEPARATOR_REGEX: RegExp = /\s+OR\s+|,/i;
125
+
126
+ const NUMERIC_REGEX: RegExp = /^-?\d+(\.\d+)?$/;
127
+
128
+ const WHITESPACE_REGEX: RegExp = /\s/;
129
+
130
+ /*
131
+ * A quote is escaped wherever it appears: the tokenizer toggles on any of
132
+ * them, so an unescaped one mid-value would swallow the following space and
133
+ * silently merge two tokens.
134
+ */
135
+ const QUOTE_REGEX: RegExp = /(")/g;
136
+
137
+ /*
138
+ * `~ ! > <` are operators ONLY as the first character of a value, and a
139
+ * bracket pair only when it wraps the whole value. Escaping them everywhere
140
+ * would be safe but noisy — a service name like `svc~canary` would round-trip
141
+ * through a shared URL as `svc\~canary`, which is what the reader sees.
142
+ */
143
+ const LEADING_OPERATOR_REGEX: RegExp = /^([-~!<>])/;
144
+
145
+ const WRAPPED_LIST_REGEX: RegExp = /^(\()(.*)(\))$|^(\[)(.*)(\])$/;
146
+
147
+ /*
148
+ * What a bare (unprefixed) key has to look like before `key:value` is read as
149
+ * a filter rather than as prose. Without it every colon in a message became a
150
+ * filter on an invented field that matched nothing: `12:30` filtered a field
151
+ * called "12", and `https://example.com` one called "https". An explicit
152
+ * `@key:` bypasses this — the user has said what they mean.
153
+ */
154
+ const BARE_FIELD_KEY_REGEX: RegExp = /^[A-Za-z_][A-Za-z0-9._\-/]*$/;
155
+
156
+ /** A `//` after the colon is a URL scheme, never a filter value. */
157
+ const URL_SCHEME_VALUE_REGEX: RegExp = /^\/\//;
158
+
159
+ type StripQuotesFunction = (value: string) => string;
160
+
161
+ /** Remove one layer of surrounding double quotes, if present. */
162
+ export const stripQuotes: StripQuotesFunction = (value: string): string => {
163
+ if (value.length >= 2 && value.startsWith('"') && value.endsWith('"')) {
164
+ return value.slice(1, -1);
165
+ }
166
+
167
+ return value;
168
+ };
169
+
170
+ type TokenizeSearchQueryFunction = (
171
+ raw: string,
172
+ options?: ParseSearchQueryOptions | undefined,
173
+ ) => Array<string>;
174
+
175
+ /**
176
+ * Split a search string into raw tokens.
177
+ *
178
+ * A character scanner rather than a regex, because the three things that have
179
+ * to survive splitting all nest: double quotes (`name:"SELECT wp_options"`),
180
+ * bracketed value lists (`@k:(a OR b)`), and backslash escapes (`@k:a\ b`).
181
+ * The regex tokenizers this replaces each handled one of the three and
182
+ * silently mangled the others.
183
+ */
184
+ export const tokenizeSearchQuery: TokenizeSearchQueryFunction = (
185
+ raw: string,
186
+ options?: ParseSearchQueryOptions | undefined,
187
+ ): Array<string> => {
188
+ const tokens: Array<string> = [];
189
+ let current: string = "";
190
+ let inQuotes: boolean = false;
191
+ let depth: number = 0;
192
+
193
+ type IsAwaitingValueFunction = () => boolean;
194
+
195
+ /*
196
+ * True when `current` is a field prefix still waiting for its value —
197
+ * `severity:` or `@http.method:`. Only then does a space get absorbed
198
+ * instead of ending the token, which is what makes `name: POST` and
199
+ * `@k: "a b"` work without turning every colon in prose into a filter.
200
+ */
201
+ const isAwaitingValue: IsAwaitingValueFunction = (): boolean => {
202
+ if (!current.endsWith(":")) {
203
+ return false;
204
+ }
205
+
206
+ const prefix: string = current.slice(0, -1).replace(/^-/, "");
207
+
208
+ if (prefix.startsWith("@")) {
209
+ return prefix.length > 1;
210
+ }
211
+
212
+ return Boolean(options?.knownFieldKeys?.has(prefix.toLowerCase()));
213
+ };
214
+
215
+ for (let index: number = 0; index < raw.length; index++) {
216
+ const character: string = raw[index]!;
217
+
218
+ if (character === "\\") {
219
+ // Escapes are preserved verbatim; the value grammar resolves them.
220
+ current += character;
221
+
222
+ if (index + 1 < raw.length) {
223
+ current += raw[index + 1]!;
224
+ index++;
225
+ }
226
+
227
+ continue;
228
+ }
229
+
230
+ if (character === '"') {
231
+ inQuotes = !inQuotes;
232
+ current += character;
233
+ continue;
234
+ }
235
+
236
+ if (!inQuotes && (character === "(" || character === "[")) {
237
+ depth++;
238
+ current += character;
239
+ continue;
240
+ }
241
+
242
+ if (!inQuotes && (character === ")" || character === "]")) {
243
+ depth = Math.max(0, depth - 1);
244
+ current += character;
245
+ continue;
246
+ }
247
+
248
+ if (character === " " && !inQuotes && depth === 0) {
249
+ if (isAwaitingValue()) {
250
+ // Absorb the space: the next word is this field's value.
251
+ continue;
252
+ }
253
+
254
+ if (current.length > 0) {
255
+ tokens.push(current);
256
+ current = "";
257
+ }
258
+
259
+ continue;
260
+ }
261
+
262
+ current += character;
263
+ }
264
+
265
+ if (current.length > 0) {
266
+ tokens.push(current);
267
+ }
268
+
269
+ return tokens;
270
+ };
271
+
272
+ type ParseSearchValueFunction = (
273
+ rawValue: string,
274
+ negated?: boolean | undefined,
275
+ ) => SearchValuePredicate;
276
+
277
+ type NegateOperatorFunction = (
278
+ operator: SearchValueOperator,
279
+ ) => SearchValueOperator;
280
+
281
+ /*
282
+ * Every operator has an exact opposite, so `-` composes with all of them
283
+ * instead of being silently dropped on the ones the old log parser could not
284
+ * express (its `-@k:a*` produced a POSITIVE contains — the complement of what
285
+ * was asked for).
286
+ */
287
+ const negateOperator: NegateOperatorFunction = (
288
+ operator: SearchValueOperator,
289
+ ): SearchValueOperator => {
290
+ switch (operator) {
291
+ case SearchValueOperator.Equals:
292
+ return SearchValueOperator.NotEquals;
293
+ case SearchValueOperator.NotEquals:
294
+ return SearchValueOperator.Equals;
295
+ case SearchValueOperator.Contains:
296
+ return SearchValueOperator.NotContains;
297
+ case SearchValueOperator.NotContains:
298
+ return SearchValueOperator.Contains;
299
+ case SearchValueOperator.Wildcard:
300
+ return SearchValueOperator.NotWildcard;
301
+ case SearchValueOperator.NotWildcard:
302
+ return SearchValueOperator.Wildcard;
303
+ case SearchValueOperator.In:
304
+ return SearchValueOperator.NotIn;
305
+ case SearchValueOperator.NotIn:
306
+ return SearchValueOperator.In;
307
+ case SearchValueOperator.Exists:
308
+ return SearchValueOperator.NotExists;
309
+ case SearchValueOperator.NotExists:
310
+ return SearchValueOperator.Exists;
311
+ case SearchValueOperator.GreaterThan:
312
+ return SearchValueOperator.LessThanOrEqual;
313
+ case SearchValueOperator.GreaterThanOrEqual:
314
+ return SearchValueOperator.LessThan;
315
+ case SearchValueOperator.LessThan:
316
+ return SearchValueOperator.GreaterThanOrEqual;
317
+ case SearchValueOperator.LessThanOrEqual:
318
+ return SearchValueOperator.GreaterThan;
319
+ case SearchValueOperator.StartsWith:
320
+ case SearchValueOperator.EndsWith:
321
+ default:
322
+ /*
323
+ * StartsWith / EndsWith are never produced by the parser (a glob covers
324
+ * both); they exist so a caller can hand-build a predicate. Negating one
325
+ * is expressed as the equivalent negated glob by the caller.
326
+ */
327
+ return operator;
328
+ }
329
+ };
330
+
331
+ type SplitListFunction = (inner: string) => Array<string>;
332
+
333
+ /*
334
+ * Split `(a OR b)` / `[a, b]` into its entries, quotes stripped but ESCAPES
335
+ * INTACT — whether an entry is a glob is decided per entry afterwards, so
336
+ * `(a* OR bravo)` keeps the star that makes the first entry a pattern.
337
+ */
338
+ const splitList: SplitListFunction = (inner: string): Array<string> => {
339
+ return inner
340
+ .split(LIST_SEPARATOR_REGEX)
341
+ .map((entry: string) => {
342
+ return stripQuotes(entry.trim());
343
+ })
344
+ .filter((entry: string) => {
345
+ return entry.length > 0;
346
+ });
347
+ };
348
+
349
+ /**
350
+ * Parse the value half of a `key:value` token into a predicate.
351
+ *
352
+ * This is the single definition of what a typed value means, shared by the
353
+ * search bar, the facet chips and every viewer, so a value cannot mean
354
+ * "contains" in one place and "equals" in another.
355
+ */
356
+ export const parseSearchValue: ParseSearchValueFunction = (
357
+ rawValue: string,
358
+ negated?: boolean | undefined,
359
+ ): SearchValuePredicate => {
360
+ type BuildFunction = (
361
+ operator: SearchValueOperator,
362
+ value: string,
363
+ values?: Array<string> | undefined,
364
+ ) => SearchValuePredicate;
365
+
366
+ const build: BuildFunction = (
367
+ operator: SearchValueOperator,
368
+ value: string,
369
+ values?: Array<string> | undefined,
370
+ ): SearchValuePredicate => {
371
+ return {
372
+ operator: negated ? negateOperator(operator) : operator,
373
+ value,
374
+ values: values || [],
375
+ };
376
+ };
377
+
378
+ const trimmed: string = rawValue.trim();
379
+
380
+ // `@k:*` — the key exists with a non-empty value.
381
+ if (trimmed === "*") {
382
+ return build(SearchValueOperator.Exists, "");
383
+ }
384
+
385
+ if (trimmed.startsWith("~")) {
386
+ return build(
387
+ SearchValueOperator.Contains,
388
+ unescapeWildcards(stripQuotes(trimmed.slice(1))),
389
+ );
390
+ }
391
+
392
+ if (trimmed.startsWith("!")) {
393
+ return build(
394
+ SearchValueOperator.NotEquals,
395
+ unescapeWildcards(stripQuotes(trimmed.slice(1))),
396
+ );
397
+ }
398
+
399
+ if (trimmed.startsWith(">=")) {
400
+ return build(
401
+ SearchValueOperator.GreaterThanOrEqual,
402
+ stripQuotes(trimmed.slice(2)),
403
+ );
404
+ }
405
+
406
+ if (trimmed.startsWith("<=")) {
407
+ return build(
408
+ SearchValueOperator.LessThanOrEqual,
409
+ stripQuotes(trimmed.slice(2)),
410
+ );
411
+ }
412
+
413
+ if (trimmed.startsWith(">")) {
414
+ return build(
415
+ SearchValueOperator.GreaterThan,
416
+ stripQuotes(trimmed.slice(1)),
417
+ );
418
+ }
419
+
420
+ if (trimmed.startsWith("<")) {
421
+ return build(SearchValueOperator.LessThan, stripQuotes(trimmed.slice(1)));
422
+ }
423
+
424
+ const isBracketedList: boolean =
425
+ (trimmed.startsWith("(") && trimmed.endsWith(")")) ||
426
+ (trimmed.startsWith("[") && trimmed.endsWith("]"));
427
+
428
+ if (isBracketedList && trimmed.length >= 2) {
429
+ const entries: Array<string> = splitList(trimmed.slice(1, -1));
430
+
431
+ /*
432
+ * An empty list constrains nothing. Falling through to equality on the
433
+ * literal "()" would match no row at all, which reads to the user as
434
+ * "your filter is broken" rather than "you typed nothing".
435
+ */
436
+ if (entries.length === 0) {
437
+ return build(SearchValueOperator.Contains, "");
438
+ }
439
+
440
+ /*
441
+ * A list of plain literals compiles to `IN (...)`, which the database can
442
+ * satisfy with a hash lookup. Only a list that actually carries a glob
443
+ * pays for the OR-of-ILIKEs form.
444
+ */
445
+ const anyGlob: boolean = entries.some((entry: string) => {
446
+ return hasWildcard(entry);
447
+ });
448
+
449
+ if (anyGlob) {
450
+ return build(SearchValueOperator.Wildcard, entries[0]!, entries);
451
+ }
452
+
453
+ const literals: Array<string> = entries.map((entry: string) => {
454
+ return unescapeWildcards(entry);
455
+ });
456
+
457
+ if (literals.length === 1) {
458
+ return build(SearchValueOperator.Equals, literals[0]!);
459
+ }
460
+
461
+ return build(SearchValueOperator.In, literals[0]!, literals);
462
+ }
463
+
464
+ const unquoted: string = stripQuotes(trimmed);
465
+
466
+ if (hasWildcard(unquoted)) {
467
+ // Keep the escapes: the glob is compiled, and re-rendered, from this.
468
+ return build(SearchValueOperator.Wildcard, unquoted, [unquoted]);
469
+ }
470
+
471
+ return build(SearchValueOperator.Equals, unescapeWildcards(unquoted));
472
+ };
473
+
474
+ type ParseSearchQueryFunction = (
475
+ raw: string,
476
+ options?: ParseSearchQueryOptions | undefined,
477
+ ) => Array<SearchToken>;
478
+
479
+ /**
480
+ * Parse a whole search string into tokens.
481
+ *
482
+ * Consecutive free-text words are combined into one phrase token; a field
483
+ * filter between them ends the phrase, so `foo severity:error bar` searches
484
+ * for "foo" and for "bar", never for the phrase "foo bar" that never occurred
485
+ * in any log line.
486
+ */
487
+ export const parseSearchQuery: ParseSearchQueryFunction = (
488
+ raw: string,
489
+ options?: ParseSearchQueryOptions | undefined,
490
+ ): Array<SearchToken> => {
491
+ const trimmed: string = raw.trim();
492
+
493
+ if (trimmed.length === 0) {
494
+ return [];
495
+ }
496
+
497
+ const rawTokens: Array<string> = tokenizeSearchQuery(trimmed, options);
498
+ const tokens: Array<SearchToken> = [];
499
+ let freeTextParts: Array<string> = [];
500
+
501
+ type FlushFreeTextFunction = () => void;
502
+
503
+ const flushFreeText: FlushFreeTextFunction = (): void => {
504
+ if (freeTextParts.length === 0) {
505
+ return;
506
+ }
507
+
508
+ const combined: string = freeTextParts.join(" ");
509
+
510
+ tokens.push({
511
+ type: SearchTokenType.FreeText,
512
+ key: "",
513
+ predicate: {
514
+ operator: SearchValueOperator.Contains,
515
+ value: combined,
516
+ values: [],
517
+ },
518
+ negated: false,
519
+ raw: combined,
520
+ });
521
+
522
+ freeTextParts = [];
523
+ };
524
+
525
+ for (const rawToken of rawTokens) {
526
+ if (BOOLEAN_KEYWORDS.has(rawToken)) {
527
+ /*
528
+ * Tokens are ANDed. `AND` is therefore a no-op, and a bare `OR` cannot
529
+ * be honoured between two different filters — it is skipped rather than
530
+ * silently reinterpreted. Use `@k:(a OR b)` for an OR over one key.
531
+ */
532
+ continue;
533
+ }
534
+
535
+ let working: string = rawToken;
536
+ let negated: boolean = false;
537
+
538
+ if (working.startsWith("-") && working.length > 1) {
539
+ negated = true;
540
+ working = working.slice(1);
541
+ }
542
+
543
+ const isAttribute: boolean = working.startsWith("@");
544
+
545
+ if (isAttribute) {
546
+ working = working.slice(1);
547
+ }
548
+
549
+ /*
550
+ * A quoted token is free text even if it contains a colon — quoting is
551
+ * how a user searches for a literal `foo:bar` in a message.
552
+ */
553
+ const colonIndex: number = working.startsWith('"')
554
+ ? -1
555
+ : working.indexOf(":");
556
+
557
+ if (colonIndex <= 0) {
558
+ if (isAttribute) {
559
+ // `@key` with no value: a bare mention, not a filter. Ignore it.
560
+ continue;
561
+ }
562
+
563
+ freeTextParts.push(unescapeWildcards(stripQuotes(working)));
564
+ continue;
565
+ }
566
+
567
+ const rawKey: string = working.slice(0, colonIndex);
568
+ const rawValue: string = working.slice(colonIndex + 1);
569
+
570
+ if (rawValue.length === 0) {
571
+ // `severity:` with nothing after it — the user is still typing.
572
+ continue;
573
+ }
574
+
575
+ /*
576
+ * Prose that happens to contain a colon stays prose. Only a bare key is
577
+ * held to this; `@12:30` is an explicit instruction and is honoured.
578
+ */
579
+ if (
580
+ !isAttribute &&
581
+ (!BARE_FIELD_KEY_REGEX.test(rawKey) ||
582
+ URL_SCHEME_VALUE_REGEX.test(rawValue))
583
+ ) {
584
+ freeTextParts.push(unescapeWildcards(stripQuotes(rawToken)));
585
+ continue;
586
+ }
587
+
588
+ flushFreeText();
589
+
590
+ const key: string = isAttribute
591
+ ? rawKey
592
+ : options?.fieldAliases?.[rawKey.toLowerCase()] || rawKey;
593
+
594
+ tokens.push({
595
+ type: isAttribute ? SearchTokenType.Attribute : SearchTokenType.Field,
596
+ key,
597
+ predicate: parseSearchValue(rawValue, negated),
598
+ negated,
599
+ raw: rawToken,
600
+ });
601
+ }
602
+
603
+ flushFreeText();
604
+
605
+ return tokens;
606
+ };
607
+
608
+ type ParseNumericOrStringFunction = (value: string) => number | string;
609
+
610
+ const parseNumericOrString: ParseNumericOrStringFunction = (
611
+ value: string,
612
+ ): number | string => {
613
+ return NUMERIC_REGEX.test(value.trim()) ? Number(value.trim()) : value;
614
+ };
615
+
616
+ export type SearchQueryValue =
617
+ | string
618
+ | Search<string>
619
+ | NotEqual<string>
620
+ | NotContains<string>
621
+ | StartsWith<string>
622
+ | EndsWith<string>
623
+ | Wildcard<string>
624
+ | NotWildcard<string>
625
+ | GreaterThan<number | string>
626
+ | GreaterThanOrEqual<number | string>
627
+ | LessThan<number | string>
628
+ | LessThanOrEqual<number | string>
629
+ | Includes
630
+ | IncludesNone
631
+ | IsNull
632
+ | NotNull;
633
+
634
+ type GlobsOfFunction = (predicate: SearchValuePredicate) => Array<string>;
635
+
636
+ /** The glob list of a wildcard predicate; a single glob is a list of one. */
637
+ const globsOf: GlobsOfFunction = (
638
+ predicate: SearchValuePredicate,
639
+ ): Array<string> => {
640
+ return predicate.values.length > 0 ? predicate.values : [predicate.value];
641
+ };
642
+
643
+ type PredicateToQueryValueFunction = (
644
+ predicate: SearchValuePredicate,
645
+ ) => SearchQueryValue;
646
+
647
+ /**
648
+ * Compile a predicate into the query-operator vocabulary the analytics and
649
+ * Postgres compilers already speak. A bare string is returned for equality so
650
+ * the fast `attributes['k'] = 'v'` map-subscript path is preserved.
651
+ */
652
+ export const predicateToQueryValue: PredicateToQueryValueFunction = (
653
+ predicate: SearchValuePredicate,
654
+ ): SearchQueryValue => {
655
+ switch (predicate.operator) {
656
+ case SearchValueOperator.NotEquals:
657
+ return new NotEqual(predicate.value);
658
+ case SearchValueOperator.Contains:
659
+ return new Search(predicate.value);
660
+ case SearchValueOperator.NotContains:
661
+ return new NotContains(predicate.value);
662
+ case SearchValueOperator.StartsWith:
663
+ return new StartsWith(predicate.value);
664
+ case SearchValueOperator.EndsWith:
665
+ return new EndsWith(predicate.value);
666
+ case SearchValueOperator.Wildcard:
667
+ return new Wildcard(globsOf(predicate));
668
+ case SearchValueOperator.NotWildcard:
669
+ return new NotWildcard(globsOf(predicate));
670
+ case SearchValueOperator.GreaterThan:
671
+ return new GreaterThan(parseNumericOrString(predicate.value));
672
+ case SearchValueOperator.GreaterThanOrEqual:
673
+ return new GreaterThanOrEqual(parseNumericOrString(predicate.value));
674
+ case SearchValueOperator.LessThan:
675
+ return new LessThan(parseNumericOrString(predicate.value));
676
+ case SearchValueOperator.LessThanOrEqual:
677
+ return new LessThanOrEqual(parseNumericOrString(predicate.value));
678
+ case SearchValueOperator.In:
679
+ return new Includes(predicate.values);
680
+ case SearchValueOperator.NotIn:
681
+ return new IncludesNone(predicate.values);
682
+ case SearchValueOperator.Exists:
683
+ return new NotNull();
684
+ case SearchValueOperator.NotExists:
685
+ return new IsNull();
686
+ case SearchValueOperator.Equals:
687
+ default:
688
+ return predicate.value;
689
+ }
690
+ };
691
+
692
+ type PredicateToSerializedValueFunction = (
693
+ predicate: SearchValuePredicate,
694
+ ) => JSONObject | string;
695
+
696
+ /**
697
+ * The same compilation, in the `{_type, value}` wire shape the histogram /
698
+ * facet / analytics endpoints accept. Going through one function is what
699
+ * keeps the chart and the table showing the same filter.
700
+ */
701
+ export const predicateToSerializedValue: PredicateToSerializedValueFunction = (
702
+ predicate: SearchValuePredicate,
703
+ ): JSONObject | string => {
704
+ const queryValue: SearchQueryValue = predicateToQueryValue(predicate);
705
+
706
+ if (typeof queryValue === "string") {
707
+ return queryValue;
708
+ }
709
+
710
+ return queryValue.toJSON();
711
+ };
712
+
713
+ type BuildSearchTokenValueFunction = (literal: string) => string;
714
+
715
+ /**
716
+ * Render a value that came from the DATA into a search token that means
717
+ * exactly that value.
718
+ *
719
+ * A facet value the user clicked, or an attribute copied off a log row, may
720
+ * legitimately contain `*`, `?`, a space or a quote — a Kubernetes arg like
721
+ * `--foo=*`, a URL pattern `/api/*`. Without escaping, clicking such a value
722
+ * would build a filter that matches far more than the row it came from.
723
+ */
724
+ export const buildSearchTokenValue: BuildSearchTokenValueFunction = (
725
+ literal: string,
726
+ ): string => {
727
+ const escaped: string = escapeWildcards(literal)
728
+ .replace(QUOTE_REGEX, "\\$1")
729
+ .replace(LEADING_OPERATOR_REGEX, "\\$1")
730
+ .replace(WRAPPED_LIST_REGEX, "\\$&");
731
+
732
+ return WHITESPACE_REGEX.test(escaped) ? `"${escaped}"` : escaped;
733
+ };
734
+
735
+ type CompileAttributeChipValuesFunction = (
736
+ values: Array<string>,
737
+ ) => SearchQueryValue | Array<SearchQueryValue> | undefined;
738
+
739
+ /**
740
+ * Compile the values of one `attributes.<key>` chip group into a query value.
741
+ *
742
+ * A chip carries the value exactly as the user typed it, so the same grammar
743
+ * that governs the search bar governs the chip — this is what makes
744
+ * `@platform.team:a*` work whether it is submitted as text or applied as a
745
+ * chip, and what stops the two paths compiling to different SQL.
746
+ *
747
+ * - one value → that predicate
748
+ * - several literals → `IN (...)`, which the database resolves by hash
749
+ * - several globs → one Wildcard carrying all of them (an OR of ILIKEs)
750
+ * - anything mixed → the predicates AND-ed, the only reading a flat map
751
+ * slot can express for unlike operators
752
+ */
753
+ export const compileAttributeChipValues: CompileAttributeChipValuesFunction = (
754
+ values: Array<string>,
755
+ ): SearchQueryValue | Array<SearchQueryValue> | undefined => {
756
+ const meaningful: Array<string> = values.filter((value: string) => {
757
+ return value.length > 0;
758
+ });
759
+
760
+ if (meaningful.length === 0) {
761
+ return undefined;
762
+ }
763
+
764
+ const predicates: Array<SearchValuePredicate> = meaningful.map(
765
+ (value: string) => {
766
+ return parseSearchValue(value);
767
+ },
768
+ );
769
+
770
+ if (predicates.length === 1) {
771
+ return predicateToQueryValue(predicates[0]!);
772
+ }
773
+
774
+ const everyEquals: boolean = predicates.every(
775
+ (predicate: SearchValuePredicate) => {
776
+ return predicate.operator === SearchValueOperator.Equals;
777
+ },
778
+ );
779
+
780
+ if (everyEquals) {
781
+ return new Includes(
782
+ predicates.map((predicate: SearchValuePredicate) => {
783
+ return predicate.value;
784
+ }),
785
+ );
786
+ }
787
+
788
+ const everyEqualsOrGlob: boolean = predicates.every(
789
+ (predicate: SearchValuePredicate) => {
790
+ return (
791
+ predicate.operator === SearchValueOperator.Equals ||
792
+ predicate.operator === SearchValueOperator.Wildcard
793
+ );
794
+ },
795
+ );
796
+
797
+ if (everyEqualsOrGlob) {
798
+ return new Wildcard(
799
+ predicates.flatMap((predicate: SearchValuePredicate) => {
800
+ /*
801
+ * A literal joins the glob list as an inert glob, so an OR that mixes
802
+ * `abc` with `a*` still evaluates as one disjunction.
803
+ */
804
+ return predicate.operator === SearchValueOperator.Wildcard
805
+ ? globsOf(predicate)
806
+ : [escapeWildcards(predicate.value)];
807
+ }),
808
+ );
809
+ }
810
+
811
+ return predicates.map((predicate: SearchValuePredicate) => {
812
+ return predicateToQueryValue(predicate);
813
+ });
814
+ };
815
+
816
+ type DescribeSearchValueFunction = (value: string) => string;
817
+
818
+ /**
819
+ * How a chip value should read to a person: escapes resolved, operator
820
+ * markers kept (`~foo` still says "contains foo").
821
+ */
822
+ export const describeSearchValue: DescribeSearchValueFunction = (
823
+ value: string,
824
+ ): string => {
825
+ const predicate: SearchValuePredicate = parseSearchValue(value);
826
+
827
+ switch (predicate.operator) {
828
+ case SearchValueOperator.Equals:
829
+ return predicate.value;
830
+ case SearchValueOperator.Wildcard:
831
+ return globsOf(predicate).join(" OR ");
832
+ case SearchValueOperator.In:
833
+ return predicate.values.join(" OR ");
834
+ case SearchValueOperator.Exists:
835
+ return "any value";
836
+ case SearchValueOperator.NotExists:
837
+ return "no value";
838
+ default:
839
+ return value;
840
+ }
841
+ };
842
+
843
+ type QueryValueToChipValuesFunction = (value: unknown) => Array<string>;
844
+
845
+ /**
846
+ * The inverse of {@link compileAttributeChipValues}: turn a stored attribute
847
+ * predicate back into the chip values that would produce it.
848
+ *
849
+ * A saved view stores the compiled query, not the chips, so without this an
850
+ * attribute filter comes back applied but invisible — and the next chip edit,
851
+ * which recompiles the query from the chips it can see, silently drops it.
852
+ */
853
+ export const queryValueToChipValues: QueryValueToChipValuesFunction = (
854
+ value: unknown,
855
+ ): Array<string> => {
856
+ if (value === null || value === undefined) {
857
+ return [];
858
+ }
859
+
860
+ if (Array.isArray(value)) {
861
+ return value.flatMap((entry: unknown) => {
862
+ return queryValueToChipValues(entry);
863
+ });
864
+ }
865
+
866
+ if (typeof value === "string") {
867
+ return value.length > 0 ? [buildSearchTokenValue(value)] : [];
868
+ }
869
+
870
+ if (typeof value === "number" || typeof value === "boolean") {
871
+ return [String(value)];
872
+ }
873
+
874
+ if (value instanceof Wildcard || value instanceof NotWildcard) {
875
+ const prefix: string = value instanceof NotWildcard ? "-" : "";
876
+
877
+ return value.values.map((glob: string) => {
878
+ return `${prefix}${glob}`;
879
+ });
880
+ }
881
+
882
+ if (value instanceof Includes) {
883
+ return value.values.map((entry: string | number | ObjectID) => {
884
+ return buildSearchTokenValue(entry.toString());
885
+ });
886
+ }
887
+
888
+ if (value instanceof IncludesNone) {
889
+ return [
890
+ `-(${value.values
891
+ .map((entry: string | number | ObjectID) => {
892
+ return buildSearchTokenValue(entry.toString());
893
+ })
894
+ .join(" OR ")})`,
895
+ ];
896
+ }
897
+
898
+ if (value instanceof NotNull) {
899
+ return ["*"];
900
+ }
901
+
902
+ if (value instanceof IsNull) {
903
+ return ["-*"];
904
+ }
905
+
906
+ if (value instanceof Search) {
907
+ return [`~${value.toString()}`];
908
+ }
909
+
910
+ if (value instanceof NotContains) {
911
+ return [`-~${value.toString()}`];
912
+ }
913
+
914
+ if (value instanceof StartsWith) {
915
+ return [`${escapeWildcards(value.toString())}*`];
916
+ }
917
+
918
+ if (value instanceof EndsWith) {
919
+ return [`*${escapeWildcards(value.toString())}`];
920
+ }
921
+
922
+ if (value instanceof NotEqual) {
923
+ return [`!${String(value.value ?? "")}`];
924
+ }
925
+
926
+ if (value instanceof GreaterThanOrEqual) {
927
+ return [`>=${String(value.value ?? "")}`];
928
+ }
929
+
930
+ if (value instanceof GreaterThan) {
931
+ return [`>${String(value.value ?? "")}`];
932
+ }
933
+
934
+ if (value instanceof LessThanOrEqual) {
935
+ return [`<=${String(value.value ?? "")}`];
936
+ }
937
+
938
+ if (value instanceof LessThan) {
939
+ return [`<${String(value.value ?? "")}`];
940
+ }
941
+
942
+ /*
943
+ * An operator with no chip rendering would come back as "[object Object]"
944
+ * on a chip. Returning nothing leaves the filter applied but unchipped,
945
+ * which is the lesser of the two evils and matches how the viewer already
946
+ * treats a base-query filter it cannot edit.
947
+ */
948
+ return [];
949
+ };