import { AxiosRequestConfig, CreateAxiosDefaults } from 'axios';
import { ErrorHandler, GeneralErrorCodes } from './error-handling';
import { RestClient as IRestClient, RequestConfig, RequestInfo, Response } from './rest-client.types';
import { RestInterceptor } from './rest-interceptor';
export declare class RestClient implements IRestClient {
    private readonly client;
    private readonly errorHandler;
    constructor({ config, interceptors, errorHandler, }?: {
        config?: CreateAxiosDefaults;
        interceptors?: RestInterceptor<any[]>[];
        errorHandler?: ErrorHandler<any>;
    });
    attachInterceptors<T extends any[]>(interceptors?: RestInterceptor<T>[], ...args: T): void;
    attachInterceptor<T extends any[]>(interceptor: RestInterceptor<T>, ...args: T): void;
    ejectInterceptor<T extends any[]>(interceptor: RestInterceptor<T>): void;
    get<ZOutput, ECodes extends string = GeneralErrorCodes, IsRawRes extends boolean = false>(requestInfo: RequestInfo<ZOutput, ECodes>, url: string, requestConfig?: AxiosRequestConfig & RequestConfig<IsRawRes>): Promise<Response<ZOutput, IsRawRes>>;
    post<ZOutput, ECodes extends string = GeneralErrorCodes, IsRawRes extends boolean = false>(requestInfo: RequestInfo<ZOutput, ECodes>, url: string, data?: any, requestConfig?: AxiosRequestConfig & RequestConfig<IsRawRes>): Promise<Response<ZOutput, IsRawRes>>;
    patch<ZOutput, ECodes extends string = GeneralErrorCodes, IsRawRes extends boolean = false>(requestInfo: RequestInfo<ZOutput, ECodes>, url: string, data?: any, requestConfig?: AxiosRequestConfig & RequestConfig<IsRawRes>): Promise<Response<ZOutput, IsRawRes>>;
    put<ZOutput, ECodes extends string = GeneralErrorCodes, IsRawRes extends boolean = false>(requestInfo: RequestInfo<ZOutput, ECodes>, url: string, data?: any, requestConfig?: AxiosRequestConfig & RequestConfig<IsRawRes>): Promise<Response<ZOutput, IsRawRes>>;
    delete<ZOutput, ECodes extends string = GeneralErrorCodes, IsRawRes extends boolean = false>(requestInfo: RequestInfo<ZOutput, ECodes>, url: string, data?: any, requestConfig?: AxiosRequestConfig & RequestConfig<IsRawRes>): Promise<Response<ZOutput, IsRawRes>>;
    private makeRequest;
}
