@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
@@ -169,10 +169,386 @@ export const handleChunkLoadError: HandleChunkLoadErrorFunction = (
169
169
  return true;
170
170
  };
171
171
 
172
+ /*
173
+ * The fallback is styled with its own stylesheet rather than with the app's
174
+ * Tailwind classes on purpose. One of the failures this boundary exists to
175
+ * catch is a stale bundle whose CSS chunk 404s, and an error screen that
176
+ * depends on the very stylesheet that failed is an unstyled error screen. The
177
+ * tokens below read the shared theme variables when they are present (so the
178
+ * card matches the dashboard, light or dark) and fall back to the same literal
179
+ * values the design system uses when they are not.
180
+ */
181
+ const ERROR_BOUNDARY_CSS: string = `
182
+ .oneuptime-error-boundary {
183
+ --oueb-canvas: var(--ou-background-primary, #f9fafb);
184
+ --oueb-surface: var(--ou-surface-primary, #ffffff);
185
+ --oueb-surface-muted: var(--ou-surface-secondary, #f9fafb);
186
+ --oueb-border: var(--ou-border-default, #e5e7eb);
187
+ --oueb-border-subtle: var(--ou-border-subtle, #f3f4f6);
188
+ --oueb-text: var(--ou-text-primary, #111827);
189
+ --oueb-text-secondary: var(--ou-text-secondary, #4b5563);
190
+ --oueb-text-muted: var(--ou-text-muted, #6b7280);
191
+ --oueb-accent: #4f46e5;
192
+ --oueb-accent-hover: #4338ca;
193
+ --oueb-accent-ring: rgb(79 70 229 / 45%);
194
+ --oueb-danger-surface: #fef2f2;
195
+ --oueb-danger-border: #fee2e2;
196
+ --oueb-danger-icon: #dc2626;
197
+ --oueb-success-text: var(--ou-success-text, #166534);
198
+ --oueb-danger-text: var(--ou-danger-text, #b91c1c);
199
+ --oueb-shadow: var(--ou-card-shadow, 0 1px 3px rgb(15 23 42 / 8%));
200
+ display: flex;
201
+ align-items: center;
202
+ justify-content: center;
203
+ width: 100%;
204
+ min-height: 60vh;
205
+ padding: 3rem 1.5rem;
206
+ background-color: var(--oueb-canvas);
207
+ color: var(--oueb-text);
208
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
209
+ -webkit-font-smoothing: antialiased;
210
+ }
211
+
212
+ html.dark .oneuptime-error-boundary {
213
+ --oueb-accent: #6366f1;
214
+ --oueb-accent-hover: #818cf8;
215
+ --oueb-accent-ring: rgb(129 140 248 / 55%);
216
+ --oueb-danger-surface: rgb(153 27 27 / 22%);
217
+ --oueb-danger-border: rgb(248 113 113 / 24%);
218
+ --oueb-danger-icon: #fca5a5;
219
+ }
220
+
221
+ .oneuptime-error-boundary *,
222
+ .oneuptime-error-boundary *::before,
223
+ .oneuptime-error-boundary *::after {
224
+ box-sizing: border-box;
225
+ }
226
+
227
+ .oueb-card {
228
+ width: 100%;
229
+ max-width: 34rem;
230
+ padding: 2rem;
231
+ border: 1px solid var(--oueb-border);
232
+ border-radius: 1rem;
233
+ background-color: var(--oueb-surface);
234
+ box-shadow: var(--oueb-shadow);
235
+ animation: oueb-enter 260ms cubic-bezier(0.16, 1, 0.3, 1) both;
236
+ }
237
+
238
+ @keyframes oueb-enter {
239
+ from { opacity: 0; transform: translateY(8px); }
240
+ to { opacity: 1; transform: none; }
241
+ }
242
+
243
+ .oueb-badge {
244
+ display: flex;
245
+ align-items: center;
246
+ justify-content: center;
247
+ width: 2.75rem;
248
+ height: 2.75rem;
249
+ border: 1px solid var(--oueb-danger-border);
250
+ border-radius: 0.75rem;
251
+ background-color: var(--oueb-danger-surface);
252
+ color: var(--oueb-danger-icon);
253
+ }
254
+
255
+ .oueb-badge svg {
256
+ width: 1.375rem;
257
+ height: 1.375rem;
258
+ }
259
+
260
+ .oueb-title {
261
+ margin: 1.25rem 0 0;
262
+ font-size: 1.125rem;
263
+ font-weight: 600;
264
+ line-height: 1.5rem;
265
+ letter-spacing: -0.01em;
266
+ color: var(--oueb-text);
267
+ }
268
+
269
+ .oueb-message {
270
+ margin: 0.375rem 0 0;
271
+ font-size: 0.875rem;
272
+ line-height: 1.375rem;
273
+ color: var(--oueb-text-muted);
274
+ }
275
+
276
+ .oueb-actions {
277
+ display: flex;
278
+ flex-wrap: wrap;
279
+ gap: 0.75rem;
280
+ margin-top: 1.5rem;
281
+ }
282
+
283
+ .oueb-button {
284
+ display: inline-flex;
285
+ align-items: center;
286
+ justify-content: center;
287
+ gap: 0.5rem;
288
+ padding: 0.5625rem 1rem;
289
+ border: 1px solid transparent;
290
+ border-radius: 0.5rem;
291
+ font-size: 0.875rem;
292
+ font-weight: 500;
293
+ line-height: 1.25rem;
294
+ cursor: pointer;
295
+ transition: background-color 120ms ease, border-color 120ms ease, color 120ms ease, box-shadow 120ms ease;
296
+ }
297
+
298
+ .oueb-button svg {
299
+ width: 1rem;
300
+ height: 1rem;
301
+ flex-shrink: 0;
302
+ }
303
+
304
+ .oueb-button:focus-visible {
305
+ outline: none;
306
+ box-shadow: 0 0 0 2px var(--oueb-surface), 0 0 0 4px var(--oueb-accent-ring);
307
+ }
308
+
309
+ .oueb-button-primary {
310
+ background-color: var(--oueb-accent);
311
+ color: #ffffff;
312
+ box-shadow: 0 1px 2px rgb(15 23 42 / 10%);
313
+ }
314
+
315
+ .oueb-button-primary:hover {
316
+ background-color: var(--oueb-accent-hover);
317
+ }
318
+
319
+ .oueb-button-secondary {
320
+ border-color: var(--oueb-border);
321
+ background-color: var(--oueb-surface);
322
+ color: var(--oueb-text-secondary);
323
+ box-shadow: 0 1px 2px rgb(15 23 42 / 5%);
324
+ }
325
+
326
+ .oueb-button-secondary:hover {
327
+ background-color: var(--oueb-surface-muted);
328
+ color: var(--oueb-text);
329
+ }
330
+
331
+ .oueb-button-ghost {
332
+ padding: 0.4375rem 0.75rem;
333
+ background-color: transparent;
334
+ color: var(--oueb-accent);
335
+ }
336
+
337
+ .oueb-button-ghost:hover {
338
+ background-color: var(--oueb-surface-muted);
339
+ }
340
+
341
+ .oueb-support {
342
+ margin-top: 1.5rem;
343
+ padding-top: 1.5rem;
344
+ border-top: 1px solid var(--oueb-border-subtle);
345
+ }
346
+
347
+ .oueb-support-title {
348
+ margin: 0;
349
+ font-size: 0.8125rem;
350
+ font-weight: 600;
351
+ color: var(--oueb-text-secondary);
352
+ }
353
+
354
+ .oueb-support-text {
355
+ margin: 0.375rem 0 0;
356
+ font-size: 0.75rem;
357
+ line-height: 1.125rem;
358
+ color: var(--oueb-text-muted);
359
+ }
360
+
361
+ .oueb-support-actions {
362
+ display: flex;
363
+ align-items: center;
364
+ margin-top: 0.75rem;
365
+ margin-left: -0.75rem;
366
+ }
367
+
368
+ .oueb-support-email {
369
+ display: flex;
370
+ align-items: center;
371
+ gap: 0.375rem;
372
+ margin: 0.5rem 0 0;
373
+ font-size: 0.75rem;
374
+ line-height: 1.125rem;
375
+ color: var(--oueb-text-muted);
376
+ }
377
+
378
+ .oueb-support-email svg {
379
+ width: 0.875rem;
380
+ height: 0.875rem;
381
+ flex-shrink: 0;
382
+ }
383
+
384
+ .oueb-link {
385
+ border-radius: 0.25rem;
386
+ color: var(--oueb-accent);
387
+ font-weight: 500;
388
+ text-decoration: none;
389
+ }
390
+
391
+ .oueb-link:hover {
392
+ text-decoration: underline;
393
+ }
394
+
395
+ .oueb-link:focus-visible {
396
+ outline: none;
397
+ box-shadow: 0 0 0 2px var(--oueb-surface), 0 0 0 4px var(--oueb-accent-ring);
398
+ }
399
+
400
+ .oueb-status {
401
+ margin-top: 0.75rem;
402
+ font-size: 0.75rem;
403
+ line-height: 1.125rem;
404
+ color: var(--oueb-text-muted);
405
+ }
406
+
407
+ .oueb-status:empty {
408
+ display: none;
409
+ }
410
+
411
+ .oueb-status-success {
412
+ color: var(--oueb-success-text);
413
+ }
414
+
415
+ .oueb-status-error {
416
+ color: var(--oueb-danger-text);
417
+ }
418
+
419
+ .oueb-details {
420
+ margin-top: 1.5rem;
421
+ padding-top: 1.5rem;
422
+ border-top: 1px solid var(--oueb-border-subtle);
423
+ }
424
+
425
+ .oueb-details summary {
426
+ display: inline-flex;
427
+ align-items: center;
428
+ gap: 0.375rem;
429
+ font-size: 0.75rem;
430
+ font-weight: 500;
431
+ color: var(--oueb-text-muted);
432
+ cursor: pointer;
433
+ list-style: none;
434
+ user-select: none;
435
+ }
436
+
437
+ .oueb-details summary::-webkit-details-marker {
438
+ display: none;
439
+ }
440
+
441
+ .oueb-details summary:hover {
442
+ color: var(--oueb-text-secondary);
443
+ }
444
+
445
+ .oueb-details summary:focus-visible {
446
+ outline: none;
447
+ color: var(--oueb-text);
448
+ text-decoration: underline;
449
+ }
450
+
451
+ .oueb-details summary svg {
452
+ width: 0.875rem;
453
+ height: 0.875rem;
454
+ transition: transform 150ms ease;
455
+ }
456
+
457
+ .oueb-details[open] summary svg {
458
+ transform: rotate(90deg);
459
+ }
460
+
461
+ .oueb-error-message {
462
+ margin: 0.75rem 0 0;
463
+ padding: 0.75rem;
464
+ max-height: 10rem;
465
+ overflow: auto;
466
+ border: 1px solid var(--oueb-border-subtle);
467
+ border-radius: 0.5rem;
468
+ background-color: var(--oueb-surface-muted);
469
+ color: var(--oueb-text-secondary);
470
+ font-family: "Courier Prime", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
471
+ font-size: 0.75rem;
472
+ line-height: 1.125rem;
473
+ white-space: pre-wrap;
474
+ word-break: break-word;
475
+ }
476
+
477
+ @media (max-width: 30rem) {
478
+ .oneuptime-error-boundary {
479
+ padding: 2rem 1rem;
480
+ }
481
+
482
+ .oueb-card {
483
+ padding: 1.5rem;
484
+ }
485
+
486
+ .oueb-actions .oueb-button {
487
+ flex: 1 1 100%;
488
+ }
489
+ }
490
+
491
+ @media (prefers-reduced-motion: reduce) {
492
+ .oueb-card {
493
+ animation: none;
494
+ }
495
+
496
+ .oueb-details summary svg,
497
+ .oueb-button {
498
+ transition: none;
499
+ }
500
+ }
501
+ `;
502
+
503
+ type SupportBundleStatusType = "success" | "error";
504
+
505
+ interface SupportBundleStatus {
506
+ message: string;
507
+ type: SupportBundleStatusType;
508
+ }
509
+
510
+ type GetIconFunction = (path: string) => ReactElement;
511
+
512
+ /* Heroicons outline paths, inlined so the fallback needs no icon bundle. */
513
+ const getIcon: GetIconFunction = (path: string): ReactElement => {
514
+ return (
515
+ <svg
516
+ viewBox="0 0 24 24"
517
+ fill="none"
518
+ stroke="currentColor"
519
+ strokeWidth={1.5}
520
+ strokeLinecap="round"
521
+ strokeLinejoin="round"
522
+ aria-hidden="true"
523
+ focusable="false"
524
+ >
525
+ <path d={path} />
526
+ </svg>
527
+ );
528
+ };
529
+
530
+ const ALERT_ICON_PATH: string =
531
+ "M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z";
532
+
533
+ const RELOAD_ICON_PATH: string =
534
+ "M16.023 9.348h4.992V4.356m0 4.992-3.181-3.183a8.25 8.25 0 0 0-13.803 3.7M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7";
535
+
536
+ const DOWNLOAD_ICON_PATH: string =
537
+ "M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5M16.5 12 12 16.5m0 0L7.5 12m4.5 4.5V3";
538
+
539
+ const MAIL_ICON_PATH: string =
540
+ "M21.75 6.75v10.5a2.25 2.25 0 0 1-2.25 2.25h-15a2.25 2.25 0 0 1-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0 0 19.5 4.5h-15a2.25 2.25 0 0 0-2.25 2.25m19.5 0v.243a2.25 2.25 0 0 1-1.07 1.916l-7.5 4.615a2.25 2.25 0 0 1-2.36 0L3.32 8.91a2.25 2.25 0 0 1-1.07-1.916V6.75";
541
+
542
+ const CHEVRON_ICON_PATH: string = "m8.25 4.5 7.5 7.5-7.5 7.5";
543
+
544
+ /** Where a reviewed support bundle should be sent. */
545
+ export const SUPPORT_EMAIL: string = "support@oneuptime.com";
546
+
172
547
  export const Fallback: FunctionComponent<FallbackComponentProps> = (
173
548
  props: FallbackComponentProps,
174
549
  ): ReactElement => {
175
- const [supportBundleStatus, setSupportBundleStatus] = useState<string>("");
550
+ const [supportBundleStatus, setSupportBundleStatus] =
551
+ useState<SupportBundleStatus | null>(null);
176
552
  const errorMessage: string =
177
553
  props.error && typeof props.error.message === "string"
178
554
  ? props.error.message
@@ -181,7 +557,7 @@ export const Fallback: FunctionComponent<FallbackComponentProps> = (
181
557
  type DownloadSupportBundleFunction = () => void;
182
558
 
183
559
  const downloadSupportBundle: DownloadSupportBundleFunction = (): void => {
184
- setSupportBundleStatus("");
560
+ setSupportBundleStatus(null);
185
561
 
186
562
  try {
187
563
  const capturedErrorDetails: CapturedErrorDetails | null =
@@ -194,141 +570,116 @@ export const Fallback: FunctionComponent<FallbackComponentProps> = (
194
570
  capturedAt: capturedErrorDetails?.capturedAt,
195
571
  });
196
572
 
197
- setSupportBundleStatus(
198
- "Support bundle downloaded. Review it, then attach it when contacting OneUptime Support.",
199
- );
573
+ setSupportBundleStatus({
574
+ type: "success",
575
+ message:
576
+ "Support bundle downloaded. Review it, then attach it to your email.",
577
+ });
200
578
  } catch (error) {
201
579
  // eslint-disable-next-line no-console
202
580
  console.error("Unable to download the error support bundle:", error);
203
- setSupportBundleStatus(
204
- "The support bundle could not be downloaded. Please try again.",
205
- );
581
+ setSupportBundleStatus({
582
+ type: "error",
583
+ message:
584
+ "The support bundle could not be downloaded. Please try again.",
585
+ });
206
586
  }
207
587
  };
208
588
 
209
589
  return (
210
590
  <div
211
591
  data-testid="error-boundary-fallback"
212
- style={{
213
- minHeight: "60vh",
214
- width: "100%",
215
- padding: "2rem",
216
- backgroundColor: "var(--ou-background-primary, #fdfdfd)",
217
- color: "var(--ou-text-primary, #111827)",
218
- display: "flex",
219
- justifyContent: "center",
220
- alignItems: "center",
221
- textAlign: "center",
222
- }}
592
+ className="oneuptime-error-boundary"
223
593
  >
224
- <div style={{ maxWidth: "40rem" }}>
225
- <div role="alert" style={{ fontWeight: 600, marginBottom: "0.5rem" }}>
226
- An unexpected error has occurred. Please reload the page to continue
594
+ <style>{ERROR_BOUNDARY_CSS}</style>
595
+ <div className="oueb-card">
596
+ <div className="oueb-badge">{getIcon(ALERT_ICON_PATH)}</div>
597
+ <div role="alert">
598
+ <h1 className="oueb-title">Something went wrong</h1>
599
+ <p className="oueb-message">
600
+ An unexpected error has occurred. Please reload the page to continue
601
+ </p>
227
602
  </div>
228
- <div
229
- style={{
230
- fontSize: "0.875rem",
231
- color: "var(--ou-text-secondary, #6b7280)",
232
- marginBottom: "1.25rem",
233
- }}
234
- >
235
- The rest of the app is still working. You can retry this page or
236
- reload to start fresh.
237
- </div>
238
- <div
239
- style={{
240
- display: "flex",
241
- gap: "0.75rem",
242
- justifyContent: "center",
243
- flexWrap: "wrap",
244
- }}
245
- >
246
- <button
247
- type="button"
248
- data-testid="error-boundary-try-again"
249
- onClick={() => {
250
- props.resetErrorBoundary();
251
- }}
252
- style={{
253
- padding: "0.5rem 1rem",
254
- borderRadius: "0.375rem",
255
- border: "1px solid var(--ou-border-primary, #d1d5db)",
256
- backgroundColor: "transparent",
257
- color: "inherit",
258
- cursor: "pointer",
259
- }}
260
- >
261
- Try again
262
- </button>
603
+ <div className="oueb-actions">
263
604
  <button
264
605
  type="button"
265
606
  data-testid="error-boundary-reload"
607
+ className="oueb-button oueb-button-primary"
266
608
  onClick={() => {
267
609
  reloadPage();
268
610
  }}
269
- style={{
270
- padding: "0.5rem 1rem",
271
- borderRadius: "0.375rem",
272
- border: "1px solid transparent",
273
- backgroundColor: "var(--ou-brand-primary, #4f46e5)",
274
- color: "#ffffff",
275
- cursor: "pointer",
276
- }}
277
611
  >
612
+ {getIcon(RELOAD_ICON_PATH)}
278
613
  Reload page
279
614
  </button>
280
615
  <button
281
616
  type="button"
282
- data-testid="error-boundary-download-support-bundle"
283
- onClick={downloadSupportBundle}
284
- style={{
285
- padding: "0.5rem 1rem",
286
- borderRadius: "0.375rem",
287
- border: "1px solid var(--ou-border-primary, #d1d5db)",
288
- backgroundColor: "transparent",
289
- color: "inherit",
290
- cursor: "pointer",
617
+ data-testid="error-boundary-try-again"
618
+ className="oueb-button oueb-button-secondary"
619
+ onClick={() => {
620
+ props.resetErrorBoundary();
291
621
  }}
292
622
  >
293
- Download support bundle
623
+ Try again
294
624
  </button>
295
625
  </div>
296
- <div
297
- style={{
298
- marginTop: "1rem",
299
- fontSize: "0.75rem",
300
- color: "var(--ou-text-secondary, #6b7280)",
301
- }}
302
- >
303
- Download a local diagnostics file with the error stack, component
304
- stack, scrubbed page URL, browser details, and OneUptime build. It
305
- never reads cookies, saved browser data, or form contents. Review it
306
- before sharing it with OneUptime Support.
307
- </div>
308
- <div
309
- role="status"
310
- data-testid="error-boundary-support-bundle-status"
311
- style={{
312
- minHeight: "1rem",
313
- marginTop: "0.75rem",
314
- fontSize: "0.75rem",
315
- color: "var(--ou-text-secondary, #6b7280)",
316
- }}
317
- >
318
- {supportBundleStatus}
319
- </div>
320
- {errorMessage ? (
626
+ <div className="oueb-support">
627
+ <p className="oueb-support-title">Still stuck?</p>
628
+ <p className="oueb-support-text">
629
+ Download a local diagnostics file with the error stack, component
630
+ stack, scrubbed page URL, browser details, and OneUptime build. It
631
+ never reads cookies, saved browser data, or form contents. Review it
632
+ before sharing it with OneUptime Support.
633
+ </p>
634
+ <div className="oueb-support-actions">
635
+ <button
636
+ type="button"
637
+ data-testid="error-boundary-download-support-bundle"
638
+ className="oueb-button oueb-button-ghost"
639
+ onClick={downloadSupportBundle}
640
+ >
641
+ {getIcon(DOWNLOAD_ICON_PATH)}
642
+ Download support bundle
643
+ </button>
644
+ </div>
645
+ <p className="oueb-support-email">
646
+ {getIcon(MAIL_ICON_PATH)}
647
+ <span>
648
+ Send it to{" "}
649
+ <a
650
+ className="oueb-link"
651
+ data-testid="error-boundary-support-email"
652
+ href={`mailto:${SUPPORT_EMAIL}`}
653
+ >
654
+ {SUPPORT_EMAIL}
655
+ </a>
656
+ </span>
657
+ </p>
321
658
  <div
322
- data-testid="error-boundary-error-message"
323
- style={{
324
- marginTop: "1.25rem",
325
- fontSize: "0.75rem",
326
- color: "var(--ou-text-secondary, #6b7280)",
327
- wordBreak: "break-word",
328
- }}
659
+ role="status"
660
+ data-testid="error-boundary-support-bundle-status"
661
+ className={`oueb-status ${
662
+ supportBundleStatus
663
+ ? `oueb-status-${supportBundleStatus.type}`
664
+ : ""
665
+ }`}
329
666
  >
330
- {errorMessage}
667
+ {supportBundleStatus?.message || ""}
331
668
  </div>
669
+ </div>
670
+ {errorMessage ? (
671
+ <details className="oueb-details">
672
+ <summary>
673
+ {getIcon(CHEVRON_ICON_PATH)}
674
+ Error details
675
+ </summary>
676
+ <pre
677
+ data-testid="error-boundary-error-message"
678
+ className="oueb-error-message"
679
+ >
680
+ {errorMessage}
681
+ </pre>
682
+ </details>
332
683
  ) : (
333
684
  <></>
334
685
  )}
@@ -388,7 +388,16 @@ const Icon: FunctionComponent<ComponentProps> = ({
388
388
  d="M21 7.5l-9-5.25L3 7.5m18 0l-9 5.25m9-5.25v9l-9 5.25M3 7.5l9 5.25M3 7.5v9l9 5.25m0-9v9"
389
389
  />,
390
390
  );
391
- } else if (icon === IconProp.Pencil) {
391
+ } else if (icon === IconProp.Pencil || icon === IconProp.Edit) {
392
+ /*
393
+ * Edit is a pencil, and nothing else. It used to be a pencil drawn over a
394
+ * document outline, which at the 16px this icon is actually rendered at
395
+ * almost everywhere collapsed into a grey box with a diagonal through it -
396
+ * legible as "some kind of file thing", not as "change this". The pencil
397
+ * alone is what everybody already reads as edit, and it survives being
398
+ * small. IconProp.PencilSquare still draws the composite for the handful of
399
+ * places that want it.
400
+ */
392
401
  return getSvgWrapper(
393
402
  <path
394
403
  strokeLinecap="round"
@@ -1110,14 +1119,6 @@ const Icon: FunctionComponent<ComponentProps> = ({
1110
1119
  d="M3.98 8.223A10.477 10.477 0 001.934 12C3.226 16.338 7.244 19.5 12 19.5c.993 0 1.953-.138 2.863-.395M6.228 6.228A10.45 10.45 0 0112 4.5c4.756 0 8.773 3.162 10.065 7.498a10.523 10.523 0 01-4.293 5.774M6.228 6.228L3 3m3.228 3.228l3.65 3.65m7.894 7.894L21 21m-3.228-3.228l-3.65-3.65m0 0a3 3 0 10-4.243-4.243m4.242 4.242L9.88 9.88"
1111
1120
  />,
1112
1121
  );
1113
- } else if (icon === IconProp.Edit) {
1114
- return getSvgWrapper(
1115
- <path
1116
- strokeLinecap="round"
1117
- strokeLinejoin="round"
1118
- d="M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L10.582 16.07a4.5 4.5 0 01-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 011.13-1.897l8.932-8.931zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0115.75 21H5.25A2.25 2.25 0 013 18.75V8.25A2.25 2.25 0 015.25 6H10"
1119
- />,
1120
- );
1121
1122
  } else if (icon === IconProp.True) {
1122
1123
  return getSvgWrapper(
1123
1124
  <path
@@ -46,9 +46,14 @@ const ConfirmModal: FunctionComponent<ComponentProps> = (
46
46
  }
47
47
  error={props.error}
48
48
  >
49
+ {/*
50
+ * The modal body is already the scroll container. A second one here gave
51
+ * a long confirmation two nested scrollbars, and the inner one clipped
52
+ * the text well short of the space the modal had spare.
53
+ */}
49
54
  <div
50
55
  data-testid="confirm-modal-description"
51
- className="max-h-96 overflow-y-auto whitespace-pre-wrap break-words pr-1 text-sm leading-6 text-gray-600"
56
+ className="whitespace-pre-wrap break-words text-sm leading-6 text-gray-600"
52
57
  >
53
58
  {translatedDescription}
54
59
  </div>