@aws-sdk/middleware-flexible-checksums 3.425.0 → 3.433.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.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.flexibleChecksumsMiddleware = void 0;
3
+ exports.flexibleChecksumsMiddleware = exports.flexibleChecksumsMiddlewareOptions = void 0;
4
4
  const protocol_http_1 = require("@smithy/protocol-http");
5
5
  const getChecksumAlgorithmForRequest_1 = require("./getChecksumAlgorithmForRequest");
6
6
  const getChecksumLocationName_1 = require("./getChecksumLocationName");
@@ -8,6 +8,12 @@ const hasHeader_1 = require("./hasHeader");
8
8
  const isStreaming_1 = require("./isStreaming");
9
9
  const selectChecksumAlgorithmFunction_1 = require("./selectChecksumAlgorithmFunction");
10
10
  const stringHasher_1 = require("./stringHasher");
11
+ exports.flexibleChecksumsMiddlewareOptions = {
12
+ name: "flexibleChecksumsMiddleware",
13
+ step: "build",
14
+ tags: ["BODY_CHECKSUM"],
15
+ override: true,
16
+ };
11
17
  const flexibleChecksumsMiddleware = (config, middlewareConfig) => (next) => async (args) => {
12
18
  if (!protocol_http_1.HttpRequest.isInstance(args.request)) {
13
19
  return next(args);
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.flexibleChecksumsResponseMiddleware = exports.flexibleChecksumsResponseMiddlewareOptions = void 0;
4
4
  const protocol_http_1 = require("@smithy/protocol-http");
5
+ const getChecksumAlgorithmListForResponse_1 = require("./getChecksumAlgorithmListForResponse");
6
+ const getChecksumLocationName_1 = require("./getChecksumLocationName");
7
+ const isChecksumWithPartNumber_1 = require("./isChecksumWithPartNumber");
5
8
  const isStreaming_1 = require("./isStreaming");
6
9
  const create_read_stream_on_buffer_1 = require("./streams/create-read-stream-on-buffer");
7
10
  const validateChecksumFromResponse_1 = require("./validateChecksumFromResponse");
@@ -12,7 +15,7 @@ exports.flexibleChecksumsResponseMiddlewareOptions = {
12
15
  tags: ["BODY_CHECKSUM"],
13
16
  override: true,
14
17
  };
15
- const flexibleChecksumsResponseMiddleware = (config, middlewareConfig) => (next) => async (args) => {
18
+ const flexibleChecksumsResponseMiddleware = (config, middlewareConfig) => (next, context) => async (args) => {
16
19
  if (!protocol_http_1.HttpRequest.isInstance(args.request)) {
17
20
  return next(args);
18
21
  }
@@ -22,6 +25,17 @@ const flexibleChecksumsResponseMiddleware = (config, middlewareConfig) => (next)
22
25
  let collectedStream = undefined;
23
26
  const { requestValidationModeMember, responseAlgorithms } = middlewareConfig;
24
27
  if (requestValidationModeMember && input[requestValidationModeMember] === "ENABLED") {
28
+ const { clientName, commandName } = context;
29
+ const isS3WholeObjectMultipartGetResponseChecksum = clientName === "S3Client" &&
30
+ commandName === "GetObjectCommand" &&
31
+ (0, getChecksumAlgorithmListForResponse_1.getChecksumAlgorithmListForResponse)(responseAlgorithms).every((algorithm) => {
32
+ const responseHeader = (0, getChecksumLocationName_1.getChecksumLocationName)(algorithm);
33
+ const checksumFromResponse = response.headers[responseHeader];
34
+ return !checksumFromResponse || (0, isChecksumWithPartNumber_1.isChecksumWithPartNumber)(checksumFromResponse);
35
+ });
36
+ if (isS3WholeObjectMultipartGetResponseChecksum) {
37
+ return result;
38
+ }
25
39
  const isStreamingBody = (0, isStreaming_1.isStreaming)(response.body);
26
40
  if (isStreamingBody) {
27
41
  collectedStream = await config.streamCollector(response.body);
@@ -1,17 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getFlexibleChecksumsPlugin = exports.flexibleChecksumsMiddlewareOptions = void 0;
3
+ exports.getFlexibleChecksumsPlugin = void 0;
4
4
  const flexibleChecksumsMiddleware_1 = require("./flexibleChecksumsMiddleware");
5
5
  const flexibleChecksumsResponseMiddleware_1 = require("./flexibleChecksumsResponseMiddleware");
6
- exports.flexibleChecksumsMiddlewareOptions = {
7
- name: "flexibleChecksumsMiddleware",
8
- step: "build",
9
- tags: ["BODY_CHECKSUM"],
10
- override: true,
11
- };
12
6
  const getFlexibleChecksumsPlugin = (config, middlewareConfig) => ({
13
7
  applyToStack: (clientStack) => {
14
- clientStack.add((0, flexibleChecksumsMiddleware_1.flexibleChecksumsMiddleware)(config, middlewareConfig), exports.flexibleChecksumsMiddlewareOptions);
8
+ clientStack.add((0, flexibleChecksumsMiddleware_1.flexibleChecksumsMiddleware)(config, middlewareConfig), flexibleChecksumsMiddleware_1.flexibleChecksumsMiddlewareOptions);
15
9
  clientStack.addRelativeTo((0, flexibleChecksumsResponseMiddleware_1.flexibleChecksumsResponseMiddleware)(config, middlewareConfig), flexibleChecksumsResponseMiddleware_1.flexibleChecksumsResponseMiddlewareOptions);
16
10
  },
17
11
  });
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isChecksumWithPartNumber = void 0;
4
+ const isChecksumWithPartNumber = (checksum) => {
5
+ const lastHyphenIndex = checksum.lastIndexOf("-");
6
+ if (lastHyphenIndex !== -1) {
7
+ const numberPart = checksum.slice(lastHyphenIndex + 1);
8
+ if (!numberPart.startsWith("0")) {
9
+ const number = parseInt(numberPart, 10);
10
+ if (!isNaN(number) && number >= 1 && number <= 10000) {
11
+ return true;
12
+ }
13
+ }
14
+ }
15
+ return false;
16
+ };
17
+ exports.isChecksumWithPartNumber = isChecksumWithPartNumber;
@@ -5,6 +5,12 @@ import { hasHeader } from "./hasHeader";
5
5
  import { isStreaming } from "./isStreaming";
6
6
  import { selectChecksumAlgorithmFunction } from "./selectChecksumAlgorithmFunction";
7
7
  import { stringHasher } from "./stringHasher";
8
+ export const flexibleChecksumsMiddlewareOptions = {
9
+ name: "flexibleChecksumsMiddleware",
10
+ step: "build",
11
+ tags: ["BODY_CHECKSUM"],
12
+ override: true,
13
+ };
8
14
  export const flexibleChecksumsMiddleware = (config, middlewareConfig) => (next) => async (args) => {
9
15
  if (!HttpRequest.isInstance(args.request)) {
10
16
  return next(args);
@@ -1,4 +1,7 @@
1
1
  import { HttpRequest } from "@smithy/protocol-http";
2
+ import { getChecksumAlgorithmListForResponse } from "./getChecksumAlgorithmListForResponse";
3
+ import { getChecksumLocationName } from "./getChecksumLocationName";
4
+ import { isChecksumWithPartNumber } from "./isChecksumWithPartNumber";
2
5
  import { isStreaming } from "./isStreaming";
3
6
  import { createReadStreamOnBuffer } from "./streams/create-read-stream-on-buffer";
4
7
  import { validateChecksumFromResponse } from "./validateChecksumFromResponse";
@@ -9,7 +12,7 @@ export const flexibleChecksumsResponseMiddlewareOptions = {
9
12
  tags: ["BODY_CHECKSUM"],
10
13
  override: true,
11
14
  };
12
- export const flexibleChecksumsResponseMiddleware = (config, middlewareConfig) => (next) => async (args) => {
15
+ export const flexibleChecksumsResponseMiddleware = (config, middlewareConfig) => (next, context) => async (args) => {
13
16
  if (!HttpRequest.isInstance(args.request)) {
14
17
  return next(args);
15
18
  }
@@ -19,6 +22,17 @@ export const flexibleChecksumsResponseMiddleware = (config, middlewareConfig) =>
19
22
  let collectedStream = undefined;
20
23
  const { requestValidationModeMember, responseAlgorithms } = middlewareConfig;
21
24
  if (requestValidationModeMember && input[requestValidationModeMember] === "ENABLED") {
25
+ const { clientName, commandName } = context;
26
+ const isS3WholeObjectMultipartGetResponseChecksum = clientName === "S3Client" &&
27
+ commandName === "GetObjectCommand" &&
28
+ getChecksumAlgorithmListForResponse(responseAlgorithms).every((algorithm) => {
29
+ const responseHeader = getChecksumLocationName(algorithm);
30
+ const checksumFromResponse = response.headers[responseHeader];
31
+ return !checksumFromResponse || isChecksumWithPartNumber(checksumFromResponse);
32
+ });
33
+ if (isS3WholeObjectMultipartGetResponseChecksum) {
34
+ return result;
35
+ }
22
36
  const isStreamingBody = isStreaming(response.body);
23
37
  if (isStreamingBody) {
24
38
  collectedStream = await config.streamCollector(response.body);
@@ -1,11 +1,5 @@
1
- import { flexibleChecksumsMiddleware } from "./flexibleChecksumsMiddleware";
1
+ import { flexibleChecksumsMiddleware, flexibleChecksumsMiddlewareOptions, } from "./flexibleChecksumsMiddleware";
2
2
  import { flexibleChecksumsResponseMiddleware, flexibleChecksumsResponseMiddlewareOptions, } from "./flexibleChecksumsResponseMiddleware";
3
- export const flexibleChecksumsMiddlewareOptions = {
4
- name: "flexibleChecksumsMiddleware",
5
- step: "build",
6
- tags: ["BODY_CHECKSUM"],
7
- override: true,
8
- };
9
3
  export const getFlexibleChecksumsPlugin = (config, middlewareConfig) => ({
10
4
  applyToStack: (clientStack) => {
11
5
  clientStack.add(flexibleChecksumsMiddleware(config, middlewareConfig), flexibleChecksumsMiddlewareOptions);
@@ -0,0 +1,13 @@
1
+ export const isChecksumWithPartNumber = (checksum) => {
2
+ const lastHyphenIndex = checksum.lastIndexOf("-");
3
+ if (lastHyphenIndex !== -1) {
4
+ const numberPart = checksum.slice(lastHyphenIndex + 1);
5
+ if (!numberPart.startsWith("0")) {
6
+ const number = parseInt(numberPart, 10);
7
+ if (!isNaN(number) && number >= 1 && number <= 10000) {
8
+ return true;
9
+ }
10
+ }
11
+ }
12
+ return false;
13
+ };
@@ -1,7 +1,21 @@
1
- import { BuildMiddleware } from "@smithy/types";
1
+ import { BuildHandlerOptions, BuildMiddleware } from "@smithy/types";
2
2
  import { PreviouslyResolved } from "./configuration";
3
- import { FlexibleChecksumsMiddlewareConfig } from "./getFlexibleChecksumsPlugin";
3
+ export interface FlexibleChecksumsRequestMiddlewareConfig {
4
+ /**
5
+ * The input object for the operation.
6
+ */
7
+ input: Object;
8
+ /**
9
+ * Indicates an operation requires a checksum in its HTTP request.
10
+ */
11
+ requestChecksumRequired: boolean;
12
+ /**
13
+ * Defines a top-level operation input member that is used to configure request checksum behavior.
14
+ */
15
+ requestAlgorithmMember?: string;
16
+ }
17
+ export declare const flexibleChecksumsMiddlewareOptions: BuildHandlerOptions;
4
18
  /**
5
19
  * @internal
6
20
  */
7
- export declare const flexibleChecksumsMiddleware: (config: PreviouslyResolved, middlewareConfig: FlexibleChecksumsMiddlewareConfig) => BuildMiddleware<any, any>;
21
+ export declare const flexibleChecksumsMiddleware: (config: PreviouslyResolved, middlewareConfig: FlexibleChecksumsRequestMiddlewareConfig) => BuildMiddleware<any, any>;
@@ -1,6 +1,17 @@
1
1
  import { DeserializeMiddleware, RelativeMiddlewareOptions } from "@smithy/types";
2
2
  import { PreviouslyResolved } from "./configuration";
3
- import { FlexibleChecksumsMiddlewareConfig } from "./getFlexibleChecksumsPlugin";
3
+ export interface FlexibleChecksumsResponseMiddlewareConfig {
4
+ /**
5
+ * Defines a top-level operation input member used to opt-in to best-effort validation
6
+ * of a checksum returned in the HTTP response of the operation.
7
+ */
8
+ requestValidationModeMember?: string;
9
+ /**
10
+ * Defines the checksum algorithms clients SHOULD look for when validating checksums
11
+ * returned in the HTTP response.
12
+ */
13
+ responseAlgorithms?: string[];
14
+ }
4
15
  /**
5
16
  * @internal
6
17
  */
@@ -10,4 +21,4 @@ export declare const flexibleChecksumsResponseMiddlewareOptions: RelativeMiddlew
10
21
  *
11
22
  * The validation counterpart to the flexibleChecksumsMiddleware.
12
23
  */
13
- export declare const flexibleChecksumsResponseMiddleware: (config: PreviouslyResolved, middlewareConfig: FlexibleChecksumsMiddlewareConfig) => DeserializeMiddleware<any, any>;
24
+ export declare const flexibleChecksumsResponseMiddleware: (config: PreviouslyResolved, middlewareConfig: FlexibleChecksumsResponseMiddlewareConfig) => DeserializeMiddleware<any, any>;
@@ -1,28 +1,7 @@
1
- import { BuildHandlerOptions, Pluggable } from "@smithy/types";
1
+ import { Pluggable } from "@smithy/types";
2
2
  import { PreviouslyResolved } from "./configuration";
3
- export declare const flexibleChecksumsMiddlewareOptions: BuildHandlerOptions;
4
- export interface FlexibleChecksumsMiddlewareConfig {
5
- /**
6
- * The input object for the operation.
7
- */
8
- input: Object;
9
- /**
10
- * Indicates an operation requires a checksum in its HTTP request.
11
- */
12
- requestChecksumRequired: boolean;
13
- /**
14
- * Defines a top-level operation input member that is used to configure request checksum behavior.
15
- */
16
- requestAlgorithmMember?: string;
17
- /**
18
- * Defines a top-level operation input member used to opt-in to best-effort validation
19
- * of a checksum returned in the HTTP response of the operation.
20
- */
21
- requestValidationModeMember?: string;
22
- /**
23
- * Defines the checksum algorithms clients SHOULD look for when validating checksums
24
- * returned in the HTTP response.
25
- */
26
- responseAlgorithms?: string[];
3
+ import { FlexibleChecksumsRequestMiddlewareConfig } from "./flexibleChecksumsMiddleware";
4
+ import { FlexibleChecksumsResponseMiddlewareConfig } from "./flexibleChecksumsResponseMiddleware";
5
+ export interface FlexibleChecksumsMiddlewareConfig extends FlexibleChecksumsRequestMiddlewareConfig, FlexibleChecksumsResponseMiddlewareConfig {
27
6
  }
28
7
  export declare const getFlexibleChecksumsPlugin: (config: PreviouslyResolved, middlewareConfig: FlexibleChecksumsMiddlewareConfig) => Pluggable<any, any>;
@@ -0,0 +1 @@
1
+ export declare const isChecksumWithPartNumber: (checksum: string) => boolean;
@@ -1,7 +1,12 @@
1
- import { BuildMiddleware } from "@smithy/types";
1
+ import { BuildHandlerOptions, BuildMiddleware } from "@smithy/types";
2
2
  import { PreviouslyResolved } from "./configuration";
3
- import { FlexibleChecksumsMiddlewareConfig } from "./getFlexibleChecksumsPlugin";
3
+ export interface FlexibleChecksumsRequestMiddlewareConfig {
4
+ input: Object;
5
+ requestChecksumRequired: boolean;
6
+ requestAlgorithmMember?: string;
7
+ }
8
+ export declare const flexibleChecksumsMiddlewareOptions: BuildHandlerOptions;
4
9
  export declare const flexibleChecksumsMiddleware: (
5
10
  config: PreviouslyResolved,
6
- middlewareConfig: FlexibleChecksumsMiddlewareConfig
11
+ middlewareConfig: FlexibleChecksumsRequestMiddlewareConfig
7
12
  ) => BuildMiddleware<any, any>;
@@ -3,9 +3,12 @@ import {
3
3
  RelativeMiddlewareOptions,
4
4
  } from "@smithy/types";
5
5
  import { PreviouslyResolved } from "./configuration";
6
- import { FlexibleChecksumsMiddlewareConfig } from "./getFlexibleChecksumsPlugin";
6
+ export interface FlexibleChecksumsResponseMiddlewareConfig {
7
+ requestValidationModeMember?: string;
8
+ responseAlgorithms?: string[];
9
+ }
7
10
  export declare const flexibleChecksumsResponseMiddlewareOptions: RelativeMiddlewareOptions;
8
11
  export declare const flexibleChecksumsResponseMiddleware: (
9
12
  config: PreviouslyResolved,
10
- middlewareConfig: FlexibleChecksumsMiddlewareConfig
13
+ middlewareConfig: FlexibleChecksumsResponseMiddlewareConfig
11
14
  ) => DeserializeMiddleware<any, any>;
@@ -1,13 +1,10 @@
1
- import { BuildHandlerOptions, Pluggable } from "@smithy/types";
1
+ import { Pluggable } from "@smithy/types";
2
2
  import { PreviouslyResolved } from "./configuration";
3
- export declare const flexibleChecksumsMiddlewareOptions: BuildHandlerOptions;
4
- export interface FlexibleChecksumsMiddlewareConfig {
5
- input: Object;
6
- requestChecksumRequired: boolean;
7
- requestAlgorithmMember?: string;
8
- requestValidationModeMember?: string;
9
- responseAlgorithms?: string[];
10
- }
3
+ import { FlexibleChecksumsRequestMiddlewareConfig } from "./flexibleChecksumsMiddleware";
4
+ import { FlexibleChecksumsResponseMiddlewareConfig } from "./flexibleChecksumsResponseMiddleware";
5
+ export interface FlexibleChecksumsMiddlewareConfig
6
+ extends FlexibleChecksumsRequestMiddlewareConfig,
7
+ FlexibleChecksumsResponseMiddlewareConfig {}
11
8
  export declare const getFlexibleChecksumsPlugin: (
12
9
  config: PreviouslyResolved,
13
10
  middlewareConfig: FlexibleChecksumsMiddlewareConfig
@@ -0,0 +1 @@
1
+ export declare const isChecksumWithPartNumber: (checksum: string) => boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-sdk/middleware-flexible-checksums",
3
- "version": "3.425.0",
3
+ "version": "3.433.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",
@@ -26,15 +26,15 @@
26
26
  "dependencies": {
27
27
  "@aws-crypto/crc32": "3.0.0",
28
28
  "@aws-crypto/crc32c": "3.0.0",
29
- "@aws-sdk/types": "3.425.0",
29
+ "@aws-sdk/types": "3.433.0",
30
30
  "@smithy/is-array-buffer": "^2.0.0",
31
- "@smithy/protocol-http": "^3.0.6",
32
- "@smithy/types": "^2.3.4",
31
+ "@smithy/protocol-http": "^3.0.8",
32
+ "@smithy/types": "^2.4.0",
33
33
  "@smithy/util-utf8": "^2.0.0",
34
34
  "tslib": "^2.5.0"
35
35
  },
36
36
  "devDependencies": {
37
- "@smithy/node-http-handler": "^2.1.6",
37
+ "@smithy/node-http-handler": "^2.1.8",
38
38
  "concurrently": "7.0.0",
39
39
  "downlevel-dts": "0.10.1",
40
40
  "rimraf": "3.0.2",