Socket
Socket
Sign inDemoInstall

@smithy/node-http-handler

Package Overview
Dependencies
Maintainers
2
Versions
43
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@smithy/node-http-handler - npm Package Compare versions

Comparing version 3.1.4 to 3.2.0

130

dist-cjs/index.js

@@ -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 @@ },

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc