@oneuptime/common 14.0.0 → 14.0.2

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 (1270) hide show
  1. package/Models/DatabaseModels/AlertEpisodeMember.ts +8 -1
  2. package/Models/DatabaseModels/AutoRemediationSuggestion.ts +63 -0
  3. package/Models/DatabaseModels/IncidentEpisodeMember.ts +8 -1
  4. package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +9 -2
  5. package/Models/DatabaseModels/IncidentPublicNote.ts +9 -2
  6. package/Models/DatabaseModels/Index.ts +4 -0
  7. package/Models/DatabaseModels/KubernetesCluster.ts +429 -0
  8. package/Models/DatabaseModels/Monitor.ts +48 -0
  9. package/Models/DatabaseModels/Runner.ts +5 -4
  10. package/Models/DatabaseModels/RunnerJob.ts +66 -0
  11. package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +10 -2
  12. package/Models/DatabaseModels/ServiceLevelObjectiveFeed.ts +2 -0
  13. package/Models/DatabaseModels/ServiceLevelObjectiveLabelRule.ts +522 -0
  14. package/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.ts +38 -4
  15. package/Models/DatabaseModels/ServiceLevelObjectiveOwnerRule.ts +603 -0
  16. package/Models/DatabaseModels/WorkflowVariable.ts +479 -2
  17. package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +79 -25
  18. package/Server/API/AIInvestigationAPI.ts +341 -0
  19. package/Server/API/AutoRemediationAPI.ts +184 -2
  20. package/Server/API/CommonAPI.ts +70 -0
  21. package/Server/API/KubernetesClusterAiAccessAPI.ts +793 -0
  22. package/Server/API/MicrosoftTeamsAPI.ts +770 -315
  23. package/Server/API/MonitorAPI.ts +140 -0
  24. package/Server/API/OnCallScheduleTimelineAPI.ts +5 -21
  25. package/Server/API/SlackAPI.ts +447 -99
  26. package/Server/API/StatusPageAPI.ts +146 -26
  27. package/Server/API/TelemetryAPI.ts +216 -5
  28. package/Server/API/UserTwoFactorBackupCodeAPI.ts +1 -0
  29. package/Server/API/WorkflowVariableAPI.ts +156 -0
  30. package/Server/Infrastructure/GlobalCache.ts +35 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/1794100000000-AddSloLabelAndOwnerRules.ts +248 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/1794200000000-AddSloMonitorRuleMonitorType.ts +19 -0
  33. package/Server/Infrastructure/Postgres/SchemaMigrations/1794300000000-AddOAuth2WorkflowVariables.ts +97 -0
  34. package/Server/Infrastructure/Postgres/SchemaMigrations/1794400000000-AddKubernetesClusterAiAccess.ts +129 -0
  35. package/Server/Infrastructure/Postgres/SchemaMigrations/1794500000000-AddIncomingEmailCustomAddressToMonitor.ts +25 -0
  36. package/Server/Infrastructure/Postgres/SchemaMigrations/1794600000000-AddAuthTokenExpiresAtToWorkspaceProjectAuthToken.ts +20 -0
  37. package/Server/Infrastructure/Postgres/SchemaMigrations/1794700000000-RemoveAppAccessTokenFromWorkspaceProjectAuthTokenMiscData.ts +38 -0
  38. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +14 -0
  39. package/Server/Middleware/MasterAdminAuthorization.ts +28 -0
  40. package/Server/Middleware/TelemetryIngest.ts +47 -2
  41. package/Server/Middleware/UserAuthorization.ts +56 -2
  42. package/Server/Services/AIAgentService.ts +1 -0
  43. package/Server/Services/AccessTokenService.ts +121 -48
  44. package/Server/Services/AlertEpisodeMemberService.ts +9 -0
  45. package/Server/Services/AlertEpisodeService.ts +14 -1
  46. package/Server/Services/AlertService.ts +134 -22
  47. package/Server/Services/AutoRemediationRuleEngineService.ts +968 -39
  48. package/Server/Services/AutoRemediationRuleService.ts +118 -0
  49. package/Server/Services/BillingService.ts +1 -0
  50. package/Server/Services/DatabaseService.ts +10 -0
  51. package/Server/Services/InboundEmail/Providers/SendGridInboundProvider.ts +16 -22
  52. package/Server/Services/IncidentEpisodeMemberService.ts +9 -0
  53. package/Server/Services/IncidentEpisodePublicNoteService.ts +66 -0
  54. package/Server/Services/IncidentEpisodeRoleMemberService.ts +27 -0
  55. package/Server/Services/IncidentEpisodeService.ts +14 -1
  56. package/Server/Services/IncidentGroupingEngineService.ts +11 -0
  57. package/Server/Services/IncidentMemberService.ts +21 -0
  58. package/Server/Services/IncidentPublicNoteService.ts +63 -0
  59. package/Server/Services/IncidentService.ts +120 -20
  60. package/Server/Services/IncidentStateTimelineService.ts +15 -0
  61. package/Server/Services/IncidentTemplateService.ts +83 -3
  62. package/Server/Services/Index.ts +4 -0
  63. package/Server/Services/KubernetesClusterAiAccessService.ts +1943 -0
  64. package/Server/Services/KubernetesClusterService.ts +1570 -1
  65. package/Server/Services/LogAggregationService.ts +14 -6
  66. package/Server/Services/MonitorService.ts +654 -54
  67. package/Server/Services/MonitorStatusTimelineService.ts +639 -2
  68. package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +2 -0
  69. package/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.ts +2 -0
  70. package/Server/Services/OnCallDutyPolicyEscalationRuleUserService.ts +2 -0
  71. package/Server/Services/OnCallDutyPolicyScheduleService.ts +3 -0
  72. package/Server/Services/OnCallNotificationAlertingService.ts +36 -12
  73. package/Server/Services/OnCallSetupReminderService.ts +1 -0
  74. package/Server/Services/ProbeService.ts +7 -1
  75. package/Server/Services/ProjectService.ts +11 -1
  76. package/Server/Services/RunbookCredentialService.ts +26 -1
  77. package/Server/Services/RunbookSecretService.ts +36 -0
  78. package/Server/Services/RunnerJobService.ts +941 -23
  79. package/Server/Services/RunnerService.ts +439 -6
  80. package/Server/Services/ScheduledMaintenancePublicNoteService.ts +66 -0
  81. package/Server/Services/ScheduledMaintenanceService.ts +124 -19
  82. package/Server/Services/ScheduledMaintenanceTemplateService.ts +82 -3
  83. package/Server/Services/ServiceLevelObjectiveLabelRuleEngineService.ts +385 -0
  84. package/Server/Services/ServiceLevelObjectiveLabelRuleService.ts +51 -0
  85. package/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.ts +92 -16
  86. package/Server/Services/ServiceLevelObjectiveMonitorRuleService.ts +36 -1
  87. package/Server/Services/ServiceLevelObjectiveOwnerRuleEngineService.ts +521 -0
  88. package/Server/Services/ServiceLevelObjectiveOwnerRuleService.ts +51 -0
  89. package/Server/Services/ServiceLevelObjectiveService.ts +42 -1
  90. package/Server/Services/StatusPagePrivateUserService.ts +1 -0
  91. package/Server/Services/StatusPageService.ts +301 -74
  92. package/Server/Services/StatusPageSubscriberService.ts +4 -0
  93. package/Server/Services/TeamMemberService.ts +309 -7
  94. package/Server/Services/TraceAggregationService.ts +10 -6
  95. package/Server/Services/UserEmailService.ts +1 -0
  96. package/Server/Services/UserNotificationMethodAdminService.ts +1 -0
  97. package/Server/Services/UserNotificationRuleAdminService.ts +1 -0
  98. package/Server/Services/UserNotificationRuleService.ts +4 -0
  99. package/Server/Services/UserService.ts +122 -1
  100. package/Server/Services/WorkflowVariableService.ts +593 -8
  101. package/Server/Services/WorkspaceNotificationRuleService.ts +588 -8
  102. package/Server/Services/WorkspaceProjectAuthTokenService.ts +170 -1
  103. package/Server/Types/Database/QueryHelper.ts +22 -0
  104. package/Server/Types/Markdown.ts +502 -27
  105. package/Server/Types/Workflow/Components/Telegram/SendMessageToChat.ts +27 -1
  106. package/Server/Utils/AI/ClusterAccess/ClusterAccessContext.ts +182 -0
  107. package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +525 -0
  108. package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +854 -0
  109. package/Server/Utils/AI/CodeFix/CodeFixAgentAuth.ts +22 -2
  110. package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +1916 -307
  111. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +1601 -74
  112. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +139 -7
  113. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +58 -1
  114. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +54 -1
  115. package/Server/Utils/AI/Toolbox/AIActionTools.ts +14 -6
  116. package/Server/Utils/AI/Toolbox/ResourceTools.ts +4 -2
  117. package/Server/Utils/AI/Toolbox/SloTools.ts +1 -0
  118. package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +1341 -150
  119. package/Server/Utils/AutoRemediation/RemediationVerifier.ts +375 -4
  120. package/Server/Utils/Database/AffectedResourceRelations.ts +127 -0
  121. package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +240 -1
  122. package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +1 -0
  123. package/Server/Utils/Monitor/AffectedResourceList.ts +31 -73
  124. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +1 -1
  125. package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +1 -1
  126. package/Server/Utils/Monitor/MonitorAlert.ts +83 -9
  127. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +181 -136
  128. package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +5 -1
  129. package/Server/Utils/Monitor/MonitorIncident.ts +104 -9
  130. package/Server/Utils/Monitor/MonitorPayloadRedaction.ts +124 -7
  131. package/Server/Utils/Monitor/ProbeMonitorsNotification.ts +407 -0
  132. package/Server/Utils/Monitor/RootCauseList.ts +139 -0
  133. package/Server/Utils/OnCall/OnCallShiftReminderRunner.ts +1 -0
  134. package/Server/Utils/PushNotificationUtil.ts +45 -0
  135. package/Server/Utils/Rules/OwnerRuleAssignment.ts +40 -3
  136. package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +28 -0
  137. package/Server/Utils/Runbook/RunbookExecutePermission.ts +56 -6
  138. package/Server/Utils/SessionReplay/SessionReplayReadService.ts +223 -33
  139. package/Server/Utils/SessionReplay/SessionReplayUserFlowReadService.ts +559 -0
  140. package/Server/Utils/Slo/SloRulePatternValidator.ts +42 -0
  141. package/Server/Utils/StartServer.ts +4 -3
  142. package/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.ts +528 -0
  143. package/Server/Utils/TwoFactorBackupCodeNotification.ts +1 -0
  144. package/Server/Utils/UserPermission/UserPermission.ts +16 -0
  145. package/Server/Utils/Workflow/OAuth2TokenClient.ts +704 -0
  146. package/Server/Utils/Workflow/WorkflowVariableOAuthToken.ts +318 -0
  147. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +47 -7
  148. package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +57 -16
  149. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +193 -214
  150. package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +57 -13
  151. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.ts +54 -17
  152. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +179 -161
  153. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +281 -167
  154. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsServiceUrl.ts +114 -0
  155. package/Server/Utils/Workspace/MicrosoftTeams/ReactionNoteSync.ts +895 -0
  156. package/Server/Utils/Workspace/Slack/Actions/ActionTypes.ts +7 -9
  157. package/Server/Utils/Workspace/Slack/Actions/Alert.ts +96 -227
  158. package/Server/Utils/Workspace/Slack/Actions/AlertEpisode.ts +93 -214
  159. package/Server/Utils/Workspace/Slack/Actions/Auth.ts +30 -3
  160. package/Server/Utils/Workspace/Slack/Actions/Authorization.ts +99 -0
  161. package/Server/Utils/Workspace/Slack/Actions/Incident.ts +117 -283
  162. package/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.ts +101 -196
  163. package/Server/Utils/Workspace/Slack/Actions/ReactionNote.ts +329 -0
  164. package/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.ts +111 -287
  165. package/Server/Utils/Workspace/Slack/Slack.ts +86 -17
  166. package/Server/Utils/Workspace/Slack/app-manifest.json +2 -0
  167. package/Server/Utils/Workspace/Workspace.ts +171 -54
  168. package/Server/Utils/Workspace/WorkspaceActionAuthorization.ts +252 -0
  169. package/Server/Utils/Workspace/WorkspaceBase.ts +39 -0
  170. package/Server/Utils/Workspace/WorkspaceOAuthState.ts +280 -0
  171. package/Server/Utils/Workspace/WorkspaceProjectReferenceValidator.ts +96 -0
  172. package/Server/Utils/Workspace/WorkspaceReactionNote.ts +620 -0
  173. package/Tests/App/Dashboard/AttributesJSONDashboardSurfaces.test.tsx +496 -0
  174. package/Tests/App/Dashboard/AutoRemediationRulesTableCommandRunners.test.tsx +152 -0
  175. package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +32 -0
  176. package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +794 -0
  177. package/Tests/App/Dashboard/CreateOAuthWorkflowVariableModal.test.tsx +840 -0
  178. package/Tests/App/Dashboard/CreateWorkflowModal.test.tsx +653 -0
  179. package/Tests/App/Dashboard/DatabaseMonitorStepForm.test.tsx +197 -0
  180. package/Tests/App/Dashboard/DatabaseMonitorView.test.tsx +376 -0
  181. package/Tests/App/Dashboard/DisabledWarningRobustness.test.tsx +262 -0
  182. package/Tests/App/Dashboard/EventNotes.test.tsx +2080 -0
  183. package/Tests/App/Dashboard/EventNotesPages.test.tsx +486 -0
  184. package/Tests/App/Dashboard/EventNotesUtil.test.ts +933 -0
  185. package/Tests/App/Dashboard/ExceptionMonitorEnvironmentFilter.test.tsx +218 -0
  186. package/Tests/App/Dashboard/FeedFilterSortIntegration.test.tsx +1632 -0
  187. package/Tests/App/Dashboard/FeedOptionsLocales.test.ts +250 -0
  188. package/Tests/App/Dashboard/FeedOrdering.test.ts +279 -9
  189. package/Tests/App/Dashboard/IncidentChangeStateNotifyDefault.test.tsx +665 -0
  190. package/Tests/App/Dashboard/IncidentEpisodeFeedPublicNoteNotifyDefault.test.tsx +494 -0
  191. package/Tests/App/Dashboard/IncidentEpisodeOverviewNotifyDefault.test.tsx +706 -0
  192. package/Tests/App/Dashboard/IncidentFeedPublicNoteNotifyDefault.test.tsx +472 -0
  193. package/Tests/App/Dashboard/IncidentOverviewNotifyDefault.test.tsx +858 -0
  194. package/Tests/App/Dashboard/IncomingEmailAddressSettings.test.tsx +567 -0
  195. package/Tests/App/Dashboard/InvestigationClusterToolFormat.test.ts +241 -0
  196. package/Tests/App/Dashboard/InvestigationEvidenceKubectl.test.tsx +322 -0
  197. package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +60 -1
  198. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +606 -3
  199. package/Tests/App/Dashboard/InvestigationPanelClusterAccess.test.tsx +476 -0
  200. package/Tests/App/Dashboard/InvestigationRunDetailsKubectl.test.tsx +383 -0
  201. package/Tests/App/Dashboard/KubectlActivitySummary.test.tsx +366 -0
  202. package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +2886 -0
  203. package/Tests/App/Dashboard/KubernetesClusterAiPage.test.tsx +2688 -0
  204. package/Tests/App/Dashboard/KubernetesClusterAiPageServerParity.test.ts +915 -0
  205. package/Tests/App/Dashboard/LayerDateTimeFieldTimezoneName.test.tsx +66 -0
  206. package/Tests/App/Dashboard/LogMonitorPreview.test.tsx +174 -0
  207. package/Tests/App/Dashboard/MonitorFeedRefresh.test.tsx +279 -0
  208. package/Tests/App/Dashboard/MonitorMetricQueryConfig.test.ts +244 -0
  209. package/Tests/App/Dashboard/MonitorOpenWorkCard.test.tsx +381 -0
  210. package/Tests/App/Dashboard/MonitorOpenWorkHook.test.tsx +784 -0
  211. package/Tests/App/Dashboard/MonitorOverviewData.test.tsx +2199 -0
  212. package/Tests/App/Dashboard/MonitorOverviewHero.test.tsx +1169 -0
  213. package/Tests/App/Dashboard/MonitorOverviewInput.test.ts +1127 -0
  214. package/Tests/App/Dashboard/MonitorOverviewPage.test.tsx +2136 -0
  215. package/Tests/App/Dashboard/MonitorOverviewSelectReadable.test.ts +368 -0
  216. package/Tests/App/Dashboard/MonitorOverviewStatBar.test.tsx +526 -0
  217. package/Tests/App/Dashboard/MonitorOverviewSupportingCards.test.tsx +542 -0
  218. package/Tests/App/Dashboard/MonitorOwnersCombine.test.ts +299 -0
  219. package/Tests/App/Dashboard/MonitorProbesCard.test.tsx +602 -0
  220. package/Tests/App/Dashboard/MonitorResponseTimeCard.test.tsx +386 -0
  221. package/Tests/App/Dashboard/MonitorSetupAndConnectionCards.test.tsx +612 -0
  222. package/Tests/App/Dashboard/MonitorStatusChangesCard.test.tsx +257 -0
  223. package/Tests/App/Dashboard/MonitorSummaryTestMonitorButton.test.tsx +360 -1
  224. package/Tests/App/Dashboard/MonitorUptimeHistoryCard.test.tsx +835 -0
  225. package/Tests/App/Dashboard/MonitorUptimeSummaryHook.test.tsx +971 -0
  226. package/Tests/App/Dashboard/MonitorViewLayout.test.tsx +580 -0
  227. package/Tests/App/Dashboard/OnCallLayerRestrictionTimesPreserved.test.tsx +441 -0
  228. package/Tests/App/Dashboard/OnCallNavbar.test.tsx +214 -0
  229. package/Tests/App/Dashboard/OnCallSchedulePreviewCalendarDisplay.test.tsx +1389 -0
  230. package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +205 -1
  231. package/Tests/App/Dashboard/OnCallScheduleTimeInputsSettingsZone.test.tsx +198 -0
  232. package/Tests/App/Dashboard/ProductOrientation.test.tsx +646 -0
  233. package/Tests/App/Dashboard/PublicNotePagesNotifyDefault.test.tsx +524 -0
  234. package/Tests/App/Dashboard/RemediationSuggestionCardApproval.test.tsx +702 -0
  235. package/Tests/App/Dashboard/RemoveUserFromProject.test.tsx +427 -0
  236. package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +4 -0
  237. package/Tests/App/Dashboard/ResourceFeed.test.tsx +612 -2
  238. package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +30 -0
  239. package/Tests/App/Dashboard/ResourceFeedPagesFilterSort.test.tsx +1202 -0
  240. package/Tests/App/Dashboard/RumSessionReplaySideMenu.test.tsx +3 -1
  241. package/Tests/App/Dashboard/RunbookStepTypeMaps.test.ts +166 -0
  242. package/Tests/App/Dashboard/RunnerKubernetesAgentForm.test.tsx +622 -0
  243. package/Tests/App/Dashboard/ScheduledMaintenanceChangeStateNotifyDefault.test.tsx +1491 -0
  244. package/Tests/App/Dashboard/ScheduledMaintenanceFeedPublicNoteNotifyDefault.test.tsx +489 -0
  245. package/Tests/App/Dashboard/ScheduledMaintenanceFeedRefresh.test.tsx +52 -1
  246. package/Tests/App/Dashboard/ScheduledMaintenanceOverviewNotifyDefault.test.tsx +909 -0
  247. package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +14 -0
  248. package/Tests/App/Dashboard/ScheduledMaintenanceWindowStatsTranslation.test.tsx +307 -0
  249. package/Tests/App/Dashboard/SecurityEventAttributeColumnPicker.test.tsx +542 -0
  250. package/Tests/App/Dashboard/SecurityEventConnectionFormModal.test.tsx +174 -0
  251. package/Tests/App/Dashboard/SecurityEventConnectionsEmptyState.test.tsx +973 -212
  252. package/Tests/App/Dashboard/SecurityEventConnectionsTable.test.tsx +491 -52
  253. package/Tests/App/Dashboard/SecurityEventDetailPanel.test.tsx +301 -0
  254. package/Tests/App/Dashboard/SecurityEventListRow.test.tsx +158 -1
  255. package/Tests/App/Dashboard/SecurityEventProviderTile.test.tsx +869 -0
  256. package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +959 -94
  257. package/Tests/App/Dashboard/SecurityEventsNoResults.test.tsx +2 -0
  258. package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +274 -1
  259. package/Tests/App/Dashboard/SloFeed.test.tsx +106 -1
  260. package/Tests/App/Dashboard/SloMonitorRuleCriteria.test.tsx +566 -0
  261. package/Tests/App/Dashboard/SloNavigationWiring.test.tsx +6 -4
  262. package/Tests/App/Dashboard/SloNoticeBanner.test.tsx +186 -0
  263. package/Tests/App/Dashboard/SloOverviewKpiStrip.test.tsx +388 -44
  264. package/Tests/App/Dashboard/SloOverviewLayout.test.tsx +613 -0
  265. package/Tests/App/Dashboard/TeamMembershipRemoval.test.ts +900 -0
  266. package/Tests/App/Dashboard/TeamMembershipRemovalPages.test.tsx +460 -0
  267. package/Tests/App/Dashboard/TimezoneElements.test.tsx +321 -0
  268. package/Tests/App/Dashboard/TimezoneSelectButton.test.tsx +634 -0
  269. package/Tests/App/Dashboard/TraceExplorer.test.tsx +260 -0
  270. package/Tests/App/Dashboard/TraceMonitorPreview.test.tsx +182 -0
  271. package/Tests/App/Dashboard/UserTimezoneInit.test.tsx +544 -0
  272. package/Tests/App/Dashboard/WorkflowVariableModals.test.tsx +1630 -0
  273. package/Tests/App/Dashboard/WorkflowVariableRoutes.test.tsx +603 -0
  274. package/Tests/App/Dashboard/WorkflowVariableTokenStatus.test.tsx +589 -0
  275. package/Tests/App/Dashboard/WorkflowVariableUtil.test.ts +1543 -0
  276. package/Tests/App/Dashboard/WorkflowVariableView.test.tsx +3227 -0
  277. package/Tests/App/Dashboard/WorkflowVariablesTable.test.tsx +1277 -395
  278. package/Tests/App/StatusPage/StatusPageOverviewMonitorGroupUptime.test.tsx +714 -0
  279. package/Tests/App/StatusPage/StatusPageOverviewUptimeBars.NewYork.test.tsx +1009 -0
  280. package/Tests/App/StatusPage/StatusPageOverviewUptimeBars.test.tsx +1092 -0
  281. package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +5 -0
  282. package/Tests/Models/DatabaseModels/KubernetesClusterAiAccessColumns.test.ts +520 -0
  283. package/Tests/Models/DatabaseModels/MonitorSecretKeyColumnAccessControl.test.ts +66 -2
  284. package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +0 -8
  285. package/Tests/Models/DatabaseModels/SloLabelAndOwnerRuleModels.test.ts +404 -0
  286. package/Tests/Models/DatabaseModels/SloOverhaulModels.test.ts +17 -1
  287. package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +4 -2
  288. package/Tests/Models/DatabaseModels/WorkspaceProjectAuthTokenAccessControl.test.ts +236 -0
  289. package/Tests/Models/IncidentEpisodePublicNoteNotifyColumnContract.test.ts +103 -0
  290. package/Tests/Models/IncidentPublicNoteNotifyColumnContract.test.ts +96 -0
  291. package/Tests/Models/ScheduledMaintenancePublicNoteNotifyColumnContract.test.ts +111 -0
  292. package/Tests/Server/API/AIInvestigationAPI.test.ts +976 -0
  293. package/Tests/Server/API/AutoRemediationApproveKubectlRecheck.test.ts +836 -0
  294. package/Tests/Server/API/CommonAPIAssertCanCreateTable.test.ts +565 -0
  295. package/Tests/Server/API/CommonAPIAssertCanReadTable.test.ts +282 -0
  296. package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +1744 -0
  297. package/Tests/Server/API/LogHistogramAPI.test.ts +371 -0
  298. package/Tests/Server/API/MicrosoftTeamsLegacyWebhookRemoval.test.ts +125 -30
  299. package/Tests/Server/API/MicrosoftTeamsOAuthState.test.ts +1121 -0
  300. package/Tests/Server/API/MonitorUptimeSummaryAPI.test.ts +685 -0
  301. package/Tests/Server/API/SessionReplayAPI.test.ts +602 -1
  302. package/Tests/Server/API/SlackChannelCacheAPI.test.ts +358 -0
  303. package/Tests/Server/API/SlackOAuthState.test.ts +688 -0
  304. package/Tests/Server/API/StatusPageOverviewMonitorGroupUptime.test.ts +527 -0
  305. package/Tests/Server/API/StatusPageTestEmailReportAuth.test.ts +2 -0
  306. package/Tests/Server/API/StatusPageUptimeAPI.test.ts +427 -0
  307. package/Tests/Server/API/UserProjectsAPI.test.ts +4 -0
  308. package/Tests/Server/API/WorkflowVariableAPI.test.ts +404 -0
  309. package/Tests/Server/API/WorkspaceOAuthTestHelpers.ts +289 -0
  310. package/Tests/Server/API/WorkspaceSendTestNotificationRoutes.test.ts +2064 -0
  311. package/Tests/Server/Infrastructure/GlobalCache.test.ts +86 -0
  312. package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +3 -0
  313. package/Tests/Server/Infrastructure/Postgres/AddKubernetesClusterAiAccessMigration.test.ts +589 -0
  314. package/Tests/Server/Infrastructure/Postgres/AddOAuth2WorkflowVariablesMigration.test.ts +254 -0
  315. package/Tests/Server/Infrastructure/Postgres/AddSloLabelAndOwnerRulesMigration.test.ts +407 -0
  316. package/Tests/Server/Infrastructure/Postgres/AddSloMonitorRuleMonitorTypeMigration.test.ts +171 -0
  317. package/Tests/Server/Infrastructure/Postgres/SloProductOverhaulMigration.test.ts +88 -4
  318. package/Tests/Server/Middleware/BlockedUserMiddleware.test.ts +403 -0
  319. package/Tests/Server/Middleware/MasterAdminAuthorization.test.ts +13 -0
  320. package/Tests/Server/Middleware/PublicRouteUserMiddleware.test.ts +2 -0
  321. package/Tests/Server/Middleware/RemovedProjectMemberAuthorization.test.ts +469 -0
  322. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +77 -1
  323. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +211 -0
  324. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +358 -0
  325. package/Tests/Server/Middleware/UserAuthorization.test.ts +97 -0
  326. package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +2 -0
  327. package/Tests/Server/Services/AccessTokenProjectUserGrant.test.ts +14 -2
  328. package/Tests/Server/Services/AccessTokenRemovedMemberAccess.test.ts +1044 -0
  329. package/Tests/Server/Services/AddOwnersIdempotency.test.ts +5 -0
  330. package/Tests/Server/Services/AlertEpisodeMemberCreatePermission.test.ts +139 -0
  331. package/Tests/Server/Services/AutoRemediationClusterRuleEngine.test.ts +1361 -0
  332. package/Tests/Server/Services/AutoRemediationRuleCommandRunners.test.ts +375 -0
  333. package/Tests/Server/Services/CrossProjectRelationWriteGuard.test.ts +2384 -0
  334. package/Tests/Server/Services/DatabaseServiceRuleCriteriaValidation.test.ts +104 -0
  335. package/Tests/Server/Services/FindOwnersProjectMembership.test.ts +267 -0
  336. package/Tests/Server/Services/InboundEmail/SendGridInboundProviderAddress.test.ts +90 -0
  337. package/Tests/Server/Services/IncidentEpisodeMemberCreatePermission.test.ts +143 -0
  338. package/Tests/Server/Services/IncidentEpisodePublicNoteNotifyDefault.test.ts +805 -0
  339. package/Tests/Server/Services/IncidentPublicNoteNotifyDefault.test.ts +724 -0
  340. package/Tests/Server/Services/IncidentRoleProjectMembership.test.ts +233 -0
  341. package/Tests/Server/Services/KubernetesClusterAiAccessAgentRunnerAssignments.test.ts +372 -0
  342. package/Tests/Server/Services/KubernetesClusterAiAccessBindingGuard.test.ts +1876 -0
  343. package/Tests/Server/Services/KubernetesClusterAiAccessDeletedRunnerRemedy.test.ts +620 -0
  344. package/Tests/Server/Services/KubernetesClusterAiAccessGapNextSteps.test.ts +421 -0
  345. package/Tests/Server/Services/KubernetesClusterAiAccessService.test.ts +3662 -0
  346. package/Tests/Server/Services/KubernetesClusterAiAccessSubjectClusters.test.ts +405 -0
  347. package/Tests/Server/Services/KubernetesClusterAiSettingsPermission.test.ts +975 -0
  348. package/Tests/Server/Services/KubernetesClusterServiceAiAccessFeed.test.ts +497 -0
  349. package/Tests/Server/Services/KubernetesClusterServiceDeleteSettlesRemediation.test.ts +328 -0
  350. package/Tests/Server/Services/LogAggregationService.test.ts +99 -0
  351. package/Tests/Server/Services/MonitorServiceIncomingEmailCustomAddress.test.ts +447 -0
  352. package/Tests/Server/Services/MonitorServiceProbeFlagSync.test.ts +1334 -0
  353. package/Tests/Server/Services/MonitorServiceProbeStatusGrouping.test.ts +1640 -0
  354. package/Tests/Server/Services/MonitorServiceRefreshCurrentStatus.test.ts +225 -0
  355. package/Tests/Server/Services/MonitorStatusBridgeProbePath.test.ts +8 -8
  356. package/Tests/Server/Services/MonitorStatusTimelineDailyAggregates.test.ts +264 -1
  357. package/Tests/Server/Services/MonitorStatusTimelineMergedDowntime.test.ts +284 -0
  358. package/Tests/Server/Services/MonitorUptimeSummaryService.test.ts +1043 -0
  359. package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +5 -0
  360. package/Tests/Server/Services/OnCallUndeliverablePageOwnerMembership.test.ts +359 -0
  361. package/Tests/Server/Services/ProbeServiceDashboardLink.test.ts +191 -0
  362. package/Tests/Server/Services/ProjectOwnersProjectMembership.test.ts +221 -0
  363. package/Tests/Server/Services/RuleRun/IncidentAlertMaintenanceRuleEnginesRun.test.ts +5 -0
  364. package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +48 -1
  365. package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupARun.test.ts +28 -0
  366. package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +39 -1
  367. package/Tests/Server/Services/RunnerJobEnqueueAiCommandAgentRunner.test.ts +230 -0
  368. package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +978 -0
  369. package/Tests/Server/Services/RunnerJobKubectlWriteScope.test.ts +866 -0
  370. package/Tests/Server/Services/RunnerJobSubmitResultRedaction.test.ts +322 -0
  371. package/Tests/Server/Services/RunnerJobSubmitResultUnstorableText.test.ts +357 -0
  372. package/Tests/Server/Services/RunnerJobTimeoutReason.test.ts +227 -0
  373. package/Tests/Server/Services/RunnerServiceAgentName.test.ts +581 -0
  374. package/Tests/Server/Services/ScheduledMaintenancePublicNoteNotifyDefault.test.ts +802 -0
  375. package/Tests/Server/Services/ScheduledMaintenanceSubscriberTemplateFormats.test.ts +53 -0
  376. package/Tests/Server/Services/ServiceLevelObjectiveLabelAndOwnerRuleEngines.test.ts +1175 -0
  377. package/Tests/Server/Services/ServiceLevelObjectiveLabelAndOwnerRuleServices.test.ts +172 -0
  378. package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.test.ts +323 -0
  379. package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleService.test.ts +115 -0
  380. package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleTriggers.test.ts +21 -2
  381. package/Tests/Server/Services/ServiceLevelObjectiveMonitorTypePostgres.test.ts +480 -0
  382. package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +174 -0
  383. package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +45 -6
  384. package/Tests/Server/Services/StatusPageSubscriberReport.test.ts +1176 -1
  385. package/Tests/Server/Services/TeamMemberBillingSeatSync.test.ts +9 -0
  386. package/Tests/Server/Services/TeamMemberOnCallCleanup.test.ts +18 -0
  387. package/Tests/Server/Services/TeamMemberProjectMembership.test.ts +255 -0
  388. package/Tests/Server/Services/TeamMemberRemovalRevokesProjectAccess.test.ts +600 -0
  389. package/Tests/Server/Services/TeamMemberResourceCleanup.test.ts +731 -0
  390. package/Tests/Server/Services/TeamMemberWorkspaceAccountCleanup.test.ts +164 -0
  391. package/Tests/Server/Services/TraceAggregationService.test.ts +64 -0
  392. package/Tests/Server/Services/UserServiceBlockedUser.test.ts +293 -0
  393. package/Tests/Server/Services/WorkflowVariableOAuthHooks.test.ts +1016 -0
  394. package/Tests/Server/Services/WorkflowVariableOAuthPostgres.test.ts +543 -0
  395. package/Tests/Server/Services/WorkflowVariableRenameUniqueness.test.ts +16 -5
  396. package/Tests/Server/Services/WorkspaceNotificationRuleNoteDelivery.test.ts +473 -0
  397. package/Tests/Server/Services/WorkspaceNotificationRuleSendTestNotification.test.ts +3690 -0
  398. package/Tests/Server/Services/WorkspaceProjectAuthTokenMiscDataSecrets.test.ts +374 -0
  399. package/Tests/Server/Services/WorkspaceProjectAuthTokenSlackChannelCache.test.ts +143 -0
  400. package/Tests/Server/Types/Database/FeedEventTypeFilterQuery.test.ts +745 -0
  401. package/Tests/Server/Types/Database/Permissions/WorkflowVariableOAuthColumnPermission.test.ts +250 -0
  402. package/Tests/Server/Types/Database/QueryHelperJsonContains.test.ts +96 -0
  403. package/Tests/Server/Types/Markdown.test.ts +1035 -1
  404. package/Tests/Server/Types/Workflow/Components/ApiComponentSsrf.test.ts +49 -0
  405. package/Tests/Server/Types/Workflow/Components/TelegramSendMessageToChat.test.ts +331 -0
  406. package/Tests/Server/Utils/AI/ClusterAccessContext.test.ts +285 -0
  407. package/Tests/Server/Utils/AI/CodeFix/CodeFixAgentAuth.test.ts +159 -1
  408. package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +752 -0
  409. package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +1840 -0
  410. package/Tests/Server/Utils/AI/KubectlJobRunner.test.ts +1067 -0
  411. package/Tests/Server/Utils/AI/KubectlJobRunnerFinishedJob.test.ts +355 -0
  412. package/Tests/Server/Utils/AI/PostIncidentStatusUpdateTool.test.ts +496 -0
  413. package/Tests/Server/Utils/AI/RemediationCommandTools.test.ts +305 -0
  414. package/Tests/Server/Utils/AI/RemediationCommandToolsKubectl.test.ts +1365 -0
  415. package/Tests/Server/Utils/AI/RemediationCommandToolsKubectlOutcome.test.ts +639 -0
  416. package/Tests/Server/Utils/AI/RemediationCommandToolsLiveCluster.test.ts +1585 -0
  417. package/Tests/Server/Utils/AI/RemediationCommandToolsRunnerScope.test.ts +1065 -0
  418. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +2138 -1
  419. package/Tests/Server/Utils/AI/RemediationExecutionRunnerClusterMode.test.ts +1035 -0
  420. package/Tests/Server/Utils/AI/RemediationKubectlCopyParity.test.ts +517 -0
  421. package/Tests/Server/Utils/AI/ResourceTools.test.ts +27 -1
  422. package/Tests/Server/Utils/AI/SloTools.test.ts +10 -0
  423. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutor.test.ts +1371 -24
  424. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorRollbackRace.test.ts +962 -0
  425. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorUnknownRun.test.ts +518 -0
  426. package/Tests/Server/Utils/AutoRemediation/CommandPlanVerification.test.ts +939 -2
  427. package/Tests/Server/Utils/Database/ProjectScopedRelationReferences.test.ts +371 -0
  428. package/Tests/Server/Utils/Monitor/AffectedResourceList.test.ts +64 -0
  429. package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaAnomalyUnits.test.ts +1 -1
  430. package/Tests/Server/Utils/Monitor/DatabaseMetricObservationRemediation.test.ts +102 -0
  431. package/Tests/Server/Utils/Monitor/MonitorAlertCriteriaReferences.test.ts +362 -0
  432. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +405 -0
  433. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorBreachingSamples.test.ts +1156 -0
  434. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorMetricUnits.test.ts +106 -80
  435. package/Tests/Server/Utils/Monitor/MonitorEmailAddressRedaction.test.ts +255 -0
  436. package/Tests/Server/Utils/Monitor/MonitorIncidentCriteriaReferences.test.ts +347 -0
  437. package/Tests/Server/Utils/Monitor/MonitorIncidentMemberRoleMembership.test.ts +203 -0
  438. package/Tests/Server/Utils/Monitor/ProbeMonitorsNotification.test.ts +1147 -0
  439. package/Tests/Server/Utils/Monitor/RootCauseList.test.ts +252 -0
  440. package/Tests/Server/Utils/PushNotificationUtilCreators.test.ts +79 -0
  441. package/Tests/Server/Utils/ResourceFeed/ResourceFeedUtil.test.ts +21 -1
  442. package/Tests/Server/Utils/Rules/OwnerRuleAssignment.test.ts +155 -1
  443. package/Tests/Server/Utils/Rules/RuleRun/RuleRunPermission.test.ts +154 -0
  444. package/Tests/Server/Utils/SSRFProtection.test.ts +111 -0
  445. package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +288 -0
  446. package/Tests/Server/Utils/SessionReplay/SessionReplayUserFlowReadService.test.ts +304 -0
  447. package/Tests/Server/Utils/Slo/SloRulePatternValidator.test.ts +67 -0
  448. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +40 -3
  449. package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +213 -0
  450. package/Tests/Server/Utils/Workflow/OAuth2TokenClient.test.ts +702 -0
  451. package/Tests/Server/Utils/Workflow/OAuth2TokenClientHttpIntegration.test.ts +507 -0
  452. package/Tests/Server/Utils/Workflow/WorkflowVariableOAuthToken.test.ts +831 -0
  453. package/Tests/Server/Utils/Workspace/MicrosoftTeamsActionAuthorization.test.ts +63 -1
  454. package/Tests/Server/Utils/Workspace/MicrosoftTeamsAppAccessToken.test.ts +256 -0
  455. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +60 -0
  456. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChatActionAuthorization.test.ts +442 -0
  457. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChats.test.ts +44 -2
  458. package/Tests/Server/Utils/Workspace/MicrosoftTeamsDirectMessage.test.ts +55 -0
  459. package/Tests/Server/Utils/Workspace/MicrosoftTeamsReactionNoteSync.test.ts +1522 -0
  460. package/Tests/Server/Utils/Workspace/MicrosoftTeamsServiceUrl.test.ts +130 -0
  461. package/Tests/Server/Utils/Workspace/MicrosoftTeamsTeamInstalls.test.ts +4 -4
  462. package/Tests/Server/Utils/Workspace/Slack/SlackActionAuthorization.test.ts +691 -0
  463. package/Tests/Server/Utils/Workspace/Slack/SlackMessageByTimestamp.test.ts +253 -0
  464. package/Tests/Server/Utils/Workspace/Slack/SlackReactionNote.test.ts +574 -0
  465. package/Tests/Server/Utils/Workspace/WorkspaceActionAuthorization.test.ts +488 -0
  466. package/Tests/Server/Utils/Workspace/WorkspaceCreateProjectReferences.test.ts +861 -0
  467. package/Tests/Server/Utils/Workspace/WorkspaceMessageAuthor.test.ts +635 -0
  468. package/Tests/Server/Utils/Workspace/WorkspaceOAuthState.test.ts +548 -0
  469. package/Tests/Server/Utils/Workspace/WorkspaceReactionNote.test.ts +839 -0
  470. package/Tests/Server/Utils/Workspace/WorkspaceSendErrorMessage.test.ts +725 -0
  471. package/Tests/Types/API/Route.test.ts +56 -0
  472. package/Tests/Types/API/URLSchemeLikePath.test.ts +304 -0
  473. package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +283 -9
  474. package/Tests/Types/DateBrowserLocalWallClock.test.ts +280 -0
  475. package/Tests/Types/DateLocalShortMonthNameFallback.test.ts +389 -0
  476. package/Tests/Types/DateUserTimezone.test.ts +177 -4
  477. package/Tests/Types/Kubernetes/KubernetesAgentChartAiAccess.test.ts +306 -0
  478. package/Tests/Types/Kubernetes/KubernetesClusterAiAccess.test.ts +283 -0
  479. package/Tests/Types/Kubernetes/KubernetesRunnerPostureWriteScope.test.ts +68 -0
  480. package/Tests/Types/Monitor/DatabaseMonitor/SqlServerPlatform.test.ts +144 -0
  481. package/Tests/Types/Monitor/MonitorStepExceptionMonitor.test.ts +160 -0
  482. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +53 -0
  483. package/Tests/Types/Runbook/RunbookStepType.test.ts +91 -16
  484. package/Tests/Types/Runner/RunnerLiveStatus.test.ts +14 -3
  485. package/Tests/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.test.ts +15 -0
  486. package/Tests/Types/StatusPage/PublicNoteSubscriberNotificationDefault.test.ts +1868 -0
  487. package/Tests/Types/Timezone.test.ts +5 -0
  488. package/Tests/Types/TimezoneAlias.test.ts +1034 -0
  489. package/Tests/Types/Workflow/JiraTemplateFixtures.ts +833 -0
  490. package/Tests/Types/Workflow/JiraTemplateScripts.test.ts +5414 -0
  491. package/Tests/Types/Workflow/JiraTemplateSimulation.test.ts +4803 -0
  492. package/Tests/Types/Workflow/JiraTemplates.test.ts +5429 -0
  493. package/Tests/Types/Workflow/Templates.test.ts +79 -4
  494. package/Tests/Types/Workflow/WorkflowVariableOAuth.test.ts +520 -0
  495. package/Tests/Types/Workspace/WorkspaceNoteReaction.test.ts +177 -0
  496. package/Tests/UI/Components/AttributesJSON/AttributesJSONView.test.tsx +390 -0
  497. package/Tests/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.test.tsx +566 -0
  498. package/Tests/UI/Components/AttributesJSON/JSONHighlight.test.ts +131 -0
  499. package/Tests/UI/Components/BasicFormDropdownNormalization.test.tsx +276 -1
  500. package/Tests/UI/Components/Calendar/Calendar.test.tsx +1611 -0
  501. package/Tests/UI/Components/Calendar/CalendarDayLayout.test.ts +1486 -0
  502. package/Tests/UI/Components/Calendar/CalendarDayLayoutDst.test.ts +632 -0
  503. package/Tests/UI/Components/Calendar/CalendarDst.test.tsx +388 -0
  504. package/Tests/UI/Components/Charts/ChartGroupPlotFloor.test.tsx +170 -0
  505. package/Tests/UI/Components/Charts/HistogramSelection.test.ts +282 -0
  506. package/Tests/UI/Components/CustomTimeRangeModal.test.tsx +6 -0
  507. package/Tests/UI/Components/CustomTimeRangeModalTimezoneTranslation.test.tsx +285 -0
  508. package/Tests/UI/Components/Dropdown.test.tsx +999 -2
  509. package/Tests/UI/Components/FeedOptions.test.ts +1404 -0
  510. package/Tests/UI/Components/FeedOptionsButton.test.tsx +2603 -0
  511. package/Tests/UI/Components/Forms/FormFieldCheckboxTranslation.test.tsx +216 -0
  512. package/Tests/UI/Components/Forms/FormFieldTimezoneDescriptionTranslation.test.tsx +461 -0
  513. package/Tests/UI/Components/Forms/IncidentEpisodePublicNoteNotifyPayload.test.tsx +641 -0
  514. package/Tests/UI/Components/Forms/IncidentPublicNoteNotifyPayload.test.tsx +346 -0
  515. package/Tests/UI/Components/Forms/ScheduledMaintenancePublicNoteNotifyPayload.test.tsx +493 -0
  516. package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +911 -2
  517. package/Tests/UI/Components/Graphs/DayUptimeGraphTimezone.NewYork.test.tsx +730 -0
  518. package/Tests/UI/Components/Graphs/DayUptimeGraphTimezone.Tokyo.test.tsx +506 -0
  519. package/Tests/UI/Components/HistogramClickToZoom.test.tsx +619 -0
  520. package/Tests/UI/Components/Icon.test.tsx +26 -0
  521. package/Tests/UI/Components/LogDetailsPanelAttributesJSON.test.tsx +248 -0
  522. package/Tests/UI/Components/LogsViewerHistogramZoom.test.tsx +47 -1
  523. package/Tests/UI/Components/LogsViewerSmallScreens.test.tsx +620 -0
  524. package/Tests/UI/Components/ModelPageModelChange.test.tsx +242 -3
  525. package/Tests/UI/Components/ModelTable/BaseModelTableDeleteConfirmation.test.tsx +521 -0
  526. package/Tests/UI/Components/MonitorGraphs/Uptime.test.tsx +406 -2
  527. package/Tests/UI/Components/MonitorGraphs/UptimeBarDayModal.test.tsx +169 -2
  528. package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
  529. package/Tests/UI/Components/TelemetryViewer/TelemetryViewerHistogramClickZoom.test.tsx +266 -0
  530. package/Tests/UI/Components/TelemetryViewer/TelemetryViewerSmallScreens.test.tsx +439 -0
  531. package/Tests/UI/Components/TimezoneDropdownLegacyValues.test.tsx +704 -0
  532. package/Tests/UI/Components/UseHistogramZoom.test.tsx +89 -1
  533. package/Tests/UI/Components/UseLogsHistogram.test.tsx +175 -0
  534. package/Tests/UI/Components/useFeedItemsViewKey.test.tsx +1017 -0
  535. package/Tests/UI/Components/useFeedOptions.test.tsx +1107 -0
  536. package/Tests/UI/Monitor/MonitorSummarySnapshotRender.test.tsx +5 -5
  537. package/Tests/UI/Telemetry/TelemetryDetailPanel.test.tsx +28 -0
  538. package/Tests/UI/Utils/ProjectUsersModelAPI.test.ts +51 -0
  539. package/Tests/UI/Utils/Timezone.test.ts +747 -33
  540. package/Tests/UI/Workspace/SendTestNotificationButton.test.tsx +1854 -0
  541. package/Tests/UI/Workspace/WorkspaceCardsSendTestNotification.test.tsx +1864 -0
  542. package/Tests/Utils/AI/InvestigationReport.test.ts +435 -7
  543. package/Tests/Utils/AiRemediation/KubectlAllowlistValidatorParity.test.ts +1084 -0
  544. package/Tests/Utils/AiRemediation/KubectlOutputRedactor.test.ts +2531 -0
  545. package/Tests/Utils/AiRemediation/KubectlPolicy.test.ts +1895 -0
  546. package/Tests/Utils/AiRemediation/KubectlPolicyAllowlist.test.ts +428 -0
  547. package/Tests/Utils/AiRemediation/KubectlPolicyChartRbacParity.test.ts +828 -0
  548. package/Tests/Utils/AiRemediation/KubectlPolicyCustomResourceScope.test.ts +573 -0
  549. package/Tests/Utils/AiRemediation/KubectlPolicyDenials.test.ts +1525 -0
  550. package/Tests/Utils/AiRemediation/KubectlPolicyExposeOverrides.test.ts +275 -0
  551. package/Tests/Utils/AiRemediation/KubectlPolicyNodePatch.test.ts +428 -0
  552. package/Tests/Utils/AiRemediation/KubectlPolicyObjectWords.test.ts +195 -0
  553. package/Tests/Utils/AiRemediation/KubectlPolicyPatchParents.test.ts +637 -0
  554. package/Tests/Utils/AiRemediation/KubectlPolicyPodSecurityBaseline.test.ts +322 -0
  555. package/Tests/Utils/AiRemediation/KubectlPolicySafeWriteScope.test.ts +1026 -0
  556. package/Tests/Utils/AiRemediation/KubectlWaitBudget.test.ts +267 -0
  557. package/Tests/Utils/AiRemediation/KubectlWriteScope.test.ts +390 -0
  558. package/Tests/Utils/AiRemediation/KubectlWriteScopeCallerParity.test.ts +777 -0
  559. package/Tests/Utils/AiRemediation/KubectlWriteScopeClusterScoped.test.ts +613 -0
  560. package/Tests/Utils/AiRemediation/KubectlWriteScopeEntryPoint.test.ts +576 -0
  561. package/Tests/Utils/AiRemediation/KubectlWriteScopeKubectlSpellings.test.ts +752 -0
  562. package/Tests/Utils/AiRemediation/KubectlWriteScopeObjectWords.test.ts +358 -0
  563. package/Tests/Utils/AiRemediation/KubectlWriteScopeOverrides.test.ts +293 -0
  564. package/Tests/Utils/AiRemediation/KubectlWriteScopeParityCases.ts +598 -0
  565. package/Tests/Utils/AiRemediation/KubectlWriteScopePolicyParity.test.ts +403 -0
  566. package/Tests/Utils/Dashboard/DashboardClockComponent.test.ts +154 -5
  567. package/Tests/Utils/LabelRuleImportExport.test.ts +102 -0
  568. package/Tests/Utils/Monitor/IncomingEmailMonitorAddress.test.ts +478 -0
  569. package/Tests/Utils/Monitor/MonitorCheckScheduleUtil.test.ts +646 -0
  570. package/Tests/Utils/Monitor/MonitorOverviewCriteriaUtil.test.ts +292 -0
  571. package/Tests/Utils/Monitor/MonitorOverviewFamily.test.ts +274 -0
  572. package/Tests/Utils/Monitor/MonitorOverviewPresentationUtil.test.ts +3100 -0
  573. package/Tests/Utils/Monitor/MonitorOverviewProbeUtil.test.ts +1412 -0
  574. package/Tests/Utils/Monitor/MonitorOverviewTargetUtil.test.ts +374 -0
  575. package/Tests/Utils/Monitor/MonitorStatusHistoryUtil.test.ts +332 -0
  576. package/Tests/Utils/Monitor/MonitorUptimeSummaryUtil.test.ts +946 -0
  577. package/Tests/Utils/Rum/SessionIdentity.test.ts +94 -0
  578. package/Tests/Utils/Rum/SessionReplayWafCompatibility.test.ts +840 -0
  579. package/Tests/Utils/Rum/SessionReplayWireEncoding.test.ts +208 -0
  580. package/Tests/Utils/Rum/UserFlow.test.ts +1010 -0
  581. package/Tests/Utils/Slo/SloDuration.test.ts +115 -24
  582. package/Tests/Utils/Slo/SloHealth.test.ts +93 -10
  583. package/Tests/Utils/Slo/SloMonitorRuleCriteria.test.ts +109 -0
  584. package/Tests/Utils/Slo/SloOverviewText.test.ts +64 -0
  585. package/Tests/Utils/StatusPage/MonitorGroupMergedDowntimeUtil.test.ts +217 -0
  586. package/Tests/Utils/StatusPage/ResourceUptime.test.ts +1272 -1
  587. package/Tests/Utils/StatusPage/UptimeDailyAggregateTotals.test.ts +298 -0
  588. package/Tests/Utils/StatusPage/UptimeDailyAggregateUtil.test.ts +649 -1
  589. package/Tests/Utils/StatusPage/UptimeDailyAggregateWindow.test.ts +314 -0
  590. package/Tests/Utils/Telemetry/AttributesJSON.test.ts +454 -0
  591. package/Tests/Utils/Uptime/DayUptimeGraphUtil.test.ts +418 -2
  592. package/Tests/Utils/Uptime/DayUptimeGraphUtilMidnightDst.test.ts +160 -0
  593. package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.Auckland.test.ts +45 -0
  594. package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.Kolkata.test.ts +40 -0
  595. package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.London.test.ts +147 -0
  596. package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.NewYork.test.ts +48 -0
  597. package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.Tokyo.test.ts +39 -0
  598. package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezoneCases.ts +1015 -0
  599. package/Tests/Utils/Uptime/UptimeUtil.test.ts +75 -0
  600. package/Tests/Utils/Uptime/UptimeUtilChronologicalOrder.test.ts +1279 -0
  601. package/Types/API/Route.ts +19 -2
  602. package/Types/API/URL.ts +26 -2
  603. package/Types/AutoRemediation/AiRemediationCommandPlan.ts +203 -5
  604. package/Types/Date.ts +121 -7
  605. package/Types/Email/EmailMessage.ts +8 -0
  606. package/Types/Email/EmailTemplateType.ts +1 -0
  607. package/Types/Exception/ExceptionMessages.ts +1 -0
  608. package/Types/Kubernetes/KubernetesClusterAiAccess.ts +488 -0
  609. package/Types/Kubernetes/KubernetesClusterAiAccessPermissions.ts +54 -0
  610. package/Types/Kubernetes/KubernetesClusterAiAccessToolNames.ts +17 -0
  611. package/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.ts +9 -0
  612. package/Types/Monitor/DatabaseMonitor/SqlServerPlatform.ts +117 -0
  613. package/Types/Monitor/KubernetesAlertTemplates.ts +6 -5
  614. package/Types/Monitor/MetricMonitor/MetricCriteriaContext.ts +6 -5
  615. package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +9 -0
  616. package/Types/Monitor/MonitorStepExceptionMonitor.ts +56 -0
  617. package/Types/Monitor/MonitorUptimeSummary.ts +113 -0
  618. package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +11 -0
  619. package/Types/Permission.ts +90 -0
  620. package/Types/Rules/RuleCriteriaFieldRegistry.ts +11 -0
  621. package/Types/Rules/RuleRun.ts +4 -0
  622. package/Types/Rum/SessionReplay.ts +55 -2
  623. package/Types/Rum/SessionReplayApi.ts +44 -1
  624. package/Types/Rum/UserFlow.ts +187 -0
  625. package/Types/Runbook/RunbookStepType.ts +10 -0
  626. package/Types/Runbook/RunnerJobOrigin.ts +15 -0
  627. package/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.ts +6 -2
  628. package/Types/StatusPage/MergedDowntimeTotals.ts +17 -0
  629. package/Types/StatusPage/PublicNoteSubscriberNotificationDefault.ts +148 -0
  630. package/Types/StatusPage/UptimeDailyAggregate.ts +15 -0
  631. package/Types/Telemetry/TelemetryIngestSurface.ts +9 -0
  632. package/Types/Timezone.ts +5 -0
  633. package/Types/TimezoneAlias.ts +385 -0
  634. package/Types/Workflow/Templates.ts +3041 -2
  635. package/Types/Workflow/WorkflowVariableOAuth.ts +476 -0
  636. package/Types/Workspace/WorkspaceNoteReaction.ts +132 -0
  637. package/Typings/Index.d.ts +24 -0
  638. package/UI/Components/AttributesJSON/AttributesJSONPreferences.ts +175 -0
  639. package/UI/Components/AttributesJSON/AttributesJSONView.tsx +138 -0
  640. package/UI/Components/AttributesJSON/AttributesViewToggle.tsx +79 -0
  641. package/UI/Components/AttributesJSON/BracesGlyph.tsx +30 -0
  642. package/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.tsx +491 -0
  643. package/UI/Components/AttributesJSON/JSONHighlight.ts +77 -0
  644. package/UI/Components/Calendar/Calendar.css +83 -0
  645. package/UI/Components/Calendar/Calendar.tsx +136 -7
  646. package/UI/Components/Calendar/CalendarDayLayout.ts +236 -0
  647. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +23 -1
  648. package/UI/Components/Charts/Utils/HistogramSelection.ts +117 -0
  649. package/UI/Components/Charts/Utils/useHistogramRangeSelection.ts +269 -0
  650. package/UI/Components/Charts/Utils/useHistogramZoom.ts +26 -2
  651. package/UI/Components/Date/CustomTimeRangeModal.tsx +26 -3
  652. package/UI/Components/Dropdown/Dropdown.tsx +58 -9
  653. package/UI/Components/Feed/FeedOptions.ts +427 -0
  654. package/UI/Components/Feed/FeedOptionsButton.tsx +692 -0
  655. package/UI/Components/Feed/useFeedItems.ts +28 -9
  656. package/UI/Components/Feed/useFeedOptions.ts +225 -0
  657. package/UI/Components/Forms/Fields/FormField.tsx +49 -14
  658. package/UI/Components/Graphs/DayUptimeGraph.tsx +166 -25
  659. package/UI/Components/Graphs/UptimeBarTooltip.tsx +10 -2
  660. package/UI/Components/Graphs/UptimeDaySummary.tsx +8 -0
  661. package/UI/Components/Icon/Icon.tsx +1 -1
  662. package/UI/Components/LogsViewer/LogsViewer.tsx +52 -5
  663. package/UI/Components/LogsViewer/components/ColumnSelector.tsx +13 -2
  664. package/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.tsx +13 -1
  665. package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +91 -76
  666. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +15 -1
  667. package/UI/Components/LogsViewer/components/LogsHistogram.tsx +28 -106
  668. package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +54 -6
  669. package/UI/Components/LogsViewer/components/SavedViewsDropdown.tsx +8 -2
  670. package/UI/Components/LogsViewer/useLogsHistogram.ts +39 -6
  671. package/UI/Components/ModelTable/BaseModelTable.tsx +66 -14
  672. package/UI/Components/MonitorGraphs/Uptime.tsx +12 -0
  673. package/UI/Components/MonitorGraphs/UptimeBarDayModal.tsx +10 -2
  674. package/UI/Components/Page/ModelPage.tsx +59 -3
  675. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +69 -5
  676. package/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.tsx +12 -1
  677. package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +15 -1
  678. package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +36 -104
  679. package/UI/Components/TelemetryViewer/components/TelemetrySearchBar.tsx +9 -1
  680. package/UI/Utils/ModelAPI/ProjectUsersModelAPI.ts +19 -1
  681. package/UI/Utils/Timezone.ts +69 -28
  682. package/Utils/AI/InvestigationReport.ts +195 -25
  683. package/Utils/AiRemediation/KubectlOutputRedactor.ts +1724 -0
  684. package/Utils/AiRemediation/KubectlPolicy.ts +4136 -0
  685. package/Utils/AiRemediation/KubectlWaitBudget.ts +156 -0
  686. package/Utils/AiRemediation/KubectlWriteScope.ts +1964 -0
  687. package/Utils/Dashboard/Components/DashboardClockComponent.ts +7 -6
  688. package/Utils/LabelRuleImportExport.ts +27 -9
  689. package/Utils/Monitor/IncomingEmailMonitorAddress.ts +292 -0
  690. package/Utils/Monitor/MetricValueFormatter.ts +2 -2
  691. package/Utils/Monitor/MonitorCheckScheduleUtil.ts +654 -0
  692. package/Utils/Monitor/MonitorOverviewCriteriaUtil.ts +188 -0
  693. package/Utils/Monitor/MonitorOverviewFamily.ts +263 -0
  694. package/Utils/Monitor/MonitorOverviewPresentationUtil.ts +1958 -0
  695. package/Utils/Monitor/MonitorOverviewProbeUtil.ts +979 -0
  696. package/Utils/Monitor/MonitorOverviewTargetUtil.ts +299 -0
  697. package/Utils/Monitor/MonitorStatusHistoryUtil.ts +201 -0
  698. package/Utils/Monitor/MonitorUptimeSummaryUtil.ts +638 -0
  699. package/Utils/Rules/MonitorTypeRuleCriteria.ts +31 -0
  700. package/Utils/Rum/SessionIdentity.ts +44 -0
  701. package/Utils/Rum/SessionReplayWireEncoding.ts +137 -0
  702. package/Utils/Rum/UserFlow.ts +1527 -0
  703. package/Utils/Slo/SloDuration.ts +22 -6
  704. package/Utils/Slo/SloHealth.ts +8 -7
  705. package/Utils/Slo/SloMonitorRuleCriteria.ts +33 -1
  706. package/Utils/Slo/SloOverviewText.ts +33 -0
  707. package/Utils/Slo/SloProjection.ts +4 -3
  708. package/Utils/StatusPage/MonitorGroupMergedDowntimeUtil.ts +107 -0
  709. package/Utils/StatusPage/ResourceUptime.ts +99 -0
  710. package/Utils/StatusPage/UptimeDailyAggregateUtil.ts +197 -0
  711. package/Utils/Telemetry/AttributesJSON.ts +367 -0
  712. package/Utils/Uptime/DayUptimeGraphUtil.ts +165 -0
  713. package/Utils/Uptime/UptimeUtil.ts +122 -38
  714. package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js +8 -1
  715. package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js.map +1 -1
  716. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +62 -0
  717. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -1
  718. package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js +8 -1
  719. package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js.map +1 -1
  720. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +10 -3
  721. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
  722. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +10 -3
  723. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
  724. package/build/dist/Models/DatabaseModels/Index.js +4 -0
  725. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  726. package/build/dist/Models/DatabaseModels/KubernetesCluster.js +434 -0
  727. package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
  728. package/build/dist/Models/DatabaseModels/Monitor.js +49 -0
  729. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  730. package/build/dist/Models/DatabaseModels/Runner.js +4 -4
  731. package/build/dist/Models/DatabaseModels/Runner.js.map +1 -1
  732. package/build/dist/Models/DatabaseModels/RunnerJob.js +66 -0
  733. package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
  734. package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +11 -3
  735. package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
  736. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveFeed.js +2 -0
  737. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveFeed.js.map +1 -1
  738. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveLabelRule.js +530 -0
  739. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveLabelRule.js.map +1 -0
  740. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.js +39 -4
  741. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.js.map +1 -1
  742. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerRule.js +612 -0
  743. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerRule.js.map +1 -0
  744. package/build/dist/Models/DatabaseModels/WorkflowVariable.js +487 -3
  745. package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
  746. package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js +64 -16
  747. package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
  748. package/build/dist/Server/API/AIInvestigationAPI.js +205 -0
  749. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  750. package/build/dist/Server/API/AutoRemediationAPI.js +115 -2
  751. package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
  752. package/build/dist/Server/API/CommonAPI.js +49 -0
  753. package/build/dist/Server/API/CommonAPI.js.map +1 -1
  754. package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js +564 -0
  755. package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js.map +1 -0
  756. package/build/dist/Server/API/MicrosoftTeamsAPI.js +465 -176
  757. package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
  758. package/build/dist/Server/API/MonitorAPI.js +107 -1
  759. package/build/dist/Server/API/MonitorAPI.js.map +1 -1
  760. package/build/dist/Server/API/OnCallScheduleTimelineAPI.js +5 -16
  761. package/build/dist/Server/API/OnCallScheduleTimelineAPI.js.map +1 -1
  762. package/build/dist/Server/API/SlackAPI.js +322 -78
  763. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  764. package/build/dist/Server/API/StatusPageAPI.js +123 -17
  765. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  766. package/build/dist/Server/API/TelemetryAPI.js +144 -5
  767. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  768. package/build/dist/Server/API/UserTwoFactorBackupCodeAPI.js +1 -0
  769. package/build/dist/Server/API/UserTwoFactorBackupCodeAPI.js.map +1 -1
  770. package/build/dist/Server/API/WorkflowVariableAPI.js +109 -0
  771. package/build/dist/Server/API/WorkflowVariableAPI.js.map +1 -0
  772. package/build/dist/Server/Infrastructure/GlobalCache.js +29 -0
  773. package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
  774. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794100000000-AddSloLabelAndOwnerRules.js +93 -0
  775. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794100000000-AddSloLabelAndOwnerRules.js.map +1 -0
  776. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794200000000-AddSloMonitorRuleMonitorType.js +12 -0
  777. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794200000000-AddSloMonitorRuleMonitorType.js.map +1 -0
  778. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794300000000-AddOAuth2WorkflowVariables.js +38 -0
  779. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794300000000-AddOAuth2WorkflowVariables.js.map +1 -0
  780. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794400000000-AddKubernetesClusterAiAccess.js +54 -0
  781. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794400000000-AddKubernetesClusterAiAccess.js.map +1 -0
  782. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794500000000-AddIncomingEmailCustomAddressToMonitor.js +14 -0
  783. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794500000000-AddIncomingEmailCustomAddressToMonitor.js.map +1 -0
  784. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794600000000-AddAuthTokenExpiresAtToWorkspaceProjectAuthToken.js +12 -0
  785. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794600000000-AddAuthTokenExpiresAtToWorkspaceProjectAuthToken.js.map +1 -0
  786. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794700000000-RemoveAppAccessTokenFromWorkspaceProjectAuthTokenMiscData.js +32 -0
  787. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794700000000-RemoveAppAccessTokenFromWorkspaceProjectAuthTokenMiscData.js.map +1 -0
  788. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +14 -0
  789. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  790. package/build/dist/Server/Middleware/MasterAdminAuthorization.js +21 -0
  791. package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -1
  792. package/build/dist/Server/Middleware/TelemetryIngest.js +32 -2
  793. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  794. package/build/dist/Server/Middleware/UserAuthorization.js +39 -6
  795. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  796. package/build/dist/Server/Services/AIAgentService.js +1 -0
  797. package/build/dist/Server/Services/AIAgentService.js.map +1 -1
  798. package/build/dist/Server/Services/AccessTokenService.js +87 -42
  799. package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
  800. package/build/dist/Server/Services/AlertEpisodeMemberService.js +4 -0
  801. package/build/dist/Server/Services/AlertEpisodeMemberService.js.map +1 -1
  802. package/build/dist/Server/Services/AlertEpisodeService.js +12 -1
  803. package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
  804. package/build/dist/Server/Services/AlertService.js +110 -23
  805. package/build/dist/Server/Services/AlertService.js.map +1 -1
  806. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +716 -30
  807. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  808. package/build/dist/Server/Services/AutoRemediationRuleService.js +100 -0
  809. package/build/dist/Server/Services/AutoRemediationRuleService.js.map +1 -1
  810. package/build/dist/Server/Services/BillingService.js +1 -0
  811. package/build/dist/Server/Services/BillingService.js.map +1 -1
  812. package/build/dist/Server/Services/DatabaseService.js +7 -0
  813. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  814. package/build/dist/Server/Services/InboundEmail/Providers/SendGridInboundProvider.js +11 -16
  815. package/build/dist/Server/Services/InboundEmail/Providers/SendGridInboundProvider.js.map +1 -1
  816. package/build/dist/Server/Services/IncidentEpisodeMemberService.js +4 -0
  817. package/build/dist/Server/Services/IncidentEpisodeMemberService.js.map +1 -1
  818. package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +48 -0
  819. package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -1
  820. package/build/dist/Server/Services/IncidentEpisodeRoleMemberService.js +21 -0
  821. package/build/dist/Server/Services/IncidentEpisodeRoleMemberService.js.map +1 -1
  822. package/build/dist/Server/Services/IncidentEpisodeService.js +12 -1
  823. package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
  824. package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -0
  825. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  826. package/build/dist/Server/Services/IncidentMemberService.js +14 -0
  827. package/build/dist/Server/Services/IncidentMemberService.js.map +1 -1
  828. package/build/dist/Server/Services/IncidentPublicNoteService.js +48 -0
  829. package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
  830. package/build/dist/Server/Services/IncidentService.js +99 -21
  831. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  832. package/build/dist/Server/Services/IncidentStateTimelineService.js +12 -0
  833. package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
  834. package/build/dist/Server/Services/IncidentTemplateService.js +68 -4
  835. package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
  836. package/build/dist/Server/Services/Index.js +4 -0
  837. package/build/dist/Server/Services/Index.js.map +1 -1
  838. package/build/dist/Server/Services/KubernetesClusterAiAccessService.js +1470 -0
  839. package/build/dist/Server/Services/KubernetesClusterAiAccessService.js.map +1 -0
  840. package/build/dist/Server/Services/KubernetesClusterService.js +1097 -0
  841. package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
  842. package/build/dist/Server/Services/LogAggregationService.js +14 -6
  843. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  844. package/build/dist/Server/Services/MonitorService.js +490 -50
  845. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  846. package/build/dist/Server/Services/MonitorStatusTimelineService.js +540 -3
  847. package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
  848. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +2 -0
  849. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
  850. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.js +2 -0
  851. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.js.map +1 -1
  852. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js +2 -0
  853. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js.map +1 -1
  854. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +3 -0
  855. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  856. package/build/dist/Server/Services/OnCallNotificationAlertingService.js +29 -7
  857. package/build/dist/Server/Services/OnCallNotificationAlertingService.js.map +1 -1
  858. package/build/dist/Server/Services/OnCallSetupReminderService.js +1 -0
  859. package/build/dist/Server/Services/OnCallSetupReminderService.js.map +1 -1
  860. package/build/dist/Server/Services/ProbeService.js +7 -1
  861. package/build/dist/Server/Services/ProbeService.js.map +1 -1
  862. package/build/dist/Server/Services/ProjectService.js +11 -1
  863. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  864. package/build/dist/Server/Services/RunbookCredentialService.js +24 -0
  865. package/build/dist/Server/Services/RunbookCredentialService.js.map +1 -1
  866. package/build/dist/Server/Services/RunbookSecretService.js +44 -0
  867. package/build/dist/Server/Services/RunbookSecretService.js.map +1 -1
  868. package/build/dist/Server/Services/RunnerJobService.js +641 -21
  869. package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
  870. package/build/dist/Server/Services/RunnerService.js +344 -5
  871. package/build/dist/Server/Services/RunnerService.js.map +1 -1
  872. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +48 -0
  873. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
  874. package/build/dist/Server/Services/ScheduledMaintenanceService.js +102 -20
  875. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  876. package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js +67 -4
  877. package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js.map +1 -1
  878. package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleEngineService.js +295 -0
  879. package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleEngineService.js.map +1 -0
  880. package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleService.js +56 -0
  881. package/build/dist/Server/Services/ServiceLevelObjectiveLabelRuleService.js.map +1 -0
  882. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js +59 -14
  883. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js.map +1 -1
  884. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleService.js +22 -1
  885. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleService.js.map +1 -1
  886. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleEngineService.js +400 -0
  887. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleEngineService.js.map +1 -0
  888. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleService.js +56 -0
  889. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerRuleService.js.map +1 -0
  890. package/build/dist/Server/Services/ServiceLevelObjectiveService.js +33 -1
  891. package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -1
  892. package/build/dist/Server/Services/StatusPagePrivateUserService.js +1 -0
  893. package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
  894. package/build/dist/Server/Services/StatusPageService.js +230 -32
  895. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  896. package/build/dist/Server/Services/StatusPageSubscriberService.js +4 -0
  897. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  898. package/build/dist/Server/Services/TeamMemberService.js +270 -11
  899. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  900. package/build/dist/Server/Services/TraceAggregationService.js +10 -6
  901. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  902. package/build/dist/Server/Services/UserEmailService.js +1 -0
  903. package/build/dist/Server/Services/UserEmailService.js.map +1 -1
  904. package/build/dist/Server/Services/UserNotificationMethodAdminService.js +1 -0
  905. package/build/dist/Server/Services/UserNotificationMethodAdminService.js.map +1 -1
  906. package/build/dist/Server/Services/UserNotificationRuleAdminService.js +1 -0
  907. package/build/dist/Server/Services/UserNotificationRuleAdminService.js.map +1 -1
  908. package/build/dist/Server/Services/UserNotificationRuleService.js +4 -0
  909. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  910. package/build/dist/Server/Services/UserService.js +107 -1
  911. package/build/dist/Server/Services/UserService.js.map +1 -1
  912. package/build/dist/Server/Services/WorkflowVariableService.js +396 -7
  913. package/build/dist/Server/Services/WorkflowVariableService.js.map +1 -1
  914. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +463 -7
  915. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
  916. package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js +144 -2
  917. package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js.map +1 -1
  918. package/build/dist/Server/Types/Database/QueryHelper.js +20 -0
  919. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  920. package/build/dist/Server/Types/Markdown.js +394 -27
  921. package/build/dist/Server/Types/Markdown.js.map +1 -1
  922. package/build/dist/Server/Types/Workflow/Components/Telegram/SendMessageToChat.js +20 -1
  923. package/build/dist/Server/Types/Workflow/Components/Telegram/SendMessageToChat.js.map +1 -1
  924. package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js +123 -0
  925. package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js.map +1 -0
  926. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +344 -0
  927. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -0
  928. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +587 -0
  929. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -0
  930. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAuth.js +18 -2
  931. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAuth.js.map +1 -1
  932. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +1380 -239
  933. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
  934. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +1099 -68
  935. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  936. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +88 -6
  937. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  938. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +45 -11
  939. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  940. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +41 -11
  941. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  942. package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js +11 -4
  943. package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -1
  944. package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js +4 -2
  945. package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js.map +1 -1
  946. package/build/dist/Server/Utils/AI/Toolbox/SloTools.js +1 -0
  947. package/build/dist/Server/Utils/AI/Toolbox/SloTools.js.map +1 -1
  948. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +997 -141
  949. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
  950. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +299 -4
  951. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -1
  952. package/build/dist/Server/Utils/Database/AffectedResourceRelations.js +120 -0
  953. package/build/dist/Server/Utils/Database/AffectedResourceRelations.js.map +1 -0
  954. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +160 -1
  955. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
  956. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +1 -0
  957. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
  958. package/build/dist/Server/Utils/Monitor/AffectedResourceList.js +22 -51
  959. package/build/dist/Server/Utils/Monitor/AffectedResourceList.js.map +1 -1
  960. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +1 -1
  961. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +1 -1
  962. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +59 -12
  963. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  964. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +139 -109
  965. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  966. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +5 -1
  967. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
  968. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +84 -22
  969. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  970. package/build/dist/Server/Utils/Monitor/MonitorPayloadRedaction.js +70 -5
  971. package/build/dist/Server/Utils/Monitor/MonitorPayloadRedaction.js.map +1 -1
  972. package/build/dist/Server/Utils/Monitor/ProbeMonitorsNotification.js +249 -0
  973. package/build/dist/Server/Utils/Monitor/ProbeMonitorsNotification.js.map +1 -0
  974. package/build/dist/Server/Utils/Monitor/RootCauseList.js +101 -0
  975. package/build/dist/Server/Utils/Monitor/RootCauseList.js.map +1 -0
  976. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js +1 -0
  977. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js.map +1 -1
  978. package/build/dist/Server/Utils/PushNotificationUtil.js +27 -0
  979. package/build/dist/Server/Utils/PushNotificationUtil.js.map +1 -1
  980. package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js +26 -3
  981. package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js.map +1 -1
  982. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +28 -0
  983. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
  984. package/build/dist/Server/Utils/Runbook/RunbookExecutePermission.js +38 -3
  985. package/build/dist/Server/Utils/Runbook/RunbookExecutePermission.js.map +1 -1
  986. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +143 -23
  987. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
  988. package/build/dist/Server/Utils/SessionReplay/SessionReplayUserFlowReadService.js +406 -0
  989. package/build/dist/Server/Utils/SessionReplay/SessionReplayUserFlowReadService.js.map +1 -0
  990. package/build/dist/Server/Utils/Slo/SloRulePatternValidator.js +28 -0
  991. package/build/dist/Server/Utils/Slo/SloRulePatternValidator.js.map +1 -0
  992. package/build/dist/Server/Utils/StartServer.js +4 -3
  993. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  994. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js +382 -0
  995. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js.map +1 -0
  996. package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js +1 -0
  997. package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js.map +1 -1
  998. package/build/dist/Server/Utils/UserPermission/UserPermission.js +10 -0
  999. package/build/dist/Server/Utils/UserPermission/UserPermission.js.map +1 -1
  1000. package/build/dist/Server/Utils/Workflow/OAuth2TokenClient.js +447 -0
  1001. package/build/dist/Server/Utils/Workflow/OAuth2TokenClient.js.map +1 -0
  1002. package/build/dist/Server/Utils/Workflow/WorkflowVariableOAuthToken.js +202 -0
  1003. package/build/dist/Server/Utils/Workflow/WorkflowVariableOAuthToken.js.map +1 -0
  1004. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +39 -1
  1005. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
  1006. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +44 -4
  1007. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
  1008. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +150 -191
  1009. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
  1010. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +44 -4
  1011. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
  1012. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.js +39 -17
  1013. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.js.map +1 -1
  1014. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +151 -145
  1015. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
  1016. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +221 -127
  1017. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  1018. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsServiceUrl.js +91 -0
  1019. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsServiceUrl.js.map +1 -0
  1020. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/ReactionNoteSync.js +673 -0
  1021. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/ReactionNoteSync.js.map +1 -0
  1022. package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js +3 -9
  1023. package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js.map +1 -1
  1024. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js +65 -166
  1025. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js.map +1 -1
  1026. package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js +63 -157
  1027. package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js.map +1 -1
  1028. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js +23 -3
  1029. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js.map +1 -1
  1030. package/build/dist/Server/Utils/Workspace/Slack/Actions/Authorization.js +92 -0
  1031. package/build/dist/Server/Utils/Workspace/Slack/Actions/Authorization.js.map +1 -0
  1032. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js +81 -210
  1033. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js.map +1 -1
  1034. package/build/dist/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.js +68 -138
  1035. package/build/dist/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.js.map +1 -1
  1036. package/build/dist/Server/Utils/Workspace/Slack/Actions/ReactionNote.js +240 -0
  1037. package/build/dist/Server/Utils/Workspace/Slack/Actions/ReactionNote.js.map +1 -0
  1038. package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js +85 -212
  1039. package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js.map +1 -1
  1040. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +60 -17
  1041. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  1042. package/build/dist/Server/Utils/Workspace/Slack/app-manifest.json +2 -0
  1043. package/build/dist/Server/Utils/Workspace/Workspace.js +134 -41
  1044. package/build/dist/Server/Utils/Workspace/Workspace.js.map +1 -1
  1045. package/build/dist/Server/Utils/Workspace/WorkspaceActionAuthorization.js +197 -0
  1046. package/build/dist/Server/Utils/Workspace/WorkspaceActionAuthorization.js.map +1 -0
  1047. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js +32 -0
  1048. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
  1049. package/build/dist/Server/Utils/Workspace/WorkspaceOAuthState.js +199 -0
  1050. package/build/dist/Server/Utils/Workspace/WorkspaceOAuthState.js.map +1 -0
  1051. package/build/dist/Server/Utils/Workspace/WorkspaceProjectReferenceValidator.js +91 -0
  1052. package/build/dist/Server/Utils/Workspace/WorkspaceProjectReferenceValidator.js.map +1 -0
  1053. package/build/dist/Server/Utils/Workspace/WorkspaceReactionNote.js +450 -0
  1054. package/build/dist/Server/Utils/Workspace/WorkspaceReactionNote.js.map +1 -0
  1055. package/build/dist/Types/API/Route.js +18 -2
  1056. package/build/dist/Types/API/Route.js.map +1 -1
  1057. package/build/dist/Types/API/URL.js +23 -2
  1058. package/build/dist/Types/API/URL.js.map +1 -1
  1059. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +103 -5
  1060. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
  1061. package/build/dist/Types/Date.js +97 -7
  1062. package/build/dist/Types/Date.js.map +1 -1
  1063. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  1064. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  1065. package/build/dist/Types/Exception/ExceptionMessages.js +1 -0
  1066. package/build/dist/Types/Exception/ExceptionMessages.js.map +1 -1
  1067. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +245 -0
  1068. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -0
  1069. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js +49 -0
  1070. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js.map +1 -0
  1071. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessToolNames.js +16 -0
  1072. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessToolNames.js.map +1 -0
  1073. package/build/dist/Types/Monitor/DatabaseMonitor/SqlServerPlatform.js +104 -0
  1074. package/build/dist/Types/Monitor/DatabaseMonitor/SqlServerPlatform.js.map +1 -0
  1075. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +6 -5
  1076. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
  1077. package/build/dist/Types/Monitor/MonitorStepExceptionMonitor.js +32 -0
  1078. package/build/dist/Types/Monitor/MonitorStepExceptionMonitor.js.map +1 -1
  1079. package/build/dist/Types/Monitor/MonitorUptimeSummary.js +52 -0
  1080. package/build/dist/Types/Monitor/MonitorUptimeSummary.js.map +1 -0
  1081. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +9 -1
  1082. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
  1083. package/build/dist/Types/Permission.js +84 -0
  1084. package/build/dist/Types/Permission.js.map +1 -1
  1085. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +11 -0
  1086. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
  1087. package/build/dist/Types/Rules/RuleRun.js +4 -0
  1088. package/build/dist/Types/Rules/RuleRun.js.map +1 -1
  1089. package/build/dist/Types/Rum/SessionReplay.js +52 -2
  1090. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  1091. package/build/dist/Types/Rum/SessionReplayApi.js +11 -0
  1092. package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -1
  1093. package/build/dist/Types/Rum/UserFlow.js +115 -0
  1094. package/build/dist/Types/Rum/UserFlow.js.map +1 -0
  1095. package/build/dist/Types/Runbook/RunbookStepType.js +10 -0
  1096. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  1097. package/build/dist/Types/Runbook/RunnerJobOrigin.js +14 -0
  1098. package/build/dist/Types/Runbook/RunnerJobOrigin.js.map +1 -1
  1099. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js +2 -2
  1100. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js.map +1 -1
  1101. package/build/dist/Types/StatusPage/MergedDowntimeTotals.js +2 -0
  1102. package/build/dist/Types/StatusPage/MergedDowntimeTotals.js.map +1 -0
  1103. package/build/dist/Types/StatusPage/PublicNoteSubscriberNotificationDefault.js +65 -0
  1104. package/build/dist/Types/StatusPage/PublicNoteSubscriberNotificationDefault.js.map +1 -0
  1105. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +8 -0
  1106. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
  1107. package/build/dist/Types/Timezone.js +5 -0
  1108. package/build/dist/Types/Timezone.js.map +1 -1
  1109. package/build/dist/Types/TimezoneAlias.js +340 -0
  1110. package/build/dist/Types/TimezoneAlias.js.map +1 -0
  1111. package/build/dist/Types/Workflow/Templates.js +2694 -2
  1112. package/build/dist/Types/Workflow/Templates.js.map +1 -1
  1113. package/build/dist/Types/Workflow/WorkflowVariableOAuth.js +314 -0
  1114. package/build/dist/Types/Workflow/WorkflowVariableOAuth.js.map +1 -0
  1115. package/build/dist/Types/Workspace/WorkspaceNoteReaction.js +98 -0
  1116. package/build/dist/Types/Workspace/WorkspaceNoteReaction.js.map +1 -0
  1117. package/build/dist/UI/Components/AttributesJSON/AttributesJSONPreferences.js +95 -0
  1118. package/build/dist/UI/Components/AttributesJSON/AttributesJSONPreferences.js.map +1 -0
  1119. package/build/dist/UI/Components/AttributesJSON/AttributesJSONView.js +44 -0
  1120. package/build/dist/UI/Components/AttributesJSON/AttributesJSONView.js.map +1 -0
  1121. package/build/dist/UI/Components/AttributesJSON/AttributesViewToggle.js +27 -0
  1122. package/build/dist/UI/Components/AttributesJSON/AttributesViewToggle.js.map +1 -0
  1123. package/build/dist/UI/Components/AttributesJSON/BracesGlyph.js +9 -0
  1124. package/build/dist/UI/Components/AttributesJSON/BracesGlyph.js.map +1 -0
  1125. package/build/dist/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.js +260 -0
  1126. package/build/dist/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.js.map +1 -0
  1127. package/build/dist/UI/Components/AttributesJSON/JSONHighlight.js +56 -0
  1128. package/build/dist/UI/Components/AttributesJSON/JSONHighlight.js.map +1 -0
  1129. package/build/dist/UI/Components/Calendar/Calendar.js +94 -7
  1130. package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
  1131. package/build/dist/UI/Components/Calendar/CalendarDayLayout.js +136 -0
  1132. package/build/dist/UI/Components/Calendar/CalendarDayLayout.js.map +1 -0
  1133. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +1 -1
  1134. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  1135. package/build/dist/UI/Components/Charts/Utils/HistogramSelection.js +72 -0
  1136. package/build/dist/UI/Components/Charts/Utils/HistogramSelection.js.map +1 -0
  1137. package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js +178 -0
  1138. package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js.map +1 -0
  1139. package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js +13 -1
  1140. package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js.map +1 -1
  1141. package/build/dist/UI/Components/Date/CustomTimeRangeModal.js +20 -4
  1142. package/build/dist/UI/Components/Date/CustomTimeRangeModal.js.map +1 -1
  1143. package/build/dist/UI/Components/Dropdown/Dropdown.js +33 -9
  1144. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  1145. package/build/dist/UI/Components/Feed/FeedOptions.js +235 -0
  1146. package/build/dist/UI/Components/Feed/FeedOptions.js.map +1 -0
  1147. package/build/dist/UI/Components/Feed/FeedOptionsButton.js +346 -0
  1148. package/build/dist/UI/Components/Feed/FeedOptionsButton.js.map +1 -0
  1149. package/build/dist/UI/Components/Feed/useFeedItems.js +17 -7
  1150. package/build/dist/UI/Components/Feed/useFeedItems.js.map +1 -1
  1151. package/build/dist/UI/Components/Feed/useFeedOptions.js +130 -0
  1152. package/build/dist/UI/Components/Feed/useFeedOptions.js.map +1 -0
  1153. package/build/dist/UI/Components/Forms/Fields/FormField.js +36 -13
  1154. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  1155. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +117 -11
  1156. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
  1157. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js +5 -1
  1158. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js.map +1 -1
  1159. package/build/dist/UI/Components/Graphs/UptimeDaySummary.js.map +1 -1
  1160. package/build/dist/UI/Components/Icon/Icon.js +1 -1
  1161. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  1162. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +36 -8
  1163. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  1164. package/build/dist/UI/Components/LogsViewer/components/ColumnSelector.js +10 -2
  1165. package/build/dist/UI/Components/LogsViewer/components/ColumnSelector.js.map +1 -1
  1166. package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js +9 -1
  1167. package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js.map +1 -1
  1168. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +16 -15
  1169. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
  1170. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +1 -1
  1171. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  1172. package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +14 -74
  1173. package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
  1174. package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +22 -5
  1175. package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
  1176. package/build/dist/UI/Components/LogsViewer/components/SavedViewsDropdown.js +9 -2
  1177. package/build/dist/UI/Components/LogsViewer/components/SavedViewsDropdown.js.map +1 -1
  1178. package/build/dist/UI/Components/LogsViewer/useLogsHistogram.js +16 -5
  1179. package/build/dist/UI/Components/LogsViewer/useLogsHistogram.js.map +1 -1
  1180. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +23 -8
  1181. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  1182. package/build/dist/UI/Components/MonitorGraphs/Uptime.js +7 -1
  1183. package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
  1184. package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js +5 -1
  1185. package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js.map +1 -1
  1186. package/build/dist/UI/Components/Page/ModelPage.js +37 -3
  1187. package/build/dist/UI/Components/Page/ModelPage.js.map +1 -1
  1188. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +27 -6
  1189. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  1190. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js +7 -1
  1191. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js.map +1 -1
  1192. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +1 -1
  1193. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
  1194. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +17 -77
  1195. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
  1196. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js +10 -1
  1197. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js.map +1 -1
  1198. package/build/dist/UI/Utils/ModelAPI/ProjectUsersModelAPI.js +15 -1
  1199. package/build/dist/UI/Utils/ModelAPI/ProjectUsersModelAPI.js.map +1 -1
  1200. package/build/dist/UI/Utils/Timezone.js +52 -17
  1201. package/build/dist/UI/Utils/Timezone.js.map +1 -1
  1202. package/build/dist/Utils/AI/InvestigationReport.js +116 -21
  1203. package/build/dist/Utils/AI/InvestigationReport.js.map +1 -1
  1204. package/build/dist/Utils/AiRemediation/KubectlOutputRedactor.js +1209 -0
  1205. package/build/dist/Utils/AiRemediation/KubectlOutputRedactor.js.map +1 -0
  1206. package/build/dist/Utils/AiRemediation/KubectlPolicy.js +2973 -0
  1207. package/build/dist/Utils/AiRemediation/KubectlPolicy.js.map +1 -0
  1208. package/build/dist/Utils/AiRemediation/KubectlWaitBudget.js +99 -0
  1209. package/build/dist/Utils/AiRemediation/KubectlWaitBudget.js.map +1 -0
  1210. package/build/dist/Utils/AiRemediation/KubectlWriteScope.js +1429 -0
  1211. package/build/dist/Utils/AiRemediation/KubectlWriteScope.js.map +1 -0
  1212. package/build/dist/Utils/Dashboard/Components/DashboardClockComponent.js +7 -6
  1213. package/build/dist/Utils/Dashboard/Components/DashboardClockComponent.js.map +1 -1
  1214. package/build/dist/Utils/LabelRuleImportExport.js +22 -6
  1215. package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
  1216. package/build/dist/Utils/Monitor/IncomingEmailMonitorAddress.js +214 -0
  1217. package/build/dist/Utils/Monitor/IncomingEmailMonitorAddress.js.map +1 -0
  1218. package/build/dist/Utils/Monitor/MetricValueFormatter.js +2 -2
  1219. package/build/dist/Utils/Monitor/MonitorCheckScheduleUtil.js +471 -0
  1220. package/build/dist/Utils/Monitor/MonitorCheckScheduleUtil.js.map +1 -0
  1221. package/build/dist/Utils/Monitor/MonitorOverviewCriteriaUtil.js +107 -0
  1222. package/build/dist/Utils/Monitor/MonitorOverviewCriteriaUtil.js.map +1 -0
  1223. package/build/dist/Utils/Monitor/MonitorOverviewFamily.js +191 -0
  1224. package/build/dist/Utils/Monitor/MonitorOverviewFamily.js.map +1 -0
  1225. package/build/dist/Utils/Monitor/MonitorOverviewPresentationUtil.js +1259 -0
  1226. package/build/dist/Utils/Monitor/MonitorOverviewPresentationUtil.js.map +1 -0
  1227. package/build/dist/Utils/Monitor/MonitorOverviewProbeUtil.js +593 -0
  1228. package/build/dist/Utils/Monitor/MonitorOverviewProbeUtil.js.map +1 -0
  1229. package/build/dist/Utils/Monitor/MonitorOverviewTargetUtil.js +195 -0
  1230. package/build/dist/Utils/Monitor/MonitorOverviewTargetUtil.js.map +1 -0
  1231. package/build/dist/Utils/Monitor/MonitorStatusHistoryUtil.js +127 -0
  1232. package/build/dist/Utils/Monitor/MonitorStatusHistoryUtil.js.map +1 -0
  1233. package/build/dist/Utils/Monitor/MonitorUptimeSummaryUtil.js +464 -0
  1234. package/build/dist/Utils/Monitor/MonitorUptimeSummaryUtil.js.map +1 -0
  1235. package/build/dist/Utils/Rules/MonitorTypeRuleCriteria.js +18 -0
  1236. package/build/dist/Utils/Rules/MonitorTypeRuleCriteria.js.map +1 -0
  1237. package/build/dist/Utils/Rum/SessionIdentity.js +31 -1
  1238. package/build/dist/Utils/Rum/SessionIdentity.js.map +1 -1
  1239. package/build/dist/Utils/Rum/SessionReplayWireEncoding.js +128 -0
  1240. package/build/dist/Utils/Rum/SessionReplayWireEncoding.js.map +1 -0
  1241. package/build/dist/Utils/Rum/UserFlow.js +941 -0
  1242. package/build/dist/Utils/Rum/UserFlow.js.map +1 -0
  1243. package/build/dist/Utils/Slo/SloDuration.js +13 -5
  1244. package/build/dist/Utils/Slo/SloDuration.js.map +1 -1
  1245. package/build/dist/Utils/Slo/SloHealth.js +8 -7
  1246. package/build/dist/Utils/Slo/SloHealth.js.map +1 -1
  1247. package/build/dist/Utils/Slo/SloMonitorRuleCriteria.js +16 -1
  1248. package/build/dist/Utils/Slo/SloMonitorRuleCriteria.js.map +1 -1
  1249. package/build/dist/Utils/Slo/SloOverviewText.js +16 -0
  1250. package/build/dist/Utils/Slo/SloOverviewText.js.map +1 -1
  1251. package/build/dist/Utils/Slo/SloProjection.js.map +1 -1
  1252. package/build/dist/Utils/StatusPage/MonitorGroupMergedDowntimeUtil.js +82 -0
  1253. package/build/dist/Utils/StatusPage/MonitorGroupMergedDowntimeUtil.js.map +1 -0
  1254. package/build/dist/Utils/StatusPage/ResourceUptime.js +46 -0
  1255. package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
  1256. package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js +148 -0
  1257. package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js.map +1 -1
  1258. package/build/dist/Utils/Telemetry/AttributesJSON.js +245 -0
  1259. package/build/dist/Utils/Telemetry/AttributesJSON.js.map +1 -0
  1260. package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js +103 -0
  1261. package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js.map +1 -1
  1262. package/build/dist/Utils/Uptime/UptimeUtil.js +91 -27
  1263. package/build/dist/Utils/Uptime/UptimeUtil.js.map +1 -1
  1264. package/jest.config.json +2 -1
  1265. package/package.json +2 -1
  1266. package/tsconfig.tests.json +36 -0
  1267. package/Tests/UI/Components/EmptyState/EmptyStateGuideLinks.test.tsx +0 -337
  1268. package/UI/Components/EmptyState/EmptyStateGuideLinks.tsx +0 -124
  1269. package/build/dist/UI/Components/EmptyState/EmptyStateGuideLinks.js +0 -47
  1270. package/build/dist/UI/Components/EmptyState/EmptyStateGuideLinks.js.map +0 -1
