@aws-sdk/middleware-flexible-checksums 3.183.0 → 3.186.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [3.186.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.185.0...v3.186.0) (2022-10-06)
7
+
8
+ **Note:** Version bump only for package @aws-sdk/middleware-flexible-checksums
9
+
10
+
11
+
12
+
13
+
6
14
  # [3.183.0](https://github.com/aws/aws-sdk-js-v3/compare/v3.182.0...v3.183.0) (2022-10-03)
7
15
 
8
16
  **Note:** Version bump only for package @aws-sdk/middleware-flexible-checksums
@@ -1,3 +1,4 @@
1
+ import { __assign, __awaiter, __generator } from "tslib";
1
2
  import { HttpRequest } from "@aws-sdk/protocol-http";
2
3
  import { getChecksumAlgorithmForRequest } from "./getChecksumAlgorithmForRequest";
3
4
  import { getChecksumLocationName } from "./getChecksumLocationName";
@@ -6,64 +7,62 @@ import { isStreaming } from "./isStreaming";
6
7
  import { selectChecksumAlgorithmFunction } from "./selectChecksumAlgorithmFunction";
7
8
  import { stringHasher } from "./stringHasher";
8
9
  import { validateChecksumFromResponse } from "./validateChecksumFromResponse";
9
- export const flexibleChecksumsMiddleware = (config, middlewareConfig) => (next) => async (args) => {
10
- if (!HttpRequest.isInstance(args.request)) {
11
- return next(args);
12
- }
13
- const { request } = args;
14
- const { body: requestBody, headers } = request;
15
- const { base64Encoder, streamHasher } = config;
16
- const { input, requestChecksumRequired, requestAlgorithmMember } = middlewareConfig;
17
- const checksumAlgorithm = getChecksumAlgorithmForRequest(input, {
18
- requestChecksumRequired,
19
- requestAlgorithmMember,
20
- });
21
- let updatedBody = requestBody;
22
- let updatedHeaders = headers;
23
- if (checksumAlgorithm) {
24
- const checksumLocationName = getChecksumLocationName(checksumAlgorithm);
25
- const checksumAlgorithmFn = selectChecksumAlgorithmFunction(checksumAlgorithm, config);
26
- if (isStreaming(requestBody)) {
27
- const { getAwsChunkedEncodingStream, bodyLengthChecker } = config;
28
- updatedBody = getAwsChunkedEncodingStream(requestBody, {
29
- base64Encoder,
30
- bodyLengthChecker,
31
- checksumLocationName,
32
- checksumAlgorithmFn,
33
- streamHasher,
10
+ export var flexibleChecksumsMiddleware = function (config, middlewareConfig) {
11
+ return function (next) {
12
+ return function (args) { return __awaiter(void 0, void 0, void 0, function () {
13
+ var request, requestBody, headers, base64Encoder, streamHasher, input, requestChecksumRequired, requestAlgorithmMember, checksumAlgorithm, updatedBody, updatedHeaders, checksumLocationName, checksumAlgorithmFn, getAwsChunkedEncodingStream, bodyLengthChecker, rawChecksum, result, requestValidationModeMember, responseAlgorithms;
14
+ var _a;
15
+ return __generator(this, function (_b) {
16
+ switch (_b.label) {
17
+ case 0:
18
+ if (!HttpRequest.isInstance(args.request)) {
19
+ return [2, next(args)];
20
+ }
21
+ request = args.request;
22
+ requestBody = request.body, headers = request.headers;
23
+ base64Encoder = config.base64Encoder, streamHasher = config.streamHasher;
24
+ input = middlewareConfig.input, requestChecksumRequired = middlewareConfig.requestChecksumRequired, requestAlgorithmMember = middlewareConfig.requestAlgorithmMember;
25
+ checksumAlgorithm = getChecksumAlgorithmForRequest(input, {
26
+ requestChecksumRequired: requestChecksumRequired,
27
+ requestAlgorithmMember: requestAlgorithmMember,
28
+ });
29
+ updatedBody = requestBody;
30
+ updatedHeaders = headers;
31
+ if (!checksumAlgorithm) return [3, 3];
32
+ checksumLocationName = getChecksumLocationName(checksumAlgorithm);
33
+ checksumAlgorithmFn = selectChecksumAlgorithmFunction(checksumAlgorithm, config);
34
+ if (!isStreaming(requestBody)) return [3, 1];
35
+ getAwsChunkedEncodingStream = config.getAwsChunkedEncodingStream, bodyLengthChecker = config.bodyLengthChecker;
36
+ updatedBody = getAwsChunkedEncodingStream(requestBody, {
37
+ base64Encoder: base64Encoder,
38
+ bodyLengthChecker: bodyLengthChecker,
39
+ checksumLocationName: checksumLocationName,
40
+ checksumAlgorithmFn: checksumAlgorithmFn,
41
+ streamHasher: streamHasher,
42
+ });
43
+ updatedHeaders = __assign(__assign({}, headers), { "content-encoding": "aws-chunked", "transfer-encoding": "chunked", "x-amz-decoded-content-length": headers["content-length"], "x-amz-content-sha256": "STREAMING-UNSIGNED-PAYLOAD-TRAILER", "x-amz-trailer": checksumLocationName });
44
+ delete updatedHeaders["content-length"];
45
+ return [3, 3];
46
+ case 1:
47
+ if (!!hasHeader(checksumLocationName, headers)) return [3, 3];
48
+ return [4, stringHasher(checksumAlgorithmFn, requestBody)];
49
+ case 2:
50
+ rawChecksum = _b.sent();
51
+ updatedHeaders = __assign(__assign({}, headers), (_a = {}, _a[checksumLocationName] = base64Encoder(rawChecksum), _a));
52
+ _b.label = 3;
53
+ case 3: return [4, next(__assign(__assign({}, args), { request: __assign(__assign({}, request), { headers: updatedHeaders, body: updatedBody }) }))];
54
+ case 4:
55
+ result = _b.sent();
56
+ requestValidationModeMember = middlewareConfig.requestValidationModeMember, responseAlgorithms = middlewareConfig.responseAlgorithms;
57
+ if (requestValidationModeMember && input[requestValidationModeMember] === "ENABLED") {
58
+ validateChecksumFromResponse(result.response, {
59
+ config: config,
60
+ responseAlgorithms: responseAlgorithms,
61
+ });
62
+ }
63
+ return [2, result];
64
+ }
34
65
  });
35
- updatedHeaders = {
36
- ...headers,
37
- "content-encoding": "aws-chunked",
38
- "transfer-encoding": "chunked",
39
- "x-amz-decoded-content-length": headers["content-length"],
40
- "x-amz-content-sha256": "STREAMING-UNSIGNED-PAYLOAD-TRAILER",
41
- "x-amz-trailer": checksumLocationName,
42
- };
43
- delete updatedHeaders["content-length"];
44
- }
45
- else if (!hasHeader(checksumLocationName, headers)) {
46
- const rawChecksum = await stringHasher(checksumAlgorithmFn, requestBody);
47
- updatedHeaders = {
48
- ...headers,
49
- [checksumLocationName]: base64Encoder(rawChecksum),
50
- };
51
- }
52
- }
53
- const result = await next({
54
- ...args,
55
- request: {
56
- ...request,
57
- headers: updatedHeaders,
58
- body: updatedBody,
59
- },
60
- });
61
- const { requestValidationModeMember, responseAlgorithms } = middlewareConfig;
62
- if (requestValidationModeMember && input[requestValidationModeMember] === "ENABLED") {
63
- validateChecksumFromResponse(result.response, {
64
- config,
65
- responseAlgorithms,
66
- });
67
- }
68
- return result;
66
+ }); };
67
+ };
69
68
  };
@@ -1,6 +1,18 @@
1
+ import { __awaiter, __generator } from "tslib";
1
2
  import { isStreaming } from "./isStreaming";
2
3
  import { stringHasher } from "./stringHasher";
3
- export const getChecksum = async (body, { streamHasher, checksumAlgorithmFn, base64Encoder }) => {
4
- const digest = isStreaming(body) ? streamHasher(checksumAlgorithmFn, body) : stringHasher(checksumAlgorithmFn, body);
5
- return base64Encoder(await digest);
4
+ export var getChecksum = function (body, _a) {
5
+ var streamHasher = _a.streamHasher, checksumAlgorithmFn = _a.checksumAlgorithmFn, base64Encoder = _a.base64Encoder;
6
+ return __awaiter(void 0, void 0, void 0, function () {
7
+ var digest, _b;
8
+ return __generator(this, function (_c) {
9
+ switch (_c.label) {
10
+ case 0:
11
+ digest = isStreaming(body) ? streamHasher(checksumAlgorithmFn, body) : stringHasher(checksumAlgorithmFn, body);
12
+ _b = base64Encoder;
13
+ return [4, digest];
14
+ case 1: return [2, _b.apply(void 0, [_c.sent()])];
15
+ }
16
+ });
17
+ });
6
18
  };
@@ -1,13 +1,14 @@
1
1
  import { ChecksumAlgorithm } from "./constants";
2
2
  import { CLIENT_SUPPORTED_ALGORITHMS } from "./types";
3
- export const getChecksumAlgorithmForRequest = (input, { requestChecksumRequired, requestAlgorithmMember }) => {
3
+ export var getChecksumAlgorithmForRequest = function (input, _a) {
4
+ var requestChecksumRequired = _a.requestChecksumRequired, requestAlgorithmMember = _a.requestAlgorithmMember;
4
5
  if (!requestAlgorithmMember || !input[requestAlgorithmMember]) {
5
6
  return requestChecksumRequired ? ChecksumAlgorithm.MD5 : undefined;
6
7
  }
7
- const checksumAlgorithm = input[requestAlgorithmMember];
8
+ var checksumAlgorithm = input[requestAlgorithmMember];
8
9
  if (!CLIENT_SUPPORTED_ALGORITHMS.includes(checksumAlgorithm)) {
9
- throw new Error(`The checksum algorithm "${checksumAlgorithm}" is not supported by the client.` +
10
- ` Select one of ${CLIENT_SUPPORTED_ALGORITHMS}.`);
10
+ throw new Error("The checksum algorithm \"".concat(checksumAlgorithm, "\" is not supported by the client.") +
11
+ " Select one of ".concat(CLIENT_SUPPORTED_ALGORITHMS, "."));
11
12
  }
12
13
  return checksumAlgorithm;
13
14
  };
@@ -1,11 +1,24 @@
1
+ import { __values } from "tslib";
1
2
  import { CLIENT_SUPPORTED_ALGORITHMS, PRIORITY_ORDER_ALGORITHMS } from "./types";
2
- export const getChecksumAlgorithmListForResponse = (responseAlgorithms = []) => {
3
- const validChecksumAlgorithms = [];
4
- for (const algorithm of PRIORITY_ORDER_ALGORITHMS) {
5
- if (!responseAlgorithms.includes(algorithm) || !CLIENT_SUPPORTED_ALGORITHMS.includes(algorithm)) {
6
- continue;
3
+ export var getChecksumAlgorithmListForResponse = function (responseAlgorithms) {
4
+ var e_1, _a;
5
+ if (responseAlgorithms === void 0) { responseAlgorithms = []; }
6
+ var validChecksumAlgorithms = [];
7
+ try {
8
+ for (var PRIORITY_ORDER_ALGORITHMS_1 = __values(PRIORITY_ORDER_ALGORITHMS), PRIORITY_ORDER_ALGORITHMS_1_1 = PRIORITY_ORDER_ALGORITHMS_1.next(); !PRIORITY_ORDER_ALGORITHMS_1_1.done; PRIORITY_ORDER_ALGORITHMS_1_1 = PRIORITY_ORDER_ALGORITHMS_1.next()) {
9
+ var algorithm = PRIORITY_ORDER_ALGORITHMS_1_1.value;
10
+ if (!responseAlgorithms.includes(algorithm) || !CLIENT_SUPPORTED_ALGORITHMS.includes(algorithm)) {
11
+ continue;
12
+ }
13
+ validChecksumAlgorithms.push(algorithm);
7
14
  }
8
- validChecksumAlgorithms.push(algorithm);
15
+ }
16
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
17
+ finally {
18
+ try {
19
+ if (PRIORITY_ORDER_ALGORITHMS_1_1 && !PRIORITY_ORDER_ALGORITHMS_1_1.done && (_a = PRIORITY_ORDER_ALGORITHMS_1.return)) _a.call(PRIORITY_ORDER_ALGORITHMS_1);
20
+ }
21
+ finally { if (e_1) throw e_1.error; }
9
22
  }
10
23
  return validChecksumAlgorithms;
11
24
  };
@@ -1,2 +1,4 @@
1
1
  import { ChecksumAlgorithm } from "./constants";
2
- export const getChecksumLocationName = (algorithm) => algorithm === ChecksumAlgorithm.MD5 ? "content-md5" : `x-amz-checksum-${algorithm.toLowerCase()}`;
2
+ export var getChecksumLocationName = function (algorithm) {
3
+ return algorithm === ChecksumAlgorithm.MD5 ? "content-md5" : "x-amz-checksum-".concat(algorithm.toLowerCase());
4
+ };
@@ -1,12 +1,12 @@
1
1
  import { flexibleChecksumsMiddleware } from "./flexibleChecksumsMiddleware";
2
- export const flexibleChecksumsMiddlewareOptions = {
2
+ export var flexibleChecksumsMiddlewareOptions = {
3
3
  name: "flexibleChecksumsMiddleware",
4
4
  step: "build",
5
5
  tags: ["BODY_CHECKSUM"],
6
6
  override: true,
7
7
  };
8
- export const getFlexibleChecksumsPlugin = (config, middlewareConfig) => ({
9
- applyToStack: (clientStack) => {
8
+ export var getFlexibleChecksumsPlugin = function (config, middlewareConfig) { return ({
9
+ applyToStack: function (clientStack) {
10
10
  clientStack.add(flexibleChecksumsMiddleware(config, middlewareConfig), flexibleChecksumsMiddlewareOptions);
11
11
  },
12
- });
12
+ }); };
@@ -1,9 +1,21 @@
1
- export const hasHeader = (header, headers) => {
2
- const soughtHeader = header.toLowerCase();
3
- for (const headerName of Object.keys(headers)) {
4
- if (soughtHeader === headerName.toLowerCase()) {
5
- return true;
1
+ import { __values } from "tslib";
2
+ export var hasHeader = function (header, headers) {
3
+ var e_1, _a;
4
+ var soughtHeader = header.toLowerCase();
5
+ try {
6
+ for (var _b = __values(Object.keys(headers)), _c = _b.next(); !_c.done; _c = _b.next()) {
7
+ var headerName = _c.value;
8
+ if (soughtHeader === headerName.toLowerCase()) {
9
+ return true;
10
+ }
6
11
  }
7
12
  }
13
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
14
+ finally {
15
+ try {
16
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
17
+ }
18
+ finally { if (e_1) throw e_1.error; }
19
+ }
8
20
  return false;
9
21
  };
@@ -1,2 +1,4 @@
1
1
  import { isArrayBuffer } from "@aws-sdk/is-array-buffer";
2
- export const isStreaming = (body) => body !== undefined && typeof body !== "string" && !ArrayBuffer.isView(body) && !isArrayBuffer(body);
2
+ export var isStreaming = function (body) {
3
+ return body !== undefined && typeof body !== "string" && !ArrayBuffer.isView(body) && !isArrayBuffer(body);
4
+ };
@@ -1,10 +1,13 @@
1
1
  import { AwsCrc32 } from "@aws-crypto/crc32";
2
2
  import { AwsCrc32c } from "@aws-crypto/crc32c";
3
3
  import { ChecksumAlgorithm } from "./constants";
4
- export const selectChecksumAlgorithmFunction = (checksumAlgorithm, config) => ({
5
- [ChecksumAlgorithm.MD5]: config.md5,
6
- [ChecksumAlgorithm.CRC32]: AwsCrc32,
7
- [ChecksumAlgorithm.CRC32C]: AwsCrc32c,
8
- [ChecksumAlgorithm.SHA1]: config.sha1,
9
- [ChecksumAlgorithm.SHA256]: config.sha256,
10
- }[checksumAlgorithm]);
4
+ export var selectChecksumAlgorithmFunction = function (checksumAlgorithm, config) {
5
+ var _a;
6
+ return ((_a = {},
7
+ _a[ChecksumAlgorithm.MD5] = config.md5,
8
+ _a[ChecksumAlgorithm.CRC32] = AwsCrc32,
9
+ _a[ChecksumAlgorithm.CRC32C] = AwsCrc32c,
10
+ _a[ChecksumAlgorithm.SHA1] = config.sha1,
11
+ _a[ChecksumAlgorithm.SHA256] = config.sha256,
12
+ _a)[checksumAlgorithm]);
13
+ };
@@ -1,5 +1,5 @@
1
- export const stringHasher = (checksumAlgorithmFn, body) => {
2
- const hash = new checksumAlgorithmFn();
1
+ export var stringHasher = function (checksumAlgorithmFn, body) {
2
+ var hash = new checksumAlgorithmFn();
3
3
  hash.update(body || "");
4
4
  return hash.digest();
5
5
  };
package/dist-es/types.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import { ChecksumAlgorithm } from "./constants";
2
- export const CLIENT_SUPPORTED_ALGORITHMS = [
2
+ export var CLIENT_SUPPORTED_ALGORITHMS = [
3
3
  ChecksumAlgorithm.CRC32,
4
4
  ChecksumAlgorithm.CRC32C,
5
5
  ChecksumAlgorithm.SHA1,
6
6
  ChecksumAlgorithm.SHA256,
7
7
  ];
8
- export const PRIORITY_ORDER_ALGORITHMS = [
8
+ export var PRIORITY_ORDER_ALGORITHMS = [
9
9
  ChecksumAlgorithm.CRC32,
10
10
  ChecksumAlgorithm.CRC32C,
11
11
  ChecksumAlgorithm.SHA1,
@@ -1,22 +1,55 @@
1
+ import { __awaiter, __generator, __values } from "tslib";
1
2
  import { getChecksum } from "./getChecksum";
2
3
  import { getChecksumAlgorithmListForResponse } from "./getChecksumAlgorithmListForResponse";
3
4
  import { getChecksumLocationName } from "./getChecksumLocationName";
4
5
  import { selectChecksumAlgorithmFunction } from "./selectChecksumAlgorithmFunction";
5
- export const validateChecksumFromResponse = async (response, { config, responseAlgorithms }) => {
6
- const checksumAlgorithms = getChecksumAlgorithmListForResponse(responseAlgorithms);
7
- const { body: responseBody, headers: responseHeaders } = response;
8
- for (const algorithm of checksumAlgorithms) {
9
- const responseHeader = getChecksumLocationName(algorithm);
10
- const checksumFromResponse = responseHeaders[responseHeader];
11
- if (checksumFromResponse) {
12
- const checksumAlgorithmFn = selectChecksumAlgorithmFunction(algorithm, config);
13
- const { streamHasher, base64Encoder } = config;
14
- const checksum = await getChecksum(responseBody, { streamHasher, checksumAlgorithmFn, base64Encoder });
15
- if (checksum === checksumFromResponse) {
16
- break;
6
+ export var validateChecksumFromResponse = function (response, _a) {
7
+ var config = _a.config, responseAlgorithms = _a.responseAlgorithms;
8
+ return __awaiter(void 0, void 0, void 0, function () {
9
+ var checksumAlgorithms, responseBody, responseHeaders, checksumAlgorithms_1, checksumAlgorithms_1_1, algorithm, responseHeader, checksumFromResponse, checksumAlgorithmFn, streamHasher, base64Encoder, checksum, e_1_1;
10
+ var e_1, _b;
11
+ return __generator(this, function (_c) {
12
+ switch (_c.label) {
13
+ case 0:
14
+ checksumAlgorithms = getChecksumAlgorithmListForResponse(responseAlgorithms);
15
+ responseBody = response.body, responseHeaders = response.headers;
16
+ _c.label = 1;
17
+ case 1:
18
+ _c.trys.push([1, 6, 7, 8]);
19
+ checksumAlgorithms_1 = __values(checksumAlgorithms), checksumAlgorithms_1_1 = checksumAlgorithms_1.next();
20
+ _c.label = 2;
21
+ case 2:
22
+ if (!!checksumAlgorithms_1_1.done) return [3, 5];
23
+ algorithm = checksumAlgorithms_1_1.value;
24
+ responseHeader = getChecksumLocationName(algorithm);
25
+ checksumFromResponse = responseHeaders[responseHeader];
26
+ if (!checksumFromResponse) return [3, 4];
27
+ checksumAlgorithmFn = selectChecksumAlgorithmFunction(algorithm, config);
28
+ streamHasher = config.streamHasher, base64Encoder = config.base64Encoder;
29
+ return [4, getChecksum(responseBody, { streamHasher: streamHasher, checksumAlgorithmFn: checksumAlgorithmFn, base64Encoder: base64Encoder })];
30
+ case 3:
31
+ checksum = _c.sent();
32
+ if (checksum === checksumFromResponse) {
33
+ return [3, 5];
34
+ }
35
+ throw new Error("Checksum mismatch: expected \"".concat(checksum, "\" but received \"").concat(checksumFromResponse, "\"") +
36
+ " in response header \"".concat(responseHeader, "\"."));
37
+ case 4:
38
+ checksumAlgorithms_1_1 = checksumAlgorithms_1.next();
39
+ return [3, 2];
40
+ case 5: return [3, 8];
41
+ case 6:
42
+ e_1_1 = _c.sent();
43
+ e_1 = { error: e_1_1 };
44
+ return [3, 8];
45
+ case 7:
46
+ try {
47
+ if (checksumAlgorithms_1_1 && !checksumAlgorithms_1_1.done && (_b = checksumAlgorithms_1.return)) _b.call(checksumAlgorithms_1);
48
+ }
49
+ finally { if (e_1) throw e_1.error; }
50
+ return [7];
51
+ case 8: return [2];
17
52
  }
18
- throw new Error(`Checksum mismatch: expected "${checksum}" but received "${checksumFromResponse}"` +
19
- ` in response header "${responseHeader}".`);
20
- }
21
- }
53
+ });
54
+ });
22
55
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-sdk/middleware-flexible-checksums",
3
- "version": "3.183.0",
3
+ "version": "3.186.0",
4
4
  "scripts": {
5
5
  "build": "concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'",
6
6
  "build:cjs": "tsc -p tsconfig.cjs.json",
@@ -22,9 +22,9 @@
22
22
  "dependencies": {
23
23
  "@aws-crypto/crc32": "2.0.0",
24
24
  "@aws-crypto/crc32c": "2.0.0",
25
- "@aws-sdk/is-array-buffer": "3.183.0",
26
- "@aws-sdk/protocol-http": "3.183.0",
27
- "@aws-sdk/types": "3.183.0",
25
+ "@aws-sdk/is-array-buffer": "3.186.0",
26
+ "@aws-sdk/protocol-http": "3.186.0",
27
+ "@aws-sdk/types": "3.186.0",
28
28
  "tslib": "^2.3.1"
29
29
  },
30
30
  "devDependencies": {