import { Readable } from 'stream'; export interface UploadOptions { key: string; metadata?: Record; contentType?: string; } export interface DownloadOptions { key: string; } export interface ListOptions { prefix?: string; maxKeys?: number; startAfter?: string; } export interface StorageObject { key: string; size: number; lastModified: Date; metadata?: Record; } export interface DeleteOptions { key: string; } export interface PresignedUrlOptions { key: string; expiresIn?: number; } export interface IStorageAdapter { uploadStream(stream: Readable, options: UploadOptions): Promise<{ key: string; etag?: string; }>; downloadStream(options: DownloadOptions): Promise; listObjects(options?: ListOptions): Promise; deleteObject(options: DeleteOptions): Promise; generatePresignedUrl(options: PresignedUrlOptions): Promise; objectExists(key: string): Promise; }