Skip to content

Commit c43103f

Browse files
authored
fix(middleware-flexible-checksums): use union for new config types (#6489)
1 parent bcfee78 commit c43103f

5 files changed

+27
-17
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { SelectorType, stringUnionSelector } from "./stringUnionSelector";
66
export const ENV_REQUEST_CHECKSUM_CALCULATION = "AWS_REQUEST_CHECKSUM_CALCULATION";
77
export const CONFIG_REQUEST_CHECKSUM_CALCULATION = "request_checksum_calculation";
88

9-
export const NODE_REQUEST_CHECKSUM_CALCULATION_CONFIG_OPTIONS: LoadedConfigSelectors<string> = {
9+
export const NODE_REQUEST_CHECKSUM_CALCULATION_CONFIG_OPTIONS: LoadedConfigSelectors<RequestChecksumCalculation> = {
1010
environmentVariableSelector: (env) =>
1111
stringUnionSelector(env, ENV_REQUEST_CHECKSUM_CALCULATION, RequestChecksumCalculation, SelectorType.ENV),
1212
configFileSelector: (profile) =>
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import { LoadedConfigSelectors } from "@smithy/node-config-provider";
22

3-
import { DEFAULT_RESPONSE_CHECKSUM_VALIDATION, RequestChecksumCalculation } from "./constants";
3+
import { DEFAULT_RESPONSE_CHECKSUM_VALIDATION, ResponseChecksumValidation } 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";
88

9-
export const NODE_RESPONSE_CHECKSUM_VALIDATION_CONFIG_OPTIONS: LoadedConfigSelectors<string> = {
9+
export const NODE_RESPONSE_CHECKSUM_VALIDATION_CONFIG_OPTIONS: LoadedConfigSelectors<ResponseChecksumValidation> = {
1010
environmentVariableSelector: (env) =>
11-
stringUnionSelector(env, ENV_RESPONSE_CHECKSUM_VALIDATION, RequestChecksumCalculation, SelectorType.ENV),
11+
stringUnionSelector(env, ENV_RESPONSE_CHECKSUM_VALIDATION, ResponseChecksumValidation, SelectorType.ENV),
1212
configFileSelector: (profile) =>
13-
stringUnionSelector(profile, CONFIG_RESPONSE_CHECKSUM_VALIDATION, RequestChecksumCalculation, SelectorType.CONFIG),
13+
stringUnionSelector(profile, CONFIG_RESPONSE_CHECKSUM_VALIDATION, ResponseChecksumValidation, SelectorType.CONFIG),
1414
default: DEFAULT_RESPONSE_CHECKSUM_VALIDATION,
1515
};

packages/middleware-flexible-checksums/src/resolveFlexibleChecksumsConfig.spec.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import { normalizeProvider } from "@smithy/util-middleware";
22

3-
import { DEFAULT_REQUEST_CHECKSUM_CALCULATION, DEFAULT_RESPONSE_CHECKSUM_VALIDATION } from "./constants";
3+
import {
4+
DEFAULT_REQUEST_CHECKSUM_CALCULATION,
5+
DEFAULT_RESPONSE_CHECKSUM_VALIDATION,
6+
RequestChecksumCalculation,
7+
ResponseChecksumValidation,
8+
} from "./constants";
49
import { resolveFlexibleChecksumsConfig } from "./resolveFlexibleChecksumsConfig";
510

611
jest.mock("@smithy/util-middleware");
@@ -25,8 +30,8 @@ describe(resolveFlexibleChecksumsConfig.name, () => {
2530

2631
it("normalizes client checksums configuration", () => {
2732
const mockInput = {
28-
requestChecksumCalculation: "WHEN_REQUIRED",
29-
responseChecksumValidation: "WHEN_REQUIRED",
33+
requestChecksumCalculation: RequestChecksumCalculation.WHEN_REQUIRED,
34+
responseChecksumValidation: ResponseChecksumValidation.WHEN_REQUIRED,
3035
};
3136
const resolvedConfig = resolveFlexibleChecksumsConfig(mockInput);
3237
expect(resolvedConfig).toEqual(mockInput);

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

+10-5
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
11
import { Provider } from "@smithy/types";
22
import { normalizeProvider } from "@smithy/util-middleware";
33

4-
import { DEFAULT_REQUEST_CHECKSUM_CALCULATION, DEFAULT_RESPONSE_CHECKSUM_VALIDATION } from "./constants";
4+
import {
5+
DEFAULT_REQUEST_CHECKSUM_CALCULATION,
6+
DEFAULT_RESPONSE_CHECKSUM_VALIDATION,
7+
RequestChecksumCalculation,
8+
ResponseChecksumValidation,
9+
} from "./constants";
510

611
export interface FlexibleChecksumsInputConfig {
712
/**
813
* Determines when a checksum will be calculated for request payloads.
914
*/
10-
requestChecksumCalculation?: string | Provider<string>;
15+
requestChecksumCalculation?: RequestChecksumCalculation | Provider<RequestChecksumCalculation>;
1116

1217
/**
1318
* Determines when checksum validation will be performed on response payloads.
1419
*/
15-
responseChecksumValidation?: string | Provider<string>;
20+
responseChecksumValidation?: ResponseChecksumValidation | Provider<ResponseChecksumValidation>;
1621
}
1722

1823
export interface FlexibleChecksumsResolvedConfig {
19-
requestChecksumCalculation: Provider<string>;
20-
responseChecksumValidation: Provider<string>;
24+
requestChecksumCalculation: Provider<RequestChecksumCalculation>;
25+
responseChecksumValidation: Provider<ResponseChecksumValidation>;
2126
}
2227

2328
export const resolveFlexibleChecksumsConfig = <T>(

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@ export enum SelectorType {
1010
*
1111
* @internal
1212
*/
13-
export const stringUnionSelector = (
13+
export const stringUnionSelector = <U extends object, K extends keyof U>(
1414
obj: Record<string, string | undefined>,
1515
key: string,
16-
union: Record<string, string>,
16+
union: U,
1717
type: SelectorType
18-
) => {
18+
): U[K] | undefined => {
1919
if (!(key in obj)) return undefined;
2020

2121
const value = obj[key]!.toUpperCase();
2222
if (!Object.values(union).includes(value)) {
2323
throw new TypeError(`Cannot load ${type} '${key}'. Expected one of ${Object.values(union)}, got '${obj[key]}'.`);
2424
}
2525

26-
return value;
26+
return value as U[K];
2727
};

0 commit comments

Comments
 (0)