Skip to content

Commit

Permalink
chore(middleware-flexible-checksums): split FlexibleChecksumsMiddlewa…
Browse files Browse the repository at this point in the history
…reConfig into request/response (#5344)
  • Loading branch information
trivikr authored Oct 10, 2023
1 parent e1db7b1 commit 78a50c9
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { HttpRequest } from "@smithy/protocol-http";
import {
BuildHandler,
BuildHandlerArguments,
BuildHandlerOptions,
BuildHandlerOutput,
BuildMiddleware,
MetadataBearer,
Expand All @@ -10,17 +11,40 @@ import {
import { PreviouslyResolved } from "./configuration";
import { getChecksumAlgorithmForRequest } from "./getChecksumAlgorithmForRequest";
import { getChecksumLocationName } from "./getChecksumLocationName";
import { FlexibleChecksumsMiddlewareConfig } from "./getFlexibleChecksumsPlugin";
import { hasHeader } from "./hasHeader";
import { isStreaming } from "./isStreaming";
import { selectChecksumAlgorithmFunction } from "./selectChecksumAlgorithmFunction";
import { stringHasher } from "./stringHasher";

export interface FlexibleChecksumsRequestMiddlewareConfig {
/**
* The input object for the operation.
*/
input: Object;

/**
* Indicates an operation requires a checksum in its HTTP request.
*/
requestChecksumRequired: boolean;

/**
* Defines a top-level operation input member that is used to configure request checksum behavior.
*/
requestAlgorithmMember?: string;
}

export const flexibleChecksumsMiddlewareOptions: BuildHandlerOptions = {
name: "flexibleChecksumsMiddleware",
step: "build",
tags: ["BODY_CHECKSUM"],
override: true,
};

/**
* @internal
*/
export const flexibleChecksumsMiddleware =
(config: PreviouslyResolved, middlewareConfig: FlexibleChecksumsMiddlewareConfig): BuildMiddleware<any, any> =>
(config: PreviouslyResolved, middlewareConfig: FlexibleChecksumsRequestMiddlewareConfig): BuildMiddleware<any, any> =>
<Output extends MetadataBearer>(next: BuildHandler<any, Output>): BuildHandler<any, Output> =>
async (args: BuildHandlerArguments<any>): Promise<BuildHandlerOutput<Output>> => {
if (!HttpRequest.isInstance(args.request)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ describe(flexibleChecksumsResponseMiddleware.name, () => {
const mockConfig = {} as PreviouslyResolved;
const mockRequestValidationModeMember = "ChecksumEnabled";
const mockMiddlewareConfig = {
input: mockInput,
requestChecksumRequired: false,
requestValidationModeMember: mockRequestValidationModeMember,
};

Expand Down Expand Up @@ -71,7 +69,6 @@ describe(flexibleChecksumsResponseMiddleware.name, () => {

const handler = flexibleChecksumsResponseMiddleware(mockConfig, {
...mockMiddlewareConfig,
input: mockInput,
responseAlgorithms: mockResponseAlgorithms,
})(mockNext, {});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,24 @@ import {
} from "@smithy/types";

import { PreviouslyResolved } from "./configuration";
import { FlexibleChecksumsMiddlewareConfig } from "./getFlexibleChecksumsPlugin";
import { isStreaming } from "./isStreaming";
import { createReadStreamOnBuffer } from "./streams/create-read-stream-on-buffer";
import { validateChecksumFromResponse } from "./validateChecksumFromResponse";

export interface FlexibleChecksumsResponseMiddlewareConfig {
/**
* Defines a top-level operation input member used to opt-in to best-effort validation
* of a checksum returned in the HTTP response of the operation.
*/
requestValidationModeMember?: string;

/**
* Defines the checksum algorithms clients SHOULD look for when validating checksums
* returned in the HTTP response.
*/
responseAlgorithms?: string[];
}

/**
* @internal
*/
Expand All @@ -31,7 +44,10 @@ export const flexibleChecksumsResponseMiddlewareOptions: RelativeMiddlewareOptio
* The validation counterpart to the flexibleChecksumsMiddleware.
*/
export const flexibleChecksumsResponseMiddleware =
(config: PreviouslyResolved, middlewareConfig: FlexibleChecksumsMiddlewareConfig): DeserializeMiddleware<any, any> =>
(
config: PreviouslyResolved,
middlewareConfig: FlexibleChecksumsResponseMiddlewareConfig
): DeserializeMiddleware<any, any> =>
<Output extends MetadataBearer>(next: DeserializeHandler<any, Output>): DeserializeHandler<any, Output> =>
async (args: DeserializeHandlerArguments<any>): Promise<DeserializeHandlerOutput<Output>> => {
if (!HttpRequest.isInstance(args.request)) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,47 +1,20 @@
import { BuildHandlerOptions, Pluggable } from "@smithy/types";
import { Pluggable } from "@smithy/types";

import { PreviouslyResolved } from "./configuration";
import { flexibleChecksumsMiddleware } from "./flexibleChecksumsMiddleware";
import {
flexibleChecksumsMiddleware,
flexibleChecksumsMiddlewareOptions,
FlexibleChecksumsRequestMiddlewareConfig,
} from "./flexibleChecksumsMiddleware";
import {
flexibleChecksumsResponseMiddleware,
FlexibleChecksumsResponseMiddlewareConfig,
flexibleChecksumsResponseMiddlewareOptions,
} from "./flexibleChecksumsResponseMiddleware";

export const flexibleChecksumsMiddlewareOptions: BuildHandlerOptions = {
name: "flexibleChecksumsMiddleware",
step: "build",
tags: ["BODY_CHECKSUM"],
override: true,
};

export interface FlexibleChecksumsMiddlewareConfig {
/**
* The input object for the operation.
*/
input: Object;

/**
* Indicates an operation requires a checksum in its HTTP request.
*/
requestChecksumRequired: boolean;

/**
* Defines a top-level operation input member that is used to configure request checksum behavior.
*/
requestAlgorithmMember?: string;

/**
* Defines a top-level operation input member used to opt-in to best-effort validation
* of a checksum returned in the HTTP response of the operation.
*/
requestValidationModeMember?: string;

/**
* Defines the checksum algorithms clients SHOULD look for when validating checksums
* returned in the HTTP response.
*/
responseAlgorithms?: string[];
}
export interface FlexibleChecksumsMiddlewareConfig
extends FlexibleChecksumsRequestMiddlewareConfig,
FlexibleChecksumsResponseMiddlewareConfig {}

export const getFlexibleChecksumsPlugin = (
config: PreviouslyResolved,
Expand Down

0 comments on commit 78a50c9

Please sign in to comment.