@aws-amplify/api-rest 4.0.8 → 4.0.9-unstable.01d9e8a.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.transferHandler = void 0;
5
5
  const aws_client_utils_1 = require("@aws-amplify/core/internals/aws-client-utils");
6
6
  const utils_1 = require("../../utils");
7
- const normalizeHeaders_1 = require("../../utils/normalizeHeaders");
7
+ const resolveHeaders_1 = require("../../utils/resolveHeaders");
8
8
  /**
9
9
  * Make REST API call with best-effort IAM auth.
10
10
  * @param amplify Amplify instance to to resolve credentials and tokens. Should use different instance in client-side
@@ -22,16 +22,7 @@ const transferHandler = async (amplify, options, signingServiceInfo) => {
22
22
  ? body
23
23
  : JSON.stringify(body ?? '')
24
24
  : undefined;
25
- const resolvedHeaders = {
26
- ...(0, normalizeHeaders_1.normalizeHeaders)(headers),
27
- ...(resolvedBody
28
- ? {
29
- 'content-type': body instanceof FormData
30
- ? 'multipart/form-data'
31
- : 'application/json; charset=UTF-8',
32
- }
33
- : {}),
34
- };
25
+ const resolvedHeaders = (0, resolveHeaders_1.resolveHeaders)(headers, body);
35
26
  const request = {
36
27
  url,
37
28
  headers: resolvedHeaders,
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sources":["../../../../src/apis/common/handler.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.transferHandler = void 0;\nconst aws_client_utils_1 = require(\"@aws-amplify/core/internals/aws-client-utils\");\nconst utils_1 = require(\"../../utils\");\nconst normalizeHeaders_1 = require(\"../../utils/normalizeHeaders\");\n/**\n * Make REST API call with best-effort IAM auth.\n * @param amplify Amplify instance to to resolve credentials and tokens. Should use different instance in client-side\n * and SSR\n * @param options Options accepted from public API options when calling the handlers.\n * @param signingServiceInfo Internal-only options enable IAM auth as well as to to overwrite the IAM signing service\n * and region. If specified, and NONE of API Key header or Auth header is present, IAM auth will be used.\n *\n * @internal\n */\nconst transferHandler = async (amplify, options, signingServiceInfo) => {\n const { url, method, headers, body, withCredentials, abortSignal } = options;\n const resolvedBody = body\n ? body instanceof FormData\n ? body\n : JSON.stringify(body ?? '')\n : undefined;\n const resolvedHeaders = {\n ...(0, normalizeHeaders_1.normalizeHeaders)(headers),\n ...(resolvedBody\n ? {\n 'content-type': body instanceof FormData\n ? 'multipart/form-data'\n : 'application/json; charset=UTF-8',\n }\n : {}),\n };\n const request = {\n url,\n headers: resolvedHeaders,\n method,\n body: resolvedBody,\n };\n const baseOptions = {\n retryDecider: (0, aws_client_utils_1.getRetryDecider)(utils_1.parseRestApiServiceError),\n computeDelay: aws_client_utils_1.jitteredBackoff,\n withCrossDomainCredentials: withCredentials,\n abortSignal,\n };\n const isIamAuthApplicable = iamAuthApplicable(request, signingServiceInfo);\n let response;\n if (isIamAuthApplicable) {\n const signingInfoFromUrl = (0, utils_1.parseSigningInfo)(url);\n const signingService = signingServiceInfo?.service ?? signingInfoFromUrl.service;\n const signingRegion = signingServiceInfo?.region ?? signingInfoFromUrl.region;\n const credentials = await (0, utils_1.resolveCredentials)(amplify);\n response = await (0, aws_client_utils_1.authenticatedHandler)(request, {\n ...baseOptions,\n credentials,\n region: signingRegion,\n service: signingService,\n });\n }\n else {\n response = await (0, aws_client_utils_1.unauthenticatedHandler)(request, {\n ...baseOptions,\n });\n }\n // Clean-up un-modeled properties from response.\n return {\n statusCode: response.statusCode,\n headers: response.headers,\n body: response.body,\n };\n};\nexports.transferHandler = transferHandler;\nconst iamAuthApplicable = ({ headers }, signingServiceInfo) => !headers.authorization && !headers['x-api-key'] && !!signingServiceInfo;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handler.js","sources":["../../../../src/apis/common/handler.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.transferHandler = void 0;\nconst aws_client_utils_1 = require(\"@aws-amplify/core/internals/aws-client-utils\");\nconst utils_1 = require(\"../../utils\");\nconst resolveHeaders_1 = require(\"../../utils/resolveHeaders\");\n/**\n * Make REST API call with best-effort IAM auth.\n * @param amplify Amplify instance to to resolve credentials and tokens. Should use different instance in client-side\n * and SSR\n * @param options Options accepted from public API options when calling the handlers.\n * @param signingServiceInfo Internal-only options enable IAM auth as well as to to overwrite the IAM signing service\n * and region. If specified, and NONE of API Key header or Auth header is present, IAM auth will be used.\n *\n * @internal\n */\nconst transferHandler = async (amplify, options, signingServiceInfo) => {\n const { url, method, headers, body, withCredentials, abortSignal } = options;\n const resolvedBody = body\n ? body instanceof FormData\n ? body\n : JSON.stringify(body ?? '')\n : undefined;\n const resolvedHeaders = (0, resolveHeaders_1.resolveHeaders)(headers, body);\n const request = {\n url,\n headers: resolvedHeaders,\n method,\n body: resolvedBody,\n };\n const baseOptions = {\n retryDecider: (0, aws_client_utils_1.getRetryDecider)(utils_1.parseRestApiServiceError),\n computeDelay: aws_client_utils_1.jitteredBackoff,\n withCrossDomainCredentials: withCredentials,\n abortSignal,\n };\n const isIamAuthApplicable = iamAuthApplicable(request, signingServiceInfo);\n let response;\n if (isIamAuthApplicable) {\n const signingInfoFromUrl = (0, utils_1.parseSigningInfo)(url);\n const signingService = signingServiceInfo?.service ?? signingInfoFromUrl.service;\n const signingRegion = signingServiceInfo?.region ?? signingInfoFromUrl.region;\n const credentials = await (0, utils_1.resolveCredentials)(amplify);\n response = await (0, aws_client_utils_1.authenticatedHandler)(request, {\n ...baseOptions,\n credentials,\n region: signingRegion,\n service: signingService,\n });\n }\n else {\n response = await (0, aws_client_utils_1.unauthenticatedHandler)(request, {\n ...baseOptions,\n });\n }\n // Clean-up un-modeled properties from response.\n return {\n statusCode: response.statusCode,\n headers: response.headers,\n body: response.body,\n };\n};\nexports.transferHandler = transferHandler;\nconst iamAuthApplicable = ({ headers }, signingServiceInfo) => !headers.authorization && !headers['x-api-key'] && !!signingServiceInfo;\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ // SPDX-License-Identifier: Apache-2.0
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.resolveHeaders = void 0;
7
+ const resolveHeaders = (headers, body) => {
8
+ const normalizedHeaders = {};
9
+ for (const key in headers) {
10
+ normalizedHeaders[key.toLowerCase()] = headers[key];
11
+ }
12
+ if (body) {
13
+ normalizedHeaders['content-type'] = 'application/json; charset=UTF-8';
14
+ if (body instanceof FormData) {
15
+ /**
16
+ * If body is a FormData we should not allow setting content-type.
17
+ * It's because runtime HTTP handlers(xhr, fetch, undici, node-fetch,
18
+ * etc.) will modify the content-type value when setting multipart
19
+ * boundary.
20
+ */
21
+ delete normalizedHeaders['content-type'];
22
+ }
23
+ }
24
+ return normalizedHeaders;
25
+ };
26
+ exports.resolveHeaders = resolveHeaders;
27
+ //# sourceMappingURL=resolveHeaders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveHeaders.js","sources":["../../../src/utils/resolveHeaders.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveHeaders = void 0;\nconst resolveHeaders = (headers, body) => {\n const normalizedHeaders = {};\n const isFormData = body instanceof FormData;\n for (const key in headers) {\n normalizedHeaders[key.toLowerCase()] = headers[key];\n }\n if (body) {\n normalizedHeaders['content-type'] = 'application/json; charset=UTF-8';\n if (body instanceof FormData) {\n /**\n * If body is a FormData we should not allow setting content-type.\n * It's because runtime HTTP handlers(xhr, fetch, undici, node-fetch,\n * etc.) will modify the content-type value when setting multipart\n * boundary.\n */\n delete normalizedHeaders['content-type'];\n }\n }\n return normalizedHeaders;\n};\nexports.resolveHeaders = resolveHeaders;\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,OAAO,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC;AAChC,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK;AAC1C,IAAI,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEjC,IAAI,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AAC/B,QAAQ,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5D,KAAK;AACL,IAAI,IAAI,IAAI,EAAE;AACd,QAAQ,iBAAiB,CAAC,cAAc,CAAC,GAAG,iCAAiC,CAAC;AAC9E,QAAQ,IAAI,IAAI,YAAY,QAAQ,EAAE;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO,iBAAiB,CAAC,cAAc,CAAC,CAAC;AACrD,SAAS;AACT,KAAK;AACL,IAAI,OAAO,iBAAiB,CAAC;AAC7B,CAAC,CAAC;AACF,OAAO,CAAC,cAAc,GAAG,cAAc;;"}
@@ -5,7 +5,7 @@ import { parseRestApiServiceError } from '../../utils/serviceError.mjs';
5
5
  import '../../utils/logger.mjs';
6
6
  import { resolveCredentials } from '../../utils/resolveCredentials.mjs';
7
7
  import { parseSigningInfo } from '../../utils/parseSigningInfo.mjs';
8
- import { normalizeHeaders } from '../../utils/normalizeHeaders.mjs';
8
+ import { resolveHeaders } from '../../utils/resolveHeaders.mjs';
9
9
 
10
10
  /**
11
11
  * Make REST API call with best-effort IAM auth.
@@ -24,16 +24,7 @@ const transferHandler = async (amplify, options, signingServiceInfo) => {
24
24
  ? body
25
25
  : JSON.stringify(body ?? '')
26
26
  : undefined;
27
- const resolvedHeaders = {
28
- ...normalizeHeaders(headers),
29
- ...(resolvedBody
30
- ? {
31
- 'content-type': body instanceof FormData
32
- ? 'multipart/form-data'
33
- : 'application/json; charset=UTF-8',
34
- }
35
- : {}),
36
- };
27
+ const resolvedHeaders = resolveHeaders(headers, body);
37
28
  const request = {
38
29
  url,
39
30
  headers: resolvedHeaders,
@@ -1 +1 @@
1
- {"version":3,"file":"handler.mjs","sources":["../../../../src/apis/common/handler.ts"],"sourcesContent":["import { unauthenticatedHandler, getRetryDecider, jitteredBackoff, authenticatedHandler, } from '@aws-amplify/core/internals/aws-client-utils';\nimport { parseRestApiServiceError, parseSigningInfo, resolveCredentials, } from '../../utils';\nimport { normalizeHeaders } from '../../utils/normalizeHeaders';\n/**\n * Make REST API call with best-effort IAM auth.\n * @param amplify Amplify instance to to resolve credentials and tokens. Should use different instance in client-side\n * and SSR\n * @param options Options accepted from public API options when calling the handlers.\n * @param signingServiceInfo Internal-only options enable IAM auth as well as to to overwrite the IAM signing service\n * and region. If specified, and NONE of API Key header or Auth header is present, IAM auth will be used.\n *\n * @internal\n */\nexport const transferHandler = async (amplify, options, signingServiceInfo) => {\n const { url, method, headers, body, withCredentials, abortSignal } = options;\n const resolvedBody = body\n ? body instanceof FormData\n ? body\n : JSON.stringify(body ?? '')\n : undefined;\n const resolvedHeaders = {\n ...normalizeHeaders(headers),\n ...(resolvedBody\n ? {\n 'content-type': body instanceof FormData\n ? 'multipart/form-data'\n : 'application/json; charset=UTF-8',\n }\n : {}),\n };\n const request = {\n url,\n headers: resolvedHeaders,\n method,\n body: resolvedBody,\n };\n const baseOptions = {\n retryDecider: getRetryDecider(parseRestApiServiceError),\n computeDelay: jitteredBackoff,\n withCrossDomainCredentials: withCredentials,\n abortSignal,\n };\n const isIamAuthApplicable = iamAuthApplicable(request, signingServiceInfo);\n let response;\n if (isIamAuthApplicable) {\n const signingInfoFromUrl = parseSigningInfo(url);\n const signingService = signingServiceInfo?.service ?? signingInfoFromUrl.service;\n const signingRegion = signingServiceInfo?.region ?? signingInfoFromUrl.region;\n const credentials = await resolveCredentials(amplify);\n response = await authenticatedHandler(request, {\n ...baseOptions,\n credentials,\n region: signingRegion,\n service: signingService,\n });\n }\n else {\n response = await unauthenticatedHandler(request, {\n ...baseOptions,\n });\n }\n // Clean-up un-modeled properties from response.\n return {\n statusCode: response.statusCode,\n headers: response.headers,\n body: response.body,\n };\n};\nconst iamAuthApplicable = ({ headers }, signingServiceInfo) => !headers.authorization && !headers['x-api-key'] && !!signingServiceInfo;\n"],"names":[],"mappings":";;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,eAAe,GAAG,OAAO,OAAO,EAAE,OAAO,EAAE,kBAAkB,KAAK;AAC/E,IAAI,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;AACjF,IAAI,MAAM,YAAY,GAAG,IAAI;AAC7B,UAAU,IAAI,YAAY,QAAQ;AAClC,cAAc,IAAI;AAClB,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;AACxC,UAAU,SAAS,CAAC;AACpB,IAAI,MAAM,eAAe,GAAG;AAC5B,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC;AACpC,QAAQ,IAAI,YAAY;AACxB,cAAc;AACd,gBAAgB,cAAc,EAAE,IAAI,YAAY,QAAQ;AACxD,sBAAsB,qBAAqB;AAC3C,sBAAsB,iCAAiC;AACvD,aAAa;AACb,cAAc,EAAE,CAAC;AACjB,KAAK,CAAC;AACN,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,GAAG;AACX,QAAQ,OAAO,EAAE,eAAe;AAChC,QAAQ,MAAM;AACd,QAAQ,IAAI,EAAE,YAAY;AAC1B,KAAK,CAAC;AACN,IAAI,MAAM,WAAW,GAAG;AACxB,QAAQ,YAAY,EAAE,eAAe,CAAC,wBAAwB,CAAC;AAC/D,QAAQ,YAAY,EAAE,eAAe;AACrC,QAAQ,0BAA0B,EAAE,eAAe;AACnD,QAAQ,WAAW;AACnB,KAAK,CAAC;AACN,IAAI,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AAC/E,IAAI,IAAI,QAAQ,CAAC;AACjB,IAAI,IAAI,mBAAmB,EAAE;AAC7B,QAAQ,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACzD,QAAQ,MAAM,cAAc,GAAG,kBAAkB,EAAE,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC;AACzF,QAAQ,MAAM,aAAa,GAAG,kBAAkB,EAAE,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC;AACtF,QAAQ,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC9D,QAAQ,QAAQ,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE;AACvD,YAAY,GAAG,WAAW;AAC1B,YAAY,WAAW;AACvB,YAAY,MAAM,EAAE,aAAa;AACjC,YAAY,OAAO,EAAE,cAAc;AACnC,SAAS,CAAC,CAAC;AACX,KAAK;AACL,SAAS;AACT,QAAQ,QAAQ,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE;AACzD,YAAY,GAAG,WAAW;AAC1B,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA,IAAI,OAAO;AACX,QAAQ,UAAU,EAAE,QAAQ,CAAC,UAAU;AACvC,QAAQ,OAAO,EAAE,QAAQ,CAAC,OAAO;AACjC,QAAQ,IAAI,EAAE,QAAQ,CAAC,IAAI;AAC3B,KAAK,CAAC;AACN,EAAE;AACF,MAAM,iBAAiB,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,KAAK,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,kBAAkB;;;;"}
1
+ {"version":3,"file":"handler.mjs","sources":["../../../../src/apis/common/handler.ts"],"sourcesContent":["import { unauthenticatedHandler, getRetryDecider, jitteredBackoff, authenticatedHandler, } from '@aws-amplify/core/internals/aws-client-utils';\nimport { parseRestApiServiceError, parseSigningInfo, resolveCredentials, } from '../../utils';\nimport { resolveHeaders } from '../../utils/resolveHeaders';\n/**\n * Make REST API call with best-effort IAM auth.\n * @param amplify Amplify instance to to resolve credentials and tokens. Should use different instance in client-side\n * and SSR\n * @param options Options accepted from public API options when calling the handlers.\n * @param signingServiceInfo Internal-only options enable IAM auth as well as to to overwrite the IAM signing service\n * and region. If specified, and NONE of API Key header or Auth header is present, IAM auth will be used.\n *\n * @internal\n */\nexport const transferHandler = async (amplify, options, signingServiceInfo) => {\n const { url, method, headers, body, withCredentials, abortSignal } = options;\n const resolvedBody = body\n ? body instanceof FormData\n ? body\n : JSON.stringify(body ?? '')\n : undefined;\n const resolvedHeaders = resolveHeaders(headers, body);\n const request = {\n url,\n headers: resolvedHeaders,\n method,\n body: resolvedBody,\n };\n const baseOptions = {\n retryDecider: getRetryDecider(parseRestApiServiceError),\n computeDelay: jitteredBackoff,\n withCrossDomainCredentials: withCredentials,\n abortSignal,\n };\n const isIamAuthApplicable = iamAuthApplicable(request, signingServiceInfo);\n let response;\n if (isIamAuthApplicable) {\n const signingInfoFromUrl = parseSigningInfo(url);\n const signingService = signingServiceInfo?.service ?? signingInfoFromUrl.service;\n const signingRegion = signingServiceInfo?.region ?? signingInfoFromUrl.region;\n const credentials = await resolveCredentials(amplify);\n response = await authenticatedHandler(request, {\n ...baseOptions,\n credentials,\n region: signingRegion,\n service: signingService,\n });\n }\n else {\n response = await unauthenticatedHandler(request, {\n ...baseOptions,\n });\n }\n // Clean-up un-modeled properties from response.\n return {\n statusCode: response.statusCode,\n headers: response.headers,\n body: response.body,\n };\n};\nconst iamAuthApplicable = ({ headers }, signingServiceInfo) => !headers.authorization && !headers['x-api-key'] && !!signingServiceInfo;\n"],"names":[],"mappings":";;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,eAAe,GAAG,OAAO,OAAO,EAAE,OAAO,EAAE,kBAAkB,KAAK;AAC/E,IAAI,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;AACjF,IAAI,MAAM,YAAY,GAAG,IAAI;AAC7B,UAAU,IAAI,YAAY,QAAQ;AAClC,cAAc,IAAI;AAClB,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;AACxC,UAAU,SAAS,CAAC;AACpB,IAAI,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC1D,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,GAAG;AACX,QAAQ,OAAO,EAAE,eAAe;AAChC,QAAQ,MAAM;AACd,QAAQ,IAAI,EAAE,YAAY;AAC1B,KAAK,CAAC;AACN,IAAI,MAAM,WAAW,GAAG;AACxB,QAAQ,YAAY,EAAE,eAAe,CAAC,wBAAwB,CAAC;AAC/D,QAAQ,YAAY,EAAE,eAAe;AACrC,QAAQ,0BAA0B,EAAE,eAAe;AACnD,QAAQ,WAAW;AACnB,KAAK,CAAC;AACN,IAAI,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AAC/E,IAAI,IAAI,QAAQ,CAAC;AACjB,IAAI,IAAI,mBAAmB,EAAE;AAC7B,QAAQ,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACzD,QAAQ,MAAM,cAAc,GAAG,kBAAkB,EAAE,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC;AACzF,QAAQ,MAAM,aAAa,GAAG,kBAAkB,EAAE,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC;AACtF,QAAQ,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC9D,QAAQ,QAAQ,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE;AACvD,YAAY,GAAG,WAAW;AAC1B,YAAY,WAAW;AACvB,YAAY,MAAM,EAAE,aAAa;AACjC,YAAY,OAAO,EAAE,cAAc;AACnC,SAAS,CAAC,CAAC;AACX,KAAK;AACL,SAAS;AACT,QAAQ,QAAQ,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE;AACzD,YAAY,GAAG,WAAW;AAC1B,SAAS,CAAC,CAAC;AACX,KAAK;AACL;AACA,IAAI,OAAO;AACX,QAAQ,UAAU,EAAE,QAAQ,CAAC,UAAU;AACvC,QAAQ,OAAO,EAAE,QAAQ,CAAC,OAAO;AACjC,QAAQ,IAAI,EAAE,QAAQ,CAAC,IAAI;AAC3B,KAAK,CAAC;AACN,EAAE;AACF,MAAM,iBAAiB,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,KAAK,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,kBAAkB;;;;"}
@@ -0,0 +1 @@
1
+ export declare const resolveHeaders: (headers?: Record<string, string>, body?: unknown) => Record<string, string>;
@@ -0,0 +1,24 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ const resolveHeaders = (headers, body) => {
4
+ const normalizedHeaders = {};
5
+ for (const key in headers) {
6
+ normalizedHeaders[key.toLowerCase()] = headers[key];
7
+ }
8
+ if (body) {
9
+ normalizedHeaders['content-type'] = 'application/json; charset=UTF-8';
10
+ if (body instanceof FormData) {
11
+ /**
12
+ * If body is a FormData we should not allow setting content-type.
13
+ * It's because runtime HTTP handlers(xhr, fetch, undici, node-fetch,
14
+ * etc.) will modify the content-type value when setting multipart
15
+ * boundary.
16
+ */
17
+ delete normalizedHeaders['content-type'];
18
+ }
19
+ }
20
+ return normalizedHeaders;
21
+ };
22
+
23
+ export { resolveHeaders };
24
+ //# sourceMappingURL=resolveHeaders.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveHeaders.mjs","sources":["../../../src/utils/resolveHeaders.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nexport const resolveHeaders = (headers, body) => {\n const normalizedHeaders = {};\n const isFormData = body instanceof FormData;\n for (const key in headers) {\n normalizedHeaders[key.toLowerCase()] = headers[key];\n }\n if (body) {\n normalizedHeaders['content-type'] = 'application/json; charset=UTF-8';\n if (body instanceof FormData) {\n /**\n * If body is a FormData we should not allow setting content-type.\n * It's because runtime HTTP handlers(xhr, fetch, undici, node-fetch,\n * etc.) will modify the content-type value when setting multipart\n * boundary.\n */\n delete normalizedHeaders['content-type'];\n }\n }\n return normalizedHeaders;\n};\n"],"names":[],"mappings":"AAAA;AACA;AACY,MAAC,cAAc,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK;AACjD,IAAI,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEjC,IAAI,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AAC/B,QAAQ,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5D,KAAK;AACL,IAAI,IAAI,IAAI,EAAE;AACd,QAAQ,iBAAiB,CAAC,cAAc,CAAC,GAAG,iCAAiC,CAAC;AAC9E,QAAQ,IAAI,IAAI,YAAY,QAAQ,EAAE;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO,iBAAiB,CAAC,cAAc,CAAC,CAAC;AACrD,SAAS;AACT,KAAK;AACL,IAAI,OAAO,iBAAiB,CAAC;AAC7B;;;;"}
package/package.json CHANGED
@@ -1,105 +1,105 @@
1
1
  {
2
- "name": "@aws-amplify/api-rest",
3
- "private": false,
4
- "version": "4.0.8",
5
- "description": "Api-rest category of aws-amplify",
6
- "main": "./dist/cjs/index.js",
7
- "module": "./dist/esm/index.mjs",
8
- "typings": "./dist/esm/index.d.ts",
9
- "react-native": "./src/index.ts",
10
- "publishConfig": {
11
- "access": "public"
12
- },
13
- "scripts": {
14
- "test": "npm run lint && jest -w 1 --coverage --logHeapUsage",
15
- "test:watch": "tslint 'src/**/*.ts' && jest -w 1 --watch",
16
- "build-with-test": "npm test && npm build",
17
- "build:umd": "webpack && webpack --config ./webpack.config.dev.js",
18
- "build:esm-cjs": "rollup -c rollup.config.mjs",
19
- "build:cjs:watch": "rimraf dist/cjs && tsc -m commonjs --outDir dist/cjs --watch",
20
- "build:esm:watch": "rimraf dist/esm && tsc -m esnext --outDir dist/esm --watch",
21
- "build": "npm run clean && npm run build:esm-cjs && npm run build:umd",
22
- "clean": "npm run clean:size && rimraf dist lib lib-esm",
23
- "clean:size": "rimraf dual-publish-tmp tmp*",
24
- "format": "echo \"Not implemented\"",
25
- "lint": "tslint 'src/**/*.ts' && npm run ts-coverage",
26
- "ts-coverage": "typescript-coverage-report -p ./tsconfig.json -t 70.0"
27
- },
28
- "exports": {
29
- ".": {
30
- "types": "./dist/esm/index.d.ts",
31
- "import": "./dist/esm/index.mjs",
32
- "require": "./dist/cjs/index.js",
33
- "react-native": "./src/index.ts"
34
- },
35
- "./server": {
36
- "types": "./dist/esm/server.d.ts",
37
- "import": "./dist/esm/server.mjs",
38
- "require": "./dist/cjs/server.js"
39
- },
40
- "./internals": {
41
- "types": "./dist/esm/internals/index.d.ts",
42
- "import": "./dist/esm/internals/index.mjs",
43
- "require": "./dist/cjs/internals/index.js",
44
- "react-native": "./src/internals/index.ts"
45
- },
46
- "./internals/server": {
47
- "types": "./dist/esm/internals/server.d.ts",
48
- "import": "./dist/esm/internals/server.mjs",
49
- "require": "./dist/cjs/internals/server.js"
50
- },
51
- "./package.json": "./package.json"
52
- },
53
- "typesVersions": {
54
- ">=4.2": {
55
- "server": [
56
- "./dist/esm/server.d.ts"
57
- ],
58
- "internals": [
59
- "./dist/esm/internals/index.d.ts"
60
- ],
61
- "internals/server": [
62
- "./dist/esm/internals/server.d.ts"
63
- ]
64
- }
65
- },
66
- "repository": {
67
- "type": "git",
68
- "url": "https://github.com/aws-amplify/amplify-js.git"
69
- },
70
- "author": "Amazon Web Services",
71
- "license": "Apache-2.0",
72
- "bugs": {
73
- "url": "https://github.com/aws/aws-amplify/issues"
74
- },
75
- "homepage": "https://aws-amplify.github.io/",
76
- "files": [
77
- "dist/cjs",
78
- "dist/esm",
79
- "src",
80
- "internals",
81
- "server"
82
- ],
83
- "dependencies": {
84
- "tslib": "^2.5.0"
85
- },
86
- "peerDependencies": {
87
- "@aws-amplify/core": "^6.0.0"
88
- },
89
- "devDependencies": {
90
- "@aws-amplify/core": "6.0.8",
91
- "@aws-amplify/react-native": "1.0.8",
92
- "@rollup/plugin-typescript": "11.1.5",
93
- "rollup": "3.29.4",
94
- "typescript": "5.0.2"
95
- },
96
- "size-limit": [
97
- {
98
- "name": "API (rest client)",
99
- "path": "./dist/esm/index.mjs",
100
- "import": "{ Amplify, RestAPI }",
101
- "limit": "31.5 kB"
102
- }
103
- ],
104
- "gitHead": "36dbfc018e16e977728215ff3621dfdf8739aa6f"
2
+ "name": "@aws-amplify/api-rest",
3
+ "private": false,
4
+ "version": "4.0.9-unstable.01d9e8a.0+01d9e8a",
5
+ "description": "Api-rest category of aws-amplify",
6
+ "main": "./dist/cjs/index.js",
7
+ "module": "./dist/esm/index.mjs",
8
+ "typings": "./dist/esm/index.d.ts",
9
+ "react-native": "./src/index.ts",
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
13
+ "scripts": {
14
+ "test": "npm run lint && jest -w 1 --coverage --logHeapUsage",
15
+ "test:watch": "tslint 'src/**/*.ts' && jest -w 1 --watch",
16
+ "build-with-test": "npm test && npm build",
17
+ "build:umd": "webpack && webpack --config ./webpack.config.dev.js",
18
+ "build:esm-cjs": "rollup -c rollup.config.mjs",
19
+ "build:cjs:watch": "rimraf dist/cjs && tsc -m commonjs --outDir dist/cjs --watch",
20
+ "build:esm:watch": "rimraf dist/esm && tsc -m esnext --outDir dist/esm --watch",
21
+ "build": "npm run clean && npm run build:esm-cjs && npm run build:umd",
22
+ "clean": "npm run clean:size && rimraf dist lib lib-esm",
23
+ "clean:size": "rimraf dual-publish-tmp tmp*",
24
+ "format": "echo \"Not implemented\"",
25
+ "lint": "tslint 'src/**/*.ts' && npm run ts-coverage",
26
+ "ts-coverage": "typescript-coverage-report -p ./tsconfig.json -t 70.0"
27
+ },
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/esm/index.d.ts",
31
+ "import": "./dist/esm/index.mjs",
32
+ "require": "./dist/cjs/index.js",
33
+ "react-native": "./src/index.ts"
34
+ },
35
+ "./server": {
36
+ "types": "./dist/esm/server.d.ts",
37
+ "import": "./dist/esm/server.mjs",
38
+ "require": "./dist/cjs/server.js"
39
+ },
40
+ "./internals": {
41
+ "types": "./dist/esm/internals/index.d.ts",
42
+ "import": "./dist/esm/internals/index.mjs",
43
+ "require": "./dist/cjs/internals/index.js",
44
+ "react-native": "./src/internals/index.ts"
45
+ },
46
+ "./internals/server": {
47
+ "types": "./dist/esm/internals/server.d.ts",
48
+ "import": "./dist/esm/internals/server.mjs",
49
+ "require": "./dist/cjs/internals/server.js"
50
+ },
51
+ "./package.json": "./package.json"
52
+ },
53
+ "typesVersions": {
54
+ ">=4.2": {
55
+ "server": [
56
+ "./dist/esm/server.d.ts"
57
+ ],
58
+ "internals": [
59
+ "./dist/esm/internals/index.d.ts"
60
+ ],
61
+ "internals/server": [
62
+ "./dist/esm/internals/server.d.ts"
63
+ ]
64
+ }
65
+ },
66
+ "repository": {
67
+ "type": "git",
68
+ "url": "https://github.com/aws-amplify/amplify-js.git"
69
+ },
70
+ "author": "Amazon Web Services",
71
+ "license": "Apache-2.0",
72
+ "bugs": {
73
+ "url": "https://github.com/aws/aws-amplify/issues"
74
+ },
75
+ "homepage": "https://aws-amplify.github.io/",
76
+ "files": [
77
+ "dist/cjs",
78
+ "dist/esm",
79
+ "src",
80
+ "internals",
81
+ "server"
82
+ ],
83
+ "dependencies": {
84
+ "tslib": "^2.5.0"
85
+ },
86
+ "peerDependencies": {
87
+ "@aws-amplify/core": "6.0.9-unstable.01d9e8a.0+01d9e8a"
88
+ },
89
+ "devDependencies": {
90
+ "@aws-amplify/core": "6.0.9-unstable.01d9e8a.0+01d9e8a",
91
+ "@aws-amplify/react-native": "1.0.9-unstable.01d9e8a.0+01d9e8a",
92
+ "@rollup/plugin-typescript": "11.1.5",
93
+ "rollup": "3.29.4",
94
+ "typescript": "5.0.2"
95
+ },
96
+ "size-limit": [
97
+ {
98
+ "name": "API (rest client)",
99
+ "path": "./dist/esm/index.mjs",
100
+ "import": "{ Amplify, RestAPI }",
101
+ "limit": "31.5 kB"
102
+ }
103
+ ],
104
+ "gitHead": "01d9e8ac9d3624508ea93c077d39075484e54336"
105
105
  }
