Skip to content

Commit 0770c7f

Browse files
committed
chore: add flexibleChecksumsInterceptorMiddleware to populate input[requestValidationModeMember]
1 parent 251a589 commit 0770c7f

File tree

3 files changed

+76
-1
lines changed

3 files changed

+76
-1
lines changed

packages/middleware-flexible-checksums/src/configuration.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
StreamHasher,
1010
} from "@smithy/types";
1111

12-
import { RequestChecksumCalculation } from "./constants";
12+
import { RequestChecksumCalculation, ResponseChecksumValidation } from "./constants";
1313

1414
export interface PreviouslyResolved {
1515
/**
@@ -39,6 +39,11 @@ export interface PreviouslyResolved {
3939
*/
4040
requestChecksumCalculation: Provider<RequestChecksumCalculation>;
4141

42+
/**
43+
* Determines when a checksum will be calculated for response payloads
44+
*/
45+
responseChecksumValidation: Provider<ResponseChecksumValidation>;
46+
4247
/**
4348
* A constructor for a class implementing the {@link Hash} interface that computes SHA1 hashes.
4449
* @internal
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import {
2+
HandlerExecutionContext,
3+
MetadataBearer,
4+
RelativeMiddlewareOptions,
5+
SerializeHandler,
6+
SerializeHandlerArguments,
7+
SerializeHandlerOutput,
8+
SerializeMiddleware,
9+
} from "@smithy/types";
10+
11+
import { PreviouslyResolved } from "./configuration";
12+
import { ResponseChecksumValidation } from "./constants";
13+
14+
export interface FlexibleChecksumsInterceptorMiddlewareConfig {
15+
/**
16+
* Defines a top-level operation input member used to opt-in to best-effort validation
17+
* of a checksum returned in the HTTP response of the operation.
18+
*/
19+
requestValidationModeMember?: string;
20+
}
21+
22+
/**
23+
* @internal
24+
*/
25+
export const flexibleChecksumsInterceptorMiddlewareOptions: RelativeMiddlewareOptions = {
26+
name: "flexibleChecksumsInterceptorMiddleware",
27+
toMiddleware: "serializerMiddleware",
28+
relation: "before",
29+
tags: ["BODY_CHECKSUM"],
30+
override: true,
31+
};
32+
33+
/**
34+
* @internal
35+
*
36+
* The interceptor counterpart to the flexibleChecksumsMiddleware.
37+
*/
38+
export const flexibleChecksumsInterceptorMiddleware =
39+
(
40+
config: PreviouslyResolved,
41+
middlewareConfig: FlexibleChecksumsInterceptorMiddlewareConfig
42+
): SerializeMiddleware<any, any> =>
43+
<Output extends MetadataBearer>(
44+
next: SerializeHandler<any, Output>,
45+
context: HandlerExecutionContext
46+
): SerializeHandler<any, Output> =>
47+
async (args: SerializeHandlerArguments<any>): Promise<SerializeHandlerOutput<Output>> => {
48+
const input = args.input;
49+
const { requestValidationModeMember } = middlewareConfig;
50+
const responseChecksumValidation = await config.responseChecksumValidation();
51+
52+
const isResponseChecksumValidationNeeded =
53+
requestValidationModeMember &&
54+
(input[requestValidationModeMember] === "ENABLED" ||
55+
responseChecksumValidation === ResponseChecksumValidation.WHEN_SUPPORTED);
56+
57+
if (isResponseChecksumValidationNeeded) {
58+
input[requestValidationModeMember] = "ENABLED";
59+
}
60+
61+
return next(args);
62+
};

packages/middleware-flexible-checksums/src/getFlexibleChecksumsPlugin.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { Pluggable } from "@smithy/types";
22

33
import { PreviouslyResolved } from "./configuration";
4+
import {
5+
flexibleChecksumsInterceptorMiddleware,
6+
flexibleChecksumsInterceptorMiddlewareOptions,
7+
} from "./flexibleChecksumsInterceptorMiddleware";
48
import {
59
flexibleChecksumsMiddleware,
610
flexibleChecksumsMiddlewareOptions,
@@ -22,6 +26,10 @@ export const getFlexibleChecksumsPlugin = (
2226
): Pluggable<any, any> => ({
2327
applyToStack: (clientStack) => {
2428
clientStack.add(flexibleChecksumsMiddleware(config, middlewareConfig), flexibleChecksumsMiddlewareOptions);
29+
clientStack.addRelativeTo(
30+
flexibleChecksumsInterceptorMiddleware(config, middlewareConfig),
31+
flexibleChecksumsInterceptorMiddlewareOptions
32+
);
2533
clientStack.addRelativeTo(
2634
flexibleChecksumsResponseMiddleware(config, middlewareConfig),
2735
flexibleChecksumsResponseMiddlewareOptions

0 commit comments

Comments
 (0)