@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
|
@@ -13,7 +13,12 @@ import BaseAPI from "./BaseAPI";
|
|
|
13
13
|
import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
14
14
|
import PositiveNumber from "../../Types/PositiveNumber";
|
|
15
15
|
import LlmProvider from "../../Models/DatabaseModels/LlmProvider";
|
|
16
|
-
import LLMService, {
|
|
16
|
+
import LLMService, {
|
|
17
|
+
LLMCompletionResponse,
|
|
18
|
+
LLMProviderConfig,
|
|
19
|
+
LLMToolCall,
|
|
20
|
+
LLMToolDefinition,
|
|
21
|
+
} from "../Utils/LLM/LLMService";
|
|
17
22
|
import LlmType from "../../Types/LLM/LlmType";
|
|
18
23
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
19
24
|
import Exception from "../../Types/Exception/Exception";
|
|
@@ -22,6 +27,20 @@ import { JSONObject } from "../../Types/JSON";
|
|
|
22
27
|
import ObjectID from "../../Types/ObjectID";
|
|
23
28
|
import logger from "../Utils/Logger";
|
|
24
29
|
|
|
30
|
+
/*
|
|
31
|
+
* The smallest possible tool: no arguments, one obvious reason to call it.
|
|
32
|
+
* A provider that can call tools at all can call this one.
|
|
33
|
+
*/
|
|
34
|
+
const CONNECTION_TEST_TOOL: LLMToolDefinition = {
|
|
35
|
+
name: "connection_test_ping",
|
|
36
|
+
description:
|
|
37
|
+
"Call this tool to confirm that tool calling works. Takes no arguments.",
|
|
38
|
+
inputSchema: {
|
|
39
|
+
type: "object",
|
|
40
|
+
properties: {},
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
|
|
25
44
|
export default class LlmProviderAPI extends BaseAPI<
|
|
26
45
|
LlmProvider,
|
|
27
46
|
LlmProviderServiceType
|
|
@@ -176,8 +195,12 @@ export default class LlmProviderAPI extends BaseAPI<
|
|
|
176
195
|
...(provider.modelName ? { modelName: provider.modelName } : {}),
|
|
177
196
|
};
|
|
178
197
|
|
|
179
|
-
|
|
180
|
-
|
|
198
|
+
const runTestCompletion: (
|
|
199
|
+
withTools: boolean,
|
|
200
|
+
) => Promise<LLMCompletionResponse> = (
|
|
201
|
+
withTools: boolean,
|
|
202
|
+
): Promise<LLMCompletionResponse> => {
|
|
203
|
+
return LLMService.getCompletion({
|
|
181
204
|
messages: [
|
|
182
205
|
{
|
|
183
206
|
role: "system",
|
|
@@ -186,11 +209,24 @@ export default class LlmProviderAPI extends BaseAPI<
|
|
|
186
209
|
},
|
|
187
210
|
{
|
|
188
211
|
role: "user",
|
|
189
|
-
content:
|
|
212
|
+
content: withTools
|
|
213
|
+
? `Call the ${CONNECTION_TEST_TOOL.name} tool, then reply with the word: OK`
|
|
214
|
+
: "Reply with the word: OK",
|
|
190
215
|
},
|
|
191
216
|
],
|
|
217
|
+
...(withTools ? { tools: [CONNECTION_TEST_TOOL] } : {}),
|
|
192
218
|
temperature: 0,
|
|
193
|
-
|
|
219
|
+
/*
|
|
220
|
+
* Wildly generous for a one-word reply, on purpose. The verdict
|
|
221
|
+
* this route now reports depends on the model getting far
|
|
222
|
+
* enough to emit a tool call, and on a reasoning model
|
|
223
|
+
* (gpt-5, o-series) the thinking tokens are billed against this
|
|
224
|
+
* same cap — at a small cap those models routinely stop at
|
|
225
|
+
* "length" with nothing emitted, and a perfectly tool-capable
|
|
226
|
+
* provider would be reported as unverified. One button click,
|
|
227
|
+
* rarely pressed: the headroom costs nothing worth saving.
|
|
228
|
+
*/
|
|
229
|
+
maxTokens: 4096,
|
|
194
230
|
/*
|
|
195
231
|
* A connection test is a person waiting on a verdict, not a
|
|
196
232
|
* chat turn worth saving. The default ten-attempt ladder would
|
|
@@ -198,37 +234,116 @@ export default class LlmProviderAPI extends BaseAPI<
|
|
|
198
234
|
* exists to give — take the better part of a minute to arrive.
|
|
199
235
|
* One retry still absorbs a single blip.
|
|
200
236
|
*/
|
|
201
|
-
|
|
237
|
+
/*
|
|
238
|
+
* The retry ladder only fires on retryable errors, so the
|
|
239
|
+
* fallback attempt below costs one extra round trip rather than
|
|
240
|
+
* a second ladder — except against an unreachable host, which
|
|
241
|
+
* is why the fallback takes no retries of its own.
|
|
242
|
+
*/
|
|
243
|
+
requestRetries: withTools ? 1 : 0,
|
|
202
244
|
llmProviderConfig: llmProviderConfig,
|
|
203
245
|
...(provider.additionalParams
|
|
204
246
|
? { additionalParams: provider.additionalParams }
|
|
205
247
|
: {}),
|
|
206
248
|
});
|
|
207
|
-
}
|
|
208
|
-
logger.error(err);
|
|
249
|
+
};
|
|
209
250
|
|
|
251
|
+
let testResponse: LLMCompletionResponse | null = null;
|
|
252
|
+
let toolsOfferFailed: boolean = false;
|
|
253
|
+
|
|
254
|
+
try {
|
|
255
|
+
/*
|
|
256
|
+
* Ask of the provider what Ask AI actually asks of it, not just
|
|
257
|
+
* "are you reachable". Every OneUptime AI feature reads the
|
|
258
|
+
* user's data exclusively through tools, so a model or endpoint
|
|
259
|
+
* that holds a conversation but cannot call one is unusable for
|
|
260
|
+
* all of them — and the way that surfaces to the user is the
|
|
261
|
+
* assistant insisting it has no tool for what they asked, which
|
|
262
|
+
* reads as a missing feature rather than a misconfigured
|
|
263
|
+
* provider. This button is the only place an operator gets a
|
|
264
|
+
* verdict, so it has to test the capability the product depends
|
|
265
|
+
* on.
|
|
266
|
+
*/
|
|
267
|
+
testResponse = await runTestCompletion(true);
|
|
268
|
+
} catch (err) {
|
|
210
269
|
/*
|
|
211
|
-
*
|
|
212
|
-
*
|
|
270
|
+
* Some OpenAI-compatible backends reject an unknown `tools` field
|
|
271
|
+
* outright. Falling back to the original tool-less prompt keeps
|
|
272
|
+
* this button answering the question it has always answered —
|
|
273
|
+
* "is my API key, model and base URL right?" — instead of
|
|
274
|
+
* reporting a broken connection for a provider that merely
|
|
275
|
+
* cannot call tools. Only if THAT fails too is the provider
|
|
276
|
+
* genuinely unreachable.
|
|
213
277
|
*/
|
|
214
|
-
|
|
215
|
-
err instanceof Exception
|
|
216
|
-
? err.message
|
|
217
|
-
: "Failed to connect to the LLM provider. Please verify the API key, model name, and base URL.";
|
|
278
|
+
logger.error(err);
|
|
218
279
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
280
|
+
try {
|
|
281
|
+
testResponse = await runTestCompletion(false);
|
|
282
|
+
toolsOfferFailed = true;
|
|
283
|
+
} catch (retryErr) {
|
|
284
|
+
logger.error(retryErr);
|
|
285
|
+
|
|
286
|
+
/*
|
|
287
|
+
* Surface the provider's own error (bad key, unknown model,
|
|
288
|
+
* unreachable base URL, etc.) so the user can fix their config.
|
|
289
|
+
*/
|
|
290
|
+
const providerMessage: string =
|
|
291
|
+
retryErr instanceof Exception
|
|
292
|
+
? retryErr.message
|
|
293
|
+
: "Failed to connect to the LLM provider. Please verify the API key, model name, and base URL.";
|
|
294
|
+
|
|
295
|
+
return Response.sendErrorResponse(
|
|
296
|
+
req,
|
|
297
|
+
res,
|
|
298
|
+
new BadDataException(
|
|
299
|
+
`LLM Provider test failed: ${providerMessage.substring(0, 1000)}`,
|
|
300
|
+
),
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/*
|
|
306
|
+
* A missing tool call is a warning, never a failure: a provider can
|
|
307
|
+
* be perfectly well configured for everything except tool calling,
|
|
308
|
+
* and refusing to certify it would block a working setup. Saying
|
|
309
|
+
* nothing would be worse — the operator would leave believing Ask
|
|
310
|
+
* AI works, and find out only when it tells a user it has no tool.
|
|
311
|
+
*/
|
|
312
|
+
const calledTheTestTool: boolean =
|
|
313
|
+
!toolsOfferFailed &&
|
|
314
|
+
Boolean(
|
|
315
|
+
testResponse?.toolCalls?.some((toolCall: LLMToolCall) => {
|
|
316
|
+
return toolCall.name === CONNECTION_TEST_TOOL.name;
|
|
317
|
+
}),
|
|
225
318
|
);
|
|
319
|
+
|
|
320
|
+
/*
|
|
321
|
+
* A reply that ran into the output cap proves nothing either way:
|
|
322
|
+
* the model may have been about to call the tool. Report that as
|
|
323
|
+
* undetermined rather than sending the operator off to replace a
|
|
324
|
+
* model that may be entirely capable.
|
|
325
|
+
*/
|
|
326
|
+
const wasTruncated: boolean =
|
|
327
|
+
!calledTheTestTool && testResponse?.stopReason === "length";
|
|
328
|
+
|
|
329
|
+
let message: string =
|
|
330
|
+
"Connection successful. The LLM provider responded to a test prompt and used tool calling.";
|
|
331
|
+
|
|
332
|
+
if (wasTruncated) {
|
|
333
|
+
message =
|
|
334
|
+
"Connection successful, but tool calling could not be determined — the reply hit the output limit before any tool call appeared. This says nothing either way about the model; try the test again.";
|
|
335
|
+
} else if (!calledTheTestTool) {
|
|
336
|
+
const why: string = toolsOfferFailed
|
|
337
|
+
? "the test request that offered a tool failed, and only a plain prompt succeeded"
|
|
338
|
+
: "the model answered in prose instead of calling the tool it was offered";
|
|
339
|
+
|
|
340
|
+
message = `Connection successful, but tool calling could not be verified — ${why}. OneUptime's AI features (Ask AI, investigations) read your data through tools, so a provider that cannot call them will answer that it has no tool for the question. Check that this model and endpoint support tool/function calling.`;
|
|
226
341
|
}
|
|
227
342
|
|
|
228
343
|
return Response.sendJsonObjectResponse(req, res, {
|
|
229
344
|
success: true,
|
|
230
|
-
|
|
231
|
-
|
|
345
|
+
supportsToolCalling: calledTheTestTool,
|
|
346
|
+
message: message,
|
|
232
347
|
});
|
|
233
348
|
} catch (err) {
|
|
234
349
|
next(err);
|
|
@@ -830,6 +830,20 @@ export const IpWhitelist: string = process.env["IP_WHITELIST"] || "";
|
|
|
830
830
|
export const DisableTelemetry: boolean =
|
|
831
831
|
process.env["DISABLE_TELEMETRY"] === "true";
|
|
832
832
|
|
|
833
|
+
/*
|
|
834
|
+
* Master switch for fault classification (code-fault / user-error /
|
|
835
|
+
* expected-denial / infrastructure). When false, ErrorClassResolver reports
|
|
836
|
+
* CodeFault for everything, so every thrown value is recorded as an exception
|
|
837
|
+
* event, marked ERROR and logged at ERROR — exactly the pre-classification
|
|
838
|
+
* behaviour.
|
|
839
|
+
*
|
|
840
|
+
* Default ON. It exists so a regression in classification is a config flip on
|
|
841
|
+
* a running fleet rather than a redeploy, which matters because this runs on
|
|
842
|
+
* the universal error path of every decorated method in the product.
|
|
843
|
+
*/
|
|
844
|
+
export const TelemetryErrorClassEnabled: boolean =
|
|
845
|
+
process.env["TELEMETRY_ERROR_CLASS_ENABLED"] !== "false";
|
|
846
|
+
|
|
833
847
|
/*
|
|
834
848
|
* Opt out of the daily "is a newer OneUptime released?" check against the
|
|
835
849
|
* GitHub API. Deliberately separate from DISABLE_TELEMETRY, which turns off
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from "typeorm";
|
|
2
|
+
|
|
3
|
+
export class AddNetworkSiteTypeParentHierarchy1790700000000
|
|
4
|
+
implements MigrationInterface
|
|
5
|
+
{
|
|
6
|
+
public name: string = "AddNetworkSiteTypeParentHierarchy1790700000000";
|
|
7
|
+
|
|
8
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
9
|
+
await queryRunner.query(
|
|
10
|
+
`ALTER TABLE "NetworkSite" DROP CONSTRAINT "FK_33a461f17262b0a4d5be6948ebe"`,
|
|
11
|
+
);
|
|
12
|
+
await queryRunner.query(
|
|
13
|
+
`ALTER TABLE "NetworkSite" DROP CONSTRAINT "FK_7de8eaaa47632114c6864d67d35"`,
|
|
14
|
+
);
|
|
15
|
+
await queryRunner.query(
|
|
16
|
+
`ALTER TABLE "NetworkSiteType" ADD "parentNetworkSiteTypeId" uuid`,
|
|
17
|
+
);
|
|
18
|
+
await queryRunner.query(
|
|
19
|
+
`CREATE INDEX "IDX_d693eaf5e12242179e348daf09" ON "NetworkSiteType" ("projectId", "parentNetworkSiteTypeId") `,
|
|
20
|
+
);
|
|
21
|
+
await queryRunner.query(
|
|
22
|
+
`ALTER TABLE "NetworkSiteType" ADD CONSTRAINT "FK_ee9400ec824926d129b31d5fcf0" FOREIGN KEY ("parentNetworkSiteTypeId") REFERENCES "NetworkSiteType"("_id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
|
|
23
|
+
);
|
|
24
|
+
await queryRunner.query(
|
|
25
|
+
`ALTER TABLE "NetworkSite" ADD CONSTRAINT "FK_7de8eaaa47632114c6864d67d35" FOREIGN KEY ("networkSiteTypeId") REFERENCES "NetworkSiteType"("_id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
|
|
26
|
+
);
|
|
27
|
+
await queryRunner.query(
|
|
28
|
+
`ALTER TABLE "NetworkSite" ADD CONSTRAINT "FK_33a461f17262b0a4d5be6948ebe" FOREIGN KEY ("parentSiteId") REFERENCES "NetworkSite"("_id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
33
|
+
await queryRunner.query(
|
|
34
|
+
`ALTER TABLE "NetworkSite" DROP CONSTRAINT "FK_33a461f17262b0a4d5be6948ebe"`,
|
|
35
|
+
);
|
|
36
|
+
await queryRunner.query(
|
|
37
|
+
`ALTER TABLE "NetworkSite" DROP CONSTRAINT "FK_7de8eaaa47632114c6864d67d35"`,
|
|
38
|
+
);
|
|
39
|
+
await queryRunner.query(
|
|
40
|
+
`ALTER TABLE "NetworkSiteType" DROP CONSTRAINT "FK_ee9400ec824926d129b31d5fcf0"`,
|
|
41
|
+
);
|
|
42
|
+
await queryRunner.query(
|
|
43
|
+
`DROP INDEX "public"."IDX_d693eaf5e12242179e348daf09"`,
|
|
44
|
+
);
|
|
45
|
+
await queryRunner.query(
|
|
46
|
+
`ALTER TABLE "NetworkSiteType" DROP COLUMN "parentNetworkSiteTypeId"`,
|
|
47
|
+
);
|
|
48
|
+
await queryRunner.query(
|
|
49
|
+
`ALTER TABLE "NetworkSite" ADD CONSTRAINT "FK_7de8eaaa47632114c6864d67d35" FOREIGN KEY ("networkSiteTypeId") REFERENCES "NetworkSiteType"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
|
|
50
|
+
);
|
|
51
|
+
await queryRunner.query(
|
|
52
|
+
`ALTER TABLE "NetworkSite" ADD CONSTRAINT "FK_33a461f17262b0a4d5be6948ebe" FOREIGN KEY ("parentSiteId") REFERENCES "NetworkSite"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from "typeorm";
|
|
2
|
+
|
|
3
|
+
export class AddEnterpriseLicenseUsageProvenance1790900000000
|
|
4
|
+
implements MigrationInterface
|
|
5
|
+
{
|
|
6
|
+
public name: string = "AddEnterpriseLicenseUsageProvenance1790900000000";
|
|
7
|
+
|
|
8
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
9
|
+
await queryRunner.query(
|
|
10
|
+
`ALTER TABLE "EnterpriseLicense" ADD "userCountSource" character varying(100)`,
|
|
11
|
+
);
|
|
12
|
+
await queryRunner.query(
|
|
13
|
+
`ALTER TABLE "EnterpriseLicense" ADD "legacyUserCount" integer`,
|
|
14
|
+
);
|
|
15
|
+
await queryRunner.query(
|
|
16
|
+
`ALTER TABLE "EnterpriseLicense" ADD "legacyUserCountUpdatedAt" TIMESTAMP WITH TIME ZONE`,
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
21
|
+
await queryRunner.query(
|
|
22
|
+
`ALTER TABLE "EnterpriseLicense" DROP COLUMN "legacyUserCountUpdatedAt"`,
|
|
23
|
+
);
|
|
24
|
+
await queryRunner.query(
|
|
25
|
+
`ALTER TABLE "EnterpriseLicense" DROP COLUMN "legacyUserCount"`,
|
|
26
|
+
);
|
|
27
|
+
await queryRunner.query(
|
|
28
|
+
`ALTER TABLE "EnterpriseLicense" DROP COLUMN "userCountSource"`,
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from "typeorm";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* The fault class becomes a first-class, always-populated column on the
|
|
5
|
+
* exception group, instead of a nullable AI verdict.
|
|
6
|
+
*
|
|
7
|
+
* Both columns are NOT NULL DEFAULT on purpose, and that is the whole point of
|
|
8
|
+
* this migration rather than an incidental choice. The Issues list scopes with
|
|
9
|
+
* `IncludesNone(NON_ACTIONABLE_ERROR_CLASSES)`, which compiles to SQL
|
|
10
|
+
* `"errorClass" NOT IN ('user-error', 'expected-denial')`. In SQL,
|
|
11
|
+
* `NULL NOT IN (...)` evaluates to NULL — falsy, not true — so with a nullable
|
|
12
|
+
* column every unclassified row would fail that predicate and vanish from the
|
|
13
|
+
* "show me the real failures" view. That is the exact inverse of the intended
|
|
14
|
+
* fail-safe. With NOT NULL DEFAULT 'unknown', a row nobody classified carries
|
|
15
|
+
* a value that is not in the suppressed set, so it is an Issue by
|
|
16
|
+
* construction, and the ADD COLUMN backfills every existing row in one pass.
|
|
17
|
+
*
|
|
18
|
+
* aiClassification is left in place: it is the same vocabulary under its older
|
|
19
|
+
* name (see Types/Telemetry/ErrorClass) and is still what the triage runner
|
|
20
|
+
* writes, so dropping it here would break that writer. It is copied across
|
|
21
|
+
* below and can be retired once every writer has moved to errorClass.
|
|
22
|
+
*/
|
|
23
|
+
export class AddTelemetryExceptionErrorClass1790900000000
|
|
24
|
+
implements MigrationInterface
|
|
25
|
+
{
|
|
26
|
+
public name: string = "AddTelemetryExceptionErrorClass1790900000000";
|
|
27
|
+
|
|
28
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
29
|
+
await queryRunner.query(
|
|
30
|
+
`ALTER TABLE "TelemetryException" ADD "errorClass" character varying(100) NOT NULL DEFAULT 'unknown'`,
|
|
31
|
+
);
|
|
32
|
+
await queryRunner.query(
|
|
33
|
+
`ALTER TABLE "TelemetryException" ADD "errorClassSource" character varying(100) NOT NULL DEFAULT 'default'`,
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
/*
|
|
37
|
+
* Carry the existing AI verdicts over. Same five string values, so this is
|
|
38
|
+
* a rename rather than a translation.
|
|
39
|
+
*
|
|
40
|
+
* Deliberately not filtered to the known enum members: a value this does
|
|
41
|
+
* not recognise still fails the `NOT IN ('user-error', 'expected-denial')`
|
|
42
|
+
* scope and therefore stays visible, which is the safe direction. Silently
|
|
43
|
+
* dropping it to 'unknown' would lose information for no gain.
|
|
44
|
+
*/
|
|
45
|
+
await queryRunner.query(`
|
|
46
|
+
UPDATE "TelemetryException"
|
|
47
|
+
SET "errorClass" = "aiClassification", "errorClassSource" = 'ai'
|
|
48
|
+
WHERE "aiClassification" IS NOT NULL
|
|
49
|
+
`);
|
|
50
|
+
|
|
51
|
+
/*
|
|
52
|
+
* Reconstruct what the emitting code would have declared, for groups the
|
|
53
|
+
* AI never looked at, so the Issues list is quiet on day one instead of
|
|
54
|
+
* only for exceptions raised after this deploy.
|
|
55
|
+
*
|
|
56
|
+
* Every class listed here overrides getErrorClass to UserError or
|
|
57
|
+
* ExpectedDenial. Both collapse to 'user-error' here: the two are
|
|
58
|
+
* interchangeable for the only thing this backfill drives (they are the
|
|
59
|
+
* two members of NON_ACTIONABLE_ERROR_CLASSES), and guessing the finer
|
|
60
|
+
* split from a type name alone would be inventing precision the data does
|
|
61
|
+
* not have. Live traffic re-stamps the precise class on the next
|
|
62
|
+
* occurrence.
|
|
63
|
+
*
|
|
64
|
+
* Spelling matters here and is easy to get wrong: exceptionType comes from
|
|
65
|
+
* the constructor name, so it is 'SSOAuthorizationException' (the file is
|
|
66
|
+
* SsoAuthorizationException.ts) and 'UnableToReachServer' (no trailing
|
|
67
|
+
* Exception). MasterPasswordRequiredException carries no override of its
|
|
68
|
+
* own — it inherits ExpectedDenial from NotAuthenticatedException — so it
|
|
69
|
+
* has to be listed explicitly.
|
|
70
|
+
*
|
|
71
|
+
* The bare numeric values are the same exceptions seen through an older
|
|
72
|
+
* emit path (and through third-party SDKs), which reported the numeric
|
|
73
|
+
* status as exception.type rather than the class name. 408 and 415 are
|
|
74
|
+
* deliberately ABSENT: they are TimeoutException and UnableToReachServer,
|
|
75
|
+
* which are Infrastructure — real failures that must keep showing up as
|
|
76
|
+
* Issues. 500 and 503 are absent for the same reason.
|
|
77
|
+
*
|
|
78
|
+
* Guarded on "aiClassification" IS NULL so it cannot overwrite an AI
|
|
79
|
+
* verdict. Type name is a class-level GENERALISATION ("BadDataException
|
|
80
|
+
* usually means the caller sent something wrong"), whereas the AI looked
|
|
81
|
+
* at this specific group; and the only disagreement that matters is one
|
|
82
|
+
* where the AI said code-fault and this would flip it to user-error, i.e.
|
|
83
|
+
* hide a real failure. Deferring keeps the failure mode as
|
|
84
|
+
* over-reporting.
|
|
85
|
+
*/
|
|
86
|
+
await queryRunner.query(`
|
|
87
|
+
UPDATE "TelemetryException"
|
|
88
|
+
SET "errorClass" = 'user-error', "errorClassSource" = 'declared'
|
|
89
|
+
WHERE "aiClassification" IS NULL
|
|
90
|
+
AND (
|
|
91
|
+
"exceptionType" IN (
|
|
92
|
+
'BadDataException',
|
|
93
|
+
'BadRequestException',
|
|
94
|
+
'NotFoundException',
|
|
95
|
+
'PayloadTooLargeException',
|
|
96
|
+
'TenantNotFoundException',
|
|
97
|
+
'ForbiddenException',
|
|
98
|
+
'NotAuthenticatedException',
|
|
99
|
+
'NotAuthorizedException',
|
|
100
|
+
'PaymentRequiredException',
|
|
101
|
+
'SSOAuthorizationException',
|
|
102
|
+
'MasterPasswordRequiredException',
|
|
103
|
+
'TooManyRequestsException'
|
|
104
|
+
)
|
|
105
|
+
OR "exceptionType" IN (
|
|
106
|
+
'400', '401', '402', '403', '404', '405', '406', '413', '422', '429'
|
|
107
|
+
)
|
|
108
|
+
)
|
|
109
|
+
`);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/*
|
|
113
|
+
* Nothing to un-backfill: both columns go away, and aiClassification — the
|
|
114
|
+
* only source the backfill read — was never modified.
|
|
115
|
+
*/
|
|
116
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
117
|
+
await queryRunner.query(
|
|
118
|
+
`ALTER TABLE "TelemetryException" DROP COLUMN "errorClassSource"`,
|
|
119
|
+
);
|
|
120
|
+
await queryRunner.query(
|
|
121
|
+
`ALTER TABLE "TelemetryException" DROP COLUMN "errorClass"`,
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from "typeorm";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* The two tables behind owner email burst coalescing: a queue of notifications
|
|
5
|
+
* that is simultaneously the product's first per-recipient email volume record,
|
|
6
|
+
* and a ledger of the flushes that drained it.
|
|
7
|
+
*
|
|
8
|
+
* Regenerating this migration would silently reverse four decisions, so each is
|
|
9
|
+
* written down here rather than left to be rediscovered.
|
|
10
|
+
*
|
|
11
|
+
* The UNIQUE index on UserNotificationEmailRollupBatch (projectId, userId,
|
|
12
|
+
* toEmail, claimEpochStartsAt) IS the exactly-once mechanism across worker
|
|
13
|
+
* replicas, not an integrity nicety. A conditional UPDATE cannot substitute for
|
|
14
|
+
* it: DatabaseService._updateBy resolves its predicate in a separate _findBy and
|
|
15
|
+
* then writes per row by _id, never re-checking the predicate at write time, so
|
|
16
|
+
* "update the row if nobody has claimed it" is a check-then-act race. An INSERT
|
|
17
|
+
* under this index is atomic in Postgres, and the loser's unique violation is
|
|
18
|
+
* how the second replica learns to stand down. Because claimEpochStartsAt is a
|
|
19
|
+
* five-minute wall-clock bucket, the same index also hard-caps a recipient at
|
|
20
|
+
* twelve rollup emails an hour.
|
|
21
|
+
*
|
|
22
|
+
* All four projectId / userId foreign keys are ON DELETE CASCADE. Queued mail
|
|
23
|
+
* about a deleted project, addressed to a deleted user, must go with them; there
|
|
24
|
+
* is nothing to preserve and nothing sensible to send.
|
|
25
|
+
*
|
|
26
|
+
* rollupBatchId deliberately carries NO foreign key. A CASCADE would delete
|
|
27
|
+
* items when their batch is pruned at thirty days while the items themselves are
|
|
28
|
+
* kept for seven, and a SET NULL would un-stamp already-sent items and re-send a
|
|
29
|
+
* month-old rollup. The column is a stamp, not a relation.
|
|
30
|
+
*
|
|
31
|
+
* sentAt is nullable with no default because NULL means "still pending", which
|
|
32
|
+
* is exactly true of every row that will ever exist. That is what removes the
|
|
33
|
+
* need for any data migration or backfill: both tables start empty, which is the
|
|
34
|
+
* correct state on every install, new or upgraded.
|
|
35
|
+
*
|
|
36
|
+
* eventType is character varying(500), not (100) like most short text in this
|
|
37
|
+
* schema. The stored NotificationSettingEventType values are English prose
|
|
38
|
+
* sentences - the longest today is 92 characters - and
|
|
39
|
+
* DatabaseService.checkMaxLengthOfFields throws on overflow, which on this code
|
|
40
|
+
* path would route every notification through the write path's fail-open catch.
|
|
41
|
+
*/
|
|
42
|
+
export class AddUserNotificationEmailRollup1791000000000
|
|
43
|
+
implements MigrationInterface
|
|
44
|
+
{
|
|
45
|
+
public name: string = "AddUserNotificationEmailRollup1791000000000";
|
|
46
|
+
|
|
47
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
48
|
+
await queryRunner.query(
|
|
49
|
+
`CREATE TABLE "UserNotificationEmailRollupItem" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "userId" uuid NOT NULL, "toEmail" character varying(100) NOT NULL, "eventType" character varying(500) NOT NULL, "rollupCategory" character varying(100) NOT NULL, "subject" character varying(500) NOT NULL, "viewLink" text, "sentAt" TIMESTAMP WITH TIME ZONE, "rollupBatchId" uuid, CONSTRAINT "PK_7a4125bfac97ef5ab00115dda89" PRIMARY KEY ("_id"))`,
|
|
50
|
+
);
|
|
51
|
+
await queryRunner.query(
|
|
52
|
+
`CREATE INDEX "IDX_a801450828b245c04caa1903bb" ON "UserNotificationEmailRollupItem" ("projectId") `,
|
|
53
|
+
);
|
|
54
|
+
await queryRunner.query(
|
|
55
|
+
`CREATE INDEX "IDX_45ee190ea4724e6795ff3d0402" ON "UserNotificationEmailRollupItem" ("userId") `,
|
|
56
|
+
);
|
|
57
|
+
await queryRunner.query(
|
|
58
|
+
`CREATE INDEX "IDX_519a1a3aba8c1de67d63137e30" ON "UserNotificationEmailRollupItem" ("rollupBatchId") `,
|
|
59
|
+
);
|
|
60
|
+
await queryRunner.query(
|
|
61
|
+
`CREATE INDEX "IDX_103a2b3c5914ddfd4088942798" ON "UserNotificationEmailRollupItem" ("sentAt", "createdAt") `,
|
|
62
|
+
);
|
|
63
|
+
await queryRunner.query(
|
|
64
|
+
`CREATE INDEX "IDX_ed339bd9a070c8299e9ba0a4ad" ON "UserNotificationEmailRollupItem" ("projectId", "userId", "toEmail", "rollupCategory", "createdAt") `,
|
|
65
|
+
);
|
|
66
|
+
await queryRunner.query(
|
|
67
|
+
`CREATE TABLE "UserNotificationEmailRollupBatch" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "userId" uuid NOT NULL, "toEmail" character varying(100) NOT NULL, "claimEpochStartsAt" TIMESTAMP WITH TIME ZONE NOT NULL, "claimedAt" TIMESTAMP WITH TIME ZONE NOT NULL, "sentAt" TIMESTAMP WITH TIME ZONE, "itemCount" integer, "status" character varying(100) NOT NULL, "statusMessage" character varying(500), CONSTRAINT "PK_b4fdcbba719e877a310525c134f" PRIMARY KEY ("_id"))`,
|
|
68
|
+
);
|
|
69
|
+
await queryRunner.query(
|
|
70
|
+
`CREATE INDEX "IDX_2ae4bc5b89abee188172985d93" ON "UserNotificationEmailRollupBatch" ("projectId") `,
|
|
71
|
+
);
|
|
72
|
+
await queryRunner.query(
|
|
73
|
+
`CREATE INDEX "IDX_c6d5acfdf3f3781427a5ff8349" ON "UserNotificationEmailRollupBatch" ("userId") `,
|
|
74
|
+
);
|
|
75
|
+
await queryRunner.query(
|
|
76
|
+
`CREATE UNIQUE INDEX "IDX_6f9067198db90df3e5e4c1d2a2" ON "UserNotificationEmailRollupBatch" ("projectId", "userId", "toEmail", "claimEpochStartsAt") `,
|
|
77
|
+
);
|
|
78
|
+
await queryRunner.query(
|
|
79
|
+
`ALTER TABLE "UserNotificationEmailRollupItem" ADD CONSTRAINT "FK_a801450828b245c04caa1903bb7" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
|
|
80
|
+
);
|
|
81
|
+
await queryRunner.query(
|
|
82
|
+
`ALTER TABLE "UserNotificationEmailRollupItem" ADD CONSTRAINT "FK_45ee190ea4724e6795ff3d04027" FOREIGN KEY ("userId") REFERENCES "User"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
|
|
83
|
+
);
|
|
84
|
+
await queryRunner.query(
|
|
85
|
+
`ALTER TABLE "UserNotificationEmailRollupBatch" ADD CONSTRAINT "FK_2ae4bc5b89abee188172985d93a" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
|
|
86
|
+
);
|
|
87
|
+
await queryRunner.query(
|
|
88
|
+
`ALTER TABLE "UserNotificationEmailRollupBatch" ADD CONSTRAINT "FK_c6d5acfdf3f3781427a5ff83498" FOREIGN KEY ("userId") REFERENCES "User"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
93
|
+
await queryRunner.query(
|
|
94
|
+
`ALTER TABLE "UserNotificationEmailRollupBatch" DROP CONSTRAINT "FK_c6d5acfdf3f3781427a5ff83498"`,
|
|
95
|
+
);
|
|
96
|
+
await queryRunner.query(
|
|
97
|
+
`ALTER TABLE "UserNotificationEmailRollupBatch" DROP CONSTRAINT "FK_2ae4bc5b89abee188172985d93a"`,
|
|
98
|
+
);
|
|
99
|
+
await queryRunner.query(
|
|
100
|
+
`ALTER TABLE "UserNotificationEmailRollupItem" DROP CONSTRAINT "FK_45ee190ea4724e6795ff3d04027"`,
|
|
101
|
+
);
|
|
102
|
+
await queryRunner.query(
|
|
103
|
+
`ALTER TABLE "UserNotificationEmailRollupItem" DROP CONSTRAINT "FK_a801450828b245c04caa1903bb7"`,
|
|
104
|
+
);
|
|
105
|
+
await queryRunner.query(
|
|
106
|
+
`DROP INDEX "public"."IDX_6f9067198db90df3e5e4c1d2a2"`,
|
|
107
|
+
);
|
|
108
|
+
await queryRunner.query(
|
|
109
|
+
`DROP INDEX "public"."IDX_c6d5acfdf3f3781427a5ff8349"`,
|
|
110
|
+
);
|
|
111
|
+
await queryRunner.query(
|
|
112
|
+
`DROP INDEX "public"."IDX_2ae4bc5b89abee188172985d93"`,
|
|
113
|
+
);
|
|
114
|
+
await queryRunner.query(`DROP TABLE "UserNotificationEmailRollupBatch"`);
|
|
115
|
+
await queryRunner.query(
|
|
116
|
+
`DROP INDEX "public"."IDX_ed339bd9a070c8299e9ba0a4ad"`,
|
|
117
|
+
);
|
|
118
|
+
await queryRunner.query(
|
|
119
|
+
`DROP INDEX "public"."IDX_103a2b3c5914ddfd4088942798"`,
|
|
120
|
+
);
|
|
121
|
+
await queryRunner.query(
|
|
122
|
+
`DROP INDEX "public"."IDX_519a1a3aba8c1de67d63137e30"`,
|
|
123
|
+
);
|
|
124
|
+
await queryRunner.query(
|
|
125
|
+
`DROP INDEX "public"."IDX_45ee190ea4724e6795ff3d0402"`,
|
|
126
|
+
);
|
|
127
|
+
await queryRunner.query(
|
|
128
|
+
`DROP INDEX "public"."IDX_a801450828b245c04caa1903bb"`,
|
|
129
|
+
);
|
|
130
|
+
await queryRunner.query(`DROP TABLE "UserNotificationEmailRollupItem"`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from "typeorm";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* The per-user escape hatch from owner email burst rollup: one row per
|
|
5
|
+
* (user, project) saying whether that person's notification emails may be
|
|
6
|
+
* coalesced during a burst.
|
|
7
|
+
*
|
|
8
|
+
* Two decisions here that a regeneration would silently reverse.
|
|
9
|
+
*
|
|
10
|
+
* isEnabled is NOT NULL DEFAULT TRUE, and the table starts empty. Rollup is on
|
|
11
|
+
* by default and there is no backfill, so almost nobody will ever have a row;
|
|
12
|
+
* the read path treats an absent row and isEnabled = true identically, which
|
|
13
|
+
* is what lets this ship without writing a row for a single existing member.
|
|
14
|
+
* Flip the default to false and every project member silently opts out of a
|
|
15
|
+
* feature they were never asked about.
|
|
16
|
+
*
|
|
17
|
+
* Both foreign keys are ON DELETE CASCADE. A preference about a deleted
|
|
18
|
+
* project, held by a deleted user, has nothing left to express - and the
|
|
19
|
+
* tenant column is NOT NULL, so SET NULL could not be satisfied anyway.
|
|
20
|
+
*
|
|
21
|
+
* There is deliberately no UNIQUE index on (projectId, userId), even though
|
|
22
|
+
* the service treats the pair as unique. The dashboard creates the row lazily
|
|
23
|
+
* on the first toggle and the service's check-then-create narrows the race;
|
|
24
|
+
* adding the constraint would be a correctness improvement but it would turn
|
|
25
|
+
* the losing side of that race from a harmless duplicate into a 500 on a
|
|
26
|
+
* settings page, and both rows say the same thing in every flow the UI can
|
|
27
|
+
* produce. Worth revisiting if the row ever carries more than one field.
|
|
28
|
+
*/
|
|
29
|
+
export class AddUserNotificationEmailRollupSetting1791100000000
|
|
30
|
+
implements MigrationInterface
|
|
31
|
+
{
|
|
32
|
+
public name: string = "AddUserNotificationEmailRollupSetting1791100000000";
|
|
33
|
+
|
|
34
|
+
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
35
|
+
await queryRunner.query(
|
|
36
|
+
`CREATE TABLE "UserNotificationEmailRollupSetting" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "userId" uuid NOT NULL, "isEnabled" boolean NOT NULL DEFAULT true, "createdByUserId" uuid, "deletedByUserId" uuid, CONSTRAINT "PK_2d06015d532e73decda61f6c729" PRIMARY KEY ("_id"))`,
|
|
37
|
+
);
|
|
38
|
+
await queryRunner.query(
|
|
39
|
+
`CREATE INDEX "IDX_fc43fd93f6c9b84517ec70a756" ON "UserNotificationEmailRollupSetting" ("projectId") `,
|
|
40
|
+
);
|
|
41
|
+
await queryRunner.query(
|
|
42
|
+
`CREATE INDEX "IDX_0eb2b532417a885a83ef3a246c" ON "UserNotificationEmailRollupSetting" ("userId") `,
|
|
43
|
+
);
|
|
44
|
+
await queryRunner.query(
|
|
45
|
+
`ALTER TABLE "UserNotificationEmailRollupSetting" ADD CONSTRAINT "FK_fc43fd93f6c9b84517ec70a756e" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
|
|
46
|
+
);
|
|
47
|
+
await queryRunner.query(
|
|
48
|
+
`ALTER TABLE "UserNotificationEmailRollupSetting" ADD CONSTRAINT "FK_0eb2b532417a885a83ef3a246cf" FOREIGN KEY ("userId") REFERENCES "User"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
|
|
49
|
+
);
|
|
50
|
+
await queryRunner.query(
|
|
51
|
+
`ALTER TABLE "UserNotificationEmailRollupSetting" ADD CONSTRAINT "FK_b3e85e262ece458665f3b67ec9c" FOREIGN KEY ("createdByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
|
|
52
|
+
);
|
|
53
|
+
await queryRunner.query(
|
|
54
|
+
`ALTER TABLE "UserNotificationEmailRollupSetting" ADD CONSTRAINT "FK_4f8b04650019cb0b9e4cee5f561" FOREIGN KEY ("deletedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
59
|
+
await queryRunner.query(
|
|
60
|
+
`ALTER TABLE "UserNotificationEmailRollupSetting" DROP CONSTRAINT "FK_4f8b04650019cb0b9e4cee5f561"`,
|
|
61
|
+
);
|
|
62
|
+
await queryRunner.query(
|
|
63
|
+
`ALTER TABLE "UserNotificationEmailRollupSetting" DROP CONSTRAINT "FK_b3e85e262ece458665f3b67ec9c"`,
|
|
64
|
+
);
|
|
65
|
+
await queryRunner.query(
|
|
66
|
+
`ALTER TABLE "UserNotificationEmailRollupSetting" DROP CONSTRAINT "FK_0eb2b532417a885a83ef3a246cf"`,
|
|
67
|
+
);
|
|
68
|
+
await queryRunner.query(
|
|
69
|
+
`ALTER TABLE "UserNotificationEmailRollupSetting" DROP CONSTRAINT "FK_fc43fd93f6c9b84517ec70a756e"`,
|
|
70
|
+
);
|
|
71
|
+
await queryRunner.query(
|
|
72
|
+
`DROP INDEX "public"."IDX_0eb2b532417a885a83ef3a246c"`,
|
|
73
|
+
);
|
|
74
|
+
await queryRunner.query(
|
|
75
|
+
`DROP INDEX "public"."IDX_fc43fd93f6c9b84517ec70a756"`,
|
|
76
|
+
);
|
|
77
|
+
await queryRunner.query(`DROP TABLE "UserNotificationEmailRollupSetting"`);
|
|
78
|
+
}
|
|
79
|
+
}
|