@@ -33,11 +33,16 @@ export interface BucketHostname {
33
33
34
34
export const bucketHostname = ( options : BucketHostnameParams | ArnHostnameParams ) : BucketHostname => {
35
35
validateCustomEndpoint ( options ) ;
36
+
37
+ // TODO: Remove checks for ".dualstack" from entire middleware.
38
+ const { dualstackEndpoint, baseHostname } = options ;
39
+ const updatedBaseHostname = dualstackEndpoint ? baseHostname . replace ( ".dualstack" , "" ) : baseHostname ;
40
+
36
41
return isBucketNameOptions ( options )
37
42
? // Construct endpoint when bucketName is a string referring to a bucket name
38
- getEndpointFromBucketName ( options )
43
+ getEndpointFromBucketName ( { ... options , baseHostname : updatedBaseHostname } )
39
44
: // Construct endpoint when bucketName is an ARN referring to an S3 resource like Access Point
40
- getEndpointFromArn ( options ) ;
45
+ getEndpointFromArn ( { ... options , baseHostname : updatedBaseHostname } ) ;
41
46
} ;
42
47
43
48
const getEndpointFromBucketName = ( {
@@ -51,9 +56,7 @@ const getEndpointFromBucketName = ({
51
56
tlsCompatible = true ,
52
57
isCustomEndpoint = false ,
53
58
} : BucketHostnameParams ) : BucketHostname => {
54
- // TODO: Remove checks for ".dualstack" from entire middleware.
55
- const suffixHostname = dualstackEndpoint ? baseHostname . replace ( ".dualstack" , "" ) : baseHostname ;
56
- const [ clientRegion , hostnameSuffix ] = isCustomEndpoint ? [ region , baseHostname ] : getSuffix ( suffixHostname ) ;
59
+ const [ clientRegion , hostnameSuffix ] = isCustomEndpoint ? [ region , baseHostname ] : getSuffix ( baseHostname ) ;
57
60
if ( pathStyleEndpoint || ! isDnsCompatibleBucketName ( bucketName ) || ( tlsCompatible && DOT_PATTERN . test ( bucketName ) ) ) {
58
61
return {
59
62
bucketEndpoint : false ,
0 commit comments