import type { StorageProvider as StorageProviderId } from "@rudderhq/shared";
import type { Readable } from "node:stream";
export interface PutObjectInput {
    objectKey: string;
    body: Buffer;
    contentType: string;
    contentLength: number;
}
export interface GetObjectInput {
    objectKey: string;
}
export interface GetObjectResult {
    stream: Readable;
    contentType?: string;
    contentLength?: number;
    etag?: string;
    lastModified?: Date;
}
export interface HeadObjectResult {
    exists: boolean;
    contentType?: string;
    contentLength?: number;
    etag?: string;
    lastModified?: Date;
}
export interface StorageProvider {
    id: StorageProviderId;
    putObject(input: PutObjectInput): Promise<void>;
    getObject(input: GetObjectInput): Promise<GetObjectResult>;
    headObject(input: GetObjectInput): Promise<HeadObjectResult>;
    deleteObject(input: GetObjectInput): Promise<void>;
}
export interface PutFileInput {
    orgId: string;
    namespace: string;
    originalFilename: string | null;
    contentType: string;
    body: Buffer;
}
export interface PutFileResult {
    provider: StorageProviderId;
    objectKey: string;
    contentType: string;
    byteSize: number;
    sha256: string;
    originalFilename: string | null;
}
export interface StorageService {
    provider: StorageProviderId;
    putFile(input: PutFileInput): Promise<PutFileResult>;
    getObject(orgId: string, objectKey: string): Promise<GetObjectResult>;
    headObject(orgId: string, objectKey: string): Promise<HeadObjectResult>;
    deleteObject(orgId: string, objectKey: string): Promise<void>;
}
//# sourceMappingURL=types.d.ts.map