import { Provider, Application } from 'chen/core';
import { Client, ConfigOptions } from 'elasticsearch';
/**
 * ElasticSearchConfig interface
 */
export interface ElasticSearchConfig extends ConfigOptions {
}
/**
 * ElasticSearchConnectionFactoryConfig interface
 */
export interface ElasticSearchConnectionFactoryConfig {
    default: string;
    connections: {
        [name: string]: ElasticSearchConfig;
    };
}
/**
 * ElasticSearchClient class
 */
export declare class ElasticSearchClient extends Client {
    private name;
    private config;
    /**
     * ElasticSearchClient constructor
     * @param {string} private name
     * @param {SQLConfig} private config
     */
    constructor(name: string, config: ElasticSearchConfig);
}
/**
 * ElasticSearchConnectionFactory class
 */
export declare class ElasticSearchConnectionFactory {
    private config;
    /**
     * singleton global instance
     * @type {ElasticSearchConnectionFactory}
     */
    private static globalInstance;
    /**
     * Created connections by the factory instance
     * @type {Map<string, ElasticSearchClient>}
     */
    private connections;
    /**
     * ElasticSearchConnectionFactory constructor
     * @param {ElasticSearchConnectionFactoryConfig} private config
     */
    constructor(config: ElasticSearchConnectionFactoryConfig);
    /**
     * Get single instance
     * @param  {ElasticSearchConnectionFactoryConfig} config
     * @return {ElasticSearchConnectionFactory}
     */
    static getGlobalInstance(): ElasticSearchConnectionFactory;
    /**
     * Create global instance
     * @param {ElasticSearchConnectionFactoryConfig} config
     */
    static createGlobalInstance(config: ElasticSearchConnectionFactoryConfig): void;
    /**
     * Get connection credentials
     * @param  {string} name
     * @return {ElasticSearchConfig}
     */
    getCredentials(name: string): ElasticSearchConfig;
    /**
     * Create connection then cache the connection to a Map object
     * the next time getConnection is called with the same parameter used
     * it will return the previously created connection.
     * @param  {string} name
     * @return {ElasticSearchClient}
     */
    getConnection(name?: string): ElasticSearchClient;
    /**
     * Always get a new connection
     * @param  {string} name
     * @return {ElasticSearchClient}
     */
    getNewConnection(name: string): ElasticSearchClient;
}
/**
 * ElasticSearchProvider class
 */
export declare class ElasticSearchProvider extends Provider {
    /**
     * Create connection
     * @param {Application} app
     */
    register(app: Application): Promise<void>;
}
