@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
@@ -16,6 +16,7 @@ import WorkspaceType from "../../../../Types/Workspace/WorkspaceType";
16
16
  import CaptureSpan from "../../Telemetry/CaptureSpan";
17
17
  import BadDataException from "../../../../Types/Exception/BadDataException";
18
18
  import WorkspaceProjectAuthTokenService from "../../../Services/WorkspaceProjectAuthTokenService";
19
+ import SSRFProtection from "../../SSRFProtection";
19
20
  import OneUptimeDate from "../../../../Types/Date";
20
21
  import { MicrosoftTeamsAppClientId, MicrosoftTeamsAppClientSecret, MicrosoftTeamsAppTenantId, } from "../../../EnvironmentConfig";
21
22
  // Import services for bot commands
@@ -43,8 +44,26 @@ import MicrosoftTeamsOnCallDutyActions from "./Actions/OnCallDutyPolicy";
43
44
  import AccessTokenService from "../../../Services/AccessTokenService";
44
45
  // Microsoft Teams apps should always be single-tenant
45
46
  const MICROSOFT_TEAMS_APP_TYPE = "SingleTenant";
47
+ /*
48
+ * Microsoft's wording when the Bot Framework refuses a proactive post because
49
+ * the app is not a member of the target conversation. Matched case-insensitively
50
+ * so we can replace it with something the admin can act on.
51
+ */
52
+ const MICROSOFT_TEAMS_ROSTER_ERROR_FRAGMENTS = [
53
+ "not part of the conversation roster",
54
+ "bot is not part of the conversation",
55
+ ];
46
56
  // Maximum number of pages to fetch when paginating teams
47
57
  const MICROSOFT_TEAMS_MAX_PAGES = 500;
