@oneuptime/common 12.0.4 → 12.0.6

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 (838) hide show
  1. package/Models/DatabaseModels/AIRun.ts +71 -1
  2. package/Models/DatabaseModels/AlertFeed.ts +30 -0
  3. package/Models/DatabaseModels/Dashboard.ts +28 -0
  4. package/Models/DatabaseModels/DataSource.ts +744 -0
  5. package/Models/DatabaseModels/Incident.ts +2 -0
  6. package/Models/DatabaseModels/IncidentEpisode.ts +1 -0
  7. package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +1 -0
  8. package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +1 -0
  9. package/Models/DatabaseModels/IncidentFeed.ts +30 -0
  10. package/Models/DatabaseModels/IncidentPublicNote.ts +1 -0
  11. package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
  12. package/Models/DatabaseModels/Index.ts +3 -0
  13. package/Models/DatabaseModels/LogSavedView.ts +33 -0
  14. package/Models/DatabaseModels/Project.ts +231 -9
  15. package/Models/DatabaseModels/ProjectCallSMSConfig.ts +10 -2
  16. package/Models/DatabaseModels/ScheduledMaintenance.ts +1 -0
  17. package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +1 -0
  18. package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +1 -0
  19. package/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.ts +4 -4
  20. package/Models/DatabaseModels/StatusPage.ts +28 -0
  21. package/Models/DatabaseModels/StatusPageAnnouncement.ts +1 -0
  22. package/Models/DatabaseModels/User.ts +2 -0
  23. package/Models/DatabaseModels/UserOnCallLog.ts +2 -0
  24. package/Models/DatabaseModels/UserOnCallLogTimeline.ts +2 -0
  25. package/Models/DatabaseModels/UserSession.ts +2 -0
  26. package/Models/DatabaseModels/UserTotpAuth.ts +6 -4
  27. package/Models/DatabaseModels/UserWebAuthn.ts +5 -3
  28. package/Server/API/AIAgentDataAPI.ts +44 -55
  29. package/Server/API/AIInsightAPI.ts +47 -4
  30. package/Server/API/AIInvestigationAPI.ts +200 -17
  31. package/Server/API/DashboardAPI.ts +186 -502
  32. package/Server/API/DataSourceAPI.ts +268 -0
  33. package/Server/API/StatusPageAPI.ts +49 -20
  34. package/Server/API/UserAPI.ts +119 -0
  35. package/Server/EnvironmentConfig.ts +16 -0
  36. package/Server/Infrastructure/ClickhouseConfig.ts +74 -1
  37. package/Server/Infrastructure/ClickhouseDatabase.ts +1 -1
  38. package/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.ts +27 -0
  39. package/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.ts +89 -0
  40. package/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.ts +27 -0
  41. package/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.ts +39 -0
  42. package/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.ts +40 -0
  43. package/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.ts +26 -0
  44. package/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.ts +24 -0
  45. package/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.ts +76 -0
  46. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +16 -0
  47. package/Server/Infrastructure/Queue.ts +26 -0
  48. package/Server/Infrastructure/QueueWorker.ts +17 -0
  49. package/Server/Middleware/TelemetryIngest.ts +8 -3
  50. package/Server/Services/AIInsightService.ts +132 -12
  51. package/Server/Services/AIRunService.ts +112 -10
  52. package/Server/Services/AIService.ts +109 -22
  53. package/Server/Services/AlertFeedService.ts +5 -0
  54. package/Server/Services/AlertService.ts +38 -32
  55. package/Server/Services/AnalyticsDatabaseService.ts +37 -4
  56. package/Server/Services/DataSourceService.ts +200 -0
  57. package/Server/Services/DatabaseService.ts +43 -2
  58. package/Server/Services/HostService.ts +92 -0
  59. package/Server/Services/IncidentFeedService.ts +5 -0
  60. package/Server/Services/IncidentService.ts +45 -0
  61. package/Server/Services/Index.ts +2 -0
  62. package/Server/Services/LlmLogService.ts +46 -2
  63. package/Server/Services/MonitorService.ts +49 -0
  64. package/Server/Services/MonitorStatusService.ts +166 -0
  65. package/Server/Services/OpenTelemetryIngestService.ts +255 -184
  66. package/Server/Services/RumSessionPinService.ts +7 -21
  67. package/Server/Services/StatusPageSubscriberService.ts +13 -0
  68. package/Server/Services/UserService.ts +280 -9
  69. package/Server/Static/Vendor/README.md +62 -0
  70. package/Server/Static/Vendor/fonts/InterVariable.woff2 +0 -0
  71. package/Server/Static/Vendor/highlight/highlight.min.js +1244 -0
  72. package/Server/Static/Vendor/highlight/languages/apache.min.js +15 -0
  73. package/Server/Static/Vendor/highlight/languages/bash.min.js +21 -0
  74. package/Server/Static/Vendor/highlight/languages/c.min.js +41 -0
  75. package/Server/Static/Vendor/highlight/languages/cpp.min.js +47 -0
  76. package/Server/Static/Vendor/highlight/languages/csharp.min.js +49 -0
  77. package/Server/Static/Vendor/highlight/languages/css.min.js +31 -0
  78. package/Server/Static/Vendor/highlight/languages/diff.min.js +9 -0
  79. package/Server/Static/Vendor/highlight/languages/dns.min.js +11 -0
  80. package/Server/Static/Vendor/highlight/languages/dockerfile.min.js +8 -0
  81. package/Server/Static/Vendor/highlight/languages/go.min.js +20 -0
  82. package/Server/Static/Vendor/highlight/languages/graphql.min.js +12 -0
  83. package/Server/Static/Vendor/highlight/languages/http.min.js +14 -0
  84. package/Server/Static/Vendor/highlight/languages/ini.min.js +15 -0
  85. package/Server/Static/Vendor/highlight/languages/java.min.js +38 -0
  86. package/Server/Static/Vendor/highlight/languages/javascript.min.js +81 -0
  87. package/Server/Static/Vendor/highlight/languages/json.min.js +8 -0
  88. package/Server/Static/Vendor/highlight/languages/kotlin.min.js +46 -0
  89. package/Server/Static/Vendor/highlight/languages/lua.min.js +15 -0
  90. package/Server/Static/Vendor/highlight/languages/makefile.min.js +14 -0
  91. package/Server/Static/Vendor/highlight/languages/nginx.min.js +21 -0
  92. package/Server/Static/Vendor/highlight/languages/perl.min.js +41 -0
  93. package/Server/Static/Vendor/highlight/languages/php.min.js +59 -0
  94. package/Server/Static/Vendor/highlight/languages/powershell.min.js +39 -0
  95. package/Server/Static/Vendor/highlight/languages/python.min.js +42 -0
  96. package/Server/Static/Vendor/highlight/languages/r.min.js +26 -0
  97. package/Server/Static/Vendor/highlight/languages/ruby.min.js +54 -0
  98. package/Server/Static/Vendor/highlight/languages/rust.min.js +27 -0
  99. package/Server/Static/Vendor/highlight/languages/scala.min.js +28 -0
  100. package/Server/Static/Vendor/highlight/languages/sql.min.js +21 -0
  101. package/Server/Static/Vendor/highlight/languages/swift.min.js +68 -0
  102. package/Server/Static/Vendor/highlight/languages/typescript.min.js +99 -0
  103. package/Server/Static/Vendor/highlight/languages/xml.min.js +29 -0
  104. package/Server/Static/Vendor/highlight/languages/yaml.min.js +28 -0
  105. package/Server/Static/Vendor/highlight/styles/github-dark.min.css +10 -0
  106. package/Server/Static/Vendor/highlight/styles/vs2015.min.css +1 -0
  107. package/Server/Static/Vendor/tailwind/tailwind-3.4.5.js +21028 -0
  108. package/Server/Types/Database/Permissions/BasePermission.ts +7 -0
  109. package/Server/Types/Database/Permissions/DeletePermission.ts +2 -0
  110. package/Server/Types/Database/Permissions/ReadPermission.ts +3 -0
  111. package/Server/Types/Database/Permissions/TenantPermission.ts +101 -16
  112. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +6 -0
  113. package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +4 -0
  114. package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +8 -5
  115. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +90 -16
  116. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +2 -0
  117. package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +2 -0
  118. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +311 -31
  119. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +26 -24
  120. package/Server/Utils/AI/SRE/ConfidenceSignal.ts +182 -71
  121. package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +252 -43
  122. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +26 -24
  123. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.ts +125 -0
  124. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +25 -15
  125. package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +256 -57
  126. package/Server/Utils/AI/SRE/Insights/InsightStore.ts +76 -18
  127. package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +47 -13
  128. package/Server/Utils/AI/SRE/InvestigationGrader.ts +9 -5
  129. package/Server/Utils/AI/SRE/InvestigationQueue.ts +141 -24
  130. package/Server/Utils/AI/SRE/InvestigationSubjectLock.ts +66 -0
  131. package/Server/Utils/AI/SRE/InvestigationTldr.ts +352 -0
  132. package/Server/Utils/AI/SRE/PostedRootCause.ts +94 -3
  133. package/Server/Utils/AI/SRE/README.md +1 -1
  134. package/Server/Utils/AI/SRE/SubjectCodeFixRun.ts +132 -10
  135. package/Server/Utils/AnalyticsDatabase/ClusterConfig.ts +24 -0
  136. package/Server/Utils/AnalyticsDatabase/InsertDedupContext.ts +7 -2
  137. package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +1793 -0
  138. package/Server/Utils/Dashboard/PublicDashboardViewConfig.ts +65 -0
  139. package/Server/Utils/DataSource/ConnectorRegistry.ts +53 -0
  140. package/Server/Utils/DataSource/Connectors/ClickHouseConnector.ts +338 -0
  141. package/Server/Utils/DataSource/Connectors/ElasticsearchConnector.ts +717 -0
  142. package/Server/Utils/DataSource/Connectors/LokiConnector.ts +606 -0
  143. package/Server/Utils/DataSource/Connectors/MySqlConnector.ts +307 -0
  144. package/Server/Utils/DataSource/Connectors/PostgresConnector.ts +260 -0
  145. package/Server/Utils/DataSource/Connectors/PrometheusConnector.ts +555 -0
  146. package/Server/Utils/DataSource/Connectors/RestApiConnector.ts +597 -0
  147. package/Server/Utils/DataSource/Connectors/SqlServerConnector.ts +318 -0
  148. package/Server/Utils/DataSource/EgressGuard.ts +446 -0
  149. package/Server/Utils/DataSource/HttpFetch.ts +221 -0
  150. package/Server/Utils/DataSource/SqlQueryGuard.ts +383 -0
  151. package/Server/Utils/DataSource/SqlResultShaper.ts +372 -0
  152. package/Server/Utils/DataSource/Types.ts +93 -0
  153. package/Server/Utils/Database/PostgresErrorTranslator.ts +172 -17
  154. package/Server/Utils/InProcessMemo.ts +141 -0
  155. package/Server/Utils/InstanceHealth/TelemetryIngestion.ts +628 -0
  156. package/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +29 -0
  157. package/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.ts +56 -0
  158. package/Server/Utils/Monitor/MonitorMetricUtil.ts +104 -0
  159. package/Server/Utils/Monitor/MonitorResource.ts +14 -0
  160. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -0
  161. package/Server/Utils/PasswordHash.ts +28 -4
  162. package/Server/Utils/Response.ts +12 -1
  163. package/Server/Utils/SSRFProtection.ts +237 -0
  164. package/Server/Utils/StartServer.ts +8 -0
  165. package/Server/Utils/StatusPageSubscriberWebhook.ts +30 -0
  166. package/Server/Utils/Telemetry/CaptureSpan.ts +30 -18
  167. package/Server/Utils/Telemetry/IngestionTimestamp.ts +75 -0
  168. package/Server/Utils/Telemetry/ResourceHeartbeat.ts +99 -7
  169. package/Server/Utils/Telemetry/Telemetry.ts +112 -1
  170. package/Server/Utils/Telemetry.ts +104 -3
  171. package/Server/Utils/VendorAssets.ts +165 -0
  172. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +28 -5
  173. package/Server/Utils/Workspace/Slack/Slack.ts +5 -0
  174. package/Server/Views/Partials/Head.ejs +21 -7
  175. package/Tests/App/AdminDashboard/AdminProjectsIdFilter.test.tsx +207 -0
  176. package/Tests/App/AdminDashboard/AdminUsersIdFilter.test.tsx +216 -0
  177. package/Tests/App/Dashboard/AIInsightViewActions.test.tsx +422 -0
  178. package/Tests/App/Dashboard/AIInvestigationHeaderStatus.test.tsx +251 -0
  179. package/Tests/App/Dashboard/AddWidgetModal.test.tsx +10 -3
  180. package/Tests/App/Dashboard/AlertsSideMenu.test.tsx +387 -0
  181. package/Tests/App/Dashboard/ChatActivityFeed.test.tsx +199 -0
  182. package/Tests/App/Dashboard/DataSourceChartSyntheticConfig.test.tsx +736 -0
  183. package/Tests/App/Dashboard/DataSourceQueryEditor.test.tsx +868 -0
  184. package/Tests/App/Dashboard/DataSourceWidgetCatalog.test.ts +440 -0
  185. package/Tests/App/Dashboard/DataSourceWidgetFetching.test.tsx +2109 -0
  186. package/Tests/App/Dashboard/DataSourceWidgetViews.test.tsx +726 -0
  187. package/Tests/App/Dashboard/EventStatusPanel.test.tsx +747 -0
  188. package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +447 -0
  189. package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +480 -0
  190. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1695 -0
  191. package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +500 -0
  192. package/Tests/App/Dashboard/PortMonitorCriteriaFilter.test.ts +93 -0
  193. package/Tests/App/Dashboard/ProductMenuBreadcrumbs.test.tsx +391 -0
  194. package/Tests/App/Dashboard/ScheduledMaintenanceSideMenu.test.tsx +326 -0
  195. package/Tests/App/Dashboard/SideMenuHarness.tsx +187 -0
  196. package/Tests/App/Dashboard/WidgetCatalog.test.ts +6 -1
  197. package/Tests/App/StatusPage/PublicStatusPageAPIErrorHandling.test.ts +117 -0
  198. package/Tests/App/StatusPage/StatusPageModelAPIPolymorphism.test.ts +223 -0
  199. package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +1858 -0
  200. package/Tests/Models/DatabaseModels/DataSourceModelSecrets.test.ts +70 -0
  201. package/Tests/Models/DatabaseModels/PermissionCatalogueCoverage.test.ts +243 -0
  202. package/Tests/Server/API/AIAgentDataFixFromIncidentContext.test.ts +266 -0
  203. package/Tests/Server/API/AIInvestigationAPI.test.ts +781 -0
  204. package/Tests/Server/API/AIInvestigationCreateFixTask.test.ts +80 -0
  205. package/Tests/Server/API/DashboardMasterPasswordAPI.test.ts +172 -1
  206. package/Tests/Server/API/DashboardPublicDataSourceStrip.test.ts +686 -0
  207. package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +585 -823
  208. package/Tests/Server/API/DataSourceAPIRoutes.test.ts +486 -0
  209. package/Tests/Server/API/StatusPageMasterPasswordAPI.test.ts +335 -0
  210. package/Tests/Server/API/StatusPageSubscriberOwnership.test.ts +291 -0
  211. package/Tests/Server/API/UserAuthenticationAPI.test.ts +641 -0
  212. package/Tests/Server/Infrastructure/ClickhouseKeepAliveOptions.test.ts +441 -0
  213. package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +140 -0
  214. package/Tests/Server/Services/AIInsightService.test.ts +266 -11
  215. package/Tests/Server/Services/AIRunAnalysisTldrPersistence.test.ts +160 -0
  216. package/Tests/Server/Services/AIRunCodeFixClaim.test.ts +59 -5
  217. package/Tests/Server/Services/AIRunHumanVerdict.test.ts +127 -58
  218. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +400 -20
  219. package/Tests/Server/Services/AddMasterPasswordSaltMigration.test.ts +283 -0
  220. package/Tests/Server/Services/AlertMetricResourceAttributes.test.ts +352 -0
  221. package/Tests/Server/Services/AnalyticsDatabaseService.test.ts +25 -1
  222. package/Tests/Server/Services/DataSourceServiceSettings.test.ts +244 -0
  223. package/Tests/Server/Services/DatabaseServicePerUserPasswordSalt.test.ts +45 -35
  224. package/Tests/Server/Services/DatabaseServiceUpdateColumnsWithoutHooks.test.ts +54 -0
  225. package/Tests/Server/Services/FeedAIRunAssociation.test.ts +125 -0
  226. package/Tests/Server/Services/FixFromIncidentTaskTrigger.test.ts +418 -57
  227. package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +397 -0
  228. package/Tests/Server/Services/HostServiceUpdateLastSeen.test.ts +41 -2
  229. package/Tests/Server/Services/IncidentMetricResourceAttributes.test.ts +408 -0
  230. package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +173 -14
  231. package/Tests/Server/Services/MasterPasswordScrypt.test.ts +567 -0
  232. package/Tests/Server/Services/MonitorStatusServiceDeleteReferenceCleanup.test.ts +351 -0
  233. package/Tests/Server/Services/MonitorStatusServiceValidation.test.ts +171 -0
  234. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +398 -0
  235. package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +19 -0
  236. package/Tests/Server/Services/ProjectCallSMSConfigCredentialUniqueness.test.ts +305 -0
  237. package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +36 -1
  238. package/Tests/Server/Services/RumSessionPinUniqueViolationRecovery.test.ts +163 -0
  239. package/Tests/Server/Services/SeparateIncidentAlertAiSettingsMigration.test.ts +194 -0
  240. package/Tests/Server/Services/UserAuthenticationService.test.ts +973 -0
  241. package/Tests/Server/Types/Database/ObjectIdColumnQuery.test.ts +262 -0
  242. package/Tests/Server/Types/Database/Permissions/TenantPermission.test.ts +358 -0
  243. package/Tests/Server/Utils/AI/AIAlertGating.test.ts +37 -4
  244. package/Tests/Server/Utils/AI/AIConfidenceSignal.test.ts +330 -29
  245. package/Tests/Server/Utils/AI/AIIncidentGating.test.ts +25 -0
  246. package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +293 -5
  247. package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +59 -1
  248. package/Tests/Server/Utils/AI/FixFromIncidentAutoTrigger.test.ts +342 -19
  249. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +214 -30
  250. package/Tests/Server/Utils/AI/Insights/ExceptionSpikeDetector.test.ts +6 -1
  251. package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +121 -4
  252. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +2 -0
  253. package/Tests/Server/Utils/AI/Insights/NewExceptionDetector.test.ts +361 -10
  254. package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +65 -17
  255. package/Tests/Server/Utils/AI/InvestigationQueueRemediationExecution.test.ts +3 -0
  256. package/Tests/Server/Utils/AI/InvestigationSettlement.test.ts +605 -20
  257. package/Tests/Server/Utils/AI/InvestigationTldr.test.ts +623 -0
  258. package/Tests/Server/Utils/AI/InvestigationTldrWiring.test.ts +98 -0
  259. package/Tests/Server/Utils/AI/PostedRootCause.test.ts +254 -0
  260. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +4 -0
  261. package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +2 -0
  262. package/Tests/Server/Utils/AI/SubjectCodeFixRunDedupe.test.ts +44 -0
  263. package/Tests/Server/Utils/AnalyticsDatabase/ClusterAwareSchema.test.ts +30 -0
  264. package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +857 -0
  265. package/Tests/Server/Utils/Dashboard/PublicDashboardViewConfig.test.ts +480 -0
  266. package/Tests/Server/Utils/DataSource/ClickHouseConnector.test.ts +759 -0
  267. package/Tests/Server/Utils/DataSource/ConnectorRegistry.test.ts +37 -0
  268. package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +645 -0
  269. package/Tests/Server/Utils/DataSource/ElasticsearchConnector.test.ts +1206 -0
  270. package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +616 -0
  271. package/Tests/Server/Utils/DataSource/LokiConnector.test.ts +970 -0
  272. package/Tests/Server/Utils/DataSource/MySqlConnector.test.ts +935 -0
  273. package/Tests/Server/Utils/DataSource/PostgresConnector.test.ts +854 -0
  274. package/Tests/Server/Utils/DataSource/PrometheusConnector.test.ts +881 -0
  275. package/Tests/Server/Utils/DataSource/RestApiConnector.test.ts +1020 -0
  276. package/Tests/Server/Utils/DataSource/SqlQueryGuard.test.ts +425 -0
  277. package/Tests/Server/Utils/DataSource/SqlResultShaper.test.ts +555 -0
  278. package/Tests/Server/Utils/DataSource/SqlServerConnector.test.ts +934 -0
  279. package/Tests/Server/Utils/Database/PostgresErrorTranslator.test.ts +228 -7
  280. package/Tests/Server/Utils/InProcessMemo.test.ts +292 -0
  281. package/Tests/Server/Utils/InstanceHealth/TelemetryIngestion.test.ts +960 -0
  282. package/Tests/Server/Utils/MicrosoftTeamsWebhookUrlValidation.test.ts +103 -0
  283. package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaPortTimings.test.ts +212 -0
  284. package/Tests/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.test.ts +401 -0
  285. package/Tests/Server/Utils/Monitor/MonitorMetricResourceAttributes.test.ts +336 -0
  286. package/Tests/Server/Utils/Monitor/MonitorMetricUtilPortTimings.test.ts +243 -0
  287. package/Tests/Server/Utils/OfflineAssetHygiene.test.ts +521 -0
  288. package/Tests/Server/Utils/PasswordHash.test.ts +30 -0
  289. package/Tests/Server/Utils/ResponseRenderAnalytics.test.ts +143 -0
  290. package/Tests/Server/Utils/SSRFProtection.test.ts +193 -0
  291. package/Tests/Server/Utils/StatusPageSubscriberWebhook.test.ts +101 -0
  292. package/Tests/Server/Utils/TailwindBuildCopy.test.ts +225 -0
  293. package/Tests/Server/Utils/Telemetry/ResourceHeartbeatL1Memo.test.ts +355 -0
  294. package/Tests/Server/Utils/Telemetry/TelemetryFanInWriter.test.ts +128 -0
  295. package/Tests/Server/Utils/Telemetry/TelemetryUtilAttributeKeys.test.ts +381 -0
  296. package/Tests/Server/Utils/Telemetry.test.ts +87 -0
  297. package/Tests/Server/Utils/VendorAssetIntegrity.test.ts +343 -0
  298. package/Tests/Server/Utils/VendorAssets.test.ts +671 -0
  299. package/Tests/Server/Views/OfflineRender.test.ts +297 -0
  300. package/Tests/Types/Dashboard/DashboardTemplates.test.ts +111 -0
  301. package/Tests/Types/Dashboard/DataSourceComponentTypes.test.ts +618 -0
  302. package/Tests/Types/DateClickhouseFormat.test.ts +192 -0
  303. package/Tests/Types/Monitor/CephMetricCatalog.test.ts +104 -0
  304. package/Tests/Types/Monitor/CriteriaFilter.test.ts +4 -0
  305. package/Tests/Types/Monitor/DockerMetricCatalog.test.ts +109 -0
  306. package/Tests/Types/Monitor/DockerSwarmMetricCatalog.test.ts +118 -0
  307. package/Tests/Types/Monitor/HostMetricCatalog.test.ts +104 -0
  308. package/Tests/Types/Monitor/IotMetricCatalog.test.ts +104 -0
  309. package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +118 -0
  310. package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +42 -0
  311. package/Tests/Types/Monitor/MonitorStep.test.ts +38 -0
  312. package/Tests/Types/Monitor/MonitorStepDomainMonitor.test.ts +75 -0
  313. package/Tests/Types/Monitor/PodmanMetricCatalog.test.ts +109 -0
  314. package/Tests/Types/Monitor/ProxmoxMetricCatalog.test.ts +107 -0
  315. package/Tests/Types/Monitor/SnmpMonitor/SnmpVendorTemplate.test.ts +151 -0
  316. package/Tests/Types/Password.test.ts +363 -0
  317. package/Tests/Types/Permission.test.ts +137 -0
  318. package/Tests/Types/Rum/SessionReplayMaskingMode.test.ts +101 -0
  319. package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +5 -5
  320. package/Tests/UI/Components/CardModelDetailEdit.test.tsx +3 -5
  321. package/Tests/UI/Components/ConfirmModal.test.tsx +7 -0
  322. package/Tests/UI/Components/ErrorBoundary.test.tsx +211 -0
  323. package/Tests/UI/Components/FeedItemSafeMode.test.tsx +74 -0
  324. package/Tests/UI/Components/Modal.test.tsx +281 -1
  325. package/Tests/UI/Components/MoreMenu.test.tsx +756 -0
  326. package/Tests/UI/Components/ObjectIdFilterPipeline.test.tsx +396 -0
  327. package/Tests/UI/Components/StatusPage/ResourceGroupNavigator.test.tsx +1147 -0
  328. package/Tests/UI/Components/StatusPage/ResourceGroupSection.test.tsx +62 -0
  329. package/Tests/UI/Monitor/PortMonitorView.test.tsx +237 -0
  330. package/Tests/UI/Telemetry/TelemetrySnapshotWindowAlert.test.tsx +91 -0
  331. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +116 -1
  332. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
  333. package/Tests/UI/Utils/DownloadFile.test.ts +103 -0
  334. package/Tests/UI/Utils/ErrorSupportBundle.test.ts +582 -0
  335. package/Tests/UI/Utils/Project.test.ts +31 -0
  336. package/Tests/UI/Utils/StatusPageModelAPIInjection.test.ts +245 -0
  337. package/Tests/UI/Utils/UseDashboardGridDnd.test.tsx +820 -0
  338. package/Tests/Utils/Analytics.test.ts +23 -0
  339. package/Tests/Utils/Dashboard/Components/DashboardDataSourceComponents.test.ts +640 -0
  340. package/Tests/Utils/Dashboard/DashboardViewConfig.test.ts +329 -0
  341. package/Tests/Utils/Dashboard/GridLayout.test.ts +951 -0
  342. package/Tests/Utils/DataSource/DataSourceQueryText.test.ts +138 -0
  343. package/Tests/Utils/DataSource/DataSourceValueReducer.test.ts +526 -0
  344. package/Tests/Utils/Metrics/MetricResourceAttributeUtil.test.ts +691 -0
  345. package/Tests/Utils/Monitor/MonitorMetricType.test.ts +117 -0
  346. package/Tests/Utils/RecordingRuleExpression.test.ts +327 -0
  347. package/Tests/Utils/StatusPage/GroupHierarchyView.test.ts +1452 -0
  348. package/Tests/Utils/StatusPage/GroupNestingLayout.test.ts +186 -0
  349. package/Tests/Utils/StatusPage/GroupTree.test.ts +456 -0
  350. package/Tests/Utils/StatusPage/OverviewGroupHierarchyVisibility.test.ts +588 -0
  351. package/Tests/Utils/StatusPage/ResourceExplorer.test.ts +931 -0
  352. package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +288 -0
  353. package/Tests/Utils/Telemetry/IngestionTimestamp.test.ts +170 -0
  354. package/Tests/Utils/Telemetry/SavedViewTimeRange.test.ts +244 -0
  355. package/Tests/Utils/Telemetry/TelemetryQueryTimeRange.test.ts +825 -0
  356. package/Types/AI/AIInsightEvidence.ts +6 -0
  357. package/Types/AI/AIRunCodeFixRecommendation.ts +17 -0
  358. package/Types/AI/CodeFixTaskContext.ts +63 -3
  359. package/Types/AI/CodeFixTaskType.ts +3 -3
  360. package/Types/Analytics/RevenueEvent.ts +31 -0
  361. package/Types/Dashboard/DashboardComponentType.ts +31 -0
  362. package/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.ts +27 -0
  363. package/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.ts +32 -0
  364. package/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.ts +30 -0
  365. package/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.ts +55 -0
  366. package/Types/DataSource/DataSourceLimits.ts +62 -0
  367. package/Types/DataSource/DataSourceQueryConfig.ts +41 -0
  368. package/Types/DataSource/DataSourceTableResult.ts +38 -0
  369. package/Types/DataSource/DataSourceType.ts +213 -0
  370. package/Types/Date.ts +43 -3
  371. package/Types/HashedString.ts +4 -3
  372. package/Types/Monitor/CriteriaFilter.ts +4 -0
  373. package/Types/Monitor/DomainMonitor/DomainLookupMethod.ts +23 -0
  374. package/Types/Monitor/DomainMonitor/DomainMonitorResponse.ts +7 -0
  375. package/Types/Monitor/MonitorCriteriaInstance.ts +24 -7
  376. package/Types/Monitor/MonitorMetricType.ts +8 -0
  377. package/Types/Monitor/MonitorStep.ts +10 -1
  378. package/Types/Monitor/MonitorStepDomainMonitor.ts +21 -0
  379. package/Types/Monitor/PortMonitor/PortMonitorTimings.ts +10 -0
  380. package/Types/Password.ts +64 -0
  381. package/Types/Permission.ts +69 -175
  382. package/Types/Probe/ProbeMonitorResponse.ts +6 -0
  383. package/Types/UserAuthenticationStatus.ts +34 -0
  384. package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +2 -3
  385. package/UI/Components/Button/Button.tsx +1 -1
  386. package/UI/Components/ErrorBoundary.tsx +549 -71
  387. package/UI/Components/Feed/FeedItem.tsx +9 -2
  388. package/UI/Components/Icon/Icon.tsx +10 -9
  389. package/UI/Components/Modal/ConfirmModal.tsx +6 -1
  390. package/UI/Components/Modal/Modal.tsx +267 -35
  391. package/UI/Components/Modal/ModalFooter.tsx +6 -1
  392. package/UI/Components/ModelDetail/CardModelDetail.tsx +0 -12
  393. package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
  394. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +12 -2
  395. package/UI/Components/MoreMenu/MoreMenu.tsx +301 -98
  396. package/UI/Components/MoreMenu/MoreMenuItem.tsx +13 -5
  397. package/UI/Components/StatusPage/ResourceGrid.tsx +314 -0
  398. package/UI/Components/StatusPage/ResourceGroupNavigator.tsx +808 -0
  399. package/UI/Components/StatusPage/ResourceList.tsx +570 -0
  400. package/UI/Styles/Theme.css +18 -0
  401. package/UI/Utils/API/RequestOptions.ts +7 -0
  402. package/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.ts +1 -0
  403. package/UI/Utils/DownloadFile.ts +16 -8
  404. package/UI/Utils/ErrorSupportBundle.ts +805 -0
  405. package/UI/Utils/ModelAPI/ModelAPI.ts +20 -8
  406. package/UI/Utils/Project.ts +4 -0
  407. package/UI/Utils/StatusPage.ts +8 -2
  408. package/UI/Utils/TestDataSource.ts +61 -0
  409. package/UI/Utils/UseDashboardGridDnd.ts +917 -0
  410. package/UI/esbuild-config.js +45 -0
  411. package/Utils/Analytics.ts +15 -0
  412. package/Utils/Dashboard/Components/DashboardDataSourceChartComponent.ts +88 -0
  413. package/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.ts +123 -0
  414. package/Utils/Dashboard/Components/DashboardDataSourceShared.ts +16 -0
  415. package/Utils/Dashboard/Components/DashboardDataSourceTableComponent.ts +72 -0
  416. package/Utils/Dashboard/Components/DashboardDataSourceValueComponent.ts +126 -0
  417. package/Utils/Dashboard/Components/Index.ts +28 -0
  418. package/Utils/Dashboard/DashboardViewConfig.ts +80 -36
  419. package/Utils/Dashboard/GridLayout.ts +523 -0
  420. package/Utils/DataSource/DataSourceQueryText.ts +94 -0
  421. package/Utils/DataSource/DataSourceValueReducer.ts +156 -0
  422. package/Utils/Metrics/MetricResourceAttributeUtil.ts +380 -0
  423. package/Utils/Metrics/RecordingRuleExpression.ts +19 -17
  424. package/Utils/Monitor/MonitorMetricType.ts +44 -2
  425. package/Utils/NetworkDiscovery/ScanTargetUtil.ts +8 -6
  426. package/Utils/StatusPage/GroupHierarchyView.ts +931 -0
  427. package/Utils/StatusPage/GroupNestingLayout.ts +69 -0
  428. package/Utils/StatusPage/GroupTree.ts +157 -66
  429. package/Utils/StatusPage/ResourceExplorer.ts +853 -0
  430. package/Utils/StatusPage/ResourceUptime.ts +37 -2
  431. package/Utils/Telemetry/SavedViewTimeRange.ts +114 -0
  432. package/Utils/Telemetry/TelemetryQueryTimeRange.ts +334 -0
  433. package/build/dist/Models/DatabaseModels/AIRun.js +73 -1
  434. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  435. package/build/dist/Models/DatabaseModels/AlertFeed.js +32 -0
  436. package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
  437. package/build/dist/Models/DatabaseModels/Dashboard.js +29 -0
  438. package/build/dist/Models/DatabaseModels/Dashboard.js.map +1 -1
  439. package/build/dist/Models/DatabaseModels/DataSource.js +774 -0
  440. package/build/dist/Models/DatabaseModels/DataSource.js.map +1 -0
  441. package/build/dist/Models/DatabaseModels/Incident.js +2 -0
  442. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  443. package/build/dist/Models/DatabaseModels/IncidentEpisode.js +1 -0
  444. package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
  445. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +1 -0
  446. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
  447. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +1 -0
  448. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
  449. package/build/dist/Models/DatabaseModels/IncidentFeed.js +32 -0
  450. package/build/dist/Models/DatabaseModels/IncidentFeed.js.map +1 -1
  451. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +1 -0
  452. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
  453. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +1 -0
  454. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
  455. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  456. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  457. package/build/dist/Models/DatabaseModels/LogSavedView.js +33 -0
  458. package/build/dist/Models/DatabaseModels/LogSavedView.js.map +1 -1
  459. package/build/dist/Models/DatabaseModels/Project.js +241 -11
  460. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  461. package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js +14 -4
  462. package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js.map +1 -1
  463. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +1 -0
  464. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  465. package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +1 -0
  466. package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
  467. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +1 -0
  468. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
  469. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.js +4 -4
  470. package/build/dist/Models/DatabaseModels/StatusPage.js +29 -0
  471. package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
  472. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +1 -0
  473. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
  474. package/build/dist/Models/DatabaseModels/User.js +2 -0
  475. package/build/dist/Models/DatabaseModels/User.js.map +1 -1
  476. package/build/dist/Models/DatabaseModels/UserOnCallLog.js +2 -0
  477. package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
  478. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +2 -0
  479. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
  480. package/build/dist/Models/DatabaseModels/UserSession.js +2 -0
  481. package/build/dist/Models/DatabaseModels/UserSession.js.map +1 -1
  482. package/build/dist/Models/DatabaseModels/UserTotpAuth.js +6 -4
  483. package/build/dist/Models/DatabaseModels/UserTotpAuth.js.map +1 -1
  484. package/build/dist/Models/DatabaseModels/UserWebAuthn.js +5 -3
  485. package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
  486. package/build/dist/Server/API/AIAgentDataAPI.js +28 -46
  487. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  488. package/build/dist/Server/API/AIInsightAPI.js +34 -4
  489. package/build/dist/Server/API/AIInsightAPI.js.map +1 -1
  490. package/build/dist/Server/API/AIInvestigationAPI.js +134 -11
  491. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  492. package/build/dist/Server/API/DashboardAPI.js +127 -438
  493. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  494. package/build/dist/Server/API/DataSourceAPI.js +173 -0
  495. package/build/dist/Server/API/DataSourceAPI.js.map +1 -0
  496. package/build/dist/Server/API/StatusPageAPI.js +40 -12
  497. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  498. package/build/dist/Server/API/UserAPI.js +94 -2
  499. package/build/dist/Server/API/UserAPI.js.map +1 -1
  500. package/build/dist/Server/EnvironmentConfig.js +14 -0
  501. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  502. package/build/dist/Server/Infrastructure/ClickhouseConfig.js +61 -1
  503. package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
  504. package/build/dist/Server/Infrastructure/ClickhouseDatabase.js +1 -1
  505. package/build/dist/Server/Infrastructure/ClickhouseDatabase.js.map +1 -1
  506. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.js +22 -0
  507. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786096660558-AddTimeRangeToLogSavedView.js.map +1 -0
  508. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.js +36 -0
  509. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786101798351-MigrationName.js.map +1 -0
  510. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.js +18 -0
  511. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786105470826-MigrationName.js.map +1 -0
  512. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.js +20 -0
  513. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.js.map +1 -0
  514. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.js +19 -0
  515. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786400000000-AddMasterPasswordSalt.js.map +1 -0
  516. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.js +19 -0
  517. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786500000000-AddInvestigationCodeFixRecommendation.js.map +1 -0
  518. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.js +19 -0
  519. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.js.map +1 -0
  520. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.js +64 -0
  521. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.js.map +1 -0
  522. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +16 -0
  523. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  524. package/build/dist/Server/Infrastructure/Queue.js +27 -0
  525. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  526. package/build/dist/Server/Infrastructure/QueueWorker.js +13 -0
  527. package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
  528. package/build/dist/Server/Middleware/TelemetryIngest.js +8 -3
  529. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  530. package/build/dist/Server/Services/AIInsightService.js +110 -10
  531. package/build/dist/Server/Services/AIInsightService.js.map +1 -1
  532. package/build/dist/Server/Services/AIRunService.js +92 -12
  533. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  534. package/build/dist/Server/Services/AIService.js +88 -21
  535. package/build/dist/Server/Services/AIService.js.map +1 -1
  536. package/build/dist/Server/Services/AlertFeedService.js +3 -0
  537. package/build/dist/Server/Services/AlertFeedService.js.map +1 -1
  538. package/build/dist/Server/Services/AlertService.js +28 -35
  539. package/build/dist/Server/Services/AlertService.js.map +1 -1
  540. package/build/dist/Server/Services/AnalyticsDatabaseService.js +37 -5
  541. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  542. package/build/dist/Server/Services/DataSourceService.js +159 -0
  543. package/build/dist/Server/Services/DataSourceService.js.map +1 -0
  544. package/build/dist/Server/Services/DatabaseService.js +21 -2
  545. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  546. package/build/dist/Server/Services/HostService.js +74 -0
  547. package/build/dist/Server/Services/HostService.js.map +1 -1
  548. package/build/dist/Server/Services/IncidentFeedService.js +3 -0
  549. package/build/dist/Server/Services/IncidentFeedService.js.map +1 -1
  550. package/build/dist/Server/Services/IncidentService.js +35 -24
  551. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  552. package/build/dist/Server/Services/Index.js +2 -0
  553. package/build/dist/Server/Services/Index.js.map +1 -1
  554. package/build/dist/Server/Services/LlmLogService.js +22 -1
  555. package/build/dist/Server/Services/LlmLogService.js.map +1 -1
  556. package/build/dist/Server/Services/MonitorService.js +45 -0
  557. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  558. package/build/dist/Server/Services/MonitorStatusService.js +129 -0
  559. package/build/dist/Server/Services/MonitorStatusService.js.map +1 -1
  560. package/build/dist/Server/Services/OpenTelemetryIngestService.js +222 -159
  561. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  562. package/build/dist/Server/Services/RumSessionPinService.js +7 -15
  563. package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
  564. package/build/dist/Server/Services/StatusPageSubscriberService.js +10 -0
  565. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  566. package/build/dist/Server/Services/UserService.js +241 -10
  567. package/build/dist/Server/Services/UserService.js.map +1 -1
  568. package/build/dist/Server/Types/Database/Permissions/BasePermission.js +6 -0
  569. package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
  570. package/build/dist/Server/Types/Database/Permissions/DeletePermission.js +1 -0
  571. package/build/dist/Server/Types/Database/Permissions/DeletePermission.js.map +1 -1
  572. package/build/dist/Server/Types/Database/Permissions/ReadPermission.js +2 -0
  573. package/build/dist/Server/Types/Database/Permissions/ReadPermission.js.map +1 -1
  574. package/build/dist/Server/Types/Database/Permissions/TenantPermission.js +68 -12
  575. package/build/dist/Server/Types/Database/Permissions/TenantPermission.js.map +1 -1
  576. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +3 -0
  577. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  578. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +4 -0
  579. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -1
  580. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +8 -5
  581. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
  582. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +63 -24
  583. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
  584. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +2 -0
  585. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  586. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +2 -0
  587. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
  588. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +222 -34
  589. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  590. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +22 -19
  591. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  592. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js +128 -49
  593. package/build/dist/Server/Utils/AI/SRE/ConfidenceSignal.js.map +1 -1
  594. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +170 -31
  595. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -1
  596. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +22 -19
  597. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  598. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.js +97 -0
  599. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.js.map +1 -0
  600. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +17 -15
  601. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
  602. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +178 -54
  603. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
  604. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js +65 -16
  605. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js.map +1 -1
  606. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +33 -9
  607. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -1
  608. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +9 -5
  609. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
  610. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +121 -41
  611. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
  612. package/build/dist/Server/Utils/AI/SRE/InvestigationSubjectLock.js +46 -0
  613. package/build/dist/Server/Utils/AI/SRE/InvestigationSubjectLock.js.map +1 -0
  614. package/build/dist/Server/Utils/AI/SRE/InvestigationTldr.js +303 -0
  615. package/build/dist/Server/Utils/AI/SRE/InvestigationTldr.js.map +1 -0
  616. package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js +61 -14
  617. package/build/dist/Server/Utils/AI/SRE/PostedRootCause.js.map +1 -1
  618. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js +79 -1
  619. package/build/dist/Server/Utils/AI/SRE/SubjectCodeFixRun.js.map +1 -1
  620. package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js +21 -0
  621. package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js.map +1 -1
  622. package/build/dist/Server/Utils/AnalyticsDatabase/InsertDedupContext.js.map +1 -1
  623. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +1261 -0
  624. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -0
  625. package/build/dist/Server/Utils/Dashboard/PublicDashboardViewConfig.js +47 -0
  626. package/build/dist/Server/Utils/Dashboard/PublicDashboardViewConfig.js.map +1 -0
  627. package/build/dist/Server/Utils/DataSource/ConnectorRegistry.js +42 -0
  628. package/build/dist/Server/Utils/DataSource/ConnectorRegistry.js.map +1 -0
  629. package/build/dist/Server/Utils/DataSource/Connectors/ClickHouseConnector.js +187 -0
  630. package/build/dist/Server/Utils/DataSource/Connectors/ClickHouseConnector.js.map +1 -0
  631. package/build/dist/Server/Utils/DataSource/Connectors/ElasticsearchConnector.js +493 -0
  632. package/build/dist/Server/Utils/DataSource/Connectors/ElasticsearchConnector.js.map +1 -0
  633. package/build/dist/Server/Utils/DataSource/Connectors/LokiConnector.js +399 -0
  634. package/build/dist/Server/Utils/DataSource/Connectors/LokiConnector.js.map +1 -0
  635. package/build/dist/Server/Utils/DataSource/Connectors/MySqlConnector.js +195 -0
  636. package/build/dist/Server/Utils/DataSource/Connectors/MySqlConnector.js.map +1 -0
  637. package/build/dist/Server/Utils/DataSource/Connectors/PostgresConnector.js +149 -0
  638. package/build/dist/Server/Utils/DataSource/Connectors/PostgresConnector.js.map +1 -0
  639. package/build/dist/Server/Utils/DataSource/Connectors/PrometheusConnector.js +362 -0
  640. package/build/dist/Server/Utils/DataSource/Connectors/PrometheusConnector.js.map +1 -0
  641. package/build/dist/Server/Utils/DataSource/Connectors/RestApiConnector.js +342 -0
  642. package/build/dist/Server/Utils/DataSource/Connectors/RestApiConnector.js.map +1 -0
  643. package/build/dist/Server/Utils/DataSource/Connectors/SqlServerConnector.js +186 -0
  644. package/build/dist/Server/Utils/DataSource/Connectors/SqlServerConnector.js.map +1 -0
  645. package/build/dist/Server/Utils/DataSource/EgressGuard.js +305 -0
  646. package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -0
  647. package/build/dist/Server/Utils/DataSource/HttpFetch.js +134 -0
  648. package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -0
  649. package/build/dist/Server/Utils/DataSource/SqlQueryGuard.js +331 -0
  650. package/build/dist/Server/Utils/DataSource/SqlQueryGuard.js.map +1 -0
  651. package/build/dist/Server/Utils/DataSource/SqlResultShaper.js +280 -0
  652. package/build/dist/Server/Utils/DataSource/SqlResultShaper.js.map +1 -0
  653. package/build/dist/Server/Utils/DataSource/Types.js +2 -0
  654. package/build/dist/Server/Utils/DataSource/Types.js.map +1 -0
  655. package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js +103 -9
  656. package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js.map +1 -1
  657. package/build/dist/Server/Utils/InProcessMemo.js +113 -0
  658. package/build/dist/Server/Utils/InProcessMemo.js.map +1 -0
  659. package/build/dist/Server/Utils/InstanceHealth/TelemetryIngestion.js +406 -0
  660. package/build/dist/Server/Utils/InstanceHealth/TelemetryIngestion.js.map +1 -0
  661. package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +20 -3
  662. package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
  663. package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js +43 -0
  664. package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js.map +1 -1
  665. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +67 -0
  666. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  667. package/build/dist/Server/Utils/Monitor/MonitorResource.js +14 -0
  668. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  669. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +1 -0
  670. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  671. package/build/dist/Server/Utils/PasswordHash.js +25 -4
  672. package/build/dist/Server/Utils/PasswordHash.js.map +1 -1
  673. package/build/dist/Server/Utils/Response.js +9 -1
  674. package/build/dist/Server/Utils/Response.js.map +1 -1
  675. package/build/dist/Server/Utils/SSRFProtection.js +192 -0
  676. package/build/dist/Server/Utils/SSRFProtection.js.map +1 -0
  677. package/build/dist/Server/Utils/StartServer.js +7 -0
  678. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  679. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js +24 -0
  680. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js.map +1 -1
  681. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +25 -11
  682. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
  683. package/build/dist/Server/Utils/Telemetry/IngestionTimestamp.js +32 -0
  684. package/build/dist/Server/Utils/Telemetry/IngestionTimestamp.js.map +1 -0
  685. package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js +92 -5
  686. package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -1
  687. package/build/dist/Server/Utils/Telemetry/Telemetry.js +92 -6
  688. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  689. package/build/dist/Server/Utils/Telemetry.js +93 -6
  690. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  691. package/build/dist/Server/Utils/VendorAssets.js +121 -0
  692. package/build/dist/Server/Utils/VendorAssets.js.map +1 -0
  693. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +25 -4
  694. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  695. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +5 -0
  696. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  697. package/build/dist/Types/AI/AIRunCodeFixRecommendation.js +18 -0
  698. package/build/dist/Types/AI/AIRunCodeFixRecommendation.js.map +1 -0
  699. package/build/dist/Types/AI/CodeFixTaskContext.js +23 -3
  700. package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -1
  701. package/build/dist/Types/AI/CodeFixTaskType.js +3 -3
  702. package/build/dist/Types/Analytics/RevenueEvent.js +26 -0
  703. package/build/dist/Types/Analytics/RevenueEvent.js.map +1 -0
  704. package/build/dist/Types/Dashboard/DashboardComponentType.js +27 -0
  705. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  706. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.js +2 -0
  707. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.js.map +1 -0
  708. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.js +2 -0
  709. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.js.map +1 -0
  710. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.js +2 -0
  711. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.js.map +1 -0
  712. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.js +16 -0
  713. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.js.map +1 -0
  714. package/build/dist/Types/DataSource/DataSourceLimits.js +47 -0
  715. package/build/dist/Types/DataSource/DataSourceLimits.js.map +1 -0
  716. package/build/dist/Types/DataSource/DataSourceQueryConfig.js +10 -0
  717. package/build/dist/Types/DataSource/DataSourceQueryConfig.js.map +1 -0
  718. package/build/dist/Types/DataSource/DataSourceTableResult.js +14 -0
  719. package/build/dist/Types/DataSource/DataSourceTableResult.js.map +1 -0
  720. package/build/dist/Types/DataSource/DataSourceType.js +183 -0
  721. package/build/dist/Types/DataSource/DataSourceType.js.map +1 -0
  722. package/build/dist/Types/Date.js +38 -3
  723. package/build/dist/Types/Date.js.map +1 -1
  724. package/build/dist/Types/HashedString.js +4 -3
  725. package/build/dist/Types/HashedString.js.map +1 -1
  726. package/build/dist/Types/Monitor/CriteriaFilter.js +4 -0
  727. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  728. package/build/dist/Types/Monitor/DomainMonitor/DomainLookupMethod.js +24 -0
  729. package/build/dist/Types/Monitor/DomainMonitor/DomainLookupMethod.js.map +1 -0
  730. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +24 -7
  731. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  732. package/build/dist/Types/Monitor/MonitorMetricType.js +7 -0
  733. package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
  734. package/build/dist/Types/Monitor/MonitorStep.js +6 -1
  735. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  736. package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js +15 -0
  737. package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js.map +1 -1
  738. package/build/dist/Types/Monitor/PortMonitor/PortMonitorTimings.js +2 -0
  739. package/build/dist/Types/Monitor/PortMonitor/PortMonitorTimings.js.map +1 -0
  740. package/build/dist/Types/Password.js +56 -0
  741. package/build/dist/Types/Password.js.map +1 -0
  742. package/build/dist/Types/Permission.js +65 -155
  743. package/build/dist/Types/Permission.js.map +1 -1
  744. package/build/dist/Types/UserAuthenticationStatus.js +2 -0
  745. package/build/dist/Types/UserAuthenticationStatus.js.map +1 -0
  746. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +2 -5
  747. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
  748. package/build/dist/UI/Components/ErrorBoundary.js +427 -52
  749. package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
  750. package/build/dist/UI/Components/Feed/FeedItem.js +2 -2
  751. package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
  752. package/build/dist/UI/Components/Icon/Icon.js +10 -4
  753. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  754. package/build/dist/UI/Components/Modal/ConfirmModal.js +1 -1
  755. package/build/dist/UI/Components/Modal/ConfirmModal.js.map +1 -1
  756. package/build/dist/UI/Components/Modal/Modal.js +178 -19
  757. package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
  758. package/build/dist/UI/Components/Modal/ModalFooter.js +3 -1
  759. package/build/dist/UI/Components/Modal/ModalFooter.js.map +1 -1
  760. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +0 -12
  761. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
  762. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
  763. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  764. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +12 -2
  765. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  766. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +197 -66
  767. package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
  768. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +7 -1
  769. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
  770. package/build/dist/UI/Components/StatusPage/ResourceGrid.js +119 -0
  771. package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -0
  772. package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js +354 -0
  773. package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js.map +1 -0
  774. package/build/dist/UI/Components/StatusPage/ResourceList.js +203 -0
  775. package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -0
  776. package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js +1 -6
  777. package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js.map +1 -1
  778. package/build/dist/UI/Utils/DownloadFile.js +15 -8
  779. package/build/dist/UI/Utils/DownloadFile.js.map +1 -1
  780. package/build/dist/UI/Utils/ErrorSupportBundle.js +476 -0
  781. package/build/dist/UI/Utils/ErrorSupportBundle.js.map +1 -0
  782. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +20 -15
  783. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
  784. package/build/dist/UI/Utils/Project.js +3 -0
  785. package/build/dist/UI/Utils/Project.js.map +1 -1
  786. package/build/dist/UI/Utils/StatusPage.js +4 -4
  787. package/build/dist/UI/Utils/StatusPage.js.map +1 -1
  788. package/build/dist/UI/Utils/TestDataSource.js +39 -0
  789. package/build/dist/UI/Utils/TestDataSource.js.map +1 -0
  790. package/build/dist/UI/Utils/UseDashboardGridDnd.js +551 -0
  791. package/build/dist/UI/Utils/UseDashboardGridDnd.js.map +1 -0
  792. package/build/dist/Utils/Analytics.js +4 -0
  793. package/build/dist/Utils/Analytics.js.map +1 -1
  794. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceChartComponent.js +79 -0
  795. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceChartComponent.js.map +1 -0
  796. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.js +111 -0
  797. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.js.map +1 -0
  798. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceShared.js +15 -0
  799. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceShared.js.map +1 -0
  800. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceTableComponent.js +62 -0
  801. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceTableComponent.js.map +1 -0
  802. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceValueComponent.js +112 -0
  803. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceValueComponent.js.map +1 -0
  804. package/build/dist/Utils/Dashboard/Components/Index.js +16 -0
  805. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  806. package/build/dist/Utils/Dashboard/DashboardViewConfig.js +42 -26
  807. package/build/dist/Utils/Dashboard/DashboardViewConfig.js.map +1 -1
  808. package/build/dist/Utils/Dashboard/GridLayout.js +338 -0
  809. package/build/dist/Utils/Dashboard/GridLayout.js.map +1 -0
  810. package/build/dist/Utils/DataSource/DataSourceQueryText.js +64 -0
  811. package/build/dist/Utils/DataSource/DataSourceQueryText.js.map +1 -0
  812. package/build/dist/Utils/DataSource/DataSourceValueReducer.js +124 -0
  813. package/build/dist/Utils/DataSource/DataSourceValueReducer.js.map +1 -0
  814. package/build/dist/Utils/Metrics/MetricResourceAttributeUtil.js +281 -0
  815. package/build/dist/Utils/Metrics/MetricResourceAttributeUtil.js.map +1 -0
  816. package/build/dist/Utils/Metrics/RecordingRuleExpression.js +19 -17
  817. package/build/dist/Utils/Metrics/RecordingRuleExpression.js.map +1 -1
  818. package/build/dist/Utils/Monitor/MonitorMetricType.js +38 -6
  819. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  820. package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js +8 -6
  821. package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js.map +1 -1
  822. package/build/dist/Utils/StatusPage/GroupHierarchyView.js +560 -0
  823. package/build/dist/Utils/StatusPage/GroupHierarchyView.js.map +1 -0
  824. package/build/dist/Utils/StatusPage/GroupNestingLayout.js +46 -0
  825. package/build/dist/Utils/StatusPage/GroupNestingLayout.js.map +1 -1
  826. package/build/dist/Utils/StatusPage/GroupTree.js +79 -34
  827. package/build/dist/Utils/StatusPage/GroupTree.js.map +1 -1
  828. package/build/dist/Utils/StatusPage/ResourceExplorer.js +519 -0
  829. package/build/dist/Utils/StatusPage/ResourceExplorer.js.map +1 -0
  830. package/build/dist/Utils/StatusPage/ResourceUptime.js +22 -1
  831. package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
  832. package/build/dist/Utils/Telemetry/SavedViewTimeRange.js +79 -0
  833. package/build/dist/Utils/Telemetry/SavedViewTimeRange.js.map +1 -0
  834. package/build/dist/Utils/Telemetry/TelemetryQueryTimeRange.js +236 -0
  835. package/build/dist/Utils/Telemetry/TelemetryQueryTimeRange.js.map +1 -0
  836. package/jest.config.json +1 -0
  837. package/package.json +5 -1
  838. package/tsconfig.json +12 -10
