@oneuptime/common 12.0.32 → 12.0.34

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.
Files changed (1191) hide show
  1. package/Models/AnalyticsModels/RumSession.ts +117 -1
  2. package/Models/AnalyticsModels/RumSessionChunk.ts +13 -0
  3. package/Models/AnalyticsModels/Span.ts +14 -0
  4. package/Models/DatabaseModels/AlertCustomField.ts +77 -3
  5. package/Models/DatabaseModels/ApiKeyPermission.ts +3 -27
  6. package/Models/DatabaseModels/EnterpriseLicense.ts +56 -0
  7. package/Models/DatabaseModels/IncidentCustomField.ts +77 -3
  8. package/Models/DatabaseModels/Index.ts +10 -0
  9. package/Models/DatabaseModels/InventoryItemCustomField.ts +77 -3
  10. package/Models/DatabaseModels/Monitor.ts +76 -0
  11. package/Models/DatabaseModels/MonitorCustomField.ts +77 -3
  12. package/Models/DatabaseModels/NetworkAlertPolicy.ts +690 -0
  13. package/Models/DatabaseModels/NetworkDevice.ts +176 -1
  14. package/Models/DatabaseModels/NetworkSite.ts +201 -2
  15. package/Models/DatabaseModels/NetworkSiteType.ts +102 -3
  16. package/Models/DatabaseModels/NetworkSnmpCredentialProfile.ts +841 -0
  17. package/Models/DatabaseModels/OnCallDutyPolicyCustomField.ts +77 -3
  18. package/Models/DatabaseModels/RumApplication.ts +6 -6
  19. package/Models/DatabaseModels/ScheduledMaintenanceCustomField.ts +77 -3
  20. package/Models/DatabaseModels/StatusPageCustomField.ts +77 -3
  21. package/Models/DatabaseModels/TeamCustomField.ts +77 -3
  22. package/Models/DatabaseModels/TeamMember.ts +0 -9
  23. package/Models/DatabaseModels/TeamMemberCustomField.ts +77 -3
  24. package/Models/DatabaseModels/TeamPermission.ts +3 -24
  25. package/Models/DatabaseModels/TelemetryException.ts +119 -0
  26. package/Models/DatabaseModels/TelemetryIngestionKey.ts +260 -0
  27. package/Models/DatabaseModels/UserNotificationEmailRollupBatch.ts +334 -0
  28. package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +370 -0
  29. package/Models/DatabaseModels/UserNotificationEmailRollupSetting.ts +282 -0
  30. package/Models/DatabaseModels/UserTelegram.ts +0 -4
  31. package/Scripts/benchmark-fanin-capacity.js +181 -0
  32. package/Server/API/EnterpriseLicenseAPI.ts +391 -64
  33. package/Server/API/LlmProviderAPI.ts +137 -22
  34. package/Server/API/TelemetryAPI.ts +1284 -164
  35. package/Server/API/UserNotificationSettingAPI.ts +55 -0
  36. package/Server/API/UserTelegramAPI.ts +48 -4
  37. package/Server/EnvironmentConfig.ts +49 -2
  38. package/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.ts +55 -0
  39. package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.ts +31 -0
  40. package/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.ts +124 -0
  41. package/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.ts +132 -0
  42. package/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.ts +79 -0
  43. package/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.ts +191 -0
  44. package/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.ts +91 -0
  45. package/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.ts +67 -0
  46. package/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.ts +139 -0
  47. package/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.ts +121 -0
  48. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +20 -0
  49. package/Server/Infrastructure/QueueWorker.ts +59 -23
  50. package/Server/Infrastructure/Semaphore.ts +2 -0
  51. package/Server/Middleware/BearerTokenAuthorization.ts +12 -0
  52. package/Server/Middleware/ProjectAuthorization.ts +11 -0
  53. package/Server/Middleware/SCIMAuthorization.ts +12 -0
  54. package/Server/Middleware/TelemetryIngest.ts +464 -7
  55. package/Server/Services/AIBillingService.ts +101 -27
  56. package/Server/Services/AccessTokenService.ts +1 -0
  57. package/Server/Services/AlertCustomFieldService.ts +98 -0
  58. package/Server/Services/AlertService.ts +37 -0
  59. package/Server/Services/ApiKeyPermissionService.ts +461 -29
  60. package/Server/Services/CustomFieldMappingService.ts +879 -0
  61. package/Server/Services/EnterpriseLicenseInstanceService.ts +197 -0
  62. package/Server/Services/EnterpriseLicenseService.ts +55 -0
  63. package/Server/Services/GlobalConfigService.ts +194 -0
  64. package/Server/Services/IncidentCustomFieldService.ts +98 -0
  65. package/Server/Services/IncidentService.ts +35 -0
  66. package/Server/Services/Index.ts +10 -0
  67. package/Server/Services/MetricService.ts +194 -0
  68. package/Server/Services/MonitorService.ts +175 -21
  69. package/Server/Services/MonitorStatusTimelineService.ts +150 -8
  70. package/Server/Services/MonitorTemplateService.ts +217 -1
  71. package/Server/Services/NetworkAlertPolicyEngineService.ts +2159 -0
  72. package/Server/Services/NetworkAlertPolicyService.ts +944 -0
  73. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +87 -35
  74. package/Server/Services/NetworkDeviceAutoImportRuleService.ts +60 -15
  75. package/Server/Services/NetworkDeviceService.ts +1032 -73
  76. package/Server/Services/NetworkSiteService.ts +1502 -129
  77. package/Server/Services/NetworkSiteTypeService.ts +1216 -0
  78. package/Server/Services/NetworkSnmpCredentialProfileService.ts +238 -0
  79. package/Server/Services/NotificationService.ts +118 -28
  80. package/Server/Services/ProjectService.ts +127 -48
  81. package/Server/Services/RoutineEmailSettingsService.ts +73 -0
  82. package/Server/Services/RumSessionReplayViewService.ts +104 -24
  83. package/Server/Services/ScheduledMaintenanceCustomFieldService.ts +98 -0
  84. package/Server/Services/ScheduledMaintenanceService.ts +32 -0
  85. package/Server/Services/StatusPagePrivateUserService.ts +103 -3
  86. package/Server/Services/TeamMemberService.ts +78 -0
  87. package/Server/Services/TeamPermissionService.ts +235 -3
  88. package/Server/Services/TelemetryIngestionKeyService.ts +722 -19
  89. package/Server/Services/UserNotificationEmailRollupBatchService.ts +78 -0
  90. package/Server/Services/UserNotificationEmailRollupItemService.ts +79 -0
  91. package/Server/Services/UserNotificationEmailRollupSettingService.ts +113 -0
  92. package/Server/Services/UserNotificationSettingService.ts +90 -25
  93. package/Server/Services/UserService.ts +95 -0
  94. package/Server/Services/UserTelegramService.ts +326 -5
  95. package/Server/Types/Database/QueryHelper.ts +4 -2
  96. package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +14 -3
  97. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +10 -0
  98. package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +10 -0
  99. package/Server/Utils/AI/SRE/Insights/InsightTriageRunner.ts +62 -1
  100. package/Server/Utils/AI/Toolbox/AlertTools.ts +15 -1
  101. package/Server/Utils/APIKey/AccessPermission.ts +5 -2
  102. package/Server/Utils/Billing/BillingFailureNoticeThrottle.ts +80 -0
  103. package/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.ts +54 -0
  104. package/Server/Utils/CustomField/CustomFieldMappingRegistry.ts +415 -0
  105. package/Server/Utils/CustomField/CustomFieldMappingValidator.ts +335 -0
  106. package/Server/Utils/DataSource/EgressGuard.ts +177 -8
  107. package/Server/Utils/DataSource/HttpFetch.ts +9 -2
  108. package/Server/Utils/EmailRollup/EmailRollupConstants.ts +131 -0
  109. package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +925 -0
  110. package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +781 -0
  111. package/Server/Utils/EmailRollup/EmailRollupWriter.ts +368 -0
  112. package/Server/Utils/FrontendEnvironment.ts +40 -0
  113. package/Server/Utils/LLM/LLMService.ts +78 -0
  114. package/Server/Utils/LogRedaction.ts +28 -0
  115. package/Server/Utils/Logger.ts +90 -1
  116. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +338 -77
  117. package/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.ts +190 -0
  118. package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +9 -2
  119. package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +30 -4
  120. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +61 -1
  121. package/Server/Utils/Monitor/MonitorAlert.ts +29 -6
  122. package/Server/Utils/Monitor/MonitorCriteriaDataExtractor.ts +14 -0
  123. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +159 -15
  124. package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +255 -4
  125. package/Server/Utils/Monitor/MonitorIncident.ts +22 -6
  126. package/Server/Utils/Monitor/MonitorMetricUtil.ts +41 -0
  127. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +72 -0
  128. package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +499 -19
  129. package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +66 -10
  130. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +238 -44
  131. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +146 -39
  132. package/Server/Utils/Monitor/SeriesContextEnricher.ts +304 -0
  133. package/Server/Utils/NetworkDevice/DeviceHealthAggregation.ts +31 -18
  134. package/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.ts +213 -0
  135. package/Server/Utils/OutboundUserAgent.ts +152 -0
  136. package/Server/Utils/SSRFProtection.ts +217 -10
  137. package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +239 -138
  138. package/Server/Utils/SessionReplay/SessionReplayHealthCounters.ts +305 -0
  139. package/Server/Utils/SessionReplay/SessionReplayReadService.ts +1430 -289
  140. package/Server/Utils/StartServer.ts +53 -36
  141. package/Server/Utils/TelegramVerificationToken.ts +185 -0
  142. package/Server/Utils/Telemetry/CaptureSpan.ts +32 -8
  143. package/Server/Utils/Telemetry/ErrorClassResolver.ts +120 -0
  144. package/Server/Utils/Telemetry/PinServiceName.ts +197 -0
  145. package/Server/Utils/Telemetry/SpanUtil.ts +33 -0
  146. package/Server/Utils/Telemetry/TelemetryFanInWriter.ts +38 -16
  147. package/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.ts +92 -0
  148. package/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.ts +217 -0
  149. package/Server/Utils/Telemetry.ts +198 -51
  150. package/Server/Utils/VM/VMAPI.ts +1 -0
  151. package/Server/Utils/VM/VMRunner.ts +975 -95
  152. package/Server/Views/Partials/SensitiveUrlToken.ejs +140 -0
  153. package/Tests/App/AdminDashboard/AdminHeaderSmallScreens.test.tsx +202 -0
  154. package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +134 -33
  155. package/Tests/App/Dashboard/AskAiSuggestedPrompts.test.ts +279 -0
  156. package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +517 -0
  157. package/Tests/App/Dashboard/DashboardHeaderSmallScreens.test.tsx +404 -0
  158. package/Tests/App/Dashboard/DashboardVariablesDiscard.test.tsx +26 -0
  159. package/Tests/App/Dashboard/DeviceStatusHero.test.tsx +588 -0
  160. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +486 -9
  161. package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +632 -0
  162. package/Tests/App/Dashboard/MonitorRecommendationCreateProgress.test.tsx +682 -0
  163. package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +4 -2
  164. package/Tests/App/Dashboard/NetworkDeviceCreateFormMonitorBinding.test.tsx +676 -0
  165. package/Tests/App/Dashboard/NetworkDeviceCreateFormPingMonitor.test.tsx +791 -0
  166. package/Tests/App/Dashboard/NetworkDeviceCreateFormProbeAndSnmp.test.tsx +833 -0
  167. package/Tests/App/Dashboard/NetworkDeviceCriteriaFilter.test.ts +161 -0
  168. package/Tests/App/Dashboard/NetworkDeviceSettingsMonitoringSection.test.tsx +458 -0
  169. package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +41 -5
  170. package/Tests/App/Dashboard/NotificationEmailPreferences.test.tsx +399 -0
  171. package/Tests/App/Dashboard/PingMonitorProvisioning.test.ts +368 -0
  172. package/Tests/App/Dashboard/RecommendationCard.test.tsx +796 -0
  173. package/Tests/App/Dashboard/RecommendationToolbar.test.tsx +519 -0
  174. package/Tests/App/Dashboard/RecommendationsList.test.tsx +661 -0
  175. package/Tests/App/Dashboard/UseBulkCreatePingMonitors.test.tsx +899 -0
  176. package/Tests/App/Dashboard/UseBulkSnmpCredentialProfileActions.test.tsx +732 -0
  177. package/Tests/App/SensitiveUrlTokenBootstrap.test.ts +256 -0
  178. package/Tests/App/StatusPage/StatusPageIndexPageRobotsMeta.test.ts +11 -1
  179. package/Tests/App/StatusPage/StatusPageLastUpdated.test.tsx +263 -0
  180. package/Tests/App/StatusPage/StatusPageLoginCodeBootstrap.test.ts +9 -4
  181. package/Tests/App/StatusPage/StatusPageOverviewLiveAndSearch.test.tsx +753 -0
  182. package/Tests/App/StatusPage/StatusPageResourceSearchBox.test.tsx +224 -0
  183. package/Tests/Models/AnalyticsModels/RumSessionReplayColumns.test.ts +262 -0
  184. package/Tests/Models/CustomFieldMappingColumns.test.ts +166 -0
  185. package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +20 -6
  186. package/Tests/Models/NetworkSiteHierarchy.test.ts +41 -4
  187. package/Tests/ResponsiveVisibility.test.ts +115 -0
  188. package/Tests/ResponsiveVisibility.ts +183 -0
  189. package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +951 -7
  190. package/Tests/Server/API/LlmProviderConnectionTest.test.ts +522 -0
  191. package/Tests/Server/API/SessionReplayAPI.test.ts +1940 -216
  192. package/Tests/Server/API/UserNotificationSettingAPI.test.ts +186 -0
  193. package/Tests/Server/API/UserTelegramAPISecurity.test.ts +231 -0
  194. package/Tests/Server/EnvironmentConfigFrontendSecurity.test.ts +234 -0
  195. package/Tests/Server/Infrastructure/Postgres/CustomFieldValueMappingMigration.test.ts +202 -0
  196. package/Tests/Server/Infrastructure/Postgres/InventoryItemArchiveMigration.test.ts +41 -0
  197. package/Tests/Server/Infrastructure/Postgres/NetworkSnmpCredentialProfilesAndAlertPoliciesMigration.test.ts +854 -0
  198. package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +18 -0
  199. package/Tests/Server/Infrastructure/Postgres/SessionReplayRecordEverySessionByDefaultMigration.test.ts +169 -0
  200. package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +535 -0
  201. package/Tests/Server/Infrastructure/QueueWorkerTimeout.test.ts +210 -0
  202. package/Tests/Server/Infrastructure/TelemetryExporterDeploymentConfig.test.ts +130 -0
  203. package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +4 -1
  204. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +1163 -0
  205. package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +5 -3
  206. package/Tests/Server/Services/AIChatPrivacyPin.test.ts +560 -0
  207. package/Tests/Server/Services/AddTelemetryIngestionKeyTypeMigration.test.ts +555 -0
  208. package/Tests/Server/Services/ApiKeyPermissionSecurity.test.ts +678 -0
  209. package/Tests/Server/Services/ApiKeyPermissionService.test.ts +276 -28
  210. package/Tests/Server/Services/BillingRechargeOwnerEmailGuards.test.ts +783 -0
  211. package/Tests/Server/Services/CustomFieldDropdownOptionsColumnWidth.test.ts +431 -0
  212. package/Tests/Server/Services/CustomFieldMappingService.test.ts +850 -0
  213. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +32 -0
  214. package/Tests/Server/Services/EnterpriseLicenseInstanceServiceDeletionUsage.test.ts +707 -0
  215. package/Tests/Server/Services/EnterpriseLicenseServiceUsageAggregationLock.test.ts +329 -0
  216. package/Tests/Server/Services/GlobalConfigService.test.ts +414 -1
  217. package/Tests/Server/Services/MetricRawEntityKeyPrune.test.ts +592 -0
  218. package/Tests/Server/Services/MonitorServiceDeleteNetworkDeviceCleanup.test.ts +294 -0
  219. package/Tests/Server/Services/MonitorStatusBridgeProbePath.test.ts +802 -0
  220. package/Tests/Server/Services/MonitorStatusTimelineService.test.ts +72 -2
  221. package/Tests/Server/Services/NetworkAlertPolicyEngineHooks.test.ts +752 -0
  222. package/Tests/Server/Services/NetworkAlertPolicyEngineService.test.ts +1849 -0
  223. package/Tests/Server/Services/NetworkAlertPolicyModel.test.ts +1793 -0
  224. package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +273 -5
  225. package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +97 -12
  226. package/Tests/Server/Services/NetworkDeviceAutoMonitorLifecycle.test.ts +148 -3
  227. package/Tests/Server/Services/NetworkDeviceMonitorBindingUpdateGuard.test.ts +514 -0
  228. package/Tests/Server/Services/NetworkDeviceMonitorStatusStamp.test.ts +447 -58
  229. package/Tests/Server/Services/NetworkDeviceMonitoringMethodTransition.test.ts +739 -0
  230. package/Tests/Server/Services/NetworkDevicePollingTenancy.test.ts +501 -0
  231. package/Tests/Server/Services/NetworkDeviceSiteDefaultProbe.test.ts +432 -0
  232. package/Tests/Server/Services/NetworkSiteMonitoringDefaults.test.ts +498 -0
  233. package/Tests/Server/Services/NetworkSiteRollupPolicyAndMaintenance.test.ts +337 -55
  234. package/Tests/Server/Services/NetworkSiteService.test.ts +1868 -131
  235. package/Tests/Server/Services/NetworkSiteTypeService.test.ts +1109 -0
  236. package/Tests/Server/Services/NetworkSnmpCredentialProfileModel.test.ts +926 -0
  237. package/Tests/Server/Services/NetworkSnmpCredentialProfileService.test.ts +796 -0
  238. package/Tests/Server/Services/ProjectServiceNetworkSiteTypeDefaults.test.ts +214 -0
  239. package/Tests/Server/Services/RoutineEmailSettingsPostgres.test.ts +329 -0
  240. package/Tests/Server/Services/RumSessionReplayViewService.test.ts +267 -0
  241. package/Tests/Server/Services/StatusPagePrivateUserEmailChangePasswordResetExpiry.test.ts +269 -0
  242. package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +9 -0
  243. package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +9 -0
  244. package/Tests/Server/Services/TeamPrivilegeEscalation.test.ts +834 -0
  245. package/Tests/Server/Services/TelemetryIngestionKeyPolicyResolution.test.ts +814 -0
  246. package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +998 -0
  247. package/Tests/Server/Services/UserEmailChangePasswordResetExpiry.test.ts +472 -0
  248. package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +569 -0
  249. package/Tests/Server/Services/UserNotificationEmailRollupSettingModel.test.ts +314 -0
  250. package/Tests/Server/Services/UserNotificationEmailRollupSettingService.test.ts +409 -0
  251. package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +997 -0
  252. package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +110 -1
  253. package/Tests/Server/Services/UserTelegramVerificationSecurity.test.ts +688 -0
  254. package/Tests/Server/Types/Database/Permissions/DashboardAccessPermission.test.ts +321 -0
  255. package/Tests/Server/Types/Database/QueryHelperOperators.test.ts +17 -0
  256. package/Tests/Server/Utils/AI/AlertMonitorFilters.test.ts +124 -0
  257. package/Tests/Server/Utils/AI/Insights/InsightTriageRunner.test.ts +208 -0
  258. package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +235 -0
  259. package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +253 -0
  260. package/Tests/Server/Utils/AI/SRE/Insights/FixRouting.test.ts +497 -0
  261. package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +383 -0
  262. package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +7 -3
  263. package/Tests/Server/Utils/AnalyticsDatabase/ClusterConfig.test.ts +315 -0
  264. package/Tests/Server/Utils/Captcha.test.ts +422 -0
  265. package/Tests/Server/Utils/CustomField/CustomFieldMappingValidator.test.ts +437 -0
  266. package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +300 -11
  267. package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +96 -2
  268. package/Tests/Server/Utils/Database/MigrationFailureLog.test.ts +466 -0
  269. package/Tests/Server/Utils/EmailRollup/EmailRollupBurstWindow.test.ts +83 -0
  270. package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1096 -0
  271. package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerClaim.test.ts +466 -0
  272. package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerPreferences.test.ts +362 -0
  273. package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +1428 -0
  274. package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +828 -0
  275. package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +864 -0
  276. package/Tests/Server/Utils/FrontendEnvironment.test.ts +190 -0
  277. package/Tests/Server/Utils/LogRedaction.test.ts +26 -0
  278. package/Tests/Server/Utils/LoggerCredentialLeak.test.ts +23 -9
  279. package/Tests/Server/Utils/LoggerFaultDemotion.test.ts +346 -0
  280. package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +584 -0
  281. package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +633 -0
  282. package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestHeaderCriteria.test.ts +236 -0
  283. package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +196 -0
  284. package/Tests/Server/Utils/Monitor/DatabaseMetricWrite.test.ts +367 -0
  285. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +437 -0
  286. package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +100 -0
  287. package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +5 -0
  288. package/Tests/Server/Utils/Monitor/MonitorTemplateUtilSeriesContext.test.ts +176 -0
  289. package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +512 -31
  290. package/Tests/Server/Utils/Monitor/NetworkDeviceMetricUtil.test.ts +252 -0
  291. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +479 -42
  292. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +351 -5
  293. package/Tests/Server/Utils/Monitor/SeriesContextEnricher.test.ts +356 -0
  294. package/Tests/Server/Utils/NetworkDevice/DeviceHealthAggregation.test.ts +136 -12
  295. package/Tests/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.test.ts +306 -0
  296. package/Tests/Server/Utils/OutboundUserAgent.test.ts +266 -0
  297. package/Tests/Server/Utils/SSRFProtectionCloudServiceAddresses.test.ts +595 -0
  298. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClientUserAgent.test.ts +141 -0
  299. package/Tests/Server/Utils/SessionReplay/SessionReplayGateCachePolicy.test.ts +198 -1
  300. package/Tests/Server/Utils/SessionReplay/SessionReplayHealthCounters.test.ts +453 -0
  301. package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +1378 -0
  302. package/Tests/Server/Utils/SessionReplayOriginAllowListRefactor.test.ts +420 -0
  303. package/Tests/Server/Utils/TelegramVerificationToken.test.ts +253 -0
  304. package/Tests/Server/Utils/Telemetry/ErrorClassResolver.test.ts +298 -0
  305. package/Tests/Server/Utils/Telemetry/PinServiceName.test.ts +666 -0
  306. package/Tests/Server/Utils/Telemetry/TelemetryFanInWriterCapacity.test.ts +458 -0
  307. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +424 -0
  308. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.test.ts +528 -0
  309. package/Tests/Server/Utils/Telemetry.test.ts +456 -66
  310. package/Tests/Server/Utils/TelemetryExporterEnvironment.test.ts +56 -0
  311. package/Tests/Server/Utils/VM/VMRunnerHostBridgeLatency.test.ts +74 -0
  312. package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +100 -7
  313. package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +1176 -6
  314. package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +220 -0
  315. package/Tests/Types/CustomField/CustomFieldValueMapping.test.ts +348 -0
  316. package/Tests/Types/JSONFunctions.test.ts +260 -0
  317. package/Tests/Types/Monitor/CephAlertTemplates.test.ts +422 -53
  318. package/Tests/Types/Monitor/DatabaseMetricCatalog.test.ts +388 -0
  319. package/Tests/Types/Monitor/DockerAlertTemplates.test.ts +495 -15
  320. package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +191 -45
  321. package/Tests/Types/Monitor/HostAlertTemplates.test.ts +370 -42
  322. package/Tests/Types/Monitor/IotAlertTemplates.test.ts +375 -20
  323. package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +636 -42
  324. package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +189 -0
  325. package/Tests/Types/Monitor/KubernetesTemplateGroupByKeys.test.ts +95 -14
  326. package/Tests/Types/Monitor/MonitorStepDatabaseMonitor.test.ts +243 -0
  327. package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
  328. package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
  329. package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +16 -7
  330. package/Tests/Types/Monitor/NetworkDeviceAlertPack.test.ts +60 -0
  331. package/Tests/Types/Monitor/PodmanAlertTemplates.test.ts +190 -21
  332. package/Tests/Types/Monitor/ProxmoxAlertTemplates.test.ts +352 -22
  333. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationAlertDebuggability.test.ts +363 -0
  334. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +93 -18
  335. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +259 -0
  336. package/Tests/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.test.ts +476 -0
  337. package/Tests/Types/Monitor/RumAlertTemplates.test.ts +136 -0
  338. package/Tests/Types/Monitor/SeriesContext/SeriesDebugHints.test.ts +661 -0
  339. package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +507 -0
  340. package/Tests/Types/Monitor/ServiceAlertTemplates.test.ts +270 -0
  341. package/Tests/Types/Monitor/TemplateGroupByKeys.test.ts +38 -10
  342. package/Tests/Types/Monitor/Utils/RecommendationCriteriaAssertions.ts +102 -0
  343. package/Tests/Types/NetworkDevice/NetworkAlertPolicyScope.test.ts +655 -0
  344. package/Tests/Types/NetworkDevice/NetworkDeviceMonitoringMethod.test.ts +115 -26
  345. package/Tests/Types/NetworkSite/DefaultNetworkSiteType.test.ts +39 -0
  346. package/Tests/Types/NotificationSetting/NotificationEmailRollupPolicy.test.ts +299 -0
  347. package/Tests/Types/NotificationSetting/RoutineEmailEvents.test.ts +47 -0
  348. package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +608 -0
  349. package/Tests/Types/Rum/SessionReplayCustomEvents.test.ts +434 -0
  350. package/Tests/Types/Telemetry/ErrorClass.test.ts +483 -0
  351. package/Tests/Types/WebsiteRequest.test.ts +285 -3
  352. package/Tests/UI/Components/BasicRadioButtons.test.tsx +336 -0
  353. package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +16 -3
  354. package/Tests/UI/Components/Charts/ChartTrailingBucketGap.test.ts +691 -0
  355. package/Tests/UI/Components/ComponentsModal.test.tsx +12 -4
  356. package/Tests/UI/Components/ComponentsModalUsability.test.tsx +518 -0
  357. package/Tests/UI/Components/CustomFields/CustomFieldsDetailMapping.test.tsx +324 -0
  358. package/Tests/UI/Components/CustomFields/MapFromCustomFieldInput.test.tsx +176 -0
  359. package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +484 -0
  360. package/Tests/UI/Components/HeaderRightRail.test.tsx +157 -0
  361. package/Tests/UI/Components/IconDropdownItem.test.tsx +102 -0
  362. package/Tests/UI/Components/JSONTablePrototypePollution.test.tsx +117 -0
  363. package/Tests/UI/Components/KeyboardShortcutsModal.test.tsx +214 -0
  364. package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +561 -0
  365. package/Tests/UI/Components/MonitorGraphs/UptimeBarDayModal.test.tsx +302 -0
  366. package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +43 -12
  367. package/Tests/UI/Components/ProgressBar.test.tsx +38 -2
  368. package/Tests/UI/Components/ShortcutDialogGuard.test.tsx +74 -0
  369. package/Tests/UI/Components/SideMenuItem.test.tsx +226 -4
  370. package/Tests/UI/Components/SideMenuSection.test.tsx +310 -0
  371. package/Tests/UI/Components/SideOverSubmitState.test.tsx +335 -0
  372. package/Tests/UI/Components/StatusPage/ResourceGroupSectionAutoExpand.test.tsx +248 -0
  373. package/Tests/UI/Components/TableCellWrapping.test.tsx +625 -0
  374. package/Tests/UI/Components/TableLoadingStates.test.tsx +205 -0
  375. package/Tests/UI/Components/Workflow/NodePlacement.test.ts +148 -0
  376. package/Tests/UI/Components/Workflow/Workflow.test.tsx +981 -0
  377. package/Tests/UI/ConfigBrowserTelemetry.test.ts +70 -0
  378. package/Tests/UI/Rum/ChunkLoader.test.ts +1036 -2
  379. package/Tests/UI/Rum/FidelityNotices.test.ts +187 -0
  380. package/Tests/UI/Rum/InactivityMap.test.ts +341 -0
  381. package/Tests/UI/Rum/PrivacySummaryCard.test.tsx +259 -0
  382. package/Tests/UI/Rum/RecordingHealthCard.test.tsx +855 -0
  383. package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +594 -0
  384. package/Tests/UI/Rum/ReplayCard.test.tsx +451 -0
  385. package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +536 -0
  386. package/Tests/UI/Rum/ReplayEngine.test.ts +2503 -0
  387. package/Tests/UI/Rum/ReplayEngineTypes.test.ts +171 -0
  388. package/Tests/UI/Rum/ReplayHeader.test.tsx +711 -0
  389. package/Tests/UI/Rum/ReplayLink.test.tsx +119 -0
  390. package/Tests/UI/Rum/ReplayPinControl.test.tsx +408 -0
  391. package/Tests/UI/Rum/ReplayPlaybackIntent.test.ts +152 -0
  392. package/Tests/UI/Rum/ReplayRail.test.tsx +1296 -0
  393. package/Tests/UI/Rum/ReplayRailDetail.test.tsx +900 -0
  394. package/Tests/UI/Rum/ReplayScrubber.test.tsx +763 -147
  395. package/Tests/UI/Rum/ReplaySignalTypes.test.ts +189 -0
  396. package/Tests/UI/Rum/ReplaySignals.test.ts +1579 -0
  397. package/Tests/UI/Rum/ReplayStage.test.tsx +396 -473
  398. package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +918 -0
  399. package/Tests/UI/Rum/ReplayTimeline.test.tsx +696 -0
  400. package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +499 -0
  401. package/Tests/UI/Rum/SessionReplaySearchBar.test.tsx +346 -0
  402. package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +545 -0
  403. package/Tests/UI/Rum/SessionReplayTable.test.tsx +991 -0
  404. package/Tests/UI/Rum/TargetedCapturePanel.test.tsx +254 -0
  405. package/Tests/UI/Telemetry/BrowserExporterIsolation.test.ts +71 -0
  406. package/Tests/UI/Utils/GlobalKeyboardShortcut.test.ts +344 -0
  407. package/Tests/UI/Utils/PageScrollLock.test.tsx +377 -0
  408. package/Tests/UI/Utils/PermissionGate.test.ts +78 -0
  409. package/Tests/UI/Utils/SensitiveUrlToken.test.ts +140 -0
  410. package/Tests/Utils/API.test.ts +308 -0
  411. package/Tests/Utils/EnterpriseLicenseSeats.test.ts +69 -0
  412. package/Tests/Utils/EnterpriseLicenseSync.test.ts +7 -1
  413. package/Tests/Utils/EnterpriseLicenseUsage.test.ts +433 -2
  414. package/Tests/Utils/HTTPResponseBodyReader.test.ts +323 -0
  415. package/Tests/Utils/Monitor/MonitorMetricType.test.ts +280 -1
  416. package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
  417. package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +38 -0
  418. package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +284 -23
  419. package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +177 -0
  420. package/Tests/Utils/NetworkDevice/MonitoringMethodThreadedClassifiers.test.ts +992 -0
  421. package/Tests/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.test.ts +427 -0
  422. package/Tests/Utils/NetworkDevice/ReachabilityStampConsistency.test.ts +185 -0
  423. package/Tests/Utils/NetworkDevice/SnmpCredentialUtil.test.ts +268 -0
  424. package/Tests/Utils/NetworkDiscovery/AutoImportRuleMatcher.test.ts +55 -5
  425. package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +98 -21
  426. package/Tests/Utils/NetworkDiscovery/DiscoveryImportEligibility.test.ts +98 -20
  427. package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +8 -7
  428. package/Tests/Utils/NetworkDiscovery/DiscoveryScanStatus.test.ts +117 -0
  429. package/Tests/Utils/NetworkDiscovery/PingMonitorBuilderForAddress.test.ts +274 -0
  430. package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +230 -51
  431. package/Tests/Utils/NetworkSite/TypeHierarchyUtil.test.ts +209 -0
  432. package/Tests/Utils/Rum/ChunkMath.test.ts +83 -0
  433. package/Tests/Utils/Rum/SessionReplayHealthDiagnosis.test.ts +993 -0
  434. package/Tests/Utils/Rum/SessionReplayStringMap.test.ts +245 -0
  435. package/Tests/Utils/StatusPage/ResourceSearch.test.ts +631 -0
  436. package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +145 -0
  437. package/Tests/Utils/Telemetry/OriginAllowList.test.ts +633 -0
  438. package/Tests/Utils/Uptime/DayUptimeGraphUtil.test.ts +461 -0
  439. package/Tests/Utils/ValueFormatter.test.ts +148 -0
  440. package/Types/AI/ExceptionAIClassification.ts +10 -24
  441. package/Types/CustomField/CustomFieldMappingCatalog.ts +161 -0
  442. package/Types/CustomField/CustomFieldMappingSourceResource.ts +19 -0
  443. package/Types/CustomField/CustomFieldValueMapping.ts +288 -0
  444. package/Types/Email/EmailTemplateType.ts +2 -0
  445. package/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.ts +5 -0
  446. package/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.ts +13 -0
  447. package/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.ts +6 -0
  448. package/Types/Exception/ApiException.ts +10 -0
  449. package/Types/Exception/BadDataException.ts +11 -0
  450. package/Types/Exception/BadRequestException.ts +11 -0
  451. package/Types/Exception/Exception.ts +65 -0
  452. package/Types/Exception/ForbiddenException.ts +10 -0
  453. package/Types/Exception/NotAuthenticatedException.ts +10 -0
  454. package/Types/Exception/NotAuthorizedException.ts +10 -0
  455. package/Types/Exception/NotFoundException.ts +11 -0
  456. package/Types/Exception/PayloadTooLargeException.ts +11 -0
  457. package/Types/Exception/PaymentRequiredException.ts +10 -0
  458. package/Types/Exception/ServiceUnavailableException.ts +10 -0
  459. package/Types/Exception/SsoAuthorizationException.ts +10 -0
  460. package/Types/Exception/TenantNotFoundException.ts +11 -0
  461. package/Types/Exception/TimeoutException.ts +10 -0
  462. package/Types/Exception/TooManyRequestsException.ts +10 -0
  463. package/Types/Exception/UnableToReachServer.ts +10 -0
  464. package/Types/Exception/WebsiteRequestException.ts +10 -0
  465. package/Types/Icon/IconProp.ts +1 -0
  466. package/Types/JSONFunctions.ts +189 -43
  467. package/Types/Monitor/CephAlertTemplates.ts +157 -195
  468. package/Types/Monitor/CriteriaFilter.ts +60 -2
  469. package/Types/Monitor/DatabaseMetricCatalog.ts +693 -0
  470. package/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.ts +83 -0
  471. package/Types/Monitor/DockerAlertTemplates.ts +338 -128
  472. package/Types/Monitor/DockerSwarmAlertTemplates.ts +95 -112
  473. package/Types/Monitor/HostAlertTemplates.ts +302 -130
  474. package/Types/Monitor/IotAlertTemplates.ts +112 -104
  475. package/Types/Monitor/KubernetesAlertTemplates.ts +415 -224
  476. package/Types/Monitor/KubernetesMetricCatalog.ts +23 -19
  477. package/Types/Monitor/MonitorCriteriaInstance.ts +76 -0
  478. package/Types/Monitor/MonitorMetricType.ts +71 -0
  479. package/Types/Monitor/MonitorStep.ts +76 -0
  480. package/Types/Monitor/MonitorStepDatabaseMonitor.ts +171 -0
  481. package/Types/Monitor/MonitorStepSqlMonitor.ts +2 -20
  482. package/Types/Monitor/MonitorType.ts +47 -1
  483. package/Types/Monitor/PodmanAlertTemplates.ts +116 -163
  484. package/Types/Monitor/ProxmoxAlertTemplates.ts +217 -99
  485. package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +98 -6
  486. package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +44 -7
  487. package/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.ts +383 -0
  488. package/Types/Monitor/RumAlertTemplates.ts +46 -7
  489. package/Types/Monitor/SeriesContext/SeriesDebugHints.ts +596 -0
  490. package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +554 -0
  491. package/Types/Monitor/ServiceAlertTemplates.ts +98 -11
  492. package/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.ts +22 -1
  493. package/Types/Monitor/SqlConnectionConfig.ts +31 -0
  494. package/Types/Monitor/UptimeHistoryLabels.ts +56 -0
  495. package/Types/NetworkDevice/NetworkAlertPolicyScope.ts +343 -0
  496. package/Types/NetworkDevice/NetworkDeviceMonitoringMethod.ts +42 -22
  497. package/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.ts +30 -0
  498. package/Types/NotificationSetting/NotificationEmailRollupCategory.ts +255 -0
  499. package/Types/NotificationSetting/NotificationEmailRollupPolicy.ts +104 -0
  500. package/Types/NotificationSetting/RoutineEmailEvents.ts +30 -0
  501. package/Types/Permission.ts +90 -0
  502. package/Types/Probe/ProbeMonitorResponse.ts +16 -0
  503. package/Types/Rum/SessionReplay.ts +209 -0
  504. package/Types/Rum/SessionReplayApi.ts +722 -0
  505. package/Types/Rum/SessionReplayCaptureTrigger.ts +21 -12
  506. package/Types/Rum/SessionReplayConsentMode.ts +11 -7
  507. package/Types/Rum/SessionReplayCustomEvents.ts +549 -0
  508. package/Types/Rum/SessionReplayHealth.ts +238 -0
  509. package/Types/Telemetry/ErrorClass.ts +274 -0
  510. package/Types/Telemetry/TelemetryIngestSurface.ts +95 -0
  511. package/Types/Telemetry/TelemetryIngestionKeyPolicy.ts +75 -0
  512. package/Types/Telemetry/TelemetryIngestionKeyType.ts +29 -0
  513. package/Types/Telemetry/UnitOfWork.ts +59 -0
  514. package/Types/WebsiteRequest.ts +85 -3
  515. package/UI/Components/Charts/Area/AreaChart.tsx +13 -2
  516. package/UI/Components/Charts/Bar/BarChart.tsx +6 -2
  517. package/UI/Components/Charts/Line/LineChart.tsx +13 -2
  518. package/UI/Components/Charts/Types/XAxis/XAxis.ts +29 -0
  519. package/UI/Components/Charts/Utils/DataPoint.ts +22 -3
  520. package/UI/Components/Charts/Utils/TimeAnnotation.ts +76 -9
  521. package/UI/Components/Charts/Utils/XAxis.ts +217 -0
  522. package/UI/Components/CommandPalette/CommandPalette.tsx +2 -8
  523. package/UI/Components/CustomFields/CustomFieldsDetail.tsx +143 -25
  524. package/UI/Components/CustomFields/MapFromCustomFieldInput.tsx +216 -0
  525. package/UI/Components/EditionLabel/EditionLabel.tsx +4 -0
  526. package/UI/Components/Graphs/DayUptimeGraph.tsx +173 -8
  527. package/UI/Components/Graphs/UptimeBarTooltip.tsx +22 -278
  528. package/UI/Components/Graphs/UptimeDaySummary.tsx +327 -0
  529. package/UI/Components/Header/Header.tsx +25 -9
  530. package/UI/Components/Header/IconDropdown/IconDropdownItem.tsx +10 -1
  531. package/UI/Components/Header/IconDropdown/IconDropdownMenu.tsx +6 -1
  532. package/UI/Components/Header/ProjectPicker/ProjectPicker.tsx +6 -1
  533. package/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.tsx +6 -1
  534. package/UI/Components/Icon/Icon.tsx +11 -0
  535. package/UI/Components/JSONTable/JSONTable.tsx +2 -2
  536. package/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.tsx +125 -0
  537. package/UI/Components/KeyboardShortcut/Screenshots/README.md +19 -0
  538. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-command-palette.png +0 -0
  539. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog-dark.png +0 -0
  540. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog.png +0 -0
  541. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-help-menu.png +0 -0
  542. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-narrow.png +0 -0
  543. package/UI/Components/Modal/Modal.tsx +2 -8
  544. package/UI/Components/ModelTable/Column.ts +15 -0
  545. package/UI/Components/Monitor/SeriesDebugCommandsViewer.tsx +64 -0
  546. package/UI/Components/Monitor/SeriesLabelsViewer.tsx +93 -0
  547. package/UI/Components/MonitorGraphs/Uptime.tsx +14 -2
  548. package/UI/Components/MonitorGraphs/UptimeBarDayModal.tsx +63 -10
  549. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +88 -0
  550. package/UI/Components/ProgressBar/ProgressBar.tsx +12 -1
  551. package/UI/Components/RadioButtons/BasicRadioButtons.tsx +37 -7
  552. package/UI/Components/SideMenu/SideMenu.tsx +123 -5
  553. package/UI/Components/SideMenu/SideMenuItem.tsx +76 -84
  554. package/UI/Components/SideMenu/SideMenuSection.tsx +55 -23
  555. package/UI/Components/SideOver/SideOver.tsx +21 -20
  556. package/UI/Components/StatusPage/ResourceGroupSection.tsx +40 -0
  557. package/UI/Components/Table/CellClassName.ts +81 -0
  558. package/UI/Components/Table/TableRow.tsx +20 -14
  559. package/UI/Components/Table/TableSkeletonRows.tsx +9 -9
  560. package/UI/Components/Table/Types/Column.ts +36 -0
  561. package/UI/Components/Tooltip/Tooltip.tsx +11 -1
  562. package/UI/Components/Workflow/ComponentsModal.tsx +60 -39
  563. package/UI/Components/Workflow/NodePlacement.ts +57 -0
  564. package/UI/Components/Workflow/Workflow.tsx +47 -18
  565. package/UI/Config.ts +15 -33
  566. package/UI/Utils/GlobalKeyboardShortcut.ts +208 -0
  567. package/UI/Utils/PageScrollLock.ts +79 -3
  568. package/UI/Utils/PermissionGate.ts +61 -0
  569. package/UI/Utils/SensitiveUrlToken.ts +112 -0
  570. package/UI/Utils/Telemetry/BrowserTelemetryConfig.ts +28 -0
  571. package/UI/Utils/Telemetry/Telemetry.ts +10 -8
  572. package/UI/Utils/TestLLMProvider.ts +11 -0
  573. package/Utils/API.ts +129 -3
  574. package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +16 -0
  575. package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +191 -11
  576. package/Utils/HTTPResponseBodyReader.ts +221 -0
  577. package/Utils/Monitor/MonitorMetricType.ts +153 -1
  578. package/Utils/Monitor/NetworkTopologyUtil.ts +23 -3
  579. package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +65 -14
  580. package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +43 -14
  581. package/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.ts +247 -0
  582. package/Utils/NetworkDevice/SnmpCredentialUtil.ts +68 -0
  583. package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +15 -7
  584. package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +52 -17
  585. package/Utils/NetworkDiscovery/DiscoveryImportEligibility.ts +55 -23
  586. package/Utils/NetworkDiscovery/DiscoveryScanStatus.ts +77 -0
  587. package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +115 -13
  588. package/Utils/NetworkSite/SiteStatusRollupUtil.ts +66 -20
  589. package/Utils/NetworkSite/TypeHierarchyUtil.ts +313 -0
  590. package/Utils/Rum/ChunkMath.ts +106 -0
  591. package/Utils/Rum/SessionReplayHealth.ts +732 -0
  592. package/Utils/Rum/SessionReplayStringMap.ts +226 -0
  593. package/Utils/Schema/ModelSchema.ts +1 -0
  594. package/Utils/StatusPage/ResourceSearch.ts +290 -0
  595. package/Utils/Telemetry/OriginAllowList.ts +355 -0
  596. package/Utils/Uptime/DayUptimeGraphUtil.ts +205 -0
  597. package/Utils/ValueFormatter.ts +35 -1
  598. package/build/dist/Models/AnalyticsModels/RumSession.js +102 -19
  599. package/build/dist/Models/AnalyticsModels/RumSession.js.map +1 -1
  600. package/build/dist/Models/AnalyticsModels/RumSessionChunk.js +11 -9
  601. package/build/dist/Models/AnalyticsModels/RumSessionChunk.js.map +1 -1
  602. package/build/dist/Models/AnalyticsModels/Span.js +14 -0
  603. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  604. package/build/dist/Models/DatabaseModels/AlertCustomField.js +79 -3
  605. package/build/dist/Models/DatabaseModels/AlertCustomField.js.map +1 -1
  606. package/build/dist/Models/DatabaseModels/ApiKeyPermission.js +3 -27
  607. package/build/dist/Models/DatabaseModels/ApiKeyPermission.js.map +1 -1
  608. package/build/dist/Models/DatabaseModels/EnterpriseLicense.js +59 -0
  609. package/build/dist/Models/DatabaseModels/EnterpriseLicense.js.map +1 -1
  610. package/build/dist/Models/DatabaseModels/IncidentCustomField.js +79 -3
  611. package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
  612. package/build/dist/Models/DatabaseModels/Index.js +10 -0
  613. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  614. package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js +79 -3
  615. package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js.map +1 -1
  616. package/build/dist/Models/DatabaseModels/Monitor.js +75 -0
  617. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  618. package/build/dist/Models/DatabaseModels/MonitorCustomField.js +79 -3
  619. package/build/dist/Models/DatabaseModels/MonitorCustomField.js.map +1 -1
  620. package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js +713 -0
  621. package/build/dist/Models/DatabaseModels/NetworkAlertPolicy.js.map +1 -0
  622. package/build/dist/Models/DatabaseModels/NetworkDevice.js +180 -1
  623. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  624. package/build/dist/Models/DatabaseModels/NetworkSite.js +200 -2
  625. package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
  626. package/build/dist/Models/DatabaseModels/NetworkSiteType.js +102 -3
  627. package/build/dist/Models/DatabaseModels/NetworkSiteType.js.map +1 -1
  628. package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js +878 -0
  629. package/build/dist/Models/DatabaseModels/NetworkSnmpCredentialProfile.js.map +1 -0
  630. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js +79 -3
  631. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js.map +1 -1
  632. package/build/dist/Models/DatabaseModels/RumApplication.js +6 -6
  633. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  634. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js +79 -3
  635. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js.map +1 -1
  636. package/build/dist/Models/DatabaseModels/StatusPageCustomField.js +79 -3
  637. package/build/dist/Models/DatabaseModels/StatusPageCustomField.js.map +1 -1
  638. package/build/dist/Models/DatabaseModels/TeamCustomField.js +79 -3
  639. package/build/dist/Models/DatabaseModels/TeamCustomField.js.map +1 -1
  640. package/build/dist/Models/DatabaseModels/TeamMember.js +0 -9
  641. package/build/dist/Models/DatabaseModels/TeamMember.js.map +1 -1
  642. package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js +79 -3
  643. package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js.map +1 -1
  644. package/build/dist/Models/DatabaseModels/TeamPermission.js +3 -24
  645. package/build/dist/Models/DatabaseModels/TeamPermission.js.map +1 -1
  646. package/build/dist/Models/DatabaseModels/TelemetryException.js +123 -0
  647. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  648. package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js +267 -0
  649. package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js.map +1 -1
  650. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js +363 -0
  651. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupBatch.js.map +1 -0
  652. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +402 -0
  653. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -0
  654. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js +296 -0
  655. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupSetting.js.map +1 -0
  656. package/build/dist/Models/DatabaseModels/UserTelegram.js +0 -4
  657. package/build/dist/Models/DatabaseModels/UserTelegram.js.map +1 -1
  658. package/build/dist/Server/API/EnterpriseLicenseAPI.js +273 -60
  659. package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +1 -1
  660. package/build/dist/Server/API/LlmProviderAPI.js +108 -13
  661. package/build/dist/Server/API/LlmProviderAPI.js.map +1 -1
  662. package/build/dist/Server/API/TelemetryAPI.js +769 -109
  663. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  664. package/build/dist/Server/API/UserNotificationSettingAPI.js +35 -0
  665. package/build/dist/Server/API/UserNotificationSettingAPI.js.map +1 -0
  666. package/build/dist/Server/API/UserTelegramAPI.js +28 -6
  667. package/build/dist/Server/API/UserTelegramAPI.js.map +1 -1
  668. package/build/dist/Server/EnvironmentConfig.js +41 -2
  669. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  670. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js +24 -0
  671. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790700000000-AddNetworkSiteTypeParentHierarchy.js.map +1 -0
  672. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js +16 -0
  673. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddEnterpriseLicenseUsageProvenance.js.map +1 -0
  674. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js +111 -0
  675. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790900000000-AddTelemetryExceptionErrorClass.js.map +1 -0
  676. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js +77 -0
  677. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791000000000-AddUserNotificationEmailRollup.js.map +1 -0
  678. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js +50 -0
  679. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791100000000-AddUserNotificationEmailRollupSetting.js.map +1 -0
  680. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js +83 -0
  681. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791200000000-AddNetworkSnmpCredentialProfilesAndAlertPolicies.js.map +1 -0
  682. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js +60 -0
  683. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js.map +1 -0
  684. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js +53 -0
  685. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js.map +1 -0
  686. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js +82 -0
  687. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js.map +1 -0
  688. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js +46 -0
  689. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js.map +1 -0
  690. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +20 -0
  691. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  692. package/build/dist/Server/Infrastructure/QueueWorker.js +52 -12
  693. package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
  694. package/build/dist/Server/Infrastructure/Semaphore.js +1 -0
  695. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  696. package/build/dist/Server/Middleware/BearerTokenAuthorization.js +12 -0
  697. package/build/dist/Server/Middleware/BearerTokenAuthorization.js.map +1 -1
  698. package/build/dist/Server/Middleware/ProjectAuthorization.js +11 -0
  699. package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
  700. package/build/dist/Server/Middleware/SCIMAuthorization.js +12 -0
  701. package/build/dist/Server/Middleware/SCIMAuthorization.js.map +1 -1
  702. package/build/dist/Server/Middleware/TelemetryIngest.js +326 -8
  703. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  704. package/build/dist/Server/Services/AIBillingService.js +70 -16
  705. package/build/dist/Server/Services/AIBillingService.js.map +1 -1
  706. package/build/dist/Server/Services/AccessTokenService.js +1 -0
  707. package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
  708. package/build/dist/Server/Services/AlertCustomFieldService.js +93 -0
  709. package/build/dist/Server/Services/AlertCustomFieldService.js.map +1 -1
  710. package/build/dist/Server/Services/AlertService.js +34 -0
  711. package/build/dist/Server/Services/AlertService.js.map +1 -1
  712. package/build/dist/Server/Services/ApiKeyPermissionService.js +331 -28
  713. package/build/dist/Server/Services/ApiKeyPermissionService.js.map +1 -1
  714. package/build/dist/Server/Services/CustomFieldMappingService.js +614 -0
  715. package/build/dist/Server/Services/CustomFieldMappingService.js.map +1 -0
  716. package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js +167 -0
  717. package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js.map +1 -1
  718. package/build/dist/Server/Services/EnterpriseLicenseService.js +39 -0
  719. package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
  720. package/build/dist/Server/Services/GlobalConfigService.js +133 -0
  721. package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
  722. package/build/dist/Server/Services/IncidentCustomFieldService.js +93 -0
  723. package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
  724. package/build/dist/Server/Services/IncidentService.js +32 -0
  725. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  726. package/build/dist/Server/Services/Index.js +10 -0
  727. package/build/dist/Server/Services/Index.js.map +1 -1
  728. package/build/dist/Server/Services/MetricService.js +163 -0
  729. package/build/dist/Server/Services/MetricService.js.map +1 -1
  730. package/build/dist/Server/Services/MonitorService.js +148 -21
  731. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  732. package/build/dist/Server/Services/MonitorStatusTimelineService.js +127 -8
  733. package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
  734. package/build/dist/Server/Services/MonitorTemplateService.js +162 -0
  735. package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
  736. package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js +1683 -0
  737. package/build/dist/Server/Services/NetworkAlertPolicyEngineService.js.map +1 -0
  738. package/build/dist/Server/Services/NetworkAlertPolicyService.js +732 -0
  739. package/build/dist/Server/Services/NetworkAlertPolicyService.js.map +1 -0
  740. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +89 -36
  741. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  742. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +54 -11
  743. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
  744. package/build/dist/Server/Services/NetworkDeviceService.js +841 -70
  745. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  746. package/build/dist/Server/Services/NetworkSiteService.js +1145 -107
  747. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
  748. package/build/dist/Server/Services/NetworkSiteTypeService.js +863 -0
  749. package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -1
  750. package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js +217 -0
  751. package/build/dist/Server/Services/NetworkSnmpCredentialProfileService.js.map +1 -0
  752. package/build/dist/Server/Services/NotificationService.js +80 -17
  753. package/build/dist/Server/Services/NotificationService.js.map +1 -1
  754. package/build/dist/Server/Services/ProjectService.js +88 -30
  755. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  756. package/build/dist/Server/Services/RoutineEmailSettingsService.js +69 -0
  757. package/build/dist/Server/Services/RoutineEmailSettingsService.js.map +1 -0
  758. package/build/dist/Server/Services/RumSessionReplayViewService.js +86 -24
  759. package/build/dist/Server/Services/RumSessionReplayViewService.js.map +1 -1
  760. package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js +93 -0
  761. package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js.map +1 -1
  762. package/build/dist/Server/Services/ScheduledMaintenanceService.js +29 -0
  763. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  764. package/build/dist/Server/Services/StatusPagePrivateUserService.js +92 -2
  765. package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
  766. package/build/dist/Server/Services/TeamMemberService.js +62 -2
  767. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  768. package/build/dist/Server/Services/TeamPermissionService.js +166 -3
  769. package/build/dist/Server/Services/TeamPermissionService.js.map +1 -1
  770. package/build/dist/Server/Services/TelemetryIngestionKeyService.js +562 -18
  771. package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
  772. package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js +76 -0
  773. package/build/dist/Server/Services/UserNotificationEmailRollupBatchService.js.map +1 -0
  774. package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js +77 -0
  775. package/build/dist/Server/Services/UserNotificationEmailRollupItemService.js.map +1 -0
  776. package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js +111 -0
  777. package/build/dist/Server/Services/UserNotificationEmailRollupSettingService.js.map +1 -0
  778. package/build/dist/Server/Services/UserNotificationSettingService.js +66 -20
  779. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  780. package/build/dist/Server/Services/UserService.js +90 -0
  781. package/build/dist/Server/Services/UserService.js.map +1 -1
  782. package/build/dist/Server/Services/UserTelegramService.js +257 -4
  783. package/build/dist/Server/Services/UserTelegramService.js.map +1 -1
  784. package/build/dist/Server/Types/Database/QueryHelper.js +1 -1
  785. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  786. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +14 -3
  787. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
  788. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +10 -0
  789. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
  790. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +10 -0
  791. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
  792. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js +54 -1
  793. package/build/dist/Server/Utils/AI/SRE/Insights/InsightTriageRunner.js.map +1 -1
  794. package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +18 -4
  795. package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -1
  796. package/build/dist/Server/Utils/APIKey/AccessPermission.js +2 -2
  797. package/build/dist/Server/Utils/APIKey/AccessPermission.js.map +1 -1
  798. package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js +59 -0
  799. package/build/dist/Server/Utils/Billing/BillingFailureNoticeThrottle.js.map +1 -0
  800. package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js +27 -0
  801. package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js.map +1 -0
  802. package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js +226 -0
  803. package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js.map +1 -0
  804. package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js +189 -0
  805. package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js.map +1 -0
  806. package/build/dist/Server/Utils/DataSource/EgressGuard.js +121 -7
  807. package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
  808. package/build/dist/Server/Utils/DataSource/HttpFetch.js +2 -1
  809. package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
  810. package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js +124 -0
  811. package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -0
  812. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +733 -0
  813. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -0
  814. package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +497 -0
  815. package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -0
  816. package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +257 -0
  817. package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -0
  818. package/build/dist/Server/Utils/FrontendEnvironment.js +33 -0
  819. package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -0
  820. package/build/dist/Server/Utils/LLM/LLMService.js +64 -1
  821. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  822. package/build/dist/Server/Utils/LogRedaction.js +28 -0
  823. package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
  824. package/build/dist/Server/Utils/Logger.js +73 -1
  825. package/build/dist/Server/Utils/Logger.js.map +1 -1
  826. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +287 -68
  827. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
  828. package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js +141 -0
  829. package/build/dist/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.js.map +1 -0
  830. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
  831. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
  832. package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +20 -4
  833. package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
  834. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +51 -1
  835. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  836. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +29 -6
  837. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  838. package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js +7 -0
  839. package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js.map +1 -1
  840. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +125 -13
  841. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  842. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +158 -6
  843. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
  844. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +22 -6
  845. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  846. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +33 -0
  847. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  848. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +54 -0
  849. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  850. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +330 -21
  851. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
  852. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +55 -10
  853. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
  854. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +178 -49
  855. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
  856. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +119 -29
  857. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  858. package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js +237 -0
  859. package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js.map +1 -0
  860. package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js +30 -17
  861. package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js.map +1 -1
  862. package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js +158 -0
  863. package/build/dist/Server/Utils/NetworkSite/NetworkSiteHierarchyLock.js.map +1 -0
  864. package/build/dist/Server/Utils/OutboundUserAgent.js +123 -0
  865. package/build/dist/Server/Utils/OutboundUserAgent.js.map +1 -0
  866. package/build/dist/Server/Utils/SSRFProtection.js +136 -9
  867. package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
  868. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js +174 -89
  869. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -1
  870. package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js +223 -0
  871. package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js.map +1 -0
  872. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +945 -164
  873. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
  874. package/build/dist/Server/Utils/StartServer.js +41 -28
  875. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  876. package/build/dist/Server/Utils/TelegramVerificationToken.js +129 -0
  877. package/build/dist/Server/Utils/TelegramVerificationToken.js.map +1 -0
  878. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +28 -8
  879. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
  880. package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js +95 -0
  881. package/build/dist/Server/Utils/Telemetry/ErrorClassResolver.js.map +1 -0
  882. package/build/dist/Server/Utils/Telemetry/PinServiceName.js +163 -0
  883. package/build/dist/Server/Utils/Telemetry/PinServiceName.js.map +1 -0
  884. package/build/dist/Server/Utils/Telemetry/SpanUtil.js +29 -0
  885. package/build/dist/Server/Utils/Telemetry/SpanUtil.js.map +1 -1
  886. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js +28 -15
  887. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js.map +1 -1
  888. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js +64 -0
  889. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js.map +1 -0
  890. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js +171 -0
  891. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js.map +1 -0
  892. package/build/dist/Server/Utils/Telemetry.js +162 -46
  893. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  894. package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
  895. package/build/dist/Server/Utils/VM/VMRunner.js +780 -69
  896. package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
  897. package/build/dist/Types/AI/ExceptionAIClassification.js +10 -24
  898. package/build/dist/Types/AI/ExceptionAIClassification.js.map +1 -1
  899. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js +60 -0
  900. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -0
  901. package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js +20 -0
  902. package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js.map +1 -0
  903. package/build/dist/Types/CustomField/CustomFieldValueMapping.js +141 -0
  904. package/build/dist/Types/CustomField/CustomFieldValueMapping.js.map +1 -0
  905. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  906. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  907. package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js +2 -0
  908. package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUsageSnapshot.js.map +1 -0
  909. package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js +7 -0
  910. package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseUserCountSource.js.map +1 -0
  911. package/build/dist/Types/Exception/ApiException.js +9 -0
  912. package/build/dist/Types/Exception/ApiException.js.map +1 -1
  913. package/build/dist/Types/Exception/BadDataException.js +10 -0
  914. package/build/dist/Types/Exception/BadDataException.js.map +1 -1
  915. package/build/dist/Types/Exception/BadRequestException.js +10 -0
  916. package/build/dist/Types/Exception/BadRequestException.js.map +1 -1
  917. package/build/dist/Types/Exception/Exception.js +56 -0
  918. package/build/dist/Types/Exception/Exception.js.map +1 -1
  919. package/build/dist/Types/Exception/ForbiddenException.js +9 -0
  920. package/build/dist/Types/Exception/ForbiddenException.js.map +1 -1
  921. package/build/dist/Types/Exception/NotAuthenticatedException.js +9 -0
  922. package/build/dist/Types/Exception/NotAuthenticatedException.js.map +1 -1
  923. package/build/dist/Types/Exception/NotAuthorizedException.js +9 -0
  924. package/build/dist/Types/Exception/NotAuthorizedException.js.map +1 -1
  925. package/build/dist/Types/Exception/NotFoundException.js +10 -0
  926. package/build/dist/Types/Exception/NotFoundException.js.map +1 -1
  927. package/build/dist/Types/Exception/PayloadTooLargeException.js +10 -0
  928. package/build/dist/Types/Exception/PayloadTooLargeException.js.map +1 -1
  929. package/build/dist/Types/Exception/PaymentRequiredException.js +9 -0
  930. package/build/dist/Types/Exception/PaymentRequiredException.js.map +1 -1
  931. package/build/dist/Types/Exception/ServiceUnavailableException.js +9 -0
  932. package/build/dist/Types/Exception/ServiceUnavailableException.js.map +1 -1
  933. package/build/dist/Types/Exception/SsoAuthorizationException.js +9 -0
  934. package/build/dist/Types/Exception/SsoAuthorizationException.js.map +1 -1
  935. package/build/dist/Types/Exception/TenantNotFoundException.js +10 -0
  936. package/build/dist/Types/Exception/TenantNotFoundException.js.map +1 -1
  937. package/build/dist/Types/Exception/TimeoutException.js +9 -0
  938. package/build/dist/Types/Exception/TimeoutException.js.map +1 -1
  939. package/build/dist/Types/Exception/TooManyRequestsException.js +9 -0
  940. package/build/dist/Types/Exception/TooManyRequestsException.js.map +1 -1
  941. package/build/dist/Types/Exception/UnableToReachServer.js +9 -0
  942. package/build/dist/Types/Exception/UnableToReachServer.js.map +1 -1
  943. package/build/dist/Types/Exception/WebsiteRequestException.js +9 -0
  944. package/build/dist/Types/Exception/WebsiteRequestException.js.map +1 -1
  945. package/build/dist/Types/Icon/IconProp.js +1 -0
  946. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  947. package/build/dist/Types/JSONFunctions.js +118 -37
  948. package/build/dist/Types/JSONFunctions.js.map +1 -1
  949. package/build/dist/Types/Monitor/CephAlertTemplates.js +130 -171
  950. package/build/dist/Types/Monitor/CephAlertTemplates.js.map +1 -1
  951. package/build/dist/Types/Monitor/CriteriaFilter.js +45 -2
  952. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  953. package/build/dist/Types/Monitor/DatabaseMetricCatalog.js +594 -0
  954. package/build/dist/Types/Monitor/DatabaseMetricCatalog.js.map +1 -0
  955. package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js +21 -0
  956. package/build/dist/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.js.map +1 -0
  957. package/build/dist/Types/Monitor/DockerAlertTemplates.js +286 -121
  958. package/build/dist/Types/Monitor/DockerAlertTemplates.js.map +1 -1
  959. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js +84 -105
  960. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js.map +1 -1
  961. package/build/dist/Types/Monitor/HostAlertTemplates.js +250 -122
  962. package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -1
  963. package/build/dist/Types/Monitor/IotAlertTemplates.js +81 -81
  964. package/build/dist/Types/Monitor/IotAlertTemplates.js.map +1 -1
  965. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +375 -215
  966. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
  967. package/build/dist/Types/Monitor/KubernetesMetricCatalog.js +19 -19
  968. package/build/dist/Types/Monitor/KubernetesMetricCatalog.js.map +1 -1
  969. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +70 -0
  970. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  971. package/build/dist/Types/Monitor/MonitorMetricType.js +61 -0
  972. package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
  973. package/build/dist/Types/Monitor/MonitorStep.js +54 -0
  974. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  975. package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js +122 -0
  976. package/build/dist/Types/Monitor/MonitorStepDatabaseMonitor.js.map +1 -0
  977. package/build/dist/Types/Monitor/MonitorStepSqlMonitor.js.map +1 -1
  978. package/build/dist/Types/Monitor/MonitorType.js +45 -1
  979. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  980. package/build/dist/Types/Monitor/PodmanAlertTemplates.js +104 -153
  981. package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -1
  982. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +156 -91
  983. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -1
  984. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +67 -6
  985. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
  986. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +38 -7
  987. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
  988. package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js +261 -0
  989. package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js.map +1 -0
  990. package/build/dist/Types/Monitor/RumAlertTemplates.js +46 -7
  991. package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
  992. package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js +422 -0
  993. package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js.map +1 -0
  994. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +441 -0
  995. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -0
  996. package/build/dist/Types/Monitor/ServiceAlertTemplates.js +79 -15
  997. package/build/dist/Types/Monitor/ServiceAlertTemplates.js.map +1 -1
  998. package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js +21 -1
  999. package/build/dist/Types/Monitor/SnmpMonitor/NetworkDeviceAlertPack.js.map +1 -1
  1000. package/build/dist/Types/Monitor/SqlConnectionConfig.js +2 -0
  1001. package/build/dist/Types/Monitor/SqlConnectionConfig.js.map +1 -0
  1002. package/build/dist/Types/Monitor/UptimeHistoryLabels.js +17 -0
  1003. package/build/dist/Types/Monitor/UptimeHistoryLabels.js.map +1 -0
  1004. package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js +172 -0
  1005. package/build/dist/Types/NetworkDevice/NetworkAlertPolicyScope.js.map +1 -0
  1006. package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js +40 -22
  1007. package/build/dist/Types/NetworkDevice/NetworkDeviceMonitoringMethod.js.map +1 -1
  1008. package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js +26 -0
  1009. package/build/dist/Types/NetworkSite/DefaultNetworkSiteTypeHierarchy.js.map +1 -0
  1010. package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js +186 -0
  1011. package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js.map +1 -0
  1012. package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js +87 -0
  1013. package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js.map +1 -0
  1014. package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js +29 -0
  1015. package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js.map +1 -0
  1016. package/build/dist/Types/Permission.js +80 -0
  1017. package/build/dist/Types/Permission.js.map +1 -1
  1018. package/build/dist/Types/Rum/SessionReplay.js +117 -0
  1019. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  1020. package/build/dist/Types/Rum/SessionReplayApi.js +181 -0
  1021. package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -0
  1022. package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js +21 -12
  1023. package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js.map +1 -1
  1024. package/build/dist/Types/Rum/SessionReplayConsentMode.js +11 -7
  1025. package/build/dist/Types/Rum/SessionReplayConsentMode.js.map +1 -1
  1026. package/build/dist/Types/Rum/SessionReplayCustomEvents.js +172 -0
  1027. package/build/dist/Types/Rum/SessionReplayCustomEvents.js.map +1 -0
  1028. package/build/dist/Types/Rum/SessionReplayHealth.js +37 -0
  1029. package/build/dist/Types/Rum/SessionReplayHealth.js.map +1 -0
  1030. package/build/dist/Types/Telemetry/ErrorClass.js +216 -0
  1031. package/build/dist/Types/Telemetry/ErrorClass.js.map +1 -0
  1032. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +85 -0
  1033. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -0
  1034. package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js +15 -0
  1035. package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js.map +1 -0
  1036. package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js +30 -0
  1037. package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js.map +1 -0
  1038. package/build/dist/Types/Telemetry/UnitOfWork.js +59 -0
  1039. package/build/dist/Types/Telemetry/UnitOfWork.js.map +1 -0
  1040. package/build/dist/Types/WebsiteRequest.js +55 -3
  1041. package/build/dist/Types/WebsiteRequest.js.map +1 -1
  1042. package/build/dist/UI/Components/Charts/Area/AreaChart.js +13 -2
  1043. package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
  1044. package/build/dist/UI/Components/Charts/Bar/BarChart.js +6 -2
  1045. package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
  1046. package/build/dist/UI/Components/Charts/Line/LineChart.js +13 -2
  1047. package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
  1048. package/build/dist/UI/Components/Charts/Types/XAxis/XAxis.js.map +1 -1
  1049. package/build/dist/UI/Components/Charts/Utils/DataPoint.js +15 -3
  1050. package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
  1051. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +40 -9
  1052. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
  1053. package/build/dist/UI/Components/Charts/Utils/XAxis.js +186 -0
  1054. package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
  1055. package/build/dist/UI/Components/CommandPalette/CommandPalette.js +2 -7
  1056. package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -1
  1057. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +80 -6
  1058. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
  1059. package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js +118 -0
  1060. package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js.map +1 -0
  1061. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +3 -0
  1062. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  1063. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +112 -7
  1064. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
  1065. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js +5 -162
  1066. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js.map +1 -1
  1067. package/build/dist/UI/Components/Graphs/UptimeDaySummary.js +181 -0
  1068. package/build/dist/UI/Components/Graphs/UptimeDaySummary.js.map +1 -0
  1069. package/build/dist/UI/Components/Header/Header.js +2 -3
  1070. package/build/dist/UI/Components/Header/Header.js.map +1 -1
  1071. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js +2 -1
  1072. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js.map +1 -1
  1073. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js +7 -1
  1074. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js.map +1 -1
  1075. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js +7 -1
  1076. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js.map +1 -1
  1077. package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js +7 -1
  1078. package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js.map +1 -1
  1079. package/build/dist/UI/Components/Icon/Icon.js +5 -0
  1080. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  1081. package/build/dist/UI/Components/JSONTable/JSONTable.js +2 -2
  1082. package/build/dist/UI/Components/JSONTable/JSONTable.js.map +1 -1
  1083. package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js +35 -0
  1084. package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js.map +1 -0
  1085. package/build/dist/UI/Components/Modal/Modal.js +2 -7
  1086. package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
  1087. package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js +34 -0
  1088. package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js.map +1 -0
  1089. package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js +49 -0
  1090. package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js.map +1 -0
  1091. package/build/dist/UI/Components/MonitorGraphs/Uptime.js +1 -1
  1092. package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
  1093. package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js +32 -6
  1094. package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js.map +1 -1
  1095. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +77 -0
  1096. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  1097. package/build/dist/UI/Components/ProgressBar/ProgressBar.js +12 -1
  1098. package/build/dist/UI/Components/ProgressBar/ProgressBar.js.map +1 -1
  1099. package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js +6 -6
  1100. package/build/dist/UI/Components/RadioButtons/BasicRadioButtons.js.map +1 -1
  1101. package/build/dist/UI/Components/SideMenu/SideMenu.js +67 -5
  1102. package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
  1103. package/build/dist/UI/Components/SideMenu/SideMenuItem.js +49 -53
  1104. package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
  1105. package/build/dist/UI/Components/SideMenu/SideMenuSection.js +25 -7
  1106. package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
  1107. package/build/dist/UI/Components/SideOver/SideOver.js +5 -20
  1108. package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
  1109. package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js +22 -1
  1110. package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js.map +1 -1
  1111. package/build/dist/UI/Components/Table/CellClassName.js +55 -0
  1112. package/build/dist/UI/Components/Table/CellClassName.js.map +1 -0
  1113. package/build/dist/UI/Components/Table/TableRow.js +16 -13
  1114. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  1115. package/build/dist/UI/Components/Table/TableSkeletonRows.js +9 -8
  1116. package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -1
  1117. package/build/dist/UI/Components/Tooltip/Tooltip.js +25 -1
  1118. package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
  1119. package/build/dist/UI/Components/Workflow/ComponentsModal.js +47 -30
  1120. package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
  1121. package/build/dist/UI/Components/Workflow/NodePlacement.js +37 -0
  1122. package/build/dist/UI/Components/Workflow/NodePlacement.js.map +1 -0
  1123. package/build/dist/UI/Components/Workflow/Workflow.js +35 -18
  1124. package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
  1125. package/build/dist/UI/Config.js +10 -20
  1126. package/build/dist/UI/Config.js.map +1 -1
  1127. package/build/dist/UI/Utils/GlobalKeyboardShortcut.js +138 -0
  1128. package/build/dist/UI/Utils/GlobalKeyboardShortcut.js.map +1 -0
  1129. package/build/dist/UI/Utils/PageScrollLock.js +31 -3
  1130. package/build/dist/UI/Utils/PageScrollLock.js.map +1 -1
  1131. package/build/dist/UI/Utils/PermissionGate.js +42 -1
  1132. package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
  1133. package/build/dist/UI/Utils/SensitiveUrlToken.js +97 -0
  1134. package/build/dist/UI/Utils/SensitiveUrlToken.js.map +1 -0
  1135. package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js +14 -0
  1136. package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js.map +1 -0
  1137. package/build/dist/UI/Utils/Telemetry/Telemetry.js +7 -5
  1138. package/build/dist/UI/Utils/Telemetry/Telemetry.js.map +1 -1
  1139. package/build/dist/UI/Utils/TestLLMProvider.js +4 -5
  1140. package/build/dist/UI/Utils/TestLLMProvider.js.map +1 -1
  1141. package/build/dist/Utils/API.js +67 -5
  1142. package/build/dist/Utils/API.js.map +1 -1
  1143. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +15 -0
  1144. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -1
  1145. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +111 -9
  1146. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
  1147. package/build/dist/Utils/HTTPResponseBodyReader.js +157 -0
  1148. package/build/dist/Utils/HTTPResponseBodyReader.js.map +1 -0
  1149. package/build/dist/Utils/Monitor/MonitorMetricType.js +109 -1
  1150. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  1151. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +8 -3
  1152. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  1153. package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +27 -7
  1154. package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -1
  1155. package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +7 -5
  1156. package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -1
  1157. package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js +180 -0
  1158. package/build/dist/Utils/NetworkDevice/NetworkAlertPolicyBootstrapUtil.js.map +1 -0
  1159. package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js +12 -0
  1160. package/build/dist/Utils/NetworkDevice/SnmpCredentialUtil.js.map +1 -0
  1161. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js +15 -5
  1162. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
  1163. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +44 -15
  1164. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
  1165. package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js +52 -23
  1166. package/build/dist/Utils/NetworkDiscovery/DiscoveryImportEligibility.js.map +1 -1
  1167. package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js +69 -0
  1168. package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js.map +1 -0
  1169. package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +85 -13
  1170. package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -1
  1171. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +30 -15
  1172. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
  1173. package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js +191 -0
  1174. package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js.map +1 -0
  1175. package/build/dist/Utils/Rum/ChunkMath.js +76 -0
  1176. package/build/dist/Utils/Rum/ChunkMath.js.map +1 -1
  1177. package/build/dist/Utils/Rum/SessionReplayHealth.js +534 -0
  1178. package/build/dist/Utils/Rum/SessionReplayHealth.js.map +1 -0
  1179. package/build/dist/Utils/Rum/SessionReplayStringMap.js +165 -0
  1180. package/build/dist/Utils/Rum/SessionReplayStringMap.js.map +1 -0
  1181. package/build/dist/Utils/Schema/ModelSchema.js +1 -0
  1182. package/build/dist/Utils/Schema/ModelSchema.js.map +1 -1
  1183. package/build/dist/Utils/StatusPage/ResourceSearch.js +200 -0
  1184. package/build/dist/Utils/StatusPage/ResourceSearch.js.map +1 -0
  1185. package/build/dist/Utils/Telemetry/OriginAllowList.js +299 -0
  1186. package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -0
  1187. package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js +147 -0
  1188. package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js.map +1 -0
  1189. package/build/dist/Utils/ValueFormatter.js +32 -1
  1190. package/build/dist/Utils/ValueFormatter.js.map +1 -1
  1191. package/package.json +2 -2
