@oneuptime/common 12.0.30 → 12.0.32
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/SecurityEvent.ts +48 -16
- package/Models/AnalyticsModels/ThreatIntelIndicator.ts +10 -5
- package/Models/DatabaseModels/AlertSeverity.ts +44 -0
- package/Models/DatabaseModels/AlertState.ts +0 -2
- package/Models/DatabaseModels/DetectionRule.ts +16 -5
- package/Models/DatabaseModels/Domain.ts +1 -1
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +14 -5
- package/Models/DatabaseModels/Incident.ts +1 -1
- package/Models/DatabaseModels/IncidentSeverity.ts +44 -0
- package/Models/DatabaseModels/IncidentTemplate.ts +1 -1
- package/Models/DatabaseModels/Index.ts +4 -0
- package/Models/DatabaseModels/MetricType.ts +0 -2
- package/Models/DatabaseModels/MonitorStatusTimeline.ts +0 -2
- package/Models/DatabaseModels/MonitorTest.ts +0 -2
- package/Models/DatabaseModels/NetworkDevice.ts +234 -5
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +88 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +22 -0
- package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +501 -0
- package/Models/DatabaseModels/NetworkDeviceRole.ts +648 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -1
- package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +1 -1
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +0 -2
- package/Models/DatabaseModels/StatusPageAnnouncementTemplate.ts +0 -2
- package/Models/DatabaseModels/StatusPagePrivateUser.ts +0 -2
- package/Models/DatabaseModels/StatusPageResource.ts +0 -2
- package/Models/DatabaseModels/StatusPageSubscriber.ts +0 -2
- package/Models/DatabaseModels/ThreatIntelFeed.ts +16 -5
- package/Server/API/GlobalConfigAPI.ts +362 -183
- package/Server/API/TelemetryAPI.ts +42 -4
- package/Server/EnvironmentConfig.ts +112 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.ts +59 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.ts +72 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Middleware/MultipartFormData.ts +118 -32
- package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +9 -1
- package/Server/Services/AlertGroupingEngineService.ts +9 -1
- package/Server/Services/AlertLabelRuleEngineService.ts +9 -1
- package/Server/Services/AlertOnCallRuleEngineService.ts +9 -1
- package/Server/Services/AlertOwnerRuleEngineService.ts +9 -1
- package/Server/Services/AlertPrivacyRuleEngineService.ts +9 -1
- package/Server/Services/AlertReminderRuleService.ts +9 -1
- package/Server/Services/AutoRemediationRuleEngineService.ts +9 -1
- package/Server/Services/CephClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/CloudResourceLabelRuleEngineService.ts +9 -1
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DashboardLabelRuleEngineService.ts +9 -1
- package/Server/Services/DashboardOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DatabaseService.ts +39 -9
- package/Server/Services/DockerHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/HostLabelRuleEngineService.ts +9 -1
- package/Server/Services/HostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +9 -1
- package/Server/Services/IncidentGroupingEngineService.ts +9 -1
- package/Server/Services/IncidentLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncidentOnCallRuleEngineService.ts +9 -1
- package/Server/Services/IncidentOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentPrivacyRuleEngineService.ts +9 -1
- package/Server/Services/IncidentReminderRuleService.ts +9 -1
- package/Server/Services/IncidentSlaRuleService.ts +9 -1
- package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/Index.ts +4 -0
- package/Server/Services/IoTFleetLabelRuleEngineService.ts +9 -1
- package/Server/Services/IoTFleetOwnerRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesResourceService.ts +5 -1
- package/Server/Services/MonitorLabelRuleEngineService.ts +9 -1
- package/Server/Services/MonitorOwnerRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +35 -0
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +96 -0
- package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceOidTemplateService.ts +201 -0
- package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceRoleService.ts +90 -0
- package/Server/Services/NetworkDeviceService.ts +209 -1
- package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +9 -1
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ProjectService.ts +85 -0
- package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RumApplicationLabelRuleEngineService.ts +9 -1
- package/Server/Services/RumApplicationOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RunbookLabelRuleEngineService.ts +9 -1
- package/Server/Services/RunbookOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RunbookRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +9 -1
- package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +9 -1
- package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ServiceLabelRuleEngineService.ts +9 -1
- package/Server/Services/ServiceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/StatusPageLabelRuleEngineService.ts +9 -1
- package/Server/Services/StatusPageMonitorRuleEngineService.ts +7 -0
- package/Server/Services/StatusPageOwnerRuleEngineService.ts +9 -1
- package/Server/Services/TelemetrySourceMapService.ts +266 -23
- package/Server/Services/UserNotificationSettingService.ts +0 -6
- package/Server/Services/UserService.ts +27 -0
- package/Server/Services/WorkflowLabelRuleEngineService.ts +9 -1
- package/Server/Services/WorkflowOwnerRuleEngineService.ts +9 -1
- package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +186 -0
- package/Server/Utils/Monitor/CapturedMetricAttributeUtil.ts +245 -0
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +21 -2
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +55 -21
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +32 -0
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +15 -2
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +18 -1
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +10 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +34 -0
- package/Server/Utils/Rules/RuleEngineRuleRead.ts +48 -0
- package/Server/Utils/Telemetry/ExceptionSanitizer.ts +14 -1
- package/Server/Utils/Telemetry/LogExceptionExtractor.ts +14 -2
- package/Server/Utils/Telemetry/SourceMapResolver.ts +16 -5
- package/Server/Utils/Telemetry/StackTraceParser.ts +399 -0
- package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +31 -1
- package/Tests/App/Dashboard/DashboardChartWidgetZoom.test.tsx +35 -8
- package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +107 -3
- package/Tests/App/Dashboard/DashboardWideChartZoom.test.tsx +401 -0
- package/Tests/App/Dashboard/EventOverlayHook.test.tsx +125 -0
- package/Tests/App/Dashboard/HeaderImageAssets.test.tsx +93 -0
- package/Tests/App/Dashboard/MonitorTemplateColumnAndFacet.test.tsx +318 -0
- package/Tests/App/Dashboard/NetworkDeviceBulkDelete.test.tsx +357 -0
- package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +590 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -3
- package/Tests/App/Dashboard/SideMenuHarness.tsx +11 -3
- package/Tests/App/Dashboard/UserElementEmail.test.tsx +12 -4
- package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +1 -1
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +14 -0
- package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +543 -0
- package/Tests/Models/SecurityDomainAccessControl.test.ts +429 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +657 -0
- package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +84 -6
- package/Tests/Server/API/TelemetryResolveStackTraceAPI.test.ts +805 -0
- package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +32 -7
- package/Tests/Server/Infrastructure/Postgres/NetworkDeviceRoleTableMigration.test.ts +476 -0
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +1144 -0
- package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
- package/Tests/Server/Services/DatabaseServiceGenerateSlug.test.ts +215 -0
- package/Tests/Server/Services/MonitorLabelRuleEngineScale.test.ts +520 -0
- package/Tests/Server/Services/NetworkDeviceOidTemplateService.test.ts +332 -0
- package/Tests/Server/Services/NetworkDeviceOidTemplateWriteGuards.test.ts +409 -0
- package/Tests/Server/Services/NetworkDeviceRoleModel.test.ts +672 -0
- package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +1 -1
- package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +67 -4
- package/Tests/Server/Services/RuleEngineRuleFetchLimit.test.ts +239 -0
- package/Tests/Server/Services/ScheduledMaintenanceSubscriberEndTime.test.ts +369 -0
- package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -2
- package/Tests/Server/Services/UserNotificationSettingMonitorDefaults.test.ts +248 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +43 -2
- package/Tests/Server/Services/UserServiceSeatLimit.test.ts +182 -0
- package/Tests/Server/Types/AnalyticsDatabase/SecurityEventModelPermission.test.ts +255 -0
- package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +212 -0
- package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +413 -0
- package/Tests/Server/Utils/BasicCron.test.ts +283 -0
- package/Tests/Server/Utils/CodeRepository.test.ts +689 -0
- package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +495 -0
- package/Tests/Server/Utils/ExceptionSanitizer.test.ts +77 -0
- package/Tests/Server/Utils/IncomingCallPhoneNumber.test.ts +174 -0
- package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +284 -0
- package/Tests/Server/Utils/Monitor/MonitorCustomMetricAttributes.test.ts +503 -0
- package/Tests/Server/Utils/Monitor/MonitorTemplatePrototypePollution.test.ts +106 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +33 -4
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +14 -4
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +44 -0
- package/Tests/Server/Utils/OpenAPISpec.test.ts +536 -0
- package/Tests/Server/Utils/Rules/RuleEngineRuleRead.test.ts +115 -0
- package/Tests/Server/Utils/StackTraceParser.test.ts +610 -0
- package/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.ts +0 -0
- package/Tests/Server/Utils/Telemetry/SourceMapLimits.test.ts +656 -0
- package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +100 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpOidListUtil.test.ts +454 -0
- package/Tests/Types/NetworkDevice/DefaultNetworkDeviceRole.test.ts +417 -0
- package/Tests/Types/SecurityRolePermissions.test.ts +193 -0
- package/Tests/UI/Components/Charts/AnnotationLayout.test.ts +773 -0
- package/Tests/UI/Components/Charts/ChartAnnotationRail.test.tsx +789 -0
- package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +254 -0
- package/Tests/UI/Components/Charts/ChartClickDoubleClickDisambiguation.test.tsx +221 -0
- package/Tests/UI/Components/Charts/ChartDoubleClickReset.test.tsx +220 -0
- package/Tests/UI/Components/Charts/TimeAnnotation.test.ts +471 -0
- package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +405 -0
- package/Tests/UI/Components/ErrorMessageRefreshControl.test.tsx +83 -0
- package/Tests/UI/Components/MarkdownConverters.test.ts +686 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +751 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableColumnCustomization.test.tsx +475 -43
- package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +341 -0
- package/Tests/UI/Components/ModelTable/ColumnPreference.test.ts +89 -0
- package/Tests/UI/Components/NavBarCommandKGating.test.tsx +103 -8
- package/Tests/UI/Components/OrderedStatesList.test.tsx +5 -5
- package/Tests/UI/Components/PendingProjectInvitations.test.tsx +1 -1
- package/Tests/UI/Components/SideMenuItem.test.tsx +30 -0
- package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +195 -0
- package/Tests/UI/Components/XAxis.test.ts +270 -5
- package/Tests/UI/Components/XAxisDaylightSaving.test.ts +113 -0
- package/Tests/UI/Styles/ChartFocusRing.test.ts +153 -0
- package/Tests/UI/Styles/ChartFocusRingCoverage.test.tsx +377 -0
- package/Tests/UI/Styles/ThemeStylesheet.ts +162 -0
- package/Tests/UI/Utils/TableColumnsToCsv.test.ts +30 -0
- package/Tests/UI/Utils/UseDashboardTimeRangeZoom.test.tsx +187 -0
- package/Tests/Utils/Dashboard/DashboardResourceListSharedArgs.test.ts +302 -0
- package/Tests/Utils/Dashboard/DashboardTimeRangeZoom.test.ts +242 -0
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +507 -0
- package/Tests/Utils/Monitor/NetworkDeviceRoleCatalog.test.ts +981 -0
- package/Tests/Utils/Monitor/NetworkTopologyRoleCatalog.test.ts +865 -0
- package/Tests/Utils/NetworkDevice/DeviceRoleKeyUtil.test.ts +538 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +951 -1
- package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +238 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +1056 -0
- package/Tests/Utils/NetworkDiscovery/ReverseDnsNameUtil.test.ts +882 -0
- package/Tests/Utils/Slo/SloEvaluation.test.ts +171 -0
- package/Tests/Utils/Slug.test.ts +61 -1
- package/Tests/jest.setup.ts +19 -0
- package/Types/Date.ts +39 -0
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +61 -0
- package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
- package/Types/NetworkDevice/DefaultNetworkDeviceRole.ts +145 -0
- package/Types/Permission.ts +141 -0
- package/Types/Rum/SessionReplay.ts +21 -0
- package/Types/Telemetry/SourceMap.ts +8 -0
- package/UI/Components/Charts/Area/AreaChart.tsx +7 -0
- package/UI/Components/Charts/Bar/BarChart.tsx +6 -0
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +9 -1
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.tsx +176 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.ts +745 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.tsx +576 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.tsx +204 -0
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +554 -545
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +337 -371
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +549 -540
- package/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.ts +7 -3
- package/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.ts +14 -3
- package/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.ts +13 -0
- package/UI/Components/Charts/Line/LineChart.tsx +7 -0
- package/UI/Components/Charts/Types/ChartEventKind.ts +13 -0
- package/UI/Components/Charts/Types/ReferenceRegionProps.ts +6 -0
- package/UI/Components/Charts/Types/TimeReferenceLineProps.ts +20 -3
- package/UI/Components/Charts/Utils/TimeAnnotation.ts +69 -35
- package/UI/Components/Charts/Utils/XAxis.ts +125 -18
- package/UI/Components/EditionLabel/EditionLabel.tsx +280 -26
- package/UI/Components/ErrorMessage/ErrorMessage.tsx +21 -10
- package/UI/Components/Feed/FeedItem.tsx +4 -5
- package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -2
- package/UI/Components/Header/UserProfile/UserProfile.tsx +1 -2
- package/UI/Components/Image/Image.tsx +20 -3
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +1 -2
- package/UI/Components/ModelTable/BaseModelTable.tsx +200 -39
- package/UI/Components/Navbar/NavBar.tsx +62 -13
- package/UI/Components/Navbar/NavBarMenuModal.tsx +7 -2
- package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +2 -0
- package/UI/Components/SideMenu/SideMenu.tsx +12 -2
- package/UI/Components/SideMenu/SideMenuItem.tsx +4 -1
- package/UI/Components/SideMenu/SideMenuSection.tsx +14 -2
- package/UI/Components/Table/TableHeader.tsx +64 -48
- package/UI/Components/Table/TableRow.tsx +13 -3
- package/UI/Styles/Theme.css +38 -0
- package/UI/Utils/UseDashboardTimeRangeZoom.ts +77 -0
- package/Utils/Dashboard/DashboardTimeRangeZoom.ts +118 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +271 -0
- package/Utils/Monitor/NetworkDeviceRoleCatalog.ts +232 -0
- package/Utils/Monitor/NetworkDeviceRoleUtil.ts +2 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +116 -33
- package/Utils/NetworkDevice/DeviceRoleKeyUtil.ts +137 -0
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +6 -0
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +141 -10
- package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +55 -3
- package/Utils/NetworkDiscovery/ReverseDnsNameUtil.ts +151 -0
- package/Utils/Rules/RuleEngineLimits.ts +32 -0
- package/Utils/Rules/RulePatternMatchUtil.ts +1 -1
- package/Utils/Slug.ts +34 -1
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js +48 -16
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +10 -5
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertState.js +0 -2
- package/build/dist/Models/DatabaseModels/AlertState.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DetectionRule.js +16 -5
- package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Domain.js +1 -1
- package/build/dist/Models/DatabaseModels/Domain.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +14 -5
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +4 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MetricType.js +0 -2
- package/build/dist/Models/DatabaseModels/MetricType.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js +0 -2
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTest.js +0 -2
- package/build/dist/Models/DatabaseModels/MonitorTest.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +239 -6
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +88 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +521 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js +677 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncementTemplate.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncementTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageResource.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +16 -5
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -1
- package/build/dist/Server/API/GlobalConfigAPI.js +293 -176
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +31 -3
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +83 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.js +39 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/MultipartFormData.js +93 -28
- package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js +8 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js +8 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +31 -5
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js +8 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js +8 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +4 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesResourceService.js +5 -1
- package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +30 -21
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +64 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js +180 -0
- package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceRoleService.js +70 -0
- package/build/dist/Server/Services/NetworkDeviceRoleService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceService.js +154 -1
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +65 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +6 -0
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/TelemetrySourceMapService.js +213 -19
- package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js +0 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +25 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +145 -0
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js +201 -0
- package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +19 -2
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +42 -23
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +29 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +11 -2
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +16 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +10 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +33 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js +37 -0
- package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js +12 -1
- package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +14 -2
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +15 -5
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/StackTraceParser.js +307 -0
- package/build/dist/Server/Utils/Telemetry/StackTraceParser.js.map +1 -1
- package/build/dist/Types/Date.js +27 -0
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js +253 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js.map +1 -0
- package/build/dist/Types/NetworkDevice/DefaultNetworkDeviceRole.js +105 -0
- package/build/dist/Types/NetworkDevice/DefaultNetworkDeviceRole.js.map +1 -0
- package/build/dist/Types/Permission.js +126 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplay.js +19 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +6 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js +83 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js +531 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js +264 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js +122 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +262 -234
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +146 -153
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +261 -233
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js +14 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js.map +1 -0
- package/build/dist/UI/Components/Charts/Line/LineChart.js +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Types/ChartEventKind.js +14 -0
- package/build/dist/UI/Components/Charts/Types/ChartEventKind.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +57 -28
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +103 -17
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +198 -23
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +15 -5
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +4 -5
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -2
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
- package/build/dist/UI/Components/Header/UserProfile/UserProfile.js.map +1 -1
- package/build/dist/UI/Components/Image/Image.js +6 -1
- package/build/dist/UI/Components/Image/Image.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +1 -2
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +143 -36
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js +44 -9
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +2 -2
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js +1 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenu.js +9 -6
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js +7 -2
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
- package/build/dist/UI/Components/Table/TableHeader.js +20 -22
- package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +13 -4
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Utils/UseDashboardTimeRangeZoom.js +42 -0
- package/build/dist/UI/Utils/UseDashboardTimeRangeZoom.js.map +1 -0
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js +74 -0
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js.map +1 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +153 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleCatalog.js +126 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleCatalog.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js +2 -1
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +67 -32
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceRoleKeyUtil.js +114 -0
- package/build/dist/Utils/NetworkDevice/DeviceRoleKeyUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +127 -7
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +50 -3
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js +132 -0
- package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js.map +1 -0
- package/build/dist/Utils/Rules/RuleEngineLimits.js +31 -0
- package/build/dist/Utils/Rules/RuleEngineLimits.js.map +1 -0
- package/build/dist/Utils/Rules/RulePatternMatchUtil.js +1 -1
- package/build/dist/Utils/Slug.js +31 -1
- package/build/dist/Utils/Slug.js.map +1 -1
- package/jest.config.json +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { describe, expect, test } from "@jest/globals";
|
|
2
|
+
import {
|
|
3
|
+
StyleRule,
|
|
4
|
+
declaredValue,
|
|
5
|
+
rulesFor,
|
|
6
|
+
selectorsDeclaring,
|
|
7
|
+
} from "./ThemeStylesheet";
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* https://github.com/OneUptime/oneuptime/issues/3528: a black box around the
|
|
11
|
+
* graphs.
|
|
12
|
+
*
|
|
13
|
+
* recharts leaves its accessibility layer on, so the root <svg> of every
|
|
14
|
+
* chart carries tabindex="0", and the annotation layer gives the same to the
|
|
15
|
+
* <g> elements it draws for event chips and highlighted windows. Chrome's SVG
|
|
16
|
+
* user-agent stylesheet rings a focused <svg> on plain :focus rather than on
|
|
17
|
+
* :focus-visible the way it treats focusable HTML, so a mouse press inside a
|
|
18
|
+
* chart -- dragging out a zoom range on the Logs and Traces volume charts,
|
|
19
|
+
* clicking an event marker -- paints a hard black rectangle over the data.
|
|
20
|
+
*
|
|
21
|
+
* The fix is four lines of CSS, which is exactly why it needs cover: nothing
|
|
22
|
+
* else in the build would notice a reformat that dropped the descendant
|
|
23
|
+
* selector, or a reorder that let the user-agent ring back in. The rules
|
|
24
|
+
* carry no !important and no extra specificity, so their contract is a
|
|
25
|
+
* cascade contract, and that is what is asserted here rather than the literal
|
|
26
|
+
* text of the file.
|
|
27
|
+
*
|
|
28
|
+
* ChartFocusRingCoverage.test.tsx holds the other half: that the selectors
|
|
29
|
+
* written here still reach the elements recharts actually renders.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
// The chart surface and the focusable shapes drawn inside it.
|
|
33
|
+
const POINTER_FOCUS_SELECTORS: Array<string> = [
|
|
34
|
+
".recharts-surface:focus",
|
|
35
|
+
".recharts-surface [tabindex]:focus",
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
const KEYBOARD_FOCUS_SELECTORS: Array<string> = [
|
|
39
|
+
".recharts-surface:focus-visible",
|
|
40
|
+
".recharts-surface [tabindex]:focus-visible",
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
describe("Chart focus rings", () => {
|
|
44
|
+
test.each(POINTER_FOCUS_SELECTORS)(
|
|
45
|
+
"%s drops the user-agent focus ring",
|
|
46
|
+
(selector: string) => {
|
|
47
|
+
expect(declaredValue(selector, "outline")).toBe("none");
|
|
48
|
+
},
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
test.each(KEYBOARD_FOCUS_SELECTORS)(
|
|
52
|
+
"%s draws a ring a keyboard reader can see",
|
|
53
|
+
(selector: string) => {
|
|
54
|
+
const outline: string | undefined = declaredValue(selector, "outline");
|
|
55
|
+
|
|
56
|
+
expect(outline).toBeDefined();
|
|
57
|
+
expect(outline).not.toBe("none");
|
|
58
|
+
// Themed, so the ring is legible on the dark canvas as well as the light one.
|
|
59
|
+
expect(outline).toContain("var(--ou-chart-focus-ring)");
|
|
60
|
+
},
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
/*
|
|
64
|
+
* A ring flush against the plot edge reads as a border on the chart itself.
|
|
65
|
+
* The offset is what makes it read as focus.
|
|
66
|
+
*/
|
|
67
|
+
test.each(KEYBOARD_FOCUS_SELECTORS)(
|
|
68
|
+
"%s holds the ring off the plot",
|
|
69
|
+
(selector: string) => {
|
|
70
|
+
expect(declaredValue(selector, "outline-offset")).toBe("2px");
|
|
71
|
+
},
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
* :focus and :focus-visible weigh the same, so the keyboard ring only
|
|
76
|
+
* survives while it is declared later in the file. Reordering the two blocks
|
|
77
|
+
* would leave keyboard users with no focus indicator at all, and no other
|
|
78
|
+
* assertion here would fail.
|
|
79
|
+
*/
|
|
80
|
+
test("the keyboard ring is declared after the ring it restores", () => {
|
|
81
|
+
const sourceOrder: (selectors: Array<string>) => Array<number> = (
|
|
82
|
+
selectors: Array<string>,
|
|
83
|
+
): Array<number> => {
|
|
84
|
+
return selectors.flatMap((selector: string): Array<number> => {
|
|
85
|
+
return rulesFor(selector).map((rule: StyleRule): number => {
|
|
86
|
+
return rule.index;
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
const pointerRuleIndexes: Array<number> = sourceOrder(
|
|
92
|
+
POINTER_FOCUS_SELECTORS,
|
|
93
|
+
);
|
|
94
|
+
const keyboardRuleIndexes: Array<number> = sourceOrder(
|
|
95
|
+
KEYBOARD_FOCUS_SELECTORS,
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
// Ordering says nothing if one side of it went missing.
|
|
99
|
+
expect(pointerRuleIndexes.length).toBe(POINTER_FOCUS_SELECTORS.length);
|
|
100
|
+
expect(keyboardRuleIndexes.length).toBe(KEYBOARD_FOCUS_SELECTORS.length);
|
|
101
|
+
|
|
102
|
+
expect(Math.min(...keyboardRuleIndexes)).toBeGreaterThan(
|
|
103
|
+
Math.max(...pointerRuleIndexes),
|
|
104
|
+
);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
/*
|
|
108
|
+
* Neither rule is fought over by anything else in the sheet, so neither
|
|
109
|
+
* needs !important to win. If one ever appears here it means something else
|
|
110
|
+
* started competing for the same property, and the pair above stopped being
|
|
111
|
+
* the whole story.
|
|
112
|
+
*/
|
|
113
|
+
test.each([...POINTER_FOCUS_SELECTORS, ...KEYBOARD_FOCUS_SELECTORS])(
|
|
114
|
+
"%s wins on the cascade alone",
|
|
115
|
+
(selector: string) => {
|
|
116
|
+
expect(declaredValue(selector, "outline")).not.toContain("!important");
|
|
117
|
+
},
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
describe("the accent the ring is drawn in", () => {
|
|
121
|
+
test.each([":root", "html.dark"])("%s defines it", (selector: string) => {
|
|
122
|
+
expect(declaredValue(selector, "--ou-chart-focus-ring")).toMatch(
|
|
123
|
+
/^#[0-9a-f]{6}$/i,
|
|
124
|
+
);
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
/*
|
|
128
|
+
* A single value cannot clear both canvases. Light and dark carry their
|
|
129
|
+
* own, the way every other --ou-chart-* token in the sheet does.
|
|
130
|
+
*/
|
|
131
|
+
test("light and dark do not share one value", () => {
|
|
132
|
+
expect(declaredValue(":root", "--ou-chart-focus-ring")).not.toBe(
|
|
133
|
+
declaredValue("html.dark", "--ou-chart-focus-ring"),
|
|
134
|
+
);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
/*
|
|
139
|
+
* The fix is deliberately narrow: it silences the ring on charts, and
|
|
140
|
+
* nothing else. A blanket `:focus { outline: none }` would take the focus
|
|
141
|
+
* indicator off the whole dashboard, which is the usual way this class of
|
|
142
|
+
* bug gets "fixed" and is far worse than the black box.
|
|
143
|
+
*/
|
|
144
|
+
test("nothing outside the charts had its focus ring silenced", () => {
|
|
145
|
+
const silenced: Array<string> = selectorsDeclaring("outline", "none");
|
|
146
|
+
|
|
147
|
+
expect(silenced.length).toBeGreaterThan(0);
|
|
148
|
+
|
|
149
|
+
for (const selector of silenced) {
|
|
150
|
+
expect(selector.startsWith(".recharts-surface")).toBe(true);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
});
|
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import { cleanup, render } from "@testing-library/react";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { afterEach, describe, expect, test } from "@jest/globals";
|
|
5
|
+
import { selectorsDeclaring } from "./ThemeStylesheet";
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
* ResponsiveContainer measures its parent, which is always 0x0 in jsdom, so
|
|
9
|
+
* the chart renders nothing without a fixed size -- and a chart that renders
|
|
10
|
+
* nothing would pass every assertion in this file for the wrong reason. Same
|
|
11
|
+
* shim as ChartAnnotationRail.test.tsx; recharts is otherwise the real thing
|
|
12
|
+
* here, because what is under test is the DOM recharts actually produces.
|
|
13
|
+
*/
|
|
14
|
+
jest.mock("recharts", () => {
|
|
15
|
+
const actual: Record<string, any> = jest.requireActual("recharts") as Record<
|
|
16
|
+
string,
|
|
17
|
+
any
|
|
18
|
+
>;
|
|
19
|
+
return {
|
|
20
|
+
...actual,
|
|
21
|
+
ResponsiveContainer: ({ children }: { children: React.ReactElement }) => {
|
|
22
|
+
return React.cloneElement(children, { width: 800, height: 400 });
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
import AreaChartElement from "../../../UI/Components/Charts/Area/AreaChart";
|
|
28
|
+
import BarChartElement from "../../../UI/Components/Charts/Bar/BarChart";
|
|
29
|
+
import LineChartElement from "../../../UI/Components/Charts/Line/LineChart";
|
|
30
|
+
import ChartCurve from "../../../UI/Components/Charts/Types/ChartCurve";
|
|
31
|
+
import ChartEventKind from "../../../UI/Components/Charts/Types/ChartEventKind";
|
|
32
|
+
import ChartReferenceRegionProps from "../../../UI/Components/Charts/Types/ReferenceRegionProps";
|
|
33
|
+
import ChartTimeReferenceLineProps from "../../../UI/Components/Charts/Types/TimeReferenceLineProps";
|
|
34
|
+
import DataPoint from "../../../UI/Components/Charts/Types/DataPoint";
|
|
35
|
+
import SeriesPoint from "../../../UI/Components/Charts/Types/SeriesPoints";
|
|
36
|
+
import {
|
|
37
|
+
XAxis as ChartXAxis,
|
|
38
|
+
XAxisAggregateType,
|
|
39
|
+
} from "../../../UI/Components/Charts/Types/XAxis/XAxis";
|
|
40
|
+
import XAxisType from "../../../UI/Components/Charts/Types/XAxis/XAxisType";
|
|
41
|
+
import YAxis, {
|
|
42
|
+
YAxisPrecision,
|
|
43
|
+
} from "../../../UI/Components/Charts/Types/YAxis/YAxis";
|
|
44
|
+
import YAxisType from "../../../UI/Components/Charts/Types/YAxis/YAxisType";
|
|
45
|
+
import LogsHistogram from "../../../UI/Components/LogsViewer/components/LogsHistogram";
|
|
46
|
+
import TelemetryHistogram from "../../../UI/Components/TelemetryViewer/components/TelemetryHistogram";
|
|
47
|
+
import { HistogramBucket as LogsHistogramBucket } from "../../../UI/Components/LogsViewer/types";
|
|
48
|
+
import {
|
|
49
|
+
HistogramBucket as TelemetryHistogramBucket,
|
|
50
|
+
HistogramSeriesOption,
|
|
51
|
+
} from "../../../UI/Components/TelemetryViewer/types";
|
|
52
|
+
|
|
53
|
+
/*
|
|
54
|
+
* The other half of the cover for
|
|
55
|
+
* https://github.com/OneUptime/oneuptime/issues/3528.
|
|
56
|
+
*
|
|
57
|
+
* ChartFocusRing.test.ts pins what the stylesheet declares. This file pins
|
|
58
|
+
* that those declarations still land on something: it renders the real charts
|
|
59
|
+
* with real recharts and checks every element the browser could focus inside
|
|
60
|
+
* a plot against the selectors the shipped Theme.css actually carries.
|
|
61
|
+
*
|
|
62
|
+
* The selectors are read out of the stylesheet rather than restated here on
|
|
63
|
+
* purpose. A recharts upgrade that renamed .recharts-surface, dropped the
|
|
64
|
+
* accessibility layer's tabindex, or moved the annotation shapes out from
|
|
65
|
+
* under the surface would leave the CSS silently covering nothing, and a
|
|
66
|
+
* hardcoded copy of the selector list would keep passing right through it.
|
|
67
|
+
*/
|
|
68
|
+
|
|
69
|
+
const START: Date = new Date("2026-03-02T00:00:00.000Z");
|
|
70
|
+
const END: Date = new Date("2026-03-02T06:00:00.000Z");
|
|
71
|
+
|
|
72
|
+
function minutesIn(minutes: number): Date {
|
|
73
|
+
return new Date(START.getTime() + minutes * 60 * 1000);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function buildSeries(): Array<SeriesPoint> {
|
|
77
|
+
const points: Array<DataPoint> = [];
|
|
78
|
+
|
|
79
|
+
for (let index: number = 0; index < 24; index++) {
|
|
80
|
+
points.push({
|
|
81
|
+
x: new Date(START.getTime() + index * 15 * 60 * 1000),
|
|
82
|
+
y: 100 + index,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return [{ seriesName: "latency", data: points }];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const X_AXIS: ChartXAxis = {
|
|
90
|
+
legend: "Time",
|
|
91
|
+
options: {
|
|
92
|
+
type: XAxisType.Time,
|
|
93
|
+
min: START,
|
|
94
|
+
max: END,
|
|
95
|
+
aggregateType: XAxisAggregateType.Average,
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
const Y_AXIS: YAxis = {
|
|
100
|
+
legend: "ms",
|
|
101
|
+
options: {
|
|
102
|
+
type: YAxisType.Number,
|
|
103
|
+
min: "auto",
|
|
104
|
+
max: "auto",
|
|
105
|
+
precision: YAxisPrecision.NoDecimals,
|
|
106
|
+
formatter: (value: number): string => {
|
|
107
|
+
return `${value} ms`;
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/*
|
|
113
|
+
* Annotations are passed to every chart that takes them: the event chips and
|
|
114
|
+
* region pills they draw are focusable <g> elements portalled inside the
|
|
115
|
+
* plot, and they are the reason the selector needs its descendant half.
|
|
116
|
+
*/
|
|
117
|
+
const TIME_REFERENCE_LINES: Array<ChartTimeReferenceLineProps> = [
|
|
118
|
+
{
|
|
119
|
+
date: minutesIn(90),
|
|
120
|
+
label: "Incident: API is down",
|
|
121
|
+
kind: ChartEventKind.Incident,
|
|
122
|
+
color: "#f87171",
|
|
123
|
+
},
|
|
124
|
+
];
|
|
125
|
+
|
|
126
|
+
const REFERENCE_REGIONS: Array<ChartReferenceRegionProps> = [
|
|
127
|
+
{
|
|
128
|
+
startDate: minutesIn(180),
|
|
129
|
+
endDate: minutesIn(240),
|
|
130
|
+
label: "Maintenance",
|
|
131
|
+
color: "#60a5fa",
|
|
132
|
+
},
|
|
133
|
+
];
|
|
134
|
+
|
|
135
|
+
function logsBuckets(): Array<LogsHistogramBucket> {
|
|
136
|
+
return [
|
|
137
|
+
{ time: "2026-03-02T00:00:00.000Z", severity: "Error", count: 4 },
|
|
138
|
+
{ time: "2026-03-02T00:05:00.000Z", severity: "Error", count: 9 },
|
|
139
|
+
{ time: "2026-03-02T00:10:00.000Z", severity: "Information", count: 21 },
|
|
140
|
+
];
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function telemetryBuckets(): Array<TelemetryHistogramBucket> {
|
|
144
|
+
return [
|
|
145
|
+
{ time: "2026-03-02T00:00:00.000Z", series: "Ok", count: 108 },
|
|
146
|
+
{ time: "2026-03-02T00:05:00.000Z", series: "Unset", count: 837 },
|
|
147
|
+
{ time: "2026-03-02T00:10:00.000Z", series: "Ok", count: 42 },
|
|
148
|
+
];
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const TELEMETRY_SERIES: Array<HistogramSeriesOption> = [
|
|
152
|
+
{ key: "Ok", label: "Ok", color: "#10b981" },
|
|
153
|
+
{ key: "Unset", label: "Unset", color: "#9ca3af" },
|
|
154
|
+
];
|
|
155
|
+
|
|
156
|
+
interface ChartUnderTest {
|
|
157
|
+
name: string;
|
|
158
|
+
render: () => React.ReactElement;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/*
|
|
162
|
+
* Every chart in the product that recharts draws. The two histograms are the
|
|
163
|
+
* ones the issue was filed against; the three chart-library charts are the
|
|
164
|
+
* ones the reporter meant by "it happens around all the graphs".
|
|
165
|
+
*/
|
|
166
|
+
const CHARTS: Array<ChartUnderTest> = [
|
|
167
|
+
{
|
|
168
|
+
name: "LineChart",
|
|
169
|
+
render: (): React.ReactElement => {
|
|
170
|
+
return (
|
|
171
|
+
<LineChartElement
|
|
172
|
+
data={buildSeries()}
|
|
173
|
+
xAxis={X_AXIS}
|
|
174
|
+
yAxis={Y_AXIS}
|
|
175
|
+
curve={ChartCurve.MONOTONE}
|
|
176
|
+
heightInPx={400}
|
|
177
|
+
sync={false}
|
|
178
|
+
syncid="focus-ring-test"
|
|
179
|
+
showLegend={true}
|
|
180
|
+
timeReferenceLines={TIME_REFERENCE_LINES}
|
|
181
|
+
referenceRegions={REFERENCE_REGIONS}
|
|
182
|
+
/>
|
|
183
|
+
);
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: "AreaChart",
|
|
188
|
+
render: (): React.ReactElement => {
|
|
189
|
+
return (
|
|
190
|
+
<AreaChartElement
|
|
191
|
+
data={buildSeries()}
|
|
192
|
+
xAxis={X_AXIS}
|
|
193
|
+
yAxis={Y_AXIS}
|
|
194
|
+
curve={ChartCurve.MONOTONE}
|
|
195
|
+
heightInPx={400}
|
|
196
|
+
sync={false}
|
|
197
|
+
syncid="focus-ring-test"
|
|
198
|
+
showLegend={true}
|
|
199
|
+
timeReferenceLines={TIME_REFERENCE_LINES}
|
|
200
|
+
referenceRegions={REFERENCE_REGIONS}
|
|
201
|
+
/>
|
|
202
|
+
);
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
name: "BarChart",
|
|
207
|
+
render: (): React.ReactElement => {
|
|
208
|
+
return (
|
|
209
|
+
<BarChartElement
|
|
210
|
+
data={buildSeries()}
|
|
211
|
+
xAxis={X_AXIS}
|
|
212
|
+
yAxis={Y_AXIS}
|
|
213
|
+
heightInPx={400}
|
|
214
|
+
sync={false}
|
|
215
|
+
syncid="focus-ring-test"
|
|
216
|
+
showLegend={true}
|
|
217
|
+
timeReferenceLines={TIME_REFERENCE_LINES}
|
|
218
|
+
referenceRegions={REFERENCE_REGIONS}
|
|
219
|
+
/>
|
|
220
|
+
);
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
name: "LogsHistogram",
|
|
225
|
+
render: (): React.ReactElement => {
|
|
226
|
+
return (
|
|
227
|
+
<LogsHistogram
|
|
228
|
+
buckets={logsBuckets()}
|
|
229
|
+
isLoading={false}
|
|
230
|
+
onTimeRangeSelect={(): void => {}}
|
|
231
|
+
/>
|
|
232
|
+
);
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
name: "TelemetryHistogram",
|
|
237
|
+
render: (): React.ReactElement => {
|
|
238
|
+
return (
|
|
239
|
+
<TelemetryHistogram
|
|
240
|
+
buckets={telemetryBuckets()}
|
|
241
|
+
isLoading={false}
|
|
242
|
+
series={TELEMETRY_SERIES}
|
|
243
|
+
title="Traces over time"
|
|
244
|
+
onTimeRangeSelect={(): void => {}}
|
|
245
|
+
/>
|
|
246
|
+
);
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
];
|
|
250
|
+
|
|
251
|
+
/** The selectors Theme.css uses to take the user-agent ring off a chart. */
|
|
252
|
+
const NEUTRALIZING_SELECTORS: Array<string> = selectorsDeclaring(
|
|
253
|
+
"outline",
|
|
254
|
+
"none",
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
function surfacesIn(container: HTMLElement): Array<SVGSVGElement> {
|
|
258
|
+
return Array.from(
|
|
259
|
+
container.querySelectorAll("svg.recharts-surface"),
|
|
260
|
+
) as Array<SVGSVGElement>;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/*
|
|
264
|
+
* Everything inside a plot that the browser can put focus on -- the surface
|
|
265
|
+
* itself plus any tabindex-carrying shape drawn into it. These are exactly
|
|
266
|
+
* the elements Chrome's SVG user-agent stylesheet would ring.
|
|
267
|
+
*/
|
|
268
|
+
function focusableChartElements(container: HTMLElement): Array<Element> {
|
|
269
|
+
const focusable: Array<Element> = [];
|
|
270
|
+
|
|
271
|
+
for (const surface of surfacesIn(container)) {
|
|
272
|
+
if (surface.hasAttribute("tabindex")) {
|
|
273
|
+
focusable.push(surface);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
focusable.push(...Array.from(surface.querySelectorAll("[tabindex]")));
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
return focusable;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
function describeElement(element: Element): string {
|
|
283
|
+
const testId: string | null = element.getAttribute("data-testid");
|
|
284
|
+
|
|
285
|
+
return [
|
|
286
|
+
element.tagName.toLowerCase(),
|
|
287
|
+
element.getAttribute("class") ? `.${element.getAttribute("class")}` : "",
|
|
288
|
+
testId ? `[data-testid="${testId}"]` : "",
|
|
289
|
+
`[tabindex="${element.getAttribute("tabindex")}"]`,
|
|
290
|
+
].join("");
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
afterEach((): void => {
|
|
294
|
+
cleanup();
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
describe("Chart focus ring coverage", () => {
|
|
298
|
+
test("the stylesheet still silences something", () => {
|
|
299
|
+
expect(NEUTRALIZING_SELECTORS.length).toBeGreaterThan(0);
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
describe.each(
|
|
303
|
+
CHARTS.map((chart: ChartUnderTest): [string, ChartUnderTest] => {
|
|
304
|
+
return [chart.name, chart];
|
|
305
|
+
}),
|
|
306
|
+
)("%s", (_name: string, chart: ChartUnderTest) => {
|
|
307
|
+
/*
|
|
308
|
+
* The premise of the whole fix. If recharts ever renames this class or
|
|
309
|
+
* stops handing the plot a tabindex, the CSS becomes dead weight and the
|
|
310
|
+
* rest of these assertions stop meaning anything -- so it fails here
|
|
311
|
+
* first, where the message says why.
|
|
312
|
+
*/
|
|
313
|
+
test("draws a plot the browser can focus, under the class the fix targets", () => {
|
|
314
|
+
const { container } = render(chart.render());
|
|
315
|
+
const surfaces: Array<SVGSVGElement> = surfacesIn(container);
|
|
316
|
+
|
|
317
|
+
expect(surfaces.length).toBeGreaterThan(0);
|
|
318
|
+
|
|
319
|
+
const focusableSurfaces: Array<SVGSVGElement> = surfaces.filter(
|
|
320
|
+
(surface: SVGSVGElement): boolean => {
|
|
321
|
+
return surface.getAttribute("tabindex") === "0";
|
|
322
|
+
},
|
|
323
|
+
);
|
|
324
|
+
|
|
325
|
+
expect(focusableSurfaces.length).toBeGreaterThan(0);
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
/*
|
|
329
|
+
* The assertion the issue is really about: nothing a pointer can land on
|
|
330
|
+
* inside the plot is left to the user-agent ring.
|
|
331
|
+
*/
|
|
332
|
+
test("no focusable element inside the plot is left to the user-agent ring", () => {
|
|
333
|
+
const { container } = render(chart.render());
|
|
334
|
+
const focusable: Array<Element> = focusableChartElements(container);
|
|
335
|
+
|
|
336
|
+
expect(focusable.length).toBeGreaterThan(0);
|
|
337
|
+
|
|
338
|
+
const uncovered: Array<string> = focusable
|
|
339
|
+
.filter((element: Element): boolean => {
|
|
340
|
+
return !NEUTRALIZING_SELECTORS.some((selector: string): boolean => {
|
|
341
|
+
/*
|
|
342
|
+
* Matched without the pseudo-class: jsdom can say whether the
|
|
343
|
+
* element is the surface or sits inside one, which is the part of
|
|
344
|
+
* the selector that decides coverage. Whether :focus is on is the
|
|
345
|
+
* browser's business, and the harness in the pull request covers
|
|
346
|
+
* that end.
|
|
347
|
+
*/
|
|
348
|
+
return element.matches(selector.replace(/:focus(-visible)?/g, ""));
|
|
349
|
+
});
|
|
350
|
+
})
|
|
351
|
+
.map(describeElement);
|
|
352
|
+
|
|
353
|
+
expect(uncovered).toEqual([]);
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
/*
|
|
358
|
+
* The annotation shapes are focusable by design -- they are buttons a
|
|
359
|
+
* reader clicks -- and they were getting boxed one by one on every click.
|
|
360
|
+
* The descendant half of the selector is the only thing covering them, so
|
|
361
|
+
* this asserts they are really there to be covered rather than letting the
|
|
362
|
+
* loop above pass on a chart that happened to draw none.
|
|
363
|
+
*/
|
|
364
|
+
test("the annotation layer really does put focusable shapes inside the plot", () => {
|
|
365
|
+
const { container } = render(CHARTS[0]!.render());
|
|
366
|
+
|
|
367
|
+
const annotationShapes: Array<Element> = focusableChartElements(
|
|
368
|
+
container,
|
|
369
|
+
).filter((element: Element): boolean => {
|
|
370
|
+
return Boolean(
|
|
371
|
+
element.getAttribute("data-testid")?.startsWith("chart-annotation"),
|
|
372
|
+
);
|
|
373
|
+
});
|
|
374
|
+
|
|
375
|
+
expect(annotationShapes.length).toBeGreaterThan(0);
|
|
376
|
+
});
|
|
377
|
+
});
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* A reader for Common/UI/Styles/Theme.css, shared by the suites that hold the
|
|
6
|
+
* stylesheet to a contract.
|
|
7
|
+
*
|
|
8
|
+
* jsdom's CSS engine is not used for this on purpose. Theme.css is written for
|
|
9
|
+
* a real browser -- :is(), color-mix(), space-separated rgb() with a percent
|
|
10
|
+
* alpha -- and jsdom's parser drops what it cannot model, silently, which
|
|
11
|
+
* would turn a missing rule and an unparsed one into the same green test.
|
|
12
|
+
* Reading the file directly keeps a failure meaning what it says.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
const THEME_STYLESHEET_PATH: string = path.resolve(
|
|
16
|
+
__dirname,
|
|
17
|
+
"..",
|
|
18
|
+
"..",
|
|
19
|
+
"..",
|
|
20
|
+
"UI",
|
|
21
|
+
"Styles",
|
|
22
|
+
"Theme.css",
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
export interface StyleRule {
|
|
26
|
+
/** Normalised, one entry per comma-separated selector in the prelude. */
|
|
27
|
+
selectors: Array<string>;
|
|
28
|
+
declarations: Record<string, string>;
|
|
29
|
+
/** Source order, which decides the winner between equal specificities. */
|
|
30
|
+
index: number;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function normalizeWhitespace(value: string): string {
|
|
34
|
+
return value.replace(/\s+/g, " ").trim();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function parseDeclarations(body: string): Record<string, string> {
|
|
38
|
+
const declarations: Record<string, string> = {};
|
|
39
|
+
|
|
40
|
+
for (const declaration of body.split(";")) {
|
|
41
|
+
const separatorAt: number = declaration.indexOf(":");
|
|
42
|
+
|
|
43
|
+
if (separatorAt === -1) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const property: string = normalizeWhitespace(
|
|
48
|
+
declaration.slice(0, separatorAt),
|
|
49
|
+
);
|
|
50
|
+
const value: string = normalizeWhitespace(
|
|
51
|
+
declaration.slice(separatorAt + 1),
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
if (property) {
|
|
55
|
+
declarations[property] = value;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return declarations;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/*
|
|
63
|
+
* Only top-level rules are collected. Everything asserted against this lives
|
|
64
|
+
* at the top level of the sheet; at-rules (@media, @keyframes) are skipped
|
|
65
|
+
* whole so their inner blocks cannot be mistaken for one.
|
|
66
|
+
*/
|
|
67
|
+
export function parseTopLevelRules(css: string): Array<StyleRule> {
|
|
68
|
+
const withoutComments: string = css.replace(/\/\*[\s\S]*?\*\//g, "");
|
|
69
|
+
const rules: Array<StyleRule> = [];
|
|
70
|
+
|
|
71
|
+
let prelude: string = "";
|
|
72
|
+
let body: string = "";
|
|
73
|
+
let depth: number = 0;
|
|
74
|
+
|
|
75
|
+
for (const character of withoutComments) {
|
|
76
|
+
if (character === "{") {
|
|
77
|
+
depth++;
|
|
78
|
+
|
|
79
|
+
if (depth === 1) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (character === "}") {
|
|
85
|
+
depth--;
|
|
86
|
+
|
|
87
|
+
if (depth === 0) {
|
|
88
|
+
const selectorText: string = normalizeWhitespace(prelude);
|
|
89
|
+
|
|
90
|
+
if (selectorText && !selectorText.startsWith("@")) {
|
|
91
|
+
rules.push({
|
|
92
|
+
selectors: selectorText.split(",").map(normalizeWhitespace),
|
|
93
|
+
declarations: parseDeclarations(body),
|
|
94
|
+
index: rules.length,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
prelude = "";
|
|
99
|
+
body = "";
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (depth === 0) {
|
|
105
|
+
prelude += character;
|
|
106
|
+
} else {
|
|
107
|
+
body += character;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return rules;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export const THEME_RULES: Array<StyleRule> = parseTopLevelRules(
|
|
115
|
+
fs.readFileSync(THEME_STYLESHEET_PATH, "utf8"),
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
export function rulesFor(selector: string): Array<StyleRule> {
|
|
119
|
+
return THEME_RULES.filter((rule: StyleRule): boolean => {
|
|
120
|
+
return rule.selectors.includes(selector);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/*
|
|
125
|
+
* The last declaration wins. Every rule these suites reach for carries no
|
|
126
|
+
* !important and no specificity beyond one class plus one pseudo-class, so
|
|
127
|
+
* source order is the whole tiebreak.
|
|
128
|
+
*/
|
|
129
|
+
export function declaredValue(
|
|
130
|
+
selector: string,
|
|
131
|
+
property: string,
|
|
132
|
+
): string | undefined {
|
|
133
|
+
const matching: Array<StyleRule> = rulesFor(selector).filter(
|
|
134
|
+
(rule: StyleRule): boolean => {
|
|
135
|
+
return rule.declarations[property] !== undefined;
|
|
136
|
+
},
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
return matching[matching.length - 1]?.declarations[property];
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Every selector in the sheet that gives `property` exactly `value` -- the way
|
|
144
|
+
* a suite asks the shipped stylesheet what it actually covers, rather than
|
|
145
|
+
* restating the answer as a literal and testing itself.
|
|
146
|
+
*/
|
|
147
|
+
export function selectorsDeclaring(
|
|
148
|
+
property: string,
|
|
149
|
+
value: string,
|
|
150
|
+
): Array<string> {
|
|
151
|
+
const selectors: Array<string> = [];
|
|
152
|
+
|
|
153
|
+
for (const rule of THEME_RULES) {
|
|
154
|
+
if (rule.declarations[property] !== value) {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
selectors.push(...rule.selectors);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
return selectors;
|
|
162
|
+
}
|