@@ -7,12 +7,11 @@ import Response from "../Utils/Response";
7
7
  import BaseAPI from "./BaseAPI";
8
8
  import BadDataException from "../../Types/Exception/BadDataException";
9
9
  import NotFoundException from "../../Types/Exception/NotFoundException";
10
- import HashedString from "../../Types/HashedString";
11
10
  import ObjectID from "../../Types/ObjectID";
12
11
  import Dashboard from "../../Models/DatabaseModels/Dashboard";
13
- import { EncryptionSecret } from "../EnvironmentConfig";
14
12
  import { DASHBOARD_MASTER_PASSWORD_INVALID_MESSAGE } from "../../Types/Dashboard/MasterPassword";
15
13
  import JSONFunctions from "../../Types/JSONFunctions";
14
+ import PublicDashboardViewConfig from "../Utils/Dashboard/PublicDashboardViewConfig";
16
15
  import TelemetryAttributeService from "../Services/TelemetryAttributeService";
17
16
  import TelemetryType from "../../Types/Telemetry/TelemetryType";
18
17
  import SortOrder from "../../Types/BaseDatabase/SortOrder";
@@ -52,8 +51,9 @@ import SpanService from "../Services/SpanService";
52
51
  import LogService from "../Services/LogService";
53
52
  import DashboardComponentType from "../../Types/Dashboard/DashboardComponentType";
