@oneuptime/common 14.0.1 → 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.
- package/Models/DatabaseModels/AlertEpisodeMember.ts +8 -1
- package/Models/DatabaseModels/AutoRemediationSuggestion.ts +63 -0
- package/Models/DatabaseModels/IncidentEpisodeMember.ts +8 -1
- package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +9 -2
- package/Models/DatabaseModels/IncidentPublicNote.ts +9 -2
- package/Models/DatabaseModels/KubernetesCluster.ts +429 -0
- package/Models/DatabaseModels/Monitor.ts +48 -0
- package/Models/DatabaseModels/Runner.ts +5 -4
- package/Models/DatabaseModels/RunnerJob.ts +66 -0
- package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +10 -2
- package/Models/DatabaseModels/WorkflowVariable.ts +479 -2
- package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +79 -25
- package/Server/API/AIInvestigationAPI.ts +341 -0
- package/Server/API/AutoRemediationAPI.ts +184 -2
- package/Server/API/CommonAPI.ts +70 -0
- package/Server/API/KubernetesClusterAiAccessAPI.ts +793 -0
- package/Server/API/MicrosoftTeamsAPI.ts +770 -315
- package/Server/API/MonitorAPI.ts +140 -0
- package/Server/API/OnCallScheduleTimelineAPI.ts +5 -21
- package/Server/API/SlackAPI.ts +447 -99
- package/Server/API/StatusPageAPI.ts +146 -26
- package/Server/API/TelemetryAPI.ts +216 -5
- package/Server/API/UserTwoFactorBackupCodeAPI.ts +1 -0
- package/Server/API/WorkflowVariableAPI.ts +156 -0
- package/Server/Infrastructure/GlobalCache.ts +35 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794300000000-AddOAuth2WorkflowVariables.ts +97 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794400000000-AddKubernetesClusterAiAccess.ts +129 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794500000000-AddIncomingEmailCustomAddressToMonitor.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794600000000-AddAuthTokenExpiresAtToWorkspaceProjectAuthToken.ts +20 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794700000000-RemoveAppAccessTokenFromWorkspaceProjectAuthTokenMiscData.ts +38 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
- package/Server/Middleware/MasterAdminAuthorization.ts +28 -0
- package/Server/Middleware/TelemetryIngest.ts +47 -2
- package/Server/Middleware/UserAuthorization.ts +56 -2
- package/Server/Services/AIAgentService.ts +1 -0
- package/Server/Services/AccessTokenService.ts +121 -48
- package/Server/Services/AlertEpisodeMemberService.ts +9 -0
- package/Server/Services/AlertEpisodeService.ts +14 -1
- package/Server/Services/AlertService.ts +134 -22
- package/Server/Services/AutoRemediationRuleEngineService.ts +968 -39
- package/Server/Services/AutoRemediationRuleService.ts +118 -0
- package/Server/Services/BillingService.ts +1 -0
- package/Server/Services/InboundEmail/Providers/SendGridInboundProvider.ts +16 -22
- package/Server/Services/IncidentEpisodeMemberService.ts +9 -0
- package/Server/Services/IncidentEpisodePublicNoteService.ts +66 -0
- package/Server/Services/IncidentEpisodeRoleMemberService.ts +27 -0
- package/Server/Services/IncidentEpisodeService.ts +14 -1
- package/Server/Services/IncidentGroupingEngineService.ts +11 -0
- package/Server/Services/IncidentMemberService.ts +21 -0
- package/Server/Services/IncidentPublicNoteService.ts +63 -0
- package/Server/Services/IncidentService.ts +120 -20
- package/Server/Services/IncidentStateTimelineService.ts +15 -0
- package/Server/Services/IncidentTemplateService.ts +83 -3
- package/Server/Services/KubernetesClusterAiAccessService.ts +1943 -0
- package/Server/Services/KubernetesClusterService.ts +1570 -1
- package/Server/Services/LogAggregationService.ts +14 -6
- package/Server/Services/MonitorService.ts +651 -52
- package/Server/Services/MonitorStatusTimelineService.ts +639 -2
- package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +2 -0
- package/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.ts +2 -0
- package/Server/Services/OnCallDutyPolicyEscalationRuleUserService.ts +2 -0
- package/Server/Services/OnCallDutyPolicyScheduleService.ts +3 -0
- package/Server/Services/OnCallNotificationAlertingService.ts +36 -12
- package/Server/Services/OnCallSetupReminderService.ts +1 -0
- package/Server/Services/ProbeService.ts +7 -1
- package/Server/Services/ProjectService.ts +11 -1
- package/Server/Services/RunbookCredentialService.ts +26 -1
- package/Server/Services/RunbookSecretService.ts +36 -0
- package/Server/Services/RunnerJobService.ts +941 -23
- package/Server/Services/RunnerService.ts +439 -6
- package/Server/Services/ScheduledMaintenancePublicNoteService.ts +66 -0
- package/Server/Services/ScheduledMaintenanceService.ts +124 -19
- package/Server/Services/ScheduledMaintenanceTemplateService.ts +82 -3
- package/Server/Services/ServiceLevelObjectiveService.ts +14 -1
- package/Server/Services/StatusPagePrivateUserService.ts +1 -0
- package/Server/Services/StatusPageService.ts +301 -74
- package/Server/Services/StatusPageSubscriberService.ts +4 -0
- package/Server/Services/TeamMemberService.ts +309 -7
- package/Server/Services/TraceAggregationService.ts +10 -6
- package/Server/Services/UserEmailService.ts +1 -0
- package/Server/Services/UserNotificationMethodAdminService.ts +1 -0
- package/Server/Services/UserNotificationRuleAdminService.ts +1 -0
- package/Server/Services/UserNotificationRuleService.ts +4 -0
- package/Server/Services/UserService.ts +122 -1
- package/Server/Services/WorkflowVariableService.ts +593 -8
- package/Server/Services/WorkspaceNotificationRuleService.ts +588 -8
- package/Server/Services/WorkspaceProjectAuthTokenService.ts +170 -1
- package/Server/Types/Database/QueryHelper.ts +22 -0
- package/Server/Types/Markdown.ts +502 -27
- package/Server/Utils/AI/ClusterAccess/ClusterAccessContext.ts +182 -0
- package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +525 -0
- package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +854 -0
- package/Server/Utils/AI/CodeFix/CodeFixAgentAuth.ts +22 -2
- package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +1916 -307
- package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +1601 -74
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +139 -7
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +58 -1
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +54 -1
- package/Server/Utils/AI/Toolbox/AIActionTools.ts +14 -6
- package/Server/Utils/AI/Toolbox/ResourceTools.ts +4 -2
- package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +1341 -150
- package/Server/Utils/AutoRemediation/RemediationVerifier.ts +375 -4
- package/Server/Utils/Database/AffectedResourceRelations.ts +127 -0
- package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +240 -1
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +1 -0
- package/Server/Utils/Monitor/MonitorAlert.ts +83 -9
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +5 -1
- package/Server/Utils/Monitor/MonitorIncident.ts +104 -9
- package/Server/Utils/Monitor/MonitorPayloadRedaction.ts +124 -7
- package/Server/Utils/Monitor/ProbeMonitorsNotification.ts +407 -0
- package/Server/Utils/OnCall/OnCallShiftReminderRunner.ts +1 -0
- package/Server/Utils/PushNotificationUtil.ts +45 -0
- package/Server/Utils/Rules/OwnerRuleAssignment.ts +40 -3
- package/Server/Utils/Runbook/RunbookExecutePermission.ts +56 -6
- package/Server/Utils/SessionReplay/SessionReplayReadService.ts +223 -33
- package/Server/Utils/SessionReplay/SessionReplayUserFlowReadService.ts +559 -0
- package/Server/Utils/StartServer.ts +4 -3
- package/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.ts +528 -0
- package/Server/Utils/TwoFactorBackupCodeNotification.ts +1 -0
- package/Server/Utils/UserPermission/UserPermission.ts +16 -0
- package/Server/Utils/Workflow/OAuth2TokenClient.ts +704 -0
- package/Server/Utils/Workflow/WorkflowVariableOAuthToken.ts +318 -0
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +47 -7
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +57 -16
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +193 -214
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +57 -13
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.ts +54 -17
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +179 -161
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +281 -167
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsServiceUrl.ts +114 -0
- package/Server/Utils/Workspace/MicrosoftTeams/ReactionNoteSync.ts +895 -0
- package/Server/Utils/Workspace/Slack/Actions/ActionTypes.ts +7 -9
- package/Server/Utils/Workspace/Slack/Actions/Alert.ts +96 -227
- package/Server/Utils/Workspace/Slack/Actions/AlertEpisode.ts +93 -214
- package/Server/Utils/Workspace/Slack/Actions/Auth.ts +30 -3
- package/Server/Utils/Workspace/Slack/Actions/Authorization.ts +99 -0
- package/Server/Utils/Workspace/Slack/Actions/Incident.ts +117 -283
- package/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.ts +101 -196
- package/Server/Utils/Workspace/Slack/Actions/ReactionNote.ts +329 -0
- package/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.ts +111 -287
- package/Server/Utils/Workspace/Slack/Slack.ts +86 -17
- package/Server/Utils/Workspace/Slack/app-manifest.json +2 -0
- package/Server/Utils/Workspace/Workspace.ts +171 -54
- package/Server/Utils/Workspace/WorkspaceActionAuthorization.ts +252 -0
- package/Server/Utils/Workspace/WorkspaceBase.ts +39 -0
- package/Server/Utils/Workspace/WorkspaceOAuthState.ts +280 -0
- package/Server/Utils/Workspace/WorkspaceProjectReferenceValidator.ts +96 -0
- package/Server/Utils/Workspace/WorkspaceReactionNote.ts +620 -0
- package/Tests/App/Dashboard/AttributesJSONDashboardSurfaces.test.tsx +496 -0
- package/Tests/App/Dashboard/AutoRemediationRulesTableCommandRunners.test.tsx +152 -0
- package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +32 -0
- package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +794 -0
- package/Tests/App/Dashboard/CreateOAuthWorkflowVariableModal.test.tsx +840 -0
- package/Tests/App/Dashboard/CreateWorkflowModal.test.tsx +653 -0
- package/Tests/App/Dashboard/DatabaseMonitorStepForm.test.tsx +197 -0
- package/Tests/App/Dashboard/DatabaseMonitorView.test.tsx +376 -0
- package/Tests/App/Dashboard/DisabledWarningRobustness.test.tsx +262 -0
- package/Tests/App/Dashboard/EventNotes.test.tsx +2080 -0
- package/Tests/App/Dashboard/EventNotesPages.test.tsx +486 -0
- package/Tests/App/Dashboard/EventNotesUtil.test.ts +933 -0
- package/Tests/App/Dashboard/ExceptionMonitorEnvironmentFilter.test.tsx +218 -0
- package/Tests/App/Dashboard/IncidentChangeStateNotifyDefault.test.tsx +665 -0
- package/Tests/App/Dashboard/IncidentEpisodeFeedPublicNoteNotifyDefault.test.tsx +494 -0
- package/Tests/App/Dashboard/IncidentEpisodeOverviewNotifyDefault.test.tsx +706 -0
- package/Tests/App/Dashboard/IncidentFeedPublicNoteNotifyDefault.test.tsx +472 -0
- package/Tests/App/Dashboard/IncidentOverviewNotifyDefault.test.tsx +858 -0
- package/Tests/App/Dashboard/IncomingEmailAddressSettings.test.tsx +567 -0
- package/Tests/App/Dashboard/InvestigationClusterToolFormat.test.ts +241 -0
- package/Tests/App/Dashboard/InvestigationEvidenceKubectl.test.tsx +322 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +12 -0
- package/Tests/App/Dashboard/InvestigationPanelClusterAccess.test.tsx +476 -0
- package/Tests/App/Dashboard/InvestigationRunDetailsKubectl.test.tsx +383 -0
- package/Tests/App/Dashboard/KubectlActivitySummary.test.tsx +366 -0
- package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +2886 -0
- package/Tests/App/Dashboard/KubernetesClusterAiPage.test.tsx +2688 -0
- package/Tests/App/Dashboard/KubernetesClusterAiPageServerParity.test.ts +915 -0
- package/Tests/App/Dashboard/LayerDateTimeFieldTimezoneName.test.tsx +66 -0
- package/Tests/App/Dashboard/LogMonitorPreview.test.tsx +174 -0
- package/Tests/App/Dashboard/MonitorFeedRefresh.test.tsx +279 -0
- package/Tests/App/Dashboard/MonitorMetricQueryConfig.test.ts +244 -0
- package/Tests/App/Dashboard/MonitorOpenWorkCard.test.tsx +381 -0
- package/Tests/App/Dashboard/MonitorOpenWorkHook.test.tsx +784 -0
- package/Tests/App/Dashboard/MonitorOverviewData.test.tsx +2199 -0
- package/Tests/App/Dashboard/MonitorOverviewHero.test.tsx +1169 -0
- package/Tests/App/Dashboard/MonitorOverviewInput.test.ts +1127 -0
- package/Tests/App/Dashboard/MonitorOverviewPage.test.tsx +2136 -0
- package/Tests/App/Dashboard/MonitorOverviewSelectReadable.test.ts +368 -0
- package/Tests/App/Dashboard/MonitorOverviewStatBar.test.tsx +526 -0
- package/Tests/App/Dashboard/MonitorOverviewSupportingCards.test.tsx +542 -0
- package/Tests/App/Dashboard/MonitorOwnersCombine.test.ts +299 -0
- package/Tests/App/Dashboard/MonitorProbesCard.test.tsx +602 -0
- package/Tests/App/Dashboard/MonitorResponseTimeCard.test.tsx +386 -0
- package/Tests/App/Dashboard/MonitorSetupAndConnectionCards.test.tsx +612 -0
- package/Tests/App/Dashboard/MonitorStatusChangesCard.test.tsx +257 -0
- package/Tests/App/Dashboard/MonitorSummaryTestMonitorButton.test.tsx +360 -1
- package/Tests/App/Dashboard/MonitorUptimeHistoryCard.test.tsx +835 -0
- package/Tests/App/Dashboard/MonitorUptimeSummaryHook.test.tsx +971 -0
- package/Tests/App/Dashboard/MonitorViewLayout.test.tsx +580 -0
- package/Tests/App/Dashboard/OnCallLayerRestrictionTimesPreserved.test.tsx +441 -0
- package/Tests/App/Dashboard/OnCallNavbar.test.tsx +214 -0
- package/Tests/App/Dashboard/OnCallSchedulePreviewCalendarDisplay.test.tsx +1389 -0
- package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +205 -1
- package/Tests/App/Dashboard/OnCallScheduleTimeInputsSettingsZone.test.tsx +198 -0
- package/Tests/App/Dashboard/PublicNotePagesNotifyDefault.test.tsx +524 -0
- package/Tests/App/Dashboard/RemediationSuggestionCardApproval.test.tsx +702 -0
- package/Tests/App/Dashboard/RemoveUserFromProject.test.tsx +427 -0
- package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +4 -0
- package/Tests/App/Dashboard/RumSessionReplaySideMenu.test.tsx +3 -1
- package/Tests/App/Dashboard/RunbookStepTypeMaps.test.ts +166 -0
- package/Tests/App/Dashboard/RunnerKubernetesAgentForm.test.tsx +622 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceChangeStateNotifyDefault.test.tsx +1491 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceFeedPublicNoteNotifyDefault.test.tsx +489 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceOverviewNotifyDefault.test.tsx +909 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +14 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceWindowStatsTranslation.test.tsx +307 -0
- package/Tests/App/Dashboard/SecurityEventAttributeColumnPicker.test.tsx +542 -0
- package/Tests/App/Dashboard/SecurityEventConnectionFormModal.test.tsx +174 -0
- package/Tests/App/Dashboard/SecurityEventConnectionsEmptyState.test.tsx +973 -212
- package/Tests/App/Dashboard/SecurityEventConnectionsTable.test.tsx +491 -52
- package/Tests/App/Dashboard/SecurityEventDetailPanel.test.tsx +301 -0
- package/Tests/App/Dashboard/SecurityEventListRow.test.tsx +158 -1
- package/Tests/App/Dashboard/SecurityEventProviderTile.test.tsx +869 -0
- package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +959 -94
- package/Tests/App/Dashboard/SecurityEventsNoResults.test.tsx +2 -0
- package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +274 -1
- package/Tests/App/Dashboard/TeamMembershipRemoval.test.ts +900 -0
- package/Tests/App/Dashboard/TeamMembershipRemovalPages.test.tsx +460 -0
- package/Tests/App/Dashboard/TimezoneElements.test.tsx +321 -0
- package/Tests/App/Dashboard/TimezoneSelectButton.test.tsx +634 -0
- package/Tests/App/Dashboard/TraceExplorer.test.tsx +260 -0
- package/Tests/App/Dashboard/TraceMonitorPreview.test.tsx +182 -0
- package/Tests/App/Dashboard/UserTimezoneInit.test.tsx +544 -0
- package/Tests/App/Dashboard/WorkflowVariableModals.test.tsx +1630 -0
- package/Tests/App/Dashboard/WorkflowVariableRoutes.test.tsx +603 -0
- package/Tests/App/Dashboard/WorkflowVariableTokenStatus.test.tsx +589 -0
- package/Tests/App/Dashboard/WorkflowVariableUtil.test.ts +1543 -0
- package/Tests/App/Dashboard/WorkflowVariableView.test.tsx +3227 -0
- package/Tests/App/Dashboard/WorkflowVariablesTable.test.tsx +1277 -395
- package/Tests/App/StatusPage/StatusPageOverviewMonitorGroupUptime.test.tsx +714 -0
- package/Tests/App/StatusPage/StatusPageOverviewUptimeBars.NewYork.test.tsx +1009 -0
- package/Tests/App/StatusPage/StatusPageOverviewUptimeBars.test.tsx +1092 -0
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +5 -0
- package/Tests/Models/DatabaseModels/KubernetesClusterAiAccessColumns.test.ts +520 -0
- package/Tests/Models/DatabaseModels/MonitorSecretKeyColumnAccessControl.test.ts +66 -2
- package/Tests/Models/DatabaseModels/WorkspaceProjectAuthTokenAccessControl.test.ts +236 -0
- package/Tests/Models/IncidentEpisodePublicNoteNotifyColumnContract.test.ts +103 -0
- package/Tests/Models/IncidentPublicNoteNotifyColumnContract.test.ts +96 -0
- package/Tests/Models/ScheduledMaintenancePublicNoteNotifyColumnContract.test.ts +111 -0
- package/Tests/Server/API/AIInvestigationAPI.test.ts +976 -0
- package/Tests/Server/API/AutoRemediationApproveKubectlRecheck.test.ts +836 -0
- package/Tests/Server/API/CommonAPIAssertCanCreateTable.test.ts +565 -0
- package/Tests/Server/API/CommonAPIAssertCanReadTable.test.ts +282 -0
- package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +1744 -0
- package/Tests/Server/API/LogHistogramAPI.test.ts +371 -0
- package/Tests/Server/API/MicrosoftTeamsLegacyWebhookRemoval.test.ts +125 -30
- package/Tests/Server/API/MicrosoftTeamsOAuthState.test.ts +1121 -0
- package/Tests/Server/API/MonitorUptimeSummaryAPI.test.ts +685 -0
- package/Tests/Server/API/SessionReplayAPI.test.ts +602 -1
- package/Tests/Server/API/SlackChannelCacheAPI.test.ts +358 -0
- package/Tests/Server/API/SlackOAuthState.test.ts +688 -0
- package/Tests/Server/API/StatusPageOverviewMonitorGroupUptime.test.ts +527 -0
- package/Tests/Server/API/StatusPageTestEmailReportAuth.test.ts +2 -0
- package/Tests/Server/API/StatusPageUptimeAPI.test.ts +427 -0
- package/Tests/Server/API/UserProjectsAPI.test.ts +4 -0
- package/Tests/Server/API/WorkflowVariableAPI.test.ts +404 -0
- package/Tests/Server/API/WorkspaceOAuthTestHelpers.ts +289 -0
- package/Tests/Server/API/WorkspaceSendTestNotificationRoutes.test.ts +2064 -0
- package/Tests/Server/Infrastructure/GlobalCache.test.ts +86 -0
- package/Tests/Server/Infrastructure/Postgres/AddKubernetesClusterAiAccessMigration.test.ts +589 -0
- package/Tests/Server/Infrastructure/Postgres/AddOAuth2WorkflowVariablesMigration.test.ts +254 -0
- package/Tests/Server/Middleware/BlockedUserMiddleware.test.ts +403 -0
- package/Tests/Server/Middleware/MasterAdminAuthorization.test.ts +13 -0
- package/Tests/Server/Middleware/PublicRouteUserMiddleware.test.ts +2 -0
- package/Tests/Server/Middleware/RemovedProjectMemberAuthorization.test.ts +469 -0
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +77 -1
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +211 -0
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +358 -0
- package/Tests/Server/Middleware/UserAuthorization.test.ts +97 -0
- package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +2 -0
- package/Tests/Server/Services/AccessTokenProjectUserGrant.test.ts +14 -2
- package/Tests/Server/Services/AccessTokenRemovedMemberAccess.test.ts +1044 -0
- package/Tests/Server/Services/AddOwnersIdempotency.test.ts +5 -0
- package/Tests/Server/Services/AlertEpisodeMemberCreatePermission.test.ts +139 -0
- package/Tests/Server/Services/AutoRemediationClusterRuleEngine.test.ts +1361 -0
- package/Tests/Server/Services/AutoRemediationRuleCommandRunners.test.ts +375 -0
- package/Tests/Server/Services/CrossProjectRelationWriteGuard.test.ts +2384 -0
- package/Tests/Server/Services/FindOwnersProjectMembership.test.ts +267 -0
- package/Tests/Server/Services/InboundEmail/SendGridInboundProviderAddress.test.ts +90 -0
- package/Tests/Server/Services/IncidentEpisodeMemberCreatePermission.test.ts +143 -0
- package/Tests/Server/Services/IncidentEpisodePublicNoteNotifyDefault.test.ts +805 -0
- package/Tests/Server/Services/IncidentPublicNoteNotifyDefault.test.ts +724 -0
- package/Tests/Server/Services/IncidentRoleProjectMembership.test.ts +233 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessAgentRunnerAssignments.test.ts +372 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessBindingGuard.test.ts +1876 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessDeletedRunnerRemedy.test.ts +620 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessGapNextSteps.test.ts +421 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessService.test.ts +3662 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessSubjectClusters.test.ts +405 -0
- package/Tests/Server/Services/KubernetesClusterAiSettingsPermission.test.ts +975 -0
- package/Tests/Server/Services/KubernetesClusterServiceAiAccessFeed.test.ts +497 -0
- package/Tests/Server/Services/KubernetesClusterServiceDeleteSettlesRemediation.test.ts +328 -0
- package/Tests/Server/Services/LogAggregationService.test.ts +99 -0
- package/Tests/Server/Services/MonitorServiceIncomingEmailCustomAddress.test.ts +447 -0
- package/Tests/Server/Services/MonitorServiceProbeFlagSync.test.ts +1334 -0
- package/Tests/Server/Services/MonitorServiceProbeStatusGrouping.test.ts +1640 -0
- package/Tests/Server/Services/MonitorServiceRefreshCurrentStatus.test.ts +225 -0
- package/Tests/Server/Services/MonitorStatusBridgeProbePath.test.ts +8 -8
- package/Tests/Server/Services/MonitorStatusTimelineDailyAggregates.test.ts +264 -1
- package/Tests/Server/Services/MonitorStatusTimelineMergedDowntime.test.ts +284 -0
- package/Tests/Server/Services/MonitorUptimeSummaryService.test.ts +1043 -0
- package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +5 -0
- package/Tests/Server/Services/OnCallUndeliverablePageOwnerMembership.test.ts +359 -0
- package/Tests/Server/Services/ProbeServiceDashboardLink.test.ts +191 -0
- package/Tests/Server/Services/ProjectOwnersProjectMembership.test.ts +221 -0
- package/Tests/Server/Services/RuleRun/IncidentAlertMaintenanceRuleEnginesRun.test.ts +5 -0
- package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupARun.test.ts +28 -0
- package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +9 -1
- package/Tests/Server/Services/RunnerJobEnqueueAiCommandAgentRunner.test.ts +230 -0
- package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +978 -0
- package/Tests/Server/Services/RunnerJobKubectlWriteScope.test.ts +866 -0
- package/Tests/Server/Services/RunnerJobSubmitResultRedaction.test.ts +322 -0
- package/Tests/Server/Services/RunnerJobSubmitResultUnstorableText.test.ts +357 -0
- package/Tests/Server/Services/RunnerJobTimeoutReason.test.ts +227 -0
- package/Tests/Server/Services/RunnerServiceAgentName.test.ts +581 -0
- package/Tests/Server/Services/ScheduledMaintenancePublicNoteNotifyDefault.test.ts +802 -0
- package/Tests/Server/Services/ScheduledMaintenanceSubscriberTemplateFormats.test.ts +53 -0
- package/Tests/Server/Services/ServiceLevelObjectiveLabelAndOwnerRuleEngines.test.ts +5 -0
- package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +12 -0
- package/Tests/Server/Services/StatusPageSubscriberReport.test.ts +1176 -1
- package/Tests/Server/Services/TeamMemberBillingSeatSync.test.ts +9 -0
- package/Tests/Server/Services/TeamMemberOnCallCleanup.test.ts +18 -0
- package/Tests/Server/Services/TeamMemberProjectMembership.test.ts +255 -0
- package/Tests/Server/Services/TeamMemberRemovalRevokesProjectAccess.test.ts +600 -0
- package/Tests/Server/Services/TeamMemberResourceCleanup.test.ts +731 -0
- package/Tests/Server/Services/TeamMemberWorkspaceAccountCleanup.test.ts +164 -0
- package/Tests/Server/Services/TraceAggregationService.test.ts +64 -0
- package/Tests/Server/Services/UserServiceBlockedUser.test.ts +293 -0
- package/Tests/Server/Services/WorkflowVariableOAuthHooks.test.ts +1016 -0
- package/Tests/Server/Services/WorkflowVariableOAuthPostgres.test.ts +543 -0
- package/Tests/Server/Services/WorkflowVariableRenameUniqueness.test.ts +16 -5
- package/Tests/Server/Services/WorkspaceNotificationRuleNoteDelivery.test.ts +473 -0
- package/Tests/Server/Services/WorkspaceNotificationRuleSendTestNotification.test.ts +3690 -0
- package/Tests/Server/Services/WorkspaceProjectAuthTokenMiscDataSecrets.test.ts +374 -0
- package/Tests/Server/Services/WorkspaceProjectAuthTokenSlackChannelCache.test.ts +143 -0
- package/Tests/Server/Types/Database/Permissions/WorkflowVariableOAuthColumnPermission.test.ts +250 -0
- package/Tests/Server/Types/Database/QueryHelperJsonContains.test.ts +96 -0
- package/Tests/Server/Types/Markdown.test.ts +1033 -0
- package/Tests/Server/Utils/AI/ClusterAccessContext.test.ts +285 -0
- package/Tests/Server/Utils/AI/CodeFix/CodeFixAgentAuth.test.ts +159 -1
- package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +752 -0
- package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +1840 -0
- package/Tests/Server/Utils/AI/KubectlJobRunner.test.ts +1067 -0
- package/Tests/Server/Utils/AI/KubectlJobRunnerFinishedJob.test.ts +355 -0
- package/Tests/Server/Utils/AI/PostIncidentStatusUpdateTool.test.ts +496 -0
- package/Tests/Server/Utils/AI/RemediationCommandTools.test.ts +305 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsKubectl.test.ts +1365 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsKubectlOutcome.test.ts +639 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsLiveCluster.test.ts +1585 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsRunnerScope.test.ts +1065 -0
- package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +2138 -1
- package/Tests/Server/Utils/AI/RemediationExecutionRunnerClusterMode.test.ts +1035 -0
- package/Tests/Server/Utils/AI/RemediationKubectlCopyParity.test.ts +517 -0
- package/Tests/Server/Utils/AI/ResourceTools.test.ts +27 -1
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutor.test.ts +1371 -24
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorRollbackRace.test.ts +962 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorUnknownRun.test.ts +518 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanVerification.test.ts +939 -2
- package/Tests/Server/Utils/Database/ProjectScopedRelationReferences.test.ts +371 -0
- package/Tests/Server/Utils/Monitor/AffectedResourceList.test.ts +64 -0
- package/Tests/Server/Utils/Monitor/DatabaseMetricObservationRemediation.test.ts +102 -0
- package/Tests/Server/Utils/Monitor/MonitorAlertCriteriaReferences.test.ts +362 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorBreachingSamples.test.ts +55 -0
- package/Tests/Server/Utils/Monitor/MonitorEmailAddressRedaction.test.ts +255 -0
- package/Tests/Server/Utils/Monitor/MonitorIncidentCriteriaReferences.test.ts +347 -0
- package/Tests/Server/Utils/Monitor/MonitorIncidentMemberRoleMembership.test.ts +203 -0
- package/Tests/Server/Utils/Monitor/ProbeMonitorsNotification.test.ts +1147 -0
- package/Tests/Server/Utils/PushNotificationUtilCreators.test.ts +79 -0
- package/Tests/Server/Utils/ResourceFeed/ResourceFeedUtil.test.ts +21 -1
- package/Tests/Server/Utils/Rules/OwnerRuleAssignment.test.ts +155 -1
- package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +288 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayUserFlowReadService.test.ts +304 -0
- package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +40 -3
- package/Tests/Server/Utils/Workflow/OAuth2TokenClient.test.ts +702 -0
- package/Tests/Server/Utils/Workflow/OAuth2TokenClientHttpIntegration.test.ts +507 -0
- package/Tests/Server/Utils/Workflow/WorkflowVariableOAuthToken.test.ts +831 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsActionAuthorization.test.ts +63 -1
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsAppAccessToken.test.ts +256 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +60 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChatActionAuthorization.test.ts +442 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChats.test.ts +44 -2
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsDirectMessage.test.ts +55 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsReactionNoteSync.test.ts +1522 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsServiceUrl.test.ts +130 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsTeamInstalls.test.ts +4 -4
- package/Tests/Server/Utils/Workspace/Slack/SlackActionAuthorization.test.ts +691 -0
- package/Tests/Server/Utils/Workspace/Slack/SlackMessageByTimestamp.test.ts +253 -0
- package/Tests/Server/Utils/Workspace/Slack/SlackReactionNote.test.ts +574 -0
- package/Tests/Server/Utils/Workspace/WorkspaceActionAuthorization.test.ts +488 -0
- package/Tests/Server/Utils/Workspace/WorkspaceCreateProjectReferences.test.ts +861 -0
- package/Tests/Server/Utils/Workspace/WorkspaceMessageAuthor.test.ts +635 -0
- package/Tests/Server/Utils/Workspace/WorkspaceOAuthState.test.ts +548 -0
- package/Tests/Server/Utils/Workspace/WorkspaceReactionNote.test.ts +839 -0
- package/Tests/Server/Utils/Workspace/WorkspaceSendErrorMessage.test.ts +725 -0
- package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +283 -9
- package/Tests/Types/DateBrowserLocalWallClock.test.ts +280 -0
- package/Tests/Types/DateLocalShortMonthNameFallback.test.ts +389 -0
- package/Tests/Types/DateUserTimezone.test.ts +177 -4
- package/Tests/Types/Kubernetes/KubernetesAgentChartAiAccess.test.ts +306 -0
- package/Tests/Types/Kubernetes/KubernetesClusterAiAccess.test.ts +283 -0
- package/Tests/Types/Kubernetes/KubernetesRunnerPostureWriteScope.test.ts +68 -0
- package/Tests/Types/Monitor/DatabaseMonitor/SqlServerPlatform.test.ts +144 -0
- package/Tests/Types/Monitor/MonitorStepExceptionMonitor.test.ts +160 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +53 -0
- package/Tests/Types/Runbook/RunbookStepType.test.ts +91 -16
- package/Tests/Types/Runner/RunnerLiveStatus.test.ts +14 -3
- package/Tests/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.test.ts +15 -0
- package/Tests/Types/StatusPage/PublicNoteSubscriberNotificationDefault.test.ts +1868 -0
- package/Tests/Types/Timezone.test.ts +5 -0
- package/Tests/Types/TimezoneAlias.test.ts +1034 -0
- package/Tests/Types/Workflow/JiraTemplateFixtures.ts +833 -0
- package/Tests/Types/Workflow/JiraTemplateScripts.test.ts +5414 -0
- package/Tests/Types/Workflow/JiraTemplateSimulation.test.ts +4803 -0
- package/Tests/Types/Workflow/JiraTemplates.test.ts +5429 -0
- package/Tests/Types/Workflow/Templates.test.ts +79 -4
- package/Tests/Types/Workflow/WorkflowVariableOAuth.test.ts +520 -0
- package/Tests/Types/Workspace/WorkspaceNoteReaction.test.ts +177 -0
- package/Tests/UI/Components/AttributesJSON/AttributesJSONView.test.tsx +390 -0
- package/Tests/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.test.tsx +566 -0
- package/Tests/UI/Components/AttributesJSON/JSONHighlight.test.ts +131 -0
- package/Tests/UI/Components/BasicFormDropdownNormalization.test.tsx +276 -1
- package/Tests/UI/Components/Calendar/Calendar.test.tsx +1611 -0
- package/Tests/UI/Components/Calendar/CalendarDayLayout.test.ts +1486 -0
- package/Tests/UI/Components/Calendar/CalendarDayLayoutDst.test.ts +632 -0
- package/Tests/UI/Components/Calendar/CalendarDst.test.tsx +388 -0
- package/Tests/UI/Components/Charts/ChartGroupPlotFloor.test.tsx +170 -0
- package/Tests/UI/Components/Charts/HistogramSelection.test.ts +282 -0
- package/Tests/UI/Components/CustomTimeRangeModal.test.tsx +6 -0
- package/Tests/UI/Components/CustomTimeRangeModalTimezoneTranslation.test.tsx +285 -0
- package/Tests/UI/Components/Dropdown.test.tsx +999 -2
- package/Tests/UI/Components/Forms/FormFieldCheckboxTranslation.test.tsx +216 -0
- package/Tests/UI/Components/Forms/FormFieldTimezoneDescriptionTranslation.test.tsx +461 -0
- package/Tests/UI/Components/Forms/IncidentEpisodePublicNoteNotifyPayload.test.tsx +641 -0
- package/Tests/UI/Components/Forms/IncidentPublicNoteNotifyPayload.test.tsx +346 -0
- package/Tests/UI/Components/Forms/ScheduledMaintenancePublicNoteNotifyPayload.test.tsx +493 -0
- package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +911 -2
- package/Tests/UI/Components/Graphs/DayUptimeGraphTimezone.NewYork.test.tsx +730 -0
- package/Tests/UI/Components/Graphs/DayUptimeGraphTimezone.Tokyo.test.tsx +506 -0
- package/Tests/UI/Components/HistogramClickToZoom.test.tsx +619 -0
- package/Tests/UI/Components/LogDetailsPanelAttributesJSON.test.tsx +248 -0
- package/Tests/UI/Components/LogsViewerHistogramZoom.test.tsx +47 -1
- package/Tests/UI/Components/LogsViewerSmallScreens.test.tsx +620 -0
- package/Tests/UI/Components/ModelPageModelChange.test.tsx +242 -3
- package/Tests/UI/Components/ModelTable/BaseModelTableDeleteConfirmation.test.tsx +521 -0
- package/Tests/UI/Components/MonitorGraphs/Uptime.test.tsx +406 -2
- package/Tests/UI/Components/MonitorGraphs/UptimeBarDayModal.test.tsx +169 -2
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerHistogramClickZoom.test.tsx +266 -0
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerSmallScreens.test.tsx +439 -0
- package/Tests/UI/Components/TimezoneDropdownLegacyValues.test.tsx +704 -0
- package/Tests/UI/Components/UseHistogramZoom.test.tsx +89 -1
- package/Tests/UI/Components/UseLogsHistogram.test.tsx +175 -0
- package/Tests/UI/Monitor/MonitorSummarySnapshotRender.test.tsx +5 -5
- package/Tests/UI/Telemetry/TelemetryDetailPanel.test.tsx +28 -0
- package/Tests/UI/Utils/ProjectUsersModelAPI.test.ts +51 -0
- package/Tests/UI/Utils/Timezone.test.ts +747 -33
- package/Tests/UI/Workspace/SendTestNotificationButton.test.tsx +1854 -0
- package/Tests/UI/Workspace/WorkspaceCardsSendTestNotification.test.tsx +1864 -0
- package/Tests/Utils/AI/InvestigationReport.test.ts +435 -7
- package/Tests/Utils/AiRemediation/KubectlAllowlistValidatorParity.test.ts +1084 -0
- package/Tests/Utils/AiRemediation/KubectlOutputRedactor.test.ts +2531 -0
- package/Tests/Utils/AiRemediation/KubectlPolicy.test.ts +1895 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyAllowlist.test.ts +428 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyChartRbacParity.test.ts +828 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyCustomResourceScope.test.ts +573 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyDenials.test.ts +1525 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyExposeOverrides.test.ts +275 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyNodePatch.test.ts +428 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyObjectWords.test.ts +195 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyPatchParents.test.ts +637 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyPodSecurityBaseline.test.ts +322 -0
- package/Tests/Utils/AiRemediation/KubectlPolicySafeWriteScope.test.ts +1026 -0
- package/Tests/Utils/AiRemediation/KubectlWaitBudget.test.ts +267 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScope.test.ts +390 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScopeCallerParity.test.ts +777 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScopeClusterScoped.test.ts +613 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScopeEntryPoint.test.ts +576 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScopeKubectlSpellings.test.ts +752 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScopeObjectWords.test.ts +358 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScopeOverrides.test.ts +293 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScopeParityCases.ts +598 -0
- package/Tests/Utils/AiRemediation/KubectlWriteScopePolicyParity.test.ts +403 -0
- package/Tests/Utils/Dashboard/DashboardClockComponent.test.ts +154 -5
- package/Tests/Utils/Monitor/IncomingEmailMonitorAddress.test.ts +478 -0
- package/Tests/Utils/Monitor/MonitorCheckScheduleUtil.test.ts +646 -0
- package/Tests/Utils/Monitor/MonitorOverviewCriteriaUtil.test.ts +292 -0
- package/Tests/Utils/Monitor/MonitorOverviewFamily.test.ts +274 -0
- package/Tests/Utils/Monitor/MonitorOverviewPresentationUtil.test.ts +3100 -0
- package/Tests/Utils/Monitor/MonitorOverviewProbeUtil.test.ts +1412 -0
- package/Tests/Utils/Monitor/MonitorOverviewTargetUtil.test.ts +374 -0
- package/Tests/Utils/Monitor/MonitorStatusHistoryUtil.test.ts +332 -0
- package/Tests/Utils/Monitor/MonitorUptimeSummaryUtil.test.ts +946 -0
- package/Tests/Utils/Rum/SessionIdentity.test.ts +94 -0
- package/Tests/Utils/Rum/SessionReplayWafCompatibility.test.ts +840 -0
- package/Tests/Utils/Rum/SessionReplayWireEncoding.test.ts +208 -0
- package/Tests/Utils/Rum/UserFlow.test.ts +1010 -0
- package/Tests/Utils/StatusPage/MonitorGroupMergedDowntimeUtil.test.ts +217 -0
- package/Tests/Utils/StatusPage/ResourceUptime.test.ts +1272 -1
- package/Tests/Utils/StatusPage/UptimeDailyAggregateTotals.test.ts +298 -0
- package/Tests/Utils/StatusPage/UptimeDailyAggregateUtil.test.ts +649 -1
- package/Tests/Utils/StatusPage/UptimeDailyAggregateWindow.test.ts +314 -0
- package/Tests/Utils/Telemetry/AttributesJSON.test.ts +454 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtil.test.ts +418 -2
- package/Tests/Utils/Uptime/DayUptimeGraphUtilMidnightDst.test.ts +160 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.Auckland.test.ts +45 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.Kolkata.test.ts +40 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.London.test.ts +147 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.NewYork.test.ts +48 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezone.Tokyo.test.ts +39 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtilTimezoneCases.ts +1015 -0
- package/Tests/Utils/Uptime/UptimeUtil.test.ts +75 -0
- package/Tests/Utils/Uptime/UptimeUtilChronologicalOrder.test.ts +1279 -0
- package/Types/AutoRemediation/AiRemediationCommandPlan.ts +203 -5
- package/Types/Date.ts +121 -7
- package/Types/Email/EmailMessage.ts +8 -0
- package/Types/Email/EmailTemplateType.ts +1 -0
- package/Types/Exception/ExceptionMessages.ts +1 -0
- package/Types/Kubernetes/KubernetesClusterAiAccess.ts +488 -0
- package/Types/Kubernetes/KubernetesClusterAiAccessPermissions.ts +54 -0
- package/Types/Kubernetes/KubernetesClusterAiAccessToolNames.ts +17 -0
- package/Types/Monitor/DatabaseMonitor/DatabaseMonitorResponse.ts +9 -0
- package/Types/Monitor/DatabaseMonitor/SqlServerPlatform.ts +117 -0
- package/Types/Monitor/KubernetesAlertTemplates.ts +6 -5
- package/Types/Monitor/MonitorStepExceptionMonitor.ts +56 -0
- package/Types/Monitor/MonitorUptimeSummary.ts +113 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +11 -0
- package/Types/Rum/SessionReplay.ts +55 -2
- package/Types/Rum/SessionReplayApi.ts +44 -1
- package/Types/Rum/UserFlow.ts +187 -0
- package/Types/Runbook/RunbookStepType.ts +10 -0
- package/Types/Runbook/RunnerJobOrigin.ts +15 -0
- package/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.ts +6 -2
- package/Types/StatusPage/MergedDowntimeTotals.ts +17 -0
- package/Types/StatusPage/PublicNoteSubscriberNotificationDefault.ts +148 -0
- package/Types/StatusPage/UptimeDailyAggregate.ts +15 -0
- package/Types/Telemetry/TelemetryIngestSurface.ts +9 -0
- package/Types/Timezone.ts +5 -0
- package/Types/TimezoneAlias.ts +385 -0
- package/Types/Workflow/Templates.ts +3041 -2
- package/Types/Workflow/WorkflowVariableOAuth.ts +476 -0
- package/Types/Workspace/WorkspaceNoteReaction.ts +132 -0
- package/Typings/Index.d.ts +24 -0
- package/UI/Components/AttributesJSON/AttributesJSONPreferences.ts +175 -0
- package/UI/Components/AttributesJSON/AttributesJSONView.tsx +138 -0
- package/UI/Components/AttributesJSON/AttributesViewToggle.tsx +79 -0
- package/UI/Components/AttributesJSON/BracesGlyph.tsx +30 -0
- package/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.tsx +491 -0
- package/UI/Components/AttributesJSON/JSONHighlight.ts +77 -0
- package/UI/Components/Calendar/Calendar.css +83 -0
- package/UI/Components/Calendar/Calendar.tsx +136 -7
- package/UI/Components/Calendar/CalendarDayLayout.ts +236 -0
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +23 -1
- package/UI/Components/Charts/Utils/HistogramSelection.ts +117 -0
- package/UI/Components/Charts/Utils/useHistogramRangeSelection.ts +269 -0
- package/UI/Components/Charts/Utils/useHistogramZoom.ts +26 -2
- package/UI/Components/Date/CustomTimeRangeModal.tsx +26 -3
- package/UI/Components/Dropdown/Dropdown.tsx +58 -9
- package/UI/Components/Forms/Fields/FormField.tsx +49 -14
- package/UI/Components/Graphs/DayUptimeGraph.tsx +166 -25
- package/UI/Components/Graphs/UptimeBarTooltip.tsx +10 -2
- package/UI/Components/Graphs/UptimeDaySummary.tsx +8 -0
- package/UI/Components/LogsViewer/LogsViewer.tsx +52 -5
- package/UI/Components/LogsViewer/components/ColumnSelector.tsx +13 -2
- package/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.tsx +13 -1
- package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +91 -76
- package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +15 -1
- package/UI/Components/LogsViewer/components/LogsHistogram.tsx +28 -106
- package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +54 -6
- package/UI/Components/LogsViewer/components/SavedViewsDropdown.tsx +8 -2
- package/UI/Components/LogsViewer/useLogsHistogram.ts +39 -6
- package/UI/Components/ModelTable/BaseModelTable.tsx +66 -14
- package/UI/Components/MonitorGraphs/Uptime.tsx +12 -0
- package/UI/Components/MonitorGraphs/UptimeBarDayModal.tsx +10 -2
- package/UI/Components/Page/ModelPage.tsx +59 -3
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +69 -5
- package/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.tsx +12 -1
- package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +15 -1
- package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +36 -104
- package/UI/Components/TelemetryViewer/components/TelemetrySearchBar.tsx +9 -1
- package/UI/Utils/ModelAPI/ProjectUsersModelAPI.ts +19 -1
- package/UI/Utils/Timezone.ts +69 -28
- package/Utils/AI/InvestigationReport.ts +195 -25
- package/Utils/AiRemediation/KubectlOutputRedactor.ts +1724 -0
- package/Utils/AiRemediation/KubectlPolicy.ts +4136 -0
- package/Utils/AiRemediation/KubectlWaitBudget.ts +156 -0
- package/Utils/AiRemediation/KubectlWriteScope.ts +1964 -0
- package/Utils/Dashboard/Components/DashboardClockComponent.ts +7 -6
- package/Utils/Monitor/IncomingEmailMonitorAddress.ts +292 -0
- package/Utils/Monitor/MonitorCheckScheduleUtil.ts +654 -0
- package/Utils/Monitor/MonitorOverviewCriteriaUtil.ts +188 -0
- package/Utils/Monitor/MonitorOverviewFamily.ts +263 -0
- package/Utils/Monitor/MonitorOverviewPresentationUtil.ts +1958 -0
- package/Utils/Monitor/MonitorOverviewProbeUtil.ts +979 -0
- package/Utils/Monitor/MonitorOverviewTargetUtil.ts +299 -0
- package/Utils/Monitor/MonitorStatusHistoryUtil.ts +201 -0
- package/Utils/Monitor/MonitorUptimeSummaryUtil.ts +638 -0
- package/Utils/Rum/SessionIdentity.ts +44 -0
- package/Utils/Rum/SessionReplayWireEncoding.ts +137 -0
- package/Utils/Rum/UserFlow.ts +1527 -0
- package/Utils/StatusPage/MonitorGroupMergedDowntimeUtil.ts +107 -0
- package/Utils/StatusPage/ResourceUptime.ts +99 -0
- package/Utils/StatusPage/UptimeDailyAggregateUtil.ts +197 -0
- package/Utils/Telemetry/AttributesJSON.ts +367 -0
- package/Utils/Uptime/DayUptimeGraphUtil.ts +165 -0
- package/Utils/Uptime/UptimeUtil.ts +122 -38
- package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js +8 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +62 -0
- package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js +8 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +10 -3
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +10 -3
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js +434 -0
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +49 -0
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Runner.js +4 -4
- package/build/dist/Models/DatabaseModels/Runner.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunnerJob.js +66 -0
- package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +11 -3
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js +487 -3
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js +64 -16
- package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +205 -0
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/AutoRemediationAPI.js +115 -2
- package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
- package/build/dist/Server/API/CommonAPI.js +49 -0
- package/build/dist/Server/API/CommonAPI.js.map +1 -1
- package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js +564 -0
- package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js.map +1 -0
- package/build/dist/Server/API/MicrosoftTeamsAPI.js +465 -176
- package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/MonitorAPI.js +107 -1
- package/build/dist/Server/API/MonitorAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallScheduleTimelineAPI.js +5 -16
- package/build/dist/Server/API/OnCallScheduleTimelineAPI.js.map +1 -1
- package/build/dist/Server/API/SlackAPI.js +322 -78
- package/build/dist/Server/API/SlackAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +123 -17
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +144 -5
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/UserTwoFactorBackupCodeAPI.js +1 -0
- package/build/dist/Server/API/UserTwoFactorBackupCodeAPI.js.map +1 -1
- package/build/dist/Server/API/WorkflowVariableAPI.js +109 -0
- package/build/dist/Server/API/WorkflowVariableAPI.js.map +1 -0
- package/build/dist/Server/Infrastructure/GlobalCache.js +29 -0
- package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794300000000-AddOAuth2WorkflowVariables.js +38 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794300000000-AddOAuth2WorkflowVariables.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794400000000-AddKubernetesClusterAiAccess.js +54 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794400000000-AddKubernetesClusterAiAccess.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794500000000-AddIncomingEmailCustomAddressToMonitor.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794500000000-AddIncomingEmailCustomAddressToMonitor.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794600000000-AddAuthTokenExpiresAtToWorkspaceProjectAuthToken.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794600000000-AddAuthTokenExpiresAtToWorkspaceProjectAuthToken.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794700000000-RemoveAppAccessTokenFromWorkspaceProjectAuthTokenMiscData.js +32 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794700000000-RemoveAppAccessTokenFromWorkspaceProjectAuthTokenMiscData.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js +21 -0
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +32 -2
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +39 -6
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AIAgentService.js +1 -0
- package/build/dist/Server/Services/AIAgentService.js.map +1 -1
- package/build/dist/Server/Services/AccessTokenService.js +87 -42
- package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeMemberService.js +4 -0
- package/build/dist/Server/Services/AlertEpisodeMemberService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeService.js +12 -1
- package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +110 -23
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +716 -30
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleService.js +100 -0
- package/build/dist/Server/Services/AutoRemediationRuleService.js.map +1 -1
- package/build/dist/Server/Services/BillingService.js +1 -0
- package/build/dist/Server/Services/BillingService.js.map +1 -1
- package/build/dist/Server/Services/InboundEmail/Providers/SendGridInboundProvider.js +11 -16
- package/build/dist/Server/Services/InboundEmail/Providers/SendGridInboundProvider.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeMemberService.js +4 -0
- package/build/dist/Server/Services/IncidentEpisodeMemberService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +48 -0
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeRoleMemberService.js +21 -0
- package/build/dist/Server/Services/IncidentEpisodeRoleMemberService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js +12 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -0
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentMemberService.js +14 -0
- package/build/dist/Server/Services/IncidentMemberService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js +48 -0
- package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +99 -21
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +12 -0
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentTemplateService.js +68 -4
- package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterAiAccessService.js +1470 -0
- package/build/dist/Server/Services/KubernetesClusterAiAccessService.js.map +1 -0
- package/build/dist/Server/Services/KubernetesClusterService.js +1097 -0
- package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +14 -6
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +487 -48
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +540 -3
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +2 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.js +2 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js +2 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +3 -0
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallNotificationAlertingService.js +29 -7
- package/build/dist/Server/Services/OnCallNotificationAlertingService.js.map +1 -1
- package/build/dist/Server/Services/OnCallSetupReminderService.js +1 -0
- package/build/dist/Server/Services/OnCallSetupReminderService.js.map +1 -1
- package/build/dist/Server/Services/ProbeService.js +7 -1
- package/build/dist/Server/Services/ProbeService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +11 -1
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RunbookCredentialService.js +24 -0
- package/build/dist/Server/Services/RunbookCredentialService.js.map +1 -1
- package/build/dist/Server/Services/RunbookSecretService.js +44 -0
- package/build/dist/Server/Services/RunbookSecretService.js.map +1 -1
- package/build/dist/Server/Services/RunnerJobService.js +641 -21
- package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
- package/build/dist/Server/Services/RunnerService.js +344 -5
- package/build/dist/Server/Services/RunnerService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +48 -0
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +102 -20
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js +67 -4
- package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js +12 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +1 -0
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +230 -32
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +4 -0
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +270 -11
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +10 -6
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Services/UserEmailService.js +1 -0
- package/build/dist/Server/Services/UserEmailService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationMethodAdminService.js +1 -0
- package/build/dist/Server/Services/UserNotificationMethodAdminService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleAdminService.js +1 -0
- package/build/dist/Server/Services/UserNotificationRuleAdminService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleService.js +4 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +107 -1
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowVariableService.js +396 -7
- package/build/dist/Server/Services/WorkflowVariableService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +463 -7
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js +144 -2
- package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +20 -0
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +394 -27
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js +123 -0
- package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js.map +1 -0
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +344 -0
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -0
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +587 -0
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAuth.js +18 -2
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentAuth.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +1380 -239
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +1099 -68
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +88 -6
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +45 -11
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +41 -11
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js +11 -4
- package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js +4 -2
- package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js.map +1 -1
- package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +997 -141
- package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
- package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +299 -4
- package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -1
- package/build/dist/Server/Utils/Database/AffectedResourceRelations.js +120 -0
- package/build/dist/Server/Utils/Database/AffectedResourceRelations.js.map +1 -0
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +160 -1
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +1 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +59 -12
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +5 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +84 -22
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorPayloadRedaction.js +70 -5
- package/build/dist/Server/Utils/Monitor/MonitorPayloadRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/ProbeMonitorsNotification.js +249 -0
- package/build/dist/Server/Utils/Monitor/ProbeMonitorsNotification.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js.map +1 -1
- package/build/dist/Server/Utils/PushNotificationUtil.js +27 -0
- package/build/dist/Server/Utils/PushNotificationUtil.js.map +1 -1
- package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js +26 -3
- package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js.map +1 -1
- package/build/dist/Server/Utils/Runbook/RunbookExecutePermission.js +38 -3
- package/build/dist/Server/Utils/Runbook/RunbookExecutePermission.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +143 -23
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayUserFlowReadService.js +406 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayUserFlowReadService.js.map +1 -0
- package/build/dist/Server/Utils/StartServer.js +4 -3
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js +382 -0
- package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js.map +1 -0
- package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js +1 -0
- package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js.map +1 -1
- package/build/dist/Server/Utils/UserPermission/UserPermission.js +10 -0
- package/build/dist/Server/Utils/UserPermission/UserPermission.js.map +1 -1
- package/build/dist/Server/Utils/Workflow/OAuth2TokenClient.js +447 -0
- package/build/dist/Server/Utils/Workflow/OAuth2TokenClient.js.map +1 -0
- package/build/dist/Server/Utils/Workflow/WorkflowVariableOAuthToken.js +202 -0
- package/build/dist/Server/Utils/Workflow/WorkflowVariableOAuthToken.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +39 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +44 -4
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +150 -191
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +44 -4
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.js +39 -17
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Monitor.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +151 -145
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +221 -127
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsServiceUrl.js +91 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsServiceUrl.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/ReactionNoteSync.js +673 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/ReactionNoteSync.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js +3 -9
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js +65 -166
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js +63 -157
- package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js +23 -3
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Authorization.js +92 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Authorization.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js +81 -210
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.js +68 -138
- package/build/dist/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ReactionNote.js +240 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ReactionNote.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js +85 -212
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +60 -17
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/app-manifest.json +2 -0
- package/build/dist/Server/Utils/Workspace/Workspace.js +134 -41
- package/build/dist/Server/Utils/Workspace/Workspace.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/WorkspaceActionAuthorization.js +197 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceActionAuthorization.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceBase.js +32 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/WorkspaceOAuthState.js +199 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceOAuthState.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceProjectReferenceValidator.js +91 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceProjectReferenceValidator.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceReactionNote.js +450 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceReactionNote.js.map +1 -0
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +103 -5
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
- package/build/dist/Types/Date.js +97 -7
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Exception/ExceptionMessages.js +1 -0
- package/build/dist/Types/Exception/ExceptionMessages.js.map +1 -1
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +245 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js +49 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js.map +1 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessToolNames.js +16 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessToolNames.js.map +1 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/SqlServerPlatform.js +104 -0
- package/build/dist/Types/Monitor/DatabaseMonitor/SqlServerPlatform.js.map +1 -0
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +6 -5
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepExceptionMonitor.js +32 -0
- package/build/dist/Types/Monitor/MonitorStepExceptionMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorUptimeSummary.js +52 -0
- package/build/dist/Types/Monitor/MonitorUptimeSummary.js.map +1 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +9 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplay.js +52 -2
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayApi.js +11 -0
- package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -1
- package/build/dist/Types/Rum/UserFlow.js +115 -0
- package/build/dist/Types/Rum/UserFlow.js.map +1 -0
- package/build/dist/Types/Runbook/RunbookStepType.js +10 -0
- package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
- package/build/dist/Types/Runbook/RunnerJobOrigin.js +14 -0
- package/build/dist/Types/Runbook/RunnerJobOrigin.js.map +1 -1
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js +2 -2
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js.map +1 -1
- package/build/dist/Types/StatusPage/MergedDowntimeTotals.js +2 -0
- package/build/dist/Types/StatusPage/MergedDowntimeTotals.js.map +1 -0
- package/build/dist/Types/StatusPage/PublicNoteSubscriberNotificationDefault.js +65 -0
- package/build/dist/Types/StatusPage/PublicNoteSubscriberNotificationDefault.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +8 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
- package/build/dist/Types/Timezone.js +5 -0
- package/build/dist/Types/Timezone.js.map +1 -1
- package/build/dist/Types/TimezoneAlias.js +340 -0
- package/build/dist/Types/TimezoneAlias.js.map +1 -0
- package/build/dist/Types/Workflow/Templates.js +2694 -2
- package/build/dist/Types/Workflow/Templates.js.map +1 -1
- package/build/dist/Types/Workflow/WorkflowVariableOAuth.js +314 -0
- package/build/dist/Types/Workflow/WorkflowVariableOAuth.js.map +1 -0
- package/build/dist/Types/Workspace/WorkspaceNoteReaction.js +98 -0
- package/build/dist/Types/Workspace/WorkspaceNoteReaction.js.map +1 -0
- package/build/dist/UI/Components/AttributesJSON/AttributesJSONPreferences.js +95 -0
- package/build/dist/UI/Components/AttributesJSON/AttributesJSONPreferences.js.map +1 -0
- package/build/dist/UI/Components/AttributesJSON/AttributesJSONView.js +44 -0
- package/build/dist/UI/Components/AttributesJSON/AttributesJSONView.js.map +1 -0
- package/build/dist/UI/Components/AttributesJSON/AttributesViewToggle.js +27 -0
- package/build/dist/UI/Components/AttributesJSON/AttributesViewToggle.js.map +1 -0
- package/build/dist/UI/Components/AttributesJSON/BracesGlyph.js +9 -0
- package/build/dist/UI/Components/AttributesJSON/BracesGlyph.js.map +1 -0
- package/build/dist/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.js +260 -0
- package/build/dist/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.js.map +1 -0
- package/build/dist/UI/Components/AttributesJSON/JSONHighlight.js +56 -0
- package/build/dist/UI/Components/AttributesJSON/JSONHighlight.js.map +1 -0
- package/build/dist/UI/Components/Calendar/Calendar.js +94 -7
- package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
- package/build/dist/UI/Components/Calendar/CalendarDayLayout.js +136 -0
- package/build/dist/UI/Components/Calendar/CalendarDayLayout.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/HistogramSelection.js +72 -0
- package/build/dist/UI/Components/Charts/Utils/HistogramSelection.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js +178 -0
- package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js +13 -1
- package/build/dist/UI/Components/Charts/Utils/useHistogramZoom.js.map +1 -1
- package/build/dist/UI/Components/Date/CustomTimeRangeModal.js +20 -4
- package/build/dist/UI/Components/Date/CustomTimeRangeModal.js.map +1 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js +33 -9
- package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +36 -13
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +117 -11
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js +5 -1
- package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js.map +1 -1
- package/build/dist/UI/Components/Graphs/UptimeDaySummary.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +36 -8
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/ColumnSelector.js +10 -2
- package/build/dist/UI/Components/LogsViewer/components/ColumnSelector.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js +9 -1
- package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +16 -15
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +14 -74
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +22 -5
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/SavedViewsDropdown.js +9 -2
- package/build/dist/UI/Components/LogsViewer/components/SavedViewsDropdown.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/useLogsHistogram.js +16 -5
- package/build/dist/UI/Components/LogsViewer/useLogsHistogram.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +23 -8
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +7 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js +5 -1
- package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js.map +1 -1
- package/build/dist/UI/Components/Page/ModelPage.js +37 -3
- package/build/dist/UI/Components/Page/ModelPage.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +27 -6
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js +7 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +17 -77
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js +10 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/ProjectUsersModelAPI.js +15 -1
- package/build/dist/UI/Utils/ModelAPI/ProjectUsersModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/Timezone.js +52 -17
- package/build/dist/UI/Utils/Timezone.js.map +1 -1
- package/build/dist/Utils/AI/InvestigationReport.js +116 -21
- package/build/dist/Utils/AI/InvestigationReport.js.map +1 -1
- package/build/dist/Utils/AiRemediation/KubectlOutputRedactor.js +1209 -0
- package/build/dist/Utils/AiRemediation/KubectlOutputRedactor.js.map +1 -0
- package/build/dist/Utils/AiRemediation/KubectlPolicy.js +2973 -0
- package/build/dist/Utils/AiRemediation/KubectlPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/KubectlWaitBudget.js +99 -0
- package/build/dist/Utils/AiRemediation/KubectlWaitBudget.js.map +1 -0
- package/build/dist/Utils/AiRemediation/KubectlWriteScope.js +1429 -0
- package/build/dist/Utils/AiRemediation/KubectlWriteScope.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardClockComponent.js +7 -6
- package/build/dist/Utils/Dashboard/Components/DashboardClockComponent.js.map +1 -1
- package/build/dist/Utils/Monitor/IncomingEmailMonitorAddress.js +214 -0
- package/build/dist/Utils/Monitor/IncomingEmailMonitorAddress.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorCheckScheduleUtil.js +471 -0
- package/build/dist/Utils/Monitor/MonitorCheckScheduleUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorOverviewCriteriaUtil.js +107 -0
- package/build/dist/Utils/Monitor/MonitorOverviewCriteriaUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorOverviewFamily.js +191 -0
- package/build/dist/Utils/Monitor/MonitorOverviewFamily.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorOverviewPresentationUtil.js +1259 -0
- package/build/dist/Utils/Monitor/MonitorOverviewPresentationUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorOverviewProbeUtil.js +593 -0
- package/build/dist/Utils/Monitor/MonitorOverviewProbeUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorOverviewTargetUtil.js +195 -0
- package/build/dist/Utils/Monitor/MonitorOverviewTargetUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorStatusHistoryUtil.js +127 -0
- package/build/dist/Utils/Monitor/MonitorStatusHistoryUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorUptimeSummaryUtil.js +464 -0
- package/build/dist/Utils/Monitor/MonitorUptimeSummaryUtil.js.map +1 -0
- package/build/dist/Utils/Rum/SessionIdentity.js +31 -1
- package/build/dist/Utils/Rum/SessionIdentity.js.map +1 -1
- package/build/dist/Utils/Rum/SessionReplayWireEncoding.js +128 -0
- package/build/dist/Utils/Rum/SessionReplayWireEncoding.js.map +1 -0
- package/build/dist/Utils/Rum/UserFlow.js +941 -0
- package/build/dist/Utils/Rum/UserFlow.js.map +1 -0
- package/build/dist/Utils/StatusPage/MonitorGroupMergedDowntimeUtil.js +82 -0
- package/build/dist/Utils/StatusPage/MonitorGroupMergedDowntimeUtil.js.map +1 -0
- package/build/dist/Utils/StatusPage/ResourceUptime.js +46 -0
- package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
- package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js +148 -0
- package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js.map +1 -1
- package/build/dist/Utils/Telemetry/AttributesJSON.js +245 -0
- package/build/dist/Utils/Telemetry/AttributesJSON.js.map +1 -0
- package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js +103 -0
- package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js.map +1 -1
- package/build/dist/Utils/Uptime/UptimeUtil.js +91 -27
- package/build/dist/Utils/Uptime/UptimeUtil.js.map +1 -1
- package/jest.config.json +2 -1
- package/package.json +2 -1
- package/tsconfig.tests.json +36 -0
- package/Tests/UI/Components/EmptyState/EmptyStateGuideLinks.test.tsx +0 -337
- package/UI/Components/EmptyState/EmptyStateGuideLinks.tsx +0 -124
- package/build/dist/UI/Components/EmptyState/EmptyStateGuideLinks.js +0 -47
- package/build/dist/UI/Components/EmptyState/EmptyStateGuideLinks.js.map +0 -1
|
@@ -0,0 +1,1209 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Redacts credential-looking material from kubectl output before it reaches
|
|
3
|
+
* a language model or is stored next to an AI run.
|
|
4
|
+
*
|
|
5
|
+
* Pure and dependency-free on purpose, like KubectlPolicy: the same code can
|
|
6
|
+
* run on the server (KubectlJobRunner, the one output path investigations
|
|
7
|
+
* and remediation share) and, if ever needed, inside the Runner before the
|
|
8
|
+
* bytes leave the cluster.
|
|
9
|
+
*
|
|
10
|
+
* What it understands — all deterministic and line-oriented, so output the
|
|
11
|
+
* Runner truncated is handled exactly like complete output:
|
|
12
|
+
* 1. The `data:` / `stringData:` / `binaryData:` blocks of Kubernetes
|
|
13
|
+
* objects, in YAML or pretty-printed JSON, single objects or Lists. For
|
|
14
|
+
* a Secret — or whenever the object's kind cannot be determined — every
|
|
15
|
+
* value in the block is masked (keys stay, so the model still knows
|
|
16
|
+
* which keys exist). For any other kind (a ConfigMap) only the values
|
|
17
|
+
* whose key looks credential-like are masked, so configuration stays
|
|
18
|
+
* readable. `kubectl describe configmap` prints the same data as
|
|
19
|
+
* "KEY:", a "----" rule and the value on the lines below; a
|
|
20
|
+
* credential-like key loses that whole value.
|
|
21
|
+
* 2. Container env entries (`- name: X` / `value: Y`, YAML or JSON) whose
|
|
22
|
+
* name looks credential-like: the value is masked; a valueFrom
|
|
23
|
+
* reference is kept because it holds no material.
|
|
24
|
+
* 3. Any `key: value` or `key=value` whose key looks credential-like,
|
|
25
|
+
* wherever it appears: describe output, kubeconfig-like text, container
|
|
26
|
+
* logs, command-line flags, one-line JSON (`{"password":"…"}`, as
|
|
27
|
+
* jsonpath and structured logs print it). A masked block scalar
|
|
28
|
+
* (`tls.key: |`) drops its whole block.
|
|
29
|
+
* 4. A credential flag whose value is the NEXT argv element rather than
|
|
30
|
+
* `=`-joined: `- --db-password` / `- value` in YAML, the same pair in a
|
|
31
|
+
* JSON array or describe's Args block, and `--requirepass value` inside
|
|
32
|
+
* one line. A tool's short password flag (`mysql -pX`, `redis-cli -a X`)
|
|
33
|
+
* only where the command names that tool.
|
|
34
|
+
* 5. The `kubectl.kubernetes.io/last-applied-configuration` annotation —
|
|
35
|
+
* the entire applied object, Secret data included, as one JSON string —
|
|
36
|
+
* is replaced wholesale.
|
|
37
|
+
* 6. Inline material regardless of structure: `scheme://user:password@`,
|
|
38
|
+
* `Bearer …` / `Basic …` tokens, JWTs, PEM private keys, one-line JSON
|
|
39
|
+
* `"data":{…}` objects and `"name":"…","value":"…"` env pairs, and
|
|
40
|
+
* base64 runs that are padded or long.
|
|
41
|
+
*
|
|
42
|
+
* Over-masking is accepted; under-masking is not. When the structure is
|
|
43
|
+
* ambiguous (no kind in sight, unexpected nesting inside a data block) the
|
|
44
|
+
* value is masked.
|
|
45
|
+
*/
|
|
46
|
+
export const KUBECTL_REDACTED_MARKER = "[redacted]";
|
|
47
|
+
// Every marker this module writes starts with it: "[redacted-jwt]" too.
|
|
48
|
+
const REDACTED_PREFIX = "[redacted";
|
|
49
|
+
const DATA_BLOCK_KEYS = new Set([
|
|
50
|
+
"data",
|
|
51
|
+
"stringData",
|
|
52
|
+
"binaryData",
|
|
53
|
+
]);
|
|
54
|
+
const LAST_APPLIED_CONFIGURATION_ANNOTATION = "kubectl.kubernetes.io/last-applied-configuration";
|
|
55
|
+
/*
|
|
56
|
+
* A key or env name that names credential material. Deliberately broad:
|
|
57
|
+
* `auth` also catches "authorization-mode", which is harmless to hide,
|
|
58
|
+
* while a narrow list would miss "DB_PASSWORD". A bare `key` is NOT
|
|
59
|
+
* credential-like (taints, tolerations and secretKeyRef all have one), but
|
|
60
|
+
* `tls.key`, `KEY_ID`, `api_key` and `private-key-file` are.
|
|
61
|
+
*
|
|
62
|
+
* `pass`, `pw` and `creds` count as a whole segment only — DB_PASS,
|
|
63
|
+
* RABBITMQ_DEFAULT_PASS, LDAP_BIND_PW, DB_CREDS, `--pass` — so "bypass",
|
|
64
|
+
* "compass", "passed", "MAX_PASSES" and "ssl-passthrough" stay readable,
|
|
65
|
+
* and "pass-through" is spelled out as not a credential. A few names glue
|
|
66
|
+
* a prefix on instead: Redis's `requirepass`, "dbpass", "smtppass".
|
|
67
|
+
*/
|
|
68
|
+
const CREDENTIAL_NAME_REGEX = /passw(?:or)?d|passwd|pwd|passphrase|passcode|(?:^|[-_./])pass(?:$|[-_.](?!through))|(?:require|db|user|admin|root|smtp|mail|redis|ldap|bind|sasl|ftp)pass(?![a-z])|(?:^|[-_./])(?:pw|creds?)(?:$|[-_.])|secret|token|credential|auth|cert|bearer|cookie|dockerconfig|dockercfg|webhook|(?:api|access|private|priv|encryption|signing|client|ssh|master|license|service|account|session|app|consumer|shared)[-_.]?key|(?:^|[-_./])key[-_.]|[-_./]key$|(?:^|[-_./])(?:dsn|salt|otp)(?:[-_.]|$)|\.(?:crt|cer|pem|p12|pfx|jks)$/i;
|
|
69
|
+
/*
|
|
70
|
+
* Keys that match the pattern above but only ever REFER to a credential —
|
|
71
|
+
* the name of a Secret a volume mounts, whether a token is automounted —
|
|
72
|
+
* and that an on-call engineer needs when a pod cannot start. Compared
|
|
73
|
+
* lowercase, with leading dashes stripped so flag names match too.
|
|
74
|
+
*/
|
|
75
|
+
const REFERENCE_ONLY_KEYS = new Set([
|
|
76
|
+
"secretname",
|
|
77
|
+
"secretnamespace",
|
|
78
|
+
"secretproviderclass",
|
|
79
|
+
"secretkeyref",
|
|
80
|
+
"secretref",
|
|
81
|
+
"configmapkeyref",
|
|
82
|
+
"tokenexpirationseconds",
|
|
83
|
+
"expirationseconds",
|
|
84
|
+
"serviceaccounttoken",
|
|
85
|
+
"automountserviceaccounttoken",
|
|
86
|
+
"imagepullsecrets",
|
|
87
|
+
"image pull secrets",
|
|
88
|
+
"mountable secrets",
|
|
89
|
+
"tokens",
|
|
90
|
+
"audience",
|
|
91
|
+
"authorization-mode",
|
|
92
|
+
"anonymous-auth",
|
|
93
|
+
"tls-min-version",
|
|
94
|
+
"tls-cipher-suites",
|
|
95
|
+
"cert-manager.io/cluster-issuer",
|
|
96
|
+
"cert-manager.io/issuer",
|
|
97
|
+
]);
|
|
98
|
+
/*
|
|
99
|
+
* Values that carry no material and read better untouched: an absent
|
|
100
|
+
* value, and describe's own "<set to the key 'x' in secret 'y'>" reference
|
|
101
|
+
* for an env entry that comes from a Secret.
|
|
102
|
+
*/
|
|
103
|
+
const EXEMPT_VALUES = new Set([
|
|
104
|
+
"",
|
|
105
|
+
'""',
|
|
106
|
+
"''",
|
|
107
|
+
"null",
|
|
108
|
+
"~",
|
|
109
|
+
"{}",
|
|
110
|
+
"[]",
|
|
111
|
+
"{",
|
|
112
|
+
"[",
|
|
113
|
+
"<none>",
|
|
114
|
+
"<nil>",
|
|
115
|
+
"<unset>",
|
|
116
|
+
"<invalid>",
|
|
117
|
+
"<empty>",
|
|
118
|
+
]);
|
|
119
|
+
const EXEMPT_VALUE_PREFIX = "<set to the key ";
|
|
120
|
+
// YAML block scalar indicators: |, |-, |+, >, >-, >2 ...
|
|
121
|
+
const BLOCK_SCALAR_REGEX = /^[|>][+-]?[0-9]*$/;
|
|
122
|
+
/*
|
|
123
|
+
* `key: value`, `key:` and `"key": value,` at the start of a line's content.
|
|
124
|
+
* Unquoted keys may contain spaces (describe prints "Image ID:") but never
|
|
125
|
+
* a colon, so "2026-09-22T10:00:00Z" and "http://…" are not keys. The colon
|
|
126
|
+
* must be followed by whitespace or end the line for the same reason.
|
|
127
|
+
*/
|
|
128
|
+
const KEY_VALUE_LINE_REGEX = /^(?:"([^"]*)"|'([^']*)'|([^\s"'#:{}[\],][^:"']*?))[ \t]*:(?:[ \t]+|$)/;
|
|
129
|
+
/*
|
|
130
|
+
* An unquoted key with whitespace or `=` in it may be free text rather than
|
|
131
|
+
* a name: "connecting DB_PASSWORD=hunter2 host: db" parses as the key
|
|
132
|
+
* "connecting DB_PASSWORD=hunter2 host". Such a key is scanned for inline
|
|
133
|
+
* material too.
|
|
134
|
+
*/
|
|
135
|
+
const FREE_TEXT_KEY_REGEX = /[\s=]/;
|
|
136
|
+
const LIST_ITEM_PREFIX_REGEX = /^-(?:[ \t]+|$)/;
|
|
137
|
+
const LEADING_WHITESPACE_REGEX = /^[ \t]*/;
|
|
138
|
+
/*
|
|
139
|
+
* scheme://user:password@host — the password only; an empty user still
|
|
140
|
+
* counts. The match starts at "://" and the scheme is checked by a
|
|
141
|
+
* lookbehind, so the scan stays linear: a pattern that STARTS with the
|
|
142
|
+
* scheme retries `[a-z][a-z0-9+.-]*` from every word boundary of a long
|
|
143
|
+
* dotted run ("eyJ.eyJ.eyJ…", "a.b.c.…") and backtracks through the whole
|
|
144
|
+
* run each time — 200 KB of pod log took over 30 seconds on one thread.
|
|
145
|
+
*/
|
|
146
|
+
const URL_CREDENTIAL_REGEX = /:\/\/(?<=\b[a-z][a-z0-9+.-]*:\/\/)([^\s/:@"']*):([^\s/@"']+)@/gi;
|
|
147
|
+
const BEARER_TOKEN_REGEX = /\b(Bearer)[ \t]+([A-Za-z0-9._~+/-]{8,}=*)/g;
|
|
148
|
+
// Prose ("Basic configuration", "Bearer authentication") is lowercase letters only.
|
|
149
|
+
const LOWERCASE_WORD_REGEX = /^[a-z]+$/;
|
|
150
|
+
const BASIC_TOKEN_REGEX = /\b(Basic)[ \t]+([A-Za-z0-9+/]{8,}={0,2})(?![A-Za-z0-9+/=])/g;
|
|
151
|
+
const JWT_REGEX = /eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{5,}/g;
|
|
152
|
+
/*
|
|
153
|
+
* PEM private key blocks. A block whose END line was truncated away is
|
|
154
|
+
* masked to the end of the output rather than left standing.
|
|
155
|
+
*/
|
|
156
|
+
const PRIVATE_KEY_BLOCK_REGEX = /-----BEGIN (?:[A-Z0-9]+ )*PRIVATE KEY-----[\s\S]*?(?:-----END (?:[A-Z0-9]+ )*PRIVATE KEY-----|$)/g;
|
|
157
|
+
/*
|
|
158
|
+
* Compact JSON, as in a one-line `"data":{...}` — the quote may be escaped
|
|
159
|
+
* when the JSON itself sits inside a JSON string.
|
|
160
|
+
*/
|
|
161
|
+
const INLINE_JSON_DATA_OBJECT_REGEX = /("|\\")(?:data|stringData|binaryData)(?:"|\\")\s*:\s*\{/g;
|
|
162
|
+
/*
|
|
163
|
+
* A JSON string body: anything but an unescaped quote. Two spellings, for
|
|
164
|
+
* plain JSON and for JSON escaped inside another JSON string.
|
|
165
|
+
*/
|
|
166
|
+
const JSON_STRING_BODY = '(?:[^"\\\\]|\\\\.)*';
|
|
167
|
+
const ESCAPED_JSON_STRING_BODY = '(?:[^"\\\\]|\\\\[^"])*';
|
|
168
|
+
const JSON_QUOTE = '"';
|
|
169
|
+
const ESCAPED_JSON_QUOTE = '\\\\"';
|
|
170
|
+
function buildJsonEnvPairRegexes(isEscaped) {
|
|
171
|
+
const body = isEscaped ? ESCAPED_JSON_STRING_BODY : JSON_STRING_BODY;
|
|
172
|
+
const q = isEscaped ? ESCAPED_JSON_QUOTE : JSON_QUOTE;
|
|
173
|
+
return {
|
|
174
|
+
nameFirst: new RegExp(`(${q}name${q}\\s*:\\s*${q}(${body})${q}\\s*,\\s*${q}value${q}\\s*:\\s*${q})(${body})(${q})`, "g"),
|
|
175
|
+
valueFirst: new RegExp(`(${q}value${q}\\s*:\\s*${q})(${body})(${q}\\s*,\\s*${q}name${q}\\s*:\\s*${q}(${body})${q})`, "g"),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const JSON_ENV_PAIR_REGEXES = [buildJsonEnvPairRegexes(false), buildJsonEnvPairRegexes(true)];
|
|
179
|
+
function buildJsonCredentialPairRule(isEscaped) {
|
|
180
|
+
const body = isEscaped ? ESCAPED_JSON_STRING_BODY : JSON_STRING_BODY;
|
|
181
|
+
const q = isEscaped ? ESCAPED_JSON_QUOTE : JSON_QUOTE;
|
|
182
|
+
return {
|
|
183
|
+
quote: isEscaped ? '\\"' : '"',
|
|
184
|
+
regex: new RegExp(`(${q}([^"\\\\\\n]{1,256})${q}\\s*:\\s*)(?:(${q})(${body})(${q}|$)|(-?[0-9][0-9.eE+-]*))`, "g"),
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
const JSON_CREDENTIAL_PAIR_RULES = [
|
|
188
|
+
buildJsonCredentialPairRule(false),
|
|
189
|
+
buildJsonCredentialPairRule(true),
|
|
190
|
+
];
|
|
191
|
+
/*
|
|
192
|
+
* `key=value` / `key: value` / `key:value` anywhere in a line — logs, args,
|
|
193
|
+
* Go-formatted maps (`map[password:cGFz…]`). The key is judged by
|
|
194
|
+
* isCredentialKey, so this never touches "timeout=1s" or "op=Exists". A
|
|
195
|
+
* JSON-escaped line break (`…\npassword: x\nuser: bob` inside a log
|
|
196
|
+
* message) separates pairs like a real one.
|
|
197
|
+
*/
|
|
198
|
+
const INLINE_PAIR_REGEX = /(^|[\s[,{("']|\\[nrt])([A-Za-z0-9_./-]+)([ \t]*[:=][ \t]*)("(?:[^"\\]|\\.)*"|'[^']*'|(?:[^\s,;&\]})"'\\]|\\(?![nrt]))+)/g;
|
|
199
|
+
/*
|
|
200
|
+
* An image reference — `registry.example.com/auth:1.2.3`,
|
|
201
|
+
* `ghcr.io/org/secret-service:2.0` — has the shape of an inline pair whose
|
|
202
|
+
* key is a path and whose separator is a bare colon with no whitespace
|
|
203
|
+
* after it. A real pair with a path-shaped key (an annotation in describe
|
|
204
|
+
* output, `vault.hashicorp.com/agent-inject-token: abc123`) always has the
|
|
205
|
+
* space. The tag is what an on-call engineer needs most, so it stays.
|
|
206
|
+
*/
|
|
207
|
+
function isImageReferencePair(key, separator) {
|
|
208
|
+
return key.includes("/") && separator === ":";
|
|
209
|
+
}
|
|
210
|
+
/*
|
|
211
|
+
* A command-line flag standing alone as one argv element: "--db-password",
|
|
212
|
+
* "-password". A credential flag's value is then the NEXT element, which
|
|
213
|
+
* the pair rules above never see.
|
|
214
|
+
*/
|
|
215
|
+
const FLAG_TOKEN_REGEX = /^-{1,2}[A-Za-z][A-Za-z0-9_.-]*$/;
|
|
216
|
+
/*
|
|
217
|
+
* A flag's value inside one line: a quoted string, or a bare word that is
|
|
218
|
+
* neither the next flag ("-…") nor a marker this module already wrote.
|
|
219
|
+
*/
|
|
220
|
+
const INLINE_FLAG_VALUE_PATTERN = /("(?:[^"\\]|\\.)*"|'[^']*'|[^\s"'[\-,;&|`\])}][^\s"',;&|`\])}]*)/;
|
|
221
|
+
const INLINE_FLAG_VALUE_SOURCE = INLINE_FLAG_VALUE_PATTERN.source;
|
|
222
|
+
// Where a flag can start inside a line.
|
|
223
|
+
const INLINE_FLAG_BOUNDARY_PATTERN = /(^|[\s"'[(,;&|`])/;
|
|
224
|
+
const INLINE_FLAG_BOUNDARY_SOURCE = INLINE_FLAG_BOUNDARY_PATTERN.source;
|
|
225
|
+
/*
|
|
226
|
+
* `--requirepass value` / `-password value` in one line: a command in a
|
|
227
|
+
* log, describe's probe line, an `sh -c` script. The flag is judged by
|
|
228
|
+
* isCredentialKey, so "--port 8080" and "--tail 100" stay.
|
|
229
|
+
*/
|
|
230
|
+
const INLINE_SPLIT_FLAG_REGEX = new RegExp(`${INLINE_FLAG_BOUNDARY_SOURCE}(--?[A-Za-z][A-Za-z0-9_.-]*)([ \\t]+)${INLINE_FLAG_VALUE_SOURCE}`, "g");
|
|
231
|
+
/*
|
|
232
|
+
* `"--db-password","value"` — a flag and its value as neighbouring JSON
|
|
233
|
+
* array strings (jsonpath `{.spec.containers[*].args}`), plain, escaped
|
|
234
|
+
* inside another JSON string, or single-quoted as a Python list prints it.
|
|
235
|
+
*/
|
|
236
|
+
function buildQuotedFlagPairRegex(quote, body) {
|
|
237
|
+
return new RegExp(`(${quote}(--?[A-Za-z][A-Za-z0-9_.-]*)${quote}\\s*,\\s*${quote})(${body})(${quote})`, "g");
|
|
238
|
+
}
|
|
239
|
+
const QUOTED_FLAG_PAIR_REGEXES = [
|
|
240
|
+
buildQuotedFlagPairRegex(JSON_QUOTE, JSON_STRING_BODY),
|
|
241
|
+
buildQuotedFlagPairRegex(ESCAPED_JSON_QUOTE, ESCAPED_JSON_STRING_BODY),
|
|
242
|
+
buildQuotedFlagPairRegex("'", "[^']*"),
|
|
243
|
+
];
|
|
244
|
+
/*
|
|
245
|
+
* Tools whose single-letter flag carries a password: `mysql -pS3cret`,
|
|
246
|
+
* `mongosh -p S3cret`, `sshpass -p S3cret`, `redis-cli -a S3cret`. The
|
|
247
|
+
* same letters mean something else everywhere else — `-p` is a port for
|
|
248
|
+
* ssh, psql and redis-cli and "make parents" for mkdir — so a short flag
|
|
249
|
+
* is judged only where the command names one of these tools: earlier on
|
|
250
|
+
* the same line, or earlier in the same one-element-per-line argv list.
|
|
251
|
+
*/
|
|
252
|
+
const SHORT_PASSWORD_FLAG_BY_TOOL = new Map([
|
|
253
|
+
["mysql", "p"],
|
|
254
|
+
["mysqladmin", "p"],
|
|
255
|
+
["mysqldump", "p"],
|
|
256
|
+
["mysqlcheck", "p"],
|
|
257
|
+
["mysqlimport", "p"],
|
|
258
|
+
["mysqlshow", "p"],
|
|
259
|
+
["mysqlpump", "p"],
|
|
260
|
+
["mysqlsh", "p"],
|
|
261
|
+
["mariadb", "p"],
|
|
262
|
+
["mariadb-admin", "p"],
|
|
263
|
+
["mariadb-dump", "p"],
|
|
264
|
+
["mariadb-check", "p"],
|
|
265
|
+
["mariadb-import", "p"],
|
|
266
|
+
["mongo", "p"],
|
|
267
|
+
["mongosh", "p"],
|
|
268
|
+
["mongodump", "p"],
|
|
269
|
+
["mongorestore", "p"],
|
|
270
|
+
["mongoexport", "p"],
|
|
271
|
+
["mongoimport", "p"],
|
|
272
|
+
["mongostat", "p"],
|
|
273
|
+
["mongotop", "p"],
|
|
274
|
+
["sshpass", "p"],
|
|
275
|
+
["redis-cli", "a"],
|
|
276
|
+
["keydb-cli", "a"],
|
|
277
|
+
["valkey-cli", "a"],
|
|
278
|
+
]);
|
|
279
|
+
// One of those tools named inside a line, a path in front of it allowed.
|
|
280
|
+
const TOOL_NAME_REGEX = new RegExp(`(^|[\\s/"'[(,;&|=\`])(${Array.from(SHORT_PASSWORD_FLAG_BY_TOOL.keys()).join("|")})(?=$|[\\s"'\\]),;&|\`\\\\])`, "g");
|
|
281
|
+
// Where the command a tool starts ends inside a line.
|
|
282
|
+
const COMMAND_END_REGEX = /[\];|&)`]/;
|
|
283
|
+
// The password glued to a short flag ("-pS3cret"): a bare word.
|
|
284
|
+
const SHORT_PASSWORD_ATTACHED_VALUE_PATTERN = /([^\s"'[\-,;&|`\])}][^\s"',;&|`\])}]*)/;
|
|
285
|
+
// What separates a short flag from its password: blanks, or a list's ",".
|
|
286
|
+
const SHORT_PASSWORD_SEPARATOR_PATTERN = /([ \t]+|"\s*,\s*"|\\"\s*,\s*\\"|'\s*,\s*')/;
|
|
287
|
+
function buildShortPasswordFlagRegexes(letter) {
|
|
288
|
+
return {
|
|
289
|
+
attached: new RegExp(`${INLINE_FLAG_BOUNDARY_SOURCE}(-${letter})${SHORT_PASSWORD_ATTACHED_VALUE_PATTERN.source}`, "g"),
|
|
290
|
+
separated: new RegExp(`${INLINE_FLAG_BOUNDARY_SOURCE}(-${letter})${SHORT_PASSWORD_SEPARATOR_PATTERN.source}${INLINE_FLAG_VALUE_SOURCE}`, "g"),
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
const SHORT_PASSWORD_FLAG_REGEXES = new Map(Array.from(new Set(SHORT_PASSWORD_FLAG_BY_TOOL.values())).map((letter) => {
|
|
294
|
+
return [letter, buildShortPasswordFlagRegexes(letter)];
|
|
295
|
+
}));
|
|
296
|
+
/*
|
|
297
|
+
* `kubectl describe configmap` prints each data entry as "KEY:", this rule
|
|
298
|
+
* on the next line, and the value verbatim below it; the entries end with
|
|
299
|
+
* a "BinaryData" heading underlined the same way.
|
|
300
|
+
*/
|
|
301
|
+
const DESCRIBE_DATA_ENTRY_RULE = "----";
|
|
302
|
+
const DESCRIBE_BINARY_DATA_HEADING = "BinaryData";
|
|
303
|
+
const DESCRIBE_SECTION_RULE = "====";
|
|
304
|
+
/*
|
|
305
|
+
* Base64 runs. A padded run of any length is base64 by construction
|
|
306
|
+
* ("cGFzc3dvcmQ=" is "password"); an unpadded run must be long and mixed to
|
|
307
|
+
* count, so identifiers, hashes and hex ids stay legible. The padding must
|
|
308
|
+
* end the token: "--feature-gates=Foo=true" is a flag, not a secret.
|
|
309
|
+
*/
|
|
310
|
+
const BASE64_PADDED_REGEX = /(?<![A-Za-z0-9+/])([A-Za-z0-9+/]{4,})(={1,2})(?![A-Za-z0-9+/=])/g;
|
|
311
|
+
const BASE64_LONG_REGEX = /(?<![A-Za-z0-9+/])([A-Za-z0-9+/]{32,})(?![A-Za-z0-9+/=])/g;
|
|
312
|
+
function parseLine(raw) {
|
|
313
|
+
var _a, _b, _c;
|
|
314
|
+
const whitespaceMatch = LEADING_WHITESPACE_REGEX.exec(raw);
|
|
315
|
+
const indent = whitespaceMatch ? whitespaceMatch[0].length : 0;
|
|
316
|
+
let content = raw.slice(indent);
|
|
317
|
+
if (content.trim() === "") {
|
|
318
|
+
return { raw, isBlank: true, indent, isListItem: false, contentIndent: 0 };
|
|
319
|
+
}
|
|
320
|
+
let isListItem = false;
|
|
321
|
+
let contentIndent = indent;
|
|
322
|
+
const listMatch = LIST_ITEM_PREFIX_REGEX.exec(content);
|
|
323
|
+
if (listMatch) {
|
|
324
|
+
isListItem = true;
|
|
325
|
+
contentIndent = indent + listMatch[0].length;
|
|
326
|
+
content = content.slice(listMatch[0].length);
|
|
327
|
+
}
|
|
328
|
+
const keyMatch = KEY_VALUE_LINE_REGEX.exec(content);
|
|
329
|
+
if (!keyMatch) {
|
|
330
|
+
return { raw, isBlank: false, indent, isListItem, contentIndent };
|
|
331
|
+
}
|
|
332
|
+
const key = ((_c = (_b = (_a = keyMatch[1]) !== null && _a !== void 0 ? _a : keyMatch[2]) !== null && _b !== void 0 ? _b : keyMatch[3]) !== null && _c !== void 0 ? _c : "").trim();
|
|
333
|
+
const valueStart = contentIndent + keyMatch[0].length;
|
|
334
|
+
return {
|
|
335
|
+
raw,
|
|
336
|
+
isBlank: false,
|
|
337
|
+
indent,
|
|
338
|
+
isListItem,
|
|
339
|
+
contentIndent,
|
|
340
|
+
key,
|
|
341
|
+
keyIsFreeText: keyMatch[3] !== undefined && FREE_TEXT_KEY_REGEX.test(keyMatch[3]),
|
|
342
|
+
value: raw.slice(valueStart).trim(),
|
|
343
|
+
valueStart,
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
// Strip a JSON trailing comma and surrounding quotes from a scalar.
|
|
347
|
+
function unquote(value) {
|
|
348
|
+
let body = value.trim();
|
|
349
|
+
if (body.endsWith(",")) {
|
|
350
|
+
body = body.slice(0, -1).trimEnd();
|
|
351
|
+
}
|
|
352
|
+
if (body.length >= 2 &&
|
|
353
|
+
((body.startsWith('"') && body.endsWith('"')) ||
|
|
354
|
+
(body.startsWith("'") && body.endsWith("'")))) {
|
|
355
|
+
body = body.slice(1, -1);
|
|
356
|
+
}
|
|
357
|
+
return body;
|
|
358
|
+
}
|
|
359
|
+
function isDocumentSeparator(line) {
|
|
360
|
+
return line.raw.trim() === "---";
|
|
361
|
+
}
|
|
362
|
+
function isBlockScalar(value) {
|
|
363
|
+
return BLOCK_SCALAR_REGEX.test(value);
|
|
364
|
+
}
|
|
365
|
+
// "data:" or "\"data\": {" — a mapping whose entries follow on later lines.
|
|
366
|
+
function isContainerStart(value) {
|
|
367
|
+
return value === "" || value === "{";
|
|
368
|
+
}
|
|
369
|
+
// A value with no material in it, including a marker an earlier pass wrote.
|
|
370
|
+
function isExemptValue(value) {
|
|
371
|
+
let body = value.trim();
|
|
372
|
+
if (body.endsWith(",")) {
|
|
373
|
+
body = body.slice(0, -1).trimEnd();
|
|
374
|
+
}
|
|
375
|
+
return (EXEMPT_VALUES.has(body) ||
|
|
376
|
+
body.startsWith(EXEMPT_VALUE_PREFIX) ||
|
|
377
|
+
unquote(body).startsWith(REDACTED_PREFIX));
|
|
378
|
+
}
|
|
379
|
+
function looksLikeCredentialName(name) {
|
|
380
|
+
return CREDENTIAL_NAME_REGEX.test(name.trim());
|
|
381
|
+
}
|
|
382
|
+
// A key that names credential material, minus the reference-only keys.
|
|
383
|
+
function isCredentialKey(key) {
|
|
384
|
+
const normalized = key.trim().replace(/^-+/, "").toLowerCase();
|
|
385
|
+
if (REFERENCE_ONLY_KEYS.has(normalized)) {
|
|
386
|
+
return false;
|
|
387
|
+
}
|
|
388
|
+
return looksLikeCredentialName(normalized);
|
|
389
|
+
}
|
|
390
|
+
/*
|
|
391
|
+
* An argv element that can be a flag's value: not the next flag, not
|
|
392
|
+
* empty, not a marker this module already wrote.
|
|
393
|
+
*/
|
|
394
|
+
function isArgvValue(element) {
|
|
395
|
+
return !element.startsWith("-") && !isExemptValue(element);
|
|
396
|
+
}
|
|
397
|
+
// The short password flag of the tool an argv element names, if any.
|
|
398
|
+
function shortPasswordFlagOfTool(element) {
|
|
399
|
+
return SHORT_PASSWORD_FLAG_BY_TOOL.get(element.slice(element.lastIndexOf("/") + 1));
|
|
400
|
+
}
|
|
401
|
+
/*
|
|
402
|
+
* A scalar replaced by the marker, keeping its quotes, a JSON trailing
|
|
403
|
+
* comma and `keptPrefix` (the "-p" of "-pS3cret").
|
|
404
|
+
*/
|
|
405
|
+
function maskScalar(value, keptPrefix = "") {
|
|
406
|
+
const trailingComma = value.trimEnd().endsWith(",") ? "," : "";
|
|
407
|
+
const body = trailingComma
|
|
408
|
+
? value.trimEnd().slice(0, -1).trimEnd()
|
|
409
|
+
: value.trim();
|
|
410
|
+
if (body.startsWith('"')) {
|
|
411
|
+
return `"${keptPrefix}${KUBECTL_REDACTED_MARKER}"${trailingComma}`;
|
|
412
|
+
}
|
|
413
|
+
if (body.startsWith("'")) {
|
|
414
|
+
return `'${keptPrefix}${KUBECTL_REDACTED_MARKER}'${trailingComma}`;
|
|
415
|
+
}
|
|
416
|
+
return `${keptPrefix}${KUBECTL_REDACTED_MARKER}${trailingComma}`;
|
|
417
|
+
}
|
|
418
|
+
/*
|
|
419
|
+
* A bare value found inside a line, replaced by the marker. When the value
|
|
420
|
+
* ends the body of an escaped JSON string (`…=S3cret\"`), the backslash
|
|
421
|
+
* belongs to the closing quote and stays.
|
|
422
|
+
*/
|
|
423
|
+
function maskInlineValue(value) {
|
|
424
|
+
if (value.startsWith('"') || value.startsWith("'")) {
|
|
425
|
+
return maskScalar(value);
|
|
426
|
+
}
|
|
427
|
+
return `${KUBECTL_REDACTED_MARKER}${value.endsWith("\\") ? "\\" : ""}`;
|
|
428
|
+
}
|
|
429
|
+
/*
|
|
430
|
+
* The part of a `key: value` line before its value. A key that may be free
|
|
431
|
+
* text gets the inline rules; an ordinary key is returned as it is.
|
|
432
|
+
*/
|
|
433
|
+
function redactKeyPrefix(line) {
|
|
434
|
+
var _a;
|
|
435
|
+
const prefix = line.raw.slice(0, (_a = line.valueStart) !== null && _a !== void 0 ? _a : 0);
|
|
436
|
+
if (!line.keyIsFreeText) {
|
|
437
|
+
return { text: prefix, count: 0 };
|
|
438
|
+
}
|
|
439
|
+
const inline = applyInlineRules(prefix.slice(line.contentIndent));
|
|
440
|
+
return {
|
|
441
|
+
text: prefix.slice(0, line.contentIndent) + inline.text,
|
|
442
|
+
count: inline.count,
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
function maskValueInPlace(line) {
|
|
446
|
+
if (line.valueStart === undefined || line.value === undefined) {
|
|
447
|
+
return {
|
|
448
|
+
text: " ".repeat(line.indent) + KUBECTL_REDACTED_MARKER,
|
|
449
|
+
count: 1,
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
const prefix = redactKeyPrefix(line);
|
|
453
|
+
return {
|
|
454
|
+
text: prefix.text + maskScalar(line.value),
|
|
455
|
+
count: prefix.count + 1,
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
// The first line at or above `indent` — the end of a nested block.
|
|
459
|
+
function skipDeeperLines(parsed, from, indent) {
|
|
460
|
+
let index = from;
|
|
461
|
+
while (index < parsed.length) {
|
|
462
|
+
const line = parsed[index];
|
|
463
|
+
if (!line.isBlank && line.indent <= indent) {
|
|
464
|
+
break;
|
|
465
|
+
}
|
|
466
|
+
index++;
|
|
467
|
+
}
|
|
468
|
+
return index;
|
|
469
|
+
}
|
|
470
|
+
const UPPERCASE_REGEX = /[A-Z]/;
|
|
471
|
+
const LOWERCASE_REGEX = /[a-z]/;
|
|
472
|
+
const DIGIT_REGEX = /[0-9]/;
|
|
473
|
+
function hasUpperAndLower(text) {
|
|
474
|
+
return UPPERCASE_REGEX.test(text) && LOWERCASE_REGEX.test(text);
|
|
475
|
+
}
|
|
476
|
+
function hasDigit(text) {
|
|
477
|
+
return DIGIT_REGEX.test(text);
|
|
478
|
+
}
|
|
479
|
+
// `Bearer …` / `Basic …`: the token after the scheme, unless it is prose.
|
|
480
|
+
function maskAuthorizationTokens(text, regex) {
|
|
481
|
+
let count = 0;
|
|
482
|
+
const result = text.replace(regex, (match, scheme, token) => {
|
|
483
|
+
if (LOWERCASE_WORD_REGEX.test(token)) {
|
|
484
|
+
return match;
|
|
485
|
+
}
|
|
486
|
+
count++;
|
|
487
|
+
return `${scheme} ${KUBECTL_REDACTED_MARKER}`;
|
|
488
|
+
});
|
|
489
|
+
return { text: result, count };
|
|
490
|
+
}
|
|
491
|
+
/*
|
|
492
|
+
* One-line JSON env pairs, `"name":"X","value":"Y"` in either order: the
|
|
493
|
+
* value is masked when the name looks credential-like and the value holds
|
|
494
|
+
* something (an empty value, or one already masked, stays as it is).
|
|
495
|
+
*/
|
|
496
|
+
function maskJsonEnvPairs(text, regexes) {
|
|
497
|
+
let count = 0;
|
|
498
|
+
let result = text.replace(regexes.nameFirst, (match, prefix, name, value, closingQuote) => {
|
|
499
|
+
if (!looksLikeCredentialName(name) || isExemptValue(value)) {
|
|
500
|
+
return match;
|
|
501
|
+
}
|
|
502
|
+
count++;
|
|
503
|
+
return `${prefix}${KUBECTL_REDACTED_MARKER}${closingQuote}`;
|
|
504
|
+
});
|
|
505
|
+
result = result.replace(regexes.valueFirst, (match, prefix, value, suffix, name) => {
|
|
506
|
+
if (!looksLikeCredentialName(name) || isExemptValue(value)) {
|
|
507
|
+
return match;
|
|
508
|
+
}
|
|
509
|
+
count++;
|
|
510
|
+
return `${prefix}${KUBECTL_REDACTED_MARKER}${suffix}`;
|
|
511
|
+
});
|
|
512
|
+
return { text: result, count };
|
|
513
|
+
}
|
|
514
|
+
/*
|
|
515
|
+
* One-line JSON `"key":"value"` pairs whose key looks credential-like, and
|
|
516
|
+
* the last-applied-configuration annotation as jsonpath prints it. The
|
|
517
|
+
* quotes stay, so the JSON still parses; a bare number becomes a string.
|
|
518
|
+
*/
|
|
519
|
+
function maskJsonCredentialPairs(text, rule) {
|
|
520
|
+
let count = 0;
|
|
521
|
+
const result = text.replace(rule.regex, (match, prefix, key, openingQuote, body, closingQuote, bare) => {
|
|
522
|
+
if (key !== LAST_APPLIED_CONFIGURATION_ANNOTATION &&
|
|
523
|
+
!isCredentialKey(key)) {
|
|
524
|
+
return match;
|
|
525
|
+
}
|
|
526
|
+
if (openingQuote !== undefined) {
|
|
527
|
+
if (isExemptValue(body !== null && body !== void 0 ? body : "")) {
|
|
528
|
+
return match;
|
|
529
|
+
}
|
|
530
|
+
count++;
|
|
531
|
+
return `${prefix}${openingQuote}${KUBECTL_REDACTED_MARKER}${closingQuote !== null && closingQuote !== void 0 ? closingQuote : ""}`;
|
|
532
|
+
}
|
|
533
|
+
if (bare === undefined) {
|
|
534
|
+
return match;
|
|
535
|
+
}
|
|
536
|
+
count++;
|
|
537
|
+
return `${prefix}${rule.quote}${KUBECTL_REDACTED_MARKER}${rule.quote}`;
|
|
538
|
+
});
|
|
539
|
+
return { text: result, count };
|
|
540
|
+
}
|
|
541
|
+
// `"--db-password","value"` in a one-line array: the value is masked.
|
|
542
|
+
function maskQuotedFlagPairs(text, regex) {
|
|
543
|
+
let count = 0;
|
|
544
|
+
const result = text.replace(regex, (match, prefix, flag, value, closingQuote) => {
|
|
545
|
+
if (!isCredentialKey(flag) || !isArgvValue(value)) {
|
|
546
|
+
return match;
|
|
547
|
+
}
|
|
548
|
+
count++;
|
|
549
|
+
return `${prefix}${KUBECTL_REDACTED_MARKER}${closingQuote}`;
|
|
550
|
+
});
|
|
551
|
+
return { text: result, count };
|
|
552
|
+
}
|
|
553
|
+
// `--requirepass value` inside one line: the value is masked.
|
|
554
|
+
function maskInlineSplitFlags(text) {
|
|
555
|
+
let count = 0;
|
|
556
|
+
const result = text.replace(INLINE_SPLIT_FLAG_REGEX, (match, boundary, flag, separator, value) => {
|
|
557
|
+
if (!isCredentialKey(flag) || !isArgvValue(unquote(value))) {
|
|
558
|
+
return match;
|
|
559
|
+
}
|
|
560
|
+
count++;
|
|
561
|
+
return `${boundary}${flag}${separator}${maskInlineValue(value)}`;
|
|
562
|
+
});
|
|
563
|
+
return { text: result, count };
|
|
564
|
+
}
|
|
565
|
+
// A tool's short password flag within the stretch of a line that is its command.
|
|
566
|
+
function maskShortPasswordFlag(text, letter) {
|
|
567
|
+
const regexes = SHORT_PASSWORD_FLAG_REGEXES.get(letter);
|
|
568
|
+
if (!regexes) {
|
|
569
|
+
return { text, count: 0 };
|
|
570
|
+
}
|
|
571
|
+
let count = 0;
|
|
572
|
+
let result = text.replace(regexes.separated, (match, boundary, flag, separator, value) => {
|
|
573
|
+
if (!isArgvValue(unquote(value))) {
|
|
574
|
+
return match;
|
|
575
|
+
}
|
|
576
|
+
count++;
|
|
577
|
+
return `${boundary}${flag}${separator}${maskInlineValue(value)}`;
|
|
578
|
+
});
|
|
579
|
+
result = result.replace(regexes.attached, (_match, boundary, flag, value) => {
|
|
580
|
+
count++;
|
|
581
|
+
return `${boundary}${flag}${maskInlineValue(value)}`;
|
|
582
|
+
});
|
|
583
|
+
return { text: result, count };
|
|
584
|
+
}
|
|
585
|
+
/*
|
|
586
|
+
* `mysql -pS3cret`, `mongosh -p S3cret`, `redis-cli -a S3cret`: a tool's
|
|
587
|
+
* short password flag, judged only in the stretch of the line from the
|
|
588
|
+
* tool's name to the next tool or the end of its command (`]`, `)`, `;`,
|
|
589
|
+
* `|`, `&`, a backtick).
|
|
590
|
+
*/
|
|
591
|
+
function maskToolPasswordFlags(text) {
|
|
592
|
+
var _a, _b, _c;
|
|
593
|
+
const tools = [];
|
|
594
|
+
TOOL_NAME_REGEX.lastIndex = 0;
|
|
595
|
+
let match = TOOL_NAME_REGEX.exec(text);
|
|
596
|
+
while (match) {
|
|
597
|
+
const start = match.index + ((_a = match[1]) !== null && _a !== void 0 ? _a : "").length;
|
|
598
|
+
const name = (_b = match[2]) !== null && _b !== void 0 ? _b : "";
|
|
599
|
+
tools.push({
|
|
600
|
+
start,
|
|
601
|
+
end: start + name.length,
|
|
602
|
+
letter: (_c = SHORT_PASSWORD_FLAG_BY_TOOL.get(name)) !== null && _c !== void 0 ? _c : "",
|
|
603
|
+
});
|
|
604
|
+
match = TOOL_NAME_REGEX.exec(text);
|
|
605
|
+
}
|
|
606
|
+
TOOL_NAME_REGEX.lastIndex = 0;
|
|
607
|
+
if (tools.length === 0) {
|
|
608
|
+
return { text, count: 0 };
|
|
609
|
+
}
|
|
610
|
+
let result = "";
|
|
611
|
+
let count = 0;
|
|
612
|
+
let cursor = 0;
|
|
613
|
+
tools.forEach((tool, toolIndex) => {
|
|
614
|
+
/*
|
|
615
|
+
* Only the stretch up to the next tool is searched for the command's
|
|
616
|
+
* end, so a line naming a tool many times is still scanned once.
|
|
617
|
+
*/
|
|
618
|
+
const nextTool = tools[toolIndex + 1];
|
|
619
|
+
const stretch = text.slice(tool.end, nextTool ? nextTool.start : text.length);
|
|
620
|
+
const commandEnd = stretch.search(COMMAND_END_REGEX);
|
|
621
|
+
const command = commandEnd === -1 ? stretch : stretch.slice(0, commandEnd);
|
|
622
|
+
result += text.slice(cursor, tool.end);
|
|
623
|
+
const masked = maskShortPasswordFlag(command, tool.letter);
|
|
624
|
+
result += masked.text;
|
|
625
|
+
count += masked.count;
|
|
626
|
+
cursor = tool.end + command.length;
|
|
627
|
+
});
|
|
628
|
+
result += text.slice(cursor);
|
|
629
|
+
return { text: result, count };
|
|
630
|
+
}
|
|
631
|
+
/*
|
|
632
|
+
* Mask the body of every one-line `"data":{…}` object. Braces are matched
|
|
633
|
+
* by depth; an object the line truncated away is masked to the end.
|
|
634
|
+
*/
|
|
635
|
+
function maskInlineJsonDataObjects(text) {
|
|
636
|
+
var _a;
|
|
637
|
+
let result = text;
|
|
638
|
+
let count = 0;
|
|
639
|
+
let searchFrom = 0;
|
|
640
|
+
while (searchFrom < result.length) {
|
|
641
|
+
INLINE_JSON_DATA_OBJECT_REGEX.lastIndex = searchFrom;
|
|
642
|
+
const match = INLINE_JSON_DATA_OBJECT_REGEX.exec(result);
|
|
643
|
+
if (!match) {
|
|
644
|
+
break;
|
|
645
|
+
}
|
|
646
|
+
const quote = (_a = match[1]) !== null && _a !== void 0 ? _a : '"';
|
|
647
|
+
const bodyStart = match.index + match[0].length;
|
|
648
|
+
let depth = 1;
|
|
649
|
+
let position = bodyStart;
|
|
650
|
+
while (position < result.length && depth > 0) {
|
|
651
|
+
const character = result[position];
|
|
652
|
+
if (character === "{") {
|
|
653
|
+
depth++;
|
|
654
|
+
}
|
|
655
|
+
else if (character === "}") {
|
|
656
|
+
depth--;
|
|
657
|
+
}
|
|
658
|
+
position++;
|
|
659
|
+
}
|
|
660
|
+
// `position` is just past the closing brace, or the end of the text.
|
|
661
|
+
const bodyEnd = depth === 0 ? position - 1 : result.length;
|
|
662
|
+
if (result.slice(bodyStart, bodyEnd).trim() === "") {
|
|
663
|
+
searchFrom = position;
|
|
664
|
+
continue;
|
|
665
|
+
}
|
|
666
|
+
const replacement = `${quote}${KUBECTL_REDACTED_MARKER}${quote}:${quote}${KUBECTL_REDACTED_MARKER}${quote}`;
|
|
667
|
+
result = result.slice(0, bodyStart) + replacement + result.slice(bodyEnd);
|
|
668
|
+
count++;
|
|
669
|
+
searchFrom = bodyStart + replacement.length;
|
|
670
|
+
}
|
|
671
|
+
INLINE_JSON_DATA_OBJECT_REGEX.lastIndex = 0;
|
|
672
|
+
return { text: result, count };
|
|
673
|
+
}
|
|
674
|
+
// The rules that apply to any line regardless of its YAML/JSON structure.
|
|
675
|
+
function applyInlineRules(text) {
|
|
676
|
+
let count = 0;
|
|
677
|
+
let result = text;
|
|
678
|
+
const apply = (masked) => {
|
|
679
|
+
result = masked.text;
|
|
680
|
+
count += masked.count;
|
|
681
|
+
};
|
|
682
|
+
result = result.replace(URL_CREDENTIAL_REGEX, (_match, user) => {
|
|
683
|
+
count++;
|
|
684
|
+
return `://${user}:${KUBECTL_REDACTED_MARKER}@`;
|
|
685
|
+
});
|
|
686
|
+
for (const tokenRegex of [BEARER_TOKEN_REGEX, BASIC_TOKEN_REGEX]) {
|
|
687
|
+
apply(maskAuthorizationTokens(result, tokenRegex));
|
|
688
|
+
}
|
|
689
|
+
result = result.replace(JWT_REGEX, () => {
|
|
690
|
+
count++;
|
|
691
|
+
return "[redacted-jwt]";
|
|
692
|
+
});
|
|
693
|
+
apply(maskInlineJsonDataObjects(result));
|
|
694
|
+
for (const pair of JSON_ENV_PAIR_REGEXES) {
|
|
695
|
+
apply(maskJsonEnvPairs(result, pair));
|
|
696
|
+
}
|
|
697
|
+
for (const rule of JSON_CREDENTIAL_PAIR_RULES) {
|
|
698
|
+
apply(maskJsonCredentialPairs(result, rule));
|
|
699
|
+
}
|
|
700
|
+
for (const regex of QUOTED_FLAG_PAIR_REGEXES) {
|
|
701
|
+
apply(maskQuotedFlagPairs(result, regex));
|
|
702
|
+
}
|
|
703
|
+
result = result.replace(INLINE_PAIR_REGEX, (match, boundary, key, separator, value) => {
|
|
704
|
+
if (isImageReferencePair(key, separator) ||
|
|
705
|
+
!isCredentialKey(key) ||
|
|
706
|
+
isExemptValue(value)) {
|
|
707
|
+
return match;
|
|
708
|
+
}
|
|
709
|
+
count++;
|
|
710
|
+
return `${boundary}${key}${separator}${KUBECTL_REDACTED_MARKER}${value.endsWith("\\") ? "\\" : ""}`;
|
|
711
|
+
});
|
|
712
|
+
apply(maskInlineSplitFlags(result));
|
|
713
|
+
apply(maskToolPasswordFlags(result));
|
|
714
|
+
result = result.replace(BASE64_PADDED_REGEX, (match, run) => {
|
|
715
|
+
if (!hasUpperAndLower(run) && !hasDigit(run)) {
|
|
716
|
+
return match;
|
|
717
|
+
}
|
|
718
|
+
count++;
|
|
719
|
+
return "[redacted-base64]";
|
|
720
|
+
});
|
|
721
|
+
result = result.replace(BASE64_LONG_REGEX, (match, run) => {
|
|
722
|
+
if (!hasUpperAndLower(run) || !hasDigit(run)) {
|
|
723
|
+
return match;
|
|
724
|
+
}
|
|
725
|
+
count++;
|
|
726
|
+
return "[redacted-base64]";
|
|
727
|
+
});
|
|
728
|
+
return { text: result, count };
|
|
729
|
+
}
|
|
730
|
+
/*
|
|
731
|
+
* The inline rules over one line. A line that already parsed as
|
|
732
|
+
* `key: value` has its value examined, and its key only when the key may
|
|
733
|
+
* be free text: its key was judged by isCredentialKey (and possibly
|
|
734
|
+
* exempted), and re-reading "Image pull secrets:" as the pair "secrets:
|
|
735
|
+
* <none>" must not undo that.
|
|
736
|
+
*/
|
|
737
|
+
function applyInlineRulesToLine(line) {
|
|
738
|
+
if (line.valueStart === undefined || line.value === undefined) {
|
|
739
|
+
return applyInlineRules(line.raw);
|
|
740
|
+
}
|
|
741
|
+
const prefix = redactKeyPrefix(line);
|
|
742
|
+
const inline = applyInlineRules(line.raw.slice(line.valueStart));
|
|
743
|
+
return {
|
|
744
|
+
text: prefix.text + inline.text,
|
|
745
|
+
count: prefix.count + inline.count,
|
|
746
|
+
};
|
|
747
|
+
}
|
|
748
|
+
export default class KubectlOutputRedactor {
|
|
749
|
+
static redact(output) {
|
|
750
|
+
var _a;
|
|
751
|
+
if (!output) {
|
|
752
|
+
return { text: "", redactionCount: 0 };
|
|
753
|
+
}
|
|
754
|
+
const parsed = output
|
|
755
|
+
.replace(/\r\n?/g, "\n")
|
|
756
|
+
.split("\n")
|
|
757
|
+
.map(parseLine);
|
|
758
|
+
const masks = {
|
|
759
|
+
envValueLines: KubectlOutputRedactor.findCredentialEnvValueLines(parsed),
|
|
760
|
+
argvValueLines: KubectlOutputRedactor.findArgvValueLines(parsed),
|
|
761
|
+
};
|
|
762
|
+
const out = [];
|
|
763
|
+
let count = 0;
|
|
764
|
+
let index = 0;
|
|
765
|
+
while (index < parsed.length) {
|
|
766
|
+
const line = parsed[index];
|
|
767
|
+
let step;
|
|
768
|
+
if (KubectlOutputRedactor.isDescribeDataEntry(parsed, index) &&
|
|
769
|
+
isCredentialKey((_a = line.key) !== null && _a !== void 0 ? _a : "")) {
|
|
770
|
+
step = KubectlOutputRedactor.redactDescribeDataEntry(parsed, index);
|
|
771
|
+
}
|
|
772
|
+
else if (!line.isBlank &&
|
|
773
|
+
line.key !== undefined &&
|
|
774
|
+
DATA_BLOCK_KEYS.has(line.key) &&
|
|
775
|
+
isContainerStart(line.value)) {
|
|
776
|
+
step = KubectlOutputRedactor.redactDataBlock(parsed, index, masks);
|
|
777
|
+
}
|
|
778
|
+
else {
|
|
779
|
+
step = KubectlOutputRedactor.redactStandaloneLine(parsed, index, masks);
|
|
780
|
+
}
|
|
781
|
+
out.push(...step.lines);
|
|
782
|
+
count += step.count;
|
|
783
|
+
index = step.next;
|
|
784
|
+
}
|
|
785
|
+
let text = out.join("\n");
|
|
786
|
+
text = text.replace(PRIVATE_KEY_BLOCK_REGEX, () => {
|
|
787
|
+
count++;
|
|
788
|
+
return "[redacted-private-key]";
|
|
789
|
+
});
|
|
790
|
+
return { text, redactionCount: count };
|
|
791
|
+
}
|
|
792
|
+
/*
|
|
793
|
+
* Which `value:` lines belong to an env entry whose `name:` looks
|
|
794
|
+
* credential-like. Found up front because the value may precede the name
|
|
795
|
+
* inside its entry, and the main pass only ever moves forward.
|
|
796
|
+
*/
|
|
797
|
+
static findCredentialEnvValueLines(parsed) {
|
|
798
|
+
const valueLines = new Set();
|
|
799
|
+
for (let index = 0; index < parsed.length; index++) {
|
|
800
|
+
const line = parsed[index];
|
|
801
|
+
if (line.isBlank || line.key !== "name" || line.value === undefined) {
|
|
802
|
+
continue;
|
|
803
|
+
}
|
|
804
|
+
const name = unquote(line.value);
|
|
805
|
+
if (!name || !looksLikeCredentialName(name)) {
|
|
806
|
+
continue;
|
|
807
|
+
}
|
|
808
|
+
const valueLine = KubectlOutputRedactor.findSiblingValueLine(parsed, index);
|
|
809
|
+
if (valueLine !== undefined) {
|
|
810
|
+
valueLines.add(valueLine);
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
return valueLines;
|
|
814
|
+
}
|
|
815
|
+
/*
|
|
816
|
+
* Argv printed one element per line — `- --db-password` / `- value` in
|
|
817
|
+
* YAML, `"--db-password",` / `"value"` in pretty JSON, describe's Command
|
|
818
|
+
* and Args blocks — and the elements that are the value of a credential
|
|
819
|
+
* flag before them, each with its masked text. A list's elements are
|
|
820
|
+
* consecutive lines at the same indent and of the same shape; a
|
|
821
|
+
* `key: value` line ends it (describe prints an argument that contains
|
|
822
|
+
* ": " as is, so a flag's value may look like one). A tool's short
|
|
823
|
+
* password flag counts only once the list has named the tool.
|
|
824
|
+
*/
|
|
825
|
+
static findArgvValueLines(parsed) {
|
|
826
|
+
const masked = new Map();
|
|
827
|
+
let list = undefined;
|
|
828
|
+
for (let index = 0; index < parsed.length; index++) {
|
|
829
|
+
const line = parsed[index];
|
|
830
|
+
if (line.isBlank) {
|
|
831
|
+
continue;
|
|
832
|
+
}
|
|
833
|
+
// "- key: value" is a mapping entry, never an argv element.
|
|
834
|
+
if (line.isListItem && line.key !== undefined) {
|
|
835
|
+
list = undefined;
|
|
836
|
+
continue;
|
|
837
|
+
}
|
|
838
|
+
if (list === undefined ||
|
|
839
|
+
list.indent !== line.indent ||
|
|
840
|
+
list.isListItem !== line.isListItem) {
|
|
841
|
+
list = {
|
|
842
|
+
indent: line.indent,
|
|
843
|
+
isListItem: line.isListItem,
|
|
844
|
+
shortPasswordFlag: undefined,
|
|
845
|
+
expectsValue: false,
|
|
846
|
+
};
|
|
847
|
+
}
|
|
848
|
+
const indentText = line.raw.slice(0, line.contentIndent);
|
|
849
|
+
const content = line.raw.slice(line.contentIndent);
|
|
850
|
+
const element = unquote(content);
|
|
851
|
+
if (list.expectsValue) {
|
|
852
|
+
list.expectsValue = false;
|
|
853
|
+
if (isArgvValue(element)) {
|
|
854
|
+
masked.set(index, indentText + maskScalar(content));
|
|
855
|
+
continue;
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
if (line.key !== undefined) {
|
|
859
|
+
list = undefined;
|
|
860
|
+
continue;
|
|
861
|
+
}
|
|
862
|
+
const shortFlag = list.shortPasswordFlag !== undefined
|
|
863
|
+
? `-${list.shortPasswordFlag}`
|
|
864
|
+
: undefined;
|
|
865
|
+
if (shortFlag !== undefined && element.startsWith(shortFlag)) {
|
|
866
|
+
const attached = element.slice(shortFlag.length);
|
|
867
|
+
if (attached === "") {
|
|
868
|
+
list.expectsValue = true;
|
|
869
|
+
}
|
|
870
|
+
else if (isArgvValue(attached)) {
|
|
871
|
+
masked.set(index, indentText + maskScalar(content, shortFlag));
|
|
872
|
+
}
|
|
873
|
+
continue;
|
|
874
|
+
}
|
|
875
|
+
if (FLAG_TOKEN_REGEX.test(element) && isCredentialKey(element)) {
|
|
876
|
+
list.expectsValue = true;
|
|
877
|
+
continue;
|
|
878
|
+
}
|
|
879
|
+
const toolFlag = shortPasswordFlagOfTool(element);
|
|
880
|
+
if (toolFlag !== undefined) {
|
|
881
|
+
list.shortPasswordFlag = toolFlag;
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
return masked;
|
|
885
|
+
}
|
|
886
|
+
/*
|
|
887
|
+
* The `value:` sibling of a `name:` line inside the same list entry (YAML)
|
|
888
|
+
* or object (JSON). Siblings share the name line's content indent; a
|
|
889
|
+
* shallower line ends the entry, a deeper one is nested under a sibling.
|
|
890
|
+
*/
|
|
891
|
+
static findSiblingValueLine(parsed, nameIndex) {
|
|
892
|
+
const nameLine = parsed[nameIndex];
|
|
893
|
+
const indent = nameLine.contentIndent;
|
|
894
|
+
for (let index = nameIndex + 1; index < parsed.length; index++) {
|
|
895
|
+
const line = parsed[index];
|
|
896
|
+
if (line.isBlank) {
|
|
897
|
+
continue;
|
|
898
|
+
}
|
|
899
|
+
if (line.indent < indent) {
|
|
900
|
+
break;
|
|
901
|
+
}
|
|
902
|
+
if (line.indent > indent || line.isListItem) {
|
|
903
|
+
continue;
|
|
904
|
+
}
|
|
905
|
+
if (line.key === "value") {
|
|
906
|
+
return index;
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
// "- name: X" is its entry's first line: nothing above it is a sibling.
|
|
910
|
+
if (nameLine.isListItem) {
|
|
911
|
+
return undefined;
|
|
912
|
+
}
|
|
913
|
+
for (let index = nameIndex - 1; index >= 0; index--) {
|
|
914
|
+
const line = parsed[index];
|
|
915
|
+
if (line.isBlank) {
|
|
916
|
+
continue;
|
|
917
|
+
}
|
|
918
|
+
if (line.isListItem && line.contentIndent === indent) {
|
|
919
|
+
// The entry's own "- …" line — a sibling, and the entry's start.
|
|
920
|
+
return line.key === "value" ? index : undefined;
|
|
921
|
+
}
|
|
922
|
+
if (line.indent < indent) {
|
|
923
|
+
break;
|
|
924
|
+
}
|
|
925
|
+
if (line.indent > indent || line.isListItem) {
|
|
926
|
+
continue;
|
|
927
|
+
}
|
|
928
|
+
if (line.key === "value") {
|
|
929
|
+
return index;
|
|
930
|
+
}
|
|
931
|
+
}
|
|
932
|
+
return undefined;
|
|
933
|
+
}
|
|
934
|
+
/*
|
|
935
|
+
* The `kind:` sibling of a data block: same indent, same object, on
|
|
936
|
+
* either side of the block. Undefined when the output does not say — a
|
|
937
|
+
* truncated object, or not a Kubernetes object at all.
|
|
938
|
+
*/
|
|
939
|
+
static findSiblingKind(parsed, blockIndex) {
|
|
940
|
+
const indent = parsed[blockIndex].contentIndent;
|
|
941
|
+
for (let index = blockIndex - 1; index >= 0; index--) {
|
|
942
|
+
const line = parsed[index];
|
|
943
|
+
if (line.isBlank) {
|
|
944
|
+
continue;
|
|
945
|
+
}
|
|
946
|
+
if (isDocumentSeparator(line)) {
|
|
947
|
+
break;
|
|
948
|
+
}
|
|
949
|
+
if (line.indent > indent) {
|
|
950
|
+
continue;
|
|
951
|
+
}
|
|
952
|
+
if (line.isListItem && line.contentIndent === indent) {
|
|
953
|
+
// The entry's own "- …" line: its first key, and the entry's start.
|
|
954
|
+
if (line.key === "kind" && line.value !== undefined) {
|
|
955
|
+
return unquote(line.value);
|
|
956
|
+
}
|
|
957
|
+
break;
|
|
958
|
+
}
|
|
959
|
+
if (line.indent < indent) {
|
|
960
|
+
break;
|
|
961
|
+
}
|
|
962
|
+
if (line.isListItem) {
|
|
963
|
+
continue;
|
|
964
|
+
}
|
|
965
|
+
if (line.key === "kind" && line.value !== undefined) {
|
|
966
|
+
return unquote(line.value);
|
|
967
|
+
}
|
|
968
|
+
}
|
|
969
|
+
for (let index = blockIndex + 1; index < parsed.length; index++) {
|
|
970
|
+
const line = parsed[index];
|
|
971
|
+
if (line.isBlank) {
|
|
972
|
+
continue;
|
|
973
|
+
}
|
|
974
|
+
if (isDocumentSeparator(line)) {
|
|
975
|
+
break;
|
|
976
|
+
}
|
|
977
|
+
if (line.indent > indent) {
|
|
978
|
+
continue;
|
|
979
|
+
}
|
|
980
|
+
if (line.indent < indent) {
|
|
981
|
+
break;
|
|
982
|
+
}
|
|
983
|
+
if (line.isListItem) {
|
|
984
|
+
continue;
|
|
985
|
+
}
|
|
986
|
+
if (line.key === "kind" && line.value !== undefined) {
|
|
987
|
+
return unquote(line.value);
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
return undefined;
|
|
991
|
+
}
|
|
992
|
+
/*
|
|
993
|
+
* A `kubectl describe configmap` data entry: "KEY:" with nothing after
|
|
994
|
+
* the colon, then the "----" rule at the same indent on the next line.
|
|
995
|
+
*/
|
|
996
|
+
static isDescribeDataEntry(parsed, index) {
|
|
997
|
+
const line = parsed[index];
|
|
998
|
+
const rule = parsed[index + 1];
|
|
999
|
+
return (line !== undefined &&
|
|
1000
|
+
rule !== undefined &&
|
|
1001
|
+
!line.isBlank &&
|
|
1002
|
+
!line.isListItem &&
|
|
1003
|
+
line.key !== undefined &&
|
|
1004
|
+
line.value === "" &&
|
|
1005
|
+
!rule.isBlank &&
|
|
1006
|
+
rule.indent === line.indent &&
|
|
1007
|
+
rule.raw.trim() === DESCRIBE_DATA_ENTRY_RULE);
|
|
1008
|
+
}
|
|
1009
|
+
/*
|
|
1010
|
+
* Where a describe data entry's value ends: at the next entry or the
|
|
1011
|
+
* "BinaryData" heading after the last one — each follows a blank line at
|
|
1012
|
+
* the entry's indent — or at the end of the output.
|
|
1013
|
+
*/
|
|
1014
|
+
static isDescribeDataValueEnd(parsed, index, indent) {
|
|
1015
|
+
const line = parsed[index];
|
|
1016
|
+
const previous = parsed[index - 1];
|
|
1017
|
+
const next = parsed[index + 1];
|
|
1018
|
+
if (line.isBlank || line.indent !== indent || !(previous === null || previous === void 0 ? void 0 : previous.isBlank)) {
|
|
1019
|
+
return false;
|
|
1020
|
+
}
|
|
1021
|
+
if (KubectlOutputRedactor.isDescribeDataEntry(parsed, index)) {
|
|
1022
|
+
return true;
|
|
1023
|
+
}
|
|
1024
|
+
return (line.raw.trim() === DESCRIBE_BINARY_DATA_HEADING &&
|
|
1025
|
+
next !== undefined &&
|
|
1026
|
+
next.raw.trim() === DESCRIBE_SECTION_RULE);
|
|
1027
|
+
}
|
|
1028
|
+
/*
|
|
1029
|
+
* A credential-like describe data entry. The key and the rule stay; the
|
|
1030
|
+
* whole value — every line of it, blank lines included, since a
|
|
1031
|
+
* properties file or a PEM block has them — becomes one marker, and the
|
|
1032
|
+
* blank lines that close the entry stay. A value the Runner truncated
|
|
1033
|
+
* is masked to the end of the output.
|
|
1034
|
+
*/
|
|
1035
|
+
static redactDescribeDataEntry(parsed, headerIndex) {
|
|
1036
|
+
const header = parsed[headerIndex];
|
|
1037
|
+
const valueStart = headerIndex + 2;
|
|
1038
|
+
let end = valueStart;
|
|
1039
|
+
while (end < parsed.length &&
|
|
1040
|
+
!KubectlOutputRedactor.isDescribeDataValueEnd(parsed, end, header.indent)) {
|
|
1041
|
+
end++;
|
|
1042
|
+
}
|
|
1043
|
+
let lastValueLine = valueStart - 1;
|
|
1044
|
+
for (let index = valueStart; index < end; index++) {
|
|
1045
|
+
if (!parsed[index].isBlank) {
|
|
1046
|
+
lastValueLine = index;
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
const lines = [header.raw, parsed[headerIndex + 1].raw];
|
|
1050
|
+
let count = 0;
|
|
1051
|
+
if (lastValueLine >= valueStart) {
|
|
1052
|
+
const valueLines = parsed.slice(valueStart, lastValueLine + 1);
|
|
1053
|
+
const isAlreadyMasked = valueLines.every((line) => {
|
|
1054
|
+
return line.isBlank || line.raw.trim() === KUBECTL_REDACTED_MARKER;
|
|
1055
|
+
});
|
|
1056
|
+
if (isAlreadyMasked) {
|
|
1057
|
+
lines.push(...valueLines.map((line) => {
|
|
1058
|
+
return line.raw;
|
|
1059
|
+
}));
|
|
1060
|
+
}
|
|
1061
|
+
else {
|
|
1062
|
+
lines.push(" ".repeat(header.indent) + KUBECTL_REDACTED_MARKER);
|
|
1063
|
+
count++;
|
|
1064
|
+
}
|
|
1065
|
+
}
|
|
1066
|
+
for (let index = lastValueLine + 1; index < end; index++) {
|
|
1067
|
+
lines.push(parsed[index].raw);
|
|
1068
|
+
}
|
|
1069
|
+
return { lines, next: end, count };
|
|
1070
|
+
}
|
|
1071
|
+
/*
|
|
1072
|
+
* A `data:` / `stringData:` / `binaryData:` block. Every value is masked
|
|
1073
|
+
* for a Secret or an object of unknown kind; only credential-like keys
|
|
1074
|
+
* are masked for anything else. Keys are kept either way.
|
|
1075
|
+
*/
|
|
1076
|
+
static redactDataBlock(parsed, blockIndex, masks) {
|
|
1077
|
+
const block = parsed[blockIndex];
|
|
1078
|
+
const kind = KubectlOutputRedactor.findSiblingKind(parsed, blockIndex);
|
|
1079
|
+
const maskEveryValue = kind === undefined || kind.toLowerCase() === "secret";
|
|
1080
|
+
const lines = [block.raw];
|
|
1081
|
+
let count = 0;
|
|
1082
|
+
let index = blockIndex + 1;
|
|
1083
|
+
let entryIndent = undefined;
|
|
1084
|
+
let entryMasked = false;
|
|
1085
|
+
while (index < parsed.length) {
|
|
1086
|
+
const line = parsed[index];
|
|
1087
|
+
if (line.isBlank) {
|
|
1088
|
+
if (!entryMasked) {
|
|
1089
|
+
lines.push(line.raw);
|
|
1090
|
+
}
|
|
1091
|
+
index++;
|
|
1092
|
+
continue;
|
|
1093
|
+
}
|
|
1094
|
+
if (line.indent <= block.contentIndent) {
|
|
1095
|
+
break;
|
|
1096
|
+
}
|
|
1097
|
+
if (entryIndent === undefined) {
|
|
1098
|
+
entryIndent = line.indent;
|
|
1099
|
+
}
|
|
1100
|
+
// Deeper than an entry: a block scalar body or nested structure.
|
|
1101
|
+
if (line.indent > entryIndent) {
|
|
1102
|
+
if (maskEveryValue || entryMasked) {
|
|
1103
|
+
index++;
|
|
1104
|
+
continue;
|
|
1105
|
+
}
|
|
1106
|
+
const nested = KubectlOutputRedactor.redactStandaloneLine(parsed, index, masks);
|
|
1107
|
+
lines.push(...nested.lines);
|
|
1108
|
+
count += nested.count;
|
|
1109
|
+
index = nested.next;
|
|
1110
|
+
continue;
|
|
1111
|
+
}
|
|
1112
|
+
if (line.key === undefined) {
|
|
1113
|
+
// Not "key: value" — an unexpected shape inside a data block.
|
|
1114
|
+
if (maskEveryValue) {
|
|
1115
|
+
lines.push(" ".repeat(line.indent) + KUBECTL_REDACTED_MARKER);
|
|
1116
|
+
count++;
|
|
1117
|
+
entryMasked = true;
|
|
1118
|
+
}
|
|
1119
|
+
else {
|
|
1120
|
+
const inline = applyInlineRules(line.raw);
|
|
1121
|
+
lines.push(inline.text);
|
|
1122
|
+
count += inline.count;
|
|
1123
|
+
entryMasked = false;
|
|
1124
|
+
}
|
|
1125
|
+
index++;
|
|
1126
|
+
continue;
|
|
1127
|
+
}
|
|
1128
|
+
if (maskEveryValue || isCredentialKey(line.key)) {
|
|
1129
|
+
if (line.value !== undefined && !isExemptValue(line.value)) {
|
|
1130
|
+
const masked = maskValueInPlace(line);
|
|
1131
|
+
lines.push(masked.text);
|
|
1132
|
+
count += masked.count;
|
|
1133
|
+
}
|
|
1134
|
+
else {
|
|
1135
|
+
lines.push(line.raw);
|
|
1136
|
+
}
|
|
1137
|
+
entryMasked = true;
|
|
1138
|
+
index++;
|
|
1139
|
+
continue;
|
|
1140
|
+
}
|
|
1141
|
+
const inline = applyInlineRulesToLine(line);
|
|
1142
|
+
lines.push(inline.text);
|
|
1143
|
+
count += inline.count;
|
|
1144
|
+
entryMasked = false;
|
|
1145
|
+
index++;
|
|
1146
|
+
}
|
|
1147
|
+
return { lines, next: index, count };
|
|
1148
|
+
}
|
|
1149
|
+
/*
|
|
1150
|
+
* One line outside a data block: env value, argv value, credential-like
|
|
1151
|
+
* key, inline rules.
|
|
1152
|
+
*/
|
|
1153
|
+
static redactStandaloneLine(parsed, index, masks) {
|
|
1154
|
+
var _a;
|
|
1155
|
+
const line = parsed[index];
|
|
1156
|
+
if (line.isBlank) {
|
|
1157
|
+
return { lines: [line.raw], next: index + 1, count: 0 };
|
|
1158
|
+
}
|
|
1159
|
+
if (masks.envValueLines.has(index) && line.value !== undefined) {
|
|
1160
|
+
if (isBlockScalar(line.value)) {
|
|
1161
|
+
const masked = maskValueInPlace(line);
|
|
1162
|
+
return {
|
|
1163
|
+
lines: [masked.text],
|
|
1164
|
+
next: skipDeeperLines(parsed, index + 1, line.contentIndent),
|
|
1165
|
+
count: masked.count,
|
|
1166
|
+
};
|
|
1167
|
+
}
|
|
1168
|
+
if (!isExemptValue(line.value)) {
|
|
1169
|
+
const masked = maskValueInPlace(line);
|
|
1170
|
+
return { lines: [masked.text], next: index + 1, count: masked.count };
|
|
1171
|
+
}
|
|
1172
|
+
}
|
|
1173
|
+
const argvValue = masks.argvValueLines.get(index);
|
|
1174
|
+
if (argvValue !== undefined) {
|
|
1175
|
+
return { lines: [argvValue], next: index + 1, count: 1 };
|
|
1176
|
+
}
|
|
1177
|
+
if (line.key !== undefined &&
|
|
1178
|
+
line.value !== undefined &&
|
|
1179
|
+
(line.key === LAST_APPLIED_CONFIGURATION_ANNOTATION ||
|
|
1180
|
+
isCredentialKey(line.key))) {
|
|
1181
|
+
if (isBlockScalar(line.value)) {
|
|
1182
|
+
const masked = maskValueInPlace(line);
|
|
1183
|
+
return {
|
|
1184
|
+
lines: [masked.text],
|
|
1185
|
+
next: skipDeeperLines(parsed, index + 1, line.contentIndent),
|
|
1186
|
+
count: masked.count,
|
|
1187
|
+
};
|
|
1188
|
+
}
|
|
1189
|
+
if (!isExemptValue(line.value)) {
|
|
1190
|
+
const masked = maskValueInPlace(line);
|
|
1191
|
+
return { lines: [masked.text], next: index + 1, count: masked.count };
|
|
1192
|
+
}
|
|
1193
|
+
/*
|
|
1194
|
+
* A credential-like key with nothing to hide on this line: its
|
|
1195
|
+
* children are judged on their own, and describe's "<set to the key
|
|
1196
|
+
* …>" reference must not be chewed up by the inline pair rule.
|
|
1197
|
+
*/
|
|
1198
|
+
const prefix = redactKeyPrefix(line);
|
|
1199
|
+
return {
|
|
1200
|
+
lines: [prefix.text + line.raw.slice((_a = line.valueStart) !== null && _a !== void 0 ? _a : 0)],
|
|
1201
|
+
next: index + 1,
|
|
1202
|
+
count: prefix.count,
|
|
1203
|
+
};
|
|
1204
|
+
}
|
|
1205
|
+
const inline = applyInlineRulesToLine(line);
|
|
1206
|
+
return { lines: [inline.text], next: index + 1, count: inline.count };
|
|
1207
|
+
}
|
|
1208
|
+
}
|
|
1209
|
+
//# sourceMappingURL=KubectlOutputRedactor.js.map
|