import { Readable } from 'stream';
import { FileTypeResult } from 'file-type';
import { ConverterManager } from '@rytass/file-converter';
import { FilenameHashAlgorithm, InputFile, ReadBufferFileOptions, ReadStreamFileOptions, StorageFile, StorageOptions, WriteFileOptions } from './typings';
export interface StorageInterface {
    write(file: InputFile): Promise<StorageFile>;
    batchWrite(files: InputFile[]): Promise<StorageFile[]>;
    read(key: string): Promise<Readable>;
    read(key: string, options: ReadBufferFileOptions): Promise<Buffer>;
    read(key: string, options: ReadStreamFileOptions): Promise<Readable>;
    remove(key: string): Promise<void>;
}
export declare class Storage<O extends Record<string, any> = Record<string, any>> implements StorageInterface {
    readonly converterManager: ConverterManager;
    readonly hashAlgorithm: FilenameHashAlgorithm;
    constructor(options?: StorageOptions<O>);
    getExtension(file: InputFile): Promise<FileTypeResult | undefined>;
    getBufferFilename(buffer: Buffer): Promise<[string, string | undefined]>;
    getStreamFilename(stream: Readable): Promise<[string, string | undefined]>;
    write(file: InputFile, options?: WriteFileOptions): Promise<StorageFile>;
    batchWrite(files: InputFile[], options?: WriteFileOptions[]): Promise<StorageFile[]>;
    read(key: string): Promise<Readable>;
    read(key: string, options: ReadBufferFileOptions): Promise<Buffer>;
    read(key: string, options: ReadStreamFileOptions): Promise<Readable>;
    remove(key: string): Promise<void>;
    isExists(key: string): Promise<boolean>;
}