@@ -9,10 +9,13 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  };
10
10
  import DatabaseService from "./DatabaseService";
11
11
  import MonitorService from "./MonitorService";
12
+ import NetworkAlertPolicyEngineService, { MAX_INLINE_RECONCILE_DEVICES, } from "./NetworkAlertPolicyEngineService";
12
13
  import NetworkDeviceLabelRuleEngineService from "./NetworkDeviceLabelRuleEngineService";
13
14
  import NetworkDeviceOwnerRuleEngineService from "./NetworkDeviceOwnerRuleEngineService";
14
15
  import NetworkSiteAssignmentRuleService from "./NetworkSiteAssignmentRuleService";
15
16
  import NetworkSiteService from "./NetworkSiteService";
17
+ import NetworkSnmpCredentialProfileService from "./NetworkSnmpCredentialProfileService";
18
+ import ProbeService from "./ProbeService";
16
19
  import Model from "../../Models/DatabaseModels/NetworkDevice";
17
20
  import Monitor from "../../Models/DatabaseModels/Monitor";
18
21
  import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
@@ -91,8 +94,96 @@ function readOidTemplateIdFromData(data) {
91
94
  */
92
95
  return RelationIdUtil.readConsistent(data, OID_TEMPLATE_KEYS, "OID Collection Template");
93
96
  }
