Skip to content

Commit 388b180

Browse files
authored
feat: standardize user agent value (#1775)
* fix: update default useragent string to comply metrics requirements * feat(util-user-agent-node): update node user agent provider to the latest * feat(types): add user agent type * feat(types): add useragent to handler exec context * feat(util-user-agent-node): update node user agent provider to the latest design * feat(util-user-agent-node): support app id and add unit tests * feat(util-user-agent-browser): detect browser UA in new format * feat(util-user-agent-browser): support react native user agent * feat(middleware-user-agent): combine ua from context, default, and config into new sdk ua header * feat(middleware-user-agent): add injectUserAgent plugin * feat(middleware-user-agent): add retry mode metrics * feat(util-user-agent-*): support non-AWS clients * chore(codegen): consolidate user-agent customization to a codegen plugin * fix(middleware-user-agent): remove injectUAPlugin because it's not used for now * fix(util-user-agent-*): not to update version to 3.x.x * feat(middleware-user-agent): lowercase service ids * feat: rename defaultUserAgent config to defaultUserAgentProvider * feat(client-*): update user-agent population and injecting
1 parent 0011af2 commit 388b180

File tree

1,035 files changed

+6356
-4411
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,035 files changed

+6356
-4411
lines changed

Diff for: clients/client-accessanalyzer/AccessAnalyzerClient.ts

+15-12
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ import {
6262
SmithyResolvedConfiguration as __SmithyResolvedConfiguration,
6363
} from "@aws-sdk/smithy-client";
6464
import {
65+
Provider,
6566
RegionInfoProvider,
6667
Credentials as __Credentials,
6768
Decoder as __Decoder,
@@ -72,6 +73,7 @@ import {
7273
Provider as __Provider,
7374
StreamCollector as __StreamCollector,
7475
UrlParser as __UrlParser,
76+
UserAgent as __UserAgent,
7577
} from "@aws-sdk/types";
7678

7779
export type ServiceInputTypes =
@@ -161,11 +163,6 @@ export interface ClientDefaults extends Partial<__SmithyResolvedConfiguration<__
161163
*/
162164
utf8Encoder?: __Encoder;
163165

164-
/**
165-
* The string that will be used to populate default value in 'User-Agent' header
166-
*/
167-
defaultUserAgent?: string;
168-
169166
/**
170167
* The runtime environment
171168
*/
@@ -207,6 +204,12 @@ export interface ClientDefaults extends Partial<__SmithyResolvedConfiguration<__
207204
* Fetch related hostname, signing name or signing region with given region.
208205
*/
209206
regionInfoProvider?: RegionInfoProvider;
207+
208+
/**
209+
* The provider populating default tracking information to be sent with `user-agent`, `x-amz-user-agent` header
210+
* @internal
211+
*/
212+
defaultUserAgentProvider?: Provider<__UserAgent>;
210213
}
211214

212215
export type AccessAnalyzerClientConfig = Partial<__SmithyConfiguration<__HttpHandlerOptions>> &
@@ -215,17 +218,17 @@ export type AccessAnalyzerClientConfig = Partial<__SmithyConfiguration<__HttpHan
215218
EndpointsInputConfig &
216219
AwsAuthInputConfig &
217220
RetryInputConfig &
218-
UserAgentInputConfig &
219-
HostHeaderInputConfig;
221+
HostHeaderInputConfig &
222+
UserAgentInputConfig;
220223

221224
export type AccessAnalyzerClientResolvedConfig = __SmithyResolvedConfiguration<__HttpHandlerOptions> &
222225
Required<ClientDefaults> &
223226
RegionResolvedConfig &
224227
EndpointsResolvedConfig &
225228
AwsAuthResolvedConfig &
226229
RetryResolvedConfig &
227-
UserAgentResolvedConfig &
228-
HostHeaderResolvedConfig;
230+
HostHeaderResolvedConfig &
231+
UserAgentResolvedConfig;
229232

230233
/**
231234
* <p>AWS IAM Access Analyzer helps identify potential resource-access risks by enabling you to identify
@@ -253,16 +256,16 @@ export class AccessAnalyzerClient extends __Client<
253256
let _config_2 = resolveEndpointsConfig(_config_1);
254257
let _config_3 = resolveAwsAuthConfig(_config_2);
255258
let _config_4 = resolveRetryConfig(_config_3);
256-
let _config_5 = resolveUserAgentConfig(_config_4);
257-
let _config_6 = resolveHostHeaderConfig(_config_5);
259+
let _config_5 = resolveHostHeaderConfig(_config_4);
260+
let _config_6 = resolveUserAgentConfig(_config_5);
258261
super(_config_6);
259262
this.config = _config_6;
260263
this.middlewareStack.use(getAwsAuthPlugin(this.config));
261264
this.middlewareStack.use(getRetryPlugin(this.config));
262-
this.middlewareStack.use(getUserAgentPlugin(this.config));
263265
this.middlewareStack.use(getContentLengthPlugin(this.config));
264266
this.middlewareStack.use(getHostHeaderPlugin(this.config));
265267
this.middlewareStack.use(getLoggerPlugin(this.config));
268+
this.middlewareStack.use(getUserAgentPlugin(this.config));
266269
}
267270

268271
destroy(): void {

Diff for: clients/client-accessanalyzer/runtimeConfig.browser.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ export const ClientDefaultValues: Required<ClientDefaults> = {
2222
base64Encoder: toBase64,
2323
bodyLengthChecker: calculateBodyLength,
2424
credentialDefaultProvider: invalidAsyncFunction("Credentialis missing") as any,
25-
defaultUserAgent: defaultUserAgent(packageInfo.name, packageInfo.version),
25+
defaultUserAgentProvider: defaultUserAgent({
26+
serviceId: ClientSharedValues.serviceId,
27+
clientVersion: packageInfo.version,
28+
}),
2629
maxAttempts: DEFAULT_MAX_ATTEMPTS,
2730
region: invalidAsyncFunction("Region is missing") as any,
2831
requestHandler: new FetchHttpHandler(),

Diff for: clients/client-accessanalyzer/runtimeConfig.native.ts

-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import packageInfo from "./package.json";
2-
31
import { Sha256 } from "@aws-crypto/sha256-js";
42
import { parseUrl } from "@aws-sdk/url-parser-node";
53
import { ClientDefaults } from "./AccessAnalyzerClient";
@@ -11,7 +9,6 @@ import { ClientDefaultValues as BrowserDefaults } from "./runtimeConfig.browser"
119
export const ClientDefaultValues: Required<ClientDefaults> = {
1210
...BrowserDefaults,
1311
runtime: "react-native",
14-
defaultUserAgent: `aws-sdk-js-v3-react-native-${packageInfo.name}/${packageInfo.version}`,
1512
sha256: Sha256,
1613
urlParser: parseUrl,
1714
};

Diff for: clients/client-accessanalyzer/runtimeConfig.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ export const ClientDefaultValues: Required<ClientDefaults> = {
2424
base64Encoder: toBase64,
2525
bodyLengthChecker: calculateBodyLength,
2626
credentialDefaultProvider,
27-
defaultUserAgent: defaultUserAgent(packageInfo.name, packageInfo.version),
27+
defaultUserAgentProvider: defaultUserAgent({
28+
serviceId: ClientSharedValues.serviceId,
29+
clientVersion: packageInfo.version,
30+
}),
2831
maxAttempts: loadNodeConfig(NODE_MAX_ATTEMPT_CONFIG_OPTIONS),
2932
region: loadNodeConfig(NODE_REGION_CONFIG_OPTIONS, NODE_REGION_CONFIG_FILE_OPTIONS),
3033
requestHandler: new NodeHttpHandler(),

Diff for: clients/client-acm-pca/ACMPCAClient.ts

+15-12
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ import {
9797
SmithyResolvedConfiguration as __SmithyResolvedConfiguration,
9898
} from "@aws-sdk/smithy-client";
9999
import {
100+
Provider,
100101
RegionInfoProvider,
101102
Credentials as __Credentials,
102103
Decoder as __Decoder,
@@ -107,6 +108,7 @@ import {
107108
Provider as __Provider,
108109
StreamCollector as __StreamCollector,
109110
UrlParser as __UrlParser,
111+
UserAgent as __UserAgent,
110112
} from "@aws-sdk/types";
111113

112114
export type ServiceInputTypes =
@@ -206,11 +208,6 @@ export interface ClientDefaults extends Partial<__SmithyResolvedConfiguration<__
206208
*/
207209
utf8Encoder?: __Encoder;
208210

209-
/**
210-
* The string that will be used to populate default value in 'User-Agent' header
211-
*/
212-
defaultUserAgent?: string;
213-
214211
/**
215212
* The runtime environment
216213
*/
@@ -252,6 +249,12 @@ export interface ClientDefaults extends Partial<__SmithyResolvedConfiguration<__
252249
* Fetch related hostname, signing name or signing region with given region.
253250
*/
254251
regionInfoProvider?: RegionInfoProvider;
252+
253+
/**
254+
* The provider populating default tracking information to be sent with `user-agent`, `x-amz-user-agent` header
255+
* @internal
256+
*/
257+
defaultUserAgentProvider?: Provider<__UserAgent>;
255258
}
256259

257260
export type ACMPCAClientConfig = Partial<__SmithyConfiguration<__HttpHandlerOptions>> &
@@ -260,17 +263,17 @@ export type ACMPCAClientConfig = Partial<__SmithyConfiguration<__HttpHandlerOpti
260263
EndpointsInputConfig &
261264
AwsAuthInputConfig &
262265
RetryInputConfig &
263-
UserAgentInputConfig &
264-
HostHeaderInputConfig;
266+
HostHeaderInputConfig &
267+
UserAgentInputConfig;
265268

266269
export type ACMPCAClientResolvedConfig = __SmithyResolvedConfiguration<__HttpHandlerOptions> &
267270
Required<ClientDefaults> &
268271
RegionResolvedConfig &
269272
EndpointsResolvedConfig &
270273
AwsAuthResolvedConfig &
271274
RetryResolvedConfig &
272-
UserAgentResolvedConfig &
273-
HostHeaderResolvedConfig;
275+
HostHeaderResolvedConfig &
276+
UserAgentResolvedConfig;
274277

275278
/**
276279
* <note>
@@ -307,16 +310,16 @@ export class ACMPCAClient extends __Client<
307310
let _config_2 = resolveEndpointsConfig(_config_1);
308311
let _config_3 = resolveAwsAuthConfig(_config_2);
309312
let _config_4 = resolveRetryConfig(_config_3);
310-
let _config_5 = resolveUserAgentConfig(_config_4);
311-
let _config_6 = resolveHostHeaderConfig(_config_5);
313+
let _config_5 = resolveHostHeaderConfig(_config_4);
314+
let _config_6 = resolveUserAgentConfig(_config_5);
312315
super(_config_6);
313316
this.config = _config_6;
314317
this.middlewareStack.use(getAwsAuthPlugin(this.config));
315318
this.middlewareStack.use(getRetryPlugin(this.config));
316-
this.middlewareStack.use(getUserAgentPlugin(this.config));
317319
this.middlewareStack.use(getContentLengthPlugin(this.config));
318320
this.middlewareStack.use(getHostHeaderPlugin(this.config));
319321
this.middlewareStack.use(getLoggerPlugin(this.config));
322+
this.middlewareStack.use(getUserAgentPlugin(this.config));
320323
}
321324

322325
destroy(): void {

Diff for: clients/client-acm-pca/runtimeConfig.browser.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ export const ClientDefaultValues: Required<ClientDefaults> = {
2222
base64Encoder: toBase64,
2323
bodyLengthChecker: calculateBodyLength,
2424
credentialDefaultProvider: invalidAsyncFunction("Credentialis missing") as any,
25-
defaultUserAgent: defaultUserAgent(packageInfo.name, packageInfo.version),
25+
defaultUserAgentProvider: defaultUserAgent({
26+
serviceId: ClientSharedValues.serviceId,
27+
clientVersion: packageInfo.version,
28+
}),
2629
maxAttempts: DEFAULT_MAX_ATTEMPTS,
2730
region: invalidAsyncFunction("Region is missing") as any,
2831
requestHandler: new FetchHttpHandler(),

Diff for: clients/client-acm-pca/runtimeConfig.native.ts

-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import packageInfo from "./package.json";
2-
31
import { Sha256 } from "@aws-crypto/sha256-js";
42
import { parseUrl } from "@aws-sdk/url-parser-node";
53
import { ClientDefaults } from "./ACMPCAClient";
@@ -11,7 +9,6 @@ import { ClientDefaultValues as BrowserDefaults } from "./runtimeConfig.browser"
119
export const ClientDefaultValues: Required<ClientDefaults> = {
1210
...BrowserDefaults,
1311
runtime: "react-native",
14-
defaultUserAgent: `aws-sdk-js-v3-react-native-${packageInfo.name}/${packageInfo.version}`,
1512
sha256: Sha256,
1613
urlParser: parseUrl,
1714
};

Diff for: clients/client-acm-pca/runtimeConfig.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ export const ClientDefaultValues: Required<ClientDefaults> = {
2424
base64Encoder: toBase64,
2525
bodyLengthChecker: calculateBodyLength,
2626
credentialDefaultProvider,
27-
defaultUserAgent: defaultUserAgent(packageInfo.name, packageInfo.version),
27+
defaultUserAgentProvider: defaultUserAgent({
28+
serviceId: ClientSharedValues.serviceId,
29+
clientVersion: packageInfo.version,
30+
}),
2831
maxAttempts: loadNodeConfig(NODE_MAX_ATTEMPT_CONFIG_OPTIONS),
2932
region: loadNodeConfig(NODE_REGION_CONFIG_OPTIONS, NODE_REGION_CONFIG_FILE_OPTIONS),
3033
requestHandler: new NodeHttpHandler(),

Diff for: clients/client-acm/ACMClient.ts

+15-12
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ import {
6666
SmithyResolvedConfiguration as __SmithyResolvedConfiguration,
6767
} from "@aws-sdk/smithy-client";
6868
import {
69+
Provider,
6970
RegionInfoProvider,
7071
Credentials as __Credentials,
7172
Decoder as __Decoder,
@@ -76,6 +77,7 @@ import {
7677
Provider as __Provider,
7778
StreamCollector as __StreamCollector,
7879
UrlParser as __UrlParser,
80+
UserAgent as __UserAgent,
7981
} from "@aws-sdk/types";
8082

8183
export type ServiceInputTypes =
@@ -155,11 +157,6 @@ export interface ClientDefaults extends Partial<__SmithyResolvedConfiguration<__
155157
*/
156158
utf8Encoder?: __Encoder;
157159

