@aws-amplify/storage 6.9.6-unstable.6ea70f9.0 → 6.9.7-unstable.3ea1c8e.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/copy.js +3 -1
- package/dist/cjs/providers/s3/apis/internal/copy.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/uploadCache.js +2 -1
- 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 +4 -1
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/uploadData/putObjectJob.js +4 -1
- package/dist/cjs/providers/s3/apis/internal/uploadData/putObjectJob.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/copyObject.js +2 -0
- package/dist/cjs/providers/s3/utils/client/s3data/copyObject.js.map +1 -1
- package/dist/cjs/utils/contentType.js +101 -0
- package/dist/cjs/utils/contentType.js.map +1 -0
- package/dist/esm/internals/types/inputs.d.ts +1 -0
- package/dist/esm/providers/s3/apis/internal/copy.mjs +3 -1
- package/dist/esm/providers/s3/apis/internal/copy.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadCache.mjs +2 -1
- 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 +4 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/putObjectJob.mjs +4 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/putObjectJob.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/copyObject.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/copyObject.mjs +2 -0
- package/dist/esm/providers/s3/utils/client/s3data/copyObject.mjs.map +1 -1
- package/dist/esm/types/inputs.d.ts +13 -0
- package/dist/esm/utils/contentType.d.ts +4 -0
- package/dist/esm/utils/contentType.mjs +98 -0
- package/dist/esm/utils/contentType.mjs.map +1 -0
- package/package.json +5 -5
- package/src/internals/types/inputs.ts +1 -0
- package/src/providers/s3/apis/internal/copy.ts +5 -0
- package/src/providers/s3/apis/internal/uploadData/multipart/uploadCache.ts +2 -1
- package/src/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.ts +4 -1
- package/src/providers/s3/apis/internal/uploadData/putObjectJob.ts +4 -1
- package/src/providers/s3/utils/client/s3data/copyObject.ts +3 -0
- package/src/types/inputs.ts +21 -0
- package/src/utils/contentType.ts +99 -0
|
@@ -66,6 +66,7 @@ const copyWithPath = async (amplify, input) => {
|
|
|
66
66
|
eTag: input.source.eTag,
|
|
67
67
|
expectedSourceBucketOwner: input.source?.expectedBucketOwner,
|
|
68
68
|
expectedBucketOwner: input.destination?.expectedBucketOwner,
|
|
69
|
+
tagConfig: input.tagConfig,
|
|
69
70
|
});
|
|
70
71
|
return { path: finalCopyDestination };
|
|
71
72
|
};
|
|
@@ -116,7 +117,7 @@ const copyWithKey = async (amplify, input) => {
|
|
|
116
117
|
};
|
|
117
118
|
};
|
|
118
119
|
exports.copyWithKey = copyWithKey;
|
|
119
|
-
const serviceCopy = async ({ source, destination, bucket, s3Config, notModifiedSince, eTag, expectedSourceBucketOwner, expectedBucketOwner, }) => {
|
|
120
|
+
const serviceCopy = async ({ source, destination, bucket, s3Config, notModifiedSince, eTag, expectedSourceBucketOwner, expectedBucketOwner, tagConfig, }) => {
|
|
120
121
|
await (0, s3data_1.copyObject)({
|
|
121
122
|
...s3Config,
|
|
122
123
|
userAgentValue: (0, userAgent_1.getStorageUserAgentValue)(utils_1.StorageAction.Copy),
|
|
@@ -125,6 +126,7 @@ const serviceCopy = async ({ source, destination, bucket, s3Config, notModifiedS
|
|
|
125
126
|
CopySource: source,
|
|
126
127
|
Key: destination,
|
|
127
128
|
MetadataDirective: 'COPY', // Copies over metadata like contentType as well
|
|
129
|
+
TaggingDirective: tagConfig?.mode === 'remove' ? 'REPLACE' : 'COPY',
|
|
128
130
|
CopySourceIfMatch: eTag,
|
|
129
131
|
CopySourceIfUnmodifiedSince: notModifiedSince,
|
|
130
132
|
ExpectedSourceBucketOwner: expectedSourceBucketOwner,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy.js","sources":["../../../../../../src/providers/s3/apis/internal/copy.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.copyWithKey = exports.copy = void 0;\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst utils_2 = require(\"../../utils\");\nconst validation_1 = require(\"../../../../errors/types/validation\");\nconst assertValidationError_1 = require(\"../../../../errors/utils/assertValidationError\");\nconst s3data_1 = require(\"../../utils/client/s3data\");\nconst userAgent_1 = require(\"../../utils/userAgent\");\nconst utils_3 = require(\"../../../../utils\");\nconst isCopyInputWithPath = (input) => (0, utils_2.isInputWithPath)(input.source);\nconst storageBucketAssertion = (sourceBucket, destBucket) => {\n /** For multi-bucket, both source and destination bucket needs to be passed in\n * or both can be undefined and we fallback to singleton's default value\n */\n (0, assertValidationError_1.assertValidationError)(\n // Both src & dest bucket option is present is acceptable\n (sourceBucket !== undefined && destBucket !== undefined) ||\n // or both are undefined is also acceptable\n (!destBucket && !sourceBucket), validation_1.StorageValidationErrorCode.InvalidCopyOperationStorageBucket);\n};\nconst copy = async (amplify, input) => {\n return isCopyInputWithPath(input)\n ? copyWithPath(amplify, input)\n : (0, exports.copyWithKey)(amplify, input);\n};\nexports.copy = copy;\nconst copyWithPath = async (amplify, input) => {\n const { source, destination } = input;\n storageBucketAssertion(source.bucket, destination.bucket);\n const { bucket: sourceBucket } = await (0, utils_2.resolveS3ConfigAndInput)(amplify, {\n path: input.source.path,\n options: {\n locationCredentialsProvider: input.options?.locationCredentialsProvider,\n ...input.source,\n },\n });\n // The bucket, region, credentials of s3 client are resolved from destination.\n // Whereas the source bucket and path are a input parameter of S3 copy operation.\n const { s3Config, bucket: destBucket, identityId, } = await (0, utils_2.resolveS3ConfigAndInput)(amplify, {\n path: input.destination.path,\n options: {\n locationCredentialsProvider: input.options?.locationCredentialsProvider,\n customEndpoint: input.options?.customEndpoint,\n ...input.destination,\n },\n }); // resolveS3ConfigAndInput does not make extra API calls or storage access if called repeatedly.\n (0, assertValidationError_1.assertValidationError)(!!source.path, validation_1.StorageValidationErrorCode.NoSourcePath);\n (0, assertValidationError_1.assertValidationError)(!!destination.path, validation_1.StorageValidationErrorCode.NoDestinationPath);\n const { objectKey: sourcePath } = (0, utils_2.validateStorageOperationInput)(source, identityId);\n const { objectKey: destinationPath } = (0, utils_2.validateStorageOperationInput)(destination, identityId);\n (0, utils_2.validateBucketOwnerID)(source.expectedBucketOwner);\n (0, utils_2.validateBucketOwnerID)(destination.expectedBucketOwner);\n const finalCopySource = `${sourceBucket}/${sourcePath}`;\n const finalCopyDestination = destinationPath;\n utils_3.logger.debug(`copying \"${finalCopySource}\" to \"${finalCopyDestination}\".`);\n await serviceCopy({\n source: finalCopySource,\n destination: finalCopyDestination,\n bucket: destBucket,\n s3Config,\n notModifiedSince: input.source.notModifiedSince,\n eTag: input.source.eTag,\n expectedSourceBucketOwner: input.source?.expectedBucketOwner,\n expectedBucketOwner: input.destination?.expectedBucketOwner,\n });\n return { path: finalCopyDestination };\n};\n/** @deprecated Use {@link copyWithPath} instead. */\nconst copyWithKey = async (amplify, input) => {\n const { source, destination } = input;\n storageBucketAssertion(source.bucket, destination.bucket);\n (0, assertValidationError_1.assertValidationError)(!!source.key, validation_1.StorageValidationErrorCode.NoSourceKey);\n (0, assertValidationError_1.assertValidationError)(!!destination.key, validation_1.StorageValidationErrorCode.NoDestinationKey);\n (0, utils_2.validateBucketOwnerID)(source.expectedBucketOwner);\n (0, utils_2.validateBucketOwnerID)(destination.expectedBucketOwner);\n const { bucket: sourceBucket, keyPrefix: sourceKeyPrefix } = await (0, utils_2.resolveS3ConfigAndInput)(amplify, {\n ...input,\n options: {\n // @ts-expect-error: 'options' does not exist on type 'CopyInput'. In case of JS users set the location\n // credentials provider option, resolveS3ConfigAndInput will throw validation error.\n locationCredentialsProvider: input.options?.locationCredentialsProvider,\n ...input.source,\n },\n });\n // The bucket, region, credentials of s3 client are resolved from destination.\n // Whereas the source bucket and path are a input parameter of S3 copy operation.\n const { s3Config, bucket: destBucket, keyPrefix: destinationKeyPrefix, } = await (0, utils_2.resolveS3ConfigAndInput)(amplify, {\n ...input,\n options: {\n // @ts-expect-error: 'options' does not exist on type 'CopyInput'. In case of JS users set the location\n // credentials provider option, resolveS3ConfigAndInput will throw validation error.\n locationCredentialsProvider: input.options?.locationCredentialsProvider,\n ...input.destination,\n },\n }); // resolveS3ConfigAndInput does not make extra API calls or storage access if called repeatedly.\n // TODO(ashwinkumar6) V6-logger: warn `You may copy files from another user if the source level is \"protected\", currently it's ${srcLevel}`\n const finalCopySource = `${sourceBucket}/${sourceKeyPrefix}${source.key}`;\n const finalCopyDestination = `${destinationKeyPrefix}${destination.key}`;\n utils_3.logger.debug(`copying \"${finalCopySource}\" to \"${finalCopyDestination}\".`);\n await serviceCopy({\n source: finalCopySource,\n destination: finalCopyDestination,\n bucket: destBucket,\n s3Config,\n notModifiedSince: input.source.notModifiedSince,\n eTag: input.source.eTag,\n expectedSourceBucketOwner: input.source?.expectedBucketOwner,\n expectedBucketOwner: input.destination?.expectedBucketOwner,\n });\n return {\n key: destination.key,\n };\n};\nexports.copyWithKey = copyWithKey;\nconst serviceCopy = async ({ source, destination, bucket, s3Config, notModifiedSince, eTag, expectedSourceBucketOwner, expectedBucketOwner, }) => {\n await (0, s3data_1.copyObject)({\n ...s3Config,\n userAgentValue: (0, userAgent_1.getStorageUserAgentValue)(utils_1.StorageAction.Copy),\n }, {\n Bucket: bucket,\n CopySource: source,\n Key: destination,\n MetadataDirective: 'COPY', // Copies over metadata like contentType as well\n CopySourceIfMatch: eTag,\n CopySourceIfUnmodifiedSince: notModifiedSince,\n ExpectedSourceBucketOwner: expectedSourceBucketOwner,\n ExpectedBucketOwner: expectedBucketOwner,\n });\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"copy.js","sources":["../../../../../../src/providers/s3/apis/internal/copy.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.copyWithKey = exports.copy = void 0;\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst utils_2 = require(\"../../utils\");\nconst validation_1 = require(\"../../../../errors/types/validation\");\nconst assertValidationError_1 = require(\"../../../../errors/utils/assertValidationError\");\nconst s3data_1 = require(\"../../utils/client/s3data\");\nconst userAgent_1 = require(\"../../utils/userAgent\");\nconst utils_3 = require(\"../../../../utils\");\nconst isCopyInputWithPath = (input) => (0, utils_2.isInputWithPath)(input.source);\nconst storageBucketAssertion = (sourceBucket, destBucket) => {\n /** For multi-bucket, both source and destination bucket needs to be passed in\n * or both can be undefined and we fallback to singleton's default value\n */\n (0, assertValidationError_1.assertValidationError)(\n // Both src & dest bucket option is present is acceptable\n (sourceBucket !== undefined && destBucket !== undefined) ||\n // or both are undefined is also acceptable\n (!destBucket && !sourceBucket), validation_1.StorageValidationErrorCode.InvalidCopyOperationStorageBucket);\n};\nconst copy = async (amplify, input) => {\n return isCopyInputWithPath(input)\n ? copyWithPath(amplify, input)\n : (0, exports.copyWithKey)(amplify, input);\n};\nexports.copy = copy;\nconst copyWithPath = async (amplify, input) => {\n const { source, destination } = input;\n storageBucketAssertion(source.bucket, destination.bucket);\n const { bucket: sourceBucket } = await (0, utils_2.resolveS3ConfigAndInput)(amplify, {\n path: input.source.path,\n options: {\n locationCredentialsProvider: input.options?.locationCredentialsProvider,\n ...input.source,\n },\n });\n // The bucket, region, credentials of s3 client are resolved from destination.\n // Whereas the source bucket and path are a input parameter of S3 copy operation.\n const { s3Config, bucket: destBucket, identityId, } = await (0, utils_2.resolveS3ConfigAndInput)(amplify, {\n path: input.destination.path,\n options: {\n locationCredentialsProvider: input.options?.locationCredentialsProvider,\n customEndpoint: input.options?.customEndpoint,\n ...input.destination,\n },\n }); // resolveS3ConfigAndInput does not make extra API calls or storage access if called repeatedly.\n (0, assertValidationError_1.assertValidationError)(!!source.path, validation_1.StorageValidationErrorCode.NoSourcePath);\n (0, assertValidationError_1.assertValidationError)(!!destination.path, validation_1.StorageValidationErrorCode.NoDestinationPath);\n const { objectKey: sourcePath } = (0, utils_2.validateStorageOperationInput)(source, identityId);\n const { objectKey: destinationPath } = (0, utils_2.validateStorageOperationInput)(destination, identityId);\n (0, utils_2.validateBucketOwnerID)(source.expectedBucketOwner);\n (0, utils_2.validateBucketOwnerID)(destination.expectedBucketOwner);\n const finalCopySource = `${sourceBucket}/${sourcePath}`;\n const finalCopyDestination = destinationPath;\n utils_3.logger.debug(`copying \"${finalCopySource}\" to \"${finalCopyDestination}\".`);\n await serviceCopy({\n source: finalCopySource,\n destination: finalCopyDestination,\n bucket: destBucket,\n s3Config,\n notModifiedSince: input.source.notModifiedSince,\n eTag: input.source.eTag,\n expectedSourceBucketOwner: input.source?.expectedBucketOwner,\n expectedBucketOwner: input.destination?.expectedBucketOwner,\n tagConfig: input.tagConfig,\n });\n return { path: finalCopyDestination };\n};\n/** @deprecated Use {@link copyWithPath} instead. */\nconst copyWithKey = async (amplify, input) => {\n const { source, destination } = input;\n storageBucketAssertion(source.bucket, destination.bucket);\n (0, assertValidationError_1.assertValidationError)(!!source.key, validation_1.StorageValidationErrorCode.NoSourceKey);\n (0, assertValidationError_1.assertValidationError)(!!destination.key, validation_1.StorageValidationErrorCode.NoDestinationKey);\n (0, utils_2.validateBucketOwnerID)(source.expectedBucketOwner);\n (0, utils_2.validateBucketOwnerID)(destination.expectedBucketOwner);\n const { bucket: sourceBucket, keyPrefix: sourceKeyPrefix } = await (0, utils_2.resolveS3ConfigAndInput)(amplify, {\n ...input,\n options: {\n // @ts-expect-error: 'options' does not exist on type 'CopyInput'. In case of JS users set the location\n // credentials provider option, resolveS3ConfigAndInput will throw validation error.\n locationCredentialsProvider: input.options?.locationCredentialsProvider,\n ...input.source,\n },\n });\n // The bucket, region, credentials of s3 client are resolved from destination.\n // Whereas the source bucket and path are a input parameter of S3 copy operation.\n const { s3Config, bucket: destBucket, keyPrefix: destinationKeyPrefix, } = await (0, utils_2.resolveS3ConfigAndInput)(amplify, {\n ...input,\n options: {\n // @ts-expect-error: 'options' does not exist on type 'CopyInput'. In case of JS users set the location\n // credentials provider option, resolveS3ConfigAndInput will throw validation error.\n locationCredentialsProvider: input.options?.locationCredentialsProvider,\n ...input.destination,\n },\n }); // resolveS3ConfigAndInput does not make extra API calls or storage access if called repeatedly.\n // TODO(ashwinkumar6) V6-logger: warn `You may copy files from another user if the source level is \"protected\", currently it's ${srcLevel}`\n const finalCopySource = `${sourceBucket}/${sourceKeyPrefix}${source.key}`;\n const finalCopyDestination = `${destinationKeyPrefix}${destination.key}`;\n utils_3.logger.debug(`copying \"${finalCopySource}\" to \"${finalCopyDestination}\".`);\n await serviceCopy({\n source: finalCopySource,\n destination: finalCopyDestination,\n bucket: destBucket,\n s3Config,\n notModifiedSince: input.source.notModifiedSince,\n eTag: input.source.eTag,\n expectedSourceBucketOwner: input.source?.expectedBucketOwner,\n expectedBucketOwner: input.destination?.expectedBucketOwner,\n });\n return {\n key: destination.key,\n };\n};\nexports.copyWithKey = copyWithKey;\nconst serviceCopy = async ({ source, destination, bucket, s3Config, notModifiedSince, eTag, expectedSourceBucketOwner, expectedBucketOwner, tagConfig, }) => {\n await (0, s3data_1.copyObject)({\n ...s3Config,\n userAgentValue: (0, userAgent_1.getStorageUserAgentValue)(utils_1.StorageAction.Copy),\n }, {\n Bucket: bucket,\n CopySource: source,\n Key: destination,\n MetadataDirective: 'COPY', // Copies over metadata like contentType as well\n TaggingDirective: tagConfig?.mode === 'remove' ? 'REPLACE' : 'COPY',\n CopySourceIfMatch: eTag,\n CopySourceIfUnmodifiedSince: notModifiedSince,\n ExpectedSourceBucketOwner: expectedSourceBucketOwner,\n ExpectedBucketOwner: expectedBucketOwner,\n });\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ exports.removeCachedUpload = exports.cacheMultipartUpload = exports.getUploadsCa
|
|
|
7
7
|
const constants_1 = require("../../../../utils/constants");
|
|
8
8
|
const s3data_1 = require("../../../../utils/client/s3data");
|
|
9
9
|
const utils_1 = require("../../../../../../utils");
|
|
10
|
+
const contentType_1 = require("../../../../../../utils/contentType");
|
|
10
11
|
const ONE_HOUR = 1000 * 60 * 60;
|
|
11
12
|
/**
|
|
12
13
|
* Find the cached multipart upload id and get the parts that have been uploaded
|
|
@@ -81,7 +82,7 @@ exports.serializeUploadOptions = serializeUploadOptions;
|
|
|
81
82
|
*/
|
|
82
83
|
const getUploadsCacheKey = ({ file, size, contentType, bucket, accessLevel, key, optionsHash, }) => {
|
|
83
84
|
let levelStr;
|
|
84
|
-
const resolvedContentType = contentType ?? file
|
|
85
|
+
const resolvedContentType = contentType ?? (0, contentType_1.getContentType)(file, key) ?? 'application/octet-stream';
|
|
85
86
|
// If no access level is defined, we're using custom gen2 access rules
|
|
86
87
|
if (accessLevel === undefined) {
|
|
87
88
|
levelStr = 'custom';
|
|
@@ -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.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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"}
|
|
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 contentType_1 = require(\"../../../../../../utils/contentType\");\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 ?? (0, contentType_1.getContentType)(file, key) ?? '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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"}
|
|
@@ -15,6 +15,7 @@ const userAgent_1 = require("../../../../utils/userAgent");
|
|
|
15
15
|
const utils_3 = require("../../../../../../utils");
|
|
16
16
|
const crc32_1 = require("../../../../utils/crc32");
|
|
17
17
|
const IntegrityError_1 = require("../../../../../../errors/IntegrityError");
|
|
18
|
+
const contentType_1 = require("../../../../../../utils/contentType");
|
|
18
19
|
const uploadPartExecutor_1 = require("./uploadPartExecutor");
|
|
19
20
|
const uploadCache_1 = require("./uploadCache");
|
|
20
21
|
const progressTracker_1 = require("./progressTracker");
|
|
@@ -55,7 +56,9 @@ const getMultipartUploadHandlers = (uploadDataInput, size) => {
|
|
|
55
56
|
resolvedIdentityId = resolvedS3Options.identityId;
|
|
56
57
|
expectedBucketOwner = uploadDataOptions?.expectedBucketOwner;
|
|
57
58
|
const { inputType, objectKey } = (0, utils_2.validateStorageOperationInput)(uploadDataInput, resolvedIdentityId);
|
|
58
|
-
const { contentDisposition, contentEncoding, contentType =
|
|
59
|
+
const { contentDisposition, contentEncoding, contentType = uploadDataOptions?.contentType ??
|
|
60
|
+
(0, contentType_1.getContentType)(data, objectKey) ??
|
|
61
|
+
'application/octet-stream', metadata, preventOverwrite, onProgress, } = uploadDataOptions ?? {};
|
|
59
62
|
finalKey = objectKey;
|
|
60
63
|
// Resolve "key" specific options
|
|
61
64
|
if (inputType === constants_1.STORAGE_INPUT_KEY) {
|
|
@@ -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 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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"}
|
|
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 contentType_1 = require(\"../../../../../../utils/contentType\");\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 = uploadDataOptions?.contentType ??\n (0, contentType_1.getContentType)(data, objectKey) ??\n '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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"}
|
|
@@ -12,6 +12,7 @@ const userAgent_1 = require("../../../utils/userAgent");
|
|
|
12
12
|
const constants_1 = require("../../../utils/constants");
|
|
13
13
|
const crc32_1 = require("../../../utils/crc32");
|
|
14
14
|
const constructContentDisposition_1 = require("../../../utils/constructContentDisposition");
|
|
15
|
+
const contentType_1 = require("../../../../../utils/contentType");
|
|
15
16
|
/**
|
|
16
17
|
* Get a function the returns a promise to call putObject API to S3.
|
|
17
18
|
*
|
|
@@ -23,7 +24,9 @@ const putObjectJob = (uploadDataInput, abortSignal, totalLength) => async () =>
|
|
|
23
24
|
const { inputType, objectKey } = (0, utils_2.validateStorageOperationInput)(uploadDataInput, identityId);
|
|
24
25
|
(0, utils_2.validateBucketOwnerID)(uploadDataOptions?.expectedBucketOwner);
|
|
25
26
|
const finalKey = inputType === constants_1.STORAGE_INPUT_KEY ? keyPrefix + objectKey : objectKey;
|
|
26
|
-
const { contentDisposition, contentEncoding, contentType =
|
|
27
|
+
const { contentDisposition, contentEncoding, contentType = uploadDataOptions?.contentType ??
|
|
28
|
+
(0, contentType_1.getContentType)(data, objectKey) ??
|
|
29
|
+
'application/octet-stream', preventOverwrite, metadata, checksumAlgorithm, onProgress, expectedBucketOwner, } = uploadDataOptions ?? {};
|
|
27
30
|
const checksumCRC32 = checksumAlgorithm === constants_1.CHECKSUM_ALGORITHM_CRC32
|
|
28
31
|
? await (0, crc32_1.calculateContentCRC32)(data)
|
|
29
32
|
: undefined;
|
|
@@ -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,\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":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,OAAO,CAAC,YAAY,GAAG,MAAM;AAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,mCAAmC,CAAC;AAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,8BAA8B,CAAC;AACxD,MAAM,WAAW,GAAG,OAAO,CAAC,0BAA0B,CAAC;AACvD,MAAM,WAAW,GAAG,OAAO,CAAC,0BAA0B,CAAC;AACvD,MAAM,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAC/C,MAAM,6BAA6B,GAAG,OAAO,CAAC,4CAA4C,CAAC;AAC3F;AACA;AACA;AACA;AACA;AACA,MAAM,YAAY,GAAG,CAAC,eAAe,EAAE,WAAW,EAAE,WAAW,KAAK,YAAY;AAChF,IAAI,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,eAAe;AAChE,IAAI,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC;AACxJ,IAAI,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,OAAO,CAAC,6BAA6B,EAAE,eAAe,EAAE,UAAU,CAAC;AAC5G,IAAI,IAAI,OAAO,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,mBAAmB,CAAC;AAC9E,IAAI,MAAM,QAAQ,GAAG,SAAS,KAAK,WAAW,CAAC,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AACpG,IAAI,MAAM,EAAE,kBAAkB,EAAE,eAAe,EAAE,WAAW,GAAG,0BAA0B,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,mBAAmB,GAAG,GAAG,iBAAiB,IAAI,EAAE;
|
|
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\");\nconst contentType_1 = require(\"../../../../../utils/contentType\");\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 = uploadDataOptions?.contentType ??\n (0, contentType_1.getContentType)(data, objectKey) ??\n '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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"}
|
|
@@ -17,6 +17,7 @@ const copyObjectSerializer = async (input, endpoint) => {
|
|
|
17
17
|
...(0, utils_2.assignStringVariables)({
|
|
18
18
|
'x-amz-copy-source': input.CopySource,
|
|
19
19
|
'x-amz-metadata-directive': input.MetadataDirective,
|
|
20
|
+
'x-amz-tagging-directive': input.TaggingDirective,
|
|
20
21
|
'x-amz-copy-source-if-match': input.CopySourceIfMatch,
|
|
21
22
|
'x-amz-copy-source-if-unmodified-since': input.CopySourceIfUnmodifiedSince?.toUTCString(),
|
|
22
23
|
'x-amz-source-expected-bucket-owner': input.ExpectedSourceBucketOwner,
|
|
@@ -45,6 +46,7 @@ const validateCopyObjectHeaders = (input, headers) => {
|
|
|
45
46
|
const validations = [
|
|
46
47
|
headers['x-amz-copy-source'] === input.CopySource,
|
|
47
48
|
(0, utils_2.bothNilOrEqual)(input.MetadataDirective, headers['x-amz-metadata-directive']),
|
|
49
|
+
(0, utils_2.bothNilOrEqual)(input.TaggingDirective, headers['x-amz-tagging-directive']),
|
|
48
50
|
(0, utils_2.bothNilOrEqual)(input.CopySourceIfMatch, headers['x-amz-copy-source-if-match']),
|
|
49
51
|
(0, utils_2.bothNilOrEqual)(input.CopySourceIfUnmodifiedSince?.toUTCString(), headers['x-amz-copy-source-if-unmodified-since']),
|
|
50
52
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copyObject.js","sources":["../../../../../../../src/providers/s3/utils/client/s3data/copyObject.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.copyObject = exports.validateCopyObjectHeaders = 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 IntegrityError_1 = require(\"../../../../../errors/IntegrityError\");\nconst validateObjectUrl_1 = require(\"../../validateObjectUrl\");\nconst base_1 = require(\"./base\");\nconst copyObjectSerializer = async (input, endpoint) => {\n const headers = {\n ...(await (0, utils_2.serializeObjectConfigsToHeaders)(input)),\n ...(0, utils_2.assignStringVariables)({\n 'x-amz-copy-source': input.CopySource,\n 'x-amz-metadata-directive': input.MetadataDirective,\n 'x-amz-copy-source-if-match': input.CopySourceIfMatch,\n 'x-amz-copy-source-if-unmodified-since': input.CopySourceIfUnmodifiedSince?.toUTCString(),\n 'x-amz-source-expected-bucket-owner': input.ExpectedSourceBucketOwner,\n 'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,\n }),\n };\n (0, exports.validateCopyObjectHeaders)(input, headers);\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': 'CopyObject',\n }).toString();\n (0, validateObjectUrl_1.validateObjectUrl)({\n bucketName: input.Bucket,\n key: input.Key,\n objectURL: url,\n });\n return {\n method: 'PUT',\n headers,\n url,\n };\n};\nconst validateCopyObjectHeaders = (input, headers) => {\n const validations = [\n headers['x-amz-copy-source'] === input.CopySource,\n (0, utils_2.bothNilOrEqual)(input.MetadataDirective, headers['x-amz-metadata-directive']),\n (0, utils_2.bothNilOrEqual)(input.CopySourceIfMatch, headers['x-amz-copy-source-if-match']),\n (0, utils_2.bothNilOrEqual)(input.CopySourceIfUnmodifiedSince?.toUTCString(), headers['x-amz-copy-source-if-unmodified-since']),\n ];\n if (validations.some(validation => !validation)) {\n throw new IntegrityError_1.IntegrityError();\n }\n};\nexports.validateCopyObjectHeaders = validateCopyObjectHeaders;\nconst copyObjectDeserializer = 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 await (0, utils_2.parseXmlBody)(response);\n return {\n $metadata: (0, aws_client_utils_1.parseMetadata)(response),\n };\n }\n};\nexports.copyObject = (0, composers_1.composeServiceApi)(utils_2.s3TransferHandler, copyObjectSerializer, copyObjectDeserializer, { ...base_1.defaultConfig, responseType: 'text' });\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"copyObject.js","sources":["../../../../../../../src/providers/s3/utils/client/s3data/copyObject.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.copyObject = exports.validateCopyObjectHeaders = 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 IntegrityError_1 = require(\"../../../../../errors/IntegrityError\");\nconst validateObjectUrl_1 = require(\"../../validateObjectUrl\");\nconst base_1 = require(\"./base\");\nconst copyObjectSerializer = async (input, endpoint) => {\n const headers = {\n ...(await (0, utils_2.serializeObjectConfigsToHeaders)(input)),\n ...(0, utils_2.assignStringVariables)({\n 'x-amz-copy-source': input.CopySource,\n 'x-amz-metadata-directive': input.MetadataDirective,\n 'x-amz-tagging-directive': input.TaggingDirective,\n 'x-amz-copy-source-if-match': input.CopySourceIfMatch,\n 'x-amz-copy-source-if-unmodified-since': input.CopySourceIfUnmodifiedSince?.toUTCString(),\n 'x-amz-source-expected-bucket-owner': input.ExpectedSourceBucketOwner,\n 'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,\n }),\n };\n (0, exports.validateCopyObjectHeaders)(input, headers);\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': 'CopyObject',\n }).toString();\n (0, validateObjectUrl_1.validateObjectUrl)({\n bucketName: input.Bucket,\n key: input.Key,\n objectURL: url,\n });\n return {\n method: 'PUT',\n headers,\n url,\n };\n};\nconst validateCopyObjectHeaders = (input, headers) => {\n const validations = [\n headers['x-amz-copy-source'] === input.CopySource,\n (0, utils_2.bothNilOrEqual)(input.MetadataDirective, headers['x-amz-metadata-directive']),\n (0, utils_2.bothNilOrEqual)(input.TaggingDirective, headers['x-amz-tagging-directive']),\n (0, utils_2.bothNilOrEqual)(input.CopySourceIfMatch, headers['x-amz-copy-source-if-match']),\n (0, utils_2.bothNilOrEqual)(input.CopySourceIfUnmodifiedSince?.toUTCString(), headers['x-amz-copy-source-if-unmodified-since']),\n ];\n if (validations.some(validation => !validation)) {\n throw new IntegrityError_1.IntegrityError();\n }\n};\nexports.validateCopyObjectHeaders = validateCopyObjectHeaders;\nconst copyObjectDeserializer = 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 await (0, utils_2.parseXmlBody)(response);\n return {\n $metadata: (0, aws_client_utils_1.parseMetadata)(response),\n };\n }\n};\nexports.copyObject = (0, composers_1.composeServiceApi)(utils_2.s3TransferHandler, copyObjectSerializer, copyObjectDeserializer, { ...base_1.defaultConfig, responseType: 'text' });\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
4
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getContentType = void 0;
|
|
7
|
+
const MIME_TYPES = {
|
|
8
|
+
// Audio
|
|
9
|
+
aac: 'audio/aac',
|
|
10
|
+
mid: 'audio/midi',
|
|
11
|
+
midi: 'audio/x-midi',
|
|
12
|
+
mp3: 'audio/mpeg',
|
|
13
|
+
oga: 'audio/ogg',
|
|
14
|
+
opus: 'audio/ogg',
|
|
15
|
+
wav: 'audio/wav',
|
|
16
|
+
weba: 'audio/webm',
|
|
17
|
+
// Video
|
|
18
|
+
avi: 'video/x-msvideo',
|
|
19
|
+
mp4: 'video/mp4',
|
|
20
|
+
mpeg: 'video/mpeg',
|
|
21
|
+
ogv: 'video/ogg',
|
|
22
|
+
ts: 'video/mp2t',
|
|
23
|
+
webm: 'video/webm',
|
|
24
|
+
// Images
|
|
25
|
+
apng: 'image/apng',
|
|
26
|
+
avif: 'image/avif',
|
|
27
|
+
bmp: 'image/bmp',
|
|
28
|
+
gif: 'image/gif',
|
|
29
|
+
ico: 'image/vnd.microsoft.icon',
|
|
30
|
+
jpeg: 'image/jpeg',
|
|
31
|
+
jpg: 'image/jpeg',
|
|
32
|
+
png: 'image/png',
|
|
33
|
+
svg: 'image/svg+xml',
|
|
34
|
+
tif: 'image/tiff',
|
|
35
|
+
tiff: 'image/tiff',
|
|
36
|
+
webp: 'image/webp',
|
|
37
|
+
// Text
|
|
38
|
+
css: 'text/css',
|
|
39
|
+
csv: 'text/csv',
|
|
40
|
+
htm: 'text/html',
|
|
41
|
+
html: 'text/html',
|
|
42
|
+
ics: 'text/calendar',
|
|
43
|
+
js: 'text/javascript',
|
|
44
|
+
md: 'text/markdown',
|
|
45
|
+
mjs: 'text/javascript',
|
|
46
|
+
txt: 'text/plain',
|
|
47
|
+
// Application
|
|
48
|
+
abw: 'application/x-abiword',
|
|
49
|
+
arc: 'application/x-freearc',
|
|
50
|
+
azw: 'application/vnd.amazon.ebook',
|
|
51
|
+
bin: 'application/octet-stream',
|
|
52
|
+
bz: 'application/x-bzip',
|
|
53
|
+
bz2: 'application/x-bzip2',
|
|
54
|
+
cda: 'application/x-cdf',
|
|
55
|
+
csh: 'application/x-csh',
|
|
56
|
+
doc: 'application/msword',
|
|
57
|
+
docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
58
|
+
eot: 'application/vnd.ms-fontobject',
|
|
59
|
+
epub: 'application/epub+zip',
|
|
60
|
+
gz: 'application/gzip',
|
|
61
|
+
jar: 'application/java-archive',
|
|
62
|
+
json: 'application/json',
|
|
63
|
+
jsonld: 'application/ld+json',
|
|
64
|
+
mpkg: 'application/vnd.apple.installer+xml',
|
|
65
|
+
odp: 'application/vnd.oasis.opendocument.presentation',
|
|
66
|
+
ods: 'application/vnd.oasis.opendocument.spreadsheet',
|
|
67
|
+
odt: 'application/vnd.oasis.opendocument.text',
|
|
68
|
+
ogx: 'application/ogg',
|
|
69
|
+
pdf: 'application/pdf',
|
|
70
|
+
php: 'application/x-httpd-php',
|
|
71
|
+
ppt: 'application/vnd.ms-powerpoint',
|
|
72
|
+
pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
|
73
|
+
rar: 'application/vnd.rar',
|
|
74
|
+
rtf: 'application/rtf',
|
|
75
|
+
sh: 'application/x-sh',
|
|
76
|
+
tar: 'application/x-tar',
|
|
77
|
+
vsd: 'application/vnd.visio',
|
|
78
|
+
webmanifest: 'application/manifest+json',
|
|
79
|
+
xhtml: 'application/xhtml+xml',
|
|
80
|
+
xls: 'application/vnd.ms-excel',
|
|
81
|
+
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
82
|
+
xml: 'application/xml',
|
|
83
|
+
zip: 'application/zip',
|
|
84
|
+
// Fonts
|
|
85
|
+
otf: 'font/otf',
|
|
86
|
+
ttf: 'font/ttf',
|
|
87
|
+
woff: 'font/woff',
|
|
88
|
+
woff2: 'font/woff2',
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Detect content type from file data or filename extension
|
|
92
|
+
*/
|
|
93
|
+
const getContentType = (data, key) => {
|
|
94
|
+
if (data instanceof File && data.type) {
|
|
95
|
+
return data.type;
|
|
96
|
+
}
|
|
97
|
+
const ext = key.split('.').pop()?.toLowerCase();
|
|
98
|
+
return ext ? MIME_TYPES[ext] : undefined;
|
|
99
|
+
};
|
|
100
|
+
exports.getContentType = getContentType;
|
|
101
|
+
//# sourceMappingURL=contentType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contentType.js","sources":["../../../src/utils/contentType.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.getContentType = void 0;\nconst MIME_TYPES = {\n // Audio\n aac: 'audio/aac',\n mid: 'audio/midi',\n midi: 'audio/x-midi',\n mp3: 'audio/mpeg',\n oga: 'audio/ogg',\n opus: 'audio/ogg',\n wav: 'audio/wav',\n weba: 'audio/webm',\n // Video\n avi: 'video/x-msvideo',\n mp4: 'video/mp4',\n mpeg: 'video/mpeg',\n ogv: 'video/ogg',\n ts: 'video/mp2t',\n webm: 'video/webm',\n // Images\n apng: 'image/apng',\n avif: 'image/avif',\n bmp: 'image/bmp',\n gif: 'image/gif',\n ico: 'image/vnd.microsoft.icon',\n jpeg: 'image/jpeg',\n jpg: 'image/jpeg',\n png: 'image/png',\n svg: 'image/svg+xml',\n tif: 'image/tiff',\n tiff: 'image/tiff',\n webp: 'image/webp',\n // Text\n css: 'text/css',\n csv: 'text/csv',\n htm: 'text/html',\n html: 'text/html',\n ics: 'text/calendar',\n js: 'text/javascript',\n md: 'text/markdown',\n mjs: 'text/javascript',\n txt: 'text/plain',\n // Application\n abw: 'application/x-abiword',\n arc: 'application/x-freearc',\n azw: 'application/vnd.amazon.ebook',\n bin: 'application/octet-stream',\n bz: 'application/x-bzip',\n bz2: 'application/x-bzip2',\n cda: 'application/x-cdf',\n csh: 'application/x-csh',\n doc: 'application/msword',\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n eot: 'application/vnd.ms-fontobject',\n epub: 'application/epub+zip',\n gz: 'application/gzip',\n jar: 'application/java-archive',\n json: 'application/json',\n jsonld: 'application/ld+json',\n mpkg: 'application/vnd.apple.installer+xml',\n odp: 'application/vnd.oasis.opendocument.presentation',\n ods: 'application/vnd.oasis.opendocument.spreadsheet',\n odt: 'application/vnd.oasis.opendocument.text',\n ogx: 'application/ogg',\n pdf: 'application/pdf',\n php: 'application/x-httpd-php',\n ppt: 'application/vnd.ms-powerpoint',\n pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n rar: 'application/vnd.rar',\n rtf: 'application/rtf',\n sh: 'application/x-sh',\n tar: 'application/x-tar',\n vsd: 'application/vnd.visio',\n webmanifest: 'application/manifest+json',\n xhtml: 'application/xhtml+xml',\n xls: 'application/vnd.ms-excel',\n xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n xml: 'application/xml',\n zip: 'application/zip',\n // Fonts\n otf: 'font/otf',\n ttf: 'font/ttf',\n woff: 'font/woff',\n woff2: 'font/woff2',\n};\n/**\n * Detect content type from file data or filename extension\n */\nconst getContentType = (data, key) => {\n if (data instanceof File && data.type) {\n return data.type;\n }\n const ext = key.split('.').pop()?.toLowerCase();\n return ext ? MIME_TYPES[ext] : undefined;\n};\nexports.getContentType = getContentType;\n"],"names":[],"mappings":"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"}
|
|
@@ -76,6 +76,7 @@ type ExtendInputWithAdvancedOptions<InputType, ExtendedOptionsType> = InputType
|
|
|
76
76
|
type ExtendCopyInputWithAdvancedOptions<InputType, ExtendedOptionsType> = InputType extends StorageCopyInputWithPath ? {
|
|
77
77
|
source: InputType['source'];
|
|
78
78
|
destination: InputType['destination'];
|
|
79
|
+
tagConfig?: InputType['tagConfig'];
|
|
79
80
|
options?: ExtendedOptionsType;
|
|
80
81
|
} : never;
|
|
81
82
|
export {};
|
|
@@ -82,6 +82,7 @@ const copyWithPath = async (amplify, input) => {
|
|
|
82
82
|
eTag: input.source.eTag,
|
|
83
83
|
expectedSourceBucketOwner: input.source?.expectedBucketOwner,
|
|
84
84
|
expectedBucketOwner: input.destination?.expectedBucketOwner,
|
|
85
|
+
tagConfig: input.tagConfig,
|
|
85
86
|
});
|
|
86
87
|
return { path: finalCopyDestination };
|
|
87
88
|
};
|
|
@@ -131,7 +132,7 @@ const copyWithKey = async (amplify, input) => {
|
|
|
131
132
|
key: destination.key,
|
|
132
133
|
};
|
|
133
134
|
};
|
|
134
|
-
const serviceCopy = async ({ source, destination, bucket, s3Config, notModifiedSince, eTag, expectedSourceBucketOwner, expectedBucketOwner, }) => {
|
|
135
|
+
const serviceCopy = async ({ source, destination, bucket, s3Config, notModifiedSince, eTag, expectedSourceBucketOwner, expectedBucketOwner, tagConfig, }) => {
|
|
135
136
|
await copyObject({
|
|
136
137
|
...s3Config,
|
|
137
138
|
userAgentValue: getStorageUserAgentValue(StorageAction.Copy),
|
|
@@ -140,6 +141,7 @@ const serviceCopy = async ({ source, destination, bucket, s3Config, notModifiedS
|
|
|
140
141
|
CopySource: source,
|
|
141
142
|
Key: destination,
|
|
142
143
|
MetadataDirective: 'COPY', // Copies over metadata like contentType as well
|
|
144
|
+
TaggingDirective: tagConfig?.mode === 'remove' ? 'REPLACE' : 'COPY',
|
|
143
145
|
CopySourceIfMatch: eTag,
|
|
144
146
|
CopySourceIfUnmodifiedSince: notModifiedSince,
|
|
145
147
|
ExpectedSourceBucketOwner: expectedSourceBucketOwner,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy.mjs","sources":["../../../../../../src/providers/s3/apis/internal/copy.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { StorageAction } from '@aws-amplify/core/internals/utils';\nimport { isInputWithPath, resolveS3ConfigAndInput, validateBucketOwnerID, validateStorageOperationInput, } from '../../utils';\nimport { StorageValidationErrorCode } from '../../../../errors/types/validation';\nimport { assertValidationError } from '../../../../errors/utils/assertValidationError';\nimport { copyObject } from '../../utils/client/s3data';\nimport { getStorageUserAgentValue } from '../../utils/userAgent';\nimport { logger } from '../../../../utils';\nconst isCopyInputWithPath = (input) => isInputWithPath(input.source);\nconst storageBucketAssertion = (sourceBucket, destBucket) => {\n /** For multi-bucket, both source and destination bucket needs to be passed in\n * or both can be undefined and we fallback to singleton's default value\n */\n assertValidationError(\n // Both src & dest bucket option is present is acceptable\n (sourceBucket !== undefined && destBucket !== undefined) ||\n // or both are undefined is also acceptable\n (!destBucket && !sourceBucket), StorageValidationErrorCode.InvalidCopyOperationStorageBucket);\n};\nexport const copy = async (amplify, input) => {\n return isCopyInputWithPath(input)\n ? copyWithPath(amplify, input)\n : copyWithKey(amplify, input);\n};\nconst copyWithPath = async (amplify, input) => {\n const { source, destination } = input;\n storageBucketAssertion(source.bucket, destination.bucket);\n const { bucket: sourceBucket } = await resolveS3ConfigAndInput(amplify, {\n path: input.source.path,\n options: {\n locationCredentialsProvider: input.options?.locationCredentialsProvider,\n ...input.source,\n },\n });\n // The bucket, region, credentials of s3 client are resolved from destination.\n // Whereas the source bucket and path are a input parameter of S3 copy operation.\n const { s3Config, bucket: destBucket, identityId, } = await resolveS3ConfigAndInput(amplify, {\n path: input.destination.path,\n options: {\n locationCredentialsProvider: input.options?.locationCredentialsProvider,\n customEndpoint: input.options?.customEndpoint,\n ...input.destination,\n },\n }); // resolveS3ConfigAndInput does not make extra API calls or storage access if called repeatedly.\n assertValidationError(!!source.path, StorageValidationErrorCode.NoSourcePath);\n assertValidationError(!!destination.path, StorageValidationErrorCode.NoDestinationPath);\n const { objectKey: sourcePath } = validateStorageOperationInput(source, identityId);\n const { objectKey: destinationPath } = validateStorageOperationInput(destination, identityId);\n validateBucketOwnerID(source.expectedBucketOwner);\n validateBucketOwnerID(destination.expectedBucketOwner);\n const finalCopySource = `${sourceBucket}/${sourcePath}`;\n const finalCopyDestination = destinationPath;\n logger.debug(`copying \"${finalCopySource}\" to \"${finalCopyDestination}\".`);\n await serviceCopy({\n source: finalCopySource,\n destination: finalCopyDestination,\n bucket: destBucket,\n s3Config,\n notModifiedSince: input.source.notModifiedSince,\n eTag: input.source.eTag,\n expectedSourceBucketOwner: input.source?.expectedBucketOwner,\n expectedBucketOwner: input.destination?.expectedBucketOwner,\n });\n return { path: finalCopyDestination };\n};\n/** @deprecated Use {@link copyWithPath} instead. */\nexport const copyWithKey = async (amplify, input) => {\n const { source, destination } = input;\n storageBucketAssertion(source.bucket, destination.bucket);\n assertValidationError(!!source.key, StorageValidationErrorCode.NoSourceKey);\n assertValidationError(!!destination.key, StorageValidationErrorCode.NoDestinationKey);\n validateBucketOwnerID(source.expectedBucketOwner);\n validateBucketOwnerID(destination.expectedBucketOwner);\n const { bucket: sourceBucket, keyPrefix: sourceKeyPrefix } = await resolveS3ConfigAndInput(amplify, {\n ...input,\n options: {\n // @ts-expect-error: 'options' does not exist on type 'CopyInput'. In case of JS users set the location\n // credentials provider option, resolveS3ConfigAndInput will throw validation error.\n locationCredentialsProvider: input.options?.locationCredentialsProvider,\n ...input.source,\n },\n });\n // The bucket, region, credentials of s3 client are resolved from destination.\n // Whereas the source bucket and path are a input parameter of S3 copy operation.\n const { s3Config, bucket: destBucket, keyPrefix: destinationKeyPrefix, } = await resolveS3ConfigAndInput(amplify, {\n ...input,\n options: {\n // @ts-expect-error: 'options' does not exist on type 'CopyInput'. In case of JS users set the location\n // credentials provider option, resolveS3ConfigAndInput will throw validation error.\n locationCredentialsProvider: input.options?.locationCredentialsProvider,\n ...input.destination,\n },\n }); // resolveS3ConfigAndInput does not make extra API calls or storage access if called repeatedly.\n // TODO(ashwinkumar6) V6-logger: warn `You may copy files from another user if the source level is \"protected\", currently it's ${srcLevel}`\n const finalCopySource = `${sourceBucket}/${sourceKeyPrefix}${source.key}`;\n const finalCopyDestination = `${destinationKeyPrefix}${destination.key}`;\n logger.debug(`copying \"${finalCopySource}\" to \"${finalCopyDestination}\".`);\n await serviceCopy({\n source: finalCopySource,\n destination: finalCopyDestination,\n bucket: destBucket,\n s3Config,\n notModifiedSince: input.source.notModifiedSince,\n eTag: input.source.eTag,\n expectedSourceBucketOwner: input.source?.expectedBucketOwner,\n expectedBucketOwner: input.destination?.expectedBucketOwner,\n });\n return {\n key: destination.key,\n };\n};\nconst serviceCopy = async ({ source, destination, bucket, s3Config, notModifiedSince, eTag, expectedSourceBucketOwner, expectedBucketOwner, }) => {\n await copyObject({\n ...s3Config,\n userAgentValue: getStorageUserAgentValue(StorageAction.Copy),\n }, {\n Bucket: bucket,\n CopySource: source,\n Key: destination,\n MetadataDirective: 'COPY', // Copies over metadata like contentType as well\n CopySourceIfMatch: eTag,\n CopySourceIfUnmodifiedSince: notModifiedSince,\n ExpectedSourceBucketOwner: expectedSourceBucketOwner,\n ExpectedBucketOwner: expectedBucketOwner,\n });\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"copy.mjs","sources":["../../../../../../src/providers/s3/apis/internal/copy.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { StorageAction } from '@aws-amplify/core/internals/utils';\nimport { isInputWithPath, resolveS3ConfigAndInput, validateBucketOwnerID, validateStorageOperationInput, } from '../../utils';\nimport { StorageValidationErrorCode } from '../../../../errors/types/validation';\nimport { assertValidationError } from '../../../../errors/utils/assertValidationError';\nimport { copyObject } from '../../utils/client/s3data';\nimport { getStorageUserAgentValue } from '../../utils/userAgent';\nimport { logger } from '../../../../utils';\nconst isCopyInputWithPath = (input) => isInputWithPath(input.source);\nconst storageBucketAssertion = (sourceBucket, destBucket) => {\n /** For multi-bucket, both source and destination bucket needs to be passed in\n * or both can be undefined and we fallback to singleton's default value\n */\n assertValidationError(\n // Both src & dest bucket option is present is acceptable\n (sourceBucket !== undefined && destBucket !== undefined) ||\n // or both are undefined is also acceptable\n (!destBucket && !sourceBucket), StorageValidationErrorCode.InvalidCopyOperationStorageBucket);\n};\nexport const copy = async (amplify, input) => {\n return isCopyInputWithPath(input)\n ? copyWithPath(amplify, input)\n : copyWithKey(amplify, input);\n};\nconst copyWithPath = async (amplify, input) => {\n const { source, destination } = input;\n storageBucketAssertion(source.bucket, destination.bucket);\n const { bucket: sourceBucket } = await resolveS3ConfigAndInput(amplify, {\n path: input.source.path,\n options: {\n locationCredentialsProvider: input.options?.locationCredentialsProvider,\n ...input.source,\n },\n });\n // The bucket, region, credentials of s3 client are resolved from destination.\n // Whereas the source bucket and path are a input parameter of S3 copy operation.\n const { s3Config, bucket: destBucket, identityId, } = await resolveS3ConfigAndInput(amplify, {\n path: input.destination.path,\n options: {\n locationCredentialsProvider: input.options?.locationCredentialsProvider,\n customEndpoint: input.options?.customEndpoint,\n ...input.destination,\n },\n }); // resolveS3ConfigAndInput does not make extra API calls or storage access if called repeatedly.\n assertValidationError(!!source.path, StorageValidationErrorCode.NoSourcePath);\n assertValidationError(!!destination.path, StorageValidationErrorCode.NoDestinationPath);\n const { objectKey: sourcePath } = validateStorageOperationInput(source, identityId);\n const { objectKey: destinationPath } = validateStorageOperationInput(destination, identityId);\n validateBucketOwnerID(source.expectedBucketOwner);\n validateBucketOwnerID(destination.expectedBucketOwner);\n const finalCopySource = `${sourceBucket}/${sourcePath}`;\n const finalCopyDestination = destinationPath;\n logger.debug(`copying \"${finalCopySource}\" to \"${finalCopyDestination}\".`);\n await serviceCopy({\n source: finalCopySource,\n destination: finalCopyDestination,\n bucket: destBucket,\n s3Config,\n notModifiedSince: input.source.notModifiedSince,\n eTag: input.source.eTag,\n expectedSourceBucketOwner: input.source?.expectedBucketOwner,\n expectedBucketOwner: input.destination?.expectedBucketOwner,\n tagConfig: input.tagConfig,\n });\n return { path: finalCopyDestination };\n};\n/** @deprecated Use {@link copyWithPath} instead. */\nexport const copyWithKey = async (amplify, input) => {\n const { source, destination } = input;\n storageBucketAssertion(source.bucket, destination.bucket);\n assertValidationError(!!source.key, StorageValidationErrorCode.NoSourceKey);\n assertValidationError(!!destination.key, StorageValidationErrorCode.NoDestinationKey);\n validateBucketOwnerID(source.expectedBucketOwner);\n validateBucketOwnerID(destination.expectedBucketOwner);\n const { bucket: sourceBucket, keyPrefix: sourceKeyPrefix } = await resolveS3ConfigAndInput(amplify, {\n ...input,\n options: {\n // @ts-expect-error: 'options' does not exist on type 'CopyInput'. In case of JS users set the location\n // credentials provider option, resolveS3ConfigAndInput will throw validation error.\n locationCredentialsProvider: input.options?.locationCredentialsProvider,\n ...input.source,\n },\n });\n // The bucket, region, credentials of s3 client are resolved from destination.\n // Whereas the source bucket and path are a input parameter of S3 copy operation.\n const { s3Config, bucket: destBucket, keyPrefix: destinationKeyPrefix, } = await resolveS3ConfigAndInput(amplify, {\n ...input,\n options: {\n // @ts-expect-error: 'options' does not exist on type 'CopyInput'. In case of JS users set the location\n // credentials provider option, resolveS3ConfigAndInput will throw validation error.\n locationCredentialsProvider: input.options?.locationCredentialsProvider,\n ...input.destination,\n },\n }); // resolveS3ConfigAndInput does not make extra API calls or storage access if called repeatedly.\n // TODO(ashwinkumar6) V6-logger: warn `You may copy files from another user if the source level is \"protected\", currently it's ${srcLevel}`\n const finalCopySource = `${sourceBucket}/${sourceKeyPrefix}${source.key}`;\n const finalCopyDestination = `${destinationKeyPrefix}${destination.key}`;\n logger.debug(`copying \"${finalCopySource}\" to \"${finalCopyDestination}\".`);\n await serviceCopy({\n source: finalCopySource,\n destination: finalCopyDestination,\n bucket: destBucket,\n s3Config,\n notModifiedSince: input.source.notModifiedSince,\n eTag: input.source.eTag,\n expectedSourceBucketOwner: input.source?.expectedBucketOwner,\n expectedBucketOwner: input.destination?.expectedBucketOwner,\n });\n return {\n key: destination.key,\n };\n};\nconst serviceCopy = async ({ source, destination, bucket, s3Config, notModifiedSince, eTag, expectedSourceBucketOwner, expectedBucketOwner, tagConfig, }) => {\n await copyObject({\n ...s3Config,\n userAgentValue: getStorageUserAgentValue(StorageAction.Copy),\n }, {\n Bucket: bucket,\n CopySource: source,\n Key: destination,\n MetadataDirective: 'COPY', // Copies over metadata like contentType as well\n TaggingDirective: tagConfig?.mode === 'remove' ? 'REPLACE' : 'COPY',\n CopySourceIfMatch: eTag,\n CopySourceIfUnmodifiedSince: notModifiedSince,\n ExpectedSourceBucketOwner: expectedSourceBucketOwner,\n ExpectedBucketOwner: expectedBucketOwner,\n });\n};\n"],"names":[],"mappings":"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"}
|