@oneuptime/common 12.0.5 → 12.0.7

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 (901) hide show
  1. package/Models/DatabaseModels/AIInsight.ts +1 -1
  2. package/Models/DatabaseModels/AIRun.ts +33 -0
  3. package/Models/DatabaseModels/DataSource.ts +744 -0
  4. package/Models/DatabaseModels/DatabaseBaseModel/FileModel.ts +2 -3
  5. package/Models/DatabaseModels/DeletedProject.ts +595 -0
  6. package/Models/DatabaseModels/Index.ts +5 -0
  7. package/Models/DatabaseModels/Monitor.ts +111 -0
  8. package/Models/DatabaseModels/Project.ts +3 -3
  9. package/Models/DatabaseModels/ProjectCallSMSConfig.ts +10 -2
  10. package/Models/DatabaseModels/User.ts +2 -0
  11. package/Models/DatabaseModels/UserOnCallLog.ts +2 -0
  12. package/Models/DatabaseModels/UserOnCallLogTimeline.ts +2 -0
  13. package/Models/DatabaseModels/UserSession.ts +2 -0
  14. package/Models/DatabaseModels/UserTotpAuth.ts +6 -4
  15. package/Models/DatabaseModels/UserWebAuthn.ts +5 -3
  16. package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +19 -1
  17. package/Server/API/AIInsightAPI.ts +47 -4
  18. package/Server/API/AIInvestigationAPI.ts +25 -0
  19. package/Server/API/DashboardAPI.ts +176 -492
  20. package/Server/API/DataSourceAPI.ts +268 -0
  21. package/Server/API/FileAPI.ts +15 -2
  22. package/Server/API/MicrosoftTeamsAPI.ts +6 -1
  23. package/Server/API/ProjectAPI.ts +214 -0
  24. package/Server/API/StatusPageAPI.ts +50 -7
  25. package/Server/API/UserAPI.ts +119 -0
  26. package/Server/Infrastructure/ClickhouseConfig.ts +59 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.ts +39 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1786446545142-MigrationName.ts +50 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1786449497966-AddMonitorDependency.ts +67 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1786461136170-AddDeletedProjectTable.ts +39 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.ts +24 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.ts +76 -0
  33. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
  34. package/Server/Infrastructure/Queue.ts +26 -0
  35. package/Server/Infrastructure/QueueWorker.ts +17 -0
  36. package/Server/Middleware/TelemetryIngest.ts +8 -3
  37. package/Server/Services/AIAgentService.ts +20 -0
  38. package/Server/Services/AIInsightService.ts +132 -12
  39. package/Server/Services/AIRunService.ts +34 -0
  40. package/Server/Services/AIService.ts +17 -2
  41. package/Server/Services/AlertService.ts +38 -32
  42. package/Server/Services/AnalyticsDatabaseService.ts +8 -4
  43. package/Server/Services/DashboardDomainService.ts +73 -28
  44. package/Server/Services/DataSourceService.ts +200 -0
  45. package/Server/Services/DatabaseService.ts +1 -0
  46. package/Server/Services/DeletedProjectService.ts +138 -0
  47. package/Server/Services/FileService.ts +61 -0
  48. package/Server/Services/HostService.ts +92 -0
  49. package/Server/Services/IncidentEpisodePublicNoteService.ts +18 -0
  50. package/Server/Services/IncidentPublicNoteService.ts +18 -0
  51. package/Server/Services/IncidentService.ts +45 -0
  52. package/Server/Services/Index.ts +4 -0
  53. package/Server/Services/MonitorService.ts +360 -0
  54. package/Server/Services/MonitorStatusService.ts +166 -0
  55. package/Server/Services/OpenTelemetryIngestService.ts +255 -184
  56. package/Server/Services/ProbeService.ts +20 -0
  57. package/Server/Services/ProjectService.ts +297 -1
  58. package/Server/Services/PushNotificationService.ts +71 -0
  59. package/Server/Services/RumSessionPinService.ts +7 -21
  60. package/Server/Services/ScheduledMaintenancePublicNoteService.ts +18 -0
  61. package/Server/Services/StatusPageAnnouncementService.ts +53 -0
  62. package/Server/Services/StatusPageDomainService.ts +73 -28
  63. package/Server/Services/StatusPageSubscriberService.ts +13 -0
  64. package/Server/Services/TeamMemberService.ts +117 -12
  65. package/Server/Services/TelemetryIngestionKeyService.ts +1 -0
  66. package/Server/Services/UserService.ts +280 -9
  67. package/Server/Services/UserWebhookService.ts +34 -109
  68. package/Server/Services/WorkspaceNotificationRuleService.ts +69 -0
  69. package/Server/Services/WorkspaceProjectAuthTokenService.ts +37 -1
  70. package/Server/Static/Vendor/README.md +62 -0
  71. package/Server/Static/Vendor/fonts/InterVariable.woff2 +0 -0
  72. package/Server/Static/Vendor/highlight/highlight.min.js +1244 -0
  73. package/Server/Static/Vendor/highlight/languages/apache.min.js +15 -0
  74. package/Server/Static/Vendor/highlight/languages/bash.min.js +21 -0
  75. package/Server/Static/Vendor/highlight/languages/c.min.js +41 -0
  76. package/Server/Static/Vendor/highlight/languages/cpp.min.js +47 -0
  77. package/Server/Static/Vendor/highlight/languages/csharp.min.js +49 -0
  78. package/Server/Static/Vendor/highlight/languages/css.min.js +31 -0
  79. package/Server/Static/Vendor/highlight/languages/diff.min.js +9 -0
  80. package/Server/Static/Vendor/highlight/languages/dns.min.js +11 -0
  81. package/Server/Static/Vendor/highlight/languages/dockerfile.min.js +8 -0
  82. package/Server/Static/Vendor/highlight/languages/go.min.js +20 -0
  83. package/Server/Static/Vendor/highlight/languages/graphql.min.js +12 -0
  84. package/Server/Static/Vendor/highlight/languages/http.min.js +14 -0
  85. package/Server/Static/Vendor/highlight/languages/ini.min.js +15 -0
  86. package/Server/Static/Vendor/highlight/languages/java.min.js +38 -0
  87. package/Server/Static/Vendor/highlight/languages/javascript.min.js +81 -0
  88. package/Server/Static/Vendor/highlight/languages/json.min.js +8 -0
  89. package/Server/Static/Vendor/highlight/languages/kotlin.min.js +46 -0
  90. package/Server/Static/Vendor/highlight/languages/lua.min.js +15 -0
  91. package/Server/Static/Vendor/highlight/languages/makefile.min.js +14 -0
  92. package/Server/Static/Vendor/highlight/languages/nginx.min.js +21 -0
  93. package/Server/Static/Vendor/highlight/languages/perl.min.js +41 -0
  94. package/Server/Static/Vendor/highlight/languages/php.min.js +59 -0
  95. package/Server/Static/Vendor/highlight/languages/powershell.min.js +39 -0
  96. package/Server/Static/Vendor/highlight/languages/python.min.js +42 -0
  97. package/Server/Static/Vendor/highlight/languages/r.min.js +26 -0
  98. package/Server/Static/Vendor/highlight/languages/ruby.min.js +54 -0
  99. package/Server/Static/Vendor/highlight/languages/rust.min.js +27 -0
  100. package/Server/Static/Vendor/highlight/languages/scala.min.js +28 -0
  101. package/Server/Static/Vendor/highlight/languages/sql.min.js +21 -0
  102. package/Server/Static/Vendor/highlight/languages/swift.min.js +68 -0
  103. package/Server/Static/Vendor/highlight/languages/typescript.min.js +99 -0
  104. package/Server/Static/Vendor/highlight/languages/xml.min.js +29 -0
  105. package/Server/Static/Vendor/highlight/languages/yaml.min.js +28 -0
  106. package/Server/Static/Vendor/highlight/styles/github-dark.min.css +10 -0
  107. package/Server/Static/Vendor/highlight/styles/vs2015.min.css +1 -0
  108. package/Server/Static/Vendor/tailwind/tailwind-3.4.5.js +21028 -0
  109. package/Server/Types/Database/DeleteById.ts +2 -0
  110. package/Server/Types/Database/DeleteOneBy.ts +6 -0
  111. package/Server/Types/Database/Permissions/BasePermission.ts +7 -0
  112. package/Server/Types/Database/Permissions/DeletePermission.ts +2 -0
  113. package/Server/Types/Database/Permissions/ReadPermission.ts +3 -0
  114. package/Server/Types/Database/Permissions/TenantPermission.ts +101 -16
  115. package/Server/Types/Domain.ts +41 -0
  116. package/Server/Types/Workflow/Components/API/Delete.ts +2 -1
  117. package/Server/Types/Workflow/Components/API/Get.ts +2 -1
  118. package/Server/Types/Workflow/Components/API/Patch.ts +2 -1
  119. package/Server/Types/Workflow/Components/API/Post.ts +2 -1
  120. package/Server/Types/Workflow/Components/API/Put.ts +2 -1
  121. package/Server/Types/Workflow/Components/API/Utils.ts +41 -2
  122. package/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.ts +25 -19
  123. package/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.ts +6 -5
  124. package/Server/Types/Workflow/Components/BaseModel/DeleteManyBaseModel.ts +32 -14
  125. package/Server/Types/Workflow/Components/BaseModel/DeleteOneBaseModel.ts +31 -13
  126. package/Server/Types/Workflow/Components/BaseModel/FindManyBaseModel.ts +29 -20
  127. package/Server/Types/Workflow/Components/BaseModel/FindOneBaseModel.ts +28 -21
  128. package/Server/Types/Workflow/Components/BaseModel/LogComponentError.ts +89 -0
  129. package/Server/Types/Workflow/Components/BaseModel/ModelArguments.ts +208 -0
  130. package/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.ts +11 -0
  131. package/Server/Types/Workflow/Components/BaseModel/UpdateManyBaseModel.ts +41 -18
  132. package/Server/Types/Workflow/Components/BaseModel/UpdateOneBaseModel.ts +45 -19
  133. package/Server/Types/Workflow/Components/Discord/SendMessageToChannel.ts +16 -9
  134. package/Server/Types/Workflow/Components/IncomingWebhookUtils.ts +66 -0
  135. package/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.ts +15 -9
  136. package/Server/Types/Workflow/Components/Slack/SendMessageToChannel.ts +17 -0
  137. package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +1 -1
  138. package/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.ts +171 -0
  139. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +2 -2
  140. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +90 -11
  141. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +1 -0
  142. package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +3 -3
  143. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +1 -0
  144. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.ts +125 -0
  145. package/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.ts +25 -15
  146. package/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.ts +256 -57
  147. package/Server/Utils/AI/SRE/Insights/FixRouting.ts +3 -2
  148. package/Server/Utils/AI/SRE/Insights/InsightStore.ts +76 -18
  149. package/Server/Utils/AI/SRE/InvestigationTldr.ts +352 -0
  150. package/Server/Utils/AI/SRE/TelemetryImprovementTaskTrigger.ts +1 -1
  151. package/Server/Utils/AI/Toolbox/CodeWriteTools.ts +6 -6
  152. package/Server/Utils/AnalyticsDatabase/InsertDedupContext.ts +7 -2
  153. package/Server/Utils/CodeRepository/GitHub/GitHub.ts +43 -5
  154. package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +1793 -0
  155. package/Server/Utils/Dashboard/PublicDashboardViewConfig.ts +65 -0
  156. package/Server/Utils/DataSource/ConnectorRegistry.ts +53 -0
  157. package/Server/Utils/DataSource/Connectors/ClickHouseConnector.ts +338 -0
  158. package/Server/Utils/DataSource/Connectors/ElasticsearchConnector.ts +717 -0
  159. package/Server/Utils/DataSource/Connectors/LokiConnector.ts +606 -0
  160. package/Server/Utils/DataSource/Connectors/MySqlConnector.ts +307 -0
  161. package/Server/Utils/DataSource/Connectors/PostgresConnector.ts +260 -0
  162. package/Server/Utils/DataSource/Connectors/PrometheusConnector.ts +555 -0
  163. package/Server/Utils/DataSource/Connectors/RestApiConnector.ts +597 -0
  164. package/Server/Utils/DataSource/Connectors/SqlServerConnector.ts +318 -0
  165. package/Server/Utils/DataSource/EgressGuard.ts +606 -0
  166. package/Server/Utils/DataSource/HttpFetch.ts +182 -0
  167. package/Server/Utils/DataSource/SqlQueryGuard.ts +383 -0
  168. package/Server/Utils/DataSource/SqlResultShaper.ts +372 -0
  169. package/Server/Utils/DataSource/Types.ts +93 -0
  170. package/Server/Utils/Database/PostgresErrorTranslator.ts +172 -17
  171. package/Server/Utils/Execute.ts +8 -0
  172. package/Server/Utils/InProcessMemo.ts +141 -0
  173. package/Server/Utils/InlineImageAccessTokenSync.ts +23 -0
  174. package/Server/Utils/InstanceHealth/TelemetryIngestion.ts +628 -0
  175. package/Server/Utils/LLM/LLMService.ts +57 -12
  176. package/Server/Utils/Monitor/MonitorAlert.ts +40 -0
  177. package/Server/Utils/Monitor/MonitorDependencySuppression.ts +192 -0
  178. package/Server/Utils/Monitor/MonitorIncident.ts +40 -0
  179. package/Server/Utils/Monitor/MonitorMetricUtil.ts +58 -0
  180. package/Server/Utils/Monitor/MonitorResource.ts +50 -0
  181. package/Server/Utils/Response.ts +154 -7
  182. package/Server/Utils/SSRFProtection.ts +450 -0
  183. package/Server/Utils/StartServer.ts +16 -0
  184. package/Server/Utils/StatusPageSubscriberWebhook.ts +30 -0
  185. package/Server/Utils/Telemetry/CaptureSpan.ts +30 -18
  186. package/Server/Utils/Telemetry/IngestionTimestamp.ts +75 -0
  187. package/Server/Utils/Telemetry/ResourceHeartbeat.ts +99 -7
  188. package/Server/Utils/Telemetry/Telemetry.ts +112 -1
  189. package/Server/Utils/Telemetry.ts +104 -3
  190. package/Server/Utils/VM/VMRunner.ts +88 -1
  191. package/Server/Utils/VendorAssets.ts +165 -0
  192. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +582 -53
  193. package/Server/Utils/Workspace/Slack/Slack.ts +30 -2
  194. package/Server/Utils/Workspace/WorkspaceBase.ts +6 -0
  195. package/Server/Views/Partials/Head.ejs +21 -7
  196. package/Tests/App/AdminDashboard/AdminProjectsIdFilter.test.tsx +207 -0
  197. package/Tests/App/AdminDashboard/AdminUsersIdFilter.test.tsx +216 -0
  198. package/Tests/App/Dashboard/AIInsightViewActions.test.tsx +422 -0
  199. package/Tests/App/Dashboard/AddWidgetModal.test.tsx +10 -3
  200. package/Tests/App/Dashboard/AlertsSideMenu.test.tsx +387 -0
  201. package/Tests/App/Dashboard/ChatActivityFeed.test.tsx +199 -0
  202. package/Tests/App/Dashboard/DangerZone.test.tsx +334 -0
  203. package/Tests/App/Dashboard/DashboardVariableAllContract.test.tsx +539 -0
  204. package/Tests/App/Dashboard/DashboardVariableSelector.test.tsx +678 -0
  205. package/Tests/App/Dashboard/DashboardVariablesDiscard.test.tsx +706 -0
  206. package/Tests/App/Dashboard/DashboardVariablesModal.test.tsx +508 -0
  207. package/Tests/App/Dashboard/DataSourceChartSyntheticConfig.test.tsx +736 -0
  208. package/Tests/App/Dashboard/DataSourceQueryEditor.test.tsx +868 -0
  209. package/Tests/App/Dashboard/DataSourceWidgetCatalog.test.ts +440 -0
  210. package/Tests/App/Dashboard/DataSourceWidgetFetching.test.tsx +2109 -0
  211. package/Tests/App/Dashboard/DataSourceWidgetViews.test.tsx +726 -0
  212. package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +447 -0
  213. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +514 -3
  214. package/Tests/App/Dashboard/ProductMenuBreadcrumbs.test.tsx +391 -0
  215. package/Tests/App/Dashboard/ScheduledMaintenanceSideMenu.test.tsx +326 -0
  216. package/Tests/App/Dashboard/SideMenuHarness.tsx +187 -0
  217. package/Tests/App/Dashboard/WidgetCatalog.test.ts +6 -1
  218. package/Tests/App/PublicDashboard/DashboardVariableSelector.test.tsx +470 -0
  219. package/Tests/App/StatusPage/StatusPageDetailPagesNotFound.test.tsx +308 -0
  220. package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +1858 -0
  221. package/Tests/Models/DatabaseModels/DataSourceModelSecrets.test.ts +70 -0
  222. package/Tests/Models/DatabaseModels/DeletedProjectModel.test.ts +251 -0
  223. package/Tests/Models/DatabaseModels/SavedViewJSONColumnTuples.test.ts +115 -0
  224. package/Tests/Server/API/AIInvestigationAPI.test.ts +187 -0
  225. package/Tests/Server/API/DashboardPublicDataSourceStrip.test.ts +686 -0
  226. package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +585 -823
  227. package/Tests/Server/API/DataSourceAPIRoutes.test.ts +486 -0
  228. package/Tests/Server/API/FileAPIAccessControl.test.ts +316 -0
  229. package/Tests/Server/API/ProjectAPI.test.ts +299 -1
  230. package/Tests/Server/API/ProjectAPIAdjustBalance.test.ts +459 -0
  231. package/Tests/Server/API/ProjectAPIAdjustBalanceBillingDisabled.test.ts +177 -0
  232. package/Tests/Server/API/StatusPageSubscriberOwnership.test.ts +291 -0
  233. package/Tests/Server/API/UserAuthenticationAPI.test.ts +641 -0
  234. package/Tests/Server/Infrastructure/ClickhouseKeepAliveOptions.test.ts +441 -0
  235. package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +140 -0
  236. package/Tests/Server/Services/AIInsightService.test.ts +266 -11
  237. package/Tests/Server/Services/AIRunAnalysisTldrPersistence.test.ts +160 -0
  238. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +4 -0
  239. package/Tests/Server/Services/AlertMetricResourceAttributes.test.ts +352 -0
  240. package/Tests/Server/Services/DataSourceServiceSettings.test.ts +244 -0
  241. package/Tests/Server/Services/DatabaseServiceDeletionReason.test.ts +123 -0
  242. package/Tests/Server/Services/DeletedProjectService.test.ts +415 -0
  243. package/Tests/Server/Services/DeletedProjectServiceSelfHosted.test.ts +70 -0
  244. package/Tests/Server/Services/DomainSubdomainHooks.test.ts +94 -0
  245. package/Tests/Server/Services/FileIsPublicBooleanMigration.test.ts +244 -0
  246. package/Tests/Server/Services/FileServiceMimeType.test.ts +89 -0
  247. package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +397 -0
  248. package/Tests/Server/Services/HostServiceUpdateLastSeen.test.ts +41 -2
  249. package/Tests/Server/Services/IncidentMetricResourceAttributes.test.ts +408 -0
  250. package/Tests/Server/Services/MonitorServiceDependencyValidation.test.ts +702 -0
  251. package/Tests/Server/Services/MonitorStatusServiceDeleteReferenceCleanup.test.ts +351 -0
  252. package/Tests/Server/Services/MonitorStatusServiceValidation.test.ts +171 -0
  253. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +398 -0
  254. package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +19 -0
  255. package/Tests/Server/Services/ProjectCallSMSConfigCredentialUniqueness.test.ts +305 -0
  256. package/Tests/Server/Services/ProjectServiceAdjustBalance.test.ts +615 -0
  257. package/Tests/Server/Services/ProjectServiceDeleteAudit.test.ts +406 -0
  258. package/Tests/Server/Services/PublishTimeImageVisibility.test.ts +450 -0
  259. package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +36 -1
  260. package/Tests/Server/Services/RumSessionPinUniqueViolationRecovery.test.ts +163 -0
  261. package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +669 -0
  262. package/Tests/Server/Services/UserAuthenticationService.test.ts +973 -0
  263. package/Tests/Server/Services/UserWebhookSSRF.test.ts +174 -0
  264. package/Tests/Server/Services/WebPushEndpointAllowlist.test.ts +133 -0
  265. package/Tests/Server/Services/WorkspaceProjectAuthTokenRepoint.test.ts +618 -0
  266. package/Tests/Server/Types/Database/ObjectIdColumnQuery.test.ts +262 -0
  267. package/Tests/Server/Types/Database/Permissions/TenantPermission.test.ts +358 -0
  268. package/Tests/Server/Types/Workflow/Components/ApiComponentErrorPort.test.ts +26 -1
  269. package/Tests/Server/Types/Workflow/Components/ApiComponentSsrf.test.ts +215 -0
  270. package/Tests/Server/Types/Workflow/Components/BaseModelDatabaseComponents.test.ts +742 -0
  271. package/Tests/Server/Types/Workflow/Components/ChatWebhookComponents.test.ts +256 -0
  272. package/Tests/Server/Types/Workflow/Components/ModelArguments.test.ts +371 -0
  273. package/Tests/Server/Utils/AI/CodeAgentCommandGuard.test.ts +204 -0
  274. package/Tests/Server/Utils/AI/CodeAgentWriteLimits.test.ts +213 -0
  275. package/Tests/Server/Utils/AI/CodeWriteTools.test.ts +52 -5
  276. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +2 -2
  277. package/Tests/Server/Utils/AI/Insights/ExceptionSpikeDetector.test.ts +6 -1
  278. package/Tests/Server/Utils/AI/Insights/InsightStore.test.ts +121 -4
  279. package/Tests/Server/Utils/AI/Insights/NewExceptionDetector.test.ts +361 -10
  280. package/Tests/Server/Utils/AI/InvestigationSettlement.test.ts +292 -0
  281. package/Tests/Server/Utils/AI/InvestigationTldr.test.ts +623 -0
  282. package/Tests/Server/Utils/AI/InvestigationTldrWiring.test.ts +98 -0
  283. package/Tests/Server/Utils/AI/LLMServiceBaseUrl.test.ts +3 -0
  284. package/Tests/Server/Utils/AI/LLMServiceEgressGuard.test.ts +315 -0
  285. package/Tests/Server/Utils/AI/LLMServiceModelCompatibility.test.ts +3 -0
  286. package/Tests/Server/Utils/AI/LLMServiceRequestPolicy.test.ts +17 -5
  287. package/Tests/Server/Utils/AI/LLMServiceToolCalling.test.ts +14 -1
  288. package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +35 -0
  289. package/Tests/Server/Utils/AI/StubLLMEgressGuard.ts +25 -0
  290. package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +912 -0
  291. package/Tests/Server/Utils/Dashboard/PublicDashboardViewConfig.test.ts +480 -0
  292. package/Tests/Server/Utils/DataSource/ClickHouseConnector.test.ts +759 -0
  293. package/Tests/Server/Utils/DataSource/ConnectorRegistry.test.ts +37 -0
  294. package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +714 -0
  295. package/Tests/Server/Utils/DataSource/EgressGuardPinning.test.ts +330 -0
  296. package/Tests/Server/Utils/DataSource/ElasticsearchConnector.test.ts +1206 -0
  297. package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +616 -0
  298. package/Tests/Server/Utils/DataSource/LokiConnector.test.ts +970 -0
  299. package/Tests/Server/Utils/DataSource/MySqlConnector.test.ts +935 -0
  300. package/Tests/Server/Utils/DataSource/PostgresConnector.test.ts +854 -0
  301. package/Tests/Server/Utils/DataSource/PrometheusConnector.test.ts +881 -0
  302. package/Tests/Server/Utils/DataSource/RestApiConnector.test.ts +1020 -0
  303. package/Tests/Server/Utils/DataSource/SqlQueryGuard.test.ts +425 -0
  304. package/Tests/Server/Utils/DataSource/SqlResultShaper.test.ts +555 -0
  305. package/Tests/Server/Utils/DataSource/SqlServerConnector.test.ts +934 -0
  306. package/Tests/Server/Utils/Database/PostgresErrorTranslator.test.ts +228 -7
  307. package/Tests/Server/Utils/GitHubCreatePullRequestWithToken.test.ts +393 -0
  308. package/Tests/Server/Utils/InProcessMemo.test.ts +292 -0
  309. package/Tests/Server/Utils/InlineImageAccessTokenSync.test.ts +202 -0
  310. package/Tests/Server/Utils/InstanceHealth/TelemetryIngestion.test.ts +960 -0
  311. package/Tests/Server/Utils/MicrosoftTeamsWebhookUrlValidation.test.ts +103 -0
  312. package/Tests/Server/Utils/Monitor/MonitorDependencySuppression.test.ts +811 -0
  313. package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +604 -0
  314. package/Tests/Server/Utils/Monitor/MonitorMetricResourceAttributes.test.ts +336 -0
  315. package/Tests/Server/Utils/OfflineAssetHygiene.test.ts +521 -0
  316. package/Tests/Server/Utils/ResponseRenderAnalytics.test.ts +143 -0
  317. package/Tests/Server/Utils/ResponseSendFileResponse.test.ts +192 -0
  318. package/Tests/Server/Utils/SSRFProtection.test.ts +193 -0
  319. package/Tests/Server/Utils/SSRFProtectionBypasses.test.ts +406 -0
  320. package/Tests/Server/Utils/StatusPageSubscriberWebhook.test.ts +101 -0
  321. package/Tests/Server/Utils/TailwindBuildCopy.test.ts +225 -0
  322. package/Tests/Server/Utils/Telemetry/ResourceHeartbeatL1Memo.test.ts +355 -0
  323. package/Tests/Server/Utils/Telemetry/TelemetryFanInWriter.test.ts +128 -0
  324. package/Tests/Server/Utils/Telemetry/TelemetryUtilAttributeKeys.test.ts +381 -0
  325. package/Tests/Server/Utils/Telemetry.test.ts +87 -0
  326. package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +194 -0
  327. package/Tests/Server/Utils/VendorAssetIntegrity.test.ts +343 -0
  328. package/Tests/Server/Utils/VendorAssets.test.ts +671 -0
  329. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +1169 -0
  330. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelsList.test.ts +2 -0
  331. package/Tests/Server/Utils/Workspace/MicrosoftTeamsTeamInstalls.test.ts +1605 -0
  332. package/Tests/Server/Utils/Workspace/MicrosoftTeamsTenantResolution.test.ts +1218 -0
  333. package/Tests/Server/Views/OfflineRender.test.ts +297 -0
  334. package/Tests/Types/AI/AIChatMessageStatus.test.ts +79 -0
  335. package/Tests/Types/AI/AIInsightStatus.test.ts +40 -0
  336. package/Tests/Types/API/HostnameAuthorityParsing.test.ts +157 -0
  337. package/Tests/Types/Dashboard/DashboardTemplateInvariants.test.ts +27 -0
  338. package/Tests/Types/Dashboard/DataSourceComponentTypes.test.ts +618 -0
  339. package/Tests/Types/DataSource/DataSourceLimits.test.ts +71 -0
  340. package/Tests/Types/DataSource/DataSourceType.test.ts +181 -0
  341. package/Tests/Types/DateClickhouseFormat.test.ts +192 -0
  342. package/Tests/Types/DomainSubdomainValidation.test.ts +90 -0
  343. package/Tests/Types/JSONFunctions.test.ts +252 -1
  344. package/Tests/Types/Monitor/SnmpMonitor/SnmpAuthProtocol.test.ts +61 -0
  345. package/Tests/Types/Monitor/SnmpMonitor/SnmpPrivProtocol.test.ts +62 -0
  346. package/Tests/Types/Monitor/SnmpMonitor/SnmpSecurityLevel.test.ts +68 -0
  347. package/Tests/Types/Monitor/SnmpMonitor/SnmpVersion.test.ts +51 -0
  348. package/Tests/Types/Password.test.ts +363 -0
  349. package/Tests/UI/Components/404.test.tsx +1 -1
  350. package/Tests/UI/Components/Alert.test.tsx +1 -1
  351. package/Tests/UI/Components/Badge.test.tsx +1 -1
  352. package/Tests/UI/Components/BasicForm.test.tsx +39 -10
  353. package/Tests/UI/Components/Button.test.tsx +1 -1
  354. package/Tests/UI/Components/Card.test.tsx +1 -1
  355. package/Tests/UI/Components/Charts/AxisTickColor.test.tsx +1 -1
  356. package/Tests/UI/Components/ColorViewer.test.tsx +1 -1
  357. package/Tests/UI/Components/ComponentsModal.test.tsx +7 -1
  358. package/Tests/UI/Components/ConfirmModal.test.tsx +7 -0
  359. package/Tests/UI/Components/DictionaryOfStrings.test.tsx +1 -1
  360. package/Tests/UI/Components/Dropdown.test.tsx +1 -1
  361. package/Tests/UI/Components/ErrorBoundary.test.tsx +53 -0
  362. package/Tests/UI/Components/FilePicker.test.tsx +1 -1
  363. package/Tests/UI/Components/HiddenText.test.tsx +1 -1
  364. package/Tests/UI/Components/Input.test.tsx +1 -1
  365. package/Tests/UI/Components/Loader.test.tsx +1 -1
  366. package/Tests/UI/Components/LogTimeRangePicker.test.tsx +1 -1
  367. package/Tests/UI/Components/MasterPage.test.tsx +1 -1
  368. package/Tests/UI/Components/Modal.test.tsx +281 -1
  369. package/Tests/UI/Components/ModalPortalDismissal.test.tsx +489 -0
  370. package/Tests/UI/Components/ModelDelete.test.tsx +214 -0
  371. package/Tests/UI/Components/ModelTable/BaseModelTableBulkSelectAll.test.tsx +1 -1
  372. package/Tests/UI/Components/ModelTable/BaseModelTableColumnCustomization.test.tsx +1 -1
  373. package/Tests/UI/Components/ModelTable/BaseModelTableSearchLabels.test.tsx +1 -1
  374. package/Tests/UI/Components/ModelTable/BaseModelTableUrlState.test.tsx +1 -1
  375. package/Tests/UI/Components/ModelTable/CustomFieldColumns.test.tsx +1 -1
  376. package/Tests/UI/Components/NavBar.test.tsx +1 -1
  377. package/Tests/UI/Components/ObjectIdFilterPipeline.test.tsx +396 -0
  378. package/Tests/UI/Components/OperatorSelectorKeyboard.test.tsx +1 -1
  379. package/Tests/UI/Components/Pagination.test.tsx +1 -1
  380. package/Tests/UI/Components/Pill.test.tsx +1 -1
  381. package/Tests/UI/Components/Probe.test.tsx +1 -1
  382. package/Tests/UI/Components/ProgressBar.test.tsx +1 -1
  383. package/Tests/UI/Components/RadioButtons.test.tsx +1 -1
  384. package/Tests/UI/Components/SideMenuItem.test.tsx +1 -1
  385. package/Tests/UI/Components/SideOver.test.tsx +500 -6
  386. package/Tests/UI/Components/StatusPage/ResourceGroupNavigator.test.tsx +1147 -0
  387. package/Tests/UI/Components/Tabs.test.tsx +1 -1
  388. package/Tests/UI/Components/TelemetrySearchBar.test.tsx +1 -1
  389. package/Tests/UI/Components/TelemetryTimeRangePicker.test.tsx +1 -1
  390. package/Tests/UI/Components/TextArea.test.tsx +1 -1
  391. package/Tests/UI/Components/Toast.test.tsx +1 -1
  392. package/Tests/UI/Components/Toggle.test.tsx +1 -1
  393. package/Tests/UI/Components/TopSection.test.tsx +1 -1
  394. package/Tests/UI/Components/UseLiveLogsRefresh.test.tsx +1 -1
  395. package/Tests/UI/Rum/ReplayScrubber.test.tsx +1 -1
  396. package/Tests/UI/Rum/ReplayStage.test.tsx +1 -1
  397. package/Tests/UI/Telemetry/TelemetrySnapshotWindowAlert.test.tsx +1 -1
  398. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +116 -1
  399. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
  400. package/Tests/UI/Utils/LocalStorageArrayRoundTrip.test.ts +72 -0
  401. package/Tests/Utils/Analytics.test.ts +23 -0
  402. package/Tests/Utils/Dashboard/Components/DashboardDataSourceComponents.test.ts +640 -0
  403. package/Tests/Utils/Dashboard/HtmlWidgetDocument.test.ts +19 -2
  404. package/Tests/Utils/Dashboard/ModelQueryVariableInterpolation.test.ts +44 -0
  405. package/Tests/Utils/Dashboard/VariableInterpolation.test.ts +288 -5
  406. package/Tests/Utils/Dashboard/VariableUrlState.test.ts +42 -0
  407. package/Tests/Utils/DataSource/DataSourceQueryText.test.ts +165 -0
  408. package/Tests/Utils/DataSource/DataSourceValueReducer.test.ts +526 -0
  409. package/Tests/Utils/LegacySerializedArray.test.ts +139 -0
  410. package/Tests/Utils/Metrics/MetricResourceAttributeUtil.test.ts +691 -0
  411. package/Tests/Utils/Monitor/MonitorDependencyRule.test.ts +190 -0
  412. package/Tests/Utils/Realtime.test.ts +78 -0
  413. package/Tests/Utils/StatusPage/GroupHierarchyView.test.ts +1452 -0
  414. package/Tests/Utils/StatusPage/ResourceExplorer.test.ts +931 -0
  415. package/Tests/Utils/Telemetry/CaptureSpanExportGating.test.ts +288 -0
  416. package/Tests/Utils/Telemetry/IngestionTimestamp.test.ts +170 -0
  417. package/Tests/Utils/Telemetry/SavedViewFilters.test.ts +246 -0
  418. package/Tests/__mocks__/i18next-browser-languagedetector.js +21 -0
  419. package/Types/AI/AIInsightEvidence.ts +6 -0
  420. package/Types/AI/FixPullRequestCiStatus.ts +1 -1
  421. package/Types/AI/FixVerificationStatus.ts +2 -2
  422. package/Types/API/Hostname.ts +92 -4
  423. package/Types/API/URL.ts +43 -25
  424. package/Types/Analytics/RevenueEvent.ts +31 -0
  425. package/Types/Billing/BalanceAdjustmentType.ts +14 -0
  426. package/Types/Billing/ProjectBalanceType.ts +13 -0
  427. package/Types/Dashboard/DashboardComponentType.ts +31 -0
  428. package/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.ts +27 -0
  429. package/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.ts +32 -0
  430. package/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.ts +30 -0
  431. package/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.ts +55 -0
  432. package/Types/DataSource/DataSourceLimits.ts +62 -0
  433. package/Types/DataSource/DataSourceQueryConfig.ts +41 -0
  434. package/Types/DataSource/DataSourceTableResult.ts +38 -0
  435. package/Types/DataSource/DataSourceType.ts +213 -0
  436. package/Types/Date.ts +43 -3
  437. package/Types/Domain.ts +26 -0
  438. package/Types/File/MimeType.ts +11 -0
  439. package/Types/JSONFunctions.ts +15 -0
  440. package/Types/Password.ts +64 -0
  441. package/Types/Permission.ts +46 -0
  442. package/Types/Telemetry/TelemetrySavedViewState.ts +9 -1
  443. package/Types/UserAuthenticationStatus.ts +34 -0
  444. package/Types/Workflow/Components/BaseModel.ts +92 -28
  445. package/Typings/Index.d.ts +12 -0
  446. package/UI/Components/Button/Button.tsx +1 -1
  447. package/UI/Components/ErrorBoundary.tsx +459 -108
  448. package/UI/Components/GanttChart/ChartContainer.tsx +4 -3
  449. package/UI/Components/Icon/Icon.tsx +10 -9
  450. package/UI/Components/Modal/ConfirmModal.tsx +15 -5
  451. package/UI/Components/Modal/Modal.tsx +247 -35
  452. package/UI/Components/Modal/ModalFooter.tsx +6 -1
  453. package/UI/Components/ModelDelete/ModelDelete.tsx +23 -6
  454. package/UI/Components/MoreMenu/MoreMenu.tsx +19 -4
  455. package/UI/Components/MoreMenu/MoreMenuItem.tsx +6 -1
  456. package/UI/Components/SideOver/SideOver.tsx +195 -68
  457. package/UI/Components/StatusPage/ResourceGrid.tsx +314 -0
  458. package/UI/Components/StatusPage/ResourceGroupNavigator.tsx +808 -0
  459. package/UI/Components/StatusPage/ResourceList.tsx +570 -0
  460. package/UI/Styles/Theme.css +18 -0
  461. package/UI/Utils/API/RequestOptions.ts +7 -0
  462. package/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.ts +1 -0
  463. package/UI/Utils/ModelAPI/ModelAPI.ts +1 -0
  464. package/UI/Utils/PageScrollLock.ts +66 -0
  465. package/UI/Utils/TestDataSource.ts +61 -0
  466. package/UI/esbuild-config.js +45 -0
  467. package/Utils/Analytics.ts +15 -0
  468. package/Utils/Dashboard/Components/DashboardDataSourceChartComponent.ts +88 -0
  469. package/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.ts +123 -0
  470. package/Utils/Dashboard/Components/DashboardDataSourceShared.ts +16 -0
  471. package/Utils/Dashboard/Components/DashboardDataSourceTableComponent.ts +72 -0
  472. package/Utils/Dashboard/Components/DashboardDataSourceValueComponent.ts +126 -0
  473. package/Utils/Dashboard/Components/Index.ts +28 -0
  474. package/Utils/Dashboard/HtmlWidgetDocument.ts +4 -2
  475. package/Utils/Dashboard/VariableInterpolation.ts +19 -1
  476. package/Utils/DataSource/DataSourceQueryText.ts +94 -0
  477. package/Utils/DataSource/DataSourceValueReducer.ts +156 -0
  478. package/Utils/LegacySerializedArray.ts +60 -0
  479. package/Utils/Metrics/MetricResourceAttributeUtil.ts +380 -0
  480. package/Utils/Monitor/MonitorDependencyRule.ts +88 -0
  481. package/Utils/NetworkDiscovery/ScanTargetUtil.ts +8 -6
  482. package/Utils/StatusPage/GroupHierarchyView.ts +931 -0
  483. package/Utils/StatusPage/ResourceExplorer.ts +853 -0
  484. package/Utils/Telemetry/SavedViewFilters.ts +88 -0
  485. package/build/dist/Models/DatabaseModels/AIInsight.js +1 -1
  486. package/build/dist/Models/DatabaseModels/AIInsight.js.map +1 -1
  487. package/build/dist/Models/DatabaseModels/AIRun.js +34 -0
  488. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  489. package/build/dist/Models/DatabaseModels/DataSource.js +774 -0
  490. package/build/dist/Models/DatabaseModels/DataSource.js.map +1 -0
  491. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/FileModel.js +2 -3
  492. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/FileModel.js.map +1 -1
  493. package/build/dist/Models/DatabaseModels/DeletedProject.js +640 -0
  494. package/build/dist/Models/DatabaseModels/DeletedProject.js.map +1 -0
  495. package/build/dist/Models/DatabaseModels/Index.js +4 -0
  496. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  497. package/build/dist/Models/DatabaseModels/Monitor.js +106 -0
  498. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  499. package/build/dist/Models/DatabaseModels/Project.js +3 -3
  500. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  501. package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js +14 -4
  502. package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js.map +1 -1
  503. package/build/dist/Models/DatabaseModels/User.js +2 -0
  504. package/build/dist/Models/DatabaseModels/User.js.map +1 -1
  505. package/build/dist/Models/DatabaseModels/UserOnCallLog.js +2 -0
  506. package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
  507. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +2 -0
  508. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
  509. package/build/dist/Models/DatabaseModels/UserSession.js +2 -0
  510. package/build/dist/Models/DatabaseModels/UserSession.js.map +1 -1
  511. package/build/dist/Models/DatabaseModels/UserTotpAuth.js +6 -4
  512. package/build/dist/Models/DatabaseModels/UserTotpAuth.js.map +1 -1
  513. package/build/dist/Models/DatabaseModels/UserWebAuthn.js +5 -3
  514. package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
  515. package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
  516. package/build/dist/Server/API/AIInsightAPI.js +34 -4
  517. package/build/dist/Server/API/AIInsightAPI.js.map +1 -1
  518. package/build/dist/Server/API/AIInvestigationAPI.js +23 -0
  519. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  520. package/build/dist/Server/API/DashboardAPI.js +119 -433
  521. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  522. package/build/dist/Server/API/DataSourceAPI.js +173 -0
  523. package/build/dist/Server/API/DataSourceAPI.js.map +1 -0
  524. package/build/dist/Server/API/FileAPI.js +14 -2
  525. package/build/dist/Server/API/FileAPI.js.map +1 -1
  526. package/build/dist/Server/API/MicrosoftTeamsAPI.js +6 -1
  527. package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
  528. package/build/dist/Server/API/ProjectAPI.js +157 -4
  529. package/build/dist/Server/API/ProjectAPI.js.map +1 -1
  530. package/build/dist/Server/API/StatusPageAPI.js +38 -4
  531. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  532. package/build/dist/Server/API/UserAPI.js +94 -2
  533. package/build/dist/Server/API/UserAPI.js.map +1 -1
  534. package/build/dist/Server/Infrastructure/ClickhouseConfig.js +49 -0
  535. package/build/dist/Server/Infrastructure/ClickhouseConfig.js.map +1 -1
  536. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.js +20 -0
  537. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786303472848-AddDataSourceTable.js.map +1 -0
  538. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786446545142-MigrationName.js +34 -0
  539. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786446545142-MigrationName.js.map +1 -0
  540. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786449497966-AddMonitorDependency.js +30 -0
  541. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786449497966-AddMonitorDependency.js.map +1 -0
  542. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786461136170-AddDeletedProjectTable.js +20 -0
  543. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786461136170-AddDeletedProjectTable.js.map +1 -0
  544. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.js +19 -0
  545. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786600000000-AddInvestigationAnalysisTldr.js.map +1 -0
  546. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.js +64 -0
  547. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1786700000000-DropProjectCallSMSConfigCredentialUniques.js.map +1 -0
  548. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
  549. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  550. package/build/dist/Server/Infrastructure/Queue.js +27 -0
  551. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  552. package/build/dist/Server/Infrastructure/QueueWorker.js +13 -0
  553. package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
  554. package/build/dist/Server/Middleware/TelemetryIngest.js +8 -3
  555. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  556. package/build/dist/Server/Services/AIAgentService.js +17 -0
  557. package/build/dist/Server/Services/AIAgentService.js.map +1 -1
  558. package/build/dist/Server/Services/AIInsightService.js +110 -10
  559. package/build/dist/Server/Services/AIInsightService.js.map +1 -1
  560. package/build/dist/Server/Services/AIRunService.js +34 -0
  561. package/build/dist/Server/Services/AIRunService.js.map +1 -1
  562. package/build/dist/Server/Services/AIService.js +16 -2
  563. package/build/dist/Server/Services/AIService.js.map +1 -1
  564. package/build/dist/Server/Services/AlertService.js +28 -35
  565. package/build/dist/Server/Services/AlertService.js.map +1 -1
  566. package/build/dist/Server/Services/AnalyticsDatabaseService.js +8 -4
  567. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  568. package/build/dist/Server/Services/DashboardDomainService.js +55 -18
  569. package/build/dist/Server/Services/DashboardDomainService.js.map +1 -1
  570. package/build/dist/Server/Services/DataSourceService.js +159 -0
  571. package/build/dist/Server/Services/DataSourceService.js.map +1 -0
  572. package/build/dist/Server/Services/DatabaseService.js +1 -0
  573. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  574. package/build/dist/Server/Services/DeletedProjectService.js +124 -0
  575. package/build/dist/Server/Services/DeletedProjectService.js.map +1 -0
  576. package/build/dist/Server/Services/FileService.js +52 -0
  577. package/build/dist/Server/Services/FileService.js.map +1 -1
  578. package/build/dist/Server/Services/HostService.js +74 -0
  579. package/build/dist/Server/Services/HostService.js.map +1 -1
  580. package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +10 -1
  581. package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -1
  582. package/build/dist/Server/Services/IncidentPublicNoteService.js +10 -1
  583. package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
  584. package/build/dist/Server/Services/IncidentService.js +35 -24
  585. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  586. package/build/dist/Server/Services/Index.js +4 -0
  587. package/build/dist/Server/Services/Index.js.map +1 -1
  588. package/build/dist/Server/Services/MonitorService.js +277 -0
  589. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  590. package/build/dist/Server/Services/MonitorStatusService.js +129 -0
  591. package/build/dist/Server/Services/MonitorStatusService.js.map +1 -1
  592. package/build/dist/Server/Services/OpenTelemetryIngestService.js +222 -159
  593. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  594. package/build/dist/Server/Services/ProbeService.js +17 -0
  595. package/build/dist/Server/Services/ProbeService.js.map +1 -1
  596. package/build/dist/Server/Services/ProjectService.js +228 -6
  597. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  598. package/build/dist/Server/Services/PushNotificationService.js +56 -0
  599. package/build/dist/Server/Services/PushNotificationService.js.map +1 -1
  600. package/build/dist/Server/Services/RumSessionPinService.js +7 -15
  601. package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
  602. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +10 -1
  603. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
  604. package/build/dist/Server/Services/StatusPageAnnouncementService.js +54 -0
  605. package/build/dist/Server/Services/StatusPageAnnouncementService.js.map +1 -1
  606. package/build/dist/Server/Services/StatusPageDomainService.js +55 -18
  607. package/build/dist/Server/Services/StatusPageDomainService.js.map +1 -1
  608. package/build/dist/Server/Services/StatusPageSubscriberService.js +10 -0
  609. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  610. package/build/dist/Server/Services/TeamMemberService.js +97 -6
  611. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  612. package/build/dist/Server/Services/TelemetryIngestionKeyService.js +1 -0
  613. package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
  614. package/build/dist/Server/Services/UserService.js +241 -10
  615. package/build/dist/Server/Services/UserService.js.map +1 -1
  616. package/build/dist/Server/Services/UserWebhookService.js +31 -87
  617. package/build/dist/Server/Services/UserWebhookService.js.map +1 -1
  618. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +65 -0
  619. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
  620. package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js +23 -0
  621. package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js.map +1 -1
  622. package/build/dist/Server/Types/Database/Permissions/BasePermission.js +6 -0
  623. package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
  624. package/build/dist/Server/Types/Database/Permissions/DeletePermission.js +1 -0
  625. package/build/dist/Server/Types/Database/Permissions/DeletePermission.js.map +1 -1
  626. package/build/dist/Server/Types/Database/Permissions/ReadPermission.js +2 -0
  627. package/build/dist/Server/Types/Database/Permissions/ReadPermission.js.map +1 -1
  628. package/build/dist/Server/Types/Database/Permissions/TenantPermission.js +68 -12
  629. package/build/dist/Server/Types/Database/Permissions/TenantPermission.js.map +1 -1
  630. package/build/dist/Server/Types/Domain.js +37 -0
  631. package/build/dist/Server/Types/Domain.js.map +1 -1
  632. package/build/dist/Server/Types/Workflow/Components/API/Delete.js +2 -1
  633. package/build/dist/Server/Types/Workflow/Components/API/Delete.js.map +1 -1
  634. package/build/dist/Server/Types/Workflow/Components/API/Get.js +2 -1
  635. package/build/dist/Server/Types/Workflow/Components/API/Get.js.map +1 -1
  636. package/build/dist/Server/Types/Workflow/Components/API/Patch.js +2 -1
  637. package/build/dist/Server/Types/Workflow/Components/API/Patch.js.map +1 -1
  638. package/build/dist/Server/Types/Workflow/Components/API/Post.js +2 -1
  639. package/build/dist/Server/Types/Workflow/Components/API/Post.js.map +1 -1
  640. package/build/dist/Server/Types/Workflow/Components/API/Put.js +2 -1
  641. package/build/dist/Server/Types/Workflow/Components/API/Put.js.map +1 -1
  642. package/build/dist/Server/Types/Workflow/Components/API/Utils.js +35 -2
  643. package/build/dist/Server/Types/Workflow/Components/API/Utils.js.map +1 -1
  644. package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.js +15 -11
  645. package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateManyBaseModel.js.map +1 -1
  646. package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.js +2 -3
  647. package/build/dist/Server/Types/Workflow/Components/BaseModel/CreateOneBaseModel.js.map +1 -1
  648. package/build/dist/Server/Types/Workflow/Components/BaseModel/DeleteManyBaseModel.js +21 -10
  649. package/build/dist/Server/Types/Workflow/Components/BaseModel/DeleteManyBaseModel.js.map +1 -1
  650. package/build/dist/Server/Types/Workflow/Components/BaseModel/DeleteOneBaseModel.js +21 -10
  651. package/build/dist/Server/Types/Workflow/Components/BaseModel/DeleteOneBaseModel.js.map +1 -1
  652. package/build/dist/Server/Types/Workflow/Components/BaseModel/FindManyBaseModel.js +18 -13
  653. package/build/dist/Server/Types/Workflow/Components/BaseModel/FindManyBaseModel.js.map +1 -1
  654. package/build/dist/Server/Types/Workflow/Components/BaseModel/FindOneBaseModel.js +18 -13
  655. package/build/dist/Server/Types/Workflow/Components/BaseModel/FindOneBaseModel.js.map +1 -1
  656. package/build/dist/Server/Types/Workflow/Components/BaseModel/LogComponentError.js +43 -0
  657. package/build/dist/Server/Types/Workflow/Components/BaseModel/LogComponentError.js.map +1 -0
  658. package/build/dist/Server/Types/Workflow/Components/BaseModel/ModelArguments.js +116 -0
  659. package/build/dist/Server/Types/Workflow/Components/BaseModel/ModelArguments.js.map +1 -0
  660. package/build/dist/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.js +7 -0
  661. package/build/dist/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.js.map +1 -1
  662. package/build/dist/Server/Types/Workflow/Components/BaseModel/UpdateManyBaseModel.js +24 -13
  663. package/build/dist/Server/Types/Workflow/Components/BaseModel/UpdateManyBaseModel.js.map +1 -1
  664. package/build/dist/Server/Types/Workflow/Components/BaseModel/UpdateOneBaseModel.js +27 -13
  665. package/build/dist/Server/Types/Workflow/Components/BaseModel/UpdateOneBaseModel.js.map +1 -1
  666. package/build/dist/Server/Types/Workflow/Components/Discord/SendMessageToChannel.js +14 -6
  667. package/build/dist/Server/Types/Workflow/Components/Discord/SendMessageToChannel.js.map +1 -1
  668. package/build/dist/Server/Types/Workflow/Components/IncomingWebhookUtils.js +42 -0
  669. package/build/dist/Server/Types/Workflow/Components/IncomingWebhookUtils.js.map +1 -0
  670. package/build/dist/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.js +15 -6
  671. package/build/dist/Server/Types/Workflow/Components/MicrosoftTeams/SendMessageToChannel.js.map +1 -1
  672. package/build/dist/Server/Types/Workflow/Components/Slack/SendMessageToChannel.js +10 -2
  673. package/build/dist/Server/Types/Workflow/Components/Slack/SendMessageToChannel.js.map +1 -1
  674. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +1 -1
  675. package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js +141 -0
  676. package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js.map +1 -1
  677. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +2 -2
  678. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
  679. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +68 -8
  680. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  681. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +1 -0
  682. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  683. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +1 -0
  684. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  685. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.js +97 -0
  686. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionIdentity.js.map +1 -0
  687. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js +17 -15
  688. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/ExceptionSpikeDetector.js.map +1 -1
  689. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js +178 -54
  690. package/build/dist/Server/Utils/AI/SRE/Insights/Detectors/NewExceptionDetector.js.map +1 -1
  691. package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js.map +1 -1
  692. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js +65 -16
  693. package/build/dist/Server/Utils/AI/SRE/Insights/InsightStore.js.map +1 -1
  694. package/build/dist/Server/Utils/AI/SRE/InvestigationTldr.js +303 -0
  695. package/build/dist/Server/Utils/AI/SRE/InvestigationTldr.js.map +1 -0
  696. package/build/dist/Server/Utils/AI/SRE/TelemetryImprovementTaskTrigger.js +1 -1
  697. package/build/dist/Server/Utils/AI/Toolbox/CodeWriteTools.js +6 -6
  698. package/build/dist/Server/Utils/AI/Toolbox/CodeWriteTools.js.map +1 -1
  699. package/build/dist/Server/Utils/AnalyticsDatabase/InsertDedupContext.js.map +1 -1
  700. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js +39 -5
  701. package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
  702. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +1261 -0
  703. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -0
  704. package/build/dist/Server/Utils/Dashboard/PublicDashboardViewConfig.js +47 -0
  705. package/build/dist/Server/Utils/Dashboard/PublicDashboardViewConfig.js.map +1 -0
  706. package/build/dist/Server/Utils/DataSource/ConnectorRegistry.js +42 -0
  707. package/build/dist/Server/Utils/DataSource/ConnectorRegistry.js.map +1 -0
  708. package/build/dist/Server/Utils/DataSource/Connectors/ClickHouseConnector.js +187 -0
  709. package/build/dist/Server/Utils/DataSource/Connectors/ClickHouseConnector.js.map +1 -0
  710. package/build/dist/Server/Utils/DataSource/Connectors/ElasticsearchConnector.js +493 -0
  711. package/build/dist/Server/Utils/DataSource/Connectors/ElasticsearchConnector.js.map +1 -0
  712. package/build/dist/Server/Utils/DataSource/Connectors/LokiConnector.js +399 -0
  713. package/build/dist/Server/Utils/DataSource/Connectors/LokiConnector.js.map +1 -0
  714. package/build/dist/Server/Utils/DataSource/Connectors/MySqlConnector.js +195 -0
  715. package/build/dist/Server/Utils/DataSource/Connectors/MySqlConnector.js.map +1 -0
  716. package/build/dist/Server/Utils/DataSource/Connectors/PostgresConnector.js +149 -0
  717. package/build/dist/Server/Utils/DataSource/Connectors/PostgresConnector.js.map +1 -0
  718. package/build/dist/Server/Utils/DataSource/Connectors/PrometheusConnector.js +362 -0
  719. package/build/dist/Server/Utils/DataSource/Connectors/PrometheusConnector.js.map +1 -0
  720. package/build/dist/Server/Utils/DataSource/Connectors/RestApiConnector.js +342 -0
  721. package/build/dist/Server/Utils/DataSource/Connectors/RestApiConnector.js.map +1 -0
  722. package/build/dist/Server/Utils/DataSource/Connectors/SqlServerConnector.js +186 -0
  723. package/build/dist/Server/Utils/DataSource/Connectors/SqlServerConnector.js.map +1 -0
  724. package/build/dist/Server/Utils/DataSource/EgressGuard.js +389 -0
  725. package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -0
  726. package/build/dist/Server/Utils/DataSource/HttpFetch.js +116 -0
  727. package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -0
  728. package/build/dist/Server/Utils/DataSource/SqlQueryGuard.js +331 -0
  729. package/build/dist/Server/Utils/DataSource/SqlQueryGuard.js.map +1 -0
  730. package/build/dist/Server/Utils/DataSource/SqlResultShaper.js +280 -0
  731. package/build/dist/Server/Utils/DataSource/SqlResultShaper.js.map +1 -0
  732. package/build/dist/Server/Utils/DataSource/Types.js +2 -0
  733. package/build/dist/Server/Utils/DataSource/Types.js.map +1 -0
  734. package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js +103 -9
  735. package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js.map +1 -1
  736. package/build/dist/Server/Utils/Execute.js +2 -2
  737. package/build/dist/Server/Utils/Execute.js.map +1 -1
  738. package/build/dist/Server/Utils/InProcessMemo.js +113 -0
  739. package/build/dist/Server/Utils/InProcessMemo.js.map +1 -0
  740. package/build/dist/Server/Utils/InlineImageAccessTokenSync.js +13 -0
  741. package/build/dist/Server/Utils/InlineImageAccessTokenSync.js.map +1 -1
  742. package/build/dist/Server/Utils/InstanceHealth/TelemetryIngestion.js +406 -0
  743. package/build/dist/Server/Utils/InstanceHealth/TelemetryIngestion.js.map +1 -0
  744. package/build/dist/Server/Utils/LLM/LLMService.js +43 -12
  745. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  746. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +44 -24
  747. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  748. package/build/dist/Server/Utils/Monitor/MonitorDependencySuppression.js +158 -0
  749. package/build/dist/Server/Utils/Monitor/MonitorDependencySuppression.js.map +1 -0
  750. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +50 -30
  751. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  752. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +34 -0
  753. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  754. package/build/dist/Server/Utils/Monitor/MonitorResource.js +46 -0
  755. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  756. package/build/dist/Server/Utils/Response.js +121 -6
  757. package/build/dist/Server/Utils/Response.js.map +1 -1
  758. package/build/dist/Server/Utils/SSRFProtection.js +358 -0
  759. package/build/dist/Server/Utils/SSRFProtection.js.map +1 -0
  760. package/build/dist/Server/Utils/StartServer.js +14 -0
  761. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  762. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js +24 -0
  763. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js.map +1 -1
  764. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +25 -11
  765. package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
  766. package/build/dist/Server/Utils/Telemetry/IngestionTimestamp.js +32 -0
  767. package/build/dist/Server/Utils/Telemetry/IngestionTimestamp.js.map +1 -0
  768. package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js +92 -5
  769. package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -1
  770. package/build/dist/Server/Utils/Telemetry/Telemetry.js +92 -6
  771. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  772. package/build/dist/Server/Utils/Telemetry.js +93 -6
  773. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  774. package/build/dist/Server/Utils/VM/VMRunner.js +73 -1
  775. package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
  776. package/build/dist/Server/Utils/VendorAssets.js +121 -0
  777. package/build/dist/Server/Utils/VendorAssets.js.map +1 -0
  778. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +469 -46
  779. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  780. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +23 -1
  781. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  782. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
  783. package/build/dist/Types/AI/FixPullRequestCiStatus.js +1 -1
  784. package/build/dist/Types/AI/FixVerificationStatus.js +2 -2
  785. package/build/dist/Types/API/Hostname.js +73 -4
  786. package/build/dist/Types/API/Hostname.js.map +1 -1
  787. package/build/dist/Types/API/URL.js +42 -24
  788. package/build/dist/Types/API/URL.js.map +1 -1
  789. package/build/dist/Types/Analytics/RevenueEvent.js +26 -0
  790. package/build/dist/Types/Analytics/RevenueEvent.js.map +1 -0
  791. package/build/dist/Types/Billing/BalanceAdjustmentType.js +15 -0
  792. package/build/dist/Types/Billing/BalanceAdjustmentType.js.map +1 -0
  793. package/build/dist/Types/Billing/ProjectBalanceType.js +14 -0
  794. package/build/dist/Types/Billing/ProjectBalanceType.js.map +1 -0
  795. package/build/dist/Types/Dashboard/DashboardComponentType.js +27 -0
  796. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  797. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.js +2 -0
  798. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceChartComponent.js.map +1 -0
  799. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.js +2 -0
  800. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceGaugeComponent.js.map +1 -0
  801. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.js +2 -0
  802. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceTableComponent.js.map +1 -0
  803. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.js +16 -0
  804. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDataSourceValueComponent.js.map +1 -0
  805. package/build/dist/Types/DataSource/DataSourceLimits.js +47 -0
  806. package/build/dist/Types/DataSource/DataSourceLimits.js.map +1 -0
  807. package/build/dist/Types/DataSource/DataSourceQueryConfig.js +10 -0
  808. package/build/dist/Types/DataSource/DataSourceQueryConfig.js.map +1 -0
  809. package/build/dist/Types/DataSource/DataSourceTableResult.js +14 -0
  810. package/build/dist/Types/DataSource/DataSourceTableResult.js.map +1 -0
  811. package/build/dist/Types/DataSource/DataSourceType.js +183 -0
  812. package/build/dist/Types/DataSource/DataSourceType.js.map +1 -0
  813. package/build/dist/Types/Date.js +38 -3
  814. package/build/dist/Types/Date.js.map +1 -1
  815. package/build/dist/Types/Domain.js +22 -0
  816. package/build/dist/Types/Domain.js.map +1 -1
  817. package/build/dist/Types/File/MimeType.js +11 -0
  818. package/build/dist/Types/File/MimeType.js.map +1 -1
  819. package/build/dist/Types/JSONFunctions.js +14 -0
  820. package/build/dist/Types/JSONFunctions.js.map +1 -1
  821. package/build/dist/Types/Password.js +56 -0
  822. package/build/dist/Types/Password.js.map +1 -0
  823. package/build/dist/Types/Permission.js +42 -0
  824. package/build/dist/Types/Permission.js.map +1 -1
  825. package/build/dist/Types/UserAuthenticationStatus.js +2 -0
  826. package/build/dist/Types/UserAuthenticationStatus.js.map +1 -0
  827. package/build/dist/Types/Workflow/Components/BaseModel.js +83 -28
  828. package/build/dist/Types/Workflow/Components/BaseModel.js.map +1 -1
  829. package/build/dist/UI/Components/ErrorBoundary.js +388 -72
  830. package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
  831. package/build/dist/UI/Components/GanttChart/ChartContainer.js +4 -3
  832. package/build/dist/UI/Components/GanttChart/ChartContainer.js.map +1 -1
  833. package/build/dist/UI/Components/Icon/Icon.js +10 -4
  834. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  835. package/build/dist/UI/Components/Modal/ConfirmModal.js +3 -1
  836. package/build/dist/UI/Components/Modal/ConfirmModal.js.map +1 -1
  837. package/build/dist/UI/Components/Modal/Modal.js +168 -19
  838. package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
  839. package/build/dist/UI/Components/Modal/ModalFooter.js +3 -1
  840. package/build/dist/UI/Components/Modal/ModalFooter.js.map +1 -1
  841. package/build/dist/UI/Components/ModelDelete/ModelDelete.js +11 -6
  842. package/build/dist/UI/Components/ModelDelete/ModelDelete.js.map +1 -1
  843. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +9 -6
  844. package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
  845. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +7 -1
  846. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
  847. package/build/dist/UI/Components/SideOver/SideOver.js +105 -30
  848. package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
  849. package/build/dist/UI/Components/StatusPage/ResourceGrid.js +119 -0
  850. package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -0
  851. package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js +354 -0
  852. package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js.map +1 -0
  853. package/build/dist/UI/Components/StatusPage/ResourceList.js +203 -0
  854. package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -0
  855. package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js +1 -6
  856. package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js.map +1 -1
  857. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +3 -8
  858. package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
  859. package/build/dist/UI/Utils/PageScrollLock.js +52 -0
  860. package/build/dist/UI/Utils/PageScrollLock.js.map +1 -0
  861. package/build/dist/UI/Utils/TestDataSource.js +39 -0
  862. package/build/dist/UI/Utils/TestDataSource.js.map +1 -0
  863. package/build/dist/Utils/Analytics.js +4 -0
  864. package/build/dist/Utils/Analytics.js.map +1 -1
  865. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceChartComponent.js +79 -0
  866. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceChartComponent.js.map +1 -0
  867. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.js +111 -0
  868. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceGaugeComponent.js.map +1 -0
  869. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceShared.js +15 -0
  870. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceShared.js.map +1 -0
  871. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceTableComponent.js +62 -0
  872. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceTableComponent.js.map +1 -0
  873. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceValueComponent.js +112 -0
  874. package/build/dist/Utils/Dashboard/Components/DashboardDataSourceValueComponent.js.map +1 -0
  875. package/build/dist/Utils/Dashboard/Components/Index.js +16 -0
  876. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  877. package/build/dist/Utils/Dashboard/HtmlWidgetDocument.js +4 -2
  878. package/build/dist/Utils/Dashboard/HtmlWidgetDocument.js.map +1 -1
  879. package/build/dist/Utils/Dashboard/VariableInterpolation.js +19 -1
  880. package/build/dist/Utils/Dashboard/VariableInterpolation.js.map +1 -1
  881. package/build/dist/Utils/DataSource/DataSourceQueryText.js +64 -0
  882. package/build/dist/Utils/DataSource/DataSourceQueryText.js.map +1 -0
  883. package/build/dist/Utils/DataSource/DataSourceValueReducer.js +124 -0
  884. package/build/dist/Utils/DataSource/DataSourceValueReducer.js.map +1 -0
  885. package/build/dist/Utils/LegacySerializedArray.js +51 -0
  886. package/build/dist/Utils/LegacySerializedArray.js.map +1 -0
  887. package/build/dist/Utils/Metrics/MetricResourceAttributeUtil.js +281 -0
  888. package/build/dist/Utils/Metrics/MetricResourceAttributeUtil.js.map +1 -0
  889. package/build/dist/Utils/Monitor/MonitorDependencyRule.js +47 -0
  890. package/build/dist/Utils/Monitor/MonitorDependencyRule.js.map +1 -0
  891. package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js +8 -6
  892. package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js.map +1 -1
  893. package/build/dist/Utils/StatusPage/GroupHierarchyView.js +560 -0
  894. package/build/dist/Utils/StatusPage/GroupHierarchyView.js.map +1 -0
  895. package/build/dist/Utils/StatusPage/ResourceExplorer.js +519 -0
  896. package/build/dist/Utils/StatusPage/ResourceExplorer.js.map +1 -0
  897. package/build/dist/Utils/Telemetry/SavedViewFilters.js +52 -0
  898. package/build/dist/Utils/Telemetry/SavedViewFilters.js.map +1 -0
  899. package/jest.config.json +4 -0
  900. package/package.json +5 -1
  901. package/tsconfig.json +14 -10