97
+ /*
98
+ * readConsistent for the same reason as the OID template above: the create
99
+ * and update guards validate the id this returns, and TypeORM's precedence
100
+ * between `monitorId` and `monitor` is not a security boundary. A payload
101
+ * that writes both spellings with different ids would have one of them
102
+ * validated and the other persisted, so the contradiction is refused
103
+ * instead of picked from.
104
+ */
94
105
  function readMonitorIdFromData(data) {
95
- return RelationIdUtil.read(data, MONITOR_KEYS);
106
+ return RelationIdUtil.readConsistent(data, MONITOR_KEYS, "Monitor");
107
+ }
108
+ /*
109
+ * Both spellings of "the probe that polls this device", and of "the SNMP
110
+ * credentials it is walked with".
111
+ *
112
+ * These two are the tenancy boundary of device polling. The probe decides
113
+ * WHO reaches into the customer's network on this device's behalf, and the
114
+ * credential profile decides WHAT is put on the wire when it gets there —
115
+ * so a cross-project value in either is not a mislabelled row, it is one
116
+ * project's infrastructure being pointed at another's. Both are read
117
+ * through readConsistent for the reason the monitor reference above is: a
118
+ * payload writing the FK and the relation at different rows would otherwise
119
+ * have one validated and the other persisted.
120
+ */
121
+ const PROBE_KEYS = ["probeId", "probe"];
122
+ const PROFILE_KEYS = [
123
+ "snmpCredentialProfileId",
124
+ "snmpCredentialProfile",
125
+ ];
126
+ /*
127
+ * Both spellings of "what kind of thing this device is". A role is one of
128
+ * the three axes a Network Alert Policy's scope selects on, so a write to it
129
+ * can add a device to a policy or take it out of one.
130
+ */
131
+ const ROLE_KEYS = ["networkDeviceRoleId", "networkDeviceRole"];
132
+ /*
133
+ * Every write that can change which Network Alert Policies cover a device,
134
+ * or whether it may carry a policy monitor at all.
135
+ *
136
+ * The first three are the scope axes (site, role, labels); the last three
137
+ * are provisionability — an archived device, a monitor-backed device and a
138
+ * device with no probe each keep no policy monitors (see the engine).
139
+ *
140
+ * Writing any of them makes onUpdateSuccess reconcile, and reconciling needs
141
+ * each matched device's PROJECT, which only the pre-write snapshot carries
142
+ * for a root caller with no tenant in props. That is why these are named in
143
+ * onBeforeUpdate's early return as well: without them a bulk re-label would
144
+ * skip the snapshot and the success hook would have no project to reconcile
145
+ * against.
146
+ */
147
+ function isAlertPolicyRelevantWrite(dataKeys) {
148
+ return (isSiteWrite(dataKeys) ||
149
+ RelationIdUtil.isWritten(dataKeys, ROLE_KEYS) ||
150
+ dataKeys.includes("labels") ||
151
+ dataKeys.includes("isArchived") ||
152
+ dataKeys.includes("monitoringMethod") ||
153
+ RelationIdUtil.isWritten(dataKeys, PROBE_KEYS));
154
+ }
155
+ function readProbeIdFromData(data) {
156
+ return RelationIdUtil.readConsistent(data, PROBE_KEYS, "Probe");
157
+ }
158
+ function readSnmpCredentialProfileIdFromData(data) {
159
+ return RelationIdUtil.readConsistent(data, PROFILE_KEYS, "SNMP Credential Profile");
160
+ }
161
+ /*
162
+ * The poll columns a probe's poll writes and nothing else ever should. On a
163
+ * device switched to monitor-backed they are residue — the last thing a
164
+ * probe found before it stopped asking — and left in place they keep
165
+ * describing a device nothing polls: DeviceReachabilityUtil's legacy branch
166
+ * judges a row with `lastSeenAt` and no `isReachable` by freshness, and the
167
+ * network summary's "degraded" query is `isReachable = true AND
168
+ * interfacesDown > 0`. The SNMP pair goes with them: a monitor-backed device
169
+ * has no walk, so `isSnmpReachable` and `lastSnmpSeenAt` can only ever be
170
+ * what the last walk left behind. Cleared on the Probe -> Monitor transition
171
+ * (onUpdateSuccess) and once on upgrade
172
+ * (BackfillMonitorBackedDeviceReachability), as a root write in both places:
173
+ * these columns are updatable by fewer roles than `monitoringMethod` is, so
174
+ * putting them on the caller's own payload would refuse a project member's
175
+ * legitimate switch.
176
+ */
177
+ function pollResidueReset() {
178
+ return {
179
+ lastSeenAt: null,
180
+ lastPolledAt: null,
181
+ isReachable: null,
182
+ isSnmpReachable: null,
183
+ lastSnmpSeenAt: null,
184
+ interfacesUp: null,
185
+ interfacesDown: null,
186
+ };
96
187
  }
