From f902002601a813cd6b851942502b0d5f9a487c5e Mon Sep 17 00:00:00 2001 From: Joel Scheuner Date: Thu, 12 Jun 2025 12:32:33 +0200 Subject: [PATCH 1/2] Force pathstyle when detecting custom endpoint unless s3-prefixed --- clients/client-s3/src/endpoint/EndpointParameters.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/clients/client-s3/src/endpoint/EndpointParameters.ts b/clients/client-s3/src/endpoint/EndpointParameters.ts index 9d4708236ab8..46bfc54be936 100644 --- a/clients/client-s3/src/endpoint/EndpointParameters.ts +++ b/clients/client-s3/src/endpoint/EndpointParameters.ts @@ -24,10 +24,16 @@ export type ClientResolvedEndpointParameters = ClientInputEndpointParameters & { export const resolveClientEndpointParameters = ( options: T & ClientInputEndpointParameters ): T & ClientResolvedEndpointParameters => { + let forcePathStyleDefault = false; + // Custom endpoints are incompatible with virtual-host-style, unless + // the endpoint includes "s3." to allow for virtual-host-style testing. + if (options.endpoint && !options.useAccelerateEndpoint && !options.endpoint.includes("s3.")) { + forcePathStyleDefault = true; + } return Object.assign(options, { useFipsEndpoint: options.useFipsEndpoint ?? false, useDualstackEndpoint: options.useDualstackEndpoint ?? false, - forcePathStyle: options.forcePathStyle ?? false, + forcePathStyle: options.forcePathStyle ?? forcePathStyleDefault, useAccelerateEndpoint: options.useAccelerateEndpoint ?? false, useGlobalEndpoint: options.useGlobalEndpoint ?? false, disableMultiregionAccessPoints: options.disableMultiregionAccessPoints ?? false, From 9c2f63bce00f2f40ac5fe1a6b40ff1f09eed9f42 Mon Sep 17 00:00:00 2001 From: Joel Scheuner Date: Wed, 18 Jun 2025 20:48:17 +0200 Subject: [PATCH 2/2] Fix type error and switch to undefined/auto detection --- clients/client-s3/src/endpoint/EndpointParameters.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clients/client-s3/src/endpoint/EndpointParameters.ts b/clients/client-s3/src/endpoint/EndpointParameters.ts index 46bfc54be936..01e7b7d5b452 100644 --- a/clients/client-s3/src/endpoint/EndpointParameters.ts +++ b/clients/client-s3/src/endpoint/EndpointParameters.ts @@ -24,16 +24,16 @@ export type ClientResolvedEndpointParameters = ClientInputEndpointParameters & { export const resolveClientEndpointParameters = ( options: T & ClientInputEndpointParameters ): T & ClientResolvedEndpointParameters => { - let forcePathStyleDefault = false; // Custom endpoints are incompatible with virtual-host-style, unless // the endpoint includes "s3." to allow for virtual-host-style testing. - if (options.endpoint && !options.useAccelerateEndpoint && !options.endpoint.includes("s3.")) { - forcePathStyleDefault = true; + let forcePathStyleOverride = undefined; + if (options.endpoint && !options.useAccelerateEndpoint) { + forcePathStyleOverride = options.forcePathStyle ?? true; } return Object.assign(options, { useFipsEndpoint: options.useFipsEndpoint ?? false, useDualstackEndpoint: options.useDualstackEndpoint ?? false, - forcePathStyle: options.forcePathStyle ?? forcePathStyleDefault, + forcePathStyle: options.forcePathStyle ?? forcePathStyleOverride ?? false, useAccelerateEndpoint: options.useAccelerateEndpoint ?? false, useGlobalEndpoint: options.useGlobalEndpoint ?? false, disableMultiregionAccessPoints: options.disableMultiregionAccessPoints ?? false,