@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,493 @@
1
+ import { DATA_SOURCE_CONNECT_TIMEOUT_IN_MS, DATA_SOURCE_MAX_SERIES, DATA_SOURCE_MAX_TABLE_ROWS, DATA_SOURCE_MAX_TIME_SERIES_ROWS, DATA_SOURCE_QUERY_TIMEOUT_IN_MS, } from "../../../../Types/DataSource/DataSourceLimits";
2
+ import DataSourceType from "../../../../Types/DataSource/DataSourceType";
3
+ import BadDataException from "../../../../Types/Exception/BadDataException";
4
+ import DataSourceEgressGuard from "../EgressGuard";
5
+ import DataSourceHttpFetch from "../HttpFetch";
6
+ import SqlResultShaper from "../SqlResultShaper";
7
+ /*
8
+ * Connector for Elasticsearch and OpenSearch clusters. Queries are written
9
+ * as Query DSL JSON and POSTed to {url}/{index}/_search; all requests go
10
+ * through DataSourceHttpFetch, which egress-validates the URL and pins the
11
+ * resolved addresses before dialing (the connector additionally runs the
12
+ * egress guard itself before every request).
13
+ *
14
+ * Authentication: DataSourceHttpFetch.buildAuthHeaders sends
15
+ * "Authorization: Bearer <apiToken>" when an API token is set, else HTTP
16
+ * basic auth from username/password. Elasticsearch API keys that need the
17
+ * "Authorization: ApiKey <base64>" scheme should be configured as a custom
18
+ * header named "Authorization" instead — custom headers override the
19
+ * computed Authorization header.
20
+ *
21
+ * Chart queries must contain a date_histogram aggregation (optionally
22
+ * wrapped in a terms aggregation for one series per term); table queries
23
+ * render hits[]._source rows.
24
+ */
25
+ const ERROR_TEXT_MAX_LENGTH = 500;
26
+ // Table widgets cap columns so a wide _source cannot flood the UI.
27
+ const MAX_TABLE_COLUMNS = 50;
28
+ // Bucket keys that are histogram metadata rather than sub-aggregations.
29
+ const DATE_BUCKET_META_KEYS = [
30
+ "key",
31
+ "key_as_string",
32
+ "doc_count",
33
+ ];
34
+ function asRecord(value) {
35
+ if (value !== null && typeof value === "object" && !Array.isArray(value)) {
36
+ return value;
37
+ }
38
+ return null;
39
+ }
40
+ function coerceFiniteNumber(value) {
41
+ if (typeof value === "number") {
42
+ return Number.isFinite(value) ? value : null;
43
+ }
44
+ if (typeof value === "string" && value.trim() !== "") {
45
+ const numeric = Number(value);
46
+ return Number.isFinite(numeric) ? numeric : null;
47
+ }
48
+ return null;
49
+ }
50
+ /*
51
+ * Replace dashboard time macros in the RAW query text before JSON parsing.
52
+ * $__startTimeMs/$__endTimeMs become epoch-millisecond numbers (usable as
53
+ * JSON numbers in range filters); $__startTime/$__endTime become ISO-8601
54
+ * strings WITHOUT quotes — they are meant to sit inside existing JSON
55
+ * string quotes, e.g. "gte": "$__startTime". The Ms variants are replaced
56
+ * first so the shorter token cannot corrupt them.
57
+ */
58
+ export function applyElasticsearchTimeMacros(queryText, startDate, endDate) {
59
+ return queryText
60
+ .replace(/\$__startTimeMs\b/g, startDate.getTime().toString())
61
+ .replace(/\$__endTimeMs\b/g, endDate.getTime().toString())
62
+ .replace(/\$__startTime\b/g, startDate.toISOString())
63
+ .replace(/\$__endTime\b/g, endDate.toISOString());
64
+ }
65
+ /*
66
+ * Macro-substitute and parse the query text into a Query DSL body object.
67
+ * Pure — exported for direct testing.
68
+ */
69
+ export function parseQueryDsl(queryText, startDate, endDate) {
70
+ if (!queryText || queryText.trim() === "") {
71
+ throw new BadDataException("Query is required. Provide an Elasticsearch Query DSL JSON object (for example a query with a date_histogram aggregation).");
72
+ }
73
+ const substituted = applyElasticsearchTimeMacros(queryText, startDate, endDate);
74
+ let parsed = undefined;
75
+ try {
76
+ parsed = JSON.parse(substituted);
77
+ }
78
+ catch (error) {
79
+ throw new BadDataException(`Query is not valid JSON: ${error instanceof Error ? error.message : String(error)}. Elasticsearch queries must be a single Query DSL JSON object.`);
80
+ }
81
+ const record = asRecord(parsed);
82
+ if (!record) {
83
+ throw new BadDataException("Query must be a JSON object (Elasticsearch Query DSL), not an array or primitive value.");
84
+ }
85
+ return record;
86
+ }
87
+ /*
88
+ * Build the _search URL: {url}/{encodedIndex}/_search, index taken from
89
+ * additionalOptions.elasticsearchIndex (default "*", matching every
90
+ * index the credentials can read).
91
+ */
92
+ export function buildElasticsearchSearchUrl(settings) {
93
+ var _a;
94
+ const baseUrl = getTrimmedBaseUrl(settings);
95
+ const rawIndex = (_a = settings.additionalOptions) === null || _a === void 0 ? void 0 : _a["elasticsearchIndex"];
96
+ const index = typeof rawIndex === "string" && rawIndex.trim() !== ""
97
+ ? rawIndex.trim()
98
+ : "*";
99
+ return `${baseUrl}/${encodeURIComponent(index)}/_search`;
100
+ }
101
+ function getTrimmedBaseUrl(settings) {
102
+ if (!settings.url) {
103
+ throw new BadDataException("Elasticsearch data source is missing a URL. Set the base URL of the cluster's HTTP endpoint (for example https://elasticsearch.example.com:9200).");
104
+ }
105
+ return settings.url.trim().replace(/\/+$/, "");
106
+ }
107
+ /*
108
+ * First entry in `record` whose value is an object carrying a `buckets`
109
+ * array — how both date_histogram and terms aggregations shape their
110
+ * responses (ES 6/7/8 and OpenSearch alike). Keyed (`"keyed": true`)
111
+ * responses use an object instead of an array and are not recognized.
112
+ */
113
+ function findBucketAggregation(record) {
114
+ for (const name of Object.keys(record)) {
115
+ const candidate = asRecord(record[name]);
116
+ if (candidate && Array.isArray(candidate["buckets"])) {
117
+ return { name: name, buckets: candidate["buckets"] };
118
+ }
119
+ }
120
+ return null;
121
+ }
122
+ /*
123
+ * String bucket keys must LOOK like dates (YYYY-MM-DD...) before they are
124
+ * fed to Date parsing — V8's lenient parser turns terms keys like "host-1"
125
+ * into valid dates, which would make a plain terms aggregation
126
+ * indistinguishable from a date_histogram.
127
+ */
128
+ const DATE_LIKE_STRING_REGEX = /^\d{4}-\d{2}-\d{2}/;
129
+ function parseDateLikeString(value) {
130
+ if (!DATE_LIKE_STRING_REGEX.test(value.trim())) {
131
+ return null;
132
+ }
133
+ return SqlResultShaper.coerceTimestamp(value);
134
+ }
135
+ /*
136
+ * Timestamp of one date_histogram bucket: `key` is epoch milliseconds in
137
+ * every Elasticsearch/OpenSearch version; `key_as_string` is the formatted
138
+ * fallback when key is absent or non-numeric.
139
+ */
140
+ function bucketTimestamp(bucket) {
141
+ const key = bucket["key"];
142
+ if (typeof key === "number" && Number.isFinite(key)) {
143
+ return new Date(key);
144
+ }
145
+ const keyAsString = bucket["key_as_string"];
146
+ if (typeof keyAsString === "string") {
147
+ return parseDateLikeString(keyAsString);
148
+ }
149
+ if (typeof key === "string") {
150
+ return parseDateLikeString(key);
151
+ }
152
+ return null;
153
+ }
154
+ /*
155
+ * Value of one date_histogram bucket: the first sub-aggregation object
156
+ * owning a numeric `value` (metric aggs like avg/sum/max return
157
+ * { "value": n }; string numbers are coerced), else the bucket's own
158
+ * doc_count. Nested bucket aggregations are skipped.
159
+ */
160
+ function bucketValue(bucket) {
161
+ for (const key of Object.keys(bucket)) {
162
+ if (DATE_BUCKET_META_KEYS.includes(key)) {
163
+ continue;
164
+ }
165
+ const subAggregation = asRecord(bucket[key]);
166
+ if (!subAggregation || Array.isArray(subAggregation["buckets"])) {
167
+ continue;
168
+ }
169
+ const numeric = coerceFiniteNumber(subAggregation["value"]);
170
+ if (numeric !== null) {
171
+ return numeric;
172
+ }
173
+ }
174
+ return coerceFiniteNumber(bucket["doc_count"]);
175
+ }
176
+ function termBucketLabel(bucket) {
177
+ const keyAsString = bucket["key_as_string"];
178
+ if (typeof keyAsString === "string") {
179
+ return keyAsString;
180
+ }
181
+ const key = bucket["key"];
182
+ if (key === undefined || key === null) {
183
+ return "(unset)";
184
+ }
185
+ return String(key);
186
+ }
187
+ function throwDateHistogramRequired(aggregationName) {
188
+ const prefix = aggregationName
189
+ ? `The "${aggregationName}" aggregation does not look like a date_histogram (bucket keys are not timestamps)`
190
+ : "Elasticsearch response contained no date_histogram aggregation";
191
+ throw new BadDataException(`${prefix}. Chart queries must include a date_histogram aggregation under "aggs" (optionally wrapped in a terms aggregation for one series per term); keyed bucket responses ("keyed": true) are not supported. Use the Table widget for hit lists.`);
192
+ }
193
+ /*
194
+ * Parse a _search response's aggregations into the AggregatedResult shape
195
+ * chart widgets consume. Supports a single date_histogram aggregation (any
196
+ * name) and a terms aggregation wrapping a date_histogram (one series per
197
+ * term bucket, labeled via attributes[termsAggName]). Pure — exported for
198
+ * direct testing.
199
+ */
200
+ export function parseTimeSeriesAggregations(body, options) {
201
+ var _a, _b, _c;
202
+ const maxSeries = (_a = options === null || options === void 0 ? void 0 : options.maxSeries) !== null && _a !== void 0 ? _a : DATA_SOURCE_MAX_SERIES;
203
+ const maxPoints = (_b = options === null || options === void 0 ? void 0 : options.maxPoints) !== null && _b !== void 0 ? _b : DATA_SOURCE_MAX_TIME_SERIES_ROWS;
204
+ const envelope = asRecord(body);
205
+ if (!envelope) {
206
+ throw new BadDataException("Elasticsearch returned an unexpected response shape (expected a JSON object).");
207
+ }
208
+ const aggregations = asRecord(envelope["aggregations"]);
209
+ if (!aggregations) {
210
+ throwDateHistogramRequired();
211
+ }
212
+ const outer = findBucketAggregation(aggregations);
213
+ if (!outer) {
214
+ throwDateHistogramRequired();
215
+ }
216
+ const firstBucket = (_c = outer.buckets
217
+ .map((bucket) => {
218
+ return asRecord(bucket);
219
+ })
220
+ .find((bucket) => {
221
+ return bucket !== null;
222
+ })) !== null && _c !== void 0 ? _c : null;
223
+ if (!firstBucket) {
224
+ return { data: [], truncated: false };
225
+ }
226
+ const nested = findBucketAggregation(firstBucket);
227
+ if (nested) {
228
+ return parseTermsWrappedHistogram(outer, maxSeries, maxPoints);
229
+ }
230
+ return parseSingleHistogram(outer, maxPoints);
231
+ }
232
+ function parseSingleHistogram(aggregation, maxPoints) {
233
+ let truncated = false;
234
+ let sawRecordBucket = false;
235
+ let sawTimestamp = false;
236
+ const points = [];
237
+ for (const rawBucket of aggregation.buckets) {
238
+ const bucket = asRecord(rawBucket);
239
+ if (!bucket) {
240
+ continue;
241
+ }
242
+ sawRecordBucket = true;
243
+ const timestamp = bucketTimestamp(bucket);
244
+ if (!timestamp) {
245
+ continue;
246
+ }
247
+ sawTimestamp = true;
248
+ const value = bucketValue(bucket);
249
+ if (value === null) {
250
+ continue;
251
+ }
252
+ if (points.length >= maxPoints) {
253
+ truncated = true;
254
+ break;
255
+ }
256
+ points.push({ timestamp: timestamp, value: value });
257
+ }
258
+ if (sawRecordBucket && !sawTimestamp) {
259
+ throwDateHistogramRequired(aggregation.name);
260
+ }
261
+ return { data: points, truncated: truncated };
262
+ }
263
+ function parseTermsWrappedHistogram(termsAggregation, maxSeries, maxPoints) {
264
+ let truncated = false;
265
+ let termBuckets = termsAggregation.buckets;
266
+ if (termBuckets.length > maxSeries) {
267
+ termBuckets = termBuckets.slice(0, maxSeries);
268
+ truncated = true;
269
+ }
270
+ let sawInnerRecordBucket = false;
271
+ let sawInnerTimestamp = false;
272
+ const points = [];
273
+ outer: for (const rawTermBucket of termBuckets) {
274
+ const termBucket = asRecord(rawTermBucket);
275
+ if (!termBucket) {
276
+ continue;
277
+ }
278
+ const inner = findBucketAggregation(termBucket);
279
+ if (!inner) {
280
+ continue;
281
+ }
282
+ const seriesLabel = termBucketLabel(termBucket);
283
+ for (const rawDateBucket of inner.buckets) {
284
+ const dateBucket = asRecord(rawDateBucket);
285
+ if (!dateBucket) {
286
+ continue;
287
+ }
288
+ sawInnerRecordBucket = true;
289
+ const timestamp = bucketTimestamp(dateBucket);
290
+ if (!timestamp) {
291
+ continue;
292
+ }
293
+ sawInnerTimestamp = true;
294
+ const value = bucketValue(dateBucket);
295
+ if (value === null) {
296
+ continue;
297
+ }
298
+ if (points.length >= maxPoints) {
299
+ truncated = true;
300
+ break outer;
301
+ }
302
+ const point = {
303
+ timestamp: timestamp,
304
+ value: value,
305
+ };
306
+ point["attributes"] = {
307
+ [termsAggregation.name]: seriesLabel,
308
+ };
309
+ points.push(point);
310
+ }
311
+ }
312
+ if (sawInnerRecordBucket && !sawInnerTimestamp) {
313
+ throwDateHistogramRequired(termsAggregation.name);
314
+ }
315
+ return { data: points, truncated: truncated };
316
+ }
317
+ function readTotalHits(total) {
318
+ // ES 6 (and REST APIs mimicking it) return a bare number.
319
+ if (typeof total === "number" && Number.isFinite(total)) {
320
+ return total;
321
+ }
322
+ // ES 7/8 and OpenSearch return { value, relation }.
323
+ const totalRecord = asRecord(total);
324
+ if (totalRecord && typeof totalRecord["value"] === "number") {
325
+ return totalRecord["value"];
326
+ }
327
+ return null;
328
+ }
329
+ /*
330
+ * Parse a _search response's hits into the table shape: one row per hit,
331
+ * columns _id and _index plus the union of _source keys across rows
332
+ * (capped at MAX_TABLE_COLUMNS), cells coerced to JSON-safe primitives.
333
+ * Pure — exported for direct testing.
334
+ */
335
+ export function parseHitsToTable(body, options) {
336
+ var _a, _b, _c;
337
+ const maxRows = (_a = options === null || options === void 0 ? void 0 : options.maxRows) !== null && _a !== void 0 ? _a : DATA_SOURCE_MAX_TABLE_ROWS;
338
+ const envelope = asRecord(body);
339
+ if (!envelope) {
340
+ throw new BadDataException("Elasticsearch returned an unexpected response shape (expected a JSON object).");
341
+ }
342
+ const hitsEnvelope = asRecord(envelope["hits"]);
343
+ if (!hitsEnvelope || !Array.isArray(hitsEnvelope["hits"])) {
344
+ throw new BadDataException("Elasticsearch response is missing hits.hits — expected a standard _search response.");
345
+ }
346
+ const hitList = hitsEnvelope["hits"];
347
+ const rawRows = [];
348
+ for (const rawHit of hitList) {
349
+ const hit = asRecord(rawHit);
350
+ if (!hit) {
351
+ continue;
352
+ }
353
+ const row = {
354
+ _id: (_b = hit["_id"]) !== null && _b !== void 0 ? _b : null,
355
+ _index: (_c = hit["_index"]) !== null && _c !== void 0 ? _c : null,
356
+ };
357
+ const source = asRecord(hit["_source"]);
358
+ if (source) {
359
+ for (const key of Object.keys(source)) {
360
+ if (key === "_id" || key === "_index") {
361
+ continue;
362
+ }
363
+ row[key] = source[key];
364
+ }
365
+ }
366
+ rawRows.push(row);
367
+ }
368
+ const columnNames = [];
369
+ for (const row of rawRows) {
370
+ for (const name of Object.keys(row)) {
371
+ if (!columnNames.includes(name) &&
372
+ columnNames.length < MAX_TABLE_COLUMNS) {
373
+ columnNames.push(name);
374
+ }
375
+ }
376
+ }
377
+ const strippedRows = rawRows.map((row) => {
378
+ const stripped = {};
379
+ for (const name of columnNames) {
380
+ if (name in row) {
381
+ stripped[name] = row[name];
382
+ }
383
+ }
384
+ return stripped;
385
+ });
386
+ const table = SqlResultShaper.rowsToTable(strippedRows, { maxRows: maxRows });
387
+ /*
388
+ * The request's size was clamped at the cap — when the page is full and
389
+ * the cluster reports more matching documents, the result is truncated.
390
+ */
391
+ const totalHits = readTotalHits(hitsEnvelope["total"]);
392
+ if (totalHits !== null &&
393
+ table.rows.length >= maxRows &&
394
+ totalHits > table.rows.length) {
395
+ table.truncated = true;
396
+ }
397
+ return table;
398
+ }
399
+ function remapAuthenticationError(error) {
400
+ const message = error instanceof Error ? error.message : String(error);
401
+ if (message.includes("HTTP 401")) {
402
+ return new BadDataException("Elasticsearch rejected the credentials (HTTP 401 Unauthorized). Check the username/password or API token configured on this data source.");
403
+ }
404
+ if (message.includes("HTTP 403")) {
405
+ return new BadDataException("Elasticsearch denied access (HTTP 403 Forbidden). The configured credentials do not have permission for this cluster or index.");
406
+ }
407
+ return error instanceof Error ? error : new Error(message);
408
+ }
409
+ export default class ElasticsearchConnector {
410
+ constructor() {
411
+ this.dataSourceType = DataSourceType.Elasticsearch;
412
+ }
413
+ async testConnection(settings) {
414
+ await this.withSanitizedErrors(settings, async () => {
415
+ const rootUrl = `${getTrimmedBaseUrl(settings)}/`;
416
+ const response = await this.performFetch({
417
+ method: "GET",
418
+ url: rootUrl,
419
+ headers: DataSourceHttpFetch.buildAuthHeaders(settings),
420
+ timeoutInMs: DATA_SOURCE_CONNECT_TIMEOUT_IN_MS,
421
+ });
422
+ if (response.bodyJson === undefined) {
423
+ throw new BadDataException(`The URL responded (HTTP ${response.statusCode}) but did not return the JSON cluster banner Elasticsearch serves at its root. Check that the URL points at the Elasticsearch/OpenSearch HTTP endpoint (usually port 9200). Response: ${response.bodyText.substring(0, 200)}`);
424
+ }
425
+ });
426
+ }
427
+ async queryTimeSeries(settings, query, window) {
428
+ return this.withSanitizedErrors(settings, async () => {
429
+ const body = parseQueryDsl(query, window.startDate, window.endDate);
430
+ // Charts read aggregations only — hits are dead weight on the wire.
431
+ body["size"] = 0;
432
+ const responseBody = await this.runSearch(settings, body);
433
+ return parseTimeSeriesAggregations(responseBody);
434
+ });
435
+ }
436
+ async queryTable(settings, query, window) {
437
+ return this.withSanitizedErrors(settings, async () => {
438
+ const body = parseQueryDsl(query, window.startDate, window.endDate);
439
+ const requestedSize = body["size"];
440
+ const effectiveSize = typeof requestedSize === "number" &&
441
+ Number.isFinite(requestedSize) &&
442
+ requestedSize >= 0
443
+ ? Math.floor(requestedSize)
444
+ : DATA_SOURCE_MAX_TABLE_ROWS;
445
+ body["size"] = Math.min(effectiveSize, DATA_SOURCE_MAX_TABLE_ROWS);
446
+ const responseBody = await this.runSearch(settings, body);
447
+ return parseHitsToTable(responseBody);
448
+ });
449
+ }
450
+ async runSearch(settings, body) {
451
+ const searchUrl = buildElasticsearchSearchUrl(settings);
452
+ const response = await this.performFetch({
453
+ method: "POST",
454
+ url: searchUrl,
455
+ headers: DataSourceHttpFetch.buildAuthHeaders(settings),
456
+ body: JSON.stringify(body),
457
+ timeoutInMs: DATA_SOURCE_QUERY_TIMEOUT_IN_MS,
458
+ });
459
+ if (response.bodyJson === undefined) {
460
+ throw new BadDataException(`Elasticsearch returned a non-JSON response (HTTP ${response.statusCode}): ${response.bodyText.substring(0, ERROR_TEXT_MAX_LENGTH)}`);
461
+ }
462
+ return response.bodyJson;
463
+ }
464
+ /*
465
+ * Egress-validate, then fetch. DataSourceHttpFetch re-validates and pins
466
+ * the resolved addresses; the explicit guard call here keeps the contract
467
+ * (validate before every connection) independent of the HTTP client's
468
+ * internals. Auth failures are remapped to operator-actionable messages.
469
+ */
470
+ async performFetch(request) {
471
+ await DataSourceEgressGuard.assertUrlAllowed(request.url);
472
+ try {
473
+ return await DataSourceHttpFetch.fetch(request);
474
+ }
475
+ catch (error) {
476
+ throw remapAuthenticationError(error);
477
+ }
478
+ }
479
+ /*
480
+ * Belt-and-braces: no matter where a failure originates (egress guard,
481
+ * HTTP layer echoing a response body, parsing), the message that surfaces
482
+ * has credentials scrubbed.
483
+ */
484
+ async withSanitizedErrors(settings, run) {
485
+ try {
486
+ return await run();
487
+ }
488
+ catch (error) {
489
+ throw new BadDataException(SqlResultShaper.sanitizeError(error, SqlResultShaper.collectSecrets(settings)));
490
+ }
491
+ }
492
+ }
493
+ //# sourceMappingURL=ElasticsearchConnector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ElasticsearchConnector.js","sourceRoot":"","sources":["../../../../../../Server/Utils/DataSource/Connectors/ElasticsearchConnector.ts"],"names":[],"mappings":"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"}