import { BaseCommand } from './base.js';
import * as constants from '../core/constants.js';
import { type KeyManager } from '../core/key-manager.js';
import { type PlatformInstaller } from '../core/platform-installer.js';
import { type ProfileManager } from '../core/profile-manager.js';
import { type CertificateManager } from '../core/certificate-manager.js';
import { type IP, type NodeAlias, type NodeAliases } from '../types/aliases.js';
import { type ClusterReferenceName, type ClusterReferences, type CommandDefinition, type SoloListrTask } from '../types/index.js';
import { type ComponentFactoryApi } from '../core/config/remote/api/component-factory-api.js';
import { NamespaceName } from '../types/namespace/namespace-name.js';
import { ConsensusNode } from '../core/model/consensus-node.js';
import { BlockNodeStateSchema } from '../data/schema/model/remote/state/block-node-state-schema.js';
export interface NetworkDeployConfigClass {
    isUpgrade: boolean;
    applicationEnv: string;
    cacheDir: string;
    chartDirectory: string;
    enablePrometheusSvcMonitor: boolean;
    loadBalancerEnabled: boolean;
    soloChartVersion: string;
    namespace: NamespaceName;
    deployment: string;
    nodeAliasesUnparsed: string;
    persistentVolumeClaims: string;
    profileFile: string;
    profileName: string;
    releaseTag: string;
    keysDir: string;
    nodeAliases: NodeAliases;
    stagingDir: string;
    stagingKeysDir: string;
    valuesFile: string;
    valuesArgMap: Record<ClusterReferenceName, string>;
    grpcTlsCertificatePath: string;
    grpcWebTlsCertificatePath: string;
    grpcTlsKeyPath: string;
    grpcWebTlsKeyPath: string;
    genesisThrottlesFile: string;
    resolvedThrottlesFile: string;
    haproxyIps: string;
    envoyIps: string;
    haproxyIpsParsed?: Record<NodeAlias, IP>;
    envoyIpsParsed?: Record<NodeAlias, IP>;
    storageType: constants.StorageType;
    gcsWriteAccessKey: string;
    gcsWriteSecrets: string;
    gcsEndpoint: string;
    gcsBucket: string;
    gcsBucketPrefix: string;
    awsWriteAccessKey: string;
    awsWriteSecrets: string;
    awsEndpoint: string;
    awsBucket: string;
    awsBucketPrefix: string;
    awsBucketRegion: string;
    backupBucket: string;
    backupWriteSecrets: string;
    backupWriteAccessKey: string;
    backupEndpoint: string;
    backupRegion: string;
    backupProvider: string;
    consensusNodes: ConsensusNode[];
    contexts: string[];
    clusterRefs: ClusterReferences;
    domainNames?: string;
    domainNamesMapping?: Record<NodeAlias, string>;
    blockNodeComponents: BlockNodeStateSchema[];
    debugNodeAlias: NodeAlias;
    app: string;
}
interface NetworkDeployContext {
    config: NetworkDeployConfigClass;
}
export interface NetworkDestroyContext {
    config: {
        deletePvcs: boolean;
        deleteSecrets: boolean;
        namespace: NamespaceName;
        enableTimeout: boolean;
        force: boolean;
        contexts: string[];
        deployment: string;
    };
    checkTimeout: boolean;
}
export declare class NetworkCommand extends BaseCommand {
    private readonly certificateManager;
    private readonly keyManager;
    private readonly platformInstaller;
    private readonly profileManager;
    private readonly componentFactory;
    private profileValuesFile?;
    static DEPLOY_COMMAND: string;
    constructor(certificateManager: CertificateManager, keyManager: KeyManager, platformInstaller: PlatformInstaller, profileManager: ProfileManager, componentFactory: ComponentFactoryApi);
    private static readonly DEPLOY_CONFIGS_NAME;
    private static readonly DESTROY_FLAGS_LIST;
    private static readonly DEPLOY_FLAGS_LIST;
    static readonly COMMAND_NAME: string;
    private waitForNetworkPods;
    private prepareMinioSecrets;
    private prepareStreamUploaderSecrets;
    private prepareBackupUploaderSecrets;
    private prepareStorageSecrets;
    /**
     * Prepare values args string for each cluster-ref
     * @param config
     */
    private prepareValuesArgMap;
    /**
     * Prepare the values argument for the helm chart for a given config
     * @param config
     */
    private prepareValuesArg;
    /**
     * Adds the template string to the argument for each record
     * @param records - the records to iterate over
     * @param consensusNodes - the consensus nodes to iterate over
     * @param valuesArguments - the values arguments to add to
     * @param templateString - the template string to add
     */
    private addArgForEachRecord;
    private prepareNamespaces;
    private prepareConfig;
    private destroyTask;
    /** Run helm install and deploy network components */
    private deploy;
    private destroy;
    getCommandDefinition(): CommandDefinition;
    /** Adds the consensus node, envoy and haproxy components to remote config.  */
    addNodesAndProxies(): SoloListrTask<NetworkDeployContext>;
    private getBlockNodes;
    close(): Promise<void>;
}
export {};
