Skip to content

Commit 6203448

Browse files
committed
feat: add use() to smithy client to inject middleware
1 parent f084181 commit 6203448

File tree

5 files changed

+97
-31
lines changed

5 files changed

+97
-31
lines changed

clients/node/client-rds-data-node/RDSDataClient.ts

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
import * as __aws_sdk_middleware_content_length from "@aws-sdk/middleware-content-length";
1+
import { contentLengthPlugin } from "@aws-sdk/middleware-content-length";
22
import * as __aws_sdk_middleware_header_default from "@aws-sdk/middleware-header-default";
33
import * as __aws_sdk_retry_middleware from "@aws-sdk/retry-middleware";
4-
import * as __aws_sdk_signing_middleware from "@aws-sdk/signing-middleware";
4+
import { signingPlugin } from "@aws-sdk/signing-middleware";
55
import * as __aws_sdk_util_user_agent_node from "@aws-sdk/util-user-agent-node";
66
import {
77
RDSDataConfiguration,
88
RDSDataResolvedConfiguration,
99
RDSRuntimeConfiguration
1010
} from "./RDSDataConfiguration";
11-
import { AwsAuthConfiguration, RegionConfiguration, RetryConfig, EndpointsConfig, ProtocolConfig } from './Configurations';
12-
import {version as clientVersion} from './package.json';
13-
import {HttpOptions, MetadataBearer} from '@aws-sdk/types';
11+
import { AwsAuthConfiguration, RegionConfiguration, RetryConfig, EndpointsConfig, ProtocolConfig } from '@aws-sdk/config-resolver';
12+
import { version as clientVersion } from './package.json';
13+
import { HttpOptions, MetadataBearer } from '@aws-sdk/types';
1414
import { SmithyClient } from "@aws-sdk/smithy-client";
1515