158-
/**
159-
* The string that will be used to populate default value in 'User-Agent' header
160-
*/
161-
defaultUserAgent?: string;
162-
163160
/**
164161
* The runtime environment
165162
*/
@@ -201,6 +198,12 @@ export interface ClientDefaults extends Partial<__SmithyResolvedConfiguration<__
201198
* Fetch related hostname, signing name or signing region with given region.
202199
*/
203200
regionInfoProvider?: RegionInfoProvider;
201+
202+
/**
203+
* The provider populating default tracking information to be sent with `user-agent`, `x-amz-user-agent` header
204+
* @internal
205+
*/
206+
defaultUserAgentProvider?: Provider<__UserAgent>;
204207
}
205208

206209
export type ACMClientConfig = Partial<__SmithyConfiguration<__HttpHandlerOptions>> &
@@ -209,17 +212,17 @@ export type ACMClientConfig = Partial<__SmithyConfiguration<__HttpHandlerOptions
209212
EndpointsInputConfig &
210213
AwsAuthInputConfig &
211214
RetryInputConfig &
212-
UserAgentInputConfig &
213-
HostHeaderInputConfig;
215+
HostHeaderInputConfig &
216+
UserAgentInputConfig;
214217

215218
export type ACMClientResolvedConfig = __SmithyResolvedConfiguration<__HttpHandlerOptions> &
216219
Required<ClientDefaults> &
217220
RegionResolvedConfig &
218221
EndpointsResolvedConfig &
219222
AwsAuthResolvedConfig &
220223
RetryResolvedConfig &
221-
UserAgentResolvedConfig &
222-
HostHeaderResolvedConfig;
224+
HostHeaderResolvedConfig &
225+
UserAgentResolvedConfig;
223226

