Skip to content

Commit d6977c9

Browse files
authored
fix(token-providers): break dependency cycle with sso-oidc (#5049)
1 parent 727ebec commit d6977c9

File tree

12 files changed

+247
-13
lines changed

12 files changed

+247
-13
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
"concurrently": "7.0.0",
8181
"decomment": "0.9.5",
8282
"downlevel-dts": "0.10.1",
83+
"esbuild": "0.18.17",
8384
"eslint": "8.36.0",
8485
"eslint-config-prettier": "8.5.0",
8586
"eslint-plugin-prettier": "4.0.0",

packages/token-providers/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { fromStatic } from "@aws-sdk/token-providers"
1515
const token = { token: "TOKEN" };
1616
const staticTokenProvider = fromStatic(token);
1717

18-
cont staticToken = await staticTokenProvider(); // returns { token: "TOKEN" }
18+
const staticToken = await staticTokenProvider(); // returns { token: "TOKEN" }
1919
```
2020

2121
## SSO Token Provider
@@ -24,7 +24,7 @@ cont staticToken = await staticTokenProvider(); // returns { token: "TOKEN" }
2424
import { fromSso } from "@aws-sdk/token-providers"
2525

2626
// returns token from SSO token cache or ssoOidc.createToken() call.
27-
cont ssoToken = await fromSso();
27+
const ssoToken = await fromSso();
2828
```
2929

3030
## Token Provider Chain
@@ -33,7 +33,7 @@ cont ssoToken = await fromSso();
3333
import { nodeProvider } from "@aws-sdk/token-providers"
3434

3535
// returns token from default providers.
36-
cont token = await nodeProvider();
36+
const token = await nodeProvider();
3737
```
3838

3939
[http-bearer-auth-trait]: https://smithy.io/2.0/spec/authentication-traits.html#smithy-api-httpbearerauth-trait

packages/token-providers/package.json

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
"module": "./dist-es/index.js",
77
"sideEffects": false,
88
"scripts": {
9-
"build": "concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'",
9+
"build:client-dist": "node ./scripts/esbuild",
10+
"build": "yarn build:client-dist && concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'",
1011
"build:cjs": "tsc -p tsconfig.cjs.json",
1112
"build:es": "tsc -p tsconfig.es.json",
1213
"build:include:deps": "lerna run --scope $npm_package_name --include-dependencies build",
@@ -26,7 +27,6 @@
2627
},
2728
"license": "Apache-2.0",
2829
"dependencies": {
29-
"@aws-sdk/client-sso-oidc": "*",
3030
"@aws-sdk/types": "*",
3131
"@smithy/property-provider": "^2.0.0",
3232
"@smithy/shared-ini-file-loader": "^2.0.0",
@@ -56,6 +56,12 @@
5656
"files": [
5757
"dist-*/**"
5858
],
59+
"browser": {
60+
"./dist-es/client-sso-oidc-bundle/dist-node": "./dist-es/client-sso-oidc-bundle/dist-browser"
61+
},
62+
"react-native": {
63+
"./dist-es/client-sso-oidc-bundle/dist-node": "./dist-es/client-sso-oidc-bundle/dist-browser"
64+
},
5965
"homepage": "https://github.com/aws/aws-sdk-js-v3/tree/main/packages/token-providers",
6066
"repository": {
6167
"type": "git",
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import {
2+
AccessDeniedException,
3+
AuthorizationPendingException,
4+
CreateTokenCommand,
5+
ExpiredTokenException,
6+
InternalServerException,
7+
InvalidClientException,
8+
InvalidRequestException,
9+
InvalidScopeException,
10+
SlowDownException,
11+
SSOOIDCClient,
12+
UnauthorizedClientException,
13+
UnsupportedGrantTypeException,
14+
} from "../../../../clients/client-sso-oidc/src/index";
15+
16+
// create a bundled version of a subset of the SSOOIDC client
17+
// to break the cyclical dependency.
18+
19+
export {
20+
AccessDeniedException,
21+
AuthorizationPendingException,
22+
CreateTokenCommand,
23+
ExpiredTokenException,
24+
InternalServerException,
25+
InvalidClientException,
26+
InvalidRequestException,
27+
InvalidScopeException,
28+
SlowDownException,
29+
SSOOIDCClient,
30+
UnauthorizedClientException,
31+
UnsupportedGrantTypeException,
32+
};
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/**
2+
*
3+
* This script builds a minimal bundle of the code
4+
* in SSOOIDCClient and its CreateTokenCommand, with everything else
5+
* left external.
6+
*
7+
* This is to break a cyclical dependency with the credential providers
8+
* and certain services used by those providers.
9+
*
10+
*/
11+
12+
const fs = require("fs");
13+
const path = require("path");
14+
const esbuild = require("esbuild");
15+
16+
const root = path.join(__dirname, "..", "..", "..");
17+
18+
(async () => {
19+
const defaultRuntimeConfigFile = path.join(root, "clients", "client-sso-oidc", "src", "runtimeConfig.ts");
20+
const nodeRuntimeConfig = fs.readFileSync(defaultRuntimeConfigFile);
21+
const browserRuntimeConfig = fs.readFileSync(
22+
path.join(path.dirname(defaultRuntimeConfigFile), "runtimeConfig.browser.ts")
23+
);
24+
25+
for (const platform of ["browser", "node"]) {
26+
if (platform === "browser") {
27+
fs.writeFileSync(defaultRuntimeConfigFile, browserRuntimeConfig);
28+
} else {
29+
fs.writeFileSync(defaultRuntimeConfigFile, nodeRuntimeConfig);
30+
}
31+
32+
const outfile = path.join(
33+
root,
34+
"packages",
35+
"token-providers",
36+
"src",
37+
"client-sso-oidc-bundle",
38+
`dist-${platform}.ts`
39+
);
40+
41+
await esbuild.build({
42+
platform,
43+
bundle: true,
44+
format: "esm",
45+
mainFields: ["module", "main"],
46+
entryPoints: [path.join(root, "packages", "token-providers", "scripts", "api", "source.js")],
47+
outfile: outfile,
48+
external: ["tslib", "@aws-crypto/*", "@smithy/*", "@aws-sdk/middleware-*", "@aws-sdk/types", "@aws-sdk/util-*"],
49+
});
50+
51+
await new Promise((r) => setTimeout(r, 1000));
52+
53+
fs.writeFileSync(outfile, `// @ts-nocheck \n/* eslint-disable */\n` + fs.readFileSync(outfile));
54+
}
55+
56+
fs.writeFileSync(defaultRuntimeConfigFile, nodeRuntimeConfig);
57+
})();

