Skip to content

Commit 8c6a2fb

Browse files
authored
chore(middleware-flexible-checksums): add config resolver (#6470)
1 parent eeffdc0 commit 8c6a2fb

7 files changed

+76
-4
lines changed

packages/middleware-flexible-checksums/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
"@smithy/node-config-provider": "^3.1.5",
3636
"@smithy/protocol-http": "^4.1.1",
3737
"@smithy/types": "^3.4.0",
38+
"@smithy/util-middleware": "^3.0.4",
3839
"@smithy/util-utf8": "^3.0.0",
3940
"tslib": "^2.6.2"
4041
},

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

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import { LoadedConfigSelectors } from "@smithy/node-config-provider";
22

3-
import { RequestChecksumCalculation } from "./constants";
3+
import { DEFAULT_REQUEST_CHECKSUM_CALCULATION, RequestChecksumCalculation } from "./constants";
44
import { SelectorType, stringUnionSelector } from "./stringUnionSelector";
55

66
export const ENV_REQUEST_CHECKSUM_CALCULATION = "AWS_REQUEST_CHECKSUM_CALCULATION";
77
export const CONFIG_REQUEST_CHECKSUM_CALCULATION = "request_checksum_calculation";
8-
export const DEFAULT_REQUEST_CHECKSUM_CALCULATION = RequestChecksumCalculation.WHEN_SUPPORTED;
98

109
export const NODE_REQUEST_CHECKSUM_CALCULATION_CONFIG_OPTIONS: LoadedConfigSelectors<string> = {
1110
environmentVariableSelector: (env) =>

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

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import { LoadedConfigSelectors } from "@smithy/node-config-provider";
22

3-
import { RequestChecksumCalculation } from "./constants";
3+
import { DEFAULT_RESPONSE_CHECKSUM_VALIDATION, RequestChecksumCalculation } from "./constants";
44
import { SelectorType, stringUnionSelector } from "./stringUnionSelector";
55

66
export const ENV_RESPONSE_CHECKSUM_VALIDATION = "AWS_RESPONSE_CHECKSUM_VALIDATION";
77
export const CONFIG_RESPONSE_CHECKSUM_VALIDATION = "response_checksum_validation";
8-
export const DEFAULT_RESPONSE_CHECKSUM_VALIDATION = RequestChecksumCalculation.WHEN_SUPPORTED;
98

109
export const NODE_RESPONSE_CHECKSUM_VALIDATION_CONFIG_OPTIONS: LoadedConfigSelectors<string> = {
1110
environmentVariableSelector: (env) =>

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

+4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ export const RequestChecksumCalculation = {
2121

2222
export type RequestChecksumCalculation = (typeof RequestChecksumCalculation)[keyof typeof RequestChecksumCalculation];
2323

24+
export const DEFAULT_REQUEST_CHECKSUM_CALCULATION = RequestChecksumCalculation.WHEN_SUPPORTED;
25+
2426
/**
2527
* Determines when checksum validation will be performed on response payloads.
2628
*/
@@ -44,6 +46,8 @@ export const ResponseChecksumValidation = {
4446

4547
export type ResponseChecksumValidation = (typeof ResponseChecksumValidation)[keyof typeof ResponseChecksumValidation];
4648

49+
export const DEFAULT_RESPONSE_CHECKSUM_VALIDATION = RequestChecksumCalculation.WHEN_SUPPORTED;
50+
4751
/**
4852
* Checksum Algorithms supported by the SDK.
4953
*/

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

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ export * from "./NODE_RESPONSE_CHECKSUM_VALIDATION_CONFIG_OPTIONS";
33
export * from "./constants";
44
export * from "./flexibleChecksumsMiddleware";
55
export * from "./getFlexibleChecksumsPlugin";
6+
export * from "./resolveFlexibleChecksumsConfig";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { normalizeProvider } from "@smithy/util-middleware";
2+
3+
import { DEFAULT_REQUEST_CHECKSUM_CALCULATION, DEFAULT_RESPONSE_CHECKSUM_VALIDATION } from "./constants";
4+
import { resolveFlexibleChecksumsConfig } from "./resolveFlexibleChecksumsConfig";
5+
6+
jest.mock("@smithy/util-middleware");
7+
8+
describe(resolveFlexibleChecksumsConfig.name, () => {
9+
beforeEach(() => {
10+
(normalizeProvider as jest.Mock).mockImplementation((input) => input);
11+
});
12+
13+
afterEach(() => {
14+
jest.clearAllMocks();
15+
});
16+
17+
it("returns default client checksums configuration, if not provided", () => {
18+
const resolvedConfig = resolveFlexibleChecksumsConfig({});
19+
expect(resolvedConfig).toEqual({
20+
requestChecksumCalculation: DEFAULT_REQUEST_CHECKSUM_CALCULATION,
21+
responseChecksumValidation: DEFAULT_RESPONSE_CHECKSUM_VALIDATION,
22+
});
23+
expect(normalizeProvider).toHaveBeenCalledTimes(2);
24+
});
25+
26+
it("normalizes client checksums configuration", () => {
27+
const mockInput = {
28+
requestChecksumCalculation: "WHEN_REQUIRED",
29+
responseChecksumValidation: "WHEN_REQUIRED",
30+
};
31+
const resolvedConfig = resolveFlexibleChecksumsConfig(mockInput);
32+
expect(resolvedConfig).toEqual(mockInput);
33+
expect(normalizeProvider).toHaveBeenCalledTimes(2);
34+
});
35+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { Provider } from "@smithy/types";
2+
import { normalizeProvider } from "@smithy/util-middleware";
3+
4+
import { DEFAULT_REQUEST_CHECKSUM_CALCULATION, DEFAULT_RESPONSE_CHECKSUM_VALIDATION } from "./constants";
5+
6+
export interface FlexibleChecksumsInputConfig {
7+
/**
8+
* Determines when a checksum will be calculated for request payloads.
9+
*/
10+
requestChecksumCalculation?: string | Provider<string>;
11+
12+
/**
13+
* Determines when checksum validation will be performed on response payloads.
14+
*/
15+
responseChecksumValidation?: string | Provider<string>;
16+
}
17+
18+
export interface FlexibleChecksumsResolvedConfig {
19+
requestChecksumCalculation: Provider<string>;
20+
responseChecksumValidation: Provider<string>;
21+
}
22+
23+
export const resolveFlexibleChecksumsConfig = <T>(
24+
input: T & FlexibleChecksumsInputConfig
25+
): T & FlexibleChecksumsResolvedConfig => ({
26+
...input,
27+
requestChecksumCalculation: normalizeProvider(
28+
input.requestChecksumCalculation ?? DEFAULT_REQUEST_CHECKSUM_CALCULATION
29+
),
30+
responseChecksumValidation: normalizeProvider(
31+
input.responseChecksumValidation ?? DEFAULT_RESPONSE_CHECKSUM_VALIDATION
32+
),
33+
});

0 commit comments

Comments
 (0)