@oneuptime/common 12.0.30 → 12.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/SecurityEvent.ts +48 -16
- package/Models/AnalyticsModels/ThreatIntelIndicator.ts +10 -5
- package/Models/DatabaseModels/AlertSeverity.ts +44 -0
- package/Models/DatabaseModels/AlertState.ts +0 -2
- package/Models/DatabaseModels/DetectionRule.ts +16 -5
- package/Models/DatabaseModels/Domain.ts +1 -1
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +14 -5
- package/Models/DatabaseModels/Incident.ts +1 -1
- package/Models/DatabaseModels/IncidentSeverity.ts +44 -0
- package/Models/DatabaseModels/IncidentTemplate.ts +1 -1
- package/Models/DatabaseModels/Index.ts +4 -0
- package/Models/DatabaseModels/MetricType.ts +0 -2
- package/Models/DatabaseModels/MonitorStatusTimeline.ts +0 -2
- package/Models/DatabaseModels/MonitorTest.ts +0 -2
- package/Models/DatabaseModels/NetworkDevice.ts +234 -5
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +88 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +22 -0
- package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +501 -0
- package/Models/DatabaseModels/NetworkDeviceRole.ts +648 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -1
- package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +1 -1
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +0 -2
- package/Models/DatabaseModels/StatusPageAnnouncementTemplate.ts +0 -2
- package/Models/DatabaseModels/StatusPagePrivateUser.ts +0 -2
- package/Models/DatabaseModels/StatusPageResource.ts +0 -2
- package/Models/DatabaseModels/StatusPageSubscriber.ts +0 -2
- package/Models/DatabaseModels/ThreatIntelFeed.ts +16 -5
- package/Server/API/GlobalConfigAPI.ts +362 -183
- package/Server/API/TelemetryAPI.ts +42 -4
- package/Server/EnvironmentConfig.ts +112 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.ts +59 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.ts +72 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Middleware/MultipartFormData.ts +118 -32
- package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +9 -1
- package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +9 -1
- package/Server/Services/AlertGroupingEngineService.ts +9 -1
- package/Server/Services/AlertLabelRuleEngineService.ts +9 -1
- package/Server/Services/AlertOnCallRuleEngineService.ts +9 -1
- package/Server/Services/AlertOwnerRuleEngineService.ts +9 -1
- package/Server/Services/AlertPrivacyRuleEngineService.ts +9 -1
- package/Server/Services/AlertReminderRuleService.ts +9 -1
- package/Server/Services/AutoRemediationRuleEngineService.ts +9 -1
- package/Server/Services/CephClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/CloudResourceLabelRuleEngineService.ts +9 -1
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DashboardLabelRuleEngineService.ts +9 -1
- package/Server/Services/DashboardOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DatabaseService.ts +39 -9
- package/Server/Services/DockerHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/HostLabelRuleEngineService.ts +9 -1
- package/Server/Services/HostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +9 -1
- package/Server/Services/IncidentGroupingEngineService.ts +9 -1
- package/Server/Services/IncidentLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncidentOnCallRuleEngineService.ts +9 -1
- package/Server/Services/IncidentOwnerRuleEngineService.ts +9 -1
- package/Server/Services/IncidentPrivacyRuleEngineService.ts +9 -1
- package/Server/Services/IncidentReminderRuleService.ts +9 -1
- package/Server/Services/IncidentSlaRuleService.ts +9 -1
- package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/Index.ts +4 -0
- package/Server/Services/IoTFleetLabelRuleEngineService.ts +9 -1
- package/Server/Services/IoTFleetOwnerRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/KubernetesResourceService.ts +5 -1
- package/Server/Services/MonitorLabelRuleEngineService.ts +9 -1
- package/Server/Services/MonitorOwnerRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +35 -0
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +96 -0
- package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceOidTemplateService.ts +201 -0
- package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/NetworkDeviceRoleService.ts +90 -0
- package/Server/Services/NetworkDeviceService.ts +209 -1
- package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +9 -1
- package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +9 -1
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +9 -1
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ProjectService.ts +85 -0
- package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +9 -1
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RumApplicationLabelRuleEngineService.ts +9 -1
- package/Server/Services/RumApplicationOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RunbookLabelRuleEngineService.ts +9 -1
- package/Server/Services/RunbookOwnerRuleEngineService.ts +9 -1
- package/Server/Services/RunbookRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +9 -1
- package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +9 -1
- package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +9 -1
- package/Server/Services/ServiceLabelRuleEngineService.ts +9 -1
- package/Server/Services/ServiceOwnerRuleEngineService.ts +9 -1
- package/Server/Services/StatusPageLabelRuleEngineService.ts +9 -1
- package/Server/Services/StatusPageMonitorRuleEngineService.ts +7 -0
- package/Server/Services/StatusPageOwnerRuleEngineService.ts +9 -1
- package/Server/Services/TelemetrySourceMapService.ts +266 -23
- package/Server/Services/UserNotificationSettingService.ts +0 -6
- package/Server/Services/UserService.ts +27 -0
- package/Server/Services/WorkflowLabelRuleEngineService.ts +9 -1
- package/Server/Services/WorkflowOwnerRuleEngineService.ts +9 -1
- package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +186 -0
- package/Server/Utils/Monitor/CapturedMetricAttributeUtil.ts +245 -0
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +21 -2
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +55 -21
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +32 -0
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +15 -2
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +18 -1
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +10 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +34 -0
- package/Server/Utils/Rules/RuleEngineRuleRead.ts +48 -0
- package/Server/Utils/Telemetry/ExceptionSanitizer.ts +14 -1
- package/Server/Utils/Telemetry/LogExceptionExtractor.ts +14 -2
- package/Server/Utils/Telemetry/SourceMapResolver.ts +16 -5
- package/Server/Utils/Telemetry/StackTraceParser.ts +399 -0
- package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +31 -1
- package/Tests/App/Dashboard/DashboardChartWidgetZoom.test.tsx +35 -8
- package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +107 -3
- package/Tests/App/Dashboard/DashboardWideChartZoom.test.tsx +401 -0
- package/Tests/App/Dashboard/EventOverlayHook.test.tsx +125 -0
- package/Tests/App/Dashboard/HeaderImageAssets.test.tsx +93 -0
- package/Tests/App/Dashboard/MonitorTemplateColumnAndFacet.test.tsx +318 -0
- package/Tests/App/Dashboard/NetworkDeviceBulkDelete.test.tsx +357 -0
- package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +590 -0
- package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -3
- package/Tests/App/Dashboard/SideMenuHarness.tsx +11 -3
- package/Tests/App/Dashboard/UserElementEmail.test.tsx +12 -4
- package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +1 -1
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +14 -0
- package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +543 -0
- package/Tests/Models/SecurityDomainAccessControl.test.ts +429 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +657 -0
- package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +84 -6
- package/Tests/Server/API/TelemetryResolveStackTraceAPI.test.ts +805 -0
- package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +32 -7
- package/Tests/Server/Infrastructure/Postgres/NetworkDeviceRoleTableMigration.test.ts +476 -0
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +1144 -0
- package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
- package/Tests/Server/Services/DatabaseServiceGenerateSlug.test.ts +215 -0
- package/Tests/Server/Services/MonitorLabelRuleEngineScale.test.ts +520 -0
- package/Tests/Server/Services/NetworkDeviceOidTemplateService.test.ts +332 -0
- package/Tests/Server/Services/NetworkDeviceOidTemplateWriteGuards.test.ts +409 -0
- package/Tests/Server/Services/NetworkDeviceRoleModel.test.ts +672 -0
- package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +1 -1
- package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +67 -4
- package/Tests/Server/Services/RuleEngineRuleFetchLimit.test.ts +239 -0
- package/Tests/Server/Services/ScheduledMaintenanceSubscriberEndTime.test.ts +369 -0
- package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -2
- package/Tests/Server/Services/UserNotificationSettingMonitorDefaults.test.ts +248 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +43 -2
- package/Tests/Server/Services/UserServiceSeatLimit.test.ts +182 -0
- package/Tests/Server/Types/AnalyticsDatabase/SecurityEventModelPermission.test.ts +255 -0
- package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +212 -0
- package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +413 -0
- package/Tests/Server/Utils/BasicCron.test.ts +283 -0
- package/Tests/Server/Utils/CodeRepository.test.ts +689 -0
- package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +495 -0
- package/Tests/Server/Utils/ExceptionSanitizer.test.ts +77 -0
- package/Tests/Server/Utils/IncomingCallPhoneNumber.test.ts +174 -0
- package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +284 -0
- package/Tests/Server/Utils/Monitor/MonitorCustomMetricAttributes.test.ts +503 -0
- package/Tests/Server/Utils/Monitor/MonitorTemplatePrototypePollution.test.ts +106 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +33 -4
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +14 -4
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +44 -0
- package/Tests/Server/Utils/OpenAPISpec.test.ts +536 -0
- package/Tests/Server/Utils/Rules/RuleEngineRuleRead.test.ts +115 -0
- package/Tests/Server/Utils/StackTraceParser.test.ts +610 -0
- package/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.ts +0 -0
- package/Tests/Server/Utils/Telemetry/SourceMapLimits.test.ts +656 -0
- package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +100 -0
- package/Tests/Types/Monitor/SnmpMonitor/SnmpOidListUtil.test.ts +454 -0
- package/Tests/Types/NetworkDevice/DefaultNetworkDeviceRole.test.ts +417 -0
- package/Tests/Types/SecurityRolePermissions.test.ts +193 -0
- package/Tests/UI/Components/Charts/AnnotationLayout.test.ts +773 -0
- package/Tests/UI/Components/Charts/ChartAnnotationRail.test.tsx +789 -0
- package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +254 -0
- package/Tests/UI/Components/Charts/ChartClickDoubleClickDisambiguation.test.tsx +221 -0
- package/Tests/UI/Components/Charts/ChartDoubleClickReset.test.tsx +220 -0
- package/Tests/UI/Components/Charts/TimeAnnotation.test.ts +471 -0
- package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +405 -0
- package/Tests/UI/Components/ErrorMessageRefreshControl.test.tsx +83 -0
- package/Tests/UI/Components/MarkdownConverters.test.ts +686 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +751 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableColumnCustomization.test.tsx +475 -43
- package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +341 -0
- package/Tests/UI/Components/ModelTable/ColumnPreference.test.ts +89 -0
- package/Tests/UI/Components/NavBarCommandKGating.test.tsx +103 -8
- package/Tests/UI/Components/OrderedStatesList.test.tsx +5 -5
- package/Tests/UI/Components/PendingProjectInvitations.test.tsx +1 -1
- package/Tests/UI/Components/SideMenuItem.test.tsx +30 -0
- package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +195 -0
- package/Tests/UI/Components/XAxis.test.ts +270 -5
- package/Tests/UI/Components/XAxisDaylightSaving.test.ts +113 -0
- package/Tests/UI/Styles/ChartFocusRing.test.ts +153 -0
- package/Tests/UI/Styles/ChartFocusRingCoverage.test.tsx +377 -0
- package/Tests/UI/Styles/ThemeStylesheet.ts +162 -0
- package/Tests/UI/Utils/TableColumnsToCsv.test.ts +30 -0
- package/Tests/UI/Utils/UseDashboardTimeRangeZoom.test.tsx +187 -0
- package/Tests/Utils/Dashboard/DashboardResourceListSharedArgs.test.ts +302 -0
- package/Tests/Utils/Dashboard/DashboardTimeRangeZoom.test.ts +242 -0
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +507 -0
- package/Tests/Utils/Monitor/NetworkDeviceRoleCatalog.test.ts +981 -0
- package/Tests/Utils/Monitor/NetworkTopologyRoleCatalog.test.ts +865 -0
- package/Tests/Utils/NetworkDevice/DeviceRoleKeyUtil.test.ts +538 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +951 -1
- package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +238 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +1056 -0
- package/Tests/Utils/NetworkDiscovery/ReverseDnsNameUtil.test.ts +882 -0
- package/Tests/Utils/Slo/SloEvaluation.test.ts +171 -0
- package/Tests/Utils/Slug.test.ts +61 -1
- package/Tests/jest.setup.ts +19 -0
- package/Types/Date.ts +39 -0
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +61 -0
- package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
- package/Types/NetworkDevice/DefaultNetworkDeviceRole.ts +145 -0
- package/Types/Permission.ts +141 -0
- package/Types/Rum/SessionReplay.ts +21 -0
- package/Types/Telemetry/SourceMap.ts +8 -0
- package/UI/Components/Charts/Area/AreaChart.tsx +7 -0
- package/UI/Components/Charts/Bar/BarChart.tsx +6 -0
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +9 -1
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.tsx +176 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.ts +745 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.tsx +576 -0
- package/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.tsx +204 -0
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +554 -545
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +337 -371
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +549 -540
- package/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.ts +7 -3
- package/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.ts +14 -3
- package/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.ts +13 -0
- package/UI/Components/Charts/Line/LineChart.tsx +7 -0
- package/UI/Components/Charts/Types/ChartEventKind.ts +13 -0
- package/UI/Components/Charts/Types/ReferenceRegionProps.ts +6 -0
- package/UI/Components/Charts/Types/TimeReferenceLineProps.ts +20 -3
- package/UI/Components/Charts/Utils/TimeAnnotation.ts +69 -35
- package/UI/Components/Charts/Utils/XAxis.ts +125 -18
- package/UI/Components/EditionLabel/EditionLabel.tsx +280 -26
- package/UI/Components/ErrorMessage/ErrorMessage.tsx +21 -10
- package/UI/Components/Feed/FeedItem.tsx +4 -5
- package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -2
- package/UI/Components/Header/UserProfile/UserProfile.tsx +1 -2
- package/UI/Components/Image/Image.tsx +20 -3
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +1 -2
- package/UI/Components/ModelTable/BaseModelTable.tsx +200 -39
- package/UI/Components/Navbar/NavBar.tsx +62 -13
- package/UI/Components/Navbar/NavBarMenuModal.tsx +7 -2
- package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +2 -0
- package/UI/Components/SideMenu/SideMenu.tsx +12 -2
- package/UI/Components/SideMenu/SideMenuItem.tsx +4 -1
- package/UI/Components/SideMenu/SideMenuSection.tsx +14 -2
- package/UI/Components/Table/TableHeader.tsx +64 -48
- package/UI/Components/Table/TableRow.tsx +13 -3
- package/UI/Styles/Theme.css +38 -0
- package/UI/Utils/UseDashboardTimeRangeZoom.ts +77 -0
- package/Utils/Dashboard/DashboardTimeRangeZoom.ts +118 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +271 -0
- package/Utils/Monitor/NetworkDeviceRoleCatalog.ts +232 -0
- package/Utils/Monitor/NetworkDeviceRoleUtil.ts +2 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +116 -33
- package/Utils/NetworkDevice/DeviceRoleKeyUtil.ts +137 -0
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +6 -0
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +141 -10
- package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +55 -3
- package/Utils/NetworkDiscovery/ReverseDnsNameUtil.ts +151 -0
- package/Utils/Rules/RuleEngineLimits.ts +32 -0
- package/Utils/Rules/RulePatternMatchUtil.ts +1 -1
- package/Utils/Slug.ts +34 -1
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js +48 -16
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +10 -5
- package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertState.js +0 -2
- package/build/dist/Models/DatabaseModels/AlertState.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DetectionRule.js +16 -5
- package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Domain.js +1 -1
- package/build/dist/Models/DatabaseModels/Domain.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +14 -5
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js +46 -1
- package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +4 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MetricType.js +0 -2
- package/build/dist/Models/DatabaseModels/MetricType.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js +0 -2
- package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTest.js +0 -2
- package/build/dist/Models/DatabaseModels/MonitorTest.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +239 -6
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +88 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +521 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js +677 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncementTemplate.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncementTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPagePrivateUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageResource.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js +0 -2
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +16 -5
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -1
- package/build/dist/Server/API/GlobalConfigAPI.js +293 -176
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +31 -3
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +83 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.js +39 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790800000000-AddNetworkDeviceRoleTable.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/MultipartFormData.js +93 -28
- package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js +8 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js +8 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +8 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +31 -5
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js +8 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js +8 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +4 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesResourceService.js +5 -1
- package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +30 -21
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +64 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js +180 -0
- package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceRoleService.js +70 -0
- package/build/dist/Server/Services/NetworkDeviceRoleService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceService.js +154 -1
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +65 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js +8 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +8 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +6 -0
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/TelemetrySourceMapService.js +213 -19
- package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js +0 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +25 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +8 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +8 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +145 -0
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js +201 -0
- package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +19 -2
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +42 -23
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +29 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +11 -2
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +16 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +10 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +33 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js +37 -0
- package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js +12 -1
- package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +14 -2
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +15 -5
- package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/StackTraceParser.js +307 -0
- package/build/dist/Server/Utils/Telemetry/StackTraceParser.js.map +1 -1
- package/build/dist/Types/Date.js +27 -0
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js +253 -0
- package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js.map +1 -0
- package/build/dist/Types/NetworkDevice/DefaultNetworkDeviceRole.js +105 -0
- package/build/dist/Types/NetworkDevice/DefaultNetworkDeviceRole.js.map +1 -0
- package/build/dist/Types/Permission.js +126 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplay.js +19 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +6 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js +83 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js +531 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js +264 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js +122 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +262 -234
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +146 -153
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +261 -233
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js +14 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js.map +1 -0
- package/build/dist/UI/Components/Charts/Line/LineChart.js +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Types/ChartEventKind.js +14 -0
- package/build/dist/UI/Components/Charts/Types/ChartEventKind.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +57 -28
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +103 -17
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +198 -23
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +15 -5
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +4 -5
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -2
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
- package/build/dist/UI/Components/Header/UserProfile/UserProfile.js.map +1 -1
- package/build/dist/UI/Components/Image/Image.js +6 -1
- package/build/dist/UI/Components/Image/Image.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +1 -2
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +143 -36
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js +44 -9
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +2 -2
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js +1 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenu.js +9 -6
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js +7 -2
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
- package/build/dist/UI/Components/Table/TableHeader.js +20 -22
- package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +13 -4
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Utils/UseDashboardTimeRangeZoom.js +42 -0
- package/build/dist/UI/Utils/UseDashboardTimeRangeZoom.js.map +1 -0
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js +74 -0
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js.map +1 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +153 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleCatalog.js +126 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleCatalog.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js +2 -1
- package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +67 -32
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceRoleKeyUtil.js +114 -0
- package/build/dist/Utils/NetworkDevice/DeviceRoleKeyUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +127 -7
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +50 -3
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js +132 -0
- package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js.map +1 -0
- package/build/dist/Utils/Rules/RuleEngineLimits.js +31 -0
- package/build/dist/Utils/Rules/RuleEngineLimits.js.map +1 -0
- package/build/dist/Utils/Rules/RulePatternMatchUtil.js +1 -1
- package/build/dist/Utils/Slug.js +31 -1
- package/build/dist/Utils/Slug.js.map +1 -1
- package/jest.config.json +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import DatabaseRequestType from "../../../../../Server/Types/BaseDatabase/DatabaseRequestType";
|
|
2
|
+
import ColumnPermissions from "../../../../../Server/Types/Database/Permissions/ColumnPermission";
|
|
3
|
+
import TablePermission from "../../../../../Server/Types/Database/Permissions/TablePermission";
|
|
4
|
+
import AlertSeverity from "../../../../../Models/DatabaseModels/AlertSeverity";
|
|
5
|
+
import DetectionRule from "../../../../../Models/DatabaseModels/DetectionRule";
|
|
6
|
+
import GoogleSecOpsConnection from "../../../../../Models/DatabaseModels/GoogleSecOpsConnection";
|
|
7
|
+
import IncidentSeverity from "../../../../../Models/DatabaseModels/IncidentSeverity";
|
|
8
|
+
import Label from "../../../../../Models/DatabaseModels/Label";
|
|
9
|
+
import TableView from "../../../../../Models/DatabaseModels/TableView";
|
|
10
|
+
import Team from "../../../../../Models/DatabaseModels/Team";
|
|
11
|
+
import ThreatIntelFeed from "../../../../../Models/DatabaseModels/ThreatIntelFeed";
|
|
12
|
+
import TelemetryException from "../../../../../Models/DatabaseModels/TelemetryException";
|
|
13
|
+
import DatabaseCommonInteractionProps from "../../../../../Types/BaseDatabase/DatabaseCommonInteractionProps";
|
|
14
|
+
import DatabaseCommonInteractionPropsUtil, {
|
|
15
|
+
PermissionType,
|
|
16
|
+
} from "../../../../../Types/BaseDatabase/DatabaseCommonInteractionPropsUtil";
|
|
17
|
+
import ObjectID from "../../../../../Types/ObjectID";
|
|
18
|
+
import Permission, {
|
|
19
|
+
UserPermission,
|
|
20
|
+
UserTenantAccessPermission,
|
|
21
|
+
} from "../../../../../Types/Permission";
|
|
22
|
+
import { describe, expect, test } from "@jest/globals";
|
|
23
|
+
|
|
24
|
+
/*
|
|
25
|
+
* The Security tiers as the API actually sees them.
|
|
26
|
+
*
|
|
27
|
+
* SecurityDomainAccessControl.test.ts reads the access lists off the model
|
|
28
|
+
* classes; this drives the two gates a real request passes through -
|
|
29
|
+
* TablePermission for the table and ColumnPermissions for the fields the page
|
|
30
|
+
* selects - for principals built the way AccessTokenService builds them.
|
|
31
|
+
*
|
|
32
|
+
* The question behind the whole change: an operator asked whether the security
|
|
33
|
+
* side of the product could be kept from people who have the rest of it. Before
|
|
34
|
+
* the Security tiers the answer was no, because ProjectMember was on every SIEM
|
|
35
|
+
* table's read list and every member of a project holds it. The "cannot"
|
|
36
|
+
* assertions below are that answer changing.
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
const projectId: ObjectID = ObjectID.generate();
|
|
40
|
+
const userId: ObjectID = ObjectID.generate();
|
|
41
|
+
|
|
42
|
+
/*
|
|
43
|
+
* The permission set a signed-in member carries: whatever their teams grant,
|
|
44
|
+
* plus the three the platform adds to anyone with a session inside a project.
|
|
45
|
+
* ProjectUser is deliberately included - it is what makes this a fair test.
|
|
46
|
+
* Every principal below is a real project member, so if a SIEM table were
|
|
47
|
+
* readable through ProjectUser these tests would pass for the wrong reason and
|
|
48
|
+
* the isolation would not exist.
|
|
49
|
+
*/
|
|
50
|
+
type MakePropsFunction = (
|
|
51
|
+
grantedByTeams: Array<Permission>,
|
|
52
|
+
) => DatabaseCommonInteractionProps;
|
|
53
|
+
|
|
54
|
+
const makeProps: MakePropsFunction = (
|
|
55
|
+
grantedByTeams: Array<Permission>,
|
|
56
|
+
): DatabaseCommonInteractionProps => {
|
|
57
|
+
const permissions: Array<Permission> = [
|
|
58
|
+
Permission.CurrentUser,
|
|
59
|
+
Permission.UnAuthorizedSsoUser,
|
|
60
|
+
Permission.ProjectUser,
|
|
61
|
+
...grantedByTeams,
|
|
62
|
+
];
|
|
63
|
+
|
|
64
|
+
const tenantPermission: UserTenantAccessPermission = {
|
|
65
|
+
projectId,
|
|
66
|
+
_type: "UserTenantAccessPermission",
|
|
67
|
+
permissions: permissions.map((permission: Permission): UserPermission => {
|
|
68
|
+
return {
|
|
69
|
+
_type: "UserPermission",
|
|
70
|
+
permission,
|
|
71
|
+
labelIds: [],
|
|
72
|
+
isBlockPermission: false,
|
|
73
|
+
};
|
|
74
|
+
}),
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
userId,
|
|
79
|
+
tenantId: projectId,
|
|
80
|
+
userTenantAccessPermission: {
|
|
81
|
+
[projectId.toString()]: tenantPermission,
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
type ModelType = { new (): any };
|
|
87
|
+
|
|
88
|
+
type CanFunction = (
|
|
89
|
+
modelType: ModelType,
|
|
90
|
+
props: DatabaseCommonInteractionProps,
|
|
91
|
+
requestType: DatabaseRequestType,
|
|
92
|
+
) => boolean;
|
|
93
|
+
|
|
94
|
+
const can: CanFunction = (
|
|
95
|
+
modelType: ModelType,
|
|
96
|
+
props: DatabaseCommonInteractionProps,
|
|
97
|
+
requestType: DatabaseRequestType,
|
|
98
|
+
): boolean => {
|
|
99
|
+
try {
|
|
100
|
+
TablePermission.checkTableLevelPermissions(modelType, props, requestType);
|
|
101
|
+
return true;
|
|
102
|
+
} catch {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
type CanReadFunction = (
|
|
108
|
+
modelType: ModelType,
|
|
109
|
+
props: DatabaseCommonInteractionProps,
|
|
110
|
+
) => boolean;
|
|
111
|
+
|
|
112
|
+
const canRead: CanReadFunction = (
|
|
113
|
+
modelType: ModelType,
|
|
114
|
+
props: DatabaseCommonInteractionProps,
|
|
115
|
+
): boolean => {
|
|
116
|
+
return can(modelType, props, DatabaseRequestType.Read);
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
type ReadableColumnsFunction = (
|
|
120
|
+
modelType: ModelType,
|
|
121
|
+
props: DatabaseCommonInteractionProps,
|
|
122
|
+
) => Array<string>;
|
|
123
|
+
|
|
124
|
+
const readableColumns: ReadableColumnsFunction = (
|
|
125
|
+
modelType: ModelType,
|
|
126
|
+
props: DatabaseCommonInteractionProps,
|
|
127
|
+
): Array<string> => {
|
|
128
|
+
return ColumnPermissions.getModelColumnsByPermissions(
|
|
129
|
+
modelType,
|
|
130
|
+
DatabaseCommonInteractionPropsUtil.getUserPermissions(
|
|
131
|
+
props,
|
|
132
|
+
PermissionType.Allow,
|
|
133
|
+
),
|
|
134
|
+
DatabaseRequestType.Read,
|
|
135
|
+
).columns;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
const SIEM_MODELS: Array<[string, ModelType]> = [
|
|
139
|
+
["DetectionRule", DetectionRule],
|
|
140
|
+
["ThreatIntelFeed", ThreatIntelFeed],
|
|
141
|
+
["GoogleSecOpsConnection", GoogleSecOpsConnection],
|
|
142
|
+
];
|
|
143
|
+
|
|
144
|
+
describe("Security roles reach the SIEM", () => {
|
|
145
|
+
const securityViewer: DatabaseCommonInteractionProps = makeProps([
|
|
146
|
+
Permission.SecurityViewer,
|
|
147
|
+
]);
|
|
148
|
+
const securityMember: DatabaseCommonInteractionProps = makeProps([
|
|
149
|
+
Permission.SecurityMember,
|
|
150
|
+
]);
|
|
151
|
+
const securityAdmin: DatabaseCommonInteractionProps = makeProps([
|
|
152
|
+
Permission.SecurityAdmin,
|
|
153
|
+
]);
|
|
154
|
+
|
|
155
|
+
test.each(SIEM_MODELS)(
|
|
156
|
+
"Security Viewer can read %s",
|
|
157
|
+
(_name: string, modelType: ModelType) => {
|
|
158
|
+
expect(canRead(modelType, securityViewer)).toBe(true);
|
|
159
|
+
},
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
test.each(SIEM_MODELS)(
|
|
163
|
+
"Security Member can read %s",
|
|
164
|
+
(_name: string, modelType: ModelType) => {
|
|
165
|
+
expect(canRead(modelType, securityMember)).toBe(true);
|
|
166
|
+
},
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
test.each(SIEM_MODELS)(
|
|
170
|
+
"Security Admin can read %s",
|
|
171
|
+
(_name: string, modelType: ModelType) => {
|
|
172
|
+
expect(canRead(modelType, securityAdmin)).toBe(true);
|
|
173
|
+
},
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
/*
|
|
177
|
+
* The columns the Detection Rules page selects. A table gate that passes and
|
|
178
|
+
* a column gate that does not is a page that renders an error over itself,
|
|
179
|
+
* which is how issue #3305 presented.
|
|
180
|
+
*/
|
|
181
|
+
test("Security Viewer can select the columns the detection rules table reads", () => {
|
|
182
|
+
const columns: Array<string> = readableColumns(
|
|
183
|
+
DetectionRule,
|
|
184
|
+
securityViewer,
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
for (const column of [
|
|
188
|
+
"name",
|
|
189
|
+
"description",
|
|
190
|
+
"isEnabled",
|
|
191
|
+
"projectId",
|
|
192
|
+
"createdAt",
|
|
193
|
+
]) {
|
|
194
|
+
expect(columns).toContain(column);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
test("Security Viewer cannot write anything", () => {
|
|
199
|
+
const writes: Array<string> = [];
|
|
200
|
+
|
|
201
|
+
for (const [name, modelType] of SIEM_MODELS) {
|
|
202
|
+
for (const requestType of [
|
|
203
|
+
DatabaseRequestType.Create,
|
|
204
|
+
DatabaseRequestType.Update,
|
|
205
|
+
DatabaseRequestType.Delete,
|
|
206
|
+
]) {
|
|
207
|
+
if (can(modelType, securityViewer, requestType)) {
|
|
208
|
+
writes.push(`SecurityViewer can ${requestType} ${name}`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
expect(writes).toEqual([]);
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
test("Security Member can author detections and threat intel feeds", () => {
|
|
217
|
+
for (const modelType of [DetectionRule, ThreatIntelFeed]) {
|
|
218
|
+
for (const requestType of [
|
|
219
|
+
DatabaseRequestType.Create,
|
|
220
|
+
DatabaseRequestType.Update,
|
|
221
|
+
DatabaseRequestType.Delete,
|
|
222
|
+
]) {
|
|
223
|
+
expect(can(modelType, securityMember, requestType)).toBe(true);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
/*
|
|
229
|
+
* Connecting the project to someone's Chronicle instance, and storing the
|
|
230
|
+
* service-account key that reads it, is administration of the SIEM. A Member
|
|
231
|
+
* uses the SIEM; they do not get to repoint it at another source.
|
|
232
|
+
*/
|
|
233
|
+
test("Security Member cannot configure the SecOps connector", () => {
|
|
234
|
+
expect(canRead(GoogleSecOpsConnection, securityMember)).toBe(true);
|
|
235
|
+
|
|
236
|
+
for (const requestType of [
|
|
237
|
+
DatabaseRequestType.Create,
|
|
238
|
+
DatabaseRequestType.Update,
|
|
239
|
+
DatabaseRequestType.Delete,
|
|
240
|
+
]) {
|
|
241
|
+
expect(can(GoogleSecOpsConnection, securityMember, requestType)).toBe(
|
|
242
|
+
false,
|
|
243
|
+
);
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
test("Security Admin can configure the SecOps connector", () => {
|
|
248
|
+
for (const requestType of [
|
|
249
|
+
DatabaseRequestType.Create,
|
|
250
|
+
DatabaseRequestType.Update,
|
|
251
|
+
DatabaseRequestType.Delete,
|
|
252
|
+
]) {
|
|
253
|
+
expect(can(GoogleSecOpsConnection, securityAdmin, requestType)).toBe(
|
|
254
|
+
true,
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
/*
|
|
260
|
+
* A Sigma rule and a threat-intel feed each choose the severity of the alert
|
|
261
|
+
* or incident they open, so both forms select from the severity tables. The
|
|
262
|
+
* Security tiers hold no alert or incident permission, so without an explicit
|
|
263
|
+
* read grant the dropdown fails and the rule cannot be configured - the same
|
|
264
|
+
* shape of bug as the saved-views one, reached from a different direction.
|
|
265
|
+
*/
|
|
266
|
+
test("Security roles can populate the severity dropdowns their forms use", () => {
|
|
267
|
+
for (const props of [securityViewer, securityMember, securityAdmin]) {
|
|
268
|
+
expect(canRead(AlertSeverity, props)).toBe(true);
|
|
269
|
+
expect(canRead(IncidentSeverity, props)).toBe(true);
|
|
270
|
+
|
|
271
|
+
expect(readableColumns(AlertSeverity, props)).toContain("name");
|
|
272
|
+
expect(readableColumns(IncidentSeverity, props)).toContain("name");
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
/*
|
|
277
|
+
* That grant is read-only and stops at the severity list. A security role
|
|
278
|
+
* must not become a back door into administering the alert domain.
|
|
279
|
+
*/
|
|
280
|
+
test("the severity grant does not let a Security role edit severities", () => {
|
|
281
|
+
for (const modelType of [AlertSeverity, IncidentSeverity]) {
|
|
282
|
+
for (const requestType of [
|
|
283
|
+
DatabaseRequestType.Create,
|
|
284
|
+
DatabaseRequestType.Update,
|
|
285
|
+
DatabaseRequestType.Delete,
|
|
286
|
+
]) {
|
|
287
|
+
expect(can(modelType, securityAdmin, requestType)).toBe(false);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
/*
|
|
293
|
+
* The Security tiers are a domain scope like any other, so the dashboard
|
|
294
|
+
* furniture every page mounts has to keep working for someone who holds
|
|
295
|
+
* nothing else - otherwise the security pages error the way the monitor pages
|
|
296
|
+
* did in #3305.
|
|
297
|
+
*/
|
|
298
|
+
test("a Security-only user can still use the dashboard around the page", () => {
|
|
299
|
+
for (const modelType of [TableView, Label, Team]) {
|
|
300
|
+
expect(canRead(modelType, securityViewer)).toBe(true);
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
describe("Nobody else reaches the SIEM", () => {
|
|
306
|
+
/*
|
|
307
|
+
* The regression guard. Each of these principals could read every security
|
|
308
|
+
* event, detection rule and threat-intel feed in the project before the
|
|
309
|
+
* Security tiers existed, and the request behind this change was to be able
|
|
310
|
+
* to stop that.
|
|
311
|
+
*/
|
|
312
|
+
const excluded: Array<[string, Permission]> = [
|
|
313
|
+
["Project Member", Permission.ProjectMember],
|
|
314
|
+
["project-wide Viewer", Permission.Viewer],
|
|
315
|
+
["Telemetry Admin", Permission.TelemetryAdmin],
|
|
316
|
+
["Telemetry Member", Permission.TelemetryMember],
|
|
317
|
+
["Telemetry Viewer", Permission.TelemetryViewer],
|
|
318
|
+
["Monitor Admin", Permission.MonitorAdmin],
|
|
319
|
+
["Incident Admin", Permission.IncidentAdmin],
|
|
320
|
+
["Settings Admin", Permission.SettingsAdmin],
|
|
321
|
+
];
|
|
322
|
+
|
|
323
|
+
test.each(excluded)(
|
|
324
|
+
"a %s cannot read the SIEM",
|
|
325
|
+
(_label: string, permission: Permission) => {
|
|
326
|
+
const props: DatabaseCommonInteractionProps = makeProps([permission]);
|
|
327
|
+
const reachable: Array<string> = [];
|
|
328
|
+
|
|
329
|
+
for (const [name, modelType] of SIEM_MODELS) {
|
|
330
|
+
if (canRead(modelType, props)) {
|
|
331
|
+
reachable.push(name);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
expect(reachable).toEqual([]);
|
|
336
|
+
},
|
|
337
|
+
);
|
|
338
|
+
|
|
339
|
+
test.each(excluded)(
|
|
340
|
+
"a %s cannot write to the SIEM either",
|
|
341
|
+
(_label: string, permission: Permission) => {
|
|
342
|
+
const props: DatabaseCommonInteractionProps = makeProps([permission]);
|
|
343
|
+
const reachable: Array<string> = [];
|
|
344
|
+
|
|
345
|
+
for (const [name, modelType] of SIEM_MODELS) {
|
|
346
|
+
for (const requestType of [
|
|
347
|
+
DatabaseRequestType.Create,
|
|
348
|
+
DatabaseRequestType.Update,
|
|
349
|
+
DatabaseRequestType.Delete,
|
|
350
|
+
]) {
|
|
351
|
+
if (can(modelType, props, requestType)) {
|
|
352
|
+
reachable.push(`${requestType} ${name}`);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
expect(reachable).toEqual([]);
|
|
358
|
+
},
|
|
359
|
+
);
|
|
360
|
+
|
|
361
|
+
/*
|
|
362
|
+
* The exact pairing the operator asked about, stated in one place: the person
|
|
363
|
+
* with the run of every log, metric and trace in the project, and the person
|
|
364
|
+
* with the SIEM, can now be two different people - in both directions.
|
|
365
|
+
*/
|
|
366
|
+
test("Telemetry and Security are independent grants", () => {
|
|
367
|
+
const telemetryAdmin: DatabaseCommonInteractionProps = makeProps([
|
|
368
|
+
Permission.TelemetryAdmin,
|
|
369
|
+
]);
|
|
370
|
+
const securityAdmin: DatabaseCommonInteractionProps = makeProps([
|
|
371
|
+
Permission.SecurityAdmin,
|
|
372
|
+
]);
|
|
373
|
+
|
|
374
|
+
expect(canRead(TelemetryException, telemetryAdmin)).toBe(true);
|
|
375
|
+
expect(canRead(DetectionRule, telemetryAdmin)).toBe(false);
|
|
376
|
+
|
|
377
|
+
expect(canRead(DetectionRule, securityAdmin)).toBe(true);
|
|
378
|
+
expect(canRead(TelemetryException, securityAdmin)).toBe(false);
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
/*
|
|
382
|
+
* Owner and Admin keep their access: they are who grants the Security tiers,
|
|
383
|
+
* so locking them out would leave a project with a SIEM nobody could open and
|
|
384
|
+
* no way to discover why.
|
|
385
|
+
*/
|
|
386
|
+
test("the project's own administrators are not locked out", () => {
|
|
387
|
+
for (const permission of [
|
|
388
|
+
Permission.ProjectOwner,
|
|
389
|
+
Permission.ProjectAdmin,
|
|
390
|
+
]) {
|
|
391
|
+
const props: DatabaseCommonInteractionProps = makeProps([permission]);
|
|
392
|
+
|
|
393
|
+
for (const [, modelType] of SIEM_MODELS) {
|
|
394
|
+
expect(canRead(modelType, props)).toBe(true);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
/*
|
|
400
|
+
* An API key scoped to one granular permission is how integrations read the
|
|
401
|
+
* SIEM without holding a role. The tiers were added beside these, not in
|
|
402
|
+
* place of them.
|
|
403
|
+
*/
|
|
404
|
+
test("a granular-only principal still reaches the table it was granted", () => {
|
|
405
|
+
const detectionRuleReader: DatabaseCommonInteractionProps = makeProps([
|
|
406
|
+
Permission.ReadProjectDetectionRule,
|
|
407
|
+
]);
|
|
408
|
+
|
|
409
|
+
expect(canRead(DetectionRule, detectionRuleReader)).toBe(true);
|
|
410
|
+
expect(canRead(ThreatIntelFeed, detectionRuleReader)).toBe(false);
|
|
411
|
+
expect(canRead(GoogleSecOpsConnection, detectionRuleReader)).toBe(false);
|
|
412
|
+
});
|
|
413
|
+
});
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, jest, test } from "@jest/globals";
|
|
2
|
+
import cron from "node-cron";
|
|
3
|
+
import logger from "../../../Server/Utils/Logger";
|
|
4
|
+
import BasicCron from "../../../Server/Utils/BasicCron";
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* The wrapper every scheduled job in the app is registered through.
|
|
8
|
+
*
|
|
9
|
+
* Its job is not scheduling — node-cron does that — it is making sure one bad
|
|
10
|
+
* run cannot end the schedule. A cron callback that throws takes its timer
|
|
11
|
+
* with it, so a job that failed once at 03:00 would simply never run again,
|
|
12
|
+
* and nothing would say so: the next morning looks exactly like a night with
|
|
13
|
+
* nothing to do. That is why the tick is wrapped, and it is the behaviour
|
|
14
|
+
* worth pinning here.
|
|
15
|
+
*
|
|
16
|
+
* The startup run is deliberately NOT inside that guard, and the asymmetry is
|
|
17
|
+
* the interesting part of this module — see the last block.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
jest.mock("node-cron", () => {
|
|
21
|
+
return { __esModule: true, default: { schedule: jest.fn() } };
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
jest.mock("../../../Server/Utils/Logger", () => {
|
|
25
|
+
return {
|
|
26
|
+
__esModule: true,
|
|
27
|
+
default: {
|
|
28
|
+
debug: jest.fn(),
|
|
29
|
+
info: jest.fn(),
|
|
30
|
+
warn: jest.fn(),
|
|
31
|
+
error: jest.fn(),
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const mockedCron: { schedule: jest.Mock } = cron as unknown as {
|
|
37
|
+
schedule: jest.Mock;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const mockedLogger: { debug: jest.Mock; error: jest.Mock } =
|
|
41
|
+
logger as unknown as { debug: jest.Mock; error: jest.Mock };
|
|
42
|
+
|
|
43
|
+
const EVERY_FIVE_MINUTES: string = "*/5 * * * *";
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
* The run function BasicCron is handed. jest.Mock's first type parameter is
|
|
47
|
+
* the RETURN type, so this is "a mock taking no arguments and answering with
|
|
48
|
+
* a promise" - named once here rather than restated at every call site.
|
|
49
|
+
*/
|
|
50
|
+
type RunMock = jest.Mock<Promise<void>, []>;
|
|
51
|
+
|
|
52
|
+
function succeedingRun(): RunMock {
|
|
53
|
+
const mock: RunMock = jest.fn() as unknown as RunMock;
|
|
54
|
+
mock.mockImplementation((): Promise<void> => {
|
|
55
|
+
return Promise.resolve();
|
|
56
|
+
});
|
|
57
|
+
return mock;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function failingRun(message: string): RunMock {
|
|
61
|
+
const mock: RunMock = jest.fn() as unknown as RunMock;
|
|
62
|
+
mock.mockImplementation((): Promise<void> => {
|
|
63
|
+
return Promise.reject(new Error(message));
|
|
64
|
+
});
|
|
65
|
+
return mock;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/*
|
|
69
|
+
* BasicCron is declared as returning void but its implementation is async, so
|
|
70
|
+
* every call site here goes through this. That mismatch is not incidental
|
|
71
|
+
* tidying - it is the reason a startup failure reaches callers as an
|
|
72
|
+
* unhandled rejection rather than a thrown error, which the last test covers.
|
|
73
|
+
*/
|
|
74
|
+
function startCron(data: {
|
|
75
|
+
jobName: string;
|
|
76
|
+
schedule: string;
|
|
77
|
+
runOnStartup: boolean;
|
|
78
|
+
runFunction: RunMock;
|
|
79
|
+
}): Promise<void> {
|
|
80
|
+
return BasicCron({
|
|
81
|
+
jobName: data.jobName,
|
|
82
|
+
options: {
|
|
83
|
+
schedule: data.schedule,
|
|
84
|
+
runOnStartup: data.runOnStartup,
|
|
85
|
+
},
|
|
86
|
+
runFunction: data.runFunction as never,
|
|
87
|
+
}) as unknown as Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/*
|
|
91
|
+
* The callback node-cron was handed. Invoking it is what "the schedule fired"
|
|
92
|
+
* means, without waiting five real minutes for it.
|
|
93
|
+
*/
|
|
94
|
+
function scheduledTick(): () => Promise<void> {
|
|
95
|
+
return mockedCron.schedule.mock.calls[0]![1] as () => Promise<void>;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
describe("BasicCron", () => {
|
|
99
|
+
beforeEach(() => {
|
|
100
|
+
jest.clearAllMocks();
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
describe("registration", () => {
|
|
104
|
+
test("registers the job on the schedule it was given", async () => {
|
|
105
|
+
const run: RunMock = succeedingRun();
|
|
106
|
+
|
|
107
|
+
await startCron({
|
|
108
|
+
jobName: "TestJob",
|
|
109
|
+
schedule: EVERY_FIVE_MINUTES,
|
|
110
|
+
runOnStartup: false,
|
|
111
|
+
runFunction: run,
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
expect(mockedCron.schedule).toHaveBeenCalledTimes(1);
|
|
115
|
+
expect(mockedCron.schedule.mock.calls[0]![0]).toBe(EVERY_FIVE_MINUTES);
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
/*
|
|
119
|
+
* Registering must not run the job. A job that ran once per process start
|
|
120
|
+
* would fire on every rolling restart and every replica.
|
|
121
|
+
*/
|
|
122
|
+
test("registering alone does not run the job", async () => {
|
|
123
|
+
const run: RunMock = succeedingRun();
|
|
124
|
+
|
|
125
|
+
await startCron({
|
|
126
|
+
jobName: "TestJob",
|
|
127
|
+
schedule: EVERY_FIVE_MINUTES,
|
|
128
|
+
runOnStartup: false,
|
|
129
|
+
runFunction: run,
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
expect(run).not.toHaveBeenCalled();
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
describe("a scheduled run", () => {
|
|
137
|
+
test("runs the job when the schedule fires", async () => {
|
|
138
|
+
const run: RunMock = succeedingRun();
|
|
139
|
+
|
|
140
|
+
await startCron({
|
|
141
|
+
jobName: "TestJob",
|
|
142
|
+
schedule: EVERY_FIVE_MINUTES,
|
|
143
|
+
runOnStartup: false,
|
|
144
|
+
runFunction: run,
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
await scheduledTick()();
|
|
148
|
+
|
|
149
|
+
expect(run).toHaveBeenCalledTimes(1);
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
/*
|
|
153
|
+
* The whole point of the wrapper. An unhandled throw inside a node-cron
|
|
154
|
+
* callback ends that timer, so the job silently stops running for the
|
|
155
|
+
* lifetime of the process - and a job that never runs looks identical to
|
|
156
|
+
* a job with nothing to do.
|
|
157
|
+
*/
|
|
158
|
+
test("a throwing run is swallowed, so the schedule survives it", async () => {
|
|
159
|
+
const run: RunMock = failingRun("job blew up");
|
|
160
|
+
|
|
161
|
+
await startCron({
|
|
162
|
+
jobName: "TestJob",
|
|
163
|
+
schedule: EVERY_FIVE_MINUTES,
|
|
164
|
+
runOnStartup: false,
|
|
165
|
+
runFunction: run,
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
await expect(scheduledTick()()).resolves.toBeUndefined();
|
|
169
|
+
expect(mockedLogger.error).toHaveBeenCalled();
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
test("a failed run does not stop later runs from firing", async () => {
|
|
173
|
+
const run: RunMock = succeedingRun();
|
|
174
|
+
run.mockImplementationOnce((): Promise<void> => {
|
|
175
|
+
return Promise.reject(new Error("first run blew up"));
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
await startCron({
|
|
179
|
+
jobName: "TestJob",
|
|
180
|
+
schedule: EVERY_FIVE_MINUTES,
|
|
181
|
+
runOnStartup: false,
|
|
182
|
+
runFunction: run,
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
await scheduledTick()();
|
|
186
|
+
await scheduledTick()();
|
|
187
|
+
|
|
188
|
+
expect(run).toHaveBeenCalledTimes(2);
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
/*
|
|
192
|
+
* The job's name is what makes a line in the log attributable to one of
|
|
193
|
+
* many scheduled jobs. Logged without it, a failure says only that
|
|
194
|
+
* something somewhere failed.
|
|
195
|
+
*/
|
|
196
|
+
test("the job's name is in what it logs", async () => {
|
|
197
|
+
const run: RunMock = succeedingRun();
|
|
198
|
+
|
|
199
|
+
await startCron({
|
|
200
|
+
jobName: "DistinctiveJobName",
|
|
201
|
+
schedule: EVERY_FIVE_MINUTES,
|
|
202
|
+
runOnStartup: false,
|
|
203
|
+
runFunction: run,
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
await scheduledTick()();
|
|
207
|
+
|
|
208
|
+
const logged: string = mockedLogger.debug.mock.calls
|
|
209
|
+
.map((callArgs: Array<unknown>): string => {
|
|
210
|
+
return String(callArgs[0]);
|
|
211
|
+
})
|
|
212
|
+
.join("\n");
|
|
213
|
+
|
|
214
|
+
expect(logged).toContain("DistinctiveJobName");
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
describe("the startup run", () => {
|
|
219
|
+
test("runs the job immediately when asked to", async () => {
|
|
220
|
+
const run: RunMock = succeedingRun();
|
|
221
|
+
|
|
222
|
+
await startCron({
|
|
223
|
+
jobName: "TestJob",
|
|
224
|
+
schedule: EVERY_FIVE_MINUTES,
|
|
225
|
+
runOnStartup: true,
|
|
226
|
+
runFunction: run,
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
expect(run).toHaveBeenCalledTimes(1);
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
/*
|
|
233
|
+
* The startup run is in addition to the schedule, not instead of it - a
|
|
234
|
+
* job that ran once at boot and was never registered would go quiet after
|
|
235
|
+
* the first tick.
|
|
236
|
+
*/
|
|
237
|
+
test("it still registers the recurring schedule", async () => {
|
|
238
|
+
const run: RunMock = succeedingRun();
|
|
239
|
+
|
|
240
|
+
await startCron({
|
|
241
|
+
jobName: "TestJob",
|
|
242
|
+
schedule: EVERY_FIVE_MINUTES,
|
|
243
|
+
runOnStartup: true,
|
|
244
|
+
runFunction: run,
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
expect(mockedCron.schedule).toHaveBeenCalledTimes(1);
|
|
248
|
+
|
|
249
|
+
await scheduledTick()();
|
|
250
|
+
|
|
251
|
+
expect(run).toHaveBeenCalledTimes(2);
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
/*
|
|
255
|
+
* DELIBERATE ASYMMETRY, pinned so a later reader does not "fix" it by
|
|
256
|
+
* reflex: unlike a scheduled tick, a startup failure is NOT swallowed. It
|
|
257
|
+
* rejects out of BasicCron.
|
|
258
|
+
*
|
|
259
|
+
* That is the right way round. A scheduled run fails against a live
|
|
260
|
+
* system and the next tick is a genuine retry, so surviving it is what
|
|
261
|
+
* keeps the job alive. A startup run fails against a process that is
|
|
262
|
+
* still coming up - usually because configuration or a dependency is
|
|
263
|
+
* wrong - and a boot that swallowed that would come up looking healthy
|
|
264
|
+
* with a job that never worked.
|
|
265
|
+
*
|
|
266
|
+
* Note the callers' side of this: BasicCronFunction is typed as returning
|
|
267
|
+
* void, so a caller that does not await gets an unhandled rejection
|
|
268
|
+
* rather than a thrown error. Loud either way, which is the intent.
|
|
269
|
+
*/
|
|
270
|
+
test("a startup failure propagates rather than being swallowed", async () => {
|
|
271
|
+
const run: RunMock = failingRun("bad configuration at boot");
|
|
272
|
+
|
|
273
|
+
await expect(
|
|
274
|
+
startCron({
|
|
275
|
+
jobName: "TestJob",
|
|
276
|
+
schedule: EVERY_FIVE_MINUTES,
|
|
277
|
+
runOnStartup: true,
|
|
278
|
+
runFunction: run,
|
|
279
|
+
}),
|
|
280
|
+
).rejects.toThrow("bad configuration at boot");
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
});
|