packages/token-providers/src/client-sso-oidc-bundle/.gitkeep

Whitespace-only changes.

packages/token-providers/src/getNewSsoOidcToken.spec.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import { CreateTokenCommand } from "@aws-sdk/client-sso-oidc";
2-
1+
import { CreateTokenCommand } from "./client-sso-oidc-bundle/dist-node";
32
import { getNewSsoOidcToken } from "./getNewSsoOidcToken";
43
import { getSsoOidcClient } from "./getSsoOidcClient";
54

6-
jest.mock("@aws-sdk/client-sso-oidc");
5+
jest.mock("./client-sso-oidc-bundle/dist-node");
76
jest.mock("./getSsoOidcClient");
87

98
describe(getNewSsoOidcToken.name, () => {

packages/token-providers/src/getNewSsoOidcToken.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { CreateTokenCommand } from "@aws-sdk/client-sso-oidc";
21
import { SSOToken } from "@smithy/shared-ini-file-loader";
32

3+
import { CreateTokenCommand } from "./client-sso-oidc-bundle/dist-node";
44
import { getSsoOidcClient } from "./getSsoOidcClient";
55

66
/**

packages/token-providers/src/getSsoOidcClient.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { SSOOIDCClient } from "@aws-sdk/client-sso-oidc";
1+
import { SSOOIDCClient } from "./client-sso-oidc-bundle/dist-node";
22

3-
jest.mock("@aws-sdk/client-sso-oidc");
3+
jest.mock("./client-sso-oidc-bundle/dist-node");
44

55
describe("getSsoOidcClient", () => {
66
const mockSsoRegion = "mockSsoRegion";

packages/token-providers/src/getSsoOidcClient.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { SSOOIDCClient } from "@aws-sdk/client-sso-oidc";
1+
import { SSOOIDCClient } from "./client-sso-oidc-bundle/dist-node";
22

3-
const ssoOidcClientsHash: Record<string, SSOOIDCClient> = {};
3+
const ssoOidcClientsHash: Record<string, typeof SSOOIDCClient | any> = {};
44

55
/**
66
* Returns a SSOOIDC client for the given region. If the client has already been created,

packages/token-providers/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export * from "./client-sso-oidc-bundle/dist-node";
12
export * from "./fromSso";
23
export * from "./fromStatic";
34
export * from "./nodeProvider";

yarn.lock

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -762,6 +762,116 @@
762762
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
763763
integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
764764

765+
"@esbuild/[email protected]":
766+
version "0.18.17"
767+
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz#9e00eb6865ed5f2dbe71a1e96f2c52254cd92903"
768+
integrity sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==
769+
770+
"@esbuild/[email protected]":
771+
version "0.18.17"
772+
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.17.tgz#1aa013b65524f4e9f794946b415b32ae963a4618"
773+
integrity sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==
774+
775+
"@esbuild/[email protected]":
776+
version "0.18.17"
777+
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.17.tgz#c2bd0469b04ded352de011fae34a7a1d4dcecb79"
778+
integrity sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==
779+
780+
"@esbuild/[email protected]":
781+
version "0.18.17"
782+
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz#0c21a59cb5bd7a2cec66c7a42431dca42aefeddd"
783+
integrity sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==
784+
785+
"@esbuild/[email protected]":
786+
version "0.18.17"
787+
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz#92f8763ff6f97dff1c28a584da7b51b585e87a7b"
788+
integrity sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==
789+
790+
"@esbuild/[email protected]":
791+
version "0.18.17"
792+
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz#934f74bdf4022e143ba2f21d421b50fd0fead8f8"
793+
integrity sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==
794+
795+
"@esbuild/[email protected]":
796+
version "0.18.17"
797+
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz#16b6e90ba26ecc865eab71c56696258ec7f5d8bf"
798+
integrity sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==
799+
800+
"@esbuild/[email protected]":
801+
version "0.18.17"
802+
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz#179a58e8d4c72116eb068563629349f8f4b48072"
803+
integrity sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==
804+
805+
"@esbuild/[email protected]":
806+
version "0.18.17"
807+
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz#9d78cf87a310ae9ed985c3915d5126578665c7b5"
808+
integrity sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==
809+
810+
"@esbuild/[email protected]":
811+
version "0.18.17"
812+
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz#6fed202602d37361bca376c9d113266a722a908c"
813+
integrity sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==
814+
815+
"@esbuild/[email protected]":
816+
version "0.18.17"
817+
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz#cdc60304830be1e74560c704bfd72cab8a02fa06"
818+
integrity sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==
819+
820+
"@esbuild/[email protected]":
821+
version "0.18.17"
822+
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz#c367b2855bb0902f5576291a2049812af2088086"
823+
integrity sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==
824+
825+
"@esbuild/[email protected]":
826+
version "0.18.17"
827+
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz#7fdc0083d42d64a4651711ee0a7964f489242f45"
828+
integrity sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==
829+
830+
"@esbuild/[email protected]":
831+
version "0.18.17"
832+
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz#5198a417f3f5b86b10c95647b8bc032e5b6b2b1c"
833+
integrity sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==
834+
835+
"@esbuild/[email protected]":
836+
version "0.18.17"
837+
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz#7459c2fecdee2d582f0697fb76a4041f4ad1dd1e"
838+
integrity sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==
839+
840+
"@esbuild/[email protected]":
841+
version "0.18.17"
842+
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz#948cdbf46d81c81ebd7225a7633009bc56a4488c"
843+
integrity sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==
844+
845+
"@esbuild/[email protected]":
846+
version "0.18.17"
847+
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz#6bb89668c0e093c5a575ded08e1d308bd7fd63e7"
848+
integrity sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==
849+
850+
"@esbuild/[email protected]":
851+
version "0.18.17"
852+
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz#abac2ae75fef820ef6c2c48da4666d092584c79d"
853+
integrity sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==
854+
855+
"@esbuild/[email protected]":
856+
version "0.18.17"
857+
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz#74a45fe1db8ea96898f1a9bb401dcf1dadfc8371"
858+
integrity sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==
859+
860+
"@esbuild/[email protected]":
861+
version "0.18.17"
862+
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz#fd95ffd217995589058a4ed8ac17ee72a3d7f615"
863+
integrity sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==
864+
865+
"@esbuild/[email protected]":
866+
version "0.18.17"
867+
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz#9b7ef5d0df97593a80f946b482e34fcba3fa4aaf"
868+
integrity sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==
869+
870+
"@esbuild/[email protected]":
871+
version "0.18.17"
872+
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz#bcb2e042631b3c15792058e189ed879a22b2968b"
873+
integrity sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==
874+
765875
"@eslint-community/eslint-utils@^4.2.0":
766876
version "4.4.0"
767877
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
@@ -5709,6 +5819,34 @@ es6-symbol@^3.1.1, es6-symbol@^3.1.3:
57095819
d "^1.0.1"
57105820
ext "^1.1.2"
57115821

5822+
5823+
version "0.18.17"
5824+
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.17.tgz#2aaf6bc6759b0c605777fdc435fea3969e091cad"
5825+
integrity sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==
5826+
optionalDependencies:
5827+
"@esbuild/android-arm" "0.18.17"
5828+
"@esbuild/android-arm64" "0.18.17"
5829+
"@esbuild/android-x64" "0.18.17"
5830+
"@esbuild/darwin-arm64" "0.18.17"
5831+
"@esbuild/darwin-x64" "0.18.17"
5832+
"@esbuild/freebsd-arm64" "0.18.17"
5833+
"@esbuild/freebsd-x64" "0.18.17"
5834+
"@esbuild/linux-arm" "0.18.17"
5835+
"@esbuild/linux-arm64" "0.18.17"
5836+
"@esbuild/linux-ia32" "0.18.17"
5837+
"@esbuild/linux-loong64" "0.18.17"
5838+
"@esbuild/linux-mips64el" "0.18.17"
5839+
"@esbuild/linux-ppc64" "0.18.17"
5840+
"@esbuild/linux-riscv64" "0.18.17"
5841+
"@esbuild/linux-s390x" "0.18.17"
5842+
"@esbuild/linux-x64" "0.18.17"
5843+
"@esbuild/netbsd-x64" "0.18.17"
5844+
"@esbuild/openbsd-x64" "0.18.17"
5845+
"@esbuild/sunos-x64" "0.18.17"
5846+
"@esbuild/win32-arm64" "0.18.17"
5847+
"@esbuild/win32-ia32" "0.18.17"
5848+
"@esbuild/win32-x64" "0.18.17"
5849+
57125850
escalade@^3.1.1:
57135851
version "3.1.1"
57145852
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"

0 commit comments

Comments
 (0)