1
1
// smithy-typescript generated code
2
2
// Please do not touch this file. It's generated from template in:
3
3
// https://github.com/aws/aws-sdk-js-v3/blob/main/codegen/smithy-aws-typescript-codegen/src/main/resources/software/amazon/smithy/aws/typescript/codegen/sts-client-defaultStsRoleAssumers.ts
4
- import { AwsCredentialIdentity , Provider } from "@smithy/types" ;
4
+ import type { CredentialProviderOptions } from "@aws-sdk/types" ;
5
+ import { partition } from "@aws-sdk/util-endpoints" ;
6
+ import { AwsCredentialIdentity , Logger , Provider } from "@smithy/types" ;
5
7
6
8
import { AssumeRoleCommand , AssumeRoleCommandInput } from "./commands/AssumeRoleCommand" ;
7
9
import {
@@ -10,6 +12,14 @@ import {
10
12
} from "./commands/AssumeRoleWithWebIdentityCommand" ;
11
13
import type { STSClient , STSClientConfig , STSClientResolvedConfig } from "./STSClient" ;
12
14
15
+ /**
16
+ * @public
17
+ */
18
+ export type STSRoleAssumerOptions = Pick < STSClientConfig , "logger" | "region" | "requestHandler" > & {
19
+ credentialProviderLogger ?: Logger ;
20
+ parentClientConfig ?: CredentialProviderOptions [ "parentClientConfig" ] ;
21
+ } ;
22
+
13
23
/**
14
24
* @internal
15
25
*/
@@ -21,40 +31,63 @@ export type RoleAssumer = (
21
31
const ASSUME_ROLE_DEFAULT_REGION = "us-east-1" ;
22
32
23
33
/**
24
- * Inject the fallback STS region of us-east-1.
34
+ * @internal
35
+ *
36
+ * Default to the us-east-1 region for aws partition,
37
+ * or default to the parent client region otherwise.
25
38
*/
26
- const decorateDefaultRegion = ( region : string | Provider < string > | undefined ) : string | Provider < string > => {
27
- if ( typeof region !== "function" ) {
28
- return region === undefined ? ASSUME_ROLE_DEFAULT_REGION : region ;
39
+ const resolveRegion = async (
40
+ _region : string | Provider < string > | undefined ,
41
+ _parentRegion : string | Provider < string > | undefined ,
42
+ credentialProviderLogger ?: Logger
43
+ ) : Promise < string > => {
44
+ const region : string | undefined = typeof _region === "function" ? await _region ( ) : _region ;
45
+ const parentRegion : string | undefined = typeof _parentRegion === "function" ? await _parentRegion ( ) : _parentRegion ;
46
+
47
+ if ( ! parentRegion || partition ( parentRegion ) . name === "aws" ) {
48
+ credentialProviderLogger ?. debug ?.(
49
+ "@aws-sdk/client-sts::resolveRegion" ,
50
+ "accepting first of:" ,
51
+ `${ region } (provider)` ,
52
+ `${ ASSUME_ROLE_DEFAULT_REGION } (STS default)`
53
+ ) ;
54
+ return region ?? ASSUME_ROLE_DEFAULT_REGION ;
55
+ } else {
56
+ credentialProviderLogger ?. debug ?.(
57
+ "@aws-sdk/client-sts::resolveRegion" ,
58
+ "accepting first of:" ,
59
+ `${ region } (provider)` ,
60
+ `${ parentRegion } (parent client)` ,
61
+ `${ ASSUME_ROLE_DEFAULT_REGION } (STS default)`
62
+ ) ;
63
+ return region ?? parentRegion ?? ASSUME_ROLE_DEFAULT_REGION ;
29
64
}
30
- return async ( ) => {
31
- try {
32
- return await region ( ) ;
33
- } catch ( e ) {
34
- return ASSUME_ROLE_DEFAULT_REGION ;
35
- }
36
- } ;
37
65
} ;
38
66
39
67
/**
40
68
* The default role assumer that used by credential providers when sts:AssumeRole API is needed.
41
69
* @internal
42
70
*/
43
71
export const getDefaultRoleAssumer = (
44
- stsOptions : Pick < STSClientConfig , "logger" | "region" | "requestHandler" > ,
72
+ stsOptions : STSRoleAssumerOptions ,
45
73
stsClientCtor : new ( options : STSClientConfig ) => STSClient
46
74
) : RoleAssumer => {
47
75
let stsClient : STSClient ;
48
76
let closureSourceCreds : AwsCredentialIdentity ;
49
77
return async ( sourceCreds , params ) => {
50
78
closureSourceCreds = sourceCreds ;
51
79
if ( ! stsClient ) {
52
- const { logger, region, requestHandler } = stsOptions ;
80
+ const { logger, region, requestHandler, credentialProviderLogger } = stsOptions ;
81
+ const resolvedRegion = await resolveRegion (
82
+ region ,
83
+ stsOptions ?. parentClientConfig ?. region ,
84
+ credentialProviderLogger
85
+ ) ;
53
86
stsClient = new stsClientCtor ( {
54
87
logger,
55
88
// A hack to make sts client uses the credential in current closure.
56
89
credentialDefaultProvider : ( ) => async ( ) => closureSourceCreds ,
57
- region : decorateDefaultRegion ( region || stsOptions . region ) ,
90
+ region : resolvedRegion ,
58
91
...( requestHandler ? { requestHandler } : { } ) ,
59
92
} ) ;
60
93
}
@@ -85,16 +118,21 @@ export type RoleAssumerWithWebIdentity = (
85
118
* @internal
86
119
*/
87
120
export const getDefaultRoleAssumerWithWebIdentity = (
88
- stsOptions : Pick < STSClientConfig , "logger" | "region" | "requestHandler" > ,
121
+ stsOptions : STSRoleAssumerOptions ,
89
122
stsClientCtor : new ( options : STSClientConfig ) => STSClient
90
123
) : RoleAssumerWithWebIdentity => {
91
124
let stsClient : STSClient ;
92
125
return async ( params ) => {
93
126
if ( ! stsClient ) {
94
- const { logger, region, requestHandler } = stsOptions ;
127
+ const { logger, region, requestHandler, credentialProviderLogger } = stsOptions ;
128
+ const resolvedRegion = await resolveRegion (
129
+ region ,
130
+ stsOptions ?. parentClientConfig ?. region ,
131
+ credentialProviderLogger
132
+ ) ;
95
133
stsClient = new stsClientCtor ( {
96
134
logger,
97
- region : decorateDefaultRegion ( region || stsOptions . region ) ,
135
+ region : resolvedRegion ,
98
136
...( requestHandler ? { requestHandler } : { } ) ,
99
137
} ) ;
100
138
}
0 commit comments