@oneuptime/common 12.0.34 → 13.0.1

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 (952) hide show
  1. package/Models/DatabaseModels/Alert.ts +55 -0
  2. package/Models/DatabaseModels/CloudResource.ts +45 -7
  3. package/Models/DatabaseModels/CodeRepository.ts +85 -0
  4. package/Models/DatabaseModels/GlobalConfig.ts +12 -12
  5. package/Models/DatabaseModels/GoogleSecOpsConnection.ts +57 -7
  6. package/Models/DatabaseModels/GoogleSecOpsConnectionRun.ts +263 -0
  7. package/Models/DatabaseModels/Incident.ts +55 -0
  8. package/Models/DatabaseModels/Index.ts +16 -0
  9. package/Models/DatabaseModels/InventoryItem.ts +44 -1
  10. package/Models/DatabaseModels/NetworkDevice.ts +126 -0
  11. package/Models/DatabaseModels/ScheduledMaintenance.ts +55 -0
  12. package/Models/DatabaseModels/User.ts +51 -2
  13. package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +43 -2
  14. package/Models/DatabaseModels/UserWebAuthn.ts +17 -0
  15. package/Models/DatabaseModels/VMwareResource.ts +1149 -0
  16. package/Models/DatabaseModels/VMwareVCenter.ts +1122 -0
  17. package/Models/DatabaseModels/VMwareVCenterFeed.ts +625 -0
  18. package/Models/DatabaseModels/VMwareVCenterLabelRule.ts +514 -0
  19. package/Models/DatabaseModels/VMwareVCenterOwnerRule.ts +596 -0
  20. package/Models/DatabaseModels/VMwareVCenterOwnerTeam.ts +485 -0
  21. package/Models/DatabaseModels/VMwareVCenterOwnerUser.ts +484 -0
  22. package/Models/DatabaseModels/WorkflowVariable.ts +22 -1
  23. package/Server/API/AIAgentDataAPI.ts +79 -4
  24. package/Server/API/AIAgentGitHubAPI.ts +523 -0
  25. package/Server/API/AIChatAPI.ts +20 -1
  26. package/Server/API/BillingAPI.ts +33 -0
  27. package/Server/API/DashboardAPI.ts +10 -0
  28. package/Server/API/GitHubAPI.ts +47 -5
  29. package/Server/API/GoogleSecOpsConnectionAPI.ts +79 -0
  30. package/Server/API/UserWebAuthnAPI.ts +21 -1
  31. package/Server/API/VMwareResourceAPI.ts +143 -0
  32. package/Server/EnvironmentConfig.ts +47 -16
  33. package/Server/Infrastructure/Postgres/SchemaMigrations/1791700000000-AddMacAddressToNetworkDevice.ts +25 -0
  34. package/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.ts +68 -0
  35. package/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.ts +26 -0
  36. package/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.ts +636 -0
  37. package/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.ts +47 -0
  38. package/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.ts +17 -0
  39. package/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.ts +83 -0
  40. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +14 -0
  41. package/Server/Infrastructure/Redis.ts +8 -8
  42. package/Server/Infrastructure/Status.ts +10 -4
  43. package/Server/Middleware/IdentityRateLimit.ts +101 -0
  44. package/Server/Services/AIRunService.ts +13 -0
  45. package/Server/Services/BillingPaymentMethodService.ts +99 -28
  46. package/Server/Services/BillingService.ts +287 -20
  47. package/Server/Services/CloudResourceInstanceService.ts +70 -0
  48. package/Server/Services/DatabaseService.ts +65 -13
  49. package/Server/Services/ExceptionAggregationService.ts +1 -0
  50. package/Server/Services/GoogleSecOpsConnectionRunService.ts +10 -0
  51. package/Server/Services/GoogleSecOpsConnectionService.ts +12 -0
  52. package/Server/Services/Index.ts +16 -0
  53. package/Server/Services/InventoryItemService.ts +31 -1
  54. package/Server/Services/LogAggregationService.ts +1 -0
  55. package/Server/Services/MetricAggregationService.ts +1 -0
  56. package/Server/Services/MobilePasskeyLoginService.ts +216 -0
  57. package/Server/Services/MonitorService.ts +51 -1
  58. package/Server/Services/MonitorTemplateService.ts +218 -35
  59. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +481 -42
  60. package/Server/Services/NetworkDeviceAutoImportRuleService.ts +176 -2
  61. package/Server/Services/NetworkDeviceDiscoveryScanService.ts +87 -2
  62. package/Server/Services/NetworkDeviceService.ts +69 -0
  63. package/Server/Services/OpenTelemetryIngestService.ts +17 -0
  64. package/Server/Services/PayAsYouGoBillingService.ts +446 -0
  65. package/Server/Services/ProjectService.ts +46 -2
  66. package/Server/Services/ServerlessFunctionInstanceService.ts +71 -0
  67. package/Server/Services/TeamMemberService.ts +96 -36
  68. package/Server/Services/TelemetryIngestionKeyService.ts +80 -10
  69. package/Server/Services/TelemetryUsageBillingService.ts +95 -5
  70. package/Server/Services/TraceAggregationService.ts +5 -4
  71. package/Server/Services/UserNotificationRuleService.ts +76 -25
  72. package/Server/Services/UserWebAuthnService.ts +592 -133
  73. package/Server/Services/VMwareResourceService.ts +648 -0
  74. package/Server/Services/VMwareVCenterFeedService.ts +99 -0
  75. package/Server/Services/VMwareVCenterLabelRuleEngineService.ts +240 -0
  76. package/Server/Services/VMwareVCenterLabelRuleService.ts +14 -0
  77. package/Server/Services/VMwareVCenterOwnerRuleEngineService.ts +252 -0
  78. package/Server/Services/VMwareVCenterOwnerRuleService.ts +14 -0
  79. package/Server/Services/VMwareVCenterOwnerTeamService.ts +139 -0
  80. package/Server/Services/VMwareVCenterOwnerUserService.ts +133 -0
  81. package/Server/Services/VMwareVCenterService.ts +629 -0
  82. package/Server/Services/WorkflowVariableService.ts +203 -0
  83. package/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.ts +17 -0
  84. package/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.ts +31 -1
  85. package/Server/Types/Database/Permissions/ReadPermission.ts +45 -5
  86. package/Server/Types/Database/QueryUtil.ts +56 -0
  87. package/Server/Types/Markdown.ts +93 -1
  88. package/Server/Utils/CodeRepository/GitHub/GitHub.ts +7 -0
  89. package/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.ts +341 -0
  90. package/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.ts +274 -0
  91. package/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.ts +375 -0
  92. package/Server/Utils/CodeRepository/GitHub/GitHubConversation.ts +846 -0
  93. package/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.ts +360 -0
  94. package/Server/Utils/CodeRepository/GitHub/GitHubRunReply.ts +421 -0
  95. package/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.ts +140 -0
  96. package/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.ts +906 -0
  97. package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +225 -17
  98. package/Server/Utils/DataSource/EgressGuard.ts +160 -15
  99. package/Server/Utils/Database/TruncateColumnValue.ts +1 -1
  100. package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +12 -1
  101. package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +35 -2
  102. package/Server/Utils/EmailRollup/EmailRollupWriter.ts +44 -0
  103. package/Server/Utils/LogRedaction.ts +2 -1
  104. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +82 -35
  105. package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +31 -5
  106. package/Server/Utils/Monitor/MonitorAlert.ts +1 -1
  107. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +502 -38
  108. package/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.ts +82 -9
  109. package/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.ts +16 -7
  110. package/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.ts +29 -17
  111. package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +107 -48
  112. package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +26 -4
  113. package/Server/Utils/Monitor/MonitorResourceContext.ts +5 -3
  114. package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +14 -0
  115. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -0
  116. package/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.ts +158 -0
  117. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +27 -0
  118. package/Server/Utils/Monitor/SeriesResourceLabels.ts +26 -0
  119. package/Server/Utils/Monitor/SeriesResourceLinker.ts +28 -5
  120. package/Server/Utils/ResourceFeed/ResourceFeedUtil.ts +3 -3
  121. package/Server/Utils/SecurityEvent/ConnectorErrorMessage.ts +14 -9
  122. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.ts +116 -84
  123. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +594 -195
  124. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.ts +466 -0
  125. package/Server/Utils/Telemetry/EntityRegistry.ts +16 -1
  126. package/Server/Utils/Telemetry/ResourceHeartbeat.ts +2 -1
  127. package/Server/Utils/Telemetry/TelemetryEntity.ts +264 -10
  128. package/Server/Utils/Telemetry/VMwareSnapshotScan.ts +1352 -0
  129. package/Tests/App/Accounts/LoginPasskey.test.tsx +529 -0
  130. package/Tests/App/Accounts/MobilePasskey.test.tsx +620 -0
  131. package/Tests/App/Accounts/PasswordRequirements.test.tsx +254 -0
  132. package/Tests/App/Accounts/RegisterPassword.test.tsx +553 -0
  133. package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +32 -0
  134. package/Tests/App/Dashboard/AdoptedDeviceDrawer.test.tsx +374 -0
  135. package/Tests/App/Dashboard/AskAiAvailability.test.ts +224 -0
  136. package/Tests/App/Dashboard/AskAiDisabled.test.tsx +432 -0
  137. package/Tests/App/Dashboard/BackupCodes.test.tsx +414 -0
  138. package/Tests/App/Dashboard/BillingPaidUsageFlow.test.tsx +530 -0
  139. package/Tests/App/Dashboard/BillingPaymentMethodForm.test.tsx +195 -0
  140. package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +199 -0
  141. package/Tests/App/Dashboard/CloudDocumentationCard.test.tsx +198 -0
  142. package/Tests/App/Dashboard/CloudDocumentationMarkdown.test.ts +215 -0
  143. package/Tests/App/Dashboard/CloudFleetSummary.test.ts +183 -0
  144. package/Tests/App/Dashboard/CloudFleetSummaryComponent.test.tsx +248 -0
  145. package/Tests/App/Dashboard/CloudResourceTelemetryScope.test.ts +215 -0
  146. package/Tests/App/Dashboard/CriteriaFilterDefaults.test.ts +3 -0
  147. package/Tests/App/Dashboard/DashboardHeaderRequests.test.tsx +441 -0
  148. package/Tests/App/Dashboard/DashboardLabelVariables.test.tsx +580 -0
  149. package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +458 -0
  150. package/Tests/App/Dashboard/DashboardMonitorLabelVariable.test.tsx +438 -0
  151. package/Tests/App/Dashboard/DashboardToolbarPopupLayering.test.tsx +566 -0
  152. package/Tests/App/Dashboard/DashboardVariableAllContract.test.tsx +5 -2
  153. package/Tests/App/Dashboard/DeviceAttachmentCard.test.tsx +273 -0
  154. package/Tests/App/Dashboard/DiscoveryReviewInventoryRefresh.test.tsx +505 -0
  155. package/Tests/App/Dashboard/DiscoveryScanLivePage.test.tsx +376 -0
  156. package/Tests/App/Dashboard/DiscoveryScanLiveUpdates.test.tsx +642 -0
  157. package/Tests/App/Dashboard/DiscoveryScanProgress.test.tsx +267 -0
  158. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +69 -231
  159. package/Tests/App/Dashboard/EntityDetailPanel.test.tsx +163 -0
  160. package/Tests/App/Dashboard/GoogleSecOpsConnectionsErrors.test.tsx +244 -0
  161. package/Tests/App/Dashboard/GoogleSecOpsDiagnostics.test.tsx +724 -0
  162. package/Tests/App/Dashboard/InfrastructureExplorer.test.tsx +401 -0
  163. package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +232 -0
  164. package/Tests/App/Dashboard/InventoryItems.test.tsx +201 -0
  165. package/Tests/App/Dashboard/InventoryTypeAndStatusFacets.test.tsx +798 -0
  166. package/Tests/App/Dashboard/MonitorTemplateSyncFields.test.tsx +539 -0
  167. package/Tests/App/Dashboard/NetworkTopologyLiveView.test.tsx +320 -0
  168. package/Tests/App/Dashboard/NetworkTopologyToolbar.test.tsx +275 -0
  169. package/Tests/App/Dashboard/OnCallCalendarFeedEmptyState.test.tsx +975 -0
  170. package/Tests/App/Dashboard/OnCallCalendarFeedPlanGate.test.tsx +63 -0
  171. package/Tests/App/Dashboard/OnCallLayerCardOverrides.test.tsx +24 -7
  172. package/Tests/App/Dashboard/OnCallOverridePresentation.test.ts +496 -0
  173. package/Tests/App/Dashboard/OnCallScheduleOverrideClarity.test.tsx +677 -0
  174. package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +31 -3
  175. package/Tests/App/Dashboard/PaidUsageConsent.test.tsx +180 -0
  176. package/Tests/App/Dashboard/PasskeySettings.test.tsx +1220 -0
  177. package/Tests/App/Dashboard/PayAsYouGoConsentGate.test.tsx +176 -275
  178. package/Tests/App/Dashboard/PayAsYouGoNotices.test.tsx +380 -233
  179. package/Tests/App/Dashboard/ProductMenuBreadcrumbs.test.tsx +3 -23
  180. package/Tests/App/Dashboard/ResourceFeed.test.tsx +1 -0
  181. package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +8 -1
  182. package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +626 -0
  183. package/Tests/App/Dashboard/TopologyDataLoading.test.tsx +348 -0
  184. package/Tests/App/Dashboard/TopologyPageNavigation.test.tsx +331 -0
  185. package/Tests/App/Dashboard/TwoFactorStatus.test.tsx +260 -0
  186. package/Tests/App/Dashboard/UserSettingsEmailPreferences.test.tsx +603 -0
  187. package/Tests/App/Dashboard/UserSettingsNotificationSettings.test.tsx +324 -0
  188. package/Tests/App/Dashboard/VMwareDashboardWidgets.test.ts +573 -0
  189. package/Tests/App/Dashboard/WidgetCatalog.test.ts +2 -0
  190. package/Tests/App/Dashboard/WorkflowVariablesTable.test.tsx +768 -0
  191. package/Tests/App/PublicDashboard/DashboardVariableSelector.test.tsx +13 -4
  192. package/Tests/App/StatusPage/StatusPageOidcOrigin.test.tsx +223 -0
  193. package/Tests/App/StatusPage/StatusPageOverviewLiveAndSearch.test.tsx +532 -40
  194. package/Tests/App/StatusPage/StatusPageResourceSearchBox.test.tsx +19 -2
  195. package/Tests/Fixtures/MobilePasskeyUser.json +8 -0
  196. package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +25 -6
  197. package/Tests/Models/DatabaseModels/VMwareModels.test.ts +1134 -0
  198. package/Tests/Models/InventoryItemStatus.test.ts +147 -0
  199. package/Tests/Models/NetworkDeviceMacAddressColumn.test.ts +294 -0
  200. package/Tests/Models/RunnerVersionLabel.test.ts +4 -2
  201. package/Tests/Server/API/AIChatProvidersAIEnabled.test.ts +259 -0
  202. package/Tests/Server/API/AIChatRouteAuthorization.test.ts +31 -2
  203. package/Tests/Server/API/BillingPayAsYouGoStatus.test.ts +116 -0
  204. package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +158 -1
  205. package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +13 -2
  206. package/Tests/Server/API/GitHubWebhookSignature.test.ts +368 -0
  207. package/Tests/Server/API/GoogleSecOpsConnectionAPI.test.ts +248 -0
  208. package/Tests/Server/API/UserWebAuthnAuthenticationOptionsRoute.test.ts +330 -0
  209. package/Tests/Server/API/UserWebAuthnPasskeyAPI.test.ts +172 -0
  210. package/Tests/Server/API/VMwareResourceAPI.test.ts +546 -0
  211. package/Tests/Server/EnvironmentConfigValkey.test.ts +227 -0
  212. package/Tests/Server/Infrastructure/Postgres/AddMacAddressToNetworkDeviceMigration.test.ts +365 -0
  213. package/Tests/Server/Infrastructure/Postgres/CustomFieldValueMappingMigration.test.ts +62 -23
  214. package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupMetadataMigration.test.ts +85 -0
  215. package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +34 -3
  216. package/Tests/Server/Infrastructure/ValkeyDeploymentConfig.test.ts +265 -0
  217. package/Tests/Server/Middleware/HttpMetricsMiddleware.test.ts +382 -0
  218. package/Tests/Server/Middleware/PasskeyRateLimit.test.ts +141 -0
  219. package/Tests/Server/Middleware/SCIMAuthorization.test.ts +525 -0
  220. package/Tests/Server/Services/AutoImportRuleRearmRecentScans.test.ts +343 -0
  221. package/Tests/Server/Services/AutoImportRuleWriteRearmsScans.test.ts +381 -0
  222. package/Tests/Server/Services/BillingPaymentMethodServiceSync.test.ts +175 -0
  223. package/Tests/Server/Services/BillingService.test.ts +26 -11
  224. package/Tests/Server/Services/BillingServiceMeteredPaymentAuthorization.test.ts +245 -0
  225. package/Tests/Server/Services/BillingServicePaymentMethodReads.test.ts +362 -0
  226. package/Tests/Server/Services/CloudResourceInstanceStalePrune.test.ts +188 -0
  227. package/Tests/Server/Services/DatabaseServiceAggregateBy.test.ts +291 -56
  228. package/Tests/Server/Services/DatabaseServiceSortTiebreaker.test.ts +151 -0
  229. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +16 -2
  230. package/Tests/Server/Services/GoogleSecOpsDiagnosticsModel.test.ts +153 -0
  231. package/Tests/Server/Services/HookFreeWriteLengthClamp.test.ts +13 -0
  232. package/Tests/Server/Services/InventoryItemManualCreate.test.ts +105 -0
  233. package/Tests/Server/Services/InventoryItemPromotionGate.test.ts +183 -0
  234. package/Tests/Server/Services/InventoryUpsertSchemaParity.test.ts +36 -0
  235. package/Tests/Server/Services/InventoryUpsertTruncationGuard.test.ts +151 -0
  236. package/Tests/Server/Services/MobilePasskeyLoginIntegration.test.ts +231 -0
  237. package/Tests/Server/Services/MobilePasskeyLoginService.test.ts +315 -0
  238. package/Tests/Server/Services/MonitorPayAsYouGoBilling.test.ts +302 -0
  239. package/Tests/Server/Services/MonitorTemplateServiceCustomFieldSync.test.ts +502 -0
  240. package/Tests/Server/Services/MonitorTemplateServiceFieldSync.test.ts +994 -0
  241. package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +1133 -81
  242. package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +22 -0
  243. package/Tests/Server/Services/NetworkDeviceDiscoveryScanRegistration.test.ts +520 -0
  244. package/Tests/Server/Services/NetworkDeviceMacAddressNormalization.test.ts +572 -0
  245. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +7 -1
  246. package/Tests/Server/Services/PayAsYouGoBillingService.test.ts +857 -0
  247. package/Tests/Server/Services/PayAsYouGoStripeRateLimitBudget.test.ts +379 -0
  248. package/Tests/Server/Services/ProjectServiceExtendTrial.test.ts +99 -1
  249. package/Tests/Server/Services/ProjectServiceSubscriptionSeats.test.ts +134 -0
  250. package/Tests/Server/Services/ResourceFeedServices.test.ts +3 -2
  251. package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +32 -6
  252. package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +363 -175
  253. package/Tests/Server/Services/ServerlessFunctionInstanceStalePrune.test.ts +200 -0
  254. package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +3 -0
  255. package/Tests/Server/Services/TeamMemberBillingSeatSync.test.ts +762 -0
  256. package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +3 -0
  257. package/Tests/Server/Services/TelemetryIngestionKeyPolicyResolution.test.ts +72 -0
  258. package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +17 -4
  259. package/Tests/Server/Services/TelemetryPayAsYouGoBilling.test.ts +355 -0
  260. package/Tests/Server/Services/TraceAnalyticsResourceDisplayNames.test.ts +41 -4
  261. package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +37 -0
  262. package/Tests/Server/Services/UserWebAuthnPasskeyIntegration.test.ts +401 -0
  263. package/Tests/Server/Services/UserWebAuthnPasskeyService.test.ts +769 -0
  264. package/Tests/Server/Services/UserWebAuthnUserVerification.test.ts +649 -0
  265. package/Tests/Server/Services/VMwareResourceService.test.ts +945 -0
  266. package/Tests/Server/Services/VMwareVCenterService.test.ts +722 -0
  267. package/Tests/Server/Services/WorkflowVariableRenameUniqueness.test.ts +842 -0
  268. package/Tests/Server/TestingUtils/PasskeyHttpIntegration.ts +102 -0
  269. package/Tests/Server/TestingUtils/SecurityKey.ts +464 -0
  270. package/Tests/Server/TestingUtils/WebAuthnServiceMocks.ts +60 -0
  271. package/Tests/Server/Types/Billing/PayAsYouGoMeteredAuthorization.test.ts +573 -0
  272. package/Tests/Server/Types/Database/InventoryStatusPostgres.test.ts +368 -0
  273. package/Tests/Server/Types/Database/Permissions/ProjectCustomerSupportAccessColumn.test.ts +261 -0
  274. package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +261 -14
  275. package/Tests/Server/Types/Database/Permissions/WorkflowVariableColumnPermission.test.ts +95 -0
  276. package/Tests/Server/Types/Database/QueryUtilIncludesAnyOfGroups.test.ts +169 -0
  277. package/Tests/Server/Types/Database/QueryUtilIncludesAnyOfGroupsPostgres.test.ts +297 -0
  278. package/Tests/Server/Types/Markdown.test.ts +194 -1
  279. package/Tests/Server/Types/Workflow/Components/IncomingWebhookUtils.test.ts +279 -0
  280. package/Tests/Server/Types/Workflow/Components/TextToJson.test.ts +212 -0
  281. package/Tests/Server/Utils/CodeRepository/GitHubAgentTaskTrigger.test.ts +2101 -0
  282. package/Tests/Server/Utils/CodeRepository/GitHubCommandAuthorizer.test.ts +883 -0
  283. package/Tests/Server/Utils/CodeRepository/GitHubCommandParser.test.ts +1474 -0
  284. package/Tests/Server/Utils/CodeRepository/GitHubConversation.test.ts +1526 -0
  285. package/Tests/Server/Utils/CodeRepository/GitHubReplyComposer.test.ts +1389 -0
  286. package/Tests/Server/Utils/CodeRepository/GitHubRunReply.test.ts +1707 -0
  287. package/Tests/Server/Utils/CodeRepository/GitHubWebhookHandler.test.ts +2202 -0
  288. package/Tests/Server/Utils/CustomField/CustomFieldMappingRegistry.test.ts +436 -0
  289. package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +559 -0
  290. package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +896 -0
  291. package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1 -1
  292. package/Tests/Server/Utils/EmailRollup/EmailRollupMetadataIntegration.test.ts +246 -0
  293. package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +309 -4
  294. package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +6 -0
  295. package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +185 -0
  296. package/Tests/Server/Utils/EventLoop.test.ts +359 -0
  297. package/Tests/Server/Utils/JsonWebToken.test.ts +30 -0
  298. package/Tests/Server/Utils/LogRedaction.test.ts +33 -0
  299. package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +2 -1
  300. package/Tests/Server/Utils/Monitor/Criteria/CompareCriteria.test.ts +242 -0
  301. package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +13 -7
  302. package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +29 -0
  303. package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.ts +30 -6
  304. package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaAnomalyUnits.test.ts +246 -0
  305. package/Tests/Server/Utils/Monitor/Criteria/TelemetryStepMetricAlias.test.ts +10 -0
  306. package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +66 -1
  307. package/Tests/Server/Utils/Monitor/MonitorCriteriaEmailEvalLogAgreement.test.ts +280 -0
  308. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +586 -10
  309. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorMetricUnits.test.ts +570 -0
  310. package/Tests/Server/Utils/Monitor/MonitorCriteriaExpectationBuilderUnits.test.ts +30 -5
  311. package/Tests/Server/Utils/Monitor/MonitorCriteriaMessageBuilderUnits.test.ts +68 -21
  312. package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +36 -19
  313. package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +1 -0
  314. package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +60 -1
  315. package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +60 -0
  316. package/Tests/Server/Utils/Monitor/MonitorRootCauseTargetResolution.test.ts +423 -0
  317. package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +6 -0
  318. package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +1 -0
  319. package/Tests/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.test.ts +573 -0
  320. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +317 -0
  321. package/Tests/Server/Utils/Monitor/PerSeriesSecondEntityAlerting.test.ts +1 -0
  322. package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +46 -2
  323. package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +81 -45
  324. package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.test.ts +711 -0
  325. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClickhouseIntegration.test.ts +223 -0
  326. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClient.test.ts +69 -1
  327. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsDiagnostics.test.ts +838 -0
  328. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsErrorHandling.test.ts +241 -28
  329. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsHttpIntegration.test.ts +651 -0
  330. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +11 -0
  331. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +13 -12
  332. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerHardening.test.ts +112 -127
  333. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsRequestContract.test.ts +12 -18
  334. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsResponseParsing.test.ts +43 -0
  335. package/Tests/Server/Utils/Telemetry/ContextSpanProcessor.test.ts +281 -0
  336. package/Tests/Server/Utils/Telemetry/InventoryDuplicateIdentity.test.ts +316 -0
  337. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +691 -8
  338. package/Tests/Server/Utils/Telemetry/VMwareSnapshotScan.test.ts +1748 -0
  339. package/Tests/Types/Cloud/CloudPlatform.test.ts +574 -0
  340. package/Tests/Types/Database/IncludesAnyOfGroups.test.ts +106 -0
  341. package/Tests/Types/JSONFunctions.test.ts +40 -0
  342. package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +2 -0
  343. package/Tests/Types/Monitor/MonitorCriteriaMetricVariables.test.ts +9 -0
  344. package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
  345. package/Tests/Types/Monitor/MonitorStepInfraMonitorUtils.test.ts +53 -8
  346. package/Tests/Types/Monitor/MonitorStepInfrastructureMonitors.test.ts +97 -0
  347. package/Tests/Types/Monitor/MonitorStepMetricViewConfigUtil.test.ts +1 -0
  348. package/Tests/Types/Monitor/MonitorStepTemplateSyncFields.test.ts +107 -0
  349. package/Tests/Types/Monitor/MonitorTemplateSyncField.test.ts +172 -0
  350. package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
  351. package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +2 -0
  352. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationAlertDebuggability.test.ts +1 -0
  353. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +9 -0
  354. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +1 -1
  355. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +1 -1
  356. package/Tests/Types/Monitor/SeriesContext/SeriesDebugHints.test.ts +131 -0
  357. package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +10 -0
  358. package/Tests/Types/Monitor/VMwareAlertTemplates.test.ts +1608 -0
  359. package/Tests/Types/Monitor/VMwareMetricCatalog.test.ts +488 -0
  360. package/Tests/Types/NetworkAutomation/AutoImportRunMerge.test.ts +235 -0
  361. package/Tests/Types/NetworkAutomation/RuleRunResult.test.ts +66 -0
  362. package/Tests/Types/NetworkAutomation/RuleRunResultDescribe.test.ts +309 -1
  363. package/Tests/Types/OnCallDutyPolicy/OverrideProvenance.test.ts +295 -0
  364. package/Tests/Types/Runner/RunnerLiveStatus.test.ts +2 -2
  365. package/Tests/Types/SignupPassword.test.ts +205 -0
  366. package/Tests/Types/StatusPage/StatusPageLanguage.test.ts +44 -0
  367. package/Tests/Types/SupportedLanguages.test.ts +119 -0
  368. package/Tests/Types/Telemetry/EntityTypeGroups.test.ts +19 -0
  369. package/Tests/Types/Telemetry/InventoryLiveness.test.ts +99 -0
  370. package/Tests/UI/ColorPickerBuild.test.ts +86 -0
  371. package/Tests/UI/Components/Breadcrumbs.test.tsx +32 -0
  372. package/Tests/UI/Components/CustomFields/CustomFieldsDetail.test.tsx +160 -0
  373. package/Tests/UI/Components/Forms/ModelFormPreservesUserInput.test.tsx +937 -0
  374. package/Tests/UI/Components/Forms/ModelFormWriteOnlyColumnSelect.test.tsx +230 -0
  375. package/Tests/UI/Components/Forms/ValidationFormSteps.test.ts +3 -4
  376. package/Tests/UI/Components/LabelRuleImportExport.test.tsx +907 -0
  377. package/Tests/UI/Components/ModelTable/ModelTableCreateAfterEdit.test.tsx +514 -0
  378. package/Tests/UI/Components/MonitorGraphs/Uptime.test.tsx +301 -0
  379. package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +2 -1
  380. package/Tests/UI/Components/TooltipLazyContent.test.tsx +373 -0
  381. package/Tests/UI/MicrosoftTeams/MicrosoftTeamsMessagingEndpointGuidance.test.tsx +43 -12
  382. package/Tests/UI/ReactDomBuild.test.ts +104 -0
  383. package/Tests/UI/ReactRouterSingletonBuild.test.ts +143 -0
  384. package/Tests/UI/Rum/ReplayHeader.test.tsx +10 -2
  385. package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +514 -0
  386. package/Tests/UI/Rum/ReplayTimeFormat.test.ts +94 -0
  387. package/Tests/UI/Rum/ReplayUi.test.tsx +559 -0
  388. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +153 -0
  389. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +30 -0
  390. package/Tests/UI/Utils/DashboardStackingLayers.test.ts +197 -0
  391. package/Tests/UI/Utils/LabelRuleImportExport.test.ts +546 -0
  392. package/Tests/UI/Utils/ModelAPITenantHeader.test.ts +109 -2
  393. package/Tests/UI/Utils/UseDashboardGridDnd.test.tsx +7 -2
  394. package/Tests/UI/Utils/UserEmailRegistrationStatus.test.tsx +295 -0
  395. package/Tests/UI/Utils/WebAuthn.test.ts +265 -0
  396. package/Tests/Utils/Dashboard/Components/DashboardComponentDefaults.test.ts +5 -0
  397. package/Tests/Utils/Dashboard/Components/DashboardMonitorListComponent.test.ts +11 -1
  398. package/Tests/Utils/Dashboard/Components/DashboardVMwareListComponents.test.ts +548 -0
  399. package/Tests/Utils/Dashboard/DashboardResourceListSharedArgs.test.ts +17 -3
  400. package/Tests/Utils/Dashboard/LabelVariable.test.ts +257 -0
  401. package/Tests/Utils/Dashboard/VariableUrlState.test.ts +144 -14
  402. package/Tests/Utils/LabelRuleImportExport.test.ts +583 -0
  403. package/Tests/Utils/MetricUnitUtil.test.ts +81 -0
  404. package/Tests/Utils/Monitor/DeviceMacLearningUtil.test.ts +497 -0
  405. package/Tests/Utils/Monitor/MetricValueFormatter.test.ts +546 -0
  406. package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
  407. package/Tests/Utils/Monitor/MonitorTemplateCustomFieldUtil.test.ts +218 -0
  408. package/Tests/Utils/Monitor/MonitorTemplateSyncUtil.test.ts +590 -0
  409. package/Tests/Utils/Monitor/NetworkTopologyEndpointAdoption.test.ts +1755 -0
  410. package/Tests/Utils/NetworkAutomation/AutoImportRunChain.test.ts +320 -0
  411. package/Tests/Utils/RequestFailedDetails.test.ts +325 -0
  412. package/Tests/Utils/Telemetry/CloudInstanceIdentity.test.ts +255 -0
  413. package/Tests/Utils/Telemetry/EntityRelationship.test.ts +167 -0
  414. package/Tests/Utils/WebAuthnTestUtil.ts +79 -0
  415. package/Tests/__mocks__/simplewebauthn.js +33 -4
  416. package/Types/AI/CodeFixTaskContext.ts +122 -0
  417. package/Types/AI/CodeFixTaskType.ts +62 -0
  418. package/Types/Accounts/AccountsLanguage.ts +1 -0
  419. package/Types/AdminDashboard/AdminDashboardLanguage.ts +1 -0
  420. package/Types/BaseDatabase/IncludesAnyOfGroups.ts +77 -0
  421. package/Types/Calendar/CalendarEvent.ts +16 -0
  422. package/Types/Cloud/CloudPlatform.ts +372 -0
  423. package/Types/CodeRepository/GitHubCommand.ts +69 -0
  424. package/Types/Dashboard/DashboardComponentType.ts +2 -0
  425. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +2 -0
  426. package/Types/Dashboard/DashboardComponents/DashboardMonitorListComponent.ts +1 -0
  427. package/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.ts +23 -0
  428. package/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.ts +30 -0
  429. package/Types/Dashboard/DashboardLanguage.ts +1 -0
  430. package/Types/Dashboard/DashboardTemplates.ts +314 -0
  431. package/Types/Dashboard/DashboardVariable.ts +8 -0
  432. package/Types/Docs/DocsLanguage.ts +1 -0
  433. package/Types/Exception/EgressGuardException.ts +65 -0
  434. package/Types/Icon/IconProp.ts +1 -0
  435. package/Types/JSON.ts +4 -0
  436. package/Types/JSONFunctions.ts +16 -0
  437. package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +36 -0
  438. package/Types/Monitor/MonitorCriteriaInstance.ts +1 -0
  439. package/Types/Monitor/MonitorStep.ts +78 -17
  440. package/Types/Monitor/MonitorStepMetricViewConfigUtil.ts +1 -0
  441. package/Types/Monitor/MonitorStepVMwareMonitor.ts +127 -0
  442. package/Types/Monitor/MonitorTemplateSyncField.ts +291 -0
  443. package/Types/Monitor/MonitorType.ts +24 -0
  444. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +33 -0
  445. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +2 -0
  446. package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +3 -0
  447. package/Types/Monitor/SeriesContext/SeriesDebugHints.ts +158 -0
  448. package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +61 -0
  449. package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +13 -0
  450. package/Types/Monitor/VMwareAlertTemplates.ts +1070 -0
  451. package/Types/Monitor/VMwareMetricCatalog.ts +914 -0
  452. package/Types/NetworkAutomation/RuleRunResult.ts +402 -13
  453. package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +29 -0
  454. package/Types/OnCallDutyPolicy/UserOverrideUtil.ts +16 -0
  455. package/Types/Password.ts +84 -5
  456. package/Types/Permission.ts +265 -0
  457. package/Types/Probe/RequestFailedDetails.ts +7 -0
  458. package/Types/Runner/RunnerLiveStatus.ts +1 -1
  459. package/Types/SecurityEvent/GoogleSecOpsDiagnostics.ts +56 -0
  460. package/Types/SerializableObjectDictionary.ts +4 -0
  461. package/Types/StatusPage/StatusPageLanguage.ts +1 -0
  462. package/Types/Telemetry/EntityType.ts +21 -0
  463. package/Types/Telemetry/InventoryLiveness.ts +56 -0
  464. package/Types/Telemetry/ServiceType.ts +1 -0
  465. package/Typings/Index.d.ts +63 -0
  466. package/UI/Components/Breadcrumbs/Breadcrumbs.tsx +2 -2
  467. package/UI/Components/CSVFileUpload/CSVFileUpload.tsx +9 -2
  468. package/UI/Components/Calendar/Calendar.css +78 -0
  469. package/UI/Components/Calendar/Calendar.tsx +28 -3
  470. package/UI/Components/CustomFields/CustomFieldsDetail.tsx +46 -21
  471. package/UI/Components/Dashboard/DashboardVariableControl.tsx +285 -0
  472. package/UI/Components/Forms/BasicForm.tsx +44 -2
  473. package/UI/Components/Forms/Fields/ColorPicker.tsx +2 -1
  474. package/UI/Components/Forms/Fields/FormField.tsx +16 -3
  475. package/UI/Components/Forms/ModelForm.tsx +159 -5
  476. package/UI/Components/Forms/Types/Field.ts +8 -1
  477. package/UI/Components/Graphs/DayUptimeGraph.tsx +8 -10
  478. package/UI/Components/Icon/Icon.tsx +16 -0
  479. package/UI/Components/Input/Input.tsx +42 -7
  480. package/UI/Components/LabelRule/ImportLabelRulesModal.tsx +441 -0
  481. package/UI/Components/LabelRule/LabelRuleTable.tsx +142 -0
  482. package/UI/Components/ModelTable/BaseModelTable.tsx +22 -5
  483. package/UI/Components/ModelTable/ModelTable.tsx +14 -6
  484. package/UI/Components/MonitorGraphs/Uptime.tsx +17 -27
  485. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +3 -1
  486. package/UI/Components/Tooltip/Tooltip.tsx +52 -6
  487. package/UI/Utils/DashboardStackingLayers.ts +85 -0
  488. package/UI/Utils/LabelRuleImportExport.ts +310 -0
  489. package/UI/Utils/ModelAPI/ModelAPI.ts +4 -3
  490. package/UI/Utils/TelemetryService.ts +4 -3
  491. package/UI/Utils/UseDashboardGridDnd.ts +4 -1
  492. package/UI/Utils/UserEmailRegistrationStatus.ts +33 -5
  493. package/UI/Utils/WebAuthn.ts +220 -0
  494. package/UI/esbuild-config.js +10 -0
  495. package/Utils/API.ts +34 -0
  496. package/Utils/Dashboard/Components/DashboardMonitorListComponent.ts +12 -1
  497. package/Utils/Dashboard/Components/DashboardVMwareHostListComponent.ts +38 -0
  498. package/Utils/Dashboard/Components/DashboardVMwareResourceListShared.ts +70 -0
  499. package/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.ts +76 -0
  500. package/Utils/Dashboard/Components/Index.ts +16 -0
  501. package/Utils/Dashboard/LabelVariable.ts +152 -0
  502. package/Utils/Dashboard/VariableUrlState.ts +27 -5
  503. package/Utils/LabelRuleImportExport.ts +496 -0
  504. package/Utils/MetricUnitUtil.ts +34 -0
  505. package/Utils/Monitor/DeviceMacLearningUtil.ts +177 -0
  506. package/Utils/Monitor/MetricValueFormatter.ts +342 -0
  507. package/Utils/Monitor/MonitorTemplateCustomFieldUtil.ts +124 -0
  508. package/Utils/Monitor/MonitorTemplateSyncUtil.ts +164 -0
  509. package/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.ts +7 -2
  510. package/Utils/Monitor/NetworkTopologyUtil.ts +693 -0
  511. package/Utils/NetworkAutomation/AutoImportRunChain.ts +138 -0
  512. package/Utils/NetworkDiscovery/DiscoveryScanStatus.ts +8 -0
  513. package/Utils/Telemetry/CloudInstanceIdentity.ts +94 -0
  514. package/Utils/Telemetry/EntityKey.ts +19 -0
  515. package/Utils/Telemetry/EntityRelationship.ts +19 -0
  516. package/build/dist/Models/DatabaseModels/Alert.js +54 -0
  517. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  518. package/build/dist/Models/DatabaseModels/CloudResource.js +44 -7
  519. package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
  520. package/build/dist/Models/DatabaseModels/CodeRepository.js +87 -0
  521. package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
  522. package/build/dist/Models/DatabaseModels/GlobalConfig.js +12 -12
  523. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  524. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +60 -7
  525. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
  526. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js +287 -0
  527. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js.map +1 -0
  528. package/build/dist/Models/DatabaseModels/Incident.js +54 -0
  529. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  530. package/build/dist/Models/DatabaseModels/Index.js +16 -0
  531. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  532. package/build/dist/Models/DatabaseModels/InventoryItem.js +34 -1
  533. package/build/dist/Models/DatabaseModels/InventoryItem.js.map +1 -1
  534. package/build/dist/Models/DatabaseModels/NetworkDevice.js +128 -0
  535. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  536. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +54 -0
  537. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  538. package/build/dist/Models/DatabaseModels/User.js +57 -4
  539. package/build/dist/Models/DatabaseModels/User.js.map +1 -1
  540. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +47 -2
  541. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -1
  542. package/build/dist/Models/DatabaseModels/UserWebAuthn.js +18 -0
  543. package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
  544. package/build/dist/Models/DatabaseModels/VMwareResource.js +1201 -0
  545. package/build/dist/Models/DatabaseModels/VMwareResource.js.map +1 -0
  546. package/build/dist/Models/DatabaseModels/VMwareVCenter.js +1149 -0
  547. package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -0
  548. package/build/dist/Models/DatabaseModels/VMwareVCenterFeed.js +648 -0
  549. package/build/dist/Models/DatabaseModels/VMwareVCenterFeed.js.map +1 -0
  550. package/build/dist/Models/DatabaseModels/VMwareVCenterLabelRule.js +522 -0
  551. package/build/dist/Models/DatabaseModels/VMwareVCenterLabelRule.js.map +1 -0
  552. package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerRule.js +603 -0
  553. package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerRule.js.map +1 -0
  554. package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js +503 -0
  555. package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js.map +1 -0
  556. package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js +502 -0
  557. package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js.map +1 -0
  558. package/build/dist/Models/DatabaseModels/WorkflowVariable.js +22 -1
  559. package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
  560. package/build/dist/Server/API/AIAgentDataAPI.js +63 -3
  561. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  562. package/build/dist/Server/API/AIAgentGitHubAPI.js +363 -0
  563. package/build/dist/Server/API/AIAgentGitHubAPI.js.map +1 -0
  564. package/build/dist/Server/API/AIChatAPI.js +19 -1
  565. package/build/dist/Server/API/AIChatAPI.js.map +1 -1
  566. package/build/dist/Server/API/BillingAPI.js +22 -0
  567. package/build/dist/Server/API/BillingAPI.js.map +1 -1
  568. package/build/dist/Server/API/DashboardAPI.js +10 -0
  569. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  570. package/build/dist/Server/API/GitHubAPI.js +33 -5
  571. package/build/dist/Server/API/GitHubAPI.js.map +1 -1
  572. package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js +56 -0
  573. package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js.map +1 -0
  574. package/build/dist/Server/API/UserWebAuthnAPI.js +17 -1
  575. package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
  576. package/build/dist/Server/API/VMwareResourceAPI.js +106 -0
  577. package/build/dist/Server/API/VMwareResourceAPI.js.map +1 -0
  578. package/build/dist/Server/EnvironmentConfig.js +44 -12
  579. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  580. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791700000000-AddMacAddressToNetworkDevice.js +14 -0
  581. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791700000000-AddMacAddressToNetworkDevice.js.map +1 -0
  582. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.js +41 -0
  583. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.js.map +1 -0
  584. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.js +14 -0
  585. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.js.map +1 -0
  586. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.js +241 -0
  587. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.js.map +1 -0
  588. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.js +36 -0
  589. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.js.map +1 -0
  590. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.js +12 -0
  591. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.js.map +1 -0
  592. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.js +34 -0
  593. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.js.map +1 -0
  594. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +14 -0
  595. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  596. package/build/dist/Server/Infrastructure/Redis.js +8 -8
  597. package/build/dist/Server/Infrastructure/Redis.js.map +1 -1
  598. package/build/dist/Server/Infrastructure/Status.js +10 -4
  599. package/build/dist/Server/Infrastructure/Status.js.map +1 -1
  600. package/build/dist/Server/Middleware/IdentityRateLimit.js +80 -0
  601. package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
  602. package/build/dist/Server/Services/AIRunService.js +14 -1
  603. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  604. package/build/dist/Server/Services/BillingPaymentMethodService.js +71 -21
  605. package/build/dist/Server/Services/BillingPaymentMethodService.js.map +1 -1
  606. package/build/dist/Server/Services/BillingService.js +210 -22
  607. package/build/dist/Server/Services/BillingService.js.map +1 -1
  608. package/build/dist/Server/Services/CloudResourceInstanceService.js +66 -0
  609. package/build/dist/Server/Services/CloudResourceInstanceService.js.map +1 -1
  610. package/build/dist/Server/Services/DatabaseService.js +58 -13
  611. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  612. package/build/dist/Server/Services/ExceptionAggregationService.js +1 -0
  613. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  614. package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js +9 -0
  615. package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js.map +1 -0
  616. package/build/dist/Server/Services/GoogleSecOpsConnectionService.js +7 -0
  617. package/build/dist/Server/Services/GoogleSecOpsConnectionService.js.map +1 -1
  618. package/build/dist/Server/Services/Index.js +16 -0
  619. package/build/dist/Server/Services/Index.js.map +1 -1
  620. package/build/dist/Server/Services/InventoryItemService.js +28 -1
  621. package/build/dist/Server/Services/InventoryItemService.js.map +1 -1
  622. package/build/dist/Server/Services/LogAggregationService.js +1 -0
  623. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  624. package/build/dist/Server/Services/MetricAggregationService.js +1 -0
  625. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  626. package/build/dist/Server/Services/MobilePasskeyLoginService.js +137 -0
  627. package/build/dist/Server/Services/MobilePasskeyLoginService.js.map +1 -0
  628. package/build/dist/Server/Services/MonitorService.js +34 -1
  629. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  630. package/build/dist/Server/Services/MonitorTemplateService.js +167 -30
  631. package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
  632. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +394 -38
  633. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  634. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +142 -2
  635. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
  636. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +65 -0
  637. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
  638. package/build/dist/Server/Services/NetworkDeviceService.js +54 -0
  639. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  640. package/build/dist/Server/Services/OpenTelemetryIngestService.js +28 -13
  641. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  642. package/build/dist/Server/Services/PayAsYouGoBillingService.js +297 -0
  643. package/build/dist/Server/Services/PayAsYouGoBillingService.js.map +1 -0
  644. package/build/dist/Server/Services/ProjectService.js +38 -2
  645. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  646. package/build/dist/Server/Services/ServerlessFunctionInstanceService.js +66 -0
  647. package/build/dist/Server/Services/ServerlessFunctionInstanceService.js.map +1 -1
  648. package/build/dist/Server/Services/TeamMemberService.js +85 -28
  649. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  650. package/build/dist/Server/Services/TelemetryIngestionKeyService.js +61 -10
  651. package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
  652. package/build/dist/Server/Services/TelemetryUsageBillingService.js +62 -5
  653. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  654. package/build/dist/Server/Services/TraceAggregationService.js +5 -4
  655. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  656. package/build/dist/Server/Services/UserNotificationRuleService.js +60 -25
  657. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  658. package/build/dist/Server/Services/UserWebAuthnService.js +345 -113
  659. package/build/dist/Server/Services/UserWebAuthnService.js.map +1 -1
  660. package/build/dist/Server/Services/VMwareResourceService.js +395 -0
  661. package/build/dist/Server/Services/VMwareResourceService.js.map +1 -0
  662. package/build/dist/Server/Services/VMwareVCenterFeedService.js +89 -0
  663. package/build/dist/Server/Services/VMwareVCenterFeedService.js.map +1 -0
  664. package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js +197 -0
  665. package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js.map +1 -0
  666. package/build/dist/Server/Services/VMwareVCenterLabelRuleService.js +13 -0
  667. package/build/dist/Server/Services/VMwareVCenterLabelRuleService.js.map +1 -0
  668. package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js +214 -0
  669. package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js.map +1 -0
  670. package/build/dist/Server/Services/VMwareVCenterOwnerRuleService.js +13 -0
  671. package/build/dist/Server/Services/VMwareVCenterOwnerRuleService.js.map +1 -0
  672. package/build/dist/Server/Services/VMwareVCenterOwnerTeamService.js +129 -0
  673. package/build/dist/Server/Services/VMwareVCenterOwnerTeamService.js.map +1 -0
  674. package/build/dist/Server/Services/VMwareVCenterOwnerUserService.js +122 -0
  675. package/build/dist/Server/Services/VMwareVCenterOwnerUserService.js.map +1 -0
  676. package/build/dist/Server/Services/VMwareVCenterService.js +533 -0
  677. package/build/dist/Server/Services/VMwareVCenterService.js.map +1 -0
  678. package/build/dist/Server/Services/WorkflowVariableService.js +169 -0
  679. package/build/dist/Server/Services/WorkflowVariableService.js.map +1 -1
  680. package/build/dist/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.js +12 -1
  681. package/build/dist/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.js.map +1 -1
  682. package/build/dist/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.js +25 -2
  683. package/build/dist/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.js.map +1 -1
  684. package/build/dist/Server/Types/Database/Permissions/ReadPermission.js +29 -4
  685. package/build/dist/Server/Types/Database/Permissions/ReadPermission.js.map +1 -1
  686. package/build/dist/Server/Types/Database/QueryUtil.js +36 -0
  687. package/build/dist/Server/Types/Database/QueryUtil.js.map +1 -1
  688. package/build/dist/Server/Types/Markdown.js +75 -0
  689. package/build/dist/Server/Types/Markdown.js.map +1 -1
  690. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
  691. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.js +275 -0
  692. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.js.map +1 -0
  693. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.js +226 -0
  694. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.js.map +1 -0
  695. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.js +297 -0
  696. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.js.map +1 -0
  697. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubConversation.js +582 -0
  698. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubConversation.js.map +1 -0
  699. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.js +275 -0
  700. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.js.map +1 -0
  701. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubRunReply.js +365 -0
  702. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubRunReply.js.map +1 -0
  703. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.js +103 -0
  704. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.js.map +1 -0
  705. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.js +661 -0
  706. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.js.map +1 -0
  707. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +166 -18
  708. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
  709. package/build/dist/Server/Utils/DataSource/EgressGuard.js +99 -15
  710. package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
  711. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +12 -1
  712. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
  713. package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +20 -2
  714. package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -1
  715. package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +31 -2
  716. package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -1
  717. package/build/dist/Server/Utils/LogRedaction.js +2 -1
  718. package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
  719. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +58 -35
  720. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
  721. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +29 -5
  722. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
  723. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +1 -1
  724. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +382 -36
  725. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  726. package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js +58 -9
  727. package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js.map +1 -1
  728. package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js +9 -3
  729. package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js.map +1 -1
  730. package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js +26 -12
  731. package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js.map +1 -1
  732. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +74 -33
  733. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
  734. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +12 -4
  735. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
  736. package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +5 -3
  737. package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -1
  738. package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +22 -9
  739. package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -1
  740. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +1 -0
  741. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  742. package/build/dist/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.js +114 -0
  743. package/build/dist/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.js.map +1 -0
  744. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +25 -0
  745. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  746. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +21 -0
  747. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
  748. package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +21 -6
  749. package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
  750. package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js +3 -3
  751. package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js +9 -9
  752. package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js.map +1 -1
  753. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js +92 -71
  754. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js.map +1 -1
  755. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +428 -143
  756. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
  757. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js +376 -0
  758. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js.map +1 -0
  759. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +14 -1
  760. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  761. package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -1
  762. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +206 -14
  763. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
  764. package/build/dist/Server/Utils/Telemetry/VMwareSnapshotScan.js +933 -0
  765. package/build/dist/Server/Utils/Telemetry/VMwareSnapshotScan.js.map +1 -0
  766. package/build/dist/Types/AI/CodeFixTaskContext.js +40 -0
  767. package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -1
  768. package/build/dist/Types/AI/CodeFixTaskType.js +57 -0
  769. package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -1
  770. package/build/dist/Types/Accounts/AccountsLanguage.js +1 -0
  771. package/build/dist/Types/Accounts/AccountsLanguage.js.map +1 -1
  772. package/build/dist/Types/AdminDashboard/AdminDashboardLanguage.js +1 -0
  773. package/build/dist/Types/AdminDashboard/AdminDashboardLanguage.js.map +1 -1
  774. package/build/dist/Types/BaseDatabase/IncludesAnyOfGroups.js +54 -0
  775. package/build/dist/Types/BaseDatabase/IncludesAnyOfGroups.js.map +1 -0
  776. package/build/dist/Types/Cloud/CloudPlatform.js +277 -0
  777. package/build/dist/Types/Cloud/CloudPlatform.js.map +1 -0
  778. package/build/dist/Types/CodeRepository/GitHubCommand.js +52 -0
  779. package/build/dist/Types/CodeRepository/GitHubCommand.js.map +1 -0
  780. package/build/dist/Types/Dashboard/DashboardComponentType.js +2 -0
  781. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  782. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +2 -0
  783. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  784. package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.js +2 -0
  785. package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.js.map +1 -0
  786. package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.js +2 -0
  787. package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.js.map +1 -0
  788. package/build/dist/Types/Dashboard/DashboardLanguage.js +1 -0
  789. package/build/dist/Types/Dashboard/DashboardLanguage.js.map +1 -1
  790. package/build/dist/Types/Dashboard/DashboardTemplates.js +286 -0
  791. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  792. package/build/dist/Types/Dashboard/DashboardVariable.js +1 -0
  793. package/build/dist/Types/Dashboard/DashboardVariable.js.map +1 -1
  794. package/build/dist/Types/Docs/DocsLanguage.js +1 -0
  795. package/build/dist/Types/Docs/DocsLanguage.js.map +1 -1
  796. package/build/dist/Types/Exception/EgressGuardException.js +59 -0
  797. package/build/dist/Types/Exception/EgressGuardException.js.map +1 -0
  798. package/build/dist/Types/Icon/IconProp.js +1 -0
  799. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  800. package/build/dist/Types/JSON.js +1 -0
  801. package/build/dist/Types/JSON.js.map +1 -1
  802. package/build/dist/Types/JSONFunctions.js +13 -0
  803. package/build/dist/Types/JSONFunctions.js.map +1 -1
  804. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +1 -0
  805. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  806. package/build/dist/Types/Monitor/MonitorStep.js +61 -18
  807. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  808. package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js +1 -0
  809. package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js.map +1 -1
  810. package/build/dist/Types/Monitor/MonitorStepVMwareMonitor.js +71 -0
  811. package/build/dist/Types/Monitor/MonitorStepVMwareMonitor.js.map +1 -0
  812. package/build/dist/Types/Monitor/MonitorTemplateSyncField.js +211 -0
  813. package/build/dist/Types/Monitor/MonitorTemplateSyncField.js.map +1 -0
  814. package/build/dist/Types/Monitor/MonitorType.js +23 -0
  815. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  816. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +28 -0
  817. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  818. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +1 -0
  819. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  820. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +2 -0
  821. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
  822. package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js +120 -0
  823. package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js.map +1 -1
  824. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +60 -0
  825. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -1
  826. package/build/dist/Types/Monitor/VMwareAlertTemplates.js +775 -0
  827. package/build/dist/Types/Monitor/VMwareAlertTemplates.js.map +1 -0
  828. package/build/dist/Types/Monitor/VMwareMetricCatalog.js +799 -0
  829. package/build/dist/Types/Monitor/VMwareMetricCatalog.js.map +1 -0
  830. package/build/dist/Types/NetworkAutomation/RuleRunResult.js +291 -6
  831. package/build/dist/Types/NetworkAutomation/RuleRunResult.js.map +1 -1
  832. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +25 -0
  833. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
  834. package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js +5 -0
  835. package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js.map +1 -1
  836. package/build/dist/Types/Password.js +63 -5
  837. package/build/dist/Types/Password.js.map +1 -1
  838. package/build/dist/Types/Permission.js +234 -0
  839. package/build/dist/Types/Permission.js.map +1 -1
  840. package/build/dist/Types/Probe/RequestFailedDetails.js +7 -0
  841. package/build/dist/Types/Probe/RequestFailedDetails.js.map +1 -1
  842. package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js +2 -0
  843. package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js.map +1 -0
  844. package/build/dist/Types/SerializableObjectDictionary.js +4 -0
  845. package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
  846. package/build/dist/Types/StatusPage/StatusPageLanguage.js +1 -0
  847. package/build/dist/Types/StatusPage/StatusPageLanguage.js.map +1 -1
  848. package/build/dist/Types/Telemetry/EntityType.js +21 -0
  849. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  850. package/build/dist/Types/Telemetry/InventoryLiveness.js +37 -0
  851. package/build/dist/Types/Telemetry/InventoryLiveness.js.map +1 -0
  852. package/build/dist/Types/Telemetry/ServiceType.js +1 -0
  853. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  854. package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js +2 -2
  855. package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  856. package/build/dist/UI/Components/CSVFileUpload/CSVFileUpload.js +7 -0
  857. package/build/dist/UI/Components/CSVFileUpload/CSVFileUpload.js.map +1 -1
  858. package/build/dist/UI/Components/Calendar/Calendar.js +24 -4
  859. package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
  860. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +9 -2
  861. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
  862. package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js +137 -0
  863. package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js.map +1 -0
  864. package/build/dist/UI/Components/Forms/BasicForm.js +28 -3
  865. package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
  866. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +1 -1
  867. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
  868. package/build/dist/UI/Components/Forms/Fields/FormField.js +10 -3
  869. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  870. package/build/dist/UI/Components/Forms/ModelForm.js +89 -6
  871. package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
  872. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +5 -6
  873. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
  874. package/build/dist/UI/Components/Icon/Icon.js +14 -0
  875. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  876. package/build/dist/UI/Components/Input/Input.js +37 -8
  877. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  878. package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js +228 -0
  879. package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js.map +1 -0
  880. package/build/dist/UI/Components/LabelRule/LabelRuleTable.js +102 -0
  881. package/build/dist/UI/Components/LabelRule/LabelRuleTable.js.map +1 -0
  882. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +15 -2
  883. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  884. package/build/dist/UI/Components/ModelTable/ModelTable.js +13 -5
  885. package/build/dist/UI/Components/ModelTable/ModelTable.js.map +1 -1
  886. package/build/dist/UI/Components/MonitorGraphs/Uptime.js +14 -15
  887. package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
  888. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +2 -0
  889. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  890. package/build/dist/UI/Components/Tooltip/Tooltip.js +33 -4
  891. package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
  892. package/build/dist/UI/Utils/DashboardStackingLayers.js +44 -0
  893. package/build/dist/UI/Utils/DashboardStackingLayers.js.map +1 -0
  894. package/build/dist/UI/Utils/LabelRuleImportExport.js +195 -0
  895. package/build/dist/UI/Utils/LabelRuleImportExport.js.map +1 -0
  896. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +4 -4
  897. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
  898. package/build/dist/UI/Utils/TelemetryService.js +3 -2
  899. package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
  900. package/build/dist/UI/Utils/UseDashboardGridDnd.js +2 -1
  901. package/build/dist/UI/Utils/UseDashboardGridDnd.js.map +1 -1
  902. package/build/dist/UI/Utils/UserEmailRegistrationStatus.js +21 -4
  903. package/build/dist/UI/Utils/UserEmailRegistrationStatus.js.map +1 -1
  904. package/build/dist/UI/Utils/WebAuthn.js +121 -0
  905. package/build/dist/UI/Utils/WebAuthn.js.map +1 -0
  906. package/build/dist/Utils/API.js +29 -0
  907. package/build/dist/Utils/API.js.map +1 -1
  908. package/build/dist/Utils/Dashboard/Components/DashboardMonitorListComponent.js +9 -1
  909. package/build/dist/Utils/Dashboard/Components/DashboardMonitorListComponent.js.map +1 -1
  910. package/build/dist/Utils/Dashboard/Components/DashboardVMwareHostListComponent.js +33 -0
  911. package/build/dist/Utils/Dashboard/Components/DashboardVMwareHostListComponent.js.map +1 -0
  912. package/build/dist/Utils/Dashboard/Components/DashboardVMwareResourceListShared.js +54 -0
  913. package/build/dist/Utils/Dashboard/Components/DashboardVMwareResourceListShared.js.map +1 -0
  914. package/build/dist/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.js +60 -0
  915. package/build/dist/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.js.map +1 -0
  916. package/build/dist/Utils/Dashboard/Components/Index.js +8 -0
  917. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  918. package/build/dist/Utils/Dashboard/LabelVariable.js +96 -0
  919. package/build/dist/Utils/Dashboard/LabelVariable.js.map +1 -0
  920. package/build/dist/Utils/Dashboard/VariableUrlState.js +19 -4
  921. package/build/dist/Utils/Dashboard/VariableUrlState.js.map +1 -1
  922. package/build/dist/Utils/LabelRuleImportExport.js +356 -0
  923. package/build/dist/Utils/LabelRuleImportExport.js.map +1 -0
  924. package/build/dist/Utils/MetricUnitUtil.js +26 -0
  925. package/build/dist/Utils/MetricUnitUtil.js.map +1 -1
  926. package/build/dist/Utils/Monitor/DeviceMacLearningUtil.js +112 -0
  927. package/build/dist/Utils/Monitor/DeviceMacLearningUtil.js.map +1 -0
  928. package/build/dist/Utils/Monitor/MetricValueFormatter.js +276 -0
  929. package/build/dist/Utils/Monitor/MetricValueFormatter.js.map +1 -0
  930. package/build/dist/Utils/Monitor/MonitorTemplateCustomFieldUtil.js +101 -0
  931. package/build/dist/Utils/Monitor/MonitorTemplateCustomFieldUtil.js.map +1 -0
  932. package/build/dist/Utils/Monitor/MonitorTemplateSyncUtil.js +110 -0
  933. package/build/dist/Utils/Monitor/MonitorTemplateSyncUtil.js.map +1 -0
  934. package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js +7 -2
  935. package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js.map +1 -1
  936. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +484 -0
  937. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  938. package/build/dist/Utils/NetworkAutomation/AutoImportRunChain.js +59 -0
  939. package/build/dist/Utils/NetworkAutomation/AutoImportRunChain.js.map +1 -0
  940. package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js +6 -0
  941. package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js.map +1 -1
  942. package/build/dist/Utils/Telemetry/CloudInstanceIdentity.js +88 -0
  943. package/build/dist/Utils/Telemetry/CloudInstanceIdentity.js.map +1 -0
  944. package/build/dist/Utils/Telemetry/EntityKey.js +15 -0
  945. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  946. package/build/dist/Utils/Telemetry/EntityRelationship.js +13 -0
  947. package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -1
  948. package/jest.config.json +2 -0
  949. package/package.json +1 -1
  950. package/test-setup.sh +9 -9
  951. package/tsconfig.json +51 -11
  952. package/Tests/App/Dashboard/NotificationEmailPreferences.test.tsx +0 -399
