import { ObjectCannedACL, S3Client } from "@aws-sdk/client-s3";
import { FileTypes, Logger, S3FileServiceOptions } from "@medusajs/framework/types";
import { AbstractFileProviderService } from "@medusajs/framework/utils";
import { Readable, Writable } from "stream";
type InjectedDependencies = {
    logger: Logger;
};
interface S3FileServiceConfig {
    fileUrl: string;
    accessKeyId?: string;
    secretAccessKey?: string;
    sessionToken?: string;
    authenticationMethod?: "access-key" | "s3-iam-role";
    region: string;
    bucket: string;
    prefix?: string;
    endpoint?: string;
    cacheControl?: string;
    downloadFileDuration?: number;
    additionalClientConfig?: Record<string, any>;
    acl?: ObjectCannedACL | false;
}
export declare class S3FileService extends AbstractFileProviderService {
    static identifier: string;
    protected config_: S3FileServiceConfig;
    protected logger_: Logger;
    protected client_: S3Client;
    constructor({ logger }: InjectedDependencies, options: S3FileServiceOptions);
    protected getClient(): S3Client;
    /**
     * Resolves the ACL to use for an upload. Returns undefined if ACLs are
     * disabled (config_.acl === false), which causes the SDK to omit the
     * ACL header entirely — required for buckets with BucketOwnerEnforced
     * Object Ownership or Block Public Access enabled.
     *
     * Note: getPresignedUploadUrl only calls this when `access` is explicitly
     * provided. When access is undefined, presigned uploads omit ACL entirely
     * (preserving original behaviour). The `acl` config option targets
     * server-side uploads (upload/getUploadStream) where we control the
     * PutObject call directly.
     */
    protected resolveAcl(access?: "public" | "private"): ObjectCannedACL | undefined;
    upload(file: FileTypes.ProviderUploadFileDTO): Promise<FileTypes.ProviderFileResultDTO>;
    getUploadStream(fileData: FileTypes.ProviderUploadStreamDTO): Promise<{
        writeStream: Writable;
        promise: Promise<FileTypes.ProviderFileResultDTO>;
        url: string;
        fileKey: string;
    }>;
    delete(files: FileTypes.ProviderDeleteFileDTO | FileTypes.ProviderDeleteFileDTO[]): Promise<void>;
    getPresignedDownloadUrl(fileData: FileTypes.ProviderGetFileDTO): Promise<string>;
    getPresignedUploadUrl(fileData: FileTypes.ProviderGetPresignedUploadUrlDTO): Promise<FileTypes.ProviderFileResultDTO>;
    getDownloadStream(file: FileTypes.ProviderGetFileDTO): Promise<Readable>;
    getAsBuffer(file: FileTypes.ProviderGetFileDTO): Promise<Buffer>;
}
export {};
//# sourceMappingURL=s3-file.d.ts.map