import { RequestOptions, FinalRequestOptions, Headers, FilePathOrFileObject } from './types';
import { Fetch } from 'fetch';
import { BaseFilesHandler } from 'files/BaseFilesHandler';
export declare abstract class APIClient {
    protected baseURL: string;
    protected maxRetries: number;
    protected timeout: number;
    protected fetch: Fetch;
    protected filesHandler: BaseFilesHandler;
    constructor({ baseURL, maxRetries, timeout, fetch, filesHandler, }: {
        baseURL: string;
        maxRetries?: number | undefined;
        timeout: number | undefined;
        fetch?: Fetch;
        filesHandler?: BaseFilesHandler;
    });
    get<Req, Rsp>(path: string, opts?: RequestOptions<Req>): Promise<Rsp>;
    post<Req, Rsp>(path: string, opts?: RequestOptions<Req>): Promise<Rsp>;
    put<Req, Rsp>(path: string, opts?: RequestOptions<Req>): Promise<Rsp>;
    delete<Req, Rsp>(path: string, opts?: RequestOptions<Req>): Promise<Rsp>;
    upload<Req, Rsp>(path: string, file: FilePathOrFileObject, opts?: RequestOptions<Req>): Promise<Rsp>;
    protected getUserAgent(): string;
    protected defaultHeaders(opts: FinalRequestOptions): Headers;
    protected authHeaders(opts: FinalRequestOptions): Headers;
    private buildFullUrl;
    private prepareAndExecuteRequest;
    private performRequest;
    protected isRunningInBrowser(): boolean;
}
