@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
|
@@ -14,7 +14,6 @@ import ColumnType from "../../Types/Database/ColumnType";
|
|
|
14
14
|
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
|
|
15
15
|
import EnableDocumentation from "../../Types/Database/EnableDocumentation";
|
|
16
16
|
import EnableWorkflow from "../../Types/Database/EnableWorkflow";
|
|
17
|
-
import SlugifyColumn from "../../Types/Database/SlugifyColumn";
|
|
18
17
|
import TableColumn from "../../Types/Database/TableColumn";
|
|
19
18
|
import TableColumnType from "../../Types/Database/TableColumnType";
|
|
20
19
|
import TableMetadata from "../../Types/Database/TableMetadata";
|
|
@@ -78,7 +77,6 @@ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
|
78
77
|
read: true,
|
|
79
78
|
})
|
|
80
79
|
@CrudApiEndpoint(new Route("/status-page-private-user"))
|
|
81
|
-
@SlugifyColumn("name", "slug")
|
|
82
80
|
@TableMetadata({
|
|
83
81
|
tableName: "StatusPagePrivateUser",
|
|
84
82
|
singularName: "Status Page Private User",
|
|
@@ -15,7 +15,6 @@ import ColumnType from "../../Types/Database/ColumnType";
|
|
|
15
15
|
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
|
|
16
16
|
import EnableDocumentation from "../../Types/Database/EnableDocumentation";
|
|
17
17
|
import EnableWorkflow from "../../Types/Database/EnableWorkflow";
|
|
18
|
-
import SlugifyColumn from "../../Types/Database/SlugifyColumn";
|
|
19
18
|
import TableColumn from "../../Types/Database/TableColumn";
|
|
20
19
|
import TableColumnType from "../../Types/Database/TableColumnType";
|
|
21
20
|
import TableMetadata from "../../Types/Database/TableMetadata";
|
|
@@ -72,7 +71,6 @@ import UptimePrecision from "../../Types/StatusPage/UptimePrecision";
|
|
|
72
71
|
read: true,
|
|
73
72
|
})
|
|
74
73
|
@CrudApiEndpoint(new Route("/status-page-resource"))
|
|
75
|
-
@SlugifyColumn("name", "slug")
|
|
76
74
|
@TableMetadata({
|
|
77
75
|
tableName: "StatusPageResource",
|
|
78
76
|
singularName: "Status Page Resource",
|
|
@@ -14,7 +14,6 @@ import ColumnType from "../../Types/Database/ColumnType";
|
|
|
14
14
|
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
|
|
15
15
|
import EnableDocumentation from "../../Types/Database/EnableDocumentation";
|
|
16
16
|
import EnableWorkflow from "../../Types/Database/EnableWorkflow";
|
|
17
|
-
import SlugifyColumn from "../../Types/Database/SlugifyColumn";
|
|
18
17
|
import TableColumn from "../../Types/Database/TableColumn";
|
|
19
18
|
import TableColumnType from "../../Types/Database/TableColumnType";
|
|
20
19
|
import TableMetadata from "../../Types/Database/TableMetadata";
|
|
@@ -82,7 +81,6 @@ import StatusPageEventType from "../../Types/StatusPage/StatusPageEventType";
|
|
|
82
81
|
],
|
|
83
82
|
})
|
|
84
83
|
@CrudApiEndpoint(new Route("/status-page-subscriber"))
|
|
85
|
-
@SlugifyColumn("name", "slug")
|
|
86
84
|
@TableMetadata({
|
|
87
85
|
tableName: "StatusPageSubscriber",
|
|
88
86
|
singularName: "Status Page Subscriber",
|
|
@@ -22,26 +22,35 @@ import Permission from "../../Types/Permission";
|
|
|
22
22
|
import { PlanType } from "../../Types/Billing/SubscriptionPlan";
|
|
23
23
|
import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
24
24
|
|
|
25
|
+
/*
|
|
26
|
+
* Part of the SIEM, so it reads and is administered through the Security
|
|
27
|
+
* tiers rather than the Telemetry ones it used to share a list with. A
|
|
28
|
+
* detection rule and a threat-intel subscription describe what a project is
|
|
29
|
+
* watching for and what it believes it is up against, which is security
|
|
30
|
+
* posture rather than observability configuration.
|
|
31
|
+
*/
|
|
25
32
|
const createPermissions: Array<Permission> = [
|
|
26
33
|
Permission.ProjectOwner,
|
|
27
34
|
Permission.ProjectAdmin,
|
|
35
|
+
Permission.SecurityAdmin,
|
|
36
|
+
Permission.SecurityMember,
|
|
28
37
|
Permission.CreateProjectThreatIntelFeed,
|
|
29
38
|
];
|
|
30
39
|
|
|
31
40
|
const readPermissions: Array<Permission> = [
|
|
32
41
|
Permission.ProjectOwner,
|
|
33
42
|
Permission.ProjectAdmin,
|
|
34
|
-
Permission.
|
|
35
|
-
Permission.
|
|
36
|
-
Permission.
|
|
37
|
-
Permission.TelemetryMember,
|
|
38
|
-
Permission.TelemetryViewer,
|
|
43
|
+
Permission.SecurityAdmin,
|
|
44
|
+
Permission.SecurityMember,
|
|
45
|
+
Permission.SecurityViewer,
|
|
39
46
|
Permission.ReadProjectThreatIntelFeed,
|
|
40
47
|
];
|
|
41
48
|
|
|
42
49
|
const updatePermissions: Array<Permission> = [
|
|
43
50
|
Permission.ProjectOwner,
|
|
44
51
|
Permission.ProjectAdmin,
|
|
52
|
+
Permission.SecurityAdmin,
|
|
53
|
+
Permission.SecurityMember,
|
|
45
54
|
Permission.EditProjectThreatIntelFeed,
|
|
46
55
|
];
|
|
47
56
|
|
|
@@ -86,6 +95,8 @@ const updatePermissions: Array<Permission> = [
|
|
|
86
95
|
delete: [
|
|
87
96
|
Permission.ProjectOwner,
|
|
88
97
|
Permission.ProjectAdmin,
|
|
98
|
+
Permission.SecurityAdmin,
|
|
99
|
+
Permission.SecurityMember,
|
|
89
100
|
Permission.DeleteProjectThreatIntelFeed,
|
|
90
101
|
],
|
|
91
102
|
update: updatePermissions,
|
|
@@ -26,6 +26,11 @@ import {
|
|
|
26
26
|
import EnterpriseLicenseInstanceSummary from "../../Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary";
|
|
27
27
|
import VersionUtil from "../../Utils/VersionUtil";
|
|
28
28
|
import UserMiddleware from "../Middleware/UserAuthorization";
|
|
29
|
+
import MasterAdminAuthorization from "../Middleware/MasterAdminAuthorization";
|
|
30
|
+
import EnterpriseLicenseSeatUtil from "../Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil";
|
|
31
|
+
import { SeatUsage } from "../../Utils/EnterpriseLicense/EnterpriseLicenseSeats";
|
|
32
|
+
import UserService from "../Services/UserService";
|
|
33
|
+
import PositiveNumber from "../../Types/PositiveNumber";
|
|
29
34
|
|
|
30
35
|
export default class GlobalConfigAPI extends BaseAPI<
|
|
31
36
|
GlobalConfig,
|
|
@@ -104,6 +109,22 @@ export default class GlobalConfigAPI extends BaseAPI<
|
|
|
104
109
|
config.enterpriseLicenseExpiresAt.getTime() > Date.now(),
|
|
105
110
|
);
|
|
106
111
|
|
|
112
|
+
/*
|
|
113
|
+
* What the seat limit actually means on this installation right now,
|
|
114
|
+
* as opposed to what oneuptime.com last reported. Only for signed-in
|
|
115
|
+
* callers: it is derived from the live User table, and an anonymous
|
|
116
|
+
* visitor on the login page has no business being told how close this
|
|
117
|
+
* server is to refusing new accounts.
|
|
118
|
+
*/
|
|
119
|
+
const seatUsage: SeatUsage | null = isAuthenticatedUser
|
|
120
|
+
? await EnterpriseLicenseSeatUtil.getSeatUsageForLoadedGlobalConfig(
|
|
121
|
+
{
|
|
122
|
+
config: config,
|
|
123
|
+
getLocalUserCount: GlobalConfigAPI.getLocalUserCount,
|
|
124
|
+
},
|
|
125
|
+
)
|
|
126
|
+
: null;
|
|
127
|
+
|
|
107
128
|
const responseBody: JSONObject = {
|
|
108
129
|
companyName: config?.enterpriseCompanyName || null,
|
|
109
130
|
expiresAt: config?.enterpriseLicenseExpiresAt
|
|
@@ -174,6 +195,7 @@ export default class GlobalConfigAPI extends BaseAPI<
|
|
|
174
195
|
isUpdateCheckDisabled: isAuthenticatedUser
|
|
175
196
|
? DisableUpdateCheck
|
|
176
197
|
: false,
|
|
198
|
+
...GlobalConfigAPI.getSeatUsageResponseFields(seatUsage),
|
|
177
199
|
};
|
|
178
200
|
|
|
179
201
|
return Response.sendJsonObjectResponse(req, res, responseBody);
|
|
@@ -183,9 +205,19 @@ export default class GlobalConfigAPI extends BaseAPI<
|
|
|
183
205
|
},
|
|
184
206
|
);
|
|
185
207
|
|
|
208
|
+
/*
|
|
209
|
+
* Activating (or replacing) the license key for the whole installation.
|
|
210
|
+
*
|
|
211
|
+
* Master admin only. This writes the terms that bound how many users the
|
|
212
|
+
* installation may have, so anyone who can reach it can change the seat
|
|
213
|
+
* limit UserService now enforces. It used to run on
|
|
214
|
+
* UserMiddleware.getUserMiddleware, which lets anonymous callers through
|
|
215
|
+
* (it has to — the GET above serves the signed-out login page), so the
|
|
216
|
+
* route was in practice unauthenticated.
|
|
217
|
+
*/
|
|
186
218
|
this.router.post(
|
|
187
219
|
`${new this.entityType().getCrudApiPath()?.toString()}/license`,
|
|
188
|
-
|
|
220
|
+
MasterAdminAuthorization.isAuthorizedMasterAdminMiddleware,
|
|
189
221
|
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
190
222
|
try {
|
|
191
223
|
const licenseKey: string =
|
|
@@ -195,205 +227,352 @@ export default class GlobalConfigAPI extends BaseAPI<
|
|
|
195
227
|
throw new BadDataException("License key is required");
|
|
196
228
|
}
|
|
197
229
|
|
|
198
|
-
const
|
|
230
|
+
const responseBody: JSONObject =
|
|
231
|
+
await this.validateAndStoreLicenseKey(licenseKey);
|
|
232
|
+
|
|
233
|
+
return Response.sendJsonObjectResponse(req, res, responseBody);
|
|
234
|
+
} catch (err) {
|
|
235
|
+
next(err);
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
);
|
|
199
239
|
|
|
200
|
-
|
|
240
|
+
/*
|
|
241
|
+
* Re-fetch the license this installation already holds.
|
|
242
|
+
*
|
|
243
|
+
* The seat limit and the expiry live on oneuptime.com and can change on
|
|
244
|
+
* any day — a customer buys ten more seats at noon. The daily report job
|
|
245
|
+
* picks that up eventually; this is the button an administrator presses
|
|
246
|
+
* when "eventually" is not good enough, and it is the only way to apply a
|
|
247
|
+
* change without re-typing the key.
|
|
248
|
+
*
|
|
249
|
+
* Deliberately takes no license key: it uses the stored one. A refresh
|
|
250
|
+
* that accepted a key would be an activation with a friendlier name, and
|
|
251
|
+
* would let a mistyped key replace a working license by accident.
|
|
252
|
+
*/
|
|
253
|
+
this.router.post(
|
|
254
|
+
`${new this.entityType().getCrudApiPath()?.toString()}/license/refresh`,
|
|
255
|
+
MasterAdminAuthorization.isAuthorizedMasterAdminMiddleware,
|
|
256
|
+
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
|
|
257
|
+
try {
|
|
258
|
+
const config: GlobalConfig | null =
|
|
201
259
|
await GlobalConfigService.findOneById({
|
|
202
|
-
id:
|
|
260
|
+
id: ObjectID.getZeroObjectID(),
|
|
203
261
|
select: {
|
|
204
|
-
|
|
205
|
-
instanceId: true,
|
|
262
|
+
enterpriseLicenseKey: true,
|
|
206
263
|
},
|
|
207
264
|
props: {
|
|
208
265
|
isRoot: true,
|
|
209
|
-
ignoreHooks: true,
|
|
210
266
|
},
|
|
211
267
|
});
|
|
212
268
|
|
|
213
|
-
|
|
214
|
-
* Send this instance's id and host along with the key so the
|
|
215
|
-
* license server registers this instance against the license and
|
|
216
|
-
* it shows up in the instance list on all instances that share
|
|
217
|
-
* the license.
|
|
218
|
-
*/
|
|
219
|
-
const instanceId: ObjectID =
|
|
220
|
-
existingConfig?.instanceId || ObjectID.generate();
|
|
221
|
-
|
|
222
|
-
const validationResponse:
|
|
223
|
-
| HTTPResponse<JSONObject>
|
|
224
|
-
| HTTPErrorResponse = await API.post<JSONObject>({
|
|
225
|
-
url: EnterpriseLicenseValidationUrl,
|
|
226
|
-
data: {
|
|
227
|
-
licenseKey,
|
|
228
|
-
instanceId: instanceId.toString(),
|
|
229
|
-
host: Host,
|
|
230
|
-
/*
|
|
231
|
-
* Sent here as well as from the daily report job so the version
|
|
232
|
-
* lands on the license server the moment the key is validated,
|
|
233
|
-
* rather than up to 24 hours later.
|
|
234
|
-
*/
|
|
235
|
-
version: AppVersion,
|
|
236
|
-
},
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
if (!validationResponse.isSuccess()) {
|
|
240
|
-
const errorMessage: string =
|
|
241
|
-
validationResponse instanceof HTTPErrorResponse
|
|
242
|
-
? validationResponse.message ||
|
|
243
|
-
"Failed to validate license key."
|
|
244
|
-
: "Failed to validate license key.";
|
|
245
|
-
throw new BadDataException(errorMessage);
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
const payload: JSONObject = validationResponse.data as JSONObject;
|
|
249
|
-
|
|
250
|
-
const companyNameRaw: string =
|
|
251
|
-
(payload["companyName"] as string | undefined)?.trim() || "";
|
|
252
|
-
const expiresAtRaw: string =
|
|
253
|
-
(payload["expiresAt"] as string | undefined) || "";
|
|
254
|
-
const licenseKeyRaw: string =
|
|
255
|
-
(payload["licenseKey"] as string | undefined)?.trim() || licenseKey;
|
|
256
|
-
const licenseToken: string =
|
|
257
|
-
(payload["token"] as string | undefined) || "";
|
|
258
|
-
|
|
259
|
-
let licenseExpiry: Date | undefined = undefined;
|
|
260
|
-
if (expiresAtRaw) {
|
|
261
|
-
const parsedDate: Date = new Date(expiresAtRaw);
|
|
262
|
-
|
|
263
|
-
if (Number.isNaN(parsedDate.getTime())) {
|
|
264
|
-
throw new BadDataException(
|
|
265
|
-
"License expiration returned from server is invalid.",
|
|
266
|
-
);
|
|
267
|
-
}
|
|
269
|
+
const licenseKey: string = config?.enterpriseLicenseKey?.trim() || "";
|
|
268
270
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
const userLimit: number | null =
|
|
274
|
-
typeof userLimitRaw === "number" && Number.isFinite(userLimitRaw)
|
|
275
|
-
? userLimitRaw
|
|
276
|
-
: null;
|
|
277
|
-
|
|
278
|
-
const currentUserCountRaw: unknown = payload["currentUserCount"];
|
|
279
|
-
const currentUserCount: number | null =
|
|
280
|
-
typeof currentUserCountRaw === "number" &&
|
|
281
|
-
Number.isFinite(currentUserCountRaw)
|
|
282
|
-
? currentUserCountRaw
|
|
283
|
-
: null;
|
|
284
|
-
|
|
285
|
-
const userCountUpdatedAtRaw: string | undefined = payload[
|
|
286
|
-
"userCountUpdatedAt"
|
|
287
|
-
] as string | undefined;
|
|
288
|
-
let userCountUpdatedAt: Date | null = null;
|
|
289
|
-
if (userCountUpdatedAtRaw) {
|
|
290
|
-
const parsedReportedAt: Date = new Date(userCountUpdatedAtRaw);
|
|
291
|
-
if (!Number.isNaN(parsedReportedAt.getTime())) {
|
|
292
|
-
userCountUpdatedAt = parsedReportedAt;
|
|
293
|
-
}
|
|
271
|
+
if (!licenseKey) {
|
|
272
|
+
throw new BadDataException(
|
|
273
|
+
"This installation does not have an enterprise license key yet. Enter a license key to activate it first.",
|
|
274
|
+
);
|
|
294
275
|
}
|
|
295
276
|
|
|
296
|
-
const
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
const instances: Array<EnterpriseLicenseInstanceSummary> =
|
|
300
|
-
Array.isArray(payload["instances"])
|
|
301
|
-
? (payload[
|
|
302
|
-
"instances"
|
|
303
|
-
] as Array<EnterpriseLicenseInstanceSummary>)
|
|
304
|
-
: [];
|
|
305
|
-
|
|
306
|
-
const updatePayload: PartialEntity<GlobalConfig> = {
|
|
307
|
-
enterpriseCompanyName: companyNameRaw || null,
|
|
308
|
-
enterpriseLicenseKey: licenseKeyRaw || null,
|
|
309
|
-
enterpriseLicenseExpiresAt: licenseExpiry || null,
|
|
310
|
-
enterpriseLicenseToken: licenseToken || null,
|
|
311
|
-
enterpriseLicenseIsEvaluation: isEvaluationLicense,
|
|
312
|
-
enterpriseLicenseUserLimit: userLimit,
|
|
313
|
-
enterpriseLicenseCurrentUserCount: currentUserCount,
|
|
314
|
-
enterpriseLicenseUserCountUpdatedAt: userCountUpdatedAt,
|
|
315
|
-
enterpriseLicenseInstances: instances,
|
|
316
|
-
};
|
|
317
|
-
|
|
318
|
-
if (!existingConfig?.instanceId) {
|
|
319
|
-
// Installs that predate instance ids: persist the one we generated.
|
|
320
|
-
updatePayload.instanceId = instanceId;
|
|
321
|
-
}
|
|
277
|
+
const responseBody: JSONObject =
|
|
278
|
+
await this.validateAndStoreLicenseKey(licenseKey);
|
|
322
279
|
|
|
323
|
-
|
|
324
|
-
await GlobalConfigService.updateOneById({
|
|
325
|
-
id: globalConfigId,
|
|
326
|
-
data: updatePayload,
|
|
327
|
-
props: {
|
|
328
|
-
isRoot: true,
|
|
329
|
-
ignoreHooks: true,
|
|
330
|
-
},
|
|
331
|
-
});
|
|
332
|
-
} else {
|
|
333
|
-
const newConfig: GlobalConfig = new GlobalConfig();
|
|
334
|
-
newConfig.id = globalConfigId;
|
|
335
|
-
|
|
336
|
-
if (companyNameRaw) {
|
|
337
|
-
newConfig.enterpriseCompanyName = companyNameRaw;
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
if (licenseKeyRaw) {
|
|
341
|
-
newConfig.enterpriseLicenseKey = licenseKeyRaw;
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
if (licenseToken) {
|
|
345
|
-
newConfig.enterpriseLicenseToken = licenseToken;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
newConfig.enterpriseLicenseIsEvaluation = isEvaluationLicense;
|
|
349
|
-
|
|
350
|
-
if (licenseExpiry) {
|
|
351
|
-
newConfig.enterpriseLicenseExpiresAt = licenseExpiry;
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
if (userLimit !== null) {
|
|
355
|
-
newConfig.enterpriseLicenseUserLimit = userLimit;
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
if (currentUserCount !== null) {
|
|
359
|
-
newConfig.enterpriseLicenseCurrentUserCount = currentUserCount;
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
if (userCountUpdatedAt) {
|
|
363
|
-
newConfig.enterpriseLicenseUserCountUpdatedAt =
|
|
364
|
-
userCountUpdatedAt;
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
newConfig.enterpriseLicenseInstances = instances;
|
|
368
|
-
newConfig.instanceId = instanceId;
|
|
369
|
-
|
|
370
|
-
await GlobalConfigService.create({
|
|
371
|
-
data: newConfig,
|
|
372
|
-
props: {
|
|
373
|
-
isRoot: true,
|
|
374
|
-
ignoreHooks: true,
|
|
375
|
-
},
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
return Response.sendJsonObjectResponse(req, res, {
|
|
380
|
-
companyName: companyNameRaw || null,
|
|
381
|
-
expiresAt: licenseExpiry ? licenseExpiry.toISOString() : null,
|
|
382
|
-
licenseKey: licenseKeyRaw || null,
|
|
383
|
-
token: licenseToken || null,
|
|
384
|
-
isEvaluationLicense: isEvaluationLicense,
|
|
385
|
-
userLimit: userLimit,
|
|
386
|
-
currentUserCount: currentUserCount,
|
|
387
|
-
userCountUpdatedAt: userCountUpdatedAt
|
|
388
|
-
? userCountUpdatedAt.toISOString()
|
|
389
|
-
: null,
|
|
390
|
-
instances: instances,
|
|
391
|
-
instanceId: instanceId.toString(),
|
|
392
|
-
});
|
|
280
|
+
return Response.sendJsonObjectResponse(req, res, responseBody);
|
|
393
281
|
} catch (err) {
|
|
394
282
|
next(err);
|
|
395
283
|
}
|
|
396
284
|
},
|
|
397
285
|
);
|
|
398
286
|
}
|
|
287
|
+
|
|
288
|
+
/*
|
|
289
|
+
* Ask oneuptime.com what this license key is worth today, and mirror the
|
|
290
|
+
* answer into GlobalConfig.
|
|
291
|
+
*
|
|
292
|
+
* Shared by activation and refresh so the two cannot drift: the whole point
|
|
293
|
+
* of refresh is that it applies exactly what activation would have applied,
|
|
294
|
+
* and a second hand-written copy of this mapping is how the seat limit came
|
|
295
|
+
* to be dropped on the floor by the daily report job before.
|
|
296
|
+
*/
|
|
297
|
+
private async validateAndStoreLicenseKey(
|
|
298
|
+
licenseKey: string,
|
|
299
|
+
): Promise<JSONObject> {
|
|
300
|
+
const globalConfigId: ObjectID = ObjectID.getZeroObjectID();
|
|
301
|
+
|
|
302
|
+
const existingConfig: GlobalConfig | null =
|
|
303
|
+
await GlobalConfigService.findOneById({
|
|
304
|
+
id: globalConfigId,
|
|
305
|
+
select: {
|
|
306
|
+
_id: true,
|
|
307
|
+
instanceId: true,
|
|
308
|
+
},
|
|
309
|
+
props: {
|
|
310
|
+
isRoot: true,
|
|
311
|
+
ignoreHooks: true,
|
|
312
|
+
},
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
/*
|
|
316
|
+
* Send this instance's id and host along with the key so the
|
|
317
|
+
* license server registers this instance against the license and
|
|
318
|
+
* it shows up in the instance list on all instances that share
|
|
319
|
+
* the license.
|
|
320
|
+
*/
|
|
321
|
+
const instanceId: ObjectID =
|
|
322
|
+
existingConfig?.instanceId || ObjectID.generate();
|
|
323
|
+
|
|
324
|
+
const validationResponse: HTTPResponse<JSONObject> | HTTPErrorResponse =
|
|
325
|
+
await API.post<JSONObject>({
|
|
326
|
+
url: EnterpriseLicenseValidationUrl,
|
|
327
|
+
data: {
|
|
328
|
+
licenseKey,
|
|
329
|
+
instanceId: instanceId.toString(),
|
|
330
|
+
host: Host,
|
|
331
|
+
/*
|
|
332
|
+
* Sent here as well as from the daily report job so the version
|
|
333
|
+
* lands on the license server the moment the key is validated,
|
|
334
|
+
* rather than up to 24 hours later.
|
|
335
|
+
*/
|
|
336
|
+
version: AppVersion,
|
|
337
|
+
},
|
|
338
|
+
});
|
|
339
|
+
|
|
340
|
+
if (!validationResponse.isSuccess()) {
|
|
341
|
+
const errorMessage: string =
|
|
342
|
+
validationResponse instanceof HTTPErrorResponse
|
|
343
|
+
? validationResponse.message || "Failed to validate license key."
|
|
344
|
+
: "Failed to validate license key.";
|
|
345
|
+
throw new BadDataException(errorMessage);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
const payload: JSONObject = validationResponse.data as JSONObject;
|
|
349
|
+
|
|
350
|
+
const companyNameRaw: string =
|
|
351
|
+
(payload["companyName"] as string | undefined)?.trim() || "";
|
|
352
|
+
const expiresAtRaw: string =
|
|
353
|
+
(payload["expiresAt"] as string | undefined) || "";
|
|
354
|
+
const licenseKeyRaw: string =
|
|
355
|
+
(payload["licenseKey"] as string | undefined)?.trim() || licenseKey;
|
|
356
|
+
const licenseToken: string = (payload["token"] as string | undefined) || "";
|
|
357
|
+
|
|
358
|
+
let licenseExpiry: Date | undefined = undefined;
|
|
359
|
+
if (expiresAtRaw) {
|
|
360
|
+
const parsedDate: Date = new Date(expiresAtRaw);
|
|
361
|
+
|
|
362
|
+
if (Number.isNaN(parsedDate.getTime())) {
|
|
363
|
+
throw new BadDataException(
|
|
364
|
+
"License expiration returned from server is invalid.",
|
|
365
|
+
);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
licenseExpiry = parsedDate;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
const userLimitRaw: unknown = payload["userLimit"];
|
|
372
|
+
const userLimit: number | null =
|
|
373
|
+
typeof userLimitRaw === "number" && Number.isFinite(userLimitRaw)
|
|
374
|
+
? userLimitRaw
|
|
375
|
+
: null;
|
|
376
|
+
|
|
377
|
+
const currentUserCountRaw: unknown = payload["currentUserCount"];
|
|
378
|
+
const currentUserCount: number | null =
|
|
379
|
+
typeof currentUserCountRaw === "number" &&
|
|
380
|
+
Number.isFinite(currentUserCountRaw)
|
|
381
|
+
? currentUserCountRaw
|
|
382
|
+
: null;
|
|
383
|
+
|
|
384
|
+
const userCountUpdatedAtRaw: string | undefined = payload[
|
|
385
|
+
"userCountUpdatedAt"
|
|
386
|
+
] as string | undefined;
|
|
387
|
+
let userCountUpdatedAt: Date | null = null;
|
|
388
|
+
if (userCountUpdatedAtRaw) {
|
|
389
|
+
const parsedReportedAt: Date = new Date(userCountUpdatedAtRaw);
|
|
390
|
+
if (!Number.isNaN(parsedReportedAt.getTime())) {
|
|
391
|
+
userCountUpdatedAt = parsedReportedAt;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
const isEvaluationLicense: boolean =
|
|
396
|
+
payload["isEvaluationLicense"] === true;
|
|
397
|
+
|
|
398
|
+
const instances: Array<EnterpriseLicenseInstanceSummary> = Array.isArray(
|
|
399
|
+
payload["instances"],
|
|
400
|
+
)
|
|
401
|
+
? (payload["instances"] as Array<EnterpriseLicenseInstanceSummary>)
|
|
402
|
+
: [];
|
|
403
|
+
|
|
404
|
+
const updatePayload: PartialEntity<GlobalConfig> = {
|
|
405
|
+
enterpriseCompanyName: companyNameRaw || null,
|
|
406
|
+
enterpriseLicenseKey: licenseKeyRaw || null,
|
|
407
|
+
enterpriseLicenseExpiresAt: licenseExpiry || null,
|
|
408
|
+
enterpriseLicenseToken: licenseToken || null,
|
|
409
|
+
enterpriseLicenseIsEvaluation: isEvaluationLicense,
|
|
410
|
+
enterpriseLicenseUserLimit: userLimit,
|
|
411
|
+
enterpriseLicenseCurrentUserCount: currentUserCount,
|
|
412
|
+
enterpriseLicenseUserCountUpdatedAt: userCountUpdatedAt,
|
|
413
|
+
enterpriseLicenseInstances: instances,
|
|
414
|
+
};
|
|
415
|
+
|
|
416
|
+
if (!existingConfig?.instanceId) {
|
|
417
|
+
// Installs that predate instance ids: persist the one we generated.
|
|
418
|
+
updatePayload.instanceId = instanceId;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
if (existingConfig) {
|
|
422
|
+
await GlobalConfigService.updateOneById({
|
|
423
|
+
id: globalConfigId,
|
|
424
|
+
data: updatePayload,
|
|
425
|
+
props: {
|
|
426
|
+
isRoot: true,
|
|
427
|
+
ignoreHooks: true,
|
|
428
|
+
},
|
|
429
|
+
});
|
|
430
|
+
} else {
|
|
431
|
+
const newConfig: GlobalConfig = new GlobalConfig();
|
|
432
|
+
newConfig.id = globalConfigId;
|
|
433
|
+
|
|
434
|
+
if (companyNameRaw) {
|
|
435
|
+
newConfig.enterpriseCompanyName = companyNameRaw;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
if (licenseKeyRaw) {
|
|
439
|
+
newConfig.enterpriseLicenseKey = licenseKeyRaw;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
if (licenseToken) {
|
|
443
|
+
newConfig.enterpriseLicenseToken = licenseToken;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
newConfig.enterpriseLicenseIsEvaluation = isEvaluationLicense;
|
|
447
|
+
|
|
448
|
+
if (licenseExpiry) {
|
|
449
|
+
newConfig.enterpriseLicenseExpiresAt = licenseExpiry;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
if (userLimit !== null) {
|
|
453
|
+
newConfig.enterpriseLicenseUserLimit = userLimit;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
if (currentUserCount !== null) {
|
|
457
|
+
newConfig.enterpriseLicenseCurrentUserCount = currentUserCount;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
if (userCountUpdatedAt) {
|
|
461
|
+
newConfig.enterpriseLicenseUserCountUpdatedAt = userCountUpdatedAt;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
newConfig.enterpriseLicenseInstances = instances;
|
|
465
|
+
newConfig.instanceId = instanceId;
|
|
466
|
+
|
|
467
|
+
await GlobalConfigService.create({
|
|
468
|
+
data: newConfig,
|
|
469
|
+
props: {
|
|
470
|
+
isRoot: true,
|
|
471
|
+
ignoreHooks: true,
|
|
472
|
+
},
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
/*
|
|
477
|
+
* Seat usage recomputed from what was just stored, so the dialog that
|
|
478
|
+
* triggered this can show the new limit against the real user count
|
|
479
|
+
* without a second round trip - and so an administrator who just bought
|
|
480
|
+
* seats sees them land.
|
|
481
|
+
*/
|
|
482
|
+
const seatUsage: SeatUsage | null =
|
|
483
|
+
await GlobalConfigAPI.getSeatUsageForResponse({
|
|
484
|
+
userLimit: userLimit,
|
|
485
|
+
currentUserCount: currentUserCount,
|
|
486
|
+
instances: instances,
|
|
487
|
+
instanceId: instanceId,
|
|
488
|
+
});
|
|
489
|
+
|
|
490
|
+
return {
|
|
491
|
+
companyName: companyNameRaw || null,
|
|
492
|
+
expiresAt: licenseExpiry ? licenseExpiry.toISOString() : null,
|
|
493
|
+
licenseKey: licenseKeyRaw || null,
|
|
494
|
+
token: licenseToken || null,
|
|
495
|
+
isEvaluationLicense: isEvaluationLicense,
|
|
496
|
+
userLimit: userLimit,
|
|
497
|
+
currentUserCount: currentUserCount,
|
|
498
|
+
userCountUpdatedAt: userCountUpdatedAt
|
|
499
|
+
? userCountUpdatedAt.toISOString()
|
|
500
|
+
: null,
|
|
501
|
+
instances: instances,
|
|
502
|
+
instanceId: instanceId.toString(),
|
|
503
|
+
...GlobalConfigAPI.getSeatUsageResponseFields(seatUsage),
|
|
504
|
+
};
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
/*
|
|
508
|
+
* Seat usage built from license terms held in memory rather than re-read
|
|
509
|
+
* from the database. Used right after a write, where re-reading would race
|
|
510
|
+
* the write it is describing.
|
|
511
|
+
*/
|
|
512
|
+
private static async getSeatUsageForResponse(data: {
|
|
513
|
+
userLimit: number | null;
|
|
514
|
+
currentUserCount: number | null;
|
|
515
|
+
instances: Array<EnterpriseLicenseInstanceSummary>;
|
|
516
|
+
instanceId: ObjectID;
|
|
517
|
+
}): Promise<SeatUsage | null> {
|
|
518
|
+
const config: GlobalConfig = new GlobalConfig();
|
|
519
|
+
config.instanceId = data.instanceId;
|
|
520
|
+
config.enterpriseLicenseInstances = data.instances;
|
|
521
|
+
|
|
522
|
+
if (data.userLimit !== null) {
|
|
523
|
+
config.enterpriseLicenseUserLimit = data.userLimit;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
if (data.currentUserCount !== null) {
|
|
527
|
+
config.enterpriseLicenseCurrentUserCount = data.currentUserCount;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
return EnterpriseLicenseSeatUtil.getSeatUsageForLoadedGlobalConfig({
|
|
531
|
+
config: config,
|
|
532
|
+
getLocalUserCount: GlobalConfigAPI.getLocalUserCount,
|
|
533
|
+
});
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
/*
|
|
537
|
+
* How many users exist on this installation right now. Deliberately the live
|
|
538
|
+
* count rather than the last reported one: the number an administrator is
|
|
539
|
+
* about to act on is the number that decides whether the next invitation
|
|
540
|
+
* goes through.
|
|
541
|
+
*/
|
|
542
|
+
private static async getLocalUserCount(): Promise<number> {
|
|
543
|
+
const userCount: PositiveNumber = await UserService.countBy({
|
|
544
|
+
query: {},
|
|
545
|
+
props: {
|
|
546
|
+
isRoot: true,
|
|
547
|
+
},
|
|
548
|
+
});
|
|
549
|
+
|
|
550
|
+
return userCount.toNumber();
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
/*
|
|
554
|
+
* The seat-enforcement half of a license response. Always the same keys, so
|
|
555
|
+
* a client never has to tell "this build does not report seats" apart from
|
|
556
|
+
* "this installation does not enforce them" by which fields are missing:
|
|
557
|
+
* isSeatLimitEnforced is the single flag that answers that.
|
|
558
|
+
*/
|
|
559
|
+
private static getSeatUsageResponseFields(
|
|
560
|
+
seatUsage: SeatUsage | null,
|
|
561
|
+
): JSONObject {
|
|
562
|
+
if (!seatUsage || !seatUsage.isEnforced) {
|
|
563
|
+
return {
|
|
564
|
+
isSeatLimitEnforced: false,
|
|
565
|
+
seatsInUse: null,
|
|
566
|
+
seatsRemaining: null,
|
|
567
|
+
canAddMoreUsers: true,
|
|
568
|
+
};
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
return {
|
|
572
|
+
isSeatLimitEnforced: true,
|
|
573
|
+
seatsInUse: seatUsage.seatsInUse,
|
|
574
|
+
seatsRemaining: seatUsage.seatsRemaining,
|
|
575
|
+
canAddMoreUsers: seatUsage.hasSeatForNewUser,
|
|
576
|
+
};
|
|
577
|
+
}
|
|
399
578
|
}
|