97
188
  /*
98
189
  * How many devices a single manual "Run now" of an assignment rule walks.
@@ -511,6 +602,14 @@ export class Service extends DatabaseService {
511
602
  * first, then deletes their automatic monitors through MonitorService so
512
603
  * Monitor delete permissions, workspace cleanup, workflows, audit,
513
604
  * realtime, and billing hooks all run before the devices are removed.
605
+ *
606
+ * POLICY-OWNED MONITORS ARE HANDLED SEPARATELY, and deliberately so. A
607
+ * monitor a Network Alert Policy provisioned is system-managed — the API
608
+ * can neither set nor clear its `networkAlertPolicyId` — so nobody chose
609
+ * it individually and nobody should need monitor-delete permission on it
610
+ * individually to remove the device it describes. They are excluded from
611
+ * the caller-authorized preflight below and removed as root by the engine,
612
+ * once every device in the request has cleared that preflight.
514
613
  */
515
614
  async onBeforeDelete(deleteBy) {
516
615
  const authorizedQuery = await ModelPermission.checkDeleteQueryPermission(Model, deleteBy.query, deleteBy.props);
@@ -543,6 +642,13 @@ export class Service extends DatabaseService {
543
642
  const automaticMonitorQuery = {
544
643
  projectId: device.projectId,
545
644
  autoProvisionedNetworkDeviceId: device.id,
645
+ /*
646
+ * Rule-provisioned and hand-made monitors only. A policy's monitors
647
+ * go through the engine as root (see the hook comment), so requiring
648
+ * the caller's permission on them here would refuse a device delete
649
+ * over rows the caller never chose to own.
650
+ */
651
+ networkAlertPolicyId: QueryHelper.isNull(),
546
652
  };
547
653
  const monitorDeleteProps = Object.assign(Object.assign({}, deleteBy.props), { tenantId: device.projectId });
548
654
  const monitorCount = await countAutomaticMonitors(automaticMonitorQuery);
@@ -568,6 +674,30 @@ export class Service extends DatabaseService {
568
674
  monitorCount,
569
675
  });
570
676
  }
