{"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, validateStorageOperationInput, } from '../../utils';\nimport { StorageValidationErrorCode } from '../../../../errors/types/validation';\nimport { assertValidationError } from '../../../../errors/utils/assertValidationError';\nimport { copyObject } from '../../utils/client';\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, identityId } = await resolveS3ConfigAndInput(amplify, input.source);\n    const { s3Config, bucket: destBucket } = await resolveS3ConfigAndInput(amplify, input.destination); // 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    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    });\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    const { bucket: sourceBucket, keyPrefix: sourceKeyPrefix } = await resolveS3ConfigAndInput(amplify, source);\n    const { s3Config, bucket: destBucket, keyPrefix: destinationKeyPrefix, } = await resolveS3ConfigAndInput(amplify, destination); // 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    });\n    return {\n        key: destination.key,\n    };\n};\nconst serviceCopy = async ({ source, destination, bucket, s3Config, }) => {\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    });\n};\n"],"names":[],"mappings":"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"}