import { Readable } from 'stream';
import { Buffer } from 'buffer';
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, unknown> = Record<string, unknown>> 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>;
}