58
+ /*
59
+ * Hosts that may receive a Teams incoming webhook. Connector webhooks are
60
+ * issued on outlook.office.com / outlook.office365.com, and per-tenant ones on
61
+ * <tenant>.webhook.office.com — all covered by these two registrable domains.
62
+ */
63
+ export const MICROSOFT_TEAMS_WEBHOOK_DOMAINS = [
64
+ "office.com",
65
+ "office365.com",
66
+ ];
48
67
  class MicrosoftTeamsUtil extends WorkspaceBase {
49
68
  // Get or create Bot Framework adapter for a specific tenant
50
69
  static getBotAdapter() {
@@ -463,11 +482,26 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
463
482
  static async sendMessageToChannelViaIncomingWebhook(data) {
464
483
  logger.debug("Sending message to Teams channel via incoming webhook:");
465
484
  logger.debug(data);
485
+ /*
486
+ * Enforced at the sink, not only at the callers: this URL reaches here from
487
+ * workflow arguments and from status page subscribers, and a caller that
488
+ * forgets the pin is an SSRF from the API server.
489
+ */
490
+ if (!MicrosoftTeamsUtil.isValidMicrosoftTeamsIncomingWebhookUrl(data.url)) {
491
+ throw new BadDataException(`Microsoft Teams Webhook URL must be an https URL on ${MICROSOFT_TEAMS_WEBHOOK_DOMAINS.join(" or ")}.`);
492
+ }
466
493
  // Build a structured MessageCard from markdown for better rendering in Teams
467
494
  const payload = this.buildMessageCardFromMarkdown(data.text);
468
495
  const apiResult = await API.post({
469
496
  url: data.url,
470
497
  data: payload,
498
+ options: {
499
+ /*
500
+ * The host is pinned to Microsoft, but do not let a redirect from it
501
+ * bounce this request to an internal address.
502
+ */
503
+ doNotFollowRedirects: true,
504
+ },
471
505
  });
472
506
  if (!apiResult) {
473
507
  logger.error("Could not send message to Teams channel via incoming webhook.");
@@ -483,10 +517,14 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
483
517
  return apiResult;
484
518
  }
485
519
  static isValidMicrosoftTeamsIncomingWebhookUrl(incomingWebhookUrl) {
486
- // Check if the URL contains outlook.office.com or office.com webhook pattern
487
- const urlString = incomingWebhookUrl.toString();
488
- return (urlString.includes("outlook.office.com") ||
489
- urlString.includes("office.com"));
520
+ /*
521
+ * Pin on the URL's HOST, not on a substring of the whole URL. Subscribers
522
+ * (including unauthenticated ones on a public status page) supply this
523
+ * value and the server POSTs to it, so a substring check was satisfied by
524
+ * an attacker-controlled path or query — `http://169.254.169.254/?x=office.com`
525
+ * passed and turned this into an SSRF into the cloud metadata endpoint.
526
+ */
527
+ return SSRFProtection.isUrlOnAllowedDomain(incomingWebhookUrl, MICROSOFT_TEAMS_WEBHOOK_DOMAINS);
490
528
  }
491
529
  static async getUsernameFromUserId(data) {
492
530
  logger.debug("Getting username from user ID with data:", {
@@ -697,6 +735,7 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
697
735
  name: displayName,
698
736
  workspaceType: WorkspaceType.MicrosoftTeams,
699
737
  teamId: data.teamId,
738
+ membershipType: channelData["membershipType"],
700
739
  };
701
740
  logger.debug(`Channel match found: ${JSON.stringify(foundChannel)}`);
702
741
  return foundChannel;
@@ -736,6 +775,16 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
736
775
  const workspaceChannelsToPostTo = [];
737
776
  logger.debug(`Processing ${data.workspaceMessagePayload.channelNames.length} channel names`);
738
777
  logger.debug(`Channel names: ${JSON.stringify(data.workspaceMessagePayload.channelNames)}`);
778
+ /*
779
+ * Declared before destination resolution so that a destination we cannot
780
+ * even resolve is reported as an error. Silently skipping it made a
781
+ * typo'd or deleted channel look like a successful send.
782
+ */
783
+ const workspaceMessageResponse = {
784
+ threads: [],
785
+ workspaceType: WorkspaceType.MicrosoftTeams,
786
+ errors: [],
787
+ };
739
788
  // Resolve channel names
740
789
  for (const channelName of data.workspaceMessagePayload.channelNames) {
741
790
  logger.debug(`Attempting to resolve channel name: ${channelName}`);
@@ -754,6 +803,15 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
754
803
  }
755
804
  else {
756
805
  logger.warn(`Channel not found: ${channelName}`);
806
+ workspaceMessageResponse.errors.push({
807
+ channel: {
808
+ id: "",
809
+ name: channelName,
810
+ workspaceType: WorkspaceType.MicrosoftTeams,
811
+ teamId: data.workspaceMessagePayload.teamId,
812
+ },
813
+ error: `Channel "${channelName}" was not found in this Microsoft Teams team. It may have been renamed or deleted.`,
814
+ });
757
815
  }
758
816
  }
759
817
  logger.debug("=== Starting message sending loop ===");
@@ -781,16 +839,20 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
781
839
  channelId: channelId,
782
840
  });
783
841
  logger.error(err);
842
+ workspaceMessageResponse.errors.push({
843
+ channel: {
844
+ id: channelId,
845
+ name: channelId,
846
+ workspaceType: WorkspaceType.MicrosoftTeams,
847
+ teamId: data.workspaceMessagePayload.teamId,
848
+ },
849
+ error: err instanceof Error ? err.message : String(err),
850
+ });
784
851
  }
785
852
  }
786
853
  logger.debug("=== Starting message sending loop ===");
787
854
  logger.debug(`Total channels to post to: ${workspaceChannelsToPostTo.length}`);
788
855
  logger.debug(`Channels: ${JSON.stringify(workspaceChannelsToPostTo)}`);
