import DownloaderUploader from "@newSdk/factory/DownloaderUploader";
import { BucketInfoType } from "@newSdk/model/BucketInfo";
export type ProgressHandler = (progressEvent: any) => void;
export type ThumbInfo = {
    width: number;
    height: number;
    isBig?: boolean;
};
export type FileInfo = {
    filename: string;
    fileType: string;
    bucketID?: string;
};
export type DownloadOptions = {
    key: FileInfo;
    thumbInfo?: ThumbInfo;
    handler?: ProgressHandler;
};
export type DownloadUrlOptions = Pick<DownloadOptions, "key" | "thumbInfo">;
export type DownloadThumpOptions = Pick<DownloadOptions, "key" | "handler"> & {
    thumbInfo: ThumbInfo;
};
export type DownloadStreamResult = {
    body: ReadableStream;
    total: number;
} | undefined;
export default abstract class BaseDownloader extends DownloaderUploader {
    abstract download(options: DownloadOptions): Promise<any>;
    abstract downloadUrl(options: DownloadUrlOptions): Promise<any>;
    abstract headObject(key: FileInfo): Promise<any>;
    abstract getObjectSize(key: FileInfo): Promise<number>;
    abstract downloadThump(options: DownloadThumpOptions): Promise<any>;
    abstract downloadStream(options: DownloadOptions): Promise<DownloadStreamResult>;
    getBucketInfo(): Promise<BucketInfoType>;
    streamToBuffer(stream: ReadableStream, total: number, handler?: ProgressHandler): Promise<any>;
}
