import EventEmitter from 'eventemitter3';
import { File, UploadTags } from './../file';
import { StoreUploadOptions } from './../types';
import { Security } from './../../../client';
import { FsRetryConfig } from './../../../request';
export declare const DEFAULT_PART_SIZE: number;
export declare const MIN_PART_SIZE: number;
export declare const INTELLIGENT_CHUNK_SIZE: number;
export declare const INTELLIGENT_MOBILE_CHUNK_SIZE: number;
export declare const MIN_CHUNK_SIZE: number;
export declare const DEFAULT_STORE_LOCATION = "s3";
export declare const enum UploadMode {
    DEFAULT = "default",
    INTELLIGENT = "intelligent",
    FALLBACK = "fallback"
}
export declare abstract class UploaderAbstract extends EventEmitter {
    protected readonly storeOptions: StoreUploadOptions;
    protected readonly concurrency: number;
    protected partSize: number;
    protected intelligentChunkSize: number;
    protected url: string;
    protected timeout: number;
    protected uploadMode: UploadMode;
    protected apikey: string;
    protected security: Security;
    protected isModeLocked: boolean;
    protected retryConfig: FsRetryConfig;
    protected integrityCheck: boolean;
    protected uploadTags: UploadTags;
    constructor(storeOptions: StoreUploadOptions, concurrency?: number);
    setSecurity(security: Security): void;
    setApikey(apikey: string): void;
    setTimeout(timeout: number): void;
    setRetryConfig(cfg: FsRetryConfig): void;
    setUrl(url: string): void;
    setUploadTags(tags: UploadTags): void;
    /**
     * Set state of checking file integrity
     * @param state
     */
    setIntegrityCheck(state: any): void;
    /**
     * Sets upload mode
     *
     * @param {UploadMode} mode
     * @param {boolean} [lock=false]
     * @returns
     * @memberof MultipartUploader
     */
    setUploadMode(mode: UploadMode, lock?: boolean): void;
    /**
     * Set upload part size
     * if part size is smaller than minimum 5mb it will throw error
     *
     * @param {number} size
     * @returns {void}
     * @memberof S3Uploader
     */
    setPartSize(size: number): void;
    /**
     * Returns current part size
     */
    getPartSize(): number;
    /**
     * Set start part size for ii
     *
     * @param {number} size
     * @memberof S3Uploader
     */
    setIntelligentChunkSize(size: number): void;
    /**
     * Returns intelligent chunk size
     */
    getIntelligentChunkSize(): number;
    /**
     * Returns filestack upload url
     *
     * @private
     * @returns
     * @memberof MultipartUploader
     */
    getUrl(): string;
    /**
     * Pause upload queue
     *
     * @memberof MultipartUploader
     */
    abstract pause(): void;
    /**
     * resume upload queue if its paused
     *
     * @memberof MultipartUploader
     */
    abstract resume(): void;
    /**
     * Aborts queue (all pending requests with will be aborted)
     *
     * @memberof MultipartUploader
     */
    abstract abort(msg?: string): void;
    abstract addFile(file: File): string;
    abstract execute(): Promise<any>;
}