@@ -16,7 +16,7 @@ import {
16
16
  parseSigningInfo,
17
17
  resolveCredentials,
18
18
  } from '../../utils';
19
- import { normalizeHeaders } from '../../utils/normalizeHeaders';
19
+ import { resolveHeaders } from '../../utils/resolveHeaders';
20
20
  import { RestApiResponse } from '../../types';
21
21
 
22
22
  type HandlerOptions = Omit<HttpRequest, 'body' | 'headers'> & {
@@ -51,17 +51,7 @@ export const transferHandler = async (
51
51
  ? body
52
52
  : JSON.stringify(body ?? '')
53
53
  : undefined;
54
- const resolvedHeaders: Headers = {
55
- ...normalizeHeaders(headers),
56
- ...(resolvedBody
57
- ? {
58
- 'content-type':
59
- body instanceof FormData
60
- ? 'multipart/form-data'
61
- : 'application/json; charset=UTF-8',
62
- }
63
- : {}),
64
- };
54
+ const resolvedHeaders: Headers = resolveHeaders(headers, body);
65
55
  const request = {
66
56
  url,
67
57
  headers: resolvedHeaders,
@@ -0,0 +1,26 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export const resolveHeaders = (
5
+ headers?: Record<string, string>,
6
+ body?: unknown
7
+ ) => {
8
+ const normalizedHeaders: Record<string, string> = {};
9
+ const isFormData = body instanceof FormData;
10
+ for (const key in headers) {
11
+ normalizedHeaders[key.toLowerCase()] = headers[key];
12
+ }
13
+ if (body) {
14
+ normalizedHeaders['content-type'] = 'application/json; charset=UTF-8';
15
+ if (body instanceof FormData) {
16
+ /**
17
+ * If body is a FormData we should not allow setting content-type.
18
+ * It's because runtime HTTP handlers(xhr, fetch, undici, node-fetch,
19
+ * etc.) will modify the content-type value when setting multipart
20
+ * boundary.
21
+ */
22
+ delete normalizedHeaders['content-type'];
23
+ }
24
+ }
25
+ return normalizedHeaders;
26
+ };
@@ -1,15 +0,0 @@
1
- 'use strict';
2
-
3
- // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
- // SPDX-License-Identifier: Apache-2.0
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.normalizeHeaders = void 0;
7
- const normalizeHeaders = (headers) => {
8
- const normalizedHeaders = {};
9
- for (const key in headers) {
10
- normalizedHeaders[key.toLowerCase()] = headers[key];
11
- }
12
- return normalizedHeaders;
13
- };
14
- exports.normalizeHeaders = normalizeHeaders;
15
- //# sourceMappingURL=normalizeHeaders.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"normalizeHeaders.js","sources":["../../../src/utils/normalizeHeaders.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.normalizeHeaders = void 0;\nconst normalizeHeaders = (headers) => {\n const normalizedHeaders = {};\n for (const key in headers) {\n normalizedHeaders[key.toLowerCase()] = headers[key];\n }\n return normalizedHeaders;\n};\nexports.normalizeHeaders = normalizeHeaders;\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC;AAClC,MAAM,gBAAgB,GAAG,CAAC,OAAO,KAAK;AACtC,IAAI,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACjC,IAAI,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AAC/B,QAAQ,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5D,KAAK;AACL,IAAI,OAAO,iBAAiB,CAAC;AAC7B,CAAC,CAAC;AACF,OAAO,CAAC,gBAAgB,GAAG,gBAAgB;;"}
@@ -1 +0,0 @@
1
- export declare const normalizeHeaders: (headers?: Record<string, string>) => Record<string, string>;
@@ -1,12 +0,0 @@
1
- // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- // SPDX-License-Identifier: Apache-2.0
3
- const normalizeHeaders = (headers) => {
4
- const normalizedHeaders = {};
5
- for (const key in headers) {
6
- normalizedHeaders[key.toLowerCase()] = headers[key];
7
- }
8
- return normalizedHeaders;
9
- };
10
-
11
- export { normalizeHeaders };
12
- //# sourceMappingURL=normalizeHeaders.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"normalizeHeaders.mjs","sources":["../../../src/utils/normalizeHeaders.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nexport const normalizeHeaders = (headers) => {\n const normalizedHeaders = {};\n for (const key in headers) {\n normalizedHeaders[key.toLowerCase()] = headers[key];\n }\n return normalizedHeaders;\n};\n"],"names":[],"mappings":"AAAA;AACA;AACY,MAAC,gBAAgB,GAAG,CAAC,OAAO,KAAK;AAC7C,IAAI,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACjC,IAAI,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AAC/B,QAAQ,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5D,KAAK;AACL,IAAI,OAAO,iBAAiB,CAAC;AAC7B;;;;"}
@@ -1,10 +0,0 @@
1
- // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
- export const normalizeHeaders = (headers?: Record<string, string>) => {
5
- const normalizedHeaders: Record<string, string> = {};
6
- for (const key in headers) {
7
- normalizedHeaders[key.toLowerCase()] = headers[key];
8
- }
9
- return normalizedHeaders;
10
- };