UNPKG

@aws-amplify/storage

Version:

Storage category of aws-amplify

55 lines (53 loc) 2.87 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.getUrl = void 0; const utils_1 = require("@aws-amplify/core/internals/utils"); const validation_1 = require("../../../../errors/types/validation"); const client_1 = require("../../utils/client"); const utils_2 = require("../../utils"); const assertValidationError_1 = require("../../../../errors/utils/assertValidationError"); const constants_1 = require("../../utils/constants"); const constructContentDisposition_1 = require("../../utils/constructContentDisposition"); const getProperties_1 = require("./getProperties"); const getUrl = async (amplify, input) => { const { options: getUrlOptions } = input; const { s3Config, keyPrefix, bucket, identityId } = await (0, utils_2.resolveS3ConfigAndInput)(amplify, getUrlOptions); const { inputType, objectKey } = (0, utils_2.validateStorageOperationInput)(input, identityId); const finalKey = inputType === constants_1.STORAGE_INPUT_KEY ? keyPrefix + objectKey : objectKey; if (getUrlOptions?.validateObjectExistence) { await (0, getProperties_1.getProperties)(amplify, input, utils_1.StorageAction.GetUrl); } let urlExpirationInSec = getUrlOptions?.expiresIn ?? constants_1.DEFAULT_PRESIGN_EXPIRATION; const resolvedCredential = typeof s3Config.credentials === 'function' ? await s3Config.credentials() : s3Config.credentials; const awsCredExpiration = resolvedCredential.expiration; if (awsCredExpiration) { const awsCredExpirationInSec = Math.floor((awsCredExpiration.getTime() - Date.now()) / 1000); urlExpirationInSec = Math.min(awsCredExpirationInSec, urlExpirationInSec); } const maxUrlExpirationInSec = constants_1.MAX_URL_EXPIRATION / 1000; (0, assertValidationError_1.assertValidationError)(urlExpirationInSec <= maxUrlExpirationInSec, validation_1.StorageValidationErrorCode.UrlExpirationMaxLimitExceed); // expiresAt is the minimum of credential expiration and url expiration return { url: await (0, client_1.getPresignedGetObjectUrl)({ ...s3Config, credentials: resolvedCredential, expiration: urlExpirationInSec, }, { Bucket: bucket, Key: finalKey, ...(getUrlOptions?.contentDisposition && { ResponseContentDisposition: (0, constructContentDisposition_1.constructContentDisposition)(getUrlOptions.contentDisposition), }), ...(getUrlOptions?.contentType && { ResponseContentType: getUrlOptions.contentType, }), }), expiresAt: new Date(Date.now() + urlExpirationInSec * 1000), }; }; exports.getUrl = getUrl; //# sourceMappingURL=getUrl.js.map