54
53
  import { DashboardVariableType } from "../../Types/Dashboard/DashboardVariable";
55
- import Includes from "../../Types/BaseDatabase/Includes";
56
- const DEFAULT_DASHBOARD_RESOURCE_LIMIT = 100;
54
+ import PublicDashboardResourceListPolicy from "../Utils/Dashboard/PublicDashboardResourceListPolicy";
55
+ import { applyIncidentSelfPrivacyFilter } from "../Utils/Incident/IncidentPrivacyFilter";
56
+ import { applyAlertSelfPrivacyFilter } from "../Utils/Alert/AlertPrivacyFilter";
57
57
  const PUBLIC_DASHBOARD_RESOURCES = {
58
58
  incident: {
59
59
  modelType: Incident,
@@ -61,20 +61,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
61
61
  widgets: {
62
62
  [DashboardComponentType.IncidentList]: null,
63
63
  },
64
- allowedQueryKeys: [
65
- "currentIncidentState",
66
- "currentIncidentStateId",
67
- "incidentSeverityId",
68
- "monitors",
69
- "labels",
70
- ],
71
- select: {
72
- _id: true,
73
- title: true,
74
- createdAt: true,
75
- currentIncidentState: { name: true, color: true },
76
- incidentSeverity: { name: true, color: true },
77
- },
78
64
  },
79
65
  alert: {
80
66
  modelType: Alert,
@@ -82,20 +68,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
82
68
  widgets: {
83
69
  [DashboardComponentType.AlertList]: null,
84
70
  },
85
- allowedQueryKeys: [
86
- "currentAlertState",
87
- "currentAlertStateId",
88
- "alertSeverityId",
89
- "monitorId",
90
- "labels",
91
- ],
92
- select: {
93
- _id: true,
94
- title: true,
95
- createdAt: true,
96
- currentAlertState: { name: true, color: true },
97
- alertSeverity: { name: true, color: true },
98
- },
99
71
  },
100
72
  monitor: {
101
73
  modelType: Monitor,
@@ -103,18 +75,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
103
75
  widgets: {
104
76
  [DashboardComponentType.MonitorList]: null,
105
77
  },
106
- allowedQueryKeys: [
107
- "currentMonitorStatus",
108
- "currentMonitorStatusId",
109
- "monitorType",
110
- "labels",
111
- ],
112
- select: {
113
- _id: true,
114
- name: true,
115
- monitorType: true,
116
- currentMonitorStatus: { name: true, color: true },
117
- },
118
78
  },
119
79
  "network-site": {
120
80
  modelType: NetworkSite,
@@ -122,36 +82,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
122
82
  widgets: {
123
83
  [DashboardComponentType.NetworkMap]: null,
124
84
  },
125
- /*
126
- * The map filters by site type and by whether the rolled-up status is
127
- * operational — nothing else. Notably NOT `parentSiteId` or
128
- * `materializedPath`: the widget draws a flat set of pins rather than
129
- * walking a hierarchy, so exposing the tree shape here would hand an
130
- * anonymous viewer a structure the map never shows them.
131
- */
132
- allowedQueryKeys: [
133
- "networkSiteTypeId",
134
- "currentMonitorStatus",
135
- "currentMonitorStatusId",
136
- ],
137
- select: {
138
- _id: true,
139
- name: true,
140
- /*
141
- * The type NAME comes from the networkSiteType relation. NetworkSite
142
- * .siteType is the deprecated pre-lookup-table string and is dropped
143
- * in a follow-up PR, so it must not be read from new code.
144
- */
145
- networkSiteType: { name: true },
146
- latitude: true,
147
- longitude: true,
148
- currentMonitorStatus: {
149
- name: true,
150
- color: true,
151
- priority: true,
152
- isOperationalState: true,
153
- },
154
- },
155
85
  },
156
86
  host: {
157
87
  modelType: Host,
@@ -159,23 +89,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
159
89
  widgets: {
160
90
  [DashboardComponentType.HostList]: null,
161
91
  },
162
- allowedQueryKeys: [
163
- "name",
164
- "hostIdentifier",
165
- "otelCollectorStatus",
166
- "osType",
167
- ],
168
- select: {
169
- _id: true,
170
- name: true,
171
- hostIdentifier: true,
172
- otelCollectorStatus: true,
173
- osType: true,
174
- osVersion: true,
175
- cpuCores: true,
176
- totalMemoryBytes: true,
177
- lastSeenAt: true,
178
- },
179
92
  },
180
93
  "kubernetes-resource": {
181
94
  modelType: KubernetesResource,
@@ -190,33 +103,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
190
103
  [DashboardComponentType.KubernetesJobList]: "Job",
191
104
  [DashboardComponentType.KubernetesCronJobList]: "CronJob",
192
105
  },
193
- allowedQueryKeys: [
194
- "kubernetesClusterId",
195
- "namespaceKey",
196
- "name",
197
- "phase",
198
- "isReady",
199
- ],
200
- select: {
201
- _id: true,
202
- name: true,
203
- namespaceKey: true,
204
- kind: true,
205
- phase: true,
206
- isReady: true,
207
- hasMemoryPressure: true,
208
- hasDiskPressure: true,
209
- hasPidPressure: true,
210
- containerCount: true,
211
- latestCpuPercent: true,
212
- latestMemoryBytes: true,
213
- controllerDeploymentName: true,
214
- controllerCronJobName: true,
215
- resourceCreationTimestamp: true,
216
- lastSeenAt: true,
217
- kubernetesClusterId: true,
218
- kubernetesCluster: { name: true },
219
- },
220
106
  },