@@ -8,9 +8,24 @@ var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
10
  import DatabaseService from "./DatabaseService";
11
+ import AutoRemediationSuggestionService from "./AutoRemediationSuggestionService";
11
12
  import KubernetesClusterLabelRuleEngineService from "./KubernetesClusterLabelRuleEngineService";
12
13
  import KubernetesClusterOwnerRuleEngineService from "./KubernetesClusterOwnerRuleEngineService";
14
+ import RunbookCredentialService from "./RunbookCredentialService";
15
+ import RunnerService, { Service as RunnerServiceClass } from "./RunnerService";
16
+ import UserService from "./UserService";
13
17
  import Model from "../../Models/DatabaseModels/KubernetesCluster";
18
+ import AutoRemediationSuggestionStatus from "../../Types/AutoRemediation/AutoRemediationSuggestionStatus";
19
+ import { AiRemediationCommandExecutionStatus, AiRemediationCommandPlanUtil, } from "../../Types/AutoRemediation/AiRemediationCommandPlan";
20
+ import KubectlPolicy, { KUBECTL_ALLOWLIST_MAX_PATTERNS, } from "../../Utils/AiRemediation/KubectlPolicy";
21
+ import RelationIdUtil from "../Utils/Database/RelationIdUtil";
22
+ import { holdsAnyPermission } from "../Utils/Runbook/RunbookExecutePermission";
23
+ import BadDataException from "../../Types/Exception/BadDataException";
24
+ import NotAuthorizedException from "../../Types/Exception/NotAuthorizedException";
25
+ import { KubernetesAiRemediationMode, isUnattendedRemediationMode, } from "../../Types/Kubernetes/KubernetesClusterAiAccess";
26
+ import { KUBERNETES_AI_ACCESS_ADMIN_PERMISSIONS, KUBERNETES_AI_ACCESS_CREDENTIAL_PERMISSIONS, } from "../../Types/Kubernetes/KubernetesClusterAiAccessPermissions";
27
+ import { PermissionHelper } from "../../Types/Permission";
28
+ import RunbookCredentialType from "../../Types/Runbook/RunbookCredentialType";
14
29
  import KubernetesClusterFeedService from "./KubernetesClusterFeedService";
