import Docker, { ContainerCreateOptions } from 'dockerode';
import { AnalyticsService } from './../services/Analytics';
import { ContainerService } from './../services/Container';
import { ImageService } from './../services/Image';
import { RegistryAuthService } from './../services/RegistryAuth';
import { Config, Container, OpCommand, RunCommandArgs } from './../types';
export interface OpRunInputs {
    op: OpCommand;
    isPipeline: boolean;
    config: Config;
    parsedArgs: RunCommandArgs;
    options: ContainerCreateOptions;
    container: Docker.Container;
    version: string;
}
export declare class OpService {
    protected registryAuthService: RegistryAuthService;
    protected imageService: ImageService;
    protected containerService: ContainerService;
    protected analytics: AnalyticsService;
    constructor(registryAuthService?: RegistryAuthService, imageService?: ImageService, containerService?: ContainerService, analytics?: AnalyticsService);
    opsBuildLoop: (ops: OpCommand[], opPath: string, config: Config) => Promise<void>;
    run(op: OpCommand, isPipeline: boolean, parsedArgs: RunCommandArgs, config: Config, version: string): Promise<Boolean>;
    updateOpFields: (inputs: OpRunInputs) => OpRunInputs;
    getImage: (inputs: OpRunInputs) => Promise<OpRunInputs>;
    pullImageFromRegistry: (op: OpCommand, config: Config, version: string) => Promise<void>;
    setOpImageUrl: (op: OpCommand, config: Config) => string;
    setEnvs: (inputs: OpRunInputs) => OpRunInputs;
    hostSetup: ({ op, ...rest }: OpRunInputs) => {
        op: {
            bind: string[];
            type: "command" | "glue_code" | "job" | "service";
            run: string;
            sdk?: string | undefined;
            network?: string | undefined;
            src: string[];
            mountCwd: boolean;
            mountHome: boolean;
            port: string[];
            image: string | void;
            name: string;
            version: string;
            platformVersion: string;
            description: string;
            publishDescription?: string | undefined;
            env: string[];
            runId: string;
            opsHome: string;
            configDir: string;
            stateDir: string;
            localStateDir: string;
            teamID?: string | undefined;
            teamName: string;
            help: {
                usage: string;
                arguments: {
                    [key: string]: string;
                };
                options: {
                    [key: string]: string;
                };
            };
            isPublic: boolean;
            isPublished?: boolean | undefined;
            id: string;
            createdAt: string;
            updatedAt: string;
            local?: boolean | undefined;
        };
        isPipeline: boolean;
        config: Config;
        parsedArgs: RunCommandArgs;
        options: Docker.ContainerCreateOptions;
        container: Docker.Container;
        version: string;
    };
    setBinds: ({ op, ...rest }: OpRunInputs) => {
        op: {
            bind: string[];
            type: "command" | "glue_code" | "job" | "service";
            run: string;
            sdk?: string | undefined;
            network?: string | undefined;
            src: string[];
            mountCwd: boolean;
            mountHome: boolean;
            port: string[];
            image: string | void;
            name: string;
            version: string;
            platformVersion: string;
            description: string;
            publishDescription?: string | undefined;
            env: string[];
            runId: string;
            opsHome: string;
            configDir: string;
            stateDir: string;
            localStateDir: string;
            teamID?: string | undefined;
            teamName: string;
            help: {
                usage: string;
                arguments: {
                    [key: string]: string;
                };
                options: {
                    [key: string]: string;
                };
            };
            isPublic: boolean;
            isPublished?: boolean | undefined;
            id: string;
            createdAt: string;
            updatedAt: string;
            local?: boolean | undefined;
        };
        isPipeline: boolean;
        config: Config;
        parsedArgs: RunCommandArgs;
        options: Docker.ContainerCreateOptions;
        container: Docker.Container;
        version: string;
    };
    getOptions: ({ op, config, ...rest }: OpRunInputs) => {
        op: OpCommand;
        options: {
            AttachStderr: boolean;
            AttachStdin: boolean;
            AttachStdout: boolean;
            Cmd: string[];
            Env: string[];
            WorkingDir: string;
            HostConfig: {
                Binds: string[];
                NetworkMode: string | undefined;
            };
            Image: string | void;
            OpenStdin: boolean;
            StdinOnce: boolean;
            Tty: boolean;
            Volumes: {};
            VolumesFrom: never[];
        };
        isPipeline: boolean;
        parsedArgs: RunCommandArgs;
        container: Docker.Container;
        version: string;
    };
    addPortsToOptions: ({ op, options, ...rest }: OpRunInputs) => Promise<OpRunInputs>;
    createContainer: (inputs: OpRunInputs) => Promise<OpRunInputs>;
    attachToContainer: (inputs: OpRunInputs) => Promise<OpRunInputs>;
    convertEnvStringsToObject: (acc: Container<string>, curr: string) => {
        [x: string]: string;
    };
    overrideEnvWithProcessEnv: (processEnv: Container<string | undefined>) => ([key, val,]: [string, string]) => string[];
    replaceHomeAlias: (bindPair: string) => string;
}