789
- const workspaceMessageResponse = {
790
- threads: [],
791
- workspaceType: WorkspaceType.MicrosoftTeams,
792
- errors: [],
793
- };
794
856
  for (const channel of workspaceChannelsToPostTo) {
795
857
  try {
796
858
  logger.debug(`Attempting to send message to channel: ${JSON.stringify(channel)}`);
@@ -915,6 +977,34 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
915
977
  throw new BadDataException("Microsoft Teams App Client ID not configured");
916
978
  }
917
979
  logger.debug(`Using bot ID: ${miscData.botId}`);
980
+ /*
981
+ * Bots cannot post to shared channels at all, so fail with the reason
982
+ * rather than letting Microsoft reject the send with a generic error.
983
+ */
984
+ if (data.workspaceChannel.membershipType === "shared") {
985
+ throw new BadDataException(`"${data.workspaceChannel.name}" is a shared channel, and Microsoft Teams does not allow bots to post in shared channels. Please pick a standard or private channel instead.`);
986
+ }
987
+ /*
988
+ * Preflight: refuse before calling the Bot Framework when we know the
989
+ * app was never installed into this team. Channels are discovered with
990
+ * tenant-wide Graph application permissions, which see every team
991
+ * regardless of installation — so reaching this point proves nothing
992
+ * about whether we can actually post.
993
+ *
994
+ * installedTeams is only populated from install events, so an empty map
995
+ * means "we have not observed any installs" (for example on a workspace
996
+ * connected before this shipped), not "nothing is installed". Only
997
+ * enforce once we have at least one record, and let the Bot Framework
998
+ * error be translated below otherwise.
999
+ */
1000
+ const installedTeams = miscData.installedTeams || {};
1001
+ const installedTeam = installedTeams[data.teamId];
1002
+ if (Object.keys(installedTeams).length > 0 && !installedTeam) {
1003
+ throw new BadDataException(this.getBotNotInTeamMessage({
1004
+ channelName: data.workspaceChannel.name,
1005
+ membershipType: data.workspaceChannel.membershipType,
1006
+ }));
1007
+ }
918
1008
  // Get Bot Framework adapter
919
1009
  const adapter = this.getBotAdapter();
920
1010
  // Create conversation reference for the channel
@@ -931,7 +1021,12 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
931
1021
  tenantId: tenantId,
932
1022
  },
933
1023
  channelId: "msteams",
934
- serviceUrl: "https://smba.trafficmanager.net/teams/",
1024
+ /*
1025
+ * Fallback is the commercial-cloud global endpoint; the serviceUrl
1026
+ * captured from the install event is preferred (required for GCC/DoD),
1027
+ * matching what sendAdaptiveCardToChat already does.
1028
+ */
1029
+ serviceUrl: (installedTeam === null || installedTeam === void 0 ? void 0 : installedTeam.serviceUrl) || "https://smba.trafficmanager.net/teams/",
935
1030
  };
936
1031
  logger.debug(`Conversation reference: ${JSON.stringify(conversationReference)}`);
937
1032
  // Send proactive message using Bot Framework
@@ -961,9 +1056,44 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
961
1056
  teamId: data.teamId,
962
1057
  });
963
1058
  logger.error(error);
1059
+ /*
1060
+ * Microsoft's roster rejection is meaningless to an admin ("The bot is
1061
+ * not part of the conversation roster"). Replace it with the action that
1062
+ * actually fixes it.
1063
+ */
1064
+ if (this.isBotNotInConversationRosterError(error)) {
1065
+ throw new BadDataException(this.getBotNotInTeamMessage({
1066
+ channelName: data.workspaceChannel.name,
1067
+ membershipType: data.workspaceChannel.membershipType,
1068
+ }));
1069
+ }
964
1070
  throw error;
965
1071
  }
966
1072
  }
1073
+ /*
1074
+ * True when an error is Microsoft's "bot is not in this conversation"
1075
+ * rejection from a proactive Bot Framework send.
1076
+ */
1077
+ static isBotNotInConversationRosterError(error) {
1078
+ const message = (error instanceof Error ? error.message : String(error || "")).toLowerCase();
1079
+ if (!message) {
1080
+ return false;
1081
+ }
1082
+ return MICROSOFT_TEAMS_ROSTER_ERROR_FRAGMENTS.some((fragment) => {
1083
+ return message.includes(fragment);
1084
+ });
1085
+ }
1086
+ /*
1087
+ * Actionable replacement for the roster error. Private channels need the app
1088
+ * installed into the channel itself; a parent-team install does not cover
1089
+ * them, so the two cases get different instructions.
1090
+ */
1091
+ static getBotNotInTeamMessage(data) {
1092
+ if (data.membershipType === "private") {
1093
+ return `The OneUptime app is not installed in the private channel "${data.channelName}". In Microsoft Teams, open the channel, click the "..." menu, then Manage channel > Apps > Add an app, and add OneUptime. Installing OneUptime in the parent team does not cover private channels.`;
1094
+ }
1095
+ return `The OneUptime app is not installed in the Microsoft Teams team that owns "${data.channelName}". In Microsoft Teams, click the "..." next to the team name, then Manage team > Apps > More apps, and add OneUptime. Installing OneUptime for yourself or in a chat is not the same as adding it to the team.`;
1096
+ }
967
1097
  /*
968
1098
  * Sends an adaptive card to a Teams group chat or personal (1:1) chat via a
969
1099
  * proactive Bot Framework message. The OneUptime app must have been added to
@@ -1109,6 +1239,7 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
1109
1239
  name: channelData["displayName"],
1110
1240
  workspaceType: WorkspaceType.MicrosoftTeams,
1111
1241
  teamId: data.teamId,
1242
+ membershipType: channelData["membershipType"],
1112
1243
  };
1113
1244
  logger.debug(`Channel info retrieved: ${JSON.stringify(channel)}`);
1114
1245
  return channel;
@@ -1251,10 +1382,21 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
1251
1382
  const channelsArray = channelsData["value"] || [];
1252
1383
  const channelsDict = {};
1253
1384
  for (const channelData of channelsArray) {
1385
+ const membershipType = channelData["membershipType"];
1386
+ /*
1387
+ * Microsoft Teams does not support bots in shared channels, so offering
1388
+ * one as a notification destination can only ever produce a failed send.
1389
+ */
1390
+ if (membershipType === "shared") {
1391
+ logger.debug(`Skipping shared channel ${channelData["displayName"]} — Teams does not support bots in shared channels.`);
1392
+ continue;
1393
+ }
1254
1394
  const channel = {
1255
1395
  id: channelData["id"],
1256
1396
  name: channelData["displayName"],
1257
1397
  workspaceType: WorkspaceType.MicrosoftTeams,
1398
+ teamId: data.teamId,
1399
+ membershipType: membershipType,
1258
1400
  };
