Skip to content

Commit 45d18b8

Browse files
committed
chore(nested-clients): break cycle
1 parent 516d778 commit 45d18b8

File tree

10 files changed

+39
-13
lines changed

10 files changed

+39
-13
lines changed

eslint.config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module.exports = [
2+
{
3+
ignores: ["./packages/nested-clients/**/protocols/**"],
4+
},
5+
];

packages/credential-provider-ini/src/resolveAssumeRoleCredentials.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@ export const resolveAssumeRoleCredentials = async (
111111
const { source_profile, region } = profileData;
112112

113113
if (!options.roleAssumer) {
114-
// @ts-ignore Cannot find module '@aws-sdk/client-sts'
115114
const { getDefaultRoleAssumer } = await import("@aws-sdk/nested-clients");
116115
options.roleAssumer = getDefaultRoleAssumer(
117116
{

packages/credential-provider-web-identity/src/fromWebToken.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,6 @@ export const fromWebToken =
163163
let { roleAssumerWithWebIdentity } = init;
164164

165165
if (!roleAssumerWithWebIdentity) {
166-
// @ts-ignore Cannot find module '@aws-sdk/client-sts'
167166
const { getDefaultRoleAssumerWithWebIdentity } = await import("@aws-sdk/nested-clients");
168167
roleAssumerWithWebIdentity = getDefaultRoleAssumerWithWebIdentity(
169168
{

packages/nested-clients/package.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@
2828
"dependencies": {
2929
"@aws-crypto/sha256-browser": "5.2.0",
3030
"@aws-crypto/sha256-js": "5.2.0",
31-
"@aws-sdk/client-sso-oidc": "*",
3231
"@aws-sdk/core": "*",
33-
"@aws-sdk/credential-provider-node": "*",
3432
"@aws-sdk/middleware-host-header": "*",
3533
"@aws-sdk/middleware-logger": "*",
3634
"@aws-sdk/middleware-recursion-detection": "*",

packages/nested-clients/src/nested-sts/models/models_0.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ export interface AssumeRoleRequest {
303303
* <i>IAM User Guide</i>.</p>
304304
* <p>The regex used to validate this parameter is a string of characters consisting of upper-
305305
* and lower-case alphanumeric characters with no spaces. You can also include underscores or
306-
* any of the following characters: =,.@-. You cannot use a value that begins with the text
306+
* any of the following characters: +=,.@-. You cannot use a value that begins with the text
307307
* <code>aws:</code>. This prefix is reserved for Amazon Web Services internal use.</p>
308308
* @public
309309
*/
@@ -605,8 +605,8 @@ export interface AssumeRoleWithWebIdentityRequest {
605605
* provider. Your application must get this token by authenticating the user who is using your
606606
* application with a web identity provider before the application makes an
607607
* <code>AssumeRoleWithWebIdentity</code> call. Timestamps in the token must be formatted
608-
* as either an integer or a long integer. Only tokens with RSA algorithms (RS256) are
609-
* supported.</p>
608+
* as either an integer or a long integer. Tokens must be signed using either RSA keys (RS256,
609+
* RS384, or RS512) or ECDSA keys (ES256, ES384, or ES512).</p>
610610
* @public
611611
*/
612612
WebIdentityToken: string | undefined;

packages/nested-clients/src/nested-sts/runtimeConfig.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import packageInfo from "../../package.json"; // eslint-disable-line
44

55
import { AwsSdkSigV4Signer, emitWarningIfUnsupportedVersion as awsCheckVersion } from "@aws-sdk/core";
6-
import { defaultProvider as credentialDefaultProvider } from "@aws-sdk/credential-provider-node";
6+
77
import { NODE_APP_ID_CONFIG_OPTIONS, createDefaultUserAgentProvider } from "@aws-sdk/util-user-agent-node";
88
import {
99
NODE_REGION_CONFIG_FILE_OPTIONS,
@@ -41,7 +41,7 @@ export const getRuntimeConfig = (config: STSClientConfig) => {
4141
runtime: "node",
4242
defaultsMode,
4343
bodyLengthChecker: config?.bodyLengthChecker ?? calculateBodyLength,
44-
credentialDefaultProvider: config?.credentialDefaultProvider ?? credentialDefaultProvider,
44+
4545
defaultUserAgentProvider:
4646
config?.defaultUserAgentProvider ??
4747
createDefaultUserAgentProvider({ serviceId: clientSharedValues.serviceId, clientVersion: packageInfo.version }),
@@ -50,7 +50,7 @@ export const getRuntimeConfig = (config: STSClientConfig) => {
5050
schemeId: "aws.auth#sigv4",
5151
identityProvider: (ipc: IdentityProviderConfig) =>
5252
ipc.getIdentityProvider("aws.auth#sigv4") ||
53-
(async (idProps) => await credentialDefaultProvider(idProps?.__config || {})()),
53+
(async (idProps) => await config!.credentialDefaultProvider!(idProps?.__config || {})()),
5454
signer: new AwsSdkSigV4Signer(),
5555
},
5656
{

packages/token-providers/src/getNewSsoOidcToken.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { getSsoOidcClient } from "./getSsoOidcClient";
88
* @internal
99
*/
1010
export const getNewSsoOidcToken = async (ssoToken: SSOToken, ssoRegion: string, init: FromSsoInit = {}) => {
11-
// @ts-ignore Cannot find module '@aws-sdk/client-sso-oidc'
1211
const { CreateTokenCommand } = await import("@aws-sdk/nested-clients");
1312

1413
const ssoOidcClient = await getSsoOidcClient(ssoRegion, init);

packages/token-providers/src/getSsoOidcClient.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { FromSsoInit } from "./fromSso";
55
* @internal
66
*/
77
export const getSsoOidcClient = async (ssoRegion: string, init: FromSsoInit = {}) => {
8-
// @ts-ignore Cannot find module '@aws-sdk/client-sso-oidc'
98
const { SSOOIDCClient } = await import("@aws-sdk/nested-clients");
109

1110
const ssoOidcClient = new SSOOIDCClient(

scripts/generate-clients/index.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const { emptyDirSync, rmdirSync } = require("fs-extra");
55
const { generateClients, generateGenericClient, generateProtocolTests } = require("./code-gen");
66
const { codeOrdering } = require("./code-ordering");
77
const { copyToClients, copyServerTests } = require("./copy-to-clients");
8+
const generateNestedClients = require("./nested-clients/generate-nested-clients");
89
const {
910
CODE_GEN_SDK_OUTPUT_DIR,
1011
CODE_GEN_GENERIC_CLIENT_OUTPUT_DIR,
@@ -99,6 +100,7 @@ const {
99100

100101
if (!protocolTestsOnly) {
101102
await generateClients(models || globs || DEFAULT_CODE_GEN_INPUT_DIR, batchSize);
103+
await generateNestedClients();
102104
}
103105

104106
if (!noPrivateClients) {
@@ -142,7 +144,11 @@ const {
142144
}
143145

144146
require("./customizations/workspaces-thin-client")();
145-
await spawnProcess("yarn", ["install", "--no-immutable"], { cwd: REPO_ROOT, stdio: "inherit", env: { ...process.env, CI: "" } });
147+
await spawnProcess("yarn", ["install", "--no-immutable"], {
148+
cwd: REPO_ROOT,
149+
stdio: "inherit",
150+
env: { ...process.env, CI: "" },
151+
});
146152
require("../runtime-dependency-version-check/runtime-dep-version-check");
147153
} catch (e) {
148154
console.log(e);

scripts/generate-clients/nested-clients/generate-nested-clients.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ async function generateNestedClients() {
6868

6969
replacePackageJsonImport(join(destinationFolder, "runtimeConfig.browser.ts"));
7070
replacePackageJsonImport(join(destinationFolder, "runtimeConfig.ts"));
71+
72+
replaceCredentialDefaultProvider(join(destinationFolder, "runtimeConfig.browser.ts"));
73+
replaceCredentialDefaultProvider(join(destinationFolder, "runtimeConfig.ts"));
7174
}
7275
}
7376

@@ -113,6 +116,9 @@ async function generateNestedClient(clientName, operations) {
113116
rmSync(join(__dirname, "..", "..", "..", "codegen", "sdk-codegen", `smithy-build-${clientName}.json`));
114117
}
115118

119+
/**
120+
* Fix package json import filesystem level.
121+
*/
116122
function replacePackageJsonImport(file) {
117123
writeFileSync(
118124
file,
@@ -123,6 +129,21 @@ function replacePackageJsonImport(file) {
123129
);
124130
}
125131

132+
/**
133+
* Breaks the circular dependency of STS and the default credential chain.
134+
* STS has an auth operation but the portion of it used for credential resolution does
135+
* not need the default chain.
136+
*/
137+
function replaceCredentialDefaultProvider(file) {
138+
writeFileSync(
139+
file,
140+
readFileSync(file, "utf-8")
141+
.replace(`import { defaultProvider as credentialDefaultProvider } from "@aws-sdk/credential-provider-node";`, ``)
142+
.replace(`credentialDefaultProvider: config?.credentialDefaultProvider ?? credentialDefaultProvider,`, ``)
143+
.replace(`await credentialDefaultProvider(`, `await config!.credentialDefaultProvider!(`)
144+
);
145+
}
146+
126147
if (process.argv.includes("--exec")) {
127148
generateNestedClients().catch(console.error);
128149
}

0 commit comments

Comments
 (0)