@oneuptime/common 12.0.25 → 12.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/Index.ts +2 -0
- package/Models/AnalyticsModels/ThreatIntelIndicator.ts +413 -0
- package/Models/DatabaseModels/AlertSeverity.ts +4 -1
- package/Models/DatabaseModels/CephClusterFeed.ts +625 -0
- package/Models/DatabaseModels/CloudResourceFeed.ts +625 -0
- package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +13 -0
- package/Models/DatabaseModels/DetectionRule.ts +9 -3
- package/Models/DatabaseModels/DockerHostFeed.ts +625 -0
- package/Models/DatabaseModels/DockerSwarmClusterFeed.ts +628 -0
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +9 -3
- package/Models/DatabaseModels/HostFeed.ts +625 -0
- package/Models/DatabaseModels/IncidentSeverity.ts +4 -1
- package/Models/DatabaseModels/Index.ts +22 -0
- package/Models/DatabaseModels/KubernetesClusterFeed.ts +628 -0
- package/Models/DatabaseModels/Monitor.ts +87 -0
- package/Models/DatabaseModels/NetworkDevice.ts +96 -5
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +92 -6
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +301 -31
- package/Models/DatabaseModels/NetworkSite.ts +120 -0
- package/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.ts +1 -0
- package/Models/DatabaseModels/PodmanHostFeed.ts +625 -0
- package/Models/DatabaseModels/ProxmoxClusterFeed.ts +626 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +67 -0
- package/Models/DatabaseModels/ServiceFeed.ts +625 -0
- package/Models/DatabaseModels/TelemetrySourceMap.ts +474 -0
- package/Models/DatabaseModels/ThreatIntelFeed.ts +758 -0
- package/Models/DatabaseModels/UserOnCallLog.ts +1 -0
- package/Models/DatabaseModels/UserTotpAuth.ts +1 -0
- package/Models/DatabaseModels/UserWebAuthn.ts +1 -0
- package/Server/API/AlertAPI.ts +23 -1
- package/Server/API/BaseAPI.ts +14 -3
- package/Server/API/IncidentAPI.ts +41 -1
- package/Server/API/IncidentEpisodeAPI.ts +23 -1
- package/Server/API/MicrosoftTeamsAPI.ts +31 -2
- package/Server/API/ScheduledMaintenanceAPI.ts +23 -1
- package/Server/API/SlackAPI.ts +48 -0
- package/Server/API/TelemetryAPI.ts +167 -42
- package/Server/API/UserOnCallLogTimelineAPI.ts +75 -61
- package/Server/API/UserTotpAuthAPI.ts +67 -1
- package/Server/API/UserWebAuthnAPI.ts +44 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.ts +57 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.ts +49 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.ts +129 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.ts +54 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.ts +64 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.ts +64 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.ts +72 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.ts +489 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +18 -0
- package/Server/Middleware/IdentityRateLimit.ts +53 -3
- package/Server/Services/AIService.ts +181 -41
- package/Server/Services/CephClusterFeedService.ts +99 -0
- package/Server/Services/CephClusterLabelRuleEngineService.ts +29 -0
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +23 -0
- package/Server/Services/CephClusterOwnerTeamService.ts +129 -0
- package/Server/Services/CephClusterOwnerUserService.ts +123 -0
- package/Server/Services/CephClusterService.ts +223 -2
- package/Server/Services/CloudResourceFeedService.ts +99 -0
- package/Server/Services/CloudResourceLabelRuleEngineService.ts +30 -0
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +33 -0
- package/Server/Services/CloudResourceOwnerTeamService.ts +129 -0
- package/Server/Services/CloudResourceOwnerUserService.ts +123 -0
- package/Server/Services/CloudResourceService.ts +227 -2
- package/Server/Services/DatabaseService.ts +265 -0
- package/Server/Services/DockerHostFeedService.ts +99 -0
- package/Server/Services/DockerHostLabelRuleEngineService.ts +29 -0
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +23 -0
- package/Server/Services/DockerHostOwnerTeamService.ts +129 -0
- package/Server/Services/DockerHostOwnerUserService.ts +123 -0
- package/Server/Services/DockerHostService.ts +227 -2
- package/Server/Services/DockerSwarmClusterFeedService.ts +102 -0
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +30 -0
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +24 -0
- package/Server/Services/DockerSwarmClusterOwnerTeamService.ts +133 -0
- package/Server/Services/DockerSwarmClusterOwnerUserService.ts +127 -0
- package/Server/Services/DockerSwarmClusterService.ts +229 -2
- package/Server/Services/EnterpriseLicenseService.ts +15 -7
- package/Server/Services/ExceptionAggregationService.ts +12 -2
- package/Server/Services/HostFeedService.ts +99 -0
- package/Server/Services/HostLabelRuleEngineService.ts +29 -0
- package/Server/Services/HostOwnerRuleEngineService.ts +23 -0
- package/Server/Services/HostOwnerTeamService.ts +129 -0
- package/Server/Services/HostOwnerUserService.ts +123 -0
- package/Server/Services/HostService.ts +215 -2
- package/Server/Services/IncidentService.ts +11 -0
- package/Server/Services/Index.ts +24 -0
- package/Server/Services/KubernetesClusterFeedService.ts +99 -0
- package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +30 -0
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +24 -0
- package/Server/Services/KubernetesClusterOwnerTeamService.ts +133 -0
- package/Server/Services/KubernetesClusterOwnerUserService.ts +127 -0
- package/Server/Services/KubernetesClusterService.ts +231 -2
- package/Server/Services/LogAggregationService.ts +23 -280
- package/Server/Services/MetricAggregationService.ts +98 -1
- package/Server/Services/MonitorService.ts +177 -13
- package/Server/Services/MonitorTemplateService.ts +111 -0
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +777 -86
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +199 -16
- package/Server/Services/NetworkDeviceDiscoveryScanService.ts +1055 -14
- package/Server/Services/NetworkDeviceService.ts +750 -4
- package/Server/Services/NetworkInterfaceService.ts +415 -0
- package/Server/Services/NetworkSiteService.ts +485 -52
- package/Server/Services/PodmanHostFeedService.ts +99 -0
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +29 -0
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +23 -0
- package/Server/Services/PodmanHostOwnerTeamService.ts +129 -0
- package/Server/Services/PodmanHostOwnerUserService.ts +123 -0
- package/Server/Services/PodmanHostService.ts +227 -2
- package/Server/Services/ProjectService.ts +16 -10
- package/Server/Services/ProxmoxClusterFeedService.ts +99 -0
- package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +30 -0
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +24 -0
- package/Server/Services/ProxmoxClusterOwnerTeamService.ts +131 -0
- package/Server/Services/ProxmoxClusterOwnerUserService.ts +124 -0
- package/Server/Services/ProxmoxClusterService.ts +225 -2
- package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +61 -0
- package/Server/Services/ServiceFeedService.ts +99 -0
- package/Server/Services/ServiceLabelRuleEngineService.ts +29 -0
- package/Server/Services/ServiceOwnerRuleEngineService.ts +26 -0
- package/Server/Services/ServiceOwnerTeamService.ts +129 -0
- package/Server/Services/ServiceOwnerUserService.ts +123 -0
- package/Server/Services/ServiceService.ts +227 -3
- package/Server/Services/StatusPageSubscriberService.ts +7 -0
- package/Server/Services/TelemetryAttributeService.ts +13 -3
- package/Server/Services/TelemetrySourceMapService.ts +307 -0
- package/Server/Services/ThreatIntelFeedService.ts +222 -0
- package/Server/Services/ThreatIntelIndicatorService.ts +428 -0
- package/Server/Services/TraceAggregationService.ts +101 -11
- package/Server/Services/UserService.ts +13 -6
- package/Server/Services/UserTwoFactorBackupCodeService.ts +127 -0
- package/Server/Services/UserWebhookService.ts +11 -2
- package/Server/Static/Brand/README.md +38 -0
- package/Server/Static/Brand/favicons/apple-touch-icon.png +0 -0
- package/Server/Static/Brand/favicons/favicon-16x16.png +0 -0
- package/Server/Static/Brand/favicons/favicon-32x32.png +0 -0
- package/Server/Static/Brand/favicons/favicon.ico +0 -0
- package/Server/Static/Brand/favicons/safari-pinned-tab.svg +31 -0
- package/Server/Static/Brand/hou-wb.svg +1 -0
- package/Server/Static/Brand/oneuptime-logo.svg +1 -0
- package/Server/Static/Brand/ou-wb.svg +1 -0
- package/Server/Static/Vendor/README.md +4 -0
- package/Server/Types/AnalyticsDatabase/ModelPermission.ts +13 -3
- package/Server/Types/Database/AggregateBy.ts +83 -0
- package/Server/Types/Database/AggregateResultUtil.ts +126 -0
- package/Server/Types/Database/JSONColumnQuery.ts +18 -0
- package/Server/Types/Database/QueryHelper.ts +40 -0
- package/Server/Types/Database/QueryUtil.ts +26 -0
- package/Server/Types/Workflow/Components/API/Utils.ts +10 -1
- package/Server/Types/Workflow/Components/JavaScript.ts +8 -0
- package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +9 -0
- package/Server/Utils/AI/SRE/InvestigationGrader.ts +18 -0
- package/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.ts +422 -0
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +176 -0
- package/Server/Utils/DataSource/HttpFetch.ts +18 -0
- package/Server/Utils/Database/RelationIdUtil.ts +42 -0
- package/Server/Utils/Marketing/MarketingEventUtil.ts +38 -9
- package/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.ts +34 -3
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +9 -1
- package/Server/Utils/Monitor/Criteria/SyntheticMonitor.ts +28 -10
- package/Server/Utils/Monitor/MonitorAlert.ts +541 -332
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +330 -64
- package/Server/Utils/Monitor/MonitorIncident.ts +640 -434
- package/Server/Utils/Monitor/MonitorResource.ts +226 -49
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +46 -3
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +23 -102
- package/Server/Utils/Monitor/PerEntityCriteriaFanOut.ts +329 -0
- package/Server/Utils/NetworkDevice/DeviceHealthAggregation.ts +427 -0
- package/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.ts +310 -0
- package/Server/Utils/OnCallNotificationContext.ts +686 -0
- package/Server/Utils/PrivateNetworkWebhookConfig.ts +549 -0
- package/Server/Utils/ResourceFeed/ResourceFeedUtil.ts +139 -0
- package/Server/Utils/Response.ts +11 -1
- package/Server/Utils/SSRFProtection.ts +230 -60
- package/Server/Utils/SecurityEvent/ConnectorErrorMessage.ts +106 -0
- package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +84 -284
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +47 -20
- package/Server/Utils/SecurityEvent/SecurityEventAlerting.ts +318 -0
- package/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.ts +199 -0
- package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.ts +252 -0
- package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.ts +739 -0
- package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.ts +533 -0
- package/Server/Utils/StartServer.ts +83 -56
- package/Server/Utils/StatusPageSubscriberWebhook.ts +3 -0
- package/Server/Utils/Telemetry/SourceMapResolver.ts +480 -0
- package/Server/Utils/TwoFactorBackupCodeNotification.ts +106 -0
- package/Server/Utils/VM/VMAPI.ts +3 -0
- package/Server/Utils/VM/VMRunner.ts +27 -1
- package/Server/Utils/VendorAssets.ts +42 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +136 -6
- package/Server/Views/AcknowledgeUserOnCallNotification.ejs +11 -9
- package/Server/Views/Partials/Head.ejs +9 -9
- package/Server/Views/Partials/OnCallNotificationDetails.ejs +48 -0
- package/Server/Views/ViewMessage.ejs +11 -9
- package/Tests/App/Accounts/LoginTwoFactorRecovery.test.tsx +972 -0
- package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +401 -0
- package/Tests/App/Dashboard/DiscoveryScanEditForm.test.tsx +707 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +1908 -18
- package/Tests/App/Dashboard/ResourceFeed.test.tsx +230 -0
- package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +216 -0
- package/Tests/App/Dashboard/TopologyAddToMonitoring.test.tsx +192 -0
- package/Tests/App/Dashboard/WorkspaceNotificationRuleConditions.test.tsx +439 -0
- package/Tests/Models/DatabaseModels/DateColumnDeserialization.test.ts +182 -0
- package/Tests/Models/DatabaseModels/RelationColumnModelTypeCoverage.test.ts +82 -0
- package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +398 -0
- package/Tests/Models/DiscoveryScanNameColumn.test.ts +151 -16
- package/Tests/Models/DiscoveryScanSnmpEnabledColumn.test.ts +593 -0
- package/Tests/Models/NetworkDeviceCreateContract.test.ts +102 -0
- package/Tests/Server/API/AIGenerationProjectAIToggle.test.ts +607 -0
- package/Tests/Server/API/AIGenerationRequestBudget.test.ts +355 -0
- package/Tests/Server/API/AIKillSwitchBackstop.test.ts +602 -0
- package/Tests/Server/API/BaseAPIUpdateDateColumns.test.ts +154 -0
- package/Tests/Server/API/MicrosoftTeamsBotTestEndpoint.test.ts +335 -0
- package/Tests/Server/API/UserOnCallLogTimelineAcknowledgePage.test.ts +611 -0
- package/Tests/Server/API/UserTotpAuthAPI.test.ts +498 -4
- package/Tests/Server/API/UserWebAuthnBackupCodeMinting.test.ts +682 -0
- package/Tests/Server/Infrastructure/ExampleDockerfiles.test.ts +595 -0
- package/Tests/Server/Services/AIServiceDailyBudget.test.ts +9 -0
- package/Tests/Server/Services/AIServiceProjectAccess.test.ts +6 -0
- package/Tests/Server/Services/AutoImportScanCredentialSelect.test.ts +18 -0
- package/Tests/Server/Services/DatabaseServiceAggregateBy.test.ts +590 -0
- package/Tests/Server/Services/DatabaseServiceUpdateWriteRouting.test.ts +12 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +162 -26
- package/Tests/Server/Services/EnterpriseLicenseServiceCreate.test.ts +292 -0
- package/Tests/Server/Services/FeedRetentionConsistency.test.ts +119 -12
- package/Tests/Server/Services/LogAggregationAttributeOperators.test.ts +109 -0
- package/Tests/Server/Services/MetricAggregationAttributeOperators.test.ts +170 -0
- package/Tests/Server/Services/MonitorTemplateServiceNetworkDeviceSync.test.ts +383 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +997 -3
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +830 -0
- package/Tests/Server/Services/NetworkDeviceAutoMonitorLifecycle.test.ts +528 -0
- package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +3141 -1
- package/Tests/Server/Services/NetworkDeviceRegisteredHostnames.test.ts +1023 -0
- package/Tests/Server/Services/NetworkDeviceSiteAssignmentRuleSkip.test.ts +728 -0
- package/Tests/Server/Services/NetworkInterfaceServiceUpsert.test.ts +795 -0
- package/Tests/Server/Services/NetworkSiteRollupPolicyAndMaintenance.test.ts +903 -0
- package/Tests/Server/Services/NetworkSiteService.test.ts +165 -24
- package/Tests/Server/Services/ProjectServiceChangePlan.test.ts +5 -3
- package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +5 -2
- package/Tests/Server/Services/ResourceCreationFeedWrites.test.ts +304 -0
- package/Tests/Server/Services/ResourceFeedServices.test.ts +269 -0
- package/Tests/Server/Services/ResourceOwnerFeedWrites.test.ts +245 -0
- package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +792 -0
- package/Tests/Server/Services/TelemetrySourceMapService.test.ts +483 -0
- package/Tests/Server/Services/ThreatIntelFeedService.test.ts +351 -0
- package/Tests/Server/Services/ThreatIntelIndicatorService.test.ts +366 -0
- package/Tests/Server/Services/TraceAggregationAttributeOperators.test.ts +507 -0
- package/Tests/Server/Services/UserTwoFactorBackupCodeGenerateIfNone.test.ts +705 -0
- package/Tests/Server/Services/WorkspaceNotificationRuleOnCallDutyPolicy.test.ts +306 -0
- package/Tests/Server/Types/Database/AggregateResultUtil.test.ts +386 -0
- package/Tests/Server/Types/Database/Permissions/SelectRejectionMessageContract.test.ts +424 -0
- package/Tests/Server/Types/Database/QueryHelperWildcard.test.ts +142 -0
- package/Tests/Server/Types/Workflow/Components/ApiComponentPrivateNetwork.test.ts +163 -0
- package/Tests/Server/Types/Workflow/Components/JavaScriptPrivateNetwork.test.ts +124 -0
- package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +5 -0
- package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +39 -1
- package/Tests/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.test.ts +338 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorWildcard.test.ts +383 -0
- package/Tests/Server/Utils/Marketing/EmittedMarketingEvent.ts +23 -0
- package/Tests/Server/Utils/Marketing/MarketingEventUtil.test.ts +51 -0
- package/Tests/Server/Utils/Monitor/Criteria/SyntheticMonitorCriteria.test.ts +259 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPerSeriesFanout.test.ts +557 -0
- package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +12 -2
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +404 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +8 -2
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +125 -98
- package/Tests/Server/Utils/Monitor/PerEntityCriteriaFanOut.test.ts +444 -0
- package/Tests/Server/Utils/Monitor/PerSeriesSecondEntityAlerting.test.ts +1112 -0
- package/Tests/Server/Utils/NetworkDevice/DeviceHealthAggregation.test.ts +717 -0
- package/Tests/Server/Utils/NetworkDevice/RulePatternValidator.test.ts +78 -0
- package/Tests/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.test.ts +363 -0
- package/Tests/Server/Utils/OfflineAssetHygiene.test.ts +35 -0
- package/Tests/Server/Utils/OnCallNotificationContext.test.ts +908 -0
- package/Tests/Server/Utils/PrivateNetworkWebhookConfig.test.ts +423 -0
- package/Tests/Server/Utils/ResourceFeed/ResourceFeedUtil.test.ts +191 -0
- package/Tests/Server/Utils/SSRFProtectionPrivateNetwork.test.ts +597 -0
- package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +819 -0
- package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +381 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +417 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +819 -0
- package/Tests/Server/Utils/SecurityEvent/SecurityEventAlerting.test.ts +246 -0
- package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.test.ts +282 -0
- package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.test.ts +312 -0
- package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.test.ts +854 -0
- package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.test.ts +437 -0
- package/Tests/Server/Utils/StartServerErrorStatus.test.ts +225 -0
- package/Tests/Server/Utils/StatusPage/MonitorRulePatternValidator.test.ts +62 -0
- package/Tests/Server/Utils/StatusPageSubscriberWebhookPrivateNetwork.test.ts +119 -0
- package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +542 -0
- package/Tests/Server/Utils/TwoFactorBackupCodeNotification.test.ts +272 -0
- package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +111 -0
- package/Tests/Server/Utils/VendorAssets.test.ts +117 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +101 -4
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsInstallStateDiagnostics.test.ts +922 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsRosterDiagnosticMessages.test.ts +642 -0
- package/Tests/Server/Views/OnCallAcknowledgePage.test.ts +430 -0
- package/Tests/Types/API/HostnameAuthorityParsing.test.ts +1 -0
- package/Tests/Types/API/URLMailtoQueryString.test.ts +439 -0
- package/Tests/Types/API/URLQueryString.test.ts +481 -0
- package/Tests/Types/API/URLRouteQuerySeparation.test.ts +491 -0
- package/Tests/Types/BaseDatabase/Wildcard.test.ts +163 -0
- package/Tests/Types/BaseDatabase/WildcardPattern.test.ts +149 -0
- package/Tests/Types/Database/DateColumnValue.test.ts +265 -0
- package/Tests/Types/DateToIsoStringOrNull.test.ts +67 -0
- package/Tests/Types/Log/LogQueryToFilter.test.ts +218 -43
- package/Tests/Types/Monitor/KubernetesTemplateGroupByKeys.test.ts +225 -0
- package/Tests/Types/Monitor/TemplateGroupByKeys.test.ts +296 -0
- package/Tests/Types/NetworkAutomation/RuleRunResult.test.ts +102 -0
- package/Tests/Types/NetworkAutomation/RuleRunResultDescribe.test.ts +145 -0
- package/Tests/Types/NetworkSite/SiteHealthRollupPolicy.test.ts +58 -0
- package/Tests/Types/SerializableObjectDictionaryImportCycle.test.ts +15 -0
- package/Tests/Types/Telemetry/TelemetrySearchQuery.test.ts +620 -0
- package/Tests/Types/WhatsApp/WhatsAppTemplates.test.ts +110 -0
- package/Tests/Types/Workspace/NotificationRuleConditionUtil.test.ts +76 -6
- package/Tests/Types/Workspace/NotificationRules/NotificationRuleCondition.test.ts +16 -4
- package/Tests/Types/Workspace/NotificationRules/OnCallDutyPolicyConditions.test.ts +669 -0
- package/Tests/UI/Components/DictionaryFilterOperatorWildcard.test.ts +175 -0
- package/Tests/UI/Components/IconOpticalSize.test.tsx +377 -0
- package/Tests/UI/Components/LogsHistogramDragTooltip.test.tsx +393 -0
- package/Tests/UI/Components/LogsViewerHistogramZoom.test.tsx +248 -0
- package/Tests/UI/Components/TelemetryHistogramDragTooltip.test.tsx +205 -0
- package/Tests/UI/Components/UseHistogramZoom.test.tsx +262 -0
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsChatsCardInstallGuidance.test.tsx +332 -0
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsInstallGuidanceContent.test.tsx +643 -0
- package/Tests/Utils/Monitor/InterfaceInventoryUtil.test.ts +824 -0
- package/Tests/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.test.ts +626 -0
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +718 -0
- package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +59 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +287 -2
- package/Tests/Utils/NetworkDiscovery/DiscoveryImportEligibility.test.ts +73 -0
- package/Tests/Utils/NetworkDiscovery/PingMonitorBuilder.test.ts +317 -0
- package/Tests/Utils/NetworkDiscovery/RescanIntervalUtil.test.ts +262 -0
- package/Tests/Utils/NetworkDiscovery/ScanModeUtil.test.ts +474 -0
- package/Tests/Utils/NetworkDiscovery/SnmpScanConfigUtil.test.ts +2442 -0
- package/Tests/Utils/NetworkSite/SiteMaintenanceUtil.test.ts +188 -0
- package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +522 -0
- package/Tests/Utils/NetworkSite/SiteUptimeUtil.test.ts +694 -0
- package/Tests/Utils/SecurityEvent/ThreatIntel/StixPatternParser.test.ts +281 -0
- package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +87 -67
- package/Types/API/URL.ts +100 -28
- package/Types/AnalyticsDatabase/AnalyticsTableName.ts +8 -0
- package/Types/BaseDatabase/NotWildcard.ts +86 -0
- package/Types/BaseDatabase/Wildcard.ts +89 -0
- package/Types/BaseDatabase/WildcardPattern.ts +176 -0
- package/Types/Database/DateColumnValue.ts +184 -0
- package/Types/Database/TableColumn.ts +40 -5
- package/Types/Date.ts +37 -0
- package/Types/Email/EmailTemplateType.ts +1 -0
- package/Types/JSON.ts +8 -0
- package/Types/Log/LogQueryToFilter.ts +167 -129
- package/Types/Monitor/DockerAlertTemplates.ts +43 -12
- package/Types/Monitor/HostAlertTemplates.ts +31 -3
- package/Types/Monitor/KubernetesAlertTemplates.ts +98 -0
- package/Types/Monitor/MonitorStep.ts +49 -0
- package/Types/Monitor/PodmanAlertTemplates.ts +39 -12
- package/Types/Monitor/SnmpMonitor/CdpNeighbor.ts +14 -0
- package/Types/Monitor/SnmpMonitor/LldpNeighbor.ts +11 -0
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +11 -4
- package/Types/NetworkAutomation/RuleRunResult.ts +191 -2
- package/Types/NetworkSite/SiteHealthRollupPolicy.ts +96 -0
- package/Types/Permission.ts +411 -0
- package/Types/Probe/ProbeApiIngestResponse.ts +42 -0
- package/Types/SecurityEvent/ThreatIntelConstants.ts +118 -0
- package/Types/SerializableObjectDictionary.ts +8 -0
- package/Types/Telemetry/SourceMap.ts +56 -0
- package/Types/Telemetry/TelemetrySearchQuery.ts +949 -0
- package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +12 -1
- package/UI/Components/Charts/Utils/useHistogramZoom.ts +101 -0
- package/UI/Components/Dictionary/DictionaryFilterOperator.ts +83 -0
- package/UI/Components/Icon/Icon.tsx +28 -1
- package/UI/Components/LogsViewer/LogsViewer.tsx +19 -3
- package/UI/Components/LogsViewer/components/LogSearchBar.tsx +26 -4
- package/UI/Components/LogsViewer/components/LogSearchHelp.tsx +34 -16
- package/UI/Components/LogsViewer/components/LogsHistogram.tsx +52 -1
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +18 -2
- package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +52 -1
- package/UI/Components/TelemetryViewer/components/TelemetrySearchBar.tsx +15 -2
- package/Utils/Metrics/MetricExplorerUrl.ts +77 -15
- package/Utils/Monitor/InterfaceInventoryUtil.ts +251 -0
- package/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.ts +333 -0
- package/Utils/Monitor/NetworkTopologyUtil.ts +249 -28
- package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +14 -6
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +2 -0
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +49 -18
- package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +215 -0
- package/Utils/NetworkDiscovery/RescanIntervalUtil.ts +148 -0
- package/Utils/NetworkDiscovery/ScanModeUtil.ts +105 -0
- package/Utils/NetworkDiscovery/SnmpScanConfigUtil.ts +827 -0
- package/Utils/NetworkSite/SiteMaintenanceUtil.ts +110 -0
- package/Utils/NetworkSite/SiteStatusRollupUtil.ts +350 -19
- package/Utils/NetworkSite/SiteUptimeUtil.ts +422 -21
- package/Utils/SecurityEvent/ThreatIntel/StixPatternParser.ts +383 -0
- package/Utils/Telemetry/CrossSignalScope.ts +37 -39
- package/build/dist/Models/AnalyticsModels/Index.js +2 -0
- package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +325 -0
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -0
- package/build/dist/Models/DatabaseModels/AlertSeverity.js +4 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephClusterFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/CephClusterFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/CloudResourceFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/CloudResourceFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +11 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DetectionRule.js +9 -3
- package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHostFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/DockerHostFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +9 -3
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
- package/build/dist/Models/DatabaseModels/HostFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/HostFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js +4 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +22 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/KubernetesClusterFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Monitor.js +81 -0
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +103 -7
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +91 -6
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +276 -31
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSite.js +124 -1
- package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js +1 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanHostFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/PodmanHostFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ProxmoxClusterFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/ProxmoxClusterFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +66 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/ServiceFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/TelemetrySourceMap.js +496 -0
- package/build/dist/Models/DatabaseModels/TelemetrySourceMap.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +800 -0
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserOnCallLog.js +1 -0
- package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserTotpAuth.js +1 -0
- package/build/dist/Models/DatabaseModels/UserTotpAuth.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js +1 -0
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
- package/build/dist/Server/API/AlertAPI.js +18 -1
- package/build/dist/Server/API/AlertAPI.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +8 -1
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentAPI.js +35 -1
- package/build/dist/Server/API/IncidentAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentEpisodeAPI.js +18 -1
- package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -1
- package/build/dist/Server/API/MicrosoftTeamsAPI.js +30 -2
- package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/ScheduledMaintenanceAPI.js +18 -1
- package/build/dist/Server/API/ScheduledMaintenanceAPI.js.map +1 -1
- package/build/dist/Server/API/SlackAPI.js +45 -0
- package/build/dist/Server/API/SlackAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +100 -35
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/UserOnCallLogTimelineAPI.js +64 -59
- package/build/dist/Server/API/UserOnCallLogTimelineAPI.js.map +1 -1
- package/build/dist/Server/API/UserTotpAuthAPI.js +65 -1
- package/build/dist/Server/API/UserTotpAuthAPI.js.map +1 -1
- package/build/dist/Server/API/UserWebAuthnAPI.js +42 -1
- package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.js +22 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.js +88 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.js +39 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.js +32 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.js +61 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.js +23 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.js +179 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js +40 -3
- package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +177 -30
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterFeedService.js +89 -0
- package/build/dist/Server/Services/CephClusterFeedService.js.map +1 -0
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +21 -0
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/CephClusterOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerUserService.js +113 -0
- package/build/dist/Server/Services/CephClusterOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterService.js +175 -1
- package/build/dist/Server/Services/CephClusterService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceFeedService.js +89 -0
- package/build/dist/Server/Services/CloudResourceFeedService.js.map +1 -0
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +28 -3
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/CloudResourceOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerUserService.js +113 -0
- package/build/dist/Server/Services/CloudResourceOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceService.js +177 -1
- package/build/dist/Server/Services/CloudResourceService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +201 -0
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostFeedService.js +89 -0
- package/build/dist/Server/Services/DockerHostFeedService.js.map +1 -0
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +21 -0
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/DockerHostOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerUserService.js +113 -0
- package/build/dist/Server/Services/DockerHostOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostService.js +177 -1
- package/build/dist/Server/Services/DockerHostService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterFeedService.js +90 -0
- package/build/dist/Server/Services/DockerSwarmClusterFeedService.js.map +1 -0
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +21 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js +113 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterService.js +175 -1
- package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseService.js +40 -30
- package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
- package/build/dist/Server/Services/ExceptionAggregationService.js +8 -2
- package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
- package/build/dist/Server/Services/HostFeedService.js +89 -0
- package/build/dist/Server/Services/HostFeedService.js.map +1 -0
- package/build/dist/Server/Services/HostLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js +21 -0
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/HostOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerUserService.js +113 -0
- package/build/dist/Server/Services/HostOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/HostService.js +175 -1
- package/build/dist/Server/Services/HostService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +10 -0
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +24 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterFeedService.js +89 -0
- package/build/dist/Server/Services/KubernetesClusterFeedService.js.map +1 -0
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +21 -0
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/KubernetesClusterOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerUserService.js +113 -0
- package/build/dist/Server/Services/KubernetesClusterOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterService.js +177 -1
- package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +19 -196
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricAggregationService.js +59 -0
- package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +115 -13
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +86 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +561 -67
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +130 -16
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +850 -8
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +594 -5
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkInterfaceService.js +306 -0
- package/build/dist/Server/Services/NetworkInterfaceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +408 -47
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostFeedService.js +89 -0
- package/build/dist/Server/Services/PodmanHostFeedService.js.map +1 -0
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +21 -0
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/PodmanHostOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerUserService.js +113 -0
- package/build/dist/Server/Services/PodmanHostOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostService.js +177 -1
- package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +40 -30
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterFeedService.js +89 -0
- package/build/dist/Server/Services/ProxmoxClusterFeedService.js.map +1 -0
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +21 -0
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js +113 -0
- package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterService.js +175 -1
- package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +56 -0
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceFeedService.js +89 -0
- package/build/dist/Server/Services/ServiceFeedService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +27 -3
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +24 -0
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerTeamService.js +120 -0
- package/build/dist/Server/Services/ServiceOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerUserService.js +113 -0
- package/build/dist/Server/Services/ServiceOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/ServiceService.js +173 -2
- package/build/dist/Server/Services/ServiceService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +7 -0
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryAttributeService.js +9 -3
- package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
- package/build/dist/Server/Services/TelemetrySourceMapService.js +265 -0
- package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -0
- package/build/dist/Server/Services/ThreatIntelFeedService.js +157 -0
- package/build/dist/Server/Services/ThreatIntelFeedService.js.map +1 -0
- package/build/dist/Server/Services/ThreatIntelIndicatorService.js +276 -0
- package/build/dist/Server/Services/ThreatIntelIndicatorService.js.map +1 -0
- package/build/dist/Server/Services/TraceAggregationService.js +62 -6
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +22 -13
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/UserTwoFactorBackupCodeService.js +120 -0
- package/build/dist/Server/Services/UserTwoFactorBackupCodeService.js.map +1 -1
- package/build/dist/Server/Services/UserWebhookService.js +11 -2
- package/build/dist/Server/Services/UserWebhookService.js.map +1 -1
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +12 -1
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/AggregateBy.js +2 -0
- package/build/dist/Server/Types/Database/AggregateBy.js.map +1 -0
- package/build/dist/Server/Types/Database/AggregateResultUtil.js +90 -0
- package/build/dist/Server/Types/Database/AggregateResultUtil.js.map +1 -0
- package/build/dist/Server/Types/Database/JSONColumnQuery.js +14 -0
- package/build/dist/Server/Types/Database/JSONColumnQuery.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +42 -0
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryUtil.js +18 -0
- package/build/dist/Server/Types/Database/QueryUtil.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/API/Utils.js +10 -1
- package/build/dist/Server/Types/Workflow/Components/API/Utils.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/JavaScript.js +8 -0
- package/build/dist/Server/Types/Workflow/Components/JavaScript.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +8 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +15 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.js +266 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.js.map +1 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +134 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/DataSource/HttpFetch.js +8 -0
- package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
- package/build/dist/Server/Utils/Database/RelationIdUtil.js +31 -0
- package/build/dist/Server/Utils/Database/RelationIdUtil.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js +26 -8
- package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js +42 -17
- package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +9 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SyntheticMonitor.js +15 -2
- package/build/dist/Server/Utils/Monitor/Criteria/SyntheticMonitor.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +386 -271
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +278 -64
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +469 -350
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +183 -44
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +46 -3
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +18 -91
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/PerEntityCriteriaFanOut.js +194 -0
- package/build/dist/Server/Utils/Monitor/PerEntityCriteriaFanOut.js.map +1 -0
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js +332 -0
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js.map +1 -0
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.js +279 -0
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.js.map +1 -0
- package/build/dist/Server/Utils/OnCallNotificationContext.js +415 -0
- package/build/dist/Server/Utils/OnCallNotificationContext.js.map +1 -0
- package/build/dist/Server/Utils/PrivateNetworkWebhookConfig.js +424 -0
- package/build/dist/Server/Utils/PrivateNetworkWebhookConfig.js.map +1 -0
- package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js +108 -0
- package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js.map +1 -0
- package/build/dist/Server/Utils/Response.js +12 -1
- package/build/dist/Server/Utils/Response.js.map +1 -1
- package/build/dist/Server/Utils/SSRFProtection.js +160 -58
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js +89 -0
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +75 -234
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +41 -16
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/SecurityEventAlerting.js +217 -0
- package/build/dist/Server/Utils/SecurityEvent/SecurityEventAlerting.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.js +103 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.js +168 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js +527 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js +376 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js.map +1 -0
- package/build/dist/Server/Utils/StartServer.js +70 -44
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js +3 -0
- package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +327 -0
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -0
- package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js +84 -0
- package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js.map +1 -0
- package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMRunner.js +10 -1
- package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
- package/build/dist/Server/Utils/VendorAssets.js +29 -0
- package/build/dist/Server/Utils/VendorAssets.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +121 -6
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/API/URL.js +88 -27
- package/build/dist/Types/API/URL.js.map +1 -1
- package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +8 -0
- package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
- package/build/dist/Types/BaseDatabase/NotWildcard.js +72 -0
- package/build/dist/Types/BaseDatabase/NotWildcard.js.map +1 -0
- package/build/dist/Types/BaseDatabase/Wildcard.js +75 -0
- package/build/dist/Types/BaseDatabase/Wildcard.js.map +1 -0
- package/build/dist/Types/BaseDatabase/WildcardPattern.js +137 -0
- package/build/dist/Types/BaseDatabase/WildcardPattern.js.map +1 -0
- package/build/dist/Types/Database/DateColumnValue.js +125 -0
- package/build/dist/Types/Database/DateColumnValue.js.map +1 -0
- package/build/dist/Types/Database/TableColumn.js +18 -2
- package/build/dist/Types/Database/TableColumn.js.map +1 -1
- package/build/dist/Types/Date.js +31 -0
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/JSON.js +2 -0
- package/build/dist/Types/JSON.js.map +1 -1
- package/build/dist/Types/Log/LogQueryToFilter.js +111 -108
- package/build/dist/Types/Log/LogQueryToFilter.js.map +1 -1
- package/build/dist/Types/Monitor/DockerAlertTemplates.js +40 -16
- package/build/dist/Types/Monitor/DockerAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/HostAlertTemplates.js +29 -7
- package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +98 -4
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +40 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/PodmanAlertTemplates.js +36 -16
- package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -1
- package/build/dist/Types/NetworkAutomation/RuleRunResult.js +90 -0
- package/build/dist/Types/NetworkAutomation/RuleRunResult.js.map +1 -1
- package/build/dist/Types/NetworkSite/SiteHealthRollupPolicy.js +84 -0
- package/build/dist/Types/NetworkSite/SiteHealthRollupPolicy.js.map +1 -0
- package/build/dist/Types/Permission.js +354 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js +100 -0
- package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js.map +1 -0
- package/build/dist/Types/SerializableObjectDictionary.js +8 -0
- package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
- package/build/dist/Types/Telemetry/SourceMap.js +9 -0
- package/build/dist/Types/Telemetry/SourceMap.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetrySearchQuery.js +661 -0
- package/build/dist/Types/Telemetry/TelemetrySearchQuery.js.map +1 -0
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +12 -1
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js +47 -0
- package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js.map +1 -0
- package/build/dist/UI/Components/Dictionary/DictionaryFilterOperator.js +67 -0
- package/build/dist/UI/Components/Dictionary/DictionaryFilterOperator.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +28 -1
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +15 -3
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js +25 -4
- package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogSearchHelp.js +36 -16
- package/build/dist/UI/Components/LogsViewer/components/LogSearchHelp.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +33 -5
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +14 -2
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +33 -5
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js +14 -2
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js.map +1 -1
- package/build/dist/Utils/Metrics/MetricExplorerUrl.js +54 -9
- package/build/dist/Utils/Metrics/MetricExplorerUrl.js.map +1 -1
- package/build/dist/Utils/Monitor/InterfaceInventoryUtil.js +128 -0
- package/build/dist/Utils/Monitor/InterfaceInventoryUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js +190 -0
- package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +206 -28
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +14 -7
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +34 -18
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +163 -0
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/RescanIntervalUtil.js +99 -0
- package/build/dist/Utils/NetworkDiscovery/RescanIntervalUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/ScanModeUtil.js +85 -0
- package/build/dist/Utils/NetworkDiscovery/ScanModeUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/SnmpScanConfigUtil.js +560 -0
- package/build/dist/Utils/NetworkDiscovery/SnmpScanConfigUtil.js.map +1 -0
- package/build/dist/Utils/NetworkSite/SiteMaintenanceUtil.js +56 -0
- package/build/dist/Utils/NetworkSite/SiteMaintenanceUtil.js.map +1 -0
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +185 -10
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
- package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js +248 -21
- package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js.map +1 -1
- package/build/dist/Utils/SecurityEvent/ThreatIntel/StixPatternParser.js +255 -0
- package/build/dist/Utils/SecurityEvent/ThreatIntel/StixPatternParser.js.map +1 -0
- package/build/dist/Utils/Telemetry/CrossSignalScope.js +27 -30
- package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
- package/package.json +2 -1
- package/Tests/Types/Log/LogQueryParser.test.ts +0 -186
- package/Types/Log/LogQueryParser.ts +0 -252
- package/build/dist/Types/Log/LogQueryParser.js +0 -200
- 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
|
+
};
|