import { Listr } from 'listr2';
import { type ConfigManager } from './config-manager.js';
import { type K8Factory } from '../integration/kube/k8-factory.js';
import { type SoloLogger } from './logging/solo-logger.js';
import { type PodReference } from '../integration/kube/resources/pod/pod-reference.js';
import { type ContainerName } from '../integration/kube/resources/container/container-name.js';
import { type ConsensusNode } from './model/consensus-node.js';
import { PackageDownloader } from './package-downloader.js';
/** PlatformInstaller install platform code in the root-container of a network pod */
export declare class PlatformInstaller {
    private logger?;
    private k8Factory?;
    private configManager?;
    private packageDownloader?;
    constructor(logger?: SoloLogger, k8Factory?: K8Factory, configManager?: ConfigManager, packageDownloader?: PackageDownloader);
    private _getNamespace;
    validatePlatformReleaseDir(releaseDirectory: string): void;
    getPlatformRelease(stagingDirectory: string, tag: string): Promise<string[]>;
    /** Fetch and extract platform code into the container */
    fetchPlatform(podReference: PodReference, tag: string, zipPath: string, checksumPath: string, context?: string): Promise<boolean>;
    /**
     * Copy a list of files to a directory in the container
     * @param podReference - pod reference
     * @param sourceFiles - list of source files
     * @param destinationDirectory - destination directory
     * @param [container] - name of the container
     * @param [context]
     * @returns a list of paths of the copied files insider the container
     */
    copyFiles(podReference: PodReference, sourceFiles: string[], destinationDirectory: string, container?: ContainerName, context?: string): Promise<string[]>;
    copyGossipKeys(consensusNode: ConsensusNode, stagingDirectory: string, consensusNodes: ConsensusNode[]): Promise<void>;
    copyTLSKeys(consensusNodes: ConsensusNode[], stagingDirectory: string, contexts: string[]): Promise<void>;
    setPathPermission(podReference: PodReference, destinationPath: string, mode?: string, recursive?: boolean, container?: ContainerName, context?: string): Promise<boolean>;
    setPlatformDirPermissions(podReference: PodReference, context?: string): Promise<boolean>;
    /** Return a list of task to perform node directory setup */
    taskSetup(podReference: PodReference, stagingDirectory: string, isGenesis: boolean, context?: string): Listr;
    /**
     * Copy configuration files to the network consensus node pod
     * @param stagingDirectory - staging directory path
     * @param podReference - pod reference
     * @param isGenesis - true if this is `solo consensus node setup` and we are at genesis
     * @param context
     */
    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 stagingDirectory staging directory path
     * @param consensusNodes list of consensus nodes
     * @param contexts list of k8s contexts
     */
    copyNodeKeys(stagingDirectory: string, consensusNodes: ConsensusNode[], contexts: string[]): any[];
}
