Skip to content

Commit bcfa47f

Browse files
committed
chore(middleware-user-agent): update to user agent 2.1 spec
1 parent dddd164 commit bcfa47f

File tree

3 files changed

+118
-0
lines changed

3 files changed

+118
-0
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { encodeMetrics } from "./encode-metrics";
2+
3+
describe(encodeMetrics.name, () => {
4+
it("encodes empty metrics", () => {
5+
expect(encodeMetrics({})).toEqual("");
6+
});
7+
8+
it("encodes metrics", () => {
9+
expect(
10+
encodeMetrics({
11+
A: "A",
12+
z: "z",
13+
} as any)
14+
).toEqual("A,z");
15+
});
16+
17+
it("drops values that would exceed 1024 bytes", () => {
18+
expect(
19+
encodeMetrics({
20+
A: "A".repeat(512),
21+
B: "B".repeat(511),
22+
z: "z",
23+
} as any)
24+
).toEqual("A".repeat(512) + "," + "B".repeat(511));
25+
});
26+
});
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import type { AwsSdkFeatures } from "@aws-sdk/types";
2+
3+
const BYTE_LIMIT = 1024;
4+
5+
export function encodeMetrics(metrics: AwsSdkFeatures): string {
6+
let buffer = "";
7+
8+
// currently all possible values are 1 byte,
9+
// so string length is used.
10+
11+
for (const key in metrics) {
12+
const val = metrics[key as keyof typeof metrics]!;
13+
if (buffer.length + val!.length + 1 <= BYTE_LIMIT) {
14+
if (buffer.length) {
15+
buffer += "," + val;
16+
} else {
17+
buffer += val;
18+
}
19+
continue;
20+
}
21+
break;
22+
}
23+
24+
return buffer;
25+
}

packages/types/src/middleware.ts

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { HandlerExecutionContext } from "@smithy/types";
2+
13
export {
24
AbsoluteLocation,
35
BuildHandler,
@@ -38,3 +40,68 @@ export {
3840
Step,
3941
Terminalware,
4042
} from "@smithy/types";
43+
44+
/**
45+
* @internal
46+
* Contains reserved keys for AWS SDK internal usage of the
47+
* handler execution context object.
48+
*/
49+
export interface AwsHandlerExecutionContext extends HandlerExecutionContext {
50+
__aws_sdk_context?: {
51+
features?: Partial<{
52+
RESOURCE_MODEL: "A";
53+
WAITER: "B";
54+
PAGINATOR: "C";
55+
RETRY_MODE_LEGACY: "D";
56+
RETRY_MODE_STANDARD: "E";
57+
RETRY_MODE_ADAPTIVE: "F";
58+
// S3_TRANSFER: "G"; // not applicable.
59+
// S3_CRYPTO_V1N: "H"; // not applicable.
60+
// S3_CRYPTO_V2: "I"; // not applicable.
61+
S3_EXPRESS_BUCKET: "J";
62+
S3_ACCESS_GRANTS: "K";
63+
GZIP_REQUEST_COMPRESSION: "L";
64+
PROTOCOL_RPC_V2_CBOR: "M";
65+
ENDPOINT_OVERRIDE: "N";
66+
ACCOUNT_ID_ENDPOINT: "O";
67+
ACCOUNT_ID_MODE_PREFERRED: "P";
68+
ACCOUNT_ID_MODE_DISABLED: "Q";
69+
ACCOUNT_ID_MODE_REQUIRED: "R";
70+
SIGV4A_SIGNING: "S";
71+
RESOLVED_ACCOUNT_ID: "T";
72+
FLEXIBLE_CHECKSUMS_REQ_CRC32: "U";
73+
FLEXIBLE_CHECKSUMS_REQ_CRC32C: "V";
74+
FLEXIBLE_CHECKSUMS_REQ_CRC64: "W";
75+
FLEXIBLE_CHECKSUMS_REQ_SHA1: "X";
76+
FLEXIBLE_CHECKSUMS_REQ_SHA256: "Y";
77+
FLEXIBLE_CHECKSUMS_REQ_WHEN_SUPPORTED: "Z";
78+
FLEXIBLE_CHECKSUMS_REQ_WHEN_REQUIRED: "a";
79+
FLEXIBLE_CHECKSUMS_RES_WHEN_SUPPORTED: "b";
80+
FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED: "c";
81+
DDB_MAPPER: "d";
82+
CREDENTIALS_CODE: "e";
83+
// CREDENTIALS_JVM_SYSTEM_PROPERTIES: "f"; // not applicable.
84+
CREDENTIALS_ENV_VARS: "g";
85+
CREDENTIALS_ENV_VARS_STS_WEB_ID_TOKEN: "h";
86+
CREDENTIALS_STS_ASSUME_ROLE: "i";
87+
CREDENTIALS_STS_ASSUME_ROLE_SAML: "j";
88+
CREDENTIALS_STS_ASSUME_ROLE_WEB_ID: "k";
89+
CREDENTIALS_STS_FEDERATION_TOKEN: "l";
90+
CREDENTIALS_STS_SESSION_TOKEN: "m";
91+
CREDENTIALS_PROFILE: "n";
92+
CREDENTIALS_PROFILE_SOURCE_PROFILE: "o";
93+
CREDENTIALS_PROFILE_NAMED_PROVIDER: "p";
94+
CREDENTIALS_PROFILE_STS_WEB_ID_TOKEN: "q";
95+
CREDENTIALS_PROFILE_SSO: "r";
96+
CREDENTIALS_SSO: "s";
97+
CREDENTIALS_PROFILE_SSO_LEGACY: "t";
98+
CREDENTIALS_SSO_LEGACY: "u";
99+
CREDENTIALS_PROFILE_PROCESS: "v";
100+
CREDENTIALS_PROCESS: "w";
101+
CREDENTIALS_BOTO2_CONFIG_FILE: "x";
102+
CREDENTIALS_AWS_SDK_STORE: "y";
103+
CREDENTIALS_HTTP: "z";
104+
CREDENTIALS_IMDS: "0";
105+
}>;
106+
};
107+
}

0 commit comments

Comments
 (0)