15
30
  import { KubernetesClusterFeedEventType } from "../../Models/DatabaseModels/KubernetesClusterFeed";
16
31
  import ResourceFeedUtil from "../Utils/ResourceFeed/ResourceFeedUtil";
@@ -30,11 +45,703 @@ const LAST_SEEN_CACHE_NAMESPACE = "k8s-cluster-last-seen";
30
45
  const LAST_SEEN_THROTTLE_SECONDS = 60;
31
46
  const LABELS_APPLIED_CACHE_NAMESPACE = "k8s-cluster-labels-applied";
32
47
  const LABELS_APPLIED_CACHE_TTL_SECONDS = 60;
48
+ /*
49
+ * The two spellings each AI-access relation can arrive under: the FK column
50
+ * server-side callers write, and the relation object the dashboard's forms
51
+ * post. See RelationIdUtil for why a hook must read both.
52
+ */
53
+ const AI_ACCESS_RUNNER_KEYS = [
54
+ "aiAccessRunnerId",
55
+ "aiAccessRunner",
56
+ ];
57
+ const AI_ACCESS_CREDENTIAL_KEYS = [
58
+ "aiAccessCredentialId",
59
+ "aiAccessCredential",
60
+ ];
61
+ /*
62
+ * Every AI access setting an operator can write — on the cluster's AI page,
63
+ * through the API or through Terraform. A non-root write of any of them is
64
+ * checked against who may loosen AI access, marks the cluster as
65
+ * AI-configured (aiAccessConfiguredAt) and is recorded on the cluster feed.
66
+ */
67
+ export const AI_ACCESS_SETTING_KEYS = [
68
+ ...AI_ACCESS_RUNNER_KEYS,
69
+ ...AI_ACCESS_CREDENTIAL_KEYS,
70
+ "isAiInvestigationEnabled",
71
+ "aiRemediationMode",
72
+ "aiKubectlCommandAllowlist",
73
+ ];
74
+ /*
75
+ * What the binding checks read off a Runner and a credential: whether the
76
+ * Runner is a kubernetes-agent row (and whose), and which Runners the
77
+ * credential is assigned to.
78
+ */
79
+ const AI_ACCESS_BINDING_RUNNER_SELECT = {
80
+ _id: true,
81
+ name: true,
82
+ hostInfo: true,
83
+ };
84
+ const AI_ACCESS_BINDING_CREDENTIAL_SELECT = {
85
+ _id: true,
86
+ credentialType: true,
87
+ runners: { _id: true },
88
+ };
89
+ const KUBECTL_ALLOWLIST_SHAPE_HINT = 'The kubectl allowlist must be a JSON array of kubectl command patterns, for example ["kubectl set image deployment/web * -n web"].';
90
+ /*
91
+ * How much each remediation mode lets OneUptime AI do without a human,
92
+ * least first. Automatic runs a strict subset of what Bypass approval runs
93
+ * (safe changes and allowlisted shapes, never an unlisted riskier change),
94
+ * so moving from Bypass approval to Automatic is a tightening.
95
+ */
96
+ const REMEDIATION_MODES_BY_AUTONOMY = [
97
+ KubernetesAiRemediationMode.Disabled,
98
+ KubernetesAiRemediationMode.RequireApproval,
99
+ KubernetesAiRemediationMode.Automatic,
100
+ KubernetesAiRemediationMode.BypassApproval,
101
+ ];
102
+ // The AI page's short name for each mode, used on the cluster feed.
103
+ const REMEDIATION_MODE_FEED_LABELS = {
104
+ [KubernetesAiRemediationMode.Disabled]: "Off",
105
+ [KubernetesAiRemediationMode.RequireApproval]: "Ask for approval",
106
+ [KubernetesAiRemediationMode.Automatic]: "Automatic",
107
+ [KubernetesAiRemediationMode.BypassApproval]: "Bypass approval",
108
+ };
109
+ /*
110
+ * One answer for "no such credential in this project" and "not a Kubernetes
111
+ * credential": a caller who may not read credentials must not be able to
112
+ * tell the two apart and so learn which ids exist and what type they are.
113
+ */
114
+ export const AI_ACCESS_CREDENTIAL_REFUSAL = "Credential not found, or it is not a Kubernetes credential in this project. The AI access credential must be a Kubernetes credential (API server URL and ServiceAccount token) that belongs to this project.";
115
+ export function getAiAccessAdminRefusal() {
116
+ return `You need one of these permissions to let OneUptime AI do more on a Kubernetes cluster (switch AI remediation to Automatic or Bypass approval, add kubectl allowlist patterns, or bind a Runner or credential): ${PermissionHelper.getPermissionTitles(KUBERNETES_AI_ACCESS_ADMIN_PERMISSIONS).join(", ")}. Anyone who may edit the cluster can still turn AI remediation off or back to Ask for approval, remove allowlist patterns, and clear the Runner or credential.`;
117
+ }
118
+ export function getAiAccessCredentialRefusal() {
119
+ return `Binding a Kubernetes credential to a cluster also needs permission to read credentials. You need one of these permissions: ${PermissionHelper.getPermissionTitles(KUBERNETES_AI_ACCESS_CREDENTIAL_PERMISSIONS).join(", ")}.`;
120
+ }
121
+ // What a cluster that was never AI-configured has: the column defaults.
122
+ const NEVER_CONFIGURED_AI_ACCESS = {
123
+ isAiInvestigationEnabled: false,
124
+ aiRemediationMode: KubernetesAiRemediationMode.Disabled,
125
+ aiKubectlCommandAllowlist: [],
126
+ aiAccessRunnerId: null,
127
+ aiAccessCredentialId: null,
128
+ };
129
+ function getClusterDeleteCarryForward(carryForward) {
130
+ if (carryForward &&
131
+ typeof carryForward === "object" &&
132
+ "inFlightRounds" in carryForward) {
133
+ return carryForward;
134
+ }
135
+ return null;
136
+ }
33
137
  export class Service extends DatabaseService {
34
138
  constructor() {
35
139
  super(Model);
36
140
  }
141
+ async onBeforeCreate(createBy) {
142
+ var _a;
143
+ const projectId = createBy.data.projectId ||
144
+ ((_a = createBy.data.project) === null || _a === void 0 ? void 0 : _a.id) ||
145
+ createBy.props.tenantId ||
146
+ undefined;
147
+ const data = createBy.data;
148
+ this.validateAiRemediationSettings(data);
149
+ /*
150
+ * The AI columns' create ACLs are empty, so a user's create cannot carry
151
+ * them today and this is defence in depth: were one ever opened, a new
152
+ * cluster starts from the never-configured defaults, and anything above
153
+ * them is a loosening like any other.
154
+ */
155
+ if (!createBy.props.isRoot && !createBy.props.isMasterAdmin) {
156
+ this.assertMayChangeAiAccess({
157
+ data,
158
+ props: createBy.props,
159
+ current: [Object.assign(Object.assign({}, NEVER_CONFIGURED_AI_ACCESS), { projectId })],
160
+ });
161
+ }
162
+ const loaded = await this.validateAiAccessBindingsBelongToProject({
163
+ data,
164
+ projectId,
165
+ });
166
+ // An operator's binding must also be a pair that can work.
167
+ if (!createBy.props.isRoot) {
168
+ await this.validateAiAccessBindingPairs({
169
+ data,
170
+ clusters: [
171
+ Object.assign(Object.assign({}, NEVER_CONFIGURED_AI_ACCESS), { projectId, clusterIdentifier: typeof data["clusterIdentifier"] === "string"
172
+ ? data["clusterIdentifier"]
173
+ : undefined }),
174
+ ],
175
+ loaded,
176
+ });
177
+ }
178
+ return {
179
+ createBy,
180
+ carryForward: {
181
+ writesAiAccessSettings: !createBy.props.isRoot && this.isAiAccessSettingWritten(data),
182
+ },
183
+ };
184
+ }
185
+ async onBeforeUpdate(updateBy) {
186
+ const data = (updateBy.data || {});
187
+ this.validateAiRemediationSettings(data);
188
+ /*
189
+ * An operator's write of an AI access setting is gated, marked and
190
+ * recorded. Root writes are the server's own — the in-cluster Runner's
191
+ * registration (which writes its own feed item and marker) and the
192
+ * outcome bookkeeping after each kubectl command — and are none of the
193
+ * three.
194
+ */
195
+ let carryForward = null;
196
+ if (!updateBy.props.isRoot && this.isAiAccessSettingWritten(data)) {
197
+ const previousAiAccessSettings = await this.getAiAccessSettingsForUpdateQuery(updateBy);
198
+ if (!updateBy.props.isMasterAdmin) {
199
+ this.assertMayChangeAiAccess({
200
+ data,
201
+ props: updateBy.props,
202
+ current: Object.values(previousAiAccessSettings),
203
+ });
204
+ }
205
+ carryForward = { previousAiAccessSettings };
206
+ }
207
+ if (RelationIdUtil.isWritten(Object.keys(data), [
208
+ ...AI_ACCESS_RUNNER_KEYS,
209
+ ...AI_ACCESS_CREDENTIAL_KEYS,
210
+ ])) {
211
+ /*
212
+ * Root/API updates do not always carry a tenantId, so fall back to
213
+ * the project of each cluster the query actually matches — a Runner
214
+ * must belong to every one of them.
215
+ */
216
+ const projectIds = updateBy.props.tenantId
217
+ ? [updateBy.props.tenantId]
218
+ : await this.getProjectIdsForUpdateQuery(updateBy);
219
+ const loaded = {
220
+ runners: new Map(),
221
+ credentials: new Map(),
222
+ };
223
+ for (const projectId of projectIds) {
224
+ await this.validateAiAccessBindingsBelongToProject({
225
+ data,
226
+ projectId,
227
+ loaded,
228
+ });
229
+ }
230
+ /*
231
+ * Nothing matched: there is no project to check against, and the
232
+ * update will write nothing — unless the query was empty, which
233
+ * would never happen through updateOneById. Fail closed on a
234
+ * binding that cannot be checked.
235
+ */
236
+ if (projectIds.length === 0) {
237
+ await this.validateAiAccessBindingsBelongToProject({
238
+ data,
239
+ projectId: undefined,
240
+ });
241
+ }
242
+ /*
243
+ * An operator's binding must also be a pair that can work, judged
244
+ * per cluster against what it is bound to now (read above). The
245
+ * server's own writes — registration binds this cluster's agent Runner
246
+ * and clears the credential — are not operator choices.
247
+ */
248
+ if (carryForward) {
249
+ await this.validateAiAccessBindingPairs({
250
+ data,
251
+ clusters: Object.values(carryForward.previousAiAccessSettings),
252
+ loaded,
253
+ });
254
+ }
255
+ }
256
+ return { updateBy, carryForward };
257
+ }
258
+ /*
259
+ * A cluster-level AI remediation round (a suggestion the cluster's mode
260
+ * produced, not a rule) still Planning or waiting in Suggested for the
261
+ * cluster being deleted can never finish: its kubectl names a cluster
262
+ * that is about to be gone, and the foreign key nulls its link. Read here,
263
+ * before the delete, which ones there are; settled in onDeleteSuccess for
264
+ * the clusters that were actually deleted (the delete may still be
265
+ * refused after this hook runs).
266
+ */
267
+ async onBeforeDelete(deleteBy) {
268
+ let inFlightRounds = [];
269
+ const clusterNames = {};
270
+ try {
271
+ const clusters = await this.findBy({
272
+ query: Object.assign(Object.assign({}, deleteBy.query), (deleteBy.props.tenantId
273
+ ? { projectId: deleteBy.props.tenantId }
274
+ : {})),
275
+ select: { _id: true, name: true, clusterIdentifier: true },
276
+ limit: LIMIT_MAX,
277
+ skip: 0,
278
+ props: { isRoot: true },
279
+ });
280
+ const clusterIds = [];
281
+ for (const cluster of clusters) {
282
+ if (cluster.id) {
283
+ clusterIds.push(cluster.id);
284
+ clusterNames[cluster.id.toString()] =
285
+ cluster.name || cluster.clusterIdentifier || "this cluster";
286
+ }
287
+ }
288
+ if (clusterIds.length > 0) {
289
+ inFlightRounds = await AutoRemediationSuggestionService.findBy({
290
+ query: {
291
+ kubernetesClusterId: QueryHelper.any(clusterIds),
292
+ status: QueryHelper.any([
293
+ AutoRemediationSuggestionStatus.Planning,
294
+ AutoRemediationSuggestionStatus.Suggested,
295
+ ]),
296
+ },
297
+ select: {
298
+ _id: true,
299
+ status: true,
300
+ kubernetesClusterId: true,
301
+ rationaleMarkdown: true,
302
+ commandPlan: true,
303
+ },
304
+ limit: LIMIT_MAX,
305
+ skip: 0,
306
+ props: { isRoot: true },
307
+ });
308
+ }
309
+ }
310
+ catch (error) {
311
+ /*
312
+ * Best effort: a failed read must not block deleting the cluster;
313
+ * the rounds then fail on their next command as the cluster is gone.
314
+ */
315
+ logger.error(`KubernetesClusterService: could not read the in-flight AI remediation rounds of the cluster(s) being deleted: ${error}`);
316
+ }
317
+ const carryForward = {
318
+ inFlightRounds,
319
+ clusterNames,
320
+ };
321
+ return { deleteBy, carryForward };
322
+ }
323
+ async onDeleteSuccess(onDelete, deletedItemIds) {
324
+ var _a;
325
+ const carryForward = getClusterDeleteCarryForward(onDelete.carryForward);
326
+ if (carryForward && carryForward.inFlightRounds.length > 0) {
327
+ const deleted = new Set(deletedItemIds.map((id) => {
328
+ return id.toString();
329
+ }));
330
+ for (const suggestion of carryForward.inFlightRounds) {
331
+ const clusterId = ((_a = suggestion.kubernetesClusterId) === null || _a === void 0 ? void 0 : _a.toString()) || "";
332
+ if (!deleted.has(clusterId)) {
333
+ continue;
334
+ }
335
+ await this.settleRoundOfDeletedCluster({
336
+ suggestion,
337
+ clusterName: carryForward.clusterNames[clusterId] || "this cluster",
338
+ deletedByUserId: onDelete.deleteBy.props.userId,
339
+ });
340
+ }
341
+ }
342
+ return onDelete;
343
+ }
344
+ /*
345
+ * Settle one in-flight cluster-level round of a deleted cluster the way a
346
+ * human dismissal settles it (the conditional status transition, so a
347
+ * planner finishing at the same moment loses cleanly and writes nothing),
348
+ * with a note on the suggestion saying why — and, for a round that had
349
+ * already run commands, that those changes were made and nothing was
350
+ * rolled back. Best effort: a settle that fails must not fail the delete
351
+ * that already happened.
352
+ */
353
+ async settleRoundOfDeletedCluster(data) {
354
+ var _a;
355
+ const { suggestion } = data;
356
+ try {
357
+ const plan = AiRemediationCommandPlanUtil.parse(suggestion.commandPlan);
358
+ // A Skipped command never ran; any other execution record may have.
359
+ const executedCount = ((plan === null || plan === void 0 ? void 0 : plan.commands) || []).filter((command) => {
360
+ return (command.execution !== undefined &&
361
+ command.execution.status !==
362
+ AiRemediationCommandExecutionStatus.Skipped);
363
+ }).length;
364
+ const note = executedCount > 0
365
+ ? `**Dismissed: the Kubernetes cluster "${data.clusterName}" this remediation was for was deleted.** ${executedCount} command(s) had already run on it before; nothing was rolled back and no further command will run.`
366
+ : `**Dismissed: the Kubernetes cluster "${data.clusterName}" this remediation was for was deleted.** None of its kubectl commands ran, and none will.`;
367
+ await AutoRemediationSuggestionService.attemptStatusTransition({
368
+ suggestionId: suggestion.id,
369
+ fromStatus: suggestion.status,
370
+ set: Object.assign(Object.assign({ status: AutoRemediationSuggestionStatus.Dismissed, dismissedAt: OneUptimeDate.getCurrentDate() }, (data.deletedByUserId
371
+ ? { dismissedByUserId: data.deletedByUserId.toString() }
372
+ : {})), { rationaleMarkdown: suggestion.rationaleMarkdown
373
+ ? `${note}\n\n${suggestion.rationaleMarkdown}`
374
+ : note }),
375
+ });
376
+ }
377
+ catch (error) {
378
+ logger.error(`KubernetesClusterService: could not settle AI remediation suggestion ${(_a = suggestion.id) === null || _a === void 0 ? void 0 : _a.toString()} of a deleted cluster: ${error}`);
379
+ }
380
+ }
381
+ isAiAccessSettingWritten(data) {
382
+ return isAnyKeyWritten(data, AI_ACCESS_SETTING_KEYS);
383
+ }
384
+ /*
385
+ * aiRemediationMode is a plain text column and aiKubectlCommandAllowlist
386
+ * untyped JSON, and both of their readers fail safe: an unknown mode reads
387
+ * as Disabled and an unusable pattern as no pattern. Accepting such a value
388
+ * would answer an API or Terraform write with success for a setting that
389
+ * never takes effect (and shows no drift), so refuse it here — and store
390
+ * the allowlist in the one shape its readers expect.
391
+ */
392
+ validateAiRemediationSettings(data) {
393
+ const mode = data["aiRemediationMode"];
394
+ if (mode !== undefined &&
395
+ !Object.values(KubernetesAiRemediationMode).includes(mode)) {
396
+ throw new BadDataException(`AI remediation mode must be one of ${Object.values(KubernetesAiRemediationMode).join(", ")} (got ${JSON.stringify(mode)}).`);
397
+ }
398
+ if (data["aiKubectlCommandAllowlist"] !== undefined) {
399
+ data["aiKubectlCommandAllowlist"] = normalizeKubectlAllowlistForWrite(data["aiKubectlCommandAllowlist"]);
400
+ }
401
+ }
402
+ /*
403
+ * A cluster's AI mode does the job of a FullAuto AutoRemediationRule with
404
+ * no rule row, so making AI do MORE on a cluster takes the same
405
+ * permissions as authoring such a rule (KUBERNETES_AI_ACCESS_ADMIN_
406
+ * PERMISSIONS), and binding a credential additionally takes the right to
407
+ * read credentials — the rule the dashboard's picker applies, now enforced
408
+ * where it cannot be skipped. The column ACLs stay open to every cluster
409
+ * editor on purpose: a column ACL cannot say "tightening is free", and
410
+ * turning AI remediation off must never need more than editing the
411
+ * cluster.
412
+ *
413
+ * `current` holds the settings of every cluster the write reaches. When it
414
+ * matched none, the write is judged against the never-configured defaults
415
+ * in the caller's tenant, so the answer does not depend on whether the id
416
+ * exists; with no project to check against at all it fails closed.
417
+ */
418
+ assertMayChangeAiAccess(data) {
419
+ const baselines = data.current.length > 0
420
+ ? data.current
421
+ : [Object.assign(Object.assign({}, NEVER_CONFIGURED_AI_ACCESS), { projectId: data.props.tenantId })];
422
+ for (const baseline of baselines) {
423
+ const loosening = this.getAiAccessLoosening(data.data, baseline);
424
+ if (!loosening.loosens) {
425
+ continue;
426
+ }
427
+ if (!baseline.projectId ||
428
+ !holdsAnyPermission({
429
+ props: data.props,
430
+ projectId: baseline.projectId,
431
+ allowed: KUBERNETES_AI_ACCESS_ADMIN_PERMISSIONS,
432
+ })) {
433
+ throw new NotAuthorizedException(getAiAccessAdminRefusal());
434
+ }
435
+ if (loosening.bindsCredential &&
436
+ !holdsAnyPermission({
437
+ props: data.props,
438
+ projectId: baseline.projectId,
439
+ allowed: KUBERNETES_AI_ACCESS_CREDENTIAL_PERMISSIONS,
440
+ })) {
441
+ throw new NotAuthorizedException(getAiAccessCredentialRefusal());
442
+ }
443
+ }
444
+ }
445
+ /*
446
+ * Does this write let AI do more on a cluster whose settings are
447
+ * `current`? Only a real change counts: the AI page posts every field of
448
+ * its form, so an editor who only flips the investigation switch re-posts
449
+ * an unchanged mode, allowlist and binding, and must not be refused for
450
+ * settings someone else chose.
451
+ *
452
+ * - mode: moving UP to Automatic or Bypass approval (Bypass approval ->
453
+ * Automatic is a tightening);
454
+ * - allowlist: adding a pattern the cluster did not already have
455
+ * (removing patterns, or clearing the list, tightens);
456
+ * - Runner or credential: binding one other than the current one
457
+ * (clearing tightens).
458
+ *
459
+ * `data` has been through validateAiRemediationSettings, so the mode is a
460
+ * known value and the allowlist a trimmed array or null.
461
+ */
462
+ getAiAccessLoosening(data, current) {
463
+ let loosens = false;
464
+ let bindsCredential = false;
465
+ const mode = data["aiRemediationMode"];
466
+ if (mode !== undefined &&
467
+ isUnattendedRemediationMode(mode) &&
468
+ REMEDIATION_MODES_BY_AUTONOMY.indexOf(mode) >
469
+ REMEDIATION_MODES_BY_AUTONOMY.indexOf(current.aiRemediationMode)) {
470
+ loosens = true;
471
+ }
472
+ if (data["aiKubectlCommandAllowlist"] !== undefined) {
473
+ const patterns = data["aiKubectlCommandAllowlist"] || [];
474
+ if (patterns.some((pattern) => {
475
+ return !current.aiKubectlCommandAllowlist.includes(pattern);
476
+ })) {
477
+ loosens = true;
478
+ }
479
+ }
480
+ const runnerId = RelationIdUtil.readConsistent(data, AI_ACCESS_RUNNER_KEYS, "AI access Runner");
481
+ if (runnerId && runnerId.toString() !== current.aiAccessRunnerId) {
482
+ loosens = true;
483
+ }
484
+ const credentialId = RelationIdUtil.readConsistent(data, AI_ACCESS_CREDENTIAL_KEYS, "AI access credential");
485
+ if (credentialId &&
486
+ credentialId.toString() !== current.aiAccessCredentialId) {
487
+ loosens = true;
488
+ bindsCredential = true;
489
+ }
490
+ return { loosens, bindsCredential };
491
+ }
492
+ /*
493
+ * The AI access settings of every cluster an operator's update reaches,
494
+ * read before the write. onBeforeUpdate runs before the framework scopes
495
+ * the query to the caller's project, so scope it here: a caller must
496
+ * never learn anything about, or be judged against, another project's
497
+ * cluster.
498
+ */
499
+ async getAiAccessSettingsForUpdateQuery(updateBy) {
500
+ var _a, _b, _c, _d;
501
+ const clusters = await this.findBy({
502
+ query: Object.assign(Object.assign({}, updateBy.query), (updateBy.props.tenantId
503
+ ? { projectId: updateBy.props.tenantId }
504
+ : {})),
505
+ select: {
506
+ _id: true,
507
+ projectId: true,
508
+ clusterIdentifier: true,
509
+ isAiInvestigationEnabled: true,
510
+ aiRemediationMode: true,
511
+ aiKubectlCommandAllowlist: true,
512
+ aiAccessRunnerId: true,
513
+ aiAccessCredentialId: true,
514
+ },
515
+ limit: LIMIT_MAX,
516
+ skip: 0,
517
+ props: {
518
+ isRoot: true,
519
+ },
520
+ });
521
+ const settings = {};
522
+ for (const cluster of clusters) {
523
+ const clusterId = ((_a = cluster.id) === null || _a === void 0 ? void 0 : _a.toString()) || ((_b = cluster._id) === null || _b === void 0 ? void 0 : _b.toString());
524
+ if (!clusterId) {
525
+ continue;
526
+ }
527
+ settings[clusterId] = {
528
+ projectId: cluster.projectId,
529
+ clusterIdentifier: cluster.clusterIdentifier,
530
+ isAiInvestigationEnabled: cluster.isAiInvestigationEnabled === true,
531
+ aiRemediationMode: readStoredRemediationMode(cluster.aiRemediationMode),
532
+ aiKubectlCommandAllowlist: readStoredKubectlAllowlist(cluster.aiKubectlCommandAllowlist),
533
+ aiAccessRunnerId: ((_c = cluster.aiAccessRunnerId) === null || _c === void 0 ? void 0 : _c.toString()) || null,
534
+ aiAccessCredentialId: ((_d = cluster.aiAccessCredentialId) === null || _d === void 0 ? void 0 : _d.toString()) || null,
535
+ };
536
+ }
537
+ return settings;
538
+ }
539
+ /*
540
+ * aiAccessRunnerId / aiAccessCredentialId are editable through ordinary
541
+ * CRUD by every member who may edit a cluster, and nothing in the
542
+ * framework checks that a ManyToOne target belongs to the row's own
543
+ * project (only the tenant relation itself is checked). Unchecked, a
544
+ * member of project A could point a cluster at project B's Runner or
545
+ * credential — and then read that Runner's name, liveness and status,
546
+ * or that credential's name and type, through the relation join, and use
547
+ * the FK as an existence oracle for foreign ids. Same class of guard as
548
+ * MonitorProbeService ("Probe not found or it does not belong to this
549
+ * project.") and IoTDeviceCredentialService.
550
+ *
551
+ * WHO may bind is decided before this runs (assertMayChangeAiAccess); this
552
+ * only decides WHAT may be bound. Clearing a binding (null) is always
553
+ * allowed.
554
+ *
555
+ * Returns the rows it loaded (with what validateAiAccessBindingPairs
556
+ * reads off them), so the pair check does not look them up again.
557
+ */
558
+ async validateAiAccessBindingsBelongToProject(data) {
559
+ const loaded = data.loaded || {
560
+ runners: new Map(),
561
+ credentials: new Map(),
562
+ };
563
+ const runnerId = RelationIdUtil.readConsistent(data.data, AI_ACCESS_RUNNER_KEYS, "AI access Runner");
564
+ const credentialId = RelationIdUtil.readConsistent(data.data, AI_ACCESS_CREDENTIAL_KEYS, "AI access credential");
565
+ if (!runnerId && !credentialId) {
566
+ return loaded;
567
+ }
568
+ if (!data.projectId) {
569
+ throw new BadDataException("The project of this Kubernetes cluster could not be resolved, so its AI access Runner or credential cannot be checked.");
570
+ }
571
+ if (runnerId) {
572
+ const runner = await RunnerService.findOneBy({
573
+ query: {
574
+ _id: runnerId.toString(),
575
+ projectId: data.projectId,
576
+ },
577
+ select: AI_ACCESS_BINDING_RUNNER_SELECT,
578
+ props: { isRoot: true },
579
+ });
580
+ if (!runner) {
581
+ throw new BadDataException("Runner not found or it does not belong to this project.");
582
+ }
583
+ loaded.runners.set(runnerId.toString(), runner);
584
+ }
585
+ if (credentialId) {
586
+ const credential = await RunbookCredentialService.findOneBy({
587
+ query: {
588
+ _id: credentialId.toString(),
589
+ projectId: data.projectId,
590
+ },
591
+ select: AI_ACCESS_BINDING_CREDENTIAL_SELECT,
592
+ props: { isRoot: true },
593
+ });
594
+ if (!credential ||
595
+ credential.credentialType !== RunbookCredentialType.Kubernetes) {
596
+ throw new BadDataException(AI_ACCESS_CREDENTIAL_REFUSAL);
597
+ }
598
+ loaded.credentials.set(credentialId.toString(), credential);
599
+ }
600
+ return loaded;
601
+ }
602
+ /*
603
+ * Whether the Runner and credential a write leaves a cluster with can
604
+ * work together — checked for an operator's write (the dashboard no
605
+ * longer offers these pairs, but the API and Terraform can still send
606
+ * them), per cluster the write reaches, and only where the pair actually
607
+ * changes (the AI page re-posts unchanged values):
608
+ *
609
+ * - a kubernetes-agent Runner of ANOTHER cluster is refused: its
610
+ * ServiceAccount reaches only the cluster its pod runs in, and it is
611
+ * never given a credential, so it can never reach this one. This
612
+ * cluster's own agent Runner (by its name for this cluster, or a
613
+ * posture naming it) is of course fine.
614
+ * - a credential together with a kubernetes-agent Runner of another
615
+ * cluster is refused — such a Runner is never handed credential
616
+ * material (this cluster's own agent ignores a credential: in-cluster
617
+ * access wins).
618
+ * - a credential the chosen Runner is not assigned is refused: the claim
619
+ * path resolves a credential only for a Runner it is assigned to, so
620
+ * every command would fail.
621
+ */
622
+ async validateAiAccessBindingPairs(data) {
623
+ var _a, _b;
624
+ const isRunnerWritten = isAnyKeyWritten(data.data, AI_ACCESS_RUNNER_KEYS);
625
+ const isCredentialWritten = isAnyKeyWritten(data.data, AI_ACCESS_CREDENTIAL_KEYS);
626
+ if (!isRunnerWritten && !isCredentialWritten) {
627
+ return;
628
+ }
629
+ const writtenRunnerId = ((_a = RelationIdUtil.readConsistent(data.data, AI_ACCESS_RUNNER_KEYS, "AI access Runner")) === null || _a === void 0 ? void 0 : _a.toString()) || null;
630
+ const writtenCredentialId = ((_b = RelationIdUtil.readConsistent(data.data, AI_ACCESS_CREDENTIAL_KEYS, "AI access credential")) === null || _b === void 0 ? void 0 : _b.toString()) || null;
631
+ for (const cluster of data.clusters) {
632
+ const runnerId = isRunnerWritten
633
+ ? writtenRunnerId
634
+ : cluster.aiAccessRunnerId;
635
+ const credentialId = isCredentialWritten
636
+ ? writtenCredentialId
637
+ : cluster.aiAccessCredentialId;
638
+ const isRunnerChanged = runnerId !== cluster.aiAccessRunnerId;
639
+ const isCredentialChanged = credentialId !== cluster.aiAccessCredentialId;
640
+ if (!runnerId || (!isRunnerChanged && !isCredentialChanged)) {
641
+ continue;
642
+ }
643
+ const runner = await this.loadBindingRunner({
644
+ runnerId,
645
+ projectId: cluster.projectId,
646
+ loaded: data.loaded,
647
+ });
648
+ // A bound Runner that is gone is the Runner delete race: nothing to pair.
649
+ if (!runner) {
650
+ continue;
651
+ }
652
+ const isAgentRunner = RunnerServiceClass.isKubernetesAgentRunnerRow(runner);
653
+ const isThisClustersAgent = RunnerServiceClass.isKubernetesAgentRunnerOfCluster(runner, cluster.clusterIdentifier);
654
+ if (isAgentRunner && !isThisClustersAgent && isRunnerChanged) {
655
+ throw new BadDataException(`Runner "${runner.name}" is the in-cluster Runner the Kubernetes agent chart installed on another cluster. Its ServiceAccount reaches only the cluster its pod runs in, and it is never given a credential, so it cannot run kubectl for this cluster. Install the in-cluster Runner on this cluster with --set aiAccess.enabled=true, or bind a Runner you created under Project Settings → Runners together with a Kubernetes credential for this cluster.`);
656
+ }
657
+ if (!credentialId || isThisClustersAgent) {
658
+ continue;
659
+ }
660
+ if (isAgentRunner) {
661
+ throw new BadDataException(`Runner "${runner.name}" is an in-cluster Runner the Kubernetes agent chart installed: it runs kubectl with its own ServiceAccount only and is never given a credential. Clear the credential, or bind a Runner you created under Project Settings → Runners that the credential is assigned to.`);
662
+ }
663
+ const credential = await this.loadBindingCredential({
664
+ credentialId,
665
+ projectId: cluster.projectId,
666
+ loaded: data.loaded,
667
+ });
668
+ // A bound credential that is gone is reported by the readiness check.
669
+ if (!credential) {
670
+ continue;
671
+ }
672
+ const isAssigned = (credential.runners || []).some((assigned) => {
673
+ var _a, _b;
674
+ return ((((_a = assigned.id) === null || _a === void 0 ? void 0 : _a.toString()) || ((_b = assigned._id) === null || _b === void 0 ? void 0 : _b.toString())) === runnerId);
675
+ });
676
+ if (!isAssigned) {
677
+ throw new BadDataException(`The Kubernetes credential is not assigned to Runner "${runner.name}", so that Runner could never use it for this cluster (a credential is handed only to the Runners it is assigned to). Assign it to the Runner under Project Settings → Runner Credentials first, or choose a credential that is assigned to it.`);
678
+ }
679
+ }
680
+ }
681
+ async loadBindingRunner(data) {
682
+ const cached = data.loaded.runners.get(data.runnerId);
683
+ if (cached) {
684
+ return cached;
685
+ }
686
+ const runner = await RunnerService.findOneBy({
687
+ query: Object.assign({ _id: data.runnerId }, (data.projectId ? { projectId: data.projectId } : {})),
688
+ select: AI_ACCESS_BINDING_RUNNER_SELECT,
689
+ props: { isRoot: true },
690
+ });
691
+ if (runner) {
692
+ data.loaded.runners.set(data.runnerId, runner);
693
+ }
694
+ return runner;
695
+ }
696
+ async loadBindingCredential(data) {
697
+ const cached = data.loaded.credentials.get(data.credentialId);
698
+ if (cached) {
699
+ return cached;
700
+ }
701
+ const credential = await RunbookCredentialService.findOneBy({
702
+ query: Object.assign({ _id: data.credentialId }, (data.projectId ? { projectId: data.projectId } : {})),
703
+ select: AI_ACCESS_BINDING_CREDENTIAL_SELECT,
704
+ props: { isRoot: true },
705
+ });
706
+ if (credential) {
707
+ data.loaded.credentials.set(data.credentialId, credential);
708
+ }
709
+ return credential;
710
+ }
711
+ async getProjectIdsForUpdateQuery(updateBy) {
712
+ const clusters = await this.findBy({
713
+ query: updateBy.query,
714
+ select: {
715
+ projectId: true,
716
+ },
717
+ limit: LIMIT_MAX,
718
+ skip: 0,
719
+ props: {
720
+ isRoot: true,
721
+ },
722
+ });
723
+ const projectIds = {};
724
+ for (const cluster of clusters) {
725
+ if (cluster.projectId) {
726
+ projectIds[cluster.projectId.toString()] = cluster.projectId;
727
+ }
728
+ }
729
+ return Object.values(projectIds);
730
+ }
37
731
  async onCreateSuccess(onCreate, createdItem) {
732
+ var _a;
733
+ /*
734
+ * Decided in onBeforeCreate, from the payload as the caller sent it: by
735
+ * now the saved row carries the column defaults, which would read as an
736
+ * AI access setting on every create.
737
+ */
738
+ if (createdItem.id &&
739
+ ((_a = onCreate.carryForward) === null || _a === void 0 ? void 0 : _a.writesAiAccessSettings) === true) {
740
+ await this.markAiAccessConfigured([createdItem.id]);
741
+ if (this.bindsRunner(onCreate.createBy.data)) {
742
+ await this.markAiAccessRunnerBound([createdItem.id]);
743
+ }
744
+ }
38
745
  if (createdItem.projectId && createdItem.id) {
39
746
  Promise.resolve()
40
747
  .then(async () => {
@@ -327,11 +1034,229 @@ export class Service extends DatabaseService {
327
1034
  });
328
1035
  }
329
1036
  async onUpdateSuccess(onUpdate, updatedItemIds) {
1037
+ const aiAccessWrite = getAiAccessWriteCarryForward(onUpdate.carryForward);
1038
+ /*
1039
+ * The feed items first, fire and forget: the operator's write has
1040
+ * committed, so who changed what AI may do is recorded even when the
1041
+ * marker writes below fail (and the save reports that failure).
1042
+ */
330
1043
  this.writeKubernetesClusterUpdatedFeed(onUpdate, updatedItemIds).catch((error) => {
331
1044
  logger.error(error);
332
1045
  });
1046
+ if (aiAccessWrite) {
1047
+ this.writeAiAccessSettingsChangedFeed({
1048
+ onUpdate,
1049
+ updatedItemIds,
1050
+ previousAiAccessSettings: aiAccessWrite.previousAiAccessSettings,
1051
+ }).catch((error) => {
1052
+ logger.error(error);
1053
+ });
1054
+ }
1055
+ /*
1056
+ * Awaited, unlike the feed: registration reads the markers to tell an
1057
+ * operator's "off" (or a cleared binding) from a cluster nobody ever
1058
+ * configured, so a save that could not record them must not look like
1059
+ * one that did.
1060
+ */
1061
+ if (aiAccessWrite && updatedItemIds.length > 0) {
1062
+ await this.markAiAccessConfigured(updatedItemIds);
1063
+ if (this.bindsRunner(onUpdate.updateBy.data)) {
1064
+ await this.markAiAccessRunnerBound(updatedItemIds);
1065
+ }
1066
+ }
333
1067
  return onUpdate;
334
1068
  }
1069
+ // The write binds a Runner (not merely clears the binding).
1070
+ bindsRunner(data) {
1071
+ return Boolean(data &&
1072
+ RelationIdUtil.readConsistent(data, AI_ACCESS_RUNNER_KEYS, "AI access Runner"));
1073
+ }
1074
+ /*
1075
+ * Set aiAccessRunnerBoundAt on each cluster that does not have it yet —
1076
+ * "a Runner was bound here", never cleared. Registration reads it to leave
1077
+ * a cluster whose binding was later cleared (or whose Runner was deleted)
1078
+ * unbound, while still binding one an operator only configured before
1079
+ * installing the chart. Written as root after the operator's own write
1080
+ * succeeded; the column's update ACL is empty.
1081
+ */
1082
+ async markAiAccessRunnerBound(clusterIds) {
1083
+ await this.updateBy({
1084
+ query: {
1085
+ _id: QueryHelper.any(clusterIds),
1086
+ aiAccessRunnerBoundAt: QueryHelper.isNull(),
1087
+ },
1088
+ data: {
1089
+ aiAccessRunnerBoundAt: OneUptimeDate.getCurrentDate(),
1090
+ },
1091
+ limit: LIMIT_MAX,
1092
+ skip: 0,
1093
+ props: {
1094
+ isRoot: true,
1095
+ },
1096
+ });
1097
+ }
1098
+ /*
1099
+ * Set aiAccessConfiguredAt on each cluster that does not have it yet, and
1100
+ * never touch one that does: the marker records when AI access was FIRST
1101
+ * configured. A server-only column (its update ACL is empty), so it is
1102
+ * written here, as root, after the operator's own write succeeded, rather
1103
+ * than slipped into that write.
1104
+ */
1105
+ async markAiAccessConfigured(clusterIds) {
1106
+ await this.updateBy({
1107
+ query: {
1108
+ _id: QueryHelper.any(clusterIds),
1109
+ aiAccessConfiguredAt: QueryHelper.isNull(),
1110
+ },
1111
+ data: {
1112
+ aiAccessConfiguredAt: OneUptimeDate.getCurrentDate(),
1113
+ },
1114
+ limit: LIMIT_MAX,
1115
+ skip: 0,
1116
+ props: {
1117
+ isRoot: true,
1118
+ },
1119
+ });
1120
+ }
1121
+ /*
1122
+ * Who changed what OneUptime AI may do on a cluster, and when. The generic
1123
+ * "was updated" item only covers MEANINGFUL_UPDATE_COLUMNS (shared by ten
1124
+ * resource types and deliberately left alone), and the registration path
1125
+ * records only its own binds, so without this an operator switching a
1126
+ * production cluster to Bypass approval - or back off - left no trace.
1127
+ *
1128
+ * One item per cluster that actually changed; a save that re-posts
1129
+ * unchanged values (the AI page posts its whole form) records nothing.
1130
+ * API-key and Terraform writes carry no user and are attributed to an API
1131
+ * key rather than dropped.
1132
+ */
1133
+ async writeAiAccessSettingsChangedFeed(data) {
1134
+ var _a;
1135
+ const updateData = (data.onUpdate.updateBy.data ||
1136
+ {});
1137
+ const updatedByUserId = data.onUpdate.updateBy.props.userId || undefined;
1138
+ for (const kubernetesClusterId of data.updatedItemIds) {
1139
+ const previous = data.previousAiAccessSettings[kubernetesClusterId.toString()];
1140
+ const changes = await this.describeAiAccessChanges(updateData, previous);
1141
+ if (changes.length === 0) {
1142
+ continue;
1143
+ }
1144
+ const projectId = (previous === null || previous === void 0 ? void 0 : previous.projectId) ||
1145
+ ((_a = (await this.findOneById({
1146
+ id: kubernetesClusterId,
1147
+ select: { projectId: true },
1148
+ props: { isRoot: true },
1149
+ }))) === null || _a === void 0 ? void 0 : _a.projectId);
1150
+ if (!projectId) {
1151
+ continue;
1152
+ }
1153
+ const userMarkdown = updatedByUserId
1154
+ ? (await UserService.getUserMarkdownString({
1155
+ userId: updatedByUserId,
1156
+ projectId,
1157
+ })) || "A user"
1158
+ : "";
1159
+ const actor = userMarkdown ? `**${userMarkdown}**` : "An API key";
1160
+ /*
1161
+ * Yellow when the change lets AI do more (the same test the permission
1162
+ * check applies), grey when it tightens or only flips investigation.
1163
+ */
1164
+ const displayColor = this.getAiAccessLoosening(updateData, previous || NEVER_CONFIGURED_AI_ACCESS).loosens
1165
+ ? Yellow500
1166
+ : Gray500;
1167
+ const moreInformation = [
1168
+ `**Changed by**: ${userMarkdown || "An API key (no user)"}`,
1169
+ ];
1170
+ const allowlist = updateData["aiKubectlCommandAllowlist"];
1171
+ if (Array.isArray(allowlist) && allowlist.length > 0) {
1172
+ moreInformation.push(`**kubectl allowlist**:\n\n${allowlist
1173
+ .map((pattern) => {
1174
+ return `- \`${pattern.replace(/`/g, "'")}\``;
1175
+ })
1176
+ .join("\n")}`);
1177
+ }
1178
+ await KubernetesClusterFeedService.createKubernetesClusterFeedItem({
1179
+ kubernetesClusterId,
1180
+ projectId,
1181
+ kubernetesClusterFeedEventType: KubernetesClusterFeedEventType.KubernetesClusterUpdated,
1182
+ displayColor,
1183
+ feedInfoInMarkdown: `🤖 ${actor} changed what OneUptime AI may do on ${await this.getKubernetesClusterMarkdownLink(projectId, kubernetesClusterId)}:\n\n${changes
1184
+ .map((change) => {
1185
+ return `- ${change}`;
1186
+ })
1187
+ .join("\n")}`,
1188
+ moreInformationInMarkdown: moreInformation.join("\n\n"),
1189
+ userId: updatedByUserId,
1190
+ });
1191
+ }
1192
+ }
1193
+ /*
1194
+ * One line per AI access setting this write actually changed, old -> new.
1195
+ * With no `previous` (the cluster was not among those read before the
1196
+ * write) every written setting is reported as set, without a "from".
1197
+ *
1198
+ * A credential is reported without its name: the feed is readable by
1199
+ * everyone who may read the cluster, credentials only by those who may
1200
+ * read credentials.
1201
+ */
1202
+ async describeAiAccessChanges(updateData, previous) {
1203
+ const changes = [];
1204
+ if (updateData["isAiInvestigationEnabled"] !== undefined) {
1205
+ const isEnabled = updateData["isAiInvestigationEnabled"] === true;
1206
+ if (!previous || previous.isAiInvestigationEnabled !== isEnabled) {
1207
+ changes.push(`AI investigation with kubectl turned **${isEnabled ? "on" : "off"}**`);
1208
+ }
1209
+ }
1210
+ if (updateData["aiRemediationMode"] !== undefined) {
1211
+ const mode = readStoredRemediationMode(updateData["aiRemediationMode"]);
1212
+ if (!previous) {
1213
+ changes.push(`AI remediation set to **${REMEDIATION_MODE_FEED_LABELS[mode]}**`);
1214
+ }
1215
+ else if (previous.aiRemediationMode !== mode) {
1216
+ changes.push(`AI remediation changed from **${REMEDIATION_MODE_FEED_LABELS[previous.aiRemediationMode]}** to **${REMEDIATION_MODE_FEED_LABELS[mode]}**`);
1217
+ }
1218
+ }
1219
+ if (updateData["aiKubectlCommandAllowlist"] !== undefined) {
1220
+ const patterns = readStoredKubectlAllowlist(updateData["aiKubectlCommandAllowlist"]);
1221
+ if (!previous ||
1222
+ !isSameKubectlAllowlist(previous.aiKubectlCommandAllowlist, patterns)) {
1223
+ changes.push(patterns.length === 0
1224
+ ? "kubectl allowlist cleared"
1225
+ : `kubectl allowlist changed to ${describePatternCount(patterns.length)}${previous
1226
+ ? ` (was ${describePatternCount(previous.aiKubectlCommandAllowlist.length)})`
1227
+ : ""}`);
1228
+ }
1229
+ }
1230
+ if (isAnyKeyWritten(updateData, AI_ACCESS_RUNNER_KEYS)) {
1231
+ const runnerId = RelationIdUtil.readConsistent(updateData, AI_ACCESS_RUNNER_KEYS, "AI access Runner");
1232
+ if (!previous ||
1233
+ previous.aiAccessRunnerId !== ((runnerId === null || runnerId === void 0 ? void 0 : runnerId.toString()) || null)) {
1234
+ if (runnerId) {
1235
+ const runner = await RunnerService.findOneById({
1236
+ id: runnerId,
1237
+ select: { name: true },
1238
+ props: { isRoot: true },
1239
+ });
1240
+ changes.push(`Runner **${(runner === null || runner === void 0 ? void 0 : runner.name) || runnerId.toString()}** bound to run kubectl`);
1241
+ }
1242
+ else {
1243
+ changes.push("Runner cleared, so AI runs no kubectl on this cluster");
1244
+ }
1245
+ }
1246
+ }
1247
+ if (isAnyKeyWritten(updateData, AI_ACCESS_CREDENTIAL_KEYS)) {
1248
+ const credentialId = RelationIdUtil.readConsistent(updateData, AI_ACCESS_CREDENTIAL_KEYS, "AI access credential");
1249
+ if (!previous ||
1250
+ previous.aiAccessCredentialId !== ((credentialId === null || credentialId === void 0 ? void 0 : credentialId.toString()) || null)) {
1251
+ changes.push(credentialId
1252
+ ? (previous === null || previous === void 0 ? void 0 : previous.aiAccessCredentialId)
1253
+ ? "Kubernetes credential changed"
1254
+ : "Kubernetes credential bound"
1255
+ : "Kubernetes credential cleared");
1256
+ }
1257
+ }
1258
+ return changes;
1259
+ }
335
1260
  async writeKubernetesClusterUpdatedFeed(onUpdate, updatedItemIds) {
336
1261
  const updateData = onUpdate.updateBy
337
1262
  .data;
@@ -397,6 +1322,54 @@ export class Service extends DatabaseService {
397
1322
  }
398
1323
  }
399
1324
  }
1325
+ __decorate([
1326
+ CaptureSpan(),
1327
+ __metadata("design:type", Function),
1328
+ __metadata("design:paramtypes", [Object]),
1329
+ __metadata("design:returntype", Promise)
1330
+ ], Service.prototype, "onBeforeCreate", null);
1331
+ __decorate([
1332
+ CaptureSpan(),
1333
+ __metadata("design:type", Function),
1334
+ __metadata("design:paramtypes", [Object]),
1335
+ __metadata("design:returntype", Promise)
1336
+ ], Service.prototype, "onBeforeUpdate", null);
1337
+ __decorate([
1338
+ CaptureSpan(),
1339
+ __metadata("design:type", Function),
1340
+ __metadata("design:paramtypes", [Object]),
1341
+ __metadata("design:returntype", Promise)
1342
+ ], Service.prototype, "onBeforeDelete", null);
1343
+ __decorate([
1344
+ CaptureSpan(),
1345
+ __metadata("design:type", Function),
1346
+ __metadata("design:paramtypes", [Object, Array]),
1347
+ __metadata("design:returntype", Promise)
1348
+ ], Service.prototype, "onDeleteSuccess", null);
1349
+ __decorate([
1350
+ CaptureSpan(),
1351
+ __metadata("design:type", Function),
1352
+ __metadata("design:paramtypes", [Object]),
1353
+ __metadata("design:returntype", Promise)
1354
+ ], Service.prototype, "getAiAccessSettingsForUpdateQuery", null);
1355
+ __decorate([
1356
+ CaptureSpan(),
1357
+ __metadata("design:type", Function),
1358
+ __metadata("design:paramtypes", [Object]),
1359
+ __metadata("design:returntype", Promise)
1360
+ ], Service.prototype, "validateAiAccessBindingsBelongToProject", null);
1361
+ __decorate([
1362
+ CaptureSpan(),
1363
+ __metadata("design:type", Function),
1364
+ __metadata("design:paramtypes", [Object]),
1365
+ __metadata("design:returntype", Promise)
1366
+ ], Service.prototype, "validateAiAccessBindingPairs", null);
1367
+ __decorate([
1368
+ CaptureSpan(),
1369
+ __metadata("design:type", Function),
1370
+ __metadata("design:paramtypes", [Object]),
1371
+ __metadata("design:returntype", Promise)
1372
+ ], Service.prototype, "getProjectIdsForUpdateQuery", null);
400
1373
  __decorate([
401
1374
  CaptureSpan(),
402
1375
  __metadata("design:type", Function),
@@ -453,6 +1426,18 @@ __decorate([
453
1426
  __metadata("design:paramtypes", [Object, Array]),
454
1427
  __metadata("design:returntype", Promise)
455
1428
  ], Service.prototype, "onUpdateSuccess", null);
1429
+ __decorate([
1430
+ CaptureSpan(),
1431
+ __metadata("design:type", Function),
1432
+ __metadata("design:paramtypes", [Array]),
1433
+ __metadata("design:returntype", Promise)
1434
+ ], Service.prototype, "markAiAccessRunnerBound", null);
1435
+ __decorate([
1436
+ CaptureSpan(),
1437
+ __metadata("design:type", Function),
1438
+ __metadata("design:paramtypes", [Array]),
1439
+ __metadata("design:returntype", Promise)
1440
+ ], Service.prototype, "markAiAccessConfigured", null);
456
1441
  function fingerprintLabelIds(labelIds) {
457
1442
  const sorted = labelIds
458
1443
  .map((id) => {
@@ -461,5 +1446,117 @@ function fingerprintLabelIds(labelIds) {
461
1446
  .sort();
462
1447
  return crypto.createHash("sha1").update(sorted.join(",")).digest("hex");
463
1448
  }
1449
+ // Undefined is an omitted property; null is an explicit clear, so a write.
1450
+ function isAnyKeyWritten(data, keys) {
1451
+ return keys.some((key) => {
1452
+ return data[key] !== undefined;
1453
+ });
1454
+ }
1455
+ function getAiAccessWriteCarryForward(carryForward) {
1456
+ if (carryForward &&
1457
+ typeof carryForward === "object" &&
1458
+ "previousAiAccessSettings" in carryForward) {
1459
+ return carryForward;
1460
+ }
1461
+ return null;
1462
+ }
1463
+ // A stored mode as the readers see it: anything unknown is Disabled.
1464
+ function readStoredRemediationMode(value) {
1465
+ return Object.values(KubernetesAiRemediationMode).includes(value)
1466
+ ? value
1467
+ : KubernetesAiRemediationMode.Disabled;
1468
+ }
1469
+ /*
1470
+ * A stored allowlist as the readers see it (KubernetesClusterAiAccessService
1471
+ * .normalizeAllowlist, which this module cannot import without a cycle):
1472
+ * trimmed non-empty strings, a JSON-encoded array accepted, anything else
1473
+ * empty. Rows written before the write-side validation existed may hold any
1474
+ * of those shapes.
1475
+ */
1476
+ function readStoredKubectlAllowlist(value) {
1477
+ let raw = value;
1478
+ if (typeof raw === "string") {
1479
+ try {
1480
+ raw = JSON.parse(raw);
1481
+ }
1482
+ catch (_a) {
1483
+ raw = [value];
1484
+ }
1485
+ }
1486
+ if (!Array.isArray(raw)) {
1487
+ return [];
1488
+ }
1489
+ return raw
1490
+ .filter((pattern) => {
1491
+ return typeof pattern === "string" && pattern.trim().length > 0;
1492
+ })
1493
+ .map((pattern) => {
1494
+ return pattern.trim();
1495
+ });
1496
+ }
1497
+ /*
1498
+ * What an operator's allowlist write stores: null (no allowlist) or an array
1499
+ * of trimmed patterns the matcher can actually use. Refused, with the entry
1500
+ * and the rule it broke:
1501
+ *
1502
+ * - anything but an array (a JSON-encoded array in a string is accepted, the
1503
+ * form the readers already understand, and stored as the array);
1504
+ * - an entry that is not text;
1505
+ * - more than KUBECTL_ALLOWLIST_MAX_PATTERNS entries — the matcher skips
1506
+ * every pattern past that silently;
1507
+ * - an entry KubectlPolicy.describeAllowlistPatternProblem says the matcher
1508
+ * cannot use (blank, too long, not one kubectl command line, no verb).
1509
+ * That is the ONE definition of a valid entry, shared with the AI page:
1510
+ * KubectlPolicy.matchesAllowlist compares word by word, `*` stands for
1511
+ * exactly one word, and the leading "kubectl" is optional.
1512
+ */
1513
+ export function normalizeKubectlAllowlistForWrite(value) {
1514
+ let raw = value;
1515
+ if (raw === null) {
1516
+ return null;
1517
+ }
1518
+ if (typeof raw === "string") {
1519
+ if (raw.trim().length === 0) {
1520
+ return null;
1521
+ }
1522
+ try {
1523
+ raw = JSON.parse(raw);
1524
+ }
1525
+ catch (_a) {
1526
+ throw new BadDataException(KUBECTL_ALLOWLIST_SHAPE_HINT);
1527
+ }
1528
+ }
1529
+ if (!Array.isArray(raw)) {
1530
+ throw new BadDataException(KUBECTL_ALLOWLIST_SHAPE_HINT);
1531
+ }
1532
+ if (raw.length > KUBECTL_ALLOWLIST_MAX_PATTERNS) {
1533
+ throw new BadDataException(`The kubectl allowlist can hold at most ${KUBECTL_ALLOWLIST_MAX_PATTERNS} patterns (got ${raw.length}).`);
1534
+ }
1535
+ return raw.map((entry, index) => {
1536
+ const position = `Pattern ${index + 1} of the kubectl allowlist`;
1537
+ if (typeof entry !== "string") {
1538
+ throw new BadDataException(`${position} must be text (got ${entry === null ? "null" : typeof entry}). ${KUBECTL_ALLOWLIST_SHAPE_HINT}`);
1539
+ }
1540
+ // Stored trimmed, so it is judged exactly as it will be read.
1541
+ const pattern = entry.trim();
1542
+ const problem = KubectlPolicy.describeAllowlistPatternProblem(pattern);
1543
+ if (problem) {
1544
+ throw new BadDataException(`${position} cannot be used: ${problem.endsWith(".") ? problem : `${problem}.`} Patterns are compared with the command word by word; * stands for exactly one word, and the leading "kubectl" is optional.`);
1545
+ }
1546
+ return pattern;
1547
+ });
1548
+ }
1549
+ function isSameKubectlAllowlist(left, right) {
1550
+ return (left.length === right.length &&
1551
+ left.every((pattern, index) => {
1552
+ return pattern === right[index];
1553
+ }));
1554
+ }
1555
+ function describePatternCount(count) {
1556
+ if (count === 0) {
1557
+ return "none";
1558
+ }
1559
+ return `${count} pattern${count === 1 ? "" : "s"}`;
1560
+ }
464
1561
  export default new Service();
465
1562
  //# sourceMappingURL=KubernetesClusterService.js.map