@oneuptime/common 14.0.10 → 14.0.11

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 (837) hide show
  1. package/Models/DatabaseModels/AIConversation.ts +127 -1
  2. package/Models/DatabaseModels/CephCluster.ts +12 -0
  3. package/Models/DatabaseModels/CloudResource.ts +12 -0
  4. package/Models/DatabaseModels/DatabaseServer.ts +12 -0
  5. package/Models/DatabaseModels/DockerHost.ts +12 -0
  6. package/Models/DatabaseModels/DockerSwarmCluster.ts +12 -0
  7. package/Models/DatabaseModels/GlobalOidc.ts +0 -4
  8. package/Models/DatabaseModels/GlobalOidcProject.ts +0 -4
  9. package/Models/DatabaseModels/GlobalSso.ts +0 -4
  10. package/Models/DatabaseModels/GlobalSsoProject.ts +0 -4
  11. package/Models/DatabaseModels/Host.ts +12 -0
  12. package/Models/DatabaseModels/IncidentForm.ts +594 -0
  13. package/Models/DatabaseModels/IncidentFormSubmission.ts +283 -0
  14. package/Models/DatabaseModels/IncidentTemplate.ts +59 -0
  15. package/Models/DatabaseModels/Index.ts +14 -0
  16. package/Models/DatabaseModels/IoTFleet.ts +12 -0
  17. package/Models/DatabaseModels/KubernetesCluster.ts +12 -0
  18. package/Models/DatabaseModels/MessageQueue.ts +1102 -0
  19. package/Models/DatabaseModels/MessageQueueLabelRule.ts +553 -0
  20. package/Models/DatabaseModels/MessageQueueOwnerRule.ts +633 -0
  21. package/Models/DatabaseModels/MessageQueueOwnerTeam.ts +491 -0
  22. package/Models/DatabaseModels/MessageQueueOwnerUser.ts +490 -0
  23. package/Models/DatabaseModels/PodmanHost.ts +12 -0
  24. package/Models/DatabaseModels/Project.ts +59 -0
  25. package/Models/DatabaseModels/ProjectOidc.ts +0 -4
  26. package/Models/DatabaseModels/ProjectSso.ts +0 -4
  27. package/Models/DatabaseModels/ProxmoxCluster.ts +12 -0
  28. package/Models/DatabaseModels/RumApplication.ts +12 -0
  29. package/Models/DatabaseModels/ServerlessFunction.ts +12 -0
  30. package/Models/DatabaseModels/Service.ts +12 -0
  31. package/Models/DatabaseModels/StatusPageOidc.ts +0 -4
  32. package/Models/DatabaseModels/StatusPageSso.ts +0 -4
  33. package/Models/DatabaseModels/TeamComplianceSetting.ts +47 -2
  34. package/Models/DatabaseModels/VMwareVCenter.ts +12 -0
  35. package/Server/API/AIChatAPI.ts +13 -114
  36. package/Server/API/AIInvestigationAPI.ts +3 -3
  37. package/Server/API/AIInvestigationConversationAPI.ts +266 -0
  38. package/Server/API/IncidentFormAPI.ts +376 -0
  39. package/Server/API/ProjectOIDC.ts +16 -25
  40. package/Server/API/ProjectSSO.ts +16 -24
  41. package/Server/API/StatusPageAPI.ts +42 -77
  42. package/Server/Enterprise/EnterpriseEdition.ts +93 -28
  43. package/Server/Enterprise/EnterpriseFeature.ts +25 -3
  44. package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +1 -1
  45. package/Server/Enterprise/EnterpriseServerModule.ts +4 -1
  46. package/Server/EnvironmentConfig.ts +1 -1
  47. package/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.ts +129 -0
  48. package/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.ts +52 -0
  49. package/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.ts +75 -0
  50. package/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.ts +477 -0
  51. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  52. package/Server/Middleware/IncidentFormRateLimit.ts +847 -0
  53. package/Server/Middleware/UserAuthorization.ts +16 -38
  54. package/Server/Services/AIService.ts +10 -13
  55. package/Server/Services/IncidentCustomFieldService.ts +112 -2
  56. package/Server/Services/IncidentEpisodeMemberService.ts +24 -4
  57. package/Server/Services/IncidentEpisodeService.ts +10 -1
  58. package/Server/Services/IncidentFormService.ts +1566 -0
  59. package/Server/Services/IncidentFormSubmissionService.ts +97 -0
  60. package/Server/Services/IncidentGroupingEngineService.ts +45 -8
  61. package/Server/Services/IncidentService.ts +123 -5
  62. package/Server/Services/IncidentTemplateService.ts +22 -0
  63. package/Server/Services/Index.ts +14 -0
  64. package/Server/Services/MessageQueueLabelRuleEngineService.ts +321 -0
  65. package/Server/Services/MessageQueueLabelRuleService.ts +14 -0
  66. package/Server/Services/MessageQueueOwnerRuleEngineService.ts +412 -0
  67. package/Server/Services/MessageQueueOwnerRuleService.ts +14 -0
  68. package/Server/Services/MessageQueueOwnerTeamService.ts +62 -0
  69. package/Server/Services/MessageQueueOwnerUserService.ts +62 -0
  70. package/Server/Services/MessageQueueService.ts +1463 -0
  71. package/Server/Services/OpenTelemetryIngestService.ts +37 -4
  72. package/Server/Services/ProjectService.ts +0 -59
  73. package/Server/Services/StatusPagePrivateUserService.ts +1 -4
  74. package/Server/Services/StatusPageService.ts +1 -51
  75. package/Server/Services/TeamComplianceSettingService.ts +163 -42
  76. package/Server/Services/UserNotificationRuleService.ts +8 -1
  77. package/Server/Services/WorkspaceNotificationSummaryService.ts +12 -3
  78. package/Server/Types/Database/Permissions/CreatePermission.ts +17 -3
  79. package/Server/Types/Database/Permissions/EditionPermission.ts +140 -38
  80. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +16 -0
  81. package/Server/Types/Database/Permissions/TablePermission.ts +3 -3
  82. package/Server/Types/Database/Permissions/UpdatePermission.ts +20 -6
  83. package/Server/Utils/AI/Chat/AgentContextCompactor.ts +200 -0
  84. package/Server/Utils/AI/Chat/ChatAgentRunner.ts +307 -48
  85. package/Server/Utils/AI/Chat/ChatRunCancellation.ts +156 -0
  86. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +78 -18
  87. package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +1 -1
  88. package/Server/Utils/AI/Chat/ToolOutputPager.ts +322 -0
  89. package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +88 -30
  90. package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +13 -1
  91. package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +0 -32
  92. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +27 -25
  93. package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +7 -1
  94. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +34 -14
  95. package/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.ts +69 -24
  96. package/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.ts +9 -0
  97. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +53 -10
  98. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +27 -10
  99. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +27 -10
  100. package/Server/Utils/AI/SRE/InvestigationQueue.ts +16 -19
  101. package/Server/Utils/AI/SRE/InvestigationThread.ts +646 -0
  102. package/Server/Utils/AI/SRE/InvestigationThreadService.ts +715 -0
  103. package/Server/Utils/AI/Toolbox/Serializer.ts +10 -3
  104. package/Server/Utils/EditionEnforcement.ts +19 -202
  105. package/Server/Utils/LLM/LLMService.ts +259 -63
  106. package/Server/Utils/RelaxedScimTeamLocksReport.ts +245 -0
  107. package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +25 -0
  108. package/Server/Utils/SameOriginRequest.ts +203 -0
  109. package/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.ts +2 -0
  110. package/Server/Utils/Telemetry/EntityRegistry.ts +4 -1
  111. package/Server/Utils/Telemetry/MessageQueueDiscovery.ts +1402 -0
  112. package/Server/Utils/Telemetry/ResourceEntityFilter.ts +4 -1
  113. package/Server/Utils/VendorAssets.ts +3 -3
  114. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +3 -1
  115. package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +3 -1
  116. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +10 -1
  117. package/Tests/App/Accounts/IncidentFormPage.test.tsx +2036 -0
  118. package/Tests/App/Accounts/IncidentFormServerMessages.test.ts +119 -0
  119. package/Tests/App/Accounts/IncidentFormUtils.test.ts +1157 -0
  120. package/Tests/App/Accounts/LoginPasskey.test.tsx +6 -4
  121. package/Tests/App/Accounts/LoginSso.test.tsx +724 -0
  122. package/Tests/App/AdminDashboard/AdminAuthenticationRequireSso.test.tsx +338 -0
  123. package/Tests/App/AdminDashboard/AdminAuthenticationSsoCardLocales.test.tsx +331 -0
  124. package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +47 -33
  125. package/Tests/App/AdminDashboard/GlobalSsoOidcPages.test.tsx +1021 -0
  126. package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +876 -78
  127. package/Tests/App/Dashboard/AffectedResourcesSlo.test.tsx +20 -3
  128. package/Tests/App/Dashboard/CephProxmoxVMwareDocumentationCards.test.tsx +359 -0
  129. package/Tests/App/Dashboard/CephSetupGuide.test.ts +961 -0
  130. package/Tests/App/Dashboard/CloudDocumentationCard.test.tsx +381 -95
  131. package/Tests/App/Dashboard/CloudSetupGuide.test.ts +1463 -0
  132. package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +174 -12
  133. package/Tests/App/Dashboard/ContainerSetupGuideCards.test.tsx +345 -0
  134. package/Tests/App/Dashboard/CoreListEmptyStates.test.tsx +501 -0
  135. package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +0 -1
  136. package/Tests/App/Dashboard/DatabaseDocumentationCard.test.tsx +400 -0
  137. package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +5 -0
  138. package/Tests/App/Dashboard/DatabaseSetupGuide.test.ts +1869 -0
  139. package/Tests/App/Dashboard/DatabaseTelemetryScope.test.ts +44 -0
  140. package/Tests/App/Dashboard/DatabaseTelemetryTabs.test.tsx +50 -9
  141. package/Tests/App/Dashboard/DockerSetupGuide.test.ts +899 -0
  142. package/Tests/App/Dashboard/DockerSwarmSetupGuide.test.ts +964 -0
  143. package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +141 -7
  144. package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +52 -39
  145. package/Tests/App/Dashboard/EventOverviewPages.test.tsx +7 -1
  146. package/Tests/App/Dashboard/GettingStartedTaskRoutes.test.tsx +331 -0
  147. package/Tests/App/Dashboard/HomeOverviewStatsFirstRun.test.tsx +925 -0
  148. package/Tests/App/Dashboard/HostDocumentationCard.test.tsx +225 -0
  149. package/Tests/App/Dashboard/HostSetupGuide.test.ts +1183 -0
  150. package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +69 -45
  151. package/Tests/App/Dashboard/IncidentCreateTemplateCustomFieldSettings.test.tsx +745 -0
  152. package/Tests/App/Dashboard/IncidentCreateTemplateOwners.test.tsx +414 -0
  153. package/Tests/App/Dashboard/IncidentCustomFieldCreateSettingsForm.test.ts +1042 -0
  154. package/Tests/App/Dashboard/IncidentCustomFieldSettingsCard.test.tsx +1816 -0
  155. package/Tests/App/Dashboard/IncidentFormPlan.test.ts +89 -0
  156. package/Tests/App/Dashboard/IncidentFormShareLinkCard.test.tsx +846 -0
  157. package/Tests/App/Dashboard/IncidentFormsPages.test.tsx +1324 -0
  158. package/Tests/App/Dashboard/IncidentTemplateCustomFieldSettings.test.tsx +630 -0
  159. package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +13 -0
  160. package/Tests/App/Dashboard/IncomingEmailMonitorLinkVerifyHint.test.tsx +104 -0
  161. package/Tests/App/Dashboard/InvestigationConversation.test.tsx +1107 -0
  162. package/Tests/App/Dashboard/InvestigationConversationData.test.ts +546 -0
  163. package/Tests/App/Dashboard/InvestigationEvidenceList.test.tsx +170 -5
  164. package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +207 -2
  165. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +729 -34
  166. package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +9 -21
  167. package/Tests/App/Dashboard/InvestigationReportView.test.tsx +274 -37
  168. package/Tests/App/Dashboard/InvestigationStatusBadge.test.tsx +130 -0
  169. package/Tests/App/Dashboard/IoTDocumentationCard.test.tsx +218 -0
  170. package/Tests/App/Dashboard/IoTSetupGuide.test.ts +1124 -0
  171. package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +20 -6
  172. package/Tests/App/Dashboard/KubernetesClusterAiDocumentationMarkdown.test.ts +107 -83
  173. package/Tests/App/Dashboard/KubernetesSetupGuide.test.ts +787 -0
  174. package/Tests/App/Dashboard/MessageQueueBreadcrumbs.test.tsx +228 -0
  175. package/Tests/App/Dashboard/MessageQueueBrokerHealth.test.tsx +1538 -0
  176. package/Tests/App/Dashboard/MessageQueueBrokerHealthMetricChart.test.tsx +969 -0
  177. package/Tests/App/Dashboard/MessageQueueBrokerHealthReads.test.ts +889 -0
  178. package/Tests/App/Dashboard/MessageQueueBrokerMetricsReach.test.ts +236 -0
  179. package/Tests/App/Dashboard/MessageQueueDocumentationCard.test.tsx +479 -0
  180. package/Tests/App/Dashboard/MessageQueueListPages.test.tsx +1232 -0
  181. package/Tests/App/Dashboard/MessageQueueMetricDescriptions.test.ts +244 -0
  182. package/Tests/App/Dashboard/MessageQueueMonitorLink.test.ts +952 -0
  183. package/Tests/App/Dashboard/MessageQueueMonitorLinkMonitorCreate.test.tsx +859 -0
  184. package/Tests/App/Dashboard/MessageQueueOverview.test.tsx +1773 -0
  185. package/Tests/App/Dashboard/MessageQueueOverviewPresentation.test.ts +196 -0
  186. package/Tests/App/Dashboard/MessageQueuePresentation.test.ts +799 -0
  187. package/Tests/App/Dashboard/MessageQueueProducersConsumers.test.tsx +680 -0
  188. package/Tests/App/Dashboard/MessageQueueRoutes.test.tsx +383 -0
  189. package/Tests/App/Dashboard/MessageQueueRulePages.test.tsx +278 -0
  190. package/Tests/App/Dashboard/MessageQueueSetupGuide.test.ts +2778 -0
  191. package/Tests/App/Dashboard/MessageQueueSideMenus.test.tsx +273 -0
  192. package/Tests/App/Dashboard/MessageQueueSpanPopulations.test.ts +930 -0
  193. package/Tests/App/Dashboard/MessageQueueSpanStore.ts +351 -0
  194. package/Tests/App/Dashboard/MessageQueueTelemetryScope.test.ts +375 -0
  195. package/Tests/App/Dashboard/MessageQueueTelemetryScopeTabs.test.tsx +668 -0
  196. package/Tests/App/Dashboard/MessageQueueViewPages.test.tsx +685 -0
  197. package/Tests/App/Dashboard/MonitorAndHomeNotOperationalMenus.test.tsx +342 -0
  198. package/Tests/App/Dashboard/MonitorCreateFirstRunDefaults.test.tsx +623 -0
  199. package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +442 -0
  200. package/Tests/App/Dashboard/MonitorLogsPageViewSummary.test.tsx +814 -0
  201. package/Tests/App/Dashboard/MonitorSetupCardBodies.test.tsx +246 -0
  202. package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +8 -0
  203. package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +27 -12
  204. package/Tests/App/Dashboard/PlanGatedPage.test.tsx +292 -0
  205. package/Tests/App/Dashboard/PodmanSetupGuide.test.ts +948 -0
  206. package/Tests/App/Dashboard/ProductOrientation.test.tsx +5 -4
  207. package/Tests/App/Dashboard/ProductSettingsSectionCollapsed.test.tsx +266 -0
  208. package/Tests/App/Dashboard/ProxmoxSetupGuide.test.ts +1318 -0
  209. package/Tests/App/Dashboard/ResourceAiAgentAttentionServerParity.test.ts +555 -0
  210. package/Tests/App/Dashboard/ResourceAiAgentPage.test.tsx +298 -9
  211. package/Tests/App/Dashboard/ResourceAiAgentStatus.test.ts +453 -0
  212. package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +16 -0
  213. package/Tests/App/Dashboard/ResourceConnectionGuideCard.test.tsx +444 -0
  214. package/Tests/App/Dashboard/ResourceConnectionGuideOverviewsInfra.test.tsx +798 -0
  215. package/Tests/App/Dashboard/ResourceConnectionGuideOverviewsPlatforms.test.tsx +717 -0
  216. package/Tests/App/Dashboard/ResourceConnectionGuides.test.ts +981 -0
  217. package/Tests/App/Dashboard/ResourceConnectionState.test.ts +132 -0
  218. package/Tests/App/Dashboard/RumDocumentationCard.test.tsx +293 -0
  219. package/Tests/App/Dashboard/RumSessionReplayRetentionSettings.test.tsx +467 -0
  220. package/Tests/App/Dashboard/RumSetupGuide.test.ts +758 -0
  221. package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +25 -0
  222. package/Tests/App/Dashboard/ServerlessDocumentationCard.test.tsx +254 -0
  223. package/Tests/App/Dashboard/ServerlessSetupGuide.test.ts +1074 -0
  224. package/Tests/App/Dashboard/SetupGuide.test.ts +246 -0
  225. package/Tests/App/Dashboard/SetupGuideCard.test.tsx +756 -0
  226. package/Tests/App/Dashboard/SloListSideMenu.test.tsx +120 -0
  227. package/Tests/App/Dashboard/SsoPages.test.tsx +833 -0
  228. package/Tests/App/Dashboard/TelemetryDocumentation.test.tsx +253 -0
  229. package/Tests/App/Dashboard/TelemetryRetentionShells.test.tsx +730 -0
  230. package/Tests/App/Dashboard/VMwareSetupGuide.test.ts +1033 -0
  231. package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +87 -7
  232. package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +28 -9
  233. package/Tests/Models/DatabaseModels/IncidentFormModel.test.ts +1250 -0
  234. package/Tests/Models/DatabaseModels/MessageQueueModels.test.ts +1983 -0
  235. package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +4 -2
  236. package/Tests/Models/DatabaseModels/TeamComplianceSettingModel.test.ts +190 -14
  237. package/Tests/Models/IncidentTemplateCustomFieldSettingsColumn.test.ts +291 -0
  238. package/Tests/Server/API/AIInvestigationConversationAPI.test.ts +412 -0
  239. package/Tests/Server/API/GlobalConfigLicense.test.ts +38 -9
  240. package/Tests/Server/API/IncidentFormAPI.test.ts +942 -0
  241. package/Tests/Server/API/IncidentFormPublicRoutes.test.ts +1653 -0
  242. package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +2 -1
  243. package/Tests/Server/API/{SsoProviderListingsEdition.test.ts → SsoProviderListings.test.ts} +164 -110
  244. package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +76 -54
  245. package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +125 -42
  246. package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +36 -10
  247. package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +51 -9
  248. package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +13 -8
  249. package/Tests/Server/Enterprise/SsoInCommunityEdition.test.ts +540 -0
  250. package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +3 -0
  251. package/Tests/Server/Infrastructure/Postgres/AddIncidentFormsMigration.test.ts +438 -0
  252. package/Tests/Server/Infrastructure/Postgres/AddTeamComplianceRuleNotificationChannelsMigration.test.ts +255 -0
  253. package/Tests/Server/Infrastructure/Postgres/MessageQueueTablesMigration.test.ts +637 -0
  254. package/Tests/Server/Middleware/IncidentFormRateLimit.test.ts +1630 -0
  255. package/Tests/Server/Middleware/UserAuthorization.test.ts +16 -17
  256. package/Tests/Server/Middleware/UserAuthorizationSsoEnforcement.test.ts +544 -0
  257. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +37 -8
  258. package/Tests/Server/Services/IncidentCreatedFeedTitle.test.ts +212 -0
  259. package/Tests/Server/Services/IncidentCustomFieldDeleteFormQuestions.test.ts +297 -0
  260. package/Tests/Server/Services/IncidentFormOwnersCreatedNotification.test.ts +497 -0
  261. package/Tests/Server/Services/IncidentFormPostgres.test.ts +958 -0
  262. package/Tests/Server/Services/IncidentFormPublicForm.test.ts +1260 -0
  263. package/Tests/Server/Services/IncidentFormPublicSubmission.test.ts +2520 -0
  264. package/Tests/Server/Services/IncidentFormRegistration.test.ts +159 -0
  265. package/Tests/Server/Services/IncidentFormService.test.ts +663 -0
  266. package/Tests/Server/Services/IncidentFormSubmissionService.test.ts +430 -0
  267. package/Tests/Server/Services/IncidentFormSubmissionTemplateBranch.test.ts +473 -0
  268. package/Tests/Server/Services/IncidentGroupingTemplateSubstitution.test.ts +81 -0
  269. package/Tests/Server/Services/IncidentTemplateCustomFieldSettings.test.ts +262 -0
  270. package/Tests/Server/Services/IncidentTemplateOwnersOnDeclare.test.ts +566 -0
  271. package/Tests/Server/Services/IncidentTitleMarkdownSinks.test.ts +640 -0
  272. package/Tests/Server/Services/LlmLogServiceTokenAggregateParams.test.ts +3 -3
  273. package/Tests/Server/Services/MessageQueueOwnerServices.test.ts +440 -0
  274. package/Tests/Server/Services/MessageQueueRegistries.test.ts +577 -0
  275. package/Tests/Server/Services/MessageQueueRuleEngines.test.ts +900 -0
  276. package/Tests/Server/Services/MessageQueueService.test.ts +2210 -0
  277. package/Tests/Server/Services/MessageQueueSqlPostgres.test.ts +1271 -0
  278. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +28 -1
  279. package/Tests/Server/Services/OpenTelemetryRetentionOverrideEdition.test.ts +474 -0
  280. package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +21 -0
  281. package/Tests/Server/Services/OwnerRowUniqueness.test.ts +3 -0
  282. package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +0 -1
  283. package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +56 -6
  284. package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +30 -1
  285. package/Tests/Server/Services/SsoRequirementReads.test.ts +454 -0
  286. package/Tests/Server/Services/SsoRequirementWrites.test.ts +529 -0
  287. package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +3 -3
  288. package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +107 -89
  289. package/Tests/Server/Services/TeamComplianceSettingPostgres.test.ts +1068 -176
  290. package/Tests/Server/Services/TeamComplianceSettingService.test.ts +1962 -200
  291. package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +654 -297
  292. package/Tests/Server/Types/Database/Permissions/RetentionOverrideColumns.test.ts +784 -0
  293. package/Tests/Server/Types/Database/Permissions/SsoScalePlanGate.test.ts +418 -0
  294. package/Tests/Server/Utils/AI/AIAlertGating.test.ts +0 -1
  295. package/Tests/Server/Utils/AI/AIInvestigationEngineRunLimits.test.ts +136 -0
  296. package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +15 -14
  297. package/Tests/Server/Utils/AI/AgentContextCompactor.test.ts +351 -0
  298. package/Tests/Server/Utils/AI/ChatAgentRunnerSharedThread.test.ts +842 -0
  299. package/Tests/Server/Utils/AI/ChatRunCancellation.test.ts +195 -0
  300. package/Tests/Server/Utils/AI/CodeFixReadiness.test.ts +10 -57
  301. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +20 -24
  302. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +7 -30
  303. package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +225 -29
  304. package/Tests/Server/Utils/AI/InvestigationInfrastructureAccessWiring.test.ts +266 -25
  305. package/Tests/Server/Utils/AI/InvestigationThread.test.ts +580 -0
  306. package/Tests/Server/Utils/AI/InvestigationThreadService.test.ts +801 -0
  307. package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +525 -43
  308. package/Tests/Server/Utils/AI/KubectlJobRunner.test.ts +4 -2
  309. package/Tests/Server/Utils/AI/LLMServiceUnreachableProvider.test.ts +435 -0
  310. package/Tests/Server/Utils/AI/ObservabilityAssistantLimits.test.ts +462 -0
  311. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +14 -25
  312. package/Tests/Server/Utils/AI/RemediationExecutionRunnerResourceMode.test.ts +2 -0
  313. package/Tests/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.test.ts +297 -15
  314. package/Tests/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.test.ts +10 -6
  315. package/Tests/Server/Utils/AI/ToolOutputPager.test.ts +382 -0
  316. package/Tests/Server/Utils/AI/ToolResultSerializer.test.ts +23 -4
  317. package/Tests/Server/Utils/AI/Toolbox/LogTools.test.ts +25 -6
  318. package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +14 -3
  319. package/Tests/Server/Utils/EditionEnforcement.test.ts +107 -147
  320. package/Tests/Server/Utils/{CommunityEditionSsoReport.test.ts → RelaxedScimTeamLocksReport.test.ts} +212 -208
  321. package/Tests/Server/Utils/SameOriginRequest.test.ts +372 -0
  322. package/Tests/Server/Utils/Telemetry/EntityRegistry.test.ts +20 -0
  323. package/Tests/Server/Utils/Telemetry/MessageQueueDiscovery.test.ts +2590 -0
  324. package/Tests/Server/Utils/Telemetry/MessageQueueSpanQueryTwin.ts +246 -0
  325. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +23 -0
  326. package/Tests/Types/AI/AIAgentRunLimits.test.ts +255 -0
  327. package/Tests/Types/Code/JsonSyntax.test.ts +1300 -0
  328. package/Tests/Types/CustomField/CustomFieldCreateSettings.test.ts +1113 -0
  329. package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +91 -0
  330. package/Tests/Types/CustomField/CustomFieldValueValidator.test.ts +30 -0
  331. package/Tests/Types/Incident/IncidentFormIpAllowlist.test.ts +227 -0
  332. package/Tests/Types/Incident/IncidentFormPublic.test.ts +1916 -0
  333. package/Tests/Types/MessageQueue/MessageQueueEntityKey.test.ts +916 -0
  334. package/Tests/Types/MessageQueue/MessageQueueIdentity.test.ts +567 -0
  335. package/Tests/Types/MessageQueue/MessageQueueManualIdentity.test.ts +686 -0
  336. package/Tests/Types/MessageQueue/MessageQueueMetricCatalog.test.ts +1726 -0
  337. package/Tests/Types/MessageQueue/MessageQueueMetricResolution.test.ts +1758 -0
  338. package/Tests/Types/MessageQueue/MessagingInstrumentationFixtures.test.ts +4686 -0
  339. package/Tests/Types/MessageQueue/MessagingSystem.test.ts +840 -0
  340. package/Tests/Types/MessageQueue/MessagingTelemetryFixtures.ts +3287 -0
  341. package/Tests/Types/MessageQueue/MessagingTelemetryResolver.test.ts +2966 -0
  342. package/Tests/Types/Monitor/MessageQueueAlertTemplates.test.ts +5401 -0
  343. package/Tests/Types/Monitor/MetricEngineFold.ts +154 -0
  344. package/Tests/Types/ResourceAiAgent/ResourceAiAccess.test.ts +5 -3
  345. package/Tests/Types/Team/ComplianceRule.test.ts +588 -37
  346. package/Tests/Types/Team/TeamComplianceStatus.test.ts +64 -11
  347. package/Tests/Types/XML.test.ts +51 -0
  348. package/Tests/UI/Components/CodeEditor/CodeEditor.test.tsx +2362 -0
  349. package/Tests/UI/Components/CodeEditor/CodeEditorCommands.test.ts +810 -0
  350. package/Tests/UI/Components/CodeEditor/CodeEditorHighlight.test.ts +338 -0
  351. package/Tests/UI/Components/CodeEditor/CodeEditorLanguages.test.ts +222 -0
  352. package/Tests/UI/Components/CodeEditor/CodeEditorStyles.test.ts +807 -0
  353. package/Tests/UI/Components/CodeEditor/NoMonaco.test.ts +245 -0
  354. package/Tests/UI/Components/CodeEditor/YamlEditor.test.tsx +729 -0
  355. package/Tests/UI/Components/CopyTextButton.test.tsx +76 -0
  356. package/Tests/UI/Components/EditionLabelLapseCopy.ts +51 -14
  357. package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +131 -23
  358. package/Tests/UI/Components/ErrorMessageAction.test.tsx +142 -0
  359. package/Tests/UI/Components/FacetSidebarInScope.test.tsx +459 -0
  360. package/Tests/UI/Components/FacetValuesInScope.test.ts +270 -0
  361. package/Tests/UI/Components/Forms/FormFieldCodeEditors.test.tsx +294 -0
  362. package/Tests/UI/Components/Forms/FormFieldMarkdown.test.tsx +126 -0
  363. package/Tests/UI/Components/Forms/FormFieldYaml.test.tsx +22 -75
  364. package/Tests/UI/Components/Forms/ModelFormOnBeforeCreateMiscData.test.tsx +254 -0
  365. package/Tests/UI/Components/Icon.test.tsx +32 -0
  366. package/Tests/UI/Components/Input.test.tsx +31 -0
  367. package/Tests/UI/Components/LockedFilterChipScope.test.tsx +501 -0
  368. package/Tests/UI/Components/MarkdownConverters.test.ts +253 -1
  369. package/Tests/UI/Components/MarkdownEditor.test.tsx +2785 -2
  370. package/Tests/UI/Components/MarkdownEditorHistory.test.ts +243 -0
  371. package/Tests/UI/Components/MarkdownListEditing.test.ts +1118 -0
  372. package/Tests/UI/Components/MarkdownPaste.test.ts +1180 -0
  373. package/Tests/UI/Components/MarkdownViewerCopy.test.tsx +466 -0
  374. package/Tests/UI/Components/MarkdownVisualEditing.test.ts +1089 -0
  375. package/Tests/UI/Components/ModelTable/BaseModelTableEmptyStateAction.test.tsx +623 -0
  376. package/Tests/UI/Components/ResetObjectID.test.tsx +282 -0
  377. package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
  378. package/Tests/UI/Components/Table/EmptyTableMessage.test.ts +439 -0
  379. package/Tests/UI/Components/Table/TableEmptyState.test.tsx +352 -0
  380. package/Tests/UI/Components/TableRowMobileTitles.test.tsx +78 -0
  381. package/Tests/UI/Components/TextArea.test.tsx +19 -0
  382. package/Tests/UI/Components/Workflow/ModelColumnEditor.render.test.tsx +12 -29
  383. package/Tests/UI/Components/fixtures/MarkdownPasteFixtures.ts +460 -0
  384. package/Tests/UI/EsbuildConfig.test.ts +115 -39
  385. package/Tests/UI/EsbuildEnterpriseAlias.test.ts +4 -4
  386. package/Tests/UI/Monitor/MonitorLogSummaryRender.test.tsx +377 -0
  387. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +81 -1
  388. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +17 -0
  389. package/Tests/Utils/LabelRuleImportExport.test.ts +5 -0
  390. package/Tests/Utils/Markdown/DashboardMarkdownRenderer.ts +81 -0
  391. package/Tests/Utils/Markdown/UntrustedMarkdown.test.ts +1339 -0
  392. package/Tests/Utils/Monitor/MonitorLogSummaryUtil.test.ts +862 -0
  393. package/Types/AI/AIAgentRunLimits.ts +146 -0
  394. package/Types/Code/CodeType.ts +2 -0
  395. package/Types/Code/JsonSyntax.ts +923 -0
  396. package/Types/CustomField/CustomFieldCreateSettings.ts +549 -0
  397. package/Types/CustomField/CustomFieldMappingCatalog.ts +77 -0
  398. package/Types/CustomField/CustomFieldValueValidator.ts +10 -7
  399. package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +1 -1
  400. package/Types/Icon/IconProp.ts +2 -0
  401. package/Types/Incident/IncidentFormIpAllowlist.ts +206 -0
  402. package/Types/Incident/IncidentFormPublic.ts +1145 -0
  403. package/Types/Kubernetes/KubernetesClusterAiAccess.ts +10 -3
  404. package/Types/MessageQueue/MessageQueueIdentity.ts +256 -0
  405. package/Types/MessageQueue/MessageQueueManualIdentity.ts +325 -0
  406. package/Types/MessageQueue/MessageQueueMetricCatalog.ts +1357 -0
  407. package/Types/MessageQueue/MessagingSystem.ts +518 -0
  408. package/Types/MessageQueue/MessagingTelemetryResolver.ts +2311 -0
  409. package/Types/Monitor/MessageQueueAlertTemplates.ts +2128 -0
  410. package/Types/Permission.ts +310 -0
  411. package/Types/ResourceAiAgent/ResourceAiAccess.ts +10 -4
  412. package/Types/Rules/RuleCriteriaFieldRegistry.ts +12 -0
  413. package/Types/Rules/RuleRun.ts +4 -0
  414. package/Types/Team/ComplianceNotificationChannel.ts +4 -3
  415. package/Types/Team/ComplianceRule.ts +71 -18
  416. package/Types/Team/ComplianceRuleType.ts +2 -2
  417. package/Types/Team/TeamComplianceStatus.ts +6 -2
  418. package/Types/Telemetry/EntityType.ts +16 -0
  419. package/Types/Telemetry/LockedFilterDetail.ts +22 -0
  420. package/Types/XML.ts +26 -0
  421. package/UI/Components/CodeEditor/CodeEditor.css +379 -0
  422. package/UI/Components/CodeEditor/CodeEditor.tsx +1128 -294
  423. package/UI/Components/CodeEditor/CodeEditorCommands.ts +774 -0
  424. package/UI/Components/CodeEditor/CodeEditorHighlight.ts +106 -0
  425. package/UI/Components/CodeEditor/CodeEditorLanguages.ts +164 -0
  426. package/UI/Components/CodeEditor/YamlEditor.tsx +28 -326
  427. package/UI/Components/CopyTextButton/CopyTextButton.tsx +5 -1
  428. package/UI/Components/CustomFields/CustomFieldModelFormFields.tsx +6 -25
  429. package/UI/Components/EditionLabel/EditionLabel.tsx +14 -13
  430. package/UI/Components/ErrorMessage/ErrorMessage.tsx +11 -1
  431. package/UI/Components/Forms/Fields/FormField.tsx +8 -0
  432. package/UI/Components/Forms/Types/Field.ts +8 -0
  433. package/UI/Components/Icon/Icon.tsx +18 -0
  434. package/UI/Components/Input/Input.tsx +11 -4
  435. package/UI/Components/LogsViewer/LogsViewer.tsx +4 -0
  436. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +21 -3
  437. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  438. package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +877 -79
  439. package/UI/Components/Markdown.tsx/MarkdownEditorHistory.ts +284 -0
  440. package/UI/Components/Markdown.tsx/MarkdownListEditing.ts +1362 -0
  441. package/UI/Components/Markdown.tsx/MarkdownPaste.ts +1326 -0
  442. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +106 -10
  443. package/UI/Components/Markdown.tsx/MarkdownVisualEditing.ts +1032 -0
  444. package/UI/Components/ModelTable/BaseModelTable.tsx +85 -7
  445. package/UI/Components/ResetObjectID/ResetObjectID.tsx +35 -9
  446. package/UI/Components/Table/EmptyTableMessage.ts +81 -0
  447. package/UI/Components/Table/Table.tsx +50 -21
  448. package/UI/Components/Table/TableRow.tsx +9 -1
  449. package/UI/Components/TelemetryViewer/FacetVisibility.ts +97 -2
  450. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +13 -0
  451. package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +214 -7
  452. package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +21 -3
  453. package/UI/Components/TextArea/TextArea.tsx +9 -2
  454. package/UI/Components/Workflow/ModelFieldPicker.tsx +10 -12
  455. package/UI/Styles/Theme.css +8 -0
  456. package/UI/esbuild-config.js +2 -32
  457. package/Utils/LabelRuleImportExport.ts +2 -0
  458. package/Utils/Markdown/UntrustedMarkdown.ts +1513 -0
  459. package/Utils/Monitor/IncomingEmailMonitorRequestUtil.ts +41 -0
  460. package/Utils/Monitor/MonitorLogSummaryUtil.ts +212 -0
  461. package/Utils/Telemetry/EntityKey.ts +48 -0
  462. package/build/dist/Models/DatabaseModels/AIConversation.js +125 -1
  463. package/build/dist/Models/DatabaseModels/AIConversation.js.map +1 -1
  464. package/build/dist/Models/DatabaseModels/CephCluster.js +12 -0
  465. package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
  466. package/build/dist/Models/DatabaseModels/CloudResource.js +12 -0
  467. package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
  468. package/build/dist/Models/DatabaseModels/DatabaseServer.js +12 -0
  469. package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -1
  470. package/build/dist/Models/DatabaseModels/DockerHost.js +12 -0
  471. package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
  472. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +12 -0
  473. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
  474. package/build/dist/Models/DatabaseModels/GlobalOidc.js +0 -4
  475. package/build/dist/Models/DatabaseModels/GlobalOidc.js.map +1 -1
  476. package/build/dist/Models/DatabaseModels/GlobalOidcProject.js +0 -4
  477. package/build/dist/Models/DatabaseModels/GlobalOidcProject.js.map +1 -1
  478. package/build/dist/Models/DatabaseModels/GlobalSso.js +0 -4
  479. package/build/dist/Models/DatabaseModels/GlobalSso.js.map +1 -1
  480. package/build/dist/Models/DatabaseModels/GlobalSsoProject.js +0 -4
  481. package/build/dist/Models/DatabaseModels/GlobalSsoProject.js.map +1 -1
  482. package/build/dist/Models/DatabaseModels/Host.js +12 -0
  483. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  484. package/build/dist/Models/DatabaseModels/IncidentForm.js +605 -0
  485. package/build/dist/Models/DatabaseModels/IncidentForm.js.map +1 -0
  486. package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js +299 -0
  487. package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js.map +1 -0
  488. package/build/dist/Models/DatabaseModels/IncidentTemplate.js +60 -0
  489. package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
  490. package/build/dist/Models/DatabaseModels/Index.js +14 -0
  491. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  492. package/build/dist/Models/DatabaseModels/IoTFleet.js +12 -0
  493. package/build/dist/Models/DatabaseModels/IoTFleet.js.map +1 -1
  494. package/build/dist/Models/DatabaseModels/KubernetesCluster.js +12 -0
  495. package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
  496. package/build/dist/Models/DatabaseModels/MessageQueue.js +1106 -0
  497. package/build/dist/Models/DatabaseModels/MessageQueue.js.map +1 -0
  498. package/build/dist/Models/DatabaseModels/MessageQueueLabelRule.js +562 -0
  499. package/build/dist/Models/DatabaseModels/MessageQueueLabelRule.js.map +1 -0
  500. package/build/dist/Models/DatabaseModels/MessageQueueOwnerRule.js +643 -0
  501. package/build/dist/Models/DatabaseModels/MessageQueueOwnerRule.js.map +1 -0
  502. package/build/dist/Models/DatabaseModels/MessageQueueOwnerTeam.js +506 -0
  503. package/build/dist/Models/DatabaseModels/MessageQueueOwnerTeam.js.map +1 -0
  504. package/build/dist/Models/DatabaseModels/MessageQueueOwnerUser.js +505 -0
  505. package/build/dist/Models/DatabaseModels/MessageQueueOwnerUser.js.map +1 -0
  506. package/build/dist/Models/DatabaseModels/PodmanHost.js +12 -0
  507. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -1
  508. package/build/dist/Models/DatabaseModels/Project.js +61 -0
  509. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  510. package/build/dist/Models/DatabaseModels/ProjectOidc.js +0 -4
  511. package/build/dist/Models/DatabaseModels/ProjectOidc.js.map +1 -1
  512. package/build/dist/Models/DatabaseModels/ProjectSso.js +0 -4
  513. package/build/dist/Models/DatabaseModels/ProjectSso.js.map +1 -1
  514. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +12 -0
  515. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
  516. package/build/dist/Models/DatabaseModels/RumApplication.js +12 -0
  517. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  518. package/build/dist/Models/DatabaseModels/ServerlessFunction.js +12 -0
  519. package/build/dist/Models/DatabaseModels/ServerlessFunction.js.map +1 -1
  520. package/build/dist/Models/DatabaseModels/Service.js +12 -0
  521. package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
  522. package/build/dist/Models/DatabaseModels/StatusPageOidc.js +0 -4
  523. package/build/dist/Models/DatabaseModels/StatusPageOidc.js.map +1 -1
  524. package/build/dist/Models/DatabaseModels/StatusPageSso.js +0 -4
  525. package/build/dist/Models/DatabaseModels/StatusPageSso.js.map +1 -1
  526. package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js +49 -3
  527. package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js.map +1 -1
  528. package/build/dist/Models/DatabaseModels/VMwareVCenter.js +12 -0
  529. package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -1
  530. package/build/dist/Server/API/AIChatAPI.js +9 -103
  531. package/build/dist/Server/API/AIChatAPI.js.map +1 -1
  532. package/build/dist/Server/API/AIInvestigationAPI.js +3 -3
  533. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  534. package/build/dist/Server/API/AIInvestigationConversationAPI.js +162 -0
  535. package/build/dist/Server/API/AIInvestigationConversationAPI.js.map +1 -0
  536. package/build/dist/Server/API/IncidentFormAPI.js +245 -0
  537. package/build/dist/Server/API/IncidentFormAPI.js.map +1 -0
  538. package/build/dist/Server/API/ProjectOIDC.js +16 -24
  539. package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
  540. package/build/dist/Server/API/ProjectSSO.js +16 -24
  541. package/build/dist/Server/API/ProjectSSO.js.map +1 -1
  542. package/build/dist/Server/API/StatusPageAPI.js +42 -75
  543. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  544. package/build/dist/Server/Enterprise/EnterpriseEdition.js +79 -25
  545. package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -1
  546. package/build/dist/Server/Enterprise/EnterpriseFeature.js +24 -3
  547. package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -1
  548. package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +1 -1
  549. package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -1
  550. package/build/dist/Server/EnvironmentConfig.js +1 -1
  551. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.js +63 -0
  552. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.js.map +1 -0
  553. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.js +41 -0
  554. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.js.map +1 -0
  555. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.js +40 -0
  556. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.js.map +1 -0
  557. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.js +183 -0
  558. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.js.map +1 -0
  559. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  560. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  561. package/build/dist/Server/Middleware/IncidentFormRateLimit.js +559 -0
  562. package/build/dist/Server/Middleware/IncidentFormRateLimit.js.map +1 -0
  563. package/build/dist/Server/Middleware/UserAuthorization.js +11 -30
  564. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  565. package/build/dist/Server/Services/AIService.js +10 -13
  566. package/build/dist/Server/Services/AIService.js.map +1 -1
  567. package/build/dist/Server/Services/IncidentCustomFieldService.js +83 -0
  568. package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
  569. package/build/dist/Server/Services/IncidentEpisodeMemberService.js +8 -4
  570. package/build/dist/Server/Services/IncidentEpisodeMemberService.js.map +1 -1
  571. package/build/dist/Server/Services/IncidentEpisodeService.js +10 -1
  572. package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
  573. package/build/dist/Server/Services/IncidentFormService.js +1202 -0
  574. package/build/dist/Server/Services/IncidentFormService.js.map +1 -0
  575. package/build/dist/Server/Services/IncidentFormSubmissionService.js +91 -0
  576. package/build/dist/Server/Services/IncidentFormSubmissionService.js.map +1 -0
  577. package/build/dist/Server/Services/IncidentGroupingEngineService.js +20 -8
  578. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  579. package/build/dist/Server/Services/IncidentService.js +106 -4
  580. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  581. package/build/dist/Server/Services/IncidentTemplateService.js +18 -0
  582. package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
  583. package/build/dist/Server/Services/Index.js +14 -0
  584. package/build/dist/Server/Services/Index.js.map +1 -1
  585. package/build/dist/Server/Services/MessageQueueLabelRuleEngineService.js +262 -0
  586. package/build/dist/Server/Services/MessageQueueLabelRuleEngineService.js.map +1 -0
  587. package/build/dist/Server/Services/MessageQueueLabelRuleService.js +13 -0
  588. package/build/dist/Server/Services/MessageQueueLabelRuleService.js.map +1 -0
  589. package/build/dist/Server/Services/MessageQueueOwnerRuleEngineService.js +334 -0
  590. package/build/dist/Server/Services/MessageQueueOwnerRuleEngineService.js.map +1 -0
  591. package/build/dist/Server/Services/MessageQueueOwnerRuleService.js +13 -0
  592. package/build/dist/Server/Services/MessageQueueOwnerRuleService.js.map +1 -0
  593. package/build/dist/Server/Services/MessageQueueOwnerTeamService.js +62 -0
  594. package/build/dist/Server/Services/MessageQueueOwnerTeamService.js.map +1 -0
  595. package/build/dist/Server/Services/MessageQueueOwnerUserService.js +62 -0
  596. package/build/dist/Server/Services/MessageQueueOwnerUserService.js.map +1 -0
  597. package/build/dist/Server/Services/MessageQueueService.js +1140 -0
  598. package/build/dist/Server/Services/MessageQueueService.js.map +1 -0
  599. package/build/dist/Server/Services/OpenTelemetryIngestService.js +25 -4
  600. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  601. package/build/dist/Server/Services/ProjectService.js +0 -54
  602. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  603. package/build/dist/Server/Services/StatusPagePrivateUserService.js +1 -4
  604. package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
  605. package/build/dist/Server/Services/StatusPageService.js +0 -46
  606. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  607. package/build/dist/Server/Services/TeamComplianceSettingService.js +120 -31
  608. package/build/dist/Server/Services/TeamComplianceSettingService.js.map +1 -1
  609. package/build/dist/Server/Services/UserNotificationRuleService.js +8 -1
  610. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  611. package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js +12 -3
  612. package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js.map +1 -1
  613. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +6 -3
  614. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
  615. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +109 -37
  616. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
  617. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +16 -0
  618. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  619. package/build/dist/Server/Types/Database/Permissions/TablePermission.js +3 -3
  620. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +9 -6
  621. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
  622. package/build/dist/Server/Utils/AI/Chat/AgentContextCompactor.js +128 -0
  623. package/build/dist/Server/Utils/AI/Chat/AgentContextCompactor.js.map +1 -0
  624. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +192 -50
  625. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
  626. package/build/dist/Server/Utils/AI/Chat/ChatRunCancellation.js +133 -0
  627. package/build/dist/Server/Utils/AI/Chat/ChatRunCancellation.js.map +1 -0
  628. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +53 -13
  629. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  630. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +1 -1
  631. package/build/dist/Server/Utils/AI/Chat/ToolOutputPager.js +206 -0
  632. package/build/dist/Server/Utils/AI/Chat/ToolOutputPager.js.map +1 -0
  633. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +53 -26
  634. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -1
  635. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +4 -2
  636. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -1
  637. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +1 -29
  638. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
  639. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +24 -24
  640. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
  641. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +7 -2
  642. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
  643. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +29 -14
  644. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  645. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js +38 -14
  646. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js.map +1 -1
  647. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js +2 -0
  648. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js.map +1 -1
  649. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +40 -10
  650. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  651. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +19 -7
  652. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  653. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +19 -7
  654. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  655. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +15 -18
  656. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
  657. package/build/dist/Server/Utils/AI/SRE/InvestigationThread.js +412 -0
  658. package/build/dist/Server/Utils/AI/SRE/InvestigationThread.js.map +1 -0
  659. package/build/dist/Server/Utils/AI/SRE/InvestigationThreadService.js +495 -0
  660. package/build/dist/Server/Utils/AI/SRE/InvestigationThreadService.js.map +1 -0
  661. package/build/dist/Server/Utils/AI/Toolbox/Serializer.js +10 -3
  662. package/build/dist/Server/Utils/AI/Toolbox/Serializer.js.map +1 -1
  663. package/build/dist/Server/Utils/EditionEnforcement.js +20 -158
  664. package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -1
  665. package/build/dist/Server/Utils/LLM/LLMService.js +193 -54
  666. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  667. package/build/dist/Server/Utils/RelaxedScimTeamLocksReport.js +160 -0
  668. package/build/dist/Server/Utils/RelaxedScimTeamLocksReport.js.map +1 -0
  669. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +25 -0
  670. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
  671. package/build/dist/Server/Utils/SameOriginRequest.js +151 -0
  672. package/build/dist/Server/Utils/SameOriginRequest.js.map +1 -0
  673. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js +2 -0
  674. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js.map +1 -1
  675. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +4 -1
  676. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  677. package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js +1015 -0
  678. package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js.map +1 -0
  679. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +4 -1
  680. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
  681. package/build/dist/Server/Utils/VendorAssets.js +3 -3
  682. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +3 -1
  683. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
  684. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +3 -1
  685. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
  686. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +10 -1
  687. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  688. package/build/dist/Types/AI/AIAgentRunLimits.js +91 -0
  689. package/build/dist/Types/AI/AIAgentRunLimits.js.map +1 -0
  690. package/build/dist/Types/Code/CodeType.js +2 -0
  691. package/build/dist/Types/Code/CodeType.js.map +1 -1
  692. package/build/dist/Types/Code/JsonSyntax.js +604 -0
  693. package/build/dist/Types/Code/JsonSyntax.js.map +1 -0
  694. package/build/dist/Types/CustomField/CustomFieldCreateSettings.js +310 -0
  695. package/build/dist/Types/CustomField/CustomFieldCreateSettings.js.map +1 -0
  696. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js +38 -0
  697. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -1
  698. package/build/dist/Types/CustomField/CustomFieldValueValidator.js +10 -7
  699. package/build/dist/Types/CustomField/CustomFieldValueValidator.js.map +1 -1
  700. package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +1 -1
  701. package/build/dist/Types/Icon/IconProp.js +2 -0
  702. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  703. package/build/dist/Types/Incident/IncidentFormIpAllowlist.js +119 -0
  704. package/build/dist/Types/Incident/IncidentFormIpAllowlist.js.map +1 -0
  705. package/build/dist/Types/Incident/IncidentFormPublic.js +678 -0
  706. package/build/dist/Types/Incident/IncidentFormPublic.js.map +1 -0
  707. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +10 -3
  708. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -1
  709. package/build/dist/Types/MessageQueue/MessageQueueIdentity.js +184 -0
  710. package/build/dist/Types/MessageQueue/MessageQueueIdentity.js.map +1 -0
  711. package/build/dist/Types/MessageQueue/MessageQueueManualIdentity.js +190 -0
  712. package/build/dist/Types/MessageQueue/MessageQueueManualIdentity.js.map +1 -0
  713. package/build/dist/Types/MessageQueue/MessageQueueMetricCatalog.js +1057 -0
  714. package/build/dist/Types/MessageQueue/MessageQueueMetricCatalog.js.map +1 -0
  715. package/build/dist/Types/MessageQueue/MessagingSystem.js +394 -0
  716. package/build/dist/Types/MessageQueue/MessagingSystem.js.map +1 -0
  717. package/build/dist/Types/MessageQueue/MessagingTelemetryResolver.js +1768 -0
  718. package/build/dist/Types/MessageQueue/MessagingTelemetryResolver.js.map +1 -0
  719. package/build/dist/Types/Monitor/MessageQueueAlertTemplates.js +1207 -0
  720. package/build/dist/Types/Monitor/MessageQueueAlertTemplates.js.map +1 -0
  721. package/build/dist/Types/Permission.js +274 -0
  722. package/build/dist/Types/Permission.js.map +1 -1
  723. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js +10 -4
  724. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js.map +1 -1
  725. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +12 -0
  726. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
  727. package/build/dist/Types/Rules/RuleRun.js +4 -0
  728. package/build/dist/Types/Rules/RuleRun.js.map +1 -1
  729. package/build/dist/Types/Team/ComplianceNotificationChannel.js +4 -3
  730. package/build/dist/Types/Team/ComplianceNotificationChannel.js.map +1 -1
  731. package/build/dist/Types/Team/ComplianceRule.js +48 -14
  732. package/build/dist/Types/Team/ComplianceRule.js.map +1 -1
  733. package/build/dist/Types/Team/ComplianceRuleType.js +2 -2
  734. package/build/dist/Types/Telemetry/EntityType.js +16 -0
  735. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  736. package/build/dist/Types/XML.js +23 -0
  737. package/build/dist/Types/XML.js.map +1 -1
  738. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +641 -266
  739. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  740. package/build/dist/UI/Components/CodeEditor/CodeEditorCommands.js +464 -0
  741. package/build/dist/UI/Components/CodeEditor/CodeEditorCommands.js.map +1 -0
  742. package/build/dist/UI/Components/CodeEditor/CodeEditorHighlight.js +69 -0
  743. package/build/dist/UI/Components/CodeEditor/CodeEditorHighlight.js.map +1 -0
  744. package/build/dist/UI/Components/CodeEditor/CodeEditorLanguages.js +108 -0
  745. package/build/dist/UI/Components/CodeEditor/CodeEditorLanguages.js.map +1 -0
  746. package/build/dist/UI/Components/CodeEditor/YamlEditor.js +14 -186
  747. package/build/dist/UI/Components/CodeEditor/YamlEditor.js.map +1 -1
  748. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js +5 -1
  749. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js.map +1 -1
  750. package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js +5 -14
  751. package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js.map +1 -1
  752. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +14 -13
  753. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  754. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +1 -1
  755. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
  756. package/build/dist/UI/Components/Forms/Fields/FormField.js +8 -3
  757. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  758. package/build/dist/UI/Components/Icon/Icon.js +8 -0
  759. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  760. package/build/dist/UI/Components/Input/Input.js +11 -3
  761. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  762. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +2 -1
  763. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  764. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +14 -4
  765. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  766. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  767. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  768. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +710 -65
  769. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
  770. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditorHistory.js +238 -0
  771. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditorHistory.js.map +1 -0
  772. package/build/dist/UI/Components/Markdown.tsx/MarkdownListEditing.js +1028 -0
  773. package/build/dist/UI/Components/Markdown.tsx/MarkdownListEditing.js.map +1 -0
  774. package/build/dist/UI/Components/Markdown.tsx/MarkdownPaste.js +1088 -0
  775. package/build/dist/UI/Components/Markdown.tsx/MarkdownPaste.js.map +1 -0
  776. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +70 -10
  777. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  778. package/build/dist/UI/Components/Markdown.tsx/MarkdownVisualEditing.js +887 -0
  779. package/build/dist/UI/Components/Markdown.tsx/MarkdownVisualEditing.js.map +1 -0
  780. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +57 -6
  781. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  782. package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js +7 -5
  783. package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js.map +1 -1
  784. package/build/dist/UI/Components/Table/EmptyTableMessage.js +51 -0
  785. package/build/dist/UI/Components/Table/EmptyTableMessage.js.map +1 -0
  786. package/build/dist/UI/Components/Table/Table.js +30 -11
  787. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  788. package/build/dist/UI/Components/Table/TableRow.js +9 -2
  789. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  790. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js +63 -1
  791. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js.map +1 -1
  792. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +4 -2
  793. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  794. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +91 -10
  795. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -1
  796. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +14 -4
  797. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
  798. package/build/dist/UI/Components/TextArea/TextArea.js +9 -3
  799. package/build/dist/UI/Components/TextArea/TextArea.js.map +1 -1
  800. package/build/dist/UI/Components/Workflow/ModelFieldPicker.js +1 -2
  801. package/build/dist/UI/Components/Workflow/ModelFieldPicker.js.map +1 -1
  802. package/build/dist/Utils/LabelRuleImportExport.js +2 -0
  803. package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
  804. package/build/dist/Utils/Markdown/UntrustedMarkdown.js +988 -0
  805. package/build/dist/Utils/Markdown/UntrustedMarkdown.js.map +1 -0
  806. package/build/dist/Utils/Monitor/IncomingEmailMonitorRequestUtil.js +34 -0
  807. package/build/dist/Utils/Monitor/IncomingEmailMonitorRequestUtil.js.map +1 -0
  808. package/build/dist/Utils/Monitor/MonitorLogSummaryUtil.js +148 -0
  809. package/build/dist/Utils/Monitor/MonitorLogSummaryUtil.js.map +1 -0
  810. package/build/dist/Utils/Telemetry/EntityKey.js +36 -0
  811. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  812. package/package.json +1 -3
  813. package/Server/Utils/CommunityEditionSsoReport.ts +0 -361
  814. package/Tests/App/Accounts/LoginSsoEdition.test.tsx +0 -616
  815. package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +0 -217
  816. package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +0 -271
  817. package/Tests/App/Dashboard/CloudDocumentationMarkdown.test.ts +0 -215
  818. package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +0 -784
  819. package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +0 -518
  820. package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +0 -419
  821. package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +0 -769
  822. package/Tests/UI/Components/CodeEditor.test.tsx +0 -638
  823. package/Tests/UI/Components/MonacoLoader.test.ts +0 -67
  824. package/Tests/UI/Components/MonacoRuntime.test.ts +0 -121
  825. package/Tests/UI/Components/Telemetry/TelemetryRetentionConfigForm.test.tsx +0 -329
  826. package/Tests/UI/Components/YamlEditor.test.tsx +0 -847
  827. package/UI/Components/CodeEditor/MonacoLoader.ts +0 -36
  828. package/UI/Components/Telemetry/TelemetryRetentionConfigForm.tsx +0 -319
  829. package/UI/Components/Telemetry/TelemetryRetentionConfigSummary.tsx +0 -223
  830. package/build/dist/Server/Utils/CommunityEditionSsoReport.js +0 -223
  831. package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +0 -1
  832. package/build/dist/UI/Components/CodeEditor/MonacoLoader.js +0 -34
  833. package/build/dist/UI/Components/CodeEditor/MonacoLoader.js.map +0 -1
  834. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js +0 -171
  835. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js.map +0 -1
  836. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigSummary.js +0 -119
  837. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigSummary.js.map +0 -1
