import { GetObjectCommand, PutObjectCommand, type S3ClientConfig as AwsS3ClientConfig } from "@aws-sdk/client-s3"; export interface S3Config { bucket: string; region: string; accessKeyId?: string; secretAccessKey?: string; endpoint?: string; } export interface S3ObjectInfo { contentLength?: number; contentType?: string; } interface S3Transport { send(command: unknown): Promise; } interface ManagedUpload { done(): Promise; } interface ManagedUploadInput { client: S3Transport; params: { Bucket: string; Key: string; Body: Buffer | Uint8Array; ContentType?: string; }; } export interface S3ClientDependencies { createClient?: (config: AwsS3ClientConfig) => S3Transport; createUpload?: (input: ManagedUploadInput) => ManagedUpload; presign?: (client: S3Transport, command: GetObjectCommand | PutObjectCommand, expiresIn: number) => Promise; } export declare class S3Client { private readonly bucket; private readonly client; private readonly createUpload; private readonly sign; constructor(config: S3Config, dependencies?: S3ClientDependencies); upload(key: string, body: Buffer | Uint8Array, contentType?: string): Promise; download(key: string): Promise; head(key: string): Promise; delete(key: string): Promise; presign(key: string, expiresIn: number): Promise; presignPut(key: string, contentType: string, expiresIn: number): Promise; } export {}; //# sourceMappingURL=s3-client.d.ts.map