221
107
  "docker-host": {
222
108
  modelType: DockerHost,
@@ -224,17 +110,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
224
110
  widgets: {
225
111
  [DashboardComponentType.DockerHostList]: null,
226
112
  },
227
- allowedQueryKeys: ["name", "otelCollectorStatus"],
228
- select: {
229
- _id: true,
230
- name: true,
231
- otelCollectorStatus: true,
232
- containersRunning: true,
233
- containersStopped: true,
234
- containersPaused: true,
235
- osType: true,
236
- osVersion: true,
237
- },
238
113
  },
239
114
  "docker-container": {
240
115
  modelType: DockerResource,
@@ -242,17 +117,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
242
117
  widgets: {
243
118
  [DashboardComponentType.DockerContainerList]: "Container",
244
119
  },
245
- allowedQueryKeys: ["dockerHostId", "name", "imageName"],
246
- select: {
247
- _id: true,
248
- name: true,
249
- imageName: true,
250
- state: true,
251
- latestCpuPercent: true,
252
- latestMemoryBytes: true,
253
- dockerHostId: true,
254
- dockerHost: { name: true },
255
- },
256
120
  },
257
121
  "docker-image": {
258
122
  modelType: DockerResource,
@@ -260,14 +124,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
260
124
  widgets: {
261
125
  [DashboardComponentType.DockerImageList]: "Image",
262
126
  },
263
- allowedQueryKeys: ["dockerHostId", "name"],
264
- select: {
265
- _id: true,
266
- name: true,
267
- containerId: true,
268
- dockerHostId: true,
269
- dockerHost: { name: true },
270
- },
271
127
  },
