@oneuptime/common 12.0.5 → 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 (528) hide show
  1. package/Models/DatabaseModels/AIRun.ts +33 -0
  2. package/Models/DatabaseModels/DataSource.ts +744 -0
  3. package/Models/DatabaseModels/Index.ts +3 -0
  4. package/Models/DatabaseModels/ProjectCallSMSConfig.ts +10 -2
  5. package/Models/DatabaseModels/User.ts +2 -0
  6. package/Models/DatabaseModels/UserOnCallLog.ts +2 -0
  7. package/Models/DatabaseModels/UserOnCallLogTimeline.ts +2 -0
  8. package/Models/DatabaseModels/UserSession.ts +2 -0
  9. package/Models/DatabaseModels/UserTotpAuth.ts +6 -4
  10. package/Models/DatabaseModels/UserWebAuthn.ts +5 -3
  11. package/Server/API/AIInsightAPI.ts +47 -4
  12. package/Server/API/AIInvestigationAPI.ts +25 -0
  13. package/Server/API/DashboardAPI.ts +176 -492
  14. package/Server/API/DataSourceAPI.ts +268 -0
  15. package/Server/API/StatusPageAPI.ts +11 -1
  16. package/Server/API/UserAPI.ts +119 -0
  17. package/Server/Infrastructure/ClickhouseConfig.ts +59 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.ts +39 -0
  19. package/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.ts +24 -0
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.ts +76 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  22. package/Server/Infrastructure/Queue.ts +26 -0
  23. package/Server/Infrastructure/QueueWorker.ts +17 -0
  24. package/Server/Middleware/TelemetryIngest.ts +8 -3
  25. package/Server/Services/AIInsightService.ts +132 -12
  26. package/Server/Services/AIRunService.ts +34 -0
  27. package/Server/Services/AIService.ts +17 -2
  28. package/Server/Services/AlertService.ts +38 -32
  29. package/Server/Services/AnalyticsDatabaseService.ts +8 -4
  30. package/Server/Services/DataSourceService.ts +200 -0
  31. package/Server/Services/HostService.ts +92 -0
  32. package/Server/Services/IncidentService.ts +45 -0
  33. package/Server/Services/Index.ts +2 -0
  34. package/Server/Services/MonitorService.ts +49 -0
  35. package/Server/Services/MonitorStatusService.ts +166 -0
  36. package/Server/Services/OpenTelemetryIngestService.ts +255 -184
  37. package/Server/Services/RumSessionPinService.ts +7 -21
  38. package/Server/Services/StatusPageSubscriberService.ts +13 -0
  39. package/Server/Services/UserService.ts +280 -9
  40. package/Server/Static/Vendor/README.md +62 -0
  41. package/Server/Static/Vendor/fonts/InterVariable.woff2 +0 -0
  42. package/Server/Static/Vendor/highlight/highlight.min.js +1244 -0
  43. package/Server/Static/Vendor/highlight/languages/apache.min.js +15 -0
  44. package/Server/Static/Vendor/highlight/languages/bash.min.js +21 -0
  45. package/Server/Static/Vendor/highlight/languages/c.min.js +41 -0
  46. package/Server/Static/Vendor/highlight/languages/cpp.min.js +47 -0
  47. package/Server/Static/Vendor/highlight/languages/csharp.min.js +49 -0
  48. package/Server/Static/Vendor/highlight/languages/css.min.js +31 -0
  49. package/Server/Static/Vendor/highlight/languages/diff.min.js +9 -0
  50. package/Server/Static/Vendor/highlight/languages/dns.min.js +11 -0
  51. package/Server/Static/Vendor/highlight/languages/dockerfile.min.js +8 -0
  52. package/Server/Static/Vendor/highlight/languages/go.min.js +20 -0
  53. package/Server/Static/Vendor/highlight/languages/graphql.min.js +12 -0
  54. package/Server/Static/Vendor/highlight/languages/http.min.js +14 -0
  55. package/Server/Static/Vendor/highlight/languages/ini.min.js +15 -0
  56. package/Server/Static/Vendor/highlight/languages/java.min.js +38 -0
  57. package/Server/Static/Vendor/highlight/languages/javascript.min.js +81 -0
  58. package/Server/Static/Vendor/highlight/languages/json.min.js +8 -0
  59. package/Server/Static/Vendor/highlight/languages/kotlin.min.js +46 -0
  60. package/Server/Static/Vendor/highlight/languages/lua.min.js +15 -0
  61. package/Server/Static/Vendor/highlight/languages/makefile.min.js +14 -0
  62. package/Server/Static/Vendor/highlight/languages/nginx.min.js +21 -0
  63. package/Server/Static/Vendor/highlight/languages/perl.min.js +41 -0
  64. package/Server/Static/Vendor/highlight/languages/php.min.js +59 -0
  65. package/Server/Static/Vendor/highlight/languages/powershell.min.js +39 -0
  66. package/Server/Static/Vendor/highlight/languages/python.min.js +42 -0
  67. package/Server/Static/Vendor/highlight/languages/r.min.js +26 -0
  68. package/Server/Static/Vendor/highlight/languages/ruby.min.js +54 -0
  69. package/Server/Static/Vendor/highlight/languages/rust.min.js +27 -0
  70. package/Server/Static/Vendor/highlight/languages/scala.min.js +28 -0
  71. package/Server/Static/Vendor/highlight/languages/sql.min.js +21 -0
  72. package/Server/Static/Vendor/highlight/languages/swift.min.js +68 -0
  73. package/Server/Static/Vendor/highlight/languages/typescript.min.js +99 -0
  74. package/Server/Static/Vendor/highlight/languages/xml.min.js +29 -0
  75. package/Server/Static/Vendor/highlight/languages/yaml.min.js +28 -0
  76. package/Server/Static/Vendor/highlight/styles/github-dark.min.css +10 -0
  77. package/Server/Static/Vendor/highlight/styles/vs2015.min.css +1 -0
  78. package/Server/Static/Vendor/tailwind/tailwind-3.4.5.js +21028 -0
  79. package/Server/Types/Database/Permissions/BasePermission.ts +7 -0
  80. package/Server/Types/Database/Permissions/DeletePermission.ts +2 -0
  81. package/Server/Types/Database/Permissions/ReadPermission.ts +3 -0
  82. package/Server/Types/Database/Permissions/TenantPermission.ts +101 -16
  83. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +2 -2
  84. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +90 -11
  85. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +1 -0
  86. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +1 -0
  87. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.ts +125 -0
  88. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +25 -15
  89. package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +256 -57
  90. package/Server/Utils/AI/SRE/Insights/InsightStore.ts +76 -18
  91. package/Server/Utils/AI/SRE/InvestigationTldr.ts +352 -0
  92. package/Server/Utils/AnalyticsDatabase/InsertDedupContext.ts +7 -2
  93. package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +1793 -0
  94. package/Server/Utils/Dashboard/PublicDashboardViewConfig.ts +65 -0
  95. package/Server/Utils/DataSource/ConnectorRegistry.ts +53 -0
  96. package/Server/Utils/DataSource/Connectors/ClickHouseConnector.ts +338 -0
  97. package/Server/Utils/DataSource/Connectors/ElasticsearchConnector.ts +717 -0
  98. package/Server/Utils/DataSource/Connectors/LokiConnector.ts +606 -0
  99. package/Server/Utils/DataSource/Connectors/MySqlConnector.ts +307 -0
  100. package/Server/Utils/DataSource/Connectors/PostgresConnector.ts +260 -0
  101. package/Server/Utils/DataSource/Connectors/PrometheusConnector.ts +555 -0
  102. package/Server/Utils/DataSource/Connectors/RestApiConnector.ts +597 -0
  103. package/Server/Utils/DataSource/Connectors/SqlServerConnector.ts +318 -0
  104. package/Server/Utils/DataSource/EgressGuard.ts +446 -0
  105. package/Server/Utils/DataSource/HttpFetch.ts +221 -0
  106. package/Server/Utils/DataSource/SqlQueryGuard.ts +383 -0
  107. package/Server/Utils/DataSource/SqlResultShaper.ts +372 -0
  108. package/Server/Utils/DataSource/Types.ts +93 -0
  109. package/Server/Utils/Database/PostgresErrorTranslator.ts +172 -17
  110. package/Server/Utils/InProcessMemo.ts +141 -0
  111. package/Server/Utils/InstanceHealth/TelemetryIngestion.ts +628 -0
  112. package/Server/Utils/Monitor/MonitorMetricUtil.ts +58 -0
  113. package/Server/Utils/Monitor/MonitorResource.ts +14 -0
  114. package/Server/Utils/Response.ts +12 -1
  115. package/Server/Utils/SSRFProtection.ts +237 -0
  116. package/Server/Utils/StartServer.ts +8 -0
  117. package/Server/Utils/StatusPageSubscriberWebhook.ts +30 -0
  118. package/Server/Utils/Telemetry/CaptureSpan.ts +30 -18
  119. package/Server/Utils/Telemetry/IngestionTimestamp.ts +75 -0
  120. package/Server/Utils/Telemetry/ResourceHeartbeat.ts +99 -7
  121. package/Server/Utils/Telemetry/Telemetry.ts +112 -1
  122. package/Server/Utils/Telemetry.ts +104 -3
  123. package/Server/Utils/VendorAssets.ts +165 -0
  124. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +28 -5
  125. package/Server/Utils/Workspace/Slack/Slack.ts +5 -0
  126. package/Server/Views/Partials/Head.ejs +21 -7
  127. package/Tests/App/AdminDashboard/AdminProjectsIdFilter.test.tsx +207 -0
  128. package/Tests/App/AdminDashboard/AdminUsersIdFilter.test.tsx +216 -0
  129. package/Tests/App/Dashboard/AIInsightViewActions.test.tsx +422 -0
  130. package/Tests/App/Dashboard/AddWidgetModal.test.tsx +10 -3
  131. package/Tests/App/Dashboard/AlertsSideMenu.test.tsx +387 -0
  132. package/Tests/App/Dashboard/ChatActivityFeed.test.tsx +199 -0
  133. package/Tests/App/Dashboard/DataSourceChartSyntheticConfig.test.tsx +736 -0
  134. package/Tests/App/Dashboard/DataSourceQueryEditor.test.tsx +868 -0
  135. package/Tests/App/Dashboard/DataSourceWidgetCatalog.test.ts +440 -0
  136. package/Tests/App/Dashboard/DataSourceWidgetFetching.test.tsx +2109 -0
  137. package/Tests/App/Dashboard/DataSourceWidgetViews.test.tsx +726 -0
  138. package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +447 -0
  139. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +514 -3
  140. package/Tests/App/Dashboard/ProductMenuBreadcrumbs.test.tsx +391 -0
  141. package/Tests/App/Dashboard/ScheduledMaintenanceSideMenu.test.tsx +326 -0
  142. package/Tests/App/Dashboard/SideMenuHarness.tsx +187 -0
  143. package/Tests/App/Dashboard/WidgetCatalog.test.ts +6 -1
  144. package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +1858 -0
  145. package/Tests/Models/DatabaseModels/DataSourceModelSecrets.test.ts +70 -0
  146. package/Tests/Server/API/AIInvestigationAPI.test.ts +187 -0
  147. package/Tests/Server/API/DashboardPublicDataSourceStrip.test.ts +686 -0
  148. package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +585 -823
  149. package/Tests/Server/API/DataSourceAPIRoutes.test.ts +486 -0
  150. package/Tests/Server/API/StatusPageSubscriberOwnership.test.ts +291 -0
  151. package/Tests/Server/API/UserAuthenticationAPI.test.ts +641 -0
  152. package/Tests/Server/Infrastructure/ClickhouseKeepAliveOptions.test.ts +441 -0
  153. package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +140 -0
  154. package/Tests/Server/Services/AIInsightService.test.ts +266 -11
  155. package/Tests/Server/Services/AIRunAnalysisTldrPersistence.test.ts +160 -0
  156. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +4 -0
  157. package/Tests/Server/Services/AlertMetricResourceAttributes.test.ts +352 -0
  158. package/Tests/Server/Services/DataSourceServiceSettings.test.ts +244 -0
  159. package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +397 -0
  160. package/Tests/Server/Services/HostServiceUpdateLastSeen.test.ts +41 -2
  161. package/Tests/Server/Services/IncidentMetricResourceAttributes.test.ts +408 -0
  162. package/Tests/Server/Services/MonitorStatusServiceDeleteReferenceCleanup.test.ts +351 -0
  163. package/Tests/Server/Services/MonitorStatusServiceValidation.test.ts +171 -0
  164. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +398 -0
  165. package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +19 -0
  166. package/Tests/Server/Services/ProjectCallSMSConfigCredentialUniqueness.test.ts +305 -0
  167. package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +36 -1
  168. package/Tests/Server/Services/RumSessionPinUniqueViolationRecovery.test.ts +163 -0
  169. package/Tests/Server/Services/UserAuthenticationService.test.ts +973 -0
  170. package/Tests/Server/Types/Database/ObjectIdColumnQuery.test.ts +262 -0
  171. package/Tests/Server/Types/Database/Permissions/TenantPermission.test.ts +358 -0
  172. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +2 -2
  173. package/Tests/Server/Utils/AI/Insights/ExceptionSpikeDetector.test.ts +6 -1
  174. package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +121 -4
  175. package/Tests/Server/Utils/AI/Insights/NewExceptionDetector.test.ts +361 -10
  176. package/Tests/Server/Utils/AI/InvestigationSettlement.test.ts +292 -0
  177. package/Tests/Server/Utils/AI/InvestigationTldr.test.ts +623 -0
  178. package/Tests/Server/Utils/AI/InvestigationTldrWiring.test.ts +98 -0
  179. package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +857 -0
  180. package/Tests/Server/Utils/Dashboard/PublicDashboardViewConfig.test.ts +480 -0
  181. package/Tests/Server/Utils/DataSource/ClickHouseConnector.test.ts +759 -0
  182. package/Tests/Server/Utils/DataSource/ConnectorRegistry.test.ts +37 -0
  183. package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +645 -0
  184. package/Tests/Server/Utils/DataSource/ElasticsearchConnector.test.ts +1206 -0
  185. package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +616 -0
  186. package/Tests/Server/Utils/DataSource/LokiConnector.test.ts +970 -0
  187. package/Tests/Server/Utils/DataSource/MySqlConnector.test.ts +935 -0
  188. package/Tests/Server/Utils/DataSource/PostgresConnector.test.ts +854 -0
  189. package/Tests/Server/Utils/DataSource/PrometheusConnector.test.ts +881 -0
  190. package/Tests/Server/Utils/DataSource/RestApiConnector.test.ts +1020 -0
  191. package/Tests/Server/Utils/DataSource/SqlQueryGuard.test.ts +425 -0
  192. package/Tests/Server/Utils/DataSource/SqlResultShaper.test.ts +555 -0
  193. package/Tests/Server/Utils/DataSource/SqlServerConnector.test.ts +934 -0
  194. package/Tests/Server/Utils/Database/PostgresErrorTranslator.test.ts +228 -7
  195. package/Tests/Server/Utils/InProcessMemo.test.ts +292 -0
  196. package/Tests/Server/Utils/InstanceHealth/TelemetryIngestion.test.ts +960 -0
  197. package/Tests/Server/Utils/MicrosoftTeamsWebhookUrlValidation.test.ts +103 -0
  198. package/Tests/Server/Utils/Monitor/MonitorMetricResourceAttributes.test.ts +336 -0
  199. package/Tests/Server/Utils/OfflineAssetHygiene.test.ts +521 -0
  200. package/Tests/Server/Utils/ResponseRenderAnalytics.test.ts +143 -0
  201. package/Tests/Server/Utils/SSRFProtection.test.ts +193 -0
  202. package/Tests/Server/Utils/StatusPageSubscriberWebhook.test.ts +101 -0
  203. package/Tests/Server/Utils/TailwindBuildCopy.test.ts +225 -0
  204. package/Tests/Server/Utils/Telemetry/ResourceHeartbeatL1Memo.test.ts +355 -0
  205. package/Tests/Server/Utils/Telemetry/TelemetryFanInWriter.test.ts +128 -0
  206. package/Tests/Server/Utils/Telemetry/TelemetryUtilAttributeKeys.test.ts +381 -0
  207. package/Tests/Server/Utils/Telemetry.test.ts +87 -0
  208. package/Tests/Server/Utils/VendorAssetIntegrity.test.ts +343 -0
  209. package/Tests/Server/Utils/VendorAssets.test.ts +671 -0
  210. package/Tests/Server/Views/OfflineRender.test.ts +297 -0
  211. package/Tests/Types/Dashboard/DataSourceComponentTypes.test.ts +618 -0
  212. package/Tests/Types/DateClickhouseFormat.test.ts +192 -0
  213. package/Tests/Types/Password.test.ts +363 -0
  214. package/Tests/UI/Components/ConfirmModal.test.tsx +7 -0
  215. package/Tests/UI/Components/ErrorBoundary.test.tsx +53 -0
  216. package/Tests/UI/Components/Modal.test.tsx +281 -1
  217. package/Tests/UI/Components/ObjectIdFilterPipeline.test.tsx +396 -0
  218. package/Tests/UI/Components/StatusPage/ResourceGroupNavigator.test.tsx +1147 -0
  219. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +116 -1
  220. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
  221. package/Tests/Utils/Analytics.test.ts +23 -0
  222. package/Tests/Utils/Dashboard/Components/DashboardDataSourceComponents.test.ts +640 -0
  223. package/Tests/Utils/DataSource/DataSourceQueryText.test.ts +138 -0
  224. package/Tests/Utils/DataSource/DataSourceValueReducer.test.ts +526 -0
  225. package/Tests/Utils/Metrics/MetricResourceAttributeUtil.test.ts +691 -0
  226. package/Tests/Utils/StatusPage/GroupHierarchyView.test.ts +1452 -0
  227. package/Tests/Utils/StatusPage/ResourceExplorer.test.ts +931 -0
  228. package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +288 -0
  229. package/Tests/Utils/Telemetry/IngestionTimestamp.test.ts +170 -0
  230. package/Types/AI/AIInsightEvidence.ts +6 -0
  231. package/Types/Analytics/RevenueEvent.ts +31 -0
  232. package/Types/Dashboard/DashboardComponentType.ts +31 -0
  233. package/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.ts +27 -0
  234. package/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.ts +32 -0
  235. package/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.ts +30 -0
  236. package/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.ts +55 -0
  237. package/Types/DataSource/DataSourceLimits.ts +62 -0
  238. package/Types/DataSource/DataSourceQueryConfig.ts +41 -0
  239. package/Types/DataSource/DataSourceTableResult.ts +38 -0
  240. package/Types/DataSource/DataSourceType.ts +213 -0
  241. package/Types/Date.ts +43 -3
  242. package/Types/Password.ts +64 -0
  243. package/Types/Permission.ts +46 -0
  244. package/Types/UserAuthenticationStatus.ts +34 -0
  245. package/UI/Components/Button/Button.tsx +1 -1
  246. package/UI/Components/ErrorBoundary.tsx +459 -108
  247. package/UI/Components/Icon/Icon.tsx +10 -9
  248. package/UI/Components/Modal/ConfirmModal.tsx +6 -1
  249. package/UI/Components/Modal/Modal.tsx +267 -35
  250. package/UI/Components/Modal/ModalFooter.tsx +6 -1
  251. package/UI/Components/MoreMenu/MoreMenu.tsx +19 -4
  252. package/UI/Components/MoreMenu/MoreMenuItem.tsx +6 -1
  253. package/UI/Components/StatusPage/ResourceGrid.tsx +314 -0
  254. package/UI/Components/StatusPage/ResourceGroupNavigator.tsx +808 -0
  255. package/UI/Components/StatusPage/ResourceList.tsx +570 -0
  256. package/UI/Styles/Theme.css +18 -0
  257. package/UI/Utils/API/RequestOptions.ts +7 -0
  258. package/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.ts +1 -0
  259. package/UI/Utils/ModelAPI/ModelAPI.ts +1 -0
  260. package/UI/Utils/TestDataSource.ts +61 -0
  261. package/UI/esbuild-config.js +45 -0
  262. package/Utils/Analytics.ts +15 -0
  263. package/Utils/Dashboard/Components/DashboardDataSourceChartComponent.ts +88 -0
  264. package/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.ts +123 -0
  265. package/Utils/Dashboard/Components/DashboardDataSourceShared.ts +16 -0
  266. package/Utils/Dashboard/Components/DashboardDataSourceTableComponent.ts +72 -0
  267. package/Utils/Dashboard/Components/DashboardDataSourceValueComponent.ts +126 -0
  268. package/Utils/Dashboard/Components/Index.ts +28 -0
  269. package/Utils/DataSource/DataSourceQueryText.ts +94 -0
  270. package/Utils/DataSource/DataSourceValueReducer.ts +156 -0
  271. package/Utils/Metrics/MetricResourceAttributeUtil.ts +380 -0
  272. package/Utils/NetworkDiscovery/ScanTargetUtil.ts +8 -6
  273. package/Utils/StatusPage/GroupHierarchyView.ts +931 -0
  274. package/Utils/StatusPage/ResourceExplorer.ts +853 -0
  275. package/build/dist/Models/DatabaseModels/AIRun.js +34 -0
  276. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  277. package/build/dist/Models/DatabaseModels/DataSource.js +774 -0
  278. package/build/dist/Models/DatabaseModels/DataSource.js.map +1 -0
  279. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  280. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  281. package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js +14 -4
  282. package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js.map +1 -1
  283. package/build/dist/Models/DatabaseModels/User.js +2 -0
  284. package/build/dist/Models/DatabaseModels/User.js.map +1 -1
  285. package/build/dist/Models/DatabaseModels/UserOnCallLog.js +2 -0
  286. package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
  287. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +2 -0
  288. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
  289. package/build/dist/Models/DatabaseModels/UserSession.js +2 -0
  290. package/build/dist/Models/DatabaseModels/UserSession.js.map +1 -1
  291. package/build/dist/Models/DatabaseModels/UserTotpAuth.js +6 -4
  292. package/build/dist/Models/DatabaseModels/UserTotpAuth.js.map +1 -1
  293. package/build/dist/Models/DatabaseModels/UserWebAuthn.js +5 -3
  294. package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
  295. package/build/dist/Server/API/AIInsightAPI.js +34 -4
  296. package/build/dist/Server/API/AIInsightAPI.js.map +1 -1
  297. package/build/dist/Server/API/AIInvestigationAPI.js +23 -0
  298. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  299. package/build/dist/Server/API/DashboardAPI.js +119 -433
  300. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  301. package/build/dist/Server/API/DataSourceAPI.js +173 -0
  302. package/build/dist/Server/API/DataSourceAPI.js.map +1 -0
  303. package/build/dist/Server/API/StatusPageAPI.js +11 -1
  304. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  305. package/build/dist/Server/API/UserAPI.js +94 -2
  306. package/build/dist/Server/API/UserAPI.js.map +1 -1
  307. package/build/dist/Server/Infrastructure/ClickhouseConfig.js +49 -0
  308. package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
  309. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.js +20 -0
  310. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.js.map +1 -0
  311. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.js +19 -0
  312. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.js.map +1 -0
  313. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.js +64 -0
  314. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.js.map +1 -0
  315. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  316. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  317. package/build/dist/Server/Infrastructure/Queue.js +27 -0
  318. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  319. package/build/dist/Server/Infrastructure/QueueWorker.js +13 -0
  320. package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
  321. package/build/dist/Server/Middleware/TelemetryIngest.js +8 -3
  322. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  323. package/build/dist/Server/Services/AIInsightService.js +110 -10
  324. package/build/dist/Server/Services/AIInsightService.js.map +1 -1
  325. package/build/dist/Server/Services/AIRunService.js +34 -0
  326. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  327. package/build/dist/Server/Services/AIService.js +16 -2
  328. package/build/dist/Server/Services/AIService.js.map +1 -1
  329. package/build/dist/Server/Services/AlertService.js +28 -35
  330. package/build/dist/Server/Services/AlertService.js.map +1 -1
  331. package/build/dist/Server/Services/AnalyticsDatabaseService.js +8 -4
  332. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  333. package/build/dist/Server/Services/DataSourceService.js +159 -0
  334. package/build/dist/Server/Services/DataSourceService.js.map +1 -0
  335. package/build/dist/Server/Services/HostService.js +74 -0
  336. package/build/dist/Server/Services/HostService.js.map +1 -1
  337. package/build/dist/Server/Services/IncidentService.js +35 -24
  338. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  339. package/build/dist/Server/Services/Index.js +2 -0
  340. package/build/dist/Server/Services/Index.js.map +1 -1
  341. package/build/dist/Server/Services/MonitorService.js +45 -0
  342. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  343. package/build/dist/Server/Services/MonitorStatusService.js +129 -0
  344. package/build/dist/Server/Services/MonitorStatusService.js.map +1 -1
  345. package/build/dist/Server/Services/OpenTelemetryIngestService.js +222 -159
  346. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  347. package/build/dist/Server/Services/RumSessionPinService.js +7 -15
  348. package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
  349. package/build/dist/Server/Services/StatusPageSubscriberService.js +10 -0
  350. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  351. package/build/dist/Server/Services/UserService.js +241 -10
  352. package/build/dist/Server/Services/UserService.js.map +1 -1
  353. package/build/dist/Server/Types/Database/Permissions/BasePermission.js +6 -0
  354. package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
  355. package/build/dist/Server/Types/Database/Permissions/DeletePermission.js +1 -0
  356. package/build/dist/Server/Types/Database/Permissions/DeletePermission.js.map +1 -1
  357. package/build/dist/Server/Types/Database/Permissions/ReadPermission.js +2 -0
  358. package/build/dist/Server/Types/Database/Permissions/ReadPermission.js.map +1 -1
  359. package/build/dist/Server/Types/Database/Permissions/TenantPermission.js +68 -12
  360. package/build/dist/Server/Types/Database/Permissions/TenantPermission.js.map +1 -1
  361. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +2 -2
  362. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
  363. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +68 -8
  364. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  365. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +1 -0
  366. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  367. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +1 -0
  368. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  369. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.js +97 -0
  370. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.js.map +1 -0
  371. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +17 -15
  372. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
  373. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +178 -54
  374. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
  375. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js +65 -16
  376. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js.map +1 -1
  377. package/build/dist/Server/Utils/AI/SRE/InvestigationTldr.js +303 -0
  378. package/build/dist/Server/Utils/AI/SRE/InvestigationTldr.js.map +1 -0
  379. package/build/dist/Server/Utils/AnalyticsDatabase/InsertDedupContext.js.map +1 -1
  380. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +1261 -0
  381. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -0
  382. package/build/dist/Server/Utils/Dashboard/PublicDashboardViewConfig.js +47 -0
  383. package/build/dist/Server/Utils/Dashboard/PublicDashboardViewConfig.js.map +1 -0
  384. package/build/dist/Server/Utils/DataSource/ConnectorRegistry.js +42 -0
  385. package/build/dist/Server/Utils/DataSource/ConnectorRegistry.js.map +1 -0
  386. package/build/dist/Server/Utils/DataSource/Connectors/ClickHouseConnector.js +187 -0
  387. package/build/dist/Server/Utils/DataSource/Connectors/ClickHouseConnector.js.map +1 -0
  388. package/build/dist/Server/Utils/DataSource/Connectors/ElasticsearchConnector.js +493 -0
  389. package/build/dist/Server/Utils/DataSource/Connectors/ElasticsearchConnector.js.map +1 -0
  390. package/build/dist/Server/Utils/DataSource/Connectors/LokiConnector.js +399 -0
  391. package/build/dist/Server/Utils/DataSource/Connectors/LokiConnector.js.map +1 -0
  392. package/build/dist/Server/Utils/DataSource/Connectors/MySqlConnector.js +195 -0
  393. package/build/dist/Server/Utils/DataSource/Connectors/MySqlConnector.js.map +1 -0
  394. package/build/dist/Server/Utils/DataSource/Connectors/PostgresConnector.js +149 -0
  395. package/build/dist/Server/Utils/DataSource/Connectors/PostgresConnector.js.map +1 -0
  396. package/build/dist/Server/Utils/DataSource/Connectors/PrometheusConnector.js +362 -0
  397. package/build/dist/Server/Utils/DataSource/Connectors/PrometheusConnector.js.map +1 -0
  398. package/build/dist/Server/Utils/DataSource/Connectors/RestApiConnector.js +342 -0
  399. package/build/dist/Server/Utils/DataSource/Connectors/RestApiConnector.js.map +1 -0
  400. package/build/dist/Server/Utils/DataSource/Connectors/SqlServerConnector.js +186 -0
  401. package/build/dist/Server/Utils/DataSource/Connectors/SqlServerConnector.js.map +1 -0
  402. package/build/dist/Server/Utils/DataSource/EgressGuard.js +305 -0
  403. package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -0
  404. package/build/dist/Server/Utils/DataSource/HttpFetch.js +134 -0
  405. package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -0
  406. package/build/dist/Server/Utils/DataSource/SqlQueryGuard.js +331 -0
  407. package/build/dist/Server/Utils/DataSource/SqlQueryGuard.js.map +1 -0
  408. package/build/dist/Server/Utils/DataSource/SqlResultShaper.js +280 -0
  409. package/build/dist/Server/Utils/DataSource/SqlResultShaper.js.map +1 -0
  410. package/build/dist/Server/Utils/DataSource/Types.js +2 -0
  411. package/build/dist/Server/Utils/DataSource/Types.js.map +1 -0
  412. package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js +103 -9
  413. package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js.map +1 -1
  414. package/build/dist/Server/Utils/InProcessMemo.js +113 -0
  415. package/build/dist/Server/Utils/InProcessMemo.js.map +1 -0
  416. package/build/dist/Server/Utils/InstanceHealth/TelemetryIngestion.js +406 -0
  417. package/build/dist/Server/Utils/InstanceHealth/TelemetryIngestion.js.map +1 -0
  418. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +34 -0
  419. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  420. package/build/dist/Server/Utils/Monitor/MonitorResource.js +14 -0
  421. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  422. package/build/dist/Server/Utils/Response.js +9 -1
  423. package/build/dist/Server/Utils/Response.js.map +1 -1
  424. package/build/dist/Server/Utils/SSRFProtection.js +192 -0
  425. package/build/dist/Server/Utils/SSRFProtection.js.map +1 -0
  426. package/build/dist/Server/Utils/StartServer.js +7 -0
  427. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  428. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js +24 -0
  429. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js.map +1 -1
  430. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +25 -11
  431. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
  432. package/build/dist/Server/Utils/Telemetry/IngestionTimestamp.js +32 -0
  433. package/build/dist/Server/Utils/Telemetry/IngestionTimestamp.js.map +1 -0
  434. package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js +92 -5
  435. package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -1
  436. package/build/dist/Server/Utils/Telemetry/Telemetry.js +92 -6
  437. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  438. package/build/dist/Server/Utils/Telemetry.js +93 -6
  439. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  440. package/build/dist/Server/Utils/VendorAssets.js +121 -0
  441. package/build/dist/Server/Utils/VendorAssets.js.map +1 -0
  442. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +25 -4
  443. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  444. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +5 -0
  445. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  446. package/build/dist/Types/Analytics/RevenueEvent.js +26 -0
  447. package/build/dist/Types/Analytics/RevenueEvent.js.map +1 -0
  448. package/build/dist/Types/Dashboard/DashboardComponentType.js +27 -0
  449. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  450. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.js +2 -0
  451. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.js.map +1 -0
  452. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.js +2 -0
  453. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.js.map +1 -0
  454. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.js +2 -0
  455. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.js.map +1 -0
  456. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.js +16 -0
  457. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.js.map +1 -0
  458. package/build/dist/Types/DataSource/DataSourceLimits.js +47 -0
  459. package/build/dist/Types/DataSource/DataSourceLimits.js.map +1 -0
  460. package/build/dist/Types/DataSource/DataSourceQueryConfig.js +10 -0
  461. package/build/dist/Types/DataSource/DataSourceQueryConfig.js.map +1 -0
  462. package/build/dist/Types/DataSource/DataSourceTableResult.js +14 -0
  463. package/build/dist/Types/DataSource/DataSourceTableResult.js.map +1 -0
  464. package/build/dist/Types/DataSource/DataSourceType.js +183 -0
  465. package/build/dist/Types/DataSource/DataSourceType.js.map +1 -0
  466. package/build/dist/Types/Date.js +38 -3
  467. package/build/dist/Types/Date.js.map +1 -1
  468. package/build/dist/Types/Password.js +56 -0
  469. package/build/dist/Types/Password.js.map +1 -0
  470. package/build/dist/Types/Permission.js +42 -0
  471. package/build/dist/Types/Permission.js.map +1 -1
  472. package/build/dist/Types/UserAuthenticationStatus.js +2 -0
  473. package/build/dist/Types/UserAuthenticationStatus.js.map +1 -0
  474. package/build/dist/UI/Components/ErrorBoundary.js +388 -72
  475. package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
  476. package/build/dist/UI/Components/Icon/Icon.js +10 -4
  477. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  478. package/build/dist/UI/Components/Modal/ConfirmModal.js +1 -1
  479. package/build/dist/UI/Components/Modal/ConfirmModal.js.map +1 -1
  480. package/build/dist/UI/Components/Modal/Modal.js +178 -19
  481. package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
  482. package/build/dist/UI/Components/Modal/ModalFooter.js +3 -1
  483. package/build/dist/UI/Components/Modal/ModalFooter.js.map +1 -1
  484. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +9 -6
  485. package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
  486. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +7 -1
  487. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
  488. package/build/dist/UI/Components/StatusPage/ResourceGrid.js +119 -0
  489. package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -0
  490. package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js +354 -0
  491. package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js.map +1 -0
  492. package/build/dist/UI/Components/StatusPage/ResourceList.js +203 -0
  493. package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -0
  494. package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js +1 -6
  495. package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js.map +1 -1
  496. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +3 -8
  497. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
  498. package/build/dist/UI/Utils/TestDataSource.js +39 -0
  499. package/build/dist/UI/Utils/TestDataSource.js.map +1 -0
  500. package/build/dist/Utils/Analytics.js +4 -0
  501. package/build/dist/Utils/Analytics.js.map +1 -1
  502. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceChartComponent.js +79 -0
  503. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceChartComponent.js.map +1 -0
  504. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.js +111 -0
  505. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.js.map +1 -0
  506. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceShared.js +15 -0
  507. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceShared.js.map +1 -0
  508. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceTableComponent.js +62 -0
  509. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceTableComponent.js.map +1 -0
  510. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceValueComponent.js +112 -0
  511. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceValueComponent.js.map +1 -0
  512. package/build/dist/Utils/Dashboard/Components/Index.js +16 -0
  513. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  514. package/build/dist/Utils/DataSource/DataSourceQueryText.js +64 -0
  515. package/build/dist/Utils/DataSource/DataSourceQueryText.js.map +1 -0
  516. package/build/dist/Utils/DataSource/DataSourceValueReducer.js +124 -0
  517. package/build/dist/Utils/DataSource/DataSourceValueReducer.js.map +1 -0
  518. package/build/dist/Utils/Metrics/MetricResourceAttributeUtil.js +281 -0
  519. package/build/dist/Utils/Metrics/MetricResourceAttributeUtil.js.map +1 -0
  520. package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js +8 -6
  521. package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js.map +1 -1
  522. package/build/dist/Utils/StatusPage/GroupHierarchyView.js +560 -0
  523. package/build/dist/Utils/StatusPage/GroupHierarchyView.js.map +1 -0
  524. package/build/dist/Utils/StatusPage/ResourceExplorer.js +519 -0
  525. package/build/dist/Utils/StatusPage/ResourceExplorer.js.map +1 -0
  526. package/jest.config.json +1 -0
  527. package/package.json +5 -1
  528. package/tsconfig.json +12 -10
