Skip to content

Commit 9dade00

Browse files
authored
docs: add supplemental docs (#5776)
* docs: add supplemental docs * docs: more about client options
1 parent fff6390 commit 9dade00

File tree

4 files changed

+604
-26
lines changed

4 files changed

+604
-26
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ Here’s an example of logging requests using middleware:
153153
const client = new DynamoDB({ region: "us-west-2" });
154154

155155
client.middlewareStack.add(
156-
(next, context) => (args) => {
156+
(next, context) => async (args) => {
157157
console.log("AWS SDK context", context.clientName, context.commandName);
158158
console.log("AWS SDK request input", args.input);
159159
const result = await next(args);
@@ -533,7 +533,7 @@ const client = new S3({ region: "us-west-2" });
533533

534534
// Middleware added to client, applies to all commands.
535535
client.middlewareStack.add(
536-
(next, context) => (args) => {
536+
(next, context) => async (args) => {
537537
args.request.headers["x-amz-meta-foo"] = "bar";
538538
console.log("AWS SDK context", context.clientName, context.commandName);
539539
console.log("AWS SDK request input", args.input);
Lines changed: 65 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import { S3Client } from "@aws-sdk/client-s3";
2-
import { defaultProvider as credentialDefaultProvider } from "@aws-sdk/credential-provider-node";
1+
import { S3Client, S3ClientConfigType } from "@aws-sdk/client-s3";
2+
import { defaultProvider as credentialDefaultProvider, defaultProvider } from "@aws-sdk/credential-provider-node";
33
import { NODE_USE_ARN_REGION_CONFIG_OPTIONS } from "@aws-sdk/middleware-bucket-endpoint";
4+
import { S3ExpressIdentityProviderImpl } from "@aws-sdk/middleware-sdk-s3";
45
import { SignatureV4MultiRegion } from "@aws-sdk/signature-v4-multi-region";
56
import { defaultUserAgent } from "@aws-sdk/util-user-agent-node";
67
import {
@@ -14,16 +15,17 @@ import { Hash } from "@smithy/hash-node";
1415
import { readableStreamHasher as streamHasher } from "@smithy/hash-stream-node";
1516
import { NODE_MAX_ATTEMPT_CONFIG_OPTIONS, NODE_RETRY_MODE_CONFIG_OPTIONS } from "@smithy/middleware-retry";
1617
import { loadConfig as loadNodeConfig } from "@smithy/node-config-provider";
17-
import { NodeHttpHandler as RequestHandler, streamCollector } from "@smithy/node-http-handler";
18+
import { NodeHttpHandler, streamCollector } from "@smithy/node-http-handler";
1819
import { loadConfigsForDefaultMode } from "@smithy/smithy-client";
1920
import { EndpointV2 } from "@smithy/types";
2021
import { parseUrl } from "@smithy/url-parser";
2122
import { fromBase64, toBase64 } from "@smithy/util-base64";
2223
import { calculateBodyLength } from "@smithy/util-body-length-node";
2324
import { resolveDefaultsModeConfig } from "@smithy/util-defaults-mode-node";
24-
import { DEFAULT_RETRY_MODE } from "@smithy/util-retry";
25+
import { ConfiguredRetryStrategy, DEFAULT_RETRY_MODE, StandardRetryStrategy } from "@smithy/util-retry";
2526
import { getAwsChunkedEncodingStream, sdkStreamMixin } from "@smithy/util-stream";
2627
import { fromUtf8, toUtf8 } from "@smithy/util-utf8";
28+
import https from "https";
2729

2830
/**
2931
* Successful compilation indicates the client can be initialized
@@ -33,51 +35,90 @@ export const initializeWithMaximalConfiguration = () => {
3335
const defaultsMode = resolveDefaultsModeConfig({});
3436
const defaultConfigProvider = () => defaultsMode().then(loadConfigsForDefaultMode);
3537

36-
const s3 = new S3Client({
38+
const config: Required<S3ClientConfigType> = {
39+
// BEGIN user options
40+
region: loadNodeConfig(NODE_REGION_CONFIG_OPTIONS, NODE_REGION_CONFIG_FILE_OPTIONS),
41+
credentials: defaultProvider({}),
3742
endpoint: "endpoint",
38-
customUserAgent: "aws-client-api-test-user-agent",
39-
apiVersion: "2006-03-01",
40-
base64Decoder: fromBase64,
41-
base64Encoder: toBase64,
42-
disableHostPrefix: false,
43-
endpointProvider: () => null as unknown as EndpointV2,
43+
requestHandler: new NodeHttpHandler({
44+
httpsAgent: new https.Agent({
45+
maxSockets: 200,
46+
keepAlive: true,
47+
}),
48+
requestTimeout: 15000,
49+
connectionTimeout: 6000,
50+
}),
51+
retryStrategy:
52+
new StandardRetryStrategy(3) ||
53+
new ConfiguredRetryStrategy(3, (attempt) => {
54+
return attempt * 1_000;
55+
}),
56+
retryMode: loadNodeConfig({
57+
...NODE_RETRY_MODE_CONFIG_OPTIONS,
58+
default: async () => (await defaultConfigProvider()).retryMode || DEFAULT_RETRY_MODE,
59+
}),
60+
maxAttempts: loadNodeConfig(NODE_MAX_ATTEMPT_CONFIG_OPTIONS),
4461
logger: {
4562
trace() {},
4663
debug() {},
4764
info() {},
4865
warn() {},
4966
error() {},
5067
},
68+
signer: new SignatureV4MultiRegion({
69+
service: "s3",
70+
region: "us-west-2",
71+
credentials: defaultProvider({}),
72+
sha256: Hash.bind(null, "sha256"),
73+
}),
74+
useDualstackEndpoint: loadNodeConfig(NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),
75+
useFipsEndpoint: loadNodeConfig(NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS),
76+
customUserAgent: "aws-client-api-test-user-agent",
77+
extensions: [],
78+
tls: true,
79+
disableHostPrefix: false,
80+
signingRegion: "us-west-2",
81+
// END user options
82+
83+
// BEGIN internal options
84+
apiVersion: "2006-03-01",
5185
serviceId: "S3",
86+
runtime: "node",
87+
systemClockOffset: 0,
5288
signerConstructor: SignatureV4MultiRegion,
53-
signingEscapePath: false,
89+
endpointProvider: () => null as unknown as EndpointV2,
5490
urlParser: parseUrl,
55-
runtime: "node",
91+
base64Decoder: fromBase64,
92+
base64Encoder: toBase64,
5693
defaultsMode,
5794
bodyLengthChecker: calculateBodyLength,
5895
credentialDefaultProvider: credentialDefaultProvider,
5996
defaultUserAgentProvider: defaultUserAgent({ serviceId: "S3", clientVersion: "3.0.0-client-s3-interface-test" }),
6097
eventStreamSerdeProvider: eventStreamSerdeProvider,
6198
getAwsChunkedEncodingStream: getAwsChunkedEncodingStream,
62-
maxAttempts: loadNodeConfig(NODE_MAX_ATTEMPT_CONFIG_OPTIONS),
6399
md5: Hash.bind(null, "md5"),
64-
region: loadNodeConfig(NODE_REGION_CONFIG_OPTIONS, NODE_REGION_CONFIG_FILE_OPTIONS),
65-
requestHandler: new RequestHandler(defaultConfigProvider),
66-
retryMode: loadNodeConfig({
67-
...NODE_RETRY_MODE_CONFIG_OPTIONS,
68-
default: async () => (await defaultConfigProvider()).retryMode || DEFAULT_RETRY_MODE,
69-
}),
70100
sdkStreamMixin: sdkStreamMixin,
71101
sha1: Hash.bind(null, "sha1"),
72102
sha256: Hash.bind(null, "sha256"),
73103
streamCollector: streamCollector,
74104
streamHasher: streamHasher,
75-
useArnRegion: loadNodeConfig(NODE_USE_ARN_REGION_CONFIG_OPTIONS),
76-
useDualstackEndpoint: loadNodeConfig(NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS),
77-
useFipsEndpoint: loadNodeConfig(NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS),
78105
utf8Decoder: fromUtf8,
79106
utf8Encoder: toUtf8,
80-
});
107+
// END internal options
108+
109+
// S3 specific options below
110+
useAccelerateEndpoint: false,
111+
useArnRegion: loadNodeConfig(NODE_USE_ARN_REGION_CONFIG_OPTIONS),
112+
forcePathStyle: false,
113+
disableMultiregionAccessPoints: false,
114+
followRegionRedirects: false,
115+
s3ExpressIdentityProvider: new S3ExpressIdentityProviderImpl("createSessionFn" as any),
116+
disableS3ExpressSessionAuth: false,
117+
useGlobalEndpoint: false,
118+
signingEscapePath: false,
119+
};
120+
121+
const s3 = new S3Client(config);
81122

82123
return s3;
83124
};

0 commit comments

Comments
 (0)