272
128
  "docker-network": {
273
129
  modelType: DockerResource,
@@ -275,14 +131,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
275
131
  widgets: {
276
132
  [DashboardComponentType.DockerNetworkList]: "Network",
277
133
  },
278
- allowedQueryKeys: ["dockerHostId"],
279
- select: {
280
- _id: true,
281
- name: true,
282
- state: true,
283
- dockerHostId: true,
284
- dockerHost: { name: true },
285
- },
286
134
  },
287
135
  "docker-volume": {
288
136
  modelType: DockerResource,
@@ -290,14 +138,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
290
138
  widgets: {
291
139
  [DashboardComponentType.DockerVolumeList]: "Volume",
292
140
  },
293
- allowedQueryKeys: ["dockerHostId"],
294
- select: {
295
- _id: true,
296
- name: true,
297
- state: true,
298
- dockerHostId: true,
299
- dockerHost: { name: true },
300
- },
301
141
  },
302
142
  "podman-host": {
303
143
  modelType: PodmanHost,
@@ -305,17 +145,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
305
145
  widgets: {
306
146
  [DashboardComponentType.PodmanHostList]: null,
307
147
  },
308
- allowedQueryKeys: ["name", "otelCollectorStatus"],
309
- select: {
310
- _id: true,
311
- name: true,
312
- otelCollectorStatus: true,
313
- containersRunning: true,
314
- containersStopped: true,
315
- containersPaused: true,
316
- osType: true,
317
- osVersion: true,
318
- },
319
148
  },
