@oneuptime/common 14.0.9 → 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 (1146) hide show
  1. package/Models/DatabaseModels/AIConversation.ts +127 -1
  2. package/Models/DatabaseModels/AutoRemediationSuggestion.ts +60 -0
  3. package/Models/DatabaseModels/CephCluster.ts +225 -0
  4. package/Models/DatabaseModels/CloudResource.ts +12 -0
  5. package/Models/DatabaseModels/DatabaseServer.ts +225 -0
  6. package/Models/DatabaseModels/DockerHost.ts +225 -0
  7. package/Models/DatabaseModels/DockerSwarmCluster.ts +225 -0
  8. package/Models/DatabaseModels/GlobalConfig.ts +1 -1
  9. package/Models/DatabaseModels/GlobalOidc.ts +0 -4
  10. package/Models/DatabaseModels/GlobalOidcProject.ts +0 -4
  11. package/Models/DatabaseModels/GlobalSso.ts +0 -4
  12. package/Models/DatabaseModels/GlobalSsoProject.ts +0 -4
  13. package/Models/DatabaseModels/Host.ts +225 -0
  14. package/Models/DatabaseModels/IncidentForm.ts +594 -0
  15. package/Models/DatabaseModels/IncidentFormSubmission.ts +283 -0
  16. package/Models/DatabaseModels/IncidentTemplate.ts +59 -0
  17. package/Models/DatabaseModels/Index.ts +16 -0
  18. package/Models/DatabaseModels/IoTFleet.ts +12 -0
  19. package/Models/DatabaseModels/KubernetesCluster.ts +12 -0
  20. package/Models/DatabaseModels/MessageQueue.ts +1102 -0
  21. package/Models/DatabaseModels/MessageQueueLabelRule.ts +553 -0
  22. package/Models/DatabaseModels/MessageQueueOwnerRule.ts +633 -0
  23. package/Models/DatabaseModels/MessageQueueOwnerTeam.ts +491 -0
  24. package/Models/DatabaseModels/MessageQueueOwnerUser.ts +490 -0
  25. package/Models/DatabaseModels/PodmanHost.ts +225 -0
  26. package/Models/DatabaseModels/Project.ts +59 -0
  27. package/Models/DatabaseModels/ProjectOidc.ts +0 -4
  28. package/Models/DatabaseModels/ProjectSso.ts +0 -4
  29. package/Models/DatabaseModels/ProxmoxCluster.ts +225 -0
  30. package/Models/DatabaseModels/ResourceAiAgent.ts +419 -0
  31. package/Models/DatabaseModels/RumApplication.ts +12 -0
  32. package/Models/DatabaseModels/RunnerJob.ts +144 -0
  33. package/Models/DatabaseModels/ServerlessFunction.ts +12 -0
  34. package/Models/DatabaseModels/Service.ts +12 -0
  35. package/Models/DatabaseModels/StatusPageOidc.ts +0 -4
  36. package/Models/DatabaseModels/StatusPageSso.ts +0 -4
  37. package/Models/DatabaseModels/TeamComplianceSetting.ts +47 -2
  38. package/Models/DatabaseModels/VMwareVCenter.ts +225 -0
  39. package/Server/API/AIChatAPI.ts +13 -114
  40. package/Server/API/AIInvestigationAPI.ts +3 -3
  41. package/Server/API/AIInvestigationConversationAPI.ts +266 -0
  42. package/Server/API/AutoRemediationAPI.ts +392 -1
  43. package/Server/API/IncidentFormAPI.ts +376 -0
  44. package/Server/API/ProjectOIDC.ts +16 -25
  45. package/Server/API/ProjectSSO.ts +16 -24
  46. package/Server/API/ResourceAiAccessAPI.ts +1669 -0
  47. package/Server/API/StatusPageAPI.ts +42 -77
  48. package/Server/Enterprise/EnterpriseEdition.ts +93 -28
  49. package/Server/Enterprise/EnterpriseFeature.ts +25 -3
  50. package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +1 -1
  51. package/Server/Enterprise/EnterpriseServerModule.ts +4 -1
  52. package/Server/EnvironmentConfig.ts +1 -1
  53. package/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.ts +423 -0
  54. package/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.ts +129 -0
  55. package/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.ts +52 -0
  56. package/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.ts +75 -0
  57. package/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.ts +477 -0
  58. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  59. package/Server/Infrastructure/Semaphore.ts +22 -0
  60. package/Server/Middleware/IncidentFormRateLimit.ts +847 -0
  61. package/Server/Middleware/TelemetryIngest.ts +15 -5
  62. package/Server/Middleware/UserAuthorization.ts +16 -38
  63. package/Server/Services/AIService.ts +10 -13
  64. package/Server/Services/AnalyticsDatabaseService.ts +45 -1
  65. package/Server/Services/AutoRemediationRuleEngineService.ts +940 -112
  66. package/Server/Services/CephClusterService.ts +109 -1
  67. package/Server/Services/DatabaseServerService.ts +116 -1
  68. package/Server/Services/DockerHostService.ts +109 -1
  69. package/Server/Services/DockerSwarmClusterService.ts +113 -1
  70. package/Server/Services/HostService.ts +126 -4
  71. package/Server/Services/IncidentCustomFieldService.ts +112 -2
  72. package/Server/Services/IncidentEpisodeMemberService.ts +24 -4
  73. package/Server/Services/IncidentEpisodeService.ts +10 -1
  74. package/Server/Services/IncidentFormService.ts +1566 -0
  75. package/Server/Services/IncidentFormSubmissionService.ts +97 -0
  76. package/Server/Services/IncidentGroupingEngineService.ts +45 -8
  77. package/Server/Services/IncidentService.ts +123 -5
  78. package/Server/Services/IncidentTemplateService.ts +22 -0
  79. package/Server/Services/Index.ts +14 -0
  80. package/Server/Services/MessageQueueLabelRuleEngineService.ts +321 -0
  81. package/Server/Services/MessageQueueLabelRuleService.ts +14 -0
  82. package/Server/Services/MessageQueueOwnerRuleEngineService.ts +412 -0
  83. package/Server/Services/MessageQueueOwnerRuleService.ts +14 -0
  84. package/Server/Services/MessageQueueOwnerTeamService.ts +62 -0
  85. package/Server/Services/MessageQueueOwnerUserService.ts +62 -0
  86. package/Server/Services/MessageQueueService.ts +1463 -0
  87. package/Server/Services/MetricRecordingRuleService.ts +47 -0
  88. package/Server/Services/OpenTelemetryIngestService.ts +37 -4
  89. package/Server/Services/PodmanHostService.ts +109 -1
  90. package/Server/Services/ProjectService.ts +0 -59
  91. package/Server/Services/ProxmoxClusterService.ts +110 -1
  92. package/Server/Services/ResourceAiAccessService.ts +1439 -0
  93. package/Server/Services/ResourceAiAgentJobService.ts +202 -0
  94. package/Server/Services/ResourceAiAgentService.ts +2432 -0
  95. package/Server/Services/RunnerJobService.ts +611 -4
  96. package/Server/Services/StatusPagePrivateUserService.ts +1 -4
  97. package/Server/Services/StatusPageService.ts +1 -51
  98. package/Server/Services/TeamComplianceSettingService.ts +163 -42
  99. package/Server/Services/TelemetryUsageBillingService.ts +28 -0
  100. package/Server/Services/TraceRecordingRuleService.ts +33 -0
  101. package/Server/Services/UserNotificationRuleService.ts +8 -1
  102. package/Server/Services/VMwareVCenterService.ts +110 -1
  103. package/Server/Services/WorkspaceNotificationSummaryService.ts +12 -3
  104. package/Server/Types/Database/Permissions/CreatePermission.ts +17 -3
  105. package/Server/Types/Database/Permissions/EditionPermission.ts +140 -38
  106. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +16 -0
  107. package/Server/Types/Database/Permissions/TablePermission.ts +3 -3
  108. package/Server/Types/Database/Permissions/UpdatePermission.ts +20 -6
  109. package/Server/Utils/AI/Chat/AgentContextCompactor.ts +200 -0
  110. package/Server/Utils/AI/Chat/ChatAgentRunner.ts +307 -48
  111. package/Server/Utils/AI/Chat/ChatRunCancellation.ts +156 -0
  112. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +78 -18
  113. package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +1 -1
  114. package/Server/Utils/AI/Chat/ToolOutputPager.ts +322 -0
  115. package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +88 -30
  116. package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +13 -1
  117. package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +0 -32
  118. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +27 -25
  119. package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +1442 -34
  120. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +968 -34
  121. package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +25 -1
  122. package/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.ts +622 -0
  123. package/Server/Utils/AI/ResourceAccess/ResourceAccessContext.ts +271 -0
  124. package/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.ts +45 -0
  125. package/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.ts +964 -0
  126. package/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.ts +333 -0
  127. package/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.ts +882 -0
  128. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +125 -12
  129. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +99 -15
  130. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +99 -15
  131. package/Server/Utils/AI/SRE/InvestigationQueue.ts +16 -19
  132. package/Server/Utils/AI/SRE/InvestigationThread.ts +646 -0
  133. package/Server/Utils/AI/SRE/InvestigationThreadService.ts +715 -0
  134. package/Server/Utils/AI/Toolbox/Serializer.ts +10 -3
  135. package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +396 -13
  136. package/Server/Utils/AutoRemediation/RemediationVerifier.ts +35 -2
  137. package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +9 -1
  138. package/Server/Utils/EditionEnforcement.ts +19 -202
  139. package/Server/Utils/LLM/LLMService.ts +259 -63
  140. package/Server/Utils/RelaxedScimTeamLocksReport.ts +245 -0
  141. package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +25 -0
  142. package/Server/Utils/SameOriginRequest.ts +203 -0
  143. package/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.ts +920 -0
  144. package/Server/Utils/SessionReplay/SessionReplayUsage.ts +84 -6
  145. package/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.ts +2 -0
  146. package/Server/Utils/Telemetry/EntityRegistry.ts +4 -1
  147. package/Server/Utils/Telemetry/MessageQueueDiscovery.ts +1402 -0
  148. package/Server/Utils/Telemetry/ResourceEntityFilter.ts +4 -1
  149. package/Server/Utils/VendorAssets.ts +3 -3
  150. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +35 -15
  151. package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +33 -15
  152. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.ts +21 -1
  153. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +301 -225
  154. package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +38 -16
  155. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +389 -175
  156. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +376 -144
  157. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.ts +163 -0
  158. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.ts +396 -0
  159. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.ts +418 -0
  160. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.ts +152 -0
  161. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.ts +251 -0
  162. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.ts +214 -0
  163. package/Tests/App/Accounts/IncidentFormPage.test.tsx +2036 -0
  164. package/Tests/App/Accounts/IncidentFormServerMessages.test.ts +119 -0
  165. package/Tests/App/Accounts/IncidentFormUtils.test.ts +1157 -0
  166. package/Tests/App/Accounts/LoginPasskey.test.tsx +6 -4
  167. package/Tests/App/Accounts/LoginSso.test.tsx +724 -0
  168. package/Tests/App/AdminDashboard/AdminAuthenticationRequireSso.test.tsx +338 -0
  169. package/Tests/App/AdminDashboard/AdminAuthenticationSsoCardLocales.test.tsx +331 -0
  170. package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +47 -33
  171. package/Tests/App/AdminDashboard/GlobalSsoOidcPages.test.tsx +1021 -0
  172. package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +876 -78
  173. package/Tests/App/Dashboard/AffectedResourcesSlo.test.tsx +20 -3
  174. package/Tests/App/Dashboard/CephProxmoxVMwareDocumentationCards.test.tsx +359 -0
  175. package/Tests/App/Dashboard/CephSetupGuide.test.ts +961 -0
  176. package/Tests/App/Dashboard/CloudDocumentationCard.test.tsx +381 -95
  177. package/Tests/App/Dashboard/CloudSetupGuide.test.ts +1463 -0
  178. package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +267 -12
  179. package/Tests/App/Dashboard/ContainerSetupGuideCards.test.tsx +345 -0
  180. package/Tests/App/Dashboard/CoreListEmptyStates.test.tsx +501 -0
  181. package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +0 -1
  182. package/Tests/App/Dashboard/DatabaseDocumentationCard.test.tsx +400 -0
  183. package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +23 -6
  184. package/Tests/App/Dashboard/DatabaseSetupGuide.test.ts +1869 -0
  185. package/Tests/App/Dashboard/DatabaseTelemetryScope.test.ts +44 -0
  186. package/Tests/App/Dashboard/DatabaseTelemetryTabs.test.tsx +50 -9
  187. package/Tests/App/Dashboard/DockerSetupGuide.test.ts +899 -0
  188. package/Tests/App/Dashboard/DockerSwarmSetupGuide.test.ts +964 -0
  189. package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +141 -7
  190. package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +52 -39
  191. package/Tests/App/Dashboard/EventOverviewPages.test.tsx +7 -1
  192. package/Tests/App/Dashboard/GettingStartedTaskRoutes.test.tsx +331 -0
  193. package/Tests/App/Dashboard/HomeOverviewStatsFirstRun.test.tsx +925 -0
  194. package/Tests/App/Dashboard/HostDocumentationCard.test.tsx +225 -0
  195. package/Tests/App/Dashboard/HostSetupGuide.test.ts +1183 -0
  196. package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +69 -45
  197. package/Tests/App/Dashboard/IncidentCreateTemplateCustomFieldSettings.test.tsx +745 -0
  198. package/Tests/App/Dashboard/IncidentCreateTemplateOwners.test.tsx +414 -0
  199. package/Tests/App/Dashboard/IncidentCustomFieldCreateSettingsForm.test.ts +1042 -0
  200. package/Tests/App/Dashboard/IncidentCustomFieldSettingsCard.test.tsx +1816 -0
  201. package/Tests/App/Dashboard/IncidentFormPlan.test.ts +89 -0
  202. package/Tests/App/Dashboard/IncidentFormShareLinkCard.test.tsx +846 -0
  203. package/Tests/App/Dashboard/IncidentFormsPages.test.tsx +1324 -0
  204. package/Tests/App/Dashboard/IncidentTemplateCustomFieldSettings.test.tsx +630 -0
  205. package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +13 -0
  206. package/Tests/App/Dashboard/IncomingEmailMonitorLinkVerifyHint.test.tsx +104 -0
  207. package/Tests/App/Dashboard/InvestigationConversation.test.tsx +1107 -0
  208. package/Tests/App/Dashboard/InvestigationConversationData.test.ts +546 -0
  209. package/Tests/App/Dashboard/InvestigationEvidenceList.test.tsx +170 -5
  210. package/Tests/App/Dashboard/InvestigationInfrastructureTools.test.tsx +506 -0
  211. package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +207 -2
  212. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +729 -34
  213. package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +9 -21
  214. package/Tests/App/Dashboard/InvestigationReportView.test.tsx +274 -37
  215. package/Tests/App/Dashboard/InvestigationStatusBadge.test.tsx +130 -0
  216. package/Tests/App/Dashboard/IoTDocumentationCard.test.tsx +218 -0
  217. package/Tests/App/Dashboard/IoTSetupGuide.test.ts +1124 -0
  218. package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +20 -6
  219. package/Tests/App/Dashboard/KubernetesClusterAiDocumentationMarkdown.test.ts +107 -83
  220. package/Tests/App/Dashboard/KubernetesSetupGuide.test.ts +787 -0
  221. package/Tests/App/Dashboard/MessageQueueBreadcrumbs.test.tsx +228 -0
  222. package/Tests/App/Dashboard/MessageQueueBrokerHealth.test.tsx +1538 -0
  223. package/Tests/App/Dashboard/MessageQueueBrokerHealthMetricChart.test.tsx +969 -0
  224. package/Tests/App/Dashboard/MessageQueueBrokerHealthReads.test.ts +889 -0
  225. package/Tests/App/Dashboard/MessageQueueBrokerMetricsReach.test.ts +236 -0
  226. package/Tests/App/Dashboard/MessageQueueDocumentationCard.test.tsx +479 -0
  227. package/Tests/App/Dashboard/MessageQueueListPages.test.tsx +1232 -0
  228. package/Tests/App/Dashboard/MessageQueueMetricDescriptions.test.ts +244 -0
  229. package/Tests/App/Dashboard/MessageQueueMonitorLink.test.ts +952 -0
  230. package/Tests/App/Dashboard/MessageQueueMonitorLinkMonitorCreate.test.tsx +859 -0
  231. package/Tests/App/Dashboard/MessageQueueOverview.test.tsx +1773 -0
  232. package/Tests/App/Dashboard/MessageQueueOverviewPresentation.test.ts +196 -0
  233. package/Tests/App/Dashboard/MessageQueuePresentation.test.ts +799 -0
  234. package/Tests/App/Dashboard/MessageQueueProducersConsumers.test.tsx +680 -0
  235. package/Tests/App/Dashboard/MessageQueueRoutes.test.tsx +383 -0
  236. package/Tests/App/Dashboard/MessageQueueRulePages.test.tsx +278 -0
  237. package/Tests/App/Dashboard/MessageQueueSetupGuide.test.ts +2778 -0
  238. package/Tests/App/Dashboard/MessageQueueSideMenus.test.tsx +273 -0
  239. package/Tests/App/Dashboard/MessageQueueSpanPopulations.test.ts +930 -0
  240. package/Tests/App/Dashboard/MessageQueueSpanStore.ts +351 -0
  241. package/Tests/App/Dashboard/MessageQueueTelemetryScope.test.ts +375 -0
  242. package/Tests/App/Dashboard/MessageQueueTelemetryScopeTabs.test.tsx +668 -0
  243. package/Tests/App/Dashboard/MessageQueueViewPages.test.tsx +685 -0
  244. package/Tests/App/Dashboard/MonitorAndHomeNotOperationalMenus.test.tsx +342 -0
  245. package/Tests/App/Dashboard/MonitorCreateFirstRunDefaults.test.tsx +623 -0
  246. package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +442 -0
  247. package/Tests/App/Dashboard/MonitorLogsPageViewSummary.test.tsx +814 -0
  248. package/Tests/App/Dashboard/MonitorSetupCardBodies.test.tsx +246 -0
  249. package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +8 -0
  250. package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +27 -12
  251. package/Tests/App/Dashboard/PlanGatedPage.test.tsx +292 -0
  252. package/Tests/App/Dashboard/PodmanSetupGuide.test.ts +948 -0
  253. package/Tests/App/Dashboard/ProductOrientation.test.tsx +5 -4
  254. package/Tests/App/Dashboard/ProductSettingsSectionCollapsed.test.tsx +266 -0
  255. package/Tests/App/Dashboard/ProxmoxSetupGuide.test.ts +1318 -0
  256. package/Tests/App/Dashboard/RemediationSuggestionCardDescription.test.tsx +209 -0
  257. package/Tests/App/Dashboard/RemediationSuggestionCardResource.test.tsx +317 -0
  258. package/Tests/App/Dashboard/ResourceAiAccessSettingsUtil.test.ts +921 -0
  259. package/Tests/App/Dashboard/ResourceAiAgentAttentionServerParity.test.ts +555 -0
  260. package/Tests/App/Dashboard/ResourceAiAgentInstall.test.ts +860 -0
  261. package/Tests/App/Dashboard/ResourceAiAgentPage.test.tsx +2010 -0
  262. package/Tests/App/Dashboard/ResourceAiAgentStatus.test.ts +1455 -0
  263. package/Tests/App/Dashboard/ResourceAiInsightsPage.test.tsx +931 -0
  264. package/Tests/App/Dashboard/ResourceAiNavigation.test.tsx +575 -0
  265. package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +16 -0
  266. package/Tests/App/Dashboard/ResourceConnectionGuideCard.test.tsx +444 -0
  267. package/Tests/App/Dashboard/ResourceConnectionGuideOverviewsInfra.test.tsx +798 -0
  268. package/Tests/App/Dashboard/ResourceConnectionGuideOverviewsPlatforms.test.tsx +717 -0
  269. package/Tests/App/Dashboard/ResourceConnectionGuides.test.ts +981 -0
  270. package/Tests/App/Dashboard/ResourceConnectionState.test.ts +132 -0
  271. package/Tests/App/Dashboard/RumDocumentationCard.test.tsx +293 -0
  272. package/Tests/App/Dashboard/RumSessionReplayRetentionSettings.test.tsx +467 -0
  273. package/Tests/App/Dashboard/RumSetupGuide.test.ts +758 -0
  274. package/Tests/App/Dashboard/RunbookStepTypeMaps.test.ts +38 -7
  275. package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +25 -0
  276. package/Tests/App/Dashboard/ServerlessDocumentationCard.test.tsx +254 -0
  277. package/Tests/App/Dashboard/ServerlessSetupGuide.test.ts +1074 -0
  278. package/Tests/App/Dashboard/SetupGuide.test.ts +246 -0
  279. package/Tests/App/Dashboard/SetupGuideCard.test.tsx +756 -0
  280. package/Tests/App/Dashboard/SloListSideMenu.test.tsx +120 -0
  281. package/Tests/App/Dashboard/SsoPages.test.tsx +833 -0
  282. package/Tests/App/Dashboard/TelemetryDocumentation.test.tsx +253 -0
  283. package/Tests/App/Dashboard/TelemetryRetentionShells.test.tsx +730 -0
  284. package/Tests/App/Dashboard/VMwareSetupGuide.test.ts +1033 -0
  285. package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +87 -7
  286. package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +61 -10
  287. package/Tests/Models/DatabaseModels/IncidentFormModel.test.ts +1250 -0
  288. package/Tests/Models/DatabaseModels/MessageQueueModels.test.ts +1983 -0
  289. package/Tests/Models/DatabaseModels/ResourceAiAccessColumns.test.ts +738 -0
  290. package/Tests/Models/DatabaseModels/ResourceAiAgentModel.test.ts +842 -0
  291. package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +4 -2
  292. package/Tests/Models/DatabaseModels/TeamComplianceSettingModel.test.ts +190 -14
  293. package/Tests/Models/IncidentTemplateCustomFieldSettingsColumn.test.ts +291 -0
  294. package/Tests/Server/API/AIInvestigationConversationAPI.test.ts +412 -0
  295. package/Tests/Server/API/AutoRemediationApproveResourceRound.test.ts +835 -0
  296. package/Tests/Server/API/GlobalConfigLicense.test.ts +38 -9
  297. package/Tests/Server/API/IncidentFormAPI.test.ts +942 -0
  298. package/Tests/Server/API/IncidentFormPublicRoutes.test.ts +1653 -0
  299. package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +2 -1
  300. package/Tests/Server/API/ResourceAiAccessAPI.test.ts +2730 -0
  301. package/Tests/Server/API/{SsoProviderListingsEdition.test.ts → SsoProviderListings.test.ts} +164 -110
  302. package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +76 -54
  303. package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +125 -42
  304. package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +36 -10
  305. package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +51 -9
  306. package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +13 -8
  307. package/Tests/Server/Enterprise/SsoInCommunityEdition.test.ts +540 -0
  308. package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +3 -0
  309. package/Tests/Server/Infrastructure/Postgres/AddDatabaseServerTablesMigration.test.ts +60 -0
  310. package/Tests/Server/Infrastructure/Postgres/AddIncidentFormsMigration.test.ts +438 -0
  311. package/Tests/Server/Infrastructure/Postgres/AddResourceAiAgentsMigration.test.ts +659 -0
  312. package/Tests/Server/Infrastructure/Postgres/AddTeamComplianceRuleNotificationChannelsMigration.test.ts +255 -0
  313. package/Tests/Server/Infrastructure/Postgres/MessageQueueTablesMigration.test.ts +637 -0
  314. package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +31 -0
  315. package/Tests/Server/Middleware/IncidentFormRateLimit.test.ts +1630 -0
  316. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +63 -5
  317. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +103 -5
  318. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +19 -1
  319. package/Tests/Server/Middleware/UserAuthorization.test.ts +16 -17
  320. package/Tests/Server/Middleware/UserAuthorizationSsoEnforcement.test.ts +544 -0
  321. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +37 -8
  322. package/Tests/Server/Services/AutoRemediationResourceRuleEngine.test.ts +1279 -0
  323. package/Tests/Server/Services/DatabaseServerService.test.ts +55 -0
  324. package/Tests/Server/Services/GroupTelemetryUsageExcludeNames.test.ts +299 -0
  325. package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +44 -0
  326. package/Tests/Server/Services/IncidentCreatedFeedTitle.test.ts +212 -0
  327. package/Tests/Server/Services/IncidentCustomFieldDeleteFormQuestions.test.ts +297 -0
  328. package/Tests/Server/Services/IncidentFormOwnersCreatedNotification.test.ts +497 -0
  329. package/Tests/Server/Services/IncidentFormPostgres.test.ts +958 -0
  330. package/Tests/Server/Services/IncidentFormPublicForm.test.ts +1260 -0
  331. package/Tests/Server/Services/IncidentFormPublicSubmission.test.ts +2520 -0
  332. package/Tests/Server/Services/IncidentFormRegistration.test.ts +159 -0
  333. package/Tests/Server/Services/IncidentFormService.test.ts +663 -0
  334. package/Tests/Server/Services/IncidentFormSubmissionService.test.ts +430 -0
  335. package/Tests/Server/Services/IncidentFormSubmissionTemplateBranch.test.ts +473 -0
  336. package/Tests/Server/Services/IncidentGroupingTemplateSubstitution.test.ts +81 -0
  337. package/Tests/Server/Services/IncidentTemplateCustomFieldSettings.test.ts +262 -0
  338. package/Tests/Server/Services/IncidentTemplateOwnersOnDeclare.test.ts +566 -0
  339. package/Tests/Server/Services/IncidentTitleMarkdownSinks.test.ts +640 -0
  340. package/Tests/Server/Services/LlmLogServiceTokenAggregateParams.test.ts +3 -3
  341. package/Tests/Server/Services/MessageQueueOwnerServices.test.ts +440 -0
  342. package/Tests/Server/Services/MessageQueueRegistries.test.ts +577 -0
  343. package/Tests/Server/Services/MessageQueueRuleEngines.test.ts +900 -0
  344. package/Tests/Server/Services/MessageQueueService.test.ts +2210 -0
  345. package/Tests/Server/Services/MessageQueueSqlPostgres.test.ts +1271 -0
  346. package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +45 -6
  347. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +28 -1
  348. package/Tests/Server/Services/OpenTelemetryRetentionOverrideEdition.test.ts +474 -0
  349. package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +21 -0
  350. package/Tests/Server/Services/OwnerRowUniqueness.test.ts +3 -0
  351. package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +0 -1
  352. package/Tests/Server/Services/RecordingRuleReservedMetricName.test.ts +171 -0
  353. package/Tests/Server/Services/ResourceAiAccessChangeAuthorization.test.ts +256 -0
  354. package/Tests/Server/Services/ResourceAiAccessService.test.ts +1373 -0
  355. package/Tests/Server/Services/ResourceAiAgentJobService.test.ts +375 -0
  356. package/Tests/Server/Services/ResourceAiAgentServiceHelpers.test.ts +1114 -0
  357. package/Tests/Server/Services/ResourceAiAgentServiceLifecycle.test.ts +1050 -0
  358. package/Tests/Server/Services/ResourceAiAgentServiceRegister.test.ts +2251 -0
  359. package/Tests/Server/Services/ResourceAiSettingsCreate.test.ts +373 -0
  360. package/Tests/Server/Services/ResourceAiSettingsPermission.test.ts +1042 -0
  361. package/Tests/Server/Services/ResourceServiceDeleteCleansUpAi.test.ts +319 -0
  362. package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +56 -6
  363. package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +30 -1
  364. package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +105 -0
  365. package/Tests/Server/Services/RunnerJobEnqueueResourceCommand.test.ts +986 -0
  366. package/Tests/Server/Services/RunnerJobResourceCommandLane.test.ts +211 -0
  367. package/Tests/Server/Services/RunnerJobResourceCommandTimeoutAndRedaction.test.ts +352 -0
  368. package/Tests/Server/Services/SsoRequirementReads.test.ts +454 -0
  369. package/Tests/Server/Services/SsoRequirementWrites.test.ts +529 -0
  370. package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +3 -3
  371. package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +107 -89
  372. package/Tests/Server/Services/TeamComplianceSettingPostgres.test.ts +1068 -176
  373. package/Tests/Server/Services/TeamComplianceSettingService.test.ts +1962 -200
  374. package/Tests/Server/Services/TelemetryUsageBillingSloExclusion.test.ts +218 -0
  375. package/Tests/Server/TestingUtils/Services/FakeRunnerJobCount.ts +145 -0
  376. package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +654 -297
  377. package/Tests/Server/Types/Database/Permissions/RetentionOverrideColumns.test.ts +784 -0
  378. package/Tests/Server/Types/Database/Permissions/SsoScalePlanGate.test.ts +418 -0
  379. package/Tests/Server/Utils/AI/AIAlertGating.test.ts +0 -1
  380. package/Tests/Server/Utils/AI/AIInvestigationEngineRunLimits.test.ts +136 -0
  381. package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +15 -14
  382. package/Tests/Server/Utils/AI/AgentContextCompactor.test.ts +351 -0
  383. package/Tests/Server/Utils/AI/ChatAgentRunnerSharedThread.test.ts +842 -0
  384. package/Tests/Server/Utils/AI/ChatRunCancellation.test.ts +195 -0
  385. package/Tests/Server/Utils/AI/CodeFixReadiness.test.ts +10 -57
  386. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +20 -24
  387. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +7 -30
  388. package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +225 -29
  389. package/Tests/Server/Utils/AI/InvestigationInfrastructureAccessWiring.test.ts +694 -0
  390. package/Tests/Server/Utils/AI/InvestigationInfrastructureReport.test.ts +721 -0
  391. package/Tests/Server/Utils/AI/InvestigationThread.test.ts +580 -0
  392. package/Tests/Server/Utils/AI/InvestigationThreadService.test.ts +801 -0
  393. package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +525 -43
  394. package/Tests/Server/Utils/AI/KubectlJobRunner.test.ts +4 -2
  395. package/Tests/Server/Utils/AI/LLMServiceUnreachableProvider.test.ts +435 -0
  396. package/Tests/Server/Utils/AI/ObservabilityAssistantLimits.test.ts +462 -0
  397. package/Tests/Server/Utils/AI/RemediationCommandTools.test.ts +94 -1
  398. package/Tests/Server/Utils/AI/RemediationCommandToolsResource.test.ts +1530 -0
  399. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +14 -25
  400. package/Tests/Server/Utils/AI/RemediationExecutionRunnerResourceMode.test.ts +1251 -0
  401. package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +117 -0
  402. package/Tests/Server/Utils/AI/RemediationResourceCopyParity.test.ts +463 -0
  403. package/Tests/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.test.ts +1004 -0
  404. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAccessContext.test.ts +266 -0
  405. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.test.ts +1220 -0
  406. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.test.ts +569 -0
  407. package/Tests/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.test.ts +834 -0
  408. package/Tests/Server/Utils/AI/ToolOutputPager.test.ts +382 -0
  409. package/Tests/Server/Utils/AI/ToolResultSerializer.test.ts +23 -4
  410. package/Tests/Server/Utils/AI/Toolbox/LogTools.test.ts +25 -6
  411. package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +14 -3
  412. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorResource.test.ts +717 -0
  413. package/Tests/Server/Utils/AutoRemediation/RemediationVerifierResourceFollowUp.test.ts +338 -0
  414. package/Tests/Server/Utils/EditionEnforcement.test.ts +107 -147
  415. package/Tests/Server/Utils/Monitor/Criteria/SessionReplayBudgetTemplateCriteria.test.ts +422 -0
  416. package/Tests/Server/Utils/{CommunityEditionSsoReport.test.ts → RelaxedScimTeamLocksReport.test.ts} +212 -208
  417. package/Tests/Server/Utils/SameOriginRequest.test.ts +372 -0
  418. package/Tests/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.test.ts +1647 -0
  419. package/Tests/Server/Utils/SessionReplay/SessionReplayUsage.test.ts +143 -1
  420. package/Tests/Server/Utils/Telemetry/EntityRegistry.test.ts +20 -0
  421. package/Tests/Server/Utils/Telemetry/MessageQueueDiscovery.test.ts +2590 -0
  422. package/Tests/Server/Utils/Telemetry/MessageQueueSpanQueryTwin.ts +246 -0
  423. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +23 -0
  424. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +33 -3
  425. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsAccountNotLinked.test.ts +1093 -0
  426. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.test.ts +1049 -0
  427. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.test.ts +1676 -0
  428. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCards.test.ts +2884 -0
  429. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.test.ts +2490 -0
  430. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmit.test.ts +2293 -0
  431. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmitServerTimezone.test.ts +386 -0
  432. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.test.ts +1477 -0
  433. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.test.ts +1967 -0
  434. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsStripHtmlTags.test.ts +92 -0
  435. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsSubmittedFormRemoval.test.ts +1819 -0
  436. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.test.ts +1033 -0
  437. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezoneServerZone.test.ts +610 -0
  438. package/Tests/Server/Utils/Workspace/MicrosoftTeamsBotMessageHandling.test.ts +2610 -0
  439. package/Tests/Server/Utils/Workspace/MicrosoftTeamsCreateCommandsEndToEnd.test.ts +4672 -0
  440. package/Tests/Server/Utils/Workspace/WorkspaceCreateProjectReferences.test.ts +190 -65
  441. package/Tests/Types/AI/AIAgentRunLimits.test.ts +255 -0
  442. package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +10 -4
  443. package/Tests/Types/AutoRemediation/AiRemediationCommandPlanResourceCommand.test.ts +305 -0
  444. package/Tests/Types/Code/JsonSyntax.test.ts +1300 -0
  445. package/Tests/Types/CustomField/CustomFieldCreateSettings.test.ts +1113 -0
  446. package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +91 -0
  447. package/Tests/Types/CustomField/CustomFieldValueValidator.test.ts +30 -0
  448. package/Tests/Types/Incident/IncidentFormIpAllowlist.test.ts +227 -0
  449. package/Tests/Types/Incident/IncidentFormPublic.test.ts +1916 -0
  450. package/Tests/Types/MessageQueue/MessageQueueEntityKey.test.ts +916 -0
  451. package/Tests/Types/MessageQueue/MessageQueueIdentity.test.ts +567 -0
  452. package/Tests/Types/MessageQueue/MessageQueueManualIdentity.test.ts +686 -0
  453. package/Tests/Types/MessageQueue/MessageQueueMetricCatalog.test.ts +1726 -0
  454. package/Tests/Types/MessageQueue/MessageQueueMetricResolution.test.ts +1758 -0
  455. package/Tests/Types/MessageQueue/MessagingInstrumentationFixtures.test.ts +4686 -0
  456. package/Tests/Types/MessageQueue/MessagingSystem.test.ts +840 -0
  457. package/Tests/Types/MessageQueue/MessagingTelemetryFixtures.ts +3287 -0
  458. package/Tests/Types/MessageQueue/MessagingTelemetryResolver.test.ts +2966 -0
  459. package/Tests/Types/Monitor/MessageQueueAlertTemplates.test.ts +5401 -0
  460. package/Tests/Types/Monitor/MetricEngineFold.ts +154 -0
  461. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +277 -13
  462. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +113 -0
  463. package/Tests/Types/Monitor/RumAlertTemplates.test.ts +773 -2
  464. package/Tests/Types/ResourceAiAgent/AiResourceType.test.ts +419 -0
  465. package/Tests/Types/ResourceAiAgent/ResourceAiAccess.test.ts +519 -0
  466. package/Tests/Types/Runbook/RunbookStepType.test.ts +147 -8
  467. package/Tests/Types/Team/ComplianceRule.test.ts +588 -37
  468. package/Tests/Types/Team/TeamComplianceStatus.test.ts +64 -11
  469. package/Tests/Types/XML.test.ts +51 -0
  470. package/Tests/UI/Components/CodeEditor/CodeEditor.test.tsx +2362 -0
  471. package/Tests/UI/Components/CodeEditor/CodeEditorCommands.test.ts +810 -0
  472. package/Tests/UI/Components/CodeEditor/CodeEditorHighlight.test.ts +338 -0
  473. package/Tests/UI/Components/CodeEditor/CodeEditorLanguages.test.ts +222 -0
  474. package/Tests/UI/Components/CodeEditor/CodeEditorStyles.test.ts +807 -0
  475. package/Tests/UI/Components/CodeEditor/NoMonaco.test.ts +245 -0
  476. package/Tests/UI/Components/CodeEditor/YamlEditor.test.tsx +729 -0
  477. package/Tests/UI/Components/CopyTextButton.test.tsx +76 -0
  478. package/Tests/UI/Components/EditionLabelLapseCopy.ts +51 -14
  479. package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +131 -23
  480. package/Tests/UI/Components/ErrorMessageAction.test.tsx +142 -0
  481. package/Tests/UI/Components/FacetSidebarInScope.test.tsx +459 -0
  482. package/Tests/UI/Components/FacetValuesInScope.test.ts +270 -0
  483. package/Tests/UI/Components/Forms/FormFieldCodeEditors.test.tsx +294 -0
  484. package/Tests/UI/Components/Forms/FormFieldMarkdown.test.tsx +126 -0
  485. package/Tests/UI/Components/Forms/FormFieldYaml.test.tsx +22 -75
  486. package/Tests/UI/Components/Forms/ModelFormOnBeforeCreateMiscData.test.tsx +254 -0
  487. package/Tests/UI/Components/Icon.test.tsx +32 -0
  488. package/Tests/UI/Components/Input.test.tsx +31 -0
  489. package/Tests/UI/Components/LockedFilterChipScope.test.tsx +501 -0
  490. package/Tests/UI/Components/MarkdownConverters.test.ts +253 -1
  491. package/Tests/UI/Components/MarkdownEditor.test.tsx +2785 -2
  492. package/Tests/UI/Components/MarkdownEditorHistory.test.ts +243 -0
  493. package/Tests/UI/Components/MarkdownListEditing.test.ts +1118 -0
  494. package/Tests/UI/Components/MarkdownPaste.test.ts +1180 -0
  495. package/Tests/UI/Components/MarkdownViewerCopy.test.tsx +466 -0
  496. package/Tests/UI/Components/MarkdownVisualEditing.test.ts +1089 -0
  497. package/Tests/UI/Components/ModelTable/BaseModelTableEmptyStateAction.test.tsx +623 -0
  498. package/Tests/UI/Components/ResetObjectID.test.tsx +282 -0
  499. package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
  500. package/Tests/UI/Components/Table/EmptyTableMessage.test.ts +439 -0
  501. package/Tests/UI/Components/Table/TableEmptyState.test.tsx +352 -0
  502. package/Tests/UI/Components/TableRowMobileTitles.test.tsx +78 -0
  503. package/Tests/UI/Components/TextArea.test.tsx +19 -0
  504. package/Tests/UI/Components/Workflow/ModelColumnEditor.render.test.tsx +12 -29
  505. package/Tests/UI/Components/fixtures/MarkdownPasteFixtures.ts +460 -0
  506. package/Tests/UI/EsbuildConfig.test.ts +115 -39
  507. package/Tests/UI/EsbuildEnterpriseAlias.test.ts +4 -4
  508. package/Tests/UI/Monitor/MonitorLogSummaryRender.test.tsx +377 -0
  509. package/Tests/UI/Rum/RecordingHealthDashboard.test.tsx +769 -1
  510. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +81 -1
  511. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +17 -0
  512. package/Tests/Utils/AiRemediation/Resource/CephCommandPolicy.test.ts +1653 -0
  513. package/Tests/Utils/AiRemediation/Resource/CephOutputRedaction.test.ts +204 -0
  514. package/Tests/Utils/AiRemediation/Resource/DatabaseCommandPolicy.test.ts +1077 -0
  515. package/Tests/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.test.ts +558 -0
  516. package/Tests/Utils/AiRemediation/Resource/DatabaseQueryRedactor.test.ts +834 -0
  517. package/Tests/Utils/AiRemediation/Resource/DockerCliGrammar.test.ts +747 -0
  518. package/Tests/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.test.ts +1259 -0
  519. package/Tests/Utils/AiRemediation/Resource/DockerOutputRedaction.test.ts +386 -0
  520. package/Tests/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.test.ts +782 -0
  521. package/Tests/Utils/AiRemediation/Resource/GovcCommandPolicy.test.ts +2259 -0
  522. package/Tests/Utils/AiRemediation/Resource/HostCommandPolicy.test.ts +2019 -0
  523. package/Tests/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.test.ts +2497 -0
  524. package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicy.test.ts +1305 -0
  525. package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.test.ts +585 -0
  526. package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactor.test.ts +334 -0
  527. package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactorCopyParity.test.ts +98 -0
  528. package/Tests/Utils/AiRemediation/Resource/ResourcePolicyImportClosure.test.ts +391 -0
  529. package/Tests/Utils/AiRemediation/ResourceAiAgentPolicyCopyParity.test.ts +497 -0
  530. package/Tests/Utils/LabelRuleImportExport.test.ts +5 -0
  531. package/Tests/Utils/Markdown/DashboardMarkdownRenderer.ts +81 -0
  532. package/Tests/Utils/Markdown/UntrustedMarkdown.test.ts +1339 -0
  533. package/Tests/Utils/Monitor/MonitorLogSummaryUtil.test.ts +862 -0
  534. package/Tests/Utils/SessionReplay/SessionReplayBudgetMetricType.test.ts +383 -0
  535. package/Types/AI/AIAgentRunLimits.ts +146 -0
  536. package/Types/AI/ResourceAiAccessApi.ts +140 -0
  537. package/Types/AI/ResourceAiAccessPermissions.ts +126 -0
  538. package/Types/AutoRemediation/AiRemediationCommandPlan.ts +183 -2
  539. package/Types/Code/CodeType.ts +2 -0
  540. package/Types/Code/JsonSyntax.ts +923 -0
  541. package/Types/CustomField/CustomFieldCreateSettings.ts +549 -0
  542. package/Types/CustomField/CustomFieldMappingCatalog.ts +77 -0
  543. package/Types/CustomField/CustomFieldValueValidator.ts +10 -7
  544. package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +1 -1
  545. package/Types/Icon/IconProp.ts +2 -0
  546. package/Types/Incident/IncidentFormIpAllowlist.ts +206 -0
  547. package/Types/Incident/IncidentFormPublic.ts +1145 -0
  548. package/Types/Kubernetes/KubernetesClusterAiAccess.ts +10 -3
  549. package/Types/MessageQueue/MessageQueueIdentity.ts +256 -0
  550. package/Types/MessageQueue/MessageQueueManualIdentity.ts +325 -0
  551. package/Types/MessageQueue/MessageQueueMetricCatalog.ts +1357 -0
  552. package/Types/MessageQueue/MessagingSystem.ts +518 -0
  553. package/Types/MessageQueue/MessagingTelemetryResolver.ts +2311 -0
  554. package/Types/Monitor/MessageQueueAlertTemplates.ts +2128 -0
  555. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +55 -22
  556. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +35 -3
  557. package/Types/Monitor/RumAlertTemplates.ts +351 -4
  558. package/Types/Permission.ts +310 -0
  559. package/Types/ResourceAiAgent/AiResourceType.ts +310 -0
  560. package/Types/ResourceAiAgent/ResourceAiAccess.ts +580 -0
  561. package/Types/Rules/RuleCriteriaFieldRegistry.ts +12 -0
  562. package/Types/Rules/RuleRun.ts +4 -0
  563. package/Types/Rum/SessionReplayBudgetMetricType.ts +47 -0
  564. package/Types/Runbook/RunbookStepType.ts +29 -0
  565. package/Types/Team/ComplianceNotificationChannel.ts +4 -3
  566. package/Types/Team/ComplianceRule.ts +71 -18
  567. package/Types/Team/ComplianceRuleType.ts +2 -2
  568. package/Types/Team/TeamComplianceStatus.ts +6 -2
  569. package/Types/Telemetry/EntityType.ts +16 -0
  570. package/Types/Telemetry/LockedFilterDetail.ts +22 -0
  571. package/Types/Telemetry/TelemetryIngestSurface.ts +14 -2
  572. package/Types/XML.ts +26 -0
  573. package/UI/Components/CodeEditor/CodeEditor.css +379 -0
  574. package/UI/Components/CodeEditor/CodeEditor.tsx +1128 -294
  575. package/UI/Components/CodeEditor/CodeEditorCommands.ts +774 -0
  576. package/UI/Components/CodeEditor/CodeEditorHighlight.ts +106 -0
  577. package/UI/Components/CodeEditor/CodeEditorLanguages.ts +164 -0
  578. package/UI/Components/CodeEditor/YamlEditor.tsx +28 -326
  579. package/UI/Components/CopyTextButton/CopyTextButton.tsx +5 -1
  580. package/UI/Components/CustomFields/CustomFieldModelFormFields.tsx +6 -25
  581. package/UI/Components/EditionLabel/EditionLabel.tsx +14 -13
  582. package/UI/Components/ErrorMessage/ErrorMessage.tsx +11 -1
  583. package/UI/Components/Forms/Fields/FormField.tsx +8 -0
  584. package/UI/Components/Forms/Types/Field.ts +8 -0
  585. package/UI/Components/Icon/Icon.tsx +18 -0
  586. package/UI/Components/Input/Input.tsx +11 -4
  587. package/UI/Components/LogsViewer/LogsViewer.tsx +4 -0
  588. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +21 -3
  589. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  590. package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +877 -79
  591. package/UI/Components/Markdown.tsx/MarkdownEditorHistory.ts +284 -0
  592. package/UI/Components/Markdown.tsx/MarkdownListEditing.ts +1362 -0
  593. package/UI/Components/Markdown.tsx/MarkdownPaste.ts +1326 -0
  594. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +106 -10
  595. package/UI/Components/Markdown.tsx/MarkdownVisualEditing.ts +1032 -0
  596. package/UI/Components/ModelTable/BaseModelTable.tsx +85 -7
  597. package/UI/Components/ResetObjectID/ResetObjectID.tsx +35 -9
  598. package/UI/Components/Table/EmptyTableMessage.ts +81 -0
  599. package/UI/Components/Table/Table.tsx +50 -21
  600. package/UI/Components/Table/TableRow.tsx +9 -1
  601. package/UI/Components/TelemetryViewer/FacetVisibility.ts +97 -2
  602. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +13 -0
  603. package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +214 -7
  604. package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +21 -3
  605. package/UI/Components/TextArea/TextArea.tsx +9 -2
  606. package/UI/Components/Workflow/ModelFieldPicker.tsx +10 -12
  607. package/UI/Styles/Theme.css +8 -0
  608. package/UI/esbuild-config.js +2 -32
  609. package/Utils/AI/InvestigationReport.ts +121 -15
  610. package/Utils/AiRemediation/Resource/CephCommandPolicy.ts +1936 -0
  611. package/Utils/AiRemediation/Resource/DatabaseCommandPolicy.ts +166 -0
  612. package/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.ts +1532 -0
  613. package/Utils/AiRemediation/Resource/DatabaseQueryRedactor.ts +1394 -0
  614. package/Utils/AiRemediation/Resource/DockerCliGrammar.ts +1839 -0
  615. package/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.ts +490 -0
  616. package/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.ts +687 -0
  617. package/Utils/AiRemediation/Resource/GovcCommandPolicy.ts +2096 -0
  618. package/Utils/AiRemediation/Resource/HostCommandPolicy.ts +2982 -0
  619. package/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.ts +1679 -0
  620. package/Utils/AiRemediation/Resource/ResourceCommandPolicy.ts +851 -0
  621. package/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.ts +593 -0
  622. package/Utils/AiRemediation/Resource/ResourceOutputRedactor.ts +2812 -0
  623. package/Utils/LabelRuleImportExport.ts +2 -0
  624. package/Utils/Markdown/UntrustedMarkdown.ts +1513 -0
  625. package/Utils/Monitor/IncomingEmailMonitorRequestUtil.ts +41 -0
  626. package/Utils/Monitor/MonitorLogSummaryUtil.ts +212 -0
  627. package/Utils/SessionReplay/SessionReplayBudgetMetricType.ts +184 -0
  628. package/Utils/Telemetry/EntityKey.ts +48 -0
  629. package/build/dist/Models/DatabaseModels/AIConversation.js +125 -1
  630. package/build/dist/Models/DatabaseModels/AIConversation.js.map +1 -1
  631. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +62 -0
  632. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -1
  633. package/build/dist/Models/DatabaseModels/CephCluster.js +231 -0
  634. package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
  635. package/build/dist/Models/DatabaseModels/CloudResource.js +12 -0
  636. package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
  637. package/build/dist/Models/DatabaseModels/DatabaseServer.js +231 -0
  638. package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -1
  639. package/build/dist/Models/DatabaseModels/DockerHost.js +231 -0
  640. package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
  641. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +231 -0
  642. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
  643. package/build/dist/Models/DatabaseModels/GlobalConfig.js +1 -1
  644. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  645. package/build/dist/Models/DatabaseModels/GlobalOidc.js +0 -4
  646. package/build/dist/Models/DatabaseModels/GlobalOidc.js.map +1 -1
  647. package/build/dist/Models/DatabaseModels/GlobalOidcProject.js +0 -4
  648. package/build/dist/Models/DatabaseModels/GlobalOidcProject.js.map +1 -1
  649. package/build/dist/Models/DatabaseModels/GlobalSso.js +0 -4
  650. package/build/dist/Models/DatabaseModels/GlobalSso.js.map +1 -1
  651. package/build/dist/Models/DatabaseModels/GlobalSsoProject.js +0 -4
  652. package/build/dist/Models/DatabaseModels/GlobalSsoProject.js.map +1 -1
  653. package/build/dist/Models/DatabaseModels/Host.js +231 -0
  654. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  655. package/build/dist/Models/DatabaseModels/IncidentForm.js +605 -0
  656. package/build/dist/Models/DatabaseModels/IncidentForm.js.map +1 -0
  657. package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js +299 -0
  658. package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js.map +1 -0
  659. package/build/dist/Models/DatabaseModels/IncidentTemplate.js +60 -0
  660. package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
  661. package/build/dist/Models/DatabaseModels/Index.js +16 -0
  662. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  663. package/build/dist/Models/DatabaseModels/IoTFleet.js +12 -0
  664. package/build/dist/Models/DatabaseModels/IoTFleet.js.map +1 -1
  665. package/build/dist/Models/DatabaseModels/KubernetesCluster.js +12 -0
  666. package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
  667. package/build/dist/Models/DatabaseModels/MessageQueue.js +1106 -0
  668. package/build/dist/Models/DatabaseModels/MessageQueue.js.map +1 -0
  669. package/build/dist/Models/DatabaseModels/MessageQueueLabelRule.js +562 -0
  670. package/build/dist/Models/DatabaseModels/MessageQueueLabelRule.js.map +1 -0
  671. package/build/dist/Models/DatabaseModels/MessageQueueOwnerRule.js +643 -0
  672. package/build/dist/Models/DatabaseModels/MessageQueueOwnerRule.js.map +1 -0
  673. package/build/dist/Models/DatabaseModels/MessageQueueOwnerTeam.js +506 -0
  674. package/build/dist/Models/DatabaseModels/MessageQueueOwnerTeam.js.map +1 -0
  675. package/build/dist/Models/DatabaseModels/MessageQueueOwnerUser.js +505 -0
  676. package/build/dist/Models/DatabaseModels/MessageQueueOwnerUser.js.map +1 -0
  677. package/build/dist/Models/DatabaseModels/PodmanHost.js +231 -0
  678. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -1
  679. package/build/dist/Models/DatabaseModels/Project.js +61 -0
  680. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  681. package/build/dist/Models/DatabaseModels/ProjectOidc.js +0 -4
  682. package/build/dist/Models/DatabaseModels/ProjectOidc.js.map +1 -1
  683. package/build/dist/Models/DatabaseModels/ProjectSso.js +0 -4
  684. package/build/dist/Models/DatabaseModels/ProjectSso.js.map +1 -1
  685. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +231 -0
  686. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
  687. package/build/dist/Models/DatabaseModels/ResourceAiAgent.js +439 -0
  688. package/build/dist/Models/DatabaseModels/ResourceAiAgent.js.map +1 -0
  689. package/build/dist/Models/DatabaseModels/RumApplication.js +12 -0
  690. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  691. package/build/dist/Models/DatabaseModels/RunnerJob.js +145 -0
  692. package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
  693. package/build/dist/Models/DatabaseModels/ServerlessFunction.js +12 -0
  694. package/build/dist/Models/DatabaseModels/ServerlessFunction.js.map +1 -1
  695. package/build/dist/Models/DatabaseModels/Service.js +12 -0
  696. package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
  697. package/build/dist/Models/DatabaseModels/StatusPageOidc.js +0 -4
  698. package/build/dist/Models/DatabaseModels/StatusPageOidc.js.map +1 -1
  699. package/build/dist/Models/DatabaseModels/StatusPageSso.js +0 -4
  700. package/build/dist/Models/DatabaseModels/StatusPageSso.js.map +1 -1
  701. package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js +49 -3
  702. package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js.map +1 -1
  703. package/build/dist/Models/DatabaseModels/VMwareVCenter.js +231 -0
  704. package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -1
  705. package/build/dist/Server/API/AIChatAPI.js +9 -103
  706. package/build/dist/Server/API/AIChatAPI.js.map +1 -1
  707. package/build/dist/Server/API/AIInvestigationAPI.js +3 -3
  708. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  709. package/build/dist/Server/API/AIInvestigationConversationAPI.js +162 -0
  710. package/build/dist/Server/API/AIInvestigationConversationAPI.js.map +1 -0
  711. package/build/dist/Server/API/AutoRemediationAPI.js +231 -1
  712. package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
  713. package/build/dist/Server/API/IncidentFormAPI.js +245 -0
  714. package/build/dist/Server/API/IncidentFormAPI.js.map +1 -0
  715. package/build/dist/Server/API/ProjectOIDC.js +16 -24
  716. package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
  717. package/build/dist/Server/API/ProjectSSO.js +16 -24
  718. package/build/dist/Server/API/ProjectSSO.js.map +1 -1
  719. package/build/dist/Server/API/ResourceAiAccessAPI.js +1119 -0
  720. package/build/dist/Server/API/ResourceAiAccessAPI.js.map +1 -0
  721. package/build/dist/Server/API/StatusPageAPI.js +42 -75
  722. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  723. package/build/dist/Server/Enterprise/EnterpriseEdition.js +79 -25
  724. package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -1
  725. package/build/dist/Server/Enterprise/EnterpriseFeature.js +24 -3
  726. package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -1
  727. package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +1 -1
  728. package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -1
  729. package/build/dist/Server/EnvironmentConfig.js +1 -1
  730. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js +168 -0
  731. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js.map +1 -0
  732. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.js +63 -0
  733. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.js.map +1 -0
  734. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.js +41 -0
  735. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.js.map +1 -0
  736. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.js +40 -0
  737. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.js.map +1 -0
  738. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.js +183 -0
  739. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.js.map +1 -0
  740. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  741. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  742. package/build/dist/Server/Infrastructure/Semaphore.js +6 -0
  743. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  744. package/build/dist/Server/Middleware/IncidentFormRateLimit.js +559 -0
  745. package/build/dist/Server/Middleware/IncidentFormRateLimit.js.map +1 -0
  746. package/build/dist/Server/Middleware/TelemetryIngest.js +12 -5
  747. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  748. package/build/dist/Server/Middleware/UserAuthorization.js +11 -30
  749. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  750. package/build/dist/Server/Services/AIService.js +10 -13
  751. package/build/dist/Server/Services/AIService.js.map +1 -1
  752. package/build/dist/Server/Services/AnalyticsDatabaseService.js +26 -1
  753. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  754. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +601 -3
  755. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  756. package/build/dist/Server/Services/CephClusterService.js +104 -0
  757. package/build/dist/Server/Services/CephClusterService.js.map +1 -1
  758. package/build/dist/Server/Services/DatabaseServerService.js +99 -0
  759. package/build/dist/Server/Services/DatabaseServerService.js.map +1 -1
  760. package/build/dist/Server/Services/DockerHostService.js +104 -0
  761. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  762. package/build/dist/Server/Services/DockerSwarmClusterService.js +104 -0
  763. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
  764. package/build/dist/Server/Services/HostService.js +114 -2
  765. package/build/dist/Server/Services/HostService.js.map +1 -1
  766. package/build/dist/Server/Services/IncidentCustomFieldService.js +83 -0
  767. package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
  768. package/build/dist/Server/Services/IncidentEpisodeMemberService.js +8 -4
  769. package/build/dist/Server/Services/IncidentEpisodeMemberService.js.map +1 -1
  770. package/build/dist/Server/Services/IncidentEpisodeService.js +10 -1
  771. package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
  772. package/build/dist/Server/Services/IncidentFormService.js +1202 -0
  773. package/build/dist/Server/Services/IncidentFormService.js.map +1 -0
  774. package/build/dist/Server/Services/IncidentFormSubmissionService.js +91 -0
  775. package/build/dist/Server/Services/IncidentFormSubmissionService.js.map +1 -0
  776. package/build/dist/Server/Services/IncidentGroupingEngineService.js +20 -8
  777. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  778. package/build/dist/Server/Services/IncidentService.js +106 -4
  779. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  780. package/build/dist/Server/Services/IncidentTemplateService.js +18 -0
  781. package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
  782. package/build/dist/Server/Services/Index.js +14 -0
  783. package/build/dist/Server/Services/Index.js.map +1 -1
  784. package/build/dist/Server/Services/MessageQueueLabelRuleEngineService.js +262 -0
  785. package/build/dist/Server/Services/MessageQueueLabelRuleEngineService.js.map +1 -0
  786. package/build/dist/Server/Services/MessageQueueLabelRuleService.js +13 -0
  787. package/build/dist/Server/Services/MessageQueueLabelRuleService.js.map +1 -0
  788. package/build/dist/Server/Services/MessageQueueOwnerRuleEngineService.js +334 -0
  789. package/build/dist/Server/Services/MessageQueueOwnerRuleEngineService.js.map +1 -0
  790. package/build/dist/Server/Services/MessageQueueOwnerRuleService.js +13 -0
  791. package/build/dist/Server/Services/MessageQueueOwnerRuleService.js.map +1 -0
  792. package/build/dist/Server/Services/MessageQueueOwnerTeamService.js +62 -0
  793. package/build/dist/Server/Services/MessageQueueOwnerTeamService.js.map +1 -0
  794. package/build/dist/Server/Services/MessageQueueOwnerUserService.js +62 -0
  795. package/build/dist/Server/Services/MessageQueueOwnerUserService.js.map +1 -0
  796. package/build/dist/Server/Services/MessageQueueService.js +1140 -0
  797. package/build/dist/Server/Services/MessageQueueService.js.map +1 -0
  798. package/build/dist/Server/Services/MetricRecordingRuleService.js +46 -0
  799. package/build/dist/Server/Services/MetricRecordingRuleService.js.map +1 -1
  800. package/build/dist/Server/Services/OpenTelemetryIngestService.js +25 -4
  801. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  802. package/build/dist/Server/Services/PodmanHostService.js +104 -0
  803. package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
  804. package/build/dist/Server/Services/ProjectService.js +0 -54
  805. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  806. package/build/dist/Server/Services/ProxmoxClusterService.js +104 -0
  807. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
  808. package/build/dist/Server/Services/ResourceAiAccessService.js +1028 -0
  809. package/build/dist/Server/Services/ResourceAiAccessService.js.map +1 -0
  810. package/build/dist/Server/Services/ResourceAiAgentJobService.js +173 -0
  811. package/build/dist/Server/Services/ResourceAiAgentJobService.js.map +1 -0
  812. package/build/dist/Server/Services/ResourceAiAgentService.js +1687 -0
  813. package/build/dist/Server/Services/ResourceAiAgentService.js.map +1 -0
  814. package/build/dist/Server/Services/RunnerJobService.js +344 -5
  815. package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
  816. package/build/dist/Server/Services/StatusPagePrivateUserService.js +1 -4
  817. package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
  818. package/build/dist/Server/Services/StatusPageService.js +0 -46
  819. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  820. package/build/dist/Server/Services/TeamComplianceSettingService.js +120 -31
  821. package/build/dist/Server/Services/TeamComplianceSettingService.js.map +1 -1
  822. package/build/dist/Server/Services/TelemetryUsageBillingService.js +26 -0
  823. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  824. package/build/dist/Server/Services/TraceRecordingRuleService.js +37 -0
  825. package/build/dist/Server/Services/TraceRecordingRuleService.js.map +1 -1
  826. package/build/dist/Server/Services/UserNotificationRuleService.js +8 -1
  827. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  828. package/build/dist/Server/Services/VMwareVCenterService.js +104 -0
  829. package/build/dist/Server/Services/VMwareVCenterService.js.map +1 -1
  830. package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js +12 -3
  831. package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js.map +1 -1
  832. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +6 -3
  833. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
  834. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +109 -37
  835. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
  836. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +16 -0
  837. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  838. package/build/dist/Server/Types/Database/Permissions/TablePermission.js +3 -3
  839. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +9 -6
  840. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
  841. package/build/dist/Server/Utils/AI/Chat/AgentContextCompactor.js +128 -0
  842. package/build/dist/Server/Utils/AI/Chat/AgentContextCompactor.js.map +1 -0
  843. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +192 -50
  844. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
  845. package/build/dist/Server/Utils/AI/Chat/ChatRunCancellation.js +133 -0
  846. package/build/dist/Server/Utils/AI/Chat/ChatRunCancellation.js.map +1 -0
  847. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +53 -13
  848. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  849. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +1 -1
  850. package/build/dist/Server/Utils/AI/Chat/ToolOutputPager.js +206 -0
  851. package/build/dist/Server/Utils/AI/Chat/ToolOutputPager.js.map +1 -0
  852. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +53 -26
  853. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -1
  854. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +4 -2
  855. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -1
  856. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +1 -29
  857. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
  858. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +24 -24
  859. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
  860. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +1036 -32
  861. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
  862. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +661 -41
  863. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  864. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +21 -1
  865. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
  866. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js +354 -0
  867. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js.map +1 -0
  868. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js +160 -0
  869. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js.map +1 -0
  870. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js +33 -0
  871. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js.map +1 -0
  872. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js +640 -0
  873. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js.map +1 -0
  874. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js +226 -0
  875. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js.map +1 -0
  876. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js +602 -0
  877. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js.map +1 -0
  878. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +90 -14
  879. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  880. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +73 -10
  881. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  882. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +73 -10
  883. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  884. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +15 -18
  885. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
  886. package/build/dist/Server/Utils/AI/SRE/InvestigationThread.js +412 -0
  887. package/build/dist/Server/Utils/AI/SRE/InvestigationThread.js.map +1 -0
  888. package/build/dist/Server/Utils/AI/SRE/InvestigationThreadService.js +495 -0
  889. package/build/dist/Server/Utils/AI/SRE/InvestigationThreadService.js.map +1 -0
  890. package/build/dist/Server/Utils/AI/Toolbox/Serializer.js +10 -3
  891. package/build/dist/Server/Utils/AI/Toolbox/Serializer.js.map +1 -1
  892. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +290 -13
  893. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
  894. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +29 -1
  895. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -1
  896. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +9 -1
  897. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
  898. package/build/dist/Server/Utils/EditionEnforcement.js +20 -158
  899. package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -1
  900. package/build/dist/Server/Utils/LLM/LLMService.js +193 -54
  901. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  902. package/build/dist/Server/Utils/RelaxedScimTeamLocksReport.js +160 -0
  903. package/build/dist/Server/Utils/RelaxedScimTeamLocksReport.js.map +1 -0
  904. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +25 -0
  905. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
  906. package/build/dist/Server/Utils/SameOriginRequest.js +151 -0
  907. package/build/dist/Server/Utils/SameOriginRequest.js.map +1 -0
  908. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js +627 -0
  909. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js.map +1 -0
  910. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js +60 -5
  911. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js.map +1 -1
  912. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js +2 -0
  913. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js.map +1 -1
  914. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +4 -1
  915. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  916. package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js +1015 -0
  917. package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js.map +1 -0
  918. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +4 -1
  919. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
  920. package/build/dist/Server/Utils/VendorAssets.js +3 -3
  921. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +19 -15
  922. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
  923. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +19 -15
  924. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
  925. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js +17 -1
  926. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js.map +1 -1
  927. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +186 -210
  928. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
  929. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +22 -16
  930. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
  931. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +233 -167
  932. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
  933. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +273 -111
  934. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  935. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js +129 -0
  936. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js.map +1 -0
  937. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js +266 -0
  938. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js.map +1 -0
  939. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js +258 -0
  940. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js.map +1 -0
  941. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js +104 -0
  942. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js.map +1 -0
  943. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js +183 -0
  944. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js.map +1 -0
  945. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js +123 -0
  946. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js.map +1 -0
  947. package/build/dist/Types/AI/AIAgentRunLimits.js +91 -0
  948. package/build/dist/Types/AI/AIAgentRunLimits.js.map +1 -0
  949. package/build/dist/Types/AI/ResourceAiAccessApi.js +30 -0
  950. package/build/dist/Types/AI/ResourceAiAccessApi.js.map +1 -0
  951. package/build/dist/Types/AI/ResourceAiAccessPermissions.js +98 -0
  952. package/build/dist/Types/AI/ResourceAiAccessPermissions.js.map +1 -0
  953. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +116 -29
  954. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
  955. package/build/dist/Types/Code/CodeType.js +2 -0
  956. package/build/dist/Types/Code/CodeType.js.map +1 -1
  957. package/build/dist/Types/Code/JsonSyntax.js +604 -0
  958. package/build/dist/Types/Code/JsonSyntax.js.map +1 -0
  959. package/build/dist/Types/CustomField/CustomFieldCreateSettings.js +310 -0
  960. package/build/dist/Types/CustomField/CustomFieldCreateSettings.js.map +1 -0
  961. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js +38 -0
  962. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -1
  963. package/build/dist/Types/CustomField/CustomFieldValueValidator.js +10 -7
  964. package/build/dist/Types/CustomField/CustomFieldValueValidator.js.map +1 -1
  965. package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +1 -1
  966. package/build/dist/Types/Icon/IconProp.js +2 -0
  967. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  968. package/build/dist/Types/Incident/IncidentFormIpAllowlist.js +119 -0
  969. package/build/dist/Types/Incident/IncidentFormIpAllowlist.js.map +1 -0
  970. package/build/dist/Types/Incident/IncidentFormPublic.js +678 -0
  971. package/build/dist/Types/Incident/IncidentFormPublic.js.map +1 -0
  972. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +10 -3
  973. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -1
  974. package/build/dist/Types/MessageQueue/MessageQueueIdentity.js +184 -0
  975. package/build/dist/Types/MessageQueue/MessageQueueIdentity.js.map +1 -0
  976. package/build/dist/Types/MessageQueue/MessageQueueManualIdentity.js +190 -0
  977. package/build/dist/Types/MessageQueue/MessageQueueManualIdentity.js.map +1 -0
  978. package/build/dist/Types/MessageQueue/MessageQueueMetricCatalog.js +1057 -0
  979. package/build/dist/Types/MessageQueue/MessageQueueMetricCatalog.js.map +1 -0
  980. package/build/dist/Types/MessageQueue/MessagingSystem.js +394 -0
  981. package/build/dist/Types/MessageQueue/MessagingSystem.js.map +1 -0
  982. package/build/dist/Types/MessageQueue/MessagingTelemetryResolver.js +1768 -0
  983. package/build/dist/Types/MessageQueue/MessagingTelemetryResolver.js.map +1 -0
  984. package/build/dist/Types/Monitor/MessageQueueAlertTemplates.js +1207 -0
  985. package/build/dist/Types/Monitor/MessageQueueAlertTemplates.js.map +1 -0
  986. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +47 -21
  987. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  988. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +5 -0
  989. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  990. package/build/dist/Types/Monitor/RumAlertTemplates.js +199 -3
  991. package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
  992. package/build/dist/Types/Permission.js +274 -0
  993. package/build/dist/Types/Permission.js.map +1 -1
  994. package/build/dist/Types/ResourceAiAgent/AiResourceType.js +242 -0
  995. package/build/dist/Types/ResourceAiAgent/AiResourceType.js.map +1 -0
  996. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js +281 -0
  997. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js.map +1 -0
  998. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +12 -0
  999. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
  1000. package/build/dist/Types/Rules/RuleRun.js +4 -0
  1001. package/build/dist/Types/Rules/RuleRun.js.map +1 -1
  1002. package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js +45 -0
  1003. package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js.map +1 -0
  1004. package/build/dist/Types/Runbook/RunbookStepType.js +27 -0
  1005. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  1006. package/build/dist/Types/Team/ComplianceNotificationChannel.js +4 -3
  1007. package/build/dist/Types/Team/ComplianceNotificationChannel.js.map +1 -1
  1008. package/build/dist/Types/Team/ComplianceRule.js +48 -14
  1009. package/build/dist/Types/Team/ComplianceRule.js.map +1 -1
  1010. package/build/dist/Types/Team/ComplianceRuleType.js +2 -2
  1011. package/build/dist/Types/Telemetry/EntityType.js +16 -0
  1012. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  1013. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +13 -2
  1014. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
  1015. package/build/dist/Types/XML.js +23 -0
  1016. package/build/dist/Types/XML.js.map +1 -1
  1017. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +641 -266
  1018. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  1019. package/build/dist/UI/Components/CodeEditor/CodeEditorCommands.js +464 -0
  1020. package/build/dist/UI/Components/CodeEditor/CodeEditorCommands.js.map +1 -0
  1021. package/build/dist/UI/Components/CodeEditor/CodeEditorHighlight.js +69 -0
  1022. package/build/dist/UI/Components/CodeEditor/CodeEditorHighlight.js.map +1 -0
  1023. package/build/dist/UI/Components/CodeEditor/CodeEditorLanguages.js +108 -0
  1024. package/build/dist/UI/Components/CodeEditor/CodeEditorLanguages.js.map +1 -0
  1025. package/build/dist/UI/Components/CodeEditor/YamlEditor.js +14 -186
  1026. package/build/dist/UI/Components/CodeEditor/YamlEditor.js.map +1 -1
  1027. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js +5 -1
  1028. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js.map +1 -1
  1029. package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js +5 -14
  1030. package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js.map +1 -1
  1031. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +14 -13
  1032. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  1033. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +1 -1
  1034. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
  1035. package/build/dist/UI/Components/Forms/Fields/FormField.js +8 -3
  1036. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  1037. package/build/dist/UI/Components/Icon/Icon.js +8 -0
  1038. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  1039. package/build/dist/UI/Components/Input/Input.js +11 -3
  1040. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  1041. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +2 -1
  1042. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  1043. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +14 -4
  1044. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  1045. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  1046. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  1047. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +710 -65
  1048. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
  1049. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditorHistory.js +238 -0
  1050. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditorHistory.js.map +1 -0
  1051. package/build/dist/UI/Components/Markdown.tsx/MarkdownListEditing.js +1028 -0
  1052. package/build/dist/UI/Components/Markdown.tsx/MarkdownListEditing.js.map +1 -0
  1053. package/build/dist/UI/Components/Markdown.tsx/MarkdownPaste.js +1088 -0
  1054. package/build/dist/UI/Components/Markdown.tsx/MarkdownPaste.js.map +1 -0
  1055. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +70 -10
  1056. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  1057. package/build/dist/UI/Components/Markdown.tsx/MarkdownVisualEditing.js +887 -0
  1058. package/build/dist/UI/Components/Markdown.tsx/MarkdownVisualEditing.js.map +1 -0
  1059. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +57 -6
  1060. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  1061. package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js +7 -5
  1062. package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js.map +1 -1
  1063. package/build/dist/UI/Components/Table/EmptyTableMessage.js +51 -0
  1064. package/build/dist/UI/Components/Table/EmptyTableMessage.js.map +1 -0
  1065. package/build/dist/UI/Components/Table/Table.js +30 -11
  1066. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  1067. package/build/dist/UI/Components/Table/TableRow.js +9 -2
  1068. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  1069. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js +63 -1
  1070. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js.map +1 -1
  1071. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +4 -2
  1072. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  1073. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +91 -10
  1074. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -1
  1075. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +14 -4
  1076. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
  1077. package/build/dist/UI/Components/TextArea/TextArea.js +9 -3
  1078. package/build/dist/UI/Components/TextArea/TextArea.js.map +1 -1
  1079. package/build/dist/UI/Components/Workflow/ModelFieldPicker.js +1 -2
  1080. package/build/dist/UI/Components/Workflow/ModelFieldPicker.js.map +1 -1
  1081. package/build/dist/Utils/AI/InvestigationReport.js +71 -11
  1082. package/build/dist/Utils/AI/InvestigationReport.js.map +1 -1
  1083. package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js +1462 -0
  1084. package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js.map +1 -0
  1085. package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js +122 -0
  1086. package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js.map +1 -0
  1087. package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js +1139 -0
  1088. package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js.map +1 -0
  1089. package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js +1060 -0
  1090. package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js.map +1 -0
  1091. package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js +1301 -0
  1092. package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js.map +1 -0
  1093. package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js +370 -0
  1094. package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js.map +1 -0
  1095. package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js +498 -0
  1096. package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js.map +1 -0
  1097. package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js +1565 -0
  1098. package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js.map +1 -0
  1099. package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js +2206 -0
  1100. package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js.map +1 -0
  1101. package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js +1129 -0
  1102. package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js.map +1 -0
  1103. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js +565 -0
  1104. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js.map +1 -0
  1105. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js +408 -0
  1106. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js.map +1 -0
  1107. package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js +1910 -0
  1108. package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js.map +1 -0
  1109. package/build/dist/Utils/LabelRuleImportExport.js +2 -0
  1110. package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
  1111. package/build/dist/Utils/Markdown/UntrustedMarkdown.js +988 -0
  1112. package/build/dist/Utils/Markdown/UntrustedMarkdown.js.map +1 -0
  1113. package/build/dist/Utils/Monitor/IncomingEmailMonitorRequestUtil.js +34 -0
  1114. package/build/dist/Utils/Monitor/IncomingEmailMonitorRequestUtil.js.map +1 -0
  1115. package/build/dist/Utils/Monitor/MonitorLogSummaryUtil.js +148 -0
  1116. package/build/dist/Utils/Monitor/MonitorLogSummaryUtil.js.map +1 -0
  1117. package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js +160 -0
  1118. package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js.map +1 -0
  1119. package/build/dist/Utils/Telemetry/EntityKey.js +36 -0
  1120. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  1121. package/package.json +1 -3
  1122. package/Server/Utils/CommunityEditionSsoReport.ts +0 -361
  1123. package/Tests/App/Accounts/LoginSsoEdition.test.tsx +0 -616
  1124. package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +0 -217
  1125. package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +0 -271
  1126. package/Tests/App/Dashboard/CloudDocumentationMarkdown.test.ts +0 -215
  1127. package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +0 -784
  1128. package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +0 -518
  1129. package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +0 -419
  1130. package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +0 -769
  1131. package/Tests/UI/Components/CodeEditor.test.tsx +0 -638
  1132. package/Tests/UI/Components/MonacoLoader.test.ts +0 -67
  1133. package/Tests/UI/Components/MonacoRuntime.test.ts +0 -121
  1134. package/Tests/UI/Components/Telemetry/TelemetryRetentionConfigForm.test.tsx +0 -329
  1135. package/Tests/UI/Components/YamlEditor.test.tsx +0 -847
  1136. package/UI/Components/CodeEditor/MonacoLoader.ts +0 -36
  1137. package/UI/Components/Telemetry/TelemetryRetentionConfigForm.tsx +0 -319
  1138. package/UI/Components/Telemetry/TelemetryRetentionConfigSummary.tsx +0 -223
  1139. package/build/dist/Server/Utils/CommunityEditionSsoReport.js +0 -223
  1140. package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +0 -1
  1141. package/build/dist/UI/Components/CodeEditor/MonacoLoader.js +0 -34
  1142. package/build/dist/UI/Components/CodeEditor/MonacoLoader.js.map +0 -1
  1143. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js +0 -171
  1144. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js.map +0 -1
  1145. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigSummary.js +0 -119
  1146. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigSummary.js.map +0 -1
