/**
 * Configuration for PublicAssetsUploader
 */
export interface PublicAssetsUploaderConfig {
    /**
     * Path to the user's project public/ directory.
     */
    publicDir: string;
    /**
     * S3 bucket name for static assets.
     */
    bucketName: string;
    /**
     * AWS region for S3 bucket.
     */
    region: string;
    /**
     * Optional S3 key prefix (e.g., 'static/').
     */
    keyPrefix?: string;
}
/**
 * Result of an upload operation
 */
export interface UploadResult {
    filesUploaded: number;
    totalBytes: number;
    errors: Array<{
        file: string;
        error: string;
    }>;
}
/**
 * Service for uploading files from public/ directory to S3 during deployment
 */
export declare class PublicAssetsUploader {
    private config;
    private s3Client;
    constructor(config: PublicAssetsUploaderConfig);
    /**
     * Uploads all files from public/ directory to S3.
     * Preserves directory structure.
     * Sets Content-Type headers based on file extensions.
     * Sets cache-control headers for long-term caching.
     *
     * Error handling:
     * - Missing public directory: Logs warning and returns empty result
     * - S3 bucket not found: Throws DeploymentError with clear message
     * - Insufficient S3 permissions: Throws DeploymentError with clear message
     * - Individual file upload failures: Logs error, continues with remaining files
     * - All files failed: Throws DeploymentError after attempting all uploads
     *
     * @throws {DeploymentError} If S3 bucket not found, insufficient permissions, or all uploads fail
     */
    uploadPublicAssets(): Promise<UploadResult>;
    /**
     * Recursively get all files in a directory
     */
    private getAllFiles;
    /**
     * Upload a single file to S3
     *
     * @throws {Error} If file cannot be read or S3 upload fails
     */
    private uploadFile;
    /**
     * Determines Content-Type header based on file extension.
     */
    private getContentType;
    /**
     * Determines cache-control header based on file type.
     * Immutable assets: max-age=31536000 (1 year)
     * HTML files: max-age=0, must-revalidate
     */
    private getCacheControl;
}
