@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,933 @@
1
+ import ColumnLength from "../../../Types/Database/ColumnLength";
2
+ import OneUptimeDate from "../../../Types/Date";
3
+ import { VMwareResourceKind } from "../../../Types/Monitor/MonitorStepVMwareMonitor";
4
+ import logger from "../Logger";
5
+ import crypto from "crypto";
6
+ /*
7
+ * ------------------------------------------------------------------
8
+ * VMware snapshot scan — pure fold & derive helpers
9
+ * ------------------------------------------------------------------
10
+ *
11
+ * Modelled on ProxmoxCephSnapshotScan.ts (the Proxmox half). The
12
+ * ingest service owns the I/O: it walks the OTLP payload, calls
13
+ * bufferVMwareSnapshotMetric per datapoint, and at flush time maps the
14
+ * folded buffers through computeVMwareIsPoweredOn /
15
+ * deriveVMwareResourceLatestMetric / deriveVMwareVCenterSnapshotExtras
16
+ * before handing the results to VMwareResourceService /
17
+ * VMwareVCenterService. Everything in this module is pure (Map/object
18
+ * mutation only — no DB, no network), which is what makes the
19
+ * snapshot-scan semantics unit-testable:
20
+ *
21
+ * - identity attributes fold first-non-null-wins; status/metric
22
+ * fields fold newest-observedAt-wins,
23
+ * - count metrics that fan out over datapoint attributes (status,
24
+ * power_state, effective) are SUMMED across the datapoints of the
25
+ * newest timestamp — never "newest datapoint wins",
26
+ * - vCenter count columns are only derived when the batch carried at
27
+ * least one resource of that kind (never zero a count on a partial
28
+ * batch — the COALESCE-per-column contract),
29
+ * - non-allow-listed metric names are skipped via the exported
30
+ * VMWARE_SNAPSHOT_METRIC_NAMES set,
31
+ * - every externalId is length-bound to VMwareResource.externalId's
32
+ * ShortText (100) column by boundVMwareExternalId: an id longer
33
+ * than 100 chars becomes an 83-char prefix + "~" + the first 16 hex
34
+ * chars of the sha1 of the FULL id, so two distinct long inventory
35
+ * paths (sibling sub-pools under a deep cluster path, the
36
+ * vm/<dc>/<host>/<name> fallback) can never clamp to the same
37
+ * unique-index key downstream. The full path stays in the LongText
38
+ * resourcePoolPath column for display.
39
+ *
40
+ * KEY DIFFERENCE from Proxmox: the OpenTelemetry Collector `vcenter`
41
+ * receiver emits one OTLP resource per vSphere object and carries the
42
+ * object's identity in that resource's attributes
43
+ * (vcenter.datacenter.name, vcenter.cluster.name, vcenter.host.name,
44
+ * vcenter.vm.name / vcenter.vm.id, vcenter.vm_template.*,
45
+ * vcenter.datastore.name, vcenter.resource_pool.*, vcenter.virtual_app.*)
46
+ * — not in datapoint labels the way pve-exporter does. The buffer
47
+ * function therefore takes the resource attribute map alongside the
48
+ * datapoint; the datapoint attributes only carry the fan-out
49
+ * dimensions (disk_state, power_state, status, effective, type).
50
+ */
51
+ /*
52
+ * Every metric the §3 metric → column table references. The ingest
53
+ * service gates on this Set before calling bufferVMwareSnapshotMetric so
54
+ * the ~40 perf series (latency, throughput, packet rates, vSAN, …) that
55
+ * only live in ClickHouse never pay for a fold.
56
+ *
57
+ * vcenter.vm.cpu.* are also the powered-on signal: the receiver emits
58
+ * them ONLY for powered-on virtual machines (see computeVMwareIsPoweredOn).
59
+ */
60
+ export const VMWARE_SNAPSHOT_METRIC_NAMES = new Set([
61
+ // ESXi host
62
+ "vcenter.host.cpu.utilization",
63
+ "vcenter.host.cpu.usage",
64
+ "vcenter.host.cpu.capacity",
65
+ "vcenter.host.memory.usage",
66
+ "vcenter.host.memory.capacity",
67
+ "vcenter.host.memory.utilization",
68
+ // Virtual machine (and VM template: vcenter.vm.disk.usage only)
69
+ "vcenter.vm.cpu.utilization",
70
+ "vcenter.vm.cpu.usage",
71
+ "vcenter.vm.cpu.readiness",
72
+ "vcenter.vm.memory.usage",
73
+ "vcenter.vm.memory.utilization",
74
+ "vcenter.vm.memory.ballooned",
75
+ "vcenter.vm.memory.swapped",
76
+ "vcenter.vm.disk.usage",
77
+ "vcenter.vm.disk.utilization",
78
+ // Datastore
79
+ "vcenter.datastore.disk.usage",
80
+ "vcenter.datastore.disk.utilization",
81
+ // Cluster
82
+ "vcenter.cluster.cpu.limit",
83
+ "vcenter.cluster.cpu.effective",
84
+ "vcenter.cluster.memory.limit",
85
+ "vcenter.cluster.memory.effective",
86
+ "vcenter.cluster.host.count",
87
+ "vcenter.cluster.vm.count",
88
+ "vcenter.cluster.vm_template.count",
89
+ // Datacenter
90
+ "vcenter.datacenter.cpu.limit",
91
+ "vcenter.datacenter.memory.limit",
92
+ "vcenter.datacenter.disk.space",
93
+ "vcenter.datacenter.host.count",
94
+ "vcenter.datacenter.vm.count",
95
+ "vcenter.datacenter.cluster.count",
96
+ "vcenter.datacenter.datastore.count",
97
+ // Resource pool
98
+ "vcenter.resource_pool.cpu.usage",
99
+ "vcenter.resource_pool.memory.usage",
100
+ "vcenter.resource_pool.memory.ballooned",
101
+ "vcenter.resource_pool.memory.swapped",
102
+ ]);
103
+ // The receiver reports host / VM / resource-pool memory in MiBy.
104
+ const MEBIBYTE = 1024 * 1024;
105
+ /*
106
+ * Same finite-or-null coercion contract as the ingest service's
107
+ * toNumberOrNull (NaN / ±Infinity fold to null so a malformed
108
+ * datapoint is skipped rather than poisoning a snapshot column).
109
+ */
110
+ function toNumberOrNull(value) {
111
+ if (typeof value === "number") {
112
+ return Number.isFinite(value) ? value : null;
113
+ }
114
+ if (typeof value === "string") {
115
+ const parsed = Number.parseFloat(value);
116
+ return Number.isFinite(parsed) ? parsed : null;
117
+ }
118
+ return null;
119
+ }
120
+ /*
121
+ * Same fall-back-to-now parse contract as the ingest service's
122
+ * safeParseUnixNano — only the Date is needed on the snapshot path.
123
+ */
124
+ function parseUnixNanoToDate(value, context) {
125
+ if (value !== undefined && value !== null) {
126
+ try {
127
+ if (typeof value === "string") {
128
+ const trimmed = value.trim();
129
+ if (trimmed === "" || isNaN(Number(trimmed))) {
130
+ throw new Error(`Invalid timestamp string: ${value}`);
131
+ }
132
+ /*
133
+ * Hand the raw nanosecond string to fromUnixNano so it can divide
134
+ * with BigInt — nanosecond epochs exceed Number.MAX_SAFE_INTEGER, so
135
+ * parsing to a float here would drop up to a full millisecond.
136
+ */
137
+ return OneUptimeDate.fromUnixNano(trimmed);
138
+ }
139
+ if (typeof value === "number") {
140
+ if (!Number.isFinite(value)) {
141
+ throw new Error(`Invalid timestamp number: ${value}`);
142
+ }
143
+ return OneUptimeDate.fromUnixNano(value);
144
+ }
145
+ }
146
+ catch (error) {
147
+ logger.warn(`Error processing ${context}: ${error instanceof Error ? error.message : String(error)}, using current time`);
148
+ }
149
+ }
150
+ return OneUptimeDate.getCurrentDate();
151
+ }
152
+ /*
153
+ * Read one OTLP AnyValue as a trimmed string. Unlike the Proxmox reader
154
+ * this also accepts boolValue / intValue / doubleValue: the vcenter
155
+ * receiver's `effective` dimension is a real boolean on the wire and
156
+ * OneUptime stores it as the string "true" / "false" (which is also how
157
+ * monitor criteria filter it).
158
+ */
159
+ function anyValueToString(value) {
160
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
161
+ return null;
162
+ }
163
+ const anyValue = value;
164
+ if (typeof anyValue["stringValue"] === "string") {
165
+ const trimmed = anyValue["stringValue"].trim();
166
+ return trimmed ? trimmed : null;
167
+ }
168
+ if (typeof anyValue["boolValue"] === "boolean") {
169
+ return anyValue["boolValue"] ? "true" : "false";
170
+ }
171
+ if (typeof anyValue["intValue"] === "number" ||
172
+ typeof anyValue["intValue"] === "string") {
173
+ const trimmed = String(anyValue["intValue"]).trim();
174
+ return trimmed ? trimmed : null;
175
+ }
176
+ if (typeof anyValue["doubleValue"] === "number") {
177
+ return String(anyValue["doubleValue"]);
178
+ }
179
+ return null;
180
+ }
181
+ // Same trim-or-null read contract as OtelIngestBaseService.getStringAttribute.
182
+ function getDatapointAttribute(attributes, key) {
183
+ for (const attribute of attributes) {
184
+ if (attribute["key"] === key) {
185
+ const parsed = anyValueToString(attribute["value"]);
186
+ if (parsed !== null) {
187
+ return parsed;
188
+ }
189
+ }
190
+ }
191
+ return null;
192
+ }
193
+ /*
194
+ * Build the UNprefixed resource attribute map the buffer function reads
195
+ * from the raw OTLP resource attribute array. Only scalar values are
196
+ * kept (identity attributes are all strings); nested / array values are
197
+ * not vSphere identity and are dropped.
198
+ */
199
+ export function toVMwareResourceAttributeMap(attributes) {
200
+ const map = {};
201
+ if (!attributes) {
202
+ return map;
203
+ }
204
+ for (const attribute of attributes) {
205
+ const key = attribute["key"];
206
+ if (typeof key !== "string" || !key) {
207
+ continue;
208
+ }
209
+ const parsed = anyValueToString(attribute["value"]);
210
+ if (parsed !== null) {
211
+ map[key] = parsed;
212
+ }
213
+ }
214
+ return map;
215
+ }
216
+ /*
217
+ * Read a resource attribute by its semconv-native key. Accepts both the
218
+ * bare key (the map toVMwareResourceAttributeMap builds) and the
219
+ * `resource.`-prefixed spelling (the merged metricAttributes map the
220
+ * K8s / cloud scans read), so either input shape resolves identically.
221
+ */
222
+ function readResourceAttribute(attributes, key) {
223
+ const candidates = [
224
+ attributes[key],
225
+ attributes[`resource.${key}`],
226
+ ];
227
+ for (const raw of candidates) {
228
+ if (typeof raw === "string") {
229
+ const trimmed = raw.trim();
230
+ if (trimmed) {
231
+ return trimmed;
232
+ }
233
+ }
234
+ else if (typeof raw === "number" && Number.isFinite(raw)) {
235
+ return String(raw);
236
+ }
237
+ else if (typeof raw === "boolean") {
238
+ return raw ? "true" : "false";
239
+ }
240
+ }
241
+ return null;
242
+ }
243
+ /*
244
+ * Hex chars of sha1 kept in a bound externalId. 16 hex = 64 bits: the
245
+ * chance of two distinct paths in one vCenter sharing a prefix AND a
246
+ * suffix is negligible, and the id stays readable at a glance.
247
+ */
248
+ const BOUND_EXTERNAL_ID_HASH_CHARS = 16;
249
+ const BOUND_EXTERNAL_ID_SEPARATOR = "~";
250
+ /*
251
+ * Bound an externalId to VMwareResource.externalId's ShortText (100)
252
+ * column WITHOUT letting two distinct ids collapse onto the same key.
253
+ *
254
+ * VMwareResourceService clamps identity to 100 chars with
255
+ * truncateShortText, and the ingest buffer keys on the raw id, so a
256
+ * plain clamp would let two vSphere objects whose ids only differ past
257
+ * character 100 (sibling sub-pools under a long
258
+ * `/<dc>/host/<cluster>/Resources/<pool>/<subpool>` path — vSphere
259
+ * allows 80-char datacenter / cluster / pool names — or the
260
+ * vm/<dc>/<host>/<name> fallback) share one row: bulkUpsert would merge
261
+ * them (or, when both land in the same INSERT chunk, fail the whole
262
+ * chunk with Postgres 21000 "ON CONFLICT DO UPDATE command cannot
263
+ * affect row a second time"), and the vCenter resourcePoolCount would
264
+ * disagree with the inventory list.
265
+ *
266
+ * Ids of <= 100 chars are returned unchanged (every Proxmox-style short
267
+ * id, every vm/<instance uuid>). Longer ids become a deterministic
268
+ * `<first 83 chars>~<first 16 hex of sha1(full id)>` — exactly 100
269
+ * chars, stable across calls and processes, collision-resistant because
270
+ * the suffix hashes the FULL id. The full inventory path is still
271
+ * stored in the LongText resourcePoolPath column for display.
272
+ */
273
+ export function boundVMwareExternalId(id) {
274
+ const maxLength = ColumnLength.ShortText;
275
+ if (id.length <= maxLength) {
276
+ return id;
277
+ }
278
+ const digest = crypto
279
+ .createHash("sha1")
280
+ .update(id)
281
+ .digest("hex")
282
+ .substring(0, BOUND_EXTERNAL_ID_HASH_CHARS);
283
+ const prefixLength = maxLength - BOUND_EXTERNAL_ID_SEPARATOR.length - digest.length;
284
+ return `${id.substring(0, prefixLength)}${BOUND_EXTERNAL_ID_SEPARATOR}${digest}`;
285
+ }
286
+ /*
287
+ * externalId scheme (immutable, collision-free within a vCenter; the
288
+ * detail route URL-encodes it as a path param):
289
+ * datacenter/<dc> cluster/<dc>/<cluster>
290
+ * host/<dc>/<host> vm/<vcenter.vm.id | vcenter.vm_template.id>
291
+ * datastore/<dc>/<datastore> resourcepool/<inventory path>
292
+ * A missing component (a receiver build that omits an attribute) is
293
+ * dropped rather than rendered as an empty segment, so the id stays
294
+ * deterministic and readable ("host/esx1" instead of "host//esx1").
295
+ * The joined id is then passed through boundVMwareExternalId, so every
296
+ * kind — not just resource pools — fits the 100-char column without
297
+ * two long ids ever clamping to the same key.
298
+ */
299
+ function joinExternalId(prefix, ...parts) {
300
+ const present = parts.filter((part) => {
301
+ return part !== null && part !== "";
302
+ });
303
+ return boundVMwareExternalId([prefix, ...present].join("/"));
304
+ }
305
+ /*
306
+ * Resolve which vSphere object an OTLP resource describes, most specific
307
+ * first (a VM resource also carries vcenter.host.name, a host resource
308
+ * also carries vcenter.cluster.name, and everything carries
309
+ * vcenter.datacenter.name):
310
+ * 1. vcenter.vm.id / vcenter.vm.name → VirtualMachine (isTemplate=false)
311
+ * 2. vcenter.vm_template.id / .name → VirtualMachine (isTemplate=true)
312
+ * 3. vcenter.resource_pool.inventory_path → ResourcePool
313
+ * 4. vcenter.host.name → Host
314
+ * 5. vcenter.datastore.name → Datastore
315
+ * 6. vcenter.cluster.name → Cluster
316
+ * 7. only vcenter.datacenter.name → Datacenter
317
+ * Anything with none of these is not an inventory row (null).
318
+ */
319
+ export function resolveVMwareResourceIdentity(resourceAttributes) {
320
+ const read = (key) => {
321
+ return readResourceAttribute(resourceAttributes, key);
322
+ };
323
+ const datacenterName = read("vcenter.datacenter.name");
324
+ const clusterName = read("vcenter.cluster.name");
325
+ const hostName = read("vcenter.host.name");
326
+ const resourcePoolName = read("vcenter.resource_pool.name");
327
+ const resourcePoolPath = read("vcenter.resource_pool.inventory_path");
328
+ const virtualAppName = read("vcenter.virtual_app.name");
329
+ const virtualAppPath = read("vcenter.virtual_app.inventory_path");
330
+ const base = {
331
+ datacenterName,
332
+ clusterName,
333
+ hostName,
334
+ resourcePoolName,
335
+ /*
336
+ * The inventory path column doubles for vApps: a VM inside a vApp
337
+ * carries vcenter.virtual_app.* instead of vcenter.resource_pool.*.
338
+ */
339
+ resourcePoolPath: resourcePoolPath !== null && resourcePoolPath !== void 0 ? resourcePoolPath : virtualAppPath,
340
+ virtualAppName,
341
+ vmInstanceUuid: null,
342
+ isTemplate: null,
343
+ };
344
+ // 1. Virtual machine.
345
+ const vmId = read("vcenter.vm.id");
346
+ const vmName = read("vcenter.vm.name");
347
+ if (vmId || vmName) {
348
+ return Object.assign(Object.assign({}, base), { kind: VMwareResourceKind.VirtualMachine, externalId: vmId
349
+ ? joinExternalId("vm", vmId)
350
+ : joinExternalId("vm", datacenterName, hostName, vmName), name: vmName, vmInstanceUuid: vmId, isTemplate: false });
351
+ }
352
+ // 2. VM template.
353
+ const templateId = read("vcenter.vm_template.id");
354
+ const templateName = read("vcenter.vm_template.name");
355
+ if (templateId || templateName) {
356
+ return Object.assign(Object.assign({}, base), { kind: VMwareResourceKind.VirtualMachine, externalId: templateId
357
+ ? joinExternalId("vm", templateId)
358
+ : joinExternalId("vm", datacenterName, hostName, templateName), name: templateName, vmInstanceUuid: templateId, isTemplate: true });
359
+ }
360
+ // 3. Resource pool (under a cluster, or on a standalone ESXi host).
361
+ if (resourcePoolPath) {
362
+ return Object.assign(Object.assign({}, base), { kind: VMwareResourceKind.ResourcePool, externalId: joinExternalId("resourcepool", resourcePoolPath), name: resourcePoolName });
363
+ }
364
+ // 4. ESXi host.
365
+ if (hostName) {
366
+ return Object.assign(Object.assign({}, base), { kind: VMwareResourceKind.Host, externalId: joinExternalId("host", datacenterName, hostName), name: hostName });
367
+ }
368
+ // 5. Datastore.
369
+ const datastoreName = read("vcenter.datastore.name");
370
+ if (datastoreName) {
371
+ return Object.assign(Object.assign({}, base), { kind: VMwareResourceKind.Datastore, externalId: joinExternalId("datastore", datacenterName, datastoreName), name: datastoreName });
372
+ }
373
+ // 6. Cluster.
374
+ if (clusterName) {
375
+ return Object.assign(Object.assign({}, base), { kind: VMwareResourceKind.Cluster, externalId: joinExternalId("cluster", datacenterName, clusterName), name: clusterName });
376
+ }
377
+ // 7. Datacenter.
378
+ if (datacenterName) {
379
+ return Object.assign(Object.assign({}, base), { kind: VMwareResourceKind.Datacenter, externalId: joinExternalId("datacenter", datacenterName), name: datacenterName });
380
+ }
381
+ return null;
382
+ }
383
+ export function getOrCreateVMwareVCenterSnapshot(buffer, vcenterIdStr) {
384
+ let entry = buffer.get(vcenterIdStr);
385
+ if (!entry) {
386
+ entry = {
387
+ sawDatacenter: false,
388
+ sawCluster: false,
389
+ sawHost: false,
390
+ sawVirtualMachine: false,
391
+ sawDatastore: false,
392
+ sawResourcePool: false,
393
+ };
394
+ buffer.set(vcenterIdStr, entry);
395
+ }
396
+ return entry;
397
+ }
398
+ function emptyPatch(identity, observedAt) {
399
+ return Object.assign(Object.assign({}, identity), { sawCpuMetric: false, sawNonCpuMetric: false, latestCpuPercent: null, latestCpuMhz: null, cpuCapacityMhz: null, cpuEffectiveMhz: null, latestMemoryBytes: null, maxMemoryBytes: null, memoryEffectiveBytes: null, latestMemoryPercent: null, diskUsedBytes: null, diskAvailableBytes: null, latestDiskPercent: null, cpuReadinessPercent: null, memoryBalloonedBytes: null, memorySwappedBytes: null, hostCount: null, effectiveHostCount: null, poweredOnHostCount: null, vmCount: null, poweredOnVmCount: null, vmTemplateCount: null, datastoreCount: null, clusterCount: null, observedAt });
400
+ }
401
+ function wholeBytes(value) {
402
+ return Math.max(0, Math.trunc(value));
403
+ }
404
+ function mebibytesToBytes(value) {
405
+ return wholeBytes(value * MEBIBYTE);
406
+ }
407
+ function wholeCount(value) {
408
+ return Math.max(0, Math.trunc(value));
409
+ }
410
+ /*
411
+ * The vSphere object kind a metric name belongs to, by its second
412
+ * segment. A metric folded onto a resource of another kind (impossible
413
+ * from the stock receiver, but cheap to guard) is dropped rather than
414
+ * mis-mapped: a VM resource carries vcenter.host.name too, so the guard
415
+ * is what keeps a hand-rolled vcenter.host.* series from polluting a
416
+ * VM row.
417
+ */
418
+ function metricKindOf(metricName) {
419
+ if (metricName.startsWith("vcenter.host.")) {
420
+ return VMwareResourceKind.Host;
421
+ }
422
+ if (metricName.startsWith("vcenter.vm.")) {
423
+ return VMwareResourceKind.VirtualMachine;
424
+ }
425
+ if (metricName.startsWith("vcenter.datastore.")) {
426
+ return VMwareResourceKind.Datastore;
427
+ }
428
+ if (metricName.startsWith("vcenter.cluster.")) {
429
+ return VMwareResourceKind.Cluster;
430
+ }
431
+ if (metricName.startsWith("vcenter.datacenter.")) {
432
+ return VMwareResourceKind.Datacenter;
433
+ }
434
+ if (metricName.startsWith("vcenter.resource_pool.")) {
435
+ return VMwareResourceKind.ResourcePool;
436
+ }
437
+ return null;
438
+ }
439
+ function markKindSeen(snap, kind) {
440
+ switch (kind) {
441
+ case VMwareResourceKind.Datacenter:
442
+ snap.sawDatacenter = true;
443
+ break;
444
+ case VMwareResourceKind.Cluster:
445
+ snap.sawCluster = true;
446
+ break;
447
+ case VMwareResourceKind.Host:
448
+ snap.sawHost = true;
449
+ break;
450
+ case VMwareResourceKind.VirtualMachine:
451
+ snap.sawVirtualMachine = true;
452
+ break;
453
+ case VMwareResourceKind.Datastore:
454
+ snap.sawDatastore = true;
455
+ break;
456
+ case VMwareResourceKind.ResourcePool:
457
+ snap.sawResourcePool = true;
458
+ break;
459
+ default:
460
+ break;
461
+ }
462
+ }
463
+ /*
464
+ * Fold one vcenter.* datapoint into the per-vCenter buffers. Identity
465
+ * comes from the RESOURCE attributes (pass the raw, unprefixed map from
466
+ * toVMwareResourceAttributeMap — the `resource.`-prefixed spelling is
467
+ * accepted too); the datapoint attributes only carry fan-out dimensions.
468
+ */
469
+ export function bufferVMwareSnapshotMetric(data) {
470
+ const valueFromInt = toNumberOrNull(data.datapoint["asInt"]);
471
+ const valueFromDouble = toNumberOrNull(data.datapoint["asDouble"]);
472
+ const rawValue = valueFromDouble !== null && valueFromDouble !== void 0 ? valueFromDouble : valueFromInt;
473
+ if (rawValue === null) {
474
+ return;
475
+ }
476
+ const identity = resolveVMwareResourceIdentity(data.resourceAttributes);
477
+ if (!identity) {
478
+ return;
479
+ }
480
+ const metricKind = metricKindOf(data.metricName);
481
+ if (metricKind === null || metricKind !== identity.kind) {
482
+ return;
483
+ }
484
+ const observedAt = parseUnixNanoToDate(data.datapoint["timeUnixNano"], "vcenter snapshot timeUnixNano");
485
+ const dpAttributes = data.datapoint["attributes"] || [];
486
+ const patch = emptyPatch(identity, observedAt);
487
+ const summed = (matches) => {
488
+ return { value: matches ? wholeCount(rawValue) : 0, observedAt };
489
+ };
490
+ switch (data.metricName) {
491
+ // ---- ESXi host -------------------------------------------------
492
+ case "vcenter.host.cpu.utilization": {
493
+ patch.latestCpuPercent = rawValue;
494
+ break;
495
+ }
496
+ case "vcenter.host.cpu.usage": {
497
+ patch.latestCpuMhz = wholeCount(rawValue);
498
+ break;
499
+ }
500
+ case "vcenter.host.cpu.capacity": {
501
+ patch.cpuCapacityMhz = wholeCount(rawValue);
502
+ break;
503
+ }
504
+ case "vcenter.host.memory.usage": {
505
+ patch.latestMemoryBytes = mebibytesToBytes(rawValue);
506
+ break;
507
+ }
508
+ case "vcenter.host.memory.capacity": {
509
+ patch.maxMemoryBytes = mebibytesToBytes(rawValue);
510
+ break;
511
+ }
512
+ case "vcenter.host.memory.utilization": {
513
+ patch.latestMemoryPercent = rawValue;
514
+ break;
515
+ }
516
+ // ---- Virtual machine ------------------------------------------
517
+ case "vcenter.vm.cpu.utilization": {
518
+ patch.latestCpuPercent = rawValue;
519
+ patch.sawCpuMetric = true;
520
+ break;
521
+ }
522
+ case "vcenter.vm.cpu.usage": {
523
+ patch.latestCpuMhz = wholeCount(rawValue);
524
+ patch.sawCpuMetric = true;
525
+ break;
526
+ }
527
+ case "vcenter.vm.cpu.readiness": {
528
+ patch.cpuReadinessPercent = rawValue;
529
+ patch.sawCpuMetric = true;
530
+ break;
531
+ }
532
+ case "vcenter.vm.memory.usage": {
533
+ patch.latestMemoryBytes = mebibytesToBytes(rawValue);
534
+ patch.sawNonCpuMetric = true;
535
+ break;
536
+ }
537
+ case "vcenter.vm.memory.utilization": {
538
+ patch.latestMemoryPercent = rawValue;
539
+ patch.sawNonCpuMetric = true;
540
+ break;
541
+ }
542
+ case "vcenter.vm.memory.ballooned": {
543
+ patch.memoryBalloonedBytes = mebibytesToBytes(rawValue);
544
+ patch.sawNonCpuMetric = true;
545
+ break;
546
+ }
547
+ case "vcenter.vm.memory.swapped": {
548
+ patch.memorySwappedBytes = mebibytesToBytes(rawValue);
549
+ patch.sawNonCpuMetric = true;
550
+ break;
551
+ }
552
+ case "vcenter.vm.disk.usage":
553
+ case "vcenter.datastore.disk.usage":
554
+ case "vcenter.datacenter.disk.space": {
555
+ /*
556
+ * Fan-out over disk_state: one datapoint for `used`, one for
557
+ * `available`. Any other (or missing) state carries no signal.
558
+ */
559
+ const diskState = getDatapointAttribute(dpAttributes, "disk_state");
560
+ if (diskState === "used") {
561
+ patch.diskUsedBytes = wholeBytes(rawValue);
562
+ }
563
+ else if (diskState === "available") {
564
+ patch.diskAvailableBytes = wholeBytes(rawValue);
565
+ }
566
+ else {
567
+ return;
568
+ }
569
+ if (identity.kind === VMwareResourceKind.VirtualMachine) {
570
+ patch.sawNonCpuMetric = true;
571
+ }
572
+ break;
573
+ }
574
+ case "vcenter.vm.disk.utilization":
575
+ case "vcenter.datastore.disk.utilization": {
576
+ patch.latestDiskPercent = rawValue;
577
+ if (identity.kind === VMwareResourceKind.VirtualMachine) {
578
+ patch.sawNonCpuMetric = true;
579
+ }
580
+ break;
581
+ }
582
+ // ---- Cluster ---------------------------------------------------
583
+ case "vcenter.cluster.cpu.limit":
584
+ case "vcenter.datacenter.cpu.limit": {
585
+ patch.cpuCapacityMhz = wholeCount(rawValue);
586
+ break;
587
+ }
588
+ case "vcenter.cluster.cpu.effective": {
589
+ patch.cpuEffectiveMhz = wholeCount(rawValue);
590
+ break;
591
+ }
592
+ case "vcenter.cluster.memory.limit":
593
+ case "vcenter.datacenter.memory.limit": {
594
+ // Already bytes (unlike host / VM memory, which is MiBy).
595
+ patch.maxMemoryBytes = wholeBytes(rawValue);
596
+ break;
597
+ }
598
+ case "vcenter.cluster.memory.effective": {
599
+ patch.memoryEffectiveBytes = wholeBytes(rawValue);
600
+ break;
601
+ }
602
+ case "vcenter.cluster.host.count": {
603
+ const effective = getDatapointAttribute(dpAttributes, "effective");
604
+ patch.hostCount = summed(true);
605
+ patch.effectiveHostCount = summed(effective === "true");
606
+ break;
607
+ }
608
+ case "vcenter.cluster.vm.count": {
609
+ const powerState = getDatapointAttribute(dpAttributes, "power_state");
610
+ patch.vmCount = summed(true);
611
+ patch.poweredOnVmCount = summed(powerState === "on");
612
+ break;
613
+ }
614
+ case "vcenter.cluster.vm_template.count": {
615
+ patch.vmTemplateCount = summed(true);
616
+ break;
617
+ }
618
+ // ---- Datacenter ------------------------------------------------
619
+ case "vcenter.datacenter.host.count": {
620
+ const powerState = getDatapointAttribute(dpAttributes, "power_state");
621
+ patch.hostCount = summed(true);
622
+ patch.poweredOnHostCount = summed(powerState === "on");
623
+ break;
624
+ }
625
+ case "vcenter.datacenter.vm.count": {
626
+ const powerState = getDatapointAttribute(dpAttributes, "power_state");
627
+ patch.vmCount = summed(true);
628
+ patch.poweredOnVmCount = summed(powerState === "on");
629
+ break;
630
+ }
631
+ case "vcenter.datacenter.cluster.count": {
632
+ patch.clusterCount = summed(true);
633
+ break;
634
+ }
635
+ case "vcenter.datacenter.datastore.count": {
636
+ patch.datastoreCount = summed(true);
637
+ break;
638
+ }
639
+ // ---- Resource pool ---------------------------------------------
640
+ case "vcenter.resource_pool.cpu.usage": {
641
+ patch.latestCpuMhz = wholeCount(rawValue);
642
+ break;
643
+ }
644
+ case "vcenter.resource_pool.memory.usage": {
645
+ /*
646
+ * Fans out over `type` (guest | host | overhead). The guest
647
+ * consumption is the pool's memory usage; a receiver build without
648
+ * the dimension reports the same number untyped.
649
+ */
650
+ const type = getDatapointAttribute(dpAttributes, "type");
651
+ if (type !== null && type !== "guest") {
652
+ return;
653
+ }
654
+ patch.latestMemoryBytes = mebibytesToBytes(rawValue);
655
+ break;
656
+ }
657
+ case "vcenter.resource_pool.memory.ballooned": {
658
+ patch.memoryBalloonedBytes = mebibytesToBytes(rawValue);
659
+ break;
660
+ }
661
+ case "vcenter.resource_pool.memory.swapped": {
662
+ patch.memorySwappedBytes = mebibytesToBytes(rawValue);
663
+ break;
664
+ }
665
+ default: {
666
+ return;
667
+ }
668
+ }
669
+ const snap = getOrCreateVMwareVCenterSnapshot(data.vcenterBuffer, data.vcenterIdStr);
670
+ markKindSeen(snap, identity.kind);
671
+ foldVMwareResourceSnapshot({
672
+ buffer: data.resourceBuffer,
673
+ vcenterIdStr: data.vcenterIdStr,
674
+ patch,
675
+ });
676
+ }
677
+ /*
678
+ * Summed-count fold: a newer timestamp resets the sum, an equal
679
+ * timestamp adds, an older one is ignored.
680
+ */
681
+ function foldSummedCount(existing, patch) {
682
+ if (patch === null) {
683
+ return existing;
684
+ }
685
+ if (existing === null) {
686
+ return { value: patch.value, observedAt: patch.observedAt };
687
+ }
688
+ if (patch.observedAt > existing.observedAt) {
689
+ return { value: patch.value, observedAt: patch.observedAt };
690
+ }
691
+ if (patch.observedAt.getTime() === existing.observedAt.getTime()) {
692
+ existing.value += patch.value;
693
+ }
694
+ return existing;
695
+ }
696
+ /*
697
+ * Merge a patch into the per-vCenter buffer: identity attributes are
698
+ * first-non-null-wins (stable, and a batch missing an attribute must
699
+ * not blank them), status/metric fields are newest-observedAt-wins
700
+ * (K8s buffer semantics), counts fold per foldSummedCount, and the
701
+ * powered-on flags are sticky for the batch.
702
+ */
703
+ export function foldVMwareResourceSnapshot(data) {
704
+ let perVCenter = data.buffer.get(data.vcenterIdStr);
705
+ if (!perVCenter) {
706
+ perVCenter = new Map();
707
+ data.buffer.set(data.vcenterIdStr, perVCenter);
708
+ }
709
+ const key = `${data.patch.kind}|${data.patch.externalId}`;
710
+ const existing = perVCenter.get(key);
711
+ if (!existing) {
712
+ perVCenter.set(key, data.patch);
713
+ return;
714
+ }
715
+ const patch = data.patch;
716
+ const newer = patch.observedAt >= existing.observedAt;
717
+ // Identity: first-non-null wins.
718
+ const identityFields = [
719
+ "name",
720
+ "datacenterName",
721
+ "clusterName",
722
+ "hostName",
723
+ "resourcePoolName",
724
+ "resourcePoolPath",
725
+ "virtualAppName",
726
+ "vmInstanceUuid",
727
+ ];
728
+ for (const field of identityFields) {
729
+ if (existing[field] === null && patch[field] !== null) {
730
+ existing[field] = patch[field];
731
+ }
732
+ }
733
+ if (existing.isTemplate === null && patch.isTemplate !== null) {
734
+ existing.isTemplate = patch.isTemplate;
735
+ }
736
+ // Powered-on evidence accumulates across the batch.
737
+ existing.sawCpuMetric = existing.sawCpuMetric || patch.sawCpuMetric;
738
+ existing.sawNonCpuMetric = existing.sawNonCpuMetric || patch.sawNonCpuMetric;
739
+ // Status / metrics: newest observation wins.
740
+ const metricFields = [
741
+ "latestCpuPercent",
742
+ "latestCpuMhz",
743
+ "cpuCapacityMhz",
744
+ "cpuEffectiveMhz",
745
+ "latestMemoryBytes",
746
+ "maxMemoryBytes",
747
+ "memoryEffectiveBytes",
748
+ "latestMemoryPercent",
749
+ "diskUsedBytes",
750
+ "diskAvailableBytes",
751
+ "latestDiskPercent",
752
+ "cpuReadinessPercent",
753
+ "memoryBalloonedBytes",
754
+ "memorySwappedBytes",
755
+ ];
756
+ for (const field of metricFields) {
757
+ if (patch[field] !== null && newer) {
758
+ existing[field] = patch[field];
759
+ }
760
+ }
761
+ // Counts: summed across the newest timestamp.
762
+ existing.hostCount = foldSummedCount(existing.hostCount, patch.hostCount);
763
+ existing.effectiveHostCount = foldSummedCount(existing.effectiveHostCount, patch.effectiveHostCount);
764
+ existing.poweredOnHostCount = foldSummedCount(existing.poweredOnHostCount, patch.poweredOnHostCount);
765
+ existing.vmCount = foldSummedCount(existing.vmCount, patch.vmCount);
766
+ existing.poweredOnVmCount = foldSummedCount(existing.poweredOnVmCount, patch.poweredOnVmCount);
767
+ existing.vmTemplateCount = foldSummedCount(existing.vmTemplateCount, patch.vmTemplateCount);
768
+ existing.datastoreCount = foldSummedCount(existing.datastoreCount, patch.datastoreCount);
769
+ existing.clusterCount = foldSummedCount(existing.clusterCount, patch.clusterCount);
770
+ if (patch.observedAt > existing.observedAt) {
771
+ existing.observedAt = patch.observedAt;
772
+ }
773
+ }
774
+ /*
775
+ * Power state is inferred, not reported: the vcenter receiver emits
776
+ * vcenter.vm.cpu.usage / .cpu.utilization / .cpu.readiness ONLY for
777
+ * powered-on virtual machines, and the agent config forbids splitting a
778
+ * collection across exports (no send_batch_max_size), so within one
779
+ * batch:
780
+ * - a VM whose resource carried any vcenter.vm.cpu.* point → true,
781
+ * - a VM whose resource carried memory / disk points but no CPU
782
+ * point → false (off or suspended — the receiver does not
783
+ * distinguish; the UI says "Powered off"),
784
+ * - a template, a non-VM row, or a VM with no VM points at all →
785
+ * null (the upsert COALESCE keeps the last-known value).
786
+ */
787
+ export function computeVMwareIsPoweredOn(entry) {
788
+ if (entry.kind !== VMwareResourceKind.VirtualMachine) {
789
+ return null;
790
+ }
791
+ if (entry.isTemplate === true) {
792
+ return null;
793
+ }
794
+ if (entry.sawCpuMetric) {
795
+ return true;
796
+ }
797
+ if (entry.sawNonCpuMetric) {
798
+ return false;
799
+ }
800
+ return null;
801
+ }
802
+ function countValue(count) {
803
+ return count === null ? null : count.value;
804
+ }
805
+ /*
806
+ * Project one folded entry onto the VMwareResource latest-metric mirror
807
+ * columns, applying the derivations the §3 table specifies:
808
+ * - maxDiskBytes = used + available (null unless both arrived),
809
+ * - Datacenter latestDiskPercent = used ÷ (used + available) × 100,
810
+ * - Host maxMemoryBytes falls back to usage × 100 ÷ utilization when
811
+ * vcenter.host.memory.capacity is not enabled on the receiver,
812
+ * - VirtualMachine maxMemoryBytes is always that derivation (the
813
+ * receiver has no vm.memory.capacity metric).
814
+ */
815
+ export function deriveVMwareResourceLatestMetric(entry) {
816
+ const diskBytes = entry.diskUsedBytes;
817
+ const maxDiskBytes = entry.diskUsedBytes !== null && entry.diskAvailableBytes !== null
818
+ ? entry.diskUsedBytes + entry.diskAvailableBytes
819
+ : null;
820
+ let diskPercent = entry.latestDiskPercent;
821
+ if (diskPercent === null &&
822
+ entry.kind === VMwareResourceKind.Datacenter &&
823
+ diskBytes !== null &&
824
+ maxDiskBytes !== null &&
825
+ maxDiskBytes > 0) {
826
+ diskPercent = (diskBytes / maxDiskBytes) * 100;
827
+ }
828
+ let maxMemoryBytes = entry.maxMemoryBytes;
829
+ if (maxMemoryBytes === null &&
830
+ (entry.kind === VMwareResourceKind.Host ||
831
+ entry.kind === VMwareResourceKind.VirtualMachine) &&
832
+ entry.latestMemoryBytes !== null &&
833
+ entry.latestMemoryPercent !== null &&
834
+ entry.latestMemoryPercent > 0) {
835
+ maxMemoryBytes = Math.trunc((entry.latestMemoryBytes * 100) / entry.latestMemoryPercent);
836
+ }
837
+ return {
838
+ kind: entry.kind,
839
+ externalId: entry.externalId,
840
+ cpuPercent: entry.latestCpuPercent,
841
+ cpuMhz: entry.latestCpuMhz,
842
+ cpuCapacityMhz: entry.cpuCapacityMhz,
843
+ cpuEffectiveMhz: entry.cpuEffectiveMhz,
844
+ memoryBytes: entry.latestMemoryBytes,
845
+ maxMemoryBytes,
846
+ memoryEffectiveBytes: entry.memoryEffectiveBytes,
847
+ memoryPercent: entry.latestMemoryPercent,
848
+ diskBytes,
849
+ maxDiskBytes,
850
+ diskPercent,
851
+ cpuReadinessPercent: entry.cpuReadinessPercent,
852
+ memoryBalloonedBytes: entry.memoryBalloonedBytes,
853
+ memorySwappedBytes: entry.memorySwappedBytes,
854
+ hostCount: countValue(entry.hostCount),
855
+ effectiveHostCount: countValue(entry.effectiveHostCount),
856
+ poweredOnHostCount: countValue(entry.poweredOnHostCount),
857
+ vmCount: countValue(entry.vmCount),
858
+ poweredOnVmCount: countValue(entry.poweredOnVmCount),
859
+ vmTemplateCount: countValue(entry.vmTemplateCount),
860
+ datastoreCount: countValue(entry.datastoreCount),
861
+ clusterCount: countValue(entry.clusterCount),
862
+ observedAt: entry.observedAt,
863
+ };
864
+ }
865
+ /*
866
+ * Derive the VMwareVCenter snapshot columns from one folded batch.
867
+ * Every count is only set when the batch carried at least one resource
868
+ * of that kind (the saw* flags) — never zero a count on a partial
869
+ * batch. Datastore capacity / used totals additionally require at
870
+ * least one datastore row that actually carried a disk_state series,
871
+ * so a batch of utilization-only datastore points cannot collapse the
872
+ * totals to 0. Returns an object whose keys are exactly the columns to
873
+ * write (empty object = nothing to write).
874
+ */
875
+ export function deriveVMwareVCenterSnapshotExtras(entries, snap) {
876
+ const extras = {};
877
+ const ofKind = (kind) => {
878
+ return entries.filter((e) => {
879
+ return e.kind === kind;
880
+ });
881
+ };
882
+ if (snap === null || snap === void 0 ? void 0 : snap.sawDatacenter) {
883
+ extras.datacenterCount = ofKind(VMwareResourceKind.Datacenter).length;
884
+ }
885
+ if (snap === null || snap === void 0 ? void 0 : snap.sawCluster) {
886
+ extras.clusterCount = ofKind(VMwareResourceKind.Cluster).length;
887
+ }
888
+ if (snap === null || snap === void 0 ? void 0 : snap.sawHost) {
889
+ extras.hostCount = ofKind(VMwareResourceKind.Host).length;
890
+ }
891
+ if (snap === null || snap === void 0 ? void 0 : snap.sawVirtualMachine) {
892
+ const vms = ofKind(VMwareResourceKind.VirtualMachine).filter((e) => {
893
+ return e.isTemplate !== true;
894
+ });
895
+ extras.vmCount = vms.length;
896
+ extras.poweredOnVmCount = vms.filter((e) => {
897
+ return computeVMwareIsPoweredOn(e) === true;
898
+ }).length;
899
+ }
900
+ if (snap === null || snap === void 0 ? void 0 : snap.sawDatastore) {
901
+ const datastores = ofKind(VMwareResourceKind.Datastore);
902
+ extras.datastoreCount = datastores.length;
903
+ const withCapacity = datastores
904
+ .map((e) => {
905
+ return deriveVMwareResourceLatestMetric(e);
906
+ })
907
+ .filter((m) => {
908
+ return m.maxDiskBytes !== null;
909
+ });
910
+ if (withCapacity.length > 0) {
911
+ extras.datastoreCapacityBytes = withCapacity.reduce((sum, m) => {
912
+ return sum + m.maxDiskBytes;
913
+ }, 0);
914
+ }
915
+ const withUsed = datastores
916
+ .map((e) => {
917
+ return deriveVMwareResourceLatestMetric(e);
918
+ })
919
+ .filter((m) => {
920
+ return m.diskBytes !== null;
921
+ });
922
+ if (withUsed.length > 0) {
923
+ extras.datastoreUsedBytes = withUsed.reduce((sum, m) => {
924
+ return sum + m.diskBytes;
925
+ }, 0);
926
+ }
927
+ }
928
+ if (snap === null || snap === void 0 ? void 0 : snap.sawResourcePool) {
929
+ extras.resourcePoolCount = ofKind(VMwareResourceKind.ResourcePool).length;
930
+ }
931
+ return extras;
932
+ }
933
+ //# sourceMappingURL=VMwareSnapshotScan.js.map