From 685f44d40cf24cb13f88211d672680db55b425fc Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Fri, 13 Sep 2024 09:56:05 -0700 Subject: [PATCH] chore(clients): populate and resolve flexible checksums client config (#6471) --- clients/client-s3/src/S3Client.ts | 28 ++++++++++++------- clients/client-s3/src/runtimeConfig.ts | 8 ++++++ .../codegen/AddHttpChecksumDependency.java | 22 +++++++++++++++ private/aws-client-api-test/package.json | 1 + .../initializeWithMaximalConfiguration.ts | 6 ++++ 5 files changed, 55 insertions(+), 10 deletions(-) diff --git a/clients/client-s3/src/S3Client.ts b/clients/client-s3/src/S3Client.ts index 40cfea69a470..f3283b5a3217 100644 --- a/clients/client-s3/src/S3Client.ts +++ b/clients/client-s3/src/S3Client.ts @@ -1,5 +1,10 @@ // smithy-typescript generated code import { getAddExpectContinuePlugin } from "@aws-sdk/middleware-expect-continue"; +import { + FlexibleChecksumsInputConfig, + FlexibleChecksumsResolvedConfig, + resolveFlexibleChecksumsConfig, +} from "@aws-sdk/middleware-flexible-checksums"; import { getHostHeaderPlugin, HostHeaderInputConfig, @@ -729,6 +734,7 @@ export interface ClientDefaults extends Partial<__SmithyConfiguration<__HttpHand export type S3ClientConfigType = Partial<__SmithyConfiguration<__HttpHandlerOptions>> & ClientDefaults & UserAgentInputConfig & + FlexibleChecksumsInputConfig & RetryInputConfig & RegionInputConfig & HostHeaderInputConfig & @@ -751,6 +757,7 @@ export type S3ClientResolvedConfigType = __SmithyResolvedConfiguration<__HttpHan Required & RuntimeExtensionsConfig & UserAgentResolvedConfig & + FlexibleChecksumsResolvedConfig & RetryResolvedConfig & RegionResolvedConfig & HostHeaderResolvedConfig & @@ -785,16 +792,17 @@ export class S3Client extends __Client< const _config_0 = __getRuntimeConfig(configuration || {}); const _config_1 = resolveClientEndpointParameters(_config_0); const _config_2 = resolveUserAgentConfig(_config_1); - const _config_3 = resolveRetryConfig(_config_2); - const _config_4 = resolveRegionConfig(_config_3); - const _config_5 = resolveHostHeaderConfig(_config_4); - const _config_6 = resolveEndpointConfig(_config_5); - const _config_7 = resolveEventStreamSerdeConfig(_config_6); - const _config_8 = resolveHttpAuthSchemeConfig(_config_7); - const _config_9 = resolveS3Config(_config_8, { session: [() => this, CreateSessionCommand] }); - const _config_10 = resolveRuntimeExtensions(_config_9, configuration?.extensions || []); - super(_config_10); - this.config = _config_10; + const _config_3 = resolveFlexibleChecksumsConfig(_config_2); + const _config_4 = resolveRetryConfig(_config_3); + const _config_5 = resolveRegionConfig(_config_4); + const _config_6 = resolveHostHeaderConfig(_config_5); + const _config_7 = resolveEndpointConfig(_config_6); + const _config_8 = resolveEventStreamSerdeConfig(_config_7); + const _config_9 = resolveHttpAuthSchemeConfig(_config_8); + const _config_10 = resolveS3Config(_config_9, { session: [() => this, CreateSessionCommand] }); + const _config_11 = resolveRuntimeExtensions(_config_10, configuration?.extensions || []); + super(_config_11); + this.config = _config_11; this.middlewareStack.use(getUserAgentPlugin(this.config)); this.middlewareStack.use(getRetryPlugin(this.config)); this.middlewareStack.use(getContentLengthPlugin(this.config)); diff --git a/clients/client-s3/src/runtimeConfig.ts b/clients/client-s3/src/runtimeConfig.ts index 89e08626ab8f..a57fdb6773e0 100644 --- a/clients/client-s3/src/runtimeConfig.ts +++ b/clients/client-s3/src/runtimeConfig.ts @@ -5,6 +5,10 @@ import packageInfo from "../package.json"; // eslint-disable-line import { NODE_SIGV4A_CONFIG_OPTIONS, emitWarningIfUnsupportedVersion as awsCheckVersion } from "@aws-sdk/core"; import { defaultProvider as credentialDefaultProvider } from "@aws-sdk/credential-provider-node"; import { NODE_USE_ARN_REGION_CONFIG_OPTIONS } from "@aws-sdk/middleware-bucket-endpoint"; +import { + NODE_REQUEST_CHECKSUM_CALCULATION_CONFIG_OPTIONS, + NODE_RESPONSE_CHECKSUM_VALIDATION_CONFIG_OPTIONS, +} from "@aws-sdk/middleware-flexible-checksums"; import { NODE_DISABLE_S3_EXPRESS_SESSION_AUTH_OPTIONS } from "@aws-sdk/middleware-sdk-s3"; import { ChecksumConstructor as __ChecksumConstructor, HashConstructor as __HashConstructor } from "@aws-sdk/types"; import { defaultUserAgent } from "@aws-sdk/util-user-agent-node"; @@ -53,7 +57,11 @@ export const getRuntimeConfig = (config: S3ClientConfig) => { maxAttempts: config?.maxAttempts ?? loadNodeConfig(NODE_MAX_ATTEMPT_CONFIG_OPTIONS), md5: config?.md5 ?? Hash.bind(null, "md5"), region: config?.region ?? loadNodeConfig(NODE_REGION_CONFIG_OPTIONS, NODE_REGION_CONFIG_FILE_OPTIONS), + requestChecksumCalculation: + config?.requestChecksumCalculation ?? loadNodeConfig(NODE_REQUEST_CHECKSUM_CALCULATION_CONFIG_OPTIONS), requestHandler: RequestHandler.create(config?.requestHandler ?? defaultConfigProvider), + responseChecksumValidation: + config?.responseChecksumValidation ?? loadNodeConfig(NODE_RESPONSE_CHECKSUM_VALIDATION_CONFIG_OPTIONS), retryMode: config?.retryMode ?? loadNodeConfig({ diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddHttpChecksumDependency.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddHttpChecksumDependency.java index 469be6ec60d3..94eed9a133b2 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddHttpChecksumDependency.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddHttpChecksumDependency.java @@ -15,6 +15,7 @@ package software.amazon.smithy.aws.typescript.codegen; +import static software.amazon.smithy.typescript.codegen.integration.RuntimeClientPlugin.Convention.HAS_CONFIG; import static software.amazon.smithy.typescript.codegen.integration.RuntimeClientPlugin.Convention.HAS_MIDDLEWARE; import java.util.Collections; @@ -131,6 +132,22 @@ public Map> getRuntimeConfigWriters( writer.addImport("ChecksumConstructor", "__ChecksumConstructor", TypeScriptDependency.AWS_SDK_TYPES); writer.write("Hash.bind(null, \"sha1\")"); + }, + "requestChecksumCalculation", writer -> { + writer.addDependency(TypeScriptDependency.NODE_CONFIG_PROVIDER); + writer.addImport("loadConfig", "loadNodeConfig", + TypeScriptDependency.NODE_CONFIG_PROVIDER); + writer.addImport("NODE_REQUEST_CHECKSUM_CALCULATION_CONFIG_OPTIONS", null, + AwsDependency.FLEXIBLE_CHECKSUMS_MIDDLEWARE); + writer.write("loadNodeConfig(NODE_REQUEST_CHECKSUM_CALCULATION_CONFIG_OPTIONS)"); + }, + "responseChecksumValidation", writer -> { + writer.addDependency(TypeScriptDependency.NODE_CONFIG_PROVIDER); + writer.addImport("loadConfig", "loadNodeConfig", + TypeScriptDependency.NODE_CONFIG_PROVIDER); + writer.addImport("NODE_RESPONSE_CHECKSUM_VALIDATION_CONFIG_OPTIONS", null, + AwsDependency.FLEXIBLE_CHECKSUMS_MIDDLEWARE); + writer.write("loadNodeConfig(NODE_RESPONSE_CHECKSUM_VALIDATION_CONFIG_OPTIONS)"); } ); case BROWSER: @@ -160,6 +177,11 @@ public Map> getRuntimeConfigWriters( @Override public List getClientPlugins() { return ListUtils.of( + RuntimeClientPlugin.builder() + .withConventions(AwsDependency.FLEXIBLE_CHECKSUMS_MIDDLEWARE.dependency, "FlexibleChecksums", + HAS_CONFIG) + .servicePredicate((m, s) -> hasHttpChecksumTrait(m, s)) + .build(), RuntimeClientPlugin.builder() .withConventions(AwsDependency.FLEXIBLE_CHECKSUMS_MIDDLEWARE.dependency, "FlexibleChecksums", HAS_MIDDLEWARE) diff --git a/private/aws-client-api-test/package.json b/private/aws-client-api-test/package.json index 1faedce8d36e..baeabcd7f56b 100644 --- a/private/aws-client-api-test/package.json +++ b/private/aws-client-api-test/package.json @@ -20,6 +20,7 @@ "@aws-sdk/client-s3": "*", "@aws-sdk/credential-provider-node": "*", "@aws-sdk/middleware-bucket-endpoint": "*", + "@aws-sdk/middleware-flexible-checksums": "*", "@aws-sdk/middleware-sdk-s3": "*", "@aws-sdk/signature-v4-multi-region": "*", "@aws-sdk/util-user-agent-node": "*", diff --git a/private/aws-client-api-test/src/client-interface-tests/client-s3/impl/initializeWithMaximalConfiguration.ts b/private/aws-client-api-test/src/client-interface-tests/client-s3/impl/initializeWithMaximalConfiguration.ts index 628b96366aea..e9e2f205ad63 100644 --- a/private/aws-client-api-test/src/client-interface-tests/client-s3/impl/initializeWithMaximalConfiguration.ts +++ b/private/aws-client-api-test/src/client-interface-tests/client-s3/impl/initializeWithMaximalConfiguration.ts @@ -1,6 +1,10 @@ import { S3Client, S3ClientConfigType } from "@aws-sdk/client-s3"; import { defaultProvider as credentialDefaultProvider, defaultProvider } from "@aws-sdk/credential-provider-node"; import { NODE_USE_ARN_REGION_CONFIG_OPTIONS } from "@aws-sdk/middleware-bucket-endpoint"; +import { + DEFAULT_REQUEST_CHECKSUM_CALCULATION, + DEFAULT_RESPONSE_CHECKSUM_VALIDATION, +} from "@aws-sdk/middleware-flexible-checksums"; import { S3ExpressIdentityProviderImpl } from "@aws-sdk/middleware-sdk-s3"; import { SignatureV4MultiRegion } from "@aws-sdk/signature-v4-multi-region"; import { defaultUserAgent } from "@aws-sdk/util-user-agent-node"; @@ -122,6 +126,8 @@ export const initializeWithMaximalConfiguration = () => { signingEscapePath: false, bucketEndpoint: false, sigv4aSigningRegionSet: [], + requestChecksumCalculation: DEFAULT_REQUEST_CHECKSUM_CALCULATION, + responseChecksumValidation: DEFAULT_RESPONSE_CHECKSUM_VALIDATION, }; const s3 = new S3Client(config);