From 3a82d4c72a5417dd35f463c6f25fbd8171efe551 Mon Sep 17 00:00:00 2001 From: George Fu Date: Thu, 29 Feb 2024 21:53:11 +0000 Subject: [PATCH 1/2] feat(credential-providers): allow usage of fromEnv in browser --- packages/credential-providers/README.md | 3 ++- packages/credential-providers/src/fromEnv.ts | 3 +++ packages/credential-providers/src/index.browser.ts | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/credential-providers/README.md b/packages/credential-providers/README.md index c098379a6029b..461bacbf557bc 100644 --- a/packages/credential-providers/README.md +++ b/packages/credential-providers/README.md @@ -505,7 +505,8 @@ See [`fromSSO()`](#fromsso) fro more information ## `fromEnv()` -- Not available in browser & native apps +- Not available in browser & native apps unless your code or bundler populates the + `process.env` global object. ```javascript import { fromEnv } from "@aws-sdk/credential-providers"; // ES6 import diff --git a/packages/credential-providers/src/fromEnv.ts b/packages/credential-providers/src/fromEnv.ts index 2d939ba609ccf..412aa6015b4eb 100644 --- a/packages/credential-providers/src/fromEnv.ts +++ b/packages/credential-providers/src/fromEnv.ts @@ -24,5 +24,8 @@ import { AwsCredentialIdentityProvider } from "@smithy/types"; * credentials: fromEnv(), * }); * ``` + * + * To use this in non-Node.js environments such as a browser, your code or + * build system must populate the `process.env` global object. */ export const fromEnv = (init?: FromEnvInit): AwsCredentialIdentityProvider => _fromEnv(init); diff --git a/packages/credential-providers/src/index.browser.ts b/packages/credential-providers/src/index.browser.ts index 07d0adff00fb5..e25288f915695 100644 --- a/packages/credential-providers/src/index.browser.ts +++ b/packages/credential-providers/src/index.browser.ts @@ -2,5 +2,6 @@ export * from "./fromCognitoIdentity"; export * from "./fromCognitoIdentityPool"; export { fromHttp } from "@aws-sdk/credential-provider-http"; export type { FromHttpOptions, HttpProviderCredentials } from "@aws-sdk/credential-provider-http"; +export * from "./fromEnv"; export * from "./fromTemporaryCredentials"; export * from "./fromWebToken"; From 0de968e33cb50d5dd0f87529b675d7d081fff564 Mon Sep 17 00:00:00 2001 From: George Fu Date: Fri, 1 Mar 2024 18:15:17 +0000 Subject: [PATCH 2/2] chore(credential-providers): unavailable browser credential providers throw at runtime --- packages/credential-providers/README.md | 3 +- packages/credential-providers/src/fromEnv.ts | 3 -- .../credential-providers/src/index.browser.ts | 43 ++++++++++++++++++- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/packages/credential-providers/README.md b/packages/credential-providers/README.md index 461bacbf557bc..c098379a6029b 100644 --- a/packages/credential-providers/README.md +++ b/packages/credential-providers/README.md @@ -505,8 +505,7 @@ See [`fromSSO()`](#fromsso) fro more information ## `fromEnv()` -- Not available in browser & native apps unless your code or bundler populates the - `process.env` global object. +- Not available in browser & native apps ```javascript import { fromEnv } from "@aws-sdk/credential-providers"; // ES6 import diff --git a/packages/credential-providers/src/fromEnv.ts b/packages/credential-providers/src/fromEnv.ts index 412aa6015b4eb..2d939ba609ccf 100644 --- a/packages/credential-providers/src/fromEnv.ts +++ b/packages/credential-providers/src/fromEnv.ts @@ -24,8 +24,5 @@ import { AwsCredentialIdentityProvider } from "@smithy/types"; * credentials: fromEnv(), * }); * ``` - * - * To use this in non-Node.js environments such as a browser, your code or - * build system must populate the `process.env` global object. */ export const fromEnv = (init?: FromEnvInit): AwsCredentialIdentityProvider => _fromEnv(init); diff --git a/packages/credential-providers/src/index.browser.ts b/packages/credential-providers/src/index.browser.ts index e25288f915695..661bd947ae34b 100644 --- a/packages/credential-providers/src/index.browser.ts +++ b/packages/credential-providers/src/index.browser.ts @@ -2,6 +2,47 @@ export * from "./fromCognitoIdentity"; export * from "./fromCognitoIdentityPool"; export { fromHttp } from "@aws-sdk/credential-provider-http"; export type { FromHttpOptions, HttpProviderCredentials } from "@aws-sdk/credential-provider-http"; -export * from "./fromEnv"; export * from "./fromTemporaryCredentials"; export * from "./fromWebToken"; + +export const fromContainerMetadata = async () => { + notAvailable("fromContainerMetadata"); +}; + +export const fromEnv = async () => { + notAvailable("fromEnv"); +}; + +export const fromIni = async () => { + notAvailable("fromIni"); +}; + +export const fromInstanceMetadata = async () => { + notAvailable("fromInstanceMetadata"); +}; + +export const fromNodeProviderChain = async () => { + notAvailable("fromNodeProviderChain"); +}; + +export const fromProcess = async () => { + notAvailable("fromProcess"); +}; + +export const fromSSO = async () => { + notAvailable("fromSSO"); +}; + +export const fromTokenFile = async () => { + notAvailable("fromTokenFile"); +}; + +/** + * @internal + */ +const notAvailable = (name: string): never => { + throw new Error( + `${name} is not available in the browser mode or similar environment. +See https://www.npmjs.com/package/@aws-sdk/credential-providers for usage.` + ); +};