UNPKG

@aws-amplify/storage

Version:

Storage category of aws-amplify

39 lines (37 loc) 2.19 kB
'use strict'; // 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