import { CoreModule, OnExtensionLoad, OnModuleInstantiated, ExtensionWithConfig, Extension, OnShutdown, ExtensionShutdown } from '../../core/interfaces';
import { HapiConfig } from './interfaces';
import { Observable } from 'rxjs';
import { Server } from 'hapi';
export declare class HttpServerExt implements OnExtensionLoad, OnModuleInstantiated, OnShutdown {
    static setConfig(config: HapiConfig): ExtensionWithConfig;
    /**
     * Initialize HapiJS Server
     *
     * @param  {CoreModule} module
     * @param  {HapiConfig} config
     * @returns Observable
     */
    onExtensionLoad(module: CoreModule, config: HapiConfig): Observable<Extension>;
    /**
     * Build Lifecycle components
     * Add routes by modules
     * Add Lifecycle handlers
     * Start HapiJS Server
     *
     * @param  {CoreModule} module
     * @param  {Server} server
     * @returns Observable
     */
    onModuleInstantiated(module: CoreModule, server: Server): Observable<any>;
    /**
     * Shutdown HapiJS server extension
     *
     * @param  {CoreModule} module
     * @param  {Server} server
     * @returns ExtensionShutdown
     */
    onShutdown(module: CoreModule, server: Server): ExtensionShutdown;
    /**
     * Format the config provided
     * to a list of ConnectionOptions
     *
     * @param  {HapiConfig} config
     * @returns ConnectionOptions
     */
    private formatConnections(config);
    /**
     * Register a HapiJS Plugin
     *
     * @param  {CoreModule} module
     * @param  {Server} server
     * @returns Observable
     */
    private registerPlugin(module, server);
    /**
     * Add routes from CoreModule
     *
     * @param  {CoreRoute[]} module
     * @returns Observable
     */
    private registerHandler(routes?);
    /**
     * Build CoreRoute based on a module
     *
     * @param  {CoreModule} module
     * @returns Observable
     */
    private buildRoutes(module);
    /**
     * Trigger the http handler hook
     * Reply automatically
     *
     * @param  {Request} request
     * @param  {ReplyNoContinue} reply
     * @param  {CoreRoute} route
     * @returns void
     */
    private httpHandler(request, reply, route);
    /**
     * Format response to HTTPHandlerResponse object
     *
     * @param  {any} data
     * @returns HTTPHandlerResponse
     */
    private formatResponse(data);
    /**
     * Check of response is not empty
     *
     * @param  {any} response
     * @returns boolean
     */
    private isValid(response);
    /**
    * Initialize and instantiate lifecycle components
    *
    * @param  {CoreModule} module
    * @param  {Server} server
    */
    private instantiateLifecycle(module, server);
    /**
     * Lifecycle Event Handler
     * Instantiate the Lifecycle component
     * And trigger the hook
     *
     * @param  {Type<any>} lifecycle
     * @param  {CoreModule} module
     * @param  {Request} request
     * @param  {ReplyWithContinue} reply
     * @returns Observable
     */
    private eventHandler(lifecycle, module, request, reply);
}
