{"version":3,"file":"presignUrl.mjs","sources":["../../../../../../../src/clients/middleware/signing/signer/signatureV4/presignUrl.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { AmplifyUrl } from '../../../../../utils/amplifyUrl';\nimport { ALGORITHM_QUERY_PARAM, AMZ_DATE_QUERY_PARAM, CREDENTIAL_QUERY_PARAM, EXPIRES_QUERY_PARAM, HOST_HEADER, SHA256_ALGORITHM_IDENTIFIER, SIGNATURE_QUERY_PARAM, SIGNED_HEADERS_QUERY_PARAM, TOKEN_QUERY_PARAM, } from './constants';\nimport { getSigningValues } from './utils/getSigningValues';\nimport { getSignature } from './utils/getSignature';\n/**\n * Given a `Presignable` object, returns a Signature Version 4 presigned `URL` object.\n *\n * @param presignable `Presignable` object containing at least a url to be presigned with authentication query params.\n * @param presignUrlOptions `PresignUrlOptions` object containing values used to construct the signature.\n * @returns A `URL` with authentication query params which can grant temporary access to AWS resources.\n */\nexport const presignUrl = ({ body, method = 'GET', url }, { expiration, ...options }) => {\n    const signingValues = getSigningValues(options);\n    const { accessKeyId, credentialScope, longDate, sessionToken } = signingValues;\n    // create the request to sign\n    const presignedUrl = new AmplifyUrl(url);\n    Object.entries({\n        [ALGORITHM_QUERY_PARAM]: SHA256_ALGORITHM_IDENTIFIER,\n        [CREDENTIAL_QUERY_PARAM]: `${accessKeyId}/${credentialScope}`,\n        [AMZ_DATE_QUERY_PARAM]: longDate,\n        [SIGNED_HEADERS_QUERY_PARAM]: HOST_HEADER,\n        ...(expiration && { [EXPIRES_QUERY_PARAM]: expiration.toString() }),\n        ...(sessionToken && { [TOKEN_QUERY_PARAM]: sessionToken }),\n    }).forEach(([key, value]) => {\n        presignedUrl.searchParams.append(key, value);\n    });\n    const requestToSign = {\n        body,\n        headers: { [HOST_HEADER]: url.host },\n        method,\n        url: presignedUrl,\n    };\n    // calculate and add the signature to the url\n    const signature = getSignature(requestToSign, signingValues);\n    presignedUrl.searchParams.append(SIGNATURE_QUERY_PARAM, signature);\n    return presignedUrl;\n};\n"],"names":[],"mappings":";;;;;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,UAAU,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,KAAK;AACzF,IAAI,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC;AACnD,IAAI,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,aAAa;AAClF;AACA,IAAI,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC;AAC5C,IAAI,MAAM,CAAC,OAAO,CAAC;AACnB,QAAQ,CAAC,qBAAqB,GAAG,2BAA2B;AAC5D,QAAQ,CAAC,sBAAsB,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;AACrE,QAAQ,CAAC,oBAAoB,GAAG,QAAQ;AACxC,QAAQ,CAAC,0BAA0B,GAAG,WAAW;AACjD,QAAQ,IAAI,UAAU,IAAI,EAAE,CAAC,mBAAmB,GAAG,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC3E,QAAQ,IAAI,YAAY,IAAI,EAAE,CAAC,iBAAiB,GAAG,YAAY,EAAE,CAAC;AAClE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AACjC,QAAQ,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;AACpD,IAAI,CAAC,CAAC;AACN,IAAI,MAAM,aAAa,GAAG;AAC1B,QAAQ,IAAI;AACZ,QAAQ,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,EAAE;AAC5C,QAAQ,MAAM;AACd,QAAQ,GAAG,EAAE,YAAY;AACzB,KAAK;AACL;AACA,IAAI,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,EAAE,aAAa,CAAC;AAChE,IAAI,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,qBAAqB,EAAE,SAAS,CAAC;AACtE,IAAI,OAAO,YAAY;AACvB;;;;"}