@@ -0,0 +1,363 @@
1
+ import {
2
+ MAXIMUM_PASSWORD_LENGTH,
3
+ MINIMUM_PASSWORD_LENGTH,
4
+ getPasswordValidationError,
5
+ } from "../../Types/Password";
6
+ import { describe, expect, test } from "@jest/globals";
7
+ import fs from "fs";
8
+ import path from "path";
9
+
10
+ /*
11
+ * The password policy, pinned.
12
+ *
13
+ * Before this module existed the only thing enforcing a minimum password
14
+ * length in OneUptime was `minLength: 6` typed inline into each browser form.
15
+ * A password that arrives from anywhere other than that form — the master-admin
16
+ * "set this user's password" endpoint being the obvious one — skipped the check
17
+ * entirely. So the value of this module is not that it is clever; it is that
18
+ * exactly one place decides what "acceptable" means, and both the form and the
19
+ * server ask it.
20
+ *
21
+ * That makes two classes of silent breakage worth guarding:
22
+ *
23
+ * 1. The RULES drifting. Every branch here is a rejection an operator or a
24
+ * user will read, and the order the branches run in is load-bearing (a
25
+ * six-space password is long enough and still not a password). Loosening
26
+ * one by accident is invisible until a bad password is already hashed and
27
+ * stored.
28
+ * 2. The rules drifting APART. If the Admin Dashboard form goes back to
29
+ * hardcoding a number, then retuning the policy here silently stops
30
+ * retuning the form, and the browser starts accepting what the server
31
+ * rejects — which surfaces to the operator as an opaque failed request.
32
+ * The last describe block below reads that form's source to pin it.
33
+ *
34
+ * The length cases are derived from the constants rather than written as 6 and
35
+ * 100, so that raising the minimum moves these tests with the policy instead of
36
+ * turning them into a wall of failures that has to be hand-edited (and might be
37
+ * hand-edited wrongly).
38
+ */
39
+
40
+ describe("getPasswordValidationError rejects a missing password", () => {
41
+ /*
42
+ * undefined, null and "" all mean "the operator submitted the form without
43
+ * typing anything", and each arrives from a different layer: undefined from a
44
+ * JSON body with no `password` key at all, null from a client that sent one
45
+ * explicitly, "" from an empty text input. They have to be one message
46
+ * because to the person reading it they are one mistake.
47
+ */
48
+ test("undefined, null and the empty string all report the password as required", () => {
49
+ const expected: string = "Password is required.";
50
+
51
+ expect(getPasswordValidationError(undefined)).toBe(expected);
52
+ expect(getPasswordValidationError(null)).toBe(expected);
53
+ expect(getPasswordValidationError("")).toBe(expected);
54
+ });
55
+ });
56
+
57
+ describe("getPasswordValidationError rejects a blank password", () => {
58
+ test("a single space and a tab/newline run are blank, not passwords", () => {
59
+ expect(getPasswordValidationError(" ")).toBe("Password cannot be blank.");
60
+ expect(getPasswordValidationError("\t\n")).toBe(
61
+ "Password cannot be blank.",
62
+ );
63
+ });
64
+
65
+ /*
66
+ * The case the blank check exists for.
67
+ *
68
+ * Six spaces satisfies the length rule on its own — nothing below this line
69
+ * would reject it — so without the blank branch a user could be given a
70
+ * password of pure whitespace that they can neither see nor reliably retype.
71
+ * If the blank check were ever reordered below the length check, or dropped
72
+ * because "the length check covers it", this is the case that would start
73
+ * passing silently, and the shorter whitespace strings above would not catch
74
+ * it because they fail the length rule anyway.
75
+ */
76
+ test("a whitespace-only value long enough to pass the length rule is still rejected", () => {
77
+ const sixSpaces: string = " ".repeat(MINIMUM_PASSWORD_LENGTH);
78
+
79
+ expect(sixSpaces.length).toBeGreaterThanOrEqual(MINIMUM_PASSWORD_LENGTH);
80
+ expect(getPasswordValidationError(sixSpaces)).toBe(
81
+ "Password cannot be blank.",
82
+ );
83
+ });
84
+
85
+ /*
86
+ * Precedence in the other direction: blankness is reported before length even
87
+ * when the value is also too long. "Password cannot be more than 100
88
+ * characters." would be a baffling thing to show someone who pressed the
89
+ * space bar.
90
+ */
91
+ test("blankness is reported ahead of the maximum-length rule", () => {
92
+ const overlongWhitespace: string = " ".repeat(MAXIMUM_PASSWORD_LENGTH + 1);
93
+
94
+ expect(getPasswordValidationError(overlongWhitespace)).toBe(
95
+ "Password cannot be blank.",
96
+ );
97
+ });
98
+ });
99
+
100
+ describe("getPasswordValidationError enforces the length bounds", () => {
101
+ /*
102
+ * The four values either side of the two boundaries. Off-by-one here is the
103
+ * classic way a policy quietly becomes a different policy: a `<=` where a `<`
104
+ * belongs locks out everyone whose existing password is exactly at the
105
+ * minimum, and nothing else in the system would notice.
106
+ */
107
+ test("one character below the minimum is rejected", () => {
108
+ const tooShort: string = "a".repeat(MINIMUM_PASSWORD_LENGTH - 1);
109
+
110
+ expect(getPasswordValidationError(tooShort)).toBe(
111
+ `Password cannot be less than ${MINIMUM_PASSWORD_LENGTH} characters.`,
112
+ );
113
+ });
114
+
115
+ test("exactly the minimum is accepted", () => {
116
+ const atMinimum: string = "a".repeat(MINIMUM_PASSWORD_LENGTH);
117
+
118
+ expect(getPasswordValidationError(atMinimum)).toBeNull();
119
+ });
120
+
121
+ test("exactly the maximum is accepted", () => {
122
+ const atMaximum: string = "a".repeat(MAXIMUM_PASSWORD_LENGTH);
123
+
124
+ expect(getPasswordValidationError(atMaximum)).toBeNull();
125
+ });
126
+
127
+ test("one character above the maximum is rejected", () => {
128
+ const tooLong: string = "a".repeat(MAXIMUM_PASSWORD_LENGTH + 1);
129
+
130
+ expect(getPasswordValidationError(tooLong)).toBe(
131
+ `Password cannot be more than ${MAXIMUM_PASSWORD_LENGTH} characters.`,
132
+ );
133
+ });
134
+
135
+ /*
136
+ * Length is counted on the RAW value, never a trimmed one.
137
+ *
138
+ * This looks like a bug the first time you read it — " ab " is only two
139
+ * real characters — and the temptation is to trim before measuring. Doing so
140
+ * would be worse than lax: whatever the user typed is what gets hashed, so
141
+ * trimming for the length check while hashing the untrimmed value measures
142
+ * one string and stores another, and trimming for BOTH stores a secret the
143
+ * user never typed and then fails to match it when they type it again at
144
+ * login. Leading and trailing spaces in a password are the user's business.
145
+ */
146
+ test("length is measured before trimming, so padded short passwords are accepted", () => {
147
+ const padded: string = " abcd ";
148
+
149
+ expect(padded.length).toBe(8);
150
+ expect(padded.trim().length).toBe(4);
151
+ expect(padded.trim().length).toBeLessThan(MINIMUM_PASSWORD_LENGTH);
152
+
153
+ expect(getPasswordValidationError(padded)).toBeNull();
154
+ });
155
+
156
+ /*
157
+ * The mirror of the above: padding does not rescue a value that is genuinely
158
+ * too short in raw characters either. Nothing is trimmed, in either
159
+ * direction.
160
+ */
161
+ test("a padded value that is still short raw is rejected on length", () => {
162
+ const shortEvenPadded: string = " ab ";
163
+
164
+ expect(shortEvenPadded.length).toBeLessThan(MINIMUM_PASSWORD_LENGTH);
165
+ expect(getPasswordValidationError(shortEvenPadded)).toBe(
166
+ `Password cannot be less than ${MINIMUM_PASSWORD_LENGTH} characters.`,
167
+ );
168
+ });
169
+ });
170
+
171
+ describe("the rejection messages tell the operator what to do", () => {
172
+ /*
173
+ * These messages are surfaced verbatim — the browser form shows them and the
174
+ * server wraps them in the exception it returns. A message that says only
175
+ * "Password is invalid." forces the operator to guess, and guessing at
176
+ * somebody else's password policy is exactly the loop this feature exists to
177
+ * remove. So each length message must actually contain its own limit, and
178
+ * must not quote the other one.
179
+ */
180
+ test("the too-short message names the minimum and not the maximum", () => {
181
+ const message: string | null = getPasswordValidationError(
182
+ "a".repeat(MINIMUM_PASSWORD_LENGTH - 1),
183
+ );
184
+
185
+ expect(message).toContain(String(MINIMUM_PASSWORD_LENGTH));
186
+ expect(message).not.toContain(String(MAXIMUM_PASSWORD_LENGTH));
187
+ });
188
+
189
+ test("the too-long message names the maximum", () => {
190
+ const message: string | null = getPasswordValidationError(
191
+ "a".repeat(MAXIMUM_PASSWORD_LENGTH + 1),
192
+ );
193
+
194
+ expect(message).toContain(String(MAXIMUM_PASSWORD_LENGTH));
195
+ });
196
+
197
+ /*
198
+ * Every rejection is a complete sentence a human can read, not a code. Cheap
199
+ * to assert, and it catches the refactor that starts returning an enum or a
200
+ * key while leaving the `string | null` signature in place.
201
+ */
202
+ test("every rejection is a non-empty sentence", () => {
203
+ const rejected: Array<string | undefined | null> = [
204
+ undefined,
205
+ null,
206
+ "",
207
+ " ",
208
+ "a".repeat(MINIMUM_PASSWORD_LENGTH - 1),
209
+ "a".repeat(MAXIMUM_PASSWORD_LENGTH + 1),
210
+ ];
211
+
212
+ rejected.forEach((value: string | undefined | null): void => {
213
+ const message: string | null = getPasswordValidationError(value);
214
+
215
+ expect(typeof message).toBe("string");
216
+ expect((message as string).length).toBeGreaterThan(0);
217
+ expect(message as string).toMatch(/\.$/);
218
+ });
219
+ });
220
+ });
221
+
222
+ describe("getPasswordValidationError accepts real passwords", () => {
223
+ test("an ordinary passphrase returns null", () => {
224
+ expect(getPasswordValidationError("correct-horse-battery")).toBeNull();
225
+ });
226
+
227
+ /*
228
+ * null specifically, not undefined or false — callers branch on it (`const
229
+ * error = getPasswordValidationError(p); if (error) { throw ... }`), and the
230
+ * server-side guard turns a non-null return straight into a BadDataException.
231
+ */
232
+ test("acceptance is signalled with null, not undefined", () => {
233
+ const result: string | null = getPasswordValidationError(
234
+ "a-perfectly-fine-password",
235
+ );
236
+
237
+ expect(result).toBeNull();
238
+ expect(result).not.toBeUndefined();
239
+ });
240
+
241
+ test("passwords full of punctuation and symbols are not second-guessed", () => {
242
+ const accepted: Array<string> = [
243
+ "!@#$%^&*()",
244
+ "p@ssw0rd!",
245
+ " spaces inside are fine ",
246
+ "Ünïcödé-påsswörd",
247
+ ];
248
+
249
+ accepted.forEach((value: string): void => {
250
+ expect(getPasswordValidationError(value)).toBeNull();
251
+ });
252
+ });
253
+
254
+ /*
255
+ * Pinning, not endorsing: `.length` is UTF-16 code units, so a password of
256
+ * three astral-plane emoji counts as six and clears the minimum. That is the
257
+ * behaviour every other OneUptime password form has always had (they all used
258
+ * the browser's own minLength, which counts the same way), so this module
259
+ * matching it is the point. Recorded here so that if someone ever switches to
260
+ * grapheme counting it is a deliberate, visible change rather than a silent
261
+ * one.
262
+ */
263
+ test("length counts UTF-16 code units, matching every other password form", () => {
264
+ const threeEmoji: string = "🔐🔐🔐";
265
+
266
+ expect(threeEmoji.length).toBe(MINIMUM_PASSWORD_LENGTH);
267
+ expect(getPasswordValidationError(threeEmoji)).toBeNull();
268
+ });
269
+ });
270
+
271
+ describe("the exported constants are usable as a policy", () => {
272
+ test("both bounds are plain numbers", () => {
273
+ expect(typeof MINIMUM_PASSWORD_LENGTH).toBe("number");
274
+ expect(typeof MAXIMUM_PASSWORD_LENGTH).toBe("number");
275
+
276
+ expect(Number.isInteger(MINIMUM_PASSWORD_LENGTH)).toBe(true);
277
+ expect(Number.isInteger(MAXIMUM_PASSWORD_LENGTH)).toBe(true);
278
+ });
279
+
280
+ /*
281
+ * A minimum at or above the maximum would make every password unacceptable
282
+ * while each individual branch still looked correct in review — the kind of
283
+ * mistake that only shows up when nobody can set a password any more.
284
+ */
285
+ test("the minimum is positive and strictly below the maximum", () => {
286
+ expect(MINIMUM_PASSWORD_LENGTH).toBeGreaterThan(0);
287
+ expect(MINIMUM_PASSWORD_LENGTH).toBeLessThan(MAXIMUM_PASSWORD_LENGTH);
288
+ });
289
+ });
290
+
291
+ /*
292
+ * The whole reason this module sits in Common/Types rather than Common/Server:
293
+ * the browser can import it, so the form and the endpoint cannot disagree.
294
+ *
295
+ * That only holds while the form actually imports it. A form that hardcodes
296
+ * `minLength: 6` again keeps working today and starts lying the moment the
297
+ * policy is retuned here — the browser would go on accepting six characters
298
+ * that the server now rejects, and the operator would see a request fail with
299
+ * no field marked. Nothing in a type-check or a render test catches that, so it
300
+ * is asserted against the form's source text.
301
+ */
302
+ describe("the Admin Dashboard set-password form shares this policy", () => {
303
+ const SET_PASSWORD_FORM: string = path.join(
304
+ __dirname,
305
+ "..",
306
+ "..",
307
+ "..",
308
+ "App",
309
+ "FeatureSet",
310
+ "AdminDashboard",
311
+ "src",
312
+ "Pages",
313
+ "Users",
314
+ "View",
315
+ "Authentication.tsx",
316
+ );
317
+
318
+ /*
319
+ * Comments in that file discuss the policy in prose (and the module under
320
+ * test is itself heavily commented), so a bare `toContain` on the raw text
321
+ * could be satisfied by a comment while the code hardcoded a number. Strip
322
+ * comments first and assert only on code. Line comments are only stripped at
323
+ * a line start or after whitespace, so a "//" inside a URL literal survives.
324
+ */
325
+ const readFormCode: () => string = (): string => {
326
+ const raw: string = fs.readFileSync(SET_PASSWORD_FORM, "utf8");
327
+
328
+ return raw
329
+ .replace(/\/\*[\s\S]*?\*\//g, "")
330
+ .replace(/(^|\s)\/\/.*$/gm, "$1");
331
+ };
332
+
333
+ test("the form imports the minimum from this module", () => {
334
+ const code: string = readFormCode();
335
+
336
+ expect(code).toMatch(
337
+ /import\s*\{[^}]*MINIMUM_PASSWORD_LENGTH[^}]*\}\s*from\s*["']Common\/Types\/Password["']/,
338
+ );
339
+ });
340
+
341
+ test("both password fields validate against the imported constant", () => {
342
+ const code: string = readFormCode();
343
+
344
+ const usages: number = (
345
+ code.match(/minLength\s*:\s*MINIMUM_PASSWORD_LENGTH/g) || []
346
+ ).length;
347
+
348
+ // The new password field and the confirmation field.
349
+ expect(usages).toBe(2);
350
+ });
351
+
352
+ /*
353
+ * The assertion that actually bites: no numeric literal may appear as a
354
+ * minLength anywhere in the form, whatever number it is. Written against the
355
+ * digit rather than against "6" so that re-hardcoding the current value under
356
+ * a future, different policy still fails.
357
+ */
358
+ test("no minLength in the form is a hardcoded number", () => {
359
+ const code: string = readFormCode();
360
+
361
+ expect(code).not.toMatch(/minLength\s*:\s*\d/);
362
+ });
363
+ });
@@ -1,5 +1,5 @@
1
1
  import NotFound, { ComponentProps } from "../../../UI/Components/404";
