import { Effects } from '../Effects';
import { Origin } from './Origin';
import { AddSslOptions } from '../osBindings';
import { Security } from '../osBindings';
import { BindOptions } from '../osBindings';
import { AlpnInfo } from '../osBindings';
export { AddSslOptions, Security, BindOptions };
export declare const knownProtocols: {
    readonly http: {
        readonly secure: null;
        readonly defaultPort: 80;
        readonly withSsl: "https";
        readonly alpn: AlpnInfo;
        readonly addXForwardedHeaders: true;
    };
    readonly https: {
        readonly secure: {
            readonly ssl: true;
        };
        readonly defaultPort: 443;
        readonly addXForwardedHeaders: true;
    };
    readonly ws: {
        readonly secure: null;
        readonly defaultPort: 80;
        readonly withSsl: "wss";
        readonly alpn: AlpnInfo;
        readonly addXForwardedHeaders: true;
    };
    readonly wss: {
        readonly secure: {
            readonly ssl: true;
        };
        readonly defaultPort: 443;
        readonly addXForwardedHeaders: true;
    };
    readonly ssh: {
        readonly secure: {
            readonly ssl: false;
        };
        readonly defaultPort: 22;
        readonly addXForwardedHeaders: false;
    };
    readonly dns: {
        readonly secure: {
            readonly ssl: false;
        };
        readonly defaultPort: 53;
        readonly addXForwardedHeaders: false;
    };
};
export type Scheme = string | null;
type KnownProtocols = typeof knownProtocols;
type ProtocolsWithSslVariants = {
    [K in keyof KnownProtocols]: KnownProtocols[K] extends {
        withSsl: string;
    } ? K : never;
}[keyof KnownProtocols];
type NotProtocolsWithSslVariants = Exclude<keyof KnownProtocols, ProtocolsWithSslVariants>;
type BindOptionsByKnownProtocol = {
    protocol: ProtocolsWithSslVariants;
    preferredExternalPort?: number;
    addSsl?: Partial<AddSslOptions>;
} | {
    protocol: NotProtocolsWithSslVariants;
    preferredExternalPort?: number;
    addSsl?: AddSslOptions;
};
export type BindOptionsByProtocol = BindOptionsByKnownProtocol | (BindOptions & {
    protocol: null;
});
export declare class MultiHost {
    readonly options: {
        effects: Effects;
        id: string;
    };
    constructor(options: {
        effects: Effects;
        id: string;
    });
    /**
     * @description Use this function to bind the host to an internal port and configured options for protocol, security, and external port.
     *
     * @param internalPort - The internal port to be bound.
     * @param options - The protocol options for this binding.
     * @returns A multi-origin that is capable of exporting one or more service interfaces.
     * @example
     * In this example, we bind a previously created multi-host to port 80, then select the http protocol and request an external port of 8332.
     *
     * ```
      const uiMultiOrigin = await uiMulti.bindPort(80, {
        protocol: 'http',
        preferredExternalPort: 8332,
      })
     * ```
     */
    bindPort(internalPort: number, options: BindOptionsByProtocol): Promise<Origin>;
    private bindPortForUnknown;
    private bindPortForKnown;
    private getSslProto;
}
