@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,417 @@
|
|
|
1
|
+
import { describe, expect, test } from "@jest/globals";
|
|
2
|
+
import {
|
|
3
|
+
NetworkTopologyDeviceRole,
|
|
4
|
+
NetworkTopologyNode,
|
|
5
|
+
NetworkTopologyNodeShape,
|
|
6
|
+
} from "../../../Types/Monitor/SnmpMonitor/NetworkTopology";
|
|
7
|
+
import DEFAULT_NETWORK_DEVICE_ROLES, {
|
|
8
|
+
DefaultNetworkDeviceRole,
|
|
9
|
+
} from "../../../Types/NetworkDevice/DefaultNetworkDeviceRole";
|
|
10
|
+
import {
|
|
11
|
+
DEVICE_ROLES_IN_LEGEND_ORDER,
|
|
12
|
+
DEVICE_ROLE_LABELS,
|
|
13
|
+
} from "../../../Utils/Monitor/NetworkDeviceRoleUtil";
|
|
14
|
+
import { shapeForNode } from "../../../../App/FeatureSet/Dashboard/src/Components/NetworkDevice/TopologyNodeShape";
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
* DEFAULT_NETWORK_DEVICE_ROLES is what every project starts life with, and
|
|
18
|
+
* the promise it makes is a conservative one: a project seeded from it must
|
|
19
|
+
* behave EXACTLY as the product behaved when roles were a hardcoded union.
|
|
20
|
+
* Same eleven roles, same labels, same silhouettes, same tiering, same
|
|
21
|
+
* SNMP-versus-monitor default.
|
|
22
|
+
*
|
|
23
|
+
* That promise is only checkable by comparing the seed list against the three
|
|
24
|
+
* modules it replaced — the labels in NetworkDeviceRoleUtil, the SHAPE_BY_ROLE
|
|
25
|
+
* map in the renderer, the CORE_DEVICE_ROLES set in the layout and the
|
|
26
|
+
* MONITOR_BACKED_ROLES set in the adopt flow. So that is what these tests do:
|
|
27
|
+
* every one of them is a cross-check against the old source of truth, not a
|
|
28
|
+
* restatement of the new one.
|
|
29
|
+
*
|
|
30
|
+
* The shape check imports the renderer directly (SHAPE_BY_ROLE itself is not
|
|
31
|
+
* exported, but shapeForNode is, and it is the function the map actually
|
|
32
|
+
* calls). Common's jest maps "Common/*" back to this package and several
|
|
33
|
+
* Common tests already import App/FeatureSet/Dashboard sources this way, so a
|
|
34
|
+
* genuine comparison is available and is worth far more than a second copy of
|
|
35
|
+
* the table. The literal table below is kept anyway, so a reader can see the
|
|
36
|
+
* eleven answers without following the import.
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
type MakeDeviceNodeFunction = (
|
|
40
|
+
role: NetworkTopologyDeviceRole,
|
|
41
|
+
) => NetworkTopologyNode;
|
|
42
|
+
|
|
43
|
+
/*
|
|
44
|
+
* A node as an OLD payload carried it: the classified role and nothing else.
|
|
45
|
+
* Deliberately no roleShape — that is the per-project stamp, and stamping it
|
|
46
|
+
* would make shapeForNode echo the value back instead of consulting the
|
|
47
|
+
* built-in map this test is comparing against.
|
|
48
|
+
*/
|
|
49
|
+
const makeDeviceNode: MakeDeviceNodeFunction = (
|
|
50
|
+
role: NetworkTopologyDeviceRole,
|
|
51
|
+
): NetworkTopologyNode => {
|
|
52
|
+
return {
|
|
53
|
+
id: `device-${role}`,
|
|
54
|
+
name: role,
|
|
55
|
+
isManaged: true,
|
|
56
|
+
status: "up",
|
|
57
|
+
kind: "device",
|
|
58
|
+
role: role,
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
describe("DEFAULT_NETWORK_DEVICE_ROLES — what a fresh project is given", () => {
|
|
63
|
+
test("seeds exactly eleven roles", () => {
|
|
64
|
+
expect(DEFAULT_NETWORK_DEVICE_ROLES).toHaveLength(11);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
/*
|
|
68
|
+
* "unknown" is the classifier saying it has no answer, not a job a box
|
|
69
|
+
* does. Offering it as a row an operator could assign would turn "I don't
|
|
70
|
+
* know yet" into "never classify this device again", which is a different
|
|
71
|
+
* and much worse statement.
|
|
72
|
+
*/
|
|
73
|
+
test("does not seed 'unknown', which is an absence of an answer rather than a role", () => {
|
|
74
|
+
const keys: Array<string> = DEFAULT_NETWORK_DEVICE_ROLES.map(
|
|
75
|
+
(role: DefaultNetworkDeviceRole): string => {
|
|
76
|
+
return role.key;
|
|
77
|
+
},
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
expect(keys).not.toContain("unknown");
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test("every key is one of the built-in roles the SNMP classifier can return", () => {
|
|
84
|
+
/*
|
|
85
|
+
* The classifier is evidence-driven and speaks the fixed union; it cannot
|
|
86
|
+
* invent a project's custom role. A seeded key outside that union would be
|
|
87
|
+
* a row nothing could ever match.
|
|
88
|
+
*/
|
|
89
|
+
for (const role of DEFAULT_NETWORK_DEVICE_ROLES) {
|
|
90
|
+
expect(DEVICE_ROLES_IN_LEGEND_ORDER).toContain(role.key);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
describe("DEFAULT_NETWORK_DEVICE_ROLES — order", () => {
|
|
96
|
+
/*
|
|
97
|
+
* The seeded `order` column is this array's index, and the legend reads in
|
|
98
|
+
* DEVICE_ROLES_IN_LEGEND_ORDER. If the two ever diverge, a fresh project's
|
|
99
|
+
* settings page and its map legend list the same eleven roles in two
|
|
100
|
+
* different sequences — the sort of inconsistency nobody files a bug for and
|
|
101
|
+
* everybody trips over.
|
|
102
|
+
*/
|
|
103
|
+
test("the keys are DEVICE_ROLES_IN_LEGEND_ORDER, in that exact order", () => {
|
|
104
|
+
const keys: Array<NetworkTopologyDeviceRole> =
|
|
105
|
+
DEFAULT_NETWORK_DEVICE_ROLES.map(
|
|
106
|
+
(role: DefaultNetworkDeviceRole): NetworkTopologyDeviceRole => {
|
|
107
|
+
return role.key;
|
|
108
|
+
},
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
expect(keys).toEqual(Array.from(DEVICE_ROLES_IN_LEGEND_ORDER));
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
test("the two lists are the same SET as well as the same sequence", () => {
|
|
115
|
+
// Guards the case where both lists are edited but only one is reordered.
|
|
116
|
+
const seeded: Set<string> = new Set<string>(
|
|
117
|
+
DEFAULT_NETWORK_DEVICE_ROLES.map(
|
|
118
|
+
(role: DefaultNetworkDeviceRole): string => {
|
|
119
|
+
return role.key;
|
|
120
|
+
},
|
|
121
|
+
),
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
expect(seeded.size).toBe(DEVICE_ROLES_IN_LEGEND_ORDER.length);
|
|
125
|
+
for (const key of DEVICE_ROLES_IN_LEGEND_ORDER) {
|
|
126
|
+
expect(seeded.has(key)).toBe(true);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
describe("DEFAULT_NETWORK_DEVICE_ROLES — names reproduce the built-in labels", () => {
|
|
132
|
+
/*
|
|
133
|
+
* The name is what the legend, the detail panel and the accessible label
|
|
134
|
+
* show once a project is seeded, because the topology builder stamps the
|
|
135
|
+
* configured label onto every node. If a seeded name drifted from
|
|
136
|
+
* DEVICE_ROLE_LABELS, a freshly created project's map would be relabelled
|
|
137
|
+
* relative to an old one for no reason the operator asked for.
|
|
138
|
+
*/
|
|
139
|
+
test("every default's name is the built-in label for its key", () => {
|
|
140
|
+
for (const role of DEFAULT_NETWORK_DEVICE_ROLES) {
|
|
141
|
+
expect(role.name).toBe(DEVICE_ROLE_LABELS[role.key]);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
test("the eleven names are exactly the eleven non-unknown labels", () => {
|
|
146
|
+
const names: Array<string> = DEFAULT_NETWORK_DEVICE_ROLES.map(
|
|
147
|
+
(role: DefaultNetworkDeviceRole): string => {
|
|
148
|
+
return role.name;
|
|
149
|
+
},
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
expect(names).toEqual([
|
|
153
|
+
"Router",
|
|
154
|
+
"Switch",
|
|
155
|
+
"Firewall",
|
|
156
|
+
"Wireless AP",
|
|
157
|
+
"Load balancer",
|
|
158
|
+
"Server",
|
|
159
|
+
"Storage",
|
|
160
|
+
"Printer",
|
|
161
|
+
"Camera",
|
|
162
|
+
"IP phone",
|
|
163
|
+
"Host",
|
|
164
|
+
]);
|
|
165
|
+
expect(names).not.toContain(DEVICE_ROLE_LABELS.unknown);
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
describe("DEFAULT_NETWORK_DEVICE_ROLES — shapes reproduce the renderer's map", () => {
|
|
170
|
+
/*
|
|
171
|
+
* Mirrors the renderer's private SHAPE_BY_ROLE. Written out so the eleven
|
|
172
|
+
* silhouettes are readable here; the test below is the one that proves they
|
|
173
|
+
* still agree with the renderer.
|
|
174
|
+
*/
|
|
175
|
+
const EXPECTED_SHAPE_BY_KEY: Readonly<
|
|
176
|
+
Record<string, NetworkTopologyNodeShape>
|
|
177
|
+
> = {
|
|
178
|
+
router: "circle",
|
|
179
|
+
switch: "rounded-square",
|
|
180
|
+
firewall: "diamond",
|
|
181
|
+
wirelessAccessPoint: "triangle",
|
|
182
|
+
loadBalancer: "hexagon",
|
|
183
|
+
server: "tower",
|
|
184
|
+
storage: "cylinder",
|
|
185
|
+
// The four leaf roles deliberately share the endpoint rect.
|
|
186
|
+
printer: "rect",
|
|
187
|
+
camera: "rect",
|
|
188
|
+
phone: "rect",
|
|
189
|
+
host: "rect",
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
test("every default's topologyShape is what the renderer would draw for that role", () => {
|
|
193
|
+
/*
|
|
194
|
+
* The real cross-check, and the regression this whole file exists to
|
|
195
|
+
* prevent: a project seeded from these defaults must draw the map it drew
|
|
196
|
+
* before roles were configurable. shapeForNode on a node carrying only a
|
|
197
|
+
* classified role is exactly the pre-feature code path.
|
|
198
|
+
*/
|
|
199
|
+
for (const role of DEFAULT_NETWORK_DEVICE_ROLES) {
|
|
200
|
+
expect(role.topologyShape).toBe(shapeForNode(makeDeviceNode(role.key)));
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
test("and it is the silhouette the table above names", () => {
|
|
205
|
+
for (const role of DEFAULT_NETWORK_DEVICE_ROLES) {
|
|
206
|
+
expect(role.topologyShape).toBe(EXPECTED_SHAPE_BY_KEY[role.key]);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
test("the seven infrastructure roles are seven distinct silhouettes", () => {
|
|
211
|
+
// A map on which a router, a switch and a firewall look alike is unreadable.
|
|
212
|
+
const infrastructureShapes: Array<NetworkTopologyNodeShape> =
|
|
213
|
+
DEFAULT_NETWORK_DEVICE_ROLES.filter(
|
|
214
|
+
(role: DefaultNetworkDeviceRole): boolean => {
|
|
215
|
+
return role.topologyShape !== "rect";
|
|
216
|
+
},
|
|
217
|
+
).map((role: DefaultNetworkDeviceRole): NetworkTopologyNodeShape => {
|
|
218
|
+
return role.topologyShape;
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
expect(infrastructureShapes).toHaveLength(7);
|
|
222
|
+
expect(new Set<string>(infrastructureShapes).size).toBe(7);
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
test("every seeded shape is one the renderer has geometry for", () => {
|
|
226
|
+
/*
|
|
227
|
+
* topologyShape is a free-text column and the catalogue drops any value
|
|
228
|
+
* the renderer cannot draw. A seeded value it dropped would leave the
|
|
229
|
+
* node falling back to a circle, silently.
|
|
230
|
+
*/
|
|
231
|
+
const drawableShapes: ReadonlyArray<NetworkTopologyNodeShape> = [
|
|
232
|
+
"circle",
|
|
233
|
+
"rounded-square",
|
|
234
|
+
"diamond",
|
|
235
|
+
"triangle",
|
|
236
|
+
"hexagon",
|
|
237
|
+
"tower",
|
|
238
|
+
"cylinder",
|
|
239
|
+
"rect",
|
|
240
|
+
];
|
|
241
|
+
|
|
242
|
+
for (const role of DEFAULT_NETWORK_DEVICE_ROLES) {
|
|
243
|
+
expect(drawableShapes).toContain(role.topologyShape);
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
describe("DEFAULT_NETWORK_DEVICE_ROLES — isCoreLayer reproduces CORE_DEVICE_ROLES", () => {
|
|
249
|
+
/*
|
|
250
|
+
* Mirrors the private CORE_DEVICE_ROLES set in TopologyLayout. Note what is
|
|
251
|
+
* NOT in it: "switch". A switch is infrastructure, but it hangs off a
|
|
252
|
+
* router, and the top tier is for the devices that hang off nothing.
|
|
253
|
+
*
|
|
254
|
+
* tierForNode now reads node.isCoreLayerRole BEFORE node.role, so these
|
|
255
|
+
* eleven booleans are what decides the tier on every seeded project. Get one
|
|
256
|
+
* wrong and the parent-child tree roots itself on the wrong device.
|
|
257
|
+
*/
|
|
258
|
+
const CORE_KEYS: ReadonlyArray<string> = [
|
|
259
|
+
"router",
|
|
260
|
+
"firewall",
|
|
261
|
+
"loadBalancer",
|
|
262
|
+
];
|
|
263
|
+
|
|
264
|
+
test("exactly router, firewall and load balancer sit at the core", () => {
|
|
265
|
+
const coreKeys: Array<string> = DEFAULT_NETWORK_DEVICE_ROLES.filter(
|
|
266
|
+
(role: DefaultNetworkDeviceRole): boolean => {
|
|
267
|
+
return role.isCoreLayer;
|
|
268
|
+
},
|
|
269
|
+
).map((role: DefaultNetworkDeviceRole): string => {
|
|
270
|
+
return role.key;
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
expect(coreKeys).toEqual(CORE_KEYS);
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
test("every other default is explicitly not core, never left undefined", () => {
|
|
277
|
+
/*
|
|
278
|
+
* The flag has to be a real boolean on every row: tierForNode branches on
|
|
279
|
+
* `isCoreLayerRole !== undefined`, so an absent value would silently hand
|
|
280
|
+
* the decision back to the FDB heuristic the role was meant to overrule.
|
|
281
|
+
*/
|
|
282
|
+
for (const role of DEFAULT_NETWORK_DEVICE_ROLES) {
|
|
283
|
+
expect(typeof role.isCoreLayer).toBe("boolean");
|
|
284
|
+
expect(role.isCoreLayer).toBe(CORE_KEYS.includes(role.key));
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
test("a switch is not core, and neither is an access point", () => {
|
|
289
|
+
// Called out because both are tempting to promote and both would be wrong.
|
|
290
|
+
const byKey: Map<string, DefaultNetworkDeviceRole> = new Map<
|
|
291
|
+
string,
|
|
292
|
+
DefaultNetworkDeviceRole
|
|
293
|
+
>(
|
|
294
|
+
DEFAULT_NETWORK_DEVICE_ROLES.map(
|
|
295
|
+
(
|
|
296
|
+
role: DefaultNetworkDeviceRole,
|
|
297
|
+
): [string, DefaultNetworkDeviceRole] => {
|
|
298
|
+
return [role.key, role];
|
|
299
|
+
},
|
|
300
|
+
),
|
|
301
|
+
);
|
|
302
|
+
|
|
303
|
+
expect(byKey.get("switch")?.isCoreLayer).toBe(false);
|
|
304
|
+
expect(byKey.get("wirelessAccessPoint")?.isCoreLayer).toBe(false);
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
describe("DEFAULT_NETWORK_DEVICE_ROLES — isSnmpWalkable reproduces MONITOR_BACKED_ROLES", () => {
|
|
309
|
+
/*
|
|
310
|
+
* Mirrors the private MONITOR_BACKED_ROLES set in AdoptNeighborUtil, which
|
|
311
|
+
* lists the roles that are never SNMP-walkable in practice. Adopting a
|
|
312
|
+
* neighbour with one of them defaults the new device to a monitor rather
|
|
313
|
+
* than to SNMP — defaulting a desk phone to SNMP would queue a walk it can
|
|
314
|
+
* only fail and leave the operator reading "pending" forever.
|
|
315
|
+
*
|
|
316
|
+
* Everything else, including an unclassified peer, defaults to SNMP: an
|
|
317
|
+
* unidentified box on a switch uplink is far more often a switch nobody has
|
|
318
|
+
* added yet than it is a kiosk.
|
|
319
|
+
*/
|
|
320
|
+
const MONITOR_BACKED_KEYS: ReadonlyArray<string> = [
|
|
321
|
+
"printer",
|
|
322
|
+
"camera",
|
|
323
|
+
"phone",
|
|
324
|
+
"host",
|
|
325
|
+
];
|
|
326
|
+
|
|
327
|
+
test("exactly printer, camera, phone and host are not walkable", () => {
|
|
328
|
+
const notWalkable: Array<string> = DEFAULT_NETWORK_DEVICE_ROLES.filter(
|
|
329
|
+
(role: DefaultNetworkDeviceRole): boolean => {
|
|
330
|
+
return !role.isSnmpWalkable;
|
|
331
|
+
},
|
|
332
|
+
).map((role: DefaultNetworkDeviceRole): string => {
|
|
333
|
+
return role.key;
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
expect(notWalkable).toEqual(MONITOR_BACKED_KEYS);
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
test("every other default is walkable, and the flag is always a real boolean", () => {
|
|
340
|
+
/*
|
|
341
|
+
* buildNeighborAdoptionDraft branches on
|
|
342
|
+
* `isSnmpWalkableRole !== undefined`, so an absent value falls back to the
|
|
343
|
+
* built-in set rather than being read as "not walkable".
|
|
344
|
+
*/
|
|
345
|
+
for (const role of DEFAULT_NETWORK_DEVICE_ROLES) {
|
|
346
|
+
expect(typeof role.isSnmpWalkable).toBe("boolean");
|
|
347
|
+
expect(role.isSnmpWalkable).toBe(!MONITOR_BACKED_KEYS.includes(role.key));
|
|
348
|
+
}
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
test("the four non-walkable roles are exactly the four drawn as a leaf rect", () => {
|
|
352
|
+
/*
|
|
353
|
+
* Not a coincidence worth breaking: "something plugged into an access
|
|
354
|
+
* port" is the same set of boxes as "nothing worth walking". If the two
|
|
355
|
+
* ever diverge, one of the two lists was edited without the other.
|
|
356
|
+
*/
|
|
357
|
+
const rectKeys: Array<string> = DEFAULT_NETWORK_DEVICE_ROLES.filter(
|
|
358
|
+
(role: DefaultNetworkDeviceRole): boolean => {
|
|
359
|
+
return role.topologyShape === "rect";
|
|
360
|
+
},
|
|
361
|
+
).map((role: DefaultNetworkDeviceRole): string => {
|
|
362
|
+
return role.key;
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
expect(rectKeys).toEqual(MONITOR_BACKED_KEYS);
|
|
366
|
+
});
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
describe("DEFAULT_NETWORK_DEVICE_ROLES — the rows are storable as they stand", () => {
|
|
370
|
+
test("keys are unique", () => {
|
|
371
|
+
// The column is unique per project; a duplicate would fail the seed.
|
|
372
|
+
const keys: Array<string> = DEFAULT_NETWORK_DEVICE_ROLES.map(
|
|
373
|
+
(role: DefaultNetworkDeviceRole): string => {
|
|
374
|
+
return role.key;
|
|
375
|
+
},
|
|
376
|
+
);
|
|
377
|
+
|
|
378
|
+
expect(new Set<string>(keys).size).toBe(keys.length);
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
test("names are unique", () => {
|
|
382
|
+
/*
|
|
383
|
+
* Also a unique column, and the seeder skips a default whose NAME already
|
|
384
|
+
* exists — two defaults sharing a name would silently seed only one.
|
|
385
|
+
*/
|
|
386
|
+
const names: Array<string> = DEFAULT_NETWORK_DEVICE_ROLES.map(
|
|
387
|
+
(role: DefaultNetworkDeviceRole): string => {
|
|
388
|
+
return role.name;
|
|
389
|
+
},
|
|
390
|
+
);
|
|
391
|
+
|
|
392
|
+
expect(new Set<string>(names).size).toBe(names.length);
|
|
393
|
+
});
|
|
394
|
+
|
|
395
|
+
test("every default has a name and a description a human can read", () => {
|
|
396
|
+
/*
|
|
397
|
+
* The description is the only explanation the settings page offers for
|
|
398
|
+
* what a role means, and a blank one there reads as a broken page.
|
|
399
|
+
*/
|
|
400
|
+
for (const role of DEFAULT_NETWORK_DEVICE_ROLES) {
|
|
401
|
+
expect(role.name.trim()).not.toBe("");
|
|
402
|
+
expect(role.name).toBe(role.name.trim());
|
|
403
|
+
expect(role.description.trim()).not.toBe("");
|
|
404
|
+
expect(role.description.length).toBeGreaterThan(10);
|
|
405
|
+
}
|
|
406
|
+
});
|
|
407
|
+
|
|
408
|
+
test("descriptions are distinct, so no two roles explain themselves the same way", () => {
|
|
409
|
+
const descriptions: Array<string> = DEFAULT_NETWORK_DEVICE_ROLES.map(
|
|
410
|
+
(role: DefaultNetworkDeviceRole): string => {
|
|
411
|
+
return role.description;
|
|
412
|
+
},
|
|
413
|
+
);
|
|
414
|
+
|
|
415
|
+
expect(new Set<string>(descriptions).size).toBe(descriptions.length);
|
|
416
|
+
});
|
|
417
|
+
});
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import Permission, {
|
|
2
|
+
PermissionGroup,
|
|
3
|
+
PermissionHelper,
|
|
4
|
+
PermissionProps,
|
|
5
|
+
} from "../../Types/Permission";
|
|
6
|
+
import { describe, expect, test } from "@jest/globals";
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
* The Security role family.
|
|
10
|
+
*
|
|
11
|
+
* Security events, the Sigma rules written over them, the threat-intel feeds
|
|
12
|
+
* and the SecOps connector shipped reading through the Telemetry tiers, because
|
|
13
|
+
* they arrived beside logs and traces in ClickHouse. That made one grant out of
|
|
14
|
+
* two decisions: "may read every log in the project" and "may read the SIEM"
|
|
15
|
+
* were the same checkbox, and there was no way to give somebody the first
|
|
16
|
+
* without the second, or the second without making them a project admin.
|
|
17
|
+
*
|
|
18
|
+
* These tests are about the catalogue half of the split - that the three tiers
|
|
19
|
+
* exist, are grantable, and are shaped like every other domain family so the
|
|
20
|
+
* team permission picker renders them without knowing anything about security.
|
|
21
|
+
* SecurityDomainAccessControl.test.ts covers what they actually unlock, and
|
|
22
|
+
* SecurityRoleAccess.test.ts covers what they deny.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
type TierName = "Admin" | "Member" | "Viewer";
|
|
26
|
+
|
|
27
|
+
const SECURITY_TIERS: Array<[TierName, Permission]> = [
|
|
28
|
+
["Admin", Permission.SecurityAdmin],
|
|
29
|
+
["Member", Permission.SecurityMember],
|
|
30
|
+
["Viewer", Permission.SecurityViewer],
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
type PropsForFunction = (permission: Permission) => PermissionProps | undefined;
|
|
34
|
+
|
|
35
|
+
const propsFor: PropsForFunction = (
|
|
36
|
+
permission: Permission,
|
|
37
|
+
): PermissionProps | undefined => {
|
|
38
|
+
return PermissionHelper.getAllPermissionProps().find(
|
|
39
|
+
(candidate: PermissionProps) => {
|
|
40
|
+
return candidate.permission === permission;
|
|
41
|
+
},
|
|
42
|
+
);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
describe("Security role family", () => {
|
|
46
|
+
test.each(SECURITY_TIERS)(
|
|
47
|
+
"Security%s exists in the catalogue",
|
|
48
|
+
(_tier: TierName, permission: Permission) => {
|
|
49
|
+
expect(propsFor(permission)).toBeDefined();
|
|
50
|
+
},
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
test.each(SECURITY_TIERS)(
|
|
54
|
+
"Security%s is a role, not a granular permission",
|
|
55
|
+
(_tier: TierName, permission: Permission) => {
|
|
56
|
+
const props: PermissionProps = propsFor(permission) as PermissionProps;
|
|
57
|
+
|
|
58
|
+
expect(props.isRolePermission).toBe(true);
|
|
59
|
+
expect(props.isAccessControlPermission).toBe(false);
|
|
60
|
+
},
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
/*
|
|
64
|
+
* A role nobody can be given is decoration. isAssignableToTenant is what puts
|
|
65
|
+
* it in front of an administrator in Settings -> Teams -> Permissions; without
|
|
66
|
+
* it the split would exist in the model layer and be unreachable from the UI.
|
|
67
|
+
*/
|
|
68
|
+
test.each(SECURITY_TIERS)(
|
|
69
|
+
"Security%s can actually be granted to a team",
|
|
70
|
+
(_tier: TierName, permission: Permission) => {
|
|
71
|
+
const props: PermissionProps = propsFor(permission) as PermissionProps;
|
|
72
|
+
|
|
73
|
+
expect(props.isAssignableToTenant).toBe(true);
|
|
74
|
+
expect(
|
|
75
|
+
PermissionHelper.getTenantPermissionProps().map(
|
|
76
|
+
(candidate: PermissionProps) => {
|
|
77
|
+
return candidate.permission;
|
|
78
|
+
},
|
|
79
|
+
),
|
|
80
|
+
).toContain(permission);
|
|
81
|
+
},
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
test.each(SECURITY_TIERS)(
|
|
85
|
+
"Security%s is filed under the Security group",
|
|
86
|
+
(_tier: TierName, permission: Permission) => {
|
|
87
|
+
expect((propsFor(permission) as PermissionProps).group).toBe(
|
|
88
|
+
PermissionGroup.Security,
|
|
89
|
+
);
|
|
90
|
+
},
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
/*
|
|
94
|
+
* The picker renders props.title and props.description verbatim. An empty one
|
|
95
|
+
* is a blank card an administrator has to guess at.
|
|
96
|
+
*/
|
|
97
|
+
test.each(SECURITY_TIERS)(
|
|
98
|
+
"Security%s reads as a role in the picker",
|
|
99
|
+
(tier: TierName, permission: Permission) => {
|
|
100
|
+
const props: PermissionProps = propsFor(permission) as PermissionProps;
|
|
101
|
+
|
|
102
|
+
expect(props.title).toBe(`Security ${tier}`);
|
|
103
|
+
expect(props.description.trim().length).toBeGreaterThan(0);
|
|
104
|
+
expect(PermissionHelper.getTitle(permission)).toBe(`Security ${tier}`);
|
|
105
|
+
expect(PermissionHelper.getDescription(permission).trim().length).toBe(
|
|
106
|
+
props.description.trim().length,
|
|
107
|
+
);
|
|
108
|
+
},
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
test("getRolePermissionProps offers all three tiers", () => {
|
|
112
|
+
const roles: Array<Permission> =
|
|
113
|
+
PermissionHelper.getRolePermissionProps().map(
|
|
114
|
+
(props: PermissionProps) => {
|
|
115
|
+
return props.permission;
|
|
116
|
+
},
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
expect(roles).toContain(Permission.SecurityAdmin);
|
|
120
|
+
expect(roles).toContain(Permission.SecurityMember);
|
|
121
|
+
expect(roles).toContain(Permission.SecurityViewer);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
/*
|
|
125
|
+
* Every other domain in the product is Admin/Member/Viewer, and the dashboard
|
|
126
|
+
* groups roles by deriving the family name from the permission string. A
|
|
127
|
+
* family missing a tier - or spelled differently - falls out of that grouping
|
|
128
|
+
* silently. This asserts Security is spelled like its eleven siblings.
|
|
129
|
+
*/
|
|
130
|
+
test("Security is a complete three-tier family like every other domain", () => {
|
|
131
|
+
const roleNames: Set<string> = new Set(
|
|
132
|
+
PermissionHelper.getRolePermissionProps().map(
|
|
133
|
+
(props: PermissionProps) => {
|
|
134
|
+
return props.permission.toString();
|
|
135
|
+
},
|
|
136
|
+
),
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
const families: Array<string> = [
|
|
140
|
+
"Incident",
|
|
141
|
+
"Alert",
|
|
142
|
+
"Monitor",
|
|
143
|
+
"StatusPage",
|
|
144
|
+
"OnCall",
|
|
145
|
+
"ScheduledMaintenance",
|
|
146
|
+
"Telemetry",
|
|
147
|
+
"Settings",
|
|
148
|
+
"Billing",
|
|
149
|
+
"Workflow",
|
|
150
|
+
"Runbook",
|
|
151
|
+
"Security",
|
|
152
|
+
];
|
|
153
|
+
|
|
154
|
+
const incomplete: Array<string> = [];
|
|
155
|
+
|
|
156
|
+
for (const family of families) {
|
|
157
|
+
for (const tier of ["Admin", "Member", "Viewer"]) {
|
|
158
|
+
if (!roleNames.has(`${family}${tier}`)) {
|
|
159
|
+
incomplete.push(`${family}${tier}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
expect(incomplete).toEqual([]);
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
/*
|
|
168
|
+
* The Security tiers are a separate grant from the Telemetry ones - that
|
|
169
|
+
* separation is the entire feature. Aliasing two enum members to one string
|
|
170
|
+
* has happened in this file before (the ScheduledMaintenanceTemplateOwner
|
|
171
|
+
* pair), and it is invisible: granting either would confer both, which here
|
|
172
|
+
* would silently hand the SIEM back to every Telemetry Admin.
|
|
173
|
+
*/
|
|
174
|
+
test("no Security tier is an alias of a Telemetry tier", () => {
|
|
175
|
+
const securityValues: Array<string> = [
|
|
176
|
+
Permission.SecurityAdmin.toString(),
|
|
177
|
+
Permission.SecurityMember.toString(),
|
|
178
|
+
Permission.SecurityViewer.toString(),
|
|
179
|
+
];
|
|
180
|
+
|
|
181
|
+
const telemetryValues: Array<string> = [
|
|
182
|
+
Permission.TelemetryAdmin.toString(),
|
|
183
|
+
Permission.TelemetryMember.toString(),
|
|
184
|
+
Permission.TelemetryViewer.toString(),
|
|
185
|
+
];
|
|
186
|
+
|
|
187
|
+
for (const value of securityValues) {
|
|
188
|
+
expect(telemetryValues).not.toContain(value);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
expect(new Set(securityValues).size).toBe(3);
|
|
192
|
+
});
|
|
193
|
+
});
|