@smithy/node-http-handler
Advanced tools
Comparing version 3.1.4 to 3.2.0
@@ -60,41 +60,77 @@ var __create = Object.create; | ||
// src/set-connection-timeout.ts | ||
var DEFER_EVENT_LISTENER_TIME = 1e3; | ||
var setConnectionTimeout = /* @__PURE__ */ __name((request, reject, timeoutInMs = 0) => { | ||
if (!timeoutInMs) { | ||
return; | ||
return -1; | ||
} | ||
const timeoutId = setTimeout(() => { | ||
request.destroy(); | ||
reject( | ||
Object.assign(new Error(`Socket timed out without establishing a connection within ${timeoutInMs} ms`), { | ||
name: "TimeoutError" | ||
}) | ||
); | ||
}, timeoutInMs); | ||
request.on("socket", (socket) => { | ||
if (socket.connecting) { | ||
socket.on("connect", () => { | ||
const registerTimeout = /* @__PURE__ */ __name((offset) => { | ||
const timeoutId = setTimeout(() => { | ||
request.destroy(); | ||
reject( | ||
Object.assign(new Error(`Socket timed out without establishing a connection within ${timeoutInMs} ms`), { | ||
name: "TimeoutError" | ||
}) | ||
); | ||
}, timeoutInMs - offset); | ||
const doWithSocket = /* @__PURE__ */ __name((socket) => { | ||
if (socket == null ? void 0 : socket.connecting) { | ||
socket.on("connect", () => { | ||
clearTimeout(timeoutId); | ||
}); | ||
} else { | ||
clearTimeout(timeoutId); | ||
}); | ||
} | ||
}, "doWithSocket"); | ||
if (request.socket) { | ||
doWithSocket(request.socket); | ||
} else { | ||
clearTimeout(timeoutId); | ||
request.on("socket", doWithSocket); | ||
} | ||
}); | ||
}, "registerTimeout"); | ||
if (timeoutInMs < 2e3) { | ||
registerTimeout(0); | ||
return 0; | ||
} | ||
return setTimeout(registerTimeout.bind(null, DEFER_EVENT_LISTENER_TIME), DEFER_EVENT_LISTENER_TIME); | ||
}, "setConnectionTimeout"); | ||
// src/set-socket-keep-alive.ts | ||
var setSocketKeepAlive = /* @__PURE__ */ __name((request, { keepAlive, keepAliveMsecs }) => { | ||
var DEFER_EVENT_LISTENER_TIME2 = 3e3; | ||
var setSocketKeepAlive = /* @__PURE__ */ __name((request, { keepAlive, keepAliveMsecs }, deferTimeMs = DEFER_EVENT_LISTENER_TIME2) => { | ||
if (keepAlive !== true) { | ||
return; | ||
return -1; | ||
} | ||
request.on("socket", (socket) => { | ||
socket.setKeepAlive(keepAlive, keepAliveMsecs || 0); | ||
}); | ||
const registerListener = /* @__PURE__ */ __name(() => { | ||
if (request.socket) { | ||
request.socket.setKeepAlive(keepAlive, keepAliveMsecs || 0); | ||
} else { | ||
request.on("socket", (socket) => { | ||
socket.setKeepAlive(keepAlive, keepAliveMsecs || 0); | ||
}); | ||
} | ||
}, "registerListener"); | ||
if (deferTimeMs === 0) { | ||
registerListener(); | ||
return 0; | ||
} | ||
return setTimeout(registerListener, deferTimeMs); | ||
}, "setSocketKeepAlive"); | ||
// src/set-socket-timeout.ts | ||
var DEFER_EVENT_LISTENER_TIME3 = 3e3; | ||
var setSocketTimeout = /* @__PURE__ */ __name((request, reject, timeoutInMs = 0) => { | ||
request.setTimeout(timeoutInMs, () => { | ||
request.destroy(); | ||
reject(Object.assign(new Error(`Connection timed out after ${timeoutInMs} ms`), { name: "TimeoutError" })); | ||
}); | ||
const registerTimeout = /* @__PURE__ */ __name((offset) => { | ||
request.setTimeout(timeoutInMs - offset, () => { | ||
request.destroy(); | ||
reject(Object.assign(new Error(`Connection timed out after ${timeoutInMs} ms`), { name: "TimeoutError" })); | ||
}); | ||
}, "registerTimeout"); | ||
if (0 < timeoutInMs && timeoutInMs < 6e3) { | ||
registerTimeout(0); | ||
return 0; | ||
} | ||
return setTimeout( | ||
registerTimeout.bind(null, timeoutInMs === 0 ? 0 : DEFER_EVENT_LISTENER_TIME3), | ||
DEFER_EVENT_LISTENER_TIME3 | ||
); | ||
}, "setSocketTimeout"); | ||
@@ -248,8 +284,8 @@ | ||
} | ||
let socketCheckTimeoutId; | ||
return new Promise((_resolve, _reject) => { | ||
let writeRequestBodyPromise = void 0; | ||
const timeouts = []; | ||
const resolve = /* @__PURE__ */ __name(async (arg) => { | ||
await writeRequestBodyPromise; | ||
clearTimeout(socketCheckTimeoutId); | ||
timeouts.forEach(clearTimeout); | ||
_resolve(arg); | ||
@@ -259,3 +295,3 @@ }, "resolve"); | ||
await writeRequestBodyPromise; | ||
clearTimeout(socketCheckTimeoutId); | ||
timeouts.forEach(clearTimeout); | ||
_reject(arg); | ||
@@ -274,11 +310,13 @@ }, "reject"); | ||
const agent = isSSL ? this.config.httpsAgent : this.config.httpAgent; | ||
socketCheckTimeoutId = setTimeout( | ||
() => { | ||
this.socketWarningTimestamp = _NodeHttpHandler.checkSocketUsage( | ||
agent, | ||
this.socketWarningTimestamp, | ||
this.config.logger | ||
); | ||
}, | ||
this.config.socketAcquisitionWarningTimeout ?? (this.config.requestTimeout ?? 2e3) + (this.config.connectionTimeout ?? 1e3) | ||
timeouts.push( | ||
setTimeout( | ||
() => { | ||
this.socketWarningTimestamp = _NodeHttpHandler.checkSocketUsage( | ||
agent, | ||
this.socketWarningTimestamp, | ||
this.config.logger | ||
); | ||
}, | ||
this.config.socketAcquisitionWarningTimeout ?? (this.config.requestTimeout ?? 2e3) + (this.config.connectionTimeout ?? 1e3) | ||
) | ||
); | ||
@@ -325,4 +363,2 @@ const queryString = (0, import_querystring_builder.buildQueryString)(request.query || {}); | ||
}); | ||
setConnectionTimeout(req, reject, this.config.connectionTimeout); | ||
setSocketTimeout(req, reject, this.config.requestTimeout); | ||
if (abortSignal) { | ||
@@ -343,13 +379,17 @@ const onAbort = /* @__PURE__ */ __name(() => { | ||
} | ||
timeouts.push(setConnectionTimeout(req, reject, this.config.connectionTimeout)); | ||
timeouts.push(setSocketTimeout(req, reject, this.config.requestTimeout)); | ||
const httpAgent = nodeHttpsOptions.agent; | ||
if (typeof httpAgent === "object" && "keepAlive" in httpAgent) { | ||
setSocketKeepAlive(req, { | ||
// @ts-expect-error keepAlive is not public on httpAgent. | ||
keepAlive: httpAgent.keepAlive, | ||
// @ts-expect-error keepAliveMsecs is not public on httpAgent. | ||
keepAliveMsecs: httpAgent.keepAliveMsecs | ||
}); | ||
timeouts.push( | ||
setSocketKeepAlive(req, { | ||
// @ts-expect-error keepAlive is not public on httpAgent. | ||
keepAlive: httpAgent.keepAlive, | ||
// @ts-expect-error keepAliveMsecs is not public on httpAgent. | ||
keepAliveMsecs: httpAgent.keepAliveMsecs | ||
}) | ||
); | ||
} | ||
writeRequestBodyPromise = writeRequestBody(req, request, this.config.requestTimeout).catch((e) => { | ||
clearTimeout(socketCheckTimeoutId); | ||
timeouts.forEach(clearTimeout); | ||
return _reject(e); | ||
@@ -356,0 +396,0 @@ }); |
@@ -88,8 +88,8 @@ import { HttpResponse } from "@smithy/protocol-http"; | ||
} | ||
let socketCheckTimeoutId; | ||
return new Promise((_resolve, _reject) => { | ||
let writeRequestBodyPromise = undefined; | ||
const timeouts = []; | ||
const resolve = async (arg) => { | ||
await writeRequestBodyPromise; | ||
clearTimeout(socketCheckTimeoutId); | ||
timeouts.forEach(clearTimeout); | ||
_resolve(arg); | ||
@@ -99,3 +99,3 @@ }; | ||
await writeRequestBodyPromise; | ||
clearTimeout(socketCheckTimeoutId); | ||
timeouts.forEach(clearTimeout); | ||
_reject(arg); | ||
@@ -114,6 +114,6 @@ }; | ||
const agent = isSSL ? this.config.httpsAgent : this.config.httpAgent; | ||
socketCheckTimeoutId = setTimeout(() => { | ||
timeouts.push(setTimeout(() => { | ||
this.socketWarningTimestamp = NodeHttpHandler.checkSocketUsage(agent, this.socketWarningTimestamp, this.config.logger); | ||
}, this.config.socketAcquisitionWarningTimeout ?? | ||
(this.config.requestTimeout ?? 2000) + (this.config.connectionTimeout ?? 1000)); | ||
(this.config.requestTimeout ?? 2000) + (this.config.connectionTimeout ?? 1000))); | ||
const queryString = buildQueryString(request.query || {}); | ||
@@ -160,4 +160,2 @@ let auth = undefined; | ||
}); | ||
setConnectionTimeout(req, reject, this.config.connectionTimeout); | ||
setSocketTimeout(req, reject, this.config.requestTimeout); | ||
if (abortSignal) { | ||
@@ -179,11 +177,13 @@ const onAbort = () => { | ||
} | ||
timeouts.push(setConnectionTimeout(req, reject, this.config.connectionTimeout)); | ||
timeouts.push(setSocketTimeout(req, reject, this.config.requestTimeout)); | ||
const httpAgent = nodeHttpsOptions.agent; | ||
if (typeof httpAgent === "object" && "keepAlive" in httpAgent) { | ||
setSocketKeepAlive(req, { | ||
timeouts.push(setSocketKeepAlive(req, { | ||
keepAlive: httpAgent.keepAlive, | ||
keepAliveMsecs: httpAgent.keepAliveMsecs, | ||
}); | ||
})); | ||
} | ||
writeRequestBodyPromise = writeRequestBody(req, request, this.config.requestTimeout).catch((e) => { | ||
clearTimeout(socketCheckTimeoutId); | ||
timeouts.forEach(clearTimeout); | ||
return _reject(e); | ||
@@ -190,0 +190,0 @@ }); |
@@ -0,21 +1,35 @@ | ||
const DEFER_EVENT_LISTENER_TIME = 1000; | ||
export const setConnectionTimeout = (request, reject, timeoutInMs = 0) => { | ||
if (!timeoutInMs) { | ||
return; | ||
return -1; | ||
} | ||
const timeoutId = setTimeout(() => { | ||
request.destroy(); | ||
reject(Object.assign(new Error(`Socket timed out without establishing a connection within ${timeoutInMs} ms`), { | ||
name: "TimeoutError", | ||
})); | ||
}, timeoutInMs); | ||
request.on("socket", (socket) => { | ||
if (socket.connecting) { | ||
socket.on("connect", () => { | ||
const registerTimeout = (offset) => { | ||
const timeoutId = setTimeout(() => { | ||
request.destroy(); | ||
reject(Object.assign(new Error(`Socket timed out without establishing a connection within ${timeoutInMs} ms`), { | ||
name: "TimeoutError", | ||
})); | ||
}, timeoutInMs - offset); | ||
const doWithSocket = (socket) => { | ||
if (socket?.connecting) { | ||
socket.on("connect", () => { | ||
clearTimeout(timeoutId); | ||
}); | ||
} | ||
else { | ||
clearTimeout(timeoutId); | ||
}); | ||
} | ||
}; | ||
if (request.socket) { | ||
doWithSocket(request.socket); | ||
} | ||
else { | ||
clearTimeout(timeoutId); | ||
request.on("socket", doWithSocket); | ||
} | ||
}); | ||
}; | ||
if (timeoutInMs < 2000) { | ||
registerTimeout(0); | ||
return 0; | ||
} | ||
return setTimeout(registerTimeout.bind(null, DEFER_EVENT_LISTENER_TIME), DEFER_EVENT_LISTENER_TIME); | ||
}; |
@@ -1,8 +0,21 @@ | ||
export const setSocketKeepAlive = (request, { keepAlive, keepAliveMsecs }) => { | ||
const DEFER_EVENT_LISTENER_TIME = 3000; | ||
export const setSocketKeepAlive = (request, { keepAlive, keepAliveMsecs }, deferTimeMs = DEFER_EVENT_LISTENER_TIME) => { | ||
if (keepAlive !== true) { | ||
return; | ||
return -1; | ||
} | ||
request.on("socket", (socket) => { | ||
socket.setKeepAlive(keepAlive, keepAliveMsecs || 0); | ||
}); | ||
const registerListener = () => { | ||
if (request.socket) { | ||
request.socket.setKeepAlive(keepAlive, keepAliveMsecs || 0); | ||
} | ||
else { | ||
request.on("socket", (socket) => { | ||
socket.setKeepAlive(keepAlive, keepAliveMsecs || 0); | ||
}); | ||
} | ||
}; | ||
if (deferTimeMs === 0) { | ||
registerListener(); | ||
return 0; | ||
} | ||
return setTimeout(registerListener, deferTimeMs); | ||
}; |
@@ -0,6 +1,14 @@ | ||
const DEFER_EVENT_LISTENER_TIME = 3000; | ||
export const setSocketTimeout = (request, reject, timeoutInMs = 0) => { | ||
request.setTimeout(timeoutInMs, () => { | ||
request.destroy(); | ||
reject(Object.assign(new Error(`Connection timed out after ${timeoutInMs} ms`), { name: "TimeoutError" })); | ||
}); | ||
const registerTimeout = (offset) => { | ||
request.setTimeout(timeoutInMs - offset, () => { | ||
request.destroy(); | ||
reject(Object.assign(new Error(`Connection timed out after ${timeoutInMs} ms`), { name: "TimeoutError" })); | ||
}); | ||
}; | ||
if (0 < timeoutInMs && timeoutInMs < 6000) { | ||
registerTimeout(0); | ||
return 0; | ||
} | ||
return setTimeout(registerTimeout.bind(null, timeoutInMs === 0 ? 0 : DEFER_EVENT_LISTENER_TIME), DEFER_EVENT_LISTENER_TIME); | ||
}; |
@@ -0,2 +1,7 @@ | ||
/// <reference types="node" /> | ||
/// <reference types="node" /> | ||
/// <reference types="node" /> | ||
/// <reference types="node" /> | ||
/// <reference types="node" /> | ||
import { ClientRequest } from "http"; | ||
export declare const setConnectionTimeout: (request: ClientRequest, reject: (err: Error) => void, timeoutInMs?: number) => void; | ||
export declare const setConnectionTimeout: (request: ClientRequest, reject: (err: Error) => void, timeoutInMs?: number) => NodeJS.Timeout | number; |
@@ -0,1 +1,6 @@ | ||
/// <reference types="node" /> | ||
/// <reference types="node" /> | ||
/// <reference types="node" /> | ||
/// <reference types="node" /> | ||
/// <reference types="node" /> | ||
import { ClientRequest } from "http"; | ||
@@ -6,2 +11,2 @@ export interface SocketKeepAliveOptions { | ||
} | ||
export declare const setSocketKeepAlive: (request: ClientRequest, { keepAlive, keepAliveMsecs }: SocketKeepAliveOptions) => void; | ||
export declare const setSocketKeepAlive: (request: ClientRequest, { keepAlive, keepAliveMsecs }: SocketKeepAliveOptions, deferTimeMs?: number) => NodeJS.Timeout | number; |
@@ -0,2 +1,7 @@ | ||
/// <reference types="node" /> | ||
/// <reference types="node" /> | ||
/// <reference types="node" /> | ||
/// <reference types="node" /> | ||
/// <reference types="node" /> | ||
import { ClientRequest } from "http"; | ||
export declare const setSocketTimeout: (request: ClientRequest, reject: (err: Error) => void, timeoutInMs?: number) => void; | ||
export declare const setSocketTimeout: (request: ClientRequest, reject: (err: Error) => void, timeoutInMs?: number) => NodeJS.Timeout | number; |
@@ -0,2 +1,3 @@ | ||
/// <reference types="node" /> | ||
import { ClientRequest } from "http"; | ||
export declare const setConnectionTimeout: (request: ClientRequest, reject: (err: Error) => void, timeoutInMs?: number) => void; | ||
export declare const setConnectionTimeout: (request: ClientRequest, reject: (err: Error) => void, timeoutInMs?: number) => NodeJS.Timeout | number; |
@@ -0,1 +1,2 @@ | ||
/// <reference types="node" /> | ||
import { ClientRequest } from "http"; | ||
@@ -6,2 +7,2 @@ export interface SocketKeepAliveOptions { | ||
} | ||
export declare const setSocketKeepAlive: (request: ClientRequest, { keepAlive, keepAliveMsecs }: SocketKeepAliveOptions) => void; | ||
export declare const setSocketKeepAlive: (request: ClientRequest, { keepAlive, keepAliveMsecs }: SocketKeepAliveOptions, deferTimeMs?: number) => NodeJS.Timeout | number; |
@@ -0,2 +1,3 @@ | ||
/// <reference types="node" /> | ||
import { ClientRequest } from "http"; | ||
export declare const setSocketTimeout: (request: ClientRequest, reject: (err: Error) => void, timeoutInMs?: number) => void; | ||
export declare const setSocketTimeout: (request: ClientRequest, reject: (err: Error) => void, timeoutInMs?: number) => NodeJS.Timeout | number; |
{ | ||
"name": "@smithy/node-http-handler", | ||
"version": "3.1.4", | ||
"version": "3.2.0", | ||
"description": "Provides a way to make requests", | ||
@@ -28,6 +28,6 @@ "scripts": { | ||
"dependencies": { | ||
"@smithy/abort-controller": "^3.1.1", | ||
"@smithy/protocol-http": "^4.1.0", | ||
"@smithy/querystring-builder": "^3.0.3", | ||
"@smithy/types": "^3.3.0", | ||
"@smithy/abort-controller": "^3.1.2", | ||
"@smithy/protocol-http": "^4.1.1", | ||
"@smithy/querystring-builder": "^3.0.4", | ||
"@smithy/types": "^3.4.0", | ||
"tslib": "^2.6.2" | ||
@@ -34,0 +34,0 @@ }, |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
92816
1996