11import { STS } from "@aws-sdk/client-sts" ;
22import * as credentialProviderHttp from "@aws-sdk/credential-provider-http" ;
3+ import { fromIni } from "@aws-sdk/credential-providers" ;
34import { HttpResponse } from "@smithy/protocol-http" ;
45import type { SourceProfileInit } from "@smithy/shared-ini-file-loader" ;
56import type { HttpRequest , NodeHttpHandlerOptions , ParsedIniData } from "@smithy/types" ;
@@ -67,6 +68,8 @@ jest.mock("@smithy/node-http-handler", () => {
6768 assumeRoleArns . push ( request . body . match ( / R o l e A r n = ( .* ?) & / ) ?. [ 1 ] ) ;
6869 }
6970
71+ const region = ( request . hostname . match ( / s t s \. ( .* ?) \. / ) || [ , "unknown" ] ) [ 1 ] ;
72+
7073 if ( request . headers . Authorization === "container-authorization" ) {
7174 body . write (
7275 JSON . stringify ( {
@@ -94,7 +97,7 @@ jest.mock("@smithy/node-http-handler", () => {
9497 <Credentials>
9598 <AccessKeyId>STS_ARWI_ACCESS_KEY_ID</AccessKeyId>
9699 <SecretAccessKey>STS_ARWI_SECRET_ACCESS_KEY</SecretAccessKey>
97- <SessionToken>STS_ARWI_SESSION_TOKEN </SessionToken>
100+ <SessionToken>STS_ARWI_SESSION_TOKEN_ ${ region } </SessionToken>
98101 <Expiration>3000-01-01T00:00:00.000Z</Expiration>
99102 </Credentials>
100103</AssumeRoleWithWebIdentityResult>
@@ -109,7 +112,7 @@ jest.mock("@smithy/node-http-handler", () => {
109112 <Credentials>
110113 <AccessKeyId>STS_AR_ACCESS_KEY_ID</AccessKeyId>
111114 <SecretAccessKey>STS_AR_SECRET_ACCESS_KEY</SecretAccessKey>
112- <SessionToken>STS_AR_SESSION_TOKEN </SessionToken>
115+ <SessionToken>STS_AR_SESSION_TOKEN_ ${ region } </SessionToken>
113116 <Expiration>3000-01-01T00:00:00.000Z</Expiration>
114117 </Credentials>
115118</AssumeRoleResult>
@@ -379,7 +382,7 @@ describe("credential-provider-node integration test", () => {
379382 expect ( credentials ) . toEqual ( {
380383 accessKeyId : "STS_AR_ACCESS_KEY_ID" ,
381384 secretAccessKey : "STS_AR_SECRET_ACCESS_KEY" ,
382- sessionToken : "STS_AR_SESSION_TOKEN " ,
385+ sessionToken : "STS_AR_SESSION_TOKEN_us-west-2 " ,
383386 expiration : new Date ( "3000-01-01T00:00:00.000Z" ) ,
384387 $source : {
385388 CREDENTIALS_PROFILE_SOURCE_PROFILE : "o" ,
@@ -409,7 +412,7 @@ describe("credential-provider-node integration test", () => {
409412 expect ( credentials ) . toEqual ( {
410413 accessKeyId : "STS_AR_ACCESS_KEY_ID" ,
411414 secretAccessKey : "STS_AR_SECRET_ACCESS_KEY" ,
412- sessionToken : "STS_AR_SESSION_TOKEN " ,
415+ sessionToken : "STS_AR_SESSION_TOKEN_eu-west-1 " ,
413416 expiration : new Date ( "3000-01-01T00:00:00.000Z" ) ,
414417 $source : {
415418 CREDENTIALS_PROFILE_SOURCE_PROFILE : "o" ,
@@ -439,9 +442,41 @@ describe("credential-provider-node integration test", () => {
439442 expect ( credentials ) . toEqual ( {
440443 accessKeyId : "STS_AR_ACCESS_KEY_ID" ,
441444 secretAccessKey : "STS_AR_SECRET_ACCESS_KEY" ,
442- sessionToken : "STS_AR_SESSION_TOKEN" ,
445+ sessionToken : "STS_AR_SESSION_TOKEN_us-gov-stsar-1" ,
446+ expiration : new Date ( "3000-01-01T00:00:00.000Z" ) ,
447+ $source : {
448+ CREDENTIALS_PROFILE_SOURCE_PROFILE : "o" ,
449+ CREDENTIALS_STS_ASSUME_ROLE : "i" ,
450+ } ,
451+ } ) ;
452+ } ) ;
453+
454+ it ( "should use the context client's region for STS even if initialized separately in a code-level provider" , async ( ) => {
455+ sts = new STS ( {
456+ region : "eu-west-1" ,
457+ credentials : fromIni ( ) ,
458+ } ) ;
459+ iniProfileData . assume = {
460+ region : "eu-west-1" ,
461+ aws_access_key_id : "ASSUME_STATIC_ACCESS_KEY" ,
462+ aws_secret_access_key : "ASSUME_STATIC_SECRET_KEY" ,
463+ } ;
464+ Object . assign ( iniProfileData . default , {
465+ region : "eu-west-1" ,
466+ role_arn : "ROLE_ARN" ,
467+ role_session_name : "ROLE_SESSION_NAME" ,
468+ external_id : "EXTERNAL_ID" ,
469+ source_profile : "assume" ,
470+ } ) ;
471+ await sts . getCallerIdentity ( { } ) ;
472+ const credentials = await sts . config . credentials ( ) ;
473+ expect ( credentials ) . toEqual ( {
474+ accessKeyId : "STS_AR_ACCESS_KEY_ID" ,
475+ secretAccessKey : "STS_AR_SECRET_ACCESS_KEY" ,
476+ sessionToken : "STS_AR_SESSION_TOKEN_eu-west-1" ,
443477 expiration : new Date ( "3000-01-01T00:00:00.000Z" ) ,
444478 $source : {
479+ CREDENTIALS_CODE : "e" ,
445480 CREDENTIALS_PROFILE_SOURCE_PROFILE : "o" ,
446481 CREDENTIALS_STS_ASSUME_ROLE : "i" ,
447482 } ,
@@ -458,7 +493,7 @@ describe("credential-provider-node integration test", () => {
458493 expect ( credentials ) . toEqual ( {
459494 accessKeyId : "STS_ARWI_ACCESS_KEY_ID" ,
460495 secretAccessKey : "STS_ARWI_SECRET_ACCESS_KEY" ,
461- sessionToken : "STS_ARWI_SESSION_TOKEN " ,
496+ sessionToken : "STS_ARWI_SESSION_TOKEN_us-west-2 " ,
462497 expiration : new Date ( "3000-01-01T00:00:00.000Z" ) ,
463498 $source : {
464499 CREDENTIALS_PROFILE_STS_WEB_ID_TOKEN : "q" ,
@@ -484,7 +519,7 @@ describe("credential-provider-node integration test", () => {
484519 expect ( credentials ) . toEqual ( {
485520 accessKeyId : "STS_ARWI_ACCESS_KEY_ID" ,
486521 secretAccessKey : "STS_ARWI_SECRET_ACCESS_KEY" ,
487- sessionToken : "STS_ARWI_SESSION_TOKEN " ,
522+ sessionToken : "STS_ARWI_SESSION_TOKEN_us-gov-sts-1 " ,
488523 expiration : new Date ( "3000-01-01T00:00:00.000Z" ) ,
489524 $source : {
490525 CREDENTIALS_PROFILE_STS_WEB_ID_TOKEN : "q" ,
@@ -562,7 +597,7 @@ describe("credential-provider-node integration test", () => {
562597 expect ( credentials ) . toEqual ( {
563598 accessKeyId : "STS_AR_ACCESS_KEY_ID" ,
564599 secretAccessKey : "STS_AR_SECRET_ACCESS_KEY" ,
565- sessionToken : "STS_AR_SESSION_TOKEN " ,
600+ sessionToken : "STS_AR_SESSION_TOKEN_us-west-2 " ,
566601 expiration : new Date ( "3000-01-01T00:00:00.000Z" ) ,
567602 $source : {
568603 CREDENTIALS_CODE : "e" ,
@@ -605,7 +640,7 @@ describe("credential-provider-node integration test", () => {
605640 expect ( credentials ) . toEqual ( {
606641 accessKeyId : "STS_AR_ACCESS_KEY_ID" ,
607642 secretAccessKey : "STS_AR_SECRET_ACCESS_KEY" ,
608- sessionToken : "STS_AR_SESSION_TOKEN " ,
643+ sessionToken : "STS_AR_SESSION_TOKEN_us-west-2 " ,
609644 expiration : new Date ( "3000-01-01T00:00:00.000Z" ) ,
610645 $source : {
611646 CREDENTIALS_CODE : "e" ,
@@ -650,7 +685,7 @@ describe("credential-provider-node integration test", () => {
650685 expect ( credentials ) . toEqual ( {
651686 accessKeyId : "STS_AR_ACCESS_KEY_ID" ,
652687 secretAccessKey : "STS_AR_SECRET_ACCESS_KEY" ,
653- sessionToken : "STS_AR_SESSION_TOKEN " ,
688+ sessionToken : "STS_AR_SESSION_TOKEN_us-west-2 " ,
654689 expiration : new Date ( "3000-01-01T00:00:00.000Z" ) ,
655690 $source : {
656691 CREDENTIALS_CODE : "e" ,
@@ -702,7 +737,7 @@ describe("credential-provider-node integration test", () => {
702737 expect ( credentials ) . toEqual ( {
703738 accessKeyId : "STS_AR_ACCESS_KEY_ID" ,
704739 secretAccessKey : "STS_AR_SECRET_ACCESS_KEY" ,
705- sessionToken : "STS_AR_SESSION_TOKEN " ,
740+ sessionToken : "STS_AR_SESSION_TOKEN_us-west-2 " ,
706741 expiration : new Date ( "3000-01-01T00:00:00.000Z" ) ,
707742 $source : {
708743 CREDENTIALS_CODE : "e" ,
@@ -753,7 +788,7 @@ describe("credential-provider-node integration test", () => {
753788 expect ( credentials ) . toEqual ( {
754789 accessKeyId : "STS_ARWI_ACCESS_KEY_ID" ,
755790 secretAccessKey : "STS_ARWI_SECRET_ACCESS_KEY" ,
756- sessionToken : "STS_ARWI_SESSION_TOKEN " ,
791+ sessionToken : "STS_ARWI_SESSION_TOKEN_us-west-2 " ,
757792 expiration : new Date ( "3000-01-01T00:00:00.000Z" ) ,
758793 $source : {
759794 CREDENTIALS_ENV_VARS_STS_WEB_ID_TOKEN : "h" ,
0 commit comments