/// <reference types="node" />
import { ApplicationOptionType } from "@/types/ApplicationOptionType";
import { S3 } from "@aws-sdk/client-s3";
import { AttachmentMetadataType } from "@/types/AttachmentMetadataTypes";
export default class UploaderS3 {
    static client: S3;
    static uploadSessions: Record<string, string>;
    /**
     * Initializes the S3 client instance
     */
    static init(options: ApplicationOptionType): Promise<void>;
    /**
     * Validates configuration options
     */
    static hasValidConfig(options: ApplicationOptionType): boolean;
    /**
     * Lists all available S3 buckets
     */
    static listBuckets(): Promise<void>;
    /**
     * Starts a new multipart upload session
     * @param bucketName S3 bucket name
     * @param key Key for the object in S3
     */
    static startMultipartUpload(bucketName: string, key: string): Promise<string>;
    /**
     * Uploads a file part to S3
     * @param bucketName S3 bucket name
     * @param key Key for the object in S3
     * @param uploadId Multipart upload session ID
     * @param partNumber Part number for the upload
     * @param chunk Chunk of the file to upload
     */
    static uploadPart(bucketName: string, key: string, uploadId: string, partNumber: number, chunk: Buffer): Promise<string | null>;
    /**
     * Completes a multipart upload
     * @param bucketName S3 bucket name
     * @param key Key for the object in S3
     * @param uploadId Multipart upload session ID
     * @param parts List of uploaded parts
     */
    static completeMultipartUpload(bucketName: string, key: string, uploadId: string, parts: {
        PartNumber: number;
        ETag: string;
    }[]): Promise<AttachmentMetadataType>;
    /**
     * Aborts a multipart upload
     * @param bucketName S3 bucket name
     * @param key Key for the object in S3
     * @param uploadId Multipart upload session ID
     */
    static abortMultipartUpload(bucketName: string, key: string, uploadId: string): Promise<void>;
    /**
     * Directly uploads a file to S3 without chunking
     * @param bucketName S3 bucket name
     * @param key Key for the object in S3
     * @param fileContent The content of the file to upload
     * @param contentType The MIME type of the file
     */
    static uploadFile(bucketName: string, key: string, fileContent: Buffer | Uint8Array | Blob | string, contentType: string): Promise<AttachmentMetadataType>;
    /**
     * Deletes all incomplete multipart uploads in the specified bucket
     * @param bucketName S3 bucket name
     */
    static deleteIncompleteUploads(bucketName: string): Promise<void>;
}
//# sourceMappingURL=uploader-s3.d.ts.map