Skip to content

Commit f9835ae

Browse files
committed
chore: merge changes in node-http-handler from #317
1 parent 1bb6e37 commit f9835ae

File tree

2 files changed

+35
-39
lines changed

2 files changed

+35
-39
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { HeaderBag } from "@aws-sdk/types";
2+
import { IncomingHttpHeaders } from "http2";
3+
4+
const getTransformedHeaders = (headers: IncomingHttpHeaders) => {
5+
const transformedHeaders: HeaderBag = {};
6+
7+
for (let name of Object.keys(headers)) {
8+
let headerValues = <string>headers[name];
9+
transformedHeaders[name] = Array.isArray(headerValues)
10+
? headerValues.join(",")
11+
: headerValues;
12+
}
13+
14+
return transformedHeaders;
15+
};
16+
17+
export { getTransformedHeaders };

packages/node-http-handler/src/node-http-handler.ts

Lines changed: 18 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { HttpHandler, HttpRequest, HttpResponse } from "@aws-sdk/protocol-http";
77
import { setConnectionTimeout } from "./set-connection-timeout";
88
import { setSocketTimeout } from "./set-socket-timeout";
99
import { writeRequestBody } from "./write-request-body";
10+
import { getTransformedHeaders } from "./get-transformed-headers";
1011

1112
export class NodeHttpHandler implements HttpHandler {
1213
private readonly httpAgent: http.Agent;
@@ -25,33 +26,9 @@ export class NodeHttpHandler implements HttpHandler {
2526

2627
handle(
2728
request: HttpRequest,
28-
options: HttpOptions
29+
{ abortSignal }: HttpOptions
2930
): Promise<{ response: HttpResponse }> {
30-
// determine which http(s) client to use
31-
const isSSL = request.protocol === "https:";
32-
const httpClient = isSSL ? https : http;
33-
34-
let path = request.path;
35-
if (request.query) {
36-
const queryString = buildQueryString(request.query);
37-
if (queryString) {
38-
path += `?${queryString}`;
39-
}
40-
}
41-
42-
const nodeHttpsOptions: https.RequestOptions = {
43-
headers: request.headers,
44-
host: request.hostname,
45-
method: request.method,
46-
path: path,
47-
port: request.port,
48-
agent: isSSL ? this.httpsAgent : this.httpAgent
49-
};
50-
5131
return new Promise((resolve, reject) => {
52-
const abortSignal = options && options.abortSignal;
53-
const { connectionTimeout, socketTimeout } = this.httpOptions;
54-
5532
// if the request was already aborted, prevent doing extra work
5633
if (abortSignal && abortSignal.aborted) {
5734
const abortError = new Error("Request aborted");
@@ -60,21 +37,23 @@ export class NodeHttpHandler implements HttpHandler {
6037
return;
6138
}
6239

63-
// create the http request
64-
const req = (httpClient as typeof http).request(nodeHttpsOptions, res => {
65-
const httpHeaders = res.headers;
66-
const transformedHeaders: HeaderBag = {};
67-
68-
for (let name of Object.keys(httpHeaders)) {
69-
let headerValues = <string>httpHeaders[name];
70-
transformedHeaders[name] = Array.isArray(headerValues)
71-
? headerValues.join(",")
72-
: headerValues;
73-
}
40+
// determine which http(s) client to use
41+
const isSSL = request.protocol === "https:";
42+
const queryString = buildQueryString(request.query || {});
43+
const nodeHttpsOptions: https.RequestOptions = {
44+
headers: request.headers,
45+
host: request.hostname,
46+
method: request.method,
47+
path: queryString ? `${request.path}?${queryString}` : request.path,
48+
port: request.port,
49+
agent: isSSL ? this.httpsAgent : this.httpAgent
50+
};
7451

52+
// create the http request
53+
const req = (isSSL ? https : http).request(nodeHttpsOptions, res => {
7554
const httpResponse = new HttpResponse({
7655
statusCode: res.statusCode || -1,
77-
headers: transformedHeaders,
56+
headers: getTransformedHeaders(res.headers),
7857
body: res
7958
});
8059
resolve({ response: httpResponse });
@@ -83,8 +62,8 @@ export class NodeHttpHandler implements HttpHandler {
8362
req.on("error", reject);
8463

8564
// wire-up any timeout logic
86-
setConnectionTimeout(req, reject, connectionTimeout);
87-
setSocketTimeout(req, reject, socketTimeout);
65+
setConnectionTimeout(req, reject, this.httpOptions.connectionTimeout);
66+
setSocketTimeout(req, reject, this.httpOptions.socketTimeout);
8867

8968
// wire-up abort logic
9069
if (abortSignal) {

0 commit comments

Comments
 (0)