import Headers, { RequestConfig } from './Headers';
import { BatchRequestResponse, HttpResponseConstructor, IRequest, IService, SpecificationRequestResponse, TransactionResponse } from '../Models';
import { DataRequestData, SpecificationRequestData, TransactionData } from './DataModels';
import { HttpMethods, RequestTypes } from '../Constants';
import { ICredentials } from '../Utils';
export default class Request<HttpResponse extends HttpResponseConstructor = HttpResponseConstructor, RequestData extends object | undefined = undefined> extends Headers {
    protected _path?: string;
    protected _data?: object | object[] | undefined;
    protected _httpMethod: HttpMethods;
    protected _responseHandler?: HttpResponseConstructor;
    constructor(path?: string, method?: HttpMethods, data?: RequestData, responseHandler?: HttpResponse);
    get data(): RequestData;
    get httpMethod(): HttpMethods;
    get url(): URL;
    protected get responseHandler(): HttpResponse;
    static Transaction(payload?: IRequest): Request<typeof TransactionResponse, TransactionData>;
    static DataRequest(payload?: IRequest): Request<typeof TransactionResponse, DataRequestData>;
    static Specification<T extends IService[] | IService>(type: RequestTypes.Data | RequestTypes.Transaction, data: T): T extends IService[] ? Request<typeof SpecificationRequestResponse, SpecificationRequestData> : Request<typeof SpecificationRequestResponse>;
    static BatchTransaction(payload?: IRequest[]): Request<typeof BatchRequestResponse, TransactionData[]>;
    static BatchDataRequest(data?: DataRequestData[]): Request<typeof BatchRequestResponse, DataRequestData[]>;
    request(options?: RequestConfig): Promise<InstanceType<HttpResponse>>;
    protected setAuthorizationHeader(data?: object, credentials?: ICredentials): this;
}