320
149
  "podman-container": {
321
150
  modelType: PodmanResource,
@@ -323,17 +152,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
323
152
  widgets: {
324
153
  [DashboardComponentType.PodmanContainerList]: "Container",
325
154
  },
326
- allowedQueryKeys: ["podmanHostId", "name", "imageName"],
327
- select: {
328
- _id: true,
329
- name: true,
330
- imageName: true,
331
- state: true,
332
- latestCpuPercent: true,
333
- latestMemoryBytes: true,
334
- podmanHostId: true,
335
- podmanHost: { name: true },
336
- },
337
155
  },
338
156
  "podman-image": {
339
157
  modelType: PodmanResource,
@@ -341,14 +159,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
341
159
  widgets: {
342
160
  [DashboardComponentType.PodmanImageList]: "Image",
343
161
  },
344
- allowedQueryKeys: ["podmanHostId", "name"],
345
- select: {
346
- _id: true,
347
- name: true,
348
- containerId: true,
349
- podmanHostId: true,
350
- podmanHost: { name: true },
351
- },
352
162
  },
353
163
  "podman-network": {
354
164
  modelType: PodmanResource,
@@ -356,14 +166,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
356
166
  widgets: {
357
167
  [DashboardComponentType.PodmanNetworkList]: "Network",
358
168
  },
359
- allowedQueryKeys: ["podmanHostId"],
360
- select: {
361
- _id: true,
362
- name: true,
363
- state: true,
364
- podmanHostId: true,
365
- podmanHost: { name: true },
366
- },
367
169
  },
