Skip to content

Commit 961b486

Browse files
committed
fix(codegen): generate default endpoint provider for default regional AWS endpoints
1 parent cc6bab0 commit 961b486

File tree

21 files changed

+220
-88
lines changed

21 files changed

+220
-88
lines changed

codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddDefaultAwsEndpointRuleSet.java

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
package software.amazon.smithy.aws.typescript.codegen;
77

8-
import java.util.Collections;
98
import java.util.List;
109
import software.amazon.smithy.aws.traits.ServiceTrait;
1110
import software.amazon.smithy.model.Model;
@@ -17,8 +16,6 @@
1716
import software.amazon.smithy.typescript.codegen.integration.RuntimeClientPlugin;
1817
import software.amazon.smithy.typescript.codegen.integration.TypeScriptIntegration;
1918

20-
import static software.amazon.smithy.typescript.codegen.integration.RuntimeClientPlugin.Convention.HAS_CONFIG;
21-
2219

2320
/**
2421
* This replaces behavior from {@link EndpointGenerator}.
@@ -37,25 +34,37 @@ public List<String> runBefore() {
3734
return List.of(AddDefaultEndpointRuleSet.class.getCanonicalName());
3835
}
3936

37+
/**
38+
* Inserts this resolver after the `resolveEndpointConfig` function.
39+
*/
4040
@Override
41-
public List<RuntimeClientPlugin> getClientPlugins() {
42-
if (usesDefaultAwsRegionalEndpoints) {
43-
/*
44-
This resolver supports the behavior of endpoints.json-based endpoint provider
45-
for default regional services: it makes client.config.endpoint optional on the input side,
46-
but guaranteed on the resolved side.
47-
*/
48-
return List.of(
49-
RuntimeClientPlugin.builder()
50-
.withConventions(
51-
AwsDependency.UTIL_ENDPOINTS.dependency,
52-
"DefaultAwsRegionalEndpoints",
53-
HAS_CONFIG
54-
)
55-
.build()
56-
);
41+
public void mutateClientPlugins(List<RuntimeClientPlugin> plugins) {
42+
if (!usesDefaultAwsRegionalEndpoints) {
43+
return;
5744
}
58-
return Collections.emptyList();
45+
46+
/*
47+
This resolver supports the behavior of endpoints.json-based endpoint provider
48+
for default regional services: it makes client.config.endpoint optional on the input side,
49+
but guaranteed on the resolved side.
50+
*/
51+
RuntimeClientPlugin defaultAwsRegionalEndpoints = RuntimeClientPlugin.builder()
52+
.withConventions(
53+
AwsDependency.UTIL_ENDPOINTS.dependency,
54+
"DefaultAwsRegionalEndpoints",
55+
RuntimeClientPlugin.Convention.HAS_CONFIG
56+
)
57+
.build();
58+
59+
RuntimeClientPlugin endpointPlugin = plugins.stream()
60+
.filter(p -> p.getResolveFunction()
61+
.map(r -> r.getAlias().equals("resolveEndpointConfig"))
62+
.orElse(false))
63+
.findAny()
64+
.orElseThrow(() -> new IllegalStateException("Expected resolveEndpointConfig function in plugins."));
65+
66+
int index = plugins.indexOf(endpointPlugin);
67+
plugins.add(index + 1, defaultAwsRegionalEndpoints);
5968
}
6069

6170
@Override
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export * from "./aws";
22
export * from "./lib/aws/partition";
33
export * from "./lib/isIpAddress";
4+
export * from "./resolveDefaultAwsRegionalEndpointsConfig";
45
export * from "./resolveEndpoint";
56
export * from "./types";

packages/util-endpoints/src/resolveDefaultAwsRegionalEndpointsConfig.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,17 @@ import { parseUrl } from "@smithy/url-parser";
2121
*/
2222
export type DefaultAwsRegionalEndpointsInputConfig = {
2323
endpoint?: unknown;
24-
endpointProvider: (
25-
endpointParams: EndpointParameters | DefaultRegionalEndpointParameters,
26-
context?: { logger?: Logger }
27-
) => EndpointV2;
2824
};
2925

3026
type PreviouslyResolved = {
3127
logger?: Logger;
3228
region?: undefined | string | Provider<string | undefined>;
3329
useFipsEndpoint?: undefined | boolean | Provider<string | boolean>;
3430
useDualstackEndpoint?: undefined | boolean | Provider<string | boolean>;
31+
endpointProvider: (
32+
endpointParams: EndpointParameters | DefaultRegionalEndpointParameters,
33+
context?: { logger?: Logger }
34+
) => EndpointV2;
3535
};
3636

3737
/**
@@ -75,13 +75,14 @@ export const resolveDefaultAwsRegionalEndpointsConfig = <T>(
7575
: input.useDualstackEndpoint,
7676
UseFIPS:
7777
typeof input.useFipsEndpoint === "function" ? await input.useFipsEndpoint() : input.useFipsEndpoint,
78+
Endpoint: undefined,
7879
},
7980
{ logger: input.logger }
8081
)
8182
);
8283
};
8384
}
84-
return input as T & DefaultEndpointResolvedConfig;
85+
return input as T & DefaultAwsRegionalEndpointsResolvedConfig;
8586
};
8687

8788
/**

private/aws-protocoltests-ec2-schema/src/EC2ProtocolClient.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ import {
1313
UserAgentInputConfig,
1414
UserAgentResolvedConfig,
1515
} from "@aws-sdk/middleware-user-agent";
16+
import {
17+
DefaultAwsRegionalEndpointsInputConfig,
18+
DefaultAwsRegionalEndpointsResolvedConfig,
19+
resolveDefaultAwsRegionalEndpointsConfig,
20+
} from "@aws-sdk/util-endpoints";
1621
import { RegionInputConfig, RegionResolvedConfig, resolveRegionConfig } from "@smithy/config-resolver";
1722
import {
1823
DefaultIdentityProviderConfig,
@@ -350,6 +355,7 @@ export type EC2ProtocolClientConfigType = Partial<__SmithyConfiguration<__HttpHa
350355
RegionInputConfig &
351356
HostHeaderInputConfig &
352357
EndpointInputConfig<EndpointParameters> &
358+
DefaultAwsRegionalEndpointsInputConfig &
353359
HttpAuthSchemeInputConfig &
354360
CompressionInputConfig &
355361
ClientInputEndpointParameters;
@@ -371,6 +377,7 @@ export type EC2ProtocolClientResolvedConfigType = __SmithyResolvedConfiguration<
371377
RegionResolvedConfig &
372378
HostHeaderResolvedConfig &
373379
EndpointResolvedConfig<EndpointParameters> &
380+
DefaultAwsRegionalEndpointsResolvedConfig &
374381
HttpAuthSchemeResolvedConfig &
375382
CompressionResolvedConfig &
376383
ClientResolvedEndpointParameters;
@@ -406,10 +413,11 @@ export class EC2ProtocolClient extends __Client<
406413
const _config_4 = resolveRegionConfig(_config_3);
407414
const _config_5 = resolveHostHeaderConfig(_config_4);
408415
const _config_6 = resolveEndpointConfig(_config_5);
409-
const _config_7 = resolveHttpAuthSchemeConfig(_config_6);
410-
const _config_8 = resolveCompressionConfig(_config_7);
411-
const _config_9 = resolveRuntimeExtensions(_config_8, configuration?.extensions || []);
412-
this.config = _config_9;
416+
const _config_7 = resolveDefaultAwsRegionalEndpointsConfig(_config_6);
417+
const _config_8 = resolveHttpAuthSchemeConfig(_config_7);
418+
const _config_9 = resolveCompressionConfig(_config_8);
419+
const _config_10 = resolveRuntimeExtensions(_config_9, configuration?.extensions || []);
420+
this.config = _config_10;
413421
this.middlewareStack.use(getSchemaSerdePlugin(this.config));
414422
this.middlewareStack.use(getUserAgentPlugin(this.config));
415423
this.middlewareStack.use(getRetryPlugin(this.config));

private/aws-protocoltests-ec2/src/EC2ProtocolClient.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ import {
1313
UserAgentInputConfig,
1414
UserAgentResolvedConfig,
1515
} from "@aws-sdk/middleware-user-agent";
16+
import {
17+
DefaultAwsRegionalEndpointsInputConfig,
18+
DefaultAwsRegionalEndpointsResolvedConfig,
19+
resolveDefaultAwsRegionalEndpointsConfig,
20+
} from "@aws-sdk/util-endpoints";
1621
import { RegionInputConfig, RegionResolvedConfig, resolveRegionConfig } from "@smithy/config-resolver";
1722
import {
1823
DefaultIdentityProviderConfig,
@@ -26,7 +31,7 @@ import {
2631
} from "@smithy/middleware-compression";
2732
import { getContentLengthPlugin } from "@smithy/middleware-content-length";
2833
import { EndpointInputConfig, EndpointResolvedConfig, resolveEndpointConfig } from "@smithy/middleware-endpoint";
29-
import { getRetryPlugin, resolveRetryConfig, RetryInputConfig, RetryResolvedConfig } from "@smithy/middleware-retry";
34+
import { getRetryPlugin, RetryInputConfig, RetryResolvedConfig, resolveRetryConfig } from "@smithy/middleware-retry";
3035
import { HttpHandlerUserInput as __HttpHandlerUserInput } from "@smithy/protocol-http";
3136
import {
3237
Client as __Client,
@@ -35,7 +40,6 @@ import {
3540
SmithyResolvedConfiguration as __SmithyResolvedConfiguration,
3641
} from "@smithy/smithy-client";
3742
import {
38-
AwsCredentialIdentityProvider,
3943
BodyLengthCalculator as __BodyLengthCalculator,
4044
CheckOptionalClientConfig as __CheckOptionalClientConfig,
4145
ChecksumConstructor as __ChecksumConstructor,
@@ -46,10 +50,11 @@ import {
4650
HttpHandlerOptions as __HttpHandlerOptions,
4751
Logger as __Logger,
4852
Provider as __Provider,
49-
Provider,
5053
StreamCollector as __StreamCollector,
5154
UrlParser as __UrlParser,
5255
UserAgent as __UserAgent,
56+
AwsCredentialIdentityProvider,
57+
Provider,
5358
} from "@smithy/types";
5459

5560
import {
@@ -111,7 +116,7 @@ import {
111116
resolveClientEndpointParameters,
112117
} from "./endpoint/EndpointParameters";
113118
import { getRuntimeConfig as __getRuntimeConfig } from "./runtimeConfig";
114-
import { resolveRuntimeExtensions, RuntimeExtension, RuntimeExtensionsConfig } from "./runtimeExtensions";
119+
import { RuntimeExtension, RuntimeExtensionsConfig, resolveRuntimeExtensions } from "./runtimeExtensions";
115120

116121
export { __Client };
117122

@@ -336,6 +341,7 @@ export type EC2ProtocolClientConfigType = Partial<__SmithyConfiguration<__HttpHa
336341
RegionInputConfig &
337342
HostHeaderInputConfig &
338343
EndpointInputConfig<EndpointParameters> &
344+
DefaultAwsRegionalEndpointsInputConfig &
339345
HttpAuthSchemeInputConfig &
340346
CompressionInputConfig &
341347
ClientInputEndpointParameters;
@@ -357,6 +363,7 @@ export type EC2ProtocolClientResolvedConfigType = __SmithyResolvedConfiguration<
357363
RegionResolvedConfig &
358364
HostHeaderResolvedConfig &
359365
EndpointResolvedConfig<EndpointParameters> &
366+
DefaultAwsRegionalEndpointsResolvedConfig &
360367
HttpAuthSchemeResolvedConfig &
361368
CompressionResolvedConfig &
362369
ClientResolvedEndpointParameters;
@@ -392,10 +399,11 @@ export class EC2ProtocolClient extends __Client<
392399
const _config_4 = resolveRegionConfig(_config_3);
393400
const _config_5 = resolveHostHeaderConfig(_config_4);
394401
const _config_6 = resolveEndpointConfig(_config_5);
395-
const _config_7 = resolveHttpAuthSchemeConfig(_config_6);
396-
const _config_8 = resolveCompressionConfig(_config_7);
397-
const _config_9 = resolveRuntimeExtensions(_config_8, configuration?.extensions || []);
398-
this.config = _config_9;
402+
const _config_7 = resolveDefaultAwsRegionalEndpointsConfig(_config_6);
403+
const _config_8 = resolveHttpAuthSchemeConfig(_config_7);
404+
const _config_9 = resolveCompressionConfig(_config_8);
405+
const _config_10 = resolveRuntimeExtensions(_config_9, configuration?.extensions || []);
406+
this.config = _config_10;
399407
this.middlewareStack.use(getUserAgentPlugin(this.config));
400408
this.middlewareStack.use(getRetryPlugin(this.config));
401409
this.middlewareStack.use(getContentLengthPlugin(this.config));

private/aws-protocoltests-json-10-schema/src/JSONRPC10Client.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ import {
1313
UserAgentInputConfig,
1414
UserAgentResolvedConfig,
1515
} from "@aws-sdk/middleware-user-agent";
16+
import {
17+
DefaultAwsRegionalEndpointsInputConfig,
18+
DefaultAwsRegionalEndpointsResolvedConfig,
19+
resolveDefaultAwsRegionalEndpointsConfig,
20+
} from "@aws-sdk/util-endpoints";
1621
import { RegionInputConfig, RegionResolvedConfig, resolveRegionConfig } from "@smithy/config-resolver";
1722
import {
1823
DefaultIdentityProviderConfig,
@@ -335,6 +340,7 @@ export type JSONRPC10ClientConfigType = Partial<__SmithyConfiguration<__HttpHand
335340
RegionInputConfig &
336341
HostHeaderInputConfig &
337342
EndpointInputConfig<EndpointParameters> &
343+
DefaultAwsRegionalEndpointsInputConfig &
338344
HttpAuthSchemeInputConfig &
339345
CompressionInputConfig &
340346
ClientInputEndpointParameters;
@@ -356,6 +362,7 @@ export type JSONRPC10ClientResolvedConfigType = __SmithyResolvedConfiguration<__
356362
RegionResolvedConfig &
357363
HostHeaderResolvedConfig &
358364
EndpointResolvedConfig<EndpointParameters> &
365+
DefaultAwsRegionalEndpointsResolvedConfig &
359366
HttpAuthSchemeResolvedConfig &
360367
CompressionResolvedConfig &
361368
ClientResolvedEndpointParameters;
@@ -390,10 +397,11 @@ export class JSONRPC10Client extends __Client<
390397
const _config_4 = resolveRegionConfig(_config_3);
391398
const _config_5 = resolveHostHeaderConfig(_config_4);
392399
const _config_6 = resolveEndpointConfig(_config_5);
393-
const _config_7 = resolveHttpAuthSchemeConfig(_config_6);
394-
const _config_8 = resolveCompressionConfig(_config_7);
395-
const _config_9 = resolveRuntimeExtensions(_config_8, configuration?.extensions || []);
396-
this.config = _config_9;
400+
const _config_7 = resolveDefaultAwsRegionalEndpointsConfig(_config_6);
401+
const _config_8 = resolveHttpAuthSchemeConfig(_config_7);
402+
const _config_9 = resolveCompressionConfig(_config_8);
403+
const _config_10 = resolveRuntimeExtensions(_config_9, configuration?.extensions || []);
404+
this.config = _config_10;
397405
this.middlewareStack.use(getSchemaSerdePlugin(this.config));
398406
this.middlewareStack.use(getUserAgentPlugin(this.config));
399407
this.middlewareStack.use(getRetryPlugin(this.config));

private/aws-protocoltests-json-10/src/JSONRPC10Client.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ import {
1313
UserAgentInputConfig,
1414
UserAgentResolvedConfig,
1515
} from "@aws-sdk/middleware-user-agent";
16+
import {
17+
DefaultAwsRegionalEndpointsInputConfig,
18+
DefaultAwsRegionalEndpointsResolvedConfig,
19+
resolveDefaultAwsRegionalEndpointsConfig,
20+
} from "@aws-sdk/util-endpoints";
1621
import { RegionInputConfig, RegionResolvedConfig, resolveRegionConfig } from "@smithy/config-resolver";
1722
import {
1823
DefaultIdentityProviderConfig,
@@ -321,6 +326,7 @@ export type JSONRPC10ClientConfigType = Partial<__SmithyConfiguration<__HttpHand
321326
RegionInputConfig &
322327
HostHeaderInputConfig &
323328
EndpointInputConfig<EndpointParameters> &
329+
DefaultAwsRegionalEndpointsInputConfig &
324330
HttpAuthSchemeInputConfig &
325331
CompressionInputConfig &
326332
ClientInputEndpointParameters;
@@ -342,6 +348,7 @@ export type JSONRPC10ClientResolvedConfigType = __SmithyResolvedConfiguration<__
342348
RegionResolvedConfig &
343349
HostHeaderResolvedConfig &
344350
EndpointResolvedConfig<EndpointParameters> &
351+
DefaultAwsRegionalEndpointsResolvedConfig &
345352
HttpAuthSchemeResolvedConfig &
346353
CompressionResolvedConfig &
347354
ClientResolvedEndpointParameters;
@@ -376,10 +383,11 @@ export class JSONRPC10Client extends __Client<
376383
const _config_4 = resolveRegionConfig(_config_3);
377384
const _config_5 = resolveHostHeaderConfig(_config_4);
378385
const _config_6 = resolveEndpointConfig(_config_5);
379-
const _config_7 = resolveHttpAuthSchemeConfig(_config_6);
380-
const _config_8 = resolveCompressionConfig(_config_7);
381-
const _config_9 = resolveRuntimeExtensions(_config_8, configuration?.extensions || []);
382-
this.config = _config_9;
386+
const _config_7 = resolveDefaultAwsRegionalEndpointsConfig(_config_6);
387+
const _config_8 = resolveHttpAuthSchemeConfig(_config_7);
388+
const _config_9 = resolveCompressionConfig(_config_8);
389+
const _config_10 = resolveRuntimeExtensions(_config_9, configuration?.extensions || []);
390+
this.config = _config_10;
383391
this.middlewareStack.use(getUserAgentPlugin(this.config));
384392
this.middlewareStack.use(getRetryPlugin(this.config));
385393
this.middlewareStack.use(getContentLengthPlugin(this.config));

private/aws-protocoltests-json-machinelearning/src/MachineLearningClient.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ import {
1313
UserAgentInputConfig,
1414
UserAgentResolvedConfig,
1515
} from "@aws-sdk/middleware-user-agent";
16+
import {
17+
DefaultAwsRegionalEndpointsInputConfig,
18+
DefaultAwsRegionalEndpointsResolvedConfig,
19+
resolveDefaultAwsRegionalEndpointsConfig,
20+
} from "@aws-sdk/util-endpoints";
1621
import { RegionInputConfig, RegionResolvedConfig, resolveRegionConfig } from "@smithy/config-resolver";
1722
import {
1823
DefaultIdentityProviderConfig,
@@ -236,6 +241,7 @@ export type MachineLearningClientConfigType = Partial<__SmithyConfiguration<__Ht
236241
RegionInputConfig &
237242
HostHeaderInputConfig &
238243
EndpointInputConfig<EndpointParameters> &
244+
DefaultAwsRegionalEndpointsInputConfig &
239245
HttpAuthSchemeInputConfig &
240246
ClientInputEndpointParameters;
241247
/**
@@ -256,6 +262,7 @@ export type MachineLearningClientResolvedConfigType = __SmithyResolvedConfigurat
256262
RegionResolvedConfig &
257263
HostHeaderResolvedConfig &
258264
EndpointResolvedConfig<EndpointParameters> &
265+
DefaultAwsRegionalEndpointsResolvedConfig &
259266
HttpAuthSchemeResolvedConfig &
260267
ClientResolvedEndpointParameters;
261268
/**
@@ -289,9 +296,10 @@ export class MachineLearningClient extends __Client<
289296
const _config_4 = resolveRegionConfig(_config_3);
290297
const _config_5 = resolveHostHeaderConfig(_config_4);
291298
const _config_6 = resolveEndpointConfig(_config_5);
292-
const _config_7 = resolveHttpAuthSchemeConfig(_config_6);
293-
const _config_8 = resolveRuntimeExtensions(_config_7, configuration?.extensions || []);
294-
this.config = _config_8;
299+
const _config_7 = resolveDefaultAwsRegionalEndpointsConfig(_config_6);
300+
const _config_8 = resolveHttpAuthSchemeConfig(_config_7);
301+
const _config_9 = resolveRuntimeExtensions(_config_8, configuration?.extensions || []);
302+
this.config = _config_9;
295303
this.middlewareStack.use(getUserAgentPlugin(this.config));
296304
this.middlewareStack.use(getRetryPlugin(this.config));
297305
this.middlewareStack.use(getContentLengthPlugin(this.config));

0 commit comments

Comments
 (0)