From 1cc4de91fb080b32d58c5b45e0debac42a45f99e Mon Sep 17 00:00:00 2001
From: isaiahshall <95551503+isaiahshall@users.noreply.github.com>
Date: Wed, 26 Jun 2024 16:10:57 -0400
Subject: [PATCH] chore(client-sso-oidc): move sts to peer (#6224)

---
 clients/client-sso-oidc/package.json               |  4 +++-
 .../codegen/AwsCredentialProviderUtils.java        | 14 +++++++++++---
 .../aws/typescript/codegen/AwsDependency.java      |  1 +
 3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/clients/client-sso-oidc/package.json b/clients/client-sso-oidc/package.json
index 6ce510d5e2ad..dd3431f462b5 100644
--- a/clients/client-sso-oidc/package.json
+++ b/clients/client-sso-oidc/package.json
@@ -20,7 +20,6 @@
   "dependencies": {
     "@aws-crypto/sha256-browser": "5.2.0",
     "@aws-crypto/sha256-js": "5.2.0",
-    "@aws-sdk/client-sts": "*",
     "@aws-sdk/core": "*",
     "@aws-sdk/credential-provider-node": "*",
     "@aws-sdk/middleware-host-header": "*",
@@ -59,6 +58,9 @@
     "@smithy/util-utf8": "^3.0.0",
     "tslib": "^2.6.2"
   },
+  "peerDependencies": {
+    "@aws-sdk/client-sts": "*"
+  },
   "devDependencies": {
     "@tsconfig/node16": "16.1.3",
     "@types/node": "^16.18.96",
diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsCredentialProviderUtils.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsCredentialProviderUtils.java
index ad61be8e2c6d..6cc6c87d87bb 100644
--- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsCredentialProviderUtils.java
+++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsCredentialProviderUtils.java
@@ -33,13 +33,21 @@ private AwsCredentialProviderUtils() {}
      * The dependencies are skipped in first party credential providers to avoid circular dependency issue.
      */
     public static void addAwsCredentialProviderDependencies(ServiceShape service, TypeScriptWriter writer) {
-        if (!service.getId().equals(ShapeId.from("com.amazonaws.ssooidc#AWSSSOOIDCService"))) {
+        boolean isStsClient =
+                service.getId().equals(ShapeId.from("com.amazonaws.sts#AWSSecurityTokenServiceV20110615"));
+        boolean isSsoOidcClient = service.getId().equals(ShapeId.from("com.amazonaws.ssooidc#AWSSSOOIDCService"));
+        if (!isSsoOidcClient) {
             // SSO OIDC client is required in Sso credential provider
             writer.addDependency(AwsDependency.SSO_OIDC_CLIENT);
         }
-        if (!service.getId().equals(ShapeId.from("com.amazonaws.sts#AWSSecurityTokenServiceV20110615"))) {
+        if (!isStsClient) {
             // STS client is required in Ini and WebIdentity credential providers
-            writer.addDependency(AwsDependency.STS_CLIENT);
+            if (isSsoOidcClient) {
+                // For the SSO OIDC client, adding the STS client as a peerDependency avoids circular dependency issues.
+                writer.addDependency(AwsDependency.STS_CLIENT_PEER);
+            } else {
+                writer.addDependency(AwsDependency.STS_CLIENT);
+            }
         }
     }
 }
diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java
index c9c8bd32ed80..a4a58fe8ec13 100644
--- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java
+++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java
@@ -67,6 +67,7 @@ public enum AwsDependency implements Dependency {
     TRANSCRIBE_STREAMING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-transcribe-streaming"),
     STS_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/middleware-sdk-sts"),
     STS_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sts"),
+    STS_CLIENT_PEER(PEER_DEPENDENCY, "@aws-sdk/client-sts"),
     SSO_OIDC_CLIENT(NORMAL_DEPENDENCY, "@aws-sdk/client-sso-oidc"),
     MIDDLEWARE_LOGGER(NORMAL_DEPENDENCY, "@aws-sdk/middleware-logger"),
     MIDDLEWARE_USER_AGENT("dependencies", "@aws-sdk/middleware-user-agent"),