import { FConfiguration, FLogger } from "@freemework/common";
export declare namespace FHostingSettings {
    type WebServer = UnsecuredWebServer | SecuredWebServer;
    interface WebServerBase {
        readonly name: string;
        readonly listenHost: string;
        readonly listenPort: number;
        readonly log?: FLogger;
        /**
         * See http://expressjs.com/en/4x/api.html#trust.proxy.options.table
         */
        readonly trustProxy?: boolean | "loopback" | "linklocal" | "uniquelocal";
        /**
         * @default true
         *
         * Handle HTTP Upgrade to switch a connection into a WebSocket.
         * See more https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Upgrade
         */
        readonly handleUpgrade?: boolean;
    }
    interface UnsecuredBaseWebServer extends WebServerBase {
        readonly type: "http";
    }
    interface UnsecuredCommonWebServer extends UnsecuredBaseWebServer {
    }
    interface UnsecuredXfccWebServer extends UnsecuredBaseWebServer {
        readonly caCertificates: Buffer | string | Array<string | Buffer>;
        readonly clientCertificateMode: ClientCertificateMode.XFCC;
    }
    type UnsecuredWebServer = UnsecuredCommonWebServer | UnsecuredXfccWebServer;
    interface SecuredBaseWebServer extends WebServerBase {
        readonly type: "https";
        /**
         * Certificate's data as Buffer or Path to file
         */
        readonly serverCertificate: Buffer | string;
        /**
         * Private Key's data as Buffer or Path to file
         */
        readonly serverKey: Buffer | string;
        readonly serverKeyPassword?: string;
    }
    interface SecuredCommonWebServer extends SecuredBaseWebServer {
        /**
         * Certificate's data as Buffer or Path to file
         */
        readonly caCertificates?: Buffer | string | Array<string | Buffer>;
        readonly clientCertificateMode: ClientCertificateMode.REQUEST | ClientCertificateMode.NONE;
    }
    interface SecuredClientWebServer extends SecuredBaseWebServer {
        /**
         * Certificate's data as Buffer or Path to file
         */
        readonly caCertificates: Buffer | string | Array<string | Buffer>;
        readonly clientCertificateMode: ClientCertificateMode.TRUST | ClientCertificateMode.XFCC;
    }
    type SecuredWebServer = SecuredCommonWebServer | SecuredClientWebServer;
    enum ClientCertificateMode {
        /**
         * The server will NOT request a certificate from clients that connect WILL NOT validate the certificate.
         */
        NONE = "none",
        /**
         * The server WILL request a certificate from clients that connect and WILL NOT validate the certificate.
         * Validate the certificate by yourself.
         */
        REQUEST = "request",
        /**
         * The server WILL request a certificate from clients that connect and validate the certificate
         * Rejects untrusted certificate
         */
        TRUST = "trust",
        /**
         * The server WILL retrieve a certificate from the HTTP header X-Forwarded-Client-Cert and validate the certificate.
         * Rejects untrusted certificate
         * Hist: Use $ssl_client_escaped_cert NGINX variable to set X-Forwarded-Client-Cert header inside configuration.
         */
        XFCC = "xfcc"
    }
    interface ServerEndpoint {
        readonly servers: Array<string>;
    }
    interface BindEndpoint {
        readonly bindPath: string;
    }
    interface WebSocketEndpoint extends BindEndpoint {
        readonly defaultProtocol: string;
        readonly allowedProtocols?: ReadonlyArray<string>;
    }
    function fromConfigurationWebServer(configuration: FConfiguration, serverName: string): WebServer;
    /**
     * @deprecated Use FHostingSettings.fromConfigurationWebServer instead
     */
    const parseWebServer: typeof fromConfigurationWebServer;
    function fromConfigurationWebServers(configuration: FConfiguration): Array<FHostingSettings.WebServer>;
    /**
     * @deprecated Use FHostingSettings.fromConfigurationWebServers instead
     */
    const parseWebServers: typeof fromConfigurationWebServers;
    function fromConfigurationTrustProxy(val: string): boolean | "loopback" | "linklocal" | "uniquelocal";
    /**
     * @deprecated Use FHostingSettings.fromConfigurationTrustProxy instead
     */
    const parseTrustProxy: typeof fromConfigurationTrustProxy;
}
/**
 * @deprecated Use FHostingSettings instead
 */
export declare namespace FHostingConfiguration {
    /**
     * @deprecated Use FHostingSettings.WebServer instead
     */
    type WebServer = FHostingSettings.WebServer;
    /**
     * @deprecated Use FHostingSettings.WebServerBase instead
     */
    type WebServerBase = FHostingSettings.WebServerBase;
    /**
     * @deprecated Use FHostingSettings.UnsecuredBaseWebServer instead
     */
    type UnsecuredBaseWebServer = FHostingSettings.UnsecuredBaseWebServer;
    /**
     * @deprecated Use FHostingSettings.UnsecuredCommonWebServer instead
     */
    type UnsecuredCommonWebServer = FHostingSettings.UnsecuredCommonWebServer;
    /**
     * @deprecated Use FHostingSettings.UnsecuredXfccWebServer instead
     */
    type UnsecuredXfccWebServer = FHostingSettings.UnsecuredXfccWebServer;
    /**
     * @deprecated Use FHostingSettings.UnsecuredWebServer instead
     */
    type UnsecuredWebServer = FHostingSettings.UnsecuredWebServer;
    /**
     * @deprecated Use FHostingSettings.SecuredBaseWebServer instead
     */
    type SecuredBaseWebServer = FHostingSettings.SecuredBaseWebServer;
    /**
     * @deprecated Use FHostingSettings.SecuredCommonWebServer instead
     */
    type SecuredCommonWebServer = FHostingSettings.SecuredCommonWebServer;
    /**
     * @deprecated Use FHostingSettings.SecuredClientWebServer instead
     */
    type SecuredClientWebServer = FHostingSettings.SecuredClientWebServer;
    /**
     * @deprecated Use FHostingSettings.SecuredWebServer instead
     */
    type SecuredWebServer = FHostingSettings.SecuredWebServer;
    /**
     * @deprecated Use FHostingSettings.ClientCertificateMode instead
     */
    const ClientCertificateMode: typeof FHostingSettings.ClientCertificateMode;
    /**
     * @deprecated Use FHostingSettings.ServerEndpoint instead
     */
    type ServerEndpoint = FHostingSettings.ServerEndpoint;
    /**
     * @deprecated Use FHostingSettings.BindEndpoint instead
     */
    type BindEndpoint = FHostingSettings.BindEndpoint;
    /**
     * @deprecated Use FHostingSettings.WebSocketEndpoint instead
     */
    type WebSocketEndpoint = FHostingSettings.WebSocketEndpoint;
    /**
     * @deprecated Use FHostingSettings.parseWebServer instead
     */
    const parseWebServer: typeof FHostingSettings.fromConfigurationWebServer;
    /**
     * @deprecated Use FHostingSettings.parseWebServers instead
     */
    const parseWebServers: typeof FHostingSettings.fromConfigurationWebServers;
    /**
     * @deprecated Use FHostingSettings.parseTrustProxy instead
     */
    const parseTrustProxy: typeof FHostingSettings.fromConfigurationTrustProxy;
}