@@ -0,0 +1,1300 @@
1
+ import {
2
+ JsonSyntaxCheckResult,
3
+ JsonSyntaxError,
4
+ checkJsonSyntax,
5
+ describeJsonSyntaxError,
6
+ findJsonSyntaxError,
7
+ formatJson,
8
+ offsetToLineColumn,
9
+ } from "../../../Types/Code/JsonSyntax";
10
+ import {
11
+ JSONSyntaxCheckResult,
12
+ checkJSONSyntax,
13
+ } from "../../../Types/Workflow/TemplateSyntax";
14
+ import { describe, expect, test } from "@jest/globals";
15
+
16
+ /*
17
+ * The code editor's JSON status bar and gutter marker come from this module,
18
+ * and the form blocks Save with checkJSONSyntax. The two must give the same
19
+ * verdict on every document, and this module must also say where a broken
20
+ * one breaks. Characters that are awkward to type (a backslash before "u",
21
+ * invisible characters, an emoji) are built from code points so the source
22
+ * of the test cannot be mangled on the way in.
23
+ */
24
+
25
+ const BACKSLASH: string = String.fromCharCode(92);
26
+ const NBSP: string = String.fromCharCode(0xa0);
27
+ const BOM: string = String.fromCharCode(0xfeff);
28
+ const ZERO_WIDTH_SPACE: string = String.fromCharCode(0x200b);
29
+ const LINE_SEPARATOR: string = String.fromCharCode(0x2028);
30
+ const EMOJI: string = String.fromCodePoint(0x1f600);
31
+
32
+ type EscapeFunction = (hex: string) => string;
33
+
34
+ // A JSON \uXXXX escape, as text: six characters, starting with a backslash.
35
+ const unicodeEscape: EscapeFunction = (hex: string): string => {
36
+ return BACKSLASH + "u" + hex;
37
+ };
38
+
39
+ type ControlFunction = (code: number) => string;
40
+
41
+ const control: ControlFunction = (code: number): string => {
42
+ return String.fromCharCode(code);
43
+ };
44
+
45
+ type ParsesFunction = (text: string) => boolean;
46
+
47
+ const parses: ParsesFunction = (text: string): boolean => {
48
+ try {
49
+ JSON.parse(text);
50
+ return true;
51
+ } catch {
52
+ return false;
53
+ }
54
+ };
55
+
56
+ interface ErrorCase {
57
+ name: string;
58
+ text: string;
59
+ message: string;
60
+ offset: number;
61
+ }
62
+
63
+ const ERROR_CASES: Array<ErrorCase> = [
64
+ // Trailing commas are blamed on the comma itself, not on the closer.
65
+ {
66
+ name: "a trailing comma in an object",
67
+ text: '{"a": 1,}',
68
+ message: "Trailing comma: remove the ',' before '}'",
69
+ offset: 7,
70
+ },
71
+ {
72
+ name: "a trailing comma in an object, spaced from the closer",
73
+ text: '{"a": 1, }',
74
+ message: "Trailing comma: remove the ',' before '}'",
75
+ offset: 7,
76
+ },
77
+ {
78
+ name: "a trailing comma in an array",
79
+ text: "[1, 2,]",
80
+ message: "Trailing comma: remove the ',' before ']'",
81
+ offset: 5,
82
+ },
83
+ {
84
+ name: "a trailing comma in a nested array",
85
+ text: '{"a": [1,]}',
86
+ message: "Trailing comma: remove the ',' before ']'",
87
+ offset: 8,
88
+ },
89
+ {
90
+ name: "a trailing comma after an object in an array",
91
+ text: '[{"a": 1},]',
92
+ message: "Trailing comma: remove the ',' before ']'",
93
+ offset: 9,
94
+ },
95
+ {
96
+ name: "an unquoted property name",
97
+ text: "{a: 1}",
98
+ message: "Property names must be wrapped in double quotes",
99
+ offset: 1,
100
+ },
101
+ {
102
+ name: "an unquoted property name after a comma",
103
+ text: '{"a": 1, b: 2}',
104
+ message: "Property names must be wrapped in double quotes",
105
+ offset: 9,
106
+ },
107
+ {
108
+ name: "a single-quoted property name",
109
+ text: "{'a': 1}",
110
+ message: "Strings must use double quotes, not single quotes",
111
+ offset: 1,
112
+ },
113
+ {
114
+ name: "a single-quoted string value",
115
+ text: "{\"a\": 'b'}",
116
+ message: "Strings must use double quotes, not single quotes",
117
+ offset: 6,
118
+ },
119
+ {
120
+ name: "a comma where a property name should be",
121
+ text: "{,}",
122
+ message: "Unexpected ',': expected a property name in double quotes",
123
+ offset: 1,
124
+ },
125
+ {
126
+ name: "two commas in a row in an object",
127
+ text: '{"a": 1,,}',
128
+ message: "Unexpected ',': expected a property name in double quotes",
129
+ offset: 8,
130
+ },
131
+ {
132
+ name: "a line comment after a value",
133
+ text: '{"a": 1 // note\n}',
134
+ message: "Comments are not allowed in JSON",
135
+ offset: 8,
136
+ },
137
+ {
138
+ name: "a block comment where a value should be",
139
+ text: "[/* x */ 1]",
140
+ message: "Comments are not allowed in JSON",
141
+ offset: 1,
142
+ },
143
+ {
144
+ name: "a block comment where a property name should be",
145
+ text: "{/* x */}",
146
+ message: "Comments are not allowed in JSON",
147
+ offset: 1,
148
+ },
149
+ {
150
+ name: "a comment before the document",
151
+ text: "// c\n{}",
152
+ message: "Comments are not allowed in JSON",
153
+ offset: 0,
154
+ },
155
+ {
156
+ name: "a missing comma between properties",
157
+ text: '{"a": 1 "b": 2}',
158
+ message: "Unexpected '\"': expected ',' or '}' after a property value",
159
+ offset: 8,
160
+ },
161
+ {
162
+ name: "a missing comma between array items",
163
+ text: "[1 2]",
164
+ message: "Unexpected '2': expected ',' or ']' after an array item",
165
+ offset: 3,
166
+ },
167
+ {
168
+ name: "a missing colon",
169
+ text: '{"a" 1}',
170
+ message: "Unexpected '1': expected ':' after the property name",
171
+ offset: 5,
172
+ },
173
+ {
174
+ name: "a string where the colon should be",
175
+ text: '{"a" "b"}',
176
+ message: "Unexpected '\"': expected ':' after the property name",
177
+ offset: 5,
178
+ },
179
+ {
180
+ name: "an unterminated string value, blamed on its opening quote",
181
+ text: '{"a": "abc',
182
+ message: "This string is never closed",
183
+ offset: 6,
184
+ },
185
+ {
186
+ name: "a string ending in a lone backslash",
187
+ text: '"abc' + BACKSLASH,
188
+ message: "This string is never closed",
189
+ offset: 0,
190
+ },
191
+ {
192
+ name: "a line break inside a string",
193
+ text: '{"a": "ab\ncd"}',
194
+ message:
195
+ "A string cannot span lines: close it, or write the line break as " +
196
+ BACKSLASH +
197
+ "n",
198
+ offset: 9,
199
+ },
200
+ {
201
+ name: "a carriage return inside a string",
202
+ text: '"ab\rcd"',
203
+ message:
204
+ "A string cannot span lines: close it, or write the line break as " +
205
+ BACKSLASH +
206
+ "n",
207
+ offset: 3,
208
+ },
209
+ {
210
+ name: "a raw tab inside a string",
211
+ text: '"a\tb"',
212
+ message: "A tab inside a string must be written as " + BACKSLASH + "t",
213
+ offset: 2,
214
+ },
215
+ {
216
+ name: "a raw control character inside a string",
217
+ text: '"a' + control(1) + 'b"',
218
+ message: "Control character U+0001 must be escaped inside a string",
219
+ offset: 2,
220
+ },
221
+ {
222
+ name: "the last control character inside a string",
223
+ text: '"a' + control(0x1f) + '"',
224
+ message: "Control character U+001F must be escaped inside a string",
225
+ offset: 2,
226
+ },
227
+ {
228
+ name: "an escape JSON does not have",
229
+ text: '"a' + BACKSLASH + 'x"',
230
+ message: "'" + BACKSLASH + "x' is not a valid escape in a JSON string",
231
+ offset: 2,
232
+ },
233
+ {
234
+ name: "a unicode escape with too few digits",
235
+ text: '"' + unicodeEscape("12") + '"',
236
+ message: "A " + BACKSLASH + "u escape needs exactly four hex digits",
237
+ offset: 1,
238
+ },
239
+ {
240
+ name: "a unicode escape with a non-hex digit",
241
+ text: '"' + unicodeEscape("12G4") + '"',
242
+ message: "A " + BACKSLASH + "u escape needs exactly four hex digits",
243
+ offset: 1,
244
+ },
245
+ {
246
+ name: "a leading zero",
247
+ text: "[01]",
248
+ message: "A number cannot have a leading zero",
249
+ offset: 1,
250
+ },
251
+ {
252
+ name: "a leading zero after a minus, blamed on the number's start",
253
+ text: "-01",
254
+ message: "A number cannot have a leading zero",
255
+ offset: 0,
256
+ },
257
+ {
258
+ name: "a minus with no digits",
259
+ text: "[-]",
260
+ message: "Expected a digit after '-'",
261
+ offset: 2,
262
+ },
263
+ {
264
+ name: "a minus before a letter",
265
+ text: "-a",
266
+ message: "Expected a digit after '-'",
267
+ offset: 1,
268
+ },
269
+ {
270
+ name: "-Infinity",
271
+ text: "-Infinity",
272
+ message: "Expected a digit after '-'",
273
+ offset: 1,
274
+ },
275
+ {
276
+ name: "a decimal point with no digits after it",
277
+ text: "1.",
278
+ message: "Expected a digit after the decimal point",
279
+ offset: 2,
280
+ },
281
+ {
282
+ name: "a decimal point followed by an exponent",
283
+ text: "[1.e5]",
284
+ message: "Expected a digit after the decimal point",
285
+ offset: 3,
286
+ },
287
+ {
288
+ name: "an exponent with no digits",
289
+ text: "1e",
290
+ message: "Expected a digit in the exponent",
291
+ offset: 2,
292
+ },
293
+ {
294
+ name: "a signed exponent with no digits",
295
+ text: "1E+",
296
+ message: "Expected a digit in the exponent",
297
+ offset: 3,
298
+ },
299
+ {
300
+ name: "a number with a plus sign",
301
+ text: "+1",
302
+ message: "A number must start with a digit or '-'",
303
+ offset: 0,
304
+ },
305
+ {
306
+ name: "a number starting at the decimal point",
307
+ text: "[.5]",
308
+ message: "A number must start with a digit or '-'",
309
+ offset: 1,
310
+ },
311
+ {
312
+ name: "a hexadecimal number",
313
+ text: "0x1F",
314
+ message: "Unexpected 'x' after the end of the JSON value",
315
+ offset: 1,
316
+ },
317
+ {
318
+ name: "a capitalised true",
319
+ text: "True",
320
+ message:
321
+ "Unexpected 'True': JSON's literals are lowercase true, false and null",
322
+ offset: 0,
323
+ },
324
+ {
325
+ name: "an upper-case false",
326
+ text: "FALSE",
327
+ message:
328
+ "Unexpected 'FALSE': JSON's literals are lowercase true, false and null",
329
+ offset: 0,
330
+ },
331
+ {
332
+ name: "an upper-case null as a value",
333
+ text: '{"a": NULL}',
334
+ message:
335
+ "Unexpected 'NULL': JSON's literals are lowercase true, false and null",
336
+ offset: 6,
337
+ },
338
+ {
339
+ name: "Python's None",
340
+ text: "[None]",
341
+ message:
342
+ "Unexpected 'None': JSON's literals are lowercase true, false and null",
343
+ offset: 1,
344
+ },
345
+ {
346
+ name: "undefined",
347
+ text: "undefined",
348
+ message: "'undefined' is not a JSON value",
349
+ offset: 0,
350
+ },
351
+ {
352
+ name: "NaN",
353
+ text: "[NaN]",
354
+ message: "'NaN' is not a JSON value",
355
+ offset: 1,
356
+ },
357
+ {
358
+ name: "Infinity",
359
+ text: '{"a": Infinity}',
360
+ message: "'Infinity' is not a JSON value",
361
+ offset: 6,
362
+ },
363
+ {
364
+ name: "a misspelt literal",
365
+ text: '{"a": tru}',
366
+ message: "Unexpected 'tru': expected a value",
367
+ offset: 6,
368
+ },
369
+ {
370
+ name: "a truncated null",
371
+ text: "nul",
372
+ message: "Unexpected 'nul': expected a value",
373
+ offset: 0,
374
+ },
375
+ {
376
+ name: "a no-break space where a property name should be",
377
+ text: "{" + NBSP + "}",
378
+ message:
379
+ "Unexpected invisible character U+00A0: expected a property name in double quotes",
380
+ offset: 1,
381
+ },
382
+ {
383
+ name: "a byte order mark before the document",
384
+ text: BOM + "{}",
385
+ message: "Unexpected invisible character U+FEFF: expected a value",
386
+ offset: 0,
387
+ },
388
+ {
389
+ name: "a no-break space after the document",
390
+ text: "{}" + NBSP,
391
+ message:
392
+ "Unexpected invisible character U+00A0 after the end of the JSON value",
393
+ offset: 2,
394
+ },
395
+ {
396
+ name: "a zero-width space between array items",
397
+ text: "[1," + ZERO_WIDTH_SPACE + "2]",
398
+ message: "Unexpected invisible character U+200B: expected a value",
399
+ offset: 3,
400
+ },
401
+ {
402
+ name: "a line separator between array items",
403
+ text: "[1," + LINE_SEPARATOR + "2]",
404
+ message: "Unexpected invisible character U+2028: expected a value",
405
+ offset: 3,
406
+ },
407
+ {
408
+ name: "an emoji where a value should be, named whole",
409
+ text: "[" + EMOJI + "]",
410
+ message: "Unexpected '" + EMOJI + "': expected a value",
411
+ offset: 1,
412
+ },
413
+ {
414
+ name: "an emoji after an array item, named whole",
415
+ text: "[1" + EMOJI + "]",
416
+ message:
417
+ "Unexpected '" + EMOJI + "': expected ',' or ']' after an array item",
418
+ offset: 2,
419
+ },
420
+ {
421
+ name: "text after the document",
422
+ text: '{"a": 1} x',
423
+ message: "Unexpected 'x' after the end of the JSON value",
424
+ offset: 9,
425
+ },
426
+ {
427
+ name: "an extra closing bracket",
428
+ text: "[1]]",
429
+ message: "Unexpected ']' after the end of the JSON value",
430
+ offset: 3,
431
+ },
432
+ {
433
+ name: "letters straight after a literal",
434
+ text: "truex",
435
+ message: "Unexpected 'x' after the end of the JSON value",
436
+ offset: 4,
437
+ },
438
+ {
439
+ name: "a second document",
440
+ text: "{} {}",
441
+ message: "Unexpected '{' after the end of the JSON value",
442
+ offset: 3,
443
+ },
444
+ {
445
+ name: "an object that is never closed",
446
+ text: '{"a": 1',
447
+ message: "Unexpected end of JSON: a closing '}' is missing",
448
+ offset: 7,
449
+ },
450
+ {
451
+ name: "an array that is never closed",
452
+ text: "[1, 2",
453
+ message: "Unexpected end of JSON: a closing ']' is missing",
454
+ offset: 5,
455
+ },
456
+ {
457
+ name: "an outer object that is never closed",
458
+ text: '{"a": [1, 2]',
459
+ message: "Unexpected end of JSON: a closing '}' is missing",
460
+ offset: 12,
461
+ },
462
+ {
463
+ name: "an empty document",
464
+ text: "",
465
+ message: "Unexpected end of JSON: expected a value",
466
+ offset: 0,
467
+ },
468
+ {
469
+ name: "a document of only whitespace",
470
+ text: " ",
471
+ message: "Unexpected end of JSON: expected a value",
472
+ offset: 3,
473
+ },
474
+ {
475
+ name: "a property with no value at the end",
476
+ text: '{"a":',
477
+ message: "Unexpected end of JSON: expected a value",
478
+ offset: 5,
479
+ },
480
+ {
481
+ name: "a property name with no colon at the end",
482
+ text: '{"a"',
483
+ message: "Unexpected end of JSON: expected ':' after the property name",
484
+ offset: 4,
485
+ },
486
+ {
487
+ name: "a lone opening brace",
488
+ text: "{",
489
+ message:
490
+ "Unexpected end of JSON: expected a property name in double quotes",
491
+ offset: 1,
492
+ },
493
+ {
494
+ name: "a lone opening bracket",
495
+ text: "[",
496
+ message: "Unexpected end of JSON: expected a value",
497
+ offset: 1,
498
+ },
499
+ {
500
+ name: "a comma at the end of an unfinished object",
501
+ text: '{"a": 1,',
502
+ message:
503
+ "Unexpected end of JSON: expected a property name in double quotes",
504
+ offset: 8,
505
+ },
506
+ {
507
+ name: "a comma at the end of an unfinished array",
508
+ text: "[1,",
509
+ message: "Unexpected end of JSON: expected a value",
510
+ offset: 3,
511
+ },
512
+ {
513
+ name: "a comma before the first array item",
514
+ text: "[,1]",
515
+ message: "Unexpected ',': expected a value",
516
+ offset: 1,
517
+ },
518
+ ];
519
+
520
+ describe("findJsonSyntaxError — names the mistake and where it is", () => {
521
+ test.each(ERROR_CASES)("$name", (errorCase: ErrorCase) => {
522
+ const error: JsonSyntaxError | null = findJsonSyntaxError(errorCase.text);
523
+
524
+ expect(error).toEqual({
525
+ message: errorCase.message,
526
+ offset: errorCase.offset,
527
+ });
528
+
529
+ // Every case here is one JSON.parse rejects too.
530
+ expect(parses(errorCase.text)).toBe(false);
531
+ });
532
+
533
+ /*
534
+ * Regression: the trailing-content path read a single UTF-16 unit, so an
535
+ * emoji there was named by half of its surrogate pair - an unprintable
536
+ * character in the status bar.
537
+ */
538
+ test("an emoji after the end of the document is named whole, not as half a surrogate pair", () => {
539
+ const error: JsonSyntaxError | null = findJsonSyntaxError("{}" + EMOJI);
540
+
541
+ expect(error).toEqual({
542
+ message: "Unexpected '" + EMOJI + "' after the end of the JSON value",
543
+ offset: 2,
544
+ });
545
+ });
546
+ });
547
+
548
+ const VALID_DOCUMENTS: Array<string> = [
549
+ "{}",
550
+ "[]",
551
+ " \n\t\r{ } ",
552
+ '"a string on its own"',
553
+ "0",
554
+ "-0",
555
+ "42",
556
+ "-3.25",
557
+ "1E+2",
558
+ "1e-7",
559
+ "0.5e10",
560
+ "true",
561
+ "false",
562
+ "null",
563
+ '{"a": 1, "b": [true, false, null], "c": {"d": "e"}}',
564
+ '[[[[[]]]], {}, {"": ""}]',
565
+ '{"a":1,"a":2}',
566
+ '"' +
567
+ BACKSLASH +
568
+ '"' +
569
+ BACKSLASH +
570
+ BACKSLASH +
571
+ BACKSLASH +
572
+ "/" +
573
+ BACKSLASH +
574
+ "b" +
575
+ BACKSLASH +
576
+ "f" +
577
+ BACKSLASH +
578
+ "n" +
579
+ BACKSLASH +
580
+ "r" +
581
+ BACKSLASH +
582
+ 't"',
583
+ '"' + unicodeEscape("00e9") + unicodeEscape("ABCD") + '"',
584
+ // A lone surrogate is legal in JSON text, escaped or raw.
585
+ '"' + unicodeEscape("d800") + '"',
586
+ '"' + String.fromCharCode(0xd800) + '"',
587
+ '"' + LINE_SEPARATOR + String.fromCharCode(0x2029) + '"',
588
+ '"' + EMOJI + ' é ✓ 漢字"',
589
+ '"' + String.fromCharCode(0x7f) + '"',
590
+ "12345678901234567890",
591
+ "1" + "0".repeat(400),
592
+ "[1e999999]",
593
+ '{"deep": {"er": {"est": [1, [2, [3, [4]]]]}}}',
594
+ ];
595
+
596
+ describe("findJsonSyntaxError — accepts exactly what JSON.parse accepts", () => {
597
+ test.each(VALID_DOCUMENTS)("accepts %j", (text: string) => {
598
+ expect(parses(text)).toBe(true);
599
+ expect(findJsonSyntaxError(text)).toBeNull();
600
+ });
601
+
602
+ test("nesting 100000 levels deep does not overflow the stack", () => {
603
+ const depth: number = 100000;
604
+
605
+ expect(findJsonSyntaxError("[".repeat(depth) + "]".repeat(depth))).toBe(
606
+ null,
607
+ );
608
+ expect(
609
+ findJsonSyntaxError('{"a":'.repeat(depth) + "1" + "}".repeat(depth)),
610
+ ).toBeNull();
611
+ });
612
+
613
+ test("an unclosed document 100000 levels deep is reported at its end", () => {
614
+ const text: string = "[".repeat(100000);
615
+
616
+ expect(findJsonSyntaxError(text)).toEqual({
617
+ message: "Unexpected end of JSON: expected a value",
618
+ offset: 100000,
619
+ });
620
+ });
621
+
622
+ type RandomFunction = () => number;
623
+
624
+ // mulberry32: small, seeded, and the same sequence on every run.
625
+ type CreateRandomFunction = (seed: number) => RandomFunction;
626
+
627
+ const createRandom: CreateRandomFunction = (seed: number): RandomFunction => {
628
+ let state: number = seed >>> 0;
629
+
630
+ return (): number => {
631
+ state = (state + 0x6d2b79f5) >>> 0;
632
+ let mixed: number = state;
633
+ mixed = Math.imul(mixed ^ (mixed >>> 15), mixed | 1);
634
+ mixed ^= mixed + Math.imul(mixed ^ (mixed >>> 7), mixed | 61);
635
+ return ((mixed ^ (mixed >>> 14)) >>> 0) / 4294967296;
636
+ };
637
+ };
638
+
639
+ type Json =
640
+ | null
641
+ | boolean
642
+ | number
643
+ | string
644
+ | Array<Json>
645
+ | { [key: string]: Json };
646
+
647
+ const STRINGS: Array<string> = [
648
+ "",
649
+ "a",
650
+ "hello world",
651
+ 'quote " inside',
652
+ "back \\ slash",
653
+ "tab\tand\nnewline",
654
+ "unicode é ✓",
655
+ EMOJI,
656
+ LINE_SEPARATOR,
657
+ "{[,:]}",
658
+ ];
659
+
660
+ const NUMBERS: Array<number> = [
661
+ 0,
662
+ -1,
663
+ 3.25,
664
+ 1e21,
665
+ Number.MAX_SAFE_INTEGER,
666
+ 0.5,
667
+ ];
668
+
669
+ type PickFunction = <T>(random: RandomFunction, items: Array<T>) => T;
670
+
671
+ const pick: PickFunction = <T>(
672
+ random: RandomFunction,
673
+ items: Array<T>,
674
+ ): T => {
675
+ return items[Math.floor(random() * items.length)] as T;
676
+ };
677
+
678
+ type RandomValueFunction = (random: RandomFunction, depth: number) => Json;
679
+
680
+ const randomValue: RandomValueFunction = (
681
+ random: RandomFunction,
682
+ depth: number,
683
+ ): Json => {
684
+ const roll: number = random();
685
+
686
+ if (depth > 3 || roll < 0.35) {
687
+ return pick<Json>(random, [
688
+ pick(random, STRINGS),
689
+ pick(random, NUMBERS),
690
+ true,
691
+ false,
692
+ null,
693
+ ]);
694
+ }
695
+
696
+ const size: number = Math.floor(random() * 5);
697
+
698
+ if (roll < 0.7) {
699
+ const items: Array<Json> = [];
700
+
701
+ for (let index: number = 0; index < size; index++) {
702
+ items.push(randomValue(random, depth + 1));
703
+ }
704
+
705
+ return items;
706
+ }
707
+
708
+ const object: { [key: string]: Json } = {};
709
+
710
+ for (let index: number = 0; index < size; index++) {
711
+ object[pick(random, STRINGS)] = randomValue(random, depth + 1);
712
+ }
713
+
714
+ return object;
715
+ };
716
+
717
+ const ALPHABET: Array<string> = [
718
+ ..."{}[]\",:0123456789-+.eE tfnlrsuaxX'/",
719
+ BACKSLASH,
720
+ "\n",
721
+ "\t",
722
+ "\r",
723
+ NBSP,
724
+ EMOJI,
725
+ control(2),
726
+ ];
727
+
728
+ type MutateFunction = (random: RandomFunction, text: string) => string;
729
+
730
+ const mutate: MutateFunction = (
731
+ random: RandomFunction,
732
+ text: string,
733
+ ): string => {
734
+ let result: string = text;
735
+ const mutations: number = 1 + Math.floor(random() * 3);
736
+
737
+ for (let count: number = 0; count < mutations; count++) {
738
+ const at: number = Math.floor(random() * (result.length + 1));
739
+ const kind: number = random();
740
+
741
+ if (kind < 0.34) {
742
+ result =
743
+ result.slice(0, at) + pick(random, ALPHABET) + result.slice(at);
744
+ } else if (kind < 0.67) {
745
+ result = result.slice(0, at) + result.slice(at + 1);
746
+ } else {
747
+ result =
748
+ result.slice(0, at) + pick(random, ALPHABET) + result.slice(at + 1);
749
+ }
750
+ }
751
+
752
+ return result;
753
+ };
754
+
755
+ test("agrees with JSON.parse on thousands of mutated documents", () => {
756
+ const random: RandomFunction = createRandom(20260930);
757
+ const disagreements: Array<string> = [];
758
+ let validCount: number = 0;
759
+ let invalidCount: number = 0;
760
+
761
+ for (let iteration: number = 0; iteration < 4000; iteration++) {
762
+ const indent: string | number = pick<string | number>(random, [
763
+ 0,
764
+ 2,
765
+ "\t",
766
+ ]);
767
+ const original: string = JSON.stringify(
768
+ randomValue(random, 0),
769
+ null,
770
+ indent,
771
+ );
772
+ const text: string = random() < 0.1 ? original : mutate(random, original);
773
+ const expected: boolean = parses(text);
774
+ const error: JsonSyntaxError | null = findJsonSyntaxError(text);
775
+
776
+ if ((error === null) !== expected) {
777
+ disagreements.push(JSON.stringify(text));
778
+ }
779
+
780
+ if (error) {
781
+ invalidCount++;
782
+ expect(error.offset).toBeGreaterThanOrEqual(0);
783
+ expect(error.offset).toBeLessThanOrEqual(text.length);
784
+ expect(error.message.length).toBeGreaterThan(0);
785
+ } else {
786
+ validCount++;
787
+ }
788
+ }
789
+
790
+ expect(disagreements).toEqual([]);
791
+
792
+ // Not vacuous: plenty of both verdicts were exercised.
793
+ expect(validCount).toBeGreaterThan(300);
794
+ expect(invalidCount).toBeGreaterThan(1000);
795
+ });
796
+
797
+ test("formatting never changes what a valid mutated document parses to", () => {
798
+ const random: RandomFunction = createRandom(4153);
799
+ let formattedCount: number = 0;
800
+
801
+ for (let iteration: number = 0; iteration < 1500; iteration++) {
802
+ const text: string = mutate(
803
+ random,
804
+ JSON.stringify(randomValue(random, 0)),
805
+ );
806
+
807
+ if (text.trim() === "" || !parses(text)) {
808
+ expect(formatJson(text, " ")).toBeNull();
809
+ continue;
810
+ }
811
+
812
+ const formatted: string | null = formatJson(text, " ");
813
+
814
+ expect(formatted).not.toBeNull();
815
+ expect(JSON.parse(formatted as string)).toEqual(JSON.parse(text));
816
+ formattedCount++;
817
+ }
818
+
819
+ expect(formattedCount).toBeGreaterThan(100);
820
+ });
821
+ });
822
+
823
+ describe("offsetToLineColumn", () => {
824
+ const TEXT: string = "ab\ncd";
825
+
826
+ test.each([
827
+ [0, 1, 1],
828
+ [1, 1, 2],
829
+ [2, 1, 3],
830
+ [3, 2, 1],
831
+ [5, 2, 3],
832
+ ])(
833
+ "offset %i is line %i, column %i",
834
+ (offset: number, line: number, column: number) => {
835
+ expect(offsetToLineColumn(TEXT, offset)).toEqual({ line, column });
836
+ },
837
+ );
838
+
839
+ test("clamps an offset before the start", () => {
840
+ expect(offsetToLineColumn(TEXT, -4)).toEqual({ line: 1, column: 1 });
841
+ });
842
+
843
+ test("clamps an offset past the end", () => {
844
+ expect(offsetToLineColumn(TEXT, 99)).toEqual({ line: 2, column: 3 });
845
+ });
846
+
847
+ test("counts empty lines", () => {
848
+ expect(offsetToLineColumn("\n\n\nx", 3)).toEqual({ line: 4, column: 1 });
849
+ });
850
+ });
851
+
852
+ describe("checkJsonSyntax — what it declines to judge", () => {
853
+ test.each([undefined, null, 42, true, { a: 1 }, ["x"]])(
854
+ "a non-string (%j) is skipped, valid",
855
+ (value: unknown) => {
856
+ expect(checkJsonSyntax(value)).toEqual({
857
+ isValid: true,
858
+ errorMessage: null,
859
+ wasSkipped: true,
860
+ line: null,
861
+ column: null,
862
+ });
863
+ },
864
+ );
865
+
866
+ test.each(["", " ", "\n\t\r\n"])(
867
+ "an empty box (%j) is skipped",
868
+ (value: string) => {
869
+ const result: JsonSyntaxCheckResult = checkJsonSyntax(value);
870
+
871
+ expect(result.isValid).toBe(true);
872
+ expect(result.wasSkipped).toBe(true);
873
+ },
874
+ );
875
+
876
+ test("a document with a {{#each}} loop is skipped, whatever else is wrong", () => {
877
+ const result: JsonSyntaxCheckResult = checkJsonSyntax(
878
+ "[{{#each local.items}}{{this}},{{/each}}",
879
+ );
880
+
881
+ expect(result.isValid).toBe(true);
882
+ expect(result.wasSkipped).toBe(true);
883
+ });
884
+
885
+ test("a valid document is checked, not skipped", () => {
886
+ expect(checkJsonSyntax('{"a": [1, 2]}')).toEqual({
887
+ isValid: true,
888
+ errorMessage: null,
889
+ wasSkipped: false,
890
+ line: null,
891
+ column: null,
892
+ });
893
+ });
894
+ });
895
+
896
+ describe("checkJsonSyntax — where a broken document breaks", () => {
897
+ test("a trailing comma on its own line is placed by line and column", () => {
898
+ const result: JsonSyntaxCheckResult = checkJsonSyntax('{\n "a": 1,\n}');
899
+
900
+ expect(result).toEqual({
901
+ isValid: false,
902
+ errorMessage: "Trailing comma: remove the ',' before '}'",
903
+ wasSkipped: false,
904
+ line: 2,
905
+ column: 9,
906
+ });
907
+ });
908
+
909
+ /*
910
+ * The placeholders are masked before the scan. The mask has to keep every
911
+ * later character where it was, or the column would point at the wrong
912
+ * place in the text the person is looking at.
913
+ */
914
+ test("a placeholder before the error on the same line does not shift the column", () => {
915
+ const text: string = '{"name": "{{local.variables.name}}", "n": }';
916
+ const result: JsonSyntaxCheckResult = checkJsonSyntax(text);
917
+ const brace: number = text.lastIndexOf("}");
918
+
919
+ expect(result.isValid).toBe(false);
920
+ expect(result.errorMessage).toBe("Unexpected '}': expected a value");
921
+ expect(result.line).toBe(1);
922
+ expect(result.column).toBe(brace + 1);
923
+ expect(text[(result.column as number) - 1]).toBe("}");
924
+ });
925
+
926
+ test("a bare placeholder value before a trailing comma does not shift the column", () => {
927
+ const text: string =
928
+ '{\n "retries": {{local.variables.retryCount}}, "list": [1,]\n}';
929
+ const result: JsonSyntaxCheckResult = checkJsonSyntax(text);
930
+ const comma: number = text.indexOf(",]");
931
+ const lineStart: number = text.lastIndexOf("\n", comma) + 1;
932
+
933
+ expect(result.isValid).toBe(false);
934
+ expect(result.errorMessage).toBe(
935
+ "Trailing comma: remove the ',' before ']'",
936
+ );
937
+ expect(result.line).toBe(2);
938
+ expect(result.column).toBe(comma - lineStart + 1);
939
+ });
940
+
941
+ test("an error on a later line is placed on that line", () => {
942
+ const result: JsonSyntaxCheckResult = checkJsonSyntax(
943
+ '{\n "a": 1,\n "b": tru\n}',
944
+ );
945
+
946
+ expect(result).toEqual({
947
+ isValid: false,
948
+ errorMessage: "Unexpected 'tru': expected a value",
949
+ wasSkipped: false,
950
+ line: 3,
951
+ column: 8,
952
+ });
953
+ });
954
+ });
955
+
956
+ describe("checkJsonSyntax — JSON5 fields are judged by JSON5's rules", () => {
957
+ test.each([
958
+ "{a: 1, b: [1, 2,], // a comment\n}",
959
+ "{'a': 'b'}",
960
+ "[1, 2, 3,]",
961
+ "{a: Infinity, b: NaN, c: +1, d: .5, e: 0x1F}",
962
+ "{a: {{local.variables.x}},}",
963
+ ])("accepts %j", (text: string) => {
964
+ const result: JsonSyntaxCheckResult = checkJsonSyntax(text, {
965
+ allowJSON5: true,
966
+ });
967
+
968
+ expect(result).toEqual({
969
+ isValid: true,
970
+ errorMessage: null,
971
+ wasSkipped: false,
972
+ line: null,
973
+ column: null,
974
+ });
975
+ // ...which strict JSON would not.
976
+ expect(checkJsonSyntax(text).isValid).toBe(false);
977
+ });
978
+
979
+ test("an error carries JSON5's line and column, without its framing", () => {
980
+ const result: JsonSyntaxCheckResult = checkJsonSyntax(
981
+ "{\n a: 1,\n b: ]\n}",
982
+ { allowJSON5: true },
983
+ );
984
+
985
+ expect(result).toEqual({
986
+ isValid: false,
987
+ errorMessage: "Invalid character ']'",
988
+ wasSkipped: false,
989
+ line: 3,
990
+ column: 6,
991
+ });
992
+ });
993
+
994
+ test("the end of input is reported where it is", () => {
995
+ const result: JsonSyntaxCheckResult = checkJsonSyntax("{a: 1", {
996
+ allowJSON5: true,
997
+ });
998
+
999
+ expect(result.isValid).toBe(false);
1000
+ expect(result.errorMessage).toBe("Invalid end of input");
1001
+ expect(result.line).toBe(1);
1002
+ expect(result.column).toBe(6);
1003
+ });
1004
+
1005
+ test("no message keeps JSON5's prefix or its position suffix", () => {
1006
+ for (const text of ["{a: }", "[1,,2]", "{", "{a:1}\nx", '"abc']) {
1007
+ const result: JsonSyntaxCheckResult = checkJsonSyntax(text, {
1008
+ allowJSON5: true,
1009
+ });
1010
+
1011
+ expect(result.isValid).toBe(false);
1012
+ expect(result.errorMessage).not.toMatch(/^JSON5/);
1013
+ expect(result.errorMessage).not.toMatch(/ at \d+:\d+$/);
1014
+ expect(result.errorMessage?.charAt(0)).toBe(
1015
+ result.errorMessage?.charAt(0).toUpperCase(),
1016
+ );
1017
+ expect(result.line).not.toBeNull();
1018
+ expect(result.column).not.toBeNull();
1019
+ }
1020
+ });
1021
+ });
1022
+
1023
+ /*
1024
+ * The status bar's verdict and the form's must never differ. Both are asked
1025
+ * about the same corpus, in both modes.
1026
+ */
1027
+ const AGREEMENT_CORPUS: Array<unknown> = [
1028
+ undefined,
1029
+ null,
1030
+ 42,
1031
+ true,
1032
+ { a: 1 },
1033
+ ["x"],
1034
+ "",
1035
+ " ",
1036
+ "\n\t",
1037
+ "{}",
1038
+ "[]",
1039
+ '{"a": 1}',
1040
+ '{"a": 1,}',
1041
+ "{a: 1}",
1042
+ "[1, 2,]",
1043
+ "{'a': 1}",
1044
+ "// c\n{}",
1045
+ '{"n": {{x}}}',
1046
+ '{"s": "{{x}}"}',
1047
+ '{"{{x}}": 2}',
1048
+ '{"n": {{x}}5}',
1049
+ '{"n": 5{{x}}}',
1050
+ '{"n": -{{x}}}',
1051
+ '{"n": 1.{{x}}}',
1052
+ '{"n": {{x}}.5}',
1053
+ '{"n": 0{{x}}}',
1054
+ '{"n": 1e{{x}}}',
1055
+ "[{{a}}, {{b}}]",
1056
+ '{"n": {{x}}',
1057
+ "{{x}}",
1058
+ "{{x}} {{y}}",
1059
+ '"{{x}}"',
1060
+ "{{}}",
1061
+ "{{{x}}}",
1062
+ '{"a": {{x}} "b": 1}',
1063
+ '{"a": {{x}},}',
1064
+ "true{{x}}",
1065
+ "{{x}}true",
1066
+ '"' + BACKSLASH + '{{x}}"',
1067
+ '{{#each items}}{"a": 1},{{/each}}',
1068
+ "[{{#each local.items}}{{this}},{{/each}}]",
1069
+ '{"a": {{/each}}}',
1070
+ "{a: 1, b: [1, 2,], // c\n}",
1071
+ "{'a': 'b'}",
1072
+ "{a: Infinity}",
1073
+ "{a: .5}",
1074
+ "{a: +1}",
1075
+ "{a: 0x1F}",
1076
+ "{a: 0x{{x}}}",
1077
+ "[1, 2, 3,]",
1078
+ '{"a": "' + EMOJI + '"}',
1079
+ "{" + NBSP + "}",
1080
+ ];
1081
+
1082
+ describe("checkJsonSyntax agrees with the form's checkJSONSyntax", () => {
1083
+ for (const allowJSON5 of [false, true]) {
1084
+ test.each(AGREEMENT_CORPUS)(
1085
+ `on %j (allowJSON5: ${String(allowJSON5)})`,
1086
+ (value: unknown) => {
1087
+ const ours: JsonSyntaxCheckResult = checkJsonSyntax(value, {
1088
+ allowJSON5,
1089
+ });
1090
+ const theirs: JSONSyntaxCheckResult = checkJSONSyntax(value, {
1091
+ allowJSON5,
1092
+ });
1093
+
1094
+ expect({ isValid: ours.isValid, wasSkipped: ours.wasSkipped }).toEqual({
1095
+ isValid: theirs.isValid,
1096
+ wasSkipped: theirs.wasSkipped,
1097
+ });
1098
+
1099
+ // A verdict of invalid always says where.
1100
+ if (!ours.isValid) {
1101
+ expect(ours.errorMessage).not.toBeNull();
1102
+ expect(ours.line).not.toBeNull();
1103
+ expect(ours.column).not.toBeNull();
1104
+ }
1105
+ },
1106
+ );
1107
+ }
1108
+
1109
+ /*
1110
+ * Regression: this module used to mask {{x}} as a run of "1"s as long as
1111
+ * the expression, where checkJSONSyntax uses one "1". Inside a \u escape
1112
+ * that run supplied the hex digits the single "1" does not, so the status
1113
+ * bar said "Valid JSON" while Save was blocked.
1114
+ */
1115
+ test.each(["{{code}}", "{{x}}", "{{}}"])(
1116
+ "a placeholder completing a \\u escape (%s) gets the form's verdict",
1117
+ (placeholder: string) => {
1118
+ for (const prefix of ["", "0", "00"]) {
1119
+ const text: string =
1120
+ '{"s": "' + BACKSLASH + "u" + prefix + placeholder + '"}';
1121
+
1122
+ expect(checkJsonSyntax(text).isValid).toBe(
1123
+ checkJSONSyntax(text).isValid,
1124
+ );
1125
+ }
1126
+ },
1127
+ );
1128
+ });
1129
+
1130
+ describe("describeJsonSyntaxError", () => {
1131
+ test("names the line and column when both are known", () => {
1132
+ expect(
1133
+ describeJsonSyntaxError({
1134
+ isValid: false,
1135
+ errorMessage: "Trailing comma: remove the ',' before '}'",
1136
+ wasSkipped: false,
1137
+ line: 4,
1138
+ column: 12,
1139
+ }),
1140
+ ).toBe("Trailing comma: remove the ',' before '}' (line 4, column 12)");
1141
+ });
1142
+
1143
+ test("names only the line when the column is unknown", () => {
1144
+ expect(
1145
+ describeJsonSyntaxError({
1146
+ isValid: false,
1147
+ errorMessage: "Invalid character 'x'",
1148
+ wasSkipped: false,
1149
+ line: 3,
1150
+ column: null,
1151
+ }),
1152
+ ).toBe("Invalid character 'x' (line 3)");
1153
+ });
1154
+
1155
+ test("is just the reason without a position", () => {
1156
+ expect(
1157
+ describeJsonSyntaxError({
1158
+ isValid: false,
1159
+ errorMessage: "Something",
1160
+ wasSkipped: false,
1161
+ line: null,
1162
+ column: null,
1163
+ }),
1164
+ ).toBe("Something");
1165
+ });
1166
+
1167
+ test("falls back to a generic reason", () => {
1168
+ expect(
1169
+ describeJsonSyntaxError({
1170
+ isValid: false,
1171
+ errorMessage: null,
1172
+ wasSkipped: false,
1173
+ line: null,
1174
+ column: null,
1175
+ }),
1176
+ ).toBe("Invalid JSON");
1177
+ });
1178
+
1179
+ test("describes a real check result end to end", () => {
1180
+ expect(describeJsonSyntaxError(checkJsonSyntax("[1,\n 2,\n]"))).toBe(
1181
+ "Trailing comma: remove the ',' before ']' (line 2, column 3)",
1182
+ );
1183
+ });
1184
+ });
1185
+
1186
+ const ORDINARY_DOCUMENTS: Array<string> = [
1187
+ '{"name":"api","retries":3,"tags":["a","b"],"nested":{"on":true,"off":false,"none":null},"list":[{"x":1},{"y":[]}],"empty":{}}',
1188
+ '[1,2,[3,[4,{}]],"five"]',
1189
+ '{ "a" : { } , "b" : [ ] }',
1190
+ '"just a string"',
1191
+ "42",
1192
+ "true",
1193
+ "null",
1194
+ "[]",
1195
+ "{}",
1196
+ '{\n\n "spaced" :\t[ 1 ,\r\n 2 ]\n}',
1197
+ '{"text":"with, commas: and {braces} [brackets]","quote":"a ' +
1198
+ BACKSLASH +
1199
+ '"b' +
1200
+ BACKSLASH +
1201
+ '" c"}',
1202
+ '[[],[[]],{"a":{"b":{}}}]',
1203
+ ];
1204
+
1205
+ describe("formatJson — pretty-prints like JSON.stringify", () => {
1206
+ for (const indent of [" ", " ", "\t"]) {
1207
+ test.each(ORDINARY_DOCUMENTS)(
1208
+ `formats %j with ${JSON.stringify(indent)}`,
1209
+ (text: string) => {
1210
+ expect(formatJson(text, indent)).toBe(
1211
+ JSON.stringify(JSON.parse(text), null, indent),
1212
+ );
1213
+ },
1214
+ );
1215
+ }
1216
+
1217
+ test("keeps empty containers on one line, even with whitespace inside", () => {
1218
+ expect(formatJson('{"a": { }, "b": [\n]}', " ")).toBe(
1219
+ '{\n "a": {},\n "b": []\n}',
1220
+ );
1221
+ });
1222
+
1223
+ test("is idempotent", () => {
1224
+ for (const text of ORDINARY_DOCUMENTS) {
1225
+ const once: string = formatJson(text, " ") as string;
1226
+
1227
+ expect(formatJson(once, " ")).toBe(once);
1228
+ }
1229
+ });
1230
+
1231
+ test("formats a document nested a thousand levels deep", () => {
1232
+ const text: string = "[".repeat(1000) + "1" + "]".repeat(1000);
1233
+ const formatted: string | null = formatJson(text, " ");
1234
+
1235
+ expect(formatted).not.toBeNull();
1236
+ expect(JSON.parse(formatted as string)).toEqual(JSON.parse(text));
1237
+ });
1238
+ });
1239
+
1240
+ describe("formatJson — never changes what the document says", () => {
1241
+ const DOCUMENT: string =
1242
+ '{"id":12345678901234567890,"ratio":1.0,"big":1e3,"zero":-0,"s":"' +
1243
+ unicodeEscape("00e9") +
1244
+ '","slash":"a' +
1245
+ BACKSLASH +
1246
+ '/b","d":1,"d":2}';
1247
+
1248
+ test("every scalar survives byte for byte", () => {
1249
+ expect(formatJson(DOCUMENT, " ")).toBe(
1250
+ "{\n" +
1251
+ ' "id": 12345678901234567890,\n' +
1252
+ ' "ratio": 1.0,\n' +
1253
+ ' "big": 1e3,\n' +
1254
+ ' "zero": -0,\n' +
1255
+ ' "s": "' +
1256
+ unicodeEscape("00e9") +
1257
+ '",\n' +
1258
+ ' "slash": "a' +
1259
+ BACKSLASH +
1260
+ '/b",\n' +
1261
+ ' "d": 1,\n' +
1262
+ ' "d": 2\n' +
1263
+ "}",
1264
+ );
1265
+ });
1266
+
1267
+ // The round trip Format deliberately avoids, for contrast.
1268
+ test("which JSON.stringify(JSON.parse()) would not have kept", () => {
1269
+ const roundTrip: string = JSON.stringify(JSON.parse(DOCUMENT), null, 2);
1270
+
1271
+ expect(roundTrip).not.toContain("12345678901234567890");
1272
+ expect(roundTrip).not.toContain("1.0");
1273
+ expect(roundTrip).not.toContain(unicodeEscape("00e9"));
1274
+ expect(roundTrip.match(/"d"/g)?.length).toBe(1);
1275
+
1276
+ const formatted: string = formatJson(DOCUMENT, " ") as string;
1277
+
1278
+ expect(formatted).toContain("12345678901234567890");
1279
+ expect(formatted).toContain("1.0");
1280
+ expect(formatted).toContain(unicodeEscape("00e9"));
1281
+ expect(formatted.match(/"d"/g)?.length).toBe(2);
1282
+ });
1283
+
1284
+ test("placeholders inside strings survive", () => {
1285
+ expect(formatJson('{"to":"{{local.variables.email}}"}', " ")).toBe(
1286
+ '{\n "to": "{{local.variables.email}}"\n}',
1287
+ );
1288
+ });
1289
+
1290
+ test.each([
1291
+ ["an empty document", ""],
1292
+ ["a document of whitespace", " \n "],
1293
+ ["a trailing comma", '{"a": 1,}'],
1294
+ ["JSON5 that strict JSON rejects", "{a: 1}"],
1295
+ ["an unquoted placeholder", '{"n": {{x}}}'],
1296
+ ["a truncated document", '{"a": [1, 2'],
1297
+ ])("returns null for %s", (_name: string, text: string) => {
1298
+ expect(formatJson(text, " ")).toBeNull();
1299
+ });
1300
+ });