Skip to content

Commit 657c5c2

Browse files
committed
fix(clients): lowercase header prefix
1 parent f4eadfb commit 657c5c2

File tree

5 files changed

+185
-170
lines changed

5 files changed

+185
-170
lines changed

clients/client-s3/protocols/Aws_restXml.ts

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -592,10 +592,13 @@ export const serializeAws_restXmlCopyObjectCommand = async (
592592
"x-amz-source-expected-bucket-owner": input.ExpectedSourceBucketOwner!,
593593
}),
594594
...(input.Metadata !== undefined &&
595-
Object.keys(input.Metadata).reduce((acc: any, suffix: string) => {
596-
acc["x-amz-meta-" + suffix] = input.Metadata![suffix];
597-
return acc;
598-
}, {})),
595+
Object.keys(input.Metadata).reduce(
596+
(acc: any, suffix: string) => ({
597+
...acc,
598+
[`x-amz-meta-${suffix.toLowerCase()}`]: input.Metadata![suffix],
599+
}),
600+
{}
601+
)),
599602
};
600603
let resolvedPath = "/{Bucket}/{Key+}";
601604
if (input.Bucket !== undefined) {
@@ -741,10 +744,13 @@ export const serializeAws_restXmlCreateMultipartUploadCommand = async (
741744
"x-amz-expected-bucket-owner": input.ExpectedBucketOwner!,
742745
}),
743746
...(input.Metadata !== undefined &&
744-
Object.keys(input.Metadata).reduce((acc: any, suffix: string) => {
745-
acc["x-amz-meta-" + suffix] = input.Metadata![suffix];
746-
return acc;
747-
}, {})),
747+
Object.keys(input.Metadata).reduce(
748+
(acc: any, suffix: string) => ({
749+
...acc,
750+
[`x-amz-meta-${suffix.toLowerCase()}`]: input.Metadata![suffix],
751+
}),
752+
{}
753+
)),
748754
};
749755
let resolvedPath = "/{Bucket}/{Key+}";
750756
if (input.Bucket !== undefined) {
@@ -3954,10 +3960,13 @@ export const serializeAws_restXmlPutObjectCommand = async (
39543960
"x-amz-expected-bucket-owner": input.ExpectedBucketOwner!,
39553961
}),
39563962
...(input.Metadata !== undefined &&
3957-
Object.keys(input.Metadata).reduce((acc: any, suffix: string) => {
3958-
acc["x-amz-meta-" + suffix] = input.Metadata![suffix];
3959-
return acc;
3960-
}, {})),
3963+
Object.keys(input.Metadata).reduce(
3964+
(acc: any, suffix: string) => ({
3965+
...acc,
3966+
[`x-amz-meta-${suffix.toLowerCase()}`]: input.Metadata![suffix],
3967+
}),
3968+
{}
3969+
)),
39613970
};
39623971
let resolvedPath = "/{Bucket}/{Key+}";
39633972
if (input.Bucket !== undefined) {

protocol_tests/aws-restjson/protocols/Aws_restJson1.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -371,10 +371,13 @@ export const serializeAws_restJson1HttpPrefixHeadersCommand = async (
371371
const headers: any = {
372372
...(isSerializableHeaderValue(input.foo) && { "x-foo": input.foo! }),
373373
...(input.fooMap !== undefined &&
374-
Object.keys(input.fooMap).reduce((acc: any, suffix: string) => {
375-
acc["x-foo-" + suffix] = input.fooMap![suffix];
376-
return acc;
377-
}, {})),
374+
Object.keys(input.fooMap).reduce(
375+
(acc: any, suffix: string) => ({
376+
...acc,
377+
[`x-foo-${suffix.toLowerCase()}`]: input.fooMap![suffix],
378+
}),
379+
{}
380+
)),
378381
};
379382
let resolvedPath = "/HttpPrefixHeaders";
380383
let body: any;

protocol_tests/aws-restjson/tests/functional/restjson1.spec.ts

Lines changed: 79 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -952,8 +952,8 @@ it("RestJsonHttpPayloadTraitsWithBlob:Request", async () => {
952952
expect(r.path).toBe("/HttpPayloadTraits");
953953
expect(r.headers["content-length"]).toBeDefined();
954954

955-
expect(r.headers["X-Foo"]).toBeDefined();
956-
expect(r.headers["X-Foo"]).toBe("Foo");
955+
expect(r.headers["x-foo"]).toBeDefined();
956+
expect(r.headers["x-foo"]).toBe("Foo");
957957

958958
expect(r.body).toBeDefined();
959959
expect(r.body).toMatchObject(Uint8Array.from("blobby blob blob", (c) => c.charCodeAt(0)));
@@ -985,8 +985,8 @@ it("RestJsonHttpPayloadTraitsWithNoBlobBody:Request", async () => {
985985
expect(r.method).toBe("POST");
986986
expect(r.path).toBe("/HttpPayloadTraits");
987987

988-
expect(r.headers["X-Foo"]).toBeDefined();
989-
expect(r.headers["X-Foo"]).toBe("Foo");
988+
expect(r.headers["x-foo"]).toBeDefined();
989+
expect(r.headers["x-foo"]).toBe("Foo");
990990

991991
expect(r.body).toBeFalsy();
992992
}
@@ -1100,8 +1100,8 @@ it("RestJsonHttpPayloadTraitsWithMediaTypeWithBlob:Request", async () => {
11001100

11011101
expect(r.headers["content-type"]).toBeDefined();
11021102
expect(r.headers["content-type"]).toBe("text/plain");
1103-
expect(r.headers["X-Foo"]).toBeDefined();
1104-
expect(r.headers["X-Foo"]).toBe("Foo");
1103+
expect(r.headers["x-foo"]).toBeDefined();
1104+
expect(r.headers["x-foo"]).toBe("Foo");
11051105

11061106
expect(r.body).toBeDefined();
11071107
expect(r.body).toMatchObject(Uint8Array.from("blobby blob blob", (c) => c.charCodeAt(0)));
@@ -1268,12 +1268,12 @@ it("RestJsonHttpPrefixHeadersArePresent:Request", async () => {
12681268
expect(r.method).toBe("GET");
12691269
expect(r.path).toBe("/HttpPrefixHeaders");
12701270

1271-
expect(r.headers["X-Foo"]).toBeDefined();
1272-
expect(r.headers["X-Foo"]).toBe("Foo");
1273-
expect(r.headers["X-Foo-Abc"]).toBeDefined();
1274-
expect(r.headers["X-Foo-Abc"]).toBe("Abc value");
1275-
expect(r.headers["X-Foo-Def"]).toBeDefined();
1276-
expect(r.headers["X-Foo-Def"]).toBe("Def value");
1271+
expect(r.headers["x-foo"]).toBeDefined();
1272+
expect(r.headers["x-foo"]).toBe("Foo");
1273+
expect(r.headers["x-foo-abc"]).toBeDefined();
1274+
expect(r.headers["x-foo-abc"]).toBe("Abc value");
1275+
expect(r.headers["x-foo-def"]).toBeDefined();
1276+
expect(r.headers["x-foo-def"]).toBe("Def value");
12771277

12781278
expect(r.body).toBeFalsy();
12791279
}
@@ -1306,8 +1306,8 @@ it("RestJsonHttpPrefixHeadersAreNotPresent:Request", async () => {
13061306
expect(r.method).toBe("GET");
13071307
expect(r.path).toBe("/HttpPrefixHeaders");
13081308

1309-
expect(r.headers["X-Foo"]).toBeDefined();
1310-
expect(r.headers["X-Foo"]).toBe("Foo");
1309+
expect(r.headers["x-foo"]).toBeDefined();
1310+
expect(r.headers["x-foo"]).toBe("Foo");
13111311

13121312
expect(r.body).toBeFalsy();
13131313
}
@@ -1787,12 +1787,12 @@ it("RestJsonInputAndOutputWithStringHeaders:Request", async () => {
17871787
expect(r.method).toBe("POST");
17881788
expect(r.path).toBe("/InputAndOutputWithHeaders");
17891789

1790-
expect(r.headers["X-String"]).toBeDefined();
1791-
expect(r.headers["X-String"]).toBe("Hello");
1792-
expect(r.headers["X-StringList"]).toBeDefined();
1793-
expect(r.headers["X-StringList"]).toBe("a, b, c");
1794-
expect(r.headers["X-StringSet"]).toBeDefined();
1795-
expect(r.headers["X-StringSet"]).toBe("a, b, c");
1790+
expect(r.headers["x-string"]).toBeDefined();
1791+
expect(r.headers["x-string"]).toBe("Hello");
1792+
expect(r.headers["x-stringlist"]).toBeDefined();
1793+
expect(r.headers["x-stringlist"]).toBe("a, b, c");
1794+
expect(r.headers["x-stringset"]).toBeDefined();
1795+
expect(r.headers["x-stringset"]).toBe("a, b, c");
17961796

17971797
expect(r.body).toBeFalsy();
17981798
}
@@ -1835,20 +1835,20 @@ it("RestJsonInputAndOutputWithNumericHeaders:Request", async () => {
18351835
expect(r.method).toBe("POST");
18361836
expect(r.path).toBe("/InputAndOutputWithHeaders");
18371837

1838-
expect(r.headers["X-Byte"]).toBeDefined();
1839-
expect(r.headers["X-Byte"]).toBe("1");
1840-
expect(r.headers["X-Double"]).toBeDefined();
1841-
expect(r.headers["X-Double"]).toBe("1.1");
1842-
expect(r.headers["X-Float"]).toBeDefined();
1843-
expect(r.headers["X-Float"]).toBe("1.1");
1844-
expect(r.headers["X-Integer"]).toBeDefined();
1845-
expect(r.headers["X-Integer"]).toBe("123");
1846-
expect(r.headers["X-IntegerList"]).toBeDefined();
1847-
expect(r.headers["X-IntegerList"]).toBe("1, 2, 3");
1848-
expect(r.headers["X-Long"]).toBeDefined();
1849-
expect(r.headers["X-Long"]).toBe("123");
1850-
expect(r.headers["X-Short"]).toBeDefined();
1851-
expect(r.headers["X-Short"]).toBe("123");
1838+
expect(r.headers["x-byte"]).toBeDefined();
1839+
expect(r.headers["x-byte"]).toBe("1");
1840+
expect(r.headers["x-double"]).toBeDefined();
1841+
expect(r.headers["x-double"]).toBe("1.1");
1842+
expect(r.headers["x-float"]).toBeDefined();
1843+
expect(r.headers["x-float"]).toBe("1.1");
1844+
expect(r.headers["x-integer"]).toBeDefined();
1845+
expect(r.headers["x-integer"]).toBe("123");
1846+
expect(r.headers["x-integerlist"]).toBeDefined();
1847+
expect(r.headers["x-integerlist"]).toBe("1, 2, 3");
1848+
expect(r.headers["x-long"]).toBeDefined();
1849+
expect(r.headers["x-long"]).toBe("123");
1850+
expect(r.headers["x-short"]).toBeDefined();
1851+
expect(r.headers["x-short"]).toBe("123");
18521852

18531853
expect(r.body).toBeFalsy();
18541854
}
@@ -1883,12 +1883,12 @@ it("RestJsonInputAndOutputWithBooleanHeaders:Request", async () => {
18831883
expect(r.method).toBe("POST");
18841884
expect(r.path).toBe("/InputAndOutputWithHeaders");
18851885

1886-
expect(r.headers["X-Boolean1"]).toBeDefined();
1887-
expect(r.headers["X-Boolean1"]).toBe("true");
1888-
expect(r.headers["X-Boolean2"]).toBeDefined();
1889-
expect(r.headers["X-Boolean2"]).toBe("false");
1890-
expect(r.headers["X-BooleanList"]).toBeDefined();
1891-
expect(r.headers["X-BooleanList"]).toBe("true, false, true");
1886+
expect(r.headers["x-boolean1"]).toBeDefined();
1887+
expect(r.headers["x-boolean1"]).toBe("true");
1888+
expect(r.headers["x-boolean2"]).toBeDefined();
1889+
expect(r.headers["x-boolean2"]).toBe("false");
1890+
expect(r.headers["x-booleanlist"]).toBeDefined();
1891+
expect(r.headers["x-booleanlist"]).toBe("true, false, true");
18921892

18931893
expect(r.body).toBeFalsy();
18941894
}
@@ -1919,8 +1919,8 @@ it("RestJsonInputAndOutputWithTimestampHeaders:Request", async () => {
19191919
expect(r.method).toBe("POST");
19201920
expect(r.path).toBe("/InputAndOutputWithHeaders");
19211921

1922-
expect(r.headers["X-TimestampList"]).toBeDefined();
1923-
expect(r.headers["X-TimestampList"]).toBe("Mon, 16 Dec 2019 23:48:18 GMT, Mon, 16 Dec 2019 23:48:18 GMT");
1922+
expect(r.headers["x-timestamplist"]).toBeDefined();
1923+
expect(r.headers["x-timestamplist"]).toBe("Mon, 16 Dec 2019 23:48:18 GMT, Mon, 16 Dec 2019 23:48:18 GMT");
19241924

19251925
expect(r.body).toBeFalsy();
19261926
}
@@ -1953,10 +1953,10 @@ it("RestJsonInputAndOutputWithEnumHeaders:Request", async () => {
19531953
expect(r.method).toBe("POST");
19541954
expect(r.path).toBe("/InputAndOutputWithHeaders");
19551955

1956-
expect(r.headers["X-Enum"]).toBeDefined();
1957-
expect(r.headers["X-Enum"]).toBe("Foo");
1958-
expect(r.headers["X-EnumList"]).toBeDefined();
1959-
expect(r.headers["X-EnumList"]).toBe("Foo, Bar, Baz");
1956+
expect(r.headers["x-enum"]).toBeDefined();
1957+
expect(r.headers["x-enum"]).toBe("Foo");
1958+
expect(r.headers["x-enumlist"]).toBeDefined();
1959+
expect(r.headers["x-enumlist"]).toBe("Foo, Bar, Baz");
19601960

19611961
expect(r.body).toBeFalsy();
19621962
}
@@ -2017,8 +2017,8 @@ it("RestJsonInputAndOutputWithNumericHeaders:Response", async () => {
20172017
200,
20182018
{
20192019
"x-float": "1.1",
2020-
"x-byte": "1",
20212020
"x-long": "123",
2021+
"x-byte": "1",
20222022
"x-integer": "123",
20232023
"x-integerlist": "1, 2, 3",
20242024
"x-double": "1.1",
@@ -4295,8 +4295,8 @@ it("MediaTypeHeaderInputBase64:Request", async () => {
42954295
expect(r.method).toBe("GET");
42964296
expect(r.path).toBe("/MediaTypeHeader");
42974297

4298-
expect(r.headers["X-Json"]).toBeDefined();
4299-
expect(r.headers["X-Json"]).toBe("dHJ1ZQ==");
4298+
expect(r.headers["x-json"]).toBeDefined();
4299+
expect(r.headers["x-json"]).toBe("dHJ1ZQ==");
43004300

43014301
expect(r.body).toBeFalsy();
43024302
}
@@ -4463,9 +4463,9 @@ it("RestJsonNullAndEmptyHeaders:Request", async () => {
44634463
expect(r.method).toBe("GET");
44644464
expect(r.path).toBe("/NullAndEmptyHeadersClient");
44654465

4466-
expect(r.headers["X-A"]).toBeUndefined();
4467-
expect(r.headers["X-B"]).toBeUndefined();
4468-
expect(r.headers["X-C"]).toBeUndefined();
4466+
expect(r.headers["x-a"]).toBeUndefined();
4467+
expect(r.headers["x-b"]).toBeUndefined();
4468+
expect(r.headers["x-c"]).toBeUndefined();
44694469

44704470
expect(r.body).toBeFalsy();
44714471
}
@@ -4741,8 +4741,8 @@ it("RestJsonSimpleScalarProperties:Request", async () => {
47414741

47424742
expect(r.headers["content-type"]).toBeDefined();
47434743
expect(r.headers["content-type"]).toBe("application/json");
4744-
expect(r.headers["X-Foo"]).toBeDefined();
4745-
expect(r.headers["X-Foo"]).toBe("Foo");
4744+
expect(r.headers["x-foo"]).toBeDefined();
4745+
expect(r.headers["x-foo"]).toBe("Foo");
47464746

47474747
expect(r.body).toBeDefined();
47484748
const bodyString = `{
@@ -4921,8 +4921,8 @@ it("RestJsonStreamingTraitsWithBlob:Request", async () => {
49214921

49224922
expect(r.headers["content-type"]).toBeDefined();
49234923
expect(r.headers["content-type"]).toBe("application/octet-stream");
4924-
expect(r.headers["X-Foo"]).toBeDefined();
4925-
expect(r.headers["X-Foo"]).toBe("Foo");
4924+
expect(r.headers["x-foo"]).toBeDefined();
4925+
expect(r.headers["x-foo"]).toBe("Foo");
49264926

49274927
expect(r.body).toBeDefined();
49284928
expect(r.body).toMatchObject(Uint8Array.from("blobby blob blob", (c) => c.charCodeAt(0)));
@@ -4954,8 +4954,8 @@ it("RestJsonStreamingTraitsWithNoBlobBody:Request", async () => {
49544954
expect(r.method).toBe("POST");
49554955
expect(r.path).toBe("/StreamingTraits");
49564956

4957-
expect(r.headers["X-Foo"]).toBeDefined();
4958-
expect(r.headers["X-Foo"]).toBe("Foo");
4957+
expect(r.headers["x-foo"]).toBeDefined();
4958+
expect(r.headers["x-foo"]).toBe("Foo");
49594959

49604960
expect(r.body).toBeFalsy();
49614961
}
@@ -5080,8 +5080,8 @@ it("RestJsonStreamingTraitsRequireLengthWithBlob:Request", async () => {
50805080

50815081
expect(r.headers["content-type"]).toBeDefined();
50825082
expect(r.headers["content-type"]).toBe("application/octet-stream");
5083-
expect(r.headers["X-Foo"]).toBeDefined();
5084-
expect(r.headers["X-Foo"]).toBe("Foo");
5083+
expect(r.headers["x-foo"]).toBeDefined();
5084+
expect(r.headers["x-foo"]).toBe("Foo");
50855085

50865086
expect(r.body).toBeDefined();
50875087
expect(r.body).toMatchObject(Uint8Array.from("blobby blob blob", (c) => c.charCodeAt(0)));
@@ -5113,8 +5113,8 @@ it("RestJsonStreamingTraitsRequireLengthWithNoBlobBody:Request", async () => {
51135113
expect(r.method).toBe("POST");
51145114
expect(r.path).toBe("/StreamingTraitsRequireLength");
51155115

5116-
expect(r.headers["X-Foo"]).toBeDefined();
5117-
expect(r.headers["X-Foo"]).toBe("Foo");
5116+
expect(r.headers["x-foo"]).toBeDefined();
5117+
expect(r.headers["x-foo"]).toBe("Foo");
51185118

51195119
expect(r.body).toBeFalsy();
51205120
}
@@ -5238,8 +5238,8 @@ it("RestJsonStreamingTraitsWithMediaTypeWithBlob:Request", async () => {
52385238

52395239
expect(r.headers["content-type"]).toBeDefined();
52405240
expect(r.headers["content-type"]).toBe("text/plain");
5241-
expect(r.headers["X-Foo"]).toBeDefined();
5242-
expect(r.headers["X-Foo"]).toBe("Foo");
5241+
expect(r.headers["x-foo"]).toBeDefined();
5242+
expect(r.headers["x-foo"]).toBe("Foo");
52435243

52445244
expect(r.body).toBeDefined();
52455245
expect(r.body).toMatchObject(Uint8Array.from("blobby blob blob", (c) => c.charCodeAt(0)));
@@ -5329,20 +5329,20 @@ it("RestJsonTimestampFormatHeaders:Request", async () => {
53295329
expect(r.method).toBe("POST");
53305330
expect(r.path).toBe("/TimestampFormatHeaders");
53315331

5332-
expect(r.headers["X-defaultFormat"]).toBeDefined();
5333-
expect(r.headers["X-defaultFormat"]).toBe("Mon, 16 Dec 2019 23:48:18 GMT");
5334-
expect(r.headers["X-memberDateTime"]).toBeDefined();
5335-
expect(r.headers["X-memberDateTime"]).toBe("2019-12-16T23:48:18Z");
5336-
expect(r.headers["X-memberEpochSeconds"]).toBeDefined();
5337-
expect(r.headers["X-memberEpochSeconds"]).toBe("1576540098");
5338-
expect(r.headers["X-memberHttpDate"]).toBeDefined();
5339-
expect(r.headers["X-memberHttpDate"]).toBe("Mon, 16 Dec 2019 23:48:18 GMT");
5340-
expect(r.headers["X-targetDateTime"]).toBeDefined();
5341-
expect(r.headers["X-targetDateTime"]).toBe("2019-12-16T23:48:18Z");
5342-
expect(r.headers["X-targetEpochSeconds"]).toBeDefined();
5343-
expect(r.headers["X-targetEpochSeconds"]).toBe("1576540098");
5344-
expect(r.headers["X-targetHttpDate"]).toBeDefined();
5345-
expect(r.headers["X-targetHttpDate"]).toBe("Mon, 16 Dec 2019 23:48:18 GMT");
5332+
expect(r.headers["x-defaultformat"]).toBeDefined();
5333+
expect(r.headers["x-defaultformat"]).toBe("Mon, 16 Dec 2019 23:48:18 GMT");
5334+
expect(r.headers["x-memberdatetime"]).toBeDefined();
5335+
expect(r.headers["x-memberdatetime"]).toBe("2019-12-16T23:48:18Z");
5336+
expect(r.headers["x-memberepochseconds"]).toBeDefined();
5337+
expect(r.headers["x-memberepochseconds"]).toBe("1576540098");
5338+
expect(r.headers["x-memberhttpdate"]).toBeDefined();
5339+
expect(r.headers["x-memberhttpdate"]).toBe("Mon, 16 Dec 2019 23:48:18 GMT");
5340+
expect(r.headers["x-targetdatetime"]).toBeDefined();
5341+
expect(r.headers["x-targetdatetime"]).toBe("2019-12-16T23:48:18Z");
5342+
expect(r.headers["x-targetepochseconds"]).toBeDefined();
5343+
expect(r.headers["x-targetepochseconds"]).toBe("1576540098");
5344+
expect(r.headers["x-targethttpdate"]).toBeDefined();
5345+
expect(r.headers["x-targethttpdate"]).toBe("Mon, 16 Dec 2019 23:48:18 GMT");
53465346

53475347
expect(r.body).toBeFalsy();
53485348
}
@@ -5360,8 +5360,8 @@ it("RestJsonTimestampFormatHeaders:Response", async () => {
53605360
{
53615361
"x-targetepochseconds": "1576540098",
53625362
"x-memberdatetime": "2019-12-16T23:48:18Z",
5363-
"x-defaultformat": "Mon, 16 Dec 2019 23:48:18 GMT",
53645363
"x-memberepochseconds": "1576540098",
5364+
"x-defaultformat": "Mon, 16 Dec 2019 23:48:18 GMT",
53655365
"x-targethttpdate": "Mon, 16 Dec 2019 23:48:18 GMT",
53665366
"x-memberhttpdate": "Mon, 16 Dec 2019 23:48:18 GMT",
53675367
"x-targetdatetime": "2019-12-16T23:48:18Z",

protocol_tests/aws-restxml/protocols/Aws_restXml.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -556,10 +556,13 @@ export const serializeAws_restXmlHttpPrefixHeadersCommand = async (
556556
const headers: any = {
557557
...(isSerializableHeaderValue(input.foo) && { "x-foo": input.foo! }),
558558
...(input.fooMap !== undefined &&
559-
Object.keys(input.fooMap).reduce((acc: any, suffix: string) => {
560-
acc["x-foo-" + suffix] = input.fooMap![suffix];
561-
return acc;
562-
}, {})),
559+
Object.keys(input.fooMap).reduce(
560+
(acc: any, suffix: string) => ({
561+
...acc,
562+
[`x-foo-${suffix.toLowerCase()}`]: input.fooMap![suffix],
563+
}),
564+
{}
565+
)),
563566
};
564567
let resolvedPath = "/HttpPrefixHeaders";
565568
let body: any;

0 commit comments

Comments
 (0)