import { Nest } from "./nest";
import { FileJob } from "./../job/fileJob";
import { Environment } from "../environment/environment";
export declare class S3Nest extends Nest {
    protected client: any;
    protected s3: any;
    protected bucket: string;
    protected keyPrefix: string;
    protected checkEvery: number;
    protected checkEveryMs: number;
    protected allowCreation: boolean;
    /**
     * Constructor
     * @param e
     * @param bucket            AWS S3 bucket to watch.
     * @param keyPrefix         Optional key prefix (sub-directory) to watch.
     * @param checkEvery        Frequency of bucket checking, in minutes.
     * @param allowCreation     Create the bucket:prefix if it does not exist.
     */
    constructor(e: Environment, bucket: string, keyPrefix?: string, checkEvery?: number, allowCreation?: boolean);
    /**
     * Set hard-coded AWS credentials.
     * @param accessKeyId
     * @param secretAccessKey
     */
    setCredentials(accessKeyId: string, secretAccessKey: string): void;
    /**
     * Verify bucket and handle creation of bucket if need be.
     */
    protected verifyBucket(): void;
    /**
     * Verify that the bucket is available and exists
     * @param callback
     */
    protected headBucket(callback: any): void;
    protected createBucket(callback: any): void;
    load(): void;
    /**
     * Removes an object from an S3 bucket.
     * @param key
     */
    protected deleteObject(key: any): void;
    /**
     * Watch an S3 bucket.
     */
    watch(): void;
    /**
     * Nest arrival
     * @param job
     */
    arrive(job: FileJob): void;
    /**
     * Upload a file to an S3 bucket.
     */
    take(job: FileJob, callback?: any): void;
    /**
     * Calculate the percent remaining from the httpUploadProgress event values.
     * @param total
     * @param loaded
     * @param part
     * @returns {number}
     */
    private calculateRemaining(total, loaded, part?);
    /**
     * Upload file to S3
     * @param job {FileJob}     FileJob to be uploaded.
     * @param callback          Callback includes the S3FileJob parameter.
     */
    protected uploadFile(job: FileJob, callback: any): void;
}
