Skip to content

Commit c8e0047

Browse files
authored
fix(client-sts): pass parent logger & requestHandler to STS (#5801)
1 parent 1cbf57b commit c8e0047

File tree

5 files changed

+94
-15
lines changed

5 files changed

+94
-15
lines changed

clients/client-sts/src/defaultStsRoleAssumers.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// Please do not touch this file. It's generated from template in:
33
// 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
44
import type { CredentialProviderOptions } from "@aws-sdk/types";
5-
import { partition } from "@aws-sdk/util-endpoints";
65
import { AwsCredentialIdentity, Logger, Provider } from "@smithy/types";
76

87
import { AssumeRoleCommand, AssumeRoleCommandInput } from "./commands/AssumeRoleCommand";
@@ -66,18 +65,23 @@ export const getDefaultRoleAssumer = (
6665
return async (sourceCreds, params) => {
6766
closureSourceCreds = sourceCreds;
6867
if (!stsClient) {
69-
const { logger, region, requestHandler, credentialProviderLogger } = stsOptions;
68+
const {
69+
logger = stsOptions?.parentClientConfig?.logger,
70+
region,
71+
requestHandler = stsOptions?.parentClientConfig?.requestHandler,
72+
credentialProviderLogger,
73+
} = stsOptions;
7074
const resolvedRegion = await resolveRegion(
7175
region,
7276
stsOptions?.parentClientConfig?.region,
7377
credentialProviderLogger
7478
);
7579
stsClient = new stsClientCtor({
76-
logger,
7780
// A hack to make sts client uses the credential in current closure.
7881
credentialDefaultProvider: () => async () => closureSourceCreds,
7982
region: resolvedRegion,
80-
...(requestHandler ? { requestHandler } : {}),
83+
requestHandler: requestHandler as any,
84+
logger: logger as any,
8185
});
8286
}
8387
const { Credentials } = await stsClient.send(new AssumeRoleCommand(params));
@@ -113,16 +117,21 @@ export const getDefaultRoleAssumerWithWebIdentity = (
113117
let stsClient: STSClient;
114118
return async (params) => {
115119
if (!stsClient) {
116-
const { logger, region, requestHandler, credentialProviderLogger } = stsOptions;
120+
const {
121+
logger = stsOptions?.parentClientConfig?.logger,
122+
region,
123+
requestHandler = stsOptions?.parentClientConfig?.requestHandler,
124+
credentialProviderLogger,
125+
} = stsOptions;
117126
const resolvedRegion = await resolveRegion(
118127
region,
119128
stsOptions?.parentClientConfig?.region,
120129
credentialProviderLogger
121130
);
122131
stsClient = new stsClientCtor({
123-
logger,
124132
region: resolvedRegion,
125-
...(requestHandler ? { requestHandler } : {}),
133+
requestHandler: requestHandler as any,
134+
logger: logger as any,
126135
});
127136
}
128137
const { Credentials } = await stsClient.send(new AssumeRoleWithWebIdentityCommand(params));

clients/client-sts/test/defaultRoleAssumers.spec.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,36 @@ describe("getDefaultRoleAssumer", () => {
8888
region,
8989
logger,
9090
requestHandler: handler,
91+
parentClientConfig: {
92+
region: "some-other-region",
93+
logger: null,
94+
requestHandler: null,
95+
},
96+
});
97+
const params: AssumeRoleCommandInput = {
98+
RoleArn: "arn:aws:foo",
99+
RoleSessionName: "session",
100+
};
101+
const sourceCred = { accessKeyId: "key", secretAccessKey: "secrete" };
102+
await roleAssumer(sourceCred, params);
103+
expect(mockConstructorInput).toHaveBeenCalledTimes(1);
104+
expect(mockConstructorInput.mock.calls[0][0]).toMatchObject({
105+
logger,
106+
requestHandler: handler,
107+
region,
108+
});
109+
});
110+
111+
it("should use the parent client config", async () => {
112+
const logger = console;
113+
const region = "some-region";
114+
const handler = new NodeHttpHandler();
115+
const roleAssumer = getDefaultRoleAssumer({
116+
parentClientConfig: {
117+
region,
118+
logger,
119+
requestHandler: handler,
120+
},
91121
});
92122
const params: AssumeRoleCommandInput = {
93123
RoleArn: "arn:aws:foo",

codegen/smithy-aws-typescript-codegen/src/main/resources/software/amazon/smithy/aws/typescript/codegen/sts-client-defaultRoleAssumers.spec.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,36 @@ describe("getDefaultRoleAssumer", () => {
8686
region,
8787
logger,
8888
requestHandler: handler,
89+
parentClientConfig: {
90+
region: "some-other-region",
91+
logger: null,
92+
requestHandler: null,
93+
},
94+
});
95+
const params: AssumeRoleCommandInput = {
96+
RoleArn: "arn:aws:foo",
97+
RoleSessionName: "session",
98+
};
99+
const sourceCred = { accessKeyId: "key", secretAccessKey: "secrete" };
100+
await roleAssumer(sourceCred, params);
101+
expect(mockConstructorInput).toHaveBeenCalledTimes(1);
102+
expect(mockConstructorInput.mock.calls[0][0]).toMatchObject({
103+
logger,
104+
requestHandler: handler,
105+
region,
106+
});
107+
});
108+
109+
it("should use the parent client config", async () => {
110+
const logger = console;
111+
const region = "some-region";
112+
const handler = new NodeHttpHandler();
113+
const roleAssumer = getDefaultRoleAssumer({
114+
parentClientConfig: {
115+
region,
116+
logger,
117+
requestHandler: handler,
118+
},
89119
});
90120
const params: AssumeRoleCommandInput = {
91121
RoleArn: "arn:aws:foo",

codegen/smithy-aws-typescript-codegen/src/main/resources/software/amazon/smithy/aws/typescript/codegen/sts-client-defaultStsRoleAssumers.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import type { CredentialProviderOptions } from "@aws-sdk/types";
2-
import { partition } from "@aws-sdk/util-endpoints";
32
import { AwsCredentialIdentity, Logger, Provider } from "@smithy/types";
43

54
import { AssumeRoleCommand, AssumeRoleCommandInput } from "./commands/AssumeRoleCommand";
@@ -63,18 +62,23 @@ export const getDefaultRoleAssumer = (
6362
return async (sourceCreds, params) => {
6463
closureSourceCreds = sourceCreds;
6564
if (!stsClient) {
66-
const { logger, region, requestHandler, credentialProviderLogger } = stsOptions;
65+
const {
66+
logger = stsOptions?.parentClientConfig?.logger,
67+
region,
68+
requestHandler = stsOptions?.parentClientConfig?.requestHandler,
69+
credentialProviderLogger,
70+
} = stsOptions;
6771
const resolvedRegion = await resolveRegion(
6872
region,
6973
stsOptions?.parentClientConfig?.region,
7074
credentialProviderLogger
7175
);
7276
stsClient = new stsClientCtor({
73-
logger,
7477
// A hack to make sts client uses the credential in current closure.
7578
credentialDefaultProvider: () => async () => closureSourceCreds,
7679
region: resolvedRegion,
77-
...(requestHandler ? { requestHandler } : {}),
80+
requestHandler: requestHandler as any,
81+
logger: logger as any,
7882
});
7983
}
8084
const { Credentials } = await stsClient.send(new AssumeRoleCommand(params));
@@ -110,16 +114,21 @@ export const getDefaultRoleAssumerWithWebIdentity = (
110114
let stsClient: STSClient;
111115
return async (params) => {
112116
if (!stsClient) {
113-
const { logger, region, requestHandler, credentialProviderLogger } = stsOptions;
117+
const {
118+
logger = stsOptions?.parentClientConfig?.logger,
119+
region,
120+
requestHandler = stsOptions?.parentClientConfig?.requestHandler,
121+
credentialProviderLogger,
122+
} = stsOptions;
114123
const resolvedRegion = await resolveRegion(
115124
region,
116125
stsOptions?.parentClientConfig?.region,
117126
credentialProviderLogger
118127
);
119128
stsClient = new stsClientCtor({
120-
logger,
121129
region: resolvedRegion,
122-
...(requestHandler ? { requestHandler } : {}),
130+
requestHandler: requestHandler as any,
131+
logger: logger as any,
123132
});
124133
}
125134
const { Credentials } = await stsClient.send(new AssumeRoleWithWebIdentityCommand(params));

packages/types/src/credentials.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Logger } from "@smithy/types";
1+
import { Logger, RequestHandler } from "@smithy/types";
22

33
import { AwsCredentialIdentity } from "./identity";
44
import { Provider } from "./util";
@@ -48,5 +48,6 @@ export type CredentialProviderOptions = {
4848
*/
4949
parentClientConfig?: {
5050
region?: string | Provider<string>;
51+
[key: string]: unknown;
5152
};
5253
};

0 commit comments

Comments
 (0)