@oneuptime/common 12.0.32 → 12.0.33
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/Span.ts +14 -0
- package/Models/DatabaseModels/EnterpriseLicense.ts +56 -0
- package/Models/DatabaseModels/Index.ts +10 -0
- package/Models/DatabaseModels/Monitor.ts +76 -0
- package/Models/DatabaseModels/NetworkAlertPolicy.ts +690 -0
- package/Models/DatabaseModels/NetworkDevice.ts +176 -1
- package/Models/DatabaseModels/NetworkSite.ts +201 -2
- package/Models/DatabaseModels/NetworkSiteType.ts +102 -3
- package/Models/DatabaseModels/NetworkSnmpCredentialProfile.ts +841 -0
- package/Models/DatabaseModels/TelemetryException.ts +119 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupBatch.ts +334 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +370 -0
- package/Models/DatabaseModels/UserNotificationEmailRollupSetting.ts +282 -0
- package/Server/API/EnterpriseLicenseAPI.ts +391 -64
- package/Server/API/LlmProviderAPI.ts +137 -22
- package/Server/EnvironmentConfig.ts +14 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.ts +55 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.ts +124 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.ts +132 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.ts +79 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.ts +191 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
- package/Server/Infrastructure/QueueWorker.ts +38 -8
- package/Server/Middleware/BearerTokenAuthorization.ts +12 -0
- package/Server/Middleware/ProjectAuthorization.ts +11 -0
- package/Server/Middleware/SCIMAuthorization.ts +12 -0
- package/Server/Middleware/TelemetryIngest.ts +11 -0
- package/Server/Services/AIBillingService.ts +101 -27
- package/Server/Services/EnterpriseLicenseInstanceService.ts +197 -0
- package/Server/Services/EnterpriseLicenseService.ts +55 -0
- package/Server/Services/Index.ts +10 -0
- package/Server/Services/MonitorService.ts +143 -21
- package/Server/Services/MonitorStatusTimelineService.ts +150 -8
- package/Server/Services/MonitorTemplateService.ts +217 -1
- package/Server/Services/NetworkAlertPolicyEngineService.ts +2159 -0
- package/Server/Services/NetworkAlertPolicyService.ts +944 -0
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +9 -10
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +60 -15
- package/Server/Services/NetworkDeviceService.ts +1032 -73
- package/Server/Services/NetworkSiteService.ts +1502 -129
- package/Server/Services/NetworkSiteTypeService.ts +1216 -0
- package/Server/Services/NetworkSnmpCredentialProfileService.ts +238 -0
- package/Server/Services/NotificationService.ts +118 -28
- package/Server/Services/ProjectService.ts +105 -48
- package/Server/Services/StatusPagePrivateUserService.ts +103 -3
- package/Server/Services/UserNotificationEmailRollupBatchService.ts +78 -0
- package/Server/Services/UserNotificationEmailRollupItemService.ts +79 -0
- package/Server/Services/UserNotificationEmailRollupSettingService.ts +113 -0
- package/Server/Services/UserNotificationSettingService.ts +62 -25
- package/Server/Services/UserService.ts +95 -0
- package/Server/Types/Database/QueryHelper.ts +2 -2
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +14 -3
- package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +10 -0
- package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +10 -0
- package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +62 -1
- package/Server/Utils/AI/Toolbox/AlertTools.ts +15 -1
- package/Server/Utils/Billing/BillingFailureNoticeThrottle.ts +80 -0
- package/Server/Utils/DataSource/HttpFetch.ts +9 -2
- package/Server/Utils/EmailRollup/EmailRollupConstants.ts +98 -0
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +872 -0
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +781 -0
- package/Server/Utils/EmailRollup/EmailRollupWriter.ts +368 -0
- package/Server/Utils/LLM/LLMService.ts +78 -0
- package/Server/Utils/LogRedaction.ts +8 -0
- package/Server/Utils/Logger.ts +79 -1
- package/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.ts +190 -0
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +9 -2
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +61 -1
- package/Server/Utils/Monitor/MonitorCriteriaDataExtractor.ts +14 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +49 -0
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +255 -4
- package/Server/Utils/Monitor/MonitorMetricUtil.ts +41 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +43 -0
- package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +499 -19
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +66 -10
- package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +238 -44
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +146 -39
- package/Server/Utils/NetworkDevice/DeviceHealthAggregation.ts +31 -18
- package/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.ts +213 -0
- package/Server/Utils/OutboundUserAgent.ts +152 -0
- package/Server/Utils/StartServer.ts +51 -19
- package/Server/Utils/Telemetry/CaptureSpan.ts +32 -8
- package/Server/Utils/Telemetry/ErrorClassResolver.ts +120 -0
- package/Server/Utils/Telemetry/SpanUtil.ts +33 -0
- package/Server/Utils/Telemetry.ts +198 -51
- package/Server/Views/Partials/SensitiveUrlToken.ejs +140 -0
- package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +134 -33
- package/Tests/App/Dashboard/AskAiSuggestedPrompts.test.ts +279 -0
- package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +517 -0
- package/Tests/App/Dashboard/DashboardVariablesDiscard.test.tsx +26 -0
- package/Tests/App/Dashboard/DeviceStatusHero.test.tsx +588 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +18 -9
- package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +632 -0
- package/Tests/App/Dashboard/MonitorRecommendationCreateProgress.test.tsx +682 -0
- package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +4 -2
- package/Tests/App/Dashboard/NetworkDeviceCreateFormMonitorBinding.test.tsx +676 -0
- package/Tests/App/Dashboard/NetworkDeviceCreateFormPingMonitor.test.tsx +791 -0
- package/Tests/App/Dashboard/NetworkDeviceCreateFormProbeAndSnmp.test.tsx +833 -0
- package/Tests/App/Dashboard/NetworkDeviceCriteriaFilter.test.ts +161 -0
- package/Tests/App/Dashboard/NetworkDeviceSettingsMonitoringSection.test.tsx +458 -0
- package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +41 -5
- package/Tests/App/Dashboard/PingMonitorProvisioning.test.ts +368 -0
- package/Tests/App/Dashboard/RecommendationCard.test.tsx +796 -0
- package/Tests/App/Dashboard/RecommendationToolbar.test.tsx +519 -0
- package/Tests/App/Dashboard/RecommendationsList.test.tsx +661 -0
- package/Tests/App/Dashboard/UseBulkCreatePingMonitors.test.tsx +899 -0
- package/Tests/App/Dashboard/UseBulkSnmpCredentialProfileActions.test.tsx +732 -0
- package/Tests/App/SensitiveUrlTokenBootstrap.test.ts +256 -0
- package/Tests/App/StatusPage/StatusPageIndexPageRobotsMeta.test.ts +11 -1
- package/Tests/App/StatusPage/StatusPageLoginCodeBootstrap.test.ts +9 -4
- package/Tests/Models/NetworkSiteHierarchy.test.ts +41 -4
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +951 -7
- package/Tests/Server/API/LlmProviderConnectionTest.test.ts +522 -0
- package/Tests/Server/Infrastructure/Postgres/NetworkSnmpCredentialProfilesAndAlertPoliciesMigration.test.ts +854 -0
- package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +18 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +535 -0
- package/Tests/Server/Services/AIChatPrivacyPin.test.ts +560 -0
- package/Tests/Server/Services/BillingRechargeOwnerEmailGuards.test.ts +783 -0
- package/Tests/Server/Services/EnterpriseLicenseInstanceServiceDeletionUsage.test.ts +707 -0
- package/Tests/Server/Services/EnterpriseLicenseServiceUsageAggregationLock.test.ts +329 -0
- package/Tests/Server/Services/MonitorServiceDeleteNetworkDeviceCleanup.test.ts +294 -0
- package/Tests/Server/Services/MonitorStatusBridgeProbePath.test.ts +802 -0
- package/Tests/Server/Services/MonitorStatusTimelineService.test.ts +72 -2
- package/Tests/Server/Services/NetworkAlertPolicyEngineHooks.test.ts +752 -0
- package/Tests/Server/Services/NetworkAlertPolicyEngineService.test.ts +1849 -0
- package/Tests/Server/Services/NetworkAlertPolicyModel.test.ts +1793 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +47 -4
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +97 -12
- package/Tests/Server/Services/NetworkDeviceAutoMonitorLifecycle.test.ts +148 -3
- package/Tests/Server/Services/NetworkDeviceMonitorBindingUpdateGuard.test.ts +514 -0
- package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +447 -58
- package/Tests/Server/Services/NetworkDeviceMonitoringMethodTransition.test.ts +739 -0
- package/Tests/Server/Services/NetworkDevicePollingTenancy.test.ts +501 -0
- package/Tests/Server/Services/NetworkDeviceSiteDefaultProbe.test.ts +432 -0
- package/Tests/Server/Services/NetworkSiteMonitoringDefaults.test.ts +498 -0
- package/Tests/Server/Services/NetworkSiteRollupPolicyAndMaintenance.test.ts +337 -55
- package/Tests/Server/Services/NetworkSiteService.test.ts +1868 -131
- package/Tests/Server/Services/NetworkSiteTypeService.test.ts +1109 -0
- package/Tests/Server/Services/NetworkSnmpCredentialProfileModel.test.ts +926 -0
- package/Tests/Server/Services/NetworkSnmpCredentialProfileService.test.ts +796 -0
- package/Tests/Server/Services/ProjectServiceNetworkSiteTypeDefaults.test.ts +214 -0
- package/Tests/Server/Services/StatusPagePrivateUserEmailChangePasswordResetExpiry.test.ts +269 -0
- package/Tests/Server/Services/UserEmailChangePasswordResetExpiry.test.ts +472 -0
- package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +569 -0
- package/Tests/Server/Services/UserNotificationEmailRollupSettingModel.test.ts +314 -0
- package/Tests/Server/Services/UserNotificationEmailRollupSettingService.test.ts +409 -0
- package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +856 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +102 -1
- package/Tests/Server/Types/Database/Permissions/DashboardAccessPermission.test.ts +321 -0
- package/Tests/Server/Types/Database/QueryHelperOperators.test.ts +17 -0
- package/Tests/Server/Utils/AI/AlertMonitorFilters.test.ts +124 -0
- package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +208 -0
- package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +235 -0
- package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +253 -0
- package/Tests/Server/Utils/Captcha.test.ts +422 -0
- package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +96 -2
- package/Tests/Server/Utils/Database/MigrationFailureLog.test.ts +466 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1096 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerClaim.test.ts +466 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +1428 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +752 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +864 -0
- package/Tests/Server/Utils/LoggerFaultDemotion.test.ts +346 -0
- package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +633 -0
- package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +196 -0
- package/Tests/Server/Utils/Monitor/DatabaseMetricWrite.test.ts +367 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +100 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +5 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +512 -31
- package/Tests/Server/Utils/Monitor/NetworkDeviceMetricUtil.test.ts +252 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +479 -42
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +351 -5
- package/Tests/Server/Utils/NetworkDevice/DeviceHealthAggregation.test.ts +136 -12
- package/Tests/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.test.ts +306 -0
- package/Tests/Server/Utils/OutboundUserAgent.test.ts +266 -0
- package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClientUserAgent.test.ts +141 -0
- package/Tests/Server/Utils/Telemetry/ErrorClassResolver.test.ts +298 -0
- package/Tests/Server/Utils/Telemetry.test.ts +456 -66
- package/Tests/Types/Monitor/DatabaseMetricCatalog.test.ts +388 -0
- package/Tests/Types/Monitor/MonitorStepDatabaseMonitor.test.ts +243 -0
- package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +16 -7
- package/Tests/Types/Monitor/NetworkDeviceAlertPack.test.ts +60 -0
- package/Tests/Types/NetworkDevice/NetworkAlertPolicyScope.test.ts +655 -0
- package/Tests/Types/NetworkDevice/NetworkDeviceMonitoringMethod.test.ts +115 -26
- package/Tests/Types/NetworkSite/DefaultNetworkSiteType.test.ts +39 -0
- package/Tests/Types/NotificationSetting/NotificationEmailRollupPolicy.test.ts +299 -0
- package/Tests/Types/Telemetry/ErrorClass.test.ts +483 -0
- package/Tests/UI/Components/BasicRadioButtons.test.tsx +336 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +15 -0
- package/Tests/UI/Components/ProgressBar.test.tsx +38 -2
- package/Tests/UI/Components/SideMenuItem.test.tsx +226 -4
- package/Tests/UI/Components/SideMenuSection.test.tsx +310 -0
- package/Tests/UI/Components/SideOverSubmitState.test.tsx +335 -0
- package/Tests/UI/Utils/PageScrollLock.test.tsx +377 -0
- package/Tests/UI/Utils/PermissionGate.test.ts +78 -0
- package/Tests/UI/Utils/SensitiveUrlToken.test.ts +140 -0
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +69 -0
- package/Tests/Utils/EnterpriseLicenseSync.test.ts +7 -1
- package/Tests/Utils/EnterpriseLicenseUsage.test.ts +433 -2
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +280 -1
- package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +38 -0
- package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +284 -23
- package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +177 -0
- package/Tests/Utils/NetworkDevice/MonitoringMethodThreadedClassifiers.test.ts +992 -0
- package/Tests/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.test.ts +427 -0
- package/Tests/Utils/NetworkDevice/ReachabilityStampConsistency.test.ts +185 -0
- package/Tests/Utils/NetworkDevice/SnmpCredentialUtil.test.ts +268 -0
- package/Tests/Utils/NetworkDiscovery/AutoImportRuleMatcher.test.ts +55 -5
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +98 -21
- package/Tests/Utils/NetworkDiscovery/DiscoveryImportEligibility.test.ts +98 -20
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +8 -7
- package/Tests/Utils/NetworkDiscovery/PingMonitorBuilderForAddress.test.ts +274 -0
- package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +230 -51
- package/Tests/Utils/NetworkSite/TypeHierarchyUtil.test.ts +209 -0
- package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +145 -0
- package/Types/AI/ExceptionAIClassification.ts +10 -24
- package/Types/Email/EmailTemplateType.ts +2 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.ts +5 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.ts +13 -0
- package/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.ts +6 -0
- package/Types/Exception/ApiException.ts +10 -0
- package/Types/Exception/BadDataException.ts +11 -0
- package/Types/Exception/BadRequestException.ts +11 -0
- package/Types/Exception/Exception.ts +65 -0
- package/Types/Exception/ForbiddenException.ts +10 -0
- package/Types/Exception/NotAuthenticatedException.ts +10 -0
- package/Types/Exception/NotAuthorizedException.ts +10 -0
- package/Types/Exception/NotFoundException.ts +11 -0
- package/Types/Exception/PayloadTooLargeException.ts +11 -0
- package/Types/Exception/PaymentRequiredException.ts +10 -0
- package/Types/Exception/ServiceUnavailableException.ts +10 -0
- package/Types/Exception/SsoAuthorizationException.ts +10 -0
- package/Types/Exception/TenantNotFoundException.ts +11 -0
- package/Types/Exception/TimeoutException.ts +10 -0
- package/Types/Exception/TooManyRequestsException.ts +10 -0
- package/Types/Exception/UnableToReachServer.ts +10 -0
- package/Types/Exception/WebsiteRequestException.ts +10 -0
- package/Types/Monitor/CriteriaFilter.ts +60 -2
- package/Types/Monitor/DatabaseMetricCatalog.ts +693 -0
- package/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.ts +83 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +76 -0
- package/Types/Monitor/MonitorMetricType.ts +71 -0
- package/Types/Monitor/MonitorStep.ts +76 -0
- package/Types/Monitor/MonitorStepDatabaseMonitor.ts +171 -0
- package/Types/Monitor/MonitorStepSqlMonitor.ts +2 -20
- package/Types/Monitor/MonitorType.ts +47 -1
- package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +22 -1
- package/Types/Monitor/SqlConnectionConfig.ts +31 -0
- package/Types/NetworkDevice/NetworkAlertPolicyScope.ts +343 -0
- package/Types/NetworkDevice/NetworkDeviceMonitoringMethod.ts +42 -22
- package/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.ts +30 -0
- package/Types/NotificationSetting/NotificationEmailRollupCategory.ts +255 -0
- package/Types/NotificationSetting/NotificationEmailRollupPolicy.ts +104 -0
- package/Types/Permission.ts +90 -0
- package/Types/Probe/ProbeMonitorResponse.ts +16 -0
- package/Types/Telemetry/ErrorClass.ts +274 -0
- package/Types/Telemetry/UnitOfWork.ts +59 -0
- package/UI/Components/CommandPalette/CommandPalette.tsx +2 -8
- package/UI/Components/EditionLabel/EditionLabel.tsx +4 -0
- package/UI/Components/Modal/Modal.tsx +2 -8
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +44 -0
- package/UI/Components/ProgressBar/ProgressBar.tsx +12 -1
- package/UI/Components/RadioButtons/BasicRadioButtons.tsx +37 -7
- package/UI/Components/SideMenu/SideMenu.tsx +123 -5
- package/UI/Components/SideMenu/SideMenuItem.tsx +76 -84
- package/UI/Components/SideMenu/SideMenuSection.tsx +55 -23
- package/UI/Components/SideOver/SideOver.tsx +21 -20
- package/UI/Utils/PageScrollLock.ts +79 -3
- package/UI/Utils/PermissionGate.ts +61 -0
- package/UI/Utils/SensitiveUrlToken.ts +112 -0
- package/UI/Utils/TestLLMProvider.ts +11 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +16 -0
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +191 -11
- package/Utils/Monitor/MonitorMetricType.ts +153 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +23 -3
- package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +65 -14
- package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +43 -14
- package/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.ts +247 -0
- package/Utils/NetworkDevice/SnmpCredentialUtil.ts +68 -0
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +15 -7
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +52 -17
- package/Utils/NetworkDiscovery/DiscoveryImportEligibility.ts +55 -23
- package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +115 -13
- package/Utils/NetworkSite/SiteStatusRollupUtil.ts +66 -20
- package/Utils/NetworkSite/TypeHierarchyUtil.ts +313 -0
- package/build/dist/Models/AnalyticsModels/Span.js +14 -0
- package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
- package/build/dist/Models/DatabaseModels/EnterpriseLicense.js +59 -0
- package/build/dist/Models/DatabaseModels/EnterpriseLicense.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +10 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +75 -0
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js +713 -0
- package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +180 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSite.js +200 -2
- package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js +102 -3
- package/build/dist/Models/DatabaseModels/NetworkSiteType.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js +878 -0
- package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js.map +1 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js +123 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js +363 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +402 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js +296 -0
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js.map +1 -0
- package/build/dist/Server/API/EnterpriseLicenseAPI.js +273 -60
- package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +1 -1
- package/build/dist/Server/API/LlmProviderAPI.js +108 -13
- package/build/dist/Server/API/LlmProviderAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +12 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js +111 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js +77 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js +50 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js +83 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/QueueWorker.js +33 -5
- package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
- package/build/dist/Server/Middleware/BearerTokenAuthorization.js +12 -0
- package/build/dist/Server/Middleware/BearerTokenAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/ProjectAuthorization.js +11 -0
- package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/SCIMAuthorization.js +12 -0
- package/build/dist/Server/Middleware/SCIMAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +11 -0
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AIBillingService.js +70 -16
- package/build/dist/Server/Services/AIBillingService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js +167 -0
- package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseService.js +39 -0
- package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +10 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +119 -21
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +127 -8
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +162 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js +1683 -0
- package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js.map +1 -0
- package/build/dist/Server/Services/NetworkAlertPolicyService.js +732 -0
- package/build/dist/Server/Services/NetworkAlertPolicyService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +10 -9
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +54 -11
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +841 -70
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +1145 -107
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteTypeService.js +863 -0
- package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js +217 -0
- package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js.map +1 -0
- package/build/dist/Server/Services/NotificationService.js +80 -17
- package/build/dist/Server/Services/NotificationService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +66 -30
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +92 -2
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js +76 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js +77 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js +111 -0
- package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationSettingService.js +46 -20
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +90 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +14 -3
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +10 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +10 -0
- package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +54 -1
- package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +18 -4
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -1
- package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js +59 -0
- package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/HttpFetch.js +2 -1
- package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js +91 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +691 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +497 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +257 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -0
- package/build/dist/Server/Utils/LLM/LLMService.js +64 -1
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/LogRedaction.js +8 -0
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Logger.js +63 -1
- package/build/dist/Server/Utils/Logger.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js +141 -0
- package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +51 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js +7 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +37 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +158 -6
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +33 -0
- package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +32 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +330 -21
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +55 -10
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +178 -49
- package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +119 -29
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js +30 -17
- package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js.map +1 -1
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js +158 -0
- package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js.map +1 -0
- package/build/dist/Server/Utils/OutboundUserAgent.js +123 -0
- package/build/dist/Server/Utils/OutboundUserAgent.js.map +1 -0
- package/build/dist/Server/Utils/StartServer.js +38 -14
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +28 -8
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js +95 -0
- package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/SpanUtil.js +29 -0
- package/build/dist/Server/Utils/Telemetry/SpanUtil.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry.js +162 -46
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Types/AI/ExceptionAIClassification.js +10 -24
- package/build/dist/Types/AI/ExceptionAIClassification.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js +2 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js.map +1 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js +7 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js.map +1 -0
- package/build/dist/Types/Exception/ApiException.js +9 -0
- package/build/dist/Types/Exception/ApiException.js.map +1 -1
- package/build/dist/Types/Exception/BadDataException.js +10 -0
- package/build/dist/Types/Exception/BadDataException.js.map +1 -1
- package/build/dist/Types/Exception/BadRequestException.js +10 -0
- package/build/dist/Types/Exception/BadRequestException.js.map +1 -1
- package/build/dist/Types/Exception/Exception.js +56 -0
- package/build/dist/Types/Exception/Exception.js.map +1 -1
- package/build/dist/Types/Exception/ForbiddenException.js +9 -0
- package/build/dist/Types/Exception/ForbiddenException.js.map +1 -1
- package/build/dist/Types/Exception/NotAuthenticatedException.js +9 -0
- package/build/dist/Types/Exception/NotAuthenticatedException.js.map +1 -1
- package/build/dist/Types/Exception/NotAuthorizedException.js +9 -0
- package/build/dist/Types/Exception/NotAuthorizedException.js.map +1 -1
- package/build/dist/Types/Exception/NotFoundException.js +10 -0
- package/build/dist/Types/Exception/NotFoundException.js.map +1 -1
- package/build/dist/Types/Exception/PayloadTooLargeException.js +10 -0
- package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -1
- package/build/dist/Types/Exception/PaymentRequiredException.js +9 -0
- package/build/dist/Types/Exception/PaymentRequiredException.js.map +1 -1
- package/build/dist/Types/Exception/ServiceUnavailableException.js +9 -0
- package/build/dist/Types/Exception/ServiceUnavailableException.js.map +1 -1
- package/build/dist/Types/Exception/SsoAuthorizationException.js +9 -0
- package/build/dist/Types/Exception/SsoAuthorizationException.js.map +1 -1
- package/build/dist/Types/Exception/TenantNotFoundException.js +10 -0
- package/build/dist/Types/Exception/TenantNotFoundException.js.map +1 -1
- package/build/dist/Types/Exception/TimeoutException.js +9 -0
- package/build/dist/Types/Exception/TimeoutException.js.map +1 -1
- package/build/dist/Types/Exception/TooManyRequestsException.js +9 -0
- package/build/dist/Types/Exception/TooManyRequestsException.js.map +1 -1
- package/build/dist/Types/Exception/UnableToReachServer.js +9 -0
- package/build/dist/Types/Exception/UnableToReachServer.js.map +1 -1
- package/build/dist/Types/Exception/WebsiteRequestException.js +9 -0
- package/build/dist/Types/Exception/WebsiteRequestException.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +45 -2
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/DatabaseMetricCatalog.js +594 -0
- package/build/dist/Types/Monitor/DatabaseMetricCatalog.js.map +1 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js +21 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +70 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorMetricType.js +61 -0
- package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +54 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js +122 -0
- package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorType.js +45 -1
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +21 -1
- package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -1
- package/build/dist/Types/Monitor/SqlConnectionConfig.js +2 -0
- package/build/dist/Types/Monitor/SqlConnectionConfig.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js +172 -0
- package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js +40 -22
- package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js.map +1 -1
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js +26 -0
- package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js +186 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js.map +1 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js +87 -0
- package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js.map +1 -0
- package/build/dist/Types/Permission.js +80 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Telemetry/ErrorClass.js +216 -0
- package/build/dist/Types/Telemetry/ErrorClass.js.map +1 -0
- package/build/dist/Types/Telemetry/UnitOfWork.js +59 -0
- package/build/dist/Types/Telemetry/UnitOfWork.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js +2 -7
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +3 -0
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +2 -7
- package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +39 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/ProgressBar/ProgressBar.js +12 -1
- package/build/dist/UI/Components/ProgressBar/ProgressBar.js.map +1 -1
- package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js +6 -6
- package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenu.js +67 -5
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js +49 -53
- package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js +25 -7
- package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
- package/build/dist/UI/Components/SideOver/SideOver.js +5 -20
- package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
- package/build/dist/UI/Utils/PageScrollLock.js +31 -3
- package/build/dist/UI/Utils/PageScrollLock.js.map +1 -1
- package/build/dist/UI/Utils/PermissionGate.js +42 -1
- package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
- package/build/dist/UI/Utils/SensitiveUrlToken.js +97 -0
- package/build/dist/UI/Utils/SensitiveUrlToken.js.map +1 -0
- package/build/dist/UI/Utils/TestLLMProvider.js +4 -5
- package/build/dist/UI/Utils/TestLLMProvider.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +15 -0
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +111 -9
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +109 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +8 -3
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +27 -7
- package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +7 -5
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js +180 -0
- package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js +12 -0
- package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js +15 -5
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +44 -15
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js +52 -23
- package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +85 -13
- package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +30 -15
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js +191 -0
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js.map +1 -0
- package/package.json +2 -2
|
@@ -20,6 +20,16 @@ export interface ComponentProps {
|
|
|
20
20
|
subItemIcon?: undefined | IconProp;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
/*
|
|
24
|
+
* One navigation row.
|
|
25
|
+
*
|
|
26
|
+
* The icon is drawn bare rather than inside a filled chip. A chip per row
|
|
27
|
+
* turns a fifteen-entry menu into a column of grey squares that all read the
|
|
28
|
+
* same, and it costs ~28px of the 208px the menu had — which is why titles
|
|
29
|
+
* like "Scheduled Maintenance" and "Recommendations" were being truncated to
|
|
30
|
+
* "Scheduled Mainte..." next to a badge. The icon still carries the active and
|
|
31
|
+
* hover colour; it just does it without a box around it.
|
|
32
|
+
*/
|
|
23
33
|
const SideMenuItem: FunctionComponent<ComponentProps> = (
|
|
24
34
|
props: ComponentProps,
|
|
25
35
|
) => {
|
|
@@ -43,13 +53,13 @@ const SideMenuItem: FunctionComponent<ComponentProps> = (
|
|
|
43
53
|
className={`
|
|
44
54
|
${props.className || ""}
|
|
45
55
|
group relative flex items-center justify-between
|
|
46
|
-
|
|
47
|
-
text-sm
|
|
48
|
-
transition-
|
|
56
|
+
pl-3 pr-2 py-1.5 rounded-md
|
|
57
|
+
text-sm
|
|
58
|
+
transition-colors duration-150 ease-out
|
|
49
59
|
${
|
|
50
60
|
isActive
|
|
51
|
-
? "bg-
|
|
52
|
-
: "text-gray-600 hover:bg-gray-50 hover:text-gray-900"
|
|
61
|
+
? "bg-indigo-50 text-indigo-700 font-semibold"
|
|
62
|
+
: "font-medium text-gray-600 hover:bg-gray-50 hover:text-gray-900"
|
|
53
63
|
}
|
|
54
64
|
`}
|
|
55
65
|
to={props.link.to}
|
|
@@ -57,43 +67,45 @@ const SideMenuItem: FunctionComponent<ComponentProps> = (
|
|
|
57
67
|
window.scrollTo({ top: 0, behavior: "smooth" });
|
|
58
68
|
}}
|
|
59
69
|
>
|
|
60
|
-
{/*
|
|
70
|
+
{/*
|
|
71
|
+
* The active rail. It sits inside the row's left padding rather than
|
|
72
|
+
* outside it, so the row's background and the rail share one edge —
|
|
73
|
+
* an accent bar floating in the gutter reads as a rendering artefact
|
|
74
|
+
* once the row behind it is tinted.
|
|
75
|
+
*/}
|
|
61
76
|
<div
|
|
62
77
|
className={`
|
|
63
|
-
absolute left-
|
|
78
|
+
absolute left-1 top-1/2 -translate-y-1/2
|
|
64
79
|
w-0.5 rounded-full
|
|
65
|
-
transition-all duration-
|
|
66
|
-
${isActive ? "h-
|
|
80
|
+
transition-all duration-150 ease-out
|
|
81
|
+
${isActive ? "h-4 bg-indigo-600" : "h-0 bg-transparent"}
|
|
67
82
|
`}
|
|
68
83
|
/>
|
|
69
84
|
|
|
70
85
|
{/* Content Container */}
|
|
71
|
-
<div className="flex items-center min-w-0 gap-2">
|
|
72
|
-
{/* Icon with background on active */}
|
|
86
|
+
<div className="flex items-center min-w-0 gap-2.5">
|
|
73
87
|
{props.icon && (
|
|
74
|
-
<
|
|
88
|
+
<Icon
|
|
89
|
+
icon={props.icon}
|
|
75
90
|
className={`
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
transition-all duration-200
|
|
91
|
+
h-4 w-4 flex-shrink-0
|
|
92
|
+
transition-colors duration-150
|
|
79
93
|
${
|
|
80
94
|
isActive
|
|
81
|
-
? "
|
|
82
|
-
: "
|
|
95
|
+
? "text-indigo-600"
|
|
96
|
+
: "text-gray-400 group-hover:text-gray-600"
|
|
83
97
|
}
|
|
84
98
|
`}
|
|
85
|
-
|
|
86
|
-
<Icon icon={props.icon} className="h-3.5 w-3.5" />
|
|
87
|
-
</div>
|
|
99
|
+
/>
|
|
88
100
|
)}
|
|
89
101
|
|
|
90
|
-
{/*
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
>
|
|
102
|
+
{/*
|
|
103
|
+
* `truncate` is load-bearing beyond the ellipsis: the side-menu test
|
|
104
|
+
* harness reads a row's title from `span.truncate`, and without it
|
|
105
|
+
* falls back to the anchor's full textContent — which would fold the
|
|
106
|
+
* badge digits into every title it reads.
|
|
107
|
+
*/}
|
|
108
|
+
<span className="truncate transition-colors duration-150">
|
|
97
109
|
{translatedTitle}
|
|
98
110
|
</span>
|
|
99
111
|
</div>
|
|
@@ -107,72 +119,52 @@ const SideMenuItem: FunctionComponent<ComponentProps> = (
|
|
|
107
119
|
<Badge badgeCount={props.badge} badgeType={props.badgeType} />
|
|
108
120
|
)}
|
|
109
121
|
{props.showAlert && (
|
|
110
|
-
<
|
|
111
|
-
<Icon icon={IconProp.Error} className="text-red-600 h-3 w-3" />
|
|
112
|
-
</div>
|
|
122
|
+
<Icon icon={IconProp.Error} className="text-red-500 h-4 w-4" />
|
|
113
123
|
)}
|
|
114
124
|
{props.showWarning && (
|
|
115
|
-
<
|
|
116
|
-
<Icon
|
|
117
|
-
icon={IconProp.Alert}
|
|
118
|
-
className="text-amber-600 h-3 w-3"
|
|
119
|
-
/>
|
|
120
|
-
</div>
|
|
125
|
+
<Icon icon={IconProp.Alert} className="text-amber-500 h-4 w-4" />
|
|
121
126
|
)}
|
|
122
127
|
</div>
|
|
123
128
|
)}
|
|
124
|
-
|
|
125
|
-
{/* Hover indicator */}
|
|
126
|
-
<div
|
|
127
|
-
className={`
|
|
128
|
-
absolute inset-0 rounded-lg
|
|
129
|
-
border-2 border-transparent
|
|
130
|
-
transition-all duration-200
|
|
131
|
-
${!isActive ? "group-hover:border-gray-200" : ""}
|
|
132
|
-
pointer-events-none
|
|
133
|
-
`}
|
|
134
|
-
/>
|
|
135
129
|
</UILink>
|
|
136
130
|
|
|
137
131
|
{/* Sub Item */}
|
|
138
132
|
{props.subItemLink && (
|
|
139
|
-
<
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
</div>
|
|
175
|
-
</UILink>
|
|
133
|
+
<div className="ml-5 border-l border-gray-200 pl-2">
|
|
134
|
+
<UILink
|
|
135
|
+
className={`
|
|
136
|
+
${props.className || ""}
|
|
137
|
+
group relative flex items-center justify-between
|
|
138
|
+
px-2 py-1.5 rounded-md
|
|
139
|
+
text-sm font-medium
|
|
140
|
+
transition-colors duration-150 ease-out
|
|
141
|
+
${
|
|
142
|
+
isSubItemActive
|
|
143
|
+
? "bg-indigo-50 text-indigo-700"
|
|
144
|
+
: "text-gray-500 hover:bg-gray-50 hover:text-gray-900"
|
|
145
|
+
}
|
|
146
|
+
`}
|
|
147
|
+
to={props.subItemLink.to}
|
|
148
|
+
onClick={() => {
|
|
149
|
+
window.scrollTo({ top: 0, behavior: "smooth" });
|
|
150
|
+
}}
|
|
151
|
+
>
|
|
152
|
+
<div className="flex items-center min-w-0 gap-2.5">
|
|
153
|
+
<Icon
|
|
154
|
+
icon={props.subItemIcon || IconProp.MinusSmall}
|
|
155
|
+
className={`
|
|
156
|
+
h-4 w-4 flex-shrink-0 transition-colors duration-150
|
|
157
|
+
${
|
|
158
|
+
isSubItemActive
|
|
159
|
+
? "text-indigo-600"
|
|
160
|
+
: "text-gray-400 group-hover:text-gray-600"
|
|
161
|
+
}
|
|
162
|
+
`}
|
|
163
|
+
/>
|
|
164
|
+
<span className="truncate">{translatedSubItemTitle}</span>
|
|
165
|
+
</div>
|
|
166
|
+
</UILink>
|
|
167
|
+
</div>
|
|
176
168
|
)}
|
|
177
169
|
</>
|
|
178
170
|
);
|
|
@@ -17,6 +17,15 @@ export interface ComponentProps {
|
|
|
17
17
|
isActive?: boolean;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
/*
|
|
21
|
+
* A titled group of menu rows.
|
|
22
|
+
*
|
|
23
|
+
* The collapsed body keeps its children mounted and animates a max-height,
|
|
24
|
+
* rather than unmounting them: several menus badge their rows from a fetch on
|
|
25
|
+
* mount, and unmounting a collapsed section would restart those fetches every
|
|
26
|
+
* time it was reopened. The `max-h-0 / opacity-0` pair is also the contract
|
|
27
|
+
* the side-menu tests read collapse state from.
|
|
28
|
+
*/
|
|
20
29
|
const SideMenuSection: FunctionComponent<ComponentProps> = (
|
|
21
30
|
props: ComponentProps,
|
|
22
31
|
) => {
|
|
@@ -40,34 +49,57 @@ const SideMenuSection: FunctionComponent<ComponentProps> = (
|
|
|
40
49
|
}
|
|
41
50
|
};
|
|
42
51
|
|
|
52
|
+
/*
|
|
53
|
+
* The heading itself. Identical in both branches — only the element around
|
|
54
|
+
* it changes.
|
|
55
|
+
*
|
|
56
|
+
* An <h6> because the side-menu test harness locates a section by its
|
|
57
|
+
* heading; the visual weight comes from the classes, not the level.
|
|
58
|
+
*/
|
|
59
|
+
const heading: ReactElement = (
|
|
60
|
+
<div className="flex items-center gap-2 min-w-0">
|
|
61
|
+
{props.icon && (
|
|
62
|
+
<Icon icon={props.icon} className="h-3.5 w-3.5 text-gray-400" />
|
|
63
|
+
)}
|
|
64
|
+
<h6 className="truncate text-xs font-semibold uppercase tracking-wider text-gray-400">
|
|
65
|
+
{translatedTitle}
|
|
66
|
+
</h6>
|
|
67
|
+
</div>
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
const headerClassName: string =
|
|
71
|
+
"w-full flex items-center justify-between px-3 pt-2 pb-1 rounded-md";
|
|
72
|
+
|
|
43
73
|
return (
|
|
44
|
-
<div className="mb-2">
|
|
45
|
-
{/*
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
74
|
+
<div className="mb-2 first:mt-0 mt-1">
|
|
75
|
+
{/*
|
|
76
|
+
* Section Header.
|
|
77
|
+
*
|
|
78
|
+
* A section that cannot collapse renders no control at all, rather than
|
|
79
|
+
* a disabled-in-spirit <button aria-expanded="true"> whose handler
|
|
80
|
+
* returns immediately. The chevron and the pointer cursor were already
|
|
81
|
+
* suppressed in that case, so only keyboard and screen-reader users
|
|
82
|
+
* were being offered the phantom: a tab stop announcing an expand
|
|
83
|
+
* control that does nothing when activated.
|
|
84
|
+
*/}
|
|
85
|
+
{isCollapsible ? (
|
|
86
|
+
<button
|
|
87
|
+
type="button"
|
|
88
|
+
onClick={handleToggle}
|
|
89
|
+
className={`${headerClassName} cursor-pointer transition-colors duration-150 hover:bg-gray-50`}
|
|
90
|
+
aria-expanded={!isCollapsed}
|
|
91
|
+
>
|
|
92
|
+
{heading}
|
|
63
93
|
<Icon
|
|
64
94
|
icon={IconProp.ChevronDown}
|
|
65
|
-
className={`h-
|
|
95
|
+
className={`h-3.5 w-3.5 flex-shrink-0 text-gray-300 transition-transform duration-200 ${
|
|
66
96
|
isCollapsed ? "-rotate-90" : "rotate-0"
|
|
67
97
|
}`}
|
|
68
98
|
/>
|
|
69
|
-
|
|
70
|
-
|
|
99
|
+
</button>
|
|
100
|
+
) : (
|
|
101
|
+
<div className={`${headerClassName} cursor-default`}>{heading}</div>
|
|
102
|
+
)}
|
|
71
103
|
|
|
72
104
|
{/* Section Content with Animation */}
|
|
73
105
|
<div
|
|
@@ -75,7 +107,7 @@ const SideMenuSection: FunctionComponent<ComponentProps> = (
|
|
|
75
107
|
isCollapsed ? "max-h-0 opacity-0" : "max-h-[2000px] opacity-100"
|
|
76
108
|
}`}
|
|
77
109
|
>
|
|
78
|
-
<div className="mt-0.5 space-y-0">{props.children}</div>
|
|
110
|
+
<div className="mt-0.5 space-y-0.5">{props.children}</div>
|
|
79
111
|
</div>
|
|
80
112
|
</div>
|
|
81
113
|
);
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import Button, { ButtonStyleType } from "../Button/Button";
|
|
2
2
|
import Icon from "../Icon/Icon";
|
|
3
3
|
import IconProp from "../../../Types/Icon/IconProp";
|
|
4
|
-
import {
|
|
4
|
+
import { usePageScrollLock } from "../../Utils/PageScrollLock";
|
|
5
5
|
import React, {
|
|
6
6
|
FunctionComponent,
|
|
7
7
|
ReactElement,
|
|
8
8
|
useEffect,
|
|
9
9
|
useId,
|
|
10
|
-
useLayoutEffect,
|
|
11
10
|
useState,
|
|
12
11
|
} from "react";
|
|
13
12
|
import { createPortal } from "react-dom";
|
|
@@ -26,6 +25,23 @@ export interface ComponentProps {
|
|
|
26
25
|
children: ReactElement | Array<ReactElement>;
|
|
27
26
|
submitButtonDisabled?: boolean | undefined;
|
|
28
27
|
submitButtonText?: string | undefined;
|
|
28
|
+
/*
|
|
29
|
+
* Spinner on the submit button, and a disable that comes with it — the same
|
|
30
|
+
* affordance Modal has always forwarded to its footer. Without it a panel
|
|
31
|
+
* whose submit kicks off a long job has to hand-roll a "Creating..." label
|
|
32
|
+
* and remember to disable itself, which is what every such panel here did.
|
|
33
|
+
*/
|
|
34
|
+
submitButtonIsLoading?: boolean | undefined;
|
|
35
|
+
/*
|
|
36
|
+
* Disables the footer's Close button. Only worth setting while the panel is
|
|
37
|
+
* running something it cannot abandon: the alternative every caller reached
|
|
38
|
+
* for was to no-op inside `onClose`, which leaves a live-looking button that
|
|
39
|
+
* does nothing when pressed.
|
|
40
|
+
*
|
|
41
|
+
* Note this does NOT disable the header's × — that one stays available so a
|
|
42
|
+
* panel can never trap the user.
|
|
43
|
+
*/
|
|
44
|
+
closeButtonDisabled?: boolean | undefined;
|
|
29
45
|
leftFooterElement?: ReactElement | undefined;
|
|
30
46
|
size?: SideOverSize | undefined;
|
|
31
47
|
/*
|
|
@@ -127,24 +143,7 @@ const SideOver: FunctionComponent<ComponentProps> = (
|
|
|
127
143
|
};
|
|
128
144
|
}, []);
|
|
129
145
|
|
|
130
|
-
|
|
131
|
-
* A layout effect, not an ordinary one. Hiding the page scrollbar widens the
|
|
132
|
-
* viewport that `right: 0` resolves against, so a panel that painted before
|
|
133
|
-
* the lock landed would visibly jump sideways by the scrollbar's width on
|
|
134
|
-
* every platform that draws a classic scrollbar. Locking before paint means
|
|
135
|
-
* the panel is only ever drawn in its final position.
|
|
136
|
-
*/
|
|
137
|
-
useLayoutEffect(() => {
|
|
138
|
-
if (props.disablePageScrollLock) {
|
|
139
|
-
return undefined;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
lockPageScroll();
|
|
143
|
-
|
|
144
|
-
return () => {
|
|
145
|
-
unlockPageScroll();
|
|
146
|
-
};
|
|
147
|
-
}, [props.disablePageScrollLock]);
|
|
146
|
+
usePageScrollLock(!props.disablePageScrollLock);
|
|
148
147
|
|
|
149
148
|
const sideOver: ReactElement = (
|
|
150
149
|
/*
|
|
@@ -246,6 +245,7 @@ const SideOver: FunctionComponent<ComponentProps> = (
|
|
|
246
245
|
<div className="flex justify-end space-x-3">
|
|
247
246
|
<Button
|
|
248
247
|
title="Close"
|
|
248
|
+
disabled={props.closeButtonDisabled}
|
|
249
249
|
onClick={() => {
|
|
250
250
|
props.onClose();
|
|
251
251
|
}}
|
|
@@ -256,6 +256,7 @@ const SideOver: FunctionComponent<ComponentProps> = (
|
|
|
256
256
|
<Button
|
|
257
257
|
title={props.submitButtonText || "Save"}
|
|
258
258
|
disabled={props.submitButtonDisabled}
|
|
259
|
+
isLoading={props.submitButtonIsLoading}
|
|
259
260
|
onClick={() => {
|
|
260
261
|
props.onSubmit!();
|
|
261
262
|
}}
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
* under a dialog that is still open or locked forever with no dialog on screen.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
+
import { useLayoutEffect } from "react";
|
|
16
|
+
|
|
15
17
|
let openDialogCount: number = 0;
|
|
16
18
|
let bodyOverflowBeforeLock: string = "";
|
|
17
19
|
let bodyPaddingRightBeforeLock: string = "";
|
|
@@ -42,15 +44,89 @@ export const lockPageScroll: PageScrollLockFunction = (): void => {
|
|
|
42
44
|
document.body.style.overflow = "hidden";
|
|
43
45
|
};
|
|
44
46
|
|
|
47
|
+
/*
|
|
48
|
+
* Restoring means putting the page back exactly as it was found, and "as it
|
|
49
|
+
* was found" is usually no inline value at all rather than an empty one. Going
|
|
50
|
+
* through removeProperty for that case says so directly — and it is also the
|
|
51
|
+
* only spelling jsdom honours for a longhand like padding-right, so the
|
|
52
|
+
* restore is assertable in a test instead of being taken on trust.
|
|
53
|
+
*/
|
|
54
|
+
type RestoreBodyStyleFunction = (property: string, value: string) => void;
|
|
55
|
+
|
|
56
|
+
const restoreBodyStyle: RestoreBodyStyleFunction = (
|
|
57
|
+
property: string,
|
|
58
|
+
value: string,
|
|
59
|
+
): void => {
|
|
60
|
+
if (value === "") {
|
|
61
|
+
document.body.style.removeProperty(property);
|
|
62
|
+
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
document.body.style.setProperty(property, value);
|
|
67
|
+
};
|
|
68
|
+
|
|
45
69
|
export const unlockPageScroll: PageScrollLockFunction = (): void => {
|
|
46
|
-
|
|
70
|
+
/*
|
|
71
|
+
* Nothing is open, so there is nothing of ours on the page to put back. A
|
|
72
|
+
* stray unlock — one surface releasing twice, a cleanup that outlives the
|
|
73
|
+
* lock it was paired with — has to be inert rather than paint a snapshot
|
|
74
|
+
* taken for some earlier dialog over whatever the page is wearing now.
|
|
75
|
+
*/
|
|
76
|
+
if (openDialogCount === 0) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
openDialogCount--;
|
|
47
81
|
|
|
48
82
|
if (openDialogCount > 0 || typeof document === "undefined") {
|
|
49
83
|
return;
|
|
50
84
|
}
|
|
51
85
|
|
|
52
|
-
|
|
53
|
-
|
|
86
|
+
restoreBodyStyle("overflow", bodyOverflowBeforeLock);
|
|
87
|
+
restoreBodyStyle("padding-right", bodyPaddingRightBeforeLock);
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
/*
|
|
91
|
+
* The declarative form, and the one new surfaces should reach for.
|
|
92
|
+
*
|
|
93
|
+
* Every caller of the pair above writes the same effect: acquire on the way
|
|
94
|
+
* in, release from the cleanup, keyed on whether the surface is up. Written by
|
|
95
|
+
* hand that is four lines with three ways to get it wrong — release omitted,
|
|
96
|
+
* the wrong dependency, or the call placed after an early `return` so it stops
|
|
97
|
+
* running once the surface closes. Issue #3553 is what the first two look like
|
|
98
|
+
* from the outside: the Ask AI panel declared aria-modal, dimmed the page
|
|
99
|
+
* behind it, and let that page scroll away under the wheel because nothing
|
|
100
|
+
* ever took the lock.
|
|
101
|
+
*
|
|
102
|
+
* Passing the open flag straight in keeps the invariant to one line, and keeps
|
|
103
|
+
* it correct for surfaces like AIChatPanel that stay mounted while closed
|
|
104
|
+
* rather than being unmounted by their parent.
|
|
105
|
+
*
|
|
106
|
+
* A layout effect, not an ordinary one, and that is load-bearing for every
|
|
107
|
+
* caller rather than a detail of one. Hiding the page scrollbar widens the
|
|
108
|
+
* viewport that a fixed overlay resolves against, so a surface that painted
|
|
109
|
+
* before the lock landed jumps sideways by the scrollbar's width on any
|
|
110
|
+
* platform drawing a classic scrollbar — the full width for a panel pinned to
|
|
111
|
+
* `right: 0`, half of it for a centred dialog. Locking before paint means the
|
|
112
|
+
* surface is only ever drawn in its final position.
|
|
113
|
+
*/
|
|
114
|
+
export type UsePageScrollLockFunction = (isLocked: boolean) => void;
|
|
115
|
+
|
|
116
|
+
export const usePageScrollLock: UsePageScrollLockFunction = (
|
|
117
|
+
isLocked: boolean,
|
|
118
|
+
): void => {
|
|
119
|
+
useLayoutEffect(() => {
|
|
120
|
+
if (!isLocked) {
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
lockPageScroll();
|
|
125
|
+
|
|
126
|
+
return () => {
|
|
127
|
+
unlockPageScroll();
|
|
128
|
+
};
|
|
129
|
+
}, [isLocked]);
|
|
54
130
|
};
|
|
55
131
|
|
|
56
132
|
/*
|
|
@@ -51,6 +51,11 @@ export interface PermissionCheckableModel {
|
|
|
51
51
|
getReadPermissions: () => Array<Permission>;
|
|
52
52
|
getUpdatePermissions: () => Array<Permission>;
|
|
53
53
|
getDeletePermissions: () => Array<Permission>;
|
|
54
|
+
/*
|
|
55
|
+
* Set by the @OperationalResource() decorator. Optional here because the
|
|
56
|
+
* analytics models that are not decorated never define it at all.
|
|
57
|
+
*/
|
|
58
|
+
isOperationalResource?: boolean | undefined;
|
|
54
59
|
}
|
|
55
60
|
|
|
56
61
|
/*
|
|
@@ -228,6 +233,33 @@ export default class PermissionGate {
|
|
|
228
233
|
model: PermissionCheckableModel,
|
|
229
234
|
action: ModelAction,
|
|
230
235
|
userPermissions: Array<Permission>,
|
|
236
|
+
): boolean {
|
|
237
|
+
if (this.hasDeclaredPermission(model, action, userPermissions)) {
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/*
|
|
242
|
+
* The server widens a model's declared permissions with the matching
|
|
243
|
+
* *AllOperationalResources wildcard for anything marked
|
|
244
|
+
* @OperationalResource (TablePermission.getEffectiveModelPermissions, and
|
|
245
|
+
* its analytics twin). Without the same step here, somebody granted
|
|
246
|
+
* "Edit All Operational Resources" - and nothing else - was told by every
|
|
247
|
+
* gate in the UI that they could not edit a monitor, an incident or a
|
|
248
|
+
* dashboard, while the API happily accepted the write. The gate must not
|
|
249
|
+
* be stricter than the endpoint it is standing in front of.
|
|
250
|
+
*/
|
|
251
|
+
const wildcard: Permission | null = this.getOperationalWildcard(
|
|
252
|
+
model,
|
|
253
|
+
action,
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
return Boolean(wildcard && userPermissions.includes(wildcard));
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
private static hasDeclaredPermission(
|
|
260
|
+
model: PermissionCheckableModel,
|
|
261
|
+
action: ModelAction,
|
|
262
|
+
userPermissions: Array<Permission>,
|
|
231
263
|
): boolean {
|
|
232
264
|
switch (action) {
|
|
233
265
|
case ModelAction.Create:
|
|
@@ -243,6 +275,35 @@ export default class PermissionGate {
|
|
|
243
275
|
}
|
|
244
276
|
}
|
|
245
277
|
|
|
278
|
+
/*
|
|
279
|
+
* The wildcard that covers this operation on this model, or null when the
|
|
280
|
+
* model is not an operational resource. Kept out of getModelPermissions on
|
|
281
|
+
* purpose: that list is what the "you need one of these permissions"
|
|
282
|
+
* sentence is built from, and the server names only the model's own
|
|
283
|
+
* permissions there too.
|
|
284
|
+
*/
|
|
285
|
+
private static getOperationalWildcard(
|
|
286
|
+
model: PermissionCheckableModel,
|
|
287
|
+
action: ModelAction,
|
|
288
|
+
): Permission | null {
|
|
289
|
+
if (!model.isOperationalResource) {
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
switch (action) {
|
|
294
|
+
case ModelAction.Create:
|
|
295
|
+
return Permission.CreateAllOperationalResources;
|
|
296
|
+
case ModelAction.Read:
|
|
297
|
+
return Permission.ReadAllOperationalResources;
|
|
298
|
+
case ModelAction.Update:
|
|
299
|
+
return Permission.EditAllOperationalResources;
|
|
300
|
+
case ModelAction.Delete:
|
|
301
|
+
return Permission.DeleteAllOperationalResources;
|
|
302
|
+
default:
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
246
307
|
/*
|
|
247
308
|
* Applies a gate to a card button in one line. Several tables replace the
|
|
248
309
|
* built in create modal with a button that routes to a dedicated create
|