2
- import "@testing-library/jest-dom/extend-expect";
2
+ import "@testing-library/jest-dom";
3
3
  import { fireEvent, render, screen } from "@testing-library/react";
4
4
  import Route from "../../../Types/API/Route";
5
5
  import Email from "../../../Types/Email";
@@ -1,5 +1,5 @@
1
1
  import Alert, { AlertType } from "../../../UI/Components/Alerts/Alert";
2
- import "@testing-library/jest-dom/extend-expect";
2
+ import "@testing-library/jest-dom";
3
3
  import { fireEvent, render, screen } from "@testing-library/react";
4
4
  import React from "react";
5
5
  import { describe, expect, jest } from "@jest/globals";
@@ -1,5 +1,5 @@
1
1
  import Badge, { BadgeType } from "../../../UI/Components/Badge/Badge";
2
- import "@testing-library/jest-dom/extend-expect";
2
+ import "@testing-library/jest-dom";
3
3
  import { render, screen } from "@testing-library/react";
4
4
  import React from "react";
5
5
  import { describe, expect, test } from "@jest/globals";
@@ -2,7 +2,7 @@ import BasicForm from "../../../UI/Components/Forms/BasicForm";
2
2
  import Fields from "../../../UI/Components/Forms/Types/Fields";
3
3
  import FormFieldSchemaType from "../../../UI/Components/Forms/Types/FormFieldSchemaType";
