@aws-amplify/storage 6.8.5-unstable.fd56414.0 → 6.9.0
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/dist/cjs/providers/s3/apis/internal/uploadData/multipart/initialUpload.js +13 -3
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/initialUpload.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/uploadCache.js +21 -10
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/uploadCache.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.js +5 -2
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/uploadPartExecutor.js +2 -2
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/uploadPartExecutor.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/uploadData/putObjectJob.js +1 -1
- package/dist/cjs/providers/s3/apis/internal/uploadData/putObjectJob.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/completeMultipartUpload.js +1 -0
- package/dist/cjs/providers/s3/utils/client/s3data/completeMultipartUpload.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/createMultipartUpload.js +1 -0
- package/dist/cjs/providers/s3/utils/client/s3data/createMultipartUpload.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/getObject.js +1 -0
- package/dist/cjs/providers/s3/utils/client/s3data/getObject.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/listObjectsV2.js +1 -0
- package/dist/cjs/providers/s3/utils/client/s3data/listObjectsV2.js.map +1 -1
- package/dist/cjs/providers/s3/utils/crc32.js +4 -5
- package/dist/cjs/providers/s3/utils/crc32.js.map +1 -1
- package/dist/cjs/providers/s3/utils/hexUtils.js +1 -3
- package/dist/cjs/providers/s3/utils/hexUtils.js.map +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/initialUpload.mjs +14 -4
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/initialUpload.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadCache.d.ts +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadCache.mjs +20 -9
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadCache.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.mjs +5 -2
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadPartExecutor.mjs +2 -2
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadPartExecutor.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/putObjectJob.mjs +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/putObjectJob.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/completeMultipartUpload.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/completeMultipartUpload.mjs +1 -0
- package/dist/esm/providers/s3/utils/client/s3data/completeMultipartUpload.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/createMultipartUpload.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/s3data/createMultipartUpload.mjs +1 -0
- package/dist/esm/providers/s3/utils/client/s3data/createMultipartUpload.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/getObject.mjs +1 -0
- package/dist/esm/providers/s3/utils/client/s3data/getObject.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/listObjectsV2.mjs +1 -0
- package/dist/esm/providers/s3/utils/client/s3data/listObjectsV2.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/crc32.d.ts +4 -6
- package/dist/esm/providers/s3/utils/crc32.mjs +5 -6
- package/dist/esm/providers/s3/utils/crc32.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/hexUtils.d.ts +0 -1
- package/dist/esm/providers/s3/utils/hexUtils.mjs +1 -2
- package/dist/esm/providers/s3/utils/hexUtils.mjs.map +1 -1
- package/package.json +117 -117
- package/src/providers/s3/apis/internal/uploadData/multipart/initialUpload.ts +14 -4
- package/src/providers/s3/apis/internal/uploadData/multipart/uploadCache.ts +30 -10
- package/src/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.ts +5 -2
- package/src/providers/s3/apis/internal/uploadData/multipart/uploadPartExecutor.ts +4 -4
- package/src/providers/s3/apis/internal/uploadData/putObjectJob.ts +1 -1
- package/src/providers/s3/utils/client/s3data/completeMultipartUpload.ts +2 -0
- package/src/providers/s3/utils/client/s3data/createMultipartUpload.ts +3 -1
- package/src/providers/s3/utils/client/s3data/getObject.ts +1 -0
- package/src/providers/s3/utils/client/s3data/listObjectsV2.ts +2 -0
- package/src/providers/s3/utils/crc32.ts +6 -13
- package/src/providers/s3/utils/hexUtils.ts +0 -3
- package/dist/cjs/providers/s3/utils/getCombinedCrc32.js +0 -31
- package/dist/cjs/providers/s3/utils/getCombinedCrc32.js.map +0 -1
- package/dist/cjs/providers/s3/utils/getCombinedCrc32.native.js +0 -40
- package/dist/cjs/providers/s3/utils/getCombinedCrc32.native.js.map +0 -1
- package/dist/esm/providers/s3/utils/getCombinedCrc32.d.ts +0 -14
- package/dist/esm/providers/s3/utils/getCombinedCrc32.mjs +0 -29
- package/dist/esm/providers/s3/utils/getCombinedCrc32.mjs.map +0 -1
- package/dist/esm/providers/s3/utils/getCombinedCrc32.native.d.ts +0 -14
- package/dist/esm/providers/s3/utils/getCombinedCrc32.native.mjs +0 -38
- package/dist/esm/providers/s3/utils/getCombinedCrc32.native.mjs.map +0 -1
- package/src/providers/s3/utils/getCombinedCrc32.native.ts +0 -46
- package/src/providers/s3/utils/getCombinedCrc32.ts +0 -34
|
@@ -8,7 +8,7 @@ const s3data_1 = require("../../../../utils/client/s3data");
|
|
|
8
8
|
const utils_1 = require("../../../../../../utils");
|
|
9
9
|
const constructContentDisposition_1 = require("../../../../utils/constructContentDisposition");
|
|
10
10
|
const constants_1 = require("../../../../utils/constants");
|
|
11
|
-
const
|
|
11
|
+
const crc32_1 = require("../../../../utils/crc32");
|
|
12
12
|
const uploadCache_1 = require("./uploadCache");
|
|
13
13
|
/**
|
|
14
14
|
* Load the in-progress multipart upload from local storage or async storage(RN) if it exists, or create a new multipart
|
|
@@ -33,7 +33,7 @@ const loadOrCreateMultipartUpload = async ({ s3Config, data, size, contentType,
|
|
|
33
33
|
key,
|
|
34
34
|
optionsHash,
|
|
35
35
|
});
|
|
36
|
-
const cachedUploadParts = await (0, uploadCache_1.
|
|
36
|
+
const cachedUploadParts = await (0, uploadCache_1.findCachedUploadPartsAndEvictExpired)({
|
|
37
37
|
s3Config,
|
|
38
38
|
cacheKey: uploadCacheKey,
|
|
39
39
|
bucket,
|
|
@@ -52,8 +52,17 @@ const loadOrCreateMultipartUpload = async ({ s3Config, data, size, contentType,
|
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
54
|
else {
|
|
55
|
+
/**
|
|
56
|
+
* Note: This step reads the uploading file from beginning to end to calculate the CRC32 checksum of the entire
|
|
57
|
+
* object before sending the 1st byte over the wire. This is a performance bottleneck when uploading large files.
|
|
58
|
+
* The rationale to do this is S3 team wants to reduce the possibility of a file getting corrupted(on disk or in
|
|
59
|
+
* memory). So we calculate the full-object checksum as soon as possible in the upload flow.
|
|
60
|
+
*
|
|
61
|
+
* Going forward we should re-evaluate this decision with S3 team. The alternative is calling calculateContentCRC32()
|
|
62
|
+
* as we upload each part sequentially with seeds from already uploaded parts, ideally inside the data chunker.
|
|
63
|
+
*/
|
|
55
64
|
const finalCrc32 = checksumAlgorithm === constants_1.CHECKSUM_ALGORITHM_CRC32
|
|
56
|
-
? await (0,
|
|
65
|
+
? await (0, crc32_1.calculateContentCRC32)(data)
|
|
57
66
|
: undefined;
|
|
58
67
|
const { UploadId } = await (0, s3data_1.createMultipartUpload)({
|
|
59
68
|
...s3Config,
|
|
@@ -66,6 +75,7 @@ const loadOrCreateMultipartUpload = async ({ s3Config, data, size, contentType,
|
|
|
66
75
|
ContentEncoding: contentEncoding,
|
|
67
76
|
Metadata: metadata,
|
|
68
77
|
ChecksumAlgorithm: finalCrc32 ? 'CRC32' : undefined,
|
|
78
|
+
ChecksumType: finalCrc32 ? 'FULL_OBJECT' : undefined,
|
|
69
79
|
ExpectedBucketOwner: expectedBucketOwner,
|
|
70
80
|
});
|
|
71
81
|
if (resumableUploadsCache) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initialUpload.js","sources":["../../../../../../../../src/providers/s3/apis/internal/uploadData/multipart/initialUpload.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadOrCreateMultipartUpload = void 0;\nconst s3data_1 = require(\"../../../../utils/client/s3data\");\nconst utils_1 = require(\"../../../../../../utils\");\nconst constructContentDisposition_1 = require(\"../../../../utils/constructContentDisposition\");\nconst constants_1 = require(\"../../../../utils/constants\");\nconst
|
|
1
|
+
{"version":3,"file":"initialUpload.js","sources":["../../../../../../../../src/providers/s3/apis/internal/uploadData/multipart/initialUpload.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadOrCreateMultipartUpload = void 0;\nconst s3data_1 = require(\"../../../../utils/client/s3data\");\nconst utils_1 = require(\"../../../../../../utils\");\nconst constructContentDisposition_1 = require(\"../../../../utils/constructContentDisposition\");\nconst constants_1 = require(\"../../../../utils/constants\");\nconst crc32_1 = require(\"../../../../utils/crc32\");\nconst uploadCache_1 = require(\"./uploadCache\");\n/**\n * Load the in-progress multipart upload from local storage or async storage(RN) if it exists, or create a new multipart\n * upload.\n *\n * @internal\n */\nconst loadOrCreateMultipartUpload = async ({ s3Config, data, size, contentType, bucket, accessLevel, keyPrefix, key, contentDisposition, contentEncoding, metadata, abortSignal, checksumAlgorithm, optionsHash, resumableUploadsCache, expectedBucketOwner, }) => {\n const finalKey = keyPrefix !== undefined ? keyPrefix + key : key;\n let cachedUpload;\n if (!resumableUploadsCache) {\n utils_1.logger.debug('uploaded cache instance cannot be determined, skipping cache.');\n cachedUpload = undefined;\n }\n else {\n const uploadCacheKey = (0, uploadCache_1.getUploadsCacheKey)({\n size,\n contentType,\n file: data instanceof File ? data : undefined,\n bucket,\n accessLevel,\n key,\n optionsHash,\n });\n const cachedUploadParts = await (0, uploadCache_1.findCachedUploadPartsAndEvictExpired)({\n s3Config,\n cacheKey: uploadCacheKey,\n bucket,\n finalKey,\n resumableUploadsCache,\n });\n cachedUpload = cachedUploadParts\n ? { ...cachedUploadParts, uploadCacheKey }\n : undefined;\n }\n if (cachedUpload) {\n return {\n uploadId: cachedUpload.uploadId,\n cachedParts: cachedUpload.parts,\n finalCrc32: cachedUpload.finalCrc32,\n };\n }\n else {\n /**\n * Note: This step reads the uploading file from beginning to end to calculate the CRC32 checksum of the entire\n * object before sending the 1st byte over the wire. This is a performance bottleneck when uploading large files.\n * The rationale to do this is S3 team wants to reduce the possibility of a file getting corrupted(on disk or in\n * memory). So we calculate the full-object checksum as soon as possible in the upload flow.\n *\n * Going forward we should re-evaluate this decision with S3 team. The alternative is calling calculateContentCRC32()\n * as we upload each part sequentially with seeds from already uploaded parts, ideally inside the data chunker.\n */\n const finalCrc32 = checksumAlgorithm === constants_1.CHECKSUM_ALGORITHM_CRC32\n ? await (0, crc32_1.calculateContentCRC32)(data)\n : undefined;\n const { UploadId } = await (0, s3data_1.createMultipartUpload)({\n ...s3Config,\n abortSignal,\n }, {\n Bucket: bucket,\n Key: finalKey,\n ContentType: contentType,\n ContentDisposition: (0, constructContentDisposition_1.constructContentDisposition)(contentDisposition),\n ContentEncoding: contentEncoding,\n Metadata: metadata,\n ChecksumAlgorithm: finalCrc32 ? 'CRC32' : undefined,\n ChecksumType: finalCrc32 ? 'FULL_OBJECT' : undefined,\n ExpectedBucketOwner: expectedBucketOwner,\n });\n if (resumableUploadsCache) {\n const uploadCacheKey = (0, uploadCache_1.getUploadsCacheKey)({\n size,\n contentType,\n file: data instanceof File ? data : undefined,\n bucket,\n accessLevel,\n key,\n optionsHash,\n });\n await (0, uploadCache_1.cacheMultipartUpload)(resumableUploadsCache, uploadCacheKey, {\n uploadId: UploadId,\n bucket,\n key,\n finalCrc32,\n fileName: data instanceof File ? data.name : '',\n });\n }\n return {\n uploadId: UploadId,\n cachedParts: [],\n finalCrc32,\n };\n }\n};\nexports.loadOrCreateMultipartUpload = loadOrCreateMultipartUpload;\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,OAAO,CAAC,2BAA2B,GAAG,MAAM;AAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,iCAAiC,CAAC;AAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,yBAAyB,CAAC;AAClD,MAAM,6BAA6B,GAAG,OAAO,CAAC,+CAA+C,CAAC;AAC9F,MAAM,WAAW,GAAG,OAAO,CAAC,6BAA6B,CAAC;AAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,yBAAyB,CAAC;AAClD,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,2BAA2B,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,kBAAkB,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,qBAAqB,EAAE,mBAAmB,GAAG,KAAK;AACnQ,IAAI,MAAM,QAAQ,GAAG,SAAS,KAAK,SAAS,GAAG,SAAS,GAAG,GAAG,GAAG,GAAG;AACpE,IAAI,IAAI,YAAY;AACpB,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAChC,QAAQ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC;AAC7F,QAAQ,YAAY,GAAG,SAAS;AAChC;AACA,SAAS;AACT,QAAQ,MAAM,cAAc,GAAG,IAAI,aAAa,CAAC,kBAAkB,EAAE;AACrE,YAAY,IAAI;AAChB,YAAY,WAAW;AACvB,YAAY,IAAI,EAAE,IAAI,YAAY,IAAI,GAAG,IAAI,GAAG,SAAS;AACzD,YAAY,MAAM;AAClB,YAAY,WAAW;AACvB,YAAY,GAAG;AACf,YAAY,WAAW;AACvB,SAAS,CAAC;AACV,QAAQ,MAAM,iBAAiB,GAAG,MAAM,IAAI,aAAa,CAAC,oCAAoC,EAAE;AAChG,YAAY,QAAQ;AACpB,YAAY,QAAQ,EAAE,cAAc;AACpC,YAAY,MAAM;AAClB,YAAY,QAAQ;AACpB,YAAY,qBAAqB;AACjC,SAAS,CAAC;AACV,QAAQ,YAAY,GAAG;AACvB,cAAc,EAAE,GAAG,iBAAiB,EAAE,cAAc;AACpD,cAAc,SAAS;AACvB;AACA,IAAI,IAAI,YAAY,EAAE;AACtB,QAAQ,OAAO;AACf,YAAY,QAAQ,EAAE,YAAY,CAAC,QAAQ;AAC3C,YAAY,WAAW,EAAE,YAAY,CAAC,KAAK;AAC3C,YAAY,UAAU,EAAE,YAAY,CAAC,UAAU;AAC/C,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,MAAM,UAAU,GAAG,iBAAiB,KAAK,WAAW,CAAC;AAC7D,cAAc,MAAM,IAAI,OAAO,CAAC,qBAAqB,EAAE,IAAI;AAC3D,cAAc,SAAS;AACvB,QAAQ,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE;AACvE,YAAY,GAAG,QAAQ;AACvB,YAAY,WAAW;AACvB,SAAS,EAAE;AACX,YAAY,MAAM,EAAE,MAAM;AAC1B,YAAY,GAAG,EAAE,QAAQ;AACzB,YAAY,WAAW,EAAE,WAAW;AACpC,YAAY,kBAAkB,EAAE,IAAI,6BAA6B,CAAC,2BAA2B,EAAE,kBAAkB,CAAC;AAClH,YAAY,eAAe,EAAE,eAAe;AAC5C,YAAY,QAAQ,EAAE,QAAQ;AAC9B,YAAY,iBAAiB,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS;AAC/D,YAAY,YAAY,EAAE,UAAU,GAAG,aAAa,GAAG,SAAS;AAChE,YAAY,mBAAmB,EAAE,mBAAmB;AACpD,SAAS,CAAC;AACV,QAAQ,IAAI,qBAAqB,EAAE;AACnC,YAAY,MAAM,cAAc,GAAG,IAAI,aAAa,CAAC,kBAAkB,EAAE;AACzE,gBAAgB,IAAI;AACpB,gBAAgB,WAAW;AAC3B,gBAAgB,IAAI,EAAE,IAAI,YAAY,IAAI,GAAG,IAAI,GAAG,SAAS;AAC7D,gBAAgB,MAAM;AACtB,gBAAgB,WAAW;AAC3B,gBAAgB,GAAG;AACnB,gBAAgB,WAAW;AAC3B,aAAa,CAAC;AACd,YAAY,MAAM,IAAI,aAAa,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,cAAc,EAAE;AACjG,gBAAgB,QAAQ,EAAE,QAAQ;AAClC,gBAAgB,MAAM;AACtB,gBAAgB,GAAG;AACnB,gBAAgB,UAAU;AAC1B,gBAAgB,QAAQ,EAAE,IAAI,YAAY,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE;AAC/D,aAAa,CAAC;AACd;AACA,QAAQ,OAAO;AACf,YAAY,QAAQ,EAAE,QAAQ;AAC9B,YAAY,WAAW,EAAE,EAAE;AAC3B,YAAY,UAAU;AACtB,SAAS;AACT;AACA,CAAC;AACD,OAAO,CAAC,2BAA2B,GAAG,2BAA2B;;"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
4
4
|
// SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.removeCachedUpload = exports.cacheMultipartUpload = exports.getUploadsCacheKey = exports.serializeUploadOptions = exports.
|
|
6
|
+
exports.removeCachedUpload = exports.cacheMultipartUpload = exports.getUploadsCacheKey = exports.serializeUploadOptions = exports.findCachedUploadPartsAndEvictExpired = void 0;
|
|
7
7
|
const constants_1 = require("../../../../utils/constants");
|
|
8
8
|
const s3data_1 = require("../../../../utils/client/s3data");
|
|
9
9
|
const utils_1 = require("../../../../../../utils");
|
|
@@ -12,16 +12,20 @@ const ONE_HOUR = 1000 * 60 * 60;
|
|
|
12
12
|
* Find the cached multipart upload id and get the parts that have been uploaded
|
|
13
13
|
* with ListParts API. If the cached upload is expired(1 hour), return null.
|
|
14
14
|
*/
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
)
|
|
15
|
+
const findCachedUploadPartsAndEvictExpired = async ({ resumableUploadsCache, cacheKey, s3Config, bucket, finalKey, }) => {
|
|
16
|
+
const allCachedUploads = await listCachedUploadTasks(resumableUploadsCache);
|
|
17
|
+
// Evict all outdated uploads.
|
|
18
|
+
const validCachedUploads = Object.fromEntries(Object.entries(allCachedUploads).filter(([_, cacheValue]) => cacheValue.lastTouched >= Date.now() - ONE_HOUR));
|
|
19
|
+
if (Object.keys(validCachedUploads).length !==
|
|
20
|
+
Object.keys(allCachedUploads).length) {
|
|
21
|
+
await resumableUploadsCache.setItem(constants_1.UPLOADS_STORAGE_KEY, JSON.stringify(validCachedUploads));
|
|
22
|
+
}
|
|
23
|
+
if (!validCachedUploads[cacheKey]) {
|
|
20
24
|
return null;
|
|
21
25
|
}
|
|
22
|
-
const cachedUpload =
|
|
26
|
+
const cachedUpload = validCachedUploads[cacheKey];
|
|
23
27
|
cachedUpload.lastTouched = Date.now();
|
|
24
|
-
await resumableUploadsCache.setItem(constants_1.UPLOADS_STORAGE_KEY, JSON.stringify(
|
|
28
|
+
await resumableUploadsCache.setItem(constants_1.UPLOADS_STORAGE_KEY, JSON.stringify(validCachedUploads));
|
|
25
29
|
try {
|
|
26
30
|
const { Parts = [] } = await (0, s3data_1.listParts)(s3Config, {
|
|
27
31
|
Bucket: bucket,
|
|
@@ -40,7 +44,7 @@ const findCachedUploadParts = async ({ resumableUploadsCache, cacheKey, s3Config
|
|
|
40
44
|
return null;
|
|
41
45
|
}
|
|
42
46
|
};
|
|
43
|
-
exports.
|
|
47
|
+
exports.findCachedUploadPartsAndEvictExpired = findCachedUploadPartsAndEvictExpired;
|
|
44
48
|
const listCachedUploadTasks = async (resumableUploadsCache) => {
|
|
45
49
|
try {
|
|
46
50
|
return JSON.parse((await resumableUploadsCache.getItem(constants_1.UPLOADS_STORAGE_KEY)) ?? '{}');
|
|
@@ -59,7 +63,14 @@ const serializeUploadOptions = (options = {}) => {
|
|
|
59
63
|
'resumableUploadsCache', // Internally injected implementation not set by customers
|
|
60
64
|
'locationCredentialsProvider', // Internally injected implementation not set by customers
|
|
61
65
|
];
|
|
62
|
-
const
|
|
66
|
+
const serializableOptionEntries = Object.entries(options).filter(([key]) => !unserializableOptionProperties.includes(key));
|
|
67
|
+
if (options.checksumAlgorithm === 'crc-32') {
|
|
68
|
+
// Additional options to differentiate the upload cache created before introducing the full-object checksum and
|
|
69
|
+
// after. If full-object checksum is enabled, the previous upload caches that created with composite checksum should
|
|
70
|
+
// be ignored.
|
|
71
|
+
serializableOptionEntries.push(['checksumType', 'FULL_OBJECT']);
|
|
72
|
+
}
|
|
73
|
+
const serializableOptions = Object.fromEntries(serializableOptionEntries);
|
|
63
74
|
return JSON.stringify(serializableOptions);
|
|
64
75
|
};
|
|
65
76
|
exports.serializeUploadOptions = serializeUploadOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadCache.js","sources":["../../../../../../../../src/providers/s3/apis/internal/uploadData/multipart/uploadCache.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.removeCachedUpload = exports.cacheMultipartUpload = exports.getUploadsCacheKey = exports.serializeUploadOptions = exports.
|
|
1
|
+
{"version":3,"file":"uploadCache.js","sources":["../../../../../../../../src/providers/s3/apis/internal/uploadData/multipart/uploadCache.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.removeCachedUpload = exports.cacheMultipartUpload = exports.getUploadsCacheKey = exports.serializeUploadOptions = exports.findCachedUploadPartsAndEvictExpired = void 0;\nconst constants_1 = require(\"../../../../utils/constants\");\nconst s3data_1 = require(\"../../../../utils/client/s3data\");\nconst utils_1 = require(\"../../../../../../utils\");\nconst ONE_HOUR = 1000 * 60 * 60;\n/**\n * Find the cached multipart upload id and get the parts that have been uploaded\n * with ListParts API. If the cached upload is expired(1 hour), return null.\n */\nconst findCachedUploadPartsAndEvictExpired = async ({ resumableUploadsCache, cacheKey, s3Config, bucket, finalKey, }) => {\n const allCachedUploads = await listCachedUploadTasks(resumableUploadsCache);\n // Evict all outdated uploads.\n const validCachedUploads = Object.fromEntries(Object.entries(allCachedUploads).filter(([_, cacheValue]) => cacheValue.lastTouched >= Date.now() - ONE_HOUR));\n if (Object.keys(validCachedUploads).length !==\n Object.keys(allCachedUploads).length) {\n await resumableUploadsCache.setItem(constants_1.UPLOADS_STORAGE_KEY, JSON.stringify(validCachedUploads));\n }\n if (!validCachedUploads[cacheKey]) {\n return null;\n }\n const cachedUpload = validCachedUploads[cacheKey];\n cachedUpload.lastTouched = Date.now();\n await resumableUploadsCache.setItem(constants_1.UPLOADS_STORAGE_KEY, JSON.stringify(validCachedUploads));\n try {\n const { Parts = [] } = await (0, s3data_1.listParts)(s3Config, {\n Bucket: bucket,\n Key: finalKey,\n UploadId: cachedUpload.uploadId,\n });\n return {\n parts: Parts,\n uploadId: cachedUpload.uploadId,\n finalCrc32: cachedUpload.finalCrc32,\n };\n }\n catch (e) {\n utils_1.logger.debug('failed to list cached parts, removing cached upload.');\n await (0, exports.removeCachedUpload)(resumableUploadsCache, cacheKey);\n return null;\n }\n};\nexports.findCachedUploadPartsAndEvictExpired = findCachedUploadPartsAndEvictExpired;\nconst listCachedUploadTasks = async (resumableUploadsCache) => {\n try {\n return JSON.parse((await resumableUploadsCache.getItem(constants_1.UPLOADS_STORAGE_KEY)) ?? '{}');\n }\n catch (e) {\n utils_1.logger.debug('failed to parse cached uploads record.');\n return {};\n }\n};\n/**\n * Serialize the uploadData API options to string so it can be hashed.\n */\nconst serializeUploadOptions = (options = {}) => {\n const unserializableOptionProperties = [\n 'onProgress',\n 'resumableUploadsCache', // Internally injected implementation not set by customers\n 'locationCredentialsProvider', // Internally injected implementation not set by customers\n ];\n const serializableOptionEntries = Object.entries(options).filter(([key]) => !unserializableOptionProperties.includes(key));\n if (options.checksumAlgorithm === 'crc-32') {\n // Additional options to differentiate the upload cache created before introducing the full-object checksum and\n // after. If full-object checksum is enabled, the previous upload caches that created with composite checksum should\n // be ignored.\n serializableOptionEntries.push(['checksumType', 'FULL_OBJECT']);\n }\n const serializableOptions = Object.fromEntries(serializableOptionEntries);\n return JSON.stringify(serializableOptions);\n};\nexports.serializeUploadOptions = serializeUploadOptions;\n/**\n * Get the cache key of a multipart upload. Data source cached by different: size, content type, bucket, access level,\n * key. If the data source is a File instance, the upload is additionally indexed by file name and last modified time.\n * So the library always created a new multipart upload if the file is modified.\n */\nconst getUploadsCacheKey = ({ file, size, contentType, bucket, accessLevel, key, optionsHash, }) => {\n let levelStr;\n const resolvedContentType = contentType ?? file?.type ?? 'application/octet-stream';\n // If no access level is defined, we're using custom gen2 access rules\n if (accessLevel === undefined) {\n levelStr = 'custom';\n }\n else {\n levelStr = accessLevel === 'guest' ? 'public' : accessLevel;\n }\n const baseId = `${optionsHash}_${size}_${resolvedContentType}_${bucket}_${levelStr}_${key}`;\n if (file) {\n return `${file.name}_${file.lastModified}_${baseId}`;\n }\n else {\n return baseId;\n }\n};\nexports.getUploadsCacheKey = getUploadsCacheKey;\nconst cacheMultipartUpload = async (resumableUploadsCache, cacheKey, fileMetadata) => {\n const cachedUploads = await listCachedUploadTasks(resumableUploadsCache);\n cachedUploads[cacheKey] = {\n ...fileMetadata,\n lastTouched: Date.now(),\n };\n await resumableUploadsCache.setItem(constants_1.UPLOADS_STORAGE_KEY, JSON.stringify(cachedUploads));\n};\nexports.cacheMultipartUpload = cacheMultipartUpload;\nconst removeCachedUpload = async (resumableUploadsCache, cacheKey) => {\n const cachedUploads = await listCachedUploadTasks(resumableUploadsCache);\n delete cachedUploads[cacheKey];\n await resumableUploadsCache.setItem(constants_1.UPLOADS_STORAGE_KEY, JSON.stringify(cachedUploads));\n};\nexports.removeCachedUpload = removeCachedUpload;\n"],"names":[],"mappings":"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"}
|
|
@@ -65,7 +65,7 @@ const getMultipartUploadHandlers = (uploadDataInput, size) => {
|
|
|
65
65
|
finalKey = resolvedKeyPrefix + objectKey;
|
|
66
66
|
resolvedAccessLevel = resolveAccessLevel(accessLevel);
|
|
67
67
|
}
|
|
68
|
-
const
|
|
68
|
+
const optionsHash = await (0, crc32_1.calculateContentCRC32)((0, uploadCache_1.serializeUploadOptions)(uploadDataOptions));
|
|
69
69
|
if (!inProgressUpload) {
|
|
70
70
|
const { uploadId, cachedParts, finalCrc32 } = await (0, initialUpload_1.loadOrCreateMultipartUpload)({
|
|
71
71
|
s3Config: resolvedS3Config,
|
|
@@ -144,13 +144,16 @@ const getMultipartUploadHandlers = (uploadDataInput, size) => {
|
|
|
144
144
|
Key: finalKey,
|
|
145
145
|
UploadId: inProgressUpload.uploadId,
|
|
146
146
|
ChecksumCRC32: inProgressUpload.finalCrc32,
|
|
147
|
+
ChecksumType: inProgressUpload.finalCrc32 ? 'FULL_OBJECT' : undefined,
|
|
147
148
|
IfNoneMatch: preventOverwrite ? '*' : undefined,
|
|
148
149
|
MultipartUpload: {
|
|
149
150
|
Parts: sortUploadParts(inProgressUpload.completedParts),
|
|
150
151
|
},
|
|
151
152
|
ExpectedBucketOwner: expectedBucketOwner,
|
|
152
153
|
});
|
|
153
|
-
|
|
154
|
+
// If full-object CRC32 checksum is NOT enabled, we need to ensure the upload integrity by making extra HEAD call
|
|
155
|
+
// to verify the uploaded object size.
|
|
156
|
+
if (!inProgressUpload.finalCrc32) {
|
|
154
157
|
const { ContentLength: uploadedObjectSize, $metadata } = await (0, s3data_1.headObject)(resolvedS3Config, {
|
|
155
158
|
Bucket: resolvedBucket,
|
|
156
159
|
Key: finalKey,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadHandlers.js","sources":["../../../../../../../../src/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMultipartUploadHandlers = void 0;\nconst core_1 = require(\"@aws-amplify/core\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst utils_2 = require(\"../../../../utils\");\nconst constants_1 = require(\"../../../../utils/constants\");\nconst StorageError_1 = require(\"../../../../../../errors/StorageError\");\nconst CanceledError_1 = require(\"../../../../../../errors/CanceledError\");\nconst s3data_1 = require(\"../../../../utils/client/s3data\");\nconst userAgent_1 = require(\"../../../../utils/userAgent\");\nconst utils_3 = require(\"../../../../../../utils\");\nconst crc32_1 = require(\"../../../../utils/crc32\");\nconst IntegrityError_1 = require(\"../../../../../../errors/IntegrityError\");\nconst uploadPartExecutor_1 = require(\"./uploadPartExecutor\");\nconst uploadCache_1 = require(\"./uploadCache\");\nconst progressTracker_1 = require(\"./progressTracker\");\nconst initialUpload_1 = require(\"./initialUpload\");\nconst getDataChunker_1 = require(\"./getDataChunker\");\nconst calculatePartSize_1 = require(\"./calculatePartSize\");\n/**\n * Create closure hiding the multipart upload implementation details and expose the upload job and control functions(\n * onPause, onResume, onCancel).\n *\n * @internal\n */\nconst getMultipartUploadHandlers = (uploadDataInput, size) => {\n let resolveCallback;\n let rejectCallback;\n let inProgressUpload;\n let resolvedS3Config;\n let abortController;\n let resolvedAccessLevel;\n let resolvedBucket;\n let resolvedKeyPrefix;\n let resolvedIdentityId;\n let uploadCacheKey;\n let finalKey;\n let expectedBucketOwner;\n // Special flag that differentiates HTTP requests abort error caused by pause() from ones caused by cancel().\n // The former one should NOT cause the upload job to throw, but cancels any pending HTTP requests.\n // This should be replaced by a special abort reason. However,the support of this API is lagged behind.\n let isAbortSignalFromPause = false;\n const { resumableUploadsCache } = uploadDataInput.options ?? {};\n const startUpload = async () => {\n const { options: uploadDataOptions, data } = uploadDataInput;\n const resolvedS3Options = await (0, utils_2.resolveS3ConfigAndInput)(core_1.Amplify, uploadDataInput);\n abortController = new AbortController();\n isAbortSignalFromPause = false;\n resolvedS3Config = resolvedS3Options.s3Config;\n resolvedBucket = resolvedS3Options.bucket;\n resolvedIdentityId = resolvedS3Options.identityId;\n expectedBucketOwner = uploadDataOptions?.expectedBucketOwner;\n const { inputType, objectKey } = (0, utils_2.validateStorageOperationInput)(uploadDataInput, resolvedIdentityId);\n const { contentDisposition, contentEncoding, contentType = 'application/octet-stream', metadata, preventOverwrite, onProgress, } = uploadDataOptions ?? {};\n finalKey = objectKey;\n // Resolve \"key\" specific options\n if (inputType === constants_1.STORAGE_INPUT_KEY) {\n const accessLevel = uploadDataOptions\n ?.accessLevel;\n resolvedKeyPrefix = resolvedS3Options.keyPrefix;\n finalKey = resolvedKeyPrefix + objectKey;\n resolvedAccessLevel = resolveAccessLevel(accessLevel);\n }\n const { checksum: optionsHash } = await (0, crc32_1.calculateContentCRC32)((0, uploadCache_1.serializeUploadOptions)(uploadDataOptions));\n if (!inProgressUpload) {\n const { uploadId, cachedParts, finalCrc32 } = await (0, initialUpload_1.loadOrCreateMultipartUpload)({\n s3Config: resolvedS3Config,\n accessLevel: resolvedAccessLevel,\n bucket: resolvedBucket,\n keyPrefix: resolvedKeyPrefix,\n key: objectKey,\n contentType,\n contentDisposition,\n contentEncoding,\n metadata,\n data,\n size,\n abortSignal: abortController.signal,\n checksumAlgorithm: uploadDataOptions?.checksumAlgorithm,\n optionsHash,\n resumableUploadsCache,\n expectedBucketOwner,\n });\n inProgressUpload = {\n uploadId,\n completedParts: cachedParts,\n finalCrc32,\n };\n }\n uploadCacheKey = size\n ? (0, uploadCache_1.getUploadsCacheKey)({\n file: data instanceof File ? data : undefined,\n accessLevel: resolvedAccessLevel,\n contentType: uploadDataOptions?.contentType,\n bucket: resolvedBucket,\n size,\n key: objectKey,\n optionsHash,\n })\n : undefined;\n const dataChunker = (0, getDataChunker_1.getDataChunker)(data, size);\n const completedPartNumberSet = new Set(inProgressUpload.completedParts.map(({ PartNumber }) => PartNumber));\n const onPartUploadCompletion = (partNumber, eTag, crc32) => {\n inProgressUpload?.completedParts.push({\n PartNumber: partNumber,\n ETag: eTag,\n // TODO: crc32 can always be added once RN also has an implementation\n ...(crc32 ? { ChecksumCRC32: crc32 } : {}),\n });\n };\n const concurrentUploadsProgressTracker = (0, progressTracker_1.getConcurrentUploadsProgressTracker)({\n size,\n onProgress,\n });\n const concurrentUploadPartExecutors = [];\n for (let index = 0; index < constants_1.DEFAULT_QUEUE_SIZE; index++) {\n concurrentUploadPartExecutors.push((0, uploadPartExecutor_1.uploadPartExecutor)({\n dataChunkerGenerator: dataChunker,\n completedPartNumberSet,\n s3Config: resolvedS3Config,\n abortSignal: abortController.signal,\n bucket: resolvedBucket,\n finalKey,\n uploadId: inProgressUpload.uploadId,\n onPartUploadCompletion,\n onProgress: concurrentUploadsProgressTracker.getOnProgressListener(),\n isObjectLockEnabled: resolvedS3Options.isObjectLockEnabled,\n useCRC32Checksum: Boolean(inProgressUpload.finalCrc32),\n expectedBucketOwner,\n }));\n }\n await Promise.all(concurrentUploadPartExecutors);\n validateCompletedParts(inProgressUpload.completedParts, size);\n const { ETag: eTag } = await (0, s3data_1.completeMultipartUpload)({\n ...resolvedS3Config,\n abortSignal: abortController.signal,\n userAgentValue: (0, userAgent_1.getStorageUserAgentValue)(utils_1.StorageAction.UploadData),\n }, {\n Bucket: resolvedBucket,\n Key: finalKey,\n UploadId: inProgressUpload.uploadId,\n ChecksumCRC32: inProgressUpload.finalCrc32,\n IfNoneMatch: preventOverwrite ? '*' : undefined,\n MultipartUpload: {\n Parts: sortUploadParts(inProgressUpload.completedParts),\n },\n ExpectedBucketOwner: expectedBucketOwner,\n });\n if (size) {\n const { ContentLength: uploadedObjectSize, $metadata } = await (0, s3data_1.headObject)(resolvedS3Config, {\n Bucket: resolvedBucket,\n Key: finalKey,\n ExpectedBucketOwner: expectedBucketOwner,\n });\n if (uploadedObjectSize && uploadedObjectSize !== size) {\n throw new StorageError_1.StorageError({\n name: 'Error',\n message: `Upload failed. Expected object size ${size}, but got ${uploadedObjectSize}.`,\n metadata: $metadata,\n });\n }\n }\n if (resumableUploadsCache && uploadCacheKey) {\n await (0, uploadCache_1.removeCachedUpload)(resumableUploadsCache, uploadCacheKey);\n }\n const result = {\n eTag,\n contentType,\n metadata,\n };\n return inputType === constants_1.STORAGE_INPUT_KEY\n ? { key: objectKey, ...result }\n : { path: objectKey, ...result };\n };\n const startUploadWithResumability = () => startUpload()\n .then(resolveCallback)\n .catch(error => {\n const abortSignal = abortController?.signal;\n if (abortSignal?.aborted && isAbortSignalFromPause) {\n utils_3.logger.debug('upload paused.');\n }\n else {\n // Uncaught errors should be exposed to the users.\n rejectCallback(error);\n }\n });\n const multipartUploadJob = () => new Promise((resolve, reject) => {\n resolveCallback = resolve;\n rejectCallback = reject;\n startUploadWithResumability();\n });\n const onPause = () => {\n isAbortSignalFromPause = true;\n abortController?.abort();\n };\n const onResume = () => {\n startUploadWithResumability();\n };\n const onCancel = (message) => {\n // 1. abort in-flight API requests\n abortController?.abort(message);\n const cancelUpload = async () => {\n // 2. clear upload cache.\n if (uploadCacheKey && resumableUploadsCache) {\n await (0, uploadCache_1.removeCachedUpload)(resumableUploadsCache, uploadCacheKey);\n }\n // 3. clear multipart upload on server side.\n await (0, s3data_1.abortMultipartUpload)(resolvedS3Config, {\n Bucket: resolvedBucket,\n Key: finalKey,\n UploadId: inProgressUpload?.uploadId,\n ExpectedBucketOwner: expectedBucketOwner,\n });\n };\n cancelUpload().catch(e => {\n utils_3.logger.debug('error when cancelling upload task.', e);\n });\n rejectCallback(\n // Internal error that should not be exposed to the users. They should use isCancelError() to check if\n // the error is caused by cancel().\n new CanceledError_1.CanceledError(message ? { message } : undefined));\n };\n return {\n multipartUploadJob,\n onPause,\n onResume,\n onCancel,\n };\n};\nexports.getMultipartUploadHandlers = getMultipartUploadHandlers;\nconst resolveAccessLevel = (accessLevel) => accessLevel ??\n core_1.Amplify.libraryOptions.Storage?.S3?.defaultAccessLevel ??\n constants_1.DEFAULT_ACCESS_LEVEL;\nconst validateCompletedParts = (completedParts, size) => {\n const partsExpected = Math.ceil(size / (0, calculatePartSize_1.calculatePartSize)(size));\n const validPartCount = completedParts.length === partsExpected;\n const sorted = sortUploadParts(completedParts);\n const validPartNumbers = sorted.every((part, index) => part.PartNumber === index + 1);\n if (!validPartCount || !validPartNumbers) {\n throw new IntegrityError_1.IntegrityError();\n }\n};\nconst sortUploadParts = (parts) => {\n return [...parts].sort((partA, partB) => partA.PartNumber - partB.PartNumber);\n};\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,OAAO,CAAC,0BAA0B,GAAG,MAAM;AAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,mCAAmC,CAAC;AAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,6BAA6B,CAAC;AAC1D,MAAM,cAAc,GAAG,OAAO,CAAC,uCAAuC,CAAC;AACvE,MAAM,eAAe,GAAG,OAAO,CAAC,wCAAwC,CAAC;AACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,iCAAiC,CAAC;AAC3D,MAAM,WAAW,GAAG,OAAO,CAAC,6BAA6B,CAAC;AAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,yBAAyB,CAAC;AAClD,MAAM,OAAO,GAAG,OAAO,CAAC,yBAAyB,CAAC;AAClD,MAAM,gBAAgB,GAAG,OAAO,CAAC,yCAAyC,CAAC;AAC3E,MAAM,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAC5D,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;AAC9C,MAAM,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;AACtD,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAClD,MAAM,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;AACpD,MAAM,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,0BAA0B,GAAG,CAAC,eAAe,EAAE,IAAI,KAAK;AAC9D,IAAI,IAAI,eAAe;AACvB,IAAI,IAAI,cAAc;AACtB,IAAI,IAAI,gBAAgB;AACxB,IAAI,IAAI,gBAAgB;AACxB,IAAI,IAAI,eAAe;AACvB,IAAI,IAAI,mBAAmB;AAC3B,IAAI,IAAI,cAAc;AACtB,IAAI,IAAI,iBAAiB;AACzB,IAAI,IAAI,kBAAkB;AAC1B,IAAI,IAAI,cAAc;AACtB,IAAI,IAAI,QAAQ;AAChB,IAAI,IAAI,mBAAmB;AAC3B;AACA;AACA;AACA,IAAI,IAAI,sBAAsB,GAAG,KAAK;AACtC,IAAI,MAAM,EAAE,qBAAqB,EAAE,GAAG,eAAe,CAAC,OAAO,IAAI,EAAE;AACnE,IAAI,MAAM,WAAW,GAAG,YAAY;AACpC,QAAQ,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,eAAe;AACpE,QAAQ,MAAM,iBAAiB,GAAG,MAAM,IAAI,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC;AAC7G,QAAQ,eAAe,GAAG,IAAI,eAAe,EAAE;AAC/C,QAAQ,sBAAsB,GAAG,KAAK;AACtC,QAAQ,gBAAgB,GAAG,iBAAiB,CAAC,QAAQ;AACrD,QAAQ,cAAc,GAAG,iBAAiB,CAAC,MAAM;AACjD,QAAQ,kBAAkB,GAAG,iBAAiB,CAAC,UAAU;AACzD,QAAQ,mBAAmB,GAAG,iBAAiB,EAAE,mBAAmB;AACpE,QAAQ,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,OAAO,CAAC,6BAA6B,EAAE,eAAe,EAAE,kBAAkB,CAAC;AACxH,QAAQ,MAAM,EAAE,kBAAkB,EAAE,eAAe,EAAE,WAAW,GAAG,0BAA0B,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,GAAG,GAAG,iBAAiB,IAAI,EAAE;AAClK,QAAQ,QAAQ,GAAG,SAAS;AAC5B;AACA,QAAQ,IAAI,SAAS,KAAK,WAAW,CAAC,iBAAiB,EAAE;AACzD,YAAY,MAAM,WAAW,GAAG;AAChC,kBAAkB,WAAW;AAC7B,YAAY,iBAAiB,GAAG,iBAAiB,CAAC,SAAS;AAC3D,YAAY,QAAQ,GAAG,iBAAiB,GAAG,SAAS;AACpD,YAAY,mBAAmB,GAAG,kBAAkB,CAAC,WAAW,CAAC;AACjE;AACA,QAAQ,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,OAAO,CAAC,qBAAqB,EAAE,IAAI,aAAa,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;AAChJ,QAAQ,IAAI,CAAC,gBAAgB,EAAE;AAC/B,YAAY,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,eAAe,CAAC,2BAA2B,EAAE;AACjH,gBAAgB,QAAQ,EAAE,gBAAgB;AAC1C,gBAAgB,WAAW,EAAE,mBAAmB;AAChD,gBAAgB,MAAM,EAAE,cAAc;AACtC,gBAAgB,SAAS,EAAE,iBAAiB;AAC5C,gBAAgB,GAAG,EAAE,SAAS;AAC9B,gBAAgB,WAAW;AAC3B,gBAAgB,kBAAkB;AAClC,gBAAgB,eAAe;AAC/B,gBAAgB,QAAQ;AACxB,gBAAgB,IAAI;AACpB,gBAAgB,IAAI;AACpB,gBAAgB,WAAW,EAAE,eAAe,CAAC,MAAM;AACnD,gBAAgB,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB;AACvE,gBAAgB,WAAW;AAC3B,gBAAgB,qBAAqB;AACrC,gBAAgB,mBAAmB;AACnC,aAAa,CAAC;AACd,YAAY,gBAAgB,GAAG;AAC/B,gBAAgB,QAAQ;AACxB,gBAAgB,cAAc,EAAE,WAAW;AAC3C,gBAAgB,UAAU;AAC1B,aAAa;AACb;AACA,QAAQ,cAAc,GAAG;AACzB,cAAc,IAAI,aAAa,CAAC,kBAAkB,EAAE;AACpD,gBAAgB,IAAI,EAAE,IAAI,YAAY,IAAI,GAAG,IAAI,GAAG,SAAS;AAC7D,gBAAgB,WAAW,EAAE,mBAAmB;AAChD,gBAAgB,WAAW,EAAE,iBAAiB,EAAE,WAAW;AAC3D,gBAAgB,MAAM,EAAE,cAAc;AACtC,gBAAgB,IAAI;AACpB,gBAAgB,GAAG,EAAE,SAAS;AAC9B,gBAAgB,WAAW;AAC3B,aAAa;AACb,cAAc,SAAS;AACvB,QAAQ,MAAM,WAAW,GAAG,IAAI,gBAAgB,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC;AAC5E,QAAQ,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,UAAU,CAAC,CAAC;AACnH,QAAQ,MAAM,sBAAsB,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,KAAK;AACpE,YAAY,gBAAgB,EAAE,cAAc,CAAC,IAAI,CAAC;AAClD,gBAAgB,UAAU,EAAE,UAAU;AACtC,gBAAgB,IAAI,EAAE,IAAI;AAC1B;AACA,gBAAgB,IAAI,KAAK,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC1D,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,MAAM,gCAAgC,GAAG,IAAI,iBAAiB,CAAC,mCAAmC,EAAE;AAC5G,YAAY,IAAI;AAChB,YAAY,UAAU;AACtB,SAAS,CAAC;AACV,QAAQ,MAAM,6BAA6B,GAAG,EAAE;AAChD,QAAQ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,kBAAkB,EAAE,KAAK,EAAE,EAAE;AAC7E,YAAY,6BAA6B,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,kBAAkB,EAAE;AAC5F,gBAAgB,oBAAoB,EAAE,WAAW;AACjD,gBAAgB,sBAAsB;AACtC,gBAAgB,QAAQ,EAAE,gBAAgB;AAC1C,gBAAgB,WAAW,EAAE,eAAe,CAAC,MAAM;AACnD,gBAAgB,MAAM,EAAE,cAAc;AACtC,gBAAgB,QAAQ;AACxB,gBAAgB,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;AACnD,gBAAgB,sBAAsB;AACtC,gBAAgB,UAAU,EAAE,gCAAgC,CAAC,qBAAqB,EAAE;AACpF,gBAAgB,mBAAmB,EAAE,iBAAiB,CAAC,mBAAmB;AAC1E,gBAAgB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC;AACtE,gBAAgB,mBAAmB;AACnC,aAAa,CAAC,CAAC;AACf;AACA,QAAQ,MAAM,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;AACxD,QAAQ,sBAAsB,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC;AACrE,QAAQ,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,QAAQ,CAAC,uBAAuB,EAAE;AAC3E,YAAY,GAAG,gBAAgB;AAC/B,YAAY,WAAW,EAAE,eAAe,CAAC,MAAM;AAC/C,YAAY,cAAc,EAAE,IAAI,WAAW,CAAC,wBAAwB,EAAE,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC;AACvG,SAAS,EAAE;AACX,YAAY,MAAM,EAAE,cAAc;AAClC,YAAY,GAAG,EAAE,QAAQ;AACzB,YAAY,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;AAC/C,YAAY,aAAa,EAAE,gBAAgB,CAAC,UAAU;AACtD,YAAY,WAAW,EAAE,gBAAgB,GAAG,GAAG,GAAG,SAAS;AAC3D,YAAY,eAAe,EAAE;AAC7B,gBAAgB,KAAK,EAAE,eAAe,CAAC,gBAAgB,CAAC,cAAc,CAAC;AACvE,aAAa;AACb,YAAY,mBAAmB,EAAE,mBAAmB;AACpD,SAAS,CAAC;AACV,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE;AACtH,gBAAgB,MAAM,EAAE,cAAc;AACtC,gBAAgB,GAAG,EAAE,QAAQ;AAC7B,gBAAgB,mBAAmB,EAAE,mBAAmB;AACxD,aAAa,CAAC;AACd,YAAY,IAAI,kBAAkB,IAAI,kBAAkB,KAAK,IAAI,EAAE;AACnE,gBAAgB,MAAM,IAAI,cAAc,CAAC,YAAY,CAAC;AACtD,oBAAoB,IAAI,EAAE,OAAO;AACjC,oBAAoB,OAAO,EAAE,CAAC,oCAAoC,EAAE,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAC1G,oBAAoB,QAAQ,EAAE,SAAS;AACvC,iBAAiB,CAAC;AAClB;AACA;AACA,QAAQ,IAAI,qBAAqB,IAAI,cAAc,EAAE;AACrD,YAAY,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,qBAAqB,EAAE,cAAc,CAAC;AAC9F;AACA,QAAQ,MAAM,MAAM,GAAG;AACvB,YAAY,IAAI;AAChB,YAAY,WAAW;AACvB,YAAY,QAAQ;AACpB,SAAS;AACT,QAAQ,OAAO,SAAS,KAAK,WAAW,CAAC;AACzC,cAAc,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM;AACzC,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE;AAC5C,KAAK;AACL,IAAI,MAAM,2BAA2B,GAAG,MAAM,WAAW;AACzD,SAAS,IAAI,CAAC,eAAe;AAC7B,SAAS,KAAK,CAAC,KAAK,IAAI;AACxB,QAAQ,MAAM,WAAW,GAAG,eAAe,EAAE,MAAM;AACnD,QAAQ,IAAI,WAAW,EAAE,OAAO,IAAI,sBAAsB,EAAE;AAC5D,YAAY,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC;AAClD;AACA,aAAa;AACb;AACA,YAAY,cAAc,CAAC,KAAK,CAAC;AACjC;AACA,KAAK,CAAC;AACN,IAAI,MAAM,kBAAkB,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACtE,QAAQ,eAAe,GAAG,OAAO;AACjC,QAAQ,cAAc,GAAG,MAAM;AAC/B,QAAQ,2BAA2B,EAAE;AACrC,KAAK,CAAC;AACN,IAAI,MAAM,OAAO,GAAG,MAAM;AAC1B,QAAQ,sBAAsB,GAAG,IAAI;AACrC,QAAQ,eAAe,EAAE,KAAK,EAAE;AAChC,KAAK;AACL,IAAI,MAAM,QAAQ,GAAG,MAAM;AAC3B,QAAQ,2BAA2B,EAAE;AACrC,KAAK;AACL,IAAI,MAAM,QAAQ,GAAG,CAAC,OAAO,KAAK;AAClC;AACA,QAAQ,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC;AACvC,QAAQ,MAAM,YAAY,GAAG,YAAY;AACzC;AACA,YAAY,IAAI,cAAc,IAAI,qBAAqB,EAAE;AACzD,gBAAgB,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,qBAAqB,EAAE,cAAc,CAAC;AAClG;AACA;AACA,YAAY,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,gBAAgB,EAAE;AACvE,gBAAgB,MAAM,EAAE,cAAc;AACtC,gBAAgB,GAAG,EAAE,QAAQ;AAC7B,gBAAgB,QAAQ,EAAE,gBAAgB,EAAE,QAAQ;AACpD,gBAAgB,mBAAmB,EAAE,mBAAmB;AACxD,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI;AAClC,YAAY,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,CAAC,CAAC;AACzE,SAAS,CAAC;AACV,QAAQ,cAAc;AACtB;AACA;AACA,QAAQ,IAAI,eAAe,CAAC,aAAa,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;AAC7E,KAAK;AACL,IAAI,OAAO;AACX,QAAQ,kBAAkB;AAC1B,QAAQ,OAAO;AACf,QAAQ,QAAQ;AAChB,QAAQ,QAAQ;AAChB,KAAK;AACL,CAAC;AACD,OAAO,CAAC,0BAA0B,GAAG,0BAA0B;AAC/D,MAAM,kBAAkB,GAAG,CAAC,WAAW,KAAK,WAAW;AACvD,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,EAAE,kBAAkB;AACjE,IAAI,WAAW,CAAC,oBAAoB;AACpC,MAAM,sBAAsB,GAAG,CAAC,cAAc,EAAE,IAAI,KAAK;AACzD,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,mBAAmB,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;AAC5F,IAAI,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,KAAK,aAAa;AAClE,IAAI,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,CAAC;AAClD,IAAI,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,UAAU,KAAK,KAAK,GAAG,CAAC,CAAC;AACzF,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,gBAAgB,EAAE;AAC9C,QAAQ,MAAM,IAAI,gBAAgB,CAAC,cAAc,EAAE;AACnD;AACA,CAAC;AACD,MAAM,eAAe,GAAG,CAAC,KAAK,KAAK;AACnC,IAAI,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;AACjF,CAAC;;"}
|
|
1
|
+
{"version":3,"file":"uploadHandlers.js","sources":["../../../../../../../../src/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMultipartUploadHandlers = void 0;\nconst core_1 = require(\"@aws-amplify/core\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst utils_2 = require(\"../../../../utils\");\nconst constants_1 = require(\"../../../../utils/constants\");\nconst StorageError_1 = require(\"../../../../../../errors/StorageError\");\nconst CanceledError_1 = require(\"../../../../../../errors/CanceledError\");\nconst s3data_1 = require(\"../../../../utils/client/s3data\");\nconst userAgent_1 = require(\"../../../../utils/userAgent\");\nconst utils_3 = require(\"../../../../../../utils\");\nconst crc32_1 = require(\"../../../../utils/crc32\");\nconst IntegrityError_1 = require(\"../../../../../../errors/IntegrityError\");\nconst uploadPartExecutor_1 = require(\"./uploadPartExecutor\");\nconst uploadCache_1 = require(\"./uploadCache\");\nconst progressTracker_1 = require(\"./progressTracker\");\nconst initialUpload_1 = require(\"./initialUpload\");\nconst getDataChunker_1 = require(\"./getDataChunker\");\nconst calculatePartSize_1 = require(\"./calculatePartSize\");\n/**\n * Create closure hiding the multipart upload implementation details and expose the upload job and control functions(\n * onPause, onResume, onCancel).\n *\n * @internal\n */\nconst getMultipartUploadHandlers = (uploadDataInput, size) => {\n let resolveCallback;\n let rejectCallback;\n let inProgressUpload;\n let resolvedS3Config;\n let abortController;\n let resolvedAccessLevel;\n let resolvedBucket;\n let resolvedKeyPrefix;\n let resolvedIdentityId;\n let uploadCacheKey;\n let finalKey;\n let expectedBucketOwner;\n // Special flag that differentiates HTTP requests abort error caused by pause() from ones caused by cancel().\n // The former one should NOT cause the upload job to throw, but cancels any pending HTTP requests.\n // This should be replaced by a special abort reason. However,the support of this API is lagged behind.\n let isAbortSignalFromPause = false;\n const { resumableUploadsCache } = uploadDataInput.options ?? {};\n const startUpload = async () => {\n const { options: uploadDataOptions, data } = uploadDataInput;\n const resolvedS3Options = await (0, utils_2.resolveS3ConfigAndInput)(core_1.Amplify, uploadDataInput);\n abortController = new AbortController();\n isAbortSignalFromPause = false;\n resolvedS3Config = resolvedS3Options.s3Config;\n resolvedBucket = resolvedS3Options.bucket;\n resolvedIdentityId = resolvedS3Options.identityId;\n expectedBucketOwner = uploadDataOptions?.expectedBucketOwner;\n const { inputType, objectKey } = (0, utils_2.validateStorageOperationInput)(uploadDataInput, resolvedIdentityId);\n const { contentDisposition, contentEncoding, contentType = 'application/octet-stream', metadata, preventOverwrite, onProgress, } = uploadDataOptions ?? {};\n finalKey = objectKey;\n // Resolve \"key\" specific options\n if (inputType === constants_1.STORAGE_INPUT_KEY) {\n const accessLevel = uploadDataOptions\n ?.accessLevel;\n resolvedKeyPrefix = resolvedS3Options.keyPrefix;\n finalKey = resolvedKeyPrefix + objectKey;\n resolvedAccessLevel = resolveAccessLevel(accessLevel);\n }\n const optionsHash = await (0, crc32_1.calculateContentCRC32)((0, uploadCache_1.serializeUploadOptions)(uploadDataOptions));\n if (!inProgressUpload) {\n const { uploadId, cachedParts, finalCrc32 } = await (0, initialUpload_1.loadOrCreateMultipartUpload)({\n s3Config: resolvedS3Config,\n accessLevel: resolvedAccessLevel,\n bucket: resolvedBucket,\n keyPrefix: resolvedKeyPrefix,\n key: objectKey,\n contentType,\n contentDisposition,\n contentEncoding,\n metadata,\n data,\n size,\n abortSignal: abortController.signal,\n checksumAlgorithm: uploadDataOptions?.checksumAlgorithm,\n optionsHash,\n resumableUploadsCache,\n expectedBucketOwner,\n });\n inProgressUpload = {\n uploadId,\n completedParts: cachedParts,\n finalCrc32,\n };\n }\n uploadCacheKey = size\n ? (0, uploadCache_1.getUploadsCacheKey)({\n file: data instanceof File ? data : undefined,\n accessLevel: resolvedAccessLevel,\n contentType: uploadDataOptions?.contentType,\n bucket: resolvedBucket,\n size,\n key: objectKey,\n optionsHash,\n })\n : undefined;\n const dataChunker = (0, getDataChunker_1.getDataChunker)(data, size);\n const completedPartNumberSet = new Set(inProgressUpload.completedParts.map(({ PartNumber }) => PartNumber));\n const onPartUploadCompletion = (partNumber, eTag, crc32) => {\n inProgressUpload?.completedParts.push({\n PartNumber: partNumber,\n ETag: eTag,\n // TODO: crc32 can always be added once RN also has an implementation\n ...(crc32 ? { ChecksumCRC32: crc32 } : {}),\n });\n };\n const concurrentUploadsProgressTracker = (0, progressTracker_1.getConcurrentUploadsProgressTracker)({\n size,\n onProgress,\n });\n const concurrentUploadPartExecutors = [];\n for (let index = 0; index < constants_1.DEFAULT_QUEUE_SIZE; index++) {\n concurrentUploadPartExecutors.push((0, uploadPartExecutor_1.uploadPartExecutor)({\n dataChunkerGenerator: dataChunker,\n completedPartNumberSet,\n s3Config: resolvedS3Config,\n abortSignal: abortController.signal,\n bucket: resolvedBucket,\n finalKey,\n uploadId: inProgressUpload.uploadId,\n onPartUploadCompletion,\n onProgress: concurrentUploadsProgressTracker.getOnProgressListener(),\n isObjectLockEnabled: resolvedS3Options.isObjectLockEnabled,\n useCRC32Checksum: Boolean(inProgressUpload.finalCrc32),\n expectedBucketOwner,\n }));\n }\n await Promise.all(concurrentUploadPartExecutors);\n validateCompletedParts(inProgressUpload.completedParts, size);\n const { ETag: eTag } = await (0, s3data_1.completeMultipartUpload)({\n ...resolvedS3Config,\n abortSignal: abortController.signal,\n userAgentValue: (0, userAgent_1.getStorageUserAgentValue)(utils_1.StorageAction.UploadData),\n }, {\n Bucket: resolvedBucket,\n Key: finalKey,\n UploadId: inProgressUpload.uploadId,\n ChecksumCRC32: inProgressUpload.finalCrc32,\n ChecksumType: inProgressUpload.finalCrc32 ? 'FULL_OBJECT' : undefined,\n IfNoneMatch: preventOverwrite ? '*' : undefined,\n MultipartUpload: {\n Parts: sortUploadParts(inProgressUpload.completedParts),\n },\n ExpectedBucketOwner: expectedBucketOwner,\n });\n // If full-object CRC32 checksum is NOT enabled, we need to ensure the upload integrity by making extra HEAD call\n // to verify the uploaded object size.\n if (!inProgressUpload.finalCrc32) {\n const { ContentLength: uploadedObjectSize, $metadata } = await (0, s3data_1.headObject)(resolvedS3Config, {\n Bucket: resolvedBucket,\n Key: finalKey,\n ExpectedBucketOwner: expectedBucketOwner,\n });\n if (uploadedObjectSize && uploadedObjectSize !== size) {\n throw new StorageError_1.StorageError({\n name: 'Error',\n message: `Upload failed. Expected object size ${size}, but got ${uploadedObjectSize}.`,\n metadata: $metadata,\n });\n }\n }\n if (resumableUploadsCache && uploadCacheKey) {\n await (0, uploadCache_1.removeCachedUpload)(resumableUploadsCache, uploadCacheKey);\n }\n const result = {\n eTag,\n contentType,\n metadata,\n };\n return inputType === constants_1.STORAGE_INPUT_KEY\n ? { key: objectKey, ...result }\n : { path: objectKey, ...result };\n };\n const startUploadWithResumability = () => startUpload()\n .then(resolveCallback)\n .catch(error => {\n const abortSignal = abortController?.signal;\n if (abortSignal?.aborted && isAbortSignalFromPause) {\n utils_3.logger.debug('upload paused.');\n }\n else {\n // Uncaught errors should be exposed to the users.\n rejectCallback(error);\n }\n });\n const multipartUploadJob = () => new Promise((resolve, reject) => {\n resolveCallback = resolve;\n rejectCallback = reject;\n startUploadWithResumability();\n });\n const onPause = () => {\n isAbortSignalFromPause = true;\n abortController?.abort();\n };\n const onResume = () => {\n startUploadWithResumability();\n };\n const onCancel = (message) => {\n // 1. abort in-flight API requests\n abortController?.abort(message);\n const cancelUpload = async () => {\n // 2. clear upload cache.\n if (uploadCacheKey && resumableUploadsCache) {\n await (0, uploadCache_1.removeCachedUpload)(resumableUploadsCache, uploadCacheKey);\n }\n // 3. clear multipart upload on server side.\n await (0, s3data_1.abortMultipartUpload)(resolvedS3Config, {\n Bucket: resolvedBucket,\n Key: finalKey,\n UploadId: inProgressUpload?.uploadId,\n ExpectedBucketOwner: expectedBucketOwner,\n });\n };\n cancelUpload().catch(e => {\n utils_3.logger.debug('error when cancelling upload task.', e);\n });\n rejectCallback(\n // Internal error that should not be exposed to the users. They should use isCancelError() to check if\n // the error is caused by cancel().\n new CanceledError_1.CanceledError(message ? { message } : undefined));\n };\n return {\n multipartUploadJob,\n onPause,\n onResume,\n onCancel,\n };\n};\nexports.getMultipartUploadHandlers = getMultipartUploadHandlers;\nconst resolveAccessLevel = (accessLevel) => accessLevel ??\n core_1.Amplify.libraryOptions.Storage?.S3?.defaultAccessLevel ??\n constants_1.DEFAULT_ACCESS_LEVEL;\nconst validateCompletedParts = (completedParts, size) => {\n const partsExpected = Math.ceil(size / (0, calculatePartSize_1.calculatePartSize)(size));\n const validPartCount = completedParts.length === partsExpected;\n const sorted = sortUploadParts(completedParts);\n const validPartNumbers = sorted.every((part, index) => part.PartNumber === index + 1);\n if (!validPartCount || !validPartNumbers) {\n throw new IntegrityError_1.IntegrityError();\n }\n};\nconst sortUploadParts = (parts) => {\n return [...parts].sort((partA, partB) => partA.PartNumber - partB.PartNumber);\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -48,13 +48,13 @@ const uploadPartExecutor = async ({ dataChunkerGenerator, completedPartNumberSet
|
|
|
48
48
|
UploadId: uploadId,
|
|
49
49
|
Body: data,
|
|
50
50
|
PartNumber: partNumber,
|
|
51
|
-
ChecksumCRC32: checksumCRC32
|
|
51
|
+
ChecksumCRC32: checksumCRC32,
|
|
52
52
|
ContentMD5: contentMD5,
|
|
53
53
|
ExpectedBucketOwner: expectedBucketOwner,
|
|
54
54
|
});
|
|
55
55
|
transferredBytes += size;
|
|
56
56
|
// eTag will always be set even the S3 model interface marks it as optional.
|
|
57
|
-
onPartUploadCompletion(partNumber, eTag, checksumCRC32
|
|
57
|
+
onPartUploadCompletion(partNumber, eTag, checksumCRC32);
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadPartExecutor.js","sources":["../../../../../../../../src/providers/s3/apis/internal/uploadData/multipart/uploadPartExecutor.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uploadPartExecutor = void 0;\nconst s3data_1 = require(\"../../../../utils/client/s3data\");\nconst utils_1 = require(\"../../../../../../utils\");\nconst crc32_1 = require(\"../../../../utils/crc32\");\nconst utils_2 = require(\"../../../../utils\");\nconst uploadPartExecutor = async ({ dataChunkerGenerator, completedPartNumberSet, s3Config, abortSignal, bucket, finalKey, uploadId, onPartUploadCompletion, onProgress, isObjectLockEnabled, useCRC32Checksum, expectedBucketOwner, }) => {\n let transferredBytes = 0;\n for (const { data, partNumber, size } of dataChunkerGenerator) {\n if (abortSignal.aborted) {\n utils_1.logger.debug('upload executor aborted.');\n break;\n }\n if (completedPartNumberSet.has(partNumber)) {\n utils_1.logger.debug(`part ${partNumber} already uploaded.`);\n transferredBytes += size;\n onProgress?.({\n transferredBytes,\n });\n }\n else {\n // handle cancel error\n let checksumCRC32;\n if (useCRC32Checksum) {\n checksumCRC32 = await (0, crc32_1.calculateContentCRC32)(data);\n }\n const contentMD5 = \n // check if checksum exists. ex: should not exist in react native\n !checksumCRC32 && isObjectLockEnabled\n ? await (0, utils_2.calculateContentMd5)(data)\n : undefined;\n const { ETag: eTag } = await (0, s3data_1.uploadPart)({\n ...s3Config,\n abortSignal,\n onUploadProgress: (event) => {\n const { transferredBytes: currentPartTransferredBytes } = event;\n onProgress?.({\n transferredBytes: transferredBytes + currentPartTransferredBytes,\n });\n },\n }, {\n Bucket: bucket,\n Key: finalKey,\n UploadId: uploadId,\n Body: data,\n PartNumber: partNumber,\n ChecksumCRC32: checksumCRC32
|
|
1
|
+
{"version":3,"file":"uploadPartExecutor.js","sources":["../../../../../../../../src/providers/s3/apis/internal/uploadData/multipart/uploadPartExecutor.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uploadPartExecutor = void 0;\nconst s3data_1 = require(\"../../../../utils/client/s3data\");\nconst utils_1 = require(\"../../../../../../utils\");\nconst crc32_1 = require(\"../../../../utils/crc32\");\nconst utils_2 = require(\"../../../../utils\");\nconst uploadPartExecutor = async ({ dataChunkerGenerator, completedPartNumberSet, s3Config, abortSignal, bucket, finalKey, uploadId, onPartUploadCompletion, onProgress, isObjectLockEnabled, useCRC32Checksum, expectedBucketOwner, }) => {\n let transferredBytes = 0;\n for (const { data, partNumber, size } of dataChunkerGenerator) {\n if (abortSignal.aborted) {\n utils_1.logger.debug('upload executor aborted.');\n break;\n }\n if (completedPartNumberSet.has(partNumber)) {\n utils_1.logger.debug(`part ${partNumber} already uploaded.`);\n transferredBytes += size;\n onProgress?.({\n transferredBytes,\n });\n }\n else {\n // handle cancel error\n let checksumCRC32;\n if (useCRC32Checksum) {\n checksumCRC32 = await (0, crc32_1.calculateContentCRC32)(data);\n }\n const contentMD5 = \n // check if checksum exists. ex: should not exist in react native\n !checksumCRC32 && isObjectLockEnabled\n ? await (0, utils_2.calculateContentMd5)(data)\n : undefined;\n const { ETag: eTag } = await (0, s3data_1.uploadPart)({\n ...s3Config,\n abortSignal,\n onUploadProgress: (event) => {\n const { transferredBytes: currentPartTransferredBytes } = event;\n onProgress?.({\n transferredBytes: transferredBytes + currentPartTransferredBytes,\n });\n },\n }, {\n Bucket: bucket,\n Key: finalKey,\n UploadId: uploadId,\n Body: data,\n PartNumber: partNumber,\n ChecksumCRC32: checksumCRC32,\n ContentMD5: contentMD5,\n ExpectedBucketOwner: expectedBucketOwner,\n });\n transferredBytes += size;\n // eTag will always be set even the S3 model interface marks it as optional.\n onPartUploadCompletion(partNumber, eTag, checksumCRC32);\n }\n }\n};\nexports.uploadPartExecutor = uploadPartExecutor;\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,OAAO,CAAC,kBAAkB,GAAG,MAAM;AACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,iCAAiC,CAAC;AAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,yBAAyB,CAAC;AAClD,MAAM,OAAO,GAAG,OAAO,CAAC,yBAAyB,CAAC;AAClD,MAAM,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAC5C,MAAM,kBAAkB,GAAG,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,sBAAsB,EAAE,UAAU,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,GAAG,KAAK;AAC3O,IAAI,IAAI,gBAAgB,GAAG,CAAC;AAC5B,IAAI,KAAK,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,oBAAoB,EAAE;AACnE,QAAQ,IAAI,WAAW,CAAC,OAAO,EAAE;AACjC,YAAY,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC;AAC5D,YAAY;AACZ;AACA,QAAQ,IAAI,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACpD,YAAY,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC;AACxE,YAAY,gBAAgB,IAAI,IAAI;AACpC,YAAY,UAAU,GAAG;AACzB,gBAAgB,gBAAgB;AAChC,aAAa,CAAC;AACd;AACA,aAAa;AACb;AACA,YAAY,IAAI,aAAa;AAC7B,YAAY,IAAI,gBAAgB,EAAE;AAClC,gBAAgB,aAAa,GAAG,MAAM,IAAI,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC;AAC9E;AACA,YAAY,MAAM,UAAU;AAC5B;AACA,YAAY,CAAC,aAAa,IAAI;AAC9B,kBAAkB,MAAM,IAAI,OAAO,CAAC,mBAAmB,EAAE,IAAI;AAC7D,kBAAkB,SAAS;AAC3B,YAAY,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE;AAClE,gBAAgB,GAAG,QAAQ;AAC3B,gBAAgB,WAAW;AAC3B,gBAAgB,gBAAgB,EAAE,CAAC,KAAK,KAAK;AAC7C,oBAAoB,MAAM,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,GAAG,KAAK;AACnF,oBAAoB,UAAU,GAAG;AACjC,wBAAwB,gBAAgB,EAAE,gBAAgB,GAAG,2BAA2B;AACxF,qBAAqB,CAAC;AACtB,iBAAiB;AACjB,aAAa,EAAE;AACf,gBAAgB,MAAM,EAAE,MAAM;AAC9B,gBAAgB,GAAG,EAAE,QAAQ;AAC7B,gBAAgB,QAAQ,EAAE,QAAQ;AAClC,gBAAgB,IAAI,EAAE,IAAI;AAC1B,gBAAgB,UAAU,EAAE,UAAU;AACtC,gBAAgB,aAAa,EAAE,aAAa;AAC5C,gBAAgB,UAAU,EAAE,UAAU;AACtC,gBAAgB,mBAAmB,EAAE,mBAAmB;AACxD,aAAa,CAAC;AACd,YAAY,gBAAgB,IAAI,IAAI;AACpC;AACA,YAAY,sBAAsB,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC;AACnE;AACA;AACA,CAAC;AACD,OAAO,CAAC,kBAAkB,GAAG,kBAAkB;;"}
|
|
@@ -46,7 +46,7 @@ const putObjectJob = (uploadDataInput, abortSignal, totalLength) => async () =>
|
|
|
46
46
|
ContentEncoding: contentEncoding,
|
|
47
47
|
Metadata: metadata,
|
|
48
48
|
ContentMD5: contentMD5,
|
|
49
|
-
ChecksumCRC32: checksumCRC32
|
|
49
|
+
ChecksumCRC32: checksumCRC32,
|
|
50
50
|
ExpectedBucketOwner: expectedBucketOwner,
|
|
51
51
|
IfNoneMatch: preventOverwrite ? '*' : undefined,
|
|
52
52
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"putObjectJob.js","sources":["../../../../../../../src/providers/s3/apis/internal/uploadData/putObjectJob.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.putObjectJob = void 0;\nconst core_1 = require(\"@aws-amplify/core\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst utils_2 = require(\"../../../utils\");\nconst s3data_1 = require(\"../../../utils/client/s3data\");\nconst userAgent_1 = require(\"../../../utils/userAgent\");\nconst constants_1 = require(\"../../../utils/constants\");\nconst crc32_1 = require(\"../../../utils/crc32\");\nconst constructContentDisposition_1 = require(\"../../../utils/constructContentDisposition\");\n/**\n * Get a function the returns a promise to call putObject API to S3.\n *\n * @internal\n */\nconst putObjectJob = (uploadDataInput, abortSignal, totalLength) => async () => {\n const { options: uploadDataOptions, data } = uploadDataInput;\n const { bucket, keyPrefix, s3Config, isObjectLockEnabled, identityId } = await (0, utils_2.resolveS3ConfigAndInput)(core_1.Amplify, uploadDataInput);\n const { inputType, objectKey } = (0, utils_2.validateStorageOperationInput)(uploadDataInput, identityId);\n (0, utils_2.validateBucketOwnerID)(uploadDataOptions?.expectedBucketOwner);\n const finalKey = inputType === constants_1.STORAGE_INPUT_KEY ? keyPrefix + objectKey : objectKey;\n const { contentDisposition, contentEncoding, contentType = 'application/octet-stream', preventOverwrite, metadata, checksumAlgorithm, onProgress, expectedBucketOwner, } = uploadDataOptions ?? {};\n const checksumCRC32 = checksumAlgorithm === constants_1.CHECKSUM_ALGORITHM_CRC32\n ? await (0, crc32_1.calculateContentCRC32)(data)\n : undefined;\n const contentMD5 = \n // check if checksum exists. ex: should not exist in react native\n !checksumCRC32 && isObjectLockEnabled\n ? await (0, utils_2.calculateContentMd5)(data)\n : undefined;\n const { ETag: eTag, VersionId: versionId } = await (0, s3data_1.putObject)({\n ...s3Config,\n abortSignal,\n onUploadProgress: onProgress,\n userAgentValue: (0, userAgent_1.getStorageUserAgentValue)(utils_1.StorageAction.UploadData),\n }, {\n Bucket: bucket,\n Key: finalKey,\n Body: data,\n ContentType: contentType,\n ContentDisposition: (0, constructContentDisposition_1.constructContentDisposition)(contentDisposition),\n ContentEncoding: contentEncoding,\n Metadata: metadata,\n ContentMD5: contentMD5,\n ChecksumCRC32: checksumCRC32
|
|
1
|
+
{"version":3,"file":"putObjectJob.js","sources":["../../../../../../../src/providers/s3/apis/internal/uploadData/putObjectJob.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.putObjectJob = void 0;\nconst core_1 = require(\"@aws-amplify/core\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst utils_2 = require(\"../../../utils\");\nconst s3data_1 = require(\"../../../utils/client/s3data\");\nconst userAgent_1 = require(\"../../../utils/userAgent\");\nconst constants_1 = require(\"../../../utils/constants\");\nconst crc32_1 = require(\"../../../utils/crc32\");\nconst constructContentDisposition_1 = require(\"../../../utils/constructContentDisposition\");\n/**\n * Get a function the returns a promise to call putObject API to S3.\n *\n * @internal\n */\nconst putObjectJob = (uploadDataInput, abortSignal, totalLength) => async () => {\n const { options: uploadDataOptions, data } = uploadDataInput;\n const { bucket, keyPrefix, s3Config, isObjectLockEnabled, identityId } = await (0, utils_2.resolveS3ConfigAndInput)(core_1.Amplify, uploadDataInput);\n const { inputType, objectKey } = (0, utils_2.validateStorageOperationInput)(uploadDataInput, identityId);\n (0, utils_2.validateBucketOwnerID)(uploadDataOptions?.expectedBucketOwner);\n const finalKey = inputType === constants_1.STORAGE_INPUT_KEY ? keyPrefix + objectKey : objectKey;\n const { contentDisposition, contentEncoding, contentType = 'application/octet-stream', preventOverwrite, metadata, checksumAlgorithm, onProgress, expectedBucketOwner, } = uploadDataOptions ?? {};\n const checksumCRC32 = checksumAlgorithm === constants_1.CHECKSUM_ALGORITHM_CRC32\n ? await (0, crc32_1.calculateContentCRC32)(data)\n : undefined;\n const contentMD5 = \n // check if checksum exists. ex: should not exist in react native\n !checksumCRC32 && isObjectLockEnabled\n ? await (0, utils_2.calculateContentMd5)(data)\n : undefined;\n const { ETag: eTag, VersionId: versionId } = await (0, s3data_1.putObject)({\n ...s3Config,\n abortSignal,\n onUploadProgress: onProgress,\n userAgentValue: (0, userAgent_1.getStorageUserAgentValue)(utils_1.StorageAction.UploadData),\n }, {\n Bucket: bucket,\n Key: finalKey,\n Body: data,\n ContentType: contentType,\n ContentDisposition: (0, constructContentDisposition_1.constructContentDisposition)(contentDisposition),\n ContentEncoding: contentEncoding,\n Metadata: metadata,\n ContentMD5: contentMD5,\n ChecksumCRC32: checksumCRC32,\n ExpectedBucketOwner: expectedBucketOwner,\n IfNoneMatch: preventOverwrite ? '*' : undefined,\n });\n const result = {\n eTag,\n versionId,\n contentType,\n metadata,\n size: totalLength,\n };\n return inputType === constants_1.STORAGE_INPUT_KEY\n ? { key: objectKey, ...result }\n : { path: objectKey, ...result };\n};\nexports.putObjectJob = putObjectJob;\n"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ const completeMultipartUploadSerializer = async (input, endpoint) => {
|
|
|
19
19
|
'content-type': 'application/xml',
|
|
20
20
|
...(0, utils_2.assignStringVariables)({
|
|
21
21
|
'x-amz-checksum-crc32': input.ChecksumCRC32,
|
|
22
|
+
'x-amz-checksum-type': input.ChecksumType,
|
|
22
23
|
'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,
|
|
23
24
|
'If-None-Match': input.IfNoneMatch,
|
|
24
25
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completeMultipartUpload.js","sources":["../../../../../../../src/providers/s3/utils/client/s3data/completeMultipartUpload.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.completeMultipartUpload = void 0;\nconst aws_client_utils_1 = require(\"@aws-amplify/core/internals/aws-client-utils\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst composers_1 = require(\"@aws-amplify/core/internals/aws-client-utils/composers\");\nconst utils_2 = require(\"../utils\");\nconst validateObjectUrl_1 = require(\"../../validateObjectUrl\");\nconst validateMultipartUploadXML_1 = require(\"../../validateMultipartUploadXML\");\nconst base_1 = require(\"./base\");\nconst INVALID_PARAMETER_ERROR_MSG = 'Invalid parameter for CompleteMultipartUpload API';\nconst MISSING_ETAG_ERROR_MSG = 'ETag missing from multipart upload';\nconst MISSING_ETAG_ERROR_SUGGESTION = 'Please ensure S3 bucket CORS configuration includes ETag as part of its `ExposeHeaders` element';\nconst completeMultipartUploadSerializer = async (input, endpoint) => {\n const headers = {\n 'content-type': 'application/xml',\n ...(0, utils_2.assignStringVariables)({\n 'x-amz-checksum-crc32': input.ChecksumCRC32,\n 'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,\n 'If-None-Match': input.IfNoneMatch,\n }),\n };\n const url = new utils_1.AmplifyUrl(endpoint.url.toString());\n (0, utils_2.validateS3RequiredParameter)(!!input.Key, 'Key');\n url.pathname = (0, utils_2.serializePathnameObjectKey)(url, input.Key);\n (0, utils_2.validateS3RequiredParameter)(!!input.UploadId, 'UploadId');\n url.search = new utils_1.AmplifyUrlSearchParams({\n uploadId: input.UploadId,\n }).toString();\n (0, utils_2.validateS3RequiredParameter)(!!input.MultipartUpload, 'MultipartUpload');\n (0, validateObjectUrl_1.validateObjectUrl)({\n bucketName: input.Bucket,\n key: input.Key,\n objectURL: url,\n });\n const xml = serializeCompletedMultipartUpload(input.MultipartUpload);\n (0, validateMultipartUploadXML_1.validateMultipartUploadXML)(input.MultipartUpload, xml);\n return {\n method: 'POST',\n headers,\n url,\n body: '<?xml version=\"1.0\" encoding=\"UTF-8\"?>' + xml,\n };\n};\nconst serializeCompletedMultipartUpload = (input) => {\n if (!input.Parts?.length) {\n throw new Error(`${INVALID_PARAMETER_ERROR_MSG}: ${JSON.stringify(input)}`);\n }\n return `<CompleteMultipartUpload xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">${input.Parts.map(serializeCompletedPartList).join('')}</CompleteMultipartUpload>`;\n};\nconst serializeCompletedPartList = (input) => {\n if (input.PartNumber == null) {\n throw new Error(`${INVALID_PARAMETER_ERROR_MSG}: ${JSON.stringify(input)}`);\n }\n if (!input.ETag) {\n throw new Error(`${MISSING_ETAG_ERROR_MSG}: ${JSON.stringify(input)}. ${MISSING_ETAG_ERROR_SUGGESTION}`);\n }\n const eTag = `<ETag>${input.ETag}</ETag>`;\n const partNumber = `<PartNumber>${input.PartNumber}</PartNumber>`;\n const checksumCRC32 = input.ChecksumCRC32\n ? `<ChecksumCRC32>${input.ChecksumCRC32}</ChecksumCRC32>`\n : '';\n return `<Part>${eTag}${partNumber}${checksumCRC32}</Part>`;\n};\n/**\n * Parse CompleteMultipartUpload API response payload, which may be empty or error indicating internal\n * server error, even when the status code is 200.\n *\n * Ref: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html#API_CompleteMultipartUpload_Example_4\n */\nconst parseXmlBodyOrThrow = async (response) => {\n const parsed = await (0, utils_2.parseXmlBody)(response); // Handles empty body case\n if (parsed.Code !== undefined && parsed.Message !== undefined) {\n const error = await (0, base_1.parseXmlError)({\n ...response,\n statusCode: 500, // To workaround the >=300 status code check common to other APIs.\n });\n error.$metadata.httpStatusCode = response.statusCode;\n throw (0, utils_2.buildStorageServiceError)(error);\n }\n return parsed;\n};\nconst completeMultipartUploadDeserializer = async (response) => {\n if (response.statusCode >= 300) {\n // error is always set when statusCode >= 300\n throw (0, utils_2.buildStorageServiceError)((await (0, base_1.parseXmlError)(response)));\n }\n else {\n const parsed = await parseXmlBodyOrThrow(response);\n const contents = (0, utils_2.map)(parsed, {\n ETag: 'ETag',\n Key: 'Key',\n Location: 'Location',\n });\n return {\n $metadata: (0, aws_client_utils_1.parseMetadata)(response),\n ...contents,\n };\n }\n};\n// CompleteMultiPartUpload API returns 200 status code with empty body or error message.\n// This indicates internal server error after the response has been sent to the client.\n// Ref: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html#API_CompleteMultipartUpload_Example_4\nconst retryWhenErrorWith200StatusCode = async (response, error, middlewareContext) => {\n if (!response) {\n return { retryable: false };\n }\n if (response.statusCode === 200) {\n if (!response.body) {\n return { retryable: true };\n }\n const parsed = await (0, utils_2.parseXmlBody)(response);\n if (parsed.Code !== undefined && parsed.Message !== undefined) {\n return { retryable: true };\n }\n return { retryable: false };\n }\n return (0, base_1.retryDecider)(response, error, middlewareContext);\n};\nexports.completeMultipartUpload = (0, composers_1.composeServiceApi)(utils_2.s3TransferHandler, completeMultipartUploadSerializer, completeMultipartUploadDeserializer, {\n ...base_1.defaultConfig,\n responseType: 'text',\n retryDecider: retryWhenErrorWith200StatusCode,\n});\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"completeMultipartUpload.js","sources":["../../../../../../../src/providers/s3/utils/client/s3data/completeMultipartUpload.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.completeMultipartUpload = void 0;\nconst aws_client_utils_1 = require(\"@aws-amplify/core/internals/aws-client-utils\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst composers_1 = require(\"@aws-amplify/core/internals/aws-client-utils/composers\");\nconst utils_2 = require(\"../utils\");\nconst validateObjectUrl_1 = require(\"../../validateObjectUrl\");\nconst validateMultipartUploadXML_1 = require(\"../../validateMultipartUploadXML\");\nconst base_1 = require(\"./base\");\nconst INVALID_PARAMETER_ERROR_MSG = 'Invalid parameter for CompleteMultipartUpload API';\nconst MISSING_ETAG_ERROR_MSG = 'ETag missing from multipart upload';\nconst MISSING_ETAG_ERROR_SUGGESTION = 'Please ensure S3 bucket CORS configuration includes ETag as part of its `ExposeHeaders` element';\nconst completeMultipartUploadSerializer = async (input, endpoint) => {\n const headers = {\n 'content-type': 'application/xml',\n ...(0, utils_2.assignStringVariables)({\n 'x-amz-checksum-crc32': input.ChecksumCRC32,\n 'x-amz-checksum-type': input.ChecksumType,\n 'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,\n 'If-None-Match': input.IfNoneMatch,\n }),\n };\n const url = new utils_1.AmplifyUrl(endpoint.url.toString());\n (0, utils_2.validateS3RequiredParameter)(!!input.Key, 'Key');\n url.pathname = (0, utils_2.serializePathnameObjectKey)(url, input.Key);\n (0, utils_2.validateS3RequiredParameter)(!!input.UploadId, 'UploadId');\n url.search = new utils_1.AmplifyUrlSearchParams({\n uploadId: input.UploadId,\n }).toString();\n (0, utils_2.validateS3RequiredParameter)(!!input.MultipartUpload, 'MultipartUpload');\n (0, validateObjectUrl_1.validateObjectUrl)({\n bucketName: input.Bucket,\n key: input.Key,\n objectURL: url,\n });\n const xml = serializeCompletedMultipartUpload(input.MultipartUpload);\n (0, validateMultipartUploadXML_1.validateMultipartUploadXML)(input.MultipartUpload, xml);\n return {\n method: 'POST',\n headers,\n url,\n body: '<?xml version=\"1.0\" encoding=\"UTF-8\"?>' + xml,\n };\n};\nconst serializeCompletedMultipartUpload = (input) => {\n if (!input.Parts?.length) {\n throw new Error(`${INVALID_PARAMETER_ERROR_MSG}: ${JSON.stringify(input)}`);\n }\n return `<CompleteMultipartUpload xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">${input.Parts.map(serializeCompletedPartList).join('')}</CompleteMultipartUpload>`;\n};\nconst serializeCompletedPartList = (input) => {\n if (input.PartNumber == null) {\n throw new Error(`${INVALID_PARAMETER_ERROR_MSG}: ${JSON.stringify(input)}`);\n }\n if (!input.ETag) {\n throw new Error(`${MISSING_ETAG_ERROR_MSG}: ${JSON.stringify(input)}. ${MISSING_ETAG_ERROR_SUGGESTION}`);\n }\n const eTag = `<ETag>${input.ETag}</ETag>`;\n const partNumber = `<PartNumber>${input.PartNumber}</PartNumber>`;\n const checksumCRC32 = input.ChecksumCRC32\n ? `<ChecksumCRC32>${input.ChecksumCRC32}</ChecksumCRC32>`\n : '';\n return `<Part>${eTag}${partNumber}${checksumCRC32}</Part>`;\n};\n/**\n * Parse CompleteMultipartUpload API response payload, which may be empty or error indicating internal\n * server error, even when the status code is 200.\n *\n * Ref: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html#API_CompleteMultipartUpload_Example_4\n */\nconst parseXmlBodyOrThrow = async (response) => {\n const parsed = await (0, utils_2.parseXmlBody)(response); // Handles empty body case\n if (parsed.Code !== undefined && parsed.Message !== undefined) {\n const error = await (0, base_1.parseXmlError)({\n ...response,\n statusCode: 500, // To workaround the >=300 status code check common to other APIs.\n });\n error.$metadata.httpStatusCode = response.statusCode;\n throw (0, utils_2.buildStorageServiceError)(error);\n }\n return parsed;\n};\nconst completeMultipartUploadDeserializer = async (response) => {\n if (response.statusCode >= 300) {\n // error is always set when statusCode >= 300\n throw (0, utils_2.buildStorageServiceError)((await (0, base_1.parseXmlError)(response)));\n }\n else {\n const parsed = await parseXmlBodyOrThrow(response);\n const contents = (0, utils_2.map)(parsed, {\n ETag: 'ETag',\n Key: 'Key',\n Location: 'Location',\n });\n return {\n $metadata: (0, aws_client_utils_1.parseMetadata)(response),\n ...contents,\n };\n }\n};\n// CompleteMultiPartUpload API returns 200 status code with empty body or error message.\n// This indicates internal server error after the response has been sent to the client.\n// Ref: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html#API_CompleteMultipartUpload_Example_4\nconst retryWhenErrorWith200StatusCode = async (response, error, middlewareContext) => {\n if (!response) {\n return { retryable: false };\n }\n if (response.statusCode === 200) {\n if (!response.body) {\n return { retryable: true };\n }\n const parsed = await (0, utils_2.parseXmlBody)(response);\n if (parsed.Code !== undefined && parsed.Message !== undefined) {\n return { retryable: true };\n }\n return { retryable: false };\n }\n return (0, base_1.retryDecider)(response, error, middlewareContext);\n};\nexports.completeMultipartUpload = (0, composers_1.composeServiceApi)(utils_2.s3TransferHandler, completeMultipartUploadSerializer, completeMultipartUploadDeserializer, {\n ...base_1.defaultConfig,\n responseType: 'text',\n retryDecider: retryWhenErrorWith200StatusCode,\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@ const createMultipartUploadSerializer = async (input, endpoint) => {
|
|
|
15
15
|
...(await (0, utils_2.serializeObjectConfigsToHeaders)(input)),
|
|
16
16
|
...(0, utils_2.assignStringVariables)({
|
|
17
17
|
'x-amz-checksum-algorithm': input.ChecksumAlgorithm,
|
|
18
|
+
'x-amz-checksum-type': input.ChecksumType,
|
|
18
19
|
'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,
|
|
19
20
|
}),
|
|
20
21
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMultipartUpload.js","sources":["../../../../../../../src/providers/s3/utils/client/s3data/createMultipartUpload.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createMultipartUpload = void 0;\nconst aws_client_utils_1 = require(\"@aws-amplify/core/internals/aws-client-utils\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst composers_1 = require(\"@aws-amplify/core/internals/aws-client-utils/composers\");\nconst utils_2 = require(\"../utils\");\nconst validateObjectUrl_1 = require(\"../../validateObjectUrl\");\nconst base_1 = require(\"./base\");\nconst createMultipartUploadSerializer = async (input, endpoint) => {\n const headers = {\n ...(await (0, utils_2.serializeObjectConfigsToHeaders)(input)),\n ...(0, utils_2.assignStringVariables)({\n 'x-amz-checksum-algorithm': input.ChecksumAlgorithm,\n 'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,\n }),\n };\n const url = new utils_1.AmplifyUrl(endpoint.url.toString());\n (0, utils_2.validateS3RequiredParameter)(!!input.Key, 'Key');\n url.pathname = (0, utils_2.serializePathnameObjectKey)(url, input.Key);\n url.search = 'uploads';\n (0, validateObjectUrl_1.validateObjectUrl)({\n bucketName: input.Bucket,\n key: input.Key,\n objectURL: url,\n });\n return {\n method: 'POST',\n headers,\n url,\n };\n};\nconst createMultipartUploadDeserializer = async (response) => {\n if (response.statusCode >= 300) {\n // error is always set when statusCode >= 300\n throw (0, utils_2.buildStorageServiceError)((await (0, base_1.parseXmlError)(response)));\n }\n else {\n const parsed = await (0, utils_2.parseXmlBody)(response);\n const contents = (0, utils_2.map)(parsed, {\n UploadId: 'UploadId',\n });\n return {\n $metadata: (0, aws_client_utils_1.parseMetadata)(response),\n ...contents,\n };\n }\n};\nexports.createMultipartUpload = (0, composers_1.composeServiceApi)(utils_2.s3TransferHandler, createMultipartUploadSerializer, createMultipartUploadDeserializer, { ...base_1.defaultConfig, responseType: 'text' });\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,OAAO,CAAC,qBAAqB,GAAG,MAAM;AACtC,MAAM,kBAAkB,GAAG,OAAO,CAAC,8CAA8C,CAAC;AAClF,MAAM,OAAO,GAAG,OAAO,CAAC,mCAAmC,CAAC;AAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,wDAAwD,CAAC;AACrF,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;AACnC,MAAM,mBAAmB,GAAG,OAAO,CAAC,yBAAyB,CAAC;AAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;AAChC,MAAM,+BAA+B,GAAG,OAAO,KAAK,EAAE,QAAQ,KAAK;AACnE,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,IAAI,MAAM,IAAI,OAAO,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;AACtE,QAAQ,GAAG,IAAI,OAAO,CAAC,qBAAqB,EAAE;AAC9C,YAAY,0BAA0B,EAAE,KAAK,CAAC,iBAAiB;AAC/D,YAAY,6BAA6B,EAAE,KAAK,CAAC,mBAAmB;AACpE,SAAS,CAAC;AACV,KAAK;AACL,IAAI,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;AAC/D,IAAI,IAAI,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;AAChE,IAAI,GAAG,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,0BAA0B,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;AAC1E,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS;AAC1B,IAAI,IAAI,mBAAmB,CAAC,iBAAiB,EAAE;AAC/C,QAAQ,UAAU,EAAE,KAAK,CAAC,MAAM;AAChC,QAAQ,GAAG,EAAE,KAAK,CAAC,GAAG;AACtB,QAAQ,SAAS,EAAE,GAAG;AACtB,KAAK,CAAC;AACN,IAAI,OAAO;AACX,QAAQ,MAAM,EAAE,MAAM;AACtB,QAAQ,OAAO;AACf,QAAQ,GAAG;AACX,KAAK;AACL,CAAC;AACD,MAAM,iCAAiC,GAAG,OAAO,QAAQ,KAAK;AAC9D,IAAI,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE;AACpC;AACA,QAAQ,MAAM,IAAI,OAAO,CAAC,wBAAwB,GAAG,MAAM,IAAI,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE;AAChG;AACA,SAAS;AACT,QAAQ,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC;AAChE,QAAQ,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE;AAClD,YAAY,QAAQ,EAAE,UAAU;AAChC,SAAS,CAAC;AACV,QAAQ,OAAO;AACf,YAAY,SAAS,EAAE,IAAI,kBAAkB,CAAC,aAAa,EAAE,QAAQ,CAAC;AACtE,YAAY,GAAG,QAAQ;AACvB,SAAS;AACT;AACA,CAAC;AACD,OAAO,CAAC,qBAAqB,GAAG,IAAI,WAAW,CAAC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,EAAE,GAAG,MAAM,CAAC,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;;"}
|
|
1
|
+
{"version":3,"file":"createMultipartUpload.js","sources":["../../../../../../../src/providers/s3/utils/client/s3data/createMultipartUpload.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createMultipartUpload = void 0;\nconst aws_client_utils_1 = require(\"@aws-amplify/core/internals/aws-client-utils\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst composers_1 = require(\"@aws-amplify/core/internals/aws-client-utils/composers\");\nconst utils_2 = require(\"../utils\");\nconst validateObjectUrl_1 = require(\"../../validateObjectUrl\");\nconst base_1 = require(\"./base\");\nconst createMultipartUploadSerializer = async (input, endpoint) => {\n const headers = {\n ...(await (0, utils_2.serializeObjectConfigsToHeaders)(input)),\n ...(0, utils_2.assignStringVariables)({\n 'x-amz-checksum-algorithm': input.ChecksumAlgorithm,\n 'x-amz-checksum-type': input.ChecksumType,\n 'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,\n }),\n };\n const url = new utils_1.AmplifyUrl(endpoint.url.toString());\n (0, utils_2.validateS3RequiredParameter)(!!input.Key, 'Key');\n url.pathname = (0, utils_2.serializePathnameObjectKey)(url, input.Key);\n url.search = 'uploads';\n (0, validateObjectUrl_1.validateObjectUrl)({\n bucketName: input.Bucket,\n key: input.Key,\n objectURL: url,\n });\n return {\n method: 'POST',\n headers,\n url,\n };\n};\nconst createMultipartUploadDeserializer = async (response) => {\n if (response.statusCode >= 300) {\n // error is always set when statusCode >= 300\n throw (0, utils_2.buildStorageServiceError)((await (0, base_1.parseXmlError)(response)));\n }\n else {\n const parsed = await (0, utils_2.parseXmlBody)(response);\n const contents = (0, utils_2.map)(parsed, {\n UploadId: 'UploadId',\n });\n return {\n $metadata: (0, aws_client_utils_1.parseMetadata)(response),\n ...contents,\n };\n }\n};\nexports.createMultipartUpload = (0, composers_1.composeServiceApi)(utils_2.s3TransferHandler, createMultipartUploadSerializer, createMultipartUploadDeserializer, { ...base_1.defaultConfig, responseType: 'text' });\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,OAAO,CAAC,qBAAqB,GAAG,MAAM;AACtC,MAAM,kBAAkB,GAAG,OAAO,CAAC,8CAA8C,CAAC;AAClF,MAAM,OAAO,GAAG,OAAO,CAAC,mCAAmC,CAAC;AAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,wDAAwD,CAAC;AACrF,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;AACnC,MAAM,mBAAmB,GAAG,OAAO,CAAC,yBAAyB,CAAC;AAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;AAChC,MAAM,+BAA+B,GAAG,OAAO,KAAK,EAAE,QAAQ,KAAK;AACnE,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,IAAI,MAAM,IAAI,OAAO,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;AACtE,QAAQ,GAAG,IAAI,OAAO,CAAC,qBAAqB,EAAE;AAC9C,YAAY,0BAA0B,EAAE,KAAK,CAAC,iBAAiB;AAC/D,YAAY,qBAAqB,EAAE,KAAK,CAAC,YAAY;AACrD,YAAY,6BAA6B,EAAE,KAAK,CAAC,mBAAmB;AACpE,SAAS,CAAC;AACV,KAAK;AACL,IAAI,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;AAC/D,IAAI,IAAI,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;AAChE,IAAI,GAAG,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,0BAA0B,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;AAC1E,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS;AAC1B,IAAI,IAAI,mBAAmB,CAAC,iBAAiB,EAAE;AAC/C,QAAQ,UAAU,EAAE,KAAK,CAAC,MAAM;AAChC,QAAQ,GAAG,EAAE,KAAK,CAAC,GAAG;AACtB,QAAQ,SAAS,EAAE,GAAG;AACtB,KAAK,CAAC;AACN,IAAI,OAAO;AACX,QAAQ,MAAM,EAAE,MAAM;AACtB,QAAQ,OAAO;AACf,QAAQ,GAAG;AACX,KAAK;AACL,CAAC;AACD,MAAM,iCAAiC,GAAG,OAAO,QAAQ,KAAK;AAC9D,IAAI,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE;AACpC;AACA,QAAQ,MAAM,IAAI,OAAO,CAAC,wBAAwB,GAAG,MAAM,IAAI,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE;AAChG;AACA,SAAS;AACT,QAAQ,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC;AAChE,QAAQ,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE;AAClD,YAAY,QAAQ,EAAE,UAAU;AAChC,SAAS,CAAC;AACV,QAAQ,OAAO;AACf,YAAY,SAAS,EAAE,IAAI,kBAAkB,CAAC,aAAa,EAAE,QAAQ,CAAC;AACtE,YAAY,GAAG,QAAQ;AACvB,SAAS;AACT;AACA,CAAC;AACD,OAAO,CAAC,qBAAqB,GAAG,IAAI,WAAW,CAAC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,EAAE,GAAG,MAAM,CAAC,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;;"}
|
|
@@ -53,6 +53,7 @@ const getObjectDeserializer = async (response) => {
|
|
|
53
53
|
ChecksumCRC32C: 'x-amz-checksum-crc32c',
|
|
54
54
|
ChecksumSHA1: 'x-amz-checksum-sha1',
|
|
55
55
|
ChecksumSHA256: 'x-amz-checksum-sha256',
|
|
56
|
+
ChecksumType: 'x-amz-checksum-type',
|
|
56
57
|
MissingMeta: ['x-amz-missing-meta', utils_2.deserializeNumber],
|
|
57
58
|
VersionId: 'x-amz-version-id',
|
|
58
59
|
CacheControl: 'cache-control',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getObject.js","sources":["../../../../../../../src/providers/s3/utils/client/s3data/getObject.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPresignedGetObjectUrl = exports.getObject = void 0;\nconst aws_client_utils_1 = require(\"@aws-amplify/core/internals/aws-client-utils\");\nconst composers_1 = require(\"@aws-amplify/core/internals/aws-client-utils/composers\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst utils_2 = require(\"../utils\");\nconst validateObjectUrl_1 = require(\"../../validateObjectUrl\");\nconst base_1 = require(\"./base\");\nconst USER_AGENT_HEADER = 'x-amz-user-agent';\nconst getObjectSerializer = async (input, endpoint) => {\n const url = new utils_1.AmplifyUrl(endpoint.url.toString());\n (0, utils_2.validateS3RequiredParameter)(!!input.Key, 'Key');\n url.pathname = (0, utils_2.serializePathnameObjectKey)(url, input.Key);\n url.search = new utils_1.AmplifyUrlSearchParams({\n 'x-id': 'GetObject',\n }).toString();\n (0, validateObjectUrl_1.validateObjectUrl)({\n bucketName: input.Bucket,\n key: input.Key,\n objectURL: url,\n });\n return {\n method: 'GET',\n headers: {\n ...(input.Range && { Range: input.Range }),\n ...(0, utils_2.assignStringVariables)({\n 'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,\n }),\n },\n url,\n };\n};\nconst getObjectDeserializer = async (response) => {\n if (response.statusCode >= 300) {\n // error is always set when statusCode >= 300\n throw (0, utils_2.buildStorageServiceError)((await (0, base_1.parseXmlError)(response)));\n }\n else {\n return {\n ...(0, utils_2.map)(response.headers, {\n DeleteMarker: ['x-amz-delete-marker', utils_2.deserializeBoolean],\n AcceptRanges: 'accept-ranges',\n Expiration: 'x-amz-expiration',\n Restore: 'x-amz-restore',\n LastModified: ['last-modified', utils_2.deserializeTimestamp],\n ContentLength: ['content-length', utils_2.deserializeNumber],\n ETag: 'etag',\n ChecksumCRC32: 'x-amz-checksum-crc32',\n ChecksumCRC32C: 'x-amz-checksum-crc32c',\n ChecksumSHA1: 'x-amz-checksum-sha1',\n ChecksumSHA256: 'x-amz-checksum-sha256',\n MissingMeta: ['x-amz-missing-meta', utils_2.deserializeNumber],\n VersionId: 'x-amz-version-id',\n CacheControl: 'cache-control',\n ContentDisposition: 'content-disposition',\n ContentEncoding: 'content-encoding',\n ContentLanguage: 'content-language',\n ContentRange: 'content-range',\n ContentType: 'content-type',\n Expires: ['expires', utils_2.deserializeTimestamp],\n WebsiteRedirectLocation: 'x-amz-website-redirect-location',\n ServerSideEncryption: 'x-amz-server-side-encryption',\n SSECustomerAlgorithm: 'x-amz-server-side-encryption-customer-algorithm',\n SSECustomerKeyMD5: 'x-amz-server-side-encryption-customer-key-md5',\n SSEKMSKeyId: 'x-amz-server-side-encryption-aws-kms-key-id',\n BucketKeyEnabled: [\n 'x-amz-server-side-encryption-bucket-key-enabled',\n utils_2.deserializeBoolean,\n ],\n StorageClass: 'x-amz-storage-class',\n RequestCharged: 'x-amz-request-charged',\n ReplicationStatus: 'x-amz-replication-status',\n PartsCount: ['x-amz-mp-parts-count', utils_2.deserializeNumber],\n TagCount: ['x-amz-tagging-count', utils_2.deserializeNumber],\n ObjectLockMode: 'x-amz-object-lock-mode',\n ObjectLockRetainUntilDate: [\n 'x-amz-object-lock-retain-until-date',\n utils_2.deserializeTimestamp,\n ],\n ObjectLockLegalHoldStatus: 'x-amz-object-lock-legal-hold',\n }),\n Metadata: (0, utils_2.deserializeMetadata)(response.headers),\n $metadata: (0, aws_client_utils_1.parseMetadata)(response),\n // @ts-expect-error The body is a CompatibleHttpResponse type because the lower-level handler is XHR instead of\n // fetch, which represents payload in Blob instread of ReadableStream.\n Body: response.body,\n };\n }\n};\nexports.getObject = (0, composers_1.composeServiceApi)(utils_2.s3TransferHandler, getObjectSerializer, getObjectDeserializer, { ...base_1.defaultConfig, responseType: 'blob' });\n/**\n * Get a presigned URL for the `getObject` API.\n *\n * @internal\n */\nconst getPresignedGetObjectUrl = async (config, input) => {\n const endpoint = base_1.defaultConfig.endpointResolver(config, input);\n const { url, headers, method } = await getObjectSerializer(input, endpoint);\n // TODO: set content sha256 query parameter with value of UNSIGNED-PAYLOAD instead of empty hash.\n // It requires changes in presignUrl. Without this change, the generated url still works,\n // but not the same as other tools like AWS SDK and CLI.\n url.searchParams.append(utils_2.CONTENT_SHA256_HEADER, aws_client_utils_1.EMPTY_SHA256_HASH);\n if (config.userAgentValue) {\n url.searchParams.append(config.userAgentHeader ?? USER_AGENT_HEADER, config.userAgentValue);\n }\n if (input.ResponseContentType) {\n url.searchParams.append('response-content-type', input.ResponseContentType);\n }\n if (input.ResponseContentDisposition) {\n url.searchParams.append('response-content-disposition', input.ResponseContentDisposition);\n }\n for (const [headerName, value] of Object.entries(headers).sort(([key1], [key2]) => key1.localeCompare(key2))) {\n url.searchParams.append(headerName, value);\n }\n return (0, aws_client_utils_1.presignUrl)({ method, url, body: undefined }, {\n signingService: base_1.defaultConfig.service,\n signingRegion: config.region,\n ...base_1.defaultConfig,\n ...config,\n });\n};\nexports.getPresignedGetObjectUrl = getPresignedGetObjectUrl;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"getObject.js","sources":["../../../../../../../src/providers/s3/utils/client/s3data/getObject.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPresignedGetObjectUrl = exports.getObject = void 0;\nconst aws_client_utils_1 = require(\"@aws-amplify/core/internals/aws-client-utils\");\nconst composers_1 = require(\"@aws-amplify/core/internals/aws-client-utils/composers\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst utils_2 = require(\"../utils\");\nconst validateObjectUrl_1 = require(\"../../validateObjectUrl\");\nconst base_1 = require(\"./base\");\nconst USER_AGENT_HEADER = 'x-amz-user-agent';\nconst getObjectSerializer = async (input, endpoint) => {\n const url = new utils_1.AmplifyUrl(endpoint.url.toString());\n (0, utils_2.validateS3RequiredParameter)(!!input.Key, 'Key');\n url.pathname = (0, utils_2.serializePathnameObjectKey)(url, input.Key);\n url.search = new utils_1.AmplifyUrlSearchParams({\n 'x-id': 'GetObject',\n }).toString();\n (0, validateObjectUrl_1.validateObjectUrl)({\n bucketName: input.Bucket,\n key: input.Key,\n objectURL: url,\n });\n return {\n method: 'GET',\n headers: {\n ...(input.Range && { Range: input.Range }),\n ...(0, utils_2.assignStringVariables)({\n 'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,\n }),\n },\n url,\n };\n};\nconst getObjectDeserializer = async (response) => {\n if (response.statusCode >= 300) {\n // error is always set when statusCode >= 300\n throw (0, utils_2.buildStorageServiceError)((await (0, base_1.parseXmlError)(response)));\n }\n else {\n return {\n ...(0, utils_2.map)(response.headers, {\n DeleteMarker: ['x-amz-delete-marker', utils_2.deserializeBoolean],\n AcceptRanges: 'accept-ranges',\n Expiration: 'x-amz-expiration',\n Restore: 'x-amz-restore',\n LastModified: ['last-modified', utils_2.deserializeTimestamp],\n ContentLength: ['content-length', utils_2.deserializeNumber],\n ETag: 'etag',\n ChecksumCRC32: 'x-amz-checksum-crc32',\n ChecksumCRC32C: 'x-amz-checksum-crc32c',\n ChecksumSHA1: 'x-amz-checksum-sha1',\n ChecksumSHA256: 'x-amz-checksum-sha256',\n ChecksumType: 'x-amz-checksum-type',\n MissingMeta: ['x-amz-missing-meta', utils_2.deserializeNumber],\n VersionId: 'x-amz-version-id',\n CacheControl: 'cache-control',\n ContentDisposition: 'content-disposition',\n ContentEncoding: 'content-encoding',\n ContentLanguage: 'content-language',\n ContentRange: 'content-range',\n ContentType: 'content-type',\n Expires: ['expires', utils_2.deserializeTimestamp],\n WebsiteRedirectLocation: 'x-amz-website-redirect-location',\n ServerSideEncryption: 'x-amz-server-side-encryption',\n SSECustomerAlgorithm: 'x-amz-server-side-encryption-customer-algorithm',\n SSECustomerKeyMD5: 'x-amz-server-side-encryption-customer-key-md5',\n SSEKMSKeyId: 'x-amz-server-side-encryption-aws-kms-key-id',\n BucketKeyEnabled: [\n 'x-amz-server-side-encryption-bucket-key-enabled',\n utils_2.deserializeBoolean,\n ],\n StorageClass: 'x-amz-storage-class',\n RequestCharged: 'x-amz-request-charged',\n ReplicationStatus: 'x-amz-replication-status',\n PartsCount: ['x-amz-mp-parts-count', utils_2.deserializeNumber],\n TagCount: ['x-amz-tagging-count', utils_2.deserializeNumber],\n ObjectLockMode: 'x-amz-object-lock-mode',\n ObjectLockRetainUntilDate: [\n 'x-amz-object-lock-retain-until-date',\n utils_2.deserializeTimestamp,\n ],\n ObjectLockLegalHoldStatus: 'x-amz-object-lock-legal-hold',\n }),\n Metadata: (0, utils_2.deserializeMetadata)(response.headers),\n $metadata: (0, aws_client_utils_1.parseMetadata)(response),\n // @ts-expect-error The body is a CompatibleHttpResponse type because the lower-level handler is XHR instead of\n // fetch, which represents payload in Blob instread of ReadableStream.\n Body: response.body,\n };\n }\n};\nexports.getObject = (0, composers_1.composeServiceApi)(utils_2.s3TransferHandler, getObjectSerializer, getObjectDeserializer, { ...base_1.defaultConfig, responseType: 'blob' });\n/**\n * Get a presigned URL for the `getObject` API.\n *\n * @internal\n */\nconst getPresignedGetObjectUrl = async (config, input) => {\n const endpoint = base_1.defaultConfig.endpointResolver(config, input);\n const { url, headers, method } = await getObjectSerializer(input, endpoint);\n // TODO: set content sha256 query parameter with value of UNSIGNED-PAYLOAD instead of empty hash.\n // It requires changes in presignUrl. Without this change, the generated url still works,\n // but not the same as other tools like AWS SDK and CLI.\n url.searchParams.append(utils_2.CONTENT_SHA256_HEADER, aws_client_utils_1.EMPTY_SHA256_HASH);\n if (config.userAgentValue) {\n url.searchParams.append(config.userAgentHeader ?? USER_AGENT_HEADER, config.userAgentValue);\n }\n if (input.ResponseContentType) {\n url.searchParams.append('response-content-type', input.ResponseContentType);\n }\n if (input.ResponseContentDisposition) {\n url.searchParams.append('response-content-disposition', input.ResponseContentDisposition);\n }\n for (const [headerName, value] of Object.entries(headers).sort(([key1], [key2]) => key1.localeCompare(key2))) {\n url.searchParams.append(headerName, value);\n }\n return (0, aws_client_utils_1.presignUrl)({ method, url, body: undefined }, {\n signingService: base_1.defaultConfig.service,\n signingRegion: config.region,\n ...base_1.defaultConfig,\n ...config,\n });\n};\nexports.getPresignedGetObjectUrl = getPresignedGetObjectUrl;\n"],"names":[],"mappings":"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"}
|
|
@@ -82,6 +82,7 @@ const deserializeObject = (output) => (0, utils_2.map)(output, {
|
|
|
82
82
|
'ChecksumAlgorithm',
|
|
83
83
|
value => (0, utils_2.emptyArrayGuard)(value, deserializeChecksumAlgorithmList),
|
|
84
84
|
],
|
|
85
|
+
ChecksumType: ['ChecksumType', (deserializeHelpers_1.deserializeStringTag)],
|
|
85
86
|
Size: ['Size', utils_2.deserializeNumber],
|
|
86
87
|
StorageClass: ['StorageClass', (deserializeHelpers_1.deserializeStringTag)],
|
|
87
88
|
Owner: ['Owner', deserializeOwner],
|