@aws-amplify/storage
Version:
Storage category of aws-amplify
39 lines (37 loc) • 2.19 kB
JavaScript
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
Object.defineProperty(exports, "__esModule", { value: true });
exports.copy = void 0;
const utils_1 = require("@aws-amplify/core/internals/utils");
const utils_2 = require("../../utils");
const validation_1 = require("../../../../errors/types/validation");
const assertValidationError_1 = require("../../../../errors/utils/assertValidationError");
const client_1 = require("../../utils/client");
const userAgent_1 = require("../../utils/userAgent");
const utils_3 = require("../../../../utils");
const copy = async (amplify, input) => {
const { source: { key: sourceKey }, destination: { key: destinationKey }, } = input;
(0, assertValidationError_1.assertValidationError)(!!sourceKey, validation_1.StorageValidationErrorCode.NoSourceKey);
(0, assertValidationError_1.assertValidationError)(!!destinationKey, validation_1.StorageValidationErrorCode.NoDestinationKey);
const { s3Config, bucket, keyPrefix: sourceKeyPrefix, } = await (0, utils_2.resolveS3ConfigAndInput)(amplify, input.source);
const { keyPrefix: destinationKeyPrefix } = await (0, utils_2.resolveS3ConfigAndInput)(amplify, input.destination); // resolveS3ConfigAndInput does not make extra API calls or storage access if called repeatedly.
// TODO(ashwinkumar6) V6-logger: warn `You may copy files from another user if the source level is "protected", currently it's ${srcLevel}`
const finalCopySource = `${bucket}/${sourceKeyPrefix}${sourceKey}`;
const finalCopyDestination = `${destinationKeyPrefix}${destinationKey}`;
utils_3.logger.debug(`copying "${finalCopySource}" to "${finalCopyDestination}".`);
await (0, client_1.copyObject)({
...s3Config,
userAgentValue: (0, userAgent_1.getStorageUserAgentValue)(utils_1.StorageAction.Copy),
}, {
Bucket: bucket,
CopySource: finalCopySource,
Key: finalCopyDestination,
MetadataDirective: 'COPY', // Copies over metadata like contentType as well
});
return {
key: destinationKey,
};
};
exports.copy = copy;
//# sourceMappingURL=copy.js.map
;