@oneuptime/common 14.0.9 → 14.0.10

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 (383) hide show
  1. package/Models/DatabaseModels/AutoRemediationSuggestion.ts +60 -0
  2. package/Models/DatabaseModels/CephCluster.ts +213 -0
  3. package/Models/DatabaseModels/DatabaseServer.ts +213 -0
  4. package/Models/DatabaseModels/DockerHost.ts +213 -0
  5. package/Models/DatabaseModels/DockerSwarmCluster.ts +213 -0
  6. package/Models/DatabaseModels/GlobalConfig.ts +1 -1
  7. package/Models/DatabaseModels/Host.ts +213 -0
  8. package/Models/DatabaseModels/Index.ts +2 -0
  9. package/Models/DatabaseModels/PodmanHost.ts +213 -0
  10. package/Models/DatabaseModels/ProxmoxCluster.ts +213 -0
  11. package/Models/DatabaseModels/ResourceAiAgent.ts +419 -0
  12. package/Models/DatabaseModels/RunnerJob.ts +144 -0
  13. package/Models/DatabaseModels/VMwareVCenter.ts +213 -0
  14. package/Server/API/AutoRemediationAPI.ts +392 -1
  15. package/Server/API/ResourceAiAccessAPI.ts +1669 -0
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.ts +423 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  18. package/Server/Infrastructure/Semaphore.ts +22 -0
  19. package/Server/Middleware/TelemetryIngest.ts +15 -5
  20. package/Server/Services/AnalyticsDatabaseService.ts +45 -1
  21. package/Server/Services/AutoRemediationRuleEngineService.ts +940 -112
  22. package/Server/Services/CephClusterService.ts +109 -1
  23. package/Server/Services/DatabaseServerService.ts +116 -1
  24. package/Server/Services/DockerHostService.ts +109 -1
  25. package/Server/Services/DockerSwarmClusterService.ts +113 -1
  26. package/Server/Services/HostService.ts +126 -4
  27. package/Server/Services/MetricRecordingRuleService.ts +47 -0
  28. package/Server/Services/PodmanHostService.ts +109 -1
  29. package/Server/Services/ProxmoxClusterService.ts +110 -1
  30. package/Server/Services/ResourceAiAccessService.ts +1439 -0
  31. package/Server/Services/ResourceAiAgentJobService.ts +202 -0
  32. package/Server/Services/ResourceAiAgentService.ts +2432 -0
  33. package/Server/Services/RunnerJobService.ts +611 -4
  34. package/Server/Services/TelemetryUsageBillingService.ts +28 -0
  35. package/Server/Services/TraceRecordingRuleService.ts +33 -0
  36. package/Server/Services/VMwareVCenterService.ts +110 -1
  37. package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +1434 -32
  38. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +935 -21
  39. package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +25 -1
  40. package/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.ts +577 -0
  41. package/Server/Utils/AI/ResourceAccess/ResourceAccessContext.ts +271 -0
  42. package/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.ts +45 -0
  43. package/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.ts +964 -0
  44. package/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.ts +333 -0
  45. package/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.ts +873 -0
  46. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +72 -2
  47. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +72 -5
  48. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +72 -5
  49. package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +396 -13
  50. package/Server/Utils/AutoRemediation/RemediationVerifier.ts +35 -2
  51. package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +9 -1
  52. package/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.ts +920 -0
  53. package/Server/Utils/SessionReplay/SessionReplayUsage.ts +84 -6
  54. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +35 -15
  55. package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +33 -15
  56. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.ts +21 -1
  57. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +298 -224
  58. package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +35 -15
  59. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +389 -175
  60. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +366 -143
  61. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.ts +163 -0
  62. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.ts +396 -0
  63. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.ts +418 -0
  64. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.ts +152 -0
  65. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.ts +251 -0
  66. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.ts +214 -0
  67. package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +93 -0
  68. package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +18 -6
  69. package/Tests/App/Dashboard/InvestigationInfrastructureTools.test.tsx +506 -0
  70. package/Tests/App/Dashboard/RemediationSuggestionCardDescription.test.tsx +209 -0
  71. package/Tests/App/Dashboard/RemediationSuggestionCardResource.test.tsx +317 -0
  72. package/Tests/App/Dashboard/ResourceAiAccessSettingsUtil.test.ts +921 -0
  73. package/Tests/App/Dashboard/ResourceAiAgentInstall.test.ts +860 -0
  74. package/Tests/App/Dashboard/ResourceAiAgentPage.test.tsx +1721 -0
  75. package/Tests/App/Dashboard/ResourceAiAgentStatus.test.ts +1002 -0
  76. package/Tests/App/Dashboard/ResourceAiInsightsPage.test.tsx +931 -0
  77. package/Tests/App/Dashboard/ResourceAiNavigation.test.tsx +575 -0
  78. package/Tests/App/Dashboard/RunbookStepTypeMaps.test.ts +38 -7
  79. package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +33 -1
  80. package/Tests/Models/DatabaseModels/ResourceAiAccessColumns.test.ts +738 -0
  81. package/Tests/Models/DatabaseModels/ResourceAiAgentModel.test.ts +842 -0
  82. package/Tests/Server/API/AutoRemediationApproveResourceRound.test.ts +835 -0
  83. package/Tests/Server/API/ResourceAiAccessAPI.test.ts +2730 -0
  84. package/Tests/Server/Infrastructure/Postgres/AddDatabaseServerTablesMigration.test.ts +60 -0
  85. package/Tests/Server/Infrastructure/Postgres/AddResourceAiAgentsMigration.test.ts +659 -0
  86. package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +31 -0
  87. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +63 -5
  88. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +103 -5
  89. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +19 -1
  90. package/Tests/Server/Services/AutoRemediationResourceRuleEngine.test.ts +1279 -0
  91. package/Tests/Server/Services/DatabaseServerService.test.ts +55 -0
  92. package/Tests/Server/Services/GroupTelemetryUsageExcludeNames.test.ts +299 -0
  93. package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +44 -0
  94. package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +45 -6
  95. package/Tests/Server/Services/RecordingRuleReservedMetricName.test.ts +171 -0
  96. package/Tests/Server/Services/ResourceAiAccessChangeAuthorization.test.ts +256 -0
  97. package/Tests/Server/Services/ResourceAiAccessService.test.ts +1373 -0
  98. package/Tests/Server/Services/ResourceAiAgentJobService.test.ts +375 -0
  99. package/Tests/Server/Services/ResourceAiAgentServiceHelpers.test.ts +1114 -0
  100. package/Tests/Server/Services/ResourceAiAgentServiceLifecycle.test.ts +1050 -0
  101. package/Tests/Server/Services/ResourceAiAgentServiceRegister.test.ts +2251 -0
  102. package/Tests/Server/Services/ResourceAiSettingsCreate.test.ts +373 -0
  103. package/Tests/Server/Services/ResourceAiSettingsPermission.test.ts +1042 -0
  104. package/Tests/Server/Services/ResourceServiceDeleteCleansUpAi.test.ts +319 -0
  105. package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +105 -0
  106. package/Tests/Server/Services/RunnerJobEnqueueResourceCommand.test.ts +986 -0
  107. package/Tests/Server/Services/RunnerJobResourceCommandLane.test.ts +211 -0
  108. package/Tests/Server/Services/RunnerJobResourceCommandTimeoutAndRedaction.test.ts +352 -0
  109. package/Tests/Server/Services/TelemetryUsageBillingSloExclusion.test.ts +218 -0
  110. package/Tests/Server/TestingUtils/Services/FakeRunnerJobCount.ts +145 -0
  111. package/Tests/Server/Utils/AI/InvestigationInfrastructureAccessWiring.test.ts +453 -0
  112. package/Tests/Server/Utils/AI/InvestigationInfrastructureReport.test.ts +721 -0
  113. package/Tests/Server/Utils/AI/RemediationCommandTools.test.ts +94 -1
  114. package/Tests/Server/Utils/AI/RemediationCommandToolsResource.test.ts +1530 -0
  115. package/Tests/Server/Utils/AI/RemediationExecutionRunnerResourceMode.test.ts +1249 -0
  116. package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +117 -0
  117. package/Tests/Server/Utils/AI/RemediationResourceCopyParity.test.ts +463 -0
  118. package/Tests/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.test.ts +722 -0
  119. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAccessContext.test.ts +266 -0
  120. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.test.ts +1220 -0
  121. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.test.ts +569 -0
  122. package/Tests/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.test.ts +830 -0
  123. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorResource.test.ts +717 -0
  124. package/Tests/Server/Utils/AutoRemediation/RemediationVerifierResourceFollowUp.test.ts +338 -0
  125. package/Tests/Server/Utils/Monitor/Criteria/SessionReplayBudgetTemplateCriteria.test.ts +422 -0
  126. package/Tests/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.test.ts +1647 -0
  127. package/Tests/Server/Utils/SessionReplay/SessionReplayUsage.test.ts +143 -1
  128. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +33 -3
  129. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsAccountNotLinked.test.ts +1093 -0
  130. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.test.ts +1049 -0
  131. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.test.ts +1676 -0
  132. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCards.test.ts +2884 -0
  133. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.test.ts +2490 -0
  134. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmit.test.ts +2293 -0
  135. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmitServerTimezone.test.ts +386 -0
  136. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.test.ts +1477 -0
  137. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.test.ts +1967 -0
  138. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsStripHtmlTags.test.ts +92 -0
  139. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsSubmittedFormRemoval.test.ts +1819 -0
  140. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.test.ts +1033 -0
  141. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezoneServerZone.test.ts +610 -0
  142. package/Tests/Server/Utils/Workspace/MicrosoftTeamsBotMessageHandling.test.ts +2610 -0
  143. package/Tests/Server/Utils/Workspace/MicrosoftTeamsCreateCommandsEndToEnd.test.ts +4672 -0
  144. package/Tests/Server/Utils/Workspace/WorkspaceCreateProjectReferences.test.ts +190 -65
  145. package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +10 -4
  146. package/Tests/Types/AutoRemediation/AiRemediationCommandPlanResourceCommand.test.ts +305 -0
  147. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +277 -13
  148. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +113 -0
  149. package/Tests/Types/Monitor/RumAlertTemplates.test.ts +773 -2
  150. package/Tests/Types/ResourceAiAgent/AiResourceType.test.ts +419 -0
  151. package/Tests/Types/ResourceAiAgent/ResourceAiAccess.test.ts +517 -0
  152. package/Tests/Types/Runbook/RunbookStepType.test.ts +147 -8
  153. package/Tests/UI/Rum/RecordingHealthDashboard.test.tsx +769 -1
  154. package/Tests/Utils/AiRemediation/Resource/CephCommandPolicy.test.ts +1653 -0
  155. package/Tests/Utils/AiRemediation/Resource/CephOutputRedaction.test.ts +204 -0
  156. package/Tests/Utils/AiRemediation/Resource/DatabaseCommandPolicy.test.ts +1077 -0
  157. package/Tests/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.test.ts +558 -0
  158. package/Tests/Utils/AiRemediation/Resource/DatabaseQueryRedactor.test.ts +834 -0
  159. package/Tests/Utils/AiRemediation/Resource/DockerCliGrammar.test.ts +747 -0
  160. package/Tests/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.test.ts +1259 -0
  161. package/Tests/Utils/AiRemediation/Resource/DockerOutputRedaction.test.ts +386 -0
  162. package/Tests/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.test.ts +782 -0
  163. package/Tests/Utils/AiRemediation/Resource/GovcCommandPolicy.test.ts +2259 -0
  164. package/Tests/Utils/AiRemediation/Resource/HostCommandPolicy.test.ts +2019 -0
  165. package/Tests/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.test.ts +2497 -0
  166. package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicy.test.ts +1305 -0
  167. package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.test.ts +585 -0
  168. package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactor.test.ts +334 -0
  169. package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactorCopyParity.test.ts +98 -0
  170. package/Tests/Utils/AiRemediation/Resource/ResourcePolicyImportClosure.test.ts +391 -0
  171. package/Tests/Utils/AiRemediation/ResourceAiAgentPolicyCopyParity.test.ts +497 -0
  172. package/Tests/Utils/SessionReplay/SessionReplayBudgetMetricType.test.ts +383 -0
  173. package/Types/AI/ResourceAiAccessApi.ts +140 -0
  174. package/Types/AI/ResourceAiAccessPermissions.ts +126 -0
  175. package/Types/AutoRemediation/AiRemediationCommandPlan.ts +183 -2
  176. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +55 -22
  177. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +35 -3
  178. package/Types/Monitor/RumAlertTemplates.ts +351 -4
  179. package/Types/ResourceAiAgent/AiResourceType.ts +310 -0
  180. package/Types/ResourceAiAgent/ResourceAiAccess.ts +574 -0
  181. package/Types/Rum/SessionReplayBudgetMetricType.ts +47 -0
  182. package/Types/Runbook/RunbookStepType.ts +29 -0
  183. package/Types/Telemetry/TelemetryIngestSurface.ts +14 -2
  184. package/Utils/AI/InvestigationReport.ts +121 -15
  185. package/Utils/AiRemediation/Resource/CephCommandPolicy.ts +1936 -0
  186. package/Utils/AiRemediation/Resource/DatabaseCommandPolicy.ts +166 -0
  187. package/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.ts +1532 -0
  188. package/Utils/AiRemediation/Resource/DatabaseQueryRedactor.ts +1394 -0
  189. package/Utils/AiRemediation/Resource/DockerCliGrammar.ts +1839 -0
  190. package/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.ts +490 -0
  191. package/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.ts +687 -0
  192. package/Utils/AiRemediation/Resource/GovcCommandPolicy.ts +2096 -0
  193. package/Utils/AiRemediation/Resource/HostCommandPolicy.ts +2982 -0
  194. package/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.ts +1679 -0
  195. package/Utils/AiRemediation/Resource/ResourceCommandPolicy.ts +851 -0
  196. package/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.ts +593 -0
  197. package/Utils/AiRemediation/Resource/ResourceOutputRedactor.ts +2812 -0
  198. package/Utils/SessionReplay/SessionReplayBudgetMetricType.ts +184 -0
  199. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +62 -0
  200. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -1
  201. package/build/dist/Models/DatabaseModels/CephCluster.js +219 -0
  202. package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
  203. package/build/dist/Models/DatabaseModels/DatabaseServer.js +219 -0
  204. package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -1
  205. package/build/dist/Models/DatabaseModels/DockerHost.js +219 -0
  206. package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
  207. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +219 -0
  208. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
  209. package/build/dist/Models/DatabaseModels/GlobalConfig.js +1 -1
  210. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  211. package/build/dist/Models/DatabaseModels/Host.js +219 -0
  212. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  213. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  214. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  215. package/build/dist/Models/DatabaseModels/PodmanHost.js +219 -0
  216. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -1
  217. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +219 -0
  218. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
  219. package/build/dist/Models/DatabaseModels/ResourceAiAgent.js +439 -0
  220. package/build/dist/Models/DatabaseModels/ResourceAiAgent.js.map +1 -0
  221. package/build/dist/Models/DatabaseModels/RunnerJob.js +145 -0
  222. package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
  223. package/build/dist/Models/DatabaseModels/VMwareVCenter.js +219 -0
  224. package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -1
  225. package/build/dist/Server/API/AutoRemediationAPI.js +231 -1
  226. package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
  227. package/build/dist/Server/API/ResourceAiAccessAPI.js +1119 -0
  228. package/build/dist/Server/API/ResourceAiAccessAPI.js.map +1 -0
  229. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js +168 -0
  230. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js.map +1 -0
  231. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  232. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  233. package/build/dist/Server/Infrastructure/Semaphore.js +6 -0
  234. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  235. package/build/dist/Server/Middleware/TelemetryIngest.js +12 -5
  236. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  237. package/build/dist/Server/Services/AnalyticsDatabaseService.js +26 -1
  238. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  239. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +601 -3
  240. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  241. package/build/dist/Server/Services/CephClusterService.js +104 -0
  242. package/build/dist/Server/Services/CephClusterService.js.map +1 -1
  243. package/build/dist/Server/Services/DatabaseServerService.js +99 -0
  244. package/build/dist/Server/Services/DatabaseServerService.js.map +1 -1
  245. package/build/dist/Server/Services/DockerHostService.js +104 -0
  246. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  247. package/build/dist/Server/Services/DockerSwarmClusterService.js +104 -0
  248. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
  249. package/build/dist/Server/Services/HostService.js +114 -2
  250. package/build/dist/Server/Services/HostService.js.map +1 -1
  251. package/build/dist/Server/Services/MetricRecordingRuleService.js +46 -0
  252. package/build/dist/Server/Services/MetricRecordingRuleService.js.map +1 -1
  253. package/build/dist/Server/Services/PodmanHostService.js +104 -0
  254. package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
  255. package/build/dist/Server/Services/ProxmoxClusterService.js +104 -0
  256. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
  257. package/build/dist/Server/Services/ResourceAiAccessService.js +1028 -0
  258. package/build/dist/Server/Services/ResourceAiAccessService.js.map +1 -0
  259. package/build/dist/Server/Services/ResourceAiAgentJobService.js +173 -0
  260. package/build/dist/Server/Services/ResourceAiAgentJobService.js.map +1 -0
  261. package/build/dist/Server/Services/ResourceAiAgentService.js +1687 -0
  262. package/build/dist/Server/Services/ResourceAiAgentService.js.map +1 -0
  263. package/build/dist/Server/Services/RunnerJobService.js +344 -5
  264. package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
  265. package/build/dist/Server/Services/TelemetryUsageBillingService.js +26 -0
  266. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  267. package/build/dist/Server/Services/TraceRecordingRuleService.js +37 -0
  268. package/build/dist/Server/Services/TraceRecordingRuleService.js.map +1 -1
  269. package/build/dist/Server/Services/VMwareVCenterService.js +104 -0
  270. package/build/dist/Server/Services/VMwareVCenterService.js.map +1 -1
  271. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +1029 -30
  272. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
  273. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +633 -28
  274. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  275. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +21 -1
  276. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
  277. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js +330 -0
  278. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js.map +1 -0
  279. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js +160 -0
  280. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js.map +1 -0
  281. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js +33 -0
  282. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js.map +1 -0
  283. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js +640 -0
  284. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js.map +1 -0
  285. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js +226 -0
  286. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js.map +1 -0
  287. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js +600 -0
  288. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js.map +1 -0
  289. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +50 -4
  290. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  291. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +55 -4
  292. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  293. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +55 -4
  294. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  295. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +290 -13
  296. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
  297. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +29 -1
  298. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -1
  299. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +9 -1
  300. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
  301. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js +627 -0
  302. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js.map +1 -0
  303. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js +60 -5
  304. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js.map +1 -1
  305. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +19 -15
  306. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
  307. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +19 -15
  308. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
  309. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js +17 -1
  310. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js.map +1 -1
  311. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +183 -209
  312. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
  313. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +19 -15
  314. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
  315. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +233 -167
  316. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
  317. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +263 -110
  318. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  319. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js +129 -0
  320. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js.map +1 -0
  321. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js +266 -0
  322. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js.map +1 -0
  323. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js +258 -0
  324. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js.map +1 -0
  325. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js +104 -0
  326. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js.map +1 -0
  327. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js +183 -0
  328. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js.map +1 -0
  329. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js +123 -0
  330. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js.map +1 -0
  331. package/build/dist/Types/AI/ResourceAiAccessApi.js +30 -0
  332. package/build/dist/Types/AI/ResourceAiAccessApi.js.map +1 -0
  333. package/build/dist/Types/AI/ResourceAiAccessPermissions.js +98 -0
  334. package/build/dist/Types/AI/ResourceAiAccessPermissions.js.map +1 -0
  335. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +116 -29
  336. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
  337. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +47 -21
  338. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  339. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +5 -0
  340. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  341. package/build/dist/Types/Monitor/RumAlertTemplates.js +199 -3
  342. package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
  343. package/build/dist/Types/ResourceAiAgent/AiResourceType.js +242 -0
  344. package/build/dist/Types/ResourceAiAgent/AiResourceType.js.map +1 -0
  345. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js +275 -0
  346. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js.map +1 -0
  347. package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js +45 -0
  348. package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js.map +1 -0
  349. package/build/dist/Types/Runbook/RunbookStepType.js +27 -0
  350. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  351. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +13 -2
  352. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
  353. package/build/dist/Utils/AI/InvestigationReport.js +71 -11
  354. package/build/dist/Utils/AI/InvestigationReport.js.map +1 -1
  355. package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js +1462 -0
  356. package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js.map +1 -0
  357. package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js +122 -0
  358. package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js.map +1 -0
  359. package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js +1139 -0
  360. package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js.map +1 -0
  361. package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js +1060 -0
  362. package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js.map +1 -0
  363. package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js +1301 -0
  364. package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js.map +1 -0
  365. package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js +370 -0
  366. package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js.map +1 -0
  367. package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js +498 -0
  368. package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js.map +1 -0
  369. package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js +1565 -0
  370. package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js.map +1 -0
  371. package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js +2206 -0
  372. package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js.map +1 -0
  373. package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js +1129 -0
  374. package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js.map +1 -0
  375. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js +565 -0
  376. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js.map +1 -0
  377. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js +408 -0
  378. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js.map +1 -0
  379. package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js +1910 -0
  380. package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js.map +1 -0
  381. package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js +160 -0
  382. package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js.map +1 -0
  383. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MicrosoftTeamsCreateCommands.js","sourceRoot":"","sources":["../../../../../../Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ import { truncateToLength } from "../../Database/TruncateColumnValue";
