@aws-amplify/core
Version:
Core category of aws-amplify
46 lines (44 loc) • 2.27 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.presignUrl = void 0;
const amplifyUrl_1 = require("../../../../../utils/amplifyUrl");
const constants_1 = require("./constants");
const getSigningValues_1 = require("./utils/getSigningValues");
const getSignature_1 = require("./utils/getSignature");
/**
* Given a `Presignable` object, returns a Signature Version 4 presigned `URL` object.
*
* @param presignable `Presignable` object containing at least a url to be presigned with authentication query params.
* @param presignUrlOptions `PresignUrlOptions` object containing values used to construct the signature.
* @returns A `URL` with authentication query params which can grant temporary access to AWS resources.
*/
const presignUrl = ({ body, method = 'GET', url }, { expiration, ...options }) => {
const signingValues = (0, getSigningValues_1.getSigningValues)(options);
const { accessKeyId, credentialScope, longDate, sessionToken } = signingValues;
// create the request to sign
const presignedUrl = new amplifyUrl_1.AmplifyUrl(url);
Object.entries({
[constants_1.ALGORITHM_QUERY_PARAM]: constants_1.SHA256_ALGORITHM_IDENTIFIER,
[constants_1.CREDENTIAL_QUERY_PARAM]: `${accessKeyId}/${credentialScope}`,
[constants_1.AMZ_DATE_QUERY_PARAM]: longDate,
[constants_1.SIGNED_HEADERS_QUERY_PARAM]: constants_1.HOST_HEADER,
...(expiration && { [constants_1.EXPIRES_QUERY_PARAM]: expiration.toString() }),
...(sessionToken && { [constants_1.TOKEN_QUERY_PARAM]: sessionToken }),
}).forEach(([key, value]) => {
presignedUrl.searchParams.append(key, value);
});
const requestToSign = {
body,
headers: { [constants_1.HOST_HEADER]: url.host },
method,
url: presignedUrl,
};
// calculate and add the signature to the url
const signature = (0, getSignature_1.getSignature)(requestToSign, signingValues);
presignedUrl.searchParams.append(constants_1.SIGNATURE_QUERY_PARAM, signature);
return presignedUrl;
};
exports.presignUrl = presignUrl;
//# sourceMappingURL=presignUrl.js.map