import { ConnectionOptions, Consumer, NatsError, Subscription, SubscriptionOptions } from 'nats.ws';
import { RunnerUpdateRequest } from './requestDTOs';
import { ISession, ISessionMetricInfo, Image, MetadataUpdatedEvent, RepositoryPackageReference, RunnerStatus, SaveDefaultSettings, Session } from './DTOs';
import { BaseClient } from './BaseClient';
export declare class RunnerClient extends BaseClient {
    private runnerId;
    default: {
        startSession: (testPlanRepositoryReference?: RepositoryPackageReference, timeout?: number) => Promise<Session>;
        startSessionWithOverriddenImage: (testPlanReference?: RepositoryPackageReference, imageOverride?: Image, timeout?: number) => Promise<Session>;
        getImage: () => Promise<Image>;
        setImage: (image: Image) => Promise<Image>;
        getSettings: () => Promise<RepositoryPackageReference | undefined>;
        setSettings: (repositoryPackageReference: RepositoryPackageReference) => Promise<void>;
        saveDefaultSettings: (defaultSettings: SaveDefaultSettings) => Promise<void>;
    };
    constructor(baseSubject: string, options: ConnectionOptions);
    /**
     * Get the logs zip file from the server.
     * @returns {{Promise<Uint8Array>}}
     * @description The logs zip file contains the logs from the server.
     */
    getLogsZip(): Promise<Uint8Array>;
    /**
     * Get the created image with the specified ID.
     * @param imageId
     * @returns {{Promise<Image>}}
     */
    getImage(imageId: string): Promise<Image>;
    /**
     * Get all created images
     * @returns {{Promise<Image[]>}}
     */
    getImages(): Promise<Image[]>;
    /**
     * Get all sessions
     * @returns {{Promise<Session[]>}}
     */
    getSessions(): Promise<Session[]>;
    setSession(session: ISession): Promise<Session>;
    /**
     * Create a OpenTAP package configuration image from a list image inputs consisting of user specified packages and repositories.
     * @param {Image[]} images List of images
     * @param {number} timeout Optional timeout in milliseconds
     * @returns {{Promise<Image>}}
     */
    resolveImage(images: Image[], timeout?: number): Promise<Image>;
    /**
     * Dry runs to resolve an image from a list of images. Dry run means that no packages will be downloaded.
     * @param {Image[]} images List of images
     * @param {number} timeout Optional timeout in milliseconds
     * @returns {{Promise<Image>}}
     */
    resolveImageDryRun(images: Image[], timeout?: number): Promise<Image>;
    /**
     * Shut down a session
     * @param sessionId the ID of the session to shut down
     * @returns {{Promise<void>}}
     */
    shutdownSession(sessionId: string): Promise<void>;
    /**
     * Start a session
     * @returns {{Promise<Session>}}
     */
    startSession(): Promise<Session>;
    /**
     * Get the session manager image.
     * @returns {{Promise<Image>}}
     */
    getSessionManagerImage(): Promise<Image>;
    /**
     * Start a session based on an image.
     * @param imageId
     * @returns {{Promise<Session>}}
     */
    startImageSession(image: Image): Promise<Session>;
    /**
     * Update the `Runner` plugin to the given version
     * @param runnerUpdateRequest
     * @returns {{Promise<void>}}
     */
    updateRunner(runnerUpdateRequest: RunnerUpdateRequest): Promise<void>;
    /**
     * Subscribe to the MetadataUpdated event
     * @param  {(event:MetadataUpdatedEvent|undefined,err:NatsError|Error|null)=>void} handler
     * @param  {SubscriptionOptions} options?
     * @returns Subscription
     */
    connectMetadataUpdatedEvents(handler: (event: MetadataUpdatedEvent | undefined, err: NatsError | Error | null) => void, options?: SubscriptionOptions): Subscription;
    /**
     * Connect to metrics published for the given SessionMetricInfo from the idle session
     * @param  {ISessionMetricInfo} metricInfo
     * @param  {(result:MetricValue|undefined,err:NatsError|Error|null)=>void} handler
     * @param  {SubscriptionOptions} options?
     * @returns Subscription
     */
    connectMetric(metricInfo: ISessionMetricInfo, inactiveThresholdMilliseconds: number, maxBatchSize: number, handler: (metricData: {
        encodedMetrics: Uint8Array[];
        timestamps: number[];
    }) => void): Promise<Consumer>;
    /**
     * Gets the runner status
     * @return Promise
     */
    getStatus(): Promise<RunnerStatus>;
}