2
+ /*
3
+ * How big a message Microsoft Teams takes from a bot.
4
+ *
5
+ * Teams measures a bot message as UTF-16 and refuses one over its limit with
6
+ * HTTP 413 MessageSizeTooBig ("Message size too large."), which the Bot
7
+ * Framework SDK does not retry. The documented limit has moved over the years
8
+ * (28 KB, then 40 KB, now "about 100 KB, keep it within 80 KB"), and Teams
9
+ * checks it against its own internal form of the message rather than the JSON
10
+ * we send, so 413s are reported well under the documented number. Anything we
11
+ * build that grows with the size of a project is therefore kept to a budget
12
+ * with a wide margin, and a card Teams still refuses is sent again, smaller.
13
+ *
14
+ * Issue #4111: the "create incident" and "create maintenance" forms listed
15
+ * every monitor, label and on-call policy of the project, so a few hundred
16
+ * monitors were enough for Teams to refuse the form.
17
+ */
18
+ /*
19
+ * Budgets for an adaptive card, in the order they are tried. The next one is
20
+ * only tried after Teams refused the card built for the previous one. A budget
21
+ * of 0 leaves every optional list off the card.
22
+ */
23
+ export const MICROSOFT_TEAMS_CARD_SIZE_BUDGETS_IN_BYTES = [40 * 1024, 20 * 1024, 0];
24
+ // Budget for a plain text reply, such as "show active incidents".
25
+ export const MICROSOFT_TEAMS_TEXT_MESSAGE_BUDGET_IN_BYTES = 40 * 1024;
26
+ const DEFAULT_TRUNCATION_NOTE = "…\n\n_This reply was shortened to fit in Microsoft Teams. Open OneUptime to see everything._";
27
+ export default class MicrosoftTeamsMessageSize {
28
+ // Size as Teams counts it: JavaScript strings are UTF-16, two bytes a unit.
29
+ static getSizeInBytes(value) {
30
+ const text = typeof value === "string" ? value : JSON.stringify(value);
31
+ return text.length * 2;
32
+ }
33
+ /*
34
+ * Whether Teams refused a message as too large.
35
+ *
36
+ * The Bot Framework connector throws a RestError that carries statusCode
37
+ * 413 and code "MessageSizeTooBig". It is matched on those fields and not
38
+ * on its class: @azure/* is not a dependency of Common (botbuilder brings
39
+ * it), and the error can come from another JavaScript realm, where
40
+ * instanceof is false. The status code alone is enough when a proxy in
41
+ * front of the connector answered 413 with a body that is not JSON.
42
+ */
43
+ static isMessageTooLargeError(error) {
44
+ return (this.getErrorStatusCode(error) === 413 ||
45
+ this.getErrorCode(error) === "MessageSizeTooBig");
46
+ }
47
+ // The HTTP status of a failed Bot Framework call, when the error has one.
48
+ static getErrorStatusCode(error) {
49
+ var _a;
50
+ if (!error || typeof error !== "object") {
51
+ return undefined;
52
+ }
53
+ const candidate = error;
54
+ if (typeof candidate.statusCode === "number") {
55
+ return candidate.statusCode;
56
+ }
57
+ if (typeof ((_a = candidate.response) === null || _a === void 0 ? void 0 : _a.status) === "number") {
58
+ return candidate.response.status;
59
+ }
60
+ return undefined;
61
+ }
62
+ // The error code of a failed Bot Framework call, e.g. "MessageSizeTooBig".
63
+ static getErrorCode(error) {
64
+ var _a, _b;
65
+ if (!error || typeof error !== "object") {
66
+ return undefined;
67
+ }
68
+ const candidate = error;
69
+ if (typeof candidate.code === "string" && candidate.code) {
70
+ return candidate.code;
71
+ }
72
+ if (typeof ((_b = (_a = candidate.details) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.code) === "string" &&
73
+ candidate.details.error.code) {
74
+ return candidate.details.error.code;
75
+ }
76
+ return undefined;
77
+ }
78
+ /*
79
+ * A text reply cut down to the budget, with a note that it was shortened
80
+ * when the note fits as well. The cut is made at the last line break that
81
+ * fits, so no markdown line is split, or mid-line (never inside an emoji)
82
+ * when the first line alone is over the budget. The result is never over
83
+ * the budget; text within it is returned as it is.
84
+ */
85
+ static fitTextToBudget(data) {
86
+ var _a, _b;
87
+ const budgetInBytes = (_a = data.budgetInBytes) !== null && _a !== void 0 ? _a : MICROSOFT_TEAMS_TEXT_MESSAGE_BUDGET_IN_BYTES;
88
+ if (this.getSizeInBytes(data.text) <= budgetInBytes) {
89
+ return data.text;
90
+ }
91
+ const maxUnits = Math.max(0, Math.floor(budgetInBytes / 2));
92
+ const requestedNote = (_b = data.truncationNote) !== null && _b !== void 0 ? _b : DEFAULT_TRUNCATION_NOTE;
93
+ // A note that does not fit leaves the whole budget to the text.
94
+ const truncationNote = requestedNote.length <= maxUnits ? requestedNote : "";
95
+ const maxLength = maxUnits - truncationNote.length;
96
+ // A line that ends exactly at the cut still fits, so the search includes it.
97
+ const lastLineBreak = data.text.lastIndexOf("\n", maxLength);
98
+ const kept = lastLineBreak > 0
99
+ ? data.text.substring(0, lastLineBreak)
100
+ : truncateToLength(data.text, maxLength);
101
+ return kept.trimEnd() + truncationNote;
102
+ }
103
+ }
104
+ //# sourceMappingURL=MicrosoftTeamsMessageSize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MicrosoftTeamsMessageSize.js","sourceRoot":"","sources":["../../../../../../Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ import URL from "../../../../Types/API/URL";
2
+ import BadDataException from "../../../../Types/Exception/BadDataException";
3
+ import NotAuthorizedException from "../../../../Types/Exception/NotAuthorizedException";
4
+ import DatabaseConfig from "../../../DatabaseConfig";
5
+ import { ProjectScopedReferenceException } from "../../Database/ProjectScopedReferenceValidator";
6
+ import logger from "../../Logger";
7
+ import MicrosoftTeamsMessageSize, { MICROSOFT_TEAMS_CARD_SIZE_BUDGETS_IN_BYTES, } from "./MicrosoftTeamsMessageSize";
8
+ /*
9
+ * Replies the Microsoft Teams bot sends, and the rule they follow: an inbound
10
+ * message gets one answer, and an answer that cannot be sent never turns into
11
+ * a second one.
12
+ *
13
+ * Issue #4111: a failed command replied "Sorry, I encountered an error..."
14
+ * and then rethrew, the adapter answered Teams with HTTP 500, and Teams
15
+ * delivered the message again, so every error showed up twice. Replies that
16
+ * are not the point of the turn (an error text, removing a submitted form) are
17
+ * therefore sent best-effort: a failure is logged, never thrown.
18
+ */
19
+ export const MICROSOFT_TEAMS_ADAPTIVE_CARD_CONTENT_TYPE = "application/vnd.microsoft.card.adaptive";
20
+ /*
21
+ * The reply for a submit that references a record the project does not have
22
+ * (deleted since the form was sent, or another project's id in a tampered
23
+ * submit). Fixed text: the validator's own message names the other project's
24
+ * record, which is not for this chat.
25
+ */
26
+ export const MICROSOFT_TEAMS_UNAVAILABLE_REFERENCE_MESSAGE = "One of the values you picked (a monitor, label, on-call policy, severity or status) is not available in this project any more. Please pick it again.";
27
+ export default class MicrosoftTeamsReplies {
28
+ // Sends a reply; logs instead of throwing. Returns whether Teams took it.
29
+ static async sendBestEffort(turnContext, reply) {
30
+ try {
31
+ await turnContext.sendActivity(reply);
32
+ return true;
33
+ }
34
+ catch (error) {
35
+ logger.error(`Could not send a Microsoft Teams reply: ${this.describeError(error)}`);
36
+ return false;
37
+ }
38
+ }
39
+ /*
40
+ * Removes a message the bot posted, such as the form a user just submitted;
41
+ * logs instead of throwing. It runs after the record the form created
42
+ * exists, so a failure here must never be reported as a failed create.
43
+ */
44
+ static async deleteBestEffort(turnContext, activityId) {
45
+ if (!activityId) {
46
+ return;
47
+ }
48
+ try {
49
+ await turnContext.deleteActivity(activityId);
50
+ }
51
+ catch (error) {
52
+ logger.debug(`Could not remove a submitted Microsoft Teams card: ${this.describeError(error)}`);
53
+ }
54
+ }
55
+ /*
56
+ * Sends an adaptive card built for each size budget in turn, until Teams
57
+ * accepts one. Only a "too large" refusal moves on to the next, smaller
58
+ * budget; any other error is thrown at once, and so is the last "too
59
+ * large". A budget whose card is no different from the one just refused
60
+ * is skipped.
61
+ */
62
+ static async sendCardWithinSizeLimit(data) {
63
+ const budgetsInBytes = data.budgetsInBytes || MICROSOFT_TEAMS_CARD_SIZE_BUDGETS_IN_BYTES;
64
+ let lastError = undefined;
65
+ let lastRefusedCard = null;
66
+ for (const budgetInBytes of budgetsInBytes) {
67
+ const card = data.buildCard(budgetInBytes);
68
+ const serializedCard = JSON.stringify(card);
69
+ if (serializedCard === lastRefusedCard) {
70
+ continue;
71
+ }
72
+ try {
73
+ await data.turnContext.sendActivity({
74
+ attachments: [
75
+ {
76
+ contentType: MICROSOFT_TEAMS_ADAPTIVE_CARD_CONTENT_TYPE,
77
+ content: card,
78
+ },
79
+ ],
80
+ });
81
+ return;
82
+ }
83
+ catch (error) {
84
+ if (!MicrosoftTeamsMessageSize.isMessageTooLargeError(error)) {
85
+ throw error;
86
+ }
87
+ logger.warn(`Microsoft Teams refused a ${MicrosoftTeamsMessageSize.getSizeInBytes(serializedCard)} byte card as too large (budget ${budgetInBytes} bytes); trying a smaller one.`);
88
+ lastError = error;
89
+ lastRefusedCard = serializedCard;
90
+ }
91
+ }
92
+ throw lastError;
93
+ }
94
+ /*
95
+ * One line that says what went wrong, for the log. Bot Framework errors
96
+ * carry the HTTP status and Teams' error code, e.g.
97
+ * "RestError 413 MessageSizeTooBig: Message size too large.".
98
+ */
99
+ static describeError(error) {
100
+ var _a, _b;
101
+ if (!error || typeof error !== "object") {
102
+ return String(error);
103
+ }
104
+ /*
105
+ * OneUptime's exceptions keep Error's name, so the class they were thrown
106
+ * as comes from the constructor instead.
107
+ */
108
+ const errorName = error.name || "";
109
+ const constructorName = ((_a = error.constructor) === null || _a === void 0 ? void 0 : _a.name) || "";
110
+ const name = errorName && errorName !== "Error"
111
+ ? errorName
112
+ : constructorName && constructorName !== "Object"
113
+ ? constructorName
114
+ : errorName || "Error";
115
+ const message = String((_b = error.message) !== null && _b !== void 0 ? _b : "");
116
+ const statusCode = MicrosoftTeamsMessageSize.getErrorStatusCode(error);
117
+ const code = MicrosoftTeamsMessageSize.getErrorCode(error);
118
+ return [name, statusCode, code]
119
+ .filter((part) => {
120
+ return part !== undefined && part !== "";
121
+ })
122
+ .join(" ")
123
+ .concat(`: ${message}`);
124
+ }
125
+ /*
126
+ * Logs a failure: one line that says what failed and why, then the error
127
+ * itself, which keeps its stack and lets the log tell a refusal from a
128
+ * fault. A Bot Framework HTTP error is left at the one line: its status and
129
+ * code say it all, and the object carries the whole request and response.
130
+ */
131
+ static logFailure(summary, error, attributes) {
132
+ logger.error(`${summary}: ${this.describeError(error)}`, attributes);
133
+ if (MicrosoftTeamsMessageSize.getErrorStatusCode(error) === undefined) {
134
+ logger.error(error, attributes);
135
+ }
136
+ }
137
+ /*
138
+ * The message of an error OneUptime writes for the person who caused it: a
139
+ * validation or a permission refusal. Null for anything else, whose text is
140
+ * meant for operators.
141
+ */
142
+ static getUserFacingErrorMessage(error) {
143
+ if (error instanceof ProjectScopedReferenceException) {
144
+ return MICROSOFT_TEAMS_UNAVAILABLE_REFERENCE_MESSAGE;
145
+ }
146
+ if ((error instanceof BadDataException ||
147
+ error instanceof NotAuthorizedException) &&
148
+ error.message) {
149
+ return error.message;
150
+ }
151
+ return null;
152
+ }
153
+ // A link into the project in the OneUptime dashboard, or null if unknown.
154
+ static async getDashboardLink(data) {
155
+ try {
156
+ const dashboardUrl = await DatabaseConfig.getDashboardUrl();
157
+ return URL.fromString(dashboardUrl.toString())
158
+ .addRoute(`/${data.projectId.toString()}${data.route}`)
159
+ .toString();
160
+ }
161
+ catch (error) {
162
+ logger.debug("Could not build a OneUptime dashboard link");
163
+ logger.debug(error);
164
+ return null;
165
+ }
166
+ }
167
+ /*
168
+ * What to tell a Teams user who has not connected their Microsoft Teams
169
+ * account to OneUptime yet: where to do it. `purpose` completes "To ...",
170
+ * e.g. "create incidents from Microsoft Teams".
171
+ */
172
+ static async getAccountNotLinkedMessage(data) {
173
+ const settingsLink = await this.getDashboardLink({
174
+ projectId: data.projectId,
175
+ route: "/user-settings/microsoft-teams-integration",
176
+ });
177
+ const where = settingsLink
178
+ ? `in [OneUptime → User Settings → Microsoft Teams](${settingsLink})`
179
+ : "in OneUptime under User Settings → Microsoft Teams";
180
+ return `To ${data.purpose}, first connect your Microsoft Teams account to OneUptime ${where}, then try again.`;
181
+ }
182
+ }
183
+ //# sourceMappingURL=MicrosoftTeamsReplies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MicrosoftTeamsReplies.js","sourceRoot":"","sources":["../../../../../../Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,2BAA2B,CAAC;AAC5C,OAAO,gBAAgB,MAAM,8CAA8C,CAAC;AAC5E,OAAO,sBAAsB,MAAM,oDAAoD,CAAC;AAGxF,OAAO,cAAc,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,+BAA+B,EAAE,MAAM,gDAAgD,CAAC;AACjG,OAAO,MAAyB,MAAM,cAAc,CAAC;AACrD,OAAO,yBAAyB,EAAE,EAChC,0CAA0C,GAC3C,MAAM,6BAA6B,CAAC;AAErC;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,0CAA0C,GACrD,yCAAyC,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,6CAA6C,GACxD,sJAAsJ,CAAC;AAEzJ,MAAM,CAAC,OAAO,OAAO,qBAAqB;IACxC,0EAA0E;IACnE,MAAM,CAAC,KAAK,CAAC,cAAc,CAChC,WAAwB,EACxB,KAAiC;QAEjC,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CACV,2CAA2C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CACvE,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAClC,WAAwB,EACxB,UAA8B;QAE9B,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CACV,sDAAsD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAClF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAI3C;QACC,MAAM,cAAc,GAClB,IAAI,CAAC,cAAc,IAAI,0CAA0C,CAAC;QAEpE,IAAI,SAAS,GAAY,SAAS,CAAC;QACnC,IAAI,eAAe,GAAkB,IAAI,CAAC;QAE1C,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAe,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YACvD,MAAM,cAAc,GAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAEpD,IAAI,cAAc,KAAK,eAAe,EAAE,CAAC;gBACvC,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;oBAClC,WAAW,EAAE;wBACX;4BACE,WAAW,EAAE,0CAA0C;4BACvD,OAAO,EAAE,IAAI;yBACd;qBACF;iBACF,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,yBAAyB,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7D,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,MAAM,CAAC,IAAI,CACT,6BAA6B,yBAAyB,CAAC,cAAc,CACnE,cAAc,CACf,mCAAmC,aAAa,gCAAgC,CAClF,CAAC;gBAEF,SAAS,GAAG,KAAK,CAAC;gBAClB,eAAe,GAAG,cAAc,CAAC;YACnC,CAAC;QACH,CAAC;QAED,MAAM,SAAS,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,aAAa,CAAC,KAAc;;QACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAED;;;WAGG;QACH,MAAM,SAAS,GACX,KAA4B,CAAC,IAA2B,IAAI,EAAE,CAAC;QACnE,MAAM,eAAe,GACnB,CAAC,MAAC,KAA8C,CAAC,WAAW,0CAAE,IAEhD,KAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GACR,SAAS,IAAI,SAAS,KAAK,OAAO;YAChC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,eAAe,IAAI,eAAe,KAAK,QAAQ;gBAC/C,CAAC,CAAC,eAAe;gBACjB,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC;QAC7B,MAAM,OAAO,GAAW,MAAM,CAC5B,MAAC,KAA+B,CAAC,OAAO,mCAAI,EAAE,CAC/C,CAAC;QACF,MAAM,UAAU,GACd,yBAAyB,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,IAAI,GACR,yBAAyB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEhD,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC;aAC5B,MAAM,CAAC,CAAC,IAAiC,EAAE,EAAE;YAC5C,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC;QAC3C,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC;aACT,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,UAAU,CACtB,OAAe,EACf,KAAc,EACd,UAAsC;QAEtC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAErE,IAAI,yBAAyB,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;YACtE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,yBAAyB,CAAC,KAAc;QACpD,IAAI,KAAK,YAAY,+BAA+B,EAAE,CAAC;YACrD,OAAO,6CAA6C,CAAC;QACvD,CAAC;QAED,IACE,CAAC,KAAK,YAAY,gBAAgB;YAChC,KAAK,YAAY,sBAAsB,CAAC;YAC1C,KAAK,CAAC,OAAO,EACb,CAAC;YACD,OAAO,KAAK,CAAC,OAAO,CAAC;QACvB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0EAA0E;IACnE,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAGpC;QACC,IAAI,CAAC;YACH,MAAM,YAAY,GAAQ,MAAM,cAAc,CAAC,eAAe,EAAE,CAAC;YAEjE,OAAO,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;iBAC3C,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;iBACtD,QAAQ,EAAE,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC3D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,IAG9C;QACC,MAAM,YAAY,GAAkB,MAAM,IAAI,CAAC,gBAAgB,CAAC;YAC9D,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,4CAA4C;SACpD,CAAC,CAAC;QAEH,MAAM,KAAK,GAAW,YAAY;YAChC,CAAC,CAAC,oDAAoD,YAAY,GAAG;YACrE,CAAC,CAAC,oDAAoD,CAAC;QAEzD,OAAO,MAAM,IAAI,CAAC,OAAO,6DAA6D,KAAK,mBAAmB,CAAC;IACjH,CAAC;CACF"}
@@ -0,0 +1,123 @@
1
+ import moment from "moment-timezone";
2
+ const DATE_TIME_FORMATS = [
3
+ "YYYY-MM-DD HH:mm",
4
+ "YYYY-MM-DD HH:mm:ss",
5
+ ];
6
+ const UTC_OFFSET_SUFFIX = /(?:[+-]\d{2}:?\d{2}|Z)$/i;
7
+ class MicrosoftTeamsTimezone {
8
+ // The name, when it is an IANA time zone moment-timezone knows.
9
+ static getKnownTimezone(value) {
10
+ if (typeof value !== "string") {
11
+ return undefined;
12
+ }
13
+ const name = value.trim();
14
+ if (!name || !moment.tz.zone(name)) {
15
+ return undefined;
16
+ }
17
+ return name;
18
+ }
19
+ // The IANA zone an activity says its sender is in.
20
+ static getTimezoneFromActivity(activity) {
21
+ const fromLocalTimezone = this.getKnownTimezone(activity["localTimezone"]);
22
+ if (fromLocalTimezone) {
23
+ return fromLocalTimezone;
24
+ }
25
+ const entities = activity["entities"] || [];
26
+ for (const entity of entities) {
27
+ if (entity && entity["type"] === "clientInfo") {
28
+ const fromClientInfo = this.getKnownTimezone(entity["timezone"]);
29
+ if (fromClientInfo) {
30
+ return fromClientInfo;
31
+ }
32
+ }
33
+ }
34
+ return undefined;
35
+ }
36
+ /*
37
+ * The UTC offset of the activity's local timestamp, in minutes. botbuilder
38
+ * turns localTimestamp into a Date, which drops the offset, and keeps the
39
+ * original string as rawLocalTimestamp.
40
+ */
41
+ static getUtcOffsetFromActivity(activity) {
42
+ for (const field of ["rawLocalTimestamp", "localTimestamp"]) {
43
+ const value = activity[field];
44
+ if (typeof value !== "string" || !UTC_OFFSET_SUFFIX.test(value.trim())) {
45
+ continue;
46
+ }
47
+ const parsed = moment.parseZone(value.trim(), moment.ISO_8601, true);
48
+ if (parsed.isValid()) {
49
+ return parsed.utcOffset();
50
+ }
51
+ }
52
+ return undefined;
53
+ }
54
+ /*
55
+ * The zone to read a submitted date and time in: the zone the form named,
56
+ * which is what its reader was told, then the submitting activity's own
57
+ * zone, then its UTC offset, then UTC.
58
+ */
59
+ static resolve(data) {
60
+ const timezone = this.getKnownTimezone(data.timezoneFromCard) ||
61
+ this.getTimezoneFromActivity(data.activity);
62
+ if (timezone) {
63
+ return { timezone: timezone, label: timezone };
64
+ }
65
+ const utcOffsetInMinutes = this.getUtcOffsetFromActivity(data.activity);
66
+ if (utcOffsetInMinutes !== undefined) {
67
+ return {
68
+ utcOffsetInMinutes: utcOffsetInMinutes,
69
+ label: this.formatUtcOffset(utcOffsetInMinutes),
70
+ };
71
+ }
72
+ return this.UTC;
73
+ }
74
+ /*
75
+ * Whether only a UTC offset is known. The offset is today's, so a date past
76
+ * a daylight saving change can be an hour out, and the reply says so.
77
+ */
78
+ static isUtcOffsetOnly(timezone) {
79
+ return !timezone.timezone && timezone.utcOffsetInMinutes !== undefined;
80
+ }
81
+ // "UTC", "UTC+05:30", "UTC-04:00".
82
+ static formatUtcOffset(utcOffsetInMinutes) {
83
+ if (utcOffsetInMinutes === 0) {
84
+ return "UTC";
85
+ }
86
+ const sign = utcOffsetInMinutes > 0 ? "+" : "-";
87
+ const absolute = Math.abs(utcOffsetInMinutes);
88
+ const hours = String(Math.floor(absolute / 60)).padStart(2, "0");
89
+ const minutes = String(absolute % 60).padStart(2, "0");
90
+ return `UTC${sign}${hours}:${minutes}`;
91
+ }
92
+ /*
93
+ * The instant a date ("YYYY-MM-DD") and a time ("HH:mm") mean in the zone,
94
+ * or null when either is not in that form.
95
+ */
96
+ static toDate(data) {
97
+ const text = `${data.date.trim()} ${data.time.trim()}`;
98
+ if (data.timezone.timezone) {
99
+ const zoned = moment.tz(text, DATE_TIME_FORMATS, true, data.timezone.timezone);
100
+ return zoned.isValid() ? zoned.toDate() : null;
101
+ }
102
+ const wallClock = moment.utc(text, DATE_TIME_FORMATS, true);
103
+ if (!wallClock.isValid()) {
104
+ return null;
105
+ }
106
+ return wallClock
107
+ .subtract(data.timezone.utcOffsetInMinutes || 0, "minutes")
108
+ .toDate();
109
+ }
110
+ // A date as the user reads it back, e.g. "Oct 1, 2026, 14:00 (America/New_York)".
111
+ static format(date, timezone) {
112
+ const zoned = timezone.timezone
113
+ ? moment(date).tz(timezone.timezone)
114
+ : moment(date).utcOffset(timezone.utcOffsetInMinutes || 0);
115
+ return `${zoned.format("MMM D, YYYY, HH:mm")} (${timezone.label})`;
116
+ }
117
+ }
118
+ MicrosoftTeamsTimezone.UTC = {
119
+ timezone: "UTC",
120
+ label: "UTC",
121
+ };
122
+ export default MicrosoftTeamsTimezone;
123
+ //# sourceMappingURL=MicrosoftTeamsTimezone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MicrosoftTeamsTimezone.js","sourceRoot":"","sources":["../../../../../../Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /*
2
+ * The dashboard-facing calls behind an infrastructure resource's AI pages
3
+ * (AI → Insights and AI → AI agent) for every resource a resource AI agent
4
+ * serves — Common/Server/API/ResourceAiAccessAPI.ts. Everything else on
5
+ * those pages is ordinary CRUD on the resource model (the investigation
6
+ * switch, the remediation mode, the command allowlist).
7
+ *
8
+ * Every route is POST under /api and takes a ResourceAiAccessRequest body.
9
+ */
10
+ export const RESOURCE_AI_ACCESS_STATUS_PATH = "/resource-ai-access/status";
11
+ export const RESOURCE_AI_ACCESS_TEST_PATH = "/resource-ai-access/test";
12
+ export const RESOURCE_AI_ACCESS_RESET_AGENT_PATH = "/resource-ai-access/reset-agent";
13
+ export const RESOURCE_AI_ACCESS_INSIGHTS_PATH = "/resource-ai-access/insights";
14
+ /*
15
+ * POST /resource-ai-access/insights: what OneUptime AI investigated and
16
+ * changed on one resource, as summaries. Nothing here carries command
17
+ * output, a prompt or a command plan: the route is readable by everyone who
18
+ * may read the resource, a wider audience than the AI runs, suggestions and
19
+ * jobs it summarises. So an investigation whose incident or alert the
20
+ * caller cannot read is left out, a TL;DR is there only with a readable
21
+ * subject (or, for a run with none, for a caller who may read AIRun), and a
22
+ * fix's rationale only for a caller who may read that suggestion.
23
+ */
24
+ // How many investigations, and how many fixes, the route returns (newest).
25
+ export const RESOURCE_AI_INSIGHTS_LIMIT = 25;
26
+ // The window commandCounts covers.
27
+ export const RESOURCE_AI_INSIGHTS_COMMAND_WINDOW_IN_DAYS = 30;
28
+ // How much of a fix's rationale the route returns.
29
+ export const RESOURCE_AI_INSIGHTS_RATIONALE_MAX_LENGTH = 300;
30
+ //# sourceMappingURL=ResourceAiAccessApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceAiAccessApi.js","sourceRoot":"","sources":["../../../../Types/AI/ResourceAiAccessApi.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,8BAA8B,GACzC,4BAA4B,CAAC;AAC/B,MAAM,CAAC,MAAM,4BAA4B,GAAW,0BAA0B,CAAC;AAC/E,MAAM,CAAC,MAAM,mCAAmC,GAC9C,iCAAiC,CAAC;AACpC,MAAM,CAAC,MAAM,gCAAgC,GAC3C,8BAA8B,CAAC;AAsCjC;;;;;;;;;GASG;AAEH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,0BAA0B,GAAW,EAAE,CAAC;AAErD,mCAAmC;AACnC,MAAM,CAAC,MAAM,2CAA2C,GAAW,EAAE,CAAC;AAEtE,mDAAmD;AACnD,MAAM,CAAC,MAAM,yCAAyC,GAAW,GAAG,CAAC"}
@@ -0,0 +1,98 @@
1
+ import Permission, { PermissionHelper } from "../Permission";
2
+ import AiResourceType, { AI_RESOURCE_TYPE_INFO, } from "../ResourceAiAgent/AiResourceType";
3
+ import { ResourceAiRemediationMode } from "../ResourceAiAgent/ResourceAiAccess";
4
+ /*
5
+ * Who may change what OneUptime AI is allowed to do on an infrastructure
6
+ * resource reached through a resource AI agent (a Docker, Podman or Docker
7
+ * Swarm host, a Proxmox cluster, a VMware vCenter, a Ceph cluster, a
8
+ * database server or a host), and the words the server and the dashboard
9
+ * use for it.
10
+ *
11
+ * Kept apart from Types/ResourceAiAgent, which the resource AI agent carries
12
+ * a byte-identical copy of and which therefore stays free of the permission
13
+ * catalog.
14
+ */
15
+ /*
16
+ * Who may LOOSEN a resource's AI access: turn AI fixes on (any move up from
17
+ * Off, Ask for approval included) or give them more autonomy (Automatic,
18
+ * Bypass approval), add a command allowlist pattern, and reset the
19
+ * resource's AI agent. A resource's AI mode does the job of a FullAuto
20
+ * AutoRemediationRule without a rule row, so it takes the same set a
21
+ * Kubernetes cluster's AI access takes (KUBERNETES_AI_ACCESS_ADMIN_
22
+ * PERMISSIONS — a Common test pins the two together).
23
+ *
24
+ * Tightening (Off, moving down, removing allowlist patterns or clearing the
25
+ * list) and the investigation switch stay open to anyone who may edit the
26
+ * resource: making AI do less never needs more privilege than the resource
27
+ * itself.
28
+ */
29
+ export const RESOURCE_AI_ACCESS_ADMIN_PERMISSIONS = [
30
+ Permission.ProjectOwner,
31
+ Permission.ProjectAdmin,
32
+ Permission.EditAutoRemediationRule,
33
+ ];
34
+ /*
35
+ * How each resource type is named inside a sentence ("on this Docker host",
36
+ * "on this database server"). AI_RESOURCE_TYPE_INFO's displayName starts
37
+ * every name with a capital, which reads wrong mid-sentence for the two
38
+ * types whose name is a common noun.
39
+ */
40
+ const RESOURCE_SENTENCE_NAMES = {
41
+ [AiResourceType.DockerHost]: "Docker host",
42
+ [AiResourceType.PodmanHost]: "Podman host",
43
+ [AiResourceType.DockerSwarmCluster]: "Docker Swarm cluster",
44
+ [AiResourceType.ProxmoxCluster]: "Proxmox cluster",
45
+ [AiResourceType.VMwareVCenter]: "VMware vCenter",
46
+ [AiResourceType.CephCluster]: "Ceph cluster",
47
+ [AiResourceType.DatabaseServer]: "database server",
48
+ [AiResourceType.Host]: "host",
49
+ };
50
+ export function getResourceSentenceName(resourceType) {
51
+ return RESOURCE_SENTENCE_NAMES[resourceType] || "resource";
52
+ }
53
+ // The name of the resource type's AI agent, for sentences ("the Docker AI agent").
54
+ export function getResourceAgentName(resourceType) {
55
+ var _a;
56
+ return ((_a = AI_RESOURCE_TYPE_INFO[resourceType]) === null || _a === void 0 ? void 0 : _a.agentDisplayName) || "AI agent";
57
+ }
58
+ /*
59
+ * The AI agent page's short name for each remediation mode, used on the
60
+ * resource feed and in messages — the same words a Kubernetes cluster's
61
+ * page uses.
62
+ */
63
+ export const RESOURCE_AI_REMEDIATION_MODE_LABELS = {
64
+ [ResourceAiRemediationMode.Disabled]: "Off",
65
+ [ResourceAiRemediationMode.RequireApproval]: "Ask for approval",
66
+ [ResourceAiRemediationMode.Automatic]: "Automatic",
67
+ [ResourceAiRemediationMode.BypassApproval]: "Bypass approval",
68
+ };
69
+ /*
70
+ * One valid allowlist entry per resource type — a change that needs
71
+ * approval unless allowlisted — shown as the example in the refusal of a
72
+ * malformed allowlist and usable as the dashboard field's placeholder. A
73
+ * Common test checks each one against the resource command policy.
74
+ */
75
+ export const RESOURCE_AI_ALLOWLIST_EXAMPLES = {
76
+ [AiResourceType.DockerHost]: "docker stop web",
77
+ [AiResourceType.PodmanHost]: "docker stop web",
78
+ [AiResourceType.DockerSwarmCluster]: "docker service update --image nginx:1.27 web",
79
+ [AiResourceType.ProxmoxCluster]: "pvesh create /nodes/pve1/qemu/100/status/shutdown",
80
+ [AiResourceType.VMwareVCenter]: "govc vm.power -off web-01",
81
+ [AiResourceType.CephCluster]: "ceph osd out 3",
82
+ [AiResourceType.DatabaseServer]: "db terminate-session 12345",
83
+ [AiResourceType.Host]: "systemctl stop nginx",
84
+ };
85
+ /*
86
+ * The refusal for a caller who tried to make AI do more on a resource
87
+ * without one of RESOURCE_AI_ACCESS_ADMIN_PERMISSIONS: what needs them, who
88
+ * has them, and what stays open to every editor of the resource.
89
+ */
90
+ export function getResourceAiAccessAdminRefusal(resourceType) {
91
+ const name = getResourceSentenceName(resourceType);
92
+ return `You need one of these permissions to let OneUptime AI do more on a ${name} (turn AI fixes on or give them more autonomy, or add command allowlist patterns): ${PermissionHelper.getPermissionTitles(RESOURCE_AI_ACCESS_ADMIN_PERMISSIONS).join(", ")}. Anyone who may edit the ${name} can still turn AI fixes off or down to Ask for approval, and remove allowlist patterns.`;
93
+ }
94
+ // The refusal for a caller who may not reset the resource's AI agent.
95
+ export function getResourceAiAgentResetRefusal(resourceType) {
96
+ return `You need one of these permissions to reset this ${getResourceSentenceName(resourceType)}'s ${getResourceAgentName(resourceType)}: ${PermissionHelper.getPermissionTitles(RESOURCE_AI_ACCESS_ADMIN_PERMISSIONS).join(", ")}.`;
97
+ }
98
+ //# sourceMappingURL=ResourceAiAccessPermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceAiAccessPermissions.js","sourceRoot":"","sources":["../../../../Types/AI/ResourceAiAccessPermissions.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,EAAE,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,cAAc,EAAE,EACrB,qBAAqB,GACtB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAEhF;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAsB;IACrE,UAAU,CAAC,YAAY;IACvB,UAAU,CAAC,YAAY;IACvB,UAAU,CAAC,uBAAuB;CACnC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,uBAAuB,GAA6C;IACxE,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,aAAa;IAC1C,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,aAAa;IAC1C,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,sBAAsB;IAC3D,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,iBAAiB;IAClD,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,gBAAgB;IAChD,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,cAAc;IAC5C,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,iBAAiB;IAClD,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM;CAC9B,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,YAA4B;IAClE,OAAO,uBAAuB,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC;AAC7D,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,oBAAoB,CAAC,YAA4B;;IAC/D,OAAO,CAAA,MAAA,qBAAqB,CAAC,YAAY,CAAC,0CAAE,gBAAgB,KAAI,UAAU,CAAC;AAC7E,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAE5C;IACF,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAE,KAAK;IAC3C,CAAC,yBAAyB,CAAC,eAAe,CAAC,EAAE,kBAAkB;IAC/D,CAAC,yBAAyB,CAAC,SAAS,CAAC,EAAE,WAAW;IAClD,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,iBAAiB;CAC9D,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAEvC;IACF,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,iBAAiB;IAC9C,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,iBAAiB;IAC9C,CAAC,cAAc,CAAC,kBAAkB,CAAC,EACjC,8CAA8C;IAChD,CAAC,cAAc,CAAC,cAAc,CAAC,EAC7B,mDAAmD;IACrD,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,2BAA2B;IAC3D,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,gBAAgB;IAC9C,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,4BAA4B;IAC7D,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,sBAAsB;CAC9C,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,+BAA+B,CAC7C,YAA4B;IAE5B,MAAM,IAAI,GAAW,uBAAuB,CAAC,YAAY,CAAC,CAAC;IAE3D,OAAO,sEAAsE,IAAI,sFAAsF,gBAAgB,CAAC,mBAAmB,CACzM,oCAAoC,CACrC,CAAC,IAAI,CACJ,IAAI,CACL,6BAA6B,IAAI,0FAA0F,CAAC;AAC/H,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,8BAA8B,CAC5C,YAA4B;IAE5B,OAAO,mDAAmD,uBAAuB,CAC/E,YAAY,CACb,MAAM,oBAAoB,CAAC,YAAY,CAAC,KAAK,gBAAgB,CAAC,mBAAmB,CAChF,oCAAoC,CACrC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAClB,CAAC"}