Skip to content

Commit 79ec1a9

Browse files
committed
chore(config-resolver): pass fips/dualstack config while resolving endpoints
1 parent ec28c27 commit 79ec1a9

File tree

3 files changed

+42
-15
lines changed

3 files changed

+42
-15
lines changed

packages/config-resolver/src/endpointsConfig/resolveEndpointsConfig.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,17 @@ export interface EndpointsResolvedConfig extends Required<EndpointsInputConfig>
5757

5858
export const resolveEndpointsConfig = <T>(
5959
input: T & EndpointsInputConfig & PreviouslyResolved
60-
): T & EndpointsResolvedConfig => ({
61-
...input,
62-
tls: input.tls ?? true,
63-
endpoint: input.endpoint
64-
? normalizeEndpoint({ ...input, endpoint: input.endpoint })
65-
: () => getEndpointFromRegion(input),
66-
isCustomEndpoint: input.endpoint ? true : false,
67-
useDualstackEndpoint: normalizeBoolean(input.useDualstackEndpoint!),
68-
useFipsEndpoint: normalizeBoolean(input.useFipsEndpoint!),
69-
});
60+
): T & EndpointsResolvedConfig => {
61+
const useDualstackEndpoint = normalizeBoolean(input.useDualstackEndpoint!);
62+
const useFipsEndpoint = normalizeBoolean(input.useFipsEndpoint!);
63+
return {
64+
...input,
65+
tls: input.tls ?? true,
66+
endpoint: input.endpoint
67+
? normalizeEndpoint({ ...input, endpoint: input.endpoint })
68+
: () => getEndpointFromRegion({ ...input, useDualstackEndpoint, useFipsEndpoint }),
69+
isCustomEndpoint: input.endpoint ? true : false,
70+
useDualstackEndpoint,
71+
useFipsEndpoint,
72+
};
73+
};

packages/config-resolver/src/endpointsConfig/utils/getEndpointFromRegion.spec.ts

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,16 @@ describe(getEndpointFromRegion.name, () => {
44
const mockRegion = jest.fn();
55
const mockUrlParser = jest.fn();
66
const mockRegionInfoProvider = jest.fn();
7+
const mockUseFipsEndpoint = jest.fn();
8+
const mockUseDualstackEndpoint = jest.fn();
79

8-
const mockInput = { region: mockRegion, urlParser: mockUrlParser, regionInfoProvider: mockRegionInfoProvider };
10+
const mockInput = {
11+
region: mockRegion,
12+
urlParser: mockUrlParser,
13+
regionInfoProvider: mockRegionInfoProvider,
14+
useDualstackEndpoint: mockUseDualstackEndpoint,
15+
useFipsEndpoint: mockUseFipsEndpoint,
16+
};
917

1018
const mockRegionValue = "mockRegion";
1119
const mockEndpoint = {
@@ -19,6 +27,8 @@ describe(getEndpointFromRegion.name, () => {
1927
mockRegion.mockResolvedValue(mockRegionValue);
2028
mockUrlParser.mockResolvedValue(mockEndpoint);
2129
mockRegionInfoProvider.mockResolvedValue(mockRegionInfo);
30+
mockUseFipsEndpoint.mockResolvedValue(false);
31+
mockUseDualstackEndpoint.mockResolvedValue(false);
2232
});
2333

2434
afterEach(() => {
@@ -28,7 +38,10 @@ describe(getEndpointFromRegion.name, () => {
2838

2939
describe("tls", () => {
3040
afterEach(() => {
31-
expect(mockRegionInfoProvider).toHaveBeenCalledWith(mockRegionValue);
41+
expect(mockRegionInfoProvider).toHaveBeenCalledWith(mockRegionValue, {
42+
useDualstackEndpoint: false,
43+
useFipsEndpoint: false,
44+
});
3245
});
3346

3447
it("uses protocol https when not defined", async () => {
@@ -81,14 +94,20 @@ describe(getEndpointFromRegion.name, () => {
8194
} catch (error) {
8295
expect(error.message).toEqual(errorMsg);
8396
}
84-
expect(mockRegionInfoProvider).toHaveBeenCalledWith(mockRegionValue);
97+
expect(mockRegionInfoProvider).toHaveBeenCalledWith(mockRegionValue, {
98+
useDualstackEndpoint: false,
99+
useFipsEndpoint: false,
100+
});
85101
expect(mockUrlParser).not.toHaveBeenCalled();
86102
});
87103

88104
it("returns parsed endpoint", async () => {
89105
const endpoint = await getEndpointFromRegion(mockInput);
90106
expect(endpoint).toEqual(mockEndpoint);
91-
expect(mockRegionInfoProvider).toHaveBeenCalledWith(mockRegionValue);
107+
expect(mockRegionInfoProvider).toHaveBeenCalledWith(mockRegionValue, {
108+
useDualstackEndpoint: false,
109+
useFipsEndpoint: false,
110+
});
92111
expect(mockUrlParser).toHaveBeenCalledWith(`https://${mockRegionInfo.hostname}`);
93112
});
94113
});

packages/config-resolver/src/endpointsConfig/utils/getEndpointFromRegion.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ interface GetEndpointFromRegionOptions {
55
tls?: boolean;
66
regionInfoProvider: RegionInfoProvider;
77
urlParser: UrlParser;
8+
useDualstackEndpoint: Provider<boolean>;
9+
useFipsEndpoint: Provider<boolean>;
810
}
911

1012
export const getEndpointFromRegion = async (input: GetEndpointFromRegionOptions) => {
@@ -16,7 +18,9 @@ export const getEndpointFromRegion = async (input: GetEndpointFromRegionOptions)
1618
throw new Error("Invalid region in client config");
1719
}
1820

19-
const { hostname } = (await input.regionInfoProvider(region)) ?? {};
21+
const useDualstackEndpoint = await input.useDualstackEndpoint();
22+
const useFipsEndpoint = await input.useFipsEndpoint();
23+
const { hostname } = (await input.regionInfoProvider(region, { useDualstackEndpoint, useFipsEndpoint })) ?? {};
2024
if (!hostname) {
2125
throw new Error("Cannot resolve hostname from client config");
2226
}

0 commit comments

Comments
 (0)