1259
1401
  channelsDict[channel.id] = channel;
1260
1402
  }
@@ -1410,6 +1552,18 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
1410
1552
  onlyIfMissingOrStale: true,
1411
1553
  });
1412
1554
  }
1555
+ /*
1556
+ * Same backfill for team installs. Teams the app was added to before we
1557
+ * started recording installs fire no new install event, so an @mention in
1558
+ * any channel of that team is the recovery path that makes proactive
1559
+ * channel notifications work again.
1560
+ */
1561
+ if (messageConversationType === "channel") {
1562
+ await this.captureTeamFromBotActivity({
1563
+ activity: data.activity,
1564
+ turnContext: data.turnContext,
1565
+ });
1566
+ }
1413
1567
  // If this is actually an Adaptive Card submit wrapped as a message, route to invoke handler
1414
1568
  if (possibleActionValue["action"] ||
1415
1569
  ((_b = possibleActionValue["data"]) === null || _b === void 0 ? void 0 : _b["action"])) {
@@ -1442,27 +1596,15 @@ class MicrosoftTeamsUtil extends WorkspaceBase {
1442
1596
  return;
1443
1597
  }
1444
1598
  // Get project auth by tenant ID
1445
- const projectAuth = await WorkspaceProjectAuthTokenService.findOneBy({
1446
- query: {
1447
- workspaceType: WorkspaceType.MicrosoftTeams,
1448
- workspaceProjectId: tenantId,
1449
- },
1450
- select: {
1451
- projectId: true,
1452
- workspaceProjectId: true,
1453
- },
1454
- props: {
1455
- isRoot: true,
1456
- },
1599
+ const tenantResolution = await this.resolveProjectByTenantId({
1600
+ tenantId: tenantId,
1457
1601
  });
1458
- if (!projectAuth || !projectAuth.projectId) {
1459
- logger.error("Project auth not found for tenant ID: " + tenantId, {
1460
- tenantId: tenantId,
1461
- });
1462
- await data.turnContext.sendActivity("Sorry, I couldn't find your project configuration. Please try again later.");
1602
+ if (!tenantResolution.projectAuth ||
1603
+ !tenantResolution.projectAuth.projectId) {
1604
+ await data.turnContext.sendActivity(this.getTenantResolutionFailureMessage(tenantResolution));
1463
1605
  return;
1464
1606
  }
1465
- const projectId = projectAuth.projectId;
1607
+ const projectId = tenantResolution.projectAuth.projectId;
1466
1608
  logger.debug(`Found project ID: ${projectId.toString()} for tenant ID: ${tenantId}`);
1467
1609
  // Clean the message text by removing bot mentions
1468
1610
  const cleanText = messageText
@@ -2253,26 +2395,15 @@ All monitoring checks are passing normally.`;
2253
2395
  await data.turnContext.sendActivity("Sorry, I couldn't identify your organization. Please try again later.");
2254
2396
  return;
2255
2397
  }
2256
- const projectAuth = await WorkspaceProjectAuthTokenService.findOneBy({
2257
- query: {
2258
- workspaceType: WorkspaceType.MicrosoftTeams,
2259
- workspaceProjectId: tenantId,
2260
- },
2261
- select: {
2262
- projectId: true,
2263
- authToken: true,
2264
- workspaceProjectId: true,
2265
- },
2266
- props: { isRoot: true },
2398
+ const tenantResolution = await this.resolveProjectByTenantId({
2399
+ tenantId: tenantId,
2267
2400
  });
2268
- if (!projectAuth || !projectAuth.projectId) {
2269
- logger.error("Project auth not found for invoke activity tenant: " + tenantId, {
2270
- tenantId: tenantId,
2271
- });
2272
- await data.turnContext.sendActivity("Sorry, I couldn't find your project configuration.");
2401
+ if (!tenantResolution.projectAuth ||
2402
+ !tenantResolution.projectAuth.projectId) {
2403
+ await data.turnContext.sendActivity(this.getTenantResolutionFailureMessage(tenantResolution));
2273
2404
  return;
2274
2405
  }
2275
- const projectId = projectAuth.projectId;
2406
+ const projectId = tenantResolution.projectAuth.projectId;
2276
2407
  const fromObj = (data.activity["from"] ||
2277
2408
  {});
2278
2409
  const teamsUserId = fromObj["aadObjectId"] || undefined;
@@ -2402,6 +2533,10 @@ All monitoring checks are passing normally.`;
2402
2533
  activity: data.activity,
2403
2534
  turnContext: data.turnContext,
2404
2535
  });
2536
+ await this.captureTeamFromBotActivity({
2537
+ activity: data.activity,
2538
+ turnContext: data.turnContext,
2539
+ });
2405
2540
  await this.sendWelcomeAdaptiveCard(data.turnContext);
2406
2541
  }
2407
2542
  if (botWasRemoved) {
@@ -2409,6 +2544,9 @@ All monitoring checks are passing normally.`;
2409
2544
  await this.removeChatFromBotActivity({
2410
2545
  activity: data.activity,
2411
2546
  });
2547
+ await this.removeTeamFromBotActivity({
2548
+ activity: data.activity,
2549
+ });
2412
2550
  }
2413
2551
  }
2414
2552
  static async handleInstallationUpdateActivity(data) {
@@ -2430,13 +2568,115 @@ All monitoring checks are passing normally.`;
2430
2568
  activity: data.activity,
2431
2569
  turnContext: data.turnContext,
2432
2570
  });
