@aws-amplify/storage 5.6.4-api-v6.13 → 5.6.4-api-v6.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/AwsClients/S3/putObject.d.ts +1 -1
- package/lib/AwsClients/S3/putObject.js +8 -6
- package/lib/AwsClients/S3/uploadPart.d.ts +1 -1
- package/lib/AwsClients/S3/uploadPart.js +7 -5
- package/lib/Storage.js +1 -0
- package/lib/common/MD5utils.d.ts +1 -0
- package/lib/common/MD5utils.js +79 -0
- package/lib/common/MD5utils.native.d.ts +1 -0
- package/lib/common/MD5utils.native.js +83 -0
- package/lib/providers/AWSS3ProviderManagedUpload.js +69 -49
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib-esm/AwsClients/S3/putObject.d.ts +1 -1
- package/lib-esm/AwsClients/S3/putObject.js +9 -7
- package/lib-esm/AwsClients/S3/uploadPart.d.ts +1 -1
- package/lib-esm/AwsClients/S3/uploadPart.js +8 -6
- package/lib-esm/Storage.js +1 -0
- package/lib-esm/common/MD5utils.d.ts +1 -0
- package/lib-esm/common/MD5utils.js +75 -0
- package/lib-esm/common/MD5utils.native.d.ts +1 -0
- package/lib-esm/common/MD5utils.native.js +79 -0
- package/lib-esm/providers/AWSS3ProviderManagedUpload.js +69 -49
- package/lib-esm/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/src/AwsClients/S3/putObject.ts +9 -4
- package/src/AwsClients/S3/uploadPart.ts +6 -1
- package/src/Storage.ts +1 -0
- package/src/common/MD5utils.native.ts +38 -0
- package/src/common/MD5utils.ts +33 -0
- package/src/providers/AWSS3ProviderManagedUpload.ts +18 -1
|
@@ -4,7 +4,7 @@ import type { PutObjectCommandInput, PutObjectCommandOutput } from './types';
|
|
|
4
4
|
/**
|
|
5
5
|
* Reference: {@link S3ProviderPutConfig}
|
|
6
6
|
*/
|
|
7
|
-
export type PutObjectInput = Pick<PutObjectCommandInput, 'Bucket' | 'Key' | 'Body' | 'ServerSideEncryption' | 'SSECustomerAlgorithm' | 'SSECustomerKey' | 'SSECustomerKeyMD5' | 'SSEKMSKeyId' | 'ACL' | 'CacheControl' | 'ContentDisposition' | 'ContentEncoding' | 'ContentType' | 'Expires' | 'Metadata' | 'Tagging'>;
|
|
7
|
+
export type PutObjectInput = Pick<PutObjectCommandInput, 'Bucket' | 'Key' | 'Body' | 'ServerSideEncryption' | 'SSECustomerAlgorithm' | 'SSECustomerKey' | 'SSECustomerKeyMD5' | 'SSEKMSKeyId' | 'ACL' | 'CacheControl' | 'ContentDisposition' | 'ContentEncoding' | 'ContentType' | 'ContentMD5' | 'Expires' | 'Metadata' | 'Tagging'>;
|
|
8
8
|
export type PutObjectOutput = Pick<PutObjectCommandOutput, '$metadata' | 'ETag' | 'VersionId'>;
|
|
9
9
|
export declare const putObject: (config: Omit<import("@aws-amplify/core/internals/aws-client-utils").UserAgentOptions & import("@aws-amplify/core/internals/aws-client-utils").RetryOptions<HttpResponse> & import("@aws-amplify/core/internals/aws-client-utils").SigningOptions & import("./runtime/xhrTransferHandler").XhrTransferHandlerOptions & import("@aws-amplify/core/internals/aws-client-utils").ServiceClientOptions & Partial<import("@aws-amplify/core/internals/aws-client-utils").UserAgentOptions & import("@aws-amplify/core/internals/aws-client-utils").RetryOptions<HttpResponse> & import("@aws-amplify/core/internals/aws-client-utils").SigningOptions & import("./runtime/xhrTransferHandler").XhrTransferHandlerOptions & import("@aws-amplify/core/internals/aws-client-utils").ServiceClientOptions>, "region" | "maxAttempts" | "credentials" | "retryDecider" | "computeDelay" | "abortSignal" | "service" | "uriEscapePath" | "endpointResolver" | "emitter" | "responseType" | "userAgentHeader" | "userAgentValue"> & {
|
|
10
10
|
region?: string;
|
|
@@ -55,13 +55,15 @@ var composers_1 = require("@aws-amplify/core/internals/aws-client-utils/composer
|
|
|
55
55
|
var base_1 = require("./base");
|
|
56
56
|
var utils_1 = require("./utils");
|
|
57
57
|
var putObjectSerializer = function (input, endpoint) { return __awaiter(void 0, void 0, void 0, function () {
|
|
58
|
-
var headers, url;
|
|
59
|
-
var
|
|
60
|
-
return __generator(this, function (
|
|
61
|
-
switch (
|
|
62
|
-
case 0:
|
|
58
|
+
var headers, _a, url;
|
|
59
|
+
var _b;
|
|
60
|
+
return __generator(this, function (_c) {
|
|
61
|
+
switch (_c.label) {
|
|
62
|
+
case 0:
|
|
63
|
+
_a = [{}];
|
|
64
|
+
return [4 /*yield*/, (0, utils_1.serializeObjectConfigsToHeaders)(__assign(__assign({}, input), { ContentType: (_b = input.ContentType) !== null && _b !== void 0 ? _b : 'application/octet-stream' }))];
|
|
63
65
|
case 1:
|
|
64
|
-
headers =
|
|
66
|
+
headers = __assign.apply(void 0, [__assign.apply(void 0, _a.concat([(_c.sent())])), (0, utils_1.assignStringVariables)({ 'content-md5': input.ContentMD5 })]);
|
|
65
67
|
url = new URL(endpoint.url.toString());
|
|
66
68
|
url.pathname = (0, utils_1.serializePathnameObjectKey)(url, input.Key);
|
|
67
69
|
return [2 /*return*/, {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { Endpoint, HttpResponse } from '@aws-amplify/core/internals/aws-client-utils';
|
|
3
3
|
import type { UploadPartCommandInput, UploadPartCommandOutput } from './types';
|
|
4
|
-
export type UploadPartInput = Pick<UploadPartCommandInput, 'PartNumber' | 'Body' | 'UploadId' | 'Bucket' | 'Key' | 'SSECustomerAlgorithm' | 'SSECustomerKey' | 'SSECustomerKeyMD5'>;
|
|
4
|
+
export type UploadPartInput = Pick<UploadPartCommandInput, 'PartNumber' | 'Body' | 'UploadId' | 'Bucket' | 'Key' | 'ContentMD5' | 'SSECustomerAlgorithm' | 'SSECustomerKey' | 'SSECustomerKeyMD5'>;
|
|
5
5
|
export type UploadPartOutput = Pick<UploadPartCommandOutput, '$metadata' | 'ETag'>;
|
|
6
6
|
export declare const uploadPart: (config: Omit<import("@aws-amplify/core/internals/aws-client-utils").UserAgentOptions & import("@aws-amplify/core/internals/aws-client-utils").RetryOptions<HttpResponse> & import("@aws-amplify/core/internals/aws-client-utils").SigningOptions & import("./runtime/xhrTransferHandler").XhrTransferHandlerOptions & import("@aws-amplify/core/internals/aws-client-utils").ServiceClientOptions & Partial<import("@aws-amplify/core/internals/aws-client-utils").UserAgentOptions & import("@aws-amplify/core/internals/aws-client-utils").RetryOptions<HttpResponse> & import("@aws-amplify/core/internals/aws-client-utils").SigningOptions & import("./runtime/xhrTransferHandler").XhrTransferHandlerOptions & import("@aws-amplify/core/internals/aws-client-utils").ServiceClientOptions>, "region" | "maxAttempts" | "credentials" | "retryDecider" | "computeDelay" | "abortSignal" | "service" | "uriEscapePath" | "endpointResolver" | "emitter" | "responseType" | "userAgentHeader" | "userAgentValue"> & {
|
|
7
7
|
region?: string;
|
|
@@ -55,12 +55,14 @@ var composers_1 = require("@aws-amplify/core/internals/aws-client-utils/composer
|
|
|
55
55
|
var base_1 = require("./base");
|
|
56
56
|
var utils_1 = require("./utils");
|
|
57
57
|
var uploadPartSerializer = function (input, endpoint) { return __awaiter(void 0, void 0, void 0, function () {
|
|
58
|
-
var headers, url;
|
|
59
|
-
return __generator(this, function (
|
|
60
|
-
switch (
|
|
61
|
-
case 0:
|
|
58
|
+
var headers, _a, url;
|
|
59
|
+
return __generator(this, function (_b) {
|
|
60
|
+
switch (_b.label) {
|
|
61
|
+
case 0:
|
|
62
|
+
_a = [{}];
|
|
63
|
+
return [4 /*yield*/, (0, utils_1.serializeObjectSsecOptionsToHeaders)(input)];
|
|
62
64
|
case 1:
|
|
63
|
-
headers = _a.sent();
|
|
65
|
+
headers = __assign.apply(void 0, [__assign.apply(void 0, _a.concat([(_b.sent())])), (0, utils_1.assignStringVariables)({ 'content-md5': input.ContentMD5 })]);
|
|
64
66
|
headers['content-type'] = 'application/octet-stream';
|
|
65
67
|
url = new URL(endpoint.url.toString());
|
|
66
68
|
url.pathname = (0, utils_1.serializePathnameObjectKey)(url, input.Key);
|
package/lib/Storage.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const calculateContentMd5: (content: Blob | string) => Promise<string>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
5
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
6
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
8
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
9
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
10
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
14
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
15
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
16
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
17
|
+
function step(op) {
|
|
18
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
19
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
20
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
21
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
22
|
+
switch (op[0]) {
|
|
23
|
+
case 0: case 1: t = op; break;
|
|
24
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
25
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
26
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
27
|
+
default:
|
|
28
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
29
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
30
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
31
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
32
|
+
if (t[2]) _.ops.pop();
|
|
33
|
+
_.trys.pop(); continue;
|
|
34
|
+
}
|
|
35
|
+
op = body.call(thisArg, _);
|
|
36
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
37
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.calculateContentMd5 = void 0;
|
|
42
|
+
var md5_js_1 = require("@aws-sdk/md5-js");
|
|
43
|
+
var utils_1 = require("../AwsClients/S3/utils");
|
|
44
|
+
var calculateContentMd5 = function (content) { return __awaiter(void 0, void 0, void 0, function () {
|
|
45
|
+
var hasher, buffer, digest;
|
|
46
|
+
return __generator(this, function (_a) {
|
|
47
|
+
switch (_a.label) {
|
|
48
|
+
case 0:
|
|
49
|
+
hasher = new md5_js_1.Md5();
|
|
50
|
+
if (!(typeof content === 'string')) return [3 /*break*/, 1];
|
|
51
|
+
hasher.update(content);
|
|
52
|
+
return [3 /*break*/, 3];
|
|
53
|
+
case 1: return [4 /*yield*/, readFile(content)];
|
|
54
|
+
case 2:
|
|
55
|
+
buffer = _a.sent();
|
|
56
|
+
hasher.update(buffer);
|
|
57
|
+
_a.label = 3;
|
|
58
|
+
case 3: return [4 /*yield*/, hasher.digest()];
|
|
59
|
+
case 4:
|
|
60
|
+
digest = _a.sent();
|
|
61
|
+
return [2 /*return*/, (0, utils_1.toBase64)(digest)];
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}); };
|
|
65
|
+
exports.calculateContentMd5 = calculateContentMd5;
|
|
66
|
+
var readFile = function (file) {
|
|
67
|
+
return new Promise(function (resolve, reject) {
|
|
68
|
+
var reader = new FileReader();
|
|
69
|
+
reader.onloadend = function () {
|
|
70
|
+
if (reader.result) {
|
|
71
|
+
resolve(reader.result);
|
|
72
|
+
}
|
|
73
|
+
reader.onabort = function () { return reject(new Error('Read aborted')); };
|
|
74
|
+
reader.onerror = function () { return reject(reader.error); };
|
|
75
|
+
};
|
|
76
|
+
if (file !== undefined)
|
|
77
|
+
reader.readAsArrayBuffer(file);
|
|
78
|
+
});
|
|
79
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const calculateContentMd5: (content: Blob | string) => Promise<string>;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
5
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
6
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
8
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
9
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
10
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
14
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
15
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
16
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
17
|
+
function step(op) {
|
|
18
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
19
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
20
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
21
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
22
|
+
switch (op[0]) {
|
|
23
|
+
case 0: case 1: t = op; break;
|
|
24
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
25
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
26
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
27
|
+
default:
|
|
28
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
29
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
30
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
31
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
32
|
+
if (t[2]) _.ops.pop();
|
|
33
|
+
_.trys.pop(); continue;
|
|
34
|
+
}
|
|
35
|
+
op = body.call(thisArg, _);
|
|
36
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
37
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.calculateContentMd5 = void 0;
|
|
42
|
+
var md5_js_1 = require("@aws-sdk/md5-js");
|
|
43
|
+
var utils_1 = require("../AwsClients/S3/utils");
|
|
44
|
+
var calculateContentMd5 = function (content) { return __awaiter(void 0, void 0, void 0, function () {
|
|
45
|
+
var hasher, buffer, digest;
|
|
46
|
+
return __generator(this, function (_a) {
|
|
47
|
+
switch (_a.label) {
|
|
48
|
+
case 0:
|
|
49
|
+
hasher = new md5_js_1.Md5();
|
|
50
|
+
if (!(typeof content === 'string')) return [3 /*break*/, 1];
|
|
51
|
+
hasher.update(content);
|
|
52
|
+
return [3 /*break*/, 3];
|
|
53
|
+
case 1: return [4 /*yield*/, readFileToBase64(content)];
|
|
54
|
+
case 2:
|
|
55
|
+
buffer = _a.sent();
|
|
56
|
+
hasher.update((0, utils_1.utf8Encode)(buffer));
|
|
57
|
+
_a.label = 3;
|
|
58
|
+
case 3: return [4 /*yield*/, hasher.digest()];
|
|
59
|
+
case 4:
|
|
60
|
+
digest = _a.sent();
|
|
61
|
+
return [2 /*return*/, (0, utils_1.toBase64)(digest)];
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}); };
|
|
65
|
+
exports.calculateContentMd5 = calculateContentMd5;
|
|
66
|
+
var readFileToBase64 = function (blob) {
|
|
67
|
+
return new Promise(function (resolve, reject) {
|
|
68
|
+
var reader = new FileReader();
|
|
69
|
+
reader.onloadend = function () {
|
|
70
|
+
// reference: https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL
|
|
71
|
+
// response from readAsDataURL is always prepended with "data:*/*;base64,"
|
|
72
|
+
// reference: https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readyState
|
|
73
|
+
if (reader.readyState !== 2) {
|
|
74
|
+
return reject(new Error('Reader aborted too early'));
|
|
75
|
+
}
|
|
76
|
+
resolve(reader.result.split(',')[1]);
|
|
77
|
+
};
|
|
78
|
+
reader.onabort = function () { return reject(new Error('Read aborted')); };
|
|
79
|
+
reader.onerror = function () { return reject(reader.error); };
|
|
80
|
+
// reader.readAsArrayBuffer is not available in RN
|
|
81
|
+
reader.readAsDataURL(blob);
|
|
82
|
+
});
|
|
83
|
+
};
|
|
@@ -54,6 +54,7 @@ var core_1 = require("@aws-amplify/core");
|
|
|
54
54
|
var S3_1 = require("../AwsClients/S3");
|
|
55
55
|
var utils_1 = require("../AwsClients/S3/utils");
|
|
56
56
|
var events_1 = require("events");
|
|
57
|
+
var MD5utils_1 = require("../common/MD5utils");
|
|
57
58
|
var S3ClientUtils_1 = require("../common/S3ClientUtils");
|
|
58
59
|
var logger = new core_1.ConsoleLogger('AWSS3ProviderManagedUpload');
|
|
59
60
|
var AWSS3ProviderManagedUpload = /** @class */ (function () {
|
|
@@ -66,73 +67,83 @@ var AWSS3ProviderManagedUpload = /** @class */ (function () {
|
|
|
66
67
|
this.totalBytesToUpload = 0;
|
|
67
68
|
this.emitter = null;
|
|
68
69
|
this.params = params;
|
|
69
|
-
this.opts = opts;
|
|
70
|
+
this.opts = __assign({ isObjectLockEnabled: false }, opts);
|
|
70
71
|
this.emitter = emitter;
|
|
71
72
|
this.s3Config = (0, S3ClientUtils_1.loadS3Config)(__assign(__assign({}, opts), { emitter: emitter, storageAction: core_1.StorageAction.Put }));
|
|
72
73
|
}
|
|
73
74
|
AWSS3ProviderManagedUpload.prototype.upload = function () {
|
|
74
75
|
return __awaiter(this, void 0, void 0, function () {
|
|
75
|
-
var _a, _b, _c, _d, numberOfPartsToUpload, parts, start, error_1;
|
|
76
|
-
var
|
|
76
|
+
var isObjectLockEnabled, _a, _b, _c, _d, _e, numberOfPartsToUpload, parts, start, error_1;
|
|
77
|
+
var _f;
|
|
77
78
|
var _this = this;
|
|
78
|
-
return __generator(this, function (
|
|
79
|
-
switch (
|
|
79
|
+
return __generator(this, function (_g) {
|
|
80
|
+
switch (_g.label) {
|
|
80
81
|
case 0:
|
|
81
|
-
|
|
82
|
+
_g.trys.push([0, 12, , 14]);
|
|
83
|
+
isObjectLockEnabled = this.opts.isObjectLockEnabled;
|
|
84
|
+
if (!(isObjectLockEnabled === true)) return [3 /*break*/, 2];
|
|
85
|
+
_a = this.params;
|
|
86
|
+
return [4 /*yield*/, (0, MD5utils_1.calculateContentMd5)(
|
|
87
|
+
// @ts-expect-error currently ReadableStream<any> is not being supported in put api
|
|
88
|
+
this.params.Body)];
|
|
89
|
+
case 1:
|
|
90
|
+
_a.ContentMD5 = _g.sent();
|
|
91
|
+
_g.label = 2;
|
|
92
|
+
case 2:
|
|
82
93
|
this.body = this.validateAndSanitizeBody(this.params.Body);
|
|
83
94
|
this.totalBytesToUpload = this.byteLength(this.body);
|
|
84
|
-
if (!(this.totalBytesToUpload <= S3ClientUtils_1.DEFAULT_PART_SIZE)) return [3 /*break*/,
|
|
95
|
+
if (!(this.totalBytesToUpload <= S3ClientUtils_1.DEFAULT_PART_SIZE)) return [3 /*break*/, 4];
|
|
85
96
|
// Multipart upload is not required. Upload the sanitized body as is
|
|
86
97
|
this.params.Body = this.body;
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
98
|
+
_b = S3_1.putObject;
|
|
99
|
+
_c = [this.s3Config];
|
|
100
|
+
_d = [__assign({}, this.params)];
|
|
101
|
+
_f = {};
|
|
91
102
|
return [4 /*yield*/, this.getObjectKeyWithPrefix(this.params.Key)];
|
|
92
|
-
case
|
|
93
|
-
case
|
|
103
|
+
case 3: return [2 /*return*/, _b.apply(void 0, _c.concat([__assign.apply(void 0, _d.concat([(_f.Key = _g.sent(), _f)]))]))];
|
|
104
|
+
case 4:
|
|
94
105
|
// Step 1: Determine appropriate part size.
|
|
95
106
|
this.partSize = (0, S3ClientUtils_1.calculatePartSize)(this.totalBytesToUpload);
|
|
96
107
|
// Step 2: Initiate the multi part upload
|
|
97
|
-
|
|
108
|
+
_e = this;
|
|
98
109
|
return [4 /*yield*/, this.createMultiPartUpload()];
|
|
99
|
-
case
|
|
110
|
+
case 5:
|
|
100
111
|
// Step 2: Initiate the multi part upload
|
|
101
|
-
|
|
112
|
+
_e.uploadId = _g.sent();
|
|
102
113
|
numberOfPartsToUpload = Math.ceil(this.totalBytesToUpload / this.partSize);
|
|
103
114
|
parts = this.createParts();
|
|
104
115
|
start = 0;
|
|
105
|
-
|
|
106
|
-
case
|
|
107
|
-
if (!(start < numberOfPartsToUpload)) return [3 /*break*/,
|
|
116
|
+
_g.label = 6;
|
|
117
|
+
case 6:
|
|
118
|
+
if (!(start < numberOfPartsToUpload)) return [3 /*break*/, 9];
|
|
108
119
|
// Upload as many as `queueSize` parts simultaneously
|
|
109
120
|
return [4 /*yield*/, this.uploadParts(this.uploadId, parts.slice(start, start + S3ClientUtils_1.DEFAULT_QUEUE_SIZE))];
|
|
110
|
-
case
|
|
121
|
+
case 7:
|
|
111
122
|
// Upload as many as `queueSize` parts simultaneously
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
case
|
|
123
|
+
_g.sent();
|
|
124
|
+
_g.label = 8;
|
|
125
|
+
case 8:
|
|
115
126
|
start += S3ClientUtils_1.DEFAULT_QUEUE_SIZE;
|
|
116
|
-
return [3 /*break*/,
|
|
117
|
-
case
|
|
127
|
+
return [3 /*break*/, 6];
|
|
128
|
+
case 9:
|
|
118
129
|
parts.map(function (part) {
|
|
119
130
|
_this.removeEventListener(part);
|
|
120
131
|
});
|
|
121
132
|
return [4 /*yield*/, this.finishMultiPartUpload(this.uploadId)];
|
|
122
|
-
case
|
|
133
|
+
case 10:
|
|
123
134
|
// Step 3: Finalize the upload such that S3 can recreate the file
|
|
124
|
-
return [2 /*return*/,
|
|
125
|
-
case
|
|
126
|
-
case
|
|
127
|
-
error_1 =
|
|
135
|
+
return [2 /*return*/, _g.sent()];
|
|
136
|
+
case 11: return [3 /*break*/, 14];
|
|
137
|
+
case 12:
|
|
138
|
+
error_1 = _g.sent();
|
|
128
139
|
// if any error is thrown, call cleanup
|
|
129
140
|
return [4 /*yield*/, this.cleanup(this.uploadId)];
|
|
130
|
-
case
|
|
141
|
+
case 13:
|
|
131
142
|
// if any error is thrown, call cleanup
|
|
132
|
-
|
|
143
|
+
_g.sent();
|
|
133
144
|
logger.error('Error. Cancelling the multipart upload.');
|
|
134
145
|
throw error_1;
|
|
135
|
-
case
|
|
146
|
+
case 14: return [2 /*return*/];
|
|
136
147
|
}
|
|
137
148
|
});
|
|
138
149
|
});
|
|
@@ -197,29 +208,38 @@ var AWSS3ProviderManagedUpload = /** @class */ (function () {
|
|
|
197
208
|
case 0:
|
|
198
209
|
_a.trys.push([0, 2, , 3]);
|
|
199
210
|
return [4 /*yield*/, Promise.all(parts.map(function (part) { return __awaiter(_this, void 0, void 0, function () {
|
|
200
|
-
var _a, Key, Bucket, SSECustomerAlgorithm, SSECustomerKey, SSECustomerKeyMD5, res,
|
|
201
|
-
var
|
|
202
|
-
return __generator(this, function (
|
|
203
|
-
switch (
|
|
211
|
+
var isObjectLockEnabled, _a, _b, Key, Bucket, SSECustomerAlgorithm, SSECustomerKey, SSECustomerKeyMD5, ContentMD5, res, _c, _d;
|
|
212
|
+
var _e;
|
|
213
|
+
return __generator(this, function (_f) {
|
|
214
|
+
switch (_f.label) {
|
|
204
215
|
case 0:
|
|
205
216
|
this.setupEventListener(part);
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
217
|
+
isObjectLockEnabled = this.opts.isObjectLockEnabled;
|
|
218
|
+
if (!isObjectLockEnabled) return [3 /*break*/, 2];
|
|
219
|
+
_a = this.params;
|
|
220
|
+
return [4 /*yield*/, (0, MD5utils_1.calculateContentMd5)(part.bodyPart)];
|
|
221
|
+
case 1:
|
|
222
|
+
_a.ContentMD5 = _f.sent();
|
|
223
|
+
_f.label = 2;
|
|
224
|
+
case 2:
|
|
225
|
+
_b = this.params, Key = _b.Key, Bucket = _b.Bucket, SSECustomerAlgorithm = _b.SSECustomerAlgorithm, SSECustomerKey = _b.SSECustomerKey, SSECustomerKeyMD5 = _b.SSECustomerKeyMD5, ContentMD5 = _b.ContentMD5;
|
|
226
|
+
_c = S3_1.uploadPart;
|
|
227
|
+
_d = [__assign(__assign({}, this.s3Config), { emitter: part.emitter })];
|
|
228
|
+
_e = {
|
|
210
229
|
PartNumber: part.partNumber,
|
|
211
230
|
Body: part.bodyPart,
|
|
212
231
|
UploadId: uploadId
|
|
213
232
|
};
|
|
214
233
|
return [4 /*yield*/, this.getObjectKeyWithPrefix(this.params.Key)];
|
|
215
|
-
case
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
234
|
+
case 3: return [4 /*yield*/, _c.apply(void 0, _d.concat([(_e.Key = _f.sent(),
|
|
235
|
+
_e.Bucket = Bucket,
|
|
236
|
+
_e.SSECustomerAlgorithm = SSECustomerAlgorithm,
|
|
237
|
+
_e.SSECustomerKey = SSECustomerKey,
|
|
238
|
+
_e.SSECustomerKeyMD5 = SSECustomerKeyMD5,
|
|
239
|
+
_e.ContentMD5 = ContentMD5,
|
|
240
|
+
_e)]))];
|
|
241
|
+
case 4:
|
|
242
|
+
res = _f.sent();
|
|
223
243
|
return [2 /*return*/, res];
|
|
224
244
|
}
|
|
225
245
|
});
|