import { Listr } from 'listr2';
import { ConfigManager } from './config_manager.js';
import { K8 } from './k8.js';
import { SoloLogger } from './logging.js';
import type { NodeAlias, NodeAliases, PodName } from '../types/aliases.js';
/** PlatformInstaller install platform code in the root-container of a network pod */
export declare class PlatformInstaller {
    private logger?;
    private k8?;
    private configManager?;
    constructor(logger?: SoloLogger, k8?: K8, configManager?: ConfigManager);
    private _getNamespace;
    validatePlatformReleaseDir(releaseDir: string): void;
    /** Fetch and extract platform code into the container */
    fetchPlatform(podName: PodName, tag: string): Promise<boolean>;
    /**
     * Copy a list of files to a directory in the container
     * @param podName
     * @param srcFiles - list of source files
     * @param destDir - destination directory
     * @param [container] - name of the container
     * @returns a list of pathso of the copied files insider the container
     */
    copyFiles(podName: PodName, srcFiles: string[], destDir: string, container?: string): Promise<string[]>;
    copyGossipKeys(nodeAlias: NodeAlias, stagingDir: string, nodeAliases: NodeAliases): Promise<void>;
    copyTLSKeys(nodeAliases: NodeAliases, stagingDir: string): Promise<void>;
    setPathPermission(podName: PodName, destPath: string, mode?: string, recursive?: boolean, container?: string): Promise<boolean>;
    setPlatformDirPermissions(podName: PodName): Promise<boolean>;
    /** Return a list of task to perform node directory setup */
    taskSetup(podName: PodName, stagingDir: string, isGenesis: boolean): Listr<any, "default", "simple">;
    /**
     * Copy configuration files to the network consensus node pod
     * @param stagingDir - staging directory path
     * @param podName - network consensus node pod name
     * @param isGenesis - true if this is `solo node setup` and we are at genesis
     * @private
     */
    private copyConfigurationFiles;
    /**
     * Return a list of task to copy the node keys to the staging directory
     *
     * It assumes the staging directory has the following files and resources:
     * <li>${staging}/keys/s-public-<nodeAlias>.pem: private signing key for a node</li>
     * <li>${staging}/keys/s-private-<nodeAlias>.pem: public signing key for a node</li>
     * <li>${staging}/keys/a-public-<nodeAlias>.pem: private agreement key for a node</li>
     * <li>${staging}/keys/a-private-<nodeAlias>.pem: public agreement key for a node</li>
     * <li>${staging}/keys/hedera-<nodeAlias>.key: gRPC TLS key for a node</li>
     * <li>${staging}/keys/hedera-<nodeAlias>.crt: gRPC TLS cert for a node</li>
     *
     * @param stagingDir staging directory path
     * @param nodeAliases list of node ids
     */
    copyNodeKeys(stagingDir: string, nodeAliases: NodeAliases): any[];
}
