@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
@@ -0,0 +1,1429 @@
1
+ import { KUBECTL_ALLOW_NODE_OPERATIONS_ENV, KUBECTL_WRITE_NAMESPACES_ENV, KubectlCommandTier, RUNNER_POD_NAMESPACE_ENV, } from "../../Types/Kubernetes/KubernetesClusterAiAccess";
2
+ import KubectlPolicy, { normalizeKubectlFlagName } from "./KubectlPolicy";
3
+ /*
4
+ * Where an AI-composed kubectl WRITE lands, and whether the Runner that
5
+ * runs it lets it land there — the Runner's own bound, independent of RBAC.
6
+ *
7
+ * ONE rule, asked in three places that must never disagree:
8
+ *
9
+ * - the Runner (KubectlExecutor), before it spawns kubectl, with the
10
+ * configuration it was started with — the authoritative check;
11
+ * - the server's enqueue chokepoint (RunnerJobService
12
+ * .getRunnerWriteScopeRefusal), with the posture that Runner reported,
13
+ * so nothing is enqueued or counted by the circuit breaker only to be
14
+ * refused on the Runner;
15
+ * - the remediation toolkit (RemediationCommandToolkit
16
+ * .getRunnerScopeRefusal), at propose and approve time, so nothing is
17
+ * composed or approved only to be refused.
18
+ *
19
+ * All three call getRefusal with the same five inputs (the command, the
20
+ * write namespaces, the pod's namespace, the node switch, and whether
21
+ * kubectl runs through a credential's kubeconfig or the in-cluster
22
+ * ServiceAccount) and word the answer for their own reader. This module is
23
+ * pure: it reads no environment and no Node API; the Runner passes its
24
+ * configuration in, the server passes the posture.
25
+ *
26
+ * RBAC alone is not a namespace bound worth the name: patch/update on a
27
+ * workload's pod template, or create on a job, is running any image as any
28
+ * ServiceAccount of that namespace and mounting its Secrets. So every
29
+ * non-Read argv is refused that
30
+ *
31
+ * - is a node operation while the node switch is off
32
+ * (KUBECTL_ALLOW_NODE_OPERATIONS_ENV, the chart's
33
+ * aiAccess.remediation.nodeOperations) — or might be one: a write whose
34
+ * objects cannot be read for certain;
35
+ * - changes something in the namespace the Runner's pod runs in
36
+ * (RUNNER_POD_NAMESPACE_ENV): a change there could scale the Kubernetes
37
+ * agent — or the Runner, and with it any rollback — away. A namespaced
38
+ * write with no -n runs in the pod's own namespace in-cluster, so a
39
+ * missing -n counts as that namespace; or
40
+ * - changes something outside KUBECTL_WRITE_NAMESPACES_ENV when that list
41
+ * is non-empty (the chart passes the namespaces it bound write RBAC in).
42
+ *
43
+ * What a write changes decides how it is judged, the way kubectl decides
44
+ * it — kubectl ignores -n for an object that lives outside every namespace:
45
+ *
46
+ * - a namespaced object (a pod, a workload, a custom resource) is judged
47
+ * by the namespace it lands in: -n, or the default namespace without it
48
+ * (the pod's own in-cluster, "default" through a credential's
49
+ * kubeconfig, which names none);
50
+ * - a Namespace object is judged by its NAME — `label namespace X` changes
51
+ * namespace X, whatever -n says — so only a namespace the Runner may
52
+ * write in can be changed, never its own;
53
+ * - a Node, and every node verb (cordon, uncordon, drain, taint), is a
54
+ * node operation: not namespace-scoped, but governed by the node
55
+ * switch;
56
+ * - any other cluster-scoped object (a PersistentVolume, a StorageClass,
57
+ * an IngressClass, a ClusterRole, a CRD, ...) is outside every
58
+ * namespace: refused when the write-namespace list is non-empty (the
59
+ * chart's namespaced RoleBindings could not grant it anyway), left to
60
+ * RBAC when it is empty.
61
+ *
62
+ * A write that changes several kinds of object meets every rule that
63
+ * applies to one of them. Reads are never restricted.
64
+ *
65
+ * Only the built-in cluster-scoped kinds are known here — every one the API
66
+ * server serves — by every name kubectl resolves: plural, singular, short
67
+ * name and Kind case, bare or group-qualified the way kubectl qualifies
68
+ * them (its own API group, any prefix of it — "sc.storage", "csr.cert" —
69
+ * or none: "sc.", "storageclasses.v1."; see clusterScopedKindOf). A custom
70
+ * resource is read as namespaced — nobody can run discovery before
71
+ * deciding — so a cluster-scoped custom resource is judged by -n like a
72
+ * namespaced one. On the in-cluster Runner with a write-namespace list its
73
+ * RoleBindings cannot grant one anyway; elsewhere the credential's RBAC
74
+ * bounds it.
75
+ *
76
+ * A flag that replaces the object kubectl builds (--overrides and
77
+ * --override-type, on expose and run) makes what the write changes
78
+ * unreadable: kubectl creates whatever object the flag's value describes.
79
+ * Such a write is uncertain on every verb, whatever the shared policy
80
+ * decides about the flag.
81
+ *
82
+ * The objects and the namespace are read the way kubectl reads the argv:
83
+ * every flag by its arity (the same table the shared policy parses with —
84
+ * a flag this reader does not know makes the objects uncertain, which is
85
+ * refused), -n x, -nx, -n=x, --namespace x, --namespace=x, inside a cluster
86
+ * of boolean short flags such as -An x. Every namespace the argv sets must
87
+ * be allowed, not just the last one kubectl uses; a namespaced write across
88
+ * all namespaces (-A) is never inside a scope. What this reader cannot
89
+ * decide for certain — a namespace flag that the flag before it might
90
+ * swallow as its value, a namespace flag after `--` — is refused rather
91
+ * than guessed, with the unambiguous spelling in the message:
92
+ * `kubectl -n <namespace> ...`.
93
+ */
94
+ // Verbs whose objects are always nodes: cluster-scoped, not namespaced.
95
+ const NODE_VERBS = new Set([
96
+ "cordon",
97
+ "uncordon",
98
+ "drain",
99
+ "taint",
100
+ ]);
101
+ /*
102
+ * Verbs whose positionals name objects as "kind name..." or "kind/name...",
103
+ * mirroring the shared policy's OBJECT_VERBS. For rollout and set the
104
+ * objects follow the subcommand.
105
+ */
106
+ const OBJECT_VERBS = new Set([
107
+ "get",
108
+ "describe",
109
+ "delete",
110
+ "label",
111
+ "annotate",
112
+ "patch",
113
+ "scale",
114
+ "autoscale",
115
+ "expose",
116
+ "taint",
117
+ "rollout",
118
+ "set",
119
+ ]);
120
+ /*
121
+ * Verbs that make a NEW namespaced object from the one they name (a
122
+ * Service, a HorizontalPodAutoscaler) in the namespace -n names, whatever
123
+ * kind the named object is. That holds only without --overrides, which
124
+ * lets expose create any object at all (see OBJECT_REPLACING_FLAGS).
125
+ */
126
+ const CREATES_NAMESPACED_OBJECT_VERBS = new Set([
127
+ "expose",
128
+ "autoscale",
129
+ ]);
130
+ /*
131
+ * What each `kubectl create` subcommand makes, by every alias cobra
132
+ * matches. Anything not listed here is uncertain (the shared policy denies
133
+ * it anyway).
134
+ */
135
+ const CREATE_SUBCOMMAND_SCOPES = {
136
+ namespace: "namespace-object",
137
+ ns: "namespace-object",
138
+ priorityclass: "cluster-scoped",
139
+ pc: "cluster-scoped",
140
+ clusterrole: "cluster-scoped",
141
+ clusterrolebinding: "cluster-scoped",
142
+ quota: "namespaced",
143
+ resourcequota: "namespaced",
144
+ secret: "namespaced",
145
+ configmap: "namespaced",
146
+ cm: "namespaced",
147
+ serviceaccount: "namespaced",
148
+ sa: "namespaced",
149
+ service: "namespaced",
150
+ svc: "namespaced",
151
+ deployment: "namespaced",
152
+ deploy: "namespaced",
153
+ role: "namespaced",
154
+ rolebinding: "namespaced",
155
+ poddisruptionbudget: "namespaced",
156
+ pdb: "namespaced",
157
+ job: "namespaced",
158
+ cronjob: "namespaced",
159
+ cj: "namespaced",
160
+ ingress: "namespaced",
161
+ ing: "namespaced",
162
+ token: "namespaced",
163
+ };
164
+ // The kind a `kubectl create <subcommand>` of this scope makes, for messages.
165
+ const CREATE_CLUSTER_SCOPED_KINDS = {
166
+ priorityclass: "priorityclass",
167
+ pc: "priorityclass",
168
+ clusterrole: "clusterrole",
169
+ clusterrolebinding: "clusterrolebinding",
170
+ };
171
+ /*
172
+ * EVERY built-in cluster-scoped kind the Kubernetes API server serves
173
+ * (upstream discovery, api/discovery/aggregated_v2.json and api__v1.json of
174
+ * v1.36), keyed by its singular — alpha and beta kinds included, since a
175
+ * cluster may switch them on. A superset of the shared policy's
176
+ * CLUSTER_SCOPED_KINDS (the scope test pins that parity through the
177
+ * policy's own verdicts).
178
+ */
179
+ const BUILTIN_CLUSTER_SCOPED_KINDS = {
180
+ node: { group: "", plural: "nodes", shortNames: ["no"] },
181
+ namespace: { group: "", plural: "namespaces", shortNames: ["ns"] },
182
+ persistentvolume: {
183
+ group: "",
184
+ plural: "persistentvolumes",
185
+ shortNames: ["pv"],
186
+ },
187
+ componentstatus: {
188
+ group: "",
189
+ plural: "componentstatuses",
190
+ shortNames: ["cs"],
191
+ },
192
+ storageclass: {
193
+ group: "storage.k8s.io",
194
+ plural: "storageclasses",
195
+ shortNames: ["sc"],
196
+ },
197
+ csidriver: { group: "storage.k8s.io", plural: "csidrivers", shortNames: [] },
198
+ csinode: { group: "storage.k8s.io", plural: "csinodes", shortNames: [] },
199
+ volumeattachment: {
200
+ group: "storage.k8s.io",
201
+ plural: "volumeattachments",
202
+ shortNames: [],
203
+ },
204
+ volumeattributesclass: {
205
+ group: "storage.k8s.io",
206
+ plural: "volumeattributesclasses",
207
+ shortNames: ["vac"],
208
+ },
209
+ storageversionmigration: {
210
+ group: "storagemigration.k8s.io",
211
+ plural: "storageversionmigrations",
212
+ shortNames: [],
213
+ },
214
+ customresourcedefinition: {
215
+ group: "apiextensions.k8s.io",
216
+ plural: "customresourcedefinitions",
217
+ shortNames: ["crd", "crds"],
218
+ },
219
+ apiservice: {
220
+ group: "apiregistration.k8s.io",
221
+ plural: "apiservices",
222
+ shortNames: [],
223
+ },
224
+ mutatingwebhookconfiguration: {
225
+ group: "admissionregistration.k8s.io",
226
+ plural: "mutatingwebhookconfigurations",
227
+ shortNames: [],
228
+ },
229
+ validatingwebhookconfiguration: {
230
+ group: "admissionregistration.k8s.io",
231
+ plural: "validatingwebhookconfigurations",
232
+ shortNames: [],
233
+ },
234
+ validatingadmissionpolicy: {
235
+ group: "admissionregistration.k8s.io",
236
+ plural: "validatingadmissionpolicies",
237
+ shortNames: [],
238
+ },
239
+ validatingadmissionpolicybinding: {
240
+ group: "admissionregistration.k8s.io",
241
+ plural: "validatingadmissionpolicybindings",
242
+ shortNames: [],
243
+ },
244
+ mutatingadmissionpolicy: {
245
+ group: "admissionregistration.k8s.io",
246
+ plural: "mutatingadmissionpolicies",
247
+ shortNames: [],
248
+ },
249
+ mutatingadmissionpolicybinding: {
250
+ group: "admissionregistration.k8s.io",
251
+ plural: "mutatingadmissionpolicybindings",
252
+ shortNames: [],
253
+ },
254
+ clusterrole: {
255
+ group: "rbac.authorization.k8s.io",
256
+ plural: "clusterroles",
257
+ shortNames: [],
258
+ },
259
+ clusterrolebinding: {
260
+ group: "rbac.authorization.k8s.io",
261
+ plural: "clusterrolebindings",
262
+ shortNames: [],
263
+ },
264
+ tokenreview: {
265
+ group: "authentication.k8s.io",
266
+ plural: "tokenreviews",
267
+ shortNames: [],
268
+ },
269
+ selfsubjectreview: {
270
+ group: "authentication.k8s.io",
271
+ plural: "selfsubjectreviews",
272
+ shortNames: [],
273
+ },
274
+ subjectaccessreview: {
275
+ group: "authorization.k8s.io",
276
+ plural: "subjectaccessreviews",
277
+ shortNames: [],
278
+ },
279
+ selfsubjectaccessreview: {
280
+ group: "authorization.k8s.io",
281
+ plural: "selfsubjectaccessreviews",
282
+ shortNames: [],
283
+ },
284
+ selfsubjectrulesreview: {
285
+ group: "authorization.k8s.io",
286
+ plural: "selfsubjectrulesreviews",
287
+ shortNames: [],
288
+ },
289
+ priorityclass: {
290
+ group: "scheduling.k8s.io",
291
+ plural: "priorityclasses",
292
+ shortNames: ["pc"],
293
+ },
294
+ ingressclass: {
295
+ group: "networking.k8s.io",
296
+ plural: "ingressclasses",
297
+ shortNames: [],
298
+ },
299
+ ipaddress: {
300
+ group: "networking.k8s.io",
301
+ plural: "ipaddresses",
302
+ shortNames: ["ip"],
303
+ },
304
+ servicecidr: {
305
+ group: "networking.k8s.io",
306
+ plural: "servicecidrs",
307
+ shortNames: [],
308
+ },
309
+ runtimeclass: {
310
+ group: "node.k8s.io",
311
+ plural: "runtimeclasses",
312
+ shortNames: [],
313
+ },
314
+ certificatesigningrequest: {
315
+ group: "certificates.k8s.io",
316
+ plural: "certificatesigningrequests",
317
+ shortNames: ["csr"],
318
+ },
319
+ clustertrustbundle: {
320
+ group: "certificates.k8s.io",
321
+ plural: "clustertrustbundles",
322
+ shortNames: [],
323
+ },
324
+ flowschema: {
325
+ group: "flowcontrol.apiserver.k8s.io",
326
+ plural: "flowschemas",
327
+ shortNames: [],
328
+ },
329
+ prioritylevelconfiguration: {
330
+ group: "flowcontrol.apiserver.k8s.io",
331
+ plural: "prioritylevelconfigurations",
332
+ shortNames: [],
333
+ },
334
+ storageversion: {
335
+ group: "internal.apiserver.k8s.io",
336
+ plural: "storageversions",
337
+ shortNames: [],
338
+ },
339
+ deviceclass: {
340
+ group: "resource.k8s.io",
341
+ plural: "deviceclasses",
342
+ shortNames: [],
343
+ },
344
+ devicetaintrule: {
345
+ group: "resource.k8s.io",
346
+ plural: "devicetaintrules",
347
+ shortNames: [],
348
+ },
349
+ resourceslice: {
350
+ group: "resource.k8s.io",
351
+ plural: "resourceslices",
352
+ shortNames: [],
353
+ },
354
+ resourcepoolstatusrequest: {
355
+ group: "resource.k8s.io",
356
+ plural: "resourcepoolstatusrequests",
357
+ shortNames: [],
358
+ },
359
+ };
360
+ /*
361
+ * Every name kubectl resolves to one of those kinds (lowercased): plural,
362
+ * singular and short names. A Kind ("StorageClass") is its singular once
363
+ * lowercased, which is how kubectl matches it too.
364
+ */
365
+ function buildClusterScopedKindNames() {
366
+ const names = {};
367
+ for (const kind of Object.keys(BUILTIN_CLUSTER_SCOPED_KINDS)) {
368
+ const definition = BUILTIN_CLUSTER_SCOPED_KINDS[kind];
369
+ names[kind] = { kind, isShortName: false };
370
+ names[definition.plural] = { kind, isShortName: false };
371
+ for (const shortName of definition.shortNames) {
372
+ names[shortName] = { kind, isShortName: true };
373
+ }
374
+ }
375
+ return names;
376
+ }
377
+ const CLUSTER_SCOPED_KIND_NAMES = buildClusterScopedKindNames();
378
+ /*
379
+ * An API version as Kubernetes spells one ("v1", "v1beta2", "v2alpha1"):
380
+ * the middle segment of "RESOURCE.VERSION.GROUP".
381
+ */
382
+ const API_VERSION_SEGMENT = /^v\d+(?:(?:alpha|beta)\d+)?$/;
383
+ /*
384
+ * Flags by arity, mirroring the shared policy's KNOWN_FLAGS (every flag
385
+ * OneUptime AI may use; the policy denies the rest). "value" flags take a
386
+ * value — the rest of a short cluster, or the next token; "none" flags
387
+ * (booleans, and optional-value flags such as --cascade, --dry-run and
388
+ * --validate, which only take one written with "=") never consume the next
389
+ * token.
390
+ */
391
+ const BOOLEAN_SHORT_FLAGS = new Set(["A", "w", "q"]);
392
+ const VALUE_SHORT_FLAGS = new Set([
393
+ "n",
394
+ "o",
395
+ "L",
396
+ "l",
397
+ "c",
398
+ "p",
399
+ "e",
400
+ "r",
401
+ ]);
402
+ /*
403
+ * Long flags that never take the next token as their value: the policy's
404
+ * boolean flags and its optional-value flags (--cascade, --dry-run,
405
+ * --validate), which only take a value written with "=". The namespace
406
+ * reader only uses it to decide that a namespace flag right after one of
407
+ * these IS a flag (a flag missing from it makes that namespace flag
408
+ * ambiguous, which is refused); the object reader needs every flag's
409
+ * arity, and refuses a flag it finds in neither table.
410
+ */
411
+ const NON_CONSUMING_LONG_FLAGS = new Set([
412
+ "match-server-version",
413
+ "allow-missing-template-keys",
414
+ "show-labels",
415
+ "show-kind",
416
+ "show-managed-fields",
417
+ "no-headers",
418
+ "server-print",
419
+ "ignore-not-found",
420
+ "output-watch-events",
421
+ "all-namespaces",
422
+ "all",
423
+ "watch",
424
+ "watch-only",
425
+ "follow",
426
+ "previous",
427
+ "timestamps",
428
+ "all-containers",
429
+ "all-pods",
430
+ "ignore-errors",
431
+ "insecure-skip-tls-verify-backend",
432
+ "show-events",
433
+ "sum",
434
+ "use-protocol-buffers",
435
+ "show-capacity",
436
+ "cached",
437
+ "namespaced",
438
+ "client",
439
+ "list",
440
+ "quiet",
441
+ "force",
442
+ "now",
443
+ "wait",
444
+ "ignore-daemonsets",
445
+ "delete-emptydir-data",
446
+ "delete-local-data",
447
+ "disable-eviction",
448
+ "overwrite",
449
+ "local",
450
+ "record",
451
+ "save-config",
452
+ "append-hash",
453
+ "global-default",
454
+ "windows-line-endings",
455
+ "cascade",
456
+ "dry-run",
457
+ "validate",
458
+ ]);
459
+ // Long flags that always take a value: "--selector app=web", "--image=x".
460
+ const VALUE_LONG_FLAGS = new Set([
461
+ "namespace",
462
+ "request-timeout",
463
+ "output",
464
+ "label-columns",
465
+ "sort-by",
466
+ "chunk-size",
467
+ "subresource",
468
+ "selector",
469
+ "labels",
470
+ "field-selector",
471
+ "container",
472
+ "since",
473
+ "since-time",
474
+ "tail",
475
+ "limit-bytes",
476
+ "max-log-requests",
477
+ "pod-running-timeout",
478
+ "patch",
479
+ "prefix",
480
+ "containers",
481
+ "for",
482
+ "types",
483
+ "api-group",
484
+ "categories",
485
+ "verbs",
486
+ "api-version",
487
+ "revision",
488
+ "to-revision",
489
+ "timeout",
490
+ "field-manager",
491
+ "replicas",
492
+ "current-replicas",
493
+ "resource-version",
494
+ "grace-period",
495
+ "pod-selector",
496
+ "skip-wait-for-delete-timeout",
497
+ "type",
498
+ "image",
499
+ "env",
500
+ "from",
501
+ "keys",
502
+ "limits",
503
+ "requests",
504
+ "restart",
505
+ "schedule",
506
+ "port",
507
+ "target-port",
508
+ "protocol",
509
+ "name",
510
+ "external-ip",
511
+ "cluster-ip",
512
+ "load-balancer-ip",
513
+ "overrides",
514
+ "override-type",
515
+ "session-affinity",
516
+ "min",
517
+ "max",
518
+ "cpu",
519
+ "cpu-percent",
520
+ "from-literal",
521
+ "resource",
522
+ "resource-name",
523
+ "verb",
524
+ "non-resource-url",
525
+ "aggregation-rule",
526
+ "role",
527
+ "clusterrole",
528
+ "group",
529
+ "serviceaccount",
530
+ "hard",
531
+ "scopes",
532
+ "min-available",
533
+ "max-unavailable",
534
+ "value",
535
+ "description",
536
+ "preemption-policy",
537
+ "class",
538
+ "rule",
539
+ "annotation",
540
+ "default-backend",
541
+ "tcp",
542
+ "node-port",
543
+ "clusterip",
544
+ "docker-server",
545
+ "docker-username",
546
+ "docker-password",
547
+ "docker-email",
548
+ ]);
549
+ /*
550
+ * Flags whose arity depends on the verb, as in the policy's
551
+ * VERB_FLAG_OVERRIDES: -p is --previous (boolean) on logs, --prefix a
552
+ * boolean on logs, --containers a boolean on top, and --recursive a boolean
553
+ * on explain.
554
+ */
555
+ const VERB_FLAG_ARITY_OVERRIDES = {
556
+ logs: { p: "none", prefix: "none" },
557
+ top: { containers: "none" },
558
+ explain: { recursive: "none" },
559
+ };
560
+ // A negative number or duration (`-1`, `-5s`): a value, never a flag.
561
+ const NEGATIVE_NUMBER_TOKEN = /^-\d/;
562
+ function hasOwn(record, key) {
563
+ return Object.prototype.hasOwnProperty.call(record, key);
564
+ }
565
+ /*
566
+ * A flag's arity the way the policy looks it up: by its name alone (short
567
+ * letters and long names share one table), after the verb's own meaning of
568
+ * it. Null for a flag neither table knows.
569
+ */
570
+ function lookupFlagArity(name, verb) {
571
+ if (verb !== undefined && hasOwn(VERB_FLAG_ARITY_OVERRIDES, verb)) {
572
+ const overrides = VERB_FLAG_ARITY_OVERRIDES[verb];
573
+ if (hasOwn(overrides, name)) {
574
+ return overrides[name];
575
+ }
576
+ }
577
+ if (BOOLEAN_SHORT_FLAGS.has(name) || NON_CONSUMING_LONG_FLAGS.has(name)) {
578
+ return "none";
579
+ }
580
+ if (VALUE_SHORT_FLAGS.has(name) || VALUE_LONG_FLAGS.has(name)) {
581
+ return "value";
582
+ }
583
+ return null;
584
+ }
585
+ function describeUnknownFlag(flag) {
586
+ return `"${flag}" is a flag the write scope does not know, so whether it takes the next word as its value cannot be told`;
587
+ }
588
+ /*
589
+ * Flags that replace the object kubectl builds with one the flag's value
590
+ * describes: kubectl merges --overrides (a JSON merge, strategic merge or
591
+ * JSON patch, per --override-type) into the Service `kubectl expose`
592
+ * generates — or the Pod `kubectl run` does — and then picks the REST
593
+ * mapping, and so the kind and the namespace it creates in, from the
594
+ * merged object. `kubectl expose deployment web -n prod --overrides=...`
595
+ * can therefore create a ClusterRoleBinding, a PriorityClass, a Namespace
596
+ * or a privileged Job instead of a Service in prod. Read by their
597
+ * normalized name ("--override_type" is "--override-type" to kubectl).
598
+ */
599
+ const OBJECT_REPLACING_FLAGS = new Set([
600
+ "overrides",
601
+ "override-type",
602
+ ]);
603
+ function describeObjectReplacingFlag(flag) {
604
+ return `"${flag}" lets kubectl create whatever object its value describes instead of the one the command names — of any kind, in any namespace — so what the command changes cannot be read from it`;
605
+ }
606
+ /*
607
+ * The positionals of an argv, split exactly the way the shared policy (and
608
+ * pflag) split them: a value flag takes the rest of its short cluster or
609
+ * the next token, "--flag=value" carries its own, and everything after
610
+ * "--" is positional. A flag neither arity table knows makes the split
611
+ * uncertain — whether it swallows the next word decides which word is the
612
+ * kind — so the reason is returned instead of a guess.
613
+ */
614
+ function readPositionals(args) {
615
+ const positionals = [];
616
+ let verb = undefined;
617
+ let afterDoubleDash = false;
618
+ let objectReplacingFlag = null;
619
+ for (let i = 0; i < args.length; i++) {
620
+ const token = args[i];
621
+ if (afterDoubleDash || !token.startsWith("-") || token === "-") {
622
+ positionals.push(token);
623
+ if (verb === undefined) {
624
+ verb = token.toLowerCase();
625
+ }
626
+ continue;
627
+ }
628
+ if (token === "--") {
629
+ afterDoubleDash = true;
630
+ continue;
631
+ }
632
+ if (token.startsWith("--")) {
633
+ const eq = token.indexOf("=");
634
+ const written = eq >= 0 ? token.slice(0, eq) : token;
635
+ const name = normalizeKubectlFlagName(written.slice(2));
636
+ const arity = lookupFlagArity(name, verb);
637
+ if (arity === null) {
638
+ return {
639
+ positionals,
640
+ uncertainty: describeUnknownFlag(token),
641
+ objectReplacingFlag,
642
+ };
643
+ }
644
+ if (objectReplacingFlag === null && OBJECT_REPLACING_FLAGS.has(name)) {
645
+ objectReplacingFlag = written;
646
+ }
647
+ if (eq < 0 && arity === "value") {
648
+ i++; // Its value is the next token, whatever it looks like.
649
+ }
650
+ continue;
651
+ }
652
+ // "-abc": a cluster of short flags, read letter by letter.
653
+ let rest = token.slice(1);
654
+ while (rest.length > 0) {
655
+ const letter = rest.charAt(0);
656
+ const arity = lookupFlagArity(letter, verb);
657
+ if (arity === null) {
658
+ return {
659
+ positionals,
660
+ uncertainty: describeUnknownFlag(`-${letter}`),
661
+ objectReplacingFlag,
662
+ };
663
+ }
664
+ // "-n=web"
665
+ if (rest.charAt(1) === "=") {
666
+ break;
667
+ }
668
+ if (arity === "none") {
669
+ rest = rest.slice(1);
670
+ continue;
671
+ }
672
+ // "-n web" takes the next token; "-nweb" carries its value inline.
673
+ if (rest.length === 1) {
674
+ i++;
675
+ }
676
+ break;
677
+ }
678
+ }
679
+ return { positionals, uncertainty: null, objectReplacingFlag };
680
+ }
681
+ /*
682
+ * The commands that read the words after their objects as updates, KEY=VALUE
683
+ * or KEY- (kubectl's GetResourcesAndPairs for label, annotate and set image,
684
+ * SplitEnvironmentFromResources for set env, and taint's own split) — the
685
+ * shared policy's readsObjectsThenPairs. For these, and only these, the
686
+ * objects end at the first such word. Every other verb hands kubectl's
687
+ * resource builder ALL of its words, `=` or not, and kubectl goes on to the
688
+ * next object when one fails: with the pinned kubectl v1.36.4 against a
689
+ * fake API server, `patch pod/a=b node/n1` PATCHed the Node after the
690
+ * missing pod's error. (taint never gets here: it is a node verb.)
691
+ */
692
+ function readsObjectsThenPairs(verb, subcommand) {
693
+ if (verb === "label" || verb === "annotate" || verb === "taint") {
694
+ return true;
695
+ }
696
+ return verb === "set" && (subcommand === "image" || subcommand === "env");
697
+ }
698
+ /*
699
+ * The object tokens of a command, split the way kubectl splits positionals:
700
+ * every token after the verb for delete; for label, annotate, set image and
701
+ * set env (readsObjectsThenPairs), the leading tokens after the verb (and
702
+ * the subcommand) that are not KEY=VALUE or KEY- pairs; for set selector,
703
+ * every token after the subcommand but the last, which kubectl always reads
704
+ * as the selector expression (getResourcesAndSelector); for every other
705
+ * object verb, every token after the verb (and the subcommand, for rollout
706
+ * and set). So `label pod web-1 node/n1=x` names only the pod, while `patch
707
+ * pod/a=b node/n1` names the Node.
708
+ */
709
+ function objectTokens(verb, positionals) {
710
+ if (verb === "delete") {
711
+ return positionals.slice(1);
712
+ }
713
+ const start = verb === "rollout" || verb === "set" ? 2 : 1;
714
+ const words = positionals.slice(start);
715
+ const subcommand = (positionals[1] || "").toLowerCase();
716
+ if (verb === "set" && subcommand === "selector") {
717
+ return words.slice(0, -1);
718
+ }
719
+ if (!readsObjectsThenPairs(verb, subcommand)) {
720
+ return words;
721
+ }
722
+ const tokens = [];
723
+ for (const token of words) {
724
+ if (token.includes("=") || token.endsWith("-")) {
725
+ break;
726
+ }
727
+ tokens.push(token);
728
+ }
729
+ return tokens;
730
+ }
731
+ /*
732
+ * The objects the tokens name, read the way kubectl's resource builder
733
+ * reads them: "kind[,kind2] name1 name2" (each name of each kind) or
734
+ * "kind/name kind2/name2". A separate name after a kind/name is an error in
735
+ * kubectl, and uncertain here.
736
+ */
737
+ function readObjectReferences(tokens) {
738
+ const references = [];
739
+ let kinds = [];
740
+ const names = [];
741
+ for (let i = 0; i < tokens.length; i++) {
742
+ const token = tokens[i];
743
+ const slash = token.indexOf("/");
744
+ if (slash >= 0) {
745
+ references.push({
746
+ rawKind: token.slice(0, slash),
747
+ name: token.slice(slash + 1),
748
+ });
749
+ }
750
+ else if (i === 0) {
751
+ kinds = token.split(",");
752
+ }
753
+ else if (kinds.length === 0) {
754
+ return {
755
+ references,
756
+ uncertainty: `"${token}" follows "${tokens[0]}", and kubectl does not accept a separate name after TYPE/NAME`,
757
+ };
758
+ }
759
+ else {
760
+ names.push(token);
761
+ }
762
+ }
763
+ for (const kind of kinds) {
764
+ if (names.length === 0) {
765
+ references.push({ rawKind: kind, name: null });
766
+ continue;
767
+ }
768
+ for (const name of names) {
769
+ references.push({ rawKind: kind, name });
770
+ }
771
+ }
772
+ return { references, uncertainty: null };
773
+ }
774
+ /*
775
+ * Does a group written after a kind name match that kind's own group, the
776
+ * way kubectl matches it? An empty group matches the name in every group
777
+ * (as the bare name does); otherwise the kind's own group, or — kubectl's
778
+ * "group prefixing" fallback when no group matches exactly — any prefix of
779
+ * it. The core group is never a prefix match ("nodes.core" is an error).
780
+ */
781
+ function writtenGroupNamesKindGroup(data) {
782
+ if (data.written === "" || data.written === data.group) {
783
+ return true;
784
+ }
785
+ return (data.prefixMatches &&
786
+ data.group !== "" &&
787
+ data.group.startsWith(data.written));
788
+ }
789
+ /*
790
+ * The built-in cluster-scoped kind a written kind names, or null for any
791
+ * other kind (namespaced, or a custom resource whose scope this reader
792
+ * cannot see). Read the way kubectl's resource builder reads it
793
+ * (schema.ParseResourceArg, then client-go's shortcut expander and REST
794
+ * mapper):
795
+ *
796
+ * - with two dots or more, first as "RESOURCE.VERSION.GROUP". A short
797
+ * name there matches its kind in any group that GROUP is a prefix of
798
+ * ("sc.v1.storage"), and in every group when GROUP is empty — whatever
799
+ * the version, which the expansion drops ("sc.v1.", "sc.foo.", "no.x.").
800
+ * A plural or singular name matches with an empty GROUP or its own,
801
+ * after a real API version ("nodes.v1.", "storageclasses.v1.") or none
802
+ * ("nodes..");
803
+ * - then as "RESOURCE.GROUP", GROUP being everything after the first dot:
804
+ * empty ("sc.", "nodes."), the kind's own group, or any prefix of it
805
+ * ("sc.storage", "storageclasses.stor", "csr.cert", "ip.net",
806
+ * "storageclasses.storage.").
807
+ *
808
+ * The core group is never a prefix match: "nodes.core" and "no.x" are
809
+ * errors in kubectl, and "nodes.example.com" is some custom resource.
810
+ *
811
+ * A custom resource that shares a name, a short name or a group prefix with
812
+ * a built-in kind loses to it — discovery lists the built-in groups first,
813
+ * and kubectl takes the first match — so the prefix spellings are the
814
+ * built-in kind exactly as the bare name is.
815
+ */
816
+ function clusterScopedKindOf(rawKind) {
817
+ const lower = rawKind.trim().toLowerCase();
818
+ const dot = lower.indexOf(".");
819
+ const head = dot >= 0 ? lower.slice(0, dot) : lower;
820
+ if (!hasOwn(CLUSTER_SCOPED_KIND_NAMES, head)) {
821
+ return null;
822
+ }
823
+ const name = CLUSTER_SCOPED_KIND_NAMES[head];
824
+ if (dot < 0) {
825
+ return name.kind;
826
+ }
827
+ const group = BUILTIN_CLUSTER_SCOPED_KINDS[name.kind].group;
828
+ const qualifier = lower.slice(dot + 1);
829
+ const versionDot = qualifier.indexOf(".");
830
+ // RESOURCE.VERSION.GROUP
831
+ if (versionDot >= 0) {
832
+ const version = qualifier.slice(0, versionDot);
833
+ const versionedGroup = qualifier.slice(versionDot + 1);
834
+ // A short name's expansion keeps no version when no group is written.
835
+ if (name.isShortName && versionedGroup === "") {
836
+ return name.kind;
837
+ }
838
+ if ((version === "" || API_VERSION_SEGMENT.test(version)) &&
839
+ writtenGroupNamesKindGroup({
840
+ written: versionedGroup,
841
+ group,
842
+ // With a version, only a short name falls back to a group prefix.
843
+ prefixMatches: name.isShortName || version === "",
844
+ })) {
845
+ return name.kind;
846
+ }
847
+ }
848
+ // RESOURCE.GROUP
849
+ if (writtenGroupNamesKindGroup({
850
+ written: qualifier,
851
+ group,
852
+ prefixMatches: true,
853
+ })) {
854
+ return name.kind;
855
+ }
856
+ return null;
857
+ }
858
+ function isFlagToken(token) {
859
+ return (token.startsWith("-") &&
860
+ token !== "-" &&
861
+ token !== "--" &&
862
+ !NEGATIVE_NUMBER_TOKEN.test(token));
863
+ }
864
+ /*
865
+ * Does this token switch on --all-namespaces (-A alone, or inside a cluster
866
+ * of boolean letters)? Not when it is written "=false".
867
+ */
868
+ function readsAllNamespaces(token) {
869
+ if (!isFlagToken(token)) {
870
+ return false;
871
+ }
872
+ if (token.startsWith("--")) {
873
+ const eq = token.indexOf("=");
874
+ const name = normalizeKubectlFlagName(eq >= 0 ? token.slice(2, eq) : token.slice(2));
875
+ const value = eq >= 0 ? token.slice(eq + 1) : "";
876
+ return name === "all-namespaces" && value.trim().toLowerCase() !== "false";
877
+ }
878
+ const body = token.slice(1);
879
+ for (let j = 0; j < body.length; j++) {
880
+ const letter = body[j];
881
+ if (letter === "A") {
882
+ const rest = body.slice(j + 1);
883
+ return rest.startsWith("=")
884
+ ? rest.slice(1).trim().toLowerCase() !== "false"
885
+ : true;
886
+ }
887
+ if (BOOLEAN_SHORT_FLAGS.has(letter)) {
888
+ continue;
889
+ }
890
+ if (VALUE_SHORT_FLAGS.has(letter) || letter === "=") {
891
+ // The rest of the token is that flag's value.
892
+ return false;
893
+ }
894
+ // A letter this reader does not know: assume the worst about what follows.
895
+ return body.slice(j + 1).includes("A");
896
+ }
897
+ return false;
898
+ }
899
+ /*
900
+ * Does this token set the namespace, and where is its value? Null when it
901
+ * does not. "uncertain" for a short cluster where an unknown letter comes
902
+ * before an `n` — whether kubectl reaches that `n` depends on the letter.
903
+ */
904
+ function readNamespaceFlag(token) {
905
+ if (!isFlagToken(token)) {
906
+ return null;
907
+ }
908
+ if (token.startsWith("--")) {
909
+ const eq = token.indexOf("=");
910
+ const name = normalizeKubectlFlagName(eq >= 0 ? token.slice(2, eq) : token.slice(2));
911
+ if (name !== "namespace") {
912
+ return null;
913
+ }
914
+ return eq >= 0
915
+ ? { kind: "inline", value: token.slice(eq + 1) }
916
+ : { kind: "next" };
917
+ }
918
+ const body = token.slice(1);
919
+ for (let j = 0; j < body.length; j++) {
920
+ const letter = body[j];
921
+ if (letter === "n") {
922
+ const rest = body.slice(j + 1);
923
+ if (rest.startsWith("=")) {
924
+ return { kind: "inline", value: rest.slice(1) };
925
+ }
926
+ return rest ? { kind: "inline", value: rest } : { kind: "next" };
927
+ }
928
+ if (BOOLEAN_SHORT_FLAGS.has(letter)) {
929
+ continue;
930
+ }
931
+ if (VALUE_SHORT_FLAGS.has(letter) || letter === "=") {
932
+ // The rest of the token is that flag's value, not more flags.
933
+ return null;
934
+ }
935
+ // A letter the policy does not know: its arity decides whether `n` counts.
936
+ return body.slice(j + 1).includes("n") ? { kind: "uncertain" } : null;
937
+ }
938
+ return null;
939
+ }
940
+ /*
941
+ * Could this token, read as a flag, take the NEXT token as its value? "no"
942
+ * only when that is certain; "maybe" otherwise (a value flag written
943
+ * without "=", a flag this reader does not know). A token that is itself a
944
+ * value can never take the next one, so "no" for a positional is exact.
945
+ */
946
+ function mayTakeNextToken(token) {
947
+ if (!isFlagToken(token)) {
948
+ return "no";
949
+ }
950
+ if (token.startsWith("--")) {
951
+ const eq = token.indexOf("=");
952
+ if (eq >= 0) {
953
+ return "no";
954
+ }
955
+ return NON_CONSUMING_LONG_FLAGS.has(normalizeKubectlFlagName(token.slice(2)))
956
+ ? "no"
957
+ : "maybe";
958
+ }
959
+ const body = token.slice(1);
960
+ for (let j = 0; j < body.length; j++) {
961
+ const letter = body[j];
962
+ if (letter === "=") {
963
+ return "no";
964
+ }
965
+ if (BOOLEAN_SHORT_FLAGS.has(letter)) {
966
+ continue;
967
+ }
968
+ if (VALUE_SHORT_FLAGS.has(letter)) {
969
+ // An inline value ("-lapp=web", "-nweb") leaves nothing to take.
970
+ return j + 1 < body.length ? "no" : "maybe";
971
+ }
972
+ return "maybe";
973
+ }
974
+ // A cluster of boolean letters only ("-A").
975
+ return "no";
976
+ }
977
+ const FIX_PUT_THE_NAMESPACE_FIRST = "Put the namespace first so it cannot be misread: kubectl -n <namespace> ...";
978
+ const FIX_NAME_THE_OBJECTS = 'Name the objects right after the verb (TYPE NAME or TYPE/NAME) and give each flag its value with "=" (--selector=app=web).';
979
+ const FIX_LEAVE_OUT_OVERRIDES = "Leave out --overrides and --override-type, so kubectl creates only the object the command itself describes.";
980
+ const FIX_NAME_EACH_NAMESPACE_OBJECT = "Name each Namespace object.";
981
+ const FIX_NAME_ONE_NAMESPACE = "Name one namespace with -n <namespace>.";
982
+ const FIX_NAME_THE_NAMESPACE = "Name the namespace with -n <namespace>.";
983
+ const FIX_NAME_THE_TARGET_NAMESPACE = "Name the target namespace with -n <namespace>.";
984
+ function normalizeNamespace(value) {
985
+ return (value || "").trim().toLowerCase();
986
+ }
987
+ function normalizeNamespaces(values) {
988
+ return (values || [])
989
+ .map((value) => {
990
+ return normalizeNamespace(value);
991
+ })
992
+ .filter((value) => {
993
+ return value.length > 0;
994
+ });
995
+ }
996
+ // The Runner's scope, in its own words, for the end of a refusal.
997
+ function describeRunnerScope(data) {
998
+ const parts = [];
999
+ if (data.writeNamespaces.length > 0) {
1000
+ parts.push(`This Runner only lets OneUptime AI change ${data.writeNamespaces
1001
+ .map((namespace) => {
1002
+ return `"${namespace}"`;
1003
+ })
1004
+ .join(", ")} (${KUBECTL_WRITE_NAMESPACES_ENV}, from aiAccess.remediation.namespaces on the Kubernetes agent chart).`);
1005
+ }
1006
+ if (data.podNamespace) {
1007
+ parts.push(`It never changes its own namespace "${data.podNamespace}" (${RUNNER_POD_NAMESPACE_ENV}).`);
1008
+ }
1009
+ parts.push("Reads are not restricted.");
1010
+ return parts.join(" ");
1011
+ }
1012
+ // A sentence and, when there is one, the fix after it.
1013
+ function withFix(sentence, fix) {
1014
+ return fix ? `${sentence} ${fix}` : sentence;
1015
+ }
1016
+ /*
1017
+ * A refusal in the Runner's own words. The Runner reports a node-switch
1018
+ * refusal with its own host's setting instead (KubectlExecutor); this
1019
+ * wording is the fallback that names the variable.
1020
+ */
1021
+ function describeForRunner(refusal) {
1022
+ const command = refusal.displayCommand;
1023
+ const scope = describeRunnerScope(refusal);
1024
+ const target = refusal.namespace || "";
1025
+ switch (refusal.code) {
1026
+ case "node_operations":
1027
+ return withFix(`${refusal.uncertainty === null
1028
+ ? `"${command}" is a node operation (cordon, uncordon, drain, taint, or a change to a Node object)`
1029
+ : `this Runner cannot tell for certain whether "${command}" changes a node (${refusal.uncertainty})`}, and this Runner does not allow AI-composed node operations (${KUBECTL_ALLOW_NODE_OPERATIONS_ENV}).`, refusal.fix);
1030
+ case "namespace_uncertain":
1031
+ return withFix(`this Runner cannot tell for certain which namespace "${command}" changes (${refusal.uncertainty}). ${scope}`, refusal.fix);
1032
+ case "objects_uncertain":
1033
+ return withFix(`this Runner cannot tell for certain which objects "${command}" changes (${refusal.uncertainty}). ${scope}`, refusal.fix);
1034
+ case "verb_mismatch":
1035
+ return `this Runner reads the verb of "${command}" as "${refusal.readVerb}", but the kubectl policy read "${refusal.policyVerb}", so it cannot tell for certain what the command changes. ${scope}`;
1036
+ case "unnamed_namespace_objects":
1037
+ return withFix(`"${command}" would change Namespace objects without naming them (a selector, --all or no name at all), so this Runner cannot tell whether one of them is ${refusal.podNamespace
1038
+ ? `"${refusal.podNamespace}", the namespace it runs in`
1039
+ : "outside the namespaces it lets OneUptime AI change"}. ${scope}`, refusal.fix);
1040
+ case "cluster_scoped":
1041
+ return `"${command}" changes ${refusal.clusterScopedKinds.join(", ")} objects, which are cluster-scoped: they live outside every namespace, so outside the namespaces this Runner lets OneUptime AI change, whatever -n says. ${scope}`;
1042
+ case "all_namespaces":
1043
+ return withFix(`"${command}" would change every namespace, including ones this Runner may not change. ${scope}`, refusal.fix);
1044
+ case "no_namespace":
1045
+ return withFix(`"${command}" names no namespace and this Runner cannot tell which one it would change. ${scope}`, refusal.fix);
1046
+ case "own_namespace":
1047
+ if (refusal.namespaceSource === "namespace_object") {
1048
+ return `"${command}" would change the Namespace object "${target}" — the namespace this Runner itself runs in; a change there could reconfigure the Kubernetes agent or this Runner, so OneUptime AI never makes one. ${scope}`;
1049
+ }
1050
+ return withFix(`"${command}" ${refusal.namespaceSource === "namespace_flag"
1051
+ ? `would change namespace "${target}"`
1052
+ : `names no namespace, so kubectl would run it in "${target}"`}, the namespace this Runner itself runs in — a change there could scale away or reconfigure the Kubernetes agent or this Runner, so OneUptime AI never makes one. ${scope}`, refusal.fix);
1053
+ case "outside_scope":
1054
+ if (refusal.namespaceSource === "namespace_object") {
1055
+ return `"${command}" would change the Namespace object "${target}", which is outside the namespaces this Runner lets OneUptime AI change (a Namespace object is judged by its name; -n does not apply to it). ${scope}`;
1056
+ }
1057
+ return withFix(`"${command}" ${refusal.namespaceSource === "namespace_flag"
1058
+ ? `would change namespace "${target}"`
1059
+ : `names no namespace, so kubectl would run it in "${target}"`}, which is outside the namespaces this Runner lets OneUptime AI change. ${scope}`, refusal.fix);
1060
+ default: {
1061
+ const unhandled = refusal.code;
1062
+ return unhandled;
1063
+ }
1064
+ }
1065
+ }
1066
+ class KubectlWriteScope {
1067
+ /*
1068
+ * The namespaces an argv sets, read the way kubectl reads them, or why
1069
+ * that cannot be decided for certain.
1070
+ */
1071
+ static resolveNamespaces(args) {
1072
+ const namespaces = [];
1073
+ let allNamespaces = false;
1074
+ // Whether the previous token might take this one as its value.
1075
+ let previous = "no";
1076
+ let afterDoubleDash = false;
1077
+ const ambiguous = (reason) => {
1078
+ return { namespaces, allNamespaces, ambiguity: reason };
1079
+ };
1080
+ for (let i = 0; i < args.length; i++) {
1081
+ const token = args[i];
1082
+ const flag = readNamespaceFlag(token);
1083
+ if (afterDoubleDash) {
1084
+ if (flag) {
1085
+ return ambiguous(`"${token}" comes after "--", where kubectl does not read it as a flag`);
1086
+ }
1087
+ continue;
1088
+ }
1089
+ if (token === "--") {
1090
+ afterDoubleDash = true;
1091
+ continue;
1092
+ }
1093
+ /*
1094
+ * Counted even when the token might be the previous flag's value:
1095
+ * assuming "every namespace" can only ever cost a refusal.
1096
+ */
1097
+ if (readsAllNamespaces(token)) {
1098
+ allNamespaces = true;
1099
+ }
1100
+ if (!flag) {
1101
+ previous = mayTakeNextToken(token);
1102
+ continue;
1103
+ }
1104
+ if (previous === "maybe") {
1105
+ return ambiguous(`"${token}" follows "${args[i - 1]}", which may take it as its own value`);
1106
+ }
1107
+ if (flag.kind === "uncertain") {
1108
+ return ambiguous(`"${token}" combines "n" with a short flag the write scope does not know`);
1109
+ }
1110
+ if (flag.kind === "inline") {
1111
+ namespaces.push(flag.value);
1112
+ previous = "no";
1113
+ continue;
1114
+ }
1115
+ // "-n web" / "--namespace web": the value is the next token, whatever it is.
1116
+ if (i + 1 >= args.length) {
1117
+ return ambiguous(`"${token}" has no namespace after it`);
1118
+ }
1119
+ namespaces.push(args[i + 1]);
1120
+ i++;
1121
+ previous = "no";
1122
+ }
1123
+ return { namespaces, allNamespaces, ambiguity: null };
1124
+ }
1125
+ /*
1126
+ * What a write changes, read from the argv the way kubectl reads it (see
1127
+ * the header): whether it is a node operation, which Namespace objects
1128
+ * and other cluster-scoped kinds it names, and whether anything it
1129
+ * changes lives in a namespace. getRefusal judges both the node switch
1130
+ * and the namespace scope from this one reading.
1131
+ */
1132
+ static resolveTargets(args) {
1133
+ const targets = {
1134
+ verb: "",
1135
+ uncertainty: null,
1136
+ uncertaintyFix: "",
1137
+ touchesNodes: false,
1138
+ namespaceObjects: [],
1139
+ unnamedNamespaceObjects: false,
1140
+ clusterScopedKinds: [],
1141
+ namespaced: false,
1142
+ };
1143
+ const reading = readPositionals(args);
1144
+ if (reading.uncertainty !== null) {
1145
+ targets.uncertainty = reading.uncertainty;
1146
+ targets.uncertaintyFix = FIX_NAME_THE_OBJECTS;
1147
+ return targets;
1148
+ }
1149
+ const positionals = reading.positionals;
1150
+ const verb = (positionals[0] || "").toLowerCase();
1151
+ targets.verb = verb;
1152
+ /*
1153
+ * --overrides decides what kubectl creates, whatever the verb and the
1154
+ * objects say (see OBJECT_REPLACING_FLAGS) — on every verb, not only
1155
+ * expose, so this reading never depends on the shared policy denying
1156
+ * the flag first.
1157
+ */
1158
+ if (reading.objectReplacingFlag !== null) {
1159
+ targets.uncertainty = describeObjectReplacingFlag(reading.objectReplacingFlag);
1160
+ targets.uncertaintyFix = FIX_LEAVE_OUT_OVERRIDES;
1161
+ return targets;
1162
+ }
1163
+ // cordon, uncordon, drain and taint only ever act on nodes.
1164
+ if (NODE_VERBS.has(verb)) {
1165
+ targets.touchesNodes = true;
1166
+ return targets;
1167
+ }
1168
+ if (verb === "create") {
1169
+ // cobra matches subcommands case-sensitively (the policy denies others).
1170
+ const subcommand = positionals[1] || "";
1171
+ if (!hasOwn(CREATE_SUBCOMMAND_SCOPES, subcommand)) {
1172
+ targets.uncertainty = `"create ${subcommand}" is not a kubectl create subcommand the write scope knows`;
1173
+ targets.uncertaintyFix = FIX_NAME_THE_OBJECTS;
1174
+ return targets;
1175
+ }
1176
+ const scope = CREATE_SUBCOMMAND_SCOPES[subcommand];
1177
+ if (scope === "namespace-object") {
1178
+ const name = (positionals[2] || "").trim().toLowerCase();
1179
+ if (name) {
1180
+ targets.namespaceObjects.push(name);
1181
+ }
1182
+ else {
1183
+ targets.unnamedNamespaceObjects = true;
1184
+ }
1185
+ }
1186
+ else if (scope === "cluster-scoped") {
1187
+ targets.clusterScopedKinds.push(CREATE_CLUSTER_SCOPED_KINDS[subcommand] || subcommand);
1188
+ }
1189
+ else {
1190
+ targets.namespaced = true;
1191
+ }
1192
+ return targets;
1193
+ }
1194
+ // Any other verb acts in the namespace kubectl runs it in.
1195
+ if (!OBJECT_VERBS.has(verb)) {
1196
+ targets.namespaced = true;
1197
+ return targets;
1198
+ }
1199
+ const references = readObjectReferences(objectTokens(verb, positionals));
1200
+ if (references.uncertainty !== null) {
1201
+ targets.uncertainty = references.uncertainty;
1202
+ targets.uncertaintyFix = FIX_NAME_THE_OBJECTS;
1203
+ return targets;
1204
+ }
1205
+ /*
1206
+ * No object at all is a kubectl error; judging it as namespaced keeps
1207
+ * the stricter rule. expose and autoscale make a namespaced Service or
1208
+ * HorizontalPodAutoscaler whatever they name (--overrides, which could
1209
+ * make it anything else, was refused as uncertain above).
1210
+ */
1211
+ if (references.references.length === 0 ||
1212
+ CREATES_NAMESPACED_OBJECT_VERBS.has(verb)) {
1213
+ targets.namespaced = true;
1214
+ }
1215
+ for (const reference of references.references) {
1216
+ const kind = clusterScopedKindOf(reference.rawKind);
1217
+ if (kind === null) {
1218
+ targets.namespaced = true;
1219
+ continue;
1220
+ }
1221
+ if (kind === "node") {
1222
+ targets.touchesNodes = true;
1223
+ continue;
1224
+ }
1225
+ if (kind === "namespace") {
1226
+ const name = (reference.name || "").trim().toLowerCase();
1227
+ if (!name) {
1228
+ targets.unnamedNamespaceObjects = true;
1229
+ }
1230
+ else if (!targets.namespaceObjects.includes(name)) {
1231
+ targets.namespaceObjects.push(name);
1232
+ }
1233
+ continue;
1234
+ }
1235
+ if (!targets.clusterScopedKinds.includes(kind)) {
1236
+ targets.clusterScopedKinds.push(kind);
1237
+ }
1238
+ }
1239
+ return targets;
1240
+ }
1241
+ static getFlagArity(name, verb) {
1242
+ return lookupFlagArity(name, verb);
1243
+ }
1244
+ static getClusterScopedKind(rawKind) {
1245
+ return clusterScopedKindOf(rawKind);
1246
+ }
1247
+ /*
1248
+ * THE write-scope question, for every caller (see the header): why the
1249
+ * Runner will not run this command where it lands — or null when it
1250
+ * will. Read commands are never refused; every other tier is judged as a
1251
+ * write (the policy refuses a Denied one on its own, before or after).
1252
+ *
1253
+ * In order: the node switch (a node operation, or a write whose objects
1254
+ * cannot be read for certain, while it is off); then, when a scope is
1255
+ * set at all (write namespaces, or a known pod namespace), what the write
1256
+ * changes — Namespace objects by name, other cluster-scoped objects
1257
+ * against the write-namespace list, and namespaced objects by the
1258
+ * namespace they land in.
1259
+ */
1260
+ static getRefusal(input) {
1261
+ const command = Array.isArray(input.command)
1262
+ ? KubectlPolicy.evaluateArgs(input.command)
1263
+ : input.command;
1264
+ if (command.tier === KubectlCommandTier.Read) {
1265
+ return null;
1266
+ }
1267
+ const writeNamespaces = normalizeNamespaces(input.writeNamespaces);
1268
+ const podNamespace = normalizeNamespace(input.podNamespace);
1269
+ const hasScope = writeNamespaces.length > 0 || podNamespace !== "";
1270
+ if (input.allowNodeOperations && !hasScope) {
1271
+ return null;
1272
+ }
1273
+ const refuse = (code, facts = {}) => {
1274
+ const refusalFacts = Object.assign({ code, displayCommand: command.displayCommand, writeNamespaces,
1275
+ podNamespace, namespace: null, namespaceSource: null, uncertainty: null, clusterScopedKinds: [], readVerb: "", policyVerb: "", fix: "" }, facts);
1276
+ return Object.assign(Object.assign({}, refusalFacts), { reason: describeForRunner(refusalFacts) });
1277
+ };
1278
+ const targets = KubectlWriteScope.resolveTargets(command.args);
1279
+ /*
1280
+ * The node switch: nodes are cluster-scoped, so no namespace scope can
1281
+ * bound them, and the chart's node role is optional. A write whose
1282
+ * objects cannot be read for certain could be a node operation, so it
1283
+ * is refused too.
1284
+ */
1285
+ if (!input.allowNodeOperations &&
1286
+ (targets.touchesNodes || targets.uncertainty !== null)) {
1287
+ return refuse("node_operations", {
1288
+ uncertainty: targets.uncertainty,
1289
+ fix: targets.uncertainty === null ? "" : targets.uncertaintyFix,
1290
+ });
1291
+ }
1292
+ if (!hasScope) {
1293
+ return null;
1294
+ }
1295
+ if (targets.uncertainty !== null) {
1296
+ /*
1297
+ * A namespace flag that another flag may swallow is the usual cause
1298
+ * (`--selector -n web` makes "web" an object); say so, with the
1299
+ * spelling that cannot be misread.
1300
+ */
1301
+ const namespaceReading = KubectlWriteScope.resolveNamespaces(command.args);
1302
+ if (namespaceReading.ambiguity) {
1303
+ return refuse("namespace_uncertain", {
1304
+ uncertainty: namespaceReading.ambiguity,
1305
+ fix: FIX_PUT_THE_NAMESPACE_FIRST,
1306
+ });
1307
+ }
1308
+ return refuse("objects_uncertain", {
1309
+ uncertainty: targets.uncertainty,
1310
+ fix: targets.uncertaintyFix,
1311
+ });
1312
+ }
1313
+ const policyVerb = (command.verb.split(" ")[0] || "").toLowerCase();
1314
+ if (policyVerb && policyVerb !== targets.verb) {
1315
+ return refuse("verb_mismatch", {
1316
+ readVerb: targets.verb,
1317
+ policyVerb,
1318
+ });
1319
+ }
1320
+ /*
1321
+ * A Namespace object is judged by its name: kubectl ignores -n for it,
1322
+ * so `label namespace X ... -n <allowed>` changes X.
1323
+ */
1324
+ if (targets.unnamedNamespaceObjects) {
1325
+ return refuse("unnamed_namespace_objects", {
1326
+ fix: FIX_NAME_EACH_NAMESPACE_OBJECT,
1327
+ });
1328
+ }
1329
+ for (const name of targets.namespaceObjects) {
1330
+ if (podNamespace && name === podNamespace) {
1331
+ return refuse("own_namespace", {
1332
+ namespace: name,
1333
+ namespaceSource: "namespace_object",
1334
+ });
1335
+ }
1336
+ if (writeNamespaces.length > 0 && !writeNamespaces.includes(name)) {
1337
+ return refuse("outside_scope", {
1338
+ namespace: name,
1339
+ namespaceSource: "namespace_object",
1340
+ });
1341
+ }
1342
+ }
1343
+ /*
1344
+ * Any other cluster-scoped object lives outside every namespace, so
1345
+ * outside every listed one. Without a list, RBAC bounds it.
1346
+ */
1347
+ if (targets.clusterScopedKinds.length > 0 && writeNamespaces.length > 0) {
1348
+ return refuse("cluster_scoped", {
1349
+ clusterScopedKinds: [...targets.clusterScopedKinds],
1350
+ });
1351
+ }
1352
+ if (!targets.namespaced) {
1353
+ return null;
1354
+ }
1355
+ const resolution = KubectlWriteScope.resolveNamespaces(command.args);
1356
+ if (resolution.ambiguity) {
1357
+ return refuse("namespace_uncertain", {
1358
+ uncertainty: resolution.ambiguity,
1359
+ fix: FIX_PUT_THE_NAMESPACE_FIRST,
1360
+ });
1361
+ }
1362
+ /*
1363
+ * The shared policy already denies a write across all namespaces; this
1364
+ * layer does not rely on that — every namespace includes the ones the
1365
+ * Runner may not change.
1366
+ */
1367
+ if (resolution.allNamespaces) {
1368
+ return refuse("all_namespaces", { fix: FIX_NAME_ONE_NAMESPACE });
1369
+ }
1370
+ const explicit = resolution.namespaces.length > 0;
1371
+ const source = explicit
1372
+ ? "namespace_flag"
1373
+ : "default_namespace";
1374
+ // What a missing -n means: see KubectlWriteScopeInput.usesCredential.
1375
+ const defaultNamespace = input.usesCredential
1376
+ ? "default"
1377
+ : podNamespace;
1378
+ /*
1379
+ * Every namespace the argv sets, blanks kept: `-n ""` names no
1380
+ * namespace kubectl could be held to.
1381
+ */
1382
+ const namespaces = explicit
1383
+ ? resolution.namespaces.map((namespace) => {
1384
+ return normalizeNamespace(namespace);
1385
+ })
1386
+ : [defaultNamespace];
1387
+ const fix = explicit ? "" : FIX_NAME_THE_TARGET_NAMESPACE;
1388
+ for (const target of namespaces) {
1389
+ if (!target) {
1390
+ return refuse("no_namespace", { fix: FIX_NAME_THE_NAMESPACE });
1391
+ }
1392
+ if (podNamespace && target === podNamespace) {
1393
+ return refuse("own_namespace", {
1394
+ namespace: target,
1395
+ namespaceSource: source,
1396
+ fix,
1397
+ });
1398
+ }
1399
+ if (writeNamespaces.length > 0 && !writeNamespaces.includes(target)) {
1400
+ return refuse("outside_scope", {
1401
+ namespace: target,
1402
+ namespaceSource: source,
1403
+ fix,
1404
+ });
1405
+ }
1406
+ }
1407
+ return null;
1408
+ }
1409
+ }
1410
+ /*
1411
+ * Test seams, so a test can hold these tables against the shared policy's
1412
+ * own verdicts: every flag name this reader knows the arity of, a flag's
1413
+ * arity ("value", "none", or null when unknown), every kind spelling it
1414
+ * knows is cluster-scoped, and the cluster-scoped kind a spelling names.
1415
+ */
1416
+ KubectlWriteScope.knownFlagNames = [
1417
+ ...Array.from(BOOLEAN_SHORT_FLAGS),
1418
+ ...Array.from(VALUE_SHORT_FLAGS),
1419
+ ...Array.from(NON_CONSUMING_LONG_FLAGS),
1420
+ ...Array.from(VALUE_LONG_FLAGS),
1421
+ ];
1422
+ KubectlWriteScope.verbFlagArityOverrides = Object.entries(VERB_FLAG_ARITY_OVERRIDES).flatMap(([verb, overrides]) => {
1423
+ return Object.entries(overrides).map(([flag, arity]) => {
1424
+ return { verb, flag, arity };
1425
+ });
1426
+ });
1427
+ KubectlWriteScope.clusterScopedKindSpellings = Object.keys(CLUSTER_SCOPED_KIND_NAMES);
1428
+ export default KubectlWriteScope;
1429
+ //# sourceMappingURL=KubectlWriteScope.js.map