@@ -0,0 +1,331 @@
1
+ import BadDataException from "../../../Types/Exception/BadDataException";
2
+ /*
3
+ * Read-only guard + time-macro interpolation for SQL sent to external Data
4
+ * Sources (PostgreSQL, MySQL, SQL Server, ClickHouse).
5
+ *
6
+ * Defense in depth: this classifier is the FIRST layer, applied identically
7
+ * to every engine; connectors add server-enforced layers where the engine
8
+ * supports them (pg `default_transaction_read_only=on`, MySQL
9
+ * `SET SESSION TRANSACTION READ ONLY` + single-statement driver mode,
10
+ * ClickHouse `readonly=1`). SQL Server has no session read-only mode, so
11
+ * this classifier — plus the recommendation to connect with a read-only
12
+ * login — is its enforcement, and the classifier is written to be sound
13
+ * for T-SQL specifically:
14
+ *
15
+ * - `#` is NOT treated as a comment. It is one in MySQL, but in T-SQL
16
+ * `#name` is a temp table — blanking from `#` to end-of-line would hide
17
+ * a smuggled `; DROP ...` from the classifier while SQL Server executed
18
+ * it. MySQL users must write `--` comments instead (false-rejection is
19
+ * the safe failure mode).
20
+ * - Backslash-quote (`\'`) is REJECTED outright rather than parsed:
21
+ * MySQL/ClickHouse treat it as an escaped quote, PostgreSQL (standard
22
+ * conforming strings) as a literal backslash ending the string — two
23
+ * engines, two parse trees, and whichever one the classifier picked
24
+ * would be exploitable on the other. Users write `''` instead, which
25
+ * every engine accepts.
26
+ *
27
+ * The classifier works on a STRIPPED copy of the query: contents of string
28
+ * literals, quoted identifiers and comments are blanked first, so
29
+ * `SELECT 'DROP TABLE x'` passes while comment-smuggling cannot. A column
30
+ * literally named `delete` must be quoted — an accepted false-positive
31
+ * cost. Divergences that remain (e.g. MySQL not nesting block comments)
32
+ * are contained by that engine's server-enforced layer.
33
+ */
34
+ const ALLOWED_HEAD_KEYWORDS = [
35
+ "SELECT",
36
+ "WITH",
37
+ "SHOW",
38
+ "EXPLAIN",
39
+ "DESCRIBE",
40
+ "DESC",
41
+ ];
42
+ /*
43
+ * Any of these appearing ANYWHERE (outside strings/comments/quoted
44
+ * identifiers) rejects the query. Notes:
45
+ * - INTO catches `SELECT ... INTO table` (pg/mssql) and MySQL's
46
+ * `SELECT ... INTO OUTFILE`.
47
+ * - WITH ... DELETE/INSERT data-modifying CTEs are caught by the DML
48
+ * words themselves, which is why the head check alone is not enough.
49
+ * - SET catches session tampering (`SET GLOBAL`, `SET ROLE`).
50
+ * - ANALYZE is intentionally allowed so `EXPLAIN ANALYZE SELECT ...`
51
+ * works; under a read-only transaction it cannot write.
52
+ * - SYSTEM is intentionally NOT listed: `system.*` tables are the most
53
+ * common ClickHouse introspection target and the head check already
54
+ * stops `SYSTEM ...` commands.
55
+ */
56
+ const FORBIDDEN_KEYWORDS = [
57
+ "INSERT",
58
+ "UPDATE",
59
+ "DELETE",
60
+ "MERGE",
61
+ "UPSERT",
62
+ "REPLACE",
63
+ "DROP",
64
+ "ALTER",
65
+ "CREATE",
66
+ "TRUNCATE",
67
+ "RENAME",
68
+ "GRANT",
69
+ "REVOKE",
70
+ "EXEC",
71
+ "EXECUTE",
72
+ "CALL",
73
+ "DO",
74
+ "COPY",
75
+ "INTO",
76
+ "SET",
77
+ "LOCK",
78
+ "UNLOCK",
79
+ "PREPARE",
80
+ "DEALLOCATE",
81
+ "BEGIN",
82
+ "COMMIT",
83
+ "ROLLBACK",
84
+ "SAVEPOINT",
85
+ "VACUUM",
86
+ "REINDEX",
87
+ "CLUSTER",
88
+ "CHECKPOINT",
89
+ "LISTEN",
90
+ "NOTIFY",
91
+ "REFRESH",
92
+ "LOAD",
93
+ "HANDLER",
94
+ "OUTFILE",
95
+ "DUMPFILE",
96
+ "SHUTDOWN",
97
+ "KILL",
98
+ "USE",
99
+ "ATTACH",
100
+ "DETACH",
101
+ "OPTIMIZE",
102
+ // T-SQL specifics (SQL Server batches don't even need semicolons).
103
+ "BACKUP",
104
+ "RESTORE",
105
+ "DBCC",
106
+ "RECONFIGURE",
107
+ "WAITFOR",
108
+ "OPENQUERY",
109
+ "OPENROWSET",
110
+ "OPENDATASOURCE",
111
+ "OPENXML",
112
+ ];
113
+ /*
114
+ * SQL Server system / extended stored procedures (sp_configure,
115
+ * xp_cmdshell, ...) — callable without EXEC in some positions, so they get
116
+ * their own pattern instead of a keyword entry.
117
+ */
118
+ const FORBIDDEN_PATTERNS = [
119
+ {
120
+ pattern: /\b(?:xp_|sp_)\w+/i,
121
+ description: "system stored procedures (sp_*/xp_*)",
122
+ },
123
+ ];
124
+ /*
125
+ * A backslash immediately followed by a quote — the escape style whose
126
+ * meaning differs per engine (see the header comment), so it is rejected
127
+ * outright.
128
+ */
129
+ const BACKSLASH_ESCAPED_QUOTE_REGEX = /\\['"]/;
130
+ export default class SqlQueryGuard {
131
+ /*
132
+ * Blank the contents of comments, string literals and quoted identifiers
133
+ * (replaced by spaces so token boundaries survive). Handles:
134
+ * -- line comments
135
+ * slash-star block comments (nested, as PostgreSQL and T-SQL allow)
136
+ * 'single quotes' with '' escaping
137
+ * "double-quoted idents" with "" escaping
138
+ * `backtick idents` (MySQL/ClickHouse)
139
+ * [bracket idents] (SQL Server)
140
+ * $tag$ dollar quotes $tag$ (PostgreSQL/ClickHouse)
141
+ *
142
+ * Unterminated regions blank to end-of-input, which fails safe: content
143
+ * is hidden from the ENGINE too or the engine errors on parse.
144
+ */
145
+ static stripLiteralsAndComments(sql) {
146
+ const output = [];
147
+ const length = sql.length;
148
+ let index = 0;
149
+ const blank = (count) => {
150
+ for (let blanked = 0; blanked < count; blanked++) {
151
+ output.push(" ");
152
+ }
153
+ index += count;
154
+ };
155
+ while (index < length) {
156
+ const char = sql[index];
157
+ const next = index + 1 < length ? sql[index + 1] : "";
158
+ // Line comments: --
159
+ if (char === "-" && next === "-") {
160
+ while (index < length && sql[index] !== "\n") {
161
+ blank(1);
162
+ }
163
+ continue;
164
+ }
165
+ // Block comments, nested (PostgreSQL and T-SQL nest).
166
+ if (char === "/" && next === "*") {
167
+ let depth = 0;
168
+ while (index < length) {
169
+ if (sql[index] === "/" && sql[index + 1] === "*") {
170
+ depth++;
171
+ blank(2);
172
+ continue;
173
+ }
174
+ if (sql[index] === "*" && sql[index + 1] === "/") {
175
+ depth--;
176
+ blank(2);
177
+ if (depth === 0) {
178
+ break;
179
+ }
180
+ continue;
181
+ }
182
+ blank(1);
183
+ }
184
+ continue;
185
+ }
186
+ // Single-quoted string; '' escape only (see \' rejection above).
187
+ if (char === "'") {
188
+ blank(1);
189
+ while (index < length) {
190
+ if (sql[index] === "'" && sql[index + 1] === "'") {
191
+ blank(2);
192
+ continue;
193
+ }
194
+ if (sql[index] === "'") {
195
+ blank(1);
196
+ break;
197
+ }
198
+ blank(1);
199
+ }
200
+ continue;
201
+ }
202
+ // Double-quoted identifier; "" escape.
203
+ if (char === '"') {
204
+ blank(1);
205
+ while (index < length) {
206
+ if (sql[index] === '"' && sql[index + 1] === '"') {
207
+ blank(2);
208
+ continue;
209
+ }
210
+ if (sql[index] === '"') {
211
+ blank(1);
212
+ break;
213
+ }
214
+ blank(1);
215
+ }
216
+ continue;
217
+ }
218
+ // Backtick identifier (MySQL/ClickHouse); `` escape.
219
+ if (char === "`") {
220
+ blank(1);
221
+ while (index < length) {
222
+ if (sql[index] === "`" && sql[index + 1] === "`") {
223
+ blank(2);
224
+ continue;
225
+ }
226
+ if (sql[index] === "`") {
227
+ blank(1);
228
+ break;
229
+ }
230
+ blank(1);
231
+ }
232
+ continue;
233
+ }
234
+ // Bracket identifier (SQL Server); ]] escape.
235
+ if (char === "[") {
236
+ blank(1);
237
+ while (index < length) {
238
+ if (sql[index] === "]" && sql[index + 1] === "]") {
239
+ blank(2);
240
+ continue;
241
+ }
242
+ if (sql[index] === "]") {
243
+ blank(1);
244
+ break;
245
+ }
246
+ blank(1);
247
+ }
248
+ continue;
249
+ }
250
+ // Dollar-quoted string (PostgreSQL/ClickHouse): $$..$$ or $tag$..$tag$.
251
+ if (char === "$") {
252
+ const tagMatch = sql
253
+ .substring(index)
254
+ .match(/^\$[A-Za-z_]*\$/);
255
+ if (tagMatch) {
256
+ const tag = tagMatch[0];
257
+ const closeIndex = sql.indexOf(tag, index + tag.length);
258
+ const end = closeIndex === -1 ? length : closeIndex + tag.length;
259
+ blank(end - index);
260
+ continue;
261
+ }
262
+ }
263
+ output.push(char);
264
+ index++;
265
+ }
266
+ return output.join("");
267
+ }
268
+ /*
269
+ * Throws BadDataException unless the query is a single read-only
270
+ * statement.
271
+ */
272
+ static assertReadOnlyQuery(sql) {
273
+ if (!sql || sql.trim().length === 0) {
274
+ throw new BadDataException("Query is required.");
275
+ }
276
+ /*
277
+ * Backslash-escaped quotes parse differently across engines (see the
278
+ * header comment) — reject rather than guess.
279
+ */
280
+ if (BACKSLASH_ESCAPED_QUOTE_REGEX.test(sql)) {
281
+ throw new BadDataException("Backslash-escaped quotes are not allowed in data source queries. Use doubled quotes ('') to escape a quote character.");
282
+ }
283
+ const stripped = this.stripLiteralsAndComments(sql);
284
+ // Single statement only: any ';' other than trailing rejects.
285
+ const withoutTrailingSemicolon = stripped.replace(/;\s*$/, "");
286
+ if (withoutTrailingSemicolon.includes(";")) {
287
+ throw new BadDataException("Only a single SQL statement is allowed per query.");
288
+ }
289
+ const firstWordMatch = withoutTrailingSemicolon.match(/[A-Za-z_]+/);
290
+ const firstWord = firstWordMatch
291
+ ? firstWordMatch[0].toUpperCase()
292
+ : "";
293
+ if (!ALLOWED_HEAD_KEYWORDS.includes(firstWord)) {
294
+ throw new BadDataException(`Only read-only queries are allowed (must start with ${ALLOWED_HEAD_KEYWORDS.join(", ")}).`);
295
+ }
296
+ for (const keyword of FORBIDDEN_KEYWORDS) {
297
+ const pattern = new RegExp(`\\b${keyword}\\b`, "i");
298
+ if (pattern.test(withoutTrailingSemicolon)) {
299
+ throw new BadDataException(`Query contains a keyword that is not allowed in read-only data source queries: ${keyword}. Quote it if it is a column or table name.`);
300
+ }
301
+ }
302
+ for (const forbidden of FORBIDDEN_PATTERNS) {
303
+ if (forbidden.pattern.test(withoutTrailingSemicolon)) {
304
+ throw new BadDataException(`Query contains ${forbidden.description}, which is not allowed in read-only data source queries.`);
305
+ }
306
+ }
307
+ }
308
+ static formatUtcDateTime(date) {
309
+ const pad = (value) => {
310
+ return value.toString().padStart(2, "0");
311
+ };
312
+ return `${date.getUTCFullYear()}-${pad(date.getUTCMonth() + 1)}-${pad(date.getUTCDate())} ${pad(date.getUTCHours())}:${pad(date.getUTCMinutes())}:${pad(date.getUTCSeconds())}`;
313
+ }
314
+ /*
315
+ * Replace dashboard time macros with concrete values. Longer tokens are
316
+ * replaced first so $__startTimeMs is not corrupted by the $__startTime
317
+ * replacement. Timestamp literals are quoted 'YYYY-MM-DD HH:MM:SS' in
318
+ * UTC — every supported engine parses that form; sessions are expected
319
+ * to run in UTC (documented in the query editor help text).
320
+ */
321
+ static applyTimeMacros(sql, startDate, endDate) {
322
+ const rangeSeconds = Math.max(Math.floor((endDate.getTime() - startDate.getTime()) / 1000), 0);
323
+ return sql
324
+ .replace(/\$__startTimeMs\b/g, startDate.getTime().toString())
325
+ .replace(/\$__endTimeMs\b/g, endDate.getTime().toString())
326
+ .replace(/\$__startTime\b/g, `'${this.formatUtcDateTime(startDate)}'`)
327
+ .replace(/\$__endTime\b/g, `'${this.formatUtcDateTime(endDate)}'`)
328
+ .replace(/\$__rangeSeconds\b/g, rangeSeconds.toString());
329
+ }
330
+ }
331
+ //# sourceMappingURL=SqlQueryGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqlQueryGuard.js","sourceRoot":"","sources":["../../../../../Server/Utils/DataSource/SqlQueryGuard.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,2CAA2C,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,MAAM,qBAAqB,GAAkB;IAC3C,QAAQ;IACR,MAAM;IACN,MAAM;IACN,SAAS;IACT,UAAU;IACV,MAAM;CACP,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,kBAAkB,GAAkB;IACxC,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,MAAM;IACN,SAAS;IACT,MAAM;IACN,IAAI;IACJ,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,OAAO;IACP,QAAQ;IACR,UAAU;IACV,WAAW;IACX,QAAQ;IACR,SAAS;IACT,SAAS;IACT,YAAY;IACZ,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,MAAM;IACN,SAAS;IACT,SAAS;IACT,UAAU;IACV,UAAU;IACV,MAAM;IACN,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,mEAAmE;IACnE,QAAQ;IACR,SAAS;IACT,MAAM;IACN,aAAa;IACb,SAAS;IACT,WAAW;IACX,YAAY;IACZ,gBAAgB;IAChB,SAAS;CACV,CAAC;AAEF;;;;GAIG;AACH,MAAM,kBAAkB,GAAoD;IAC1E;QACE,OAAO,EAAE,mBAAmB;QAC5B,WAAW,EAAE,sCAAsC;KACpD;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,6BAA6B,GAAW,QAAQ,CAAC;AAEvD,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC;;;;;;;;;;;;;OAaG;IACI,MAAM,CAAC,wBAAwB,CAAC,GAAW;QAChD,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,MAAM,MAAM,GAAW,GAAG,CAAC,MAAM,CAAC;QAClC,IAAI,KAAK,GAAW,CAAC,CAAC;QAEtB,MAAM,KAAK,GAA4B,CAAC,KAAa,EAAQ,EAAE;YAC7D,KAAK,IAAI,OAAO,GAAW,CAAC,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;gBACzD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YACD,KAAK,IAAI,KAAK,CAAC;QACjB,CAAC,CAAC;QAEF,OAAO,KAAK,GAAG,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,GAAW,GAAG,CAAC,KAAK,CAAE,CAAC;YACjC,MAAM,IAAI,GAAW,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAE/D,oBAAoB;YACpB,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjC,OAAO,KAAK,GAAG,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC7C,KAAK,CAAC,CAAC,CAAC,CAAC;gBACX,CAAC;gBACD,SAAS;YACX,CAAC;YAED,sDAAsD;YACtD,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjC,IAAI,KAAK,GAAW,CAAC,CAAC;gBACtB,OAAO,KAAK,GAAG,MAAM,EAAE,CAAC;oBACtB,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBACjD,KAAK,EAAE,CAAC;wBACR,KAAK,CAAC,CAAC,CAAC,CAAC;wBACT,SAAS;oBACX,CAAC;oBACD,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBACjD,KAAK,EAAE,CAAC;wBACR,KAAK,CAAC,CAAC,CAAC,CAAC;wBACT,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;4BAChB,MAAM;wBACR,CAAC;wBACD,SAAS;oBACX,CAAC;oBACD,KAAK,CAAC,CAAC,CAAC,CAAC;gBACX,CAAC;gBACD,SAAS;YACX,CAAC;YAED,iEAAiE;YACjE,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,KAAK,CAAC,CAAC,CAAC,CAAC;gBACT,OAAO,KAAK,GAAG,MAAM,EAAE,CAAC;oBACtB,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBACjD,KAAK,CAAC,CAAC,CAAC,CAAC;wBACT,SAAS;oBACX,CAAC;oBACD,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;wBACvB,KAAK,CAAC,CAAC,CAAC,CAAC;wBACT,MAAM;oBACR,CAAC;oBACD,KAAK,CAAC,CAAC,CAAC,CAAC;gBACX,CAAC;gBACD,SAAS;YACX,CAAC;YAED,uCAAuC;YACvC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,KAAK,CAAC,CAAC,CAAC,CAAC;gBACT,OAAO,KAAK,GAAG,MAAM,EAAE,CAAC;oBACtB,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBACjD,KAAK,CAAC,CAAC,CAAC,CAAC;wBACT,SAAS;oBACX,CAAC;oBACD,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;wBACvB,KAAK,CAAC,CAAC,CAAC,CAAC;wBACT,MAAM;oBACR,CAAC;oBACD,KAAK,CAAC,CAAC,CAAC,CAAC;gBACX,CAAC;gBACD,SAAS;YACX,CAAC;YAED,qDAAqD;YACrD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,KAAK,CAAC,CAAC,CAAC,CAAC;gBACT,OAAO,KAAK,GAAG,MAAM,EAAE,CAAC;oBACtB,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBACjD,KAAK,CAAC,CAAC,CAAC,CAAC;wBACT,SAAS;oBACX,CAAC;oBACD,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;wBACvB,KAAK,CAAC,CAAC,CAAC,CAAC;wBACT,MAAM;oBACR,CAAC;oBACD,KAAK,CAAC,CAAC,CAAC,CAAC;gBACX,CAAC;gBACD,SAAS;YACX,CAAC;YAED,8CAA8C;YAC9C,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,KAAK,CAAC,CAAC,CAAC,CAAC;gBACT,OAAO,KAAK,GAAG,MAAM,EAAE,CAAC;oBACtB,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBACjD,KAAK,CAAC,CAAC,CAAC,CAAC;wBACT,SAAS;oBACX,CAAC;oBACD,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;wBACvB,KAAK,CAAC,CAAC,CAAC,CAAC;wBACT,MAAM;oBACR,CAAC;oBACD,KAAK,CAAC,CAAC,CAAC,CAAC;gBACX,CAAC;gBACD,SAAS;YACX,CAAC;YAED,wEAAwE;YACxE,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,MAAM,QAAQ,GAA4B,GAAG;qBAC1C,SAAS,CAAC,KAAK,CAAC;qBAChB,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAC5B,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,GAAG,GAAW,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAChC,MAAM,UAAU,GAAW,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;oBAChE,MAAM,GAAG,GACP,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC;oBACvD,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;oBACnB,SAAS;gBACX,CAAC;YACH,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,KAAK,EAAE,CAAC;QACV,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,mBAAmB,CAAC,GAAW;QAC3C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;QACnD,CAAC;QAED;;;WAGG;QACH,IAAI,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,gBAAgB,CACxB,uHAAuH,CACxH,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAW,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAE5D,8DAA8D;QAC9D,MAAM,wBAAwB,GAAW,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,wBAAwB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,gBAAgB,CACxB,mDAAmD,CACpD,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAClB,wBAAwB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAW,cAAc;YACtC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YACjC,CAAC,CAAC,EAAE,CAAC;QAEP,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,gBAAgB,CACxB,uDAAuD,qBAAqB,CAAC,IAAI,CAC/E,IAAI,CACL,IAAI,CACN,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;YACzC,MAAM,OAAO,GAAW,IAAI,MAAM,CAAC,MAAM,OAAO,KAAK,EAAE,GAAG,CAAC,CAAC;YAC5D,IAAI,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,gBAAgB,CACxB,kFAAkF,OAAO,6CAA6C,CACvI,CAAC;YACJ,CAAC;QACH,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,kBAAkB,EAAE,CAAC;YAC3C,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC;gBACrD,MAAM,IAAI,gBAAgB,CACxB,kBAAkB,SAAS,CAAC,WAAW,0DAA0D,CAClG,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,IAAU;QACzC,MAAM,GAAG,GAA8B,CAAC,KAAa,EAAU,EAAE;YAC/D,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3C,CAAC,CAAC;QACF,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CACnE,IAAI,CAAC,UAAU,EAAE,CAClB,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,GAAG,CAC9D,IAAI,CAAC,aAAa,EAAE,CACrB,EAAE,CAAC;IACN,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,eAAe,CAC3B,GAAW,EACX,SAAe,EACf,OAAa;QAEb,MAAM,YAAY,GAAW,IAAI,CAAC,GAAG,CACnC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,EAC5D,CAAC,CACF,CAAC;QAEF,OAAO,GAAG;aACP,OAAO,CAAC,oBAAoB,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;aAC7D,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;aACzD,OAAO,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC;aACrE,OAAO,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC;aACjE,OAAO,CAAC,qBAAqB,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;CACF"}
@@ -0,0 +1,280 @@
1
+ import { DataSourceTableColumnType, } from "../../../Types/DataSource/DataSourceTableResult";
2
+ import BadDataException from "../../../Types/Exception/BadDataException";
3
+ /*
4
+ * Shared row → chart/table shaping for every SQL-family connector
5
+ * (PostgreSQL, MySQL, SQL Server, ClickHouse). One implementation means one
6
+ * behavior: the same query against any engine renders the same chart.
7
+ *
8
+ * Time-series convention (Grafana-compatible):
9
+ * - a TIME column named time / timestamp / date / ts (case-insensitive);
10
+ * - a numeric VALUE column named value (or the first numeric non-time
11
+ * column);
12
+ * - every OTHER column becomes a series label — rows sharing the same
13
+ * label values merge into one series. The chart layer groups on the
14
+ * `attributes` object of each data point.
15
+ */
16
+ const TIME_COLUMN_NAMES = ["time", "timestamp", "date", "ts"];
17
+ const VALUE_COLUMN_NAME = "value";
18
+ /*
19
+ * A 9-19 digit unsigned integer string — an epoch in seconds through
20
+ * nanoseconds. Shorter numeric strings (bare years, YYYYMMDD) stay on the
21
+ * Date-parse path.
22
+ */
23
+ const NUMERIC_EPOCH_STRING_REGEX = /^\d{9,19}$/;
24
+ export default class SqlResultShaper {
25
+ /*
26
+ * Clamp raw driver rows to the cap. Connectors fetch cap+1 so the shaper
27
+ * can tell "exactly cap" apart from "more than cap".
28
+ */
29
+ static clampRows(rows, maxRows) {
30
+ if (rows.length > maxRows) {
31
+ return { rows: rows.slice(0, maxRows), truncated: true };
32
+ }
33
+ return { rows: rows, truncated: false };
34
+ }
35
+ /*
36
+ * Copy of the probe SqlMonitor's cell coercion semantics: keep JSON-safe
37
+ * primitives, ISO-ify dates, never ship raw binary.
38
+ */
39
+ static coerceCell(value) {
40
+ if (value === null || value === undefined) {
41
+ return null;
42
+ }
43
+ if (typeof value === "number" ||
44
+ typeof value === "boolean" ||
45
+ typeof value === "string") {
46
+ return value;
47
+ }
48
+ if (value instanceof Date) {
49
+ return value.toISOString();
50
+ }
51
+ if (Buffer.isBuffer(value)) {
52
+ return "[binary]";
53
+ }
54
+ if (typeof value === "bigint") {
55
+ return value.toString();
56
+ }
57
+ try {
58
+ return JSON.stringify(value);
59
+ }
60
+ catch (_a) {
61
+ return String(value);
62
+ }
63
+ }
64
+ static findTimeColumn(columnNames) {
65
+ return columnNames.find((name) => {
66
+ return TIME_COLUMN_NAMES.includes(name.toLowerCase());
67
+ });
68
+ }
69
+ static findValueColumn(columnNames, timeColumn, firstRow) {
70
+ const explicit = columnNames.find((name) => {
71
+ return name.toLowerCase() === VALUE_COLUMN_NAME;
72
+ });
73
+ if (explicit) {
74
+ return explicit;
75
+ }
76
+ // First numeric non-time column.
77
+ return columnNames.find((name) => {
78
+ if (name === timeColumn) {
79
+ return false;
80
+ }
81
+ const cell = firstRow[name];
82
+ return (typeof cell === "number" ||
83
+ typeof cell === "bigint" ||
84
+ (typeof cell === "string" &&
85
+ cell.trim() !== "" &&
86
+ Number.isFinite(Number(cell))));
87
+ });
88
+ }
89
+ /*
90
+ * Parse a SQL time cell: Date object, ISO-ish string, or epoch number
91
+ * (ms when >= 1e12, seconds when >= 1e9). Returns null when
92
+ * unparseable.
93
+ */
94
+ static coerceTimestamp(value) {
95
+ if (value instanceof Date) {
96
+ return isNaN(value.getTime()) ? null : value;
97
+ }
98
+ if (typeof value === "number" || typeof value === "bigint") {
99
+ const numeric = Number(value);
100
+ if (!Number.isFinite(numeric) || numeric <= 0) {
101
+ return null;
102
+ }
103
+ if (numeric >= 1e12) {
104
+ return new Date(numeric);
105
+ }
106
+ if (numeric >= 1e9) {
107
+ return new Date(numeric * 1000);
108
+ }
109
+ return null;
110
+ }
111
+ if (typeof value === "string" && value.trim() !== "") {
112
+ const trimmed = value.trim();
113
+ /*
114
+ * Numeric-string epochs: ClickHouse's JSON format serializes
115
+ * 64-bit integers as strings, and REST payloads routinely quote
116
+ * epoch numbers — route them through the same epoch heuristic as
117
+ * native numbers instead of letting new Date('1700000000000')
118
+ * produce Invalid Date and silently drop the row. 9+ digits only,
119
+ * so short numeric strings (bare years) keep the Date-parse path.
120
+ */
121
+ if (NUMERIC_EPOCH_STRING_REGEX.test(trimmed)) {
122
+ return this.coerceTimestamp(Number(trimmed));
123
+ }
124
+ /*
125
+ * Engines commonly return 'YYYY-MM-DD HH:MM:SS' with no zone —
126
+ * treat it as UTC (the macros are UTC, and Date.parse would
127
+ * otherwise apply the server's local zone).
128
+ */
129
+ const spaceSeparated = trimmed.match(/^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}(?:\.\d+)?)$/);
130
+ const normalized = spaceSeparated
131
+ ? `${spaceSeparated[1]}T${spaceSeparated[2]}Z`
132
+ : trimmed;
133
+ const parsed = new Date(normalized);
134
+ return isNaN(parsed.getTime()) ? null : parsed;
135
+ }
136
+ return null;
137
+ }
138
+ static coerceValue(value) {
139
+ if (typeof value === "number") {
140
+ return Number.isFinite(value) ? value : null;
141
+ }
142
+ if (typeof value === "bigint") {
143
+ return Number(value);
144
+ }
145
+ if (typeof value === "string" && value.trim() !== "") {
146
+ const numeric = Number(value);
147
+ return Number.isFinite(numeric) ? numeric : null;
148
+ }
149
+ return null;
150
+ }
151
+ static rowsToTimeSeries(rows, options) {
152
+ const clamped = this.clampRows(rows, options.maxRows);
153
+ if (clamped.rows.length === 0) {
154
+ return { data: [], truncated: false };
155
+ }
156
+ const firstRow = clamped.rows[0];
157
+ const columnNames = Object.keys(firstRow);
158
+ const timeColumn = this.findTimeColumn(columnNames);
159
+ if (!timeColumn) {
160
+ throw new BadDataException(`Time-series queries must return a time column named one of: ${TIME_COLUMN_NAMES.join(", ")}. Got columns: ${columnNames.join(", ")}. Use the Table widget for non-time-series results.`);
161
+ }
162
+ const valueColumn = this.findValueColumn(columnNames, timeColumn, firstRow);
163
+ if (!valueColumn) {
164
+ throw new BadDataException(`Time-series queries must return a numeric column (name it "value"). Got columns: ${columnNames.join(", ")}.`);
165
+ }
166
+ const labelColumns = columnNames.filter((name) => {
167
+ return name !== timeColumn && name !== valueColumn;
168
+ });
169
+ const data = [];
170
+ for (const row of clamped.rows) {
171
+ const timestamp = this.coerceTimestamp(row[timeColumn]);
172
+ const value = this.coerceValue(row[valueColumn]);
173
+ if (timestamp === null || value === null) {
174
+ continue; // skip unplottable rows rather than failing the chart.
175
+ }
176
+ const point = {
177
+ timestamp: timestamp,
178
+ value: value,
179
+ };
180
+ if (labelColumns.length > 0) {
181
+ const attributes = {};
182
+ for (const labelColumn of labelColumns) {
183
+ const cell = this.coerceCell(row[labelColumn]);
184
+ attributes[labelColumn] = cell === null ? "(unset)" : String(cell);
185
+ }
186
+ point["attributes"] = attributes;
187
+ }
188
+ data.push(point);
189
+ }
190
+ return { data: data, truncated: clamped.truncated };
191
+ }
192
+ static sniffColumnType(value) {
193
+ if (typeof value === "number" || typeof value === "bigint") {
194
+ return DataSourceTableColumnType.Number;
195
+ }
196
+ if (typeof value === "boolean") {
197
+ return DataSourceTableColumnType.Boolean;
198
+ }
199
+ if (value instanceof Date) {
200
+ return DataSourceTableColumnType.Date;
201
+ }
202
+ if (value !== null && typeof value === "object") {
203
+ return DataSourceTableColumnType.Json;
204
+ }
205
+ return DataSourceTableColumnType.Text;
206
+ }
207
+ static rowsToTable(rows, options) {
208
+ const clamped = this.clampRows(rows, options.maxRows);
209
+ if (clamped.rows.length === 0) {
210
+ return { columns: [], rows: [], truncated: false };
211
+ }
212
+ /*
213
+ * Column set = union across rows (drivers can omit NULL columns in
214
+ * some row formats); type sniffed from the first non-null cell.
215
+ */
216
+ const columnNames = [];
217
+ for (const row of clamped.rows) {
218
+ for (const name of Object.keys(row)) {
219
+ if (!columnNames.includes(name)) {
220
+ columnNames.push(name);
221
+ }
222
+ }
223
+ }
224
+ const columns = columnNames.map((name) => {
225
+ const sampleRow = clamped.rows.find((row) => {
226
+ return row[name] !== null && row[name] !== undefined;
227
+ });
228
+ return {
229
+ key: name,
230
+ title: name,
231
+ type: this.sniffColumnType(sampleRow ? sampleRow[name] : null),
232
+ };
233
+ });
234
+ const shapedRows = clamped.rows.map((row) => {
235
+ const shaped = {};
236
+ for (const name of columnNames) {
237
+ shaped[name] = this.coerceCell(row[name]);
238
+ }
239
+ return shaped;
240
+ });
241
+ return {
242
+ columns: columns,
243
+ rows: shapedRows,
244
+ truncated: clamped.truncated,
245
+ };
246
+ }
247
+ /*
248
+ * Redact credentials and connection internals from driver errors before
249
+ * they reach API responses (probe SqlMonitor semantics).
250
+ */
251
+ /*
252
+ * Every user-supplied credential on a connection-settings object,
253
+ * including custom header VALUES (write-only in the model, so they can
254
+ * carry tokens) — the standard secret list for sanitizeError so no
255
+ * connector forgets one.
256
+ */
257
+ static collectSecrets(settings) {
258
+ return [
259
+ settings.password,
260
+ settings.apiToken,
261
+ settings.username,
262
+ settings.databaseHost,
263
+ ...Object.values(settings.customHeaders || {}),
264
+ ];
265
+ }
266
+ static sanitizeError(error, secrets) {
267
+ let message = error instanceof Error ? error.message : String(error);
268
+ for (const secret of secrets) {
269
+ if (secret && secret.length >= 4) {
270
+ message = message.split(secret).join("***");
271
+ }
272
+ }
273
+ // DSNs with embedded credentials.
274
+ message = message.replace(/[a-zA-Z]+:\/\/[^\s]*@[^\s]*/g, "[redacted-dsn]");
275
+ // Connection-string password pairs.
276
+ message = message.replace(/(password|pwd)\s*[=:]\s*(\{[^}]*\}|"[^"]*"|'[^']*'|[^;\r\n]+)/gi, "$1=***");
277
+ return message;
278
+ }
279
+ }
280
+ //# sourceMappingURL=SqlResultShaper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqlResultShaper.js","sourceRoot":"","sources":["../../../../../Server/Utils/DataSource/SqlResultShaper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Types.js","sourceRoot":"","sources":["../../../../../Server/Utils/DataSource/Types.ts"],"names":[],"mappings":""}