677
+ /*
678
+ * Every device in the request has now proved the caller may delete its
679
+ * ordinary automatic monitors, so nothing after this point can throw for
680
+ * an authorization reason. That is the moment to remove the policy-owned
681
+ * monitors: doing it earlier would let a later device's failed preflight
682
+ * abort the request after a policy's monitors — and their incident
683
+ * history — were already gone from devices that then survived.
684
+ */
685
+ const devicesByProjectId = new Map();
686
+ for (const device of devices) {
687
+ if (!device.id || !device.projectId) {
688
+ continue;
689
+ }
690
+ const key = device.projectId.toString();
691
+ const deviceIds = devicesByProjectId.get(key) || [];
692
+ deviceIds.push(device.id);
693
+ devicesByProjectId.set(key, deviceIds);
694
+ }
695
+ for (const [projectIdString, deviceIds] of devicesByProjectId) {
696
+ await NetworkAlertPolicyEngineService.deletePolicyMonitorsForDevices({
697
+ projectId: new ObjectID(projectIdString),
698
+ deviceIds: deviceIds,
699
+ });
700
+ }
571
701
  for (const cleanupPlan of cleanupPlans) {
572
702
  /*
573
703
  * LIMIT_MAX is a per-service-call cap, not a lifecycle cap. Always
@@ -661,6 +791,99 @@ export class Service extends DatabaseService {
661
791
  throw new BadDataException("OID Collection Template must belong to the same project.");
662
792
  }
663
793
  }
794
+ /*
795
+ * The FK behind `probeId` only requires the Probe row to exist. Probe ids
796
+ * reach the server from the browser — the device create form, the settings
797
+ * page and the bulk "Set probe" action all post one — so without this
798
+ * check a device can be pointed at another project's probe, and that probe
799
+ * then claims it on its next poll: it reads the device's hostname and its
800
+ * SNMP credentials, and reports status back into this project. That is a
801
+ * cross-tenant read of both configuration and network position.
802
+ *
803
+ * A GLOBAL probe has no project and is attachable anywhere, so this
804
+ * delegates to ProbeService rather than comparing projectIds — the same
805
+ * predicate that decides which probes a monitor may use.
806
+ *
807
+ * `claimDevicesForPolling` re-checks the pairing in SQL as a backstop, for
808
+ * rows written before this guard existed. Both halves are load-bearing:
809
+ * this one gives the operator an error at the point of the mistake, the
810
+ * other one makes a stale row unpollable rather than merely unwritable.
811
+ */
812
+ async assertProbeIsAttachableToProject(data) {
813
+ if (!data.projectId) {
814
+ return;
815
+ }
816
+ const isAttachable = await ProbeService.isProbeAttachableToProject({
817
+ probeId: data.probeId,
818
+ projectId: data.projectId,
819
+ });
820
+ if (!isAttachable) {
821
+ throw new BadDataException("Probe not found or it does not belong to this project.");
822
+ }
823
+ }
824
+ /*
825
+ * Same hole as the probe, on the other half of the poll: a credential
826
+ * profile is read LIVE at poll time
827
+ * (NetworkDeviceHydrationUtil.resolveSnmpCredentials), so a device pointed
828
+ * at another project's profile would be walked with that project's
829
+ * community string or v3 credentials — put on the wire, inside this
830
+ * project's network, by this project's probe.
831
+ *
832
+ * The resolver drops a mismatched reference as a backstop and pings the
833
+ * device instead. This is the half that stops the reference being written
834
+ * at all, and it is the half that tells the operator why.
835
+ */
836
+ async assertSnmpCredentialProfileBelongsToProject(data) {
837
+ if (!data.projectId) {
838
+ return;
839
+ }
840
+ const profile = await NetworkSnmpCredentialProfileService.findOneById({
841
+ id: data.snmpCredentialProfileId,
842
+ select: {
843
+ _id: true,
844
+ projectId: true,
845
+ },
846
+ props: {
847
+ isRoot: true,
848
+ },
849
+ });
850
+ if (!profile) {
851
+ throw new BadDataException("SNMP Credential Profile not found.");
852
+ }
853
+ if (profile.projectId &&
854
+ profile.projectId.toString() !== data.projectId.toString()) {
855
+ throw new BadDataException("SNMP Credential Profile must belong to the same project.");
856
+ }
857
+ }
858
+ /*
859
+ * The site's default probe, resolved for a device that is landing in that
860
+ * site without one of its own — this site's `probeId`, or the nearest
861
+ * ancestor that has one.
862
+ *
863
+ * Returns null rather than throwing when the inherited probe is not
864
+ * attachable to the device's project. A site row written before the
865
+ * tenancy guards existed must not be able to fail an unrelated device
866
+ * write; the honest outcome is that the device is created with NO probe
867
+ * (it reads Pending, and the operator picks one) rather than silently
868
+ * copying another project's probe onto it.
869
+ */
870
+ async resolveInheritedSiteProbeId(data) {
871
+ const inheritedProbeId = await NetworkSiteService.resolveDefaultProbeIdForSite(data.siteId);
872
+ if (!inheritedProbeId) {
873
+ return null;
874
+ }
875
+ for (const projectId of data.projectIds) {
876
+ const isAttachable = await ProbeService.isProbeAttachableToProject({
877
+ probeId: inheritedProbeId,
878
+ projectId: projectId,
879
+ });
880
+ if (!isAttachable) {
881
+ logger.error(`Network site ${data.siteId.toString()} names default probe ${inheritedProbeId.toString()}, which is not attachable to project ${projectId.toString()}. Not inheriting it; the device is left without a probe.`);
882
+ return null;
883
+ }
884
+ }
885
+ return inheritedProbeId;
886
+ }
664
887
  /*
665
888
  * onBeforeUpdate runs before DatabaseService permission-checks the query,
666
889
  * so reading the raw client query as root would hand the hook rows from
@@ -673,6 +896,7 @@ export class Service extends DatabaseService {
673
896
  return Object.assign(Object.assign({}, query), { projectId: props.tenantId });
674
897
  }
675
898
  async onBeforeCreate(createBy) {
899
+ var _a;
676
900
  /*
677
901
  * Read both spellings: the dashboard posts the `site` relation, not the
678
902
  * `siteId` column, so guarding only `siteId` let a UI-created device
@@ -685,6 +909,31 @@ export class Service extends DatabaseService {
685
909
  projectId: createBy.data.projectId,
686
910
  });
687
911
  }
912
+ /*
913
+ * DatabaseService stamps the tenant column AFTER this hook runs, so a
914
+ * device created from the dashboard reaches here with `projectId` still
915
+ * unset and only `props.tenantId` to go on. The guards below are the
916
+ * tenancy boundary of polling, so they must not be skipped for the one
917
+ * write shape every UI create takes.
918
+ */
919
+ const createProjectId = createBy.data.projectId ||
920
+ ((_a = createBy.data.project) === null || _a === void 0 ? void 0 : _a.id) ||
921
+ createBy.props.tenantId ||
922
+ undefined;
923
+ const createProbeId = readProbeIdFromData(createBy.data);
924
+ if (createProbeId) {
925
+ await this.assertProbeIsAttachableToProject({
926
+ probeId: createProbeId,
927
+ projectId: createProjectId,
928
+ });
929
+ }
930
+ const createSnmpCredentialProfileId = readSnmpCredentialProfileIdFromData(createBy.data);
931
+ if (createSnmpCredentialProfileId) {
932
+ await this.assertSnmpCredentialProfileBelongsToProject({
933
+ snmpCredentialProfileId: createSnmpCredentialProfileId,
934
+ projectId: createProjectId,
935
+ });
936
+ }
688
937
  const createOidTemplateId = readOidTemplateIdFromData(createBy.data);
689
938
  if (createOidTemplateId) {
690
939
  await this.assertOidTemplateBelongsToProject({
@@ -701,29 +950,67 @@ export class Service extends DatabaseService {
701
950
  label: "Device-Specific Health OIDs",
702
951
  });
703
952
  }
953
+ const monitorId = readMonitorIdFromData(createBy.data);
954
+ /*
955
+ * The monitor is NOT required. Discovery import is why: a subnet sweep
956
+ * finds ping-only hosts in bulk and there is no monitor to bind them to
957
+ * yet. Such a device is still worth recording — it belongs to a site,
958
+ * carries labels, and appears on the topology map — and its status reads
959
+ * Pending, tagged "No monitor", which is exactly true until somebody
960
+ * points a monitor at it.
961
+ *
962
+ * But any binding that IS supplied is tenant-checked, whatever the
963
+ * monitoring method. This guard used to sit inside the monitor-backed
964
+ * branch below, which left a Probe-method create (or one with the method
965
+ * omitted) free to persist another project's monitor FK: the FK only
966
+ * proves the Monitor row exists, a Probe device may legitimately carry a
967
+ * monitorId (NetworkSiteService.onMonitorStatusChanged stamps from it),
968
+ * and a nested select through the relation reads that monitor's
969
+ * configuration. The update path runs the same check.
970
+ */
971
+ if (monitorId) {
972
+ await this.assertMonitorBelongsToProject({
973
+ monitorId: monitorId,
974
+ projectId: createBy.data.projectId,
975
+ });
976
+ }
704
977
  if (NetworkDeviceMonitoringMethodUtil.isMonitorBacked(createBy.data.monitoringMethod)) {
705
- const monitorId = readMonitorIdFromData(createBy.data);
706
978
  /*
707
- * The monitor is NOT required here, though the create form asks for
708
- * one. Discovery import is why: a subnet sweep finds ping-only hosts
709
- * in bulk and there is no monitor to bind them to yet. Such a device
710
- * is still worth recordingit belongs to a site, carries labels, and
711
- * appears on the topology map — and its status reads "pending", which
712
- * is exactly true until somebody points a monitor at it.
979
+ * Not a preference: nothing polls a monitor-backed device its bound
980
+ * monitor's status is its status so leaving polling on would queue
981
+ * a poll whose verdict nothing may read. claimDevicesForPolling
982
+ * refuses these rows toothis is the half that keeps the column
983
+ * honest for anything reading it.
713
984
  */
714
- if (monitorId) {
715
- await this.assertMonitorBelongsToProject({
716
- monitorId: monitorId,
717
- projectId: createBy.data.projectId,
718
- });
719
- }
985
+ createBy.data.isPollingEnabled = false;
986
+ }
987
+ else if (siteId && !createProbeId) {
720
988
  /*
721
- * Not a preference: a monitor-backed device has no probe and no
722
- * credentials, so leaving polling on would queue a walk that can only
723
- * ever fail. claimDevicesForPolling refuses these rows too this is
724
- * the half that keeps the column honest for anything reading it.
989
+ * Site default probe, COPIED AT WRITE.
990
+ *
991
+ * This is what lets an operator register a device with a name and an
992
+ * address and nothing else: the site (or the nearest ancestor site
993
+ * that names one) supplies the probe, and the device polls from its
994
+ * first cycle instead of sitting Pending until somebody notices the
995
+ * empty field.
996
+ *
997
+ * Copied, not read through, and that distinction is the whole design.
998
+ * Nothing re-reads the site later, so editing a site's default probe
999
+ * decides where FUTURE devices poll from and never re-points a fleet
1000
+ * that is already polling — a read-through default would turn one
1001
+ * dropdown change into a silent migration of every device in the
1002
+ * subtree onto a probe that may not even reach them.
1003
+ *
1004
+ * A device that names its own probe keeps it: `createProbeId` above is
1005
+ * the caller's explicit choice and always wins.
725
1006
  */
726
- createBy.data.isPollingEnabled = false;
1007
+ const inheritedProbeId = await this.resolveInheritedSiteProbeId({
1008
+ siteId: siteId,
1009
+ projectIds: createProjectId ? [createProjectId] : [],
1010
+ });
1011
+ if (inheritedProbeId) {
1012
+ createBy.data.probeId = inheritedProbeId;
1013
+ }
727
1014
  }
728
1015
  return { createBy, carryForward: null };
729
1016
  }
@@ -784,8 +1071,8 @@ export class Service extends DatabaseService {
784
1071
  /*
785
1072
  * A device created monitor-backed adopts its monitor's CURRENT
786
1073
  * status right away rather than waiting for that monitor's next
787
- * status CHANGE. Skipped for SNMP devices, which are judged by
788
- * their own walk.
1074
+ * status CHANGE. Skipped for Probe devices, which are judged by
1075
+ * their own poll.
789
1076
  */
790
1077
  if (NetworkDeviceMonitoringMethodUtil.isMonitorBacked(createdItem.monitoringMethod)) {
791
1078
  await this.refreshStampedMonitorStatus({
@@ -793,6 +1080,21 @@ export class Service extends DatabaseService {
793
1080
  clearWhenNotMonitorBacked: false,
794
1081
  });
795
1082
  }
1083
+ })
1084
+ .then(async () => {
1085
+ /*
1086
+ * LAST, and that ordering is the whole point. A Network Alert
1087
+ * Policy can be scoped by site, by role and by LABEL, and the
1088
+ * label and site links above are what put those on a newly
1089
+ * imported device — a discovery import arrives with neither. Asking
1090
+ * the policy engine before they land would reconcile the device
1091
+ * against a scope it does not match yet, provision nothing, and
1092
+ * leave the device uncovered until the five-minute sweep.
1093
+ */
1094
+ await NetworkAlertPolicyEngineService.reconcileDevice({
1095
+ projectId: createdItem.projectId,
1096
+ deviceId: createdItem.id,
1097
+ });
796
1098
  })
797
1099
  .catch((error) => {
798
1100
  var _a, _b;
@@ -807,23 +1109,29 @@ export class Service extends DatabaseService {
807
1109
  /*
808
1110
  * Capture the previous state of every matched device when an update
809
1111
  * touches siteId (so onUpdateSuccess can refresh the OLD site's rollup as
810
- * well as the new one) or touches one of the columns site assignment rules
1112
+ * well as the new one), touches one of the columns site assignment rules
811
1113
  * match on (so onUpdateSuccess can tell a real rename from the identical
812
- * sysName the SNMP walk rewrites on every poll).
1114
+ * sysName the SNMP walk rewrites on every poll), or touches
1115
+ * monitoringMethod (so onUpdateSuccess can tell a real Monitor -> Probe
1116
+ * transition from a form re-sending the method the device already has).
1117
+ * The same read feeds the tenancy guards on the site, monitor and OID
1118
+ * template references.
813
1119
  */
814
1120
  async onBeforeUpdate(updateBy) {
815
1121
  const dataKeys = Object.keys(updateBy.data || {});
816
1122
  /*
817
1123
  * Switching a device to monitor-backed turns polling off with it. The
818
- * two are one decision, not two: a device with no probe and no
819
- * credentials cannot be walked, so leaving the flag on would queue a
820
- * walk per interval that can only fail and then paint the device down.
1124
+ * two are one decision, not two: a monitor-backed device's health is
1125
+ * its bound monitor's, so leaving the flag on would queue a poll per
1126
+ * interval whose verdict nothing may read. The way back is the mirror
1127
+ * image — onUpdateSuccess restores polling on a real Monitor -> Probe
1128
+ * transition, per device, once the write has committed.
821
1129
  */
822
1130
  const isMethodWrite = dataKeys.includes("monitoringMethod");
823
1131
  /*
824
1132
  * An update payload is a QueryDeepPartialEntity, so a column can hold a
825
1133
  * raw value OR a SQL-expression function. Only a plain string is a
826
- * method we can reason about; anything else falls through to the SNMP
1134
+ * method we can reason about; anything else falls through to the Probe
827
1135
  * default, which changes nothing.
828
1136
  */
829
1137
  const writtenMethod = updateBy.data["monitoringMethod"];
@@ -831,6 +1139,16 @@ export class Service extends DatabaseService {
831
1139
  typeof writtenMethod === "string" &&
832
1140
  NetworkDeviceMonitoringMethodUtil.isMonitorBacked(writtenMethod);
833
1141
  if (becomesMonitorBacked) {
1142
+ /*
1143
+ * Only the polling flag is forced onto the payload, deliberately. The
1144
+ * poll residue the device carries over from its probe-polled days has to go
1145
+ * too, but the column-permission check runs on this payload AFTER the
1146
+ * hook, and those columns are updatable by fewer roles than
1147
+ * monitoringMethod is — so adding them here would turn a project
1148
+ * member's legitimate switch into a permission failure.
1149
+ * onUpdateSuccess clears them as root once the transition has
1150
+ * committed; see pollResidueReset.
1151
+ */
834
1152
  updateBy.data.isPollingEnabled = false;
835
1153
  }
836
1154
  /*
@@ -841,29 +1159,26 @@ export class Service extends DatabaseService {
841
1159
  * nothing ever polled it. Only checked when the payload actually asks
842
1160
  * for it, so the ordinary update path costs no extra query.
843
1161
  */
844
- if (!becomesMonitorBacked &&
1162
+ const isPollingTurnOn = !becomesMonitorBacked &&
845
1163
  dataKeys.includes("isPollingEnabled") &&
846
- updateBy.data.isPollingEnabled === true) {
847
- const targets = await this.findBy({
848
- query: this.scopeQueryToCallerTenant(updateBy.query, updateBy.props),
849
- select: {
850
- _id: true,
851
- monitoringMethod: true,
852
- },
853
- limit: LIMIT_MAX,
854
- skip: 0,
855
- props: {
856
- isRoot: true,
857
- },
858
- });
859
- const isTargetMonitorBacked = targets.some((target) => {
860
- return NetworkDeviceMonitoringMethodUtil.isMonitorBacked(target.monitoringMethod);
861
- });
862
- // Unless the same write is moving it back to SNMP, which is allowed.
863
- if (isTargetMonitorBacked && !(isMethodWrite && !becomesMonitorBacked)) {
864
- throw new BadDataException("This device is monitor-backed, so there is nothing to poll — it has no probe and no SNMP credentials. Switch its monitoring method to SNMP first.");
865
- }
866
- }
1164
+ updateBy.data.isPollingEnabled === true;
1165
+ /*
1166
+ * Read — and, for conflicting spellings, refused — before the early
1167
+ * return below, so a payload that points `monitorId` and `monitor` at
1168
+ * different rows is rejected on every write shape rather than only on
1169
+ * the ones that happen to need the snapshot. Null means the write
1170
+ * unbinds the monitor, or does not mention it; neither needs a lookup.
1171
+ */
1172
+ const newMonitorId = readMonitorIdFromData(updateBy.data);
1173
+ /*
1174
+ * Read here, above the early return, for the same reason the monitor id
1175
+ * is: a payload that points `probeId` and `probe` (or the two credential
1176
+ * profile spellings) at different rows is a contradiction, and it is
1177
+ * refused on every write shape rather than only on the ones that happen
1178
+ * to need the snapshot below.
1179
+ */
1180
+ const newProbeId = readProbeIdFromData(updateBy.data);
1181
+ const newSnmpCredentialProfileId = readSnmpCredentialProfileIdFromData(updateBy.data);
867
1182
  const isSiteChange = isSiteWrite(dataKeys);
868
1183
  const isIdentityChange = SITE_RULE_IDENTITY_COLUMNS.some((column) => {
869
1184
  return dataKeys.includes(column);
@@ -886,10 +1201,42 @@ export class Service extends DatabaseService {
886
1201
  */
887
1202
  const isOidTemplateChange = RelationIdUtil.isWritten(dataKeys, OID_TEMPLATE_KEYS);
888
1203
  const isDeviceOidsChange = updateBy.data.snmpOids !== undefined;
889
- if (!isSiteChange &&
1204
+ /*
1205
+ * The polling tenancy pair, named in the early return for exactly the
1206
+ * reason the OID template is: assigning a probe or a credential profile
1207
+ * changes neither site nor identity, so a guard placed below the return
1208
+ * would be dead code on the only writes it exists for — the settings
1209
+ * page's Monitoring section and the device-list bulk actions, which post
1210
+ * precisely these columns and nothing else.
1211
+ */
1212
+ const isProbeChange = RelationIdUtil.isWritten(dataKeys, PROBE_KEYS);
1213
+ const isSnmpCredentialProfileChange = RelationIdUtil.isWritten(dataKeys, PROFILE_KEYS);
1214
+ /*
1215
+ * One snapshot read serves every guard and carry-forward below, and the
1216
+ * SNMP walk's per-poll column writes — the hot path through here — need
1217
+ * none of them. Binding a monitor is on the list for the same reason the
1218
+ * OID template is: it is exactly the write shape that changes neither
1219
+ * site nor identity, so a tenancy guard placed below a narrower return
1220
+ * would never run on the only write it exists for.
1221
+ */
1222
+ /*
1223
+ * The alert-policy axes ride the same return, and for the same reason
1224
+ * the OID template does: re-labelling a device or moving it to a role
1225
+ * changes neither its site nor its identity, so a snapshot taken below a
1226
+ * narrower return would be absent on exactly the writes onUpdateSuccess
1227
+ * needs it for. See isAlertPolicyRelevantWrite.
1228
+ */
1229
+ const isAlertPolicyChange = isAlertPolicyRelevantWrite(dataKeys);
1230
+ if (!isMethodWrite &&
1231
+ !isPollingTurnOn &&
1232
+ !newMonitorId &&
1233
+ !isSiteChange &&
890
1234
  !isIdentityChange &&
891
1235
  !isOidTemplateChange &&
892
- !isDeviceOidsChange) {
1236
+ !isDeviceOidsChange &&
1237
+ !isProbeChange &&
1238
+ !isSnmpCredentialProfileChange &&
1239
+ !isAlertPolicyChange) {
893
1240
  return { updateBy, carryForward: null };
894
1241
  }
895
1242
  const previousDevices = await this.findBy({
@@ -901,9 +1248,18 @@ export class Service extends DatabaseService {
901
1248
  hostname: true,
902
1249
  name: true,
903
1250
  sysName: true,
1251
+ /*
1252
+ * Whether the device already has a probe. The site-default
1253
+ * inheritance below must never overwrite one, and this column is
1254
+ * the only way to tell "no probe yet" from "a probe the operator
1255
+ * chose" once the write has committed.
1256
+ */
1257
+ probeId: true,
904
1258
  // Decide which OID budget applies below, and whether a link would truncate.
905
1259
  oidTemplateId: true,
906
1260
  snmpOids: true,
1261
+ // The polling guard and the method transition both need the OLD method.
1262
+ monitoringMethod: true,
907
1263
  },
908
1264
  limit: LIMIT_MAX,
909
1265
  skip: 0,
@@ -911,6 +1267,32 @@ export class Service extends DatabaseService {
911
1267
  isRoot: true,
912
1268
  },
913
1269
  });
1270
+ if (isPollingTurnOn) {
1271
+ const isTargetMonitorBacked = previousDevices.some((target) => {
1272
+ return NetworkDeviceMonitoringMethodUtil.isMonitorBacked(target.monitoringMethod);
1273
+ });
1274
+ // Unless the same write is moving it back to Probe, which is allowed.
1275
+ if (isTargetMonitorBacked && !(isMethodWrite && !becomesMonitorBacked)) {
1276
+ throw new BadDataException("This device is monitor-backed, so there is nothing to poll — its bound monitor's status is its status. Switch its monitoring method to Probe first.");
1277
+ }
1278
+ }
1279
+ /*
1280
+ * Which of the matched devices were monitor-backed BEFORE this write.
1281
+ * Only recorded on a method write, because only a method write can be a
1282
+ * transition; see DeviceUpdateCarryForward for what onUpdateSuccess does
1283
+ * with it and why the payload alone is not enough.
1284
+ */
1285
+ let wasMonitorBackedByDeviceId = undefined;
1286
+ if (isMethodWrite) {
1287
+ wasMonitorBackedByDeviceId = {};
1288
+ for (const previousDevice of previousDevices) {
1289
+ if (!previousDevice.id) {
1290
+ continue;
1291
+ }
1292
+ wasMonitorBackedByDeviceId[previousDevice.id.toString()] =
1293
+ NetworkDeviceMonitoringMethodUtil.isMonitorBacked(previousDevice.monitoringMethod);
1294
+ }
1295
+ }
914
1296
  const newSiteId = readSiteIdFromData(updateBy.data);
915
1297
  if (newSiteId) {
916
1298
  const checkedProjectIds = new Set();
@@ -926,6 +1308,29 @@ export class Service extends DatabaseService {
926
1308
  });
927
1309
  }
928
1310
  }
1311
+ /*
1312
+ * The monitor guard on the UPDATE path. Until this existed only
1313
+ * onBeforeCreate checked the binding, so a device could be created
1314
+ * clean and then re-pointed at another project's monitor with a plain
1315
+ * update — and read that monitor's status through the device, since
1316
+ * refreshStampedMonitorStatus stamps whatever `monitorId` names. One
1317
+ * check per distinct project in the matched set, like the site guard
1318
+ * above. An unbind (null) has nothing to check.
1319
+ */
1320
+ if (newMonitorId) {
1321
+ const checkedMonitorProjectIds = new Set();
1322
+ for (const previousDevice of previousDevices) {
1323
+ if (!previousDevice.projectId ||
1324
+ checkedMonitorProjectIds.has(previousDevice.projectId.toString())) {
1325
+ continue;
1326
+ }
1327
+ checkedMonitorProjectIds.add(previousDevice.projectId.toString());
1328
+ await this.assertMonitorBelongsToProject({
1329
+ monitorId: newMonitorId,
1330
+ projectId: previousDevice.projectId,
1331
+ });
1332
+ }
1333
+ }
929
1334
  const newOidTemplateId = readOidTemplateIdFromData(updateBy.data);
930
1335
  /*
931
1336
  * Same shape as the site guard above: one check per distinct project in
@@ -946,6 +1351,49 @@ export class Service extends DatabaseService {
946
1351
  });
947
1352
  }
948
1353
  }
1354
+ /*
1355
+ * The polling tenancy guards on the UPDATE path. A device created clean
1356
+ * and then re-pointed with a plain update is the same breach as one
1357
+ * created that way, so both hooks check both references. One check per
1358
+ * distinct project in the matched set, like the guards above — a single
1359
+ * updateBy can span projects when a root caller issues it, and the
1360
+ * payload names ONE probe and ONE profile for all of them.
1361
+ *
1362
+ * A clear (null) points at nothing and has nothing to check.
1363
+ */
1364
+ const distinctProjectIds = [];
1365
+ const seenProjectIds = new Set();
1366
+ for (const previousDevice of previousDevices) {
1367
+ if (!previousDevice.projectId ||
1368
+ seenProjectIds.has(previousDevice.projectId.toString())) {
1369
+ continue;
1370
+ }
1371
+ seenProjectIds.add(previousDevice.projectId.toString());
1372
+ distinctProjectIds.push(previousDevice.projectId);
1373
+ }
1374
+ for (const projectId of distinctProjectIds) {
1375
+ if (newProbeId) {
1376
+ await this.assertProbeIsAttachableToProject({
1377
+ probeId: newProbeId,
1378
+ projectId: projectId,
1379
+ });
1380
+ }
1381
+ if (newSnmpCredentialProfileId) {
1382
+ await this.assertSnmpCredentialProfileBelongsToProject({
1383
+ snmpCredentialProfileId: newSnmpCredentialProfileId,
1384
+ projectId: projectId,
1385
+ });
1386
+ }
1387
+ }
1388
+ await this.applySiteDefaultProbeOnMove({
1389
+ updateBy: updateBy,
1390
+ previousDevices: previousDevices,
1391
+ distinctProjectIds: distinctProjectIds,
1392
+ newSiteId: newSiteId,
1393
+ isProbeChange: isProbeChange,
1394
+ isMethodWrite: isMethodWrite,
1395
+ becomesMonitorBacked: becomesMonitorBacked,
1396
+ });
949
1397
  /*
950
1398
  * How many OIDs a device may carry of its own.
951
1399
  *
@@ -989,16 +1437,74 @@ export class Service extends DatabaseService {
989
1437
  label: "Device-Specific Health OIDs",
990
1438
  });
991
1439
  }
1440
+ const carryForward = {
1441
+ previousDevices: previousDevices,
1442
+ };
1443
+ if (wasMonitorBackedByDeviceId) {
1444
+ carryForward.wasMonitorBackedByDeviceId = wasMonitorBackedByDeviceId;
1445
+ }
992
1446
  return {
993
1447
  updateBy,
994
- carryForward: {
995
- previousDevices: previousDevices,
996
- },
1448
+ carryForward: carryForward,
997
1449
  };
998
1450
  }
999
1451
  /*
1000
- * Re-derives one device's stamped `currentMonitorStatusId` from its
1001
- * binding, and refreshes its site chain if the stamp moved.
1452
+ * Site default probe on a MOVE: a device with no probe of its own that is
1453
+ * moved into a site inherits that site's default (or the nearest
1454
+ * ancestor's), copied onto this same write.
1455
+ *
1456
+ * The create path's twin, and the same copy-at-write rule: this runs only
1457
+ * because the payload moves the device, never because a site's default
1458
+ * changed. Editing a site's probe re-points nothing — the device-list bulk
1459
+ * "Set probe" action is the deliberate way to move a fleet.
1460
+ *
1461
+ * Three things stop it: the caller writing a probe of its own (their
1462
+ * choice wins, including an explicit clear), the device already having one
1463
+ * (a probe an operator chose must survive being filed under a site), and
1464
+ * the device being monitor-backed after this write (nothing polls it, so a
1465
+ * probe would be a lie on the row).
1466
+ *
1467
+ * "Already having one" is judged across the WHOLE matched set, because a
1468
+ * single payload writes one probeId to every row it matches: if any
1469
+ * matched device has a probe, inheriting would re-point it, so the
1470
+ * inheritance is skipped for the batch rather than applied to some of it.
1471
+ * The bulk path a user actually takes — "move these devices to this site"
1472
+ * — is overwhelmingly devices in the same state.
1473
+ */
1474
+ async applySiteDefaultProbeOnMove(data) {
1475
+ if (!data.newSiteId ||
1476
+ data.isProbeChange ||
1477
+ data.previousDevices.length === 0) {
1478
+ return;
1479
+ }
1480
+ for (const previousDevice of data.previousDevices) {
1481
+ if (previousDevice.probeId) {
1482
+ return;
1483
+ }
1484
+ /*
1485
+ * The method AFTER this write: what the payload sets when it sets one,
1486
+ * otherwise what the row already says. A device that stays (or
1487
+ * becomes) monitor-backed is not polled by a probe at all.
1488
+ */
1489
+ const isMonitorBackedAfterWrite = data.isMethodWrite
1490
+ ? data.becomesMonitorBacked
1491
+ : NetworkDeviceMonitoringMethodUtil.isMonitorBacked(previousDevice.monitoringMethod);
1492
+ if (isMonitorBackedAfterWrite) {
1493
+ return;
1494
+ }
1495
+ }
1496
+ const inheritedProbeId = await this.resolveInheritedSiteProbeId({
1497
+ siteId: data.newSiteId,
1498
+ projectIds: data.distinctProjectIds,
1499
+ });
1500
+ if (inheritedProbeId) {
1501
+ data.updateBy.data.probeId = inheritedProbeId;
1502
+ }
1503
+ }
1504
+ /*
1505
+ * Re-derives one device's stamped `currentMonitorStatusId` — and, for a
1506
+ * monitor-backed device, its `isReachable` — from its binding, and
1507
+ * refreshes its site chain if either moved.
1002
1508
  *
1003
1509
  * The stamp is what every monitor-backed surface reads — the device list
1004
1510
  * pill, the site rollup, the topology node — and until this existed the
@@ -1010,17 +1516,36 @@ export class Service extends DatabaseService {
1010
1516
  * OneUptime/oneuptime#3392. Binding is itself an event that decides the
1011
1517
  * device's status, so it stamps here.
1012
1518
  *
1519
+ * `isReachable` rides along because the device list's summary tiles and
1520
+ * its Status facet count and filter in SQL, over that column alone — they
1521
+ * cannot evaluate the stamp's ladder per row — so a monitor-backed device
1522
+ * whose stamp said Operational still counted as "Pending" there. The
1523
+ * value written is `!MonitorStatus.isOfflineState`: the OFFLINE end of the
1524
+ * ladder, not the operational one, because that is exactly what
1525
+ * DeviceReachabilityUtil reads for the pill (a "Degraded" row is neither
1526
+ * operational nor offline, and reads as reachable on both). NULL when
1527
+ * nothing is bound or the monitor has no status, which is the honest
1528
+ * "Pending" the util renders for `undefined`. For a Probe device the poll
1529
+ * owns `isReachable`, and this method never touches it.
1530
+ *
1013
1531
  * `clearWhenNotMonitorBacked` is for the write that moves a device OFF
1014
1532
  * monitor-backed: the ping monitor's verdict must not outlive the binding
1015
1533
  * (DeviceHealthStateUtil lets a stamped status beat reachability, so a
1016
1534
  * stale one would poison the site rollup of a device that is now walked).
1017
1535
  * It is deliberately NOT set when a write only touches the monitor
1018
- * binding of an SNMP device, because an SNMP device's stamp comes from
1019
- * the Network Device monitor that watches it, and that binding lives in
1020
- * the monitor's step data rather than in this column.
1536
+ * binding of a Probe device, nor when a form re-sends "Probe" on a device
1537
+ * that already is one, because a Probe device's stamp comes from the
1538
+ * Network Device monitor that watches it, and that binding lives in the
1539
+ * monitor's step data rather than in this column. onBeforeUpdate records
1540
+ * the old method so onUpdateSuccess can tell the two apart.
1541
+ *
1542
+ * Idempotent: everything is re-derived from the binding, nothing from what
1543
+ * a previous call wrote, and nothing is written when the row already
1544
+ * agrees — which is what makes it safe from every save, from monitor
1545
+ * deletion, and from a backfill running twice concurrently.
1021
1546
  */
1022
1547
  async refreshStampedMonitorStatus(data) {
1023
- var _a;
1548
+ var _a, _b;
1024
1549
  const device = await this.findOneById({
1025
1550
  id: data.deviceId,
1026
1551
  select: {
@@ -1030,6 +1555,10 @@ export class Service extends DatabaseService {
1030
1555
  monitoringMethod: true,
1031
1556
  monitorId: true,
1032
1557
  currentMonitorStatusId: true,
1558
+ isReachable: true,
1559
+ // Read only to decide whether the clear below has anything to clear.
1560
+ isSnmpReachable: true,
1561
+ lastSnmpSeenAt: true,
1033
1562
  },
1034
1563
  props: {
1035
1564
  isRoot: true,
@@ -1039,11 +1568,53 @@ export class Service extends DatabaseService {
1039
1568
  return;
1040
1569
  }
1041
1570
  const isMonitorBacked = NetworkDeviceMonitoringMethodUtil.isMonitorBacked(device.monitoringMethod);
1042
- if (!isMonitorBacked && !data.clearWhenNotMonitorBacked) {
1571
+ if (!isMonitorBacked) {
1572
+ if (!data.clearWhenNotMonitorBacked) {
1573
+ return;
1574
+ }
1575
+ /*
1576
+ * The device has just left monitor-backed. While it was monitor-backed
1577
+ * its `isReachable` could only ever be the bound monitor's mirror: the
1578
+ * poll's value was NULLed on the way in (pollResidueReset), and
1579
+ * NetworkInventoryUtil never writes it for a monitor-backed row. So the
1580
+ * mirror goes with the stamp — otherwise a device switched back to
1581
+ * Probe would read "Down — the last poll could not reach it" (or Up)
1582
+ * on every surface, from the verdict of a monitor that no longer
1583
+ * governs it, until a poll happens to land. NULL is the honest answer:
1584
+ * Pending until the first poll decides.
1585
+ *
1586
+ * The SNMP pair is cleared with them for the same reason: nothing
1587
+ * walked the device while it was monitor-backed, so anything on those
1588
+ * two columns predates the binding, and a device switched back to
1589
+ * Probe starts clean — its first poll decides whether SNMP answers.
1590
+ *
1591
+ * Nothing to clear means nothing to write — a null-over-null write
1592
+ * would still recompute the site chain for nothing.
1593
+ */
1594
+ const hasStamp = Boolean(device.currentMonitorStatusId);
1595
+ const hasMirroredReachability = typeof device.isReachable === "boolean";
1596
+ const hasSnmpResidue = typeof device.isSnmpReachable === "boolean" ||
1597
+ (device.lastSnmpSeenAt !== null && device.lastSnmpSeenAt !== undefined);
1598
+ if (!hasStamp && !hasMirroredReachability && !hasSnmpResidue) {
1599
+ return;
1600
+ }
1601
+ await this.updateColumnsByIdWithoutHooks({
1602
+ id: data.deviceId,
1603
+ data: {
1604
+ currentMonitorStatusId: null,
1605
+ isReachable: null,
1606
+ isSnmpReachable: null,
1607
+ lastSnmpSeenAt: null,
1608
+ },
1609
+ });
1610
+ if (device.siteId) {
1611
+ await NetworkSiteService.recomputeRollupForSiteAndAncestors(device.siteId);
1612
+ }
1043
1613
  return;
1044
1614
  }
1045
1615
  let monitorStatusId = null;
1046
- if (isMonitorBacked && device.monitorId) {
1616
+ let nextReachable = null;
1617
+ if (device.monitorId) {
1047
1618
  /*
1048
1619
  * Scoped to the device's project on the read as well as on the write
1049
1620
  * path in onBeforeCreate/onBeforeUpdate: a monitor from another
@@ -1057,22 +1628,36 @@ export class Service extends DatabaseService {
1057
1628
  select: {
1058
1629
  _id: true,
1059
1630
  currentMonitorStatusId: true,
1631
+ currentMonitorStatus: {
1632
+ isOfflineState: true,
1633
+ },
1060
1634
  },
1061
1635
  props: {
1062
1636
  isRoot: true,
1063
1637
  },
1064
1638
  });
1065
1639
  monitorStatusId = (monitor === null || monitor === void 0 ? void 0 : monitor.currentMonitorStatusId) || null;
1640
+ if (monitorStatusId) {
1641
+ nextReachable = ((_a = monitor === null || monitor === void 0 ? void 0 : monitor.currentMonitorStatus) === null || _a === void 0 ? void 0 : _a.isOfflineState) !== true;
1642
+ }
1066
1643
  }
1067
- const currentStampId = ((_a = device.currentMonitorStatusId) === null || _a === void 0 ? void 0 : _a.toString()) || null;
1644
+ const currentStampId = ((_b = device.currentMonitorStatusId) === null || _b === void 0 ? void 0 : _b.toString()) || null;
1068
1645
  const nextStampId = (monitorStatusId === null || monitorStatusId === void 0 ? void 0 : monitorStatusId.toString()) || null;
1069
- if (currentStampId === nextStampId) {
1646
+ /*
1647
+ * A NULL column reads back as undefined on the model; both mean "no
1648
+ * verdict", and comparing them as one keeps a device that already
1649
+ * agrees from being rewritten on every save.
1650
+ */
1651
+ const currentReachable = typeof device.isReachable === "boolean" ? device.isReachable : null;
1652
+ if (currentStampId === nextStampId && currentReachable === nextReachable) {
1070
1653
  return;
1071
1654
  }
1655
+ // One write, so the two columns can never be seen disagreeing.
1072
1656
  await this.updateColumnsByIdWithoutHooks({
1073
1657
  id: data.deviceId,
1074
1658
  data: {
1075
1659
  currentMonitorStatusId: monitorStatusId,
1660
+ isReachable: nextReachable,
1076
1661
  },
1077
1662
  });
1078
1663
  if (device.siteId) {
@@ -1084,7 +1669,7 @@ export class Service extends DatabaseService {
1084
1669
  * or rule-engine failure must never fail the device update itself.
1085
1670
  */
1086
1671
  async onUpdateSuccess(onUpdate, updatedItemIds) {
1087
- var _a, _b;
1672
+ var _a, _b, _c;
1088
1673
  /*
1089
1674
  * Re-stamp before the site maintenance below, and in its own try: the
1090
1675
  * two are independent, and a rollup failure must not cost the device
@@ -1095,10 +1680,97 @@ export class Service extends DatabaseService {
1095
1680
  const isMethodWrite = dataKeys.includes("monitoringMethod");
1096
1681
  const isMonitorWrite = RelationIdUtil.isWritten(dataKeys, MONITOR_KEYS);
1097
1682
  if (isMethodWrite || isMonitorWrite) {
1683
+ // Same parse as onBeforeUpdate: only a plain string is a method.
1684
+ const writtenMethod = onUpdate.updateBy.data["monitoringMethod"];
1685
+ const becomesMonitorBacked = isMethodWrite &&
1686
+ typeof writtenMethod === "string" &&
1687
+ NetworkDeviceMonitoringMethodUtil.isMonitorBacked(writtenMethod);
1688
+ /*
1689
+ * Recorded by onBeforeUpdate on every method write. Absent on a
1690
+ * binding-only write, where nothing can have transitioned.
1691
+ */
1692
+ const wasMonitorBackedByDeviceId = ((_a = onUpdate.carryForward) === null || _a === void 0 ? void 0 : _a.wasMonitorBackedByDeviceId) || {};
1098
1693
  for (const deviceId of updatedItemIds) {
1694
+ const wasMonitorBacked = wasMonitorBackedByDeviceId[deviceId.toString()];
1695
+ /*
1696
+ * Probe -> Monitor: the probe's last findings are now residue on a
1697
+ * device nothing polls, and they would keep feeding the legacy
1698
+ * staleness rule and the "degraded" query. Cleared as root here
1699
+ * rather than on the caller's payload (see onBeforeUpdate for the
1700
+ * permission reason), and BEFORE the re-stamp, so a device bound
1701
+ * in the same write ends up with its monitor's verdict rather
1702
+ * than the walk's. A device the snapshot did not record is
1703
+ * cleared too: the write is idempotent, and "unknown" must not
1704
+ * mean "keep the residue".
1705
+ */
1706
+ if (becomesMonitorBacked && wasMonitorBacked !== true) {
1707
+ try {
1708
+ await this.updateColumnsByIdWithoutHooks({
1709
+ id: deviceId,
1710
+ data: pollResidueReset(),
1711
+ });
1712
+ }
1713
+ catch (error) {
1714
+ /*
1715
+ * Bookkeeping, and separable from the re-stamp: the monitor's
1716
+ * verdict below still lands, and a set isReachable keeps the
1717
+ * legacy freshness branch out of play even with the dates
1718
+ * left behind.
1719
+ */
1720
+ logger.error(`Error in NetworkDeviceService.onUpdateSuccess poll residue reset for device ${deviceId.toString()}: ${error}`);
1721
+ }
1722
+ }
1723
+ /*
1724
+ * Monitor -> Probe: the mirror image. Arriving at monitor-backed
1725
+ * turned polling off (onBeforeUpdate), so leaving it turns polling
1726
+ * back on — otherwise the device would sit on "Pending" under a
1727
+ * method whose whole point is that the probe polls it. Decided
1728
+ * per device from the snapshot, never from the payload: one bulk
1729
+ * write of "Probe" also matches devices that already were Probe,
1730
+ * and one of those may have had polling turned off on purpose.
1731
+ * A root write, like the residue reset above, because the two
1732
+ * columns are updatable by fewer roles than the method is.
1733
+ * `nextPollAt = now` makes the device due at once rather than at
1734
+ * whatever moment its last claim — months ago, or never — left
1735
+ * behind. The caller's own word wins when it says the opposite:
1736
+ * a payload writing `isPollingEnabled: false` beside the method
1737
+ * wants a Probe device that is not polled yet. No probe is
1738
+ * required here — the forms require one, the API and Terraform
1739
+ * may assign it in a later write — and a Probe device without one
1740
+ * is simply not claimed until it has one.
1741
+ */
1742
+ const isMonitorToProbeTransition = wasMonitorBacked === true && !becomesMonitorBacked;
1743
+ const payloadTurnsPollingOff = dataKeys.includes("isPollingEnabled") &&
1744
+ onUpdate.updateBy.data["isPollingEnabled"] === false;
1745
+ if (isMonitorToProbeTransition && !payloadTurnsPollingOff) {
1746
+ try {
1747
+ await this.updateColumnsByIdWithoutHooks({
1748
+ id: deviceId,
1749
+ data: {
1750
+ isPollingEnabled: true,
1751
+ nextPollAt: OneUptimeDate.getCurrentDate(),
1752
+ },
1753
+ });
1754
+ }
1755
+ catch (error) {
1756
+ /*
1757
+ * Bookkeeping, and separable from the re-stamp below: the
1758
+ * stale stamp still goes, and the operator can turn polling
1759
+ * on from Settings if this write was the one that failed.
1760
+ */
1761
+ logger.error(`Error in NetworkDeviceService.onUpdateSuccess polling restore for device ${deviceId.toString()}: ${error}`);
1762
+ }
1763
+ }
1764
+ /*
1765
+ * Only a device that WAS monitor-backed and now is not may have
1766
+ * its stamp cleared. The Settings form re-sends monitoringMethod
1767
+ * on every save, so "the payload says Probe" is not a transition —
1768
+ * treating it as one wiped the stamp a Network Device monitor had
1769
+ * put on every Probe device that was ever saved.
1770
+ */
1099
1771
  await this.refreshStampedMonitorStatus({
1100
1772
  deviceId: deviceId,
1101
- clearWhenNotMonitorBacked: isMethodWrite,
1773
+ clearWhenNotMonitorBacked: wasMonitorBacked === true && !becomesMonitorBacked,
1102
1774
  });
1103
1775
  }
1104
1776
  }
@@ -1111,7 +1783,7 @@ export class Service extends DatabaseService {
1111
1783
  if (isSiteWrite(dataKeys)) {
1112
1784
  // Manual or rule-driven site change: refresh old + new site chains.
1113
1785
  const affectedSiteIds = new Map();
1114
- const previousDevices = ((_a = onUpdate.carryForward) === null || _a === void 0 ? void 0 : _a.previousDevices) || [];
1786
+ const previousDevices = ((_b = onUpdate.carryForward) === null || _b === void 0 ? void 0 : _b.previousDevices) || [];
1115
1787
  /*
1116
1788
  * onUpdateSuccess runs even when the permission-scoped UPDATE matched
1117
1789
  * nothing, so only devices the UPDATE actually touched may drive
@@ -1146,7 +1818,7 @@ export class Service extends DatabaseService {
1146
1818
  * identity actually moved (or that has no site yet).
1147
1819
  */
1148
1820
  const previousDevicesById = new Map();
1149
- const previousDevices = ((_b = onUpdate.carryForward) === null || _b === void 0 ? void 0 : _b.previousDevices) || [];
1821
+ const previousDevices = ((_c = onUpdate.carryForward) === null || _c === void 0 ? void 0 : _c.previousDevices) || [];
1150
1822
  for (const previousDevice of previousDevices) {
1151
1823
  if (previousDevice.id) {
1152
1824
  previousDevicesById.set(previousDevice.id.toString(), previousDevice);
@@ -1182,8 +1854,75 @@ export class Service extends DatabaseService {
1182
1854
  catch (error) {
1183
1855
  logger.error(`Error in NetworkDeviceService.onUpdateSuccess site maintenance: ${error}`);
1184
1856
  }
1857
+ try {
1858
+ await this.reconcileAlertPoliciesAfterUpdate(onUpdate, updatedItemIds);
1859
+ }
1860
+ catch (error) {
1861
+ /*
1862
+ * Isolated from the site maintenance above for the same reason that is
1863
+ * isolated from the status re-stamp: a policy that cannot provision
1864
+ * must not cost the device its site rollup, and the five-minute sweep
1865
+ * recomputes the same difference either way.
1866
+ */
1867
+ logger.error(`Error in NetworkDeviceService.onUpdateSuccess alert policy reconciliation: ${error}`);
1868
+ }
1185
1869
  return onUpdate;
1186
1870
  }
1871
+ /*
1872
+ * Keep the device's policy-provisioned monitors in step with what the
1873
+ * update just changed about it.
1874
+ *
1875
+ * INLINE ONLY FOR A HANDFUL OF DEVICES. Reconciling one device is a few
1876
+ * queries and, at most, one monitor create — worth doing inside the write
1877
+ * so the monitor is there by the operator's next page load. A BULK write is
1878
+ * a different animal: "move 1,200 devices into this site" or "archive the
1879
+ * warehouse" matches thousands of rows, and reconciling thousands of
1880
+ * devices inside the request would turn one statement into an hour of
1881
+ * monitor provisioning with the caller still waiting on it. Past
1882
+ * MAX_INLINE_RECONCILE_DEVICES the write returns and the five-minute sweep
1883
+ * converges the fleet — it computes the same difference from the same
1884
+ * columns, so nothing is lost but latency.
1885
+ *
1886
+ * The project comes from the pre-write snapshot rather than from
1887
+ * props.tenantId, because a root caller (a worker, a data migration) has no
1888
+ * tenant and its update can legitimately span projects.
1889
+ */
1890
+ async reconcileAlertPoliciesAfterUpdate(onUpdate, updatedItemIds) {
1891
+ var _a;
1892
+ const dataKeys = Object.keys(onUpdate.updateBy.data || {});
1893
+ if (!isAlertPolicyRelevantWrite(dataKeys) || updatedItemIds.length === 0) {
1894
+ return;
1895
+ }
1896
+ if (updatedItemIds.length > MAX_INLINE_RECONCILE_DEVICES) {
1897
+ logger.debug(`NetworkDeviceService.onUpdateSuccess: ${updatedItemIds.length} devices changed an alert-policy scope column; leaving reconciliation to the NetworkAlertPolicy sweep.`);
1898
+ return;
1899
+ }
1900
+ const previousDevices = ((_a = onUpdate.carryForward) === null || _a === void 0 ? void 0 : _a.previousDevices) || [];
1901
+ const projectIdByDeviceId = new Map();
1902
+ for (const previousDevice of previousDevices) {
1903
+ if (previousDevice.id && previousDevice.projectId) {
1904
+ projectIdByDeviceId.set(previousDevice.id.toString(), previousDevice.projectId);
1905
+ }
1906
+ }
1907
+ for (const deviceId of updatedItemIds) {
1908
+ const projectId = projectIdByDeviceId.get(deviceId.toString()) ||
1909
+ onUpdate.updateBy.props.tenantId ||
1910
+ undefined;
1911
+ if (!projectId) {
1912
+ /*
1913
+ * No snapshot row and no tenant: the update matched a device this
1914
+ * hook cannot attribute to a project, so it cannot be reconciled
1915
+ * safely. The sweep, which starts from the policies, will reach it.
1916
+ */
1917
+ logger.debug(`NetworkDeviceService.onUpdateSuccess: no project known for device ${deviceId.toString()}; leaving its alert-policy monitors to the sweep.`);
1918
+ continue;
1919
+ }
1920
+ await NetworkAlertPolicyEngineService.reconcileDevice({
1921
+ projectId: projectId,
1922
+ deviceId: deviceId,
1923
+ });
1924
+ }
1925
+ }
1187
1926
  /*
1188
1927
  * True when an update that touched an identity column is worth re-running
1189
1928
  * the assignment rules for.
@@ -1512,6 +2251,10 @@ export class Service extends DatabaseService {
1512
2251
  * Suspended projects are skipped for the same reason monitor claiming
1513
2252
  * skips them; archived devices keep polling on purpose ("archived devices
1514
2253
  * keep collecting telemetry").
2254
+ *
2255
+ * The Probe join is a TENANCY backstop rather than a lookup — nothing from
2256
+ * the probe row is selected. See the predicate for why the write-time
2257
+ * guard is not enough on its own.
1515
2258
  */
1516
2259
  async claimDevicesForPolling(data) {
1517
2260
  const currentDate = OneUptimeDate.getCurrentDate();
@@ -1520,12 +2263,22 @@ export class Service extends DatabaseService {
1520
2263
  SELECT nd."_id", nd."pollingIntervalInMinutes"
1521
2264
  FROM "NetworkDevice" nd
1522
2265
  INNER JOIN "Project" p ON nd."projectId" = p."_id"
2266
+ INNER JOIN "Probe" pr ON nd."probeId" = pr."_id"
1523
2267
  WHERE nd."probeId" = $1
1524
2268
  AND nd."isPollingEnabled" = true
1525
2269
  AND nd."deletedAt" IS NULL
1526
2270
  AND nd."hostname" IS NOT NULL
1527
- -- A monitor-backed device has no credentials to walk with. NULL is
1528
- -- every device created before the column existed: those are SNMP.
2271
+ -- The tenancy backstop. onBeforeCreate/onBeforeUpdate refuse a
2272
+ -- probe that is not attachable to the device's project, but rows
2273
+ -- written before those guards existed are still on disk, and a
2274
+ -- probe that can CLAIM a device reads its hostname and its SNMP
2275
+ -- credentials. A global probe has no project and may poll anyone;
2276
+ -- anything else must match the device's own project or the row is
2277
+ -- simply never handed out. isGlobalProbe is NOT NULL DEFAULT false,
2278
+ -- so there is no third state here to reason about.
2279
+ AND (pr."isGlobalProbe" = true OR pr."projectId" = nd."projectId")
2280
+ -- Nothing polls a monitor-backed device. NULL is every device
2281
+ -- created before the column existed: those are probe-polled.
1529
2282
  AND (nd."monitoringMethod" IS NULL OR nd."monitoringMethod" <> 'Monitor')
1530
2283
  AND nd."nextPollAt" <= $2
1531
2284
  AND p."deletedAt" IS NULL
@@ -1643,6 +2396,24 @@ __decorate([
1643
2396
  __metadata("design:paramtypes", [Object]),
1644
2397
  __metadata("design:returntype", Promise)
1645
2398
  ], Service.prototype, "onBeforeDelete", null);
2399
+ __decorate([
2400
+ CaptureSpan(),
2401
+ __metadata("design:type", Function),
2402
+ __metadata("design:paramtypes", [Object]),
2403
+ __metadata("design:returntype", Promise)
2404
+ ], Service.prototype, "assertProbeIsAttachableToProject", null);
2405
+ __decorate([
2406
+ CaptureSpan(),
2407
+ __metadata("design:type", Function),
2408
+ __metadata("design:paramtypes", [Object]),
2409
+ __metadata("design:returntype", Promise)
2410
+ ], Service.prototype, "assertSnmpCredentialProfileBelongsToProject", null);
2411
+ __decorate([
2412
+ CaptureSpan(),
2413
+ __metadata("design:type", Function),
2414
+ __metadata("design:paramtypes", [Object]),
2415
+ __metadata("design:returntype", Promise)
2416
+ ], Service.prototype, "resolveInheritedSiteProbeId", null);
1646
2417
  __decorate([
1647
2418
  CaptureSpan(),
1648
2419
  __metadata("design:type", Function),