4
4
  import FormValues from "../../../UI/Components/Forms/Types/FormValues";
5
- import "@testing-library/jest-dom/extend-expect";
5
+ import "@testing-library/jest-dom";
6
6
  import { render, screen, waitFor } from "@testing-library/react";
7
7
  import userEvent from "@testing-library/user-event";
8
8
  import { UserEvent } from "@testing-library/user-event/dist/types/setup/setup";
@@ -11,6 +11,21 @@ import * as React from "react";
11
11
  import { describe, expect } from "@jest/globals";
12
12
  import getJestMockFunction, { MockFunction } from "../../../Tests/MockType";
13
13
 
14
+ /*
15
+ * Type without userEvent's default inter-keystroke await. Input keeps a display
16
+ * value in state, syncs it from props, and then writes it straight onto the DOM
17
+ * node -- so a keystroke that arrives before React has committed the previous
18
+ * one gets overwritten by the stale value and is destroyed rather than merely
19
+ * delayed. Nothing recovers it, and the form submits "test@sample.cm". With
20
+ * `delay: null` the whole string is dispatched inside a single act(), where
21
+ * effects flush between keys, so that window never opens. Measured on a loaded
22
+ * machine: the default pacing dropped characters in 4 runs out of 6, this in 0
23
+ * out of 8.
24
+ */
25
+ function setupUser(): UserEvent {
26
+ return userEvent.setup({ delay: null });
27
+ }
28
+
14
29
  describe("BasicForm test", () => {
15
30
  const fields: Fields<FormValues<any>> = [
16
31
  {
@@ -65,6 +80,11 @@ describe("BasicForm test", () => {
65
80
  expect(forgotPasswordText).toHaveTextContent("Forgot password?");
66
81
  });
67
82
 
83
+ /*
84
+ * The explicit timeout: typing 24 characters re-validates the whole form once
85
+ * per keystroke, which finishes well inside a second locally but has no
86
+ * headroom left against Jest's 5s default on a loaded runner.
87
+ */
68
88
  test("Should accept values and submit if valid", async () => {
69
89
  const handleSubmit: MockFunction = getJestMockFunction();
70
90
  const onSubmitSuccessful: MockFunction = getJestMockFunction();
@@ -82,7 +102,7 @@ describe("BasicForm test", () => {
82
102
  submitButtonText="Login"
83
103
  />,
84
104
  );
85
- const user: UserEvent = userEvent.setup();
105
+ const user: UserEvent = setupUser();
86
106
  await user.type(screen.getByTestId("email"), "test@sample.com");
87
107
  await user.type(screen.getByTestId("password"), "12345678");
88
108
 
@@ -101,7 +121,7 @@ describe("BasicForm test", () => {
101
121
  onSubmitSuccessful,
102
122
  );
103
123
  });
104
- });
124
+ }, 30000);
105
125
 
106
126
  test("Should display error if values are invalid", async () => {
107
127
  const handleSubmit: MockFunction = getJestMockFunction();
@@ -117,19 +137,28 @@ describe("BasicForm test", () => {
117
137
  submitButtonText="Login"
118
138
  />,
119
139
  );
120
- const user: UserEvent = userEvent.setup();
140
+ const user: UserEvent = setupUser();
121
141
  await user.type(screen.getByTestId("email"), "humed");
122
142
  await user.type(screen.getByTestId("password"), "1238");
123
143
 
124
144
  const loginButton: HTMLButtonElement = screen.getByTestId("Login");
125
145
  await user.click(loginButton);
126
146
 
127
- const errorComponent: HTMLElement[] =
128
- screen.getAllByTestId("error-message");
147
+ /*
148
+ * Both errors have to be waited for. The email error is already on screen
149
+ * -- it was raised while the user was still typing -- but the password one
150
+ * only lands once the submit-time validation has flushed, so reading the
151
+ * list straight after the click finds a single error and indexes off the
152
+ * end of it.
153
+ */
154
+ await waitFor(() => {
155
+ const errorComponent: HTMLElement[] =
156
+ screen.getAllByTestId("error-message");
129
157
 
130
- expect(errorComponent[0]?.innerHTML).toEqual("Email is not valid.");
131
- expect(errorComponent[1]?.innerHTML).toEqual(
132
- "Password cannot be less than 6 characters.",
133
- );
158
+ expect(errorComponent[0]?.innerHTML).toEqual("Email is not valid.");
159
+ expect(errorComponent[1]?.innerHTML).toEqual(
160
+ "Password cannot be less than 6 characters.",
161
+ );
162
+ });
134
163
  });
135
164
  });
@@ -4,7 +4,7 @@ import Button, {
4
4
  } from "../../../UI/Components/Button/Button";
5
5
  import ButtonType from "../../../UI/Components/Button/ButtonTypes";
6
6
  import ShortcutKey from "../../../UI/Components/ShortcutKey/ShortcutKey";
7
- import "@testing-library/jest-dom/extend-expect";
7
+ import "@testing-library/jest-dom";
8
8
  import { fireEvent, render, screen } from "@testing-library/react";
9
9
  import IconProp from "../../../Types/Icon/IconProp";
10
10
  import React from "react";
@@ -3,7 +3,7 @@ import Card, {
3
3
  CardButtonSchema,
4
4
  ComponentProps,
5
5
  } from "../../../UI/Components/Card/Card";
6
- import "@testing-library/jest-dom/extend-expect";
6
+ import "@testing-library/jest-dom";
7
7
  import { fireEvent, render, screen } from "@testing-library/react";
8
8
  import IconProp from "../../../Types/Icon/IconProp";
9
9
  import React, { ReactElement } from "react";
@@ -1,7 +1,7 @@
1
1
  import { AreaChart } from "../../../../UI/Components/Charts/ChartLibrary/AreaChart/AreaChart";
2
2
  import { BarChart } from "../../../../UI/Components/Charts/ChartLibrary/BarChart/BarChart";
3
3
  import { LineChart } from "../../../../UI/Components/Charts/ChartLibrary/LineChart/LineChart";
4
- import "@testing-library/jest-dom/extend-expect";
4
+ import "@testing-library/jest-dom";
5
5
  import { render } from "@testing-library/react";
6
6
  import React from "react";
7
7
  import { describe, expect, test } from "@jest/globals";
@@ -1,5 +1,5 @@
1
1
  import ColorViewer from "../../../UI/Components/ColorViewer/ColorViewer";
2
- import "@testing-library/jest-dom/extend-expect";
2
+ import "@testing-library/jest-dom";
3
3
  import { fireEvent, render } from "@testing-library/react";
4
4
  import Color from "../../../Types/Color";
5
5
  import * as React from "react";
@@ -1,6 +1,12 @@
1
1
  import ComponentsModal from "../../../UI/Components/Workflow/ComponentsModal";
2
2
  import { describe, expect, it } from "@jest/globals";
3
- import "@testing-library/jest-dom/extend-expect";
3
+ /*
4
+ * The main entry, not "/extend-expect": the latter no longer ships type
5
+ * declarations, so every jest-dom matcher in this file fails to typecheck and
6
+ * the whole suite is skipped before a single assertion runs. This suite is one
7
+ * of only two that exercise SideOver, so it has to actually run.
8
+ */
9
+ import "@testing-library/jest-dom";
4
10
  import { fireEvent, render, screen } from "@testing-library/react";
5
11
  import IconProp from "../../../Types/Icon/IconProp";
6
12
  import ComponentMetadata, {
@@ -3,6 +3,13 @@ import ConfirmModal, {
3
3
  ComponentProps,
4
4
  } from "../../../UI/Components/Modal/ConfirmModal";
5
5
  import { describe, expect, it, jest, beforeEach } from "@jest/globals";
6
+ /*
7
+ * The main entry, not "/extend-expect": the latter no longer ships type
8
+ * declarations. Without this import the jest-dom matchers below have no types
9
+ * of their own, and the suite only compiled when it happened to share a
10
+ * program with a file that did import them.
11
+ */
12
+ import "@testing-library/jest-dom";
6
13
  import { fireEvent, render, screen } from "@testing-library/react";
7
14
  import React from "react";
8
15
 
@@ -6,7 +6,7 @@ import DictionaryOfStrings, {
6
6
  ComponentProps,
7
7
  } from "../../../UI/Components/Dictionary/DictionaryOfStrings";
8
8
  import { describe, expect, it, jest } from "@jest/globals";
9
- import "@testing-library/jest-dom/extend-expect";
9
+ import "@testing-library/jest-dom";
10
10
  import { fireEvent, render, screen } from "@testing-library/react";
11
11
  import Dictionary from "../../../Types/Dictionary";
12
12
  import React from "react";
@@ -1,7 +1,7 @@
1
1
  import Dropdown, {
2
2
  DropdownOption,
3
3
  } from "../../../UI/Components/Dropdown/Dropdown";
4
- import "@testing-library/jest-dom/extend-expect";
4
+ import "@testing-library/jest-dom";
5
5
  import { fireEvent, render, screen } from "@testing-library/react";
6
6
  import React from "react";
7
7
  import { describe, expect } from "@jest/globals";
@@ -222,6 +222,18 @@ describe("ErrorBoundary", () => {
222
222
  expect(screen.queryByRole("alert")).not.toBeNull();
223
223
  });
224
224
 
225
+ test("leads with a plain-language heading", () => {
226
+ render(
227
+ <ErrorBoundary>
228
+ <ThrowOnRender />
229
+ </ErrorBoundary>,
230
+ );
231
+
232
+ expect(
233
+ screen.queryByRole("heading", { name: "Something went wrong" }),
234
+ ).not.toBeNull();
235
+ });
236
+
225
237
  test("shows the underlying error message for support", () => {
226
238
  render(
227
239
  <ErrorBoundary>
@@ -234,6 +246,26 @@ describe("ErrorBoundary", () => {
234
246
  ).toContain("reading 'queryConfigs'");
235
247
  });
236
248
 
249
+ /*
250
+ * The stack-shaped message is for support, not for the person who just hit
251
+ * the error. It stays in the DOM (so it can be read and copied) but behind
252
+ * a closed disclosure so the recovery actions lead.
253
+ */
254
+ test("keeps the raw error message behind a closed disclosure", () => {
255
+ render(
256
+ <ErrorBoundary>
257
+ <ThrowOnRender message="Cannot read properties of undefined (reading 'queryConfigs')" />
258
+ </ErrorBoundary>,
259
+ );
260
+
261
+ const disclosure: HTMLDetailsElement | null = screen
262
+ .getByTestId("error-boundary-error-message")
263
+ .closest("details");
264
+
265
+ expect(disclosure).not.toBeNull();
266
+ expect(disclosure!.open).toBe(false);
267
+ });
268
+
237
269
  test("offers a support bundle and explains what it contains", () => {
238
270
  render(
239
271
  <ErrorBoundary>
@@ -247,6 +279,27 @@ describe("ErrorBoundary", () => {
247
279
  expect(screen.queryByText(/scrubbed page URL/)).not.toBeNull();
248
280
  expect(screen.queryByText(/never reads cookies/)).not.toBeNull();
249
281
  });
282
+
283
+ /*
284
+ * A downloaded bundle is only useful if the user knows where to send it,
285
+ * so the address is on the fallback rather than a page they have to find.
286
+ */
287
+ test("says where to send the support bundle", () => {
288
+ render(
289
+ <ErrorBoundary>
290
+ <ThrowOnRender />
291
+ </ErrorBoundary>,
292
+ );
293
+
294
+ const supportEmailLink: HTMLAnchorElement = screen.getByTestId(
295
+ "error-boundary-support-email",
296
+ ) as HTMLAnchorElement;
297
+
298
+ expect(supportEmailLink.textContent).toBe("support@oneuptime.com");
299
+ expect(supportEmailLink.getAttribute("href")).toBe(
300
+ "mailto:support@oneuptime.com",
301
+ );
302
+ });
250
303
  });
251
304
 
252
305
  describe("reporting", () => {
@@ -1,7 +1,7 @@
1
1
  import FilePicker from "../../../UI/Components/FilePicker/FilePicker";
2
2
  import ModelAPI from "../../../UI/Utils/ModelAPI/ModelAPI";
3
3
  import { describe, expect, beforeEach, jest } from "@jest/globals";
4
- import "@testing-library/jest-dom/extend-expect";
4
+ import "@testing-library/jest-dom";
5
5
  import { fireEvent, render, screen, waitFor } from "@testing-library/react";
6
6
  import HTTPResponse from "../../../Types/API/HTTPResponse";
7
7
  import MimeType from "../../../Types/File/MimeType";
@@ -1,5 +1,5 @@
1
1
  import HiddenText from "../../../UI/Components/HiddenText/HiddenText";
2
- import "@testing-library/jest-dom/extend-expect";
2
+ import "@testing-library/jest-dom";
3
3
  import { fireEvent, render, screen, waitFor } from "@testing-library/react";
4
4
  import React from "react";
5
5
  import { describe, expect, test } from "@jest/globals";