UNPKG

@aws-amplify/core

Version:
46 lines (44 loc) 2.27 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.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