368
170
  "podman-volume": {
369
171
  modelType: PodmanResource,
@@ -371,14 +173,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
371
173
  widgets: {
372
174
  [DashboardComponentType.PodmanVolumeList]: "Volume",
373
175
  },
374
- allowedQueryKeys: ["podmanHostId"],
375
- select: {
376
- _id: true,
377
- name: true,
378
- state: true,
379
- podmanHostId: true,
380
- podmanHost: { name: true },
381
- },
382
176
  },
383
177
  "proxmox-resource": {
384
178
  modelType: ProxmoxResource,
@@ -387,23 +181,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
387
181
  [DashboardComponentType.ProxmoxNodeList]: "Node",
388
182
  [DashboardComponentType.ProxmoxGuestList]: "Guest",
389
183
  },
390
- allowedQueryKeys: ["proxmoxClusterId", "guestType", "isUp", "name"],
391
- select: {
392
- _id: true,
393
- name: true,
394
- externalId: true,
395
- kind: true,
396
- vmid: true,
397
- guestType: true,
398
- parentNodeName: true,
399
- isUp: true,
400
- haState: true,
401
- latestCpuPercent: true,
402
- latestMemoryPercent: true,
403
- lastSeenAt: true,
404
- proxmoxClusterId: true,
405
- proxmoxCluster: { name: true },
406
- },
407
184
  },
408
185
  "ceph-resource": {
409
186
  modelType: CephResource,
@@ -412,25 +189,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
412
189
  [DashboardComponentType.CephOsdList]: "Osd",
413
190
  [DashboardComponentType.CephPoolList]: "Pool",
414
191
  },
415
- allowedQueryKeys: ["cephClusterId", "isUp", "isIn", "externalId"],
416
- select: {
417
- _id: true,
418
- name: true,
419
- externalId: true,
420
- kind: true,
421
- hostname: true,
422
- deviceClass: true,
423
- isUp: true,
424
- isIn: true,
425
- statBytes: true,
426
- statBytesUsed: true,
427
- storedBytes: true,
428
- maxAvailBytes: true,
429
- objects: true,
430
- lastSeenAt: true,
431
- cephClusterId: true,
432
- cephCluster: { name: true },
433
- },
434
192
  },
435
193
  "docker-swarm-resource": {
436
194
  modelType: DockerSwarmResource,
@@ -439,30 +197,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
439
197
  [DashboardComponentType.DockerSwarmNodeList]: "Node",
440
198
  [DashboardComponentType.DockerSwarmServiceList]: "Service",
441
199
  },
442
- allowedQueryKeys: [
443
- "dockerSwarmClusterId",
444
- "role",
445
- "serviceMode",
446
- "isReady",
447
- ],
448
- select: {
449
- _id: true,
450
- name: true,
451
- externalId: true,
452
- kind: true,
453
- role: true,
454
- state: true,
455
- serviceMode: true,
456
- desiredReplicas: true,
457
- runningReplicas: true,
458
- image: true,
459
- isReady: true,
460
- latestCpuPercent: true,
461
- latestMemoryPercent: true,
462
- lastSeenAt: true,
463
- dockerSwarmClusterId: true,
464
- dockerSwarmCluster: { name: true },
465
- },
466
200
  },
467
201
  span: {
468
202
  modelType: Span,
@@ -470,17 +204,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
470
204
  widgets: {
471
205
  [DashboardComponentType.TraceList]: null,
472
206
  },
473
- allowedQueryKeys: ["startTime", "statusCode"],
474
- select: {
475
- startTime: true,
476
- name: true,
477
- statusCode: true,
478
- durationUnixNano: true,
479
- traceId: true,
480
- spanId: true,
481
- kind: true,
482
- primaryEntityId: true,
483
- },
484
207
  },
485
208
  log: {
486
209
  modelType: Log,
@@ -488,16 +211,6 @@ const PUBLIC_DASHBOARD_RESOURCES = {
488
211
  widgets: {
489
212
  [DashboardComponentType.LogStream]: null,
490
213
  },
491
- allowedQueryKeys: ["time", "severityText", "body", "attributes"],
492
- select: {
493
- time: true,
494
- severityText: true,
495
- body: true,
496
- primaryEntityId: true,
497
- traceId: true,
498
- spanId: true,
499
- attributes: true,
500
- },
501
214
  },
502
215
  };
503
216
  /*
@@ -648,18 +361,20 @@ export default class DashboardAPI extends BaseAPI {
648
361
  /*
649
362
  * Everything below is derived from columns the public /metadata and
650
363
  * /view-config endpoints already serve to anonymous viewers — the
651
- * overview only reshapes them into a single GET-able document.
364
+ * overview only reshapes them into a single GET-able document, and
365
+ * applies the same external-Data-Source strip /view-config does.
652
366
  */
367
+ const publicViewConfig = PublicDashboardViewConfig.sanitize(dashboard.dashboardViewConfig);
653
368
  return Response.sendJsonObjectResponse(req, res, {
654
369
  _id: ((_a = dashboard._id) === null || _a === void 0 ? void 0 : _a.toString()) || "",
655
370
  name: dashboard.name || "Dashboard",
656
371
  description: dashboard.description || "",
657
372
  pageTitle: dashboard.pageTitle || "",
658
373
  pageDescription: dashboard.pageDescription || "",
659
- components: DashboardAPI.buildPublicComponentSummaries(dashboard.dashboardViewConfig),
660
- metricsUsed: Array.from(DashboardAPI.collectDashboardMetricNames(dashboard.dashboardViewConfig)).sort(),
661
- dashboardViewConfig: dashboard.dashboardViewConfig
662
- ? JSONFunctions.serialize(dashboard.dashboardViewConfig)
374
+ components: DashboardAPI.buildPublicComponentSummaries(publicViewConfig),
375
+ metricsUsed: Array.from(DashboardAPI.collectDashboardMetricNames(publicViewConfig)).sort(),
376
+ dashboardViewConfig: publicViewConfig
377
+ ? JSONFunctions.serialize(publicViewConfig)
663
378
  : null,
664
379
  });
665
380
  }
