/// <reference types="multer" />
/// <reference types="node" />
/// <reference types="node" />
import type { S3ClientConfigType } from "@aws-sdk/client-s3";
import { S3Client } from "@aws-sdk/client-s3";
import { AbstractFileService, IFileService } from "@medusajs/medusa";
import { DeleteFileType, FileServiceUploadResult, GetUploadedFileType, UploadStreamDescriptorType, Logger } from "@medusajs/types";
import stream from "stream";
declare class S3Service extends AbstractFileService implements IFileService {
    protected prefix_: string;
    protected bucket_: string;
    protected s3Url_: string;
    protected accessKeyId_: string;
    protected secretAccessKey_: string;
    protected region_: string;
    protected awsConfigObject_: any;
    protected downloadFileDuration_: number;
    protected cacheControl_: string;
    protected logger_: Logger;
    protected client_: S3Client;
    constructor({ logger }: {
        logger: any;
    }, options: any);
    protected getClient(overwriteConfig?: Partial<S3ClientConfigType>): S3Client;
    upload(file: Express.Multer.File): Promise<FileServiceUploadResult>;
    uploadProtected(file: Express.Multer.File): Promise<{
        url: string;
        key: string;
    }>;
    uploadFile(file: Express.Multer.File, options?: {
        isProtected?: boolean;
        acl?: string;
    }): Promise<{
        url: string;
        key: string;
    }>;
    delete(file: DeleteFileType): Promise<void>;
    getUploadStreamDescriptor(fileData: UploadStreamDescriptorType): Promise<{
        writeStream: stream.PassThrough;
        promise: Promise<import("@aws-sdk/client-s3").AbortMultipartUploadCommandOutput | import("@aws-sdk/client-s3").CompleteMultipartUploadCommandOutput>;
        url: string;
        fileKey: string;
    }>;
    getDownloadStream(fileData: GetUploadedFileType): Promise<NodeJS.ReadableStream>;
    getPresignedDownloadUrl(fileData: GetUploadedFileType): Promise<string>;
}
export default S3Service;
