@oneuptime/common 12.0.30 → 12.0.31
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/DetectionRule.ts +16 -5
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +14 -5
- package/Models/DatabaseModels/IncidentSeverity.ts +44 -0
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/NetworkDevice.ts +113 -3
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +88 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +22 -0
- package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +499 -0
- 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/Index.ts +4 -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/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 +2 -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/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/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/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/EventOverlayHook.test.tsx +125 -0
- package/Tests/App/Dashboard/HeaderImageAssets.test.tsx +93 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -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 +469 -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/Middleware/IdentityRateLimit.test.ts +1144 -0
- package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
- 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/RuleEngineRuleFetchLimit.test.ts +239 -0
- package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -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/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/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/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/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/BaseModelTableDeleteAndEmptyStates.test.tsx +341 -0
- package/Tests/UI/Components/OrderedStatesList.test.tsx +5 -5
- package/Tests/UI/Components/PendingProjectInvitations.test.tsx +1 -1
- 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/Utils/EnterpriseLicenseSeats.test.ts +507 -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/Types/Date.ts +39 -0
- package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
- package/Types/Permission.ts +96 -0
- package/Types/Rum/SessionReplay.ts +21 -0
- package/Types/Telemetry/SourceMap.ts +8 -0
- 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 +491 -544
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +324 -372
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +487 -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/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 +150 -24
- package/UI/Components/Table/TableHeader.tsx +64 -48
- package/UI/Components/Table/TableRow.tsx +13 -3
- package/UI/Styles/Theme.css +38 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +271 -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/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/DetectionRule.js +16 -5
- package/build/dist/Models/DatabaseModels/DetectionRule.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/IncidentSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +115 -3
- 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 +519 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -0
- 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/Index.js +4 -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/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 +2 -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/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/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/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/Permission.js +86 -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/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 +213 -233
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +139 -152
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +212 -232
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/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 +104 -23
- package/build/dist/UI/Components/ModelTable/BaseModelTable.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/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +153 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.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/jest.config.json +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
import EditionLabel from "../../../UI/Components/EditionLabel/EditionLabel";
|
|
2
|
+
import HTTPErrorResponse from "../../../Types/API/HTTPErrorResponse";
|
|
3
|
+
import HTTPResponse from "../../../Types/API/HTTPResponse";
|
|
4
|
+
import { JSONObject } from "../../../Types/JSON";
|
|
5
|
+
import "@testing-library/jest-dom";
|
|
6
|
+
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
|
|
7
|
+
import React from "react";
|
|
8
|
+
import { beforeEach, describe, expect, it } from "@jest/globals";
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
* The "Refresh license" button, and who is allowed to see it.
|
|
12
|
+
*
|
|
13
|
+
* The seat limit is set on oneuptime.com and can change on any day. It reaches
|
|
14
|
+
* a self-hosted installation through a job that runs once a day — which was
|
|
15
|
+
* merely slow while nothing acted on the number, and is a real problem now that
|
|
16
|
+
* the installation refuses users above it. An administrator who has just bought
|
|
17
|
+
* ten seats should not have to wait until tomorrow, and should not have to
|
|
18
|
+
* re-type the license key into a box the dialog hides while the license is
|
|
19
|
+
* valid. This button is the answer, so these tests pin that it:
|
|
20
|
+
*
|
|
21
|
+
* - is offered only to a master admin, matching the server, which now
|
|
22
|
+
* requires one on both license writes;
|
|
23
|
+
* - sends no license key, so it can only ever refresh the key already
|
|
24
|
+
* stored and never replace a working license with a typo;
|
|
25
|
+
* - shows the new limit afterwards;
|
|
26
|
+
* - says so when it fails, rather than looking like it worked. The whole
|
|
27
|
+
* reason it was pressed is a belief that the stored terms are stale.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
let isEnterpriseEdition: boolean = true;
|
|
31
|
+
let billingEnabled: boolean = false;
|
|
32
|
+
let isMasterAdmin: boolean = true;
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
* Object.defineProperty rather than getters in an object literal: this file is
|
|
36
|
+
* down-levelled, so `{ ...actual, get X() {} }` becomes Object.assign, which
|
|
37
|
+
* reads each getter once and freezes it at module-load time.
|
|
38
|
+
*/
|
|
39
|
+
jest.mock("../../../UI/Config", () => {
|
|
40
|
+
const actualConfig: Record<string, unknown> = jest.requireActual(
|
|
41
|
+
"../../../UI/Config",
|
|
42
|
+
) as Record<string, unknown>;
|
|
43
|
+
|
|
44
|
+
const mockedConfig: Record<string, unknown> = { ...actualConfig };
|
|
45
|
+
|
|
46
|
+
Object.defineProperty(mockedConfig, "IS_ENTERPRISE_EDITION", {
|
|
47
|
+
get: (): boolean => {
|
|
48
|
+
return isEnterpriseEdition;
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
Object.defineProperty(mockedConfig, "BILLING_ENABLED", {
|
|
53
|
+
get: (): boolean => {
|
|
54
|
+
return billingEnabled;
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
return mockedConfig;
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
jest.mock("../../../UI/Utils/User", () => {
|
|
62
|
+
return {
|
|
63
|
+
__esModule: true,
|
|
64
|
+
default: {
|
|
65
|
+
isMasterAdmin: (): boolean => {
|
|
66
|
+
return isMasterAdmin;
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
interface FetchCall {
|
|
73
|
+
method: string;
|
|
74
|
+
url: string;
|
|
75
|
+
data: JSONObject | undefined;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const fetchCalls: Array<FetchCall> = [];
|
|
79
|
+
|
|
80
|
+
type FetchResponder = (
|
|
81
|
+
call: FetchCall,
|
|
82
|
+
) => HTTPResponse<JSONObject> | HTTPErrorResponse;
|
|
83
|
+
|
|
84
|
+
let respond: FetchResponder;
|
|
85
|
+
|
|
86
|
+
jest.mock("../../../UI/Utils/API/API", () => {
|
|
87
|
+
return {
|
|
88
|
+
__esModule: true,
|
|
89
|
+
default: {
|
|
90
|
+
fetch: (options: {
|
|
91
|
+
method: { toString: () => string };
|
|
92
|
+
url: { toString: () => string };
|
|
93
|
+
data?: JSONObject | undefined;
|
|
94
|
+
}): Promise<HTTPResponse<JSONObject> | HTTPErrorResponse> => {
|
|
95
|
+
const call: FetchCall = {
|
|
96
|
+
method: options.method.toString(),
|
|
97
|
+
url: options.url.toString(),
|
|
98
|
+
data: options.data,
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
fetchCalls.push(call);
|
|
102
|
+
|
|
103
|
+
return Promise.resolve(respond(call));
|
|
104
|
+
},
|
|
105
|
+
getFriendlyMessage: (err: unknown): string => {
|
|
106
|
+
if (err instanceof HTTPErrorResponse) {
|
|
107
|
+
return err.message;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return String(err);
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
const EXPIRES_AT: string = "2031-01-01T00:00:00.000Z";
|
|
117
|
+
|
|
118
|
+
type LicensePayloadFunction = (
|
|
119
|
+
overrides?: Record<string, unknown>,
|
|
120
|
+
) => JSONObject;
|
|
121
|
+
|
|
122
|
+
const licensePayload: LicensePayloadFunction = (
|
|
123
|
+
overrides?: Record<string, unknown>,
|
|
124
|
+
): JSONObject => {
|
|
125
|
+
return {
|
|
126
|
+
companyName: "Acme Inc",
|
|
127
|
+
expiresAt: EXPIRES_AT,
|
|
128
|
+
licenseKey: "acme-license-key",
|
|
129
|
+
token: "signed.jwt.token",
|
|
130
|
+
licenseValid: true,
|
|
131
|
+
isEvaluationLicense: false,
|
|
132
|
+
userLimit: 50,
|
|
133
|
+
currentUserCount: 50,
|
|
134
|
+
userCountUpdatedAt: "2026-01-01T00:00:00.000Z",
|
|
135
|
+
instances: [],
|
|
136
|
+
instanceId: "instance-1",
|
|
137
|
+
currentVersion: "12.0.30",
|
|
138
|
+
latestVersion: "12.0.30",
|
|
139
|
+
isUpdateAvailable: false,
|
|
140
|
+
isUpdateCheckDisabled: false,
|
|
141
|
+
isSeatLimitEnforced: true,
|
|
142
|
+
seatsInUse: 50,
|
|
143
|
+
seatsRemaining: 0,
|
|
144
|
+
canAddMoreUsers: false,
|
|
145
|
+
...overrides,
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
type OpenDialogFunction = () => Promise<void>;
|
|
150
|
+
|
|
151
|
+
const openDialog: OpenDialogFunction = async (): Promise<void> => {
|
|
152
|
+
render(<EditionLabel />);
|
|
153
|
+
|
|
154
|
+
// The pill only knows what to say once the license GET has come back.
|
|
155
|
+
await waitFor(() => {
|
|
156
|
+
expect(fetchCalls.length).toBeGreaterThan(0);
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
fireEvent.click(screen.getByRole("button", { name: /Enterprise Edition/i }));
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
describe("EditionLabel - refreshing the license", () => {
|
|
163
|
+
beforeEach(() => {
|
|
164
|
+
fetchCalls.length = 0;
|
|
165
|
+
isEnterpriseEdition = true;
|
|
166
|
+
billingEnabled = false;
|
|
167
|
+
isMasterAdmin = true;
|
|
168
|
+
respond = (): HTTPResponse<JSONObject> => {
|
|
169
|
+
return new HTTPResponse<JSONObject>(200, licensePayload(), {});
|
|
170
|
+
};
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
it("offers the button to a master admin once the license is valid", async () => {
|
|
174
|
+
await openDialog();
|
|
175
|
+
|
|
176
|
+
expect(
|
|
177
|
+
await screen.findByTestId("refresh-enterprise-license"),
|
|
178
|
+
).toBeInTheDocument();
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
/*
|
|
182
|
+
* The server requires a master admin on both license writes, so offering the
|
|
183
|
+
* button to anyone else would only ever produce a permission error.
|
|
184
|
+
*/
|
|
185
|
+
it("does not offer the button to a user who is not a master admin", async () => {
|
|
186
|
+
isMasterAdmin = false;
|
|
187
|
+
|
|
188
|
+
await openDialog();
|
|
189
|
+
|
|
190
|
+
await waitFor(() => {
|
|
191
|
+
expect(screen.getByText("Licensed seats")).toBeInTheDocument();
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
expect(
|
|
195
|
+
screen.queryByTestId("refresh-enterprise-license"),
|
|
196
|
+
).not.toBeInTheDocument();
|
|
197
|
+
expect(screen.queryByText("Change license key")).not.toBeInTheDocument();
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
it("asks a non-admin to find one when the license needs activating", async () => {
|
|
201
|
+
isMasterAdmin = false;
|
|
202
|
+
respond = (): HTTPResponse<JSONObject> => {
|
|
203
|
+
return new HTTPResponse<JSONObject>(
|
|
204
|
+
200,
|
|
205
|
+
licensePayload({ licenseValid: false, token: null }),
|
|
206
|
+
{},
|
|
207
|
+
);
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
await openDialog();
|
|
211
|
+
|
|
212
|
+
expect(
|
|
213
|
+
await screen.findByText("A master admin has to activate this license"),
|
|
214
|
+
).toBeInTheDocument();
|
|
215
|
+
expect(
|
|
216
|
+
screen.queryByPlaceholderText("Enter your enterprise license key"),
|
|
217
|
+
).not.toBeInTheDocument();
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
/*
|
|
221
|
+
* No license key in the body. A refresh that carried one would be an
|
|
222
|
+
* activation with a friendlier name.
|
|
223
|
+
*/
|
|
224
|
+
it("refreshes the stored license without sending a key", async () => {
|
|
225
|
+
await openDialog();
|
|
226
|
+
|
|
227
|
+
fireEvent.click(await screen.findByTestId("refresh-enterprise-license"));
|
|
228
|
+
|
|
229
|
+
await waitFor(() => {
|
|
230
|
+
expect(
|
|
231
|
+
fetchCalls.some((call: FetchCall): boolean => {
|
|
232
|
+
return call.url.includes("/global-config/license/refresh");
|
|
233
|
+
}),
|
|
234
|
+
).toBe(true);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
const refreshCall: FetchCall = fetchCalls.find(
|
|
238
|
+
(call: FetchCall): boolean => {
|
|
239
|
+
return call.url.includes("/global-config/license/refresh");
|
|
240
|
+
},
|
|
241
|
+
) as FetchCall;
|
|
242
|
+
|
|
243
|
+
expect(refreshCall.method).toBe("POST");
|
|
244
|
+
expect(refreshCall.data).toBeUndefined();
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
it("shows the new seat limit after a refresh", async () => {
|
|
248
|
+
await openDialog();
|
|
249
|
+
|
|
250
|
+
await screen.findByTestId("refresh-enterprise-license");
|
|
251
|
+
|
|
252
|
+
// Ten more seats bought on oneuptime.com since the page loaded.
|
|
253
|
+
respond = (): HTTPResponse<JSONObject> => {
|
|
254
|
+
return new HTTPResponse<JSONObject>(
|
|
255
|
+
200,
|
|
256
|
+
licensePayload({
|
|
257
|
+
userLimit: 60,
|
|
258
|
+
seatsRemaining: 10,
|
|
259
|
+
canAddMoreUsers: true,
|
|
260
|
+
}),
|
|
261
|
+
{},
|
|
262
|
+
);
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
fireEvent.click(screen.getByTestId("refresh-enterprise-license"));
|
|
266
|
+
|
|
267
|
+
expect(
|
|
268
|
+
await screen.findByText(/License refreshed from OneUptime/),
|
|
269
|
+
).toBeInTheDocument();
|
|
270
|
+
expect(await screen.findByText(/60 seats/)).toBeInTheDocument();
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
/*
|
|
274
|
+
* A refresh that quietly kept the old terms and said nothing would be worse
|
|
275
|
+
* than no button at all: the administrator pressed it precisely because they
|
|
276
|
+
* think the stored terms are wrong.
|
|
277
|
+
*/
|
|
278
|
+
it("reports a failed refresh instead of looking like it worked", async () => {
|
|
279
|
+
await openDialog();
|
|
280
|
+
|
|
281
|
+
await screen.findByTestId("refresh-enterprise-license");
|
|
282
|
+
|
|
283
|
+
respond = (
|
|
284
|
+
call: FetchCall,
|
|
285
|
+
): HTTPResponse<JSONObject> | HTTPErrorResponse => {
|
|
286
|
+
if (call.url.includes("/refresh")) {
|
|
287
|
+
return new HTTPErrorResponse(
|
|
288
|
+
500,
|
|
289
|
+
{ message: "Could not reach OneUptime." },
|
|
290
|
+
{},
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
return new HTTPResponse<JSONObject>(200, licensePayload(), {});
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
fireEvent.click(screen.getByTestId("refresh-enterprise-license"));
|
|
298
|
+
|
|
299
|
+
expect(
|
|
300
|
+
await screen.findByText(/Could not reach OneUptime/),
|
|
301
|
+
).toBeInTheDocument();
|
|
302
|
+
expect(
|
|
303
|
+
screen.queryByText(/License refreshed from OneUptime/),
|
|
304
|
+
).not.toBeInTheDocument();
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
describe("EditionLabel - what an exhausted seat limit looks like", () => {
|
|
309
|
+
beforeEach(() => {
|
|
310
|
+
fetchCalls.length = 0;
|
|
311
|
+
isEnterpriseEdition = true;
|
|
312
|
+
billingEnabled = false;
|
|
313
|
+
isMasterAdmin = true;
|
|
314
|
+
respond = (): HTTPResponse<JSONObject> => {
|
|
315
|
+
return new HTTPResponse<JSONObject>(200, licensePayload(), {});
|
|
316
|
+
};
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
/*
|
|
320
|
+
* 50 of 50 is not over the limit, so the old arithmetic called it "nearly
|
|
321
|
+
* full" — an amber nudge in front of a door that is already shut. Once the
|
|
322
|
+
* limit is enforced, being exactly on it is the thing the administrator has
|
|
323
|
+
* to act on.
|
|
324
|
+
*/
|
|
325
|
+
it("treats a full license as a breach rather than a nudge", async () => {
|
|
326
|
+
await openDialog();
|
|
327
|
+
|
|
328
|
+
expect(
|
|
329
|
+
await screen.findByText("Every licensed seat is in use"),
|
|
330
|
+
).toBeInTheDocument();
|
|
331
|
+
expect(screen.getByText("Limit exceeded")).toBeInTheDocument();
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
it("says plainly that no more users can be added", async () => {
|
|
335
|
+
await openDialog();
|
|
336
|
+
|
|
337
|
+
expect(
|
|
338
|
+
await screen.findByText(
|
|
339
|
+
/New users cannot be invited, signed up or provisioned/,
|
|
340
|
+
),
|
|
341
|
+
).toBeInTheDocument();
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
/*
|
|
345
|
+
* seatsInUse is computed from the live User table; currentUserCount is the
|
|
346
|
+
* licence-wide figure oneuptime.com last computed, up to a day ago. The card
|
|
347
|
+
* has to show the one enforcement uses, or it contradicts the invitation that
|
|
348
|
+
* just bounced.
|
|
349
|
+
*/
|
|
350
|
+
it("shows the live enforced usage rather than the last reported count", async () => {
|
|
351
|
+
respond = (): HTTPResponse<JSONObject> => {
|
|
352
|
+
return new HTTPResponse<JSONObject>(
|
|
353
|
+
200,
|
|
354
|
+
licensePayload({
|
|
355
|
+
currentUserCount: 40,
|
|
356
|
+
seatsInUse: 50,
|
|
357
|
+
}),
|
|
358
|
+
{},
|
|
359
|
+
);
|
|
360
|
+
};
|
|
361
|
+
|
|
362
|
+
await openDialog();
|
|
363
|
+
|
|
364
|
+
await waitFor(() => {
|
|
365
|
+
expect(screen.getByText("Licensed seats")).toBeInTheDocument();
|
|
366
|
+
});
|
|
367
|
+
|
|
368
|
+
expect(screen.getByText("50")).toBeInTheDocument();
|
|
369
|
+
expect(screen.queryByText("40")).not.toBeInTheDocument();
|
|
370
|
+
});
|
|
371
|
+
|
|
372
|
+
/*
|
|
373
|
+
* A build or a deployment that reports no enforcement must not be rendered as
|
|
374
|
+
* one that is refusing users.
|
|
375
|
+
*/
|
|
376
|
+
it("says nothing about enforcement when the server reports none", async () => {
|
|
377
|
+
respond = (): HTTPResponse<JSONObject> => {
|
|
378
|
+
return new HTTPResponse<JSONObject>(
|
|
379
|
+
200,
|
|
380
|
+
licensePayload({
|
|
381
|
+
isSeatLimitEnforced: false,
|
|
382
|
+
seatsInUse: null,
|
|
383
|
+
seatsRemaining: null,
|
|
384
|
+
canAddMoreUsers: true,
|
|
385
|
+
currentUserCount: 10,
|
|
386
|
+
userLimit: 50,
|
|
387
|
+
}),
|
|
388
|
+
{},
|
|
389
|
+
);
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
await openDialog();
|
|
393
|
+
|
|
394
|
+
await waitFor(() => {
|
|
395
|
+
expect(screen.getByText("Licensed seats")).toBeInTheDocument();
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
expect(
|
|
399
|
+
screen.queryByText(/New users cannot be invited/),
|
|
400
|
+
).not.toBeInTheDocument();
|
|
401
|
+
expect(
|
|
402
|
+
screen.queryByText(/This installation enforces the seat limit/),
|
|
403
|
+
).not.toBeInTheDocument();
|
|
404
|
+
});
|
|
405
|
+
});
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import { afterEach, describe, expect, jest, test } from "@jest/globals";
|
|
3
|
+
import { cleanup, fireEvent, render, screen } from "@testing-library/react";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* ErrorMessage is the app-wide "this went wrong" and "there is nothing here"
|
|
8
|
+
* surface - 89 call sites pass onRefreshClick - and its recovery control used
|
|
9
|
+
* to be a <div role="refresh-button">. A div is not in the tab order and does
|
|
10
|
+
* not answer Enter or Space, so the only way out of a failed table was the
|
|
11
|
+
* mouse. It is a real <button> now, which is what these assertions pin down:
|
|
12
|
+
* reachable by keyboard, and operable by the keys a button responds to.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
jest.mock("../../../UI/Utils/Translation", () => {
|
|
16
|
+
return {
|
|
17
|
+
__esModule: true,
|
|
18
|
+
default: () => {
|
|
19
|
+
return {
|
|
20
|
+
translateString: (value: string | undefined): string | undefined => {
|
|
21
|
+
return value;
|
|
22
|
+
},
|
|
23
|
+
translateValue: (value: unknown): unknown => {
|
|
24
|
+
return value;
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
import ErrorMessage from "../../../UI/Components/ErrorMessage/ErrorMessage";
|
|
32
|
+
|
|
33
|
+
describe("ErrorMessage refresh control", () => {
|
|
34
|
+
afterEach(() => {
|
|
35
|
+
cleanup();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test("renders the refresh control as a real button", () => {
|
|
39
|
+
render(
|
|
40
|
+
<ErrorMessage message="Something went wrong" onRefreshClick={() => {}} />,
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
const refresh: HTMLElement = screen.getByTestId("refresh-button");
|
|
44
|
+
|
|
45
|
+
expect(refresh.tagName).toBe("BUTTON");
|
|
46
|
+
// A submit button inside a form would navigate instead of refetching.
|
|
47
|
+
expect(refresh).toHaveAttribute("type", "button");
|
|
48
|
+
expect(refresh).toHaveTextContent("Refresh?");
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
test("the refresh control is focusable and fires on Enter and on Space", () => {
|
|
52
|
+
let refreshCount: number = 0;
|
|
53
|
+
|
|
54
|
+
render(
|
|
55
|
+
<ErrorMessage
|
|
56
|
+
message="Something went wrong"
|
|
57
|
+
onRefreshClick={() => {
|
|
58
|
+
refreshCount++;
|
|
59
|
+
}}
|
|
60
|
+
/>,
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
const refresh: HTMLElement = screen.getByTestId("refresh-button");
|
|
64
|
+
|
|
65
|
+
refresh.focus();
|
|
66
|
+
expect(refresh).toHaveFocus();
|
|
67
|
+
|
|
68
|
+
/*
|
|
69
|
+
* jsdom does not synthesise the click a real browser derives from Enter or
|
|
70
|
+
* Space on a button, so the assertion that matters here is the one above -
|
|
71
|
+
* that this is a button at all, and therefore gets that behaviour from the
|
|
72
|
+
* platform. The click below confirms the handler is still wired.
|
|
73
|
+
*/
|
|
74
|
+
fireEvent.click(refresh);
|
|
75
|
+
expect(refreshCount).toBe(1);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
test("renders no control at all when there is nothing to refresh", () => {
|
|
79
|
+
render(<ErrorMessage message="Nothing here" />);
|
|
80
|
+
|
|
81
|
+
expect(screen.queryByTestId("refresh-button")).not.toBeInTheDocument();
|
|
82
|
+
});
|
|
83
|
+
});
|