@@ -793,6 +508,7 @@ export default class DashboardAPI extends BaseAPI {
793
508
  if (!dashboard) {
794
509
  throw new NotFoundException("Dashboard not found");
795
510
  }
511
+ const publicViewConfig = PublicDashboardViewConfig.sanitize(dashboard.dashboardViewConfig);
796
512
  return Response.sendJsonObjectResponse(req, res, {
797
513
  _id: ((_a = dashboard._id) === null || _a === void 0 ? void 0 : _a.toString()) || "",
798
514
  name: dashboard.name || "Dashboard",
@@ -800,8 +516,19 @@ export default class DashboardAPI extends BaseAPI {
800
516
  pageTitle: dashboard.pageTitle || "",
801
517
  pageDescription: dashboard.pageDescription || "",
802
518
  logoFile: DashboardAPI.getFileAsBase64JSONObject(dashboard.logoFile),
803
- dashboardViewConfig: dashboard.dashboardViewConfig
804
- ? JSONFunctions.serialize(dashboard.dashboardViewConfig)
519
+ /*
520
+ * External Data Source widgets are stripped: they cannot render
521
+ * for an anonymous viewer, and their config IS the query — raw
522
+ * SQL / PromQL naming internal tables, jobs, and instances.
523
+ *
524
+ * The null stays null. JSONFunctions.serialize(null) returns
525
+ * `{}`, and the public page falls back to a default config only
526
+ * on a FALSY value — an empty object is truthy, so it would sail
527
+ * through and the canvas would read `.components.length` off
528
+ * undefined.
529
+ */
530
+ dashboardViewConfig: publicViewConfig
531
+ ? JSONFunctions.serialize(publicViewConfig)
805
532
  : null,
806
533
  });
807
534
  }
@@ -1157,8 +884,8 @@ export default class DashboardAPI extends BaseAPI {
1157
884
  * Public resource lists for non-metric dashboard widgets (incident /
1158
885
  * alert / monitor / trace / log / kubernetes / docker / host lists).
1159
886
  *
1160
- * Each widget renders a fixed set of columns; the server pins the select
1161
- * to exactly those columns (see PUBLIC_DASHBOARD_RESOURCES) and forces the
887
+ * Each widget renders a fixed set of columns; the server-owned widget
888
+ * policy pins the select to exactly those columns and forces the
1162
889
  * project scope to the dashboard's project, so a public viewer can only
1163
890
  * read the data the widget was built to show, for this dashboard's
1164
891
  * project. Authorization reuses DashboardService.hasReadAccess.
@@ -1185,7 +912,7 @@ export default class DashboardAPI extends BaseAPI {
1185
912
  }
1186
913
  const dashboardId = new ObjectID(req.params["dashboardId"]);
1187
914
  const password = req.body && req.body["password"];
1188
- if (!password) {
915
+ if (typeof password !== "string" || !password) {
1189
916
  throw new BadDataException("Master password is required.");
1190
917
  }
1191
918
  const dashboard = await DashboardService.findOneById({
@@ -1195,6 +922,7 @@ export default class DashboardAPI extends BaseAPI {
1195
922
  projectId: true,
1196
923
  enableMasterPassword: true,
1197
924
  masterPassword: true,
925
+ masterPasswordSalt: true,
1198
926
  isPublicDashboard: true,
1199
927
  },
1200
928
  props: {
@@ -1210,8 +938,12 @@ export default class DashboardAPI extends BaseAPI {
1210
938
  if (!dashboard.enableMasterPassword || !dashboard.masterPassword) {
1211
939
  throw new BadDataException("Master password has not been configured for this dashboard.");
1212
940
  }
1213
- const hashedInput = await HashedString.hashValue(password, EncryptionSecret);
1214
- if (hashedInput !== dashboard.masterPassword.toString()) {
941
+ const isMasterPasswordValid = await DashboardService.verifyHashedColumnValue({
942
+ item: dashboard,
943
+ columnName: "masterPassword",
944
+ plainValue: password,
945
+ });
946
+ if (!isMasterPasswordValid) {
1215
947
  throw new BadDataException(DASHBOARD_MASTER_PASSWORD_INVALID_MESSAGE);
1216
948
  }
1217
949
  CookieUtil.setDashboardMasterPasswordCookie({
@@ -1468,84 +1200,75 @@ export default class DashboardAPI extends BaseAPI {
1468
1200
  return groupByColumns;
1469
1201
  }
1470
1202
  /*
1471
- * Walk a stored dashboard view config and collect every widget type it
1472
- * renders. Used to build an allowlist for the public resource-list
1473
- * endpoint so an anonymous viewer can only read the resources this
1474
- * dashboard was actually built to show — a dashboard with a monitor list
1475
- * on it must not double as a project-wide log or incident reader.
1203
+ * Read only the real, top-level dashboard components. Recursively scanning
1204
+ * arbitrary widget arguments would let a nested object carrying a
1205
+ * `componentType` masquerade as a widget and become an authorization input.
1476
1206
  */
1477
- static collectDashboardComponentTypes(dashboardViewConfig) {
1478
- const componentTypes = new Set();
1479
- const walk = (node) => {
1480
- if (!node || typeof node !== "object") {
1481
- return;
1482
- }
1483
- if (Array.isArray(node)) {
1484
- for (const item of node) {
1485
- walk(item);
1486
- }
1487
- return;
1488
- }
1489
- const obj = node;
1490
- const componentType = obj["componentType"];
1491
- if (typeof componentType === "string" && componentType.length > 0) {
1492
- componentTypes.add(componentType);
1493
- }
1494
- for (const key of Object.keys(obj)) {
1495
- walk(obj[key]);
1496
- }
1497
- };
1498
- walk(dashboardViewConfig);
1499
- return componentTypes;
1207
+ static collectDashboardWidgets(dashboardViewConfig) {
1208
+ if (!dashboardViewConfig ||
1209
+ typeof dashboardViewConfig !== "object" ||
1210
+ Array.isArray(dashboardViewConfig)) {
1211
+ return [];
1212
+ }
1213
+ const components = dashboardViewConfig["components"];
1214
+ if (!Array.isArray(components)) {
1215
+ return [];
1216
+ }
1217
+ return components.filter((component) => {
1218
+ return Boolean(component && typeof component === "object" && !Array.isArray(component));
1219
+ });
1500
1220
  }
1501
- /*
1502
- * Reduce a client-supplied query to the filter keys the widget is allowed
1503
- * to narrow by. Anything else the client sends — a foreign projectId, a
1504
- * filter on a column the widget never renders, an operator on a secret
1505
- * column used as a blind oracle — is dropped rather than merged.
1506
- */
1507
- static sanitizePublicResourceQuery(data) {
1508
- const { query, allowedQueryKeys } = data;
1509
- const sanitized = {};
1510
- if (!query || typeof query !== "object" || Array.isArray(query)) {
1511
- return sanitized;
1221
+ static readDashboardWidgetComponentId(widget) {
1222
+ const componentId = widget["componentId"];
1223
+ if (componentId instanceof ObjectID) {
1224
+ return componentId.toString();
1225
+ }
1226
+ if (typeof componentId === "string" && componentId.length > 0) {
1227
+ return componentId;
1512
1228
  }
1513
- const queryObject = query;
1514
- for (const key of allowedQueryKeys) {
1515
- if (Object.prototype.hasOwnProperty.call(queryObject, key) &&
1516
- queryObject[key] !== undefined) {
1517
- sanitized[key] = queryObject[key];
1229
+ if (componentId &&
1230
+ typeof componentId === "object" &&
1231
+ !Array.isArray(componentId)) {
1232
+ const value = componentId["value"];
1233
+ if (typeof value === "string" && value.length > 0) {
1234
+ return value;
1518
1235
  }
1519
1236
  }
1520
- return sanitized;
1237
+ return null;
1521
1238
  }
1522
1239
  /*
1523
- * Reduce a client-supplied sort to the columns the widget already renders
1524
- * (the registry's fixed select). Sorting by a column the viewer cannot see
1525
- * would otherwise order rows by a hidden value and leak it.
1240
+ * Select the exact stored widget whose policy will be executed. A legacy
1241
+ * caller may omit componentId only when there is exactly one matching
1242
+ * widget, so two differently-filtered widgets are never conflated.
1526
1243
  */
1527
- static sanitizePublicResourceSort(data) {
1528
- const { sort, select } = data;
1529
- const sanitized = {};
1530
- if (!sort || typeof sort !== "object" || Array.isArray(sort)) {
1531
- return sanitized;
1244
+ static selectPublicResourceWidget(data) {
1245
+ const matchingWidgets = DashboardAPI.collectDashboardWidgets(data.dashboardViewConfig).filter((widget) => {
1246
+ const componentType = widget["componentType"];
1247
+ return (typeof componentType === "string" &&
1248
+ Object.prototype.hasOwnProperty.call(data.config.widgets, componentType));
1249
+ });
1250
+ if (matchingWidgets.length === 0) {
1251
+ throw new BadDataException("This resource is not part of this dashboard.");
1532
1252
  }
1533
- const sortObject = sort;
1534
- for (const key of Object.keys(sortObject)) {
1535
- // Only scalar columns of the fixed select are sortable.
1536
- if (select[key] !== true) {
1537
- continue;
1538
- }
1539
- const order = sortObject[key];
1540
- if (typeof order === "string" &&
1541
- order.toUpperCase() === SortOrder.Descending) {
1542
- sanitized[key] = SortOrder.Descending;
1543
- }
1544
- else {
1545
- sanitized[key] = SortOrder.Ascending;
1253
+ if (data.requestedComponentId === undefined ||
1254
+ data.requestedComponentId === null) {
1255
+ if (matchingWidgets.length === 1) {
1256
+ return matchingWidgets[0];
1546
1257
  }
1258
+ throw new BadDataException("A componentId is required to read this resource from this dashboard.");
1547
1259
  }
1548
- return sanitized;
1260
+ if (typeof data.requestedComponentId !== "string") {
1261
+ throw new BadDataException("componentId must be a string UUID.");
1262
+ }
1263
+ ObjectID.validateUUID(data.requestedComponentId);
1264
+ const selectedWidget = matchingWidgets.find((widget) => {
1265
+ return (DashboardAPI.readDashboardWidgetComponentId(widget) ===
1266
+ data.requestedComponentId);
1267
+ });
1268
+ if (!selectedWidget) {
1269
+ throw new BadDataException("This resource is not part of this dashboard.");
1270
+ }
1271
+ return selectedWidget;
1549
1272
  }
1550
1273
  /*
1551
1274
  * Shared handler for the public resource-list endpoint. Loads the
@@ -1576,84 +1299,50 @@ export default class DashboardAPI extends BaseAPI {
1576
1299
  if (!dashboard || !dashboard.projectId) {
1577
1300
  throw new NotFoundException("Dashboard not found");
1578
1301
  }
1579
- /*
1580
- * Security: the dashboard must actually contain a widget that renders
1581
- * this resource. Without this check, knowing any public dashboard ID
1582
- * would be enough to read every resource type in its project — the
1583
- * dashboard's own widgets are the owner's opt-in, so they are the
1584
- * allowlist.
1585
- */
1586
- const dashboardComponentTypes = DashboardAPI.collectDashboardComponentTypes(dashboard.dashboardViewConfig);
1587
- const presentWidgets = Object.keys(config.widgets).filter((componentType) => {
1588
- return dashboardComponentTypes.has(componentType);
1302
+ const widget = DashboardAPI.selectPublicResourceWidget({
1303
+ dashboardViewConfig: dashboard.dashboardViewConfig,
1304
+ config,
1305
+ requestedComponentId: req.body ? req.body["componentId"] : undefined,
1589
1306
  });
1590
- if (presentWidgets.length === 0) {
1591
- throw new BadDataException("This resource is not part of this dashboard.");
1592
- }
1593
- const clientQuery = req.body && req.body["query"]
1307
+ const requestedQuery = req.body && req.body["query"]
1594
1308
  ? JSONFunctions.deserialize(req.body["query"])
1595
1309
  : {};
1596
- const query = DashboardAPI.sanitizePublicResourceQuery({
1597
- query: clientQuery,
1598
- allowedQueryKeys: config.allowedQueryKeys,
1310
+ const policy = PublicDashboardResourceListPolicy.build({
1311
+ widget,
1312
+ dashboardViewConfig: dashboard.dashboardViewConfig,
1313
+ requestedVariables: req.body ? req.body["variables"] : undefined,
1314
+ requestedQuery,
1599
1315
  });
1316
+ const requestedResourceType = req.params["resourceType"];
1317
+ if (policy.resourceType !== requestedResourceType) {
1318
+ throw new BadDataException("This resource is not part of this dashboard.");
1319
+ }
1320
+ let query = Object.assign({}, policy.query);
1600
1321
  /*
1601
- * Security: pin to the dashboard's project; never trust a client-supplied
1602
- * projectId on a public, unauthenticated endpoint.
1322
+ * IncidentService and AlertService normally apply privacy in their
1323
+ * onBeforeFind hooks. The root read below intentionally bypasses those
1324
+ * hooks' user context, so apply the anonymous form explicitly first:
1325
+ * public dashboards may show public rows, never private tenant rows.
1603
1326
  */
1604
- query["projectId"] = dashboard.projectId;
1327
+ if (requestedResourceType === "incident") {
1328
+ query = applyIncidentSelfPrivacyFilter(query, {});
1329
+ }
1330
+ else if (requestedResourceType === "alert") {
1331
+ query = applyAlertSelfPrivacyFilter(query, {});
1332
+ }
1605
1333
  /*
1606
- * Models that pack several resource kinds into one table (Kubernetes,
1607
- * Docker, Podman, Proxmox, Ceph, Swarm) are constrained to the kinds the
1608
- * dashboard's widgets render, so a "volumes" widget cannot be used to
1609
- * list containers. A widget may pick one of those kinds; anything else is
1610
- * rejected, and a request that names no kind gets all of them.
1334
+ * Project scope is the final query invariant. Neither the request nor a
1335
+ * future policy builder may redirect this root read to another project.
1336
+ * Resource kind, where applicable, comes solely from the selected
1337
+ * widget's policy query.
1611
1338
  */
1612
- const allowedKinds = presentWidgets
1613
- .map((componentType) => {
1614
- return config.widgets[componentType];
1615
- })
1616
- .filter((kind) => {
1617
- return Boolean(kind);
1618
- });
1619
- if (allowedKinds.length > 0) {
1620
- const requestedKind = clientQuery["kind"];
1621
- if (requestedKind !== undefined && requestedKind !== null) {
1622
- if (typeof requestedKind !== "string" ||
1623
- !allowedKinds.includes(requestedKind)) {
1624
- throw new BadDataException("This resource is not part of this dashboard.");
1625
- }
1626
- query["kind"] = requestedKind;
1627
- }
1628
- else if (allowedKinds.length === 1) {
1629
- query["kind"] = allowedKinds[0];
1630
- }
1631
- else {
1632
- query["kind"] = new Includes(allowedKinds);
1633
- }
1634
- }
1635
- const sort = DashboardAPI.sanitizePublicResourceSort({
1636
- sort: req.body && req.body["sort"]
1637
- ? JSONFunctions.deserialize(req.body["sort"])
1638
- : {},
1639
- select: config.select,
1640
- });
1641
- const requestedLimit = req.query["limit"]
1642
- ? parseInt(req.query["limit"], 10)
1643
- : DEFAULT_DASHBOARD_RESOURCE_LIMIT;
1644
- const limit = Math.min(Number.isFinite(requestedLimit) && requestedLimit > 0
1645
- ? requestedLimit
1646
- : DEFAULT_DASHBOARD_RESOURCE_LIMIT, LIMIT_PER_PROJECT);
1647
- const requestedSkip = req.query["skip"]
1648
- ? parseInt(req.query["skip"], 10)
1649
- : 0;
1650
- const skip = Number.isFinite(requestedSkip) && requestedSkip > 0 ? requestedSkip : 0;
1339
+ query["projectId"] = dashboard.projectId;
1651
1340
  const list = await config.service.findBy({
1652
1341
  query: query,
1653
- select: config.select,
1654
- sort: sort,
1655
- limit: limit,
1656
- skip: skip,
1342
+ select: policy.select,
1343
+ sort: policy.sort,
1344
+ limit: policy.limit,
1345
+ skip: 0,
1657
1346
  props: {
1658
1347
  isRoot: true,
1659
1348
  },