2571
+ await this.captureTeamFromBotActivity({
2572
+ activity: data.activity,
2573
+ turnContext: data.turnContext,
2574
+ });
2433
2575
  }
2434
2576
  else if (action === "remove" || action === "remove-upgrade") {
2435
2577
  logger.debug("OneUptime bot was uninstalled");
2436
2578
  await this.removeChatFromBotActivity({
2437
2579
  activity: data.activity,
2438
2580
  });
2581
+ await this.removeTeamFromBotActivity({
2582
+ activity: data.activity,
2583
+ });
2584
+ }
2585
+ }
2586
+ /*
2587
+ * Resolve the OneUptime project that owns a Microsoft tenant.
2588
+ *
2589
+ * Bot activities carry a tenant id and nothing else, so the tenant is the
2590
+ * only key we can resolve a project by. A tenant may legitimately be
2591
+ * connected to more than one OneUptime project (saveChatToProjectAuthTokens
2592
+ * fans out for exactly that reason), and when that happens the tenant alone
2593
+ * does NOT identify a project.
2594
+ *
2595
+ * Previously this was a bare findOneBy, which silently returned whichever
2596
+ * row sorted first and served that project's incidents, alerts and AI
2597
+ * assistant answers to anyone in the tenant — including users with no access
2598
+ * to it. The bot's message path performs no per-user authorization, so
2599
+ * picking arbitrarily is a cross-project disclosure. Refuse instead.
2600
+ */
2601
+ static async resolveProjectByTenantId(data) {
2602
+ const projectAuths = await WorkspaceProjectAuthTokenService.findBy({
2603
+ query: {
2604
+ workspaceType: WorkspaceType.MicrosoftTeams,
2605
+ workspaceProjectId: data.tenantId,
2606
+ },
2607
+ select: {
2608
+ projectId: true,
2609
+ authToken: true,
2610
+ workspaceProjectId: true,
2611
+ miscData: true,
2612
+ },
2613
+ limit: LIMIT_MAX,
2614
+ skip: 0,
2615
+ props: {
2616
+ isRoot: true,
2617
+ },
2618
+ });
2619
+ /*
2620
+ * Ambiguity is about distinct PROJECTS, not rows. Two rows pointing at the
2621
+ * same project are a data-integrity wart, not a question we cannot answer,
2622
+ * so collapse them rather than refusing to serve that tenant forever.
2623
+ */
2624
+ const seenProjectIds = new Set();
2625
+ const usableProjectAuths = [];
2626
+ for (const projectAuth of projectAuths) {
2627
+ if (!projectAuth.projectId) {
2628
+ continue;
2629
+ }
2630
+ const projectIdString = projectAuth.projectId.toString();
2631
+ if (seenProjectIds.has(projectIdString)) {
2632
+ continue;
2633
+ }
2634
+ seenProjectIds.add(projectIdString);
2635
+ usableProjectAuths.push(projectAuth);
2636
+ }
2637
+ if (usableProjectAuths.length === 0) {
2638
+ logger.error("Project auth not found for tenant ID: " + data.tenantId, {
2639
+ tenantId: data.tenantId,
2640
+ });
2641
+ return {
2642
+ projectAuth: null,
2643
+ isAmbiguous: false,
2644
+ candidateProjectIds: [],
2645
+ };
2646
+ }
2647
+ if (usableProjectAuths.length > 1) {
2648
+ const candidateProjectIds = usableProjectAuths.map((projectAuth) => {
2649
+ return projectAuth.projectId;
2650
+ });
2651
+ logger.error(`Microsoft tenant ${data.tenantId} is connected to ${usableProjectAuths.length} OneUptime projects. Refusing to guess which one this bot activity belongs to.`, {
2652
+ tenantId: data.tenantId,
2653
+ projectIds: candidateProjectIds
2654
+ .map((projectId) => {
2655
+ return projectId.toString();
2656
+ })
2657
+ .join(", "),
2658
+ });
2659
+ return {
2660
+ projectAuth: null,
2661
+ isAmbiguous: true,
2662
+ candidateProjectIds: candidateProjectIds,
2663
+ };
2664
+ }
2665
+ return {
2666
+ projectAuth: usableProjectAuths[0],
2667
+ isAmbiguous: false,
2668
+ candidateProjectIds: [usableProjectAuths[0].projectId],
2669
+ };
2670
+ }
2671
+ /*
2672
+ * User-facing text for a failed tenant resolution. The two cases need
2673
+ * different remedies, so they must not share a message.
2674
+ */
2675
+ static getTenantResolutionFailureMessage(resolution) {
2676
+ if (resolution.isAmbiguous) {
2677
+ return "This Microsoft 365 organization is connected to more than one OneUptime project, so I can't tell which one you mean. Please ask your OneUptime admin to disconnect Microsoft Teams from all but one project.";
2439
2678
  }
2679
+ return "Sorry, I couldn't find your project configuration. This usually means the Microsoft 365 organization you're messaging me from isn't the one connected to OneUptime. Please ask your OneUptime admin to check the Microsoft Teams integration in Project Settings.";
2440
2680
  }
