import { Ajax } from './ajax';
import { Canceler } from './canceler';
import { AuthorizeRequest, Metadata, PreRequest, RequestHeaders, RequestOptions, ResponseBody, UploaderOptions, UploadState, UploadStatus, UploadxControlEvent } from './interfaces';
import { RetryHandler } from './retry-handler';
/**
 * Uploader Base Class
 */
export declare abstract class Uploader implements UploadState {
    readonly file: File;
    readonly options: Readonly<UploaderOptions>;
    readonly stateChange: (uploader: Uploader) => void;
    readonly ajax: Ajax;
    name: string;
    readonly size: number;
    readonly uploadId: string;
    response: ResponseBody;
    responseStatus: number;
    responseHeaders: Record<string, string>;
    progress: number;
    remaining: number;
    speed: number;
    /** Custom headers */
    headers: RequestHeaders;
    /** Metadata Object */
    metadata: Metadata;
    /** Upload endpoint */
    endpoint: string;
    /** Chunk size in bytes */
    chunkSize: number;
    /** Auth token/tokenGetter */
    token: UploadxControlEvent['token'];
    /** Byte offset within the whole file */
    offset?: number;
    /** Retries handler */
    retry: RetryHandler;
    canceler: Canceler;
    abortController: AbortController;
    /** Set HttpRequest responseType */
    responseType?: 'json' | 'text' | 'document';
    protected _authorize: AuthorizeRequest;
    protected _prerequest: PreRequest;
    protected _token: string;
    private _eventsCount;
    constructor(file: File, options: Readonly<UploaderOptions>, stateChange: (uploader: Uploader) => void, ajax: Ajax);
    private _url;
    get url(): string;
    set url(value: string);
    private _status;
    get status(): UploadStatus;
    set status(s: UploadStatus);
    /**
     * Configure uploader
     */
    configure({ metadata, headers, token, endpoint, action }: UploadxControlEvent): void;
    /**
     * Starts uploading
     */
    upload(): Promise<void>;
    /**
     * Performs http requests
     */
    request(requestOptions: RequestOptions): Promise<void>;
    /**
     * Set auth token string
     */
    updateToken: () => string | Promise<string>;
    /**
     * Get file URI
     */
    protected abstract getFileUrl(): Promise<string>;
    /**
     * Send file content and return an offset for the next request
     */
    protected abstract sendFileContent(): Promise<number | undefined>;
    /**
     * Get an offset for the next request
     */
    protected abstract getOffset(): Promise<number | undefined>;
    /**
     *  Updating the metadata of the upload
     */
    protected update<T = {
        metadata?: Metadata;
    }>(_data: T): Promise<string>;
    protected abort(): void;
    protected cancel(): Promise<void>;
    /**
     * Gets the value from the response
     */
    protected getValueFromResponse(key: string): string | null;
    /**
     * Get file chunk
     * @param offset - number of bytes of the file to skip
     * @param size - chunk size
     */
    getChunk(offset?: number, size?: number): {
        start: number;
        end: number;
        body: Blob;
    };
    private getRetryAfterFromBackend;
    private cancelAndSendState;
    private updateAndSendState;
    private cleanup;
    private onProgress;
}