@@ -0,0 +1,1140 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import DatabaseService from "./DatabaseService";
11
+ import MessageQueueLabelRuleEngineService from "./MessageQueueLabelRuleEngineService";
12
+ import MessageQueueOwnerRuleEngineService from "./MessageQueueOwnerRuleEngineService";
13
+ import Model from "../../Models/DatabaseModels/MessageQueue";
14
+ import DatabaseConfig from "../DatabaseConfig";
15
+ import ModelPermission from "../Types/Database/Permissions/Index";
16
+ import RelationIdUtil from "../Utils/Database/RelationIdUtil";
17
+ import { truncateLongText, truncateShortText, } from "../Utils/Database/TruncateColumnValue";
18
+ import InProcessMemo from "../Utils/InProcessMemo";
19
+ import logger from "../Utils/Logger";
20
+ import ResourceFeedUtil from "../Utils/ResourceFeed/ResourceFeedUtil";
21
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
22
+ import ResourceHeartbeat from "../Utils/Telemetry/ResourceHeartbeat";
23
+ import URL from "../../Types/API/URL";
24
+ import OneUptimeDate from "../../Types/Date";
25
+ import BadDataException from "../../Types/Exception/BadDataException";
26
+ import { MESSAGE_QUEUE_DISPLAY_NAME_MAX_LENGTH, buildMessageQueueDisplayName, buildMessageQueueIdentifier, hasControlCharacter, toMessageQueueIdentity, } from "../../Types/MessageQueue/MessageQueueIdentity";
27
+ import { quoteManualMessageQueueInput, resolveManualMessageQueue, } from "../../Types/MessageQueue/MessageQueueManualIdentity";
28
+ import { getMessagingIdentitySystem, getMessagingSystemDisplayName, getMoreSpecificMessagingSystem, normalizeMessagingSystem, } from "../../Types/MessageQueue/MessagingSystem";
29
+ import ObjectID from "../../Types/ObjectID";
30
+ import { canonicalizeEntityValue } from "../../Utils/Telemetry/EntityKey";
31
+ import crypto from "crypto";
32
+ /*
33
+ * Two sightings, two namespaces: a queue named in an application's spans is a
34
+ * different fact from the broker reporting on it, and one must never be able
35
+ * to suppress the other inside a window - brokerMetricsLastSeenAt would stop
36
+ * moving while spans keep arriving.
37
+ */
38
+ const TRACE_SIGHTING_CACHE_NAMESPACE = "message-queue-trace-sighting";
39
+ const BROKER_METRICS_SIGHTING_CACHE_NAMESPACE = "message-queue-broker-metrics-sighting";
40
+ const SIGHTING_THROTTLE_SECONDS = 60;
41
+ const DEFAULT_AUTO_ARCHIVE_DAYS = 7;
42
+ const MIN_AUTO_ARCHIVE_DAYS = 1;
43
+ // Rows archived per sweep; the rest wait for the next five-minute run.
44
+ const AUTO_ARCHIVE_BATCH_SIZE = 500;
45
+ /*
46
+ * A person's Restore holds the sweep off this long (or the archive window,
47
+ * if that is longer) unless discovery sees the queue again first.
48
+ */
49
+ const MANUAL_RESTORE_GRACE_DAYS = 30;
50
+ const DEFAULT_AUTO_CREATE_BUDGET = 500;
51
+ /*
52
+ * The auto-create budget as the discovery path reads it: one count per
53
+ * project per minute per process, bumped locally by every create in
54
+ * between, so a burst of new destinations stops at the budget instead of a
55
+ * minute's worth past it.
56
+ */
57
+ const AUTO_CREATE_BUDGET_CACHE_MS = 60 * 1000;
58
+ // One "budget reached" warning per project per ten minutes per process.
59
+ const AUTO_CREATE_BUDGET_WARNING_MS = 10 * 60 * 1000;
60
+ const MANUAL_DISCOVERY_SOURCE = "manual";
61
+ /*
62
+ * The columns discovery reads back: enough to key telemetry (id, project,
63
+ * identifier), name it, refine its system and decide on archive handling.
64
+ */
65
+ const DISCOVERY_SELECT = {
66
+ _id: true,
67
+ projectId: true,
68
+ name: true,
69
+ queueIdentifier: true,
70
+ messagingSystem: true,
71
+ destinationName: true,
72
+ brokerScope: true,
73
+ discoverySource: true,
74
+ isArchived: true,
75
+ autoArchivedAt: true,
76
+ };
77
+ /*
78
+ * A discovered row's name as discovery wrote it (buildMessageQueueDisplayName
79
+ * of its destinationName): the destination itself, or - past the name
80
+ * column's width - its first characters, trailing spaces trimmed, and "…".
81
+ * A person renaming a queue is investing in it; this is how the sweep tells.
82
+ * Postgres counts code points and trims only spaces where the TypeScript
83
+ * counts UTF-16 units and trims any whitespace, so a long destination full
84
+ * of astral characters can read as renamed - never archived - which is the
85
+ * safe side to err on.
86
+ */
87
+ const DISCOVERY_NAMED_PREDICATE = `(mq."name" = mq."destinationName"
88
+ OR (
89
+ char_length(mq."destinationName") > ${MESSAGE_QUEUE_DISPLAY_NAME_MAX_LENGTH}
90
+ AND mq."name" = rtrim(left(mq."destinationName", ${MESSAGE_QUEUE_DISPLAY_NAME_MAX_LENGTH - 1})) || '…'
91
+ ))`;
92
+ /*
93
+ * "Nobody invested in this row", as one SQL predicate over `mq` (a
94
+ * MessageQueue row): no description, still the name discovery gave it, and
95
+ * no label or owner a person added - each checked against the row's own
96
+ * project and live rows only. Labels and owners that rules attached on
97
+ * their own (automaticAssignments) do not count: a catch-all rule would
98
+ * otherwise keep every discovered queue alive forever.
99
+ */
100
+ const UNTOUCHED_MESSAGE_QUEUE_PREDICATE = `(mq."description" IS NULL OR btrim(mq."description") = '')
101
+ AND ${DISCOVERY_NAMED_PREDICATE}
102
+ AND NOT EXISTS (
103
+ SELECT 1 FROM "MessageQueueLabel" l
104
+ INNER JOIN "Label" lbl ON lbl."_id" = l."labelId"
105
+ WHERE l."messageQueueId" = mq."_id"
106
+ AND lbl."projectId" = mq."projectId"
107
+ AND lbl."deletedAt" IS NULL
108
+ AND NOT (COALESCE(mq."automaticAssignments" -> 'labelIds', '[]'::jsonb) @> jsonb_build_array(l."labelId"::text))
109
+ )
110
+ AND NOT EXISTS (
111
+ SELECT 1 FROM "MessageQueueOwnerUser" ou
112
+ WHERE ou."messageQueueId" = mq."_id"
113
+ AND ou."projectId" = mq."projectId"
114
+ AND ou."deletedAt" IS NULL
115
+ AND NOT (COALESCE(mq."automaticAssignments" -> 'ownerUserIds', '[]'::jsonb) @> jsonb_build_array(ou."userId"::text))
116
+ )
117
+ AND NOT EXISTS (
118
+ SELECT 1 FROM "MessageQueueOwnerTeam" ot
119
+ WHERE ot."messageQueueId" = mq."_id"
120
+ AND ot."projectId" = mq."projectId"
121
+ AND ot."deletedAt" IS NULL
122
+ AND NOT (COALESCE(mq."automaticAssignments" -> 'ownerTeamIds', '[]'::jsonb) @> jsonb_build_array(ot."teamId"::text))
123
+ )`;
124
+ const AUTOMATIC_ASSIGNMENT_KINDS = ["labelIds", "ownerUserIds", "ownerTeamIds"];
125
+ export { resolveManualMessageQueue };
126
+ /*
127
+ * The Queues product's root service. A MessageQueue row is found and created
128
+ * by IDENTITY (queueIdentifier - system family, Azure namespace and
129
+ * destination, canonical), never by name: "orders" can be a Kafka topic and
130
+ * a RabbitMQ queue, and a person can rename any row.
131
+ *
132
+ * Invariants every discovery path relies on:
133
+ * - the (projectId, queueIdentifier) unique index is the only arbiter of a
134
+ * race: the loser of an insert re-reads the winner's row, and only the
135
+ * winner runs the rule engines;
136
+ * - a row's messagingSystem stays inside the identity family its
137
+ * identifier names, and only ever becomes more specific (jms ->
138
+ * activemq, never back);
139
+ * - discovery only ever un-archives a row it archived itself
140
+ * (autoArchivedAt), never one a person archived;
141
+ * - discovery stops creating rows once a project holds
142
+ * getAutoCreateBudget() live, non-archived discovered queues.
143
+ */
144
+ export class Service extends DatabaseService {
145
+ constructor() {
146
+ super(Model);
147
+ // Per project: its auto-created row count, as last read.
148
+ this.autoCreateCountMemo = new InProcessMemo({
149
+ ttlInMs: AUTO_CREATE_BUDGET_CACHE_MS,
150
+ maxEntries: 10000,
151
+ });
152
+ // Per project: a "budget reached" warning was logged recently.
153
+ this.autoCreateBudgetWarningMemo = new InProcessMemo({
154
+ ttlInMs: AUTO_CREATE_BUDGET_WARNING_MS,
155
+ maxEntries: 10000,
156
+ });
157
+ }
158
+ /*
159
+ * A person adding a queue from the dashboard or the API. Root creates -
160
+ * discovery - pass through untouched: they compute identity themselves.
161
+ *
162
+ * Everything set here is a user-creatable column on the model (name,
163
+ * messagingSystem, destinationName, brokerScope, queueIdentifier,
164
+ * discoverySource), because the column permission check runs after this
165
+ * hook. Setting a root-only column here would refuse every manual create.
166
+ *
167
+ * The create permission is checked FIRST, before any lookup: the refusal
168
+ * for a duplicate names a queue, and a caller who may not add a queue must
169
+ * not be able to use it to learn what exists.
170
+ *
171
+ * The typed system and destination go through the same normalization
172
+ * discovery applies (resolveManualMessageQueue), so the row keys the same
173
+ * identity the queue's own telemetry builds - an SQS queue URL is keyed by
174
+ * its name, a Pulsar short name by its persistent:// topic, a RabbitMQ
175
+ * queue by its whole name, as its broker's metrics key it.
176
+ */
177
+ async onBeforeCreate(createBy) {
178
+ if (createBy.props.isRoot) {
179
+ return { createBy: createBy, carryForward: null };
180
+ }
181
+ const data = createBy.data;
182
+ ModelPermission.checkCreatePermissions(Model, data, createBy.props);
183
+ // The tenant column is stamped from props.tenantId only after this hook.
184
+ const projectId = createBy.props.tenantId || data.projectId || undefined;
185
+ if (!projectId) {
186
+ throw new BadDataException("Project ID is required to add a queue.");
187
+ }
188
+ const manual = resolveManualMessageQueue({
189
+ messagingSystem: data.messagingSystem,
190
+ destinationName: data.destinationName,
191
+ brokerScope: data.brokerScope,
192
+ });
193
+ /*
194
+ * The unique index would otherwise answer a duplicate with a raw
195
+ * constraint error.
196
+ */
197
+ const sameIdentity = await this.findOneBy({
198
+ query: {
199
+ projectId: projectId,
200
+ queueIdentifier: manual.queueIdentifier,
201
+ },
202
+ select: {
203
+ _id: true,
204
+ name: true,
205
+ },
206
+ props: {
207
+ isRoot: true,
208
+ },
209
+ });
210
+ if (sameIdentity) {
211
+ // Named only when the caller may read it.
212
+ const sameIdentityName = sameIdentity.id
213
+ ? await this.getMessageQueueNameIfReadable({
214
+ messageQueueId: sameIdentity.id,
215
+ props: createBy.props,
216
+ })
217
+ : "";
218
+ throw new BadDataException(`The ${getMessagingSystemDisplayName(manual.system)} queue ${quoteManualMessageQueueInput(manual.destination)}${manual.brokerScope
219
+ ? ` in the ${quoteManualMessageQueueInput(manual.brokerScope)} namespace`
220
+ : ""} already exists${sameIdentityName ? `: "${sameIdentityName}"` : ""}.`);
221
+ }
222
+ const name = typeof data.name === "string" ? data.name.trim() : "";
223
+ data.messagingSystem = manual.system;
224
+ data.destinationName = manual.destination;
225
+ if (manual.brokerScope) {
226
+ data.brokerScope = manual.brokerScope;
227
+ }
228
+ else {
229
+ delete data.brokerScope;
230
+ }
231
+ data.queueIdentifier = manual.queueIdentifier;
232
+ // First creator wins, and a person creating it is "manual" - whatever was sent.
233
+ data.discoverySource = MANUAL_DISCOVERY_SOURCE;
234
+ data.name =
235
+ name || buildMessageQueueDisplayName({ destination: manual.destination });
236
+ return { createBy: createBy, carryForward: null };
237
+ }
238
+ async onCreateSuccess(_onCreate, createdItem) {
239
+ this.runCreatedSideEffects(createdItem);
240
+ return createdItem;
241
+ }
242
+ async onUpdateSuccess(onUpdate, updatedItemIds) {
243
+ const updateData = onUpdate.updateBy
244
+ .data;
245
+ /*
246
+ * A person archiving or restoring a row takes it out of discovery's
247
+ * hands: from now on only a person restores it. A person's Restore also
248
+ * holds off the auto-archive sweep (manuallyRestoredAt), which would
249
+ * otherwise re-archive a stale row within minutes. Discovery's own
250
+ * archive and restore are raw writes, so they never reach this hook.
251
+ */
252
+ if (ResourceFeedUtil.isArchiveChange(updateData) &&
253
+ !("autoArchivedAt" in updateData)) {
254
+ await this.recordArchiveDecisionByPerson(updatedItemIds, !updateData["isArchived"]);
255
+ }
256
+ /*
257
+ * Labels a person saves on a row are theirs, whichever rule first
258
+ * attached them: they now count as investment.
259
+ */
260
+ if ("labels" in updateData) {
261
+ const labelIds = readRelationIds(updateData["labels"]);
262
+ for (const messageQueueId of updatedItemIds) {
263
+ await this.forgetAutomaticAssignments({
264
+ messageQueueId: messageQueueId,
265
+ kind: "labelIds",
266
+ ids: labelIds,
267
+ });
268
+ }
269
+ }
270
+ return onUpdate;
271
+ }
272
+ /**
273
+ * The queue a sighting names, found by its identity - or, when none exists
274
+ * and creating is allowed, a new one.
275
+ *
276
+ * Lookup first, by (projectId, queueIdentifier) - the identifier built
277
+ * from `identity`, which is canonicalized again here. An existing row is
278
+ * told about the sighting: its messagingSystem is refined to `system` when
279
+ * that is more specific within the row's family (jms -> activemq, never
280
+ * back; getMoreSpecificMessagingSystem), and a row the auto-archive sweep
281
+ * archived is restored - never one a person archived. That happens whether
282
+ * or not creating is allowed.
283
+ *
284
+ * When no row exists: `{ queue: null, created: false }` if `allowCreate` is
285
+ * false, if the identity is invalid, or if the project holds
286
+ * getAutoCreateBudget() live, non-archived discovered queues already (or
287
+ * the count cannot be read - fail closed). Otherwise a row is created as
288
+ * root, without hooks, storing the sighting's SPECIFIC system (a `system`
289
+ * outside the identity's family falls back to the family itself), the
290
+ * display destination, the Azure namespace, the broker address, the
291
+ * discovery source and lastSeenAt (now). brokerMetricsLastSeenAt stays
292
+ * empty: the recordSighting call that follows every find or create sets
293
+ * it to the broker's datapoint time.
294
+ *
295
+ * Races: two writers can both miss the lookup. The unique index lets one
296
+ * insert win; the loser re-reads the winner's row, sights it as above and
297
+ * answers `created: false`. Only the winner runs the label and owner rule
298
+ * engines (fire and forget). A create failure that is not a lost race is
299
+ * thrown.
300
+ */
301
+ async findOrCreateByIdentity(data) {
302
+ const nothing = {
303
+ queue: null,
304
+ created: false,
305
+ };
306
+ if (!data || !data.projectId || !data.identity) {
307
+ return nothing;
308
+ }
309
+ const identity = toMessageQueueIdentity(data.identity);
310
+ const queueIdentifier = identity
311
+ ? buildMessageQueueIdentifier(identity)
312
+ : null;
313
+ if (!identity || !queueIdentifier) {
314
+ return nothing;
315
+ }
316
+ const system = getSightingSystem(data.system, identity);
317
+ const existing = await this.findByQueueIdentifier(data.projectId, queueIdentifier);
318
+ if (existing) {
319
+ await this.recordIdentitySighting(existing, system);
320
+ return { queue: existing, created: false };
321
+ }
322
+ if (!data.allowCreate) {
323
+ return nothing;
324
+ }
325
+ if (!(await this.allowsAutoCreate(data.projectId, queueIdentifier))) {
326
+ return nothing;
327
+ }
328
+ const source = data.source === "broker-metrics" ? "broker-metrics" : "traces";
329
+ const now = OneUptimeDate.getCurrentDate();
330
+ const destination = getDisplayDestination(data.destination, identity);
331
+ const newRow = new Model();
332
+ newRow.projectId = data.projectId;
333
+ newRow.name = truncateShortText(buildMessageQueueDisplayName({ destination: destination }));
334
+ newRow.queueIdentifier = queueIdentifier;
335
+ newRow.messagingSystem = truncateShortText(system);
336
+ newRow.destinationName = truncateLongText(destination);
337
+ if (identity.brokerScope) {
338
+ newRow.brokerScope = truncateShortText(identity.brokerScope);
339
+ }
340
+ const brokerAddress = cleanBrokerAddress(data.brokerAddress);
341
+ if (brokerAddress) {
342
+ newRow.brokerAddress = brokerAddress;
343
+ }
344
+ newRow.discoverySource = source;
345
+ /*
346
+ * No brokerMetricsLastSeenAt: only the broker-metrics sighting knows when
347
+ * the newest datapoint was taken (recordSighting, its only writer).
348
+ * Stamped now, it would move back to that older time moments later.
349
+ */
350
+ newRow.lastSeenAt = now;
351
+ let created;
352
+ try {
353
+ /*
354
+ * Without hooks: the rule engines run below, and only for the insert
355
+ * that won - a racing writer's loser never reaches them.
356
+ */
357
+ created = await this.create({
358
+ data: newRow,
359
+ props: {
360
+ isRoot: true,
361
+ ignoreHooks: true,
362
+ },
363
+ });
364
+ }
365
+ catch (error) {
366
+ // The same identity created by a racing writer.
367
+ const winner = await this.findByQueueIdentifier(data.projectId, queueIdentifier);
368
+ if (!winner) {
369
+ throw error;
370
+ }
371
+ await this.recordIdentitySighting(winner, system);
372
+ return { queue: winner, created: false };
373
+ }
374
+ this.noteAutoCreated(data.projectId);
375
+ this.runCreatedSideEffects(created);
376
+ return { queue: created, created: true };
377
+ }
378
+ /**
379
+ * Liveness: a queue was seen - in application spans (`traces`) or in the
380
+ * broker's own metrics (`broker-metrics`). One gated, non-blocking
381
+ * ResourceHeartbeat write per queue per source per window: lastSeenAt
382
+ * always, brokerMetricsLastSeenAt too for broker metrics, and the broker
383
+ * address (sanitized, clamped) only when it is non-empty and has changed
384
+ * since this source last wrote one. The two sources use separate cache
385
+ * namespaces, so neither can suppress the other.
386
+ *
387
+ * lastSeenAt is when discovery saw the queue - now - whichever source saw
388
+ * it, as DatabaseServerService.recordSighting writes it. Both sources
389
+ * write it, one after the other in every pass, each a plain SET, and
390
+ * their newest data can be minutes apart (Azure Monitor, CloudWatch and
391
+ * Cloud Monitoring deliver datapoints late; a source can also stop). A
392
+ * datapoint's own time from whichever source wrote last would move the
393
+ * column back behind the other's sighting - and a new row's behind its
394
+ * own creation.
395
+ *
396
+ * brokerMetricsLastSeenAt is `at`: when the newest broker datapoint the
397
+ * pass saw was taken (default now; a future or invalid value is read as
398
+ * now). Broker-metrics sightings are its only writer, and each pass's
399
+ * window ends later than the last one's, so it only moves forward.
400
+ * findOrCreateByIdentity leaves it empty on a new row: call this for
401
+ * every sighted row, created or found. A traces sighting ignores `at`.
402
+ *
403
+ * It restores nothing: findOrCreateByIdentity, which every discovery pass
404
+ * calls first, is what brings an auto-archived queue back.
405
+ */
406
+ async recordSighting(data) {
407
+ var _a;
408
+ if (!data || !data.queueId) {
409
+ return;
410
+ }
411
+ const isBrokerMetrics = data.source === "broker-metrics";
412
+ const now = OneUptimeDate.getCurrentDate();
413
+ const liveness = {
414
+ lastSeenAt: now,
415
+ };
416
+ if (isBrokerMetrics) {
417
+ liveness.brokerMetricsLastSeenAt = getSightingTime(data.at, now);
418
+ }
419
+ const metadata = {};
420
+ const brokerAddress = cleanBrokerAddress(data.brokerAddress);
421
+ if (brokerAddress) {
422
+ metadata.brokerAddress = brokerAddress;
423
+ }
424
+ await ResourceHeartbeat.write({
425
+ service: this,
426
+ id: data.queueId,
427
+ cacheNamespace: isBrokerMetrics
428
+ ? BROKER_METRICS_SIGHTING_CACHE_NAMESPACE
429
+ : TRACE_SIGHTING_CACHE_NAMESPACE,
430
+ throttleInSeconds: SIGHTING_THROTTLE_SECONDS,
431
+ liveness: liveness,
432
+ metadata: metadata,
433
+ fingerprint: brokerAddress
434
+ ? crypto.createHash("sha256").update(brokerAddress).digest("hex")
435
+ : "",
436
+ describe: `queue ${data.queueId.toString()} (${isBrokerMetrics ? "broker-metrics" : "traces"} sighting, project ${((_a = data.projectId) === null || _a === void 0 ? void 0 : _a.toString()) || "unknown"})`,
437
+ });
438
+ }
439
+ /*
440
+ * Days a discovered queue may go unseen before the sweep archives it
441
+ * (MESSAGE_QUEUE_AUTO_ARCHIVE_DAYS). Default 7, at least 1.
442
+ */
443
+ getAutoArchiveDays() {
444
+ return readIntegerEnv({
445
+ name: "MESSAGE_QUEUE_AUTO_ARCHIVE_DAYS",
446
+ defaultValue: DEFAULT_AUTO_ARCHIVE_DAYS,
447
+ min: MIN_AUTO_ARCHIVE_DAYS,
448
+ });
449
+ }
450
+ /**
451
+ * Archive discovered queues nobody has seen - and nobody has touched - for
452
+ * getAutoArchiveDays(). Discovery creates rows on its own, so without this
453
+ * a queue a decommissioned service used, or a per-run topic seen once in a
454
+ * trace, would sit in the list forever.
455
+ *
456
+ * "Untouched" is what makes this safe to do unasked: a manually added
457
+ * queue is never archived, and neither is one somebody invested in - a
458
+ * description, a rename, labels or owners a PERSON added (not the ones
459
+ * rules attached on their own). Every one of those checks is done in SQL,
460
+ * scoped to the row's project and to live rows
461
+ * (UNTOUCHED_MESSAGE_QUEUE_PREDICATE). A row a person restored from the
462
+ * archive is left alone until discovery sees it again or the grace period
463
+ * passes - their Restore must stick.
464
+ *
465
+ * The row is marked autoArchivedAt, which is what lets discovery restore
466
+ * it the moment it is seen again - and never restore one a person
467
+ * archived. At most AUTO_ARCHIVE_BATCH_SIZE rows per run, oldest first,
468
+ * in one statement. Returns how many rows were archived.
469
+ */
470
+ async autoArchiveStaleMessageQueues() {
471
+ const days = this.getAutoArchiveDays();
472
+ const now = OneUptimeDate.getCurrentDate();
473
+ const cutoff = OneUptimeDate.addRemoveDays(now, -days);
474
+ const restoreGraceCutoff = OneUptimeDate.addRemoveDays(now, -Math.max(MANUAL_RESTORE_GRACE_DAYS, days));
475
+ const archived = await this.getRepository().manager.query(`WITH "candidates" AS (
476
+ SELECT mq."_id"
477
+ FROM "MessageQueue" mq
478
+ WHERE mq."deletedAt" IS NULL
479
+ AND mq."isArchived" = false
480
+ AND mq."discoverySource" IS NOT NULL
481
+ AND mq."discoverySource" <> $3
482
+ AND COALESCE(mq."lastSeenAt", mq."createdAt") < $1
483
+ AND (
484
+ mq."manuallyRestoredAt" IS NULL
485
+ OR mq."manuallyRestoredAt" < $5
486
+ OR COALESCE(mq."lastSeenAt", mq."createdAt") > mq."manuallyRestoredAt"
487
+ )
488
+ AND ${UNTOUCHED_MESSAGE_QUEUE_PREDICATE}
489
+ ORDER BY COALESCE(mq."lastSeenAt", mq."createdAt") ASC
490
+ LIMIT $4
491
+ ),
492
+ "archived" AS (
493
+ UPDATE "MessageQueue" stale
494
+ SET "isArchived" = true,
495
+ "archivedAt" = $2,
496
+ "autoArchivedAt" = $2,
497
+ "archivedByUserId" = NULL,
498
+ "updatedAt" = CURRENT_TIMESTAMP
499
+ FROM "candidates"
500
+ WHERE stale."_id" = "candidates"."_id"
501
+ AND stale."isArchived" = false
502
+ RETURNING stale."_id" AS "_id", stale."projectId" AS "projectId"
503
+ )
504
+ SELECT "_id", "projectId" FROM "archived"`, [
505
+ cutoff,
506
+ now,
507
+ MANUAL_DISCOVERY_SOURCE,
508
+ AUTO_ARCHIVE_BATCH_SIZE,
509
+ restoreGraceCutoff,
510
+ ]);
511
+ return Array.isArray(archived) ? archived.length : 0;
512
+ }
513
+ /*
514
+ * How many discovered queues (traces, broker metrics) a project may
515
+ * accumulate before discovery stops creating more on its own
516
+ * (MESSAGE_QUEUE_AUTO_CREATE_BUDGET). Manual rows do not count and are
517
+ * never blocked; archived rows do not count, so the auto-archive sweep
518
+ * frees budget. Default 500, at least 0 (0 turns auto-creation off).
519
+ */
520
+ getAutoCreateBudget() {
521
+ return readIntegerEnv({
522
+ name: "MESSAGE_QUEUE_AUTO_CREATE_BUDGET",
523
+ defaultValue: DEFAULT_AUTO_CREATE_BUDGET,
524
+ min: 0,
525
+ });
526
+ }
527
+ /**
528
+ * True while the project holds fewer live, non-archived discovered queues
529
+ * than getAutoCreateBudget(). Always reads the count.
530
+ */
531
+ async isUnderAutoCreateBudget(projectId) {
532
+ const budget = this.getAutoCreateBudget();
533
+ if (budget <= 0) {
534
+ return false;
535
+ }
536
+ return (await this.countAutoCreatedMessageQueues(projectId)) < budget;
537
+ }
538
+ /**
539
+ * isUnderAutoCreateBudget as findOrCreateByIdentity asks it: the count is
540
+ * read at most once a minute per project in this process, and every row
541
+ * this process creates in between is added to it, so a burst of new
542
+ * destinations stops at the budget instead of a minute's worth past it.
543
+ */
544
+ async isUnderAutoCreateBudgetCached(projectId) {
545
+ const budget = this.getAutoCreateBudget();
546
+ if (budget <= 0) {
547
+ return false;
548
+ }
549
+ const key = projectId.toString();
550
+ let cached = this.autoCreateCountMemo.get(key);
551
+ if (!cached) {
552
+ cached = {
553
+ count: await this.countAutoCreatedMessageQueues(projectId),
554
+ readAtMs: Date.now(),
555
+ };
556
+ this.autoCreateCountMemo.set(key, cached);
557
+ }
558
+ return cached.count < budget;
559
+ }
560
+ // Live, non-archived, non-manual rows of one project.
561
+ async countAutoCreatedMessageQueues(projectId) {
562
+ const rows = await this.getRepository().manager.query(`SELECT COUNT(*)::int AS "count"
563
+ FROM "MessageQueue"
564
+ WHERE "projectId" = $1
565
+ AND "deletedAt" IS NULL
566
+ AND "isArchived" = false
567
+ AND COALESCE("discoverySource", '') <> $2`, [projectId.toString(), MANUAL_DISCOVERY_SOURCE]);
568
+ return readCount(rows);
569
+ }
570
+ /**
571
+ * Display name for this queue, or an empty string when the row is gone.
572
+ * Callers use it on a best-effort basis, so a missing row must not throw.
573
+ */
574
+ async getMessageQueueName(data) {
575
+ const messageQueue = await this.findOneById({
576
+ id: data.messageQueueId,
577
+ select: {
578
+ name: true,
579
+ },
580
+ props: {
581
+ isRoot: true,
582
+ },
583
+ });
584
+ return (messageQueue === null || messageQueue === void 0 ? void 0 : messageQueue.name) || "";
585
+ }
586
+ /**
587
+ * The queue's name - but only when `props` may read that row (project,
588
+ * label and Owned scopes applied); "" otherwise, or on any error. Refusal
589
+ * messages use it, so a caller with scoped permissions is never told the
590
+ * name of a queue they cannot see. Without props (or as root) the name is
591
+ * read as root.
592
+ */
593
+ async getMessageQueueNameIfReadable(data) {
594
+ if (!data.props || data.props.isRoot) {
595
+ return await this.getMessageQueueName({
596
+ messageQueueId: data.messageQueueId,
597
+ });
598
+ }
599
+ try {
600
+ const readable = await this.findOneBy({
601
+ query: {
602
+ _id: data.messageQueueId.toString(),
603
+ },
604
+ select: {
605
+ name: true,
606
+ },
607
+ props: data.props,
608
+ });
609
+ return (readable === null || readable === void 0 ? void 0 : readable.name) || "";
610
+ }
611
+ catch (_a) {
612
+ return "";
613
+ }
614
+ }
615
+ /**
616
+ * Validate the queue a child row (an owner) is created for by a caller:
617
+ * the FK column and the relation object must agree (TypeORM would persist
618
+ * the relation object's id over the column's), and the queue must be in
619
+ * the caller's project. Leaves the validated FK column as the only
620
+ * reference. Root creates are the caller's business.
621
+ */
622
+ async assertMessageQueueReferenceInProject(createBy) {
623
+ const data = createBy.data;
624
+ const projectId = createBy.props.tenantId ||
625
+ data.getColumnValue("projectId") ||
626
+ undefined;
627
+ if (!projectId) {
628
+ throw new BadDataException("Project ID is required.");
629
+ }
630
+ const messageQueueId = RelationIdUtil.readConsistent(data, ["messageQueueId", "messageQueue"], "queue");
631
+ data.setColumnValue("messageQueue", undefined);
632
+ if (!messageQueueId) {
633
+ throw new BadDataException("Select a queue.");
634
+ }
635
+ const messageQueue = await this.findOneBy({
636
+ query: {
637
+ _id: messageQueueId.toString(),
638
+ projectId: projectId,
639
+ },
640
+ select: {
641
+ _id: true,
642
+ },
643
+ props: {
644
+ isRoot: true,
645
+ },
646
+ });
647
+ if (!messageQueue) {
648
+ throw new BadDataException("Queue not found.");
649
+ }
650
+ data.setColumnValue("messageQueueId", messageQueueId);
651
+ return messageQueueId;
652
+ }
653
+ /**
654
+ * Record labels or owners that a rule attached to a queue on its own
655
+ * (MessageQueue.automaticAssignments), so the auto-archive sweep does not
656
+ * mistake them for a person's investment. One atomic statement; ids
657
+ * deduped. Never throws - it only annotates a write that happened.
658
+ */
659
+ async recordAutomaticAssignments(data) {
660
+ const ids = normalizeAssignmentIds(data.ids);
661
+ if (ids.length === 0 || !AUTOMATIC_ASSIGNMENT_KINDS.includes(data.kind)) {
662
+ return;
663
+ }
664
+ try {
665
+ await this.getRepository().manager.query(`UPDATE "MessageQueue"
666
+ SET "automaticAssignments" =
667
+ (CASE WHEN jsonb_typeof("automaticAssignments") = 'object' THEN "automaticAssignments" ELSE '{}'::jsonb END)
668
+ || jsonb_build_object(
669
+ $2::text,
670
+ (
671
+ SELECT COALESCE(jsonb_agg(DISTINCT assigned.id), '[]'::jsonb)
672
+ FROM jsonb_array_elements_text(
673
+ (CASE WHEN jsonb_typeof("automaticAssignments" -> $2::text) = 'array' THEN "automaticAssignments" -> $2::text ELSE '[]'::jsonb END)
674
+ || $3::jsonb
675
+ ) AS assigned(id)
676
+ )
677
+ )
678
+ WHERE "_id" = $1`, [data.messageQueueId.toString(), data.kind, JSON.stringify(ids)]);
679
+ }
680
+ catch (error) {
681
+ logger.warn(`MessageQueueService: could not record automatic ${data.kind} on queue ${data.messageQueueId.toString()}: ${error instanceof Error ? error.message : String(error)}`);
682
+ }
683
+ }
684
+ /**
685
+ * The opposite of recordAutomaticAssignments: a person (re)added these
686
+ * labels or owners, so from now on they count as investment. Never throws.
687
+ */
688
+ async forgetAutomaticAssignments(data) {
689
+ const ids = normalizeAssignmentIds(data.ids);
690
+ if (ids.length === 0 || !AUTOMATIC_ASSIGNMENT_KINDS.includes(data.kind)) {
691
+ return;
692
+ }
693
+ try {
694
+ await this.getRepository().manager.query(`UPDATE "MessageQueue"
695
+ SET "automaticAssignments" = "automaticAssignments" || jsonb_build_object(
696
+ $2::text,
697
+ (
698
+ SELECT COALESCE(jsonb_agg(assigned.id), '[]'::jsonb)
699
+ FROM jsonb_array_elements_text("automaticAssignments" -> $2::text) AS assigned(id)
700
+ WHERE NOT (assigned.id = ANY($3::text[]))
701
+ )
702
+ )
703
+ WHERE "_id" = $1
704
+ AND jsonb_typeof("automaticAssignments") = 'object'
705
+ AND jsonb_typeof("automaticAssignments" -> $2::text) = 'array'`, [data.messageQueueId.toString(), data.kind, ids]);
706
+ }
707
+ catch (error) {
708
+ logger.warn(`MessageQueueService: could not forget automatic ${data.kind} on queue ${data.messageQueueId.toString()}: ${error instanceof Error ? error.message : String(error)}`);
709
+ }
710
+ }
711
+ async getMessageQueueLinkInDashboard(projectId, messageQueueId) {
712
+ const dashboardUrl = await DatabaseConfig.getDashboardUrl();
713
+ return URL.fromString(dashboardUrl.toString()).addRoute(`/${projectId.toString()}/queues/${messageQueueId.toString()}`);
714
+ }
715
+ // "[Queue orders.created](https://…)" - the form a markdown message names a queue by.
716
+ async getMessageQueueMarkdownLink(projectId, messageQueueId) {
717
+ const name = await this.getMessageQueueName({
718
+ messageQueueId: messageQueueId,
719
+ });
720
+ const link = await this.getMessageQueueLinkInDashboard(projectId, messageQueueId);
721
+ return `[Queue ${name}](${link.toString()})`;
722
+ }
723
+ // For tests: forget the cached auto-create counts and budget warnings.
724
+ clearAutoCreateBudgetMemo() {
725
+ this.autoCreateCountMemo.clear();
726
+ this.autoCreateBudgetWarningMemo.clear();
727
+ }
728
+ // One live row by identifier, with the columns discovery reads back.
729
+ async findByQueueIdentifier(projectId, queueIdentifier) {
730
+ return await this.findOneBy({
731
+ query: {
732
+ projectId: projectId,
733
+ queueIdentifier: queueIdentifier,
734
+ },
735
+ select: DISCOVERY_SELECT,
736
+ props: {
737
+ isRoot: true,
738
+ },
739
+ });
740
+ }
741
+ /*
742
+ * What a sighting tells the row it names: the system is refined within its
743
+ * family, and a row the sweep archived is restored.
744
+ */
745
+ async recordIdentitySighting(row, system) {
746
+ await this.refineMessagingSystem(row, system);
747
+ await this.restoreIfAutoArchived(row);
748
+ }
749
+ /*
750
+ * The more specific system of the row's family (jms -> activemq), written
751
+ * only while the row still says what was read - a compare-and-set, so two
752
+ * sightings cannot interleave - and never outside the family: the
753
+ * identifier (and so the entity key telemetry is joined on) never moves.
754
+ * Never throws: a refinement must not fail the discovery that saw it.
755
+ */
756
+ async refineMessagingSystem(row, system) {
757
+ const current = row.messagingSystem;
758
+ const next = getMoreSpecificMessagingSystem(current, system);
759
+ if (!next || next === current || !row.id || !row.projectId) {
760
+ return;
761
+ }
762
+ try {
763
+ const refined = await this.getRepository().manager.query(`WITH "refined" AS (
764
+ UPDATE "MessageQueue"
765
+ SET "messagingSystem" = $1,
766
+ "updatedAt" = CURRENT_TIMESTAMP
767
+ WHERE "_id" = $2
768
+ AND "projectId" = $3
769
+ AND "deletedAt" IS NULL
770
+ AND "messagingSystem" IS NOT DISTINCT FROM $4
771
+ RETURNING "_id"
772
+ )
773
+ SELECT "_id" FROM "refined"`, [
774
+ truncateShortText(next),
775
+ row.id.toString(),
776
+ row.projectId.toString(),
777
+ current === undefined ? null : current,
778
+ ]);
779
+ if (Array.isArray(refined) && refined.length > 0) {
780
+ row.messagingSystem = next;
781
+ }
782
+ }
783
+ catch (error) {
784
+ logger.warn(`MessageQueueService: could not refine the messaging system of queue ${row.id.toString()} to ${next}: ${error instanceof Error ? error.message : String(error)}`, { projectId: row.projectId.toString() });
785
+ }
786
+ }
787
+ /*
788
+ * Restore a row the auto-archive sweep archived, now that it was seen
789
+ * again. The conditions live in the UPDATE itself, so a row a person
790
+ * archived (autoArchivedAt cleared - see onUpdateSuccess) or a row a person
791
+ * restored in the meantime is never touched. Never throws: a restore must
792
+ * not fail the discovery that triggered it.
793
+ */
794
+ async restoreIfAutoArchived(row) {
795
+ if (!row.isArchived || !row.autoArchivedAt || !row.id || !row.projectId) {
796
+ return false;
797
+ }
798
+ try {
799
+ const restored = await this.getRepository().manager.query(`WITH "restored" AS (
800
+ UPDATE "MessageQueue"
801
+ SET "isArchived" = false,
802
+ "archivedAt" = NULL,
803
+ "archivedByUserId" = NULL,
804
+ "autoArchivedAt" = NULL,
805
+ "updatedAt" = CURRENT_TIMESTAMP
806
+ WHERE "_id" = $1
807
+ AND "projectId" = $2
808
+ AND "isArchived" = true
809
+ AND "autoArchivedAt" IS NOT NULL
810
+ AND "deletedAt" IS NULL
811
+ RETURNING "_id"
812
+ )
813
+ SELECT "_id" FROM "restored"`, [row.id.toString(), row.projectId.toString()]);
814
+ /*
815
+ * Nothing matched: a person restored it, or archived it themselves, in
816
+ * the meantime. Their state stands - the in-memory row is left as read.
817
+ */
818
+ if (!Array.isArray(restored) || restored.length === 0) {
819
+ return false;
820
+ }
821
+ row.isArchived = false;
822
+ delete row.autoArchivedAt;
823
+ return true;
824
+ }
825
+ catch (error) {
826
+ logger.warn(`MessageQueueService: could not restore auto-archived queue ${row.id.toString()}: ${error instanceof Error ? error.message : String(error)}`, { projectId: row.projectId.toString() });
827
+ return false;
828
+ }
829
+ }
830
+ /*
831
+ * A person archived (restored = false) or restored a row: it is no longer
832
+ * discovery's archive (autoArchivedAt cleared), and a restore is stamped
833
+ * so the sweep leaves the row alone until it is seen again or the grace
834
+ * period passes (manuallyRestoredAt; cleared again on an archive).
835
+ */
836
+ async recordArchiveDecisionByPerson(messageQueueIds, restored) {
837
+ const now = OneUptimeDate.getCurrentDate();
838
+ for (const messageQueueId of messageQueueIds) {
839
+ try {
840
+ await this.updateColumnsByIdWithoutHooks({
841
+ id: messageQueueId,
842
+ data: {
843
+ autoArchivedAt: null,
844
+ manuallyRestoredAt: restored ? now : null,
845
+ },
846
+ skipUpdateDateColumn: true,
847
+ });
848
+ }
849
+ catch (error) {
850
+ logger.warn(`MessageQueueService: could not record the ${restored ? "restore" : "archive"} of queue ${messageQueueId.toString()}: ${error instanceof Error ? error.message : String(error)}`);
851
+ }
852
+ }
853
+ }
854
+ /*
855
+ * The discovery path's budget gate: false when the project has reached its
856
+ * auto-create budget - warned about once per project per ten minutes,
857
+ * since every discovery pass would otherwise repeat it for every new
858
+ * destination - or when the count cannot be read (fail closed).
859
+ */
860
+ async allowsAutoCreate(projectId, queueIdentifier) {
861
+ let underBudget = false;
862
+ try {
863
+ underBudget = await this.isUnderAutoCreateBudgetCached(projectId);
864
+ }
865
+ catch (error) {
866
+ logger.error(`MessageQueueService: auto-create budget check failed for project ${projectId.toString()}; not creating queue ${queueIdentifier}: ${error instanceof Error ? error.message : String(error)}`, { projectId: projectId.toString() });
867
+ return false;
868
+ }
869
+ if (!underBudget) {
870
+ const key = projectId.toString();
871
+ if (!this.autoCreateBudgetWarningMemo.get(key)) {
872
+ this.autoCreateBudgetWarningMemo.set(key, true);
873
+ logger.warn(`MessageQueueService: project ${key} reached its auto-create budget (MESSAGE_QUEUE_AUTO_CREATE_BUDGET=${this.getAutoCreateBudget()}); not creating queue ${queueIdentifier}, nor any other new queue until the project is under the budget again (this warning repeats at most every ten minutes). Raise the budget, archive or delete queues nobody needs, or add the queue manually.`, { projectId: key });
874
+ }
875
+ }
876
+ return underBudget;
877
+ }
878
+ // A row was auto-created: count it against the cached budget straight away.
879
+ noteAutoCreated(projectId) {
880
+ const key = projectId.toString();
881
+ const cached = this.autoCreateCountMemo.get(key);
882
+ if (!cached) {
883
+ return;
884
+ }
885
+ const remainingMs = cached.readAtMs + AUTO_CREATE_BUDGET_CACHE_MS - Date.now();
886
+ if (remainingMs <= 0) {
887
+ this.autoCreateCountMemo.delete(key);
888
+ return;
889
+ }
890
+ this.autoCreateCountMemo.set(key, { count: cached.count + 1, readAtMs: cached.readAtMs }, remainingMs);
891
+ }
892
+ /*
893
+ * Rules run once, on creation only - exact parity with the other resource
894
+ * types. Label engine first: it syncs the in-memory labels so the owner
895
+ * engine can match rule-added labels. Fire and forget: they may not fail
896
+ * the create they follow.
897
+ */
898
+ runCreatedSideEffects(createdItem) {
899
+ if (!createdItem.projectId || !createdItem.id) {
900
+ return;
901
+ }
902
+ Promise.resolve()
903
+ .then(async () => {
904
+ await MessageQueueLabelRuleEngineService.applyRulesToMessageQueue(createdItem);
905
+ })
906
+ .then(async () => {
907
+ await MessageQueueOwnerRuleEngineService.applyRulesToMessageQueue(createdItem);
908
+ })
909
+ .catch((error) => {
910
+ var _a, _b;
911
+ logger.error(`Error applying queue rules in MessageQueueService: ${error}`, {
912
+ projectId: (_a = createdItem.projectId) === null || _a === void 0 ? void 0 : _a.toString(),
913
+ messageQueueId: (_b = createdItem.id) === null || _b === void 0 ? void 0 : _b.toString(),
914
+ });
915
+ });
916
+ }
917
+ }
918
+ __decorate([
919
+ CaptureSpan(),
920
+ __metadata("design:type", Function),
921
+ __metadata("design:paramtypes", [Object]),
922
+ __metadata("design:returntype", Promise)
923
+ ], Service.prototype, "onBeforeCreate", null);
924
+ __decorate([
925
+ CaptureSpan(),
926
+ __metadata("design:type", Function),
927
+ __metadata("design:paramtypes", [Object, Model]),
928
+ __metadata("design:returntype", Promise)
929
+ ], Service.prototype, "onCreateSuccess", null);
930
+ __decorate([
931
+ CaptureSpan(),
932
+ __metadata("design:type", Function),
933
+ __metadata("design:paramtypes", [Object, Array]),
934
+ __metadata("design:returntype", Promise)
935
+ ], Service.prototype, "onUpdateSuccess", null);
936
+ __decorate([
937
+ CaptureSpan(),
938
+ __metadata("design:type", Function),
939
+ __metadata("design:paramtypes", [Object]),
940
+ __metadata("design:returntype", Promise)
941
+ ], Service.prototype, "findOrCreateByIdentity", null);
942
+ __decorate([
943
+ CaptureSpan(),
944
+ __metadata("design:type", Function),
945
+ __metadata("design:paramtypes", [Object]),
946
+ __metadata("design:returntype", Promise)
947
+ ], Service.prototype, "recordSighting", null);
948
+ __decorate([
949
+ CaptureSpan(),
950
+ __metadata("design:type", Function),
951
+ __metadata("design:paramtypes", []),
952
+ __metadata("design:returntype", Promise)
953
+ ], Service.prototype, "autoArchiveStaleMessageQueues", null);
954
+ __decorate([
955
+ CaptureSpan(),
956
+ __metadata("design:type", Function),
957
+ __metadata("design:paramtypes", [ObjectID]),
958
+ __metadata("design:returntype", Promise)
959
+ ], Service.prototype, "isUnderAutoCreateBudget", null);
960
+ __decorate([
961
+ CaptureSpan(),
962
+ __metadata("design:type", Function),
963
+ __metadata("design:paramtypes", [ObjectID]),
964
+ __metadata("design:returntype", Promise)
965
+ ], Service.prototype, "isUnderAutoCreateBudgetCached", null);
966
+ __decorate([
967
+ CaptureSpan(),
968
+ __metadata("design:type", Function),
969
+ __metadata("design:paramtypes", [ObjectID]),
970
+ __metadata("design:returntype", Promise)
971
+ ], Service.prototype, "countAutoCreatedMessageQueues", null);
972
+ __decorate([
973
+ CaptureSpan(),
974
+ __metadata("design:type", Function),
975
+ __metadata("design:paramtypes", [Object]),
976
+ __metadata("design:returntype", Promise)
977
+ ], Service.prototype, "getMessageQueueName", null);
978
+ __decorate([
979
+ CaptureSpan(),
980
+ __metadata("design:type", Function),
981
+ __metadata("design:paramtypes", [Object]),
982
+ __metadata("design:returntype", Promise)
983
+ ], Service.prototype, "getMessageQueueNameIfReadable", null);
984
+ __decorate([
985
+ CaptureSpan(),
986
+ __metadata("design:type", Function),
987
+ __metadata("design:paramtypes", [Object]),
988
+ __metadata("design:returntype", Promise)
989
+ ], Service.prototype, "assertMessageQueueReferenceInProject", null);
990
+ __decorate([
991
+ CaptureSpan(),
992
+ __metadata("design:type", Function),
993
+ __metadata("design:paramtypes", [Object]),
994
+ __metadata("design:returntype", Promise)
995
+ ], Service.prototype, "recordAutomaticAssignments", null);
996
+ __decorate([
997
+ CaptureSpan(),
998
+ __metadata("design:type", Function),
999
+ __metadata("design:paramtypes", [Object]),
1000
+ __metadata("design:returntype", Promise)
1001
+ ], Service.prototype, "forgetAutomaticAssignments", null);
1002
+ __decorate([
1003
+ CaptureSpan(),
1004
+ __metadata("design:type", Function),
1005
+ __metadata("design:paramtypes", [ObjectID,
1006
+ ObjectID]),
1007
+ __metadata("design:returntype", Promise)
1008
+ ], Service.prototype, "getMessageQueueLinkInDashboard", null);
1009
+ __decorate([
1010
+ CaptureSpan(),
1011
+ __metadata("design:type", Function),
1012
+ __metadata("design:paramtypes", [ObjectID,
1013
+ ObjectID]),
1014
+ __metadata("design:returntype", Promise)
1015
+ ], Service.prototype, "getMessageQueueMarkdownLink", null);
1016
+ /**
1017
+ * The values a label or owner rule's messaging system pattern is matched
1018
+ * against: the canonical messaging.system value ("kafka") and its display
1019
+ * name ("Apache Kafka"), deduped, empty ones dropped - so both `^kafka$`
1020
+ * and `Kafka` say "every Kafka topic". An unknown system is matched as
1021
+ * stored.
1022
+ */
1023
+ export function getMessagingSystemRuleMatchValues(system) {
1024
+ const raw = typeof system === "string" ? system.trim() : "";
1025
+ const canonical = normalizeMessagingSystem(raw) || raw;
1026
+ const values = [];
1027
+ for (const value of [canonical, getMessagingSystemDisplayName(canonical)]) {
1028
+ if (value && !values.includes(value)) {
1029
+ values.push(value);
1030
+ }
1031
+ }
1032
+ return values;
1033
+ }
1034
+ /*
1035
+ * The system a sighting stores: its own specific system when that belongs
1036
+ * to the identity's family (activemq for a jms identity), else the family
1037
+ * itself - a row never stores a system outside the family its identifier
1038
+ * names.
1039
+ */
1040
+ function getSightingSystem(system, identity) {
1041
+ const specific = normalizeMessagingSystem(system);
1042
+ if (specific && getMessagingIdentitySystem(specific) === identity.system) {
1043
+ return specific;
1044
+ }
1045
+ return identity.system;
1046
+ }
1047
+ /*
1048
+ * The destination as the sighting spells it, trimmed - when it is the one
1049
+ * the identity names; the identity's canonical destination otherwise.
1050
+ */
1051
+ function getDisplayDestination(destination, identity) {
1052
+ const display = typeof destination === "string" ? destination.trim() : "";
1053
+ return display && canonicalizeEntityValue(display) === identity.destination
1054
+ ? display
1055
+ : identity.destination;
1056
+ }
1057
+ /*
1058
+ * A broker address as the row may store it: trimmed, clamped to the column,
1059
+ * null when blank or when it holds a control character.
1060
+ */
1061
+ function cleanBrokerAddress(value) {
1062
+ if (typeof value !== "string") {
1063
+ return null;
1064
+ }
1065
+ const address = value.trim();
1066
+ if (!address || hasControlCharacter(address)) {
1067
+ return null;
1068
+ }
1069
+ return truncateLongText(address);
1070
+ }
1071
+ /*
1072
+ * A broker datapoint's time as a sighting reports it: `now`, unless a valid
1073
+ * time no later than `now` was given.
1074
+ */
1075
+ function getSightingTime(at, now) {
1076
+ if (!(at instanceof Date) || !Number.isFinite(at.getTime())) {
1077
+ return now;
1078
+ }
1079
+ return at.getTime() > now.getTime() ? now : at;
1080
+ }
1081
+ /*
1082
+ * A positive-integer env setting: unset or unparseable → the default, below
1083
+ * the floor → the floor.
1084
+ */
1085
+ function readIntegerEnv(data) {
1086
+ const raw = process.env[data.name];
1087
+ if (raw === undefined || raw.trim() === "") {
1088
+ return data.defaultValue;
1089
+ }
1090
+ const parsed = Number(raw.trim());
1091
+ if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) {
1092
+ return data.defaultValue;
1093
+ }
1094
+ return Math.max(parsed, data.min);
1095
+ }
1096
+ function readCount(rows) {
1097
+ var _a;
1098
+ if (!Array.isArray(rows) || rows.length === 0) {
1099
+ return 0;
1100
+ }
1101
+ const count = Number((_a = rows[0]) === null || _a === void 0 ? void 0 : _a.count);
1102
+ return Number.isFinite(count) ? count : 0;
1103
+ }
1104
+ /*
1105
+ * The ids in a relation payload (an update's `labels`): model instances,
1106
+ * `{ _id }` / `{ id }` objects, ObjectIDs or id strings. Anything else is
1107
+ * skipped.
1108
+ */
1109
+ function readRelationIds(value) {
1110
+ const ids = [];
1111
+ for (const item of Array.isArray(value) ? value : []) {
1112
+ let id = item;
1113
+ if (item && typeof item === "object" && !(item instanceof ObjectID)) {
1114
+ id =
1115
+ item._id ||
1116
+ item.id;
1117
+ }
1118
+ const text = id instanceof ObjectID || typeof id === "string" ? id.toString() : "";
1119
+ if (text) {
1120
+ ids.push(text);
1121
+ }
1122
+ }
1123
+ return ids;
1124
+ }
1125
+ /*
1126
+ * Assignment ids as automaticAssignments stores them: lowercase UUID strings
1127
+ * (what Postgres prints for a uuid column), deduped, invalid ones dropped.
1128
+ */
1129
+ function normalizeAssignmentIds(ids) {
1130
+ const result = [];
1131
+ for (const id of Array.isArray(ids) ? ids : []) {
1132
+ const text = (id ? id.toString() : "").trim().toLowerCase();
1133
+ if (text && ObjectID.isValidUUID(text) && !result.includes(text)) {
1134
+ result.push(text);
1135
+ }
1136
+ }
1137
+ return result;
1138
+ }
1139
+ export default new Service();
1140
+ //# sourceMappingURL=MessageQueueService.js.map