2441
2681
  /*
2442
2682
  * Chats (group chats and personal 1:1 chats) cannot be listed with the
@@ -2713,6 +2953,148 @@ All monitoring checks are passing normally.`;
2713
2953
  }
2714
2954
  return (projectAuth.miscData.availableChats || {});
2715
2955
  }
2956
+ /*
2957
+ * Record that the OneUptime app was installed into a team.
2958
+ *
2959
+ * Team installs arrive as conversationUpdate / installationUpdate activities
2960
+ * whose conversation is a channel. captureChatFromBotActivity drops those
2961
+ * (channels are not chats), so before this existed we threw away the only
2962
+ * signal that tells us a proactive channel post will be accepted.
2963
+ */
2964
+ static async captureTeamFromBotActivity(data) {
2965
+ var _a;
2966
+ try {
2967
+ const channelData = data.activity["channelData"] || {};
2968
+ const team = channelData["team"];
2969
+ const teamId = (team === null || team === void 0 ? void 0 : team["id"]) || "";
2970
+ if (!teamId) {
2971
+ // Not a team-scoped activity (personal or group chat). Nothing to do.
2972
+ return;
2973
+ }
2974
+ const tenantId = ((_a = channelData["tenant"]) === null || _a === void 0 ? void 0 : _a["id"]) || "";
2975
+ if (!tenantId) {
2976
+ logger.debug("No tenant id found on team activity. Skipping.");
2977
+ return;
2978
+ }
2979
+ const installedTeam = {
2980
+ id: teamId,
2981
+ name: (team === null || team === void 0 ? void 0 : team["name"]) || undefined,
2982
+ serviceUrl: data.activity["serviceUrl"] ||
2983
+ data.turnContext.activity.serviceUrl ||
2984
+ undefined,
2985
+ addedAt: OneUptimeDate.getCurrentDate().toISOString(),
2986
+ };
2987
+ await this.saveTeamToProjectAuthTokens({
2988
+ tenantId: tenantId,
2989
+ team: installedTeam,
2990
+ });
2991
+ logger.debug(`Captured Microsoft Teams team install ${teamId} for tenant ${tenantId}`);
2992
+ }
2993
+ catch (err) {
2994
+ logger.error("Error capturing Microsoft Teams team from bot activity:");
2995
+ logger.error(err);
2996
+ }
2997
+ }
2998
+ static async removeTeamFromBotActivity(data) {
2999
+ var _a, _b;
3000
+ try {
3001
+ const channelData = data.activity["channelData"] || {};
3002
+ const teamId = ((_a = channelData["team"]) === null || _a === void 0 ? void 0 : _a["id"]) || "";
3003
+ const tenantId = ((_b = channelData["tenant"]) === null || _b === void 0 ? void 0 : _b["id"]) || "";
3004
+ if (!teamId || !tenantId) {
3005
+ return;
3006
+ }
3007
+ await this.removeTeamFromProjectAuthTokens({
3008
+ tenantId: tenantId,
3009
+ teamId: teamId,
3010
+ });
3011
+ logger.debug(`Removed Microsoft Teams team install ${teamId} for tenant ${tenantId}`);
3012
+ }
3013
+ catch (err) {
3014
+ logger.error("Error removing Microsoft Teams team from bot activity:");
3015
+ logger.error(err);
3016
+ }
3017
+ }
3018
+ static async saveTeamToProjectAuthTokens(data) {
3019
+ /*
3020
+ * Same fan-out reasoning as saveChatToProjectAuthTokens: the install event
3021
+ * does not say which project it belongs to, so record it on every project
3022
+ * connected to this tenant.
3023
+ */
3024
+ const projectAuths = await WorkspaceProjectAuthTokenService.findBy({
3025
+ query: {
3026
+ workspaceType: WorkspaceType.MicrosoftTeams,
3027
+ workspaceProjectId: data.tenantId,
3028
+ },
3029
+ select: {
3030
+ _id: true,
3031
+ miscData: true,
3032
+ },
3033
+ limit: LIMIT_MAX,
3034
+ skip: 0,
3035
+ props: {
3036
+ isRoot: true,
3037
+ },
3038
+ });
3039
+ for (const projectAuth of projectAuths) {
3040
+ const miscData = Object.assign({}, (projectAuth.miscData || {}));
3041
+ miscData.installedTeams = Object.assign(Object.assign({}, (miscData.installedTeams || {})), { [data.team.id]: data.team });
3042
+ await WorkspaceProjectAuthTokenService.updateOneById({
3043
+ id: projectAuth.id,
3044
+ data: {
3045
+ miscData: miscData,
3046
+ },
3047
+ props: {
3048
+ isRoot: true,
3049
+ },
3050
+ });
3051
+ }
3052
+ }
3053
+ static async removeTeamFromProjectAuthTokens(data) {
3054
+ const projectAuths = await WorkspaceProjectAuthTokenService.findBy({
3055
+ query: {
3056
+ workspaceType: WorkspaceType.MicrosoftTeams,
3057
+ workspaceProjectId: data.tenantId,
3058
+ },
3059
+ select: {
3060
+ _id: true,
3061
+ miscData: true,
3062
+ },
3063
+ limit: LIMIT_MAX,
3064
+ skip: 0,
3065
+ props: {
3066
+ isRoot: true,
3067
+ },
3068
+ });
3069
+ for (const projectAuth of projectAuths) {
3070
+ const miscData = Object.assign({}, (projectAuth.miscData || {}));
3071
+ if (!miscData.installedTeams || !miscData.installedTeams[data.teamId]) {
3072
+ continue;
3073
+ }
3074
+ const installedTeams = Object.assign({}, miscData.installedTeams);
3075
+ delete installedTeams[data.teamId];
3076
+ miscData.installedTeams = installedTeams;
3077
+ await WorkspaceProjectAuthTokenService.updateOneById({
3078
+ id: projectAuth.id,
3079
+ data: {
3080
+ miscData: miscData,
3081
+ },
3082
+ props: {
3083
+ isRoot: true,
3084
+ },
3085
+ });
3086
+ }
3087
+ }
3088
+ static async getInstalledTeamsForProject(data) {
3089
+ const projectAuth = await WorkspaceProjectAuthTokenService.getProjectAuth({
3090
+ projectId: data.projectId,
3091
+ workspaceType: WorkspaceType.MicrosoftTeams,
3092
+ });
3093
+ if (!projectAuth || !projectAuth.miscData) {
3094
+ return {};
3095
+ }
3096
+ return (projectAuth.miscData.installedTeams || {});
3097
+ }
2716
3098
  /**
2717
3099
  * Process Bot Framework activity using the botbuilder SDK adapter.processActivity
2718
3100
  * This replaces the manual JWT validation and activity handling with proper SDK methods
@@ -3045,7 +3427,12 @@ All monitoring checks are passing normally.`;
3045
3427
  id: t["id"],
3046
3428
  name: t["displayName"] || "Unnamed Team",
3047
3429
  };
3048
- acc[team.name] = team;
3430
+ /*
3431
+ * Keyed by id, not display name — Teams allows duplicate team
3432
+ * names, and keying by name silently collapsed them so only the
3433
+ * last one of each name was selectable.
3434
+ */
3435
+ acc[team.id] = team;
3049
3436
  return acc;
