Skip to content

Commit acefcf5

Browse files
authored
fix(node-config-provider): pass logger to environment variable selector (#1584)
1 parent 9ff783b commit acefcf5

File tree

4 files changed

+39
-4
lines changed

4 files changed

+39
-4
lines changed

.changeset/calm-socks-end.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@smithy/node-config-provider": patch
3+
---
4+
5+
Pass logger to environment variable selector

packages/node-config-provider/src/configLoader.spec.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ describe("loadConfig", () => {
3939
configuration
4040
);
4141
expect(fromEnv).toHaveBeenCalledTimes(1);
42-
expect(fromEnv).toHaveBeenCalledWith(envVarSelector, undefined);
42+
expect(fromEnv).toHaveBeenCalledWith(envVarSelector, {});
4343
expect(fromSharedConfigFiles).toHaveBeenCalledTimes(1);
4444
expect(fromSharedConfigFiles).toHaveBeenCalledWith(configKey, configuration);
4545
expect(fromStatic).toHaveBeenCalledTimes(1);
@@ -84,4 +84,26 @@ describe("loadConfig", () => {
8484
expect(fromEnv).toHaveBeenCalledTimes(1);
8585
expect(fromEnv).toHaveBeenCalledWith(envVarSelector, { signingName: configWithSigningName.signingName });
8686
});
87+
88+
it("passes logger in options object of fromEnv()", () => {
89+
const configWithSigningName = {
90+
...configuration,
91+
logger: console,
92+
};
93+
const envVarSelector = (env: Record<string, string | undefined>) => env["AWS_CONFIG_FOO"];
94+
const configKey = (profile: Profile) => profile["aws_config_foo"];
95+
const defaultValue = "foo-value";
96+
97+
loadConfig(
98+
{
99+
environmentVariableSelector: envVarSelector,
100+
configFileSelector: configKey,
101+
default: defaultValue,
102+
},
103+
configWithSigningName
104+
);
105+
106+
expect(fromEnv).toHaveBeenCalledTimes(1);
107+
expect(fromEnv).toHaveBeenCalledWith(envVarSelector, { logger: configWithSigningName.logger });
108+
});
87109
});

packages/node-config-provider/src/configLoader.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ export const loadConfig = <T = string>(
3737
{ environmentVariableSelector, configFileSelector, default: defaultValue }: LoadedConfigSelectors<T>,
3838
configuration: LocalConfigOptions = {}
3939
): Provider<T> => {
40-
const envOptions = configuration.signingName ? { signingName: configuration.signingName } : undefined;
40+
const { signingName, logger } = configuration;
41+
const envOptions: EnvOptions = { signingName, logger };
42+
4143
return memoize(
4244
chain(
4345
fromEnv(environmentVariableSelector, envOptions),

packages/node-config-provider/src/fromEnv.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { CredentialsProviderError } from "@smithy/property-provider";
2-
import { Provider } from "@smithy/types";
2+
import { Logger, Provider } from "@smithy/types";
33

44
import { getSelectorName } from "./getSelectorName";
55

@@ -11,6 +11,11 @@ export interface EnvOptions {
1111
* The SigV4 service signing name.
1212
*/
1313
signingName?: string;
14+
15+
/**
16+
* For credential resolution trace logging.
17+
*/
18+
logger?: Logger;
1419
}
1520

1621
// Using Record<string, string | undefined> instead of NodeJS.ProcessEnv, in order to not get type errors in non node environments
@@ -31,7 +36,8 @@ export const fromEnv =
3136
return config as T;
3237
} catch (e) {
3338
throw new CredentialsProviderError(
34-
e.message || `Not found in ENV: ${getSelectorName(envVarSelector.toString())}`
39+
e.message || `Not found in ENV: ${getSelectorName(envVarSelector.toString())}`,
40+
{ logger: options?.logger }
3541
);
3642
}
3743
};

0 commit comments

Comments
 (0)