Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/calm-socks-end.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@smithy/node-config-provider": patch
---

Pass logger to environment variable selector
24 changes: 23 additions & 1 deletion packages/node-config-provider/src/configLoader.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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<string, string | undefined>) => 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 });
});
});
10 changes: 9 additions & 1 deletion packages/node-config-provider/src/configLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,15 @@ export const loadConfig = <T = string>(
{ environmentVariableSelector, configFileSelector, default: defaultValue }: LoadedConfigSelectors<T>,
configuration: LocalConfigOptions = {}
): Provider<T> => {
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),
Expand Down
10 changes: 8 additions & 2 deletions packages/node-config-provider/src/fromEnv.ts
Original file line number Diff line number Diff line change
@@ -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";

Expand All @@ -11,6 +11,11 @@ export interface EnvOptions {
* The SigV4 service signing name.
*/
signingName?: string;

/**
* For credential resolution trace logging.
*/
logger?: Logger;
}

// Using Record<string, string | undefined> instead of NodeJS.ProcessEnv, in order to not get type errors in non node environments
Expand All @@ -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 }
);
}
};