3050
3437
  }, {});
3051
3438
  logger.debug(`Processed ${Object.keys(availableTeams).length} teams`);
@@ -3510,6 +3897,12 @@ __decorate([
3510
3897
  __metadata("design:paramtypes", [Object]),
3511
3898
  __metadata("design:returntype", Promise)
3512
3899
  ], MicrosoftTeamsUtil, "handleInstallationUpdateActivity", null);
3900
+ __decorate([
3901
+ CaptureSpan(),
3902
+ __metadata("design:type", Function),
3903
+ __metadata("design:paramtypes", [Object]),
3904
+ __metadata("design:returntype", Promise)
3905
+ ], MicrosoftTeamsUtil, "resolveProjectByTenantId", null);
3513
3906
  __decorate([
3514
3907
  CaptureSpan(),
3515
3908
  __metadata("design:type", Function),
@@ -3540,6 +3933,36 @@ __decorate([
3540
3933
  __metadata("design:paramtypes", [Object]),
3541
3934
  __metadata("design:returntype", Promise)
3542
3935
  ], MicrosoftTeamsUtil, "getChatsForProject", null);
3936
+ __decorate([
3937
+ CaptureSpan(),
3938
+ __metadata("design:type", Function),
3939
+ __metadata("design:paramtypes", [Object]),
3940
+ __metadata("design:returntype", Promise)
3941
+ ], MicrosoftTeamsUtil, "captureTeamFromBotActivity", null);
3942
+ __decorate([
3943
+ CaptureSpan(),
3944
+ __metadata("design:type", Function),
3945
+ __metadata("design:paramtypes", [Object]),
3946
+ __metadata("design:returntype", Promise)
3947
+ ], MicrosoftTeamsUtil, "removeTeamFromBotActivity", null);
3948
+ __decorate([
3949
+ CaptureSpan(),
3950
+ __metadata("design:type", Function),
3951
+ __metadata("design:paramtypes", [Object]),
3952
+ __metadata("design:returntype", Promise)
3953
+ ], MicrosoftTeamsUtil, "saveTeamToProjectAuthTokens", null);
3954
+ __decorate([
3955
+ CaptureSpan(),
3956
+ __metadata("design:type", Function),
3957
+ __metadata("design:paramtypes", [Object]),
3958
+ __metadata("design:returntype", Promise)
3959
+ ], MicrosoftTeamsUtil, "removeTeamFromProjectAuthTokens", null);
3960
+ __decorate([
3961
+ CaptureSpan(),
3962
+ __metadata("design:type", Function),
3963
+ __metadata("design:paramtypes", [Object]),
3964
+ __metadata("design:returntype", Promise)
3965
+ ], MicrosoftTeamsUtil, "getInstalledTeamsForProject", null);
3543
3966
  __decorate([
3544
3967
  CaptureSpan(),
3545
3968
  __metadata("design:type", Function),