224227
/**
225228
* <fullname>AWS Certificate Manager</fullname>
@@ -246,16 +249,16 @@ export class ACMClient extends __Client<
246249
let _config_2 = resolveEndpointsConfig(_config_1);
247250
let _config_3 = resolveAwsAuthConfig(_config_2);
248251
let _config_4 = resolveRetryConfig(_config_3);
249-
let _config_5 = resolveUserAgentConfig(_config_4);
250-
let _config_6 = resolveHostHeaderConfig(_config_5);
252+
let _config_5 = resolveHostHeaderConfig(_config_4);
253+
let _config_6 = resolveUserAgentConfig(_config_5);
251254
super(_config_6);
252255
this.config = _config_6;
253256
this.middlewareStack.use(getAwsAuthPlugin(this.config));
254257
this.middlewareStack.use(getRetryPlugin(this.config));
255-
this.middlewareStack.use(getUserAgentPlugin(this.config));
256258
this.middlewareStack.use(getContentLengthPlugin(this.config));
257259
this.middlewareStack.use(getHostHeaderPlugin(this.config));
258260
this.middlewareStack.use(getLoggerPlugin(this.config));
261+
this.middlewareStack.use(getUserAgentPlugin(this.config));
259262
}
260263

261264
destroy(): void {

Diff for: clients/client-acm/runtimeConfig.browser.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ export const ClientDefaultValues: Required<ClientDefaults> = {
2222
base64Encoder: toBase64,
2323
bodyLengthChecker: calculateBodyLength,
2424
credentialDefaultProvider: invalidAsyncFunction("Credentialis missing") as any,
25-
defaultUserAgent: defaultUserAgent(packageInfo.name, packageInfo.version),
25+
defaultUserAgentProvider: defaultUserAgent({
26+
serviceId: ClientSharedValues.serviceId,
27+
clientVersion: packageInfo.version,
28+
}),
2629
maxAttempts: DEFAULT_MAX_ATTEMPTS,
2730
region: invalidAsyncFunction("Region is missing") as any,
2831
requestHandler: new FetchHttpHandler(),

Diff for: clients/client-acm/runtimeConfig.native.ts

-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import packageInfo from "./package.json";
2-
31
import { Sha256 } from "@aws-crypto/sha256-js";
42
import { parseUrl } from "@aws-sdk/url-parser-node";
53
import { ClientDefaults } from "./ACMClient";
@@ -11,7 +9,6 @@ import { ClientDefaultValues as BrowserDefaults } from "./runtimeConfig.browser"
119
export const ClientDefaultValues: Required<ClientDefaults> = {
1210
...BrowserDefaults,
1311
runtime: "react-native",
14-
defaultUserAgent: `aws-sdk-js-v3-react-native-${packageInfo.name}/${packageInfo.version}`,
1512
sha256: Sha256,
1613
urlParser: parseUrl,
1714
};

Diff for: clients/client-acm/runtimeConfig.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ export const ClientDefaultValues: Required<ClientDefaults> = {
2424
base64Encoder: toBase64,
2525
bodyLengthChecker: calculateBodyLength,
2626
credentialDefaultProvider,
27-
defaultUserAgent: defaultUserAgent(packageInfo.name, packageInfo.version),
27+
defaultUserAgentProvider: defaultUserAgent({
28+
serviceId: ClientSharedValues.serviceId,
29+
clientVersion: packageInfo.version,
30+
}),
2831
maxAttempts: loadNodeConfig(NODE_MAX_ATTEMPT_CONFIG_OPTIONS),
2932
region: loadNodeConfig(NODE_REGION_CONFIG_OPTIONS, NODE_REGION_CONFIG_FILE_OPTIONS),
3033
requestHandler: new NodeHttpHandler(),

0 commit comments

Comments
 (0)