import * as types from './types';
import { IContainer } from './../../di/resolvers';
import { IMetrics } from '../../metrics/metrics';
import { RequestContext } from '../../servers/requestContext';
export declare abstract class AbstractHttpCommand {
    protected customTags: string;
    protected metrics: IMetrics;
    requestContext: RequestContext;
    private static METRICS_NAME;
    readonly container: IContainer;
    constructor(container: IContainer);
    protected initializeMetricsInfo(container: IContainer): void;
    /**
     * Set metric tags for this command
     *
     * @protected
     * @param {any} tags
     *
     * @memberOf AbstractHttpCommand
     */
    protected setMetricsTags(container: IContainer, uri: string): void;
    onCommandCompleted(duration: number, success: boolean): void;
    runAsync(...args: any[]): Promise<any>;
    protected execAsync(verb: string, url: string, data?: any): Promise<any>;
    protected postAsync(url: string, data: any): Promise<types.IHttpResponse>;
    protected getAsync(url: string): Promise<types.IHttpResponse>;
    protected deleteAsync(url: string): Promise<types.IHttpResponse>;
    protected putAsync(url: string, data: any): Promise<types.IHttpResponse>;
    /**
     * Send a http request
     *
     * @protected
     * @param {string} http verb to use
     * @param {string} url
     * @param {(req:types.IHttpRequest) => void} [prepareRequest] Callback to configure request before sending
     * @returns request response
     */
    protected sendRequestAsync(verb: string, url: string, prepareRequest?: (req: types.IHttpRequest) => void): Promise<types.IHttpResponse>;
    private handleError(msg, err?);
}
