import type { ControlPlaneStore, JsonValue } from '../control-plane';
import type { CleanupCandidate, CleanupPlan, DisasterRecoveryDrill, MaintenanceWindow, PlatformUpdateDocument, PlatformUpdateManifest, TrustedUpdateKey, UpgradeCampaign, UpgradeTarget } from './types';
export declare class MaintenanceStore {
    readonly control: ControlPlaneStore;
    private now;
    private id;
    constructor(control: ControlPlaneStore, now?: () => Date, id?: () => string);
    addTrustedKey(input: {
        organizationId: string;
        name: string;
        publicKeyPem: string;
    }): TrustedUpdateKey;
    key(id: string): TrustedUpdateKey | undefined;
    revokeKey(id: string): TrustedUpdateKey;
    importManifest(input: {
        organizationId: string;
        keyId: string;
        document: PlatformUpdateDocument;
        signature: string;
        current: {
            schemaVersion: number;
            currentVersion: string;
            platform: string;
            architecture: string;
        };
    }): PlatformUpdateManifest;
    manifest(id: string): PlatformUpdateManifest | undefined;
    manifests(organizationId: string): PlatformUpdateManifest[];
    createWindow(input: {
        projectId: string;
        name: string;
        schedule: string;
        timezone: string;
        durationMinutes: number;
        allowedOperations: string[];
        requireApproval?: boolean;
    }): MaintenanceWindow;
    window(id: string): MaintenanceWindow | undefined;
    windows(projectId: string): MaintenanceWindow[];
    createCampaign(input: {
        projectId: string;
        manifestId: string;
        windowId?: string;
        fromVersion: string;
        strategy: 'canary' | 'rolling';
        batchSize: number;
        healthGate: Record<string, JsonValue>;
        backupId: string;
        approvedBy?: string;
        targets: Array<{
            serverId?: string;
            target: string;
            previousVersion: string;
        }>;
    }): UpgradeCampaign;
    campaign(id: string): UpgradeCampaign | undefined;
    campaigns(projectId: string): UpgradeCampaign[];
    targets(id: string): UpgradeTarget[];
    updateCampaign(id: string, patch: Partial<Pick<UpgradeCampaign, 'status' | 'currentStage'>>): UpgradeCampaign;
    updateTarget(id: string, patch: Partial<Pick<UpgradeTarget, 'status' | 'evidence' | 'error' | 'startedAt' | 'finishedAt'>>): UpgradeTarget;
    createCleanup(input: {
        projectId: string;
        kind: CleanupPlan['kind'];
        criteria: CleanupPlan['criteria'];
        candidates: CleanupCandidate[];
        ttlMinutes?: number;
    }): CleanupPlan;
    cleanup(id: string): CleanupPlan | undefined;
    cleanups(projectId: string): CleanupPlan[];
    updateCleanup(id: string, patch: Partial<Pick<CleanupPlan, 'status' | 'confirmation' | 'result'>>): CleanupPlan;
    createDrill(input: {
        projectId: string;
        backupPolicyId?: string;
        recoveryPointId?: string;
        topologyId?: string;
        scenario: DisasterRecoveryDrill['scenario'];
        isolatedTarget: string;
        expectedRpoMinutes: number;
        expectedRtoMinutes: number;
    }): DisasterRecoveryDrill;
    drill(id: string): DisasterRecoveryDrill | undefined;
    drills(projectId: string): DisasterRecoveryDrill[];
    updateDrill(id: string, patch: Partial<Pick<DisasterRecoveryDrill, 'status' | 'operationId' | 'evidence' | 'measuredRpoMinutes' | 'measuredRtoMinutes' | 'cleanupVerified' | 'error' | 'startedAt' | 'finishedAt'>>): DisasterRecoveryDrill;
}
