@aws-amplify/storage 5.6.4-api-v6.13 → 5.6.4-api-v6.23

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.
@@ -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 _a;
60
- return __generator(this, function (_b) {
61
- switch (_b.label) {
62
- case 0: return [4 /*yield*/, (0, utils_1.serializeObjectConfigsToHeaders)(__assign(__assign({}, input), { ContentType: (_a = input.ContentType) !== null && _a !== void 0 ? _a : 'application/octet-stream' }))];
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 = _b.sent();
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 (_a) {
60
- switch (_a.label) {
61
- case 0: return [4 /*yield*/, (0, utils_1.serializeObjectSsecOptionsToHeaders)(input)];
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
@@ -110,6 +110,7 @@ var Storage = /** @class */ (function () {
110
110
  'level',
111
111
  'track',
112
112
  'customPrefix',
113
+ 'ContentMD5',
113
114
  'serverSideEncryption',
114
115
  'SSECustomerAlgorithm',
115
116
  'SSECustomerKey',
@@ -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 _e;
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 (_f) {
79
- switch (_f.label) {
79
+ return __generator(this, function (_g) {
80
+ switch (_g.label) {
80
81
  case 0:
81
- _f.trys.push([0, 10, , 12]);
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*/, 2];
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
- _a = S3_1.putObject;
88
- _b = [this.s3Config];
89
- _c = [__assign({}, this.params)];
90
- _e = {};
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 1: return [2 /*return*/, _a.apply(void 0, _b.concat([__assign.apply(void 0, _c.concat([(_e.Key = _f.sent(), _e)]))]))];
93
- case 2:
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
- _d = this;
108
+ _e = this;
98
109
  return [4 /*yield*/, this.createMultiPartUpload()];
99
- case 3:
110
+ case 5:
100
111
  // Step 2: Initiate the multi part upload
101
- _d.uploadId = _f.sent();
112
+ _e.uploadId = _g.sent();
102
113
  numberOfPartsToUpload = Math.ceil(this.totalBytesToUpload / this.partSize);
103
114
  parts = this.createParts();
104
115
  start = 0;
105
- _f.label = 4;
106
- case 4:
107
- if (!(start < numberOfPartsToUpload)) return [3 /*break*/, 7];
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 5:
121
+ case 7:
111
122
  // Upload as many as `queueSize` parts simultaneously
112
- _f.sent();
113
- _f.label = 6;
114
- case 6:
123
+ _g.sent();
124
+ _g.label = 8;
125
+ case 8:
115
126
  start += S3ClientUtils_1.DEFAULT_QUEUE_SIZE;
116
- return [3 /*break*/, 4];
117
- case 7:
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 8:
133
+ case 10:
123
134
  // Step 3: Finalize the upload such that S3 can recreate the file
124
- return [2 /*return*/, _f.sent()];
125
- case 9: return [3 /*break*/, 12];
126
- case 10:
127
- error_1 = _f.sent();
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 11:
141
+ case 13:
131
142
  // if any error is thrown, call cleanup
132
- _f.sent();
143
+ _g.sent();
133
144
  logger.error('Error. Cancelling the multipart upload.');
134
145
  throw error_1;
135
- case 12: return [2 /*return*/];
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, _b, _c;
201
- var _d;
202
- return __generator(this, function (_e) {
203
- switch (_e.label) {
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
- _a = this.params, Key = _a.Key, Bucket = _a.Bucket, SSECustomerAlgorithm = _a.SSECustomerAlgorithm, SSECustomerKey = _a.SSECustomerKey, SSECustomerKeyMD5 = _a.SSECustomerKeyMD5;
207
- _b = S3_1.uploadPart;
208
- _c = [__assign(__assign({}, this.s3Config), { emitter: part.emitter })];
209
- _d = {
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 1: return [4 /*yield*/, _b.apply(void 0, _c.concat([(_d.Key = _e.sent(),
216
- _d.Bucket = Bucket,
217
- _d.SSECustomerAlgorithm = SSECustomerAlgorithm,
218
- _d.SSECustomerKey = SSECustomerKey,
219
- _d.SSECustomerKeyMD5 = SSECustomerKeyMD5,
220
- _d)]))];
221
- case 2:
222
- res = _e.sent();
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
  });