/// import { UploadPartCommandInput, S3Client, PutObjectCommandInput } from '@aws-sdk/client-s3'; import * as events from 'events'; import { Canceler } from 'axios'; import { UploadTask } from '../types/Provider'; import { StorageAccessLevel } from '..'; export declare enum AWSS3UploadTaskState { INIT = 0, IN_PROGRESS = 1, PAUSED = 2, CANCELLED = 3, COMPLETED = 4 } export declare enum TaskEvents { CANCEL = "cancel", UPLOAD_COMPLETE = "uploadComplete", UPLOAD_PROGRESS = "uploadPartProgress", ERROR = "error" } export interface AWSS3UploadTaskParams { s3Client: S3Client; file: Blob; storage: Storage; level: StorageAccessLevel; params: PutObjectCommandInput; prefixPromise: Promise; emitter?: events.EventEmitter; } export interface InProgressRequest { uploadPartInput: UploadPartCommandInput; s3Request: Promise; cancel: Canceler; } export interface UploadTaskCompleteEvent { key: string; } export interface UploadTaskProgressEvent { /** * bytes that has been sent to S3 so far */ loaded: number; /** * total bytes that needs to be sent to S3 */ total: number; } export interface FileMetadata { bucket: string; fileName: string; key: string; lastTouched: number; uploadId: string; } export declare class AWSS3UploadTask implements UploadTask { private readonly emitter; private readonly file; private readonly partSize; private readonly queueSize; private readonly s3client; private readonly storage; private readonly storageSync; private readonly fileId; private readonly params; private readonly prefixPromise; private inProgress; private completedParts; private queued; private bytesUploaded; private totalBytes; private uploadId; state: AWSS3UploadTaskState; constructor({ s3Client, file, emitter, storage, params, level, prefixPromise, }: AWSS3UploadTaskParams); get percent(): number; get isInProgress(): boolean; private _listSingleFile; private _getFileId; private _findCachedUploadParts; private _emitEvent; private _validateParams; private _listCachedUploadTasks; private _cache; private _isCached; private _removeFromCache; private _onPartUploadCompletion; private _completeUpload; private _makeUploadPartRequest; private _startNextPart; /** * Verify on S3 side that the file size matches the one on the client side. * * @async * @throws throws an error if the file size does not match between local copy of the file and the file on s3. */ private _verifyFileSize; private _isDone; private _createParts; private _initCachedUploadParts; private _initMultipartUpload; private _initializeUploadTask; resume(): void; private _startUpload; _cancel(): Promise; /** * pause this particular upload task **/ pause(): void; }