@aws-amplify/core
Version:
Core category of aws-amplify
1 lines • 3.45 kB
Source Map (JSON)
{"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;;;;"}