@@ -0,0 +1,112 @@
1
+ import { normalizeMac } from "./EndpointAttachmentUtil";
2
+ /*
3
+ * null, undefined, "" and whitespace all read as the same "no site" key -
4
+ * the convention NetworkDeviceLinkRuleUtil and the topology builder use.
5
+ */
6
+ export function siteKeyOf(siteId) {
7
+ return (siteId || "").trim();
8
+ }
9
+ export default class DeviceMacLearningUtil {
10
+ /*
11
+ * Which devices get which MAC. The rules, every one of them a refusal:
12
+ *
13
+ * - Only a device in the SAME site as the router that reported the
14
+ * binding. Every branch has a 10.0.0.5; a project-wide match would
15
+ * stamp one store's register with another store's MAC.
16
+ * - Only a device whose MAC column is EMPTY, or holds a MAC an earlier
17
+ * pass LEARNED that this table now contradicts. What an operator typed
18
+ * is theirs and is never touched. A learned value is the pass's own
19
+ * answer, and an ARP table is exactly the evidence that can be stale
20
+ * (an address re-leased the day before the register was plugged in
21
+ * stamps the previous holder's MAC), so the pass corrects itself when
22
+ * the address is later bound to a different MAC.
23
+ * - Only an address exactly one candidate device answers at. Two
24
+ * devices registered at one address is a contradiction, and a wrong
25
+ * MAC drawn as a cable is worse than none.
26
+ * - Only an address the ARP table binds to exactly one MAC. Proxy ARP
27
+ * and stale duplicates put two MACs behind one address; neither can
28
+ * be trusted.
29
+ *
30
+ * Output is sorted by device id, so a given input always plans the same
31
+ * writes in the same order.
32
+ */
33
+ static planMacLearning(data) {
34
+ const macsByIp = new Map();
35
+ for (const binding of data.ipBindings) {
36
+ const mac = normalizeMac(binding.macAddress);
37
+ const ip = (binding.ipAddress || "").trim();
38
+ if (!mac || !ip) {
39
+ continue;
40
+ }
41
+ const macs = macsByIp.get(ip);
42
+ if (macs) {
43
+ macs.add(mac);
44
+ }
45
+ else {
46
+ macsByIp.set(ip, new Set([mac]));
47
+ }
48
+ }
49
+ const siteKey = siteKeyOf(data.observingSiteId);
50
+ const devicesByIp = new Map();
51
+ for (const device of data.devices) {
52
+ const hostname = (device.hostname || "").trim();
53
+ if (!hostname || !macsByIp.has(hostname)) {
54
+ continue;
55
+ }
56
+ if (siteKeyOf(device.siteId) !== siteKey) {
57
+ continue;
58
+ }
59
+ const bucket = devicesByIp.get(hostname);
60
+ if (bucket) {
61
+ bucket.push(device);
62
+ }
63
+ else {
64
+ devicesByIp.set(hostname, [device]);
65
+ }
66
+ }
67
+ const plan = [];
68
+ for (const [ip, candidates] of devicesByIp) {
69
+ // Two devices at one address: neither can be the one.
70
+ if (candidates.length !== 1) {
71
+ continue;
72
+ }
73
+ const macs = macsByIp.get(ip);
74
+ // Two MACs behind one address: neither can be trusted.
75
+ if (macs.size !== 1) {
76
+ continue;
77
+ }
78
+ const device = candidates[0];
79
+ const learnedMac = Array.from(macs)[0];
80
+ const storedMac = normalizeMac(device.macAddress);
81
+ const hasStoredValue = (device.macAddress || "").trim().length > 0;
82
+ if (!hasStoredValue) {
83
+ plan.push({
84
+ deviceId: device.id,
85
+ macAddress: learnedMac,
86
+ ipAddress: ip,
87
+ previousMacAddress: null,
88
+ });
89
+ continue;
90
+ }
91
+ // Typed by somebody, or already what the table says: leave it.
92
+ if (device.isMacAddressLearned !== true || storedMac === learnedMac) {
93
+ continue;
94
+ }
95
+ plan.push({
96
+ deviceId: device.id,
97
+ macAddress: learnedMac,
98
+ ipAddress: ip,
99
+ /*
100
+ * The raw stored value, not the normalised one: the writer's
101
+ * compare-and-set has to match what the column actually holds.
102
+ */
103
+ previousMacAddress: device.macAddress || null,
104
+ });
105
+ }
106
+ plan.sort((a, b) => {
107
+ return a.deviceId < b.deviceId ? -1 : a.deviceId > b.deviceId ? 1 : 0;
108
+ });
109
+ return plan;
110
+ }
111
+ }
112
+ //# sourceMappingURL=DeviceMacLearningUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeviceMacLearningUtil.js","sourceRoot":"","sources":["../../../../Utils/Monitor/DeviceMacLearningUtil.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,276 @@
1
+ import MetricUnitUtil from "../MetricUnitUtil";
2
+ import ValueFormatter from "../ValueFormatter";
3
+ /*
4
+ * How a metric sample is written into alert / incident notification text.
5
+ *
6
+ * The dashboard has always scaled metric values before showing them —
7
+ * `ValueFormatter` turns 1073741824 bytes into "1.07 GB" for every chart,
8
+ * gauge and value tile. The notification path never did. The same memory
9
+ * breach that reads "1.07 GB" on the monitor page arrived in the on-call
10
+ * engineer's inbox as the bare digits "1073741824 By", and in the
11
+ * "Affected Resources" tables as a Value column with no unit at all — a
12
+ * column of ten-digit numbers the reader has to divide by 2^30 in their
13
+ * head at 3am to find out whether the pod is anywhere near its limit.
14
+ *
15
+ * This module is the single place that decides how a (value, unit) pair
16
+ * is rendered for a notification, so the breaching-samples table, the
17
+ * "Filter Conditions Met" sentence, the observation summary and the
18
+ * per-platform resource tables cannot drift apart inside one email.
19
+ *
20
+ * WHY IT WRAPS ValueFormatter RATHER THAN BEING A CALL TO IT.
21
+ *
22
+ * Three things differ between a chart axis and an alert body:
23
+ *
24
+ * 1. ABBREVIATION. `ValueFormatter` shortens any number over 1000 to
25
+ * "1.5K" — right for a tick label, which has no horizontal room, and
26
+ * wrong for an alert, where "restarted 1.5K times" hides the
27
+ * difference between 1500 and 1549 that the reader opened the table
28
+ * to find. Here, only a unit that names an actual SCALE LADDER
29
+ * (bytes → KB → MB, seconds → min → hours) may rescale a number.
30
+ * Everything else keeps its digits and simply gets its unit spelled
31
+ * out: "1234567 cores", not "1.23M cores".
32
+ *
33
+ * 2. PREFIXED UNITS. A user who typed a threshold in "GB" makes every
34
+ * sample arrive carrying the unit "GB", and ValueFormatter has a
35
+ * ladder for "bytes" but not for "GB" — so 2500 of them rendered
36
+ * "2.5K GB" instead of "2.5 TB". Anything in a MetricUnitUtil family
37
+ * is converted to that family's base before the ladder runs.
38
+ *
39
+ * 3. UNITS WORTH HIDING. OTel's dimensionless "1" and UCUM's
40
+ * annotation-only units ("{restarts}", "{packets}") are not
41
+ * dimensions, and printing them produces the "0.06 1" that
42
+ * CompareCriteria and MonitorCriteriaObservationBuilder each grew
43
+ * their own guard against. That rule lives here now.
44
+ */
45
+ class MetricValueFormatter {
46
+ /**
47
+ * Whether `unit` names a real dimension for `metricName` — i.e. whether
48
+ * it is worth attaching to a number at all. False for the empty unit,
49
+ * for the dimensionless "1" on a non-fraction metric, and for
50
+ * annotation-only units.
51
+ */
52
+ static hasDisplayableUnit(unit, metricName) {
53
+ const trimmed = MetricValueFormatter.canonicalizeUnit(unit);
54
+ if (!trimmed) {
55
+ return false;
56
+ }
57
+ /*
58
+ * "1" is OTel's dimensionless marker. On a `.utilization` / `.ratio`
59
+ * metric it means "this is a [0, 1] fraction", which IS a scale (× 100
60
+ * into a percent) and is why the fraction case is excluded here rather
61
+ * than folded in. On anything else it is noise: "0.06 1" is not just
62
+ * ugly, it reads as 1% when the value is 6%.
63
+ */
64
+ if (trimmed === "1") {
65
+ return ValueFormatter.isFractionMetric(metricName || undefined);
66
+ }
67
+ return !MetricValueFormatter.annotationOnlyUnitPattern.test(trimmed);
68
+ }
69
+ /**
70
+ * Format one metric sample for a notification.
71
+ *
72
+ * Units with a scale ladder are rescaled, exactly as the dashboard does:
73
+ * format({ value: 1073741824, unit: "By" }) → "1.07 GB"
74
+ * format({ value: 2500, unit: "GB" }) → "2.5 TB"
75
+ * format({ value: 1500, unit: "ms" }) → "1.5 sec"
76
+ * format({ value: 3661, unit: "seconds" }) → "1.02 hours"
77
+ * format({ value: 1500000, unit: "By/s" }) → "1.5 MB/s"
78
+ * format({ value: 0.2534, unit: "1",
79
+ * metricName: "system.cpu.utilization" }) → "25.34%"
80
+ * format({ value: 87.5, unit: "%" }) → "87.50%"
81
+ *
82
+ * Units without one keep every digit and are merely labelled:
83
+ * format({ value: 1234567, unit: "cores" }) → "1234567 cores"
84
+ * format({ value: 95, unit: "Cel" }) → "95 Celsius"
85
+ *
86
+ * A value with no dimension to report is left bare:
87
+ * format({ value: 1500 }) → "1500"
88
+ * format({ value: 1500, unit: "{restarts}" }) → "1500"
89
+ * format({ value: 3.14159 }) → "3.14"
90
+ */
91
+ static format(input) {
92
+ if (!Number.isFinite(input.value)) {
93
+ return String(input.value);
94
+ }
95
+ const unit = MetricValueFormatter.canonicalizeUnit(input.unit);
96
+ const metricName = input.metricName || undefined;
97
+ if (!MetricValueFormatter.hasDisplayableUnit(unit, metricName)) {
98
+ return MetricValueFormatter.formatBareNumber(input.value);
99
+ }
100
+ const formatOptions = metricName
101
+ ? { metricName: metricName }
102
+ : {};
103
+ /*
104
+ * Percent first. ValueFormatter renders "%" and the fraction-metric
105
+ * "1" as a two-decimal percentage, and neither is reachable through
106
+ * the ladder path below (there is no percent threshold table, and the
107
+ * percent family's base unit "%" has no ladder either).
108
+ */
109
+ if (ValueFormatter.isPercentUnit(unit) ||
110
+ (unit === "1" && ValueFormatter.isFractionMetric(metricName))) {
111
+ return ValueFormatter.formatValue(input.value, unit, formatOptions);
112
+ }
113
+ const scalable = MetricValueFormatter.isAbsoluteTimestampMetric(metricName)
114
+ ? null
115
+ : MetricValueFormatter.toScalableUnit(input.value, unit);
116
+ if (scalable) {
117
+ return ValueFormatter.formatValue(scalable.value, scalable.unit, formatOptions);
118
+ }
119
+ /*
120
+ * No ladder for this unit: label the number, leave its digits alone.
121
+ *
122
+ * The SYMBOL rather than the spelled-out name, because this suffix
123
+ * sits directly against a number, where the ladder path also emits
124
+ * symbols ("1.07 GB", "1.5 sec"). getReadableUnit is for the "Unit:"
125
+ * label line, where a name reads better than a code — and it is
126
+ * actively wrong here for compound units, which it rewrites: "m/s2"
127
+ * becomes "m per s2" and "10*3/uL" becomes "10*3 per uL", both longer
128
+ * and less recognisable than what the exporter wrote. getCompactUnit
129
+ * keeps the slash and still expands what is worth expanding
130
+ * ("Cel" → "°C", "KiBy" → "KiB").
131
+ */
132
+ const unitSymbol = ValueFormatter.getCompactUnit(unit, formatOptions) || unit;
133
+ return `${MetricValueFormatter.formatBareNumber(input.value)} ${unitSymbol}`;
134
+ }
135
+ /**
136
+ * The spelled-out name of a unit, for the "Unit:" line of a root cause —
137
+ * "Bytes" rather than the UCUM "By" the exporter wrote. Returns null when
138
+ * the unit names no dimension, so the caller can drop the line entirely
139
+ * instead of printing the noise "Unit: 1".
140
+ */
141
+ static getReadableUnit(unit, metricName) {
142
+ if (!MetricValueFormatter.hasDisplayableUnit(unit, metricName)) {
143
+ return null;
144
+ }
145
+ const readable = ValueFormatter.getReadableUnit(MetricValueFormatter.canonicalizeUnit(unit), metricName ? { metricName: metricName } : {});
146
+ return readable.trim() ? readable : null;
147
+ }
148
+ /*
149
+ * Trim the unit and rewrite the catalogs' English spellings of "no
150
+ * dimension" into the UCUM ones the rest of the pipeline understands.
151
+ * Anything else is returned untouched — including its casing, which
152
+ * matters because an unrecognised unit is echoed verbatim next to the
153
+ * value ("5 widgets", not "5 Widgets").
154
+ */
155
+ static canonicalizeUnit(unit) {
156
+ const trimmed = (unit || "").trim();
157
+ if (!trimmed) {
158
+ return "";
159
+ }
160
+ const alias = MetricValueFormatter.informalUnitAliases[trimmed.toLowerCase()];
161
+ return alias === undefined ? trimmed : alias;
162
+ }
163
+ /**
164
+ * Whether this metric's value is a point in time rather than a quantity,
165
+ * and so must never be run through a scale ladder. See
166
+ * absoluteTimestampMetricPattern.
167
+ */
168
+ static isAbsoluteTimestampMetric(metricName) {
169
+ if (!metricName) {
170
+ return false;
171
+ }
172
+ return MetricValueFormatter.absoluteTimestampMetricPattern.test(metricName.trim());
173
+ }
174
+ /*
175
+ * Restate (value, unit) in a unit ValueFormatter has a scale ladder for,
176
+ * or return null when no ladder can apply.
177
+ *
178
+ * Three ways a unit gets there:
179
+ * - it already has one ("bytes", "ms", "s", "ns");
180
+ * - it is a rate whose NUMERATOR does ("By/s" → scale the bytes, keep
181
+ * the "/s"), which is how 1500000 By/s reads "1.5 MB/s";
182
+ * - it is a prefixed member of a MetricUnitUtil family ("GB", "hours"),
183
+ * in which case the value is converted into that family's base first.
184
+ */
185
+ static toScalableUnit(value, unit) {
186
+ if (!unit) {
187
+ return null;
188
+ }
189
+ if (ValueFormatter.isScalableUnit(unit)) {
190
+ return { value: value, unit: unit };
191
+ }
192
+ if (unit.includes("/")) {
193
+ const [numerator, ...denominatorParts] = unit.split("/");
194
+ const denominator = denominatorParts.join("/").trim();
195
+ if (!numerator || !numerator.trim() || !denominator) {
196
+ return null;
197
+ }
198
+ const scaledNumerator = MetricValueFormatter.toScalableUnit(value, numerator.trim());
199
+ if (!scaledNumerator) {
200
+ return null;
201
+ }
202
+ return {
203
+ value: scaledNumerator.value,
204
+ unit: `${scaledNumerator.unit}/${denominator}`,
205
+ };
206
+ }
207
+ const baseUnit = MetricUnitUtil.getFamilyBaseUnit(unit);
208
+ if (!baseUnit || !ValueFormatter.isScalableUnit(baseUnit)) {
209
+ return null;
210
+ }
211
+ return {
212
+ value: MetricUnitUtil.convertToMetricUnit({
213
+ value: value,
214
+ fromUnit: unit,
215
+ metricUnit: baseUnit,
216
+ }),
217
+ unit: baseUnit,
218
+ };
219
+ }
220
+ /*
221
+ * The unscaled rendering: integers verbatim, everything else rounded to
222
+ * two decimals with trailing zeros dropped (1.50 → "1.5"). This is the
223
+ * behaviour the root-cause tables had before units arrived, and every
224
+ * value without a scale ladder keeps it exactly, so a counter's digits
225
+ * survive the trip to the inbox.
226
+ */
227
+ static formatBareNumber(value) {
228
+ if (Number.isInteger(value)) {
229
+ return value.toString();
230
+ }
231
+ return Number(value.toFixed(2)).toString();
232
+ }
233
+ }
234
+ /*
235
+ * UCUM annotation-only units — "{thread}", "{packets}", "{errors}".
236
+ * The braces describe what is being counted; the value is a plain
237
+ * count and the text inside them is not a unit a reader should see.
238
+ */
239
+ MetricValueFormatter.annotationOnlyUnitPattern = /^\{[^{}]*\}$/;
240
+ /*
241
+ * The per-platform metric catalogs (Kubernetes, Ceph, Proxmox, Docker
242
+ * Swarm) were written for humans reading a metric picker, so they spell
243
+ * two dimensionless concepts in English rather than in UCUM. "count"
244
+ * appears on 43 catalog entries and means exactly what UCUM's "1" means
245
+ * on a counter — printing it gives "15 count", which reads as a typo.
246
+ * "ratio" means what UCUM's "1" means on a fraction metric: a value in
247
+ * [0, 1] that a reader wants as a percentage.
248
+ *
249
+ * Rewriting them here rather than in each catalog keeps the catalogs
250
+ * legible to the people who edit them and still gives every consumer of
251
+ * this formatter one vocabulary.
252
+ */
253
+ MetricValueFormatter.informalUnitAliases = {
254
+ count: "",
255
+ counts: "",
256
+ ratio: "1",
257
+ fraction: "1",
258
+ };
259
+ /*
260
+ * Metrics whose unit says "seconds" but whose VALUE is a POINT in time
261
+ * rather than a length of one.
262
+ *
263
+ * Proxmox has three: pve_replication_last_sync_timestamp_seconds,
264
+ * _last_try_ and _next_sync_ — all carrying `unit: "seconds"`, all
265
+ * holding a Unix epoch. Sent through the duration ladder, an epoch of
266
+ * 1750000000 renders "20.25K days", which is not merely unhelpful: it
267
+ * READS as a duration, so a replication job that synced a minute ago
268
+ * looks 55 years stale. The bare number at least cannot be misread as
269
+ * something it is not.
270
+ *
271
+ * Same shape as ValueFormatter's kubeletstats exclusion: a narrow,
272
+ * name-anchored carve-out for a unit the exporter declared wrongly.
273
+ */
274
+ MetricValueFormatter.absoluteTimestampMetricPattern = /(^|[._])timestamps?([._]seconds?)?$/i;
275
+ export default MetricValueFormatter;
276
+ //# sourceMappingURL=MetricValueFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricValueFormatter.js","sourceRoot":"","sources":["../../../../Utils/Monitor/MetricValueFormatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import JSONFunctions from "../../Types/JSONFunctions";
2
+ /*
3
+ * WHAT A MONITOR TEMPLATE'S CUSTOM FIELDS MEAN, in one place.
4
+ *
5
+ * A template's `customFields` bag is a set of DEFAULTS for the monitors made
6
+ * from it — the answer to issue #3548, where an auto-import rule turned a
7
+ * thousand discovered devices into a thousand monitors whose Vendor, Services
8
+ * and Configuration Item fields were all empty and could only be filled in one
9
+ * monitor at a time.
10
+ *
11
+ * Two callers need the same answer and would drift apart if each wrote its
12
+ * own:
13
+ *
14
+ * - PROVISIONING (NetworkDeviceMonitorTemplateUtil.buildMonitor, reached
15
+ * from the auto-import engine and the alert-policy engine) starts from a
16
+ * monitor with no values at all, so it takes the whole bag.
17
+ * - SYNC (MonitorTemplateService) pushes the template onto monitors that
18
+ * already exist and may already carry values an operator typed in, so it
19
+ * OVERLAYS instead: every field the template actually gives a default for
20
+ * wins, and every other field on the monitor is left exactly as it is.
21
+ *
22
+ * Both go through a deep clone, because a jsonb bag handed to several monitors
23
+ * by reference is one nested edit away from leaking across the fleet — and
24
+ * back onto the template itself.
25
+ */
26
+ export default class MonitorTemplateCustomFieldUtil {
27
+ /*
28
+ * A defaults bag is only worth writing when there is a value in it, so
29
+ * "template has no defaults" and "template has an empty bag" are the same
30
+ * answer to every caller here. This is what keeps a sync scoped to custom
31
+ * fields alone from reporting that it wrote to a fleet it did not touch.
32
+ */
33
+ static hasDefaults(customFields) {
34
+ return Object.keys(this.getDefaults(customFields)).length > 0;
35
+ }
36
+ /*
37
+ * The template's defaults, deep-cloned, with the fields it does not actually
38
+ * default DROPPED.
39
+ *
40
+ * A template carries a key for every custom field the project has defined
41
+ * the moment somebody saves the edit form — the form submits its whole
42
+ * values object — so most keys in a freshly saved bag hold nothing. Left in,
43
+ * they would make a sync overwrite real per-monitor values with blanks: a
44
+ * template that only defaults Vendor would silently clear Configuration Item
45
+ * on every monitor in the fleet.
46
+ *
47
+ * `false` and `0` are values, not blanks — a Boolean custom field defaulting
48
+ * to false and a Number defaulting to 0 are both things an operator means.
49
+ */
50
+ static getDefaults(customFields) {
51
+ if (!customFields) {
52
+ return {};
53
+ }
54
+ const defaults = {};
55
+ for (const key of Object.keys(customFields)) {
56
+ const value = customFields[key];
57
+ if (this.isBlank(value)) {
58
+ continue;
59
+ }
60
+ defaults[key] = value;
61
+ }
62
+ return this.clone(defaults);
63
+ }
64
+ /*
65
+ * Overlay the template's defaults onto the values a monitor already has.
66
+ * Returns a new bag; neither input is mutated.
67
+ */
68
+ static applyDefaults(data) {
69
+ return Object.assign(Object.assign({}, this.clone(data.monitorCustomFields || {})), this.getDefaults(data.templateCustomFields));
70
+ }
71
+ /*
72
+ * The whole bag, verbatim apart from being deep-cloned — blanks included.
73
+ *
74
+ * Provisioning uses this rather than getDefaults because there is nothing
75
+ * underneath to protect: a monitor being created has no values of its own,
76
+ * so a blank default and an absent one look identical on the monitor, and
77
+ * copying the bag as written keeps "what the template says" and "what the
78
+ * new monitor got" literally the same object.
79
+ */
80
+ static clone(customFields) {
81
+ return JSONFunctions.deserialize(JSONFunctions.serialize(customFields));
82
+ }
83
+ /*
84
+ * Nothing an operator would call a default. An empty multi-select arrives as
85
+ * [], a cleared text field as "" (or as spaces, from a form nobody trimmed),
86
+ * and a field never touched as null or undefined.
87
+ */
88
+ static isBlank(value) {
89
+ if (value === undefined || value === null) {
90
+ return true;
91
+ }
92
+ if (typeof value === "string") {
93
+ return value.trim() === "";
94
+ }
95
+ if (Array.isArray(value)) {
96
+ return value.length === 0;
97
+ }
98
+ return false;
99
+ }
100
+ }
101
+ //# sourceMappingURL=MonitorTemplateCustomFieldUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MonitorTemplateCustomFieldUtil.js","sourceRoot":"","sources":["../../../../Utils/Monitor/MonitorTemplateCustomFieldUtil.ts"],"names":[],"mappings":"AACA,OAAO,aAAa,MAAM,2BAA2B,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,OAAO,OAAO,8BAA8B;IACjD;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CACvB,YAA2C;QAE3C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAChE,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,MAAM,CAAC,WAAW,CACvB,YAA2C;QAE3C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,QAAQ,GAAe,EAAE,CAAC;QAEhC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAc,YAAY,CAAC,GAAG,CAAc,CAAC;YAExD,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,SAAS;YACX,CAAC;YAED,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,aAAa,CAAC,IAG3B;QACC,uCACK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,EAAE,CAAC,GAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAC9C;IACJ,CAAC;IAED;;;;;;;;OAQG;IACI,MAAM,CAAC,KAAK,CAAC,YAAwB;QAC1C,OAAO,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,OAAO,CAAC,KAAgB;QACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QAC7B,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,110 @@
1
+ import BadDataException from "../../Types/Exception/BadDataException";
2
+ import MonitorTemplateSyncFieldUtil from "../../Types/Monitor/MonitorTemplateSyncField";
3
+ export default class MonitorTemplateSyncUtil {
4
+ static hasExcludedFields(steps) {
5
+ var _a;
6
+ return Boolean((_a = steps === null || steps === void 0 ? void 0 : steps.data) === null || _a === void 0 ? void 0 : _a.monitorStepsInstanceArray.some((step) => {
7
+ var _a, _b;
8
+ return ((((_b = MonitorTemplateSyncFieldUtil.parse((_a = step.data) === null || _a === void 0 ? void 0 : _a.doNotSyncFields)) === null || _b === void 0 ? void 0 : _b.length) || 0) > 0);
9
+ }));
10
+ }
11
+ static buildSyncedMonitorSteps(data) {
12
+ var _a, _b, _c, _d, _e, _f, _g, _h;
13
+ if (!((_a = data.templateMonitorSteps) === null || _a === void 0 ? void 0 : _a.data)) {
14
+ throw new BadDataException("Monitor template steps are required to sync criteria.");
15
+ }
16
+ const result = this.cloneValue(data.templateMonitorSteps);
17
+ const templateSteps = data.templateMonitorSteps.data.monitorStepsInstanceArray;
18
+ const currentSteps = ((_c = (_b = data.currentMonitorSteps) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.monitorStepsInstanceArray) || [];
19
+ for (const [index, step,] of result.data.monitorStepsInstanceArray.entries()) {
20
+ const excludedFields = MonitorTemplateSyncFieldUtil.parse((_d = step.data) === null || _d === void 0 ? void 0 : _d.doNotSyncFields, data.monitorType) || [];
21
+ // This is a template policy, not a monitor override.
22
+ if (step.data) {
23
+ delete step.data.doNotSyncFields;
24
+ }
25
+ if (excludedFields.length === 0) {
26
+ continue;
27
+ }
28
+ const templateStep = templateSteps[index];
29
+ const hasUniqueTemplateId = Boolean((_f = (_e = templateStep.data) === null || _e === void 0 ? void 0 : _e.id) === null || _f === void 0 ? void 0 : _f.trim()) &&
30
+ templateSteps.filter((candidate) => {
31
+ var _a, _b;
32
+ return ((_a = candidate.data) === null || _a === void 0 ? void 0 : _a.id) === ((_b = templateStep.data) === null || _b === void 0 ? void 0 : _b.id);
33
+ }).length === 1;
34
+ const matches = currentSteps.filter((current) => {
35
+ var _a, _b;
36
+ return Boolean(((_a = templateStep.data) === null || _a === void 0 ? void 0 : _a.id) && ((_b = current.data) === null || _b === void 0 ? void 0 : _b.id) === templateStep.data.id);
37
+ });
38
+ const matchingStep = matches.length === 1
39
+ ? matches[0]
40
+ : matches.length === 0 &&
41
+ templateSteps.length === 1 &&
42
+ currentSteps.length === 1
43
+ ? currentSteps[0]
44
+ : undefined;
45
+ if (!hasUniqueTemplateId ||
46
+ !((_h = (_g = matchingStep === null || matchingStep === void 0 ? void 0 : matchingStep.data) === null || _g === void 0 ? void 0 : _g.id) === null || _h === void 0 ? void 0 : _h.trim()) ||
47
+ !step.data) {
48
+ throw new BadDataException("Cannot preserve fields because a template step cannot be matched to an existing monitor step. Match step IDs, or use a single-step template with a single-step monitor.");
49
+ }
50
+ for (const field of excludedFields) {
51
+ for (const path of MonitorTemplateSyncFieldUtil.getPaths(field)) {
52
+ this.preservePath(step.data, matchingStep.data, path.split("."));
53
+ }
54
+ }
55
+ }
56
+ return result;
57
+ }
58
+ static preservePath(target, source, path) {
59
+ const key = path[0];
60
+ if (path.length === 1) {
61
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
62
+ target[key] = this.cloneValue(source[key]);
63
+ }
64
+ else {
65
+ delete target[key];
66
+ }
67
+ return;
68
+ }
69
+ const sourceChild = source[key];
70
+ const targetChild = target[key];
71
+ if (!targetChild || typeof targetChild !== "object") {
72
+ if (!sourceChild || typeof sourceChild !== "object") {
73
+ return;
74
+ }
75
+ target[key] = {};
76
+ }
77
+ this.preservePath(target[key], sourceChild && typeof sourceChild === "object"
78
+ ? sourceChild
79
+ : {}, path.slice(1));
80
+ }
81
+ /**
82
+ * Clone configuration without a serialization round trip: that normalizes
83
+ * old values and can invent defaults for fields that should remain absent.
84
+ * Keeping prototypes also keeps URL, ObjectID and criteria methods usable.
85
+ */
86
+ static cloneValue(value) {
87
+ if (value === null || typeof value !== "object") {
88
+ return value;
89
+ }
90
+ if (value instanceof Date) {
91
+ return new Date(value.getTime());
92
+ }
93
+ if (Array.isArray(value)) {
94
+ return value.map((item) => {
95
+ return this.cloneValue(item);
96
+ });
97
+ }
98
+ const result = Object.create(Object.getPrototypeOf(value));
99
+ for (const key of Object.keys(value)) {
100
+ Object.defineProperty(result, key, {
101
+ value: this.cloneValue(value[key]),
102
+ enumerable: true,
103
+ configurable: true,
104
+ writable: true,
105
+ });
106
+ }
107
+ return result;
108
+ }
109
+ }
110
+ //# sourceMappingURL=MonitorTemplateSyncUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MonitorTemplateSyncUtil.js","sourceRoot":"","sources":["../../../../Utils/Monitor/MonitorTemplateSyncUtil.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import Monitor from "../../Models/DatabaseModels/Monitor";
2
2
  import BadDataException from "../../Types/Exception/BadDataException";
3
- import JSONFunctions from "../../Types/JSONFunctions";
4
3
  import MonitorSteps from "../../Types/Monitor/MonitorSteps";
5
4
  import MonitorType from "../../Types/Monitor/MonitorType";
6
5
  import ObjectID from "../../Types/ObjectID";
6
+ import MonitorTemplateCustomFieldUtil from "./MonitorTemplateCustomFieldUtil";
7
7
  /*
8
8
  * Materialises a project MonitorTemplate for one discovered NetworkDevice.
9
9
  *
@@ -243,8 +243,13 @@ export default class NetworkDeviceMonitorTemplateUtil {
243
243
  }
244
244
  return truncated;
245
245
  }
246
+ /*
247
+ * Delegated so "what a template's custom fields mean" is written down once
248
+ * — provisioning takes the bag whole, sync overlays it. See
249
+ * MonitorTemplateCustomFieldUtil.
250
+ */
246
251
  static cloneCustomFields(customFields) {
247
- return JSONFunctions.deserialize(JSONFunctions.serialize(customFields));
252
+ return MonitorTemplateCustomFieldUtil.clone(customFields);
248
253
  }
249
254
  }
250
255
  //# sourceMappingURL=NetworkDeviceMonitorTemplateUtil.js.map