From 6df123abdc66398cda77630f3205c191d127c456 Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Wed, 7 May 2025 17:04:36 +0000 Subject: [PATCH 1/3] fix(node-config-provider): pass logger to environment variable selector --- .../src/configLoader.spec.ts | 24 ++++++++++++++++++- .../node-config-provider/src/configLoader.ts | 10 +++++++- packages/node-config-provider/src/fromEnv.ts | 10 ++++++-- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/packages/node-config-provider/src/configLoader.spec.ts b/packages/node-config-provider/src/configLoader.spec.ts index b6b8c061633..4ca14edc3ab 100644 --- a/packages/node-config-provider/src/configLoader.spec.ts +++ b/packages/node-config-provider/src/configLoader.spec.ts @@ -39,7 +39,7 @@ describe("loadConfig", () => { configuration ); expect(fromEnv).toHaveBeenCalledTimes(1); - expect(fromEnv).toHaveBeenCalledWith(envVarSelector, undefined); + expect(fromEnv).toHaveBeenCalledWith(envVarSelector, {}); expect(fromSharedConfigFiles).toHaveBeenCalledTimes(1); expect(fromSharedConfigFiles).toHaveBeenCalledWith(configKey, configuration); expect(fromStatic).toHaveBeenCalledTimes(1); @@ -84,4 +84,26 @@ describe("loadConfig", () => { expect(fromEnv).toHaveBeenCalledTimes(1); expect(fromEnv).toHaveBeenCalledWith(envVarSelector, { signingName: configWithSigningName.signingName }); }); + + it("passes logger in options object of fromEnv()", () => { + const configWithSigningName = { + ...configuration, + logger: console, + }; + const envVarSelector = (env: Record) => env["AWS_CONFIG_FOO"]; + const configKey = (profile: Profile) => profile["aws_config_foo"]; + const defaultValue = "foo-value"; + + loadConfig( + { + environmentVariableSelector: envVarSelector, + configFileSelector: configKey, + default: defaultValue, + }, + configWithSigningName + ); + + expect(fromEnv).toHaveBeenCalledTimes(1); + expect(fromEnv).toHaveBeenCalledWith(envVarSelector, { logger: configWithSigningName.logger }); + }); }); diff --git a/packages/node-config-provider/src/configLoader.ts b/packages/node-config-provider/src/configLoader.ts index 08b4de3f84d..db721990cec 100644 --- a/packages/node-config-provider/src/configLoader.ts +++ b/packages/node-config-provider/src/configLoader.ts @@ -37,7 +37,15 @@ export const loadConfig = ( { environmentVariableSelector, configFileSelector, default: defaultValue }: LoadedConfigSelectors, configuration: LocalConfigOptions = {} ): Provider => { - const envOptions = configuration.signingName ? { signingName: configuration.signingName } : undefined; + const envOptions: EnvOptions = {}; + + if (configuration.signingName !== undefined) { + envOptions.signingName = configuration.signingName; + } + if (configuration.logger !== undefined) { + envOptions.logger = configuration.logger; + } + return memoize( chain( fromEnv(environmentVariableSelector, envOptions), diff --git a/packages/node-config-provider/src/fromEnv.ts b/packages/node-config-provider/src/fromEnv.ts index 78b8139e609..ce3754f2e3e 100644 --- a/packages/node-config-provider/src/fromEnv.ts +++ b/packages/node-config-provider/src/fromEnv.ts @@ -1,5 +1,5 @@ import { CredentialsProviderError } from "@smithy/property-provider"; -import { Provider } from "@smithy/types"; +import { Logger, Provider } from "@smithy/types"; import { getSelectorName } from "./getSelectorName"; @@ -11,6 +11,11 @@ export interface EnvOptions { * The SigV4 service signing name. */ signingName?: string; + + /** + * For credential resolution trace logging. + */ + logger?: Logger; } // Using Record instead of NodeJS.ProcessEnv, in order to not get type errors in non node environments @@ -31,7 +36,8 @@ export const fromEnv = return config as T; } catch (e) { throw new CredentialsProviderError( - e.message || `Not found in ENV: ${getSelectorName(envVarSelector.toString())}` + e.message || `Not found in ENV: ${getSelectorName(envVarSelector.toString())}`, + { logger: options?.logger } ); } }; From aa7bcbace8cd83111978b6992a4a8b3a0bf07e39 Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Wed, 7 May 2025 17:05:21 +0000 Subject: [PATCH 2/3] chore: yarn changeset --- .changeset/calm-socks-end.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/calm-socks-end.md diff --git a/.changeset/calm-socks-end.md b/.changeset/calm-socks-end.md new file mode 100644 index 00000000000..2c6783acc04 --- /dev/null +++ b/.changeset/calm-socks-end.md @@ -0,0 +1,5 @@ +--- +"@smithy/node-config-provider": patch +--- + +Pass logger to environment variable selector From 05c748f5f5cc77782afcf70c596b9d1df99a1e9b Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Wed, 7 May 2025 17:16:12 +0000 Subject: [PATCH 3/3] chore: use destructuring for populating envOptions --- packages/node-config-provider/src/configLoader.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/packages/node-config-provider/src/configLoader.ts b/packages/node-config-provider/src/configLoader.ts index db721990cec..741166c84d2 100644 --- a/packages/node-config-provider/src/configLoader.ts +++ b/packages/node-config-provider/src/configLoader.ts @@ -37,14 +37,8 @@ export const loadConfig = ( { environmentVariableSelector, configFileSelector, default: defaultValue }: LoadedConfigSelectors, configuration: LocalConfigOptions = {} ): Provider => { - const envOptions: EnvOptions = {}; - - if (configuration.signingName !== undefined) { - envOptions.signingName = configuration.signingName; - } - if (configuration.logger !== undefined) { - envOptions.logger = configuration.logger; - } + const { signingName, logger } = configuration; + const envOptions: EnvOptions = { signingName, logger }; return memoize( chain(