1616
/**
@@ -38,16 +38,7 @@ export class RDSDataClient extends SmithyClient<HttpOptions, InputTypesUnion, Ou
3838
let intermediaConfig_3 = EndpointsConfig.resolve(intermediaConfig_2);
3939
let intermediaConfig_4 = RetryConfig.resolve(intermediaConfig_3);
4040
this.config = intermediaConfig_4;
41-
this.middlewareStack.add(
42-
__aws_sdk_middleware_content_length.contentLengthMiddleware(
43-
this.config.bodyLengthChecker
44-
),
45-
{
46-
step: "build",
47-
priority: -80,
48-
tags: { SET_CONTENT_LENGTH: true }
49-
}
50-
);
41+
super.use(contentLengthPlugin(this.config.bodyLengthChecker));
5142
if (this.config.maxRetries > 0) {
5243
this.middlewareStack.add(
5344
__aws_sdk_retry_middleware.retryMiddleware(
@@ -62,17 +53,7 @@ export class RDSDataClient extends SmithyClient<HttpOptions, InputTypesUnion, Ou
6253
}
6354
);
6455
}
65-
this.middlewareStack.add(
66-
__aws_sdk_signing_middleware.signingMiddleware<
67-
InputTypesUnion,
68-
OutputTypesUnion
69-
>(this.config.signer),
70-
{
71-
step: "finalize",
72-
priority: 0,
73-
tags: { SIGNATURE: true }
74-
}
75-
);
56+
super.use(signingPlugin(this.config.signer));
7657
this.middlewareStack.add(
7758
__aws_sdk_middleware_header_default.headerDefault({
7859
"User-Agent": __aws_sdk_util_user_agent_node.defaultUserAgent(

packages/middleware-content-length/src/index.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import {
44
BuildMiddleware,
55
BodyLengthCalculator,
66
MetadataBearer,
7-
BuildHandlerOutput
7+
BuildHandlerOutput,
8+
InjectableMiddleware
89
} from "@aws-sdk/types";
910
import { HttpRequest } from "@aws-sdk/protocol-http";
1011

@@ -42,3 +43,13 @@ export function contentLengthMiddleware(
4243
});
4344
};
4445
}
46+
47+
export function contentLengthPlugin(
48+
bodyLengthCalculator: BodyLengthCalculator
49+
): InjectableMiddleware {
50+
return {
51+
middleware: contentLengthMiddleware(bodyLengthCalculator),
52+
step: "build",
53+
tags: { SET_CONTENT_LENGTH: true }
54+
};
55+
}

packages/signing-middleware/src/index.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
import {
22
FinalizeHandler,
33
FinalizeHandlerArguments,
4-
FinalizeMiddleware,
4+
FinalizeRequestMiddleware,
55
RequestSigner,
66
FinalizeHandlerOutput,
7-
HttpRequest
7+
HttpRequest,
8+
InjectableMiddleware
89
} from "@aws-sdk/types";
910

1011
export function signingMiddleware<Input extends object, Output extends object>(
1112
signer: RequestSigner
12-
): FinalizeMiddleware<Input, Output> {
13+
): FinalizeRequestMiddleware<Input, Output> {
1314
return (
1415
next: FinalizeHandler<Input, Output>
1516
): FinalizeHandler<Input, Output> => async (
@@ -21,3 +22,13 @@ export function signingMiddleware<Input extends object, Output extends object>(
2122
request: await signer.sign(args.request as HttpRequest)
2223
});
2324
}
25+
26+
export function signingPlugin<Input extends object, Output extends object>(
27+
signer: RequestSigner
28+
): InjectableMiddleware<Input, Output> {
29+
return {
30+
middleware: signingMiddleware<Input, Output>(signer),
31+
step: "finalizeRequest",
32+
tags: { SIGNATURE: true }
33+
};
34+
}

packages/smithy-client/src/index.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import { MiddlewareStack } from "@aws-sdk/middleware-stack";
2-
import { Protocol, Command, MetadataBearer } from "@aws-sdk/types";
2+
import {
3+
Protocol,
4+
Command,
5+
MetadataBearer,
6+
InjectableMiddleware,
7+
HandlerOptions as InjectOptions
8+
} from "@aws-sdk/types";
39

410
export interface SmithyConfiguration<HandlerOptions> {
511
protocol: Protocol<any, any, HandlerOptions>;
@@ -19,6 +25,20 @@ export class SmithyClient<
1925
constructor(config: SmithyConfiguration<HandlerOptions>) {
2026
this.config = config;
2127
}
28+
use(
29+
injectable: InjectableMiddleware<ClientInput, ClientOutput>,
30+
options: InjectOptions = {}
31+
) {
32+
const { middleware, step, priority, tags } = injectable;
33+
this.middlewareStack.add(
34+
middleware as any,
35+
{
36+
step: options.step || step,
37+
priority: options.priority || priority,
38+
tags: { ...tags, ...options.tags }
39+
} as any
40+
);
41+
}
2242
send<InputType extends ClientInput, OutputType extends ClientOutput>(
2343
command: Command<
2444
ClientInput,

packages/types/src/middleware.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,3 +365,46 @@ export interface HandlerExecutionContext {
365365
*/
366366
logger: Logger;
367367
}
368+
369+
export type InjectableMiddleware<
370+
Input extends object = any,
371+
Output extends object = any
372+
> =
373+
| {
374+
middleware: Middleware<Input, Output>;
375+
step: "initialize";
376+
priority?: number;
377+
tags?: { [tag: string]: any };
378+
}
379+
| {
380+
middleware: SerializeMiddleware<Input, Output>;
381+
step: "serialization";
382+
priority?: number;
383+
tags?: { [tag: string]: any };
384+
}
385+
| {
386+
middleware: FinalizeRequestMiddleware<Input, Output>;
387+
step: "build";
388+
priority?: number;
389+
tags?: { [tag: string]: any };
390+
}
391+
| {
392+
middleware: FinalizeRequestMiddleware<Input, Output>;
393+
step: "finalizeRequest";
394+
priority?: number;
395+
tags?: { [tag: string]: any };
396+
}
397+
| {
398+
middleware: DeserializeMiddleware<Input, Output>;
399+
step: "deserialize";
400+
priority?: number;
401+
tags?: { [tag: string]: any };
402+
};
403+
404+
// export type InjectableMiddleware<
405+
// Input extends object = any,
406+
// Output extends object = any
407+
// > = {
408+
// middleware: Middleware<Input, Output> | SerializeMiddleware<Input, Output> | FinalizeRequestMiddleware<Input, Output> | DeserializeMiddleware<Input, Output>
409+
// options: HandlerOptions & { step?: "initialize" } | SerializeHandlerOptions | BuildHandlerOptions | FinalizeRequestHandlerOptions | DeserializeHandlerOptions
410+
// }

0 commit comments

Comments
 (0)