diff --git a/packages/bun-types/bun.d.ts b/packages/bun-types/bun.d.ts index 52b2062e8b29..403e910f1b95 100644 --- a/packages/bun-types/bun.d.ts +++ b/packages/bun-types/bun.d.ts @@ -6306,7 +6306,7 @@ declare module "bun" { /** * Finalize the hash * - * @param hashInto `TypedArray` to write the hash into. Faster than creating a new one each time. It must hold at least {@link byteLength} bytes. + * @param hashInto `TypedArray` to write the hash into. Faster than creating a new one each time. It must hold at least {@link byteLength} bytes. `shake128` and `shake256` fill all of it. */ digest(hashInto: NodeJS.TypedArray): NodeJS.TypedArray; diff --git a/src/boringssl_sys/boringssl.rs b/src/boringssl_sys/boringssl.rs index db1410ab6d32..df52c8f14400 100644 --- a/src/boringssl_sys/boringssl.rs +++ b/src/boringssl_sys/boringssl.rs @@ -823,29 +823,6 @@ pub const SSL_GROUP_SECP521R1: u16 = 25; pub const SSL_GROUP_X25519: u16 = 29; pub const SSL_GROUP_X448: u16 = 30; -/// `sk_X509_pop_free(sk, X509_free)` — release a `STACK_OF(X509)` and every -/// element on it. -#[inline] -pub unsafe fn sk_X509_pop_free(sk: *mut struct_stack_st_X509) { - unsafe extern "C" fn call(f: OPENSSL_sk_free_func, e: *mut c_void) { - // SAFETY: BoringSSL only invokes this with the `free_func` we passed - // and a live element pointer. - unsafe { (f.unwrap())(e) } - } - // SAFETY: caller-guaranteed live X509 stack; `X509_free` is - // `extern "C" fn(*mut X509)`, ABI-compatible with `fn(*mut c_void)`. - unsafe { - sk_pop_free_ex( - sk.cast(), - Some(call), - Some(core::mem::transmute::< - unsafe extern "C" fn(*mut X509), - unsafe extern "C" fn(*mut c_void), - >(X509_free)), - ); - } -} - #[inline] pub unsafe fn sk_X509_value(sk: *const struct_stack_st_X509, i: usize) -> *mut X509 { // SAFETY: Two independent type casts, not a const→mut provenance laundering: diff --git a/src/codegen/builtins/host/features-bun.builtins.ts b/src/codegen/builtins/host/features-bun.builtins.ts index 7f620cc06164..af75e84e5e48 100644 --- a/src/codegen/builtins/host/features-bun.builtins.ts +++ b/src/codegen/builtins/host/features-bun.builtins.ts @@ -380,7 +380,7 @@ export default b.declarations( extendAll( ["Sockets"], "%Listener%", - ...nativeBindings("Bindgen", "socket_body.bind.ts", "getBufferedAmount", "isNamedPipeSocket"), + ...nativeBindings("Bindgen", "socket_body.bind.ts", "getBufferedAmount", "hasPendingRead", "isNamedPipeSocket"), ), extendAll( diff --git a/src/js/ahead-of-time/node/_http_agent.ts b/src/js/ahead-of-time/node/_http_agent.ts index 880fdb029a7f..df91da83d17d 100644 --- a/src/js/ahead-of-time/node/_http_agent.ts +++ b/src/js/ahead-of-time/node/_http_agent.ts @@ -1,5 +1,5 @@ // What the compiler reads in place of src/js/node/_http_agent.ts, which `bun run` evaluates. The two do the same. -// Written against that file with the SHA-256 c7494682bc21dc2e3ec7e56d4de7e66688ab4289f0007044a358f32e5d1b4cc8. +// Written against that file with the SHA-256 9161c607d9c8f981ce072e148aa617473a8be3f076599f05727c3c23a97b8aff. // When that file changes, bring the change here and write the new hash: test/internal/second-texts-of-modules.test.ts. // This is a port of Node.js's lib/_http_agent.js @@ -18,6 +18,7 @@ const { validateNumber, validateOneOf, validateString } = require("internal/vali const { isIP } = require("internal/net/isIP"); const netSymbols = require("internal/net/symbols"); const kDestroyOnRead: typeof netSymbols.kDestroyOnRead = netSymbols.kDestroyOnRead; +const handleHasPendingRead: (handle: unknown) => boolean = $bindgen("socket_body.bind.ts", "hasPendingRead"); const kOnKeylog = Symbol("onkeylog"); const kRequestOptions = Symbol("requestOptions"); @@ -30,6 +31,16 @@ const kOwnerFrame = Symbol("ownerFrame"); const AsyncContextFrame = require("internal/async_context_frame"); const ObjectDefineProperty = Object.defineProperty; +// kDestroyOnRead only acts when the event loop polls for I/O. Data that +// reached the OS socket buffer after the last poll has not been seen by it +// yet, so check for it directly before handing an idle socket to a request. +function hasPendingRead(socket: $Node.HttpClientSocket) { + // A socket that is still connecting has nothing to read yet, and a pending + // connect error must be reported to the request rather than swallowed here. + if (socket.connecting) return false; + return handleHasPendingRead(socket._handle); +} + function freeSocketErrorListener(this: $Node.HttpClientSocket, err: Error) { const socket = this; $debug("SOCKET ERROR on FREE socket:", err.message, err.stack); @@ -101,6 +112,7 @@ declare global { } interface HttpClientSocket { + _handle?: unknown; [kDestroyOnRead]?: boolean; } } @@ -178,6 +190,12 @@ function Agent(this: $Node.Agent, options?: $Node.AgentOptions): void { const requests = this.requests[name]; if (requests?.length) { + if (hasPendingRead(socket)) { + // onClose() will create a new socket for the pending request. + $debug("PENDING DATA on released socket - destroying"); + socket.destroy(); + return; + } const req = requests.shift()!; const reqAsyncRes = req[kRequestAsyncResource]; if (reqAsyncRes) { @@ -335,6 +353,11 @@ Agent.prototype.addRequest = function addRequest( freeSockets.shift(); } socket = this.scheduling === "fifo" ? freeSockets.shift() : freeSockets.pop(); + while (socket && hasPendingRead(socket)) { + $debug("PENDING DATA on FREE socket - destroying"); + socket.destroy(); + socket = this.scheduling === "fifo" ? freeSockets.shift() : freeSockets.pop(); + } if (!freeSockets.length) delete this.freeSockets[name]; } diff --git a/src/js/builtins.d.ts b/src/js/builtins.d.ts index 0d7dd88011b8..ae4a40965851 100644 --- a/src/js/builtins.d.ts +++ b/src/js/builtins.d.ts @@ -535,6 +535,7 @@ declare function $ERR_HTTP2_STATUS_INVALID(code: number): RangeError; declare function $ERR_HTTP2_INVALID_PSEUDOHEADER(name: string): TypeError; declare function $ERR_HTTP2_STREAM_ERROR(code): Error; declare function $ERR_HTTP2_SESSION_ERROR(code): Error; +declare function $ERR_HTTP2_TOO_MANY_ORIGINS(max: number): Error; declare function $ERR_HTTP2_PAYLOAD_FORBIDDEN(status): Error; declare function $ERR_HTTP2_INVALID_INFO_STATUS(code): RangeError; declare function $ERR_INVALID_URL(input, base?): TypeError; diff --git a/src/js/internal/streams/readable.ts b/src/js/internal/streams/readable.ts index aae844c591de..37d813d91169 100644 --- a/src/js/internal/streams/readable.ts +++ b/src/js/internal/streams/readable.ts @@ -504,6 +504,7 @@ Readable.prototype.setEncoding = function (this: $Node.Readable, enc: string) { content += decoder.write(data); } } + if ((state[kState] & Flag.Ended) !== 0) content += decoder.end(); state.buffer.length = 0; state.bufferIndex = 0; diff --git a/src/js/node/_http_agent.ts b/src/js/node/_http_agent.ts index 1405028d0e56..3a529acc3878 100644 --- a/src/js/node/_http_agent.ts +++ b/src/js/node/_http_agent.ts @@ -12,6 +12,7 @@ const { getLazy, kEmptyObject, once } = require("internal/shared"); const { validateNumber, validateOneOf, validateString } = require("internal/validators"); const { isIP } = require("internal/net/isIP"); const { kDestroyOnRead } = require("internal/net/symbols"); +const handleHasPendingRead: (handle: unknown) => boolean = $bindgen("socket_body.bind.ts", "hasPendingRead"); const kOnKeylog = Symbol("onkeylog"); const kRequestOptions = Symbol("requestOptions"); @@ -24,6 +25,16 @@ const kOwnerFrame = Symbol("ownerFrame"); const AsyncContextFrame = require("internal/async_context_frame"); const ObjectDefineProperty = Object.defineProperty; +// kDestroyOnRead only acts when the event loop polls for I/O. Data that +// reached the OS socket buffer after the last poll has not been seen by it +// yet, so check for it directly before handing an idle socket to a request. +function hasPendingRead(socket) { + // A socket that is still connecting has nothing to read yet, and a pending + // connect error must be reported to the request rather than swallowed here. + if (socket.connecting) return false; + return handleHasPendingRead(socket._handle); +} + function freeSocketErrorListener(err) { const socket = this; $debug("SOCKET ERROR on FREE socket:", err.message, err.stack); @@ -104,6 +115,12 @@ function Agent(options): void { const requests = this.requests[name]; if (requests?.length) { + if (hasPendingRead(socket)) { + // onClose() will create a new socket for the pending request. + $debug("PENDING DATA on released socket - destroying"); + socket.destroy(); + return; + } const req = requests.shift(); const reqAsyncRes = req[kRequestAsyncResource]; if (reqAsyncRes) { @@ -261,6 +278,11 @@ Agent.prototype.addRequest = function addRequest(req, options, port /* legacy */ freeSockets.shift(); } socket = this.scheduling === "fifo" ? freeSockets.shift() : freeSockets.pop(); + while (socket && hasPendingRead(socket)) { + $debug("PENDING DATA on FREE socket - destroying"); + socket.destroy(); + socket = this.scheduling === "fifo" ? freeSockets.shift() : freeSockets.pop(); + } if (!freeSockets.length) delete this.freeSockets[name]; } diff --git a/src/js/node/crypto.ts b/src/js/node/crypto.ts index f1376729a189..39677a36d221 100644 --- a/src/js/node/crypto.ts +++ b/src/js/node/crypto.ts @@ -181,7 +181,7 @@ function exportChallenge(spkac: string | BufferSource, encoding?: string) { } function Certificate(): void { - if (!new.target) { + if (!(this instanceof Certificate)) { return new Certificate() as any; } @@ -430,7 +430,7 @@ crypto_exports.createHash = function createHash(algorithm: string, options?: $No }; function Hmac(this: $Node.Hmac, hmac: string, key: unknown, options?: $Node.TransformOptions): void { - if (!new.target) { + if (!(this instanceof Hmac)) { return new Hmac(hmac, key, options) as any; } @@ -667,7 +667,7 @@ crypto_exports.createECDH = function createECDH(curve: string) { iv: unknown, options?: $Node.TransformOptions, ): void { - if (!new.target) { + if (!(this instanceof Cipheriv)) { return new Cipheriv(cipher, key, iv, options) as any; } @@ -735,7 +735,7 @@ crypto_exports.createECDH = function createECDH(curve: string) { iv: unknown, options?: $Node.TransformOptions, ): void { - if (!new.target) { + if (!(this instanceof Decipheriv)) { return new Decipheriv(cipher, key, iv, options) as any; } diff --git a/src/js/node/http2.ts b/src/js/node/http2.ts index 690edbba318b..bbfa6072b05f 100644 --- a/src/js/node/http2.ts +++ b/src/js/node/http2.ts @@ -76,6 +76,7 @@ type Http2ConnectOptions = { maxConcurrentStreams?: number; maxOutstandingSettings?: number; maxReservedRemoteStreams?: number; + maxOriginSetSize?: number; remoteCustomSettings?: number[]; strictFieldWhitespaceValidation?: boolean; strictSingleValueFields?: boolean; @@ -5199,6 +5200,7 @@ class ClientHttp2Session extends Http2Session { // RFC 9113 reserved (pushed) streams the peer may have open at once (node session option). #maxReservedRemoteStreams: number = 200; #reservedStreamsCount: number = 0; + #maxOriginSetSize: number = 128; #strictFieldWhitespaceValidation: boolean = true; // Client-side SETTINGS_MAX_CONCURRENT_STREAMS accounting: requests whose HEADERS frame has been // submitted and whose stream has not closed yet, plus the queue of requests waiting for a slot @@ -5563,17 +5565,17 @@ class ClientHttp2Session extends Http2Session { origin(self: ClientHttp2Session, origin: string | Array | undefined) { if (!self) return; const socket = self[bunHTTP2Socket]; - if (self.encrypted && socket) { + if (self.encrypted && socket && origin) { const originSet = initOriginSet(self, socket); - if ($isArray(origin)) { - for (const item of origin) { - originSet.add(item); + const origins = $isArray(origin) ? origin : [origin]; + for (const item of origins) { + if (originSet.size >= self.#maxOriginSetSize) { + self.destroy($ERR_HTTP2_TOO_MANY_ORIGINS(self.#maxOriginSetSize)); + return; } - self.emit("origin", origin); - } else if (origin) { - originSet.add(origin); - self.emit("origin", [origin]); + originSet.add(item); } + self.emit("origin", origins); } }, write(self: ClientHttp2Session, buffer: Buffer, transportClosed: boolean) { @@ -5848,6 +5850,12 @@ class ClientHttp2Session extends Http2Session { assertIsObject(options, "options"); options = { ...options }; + const { maxOriginSetSize } = options; + if (maxOriginSetSize != null) { + validateNumber(maxOriginSetSize, "options.maxOriginSetSize", 0); + this.#maxOriginSetSize = maxOriginSetSize; + } + assertIsArray(options.remoteCustomSettings, "options.remoteCustomSettings"); if (options.remoteCustomSettings) { options.remoteCustomSettings = [...options.remoteCustomSettings]; diff --git a/src/js/node/net.ts b/src/js/node/net.ts index 6caa13d8f86e..c40657ea9adf 100644 --- a/src/js/node/net.ts +++ b/src/js/node/net.ts @@ -271,6 +271,7 @@ declare global { [kerrorEmitted]?: boolean; [kTimeout]: Timer | null; + [kLastWriteQueueSize]: number; [kDestroyOnRead]: boolean; [kupgraded]: Socket | null; [kOnUpgradedClose]: (() => void) | undefined; @@ -700,6 +701,7 @@ const kOnreadPendingEnd = Symbol("kOnreadPendingEnd"); const kOnreadReadRequested = Symbol("kOnreadReadRequested"); const kOnreadEmptyTail = Buffer.alloc(0); const kwriteCallback = Symbol("writeCallback"); +const kLastWriteQueueSize = Symbol("lastWriteQueueSize"); const kRejectedWrite = Symbol("kRejectedWrite"); const kSocketClass = Symbol("kSocketClass"); @@ -1223,6 +1225,8 @@ const SocketHandlers = { if (!holdRejectedWrite(self, socket, res, callback)) failWrite(self, res, callback); } else if (res) { self._pendingData = self[kwriteCallback] = null; + self._unrefTimer(); + self[kLastWriteQueueSize] = 0; unrefAfterDrain(self, socket); callback(null); } else { @@ -2083,6 +2087,8 @@ const SocketHandlers2 = { } else if (res) { self[kBytesWritten] = socket.bytesWritten; self._pendingData = self[kwriteCallback] = null; + self._unrefTimer(); + self[kLastWriteQueueSize] = 0; unrefAfterDrain(self, socket); callback(null); } else { @@ -2390,6 +2396,7 @@ function Socket(this: $Node.Socket, options?: $Node.SocketOptions): void { this._port = undefined; this[bunTLSConnectOptions] = null; this.timeout = 0; + this[kLastWriteQueueSize] = 0; // node initializes the timer slot to null so it is observable before setTimeout() is called. // https://github.com/nodejs/node/blob/v26.3.0/lib/net.js#L401 this[kTimeout] = null; @@ -2591,17 +2598,16 @@ Socket.prototype.address = function address(this: $Node.Socket) { }; Socket.prototype._onTimeout = function (this: $Node.Socket) { - // if there is pending data, write is in progress - // so we suppress the timeout - if (this._pendingData) { - return; - } - const handle = this._handle; - // if there is a handle, and it has pending data, - // we suppress the timeout because a write is in progress - if (handle && getBufferedAmount(handle) > 0) { - return; + if (handle) { + // As in Node, a write that moved since the last look puts the timeout off. Its first look is at the size of the write, this one at 0. + // https://github.com/nodejs/node/blob/v26.12.1/lib/net.js#L872-L887 + const writeQueueSize = getBufferedAmount(handle); + if (writeQueueSize !== this[kLastWriteQueueSize]) { + this[kLastWriteQueueSize] = writeQueueSize; + this._unrefTimer(); + return; + } } this.emit("timeout"); }; @@ -3464,6 +3470,7 @@ Socket.prototype._write = function _write( return false; } this._unrefTimer(); + this[kLastWriteQueueSize] = 0; if (this.secureConnecting) this[kPreHandshakeWrite] = true; if (socket.readyState < 0) { // The handle's native socket was already closed (e.g. handle.close() was diff --git a/src/jsc/bindings/ErrorCode.cpp b/src/jsc/bindings/ErrorCode.cpp index ac75b928aa08..c2ebd56fccd4 100644 --- a/src/jsc/bindings/ErrorCode.cpp +++ b/src/jsc/bindings/ErrorCode.cpp @@ -2144,6 +2144,7 @@ static constexpr SimpleErrorMessage simpleErrorMessages[] = { { ErrorCode::ERR_HTTP2_INVALID_PSEUDOHEADER, 1, { "\""_s, "\" is an invalid pseudoheader or is used incorrectly"_s, ""_s } }, { ErrorCode::ERR_HTTP2_STREAM_ERROR, 1, { "Stream closed with error code "_s, ""_s, ""_s } }, { ErrorCode::ERR_HTTP2_SESSION_ERROR, 1, { "Session closed with error code "_s, ""_s, ""_s } }, + { ErrorCode::ERR_HTTP2_TOO_MANY_ORIGINS, 1, { "The server sent more ORIGIN frames than the allowed number of "_s, ""_s, ""_s } }, { ErrorCode::ERR_HTTP2_PAYLOAD_FORBIDDEN, 1, { "Responses with "_s, " status must not have a payload"_s, ""_s } }, { ErrorCode::ERR_HTTP2_INVALID_INFO_STATUS, 1, { "Invalid informational status code: "_s, ""_s, ""_s } }, { ErrorCode::ERR_HTTP_INVALID_HEADER_VALUE, 2, { "Invalid value \""_s, "\" for header \""_s, "\""_s } }, diff --git a/src/jsc/bindings/ErrorCode.ts b/src/jsc/bindings/ErrorCode.ts index adb168f20bcf..3f27b3a32c67 100644 --- a/src/jsc/bindings/ErrorCode.ts +++ b/src/jsc/bindings/ErrorCode.ts @@ -359,5 +359,6 @@ const errors: ErrorCodeMapping = [ ["ERR_REDIS_SERVER_ERROR", Error, "RedisError"], ["ERR_FFI_CC_DISABLED", Error], ["HPE_INVALID_URL", Error], + ["ERR_HTTP2_TOO_MANY_ORIGINS", Error], ]; export default errors; diff --git a/src/jsc/bindings/node/crypto/CryptoUtil.cpp b/src/jsc/bindings/node/crypto/CryptoUtil.cpp index fecea00f0d05..5aef0121e234 100644 --- a/src/jsc/bindings/node/crypto/CryptoUtil.cpp +++ b/src/jsc/bindings/node/crypto/CryptoUtil.cpp @@ -19,7 +19,7 @@ namespace Bun { using namespace JSC; using namespace ncrypto; -int pqcKeyTypeToNid(const WTF::StringView& name, bool ignoreCase) +int pqcKeyTypeToNid(const WTF::StringView& name) { static constexpr std::pair table[] = { { "ml-dsa-44"_s, EVP_PKEY_ML_DSA_44 }, @@ -29,7 +29,7 @@ int pqcKeyTypeToNid(const WTF::StringView& name, bool ignoreCase) { "ml-kem-1024"_s, EVP_PKEY_ML_KEM_1024 }, }; for (const auto& [candidate, nid] : table) { - if (ignoreCase ? WTF::equalIgnoringASCIICase(name, candidate) : name == candidate) + if (name == candidate) return nid; } return 0; diff --git a/src/jsc/bindings/node/crypto/CryptoUtil.h b/src/jsc/bindings/node/crypto/CryptoUtil.h index 4d3d09c3749e..a66f4699abf4 100644 --- a/src/jsc/bindings/node/crypto/CryptoUtil.h +++ b/src/jsc/bindings/node/crypto/CryptoUtil.h @@ -20,7 +20,7 @@ enum class DSASigEnc { // ML-DSA / ML-KEM parameter sets, as provided by BoringSSL's EVP_PKEY // integration. BoringSSL has ML-KEM-768 and ML-KEM-1024 but not ML-KEM-512. // Each returns 0 / a null literal / nullptr for any other key type. -int pqcKeyTypeToNid(const WTF::StringView& name, bool ignoreCase = false); +int pqcKeyTypeToNid(const WTF::StringView& name); ASCIILiteral pqcNidToKeyTypeName(int nid); bool isMlDsaNid(int nid); bool isMlKemNid(int nid); diff --git a/src/jsc/bindings/node/crypto/JSCipher.cpp b/src/jsc/bindings/node/crypto/JSCipher.cpp index 2c160a4bed6b..b8f7db908b07 100644 --- a/src/jsc/bindings/node/crypto/JSCipher.cpp +++ b/src/jsc/bindings/node/crypto/JSCipher.cpp @@ -102,7 +102,8 @@ JSValue rsaFunction(JSC::JSGlobalObject* lexicalGlobalObject, JSC::CallFrame* ca if (JSObject* options = optionsValue.getObject()) { JSValue paddingValue = options->get(lexicalGlobalObject, Identifier::fromString(vm, "padding"_s)); RETURN_IF_EXCEPTION(scope, {}); - if (!paddingValue.isUndefined()) { + // Node: `key.padding || defaultPadding` + if (paddingValue.toBoolean(lexicalGlobalObject)) { padding = paddingValue.toInt32(lexicalGlobalObject); RETURN_IF_EXCEPTION(scope, {}); } diff --git a/src/jsc/bindings/node/crypto/JSSign.cpp b/src/jsc/bindings/node/crypto/JSSign.cpp index 0b9e7089b854..0e6d494e84dd 100644 --- a/src/jsc/bindings/node/crypto/JSSign.cpp +++ b/src/jsc/bindings/node/crypto/JSSign.cpp @@ -401,6 +401,15 @@ JSUint8Array* signWithKey(JSC::JSGlobalObject* lexicalGlobalObject, JSSign* this } } + // A DER signature is often shorter than pkey.size(). The result's ArrayBuffer is as long as the signature, like Node's. + if (finalSignatureLength != sigBuffer->byteLength()) { + sigBuffer = JSC::ArrayBuffer::tryCreate(sigBuffer->span().first(finalSignatureLength)); + if (!sigBuffer) { + throwTypeError(lexicalGlobalObject, scope, "Failed to allocate signature buffer"_s); + return nullptr; + } + } + // Create and return JSUint8Array auto* globalObject = defaultGlobalObject(lexicalGlobalObject); RELEASE_AND_RETURN(scope, JSC::JSUint8Array::create(lexicalGlobalObject, globalObject->JSBufferSubclassStructure(), WTF::move(sigBuffer), 0, finalSignatureLength)); diff --git a/src/jsc/bindings/node/crypto/JSVerify.cpp b/src/jsc/bindings/node/crypto/JSVerify.cpp index 92d0216dc648..45f8b5248509 100644 --- a/src/jsc/bindings/node/crypto/JSVerify.cpp +++ b/src/jsc/bindings/node/crypto/JSVerify.cpp @@ -419,11 +419,17 @@ JSC_DEFINE_HOST_FUNCTION(jsVerifyProtoFuncVerify, (JSGlobalObject * globalObject saltLen = RSA_PSS_SALTLEN_AUTO; } - // Options that the key does not take are a signature that does not verify, not an error. - bool result = (!keyPtr.isRsaVariant() || ncrypto::EVPKeyCtxPointer::setRsaPadding(pkctx.get(), padding, saltLen)) - && pkctx.setSignatureMd(mdCtx) - && pkctx.verify(sigBuf, data); - return JSValue::encode(jsBoolean(result)); + if (keyPtr.isRsaVariant()) { + // Options that the key does not take are a signature that does not verify, not an error. + if (!ncrypto::EVPKeyCtxPointer::setRsaPadding(pkctx.get(), padding, saltLen) || !pkctx.setSignatureMd(mdCtx)) + return JSValue::encode(jsBoolean(false)); + } else if (!pkctx.setSignatureMd(mdCtx)) { + // BoringSSL refuses digests for an EC key that OpenSSL takes, so the signature may be a valid one. + throwCryptoError(globalObject, scope, ERR_get_error(), "Failed to set signature message digest"_s); + return {}; + } + + return JSValue::encode(jsBoolean(pkctx.verify(sigBuf, data))); } JSC_DEFINE_HOST_FUNCTION(callVerify, (JSGlobalObject * globalObject, CallFrame* callFrame)) diff --git a/src/jsc/bindings/node/crypto/KeyObject.cpp b/src/jsc/bindings/node/crypto/KeyObject.cpp index 0513aca0b269..be25076a2998 100644 --- a/src/jsc/bindings/node/crypto/KeyObject.cpp +++ b/src/jsc/bindings/node/crypto/KeyObject.cpp @@ -670,8 +670,7 @@ JSValue KeyObject::exportAsymmetric(JSGlobalObject* globalObject, ThrowScope& sc JSValue typeValue = options->get(globalObject, Identifier::fromString(vm, "type"_s)); RETURN_IF_EXCEPTION(scope, {}); if (!typeValue.isUndefined()) { - auto* typeStr = typeValue.toString(globalObject); - RETURN_IF_EXCEPTION(scope, {}); + auto* typeStr = typeValue.isString() ? asString(typeValue) : jsEmptyString(vm); auto typeView = typeStr->view(globalObject); RETURN_IF_EXCEPTION(scope, {}); if (typeView == "compressed"_s) { @@ -1511,13 +1510,13 @@ KeyObject KeyObject::getKeyObjectHandleFromRaw(JSGlobalObject* globalObject, Thr }; int nid = 0; - if (WTF::equalIgnoringASCIICase(asymmetricKeyType, "ed25519"_s)) + if (asymmetricKeyType == "ed25519"_s) nid = EVP_PKEY_ED25519; - else if (WTF::equalIgnoringASCIICase(asymmetricKeyType, "ed448"_s)) + else if (asymmetricKeyType == "ed448"_s) nid = EVP_PKEY_ED448; - else if (WTF::equalIgnoringASCIICase(asymmetricKeyType, "x25519"_s)) + else if (asymmetricKeyType == "x25519"_s) nid = EVP_PKEY_X25519; - else if (WTF::equalIgnoringASCIICase(asymmetricKeyType, "x448"_s)) + else if (asymmetricKeyType == "x448"_s) nid = EVP_PKEY_X448; // Validate key type / format compatibility (Node's ValidateRawKeyImportFormat). @@ -1526,7 +1525,7 @@ KeyObject KeyObject::getKeyObjectHandleFromRaw(JSGlobalObject* globalObject, Thr ERR::CRYPTO_INCOMPATIBLE_KEY_OPTIONS(scope, globalObject); return {}; } - } else if (int pqcNid = pqcKeyTypeToNid(asymmetricKeyType, /* ignoreCase */ true)) { + } else if (int pqcNid = pqcKeyTypeToNid(asymmetricKeyType)) { nid = pqcNid; } else if (isUnavailablePqcKeyType(asymmetricKeyType)) { // SLH-DSA and ML-KEM-512 have no EVP_PKEY support in vendored BoringSSL. @@ -1536,7 +1535,7 @@ KeyObject KeyObject::getKeyObjectHandleFromRaw(JSGlobalObject* globalObject, Thr ERR::CRYPTO_INCOMPATIBLE_KEY_OPTIONS(scope, globalObject); return {}; } else { - ERR::INVALID_ARG_VALUE(scope, globalObject, "key"_s, jsUndefined(), makeString("Invalid asymmetricKeyType: "_s, asymmetricKeyType)); + throwError(globalObject, scope, ErrorCode::ERR_INVALID_ARG_VALUE, makeString("Invalid asymmetricKeyType: "_s, asymmetricKeyType)); return {}; } @@ -1933,8 +1932,8 @@ KeyObject::PrepareAsymmetricKeyResult KeyObject::prepareAsymmetricKey(JSC::JSGlo return { .keyData = handle.data() }; } - auto* formatString = formatValue.toString(globalObject); - RETURN_IF_EXCEPTION(scope, {}); + // Node compares with ===. parseKeyEncoding() below refuses what is not a string. + auto* formatString = formatValue.isString() ? asString(formatValue) : jsEmptyString(vm); auto formatView = formatString->view(globalObject); RETURN_IF_EXCEPTION(scope, {}); diff --git a/src/jsc/bindings/webcore/MessagePort.cpp b/src/jsc/bindings/webcore/MessagePort.cpp index eb62c0f244c9..603ffd98f698 100644 --- a/src/jsc/bindings/webcore/MessagePort.cpp +++ b/src/jsc/bindings/webcore/MessagePort.cpp @@ -393,7 +393,7 @@ JSValue MessagePort::tryTakeMessage(JSGlobalObject* lexicalGlobalObject, bool& h hadMessage = true; auto ports = MessagePort::entanglePorts(*context, WTF::move(message->transferredPorts)); - return message->message.releaseNonNull()->deserialize(*lexicalGlobalObject, lexicalGlobalObject, WTF::move(ports), SerializationErrorMode::NonThrowing); + return message->message.releaseNonNull()->deserialize(*lexicalGlobalObject, lexicalGlobalObject, WTF::move(ports), SerializationErrorMode::Throwing); } void MessagePort::dispatchEvent(Event& event) diff --git a/src/jsc/bindings/webcore/SerializedScriptValue.cpp b/src/jsc/bindings/webcore/SerializedScriptValue.cpp index 3a2f6f56fa66..950e85a368ce 100644 --- a/src/jsc/bindings/webcore/SerializedScriptValue.cpp +++ b/src/jsc/bindings/webcore/SerializedScriptValue.cpp @@ -5337,7 +5337,7 @@ NEVER_INLINE JSValue SerializedScriptValue::deserialize(JSGlobalObject& lexicalG RETURN_IF_EXCEPTION(scope, {}); } - return result.first; + return result.first ? result.first : jsNull(); } } // namespace WebCore diff --git a/src/jsc/bindings/webcore/WorkerMessagingProxy.cpp b/src/jsc/bindings/webcore/WorkerMessagingProxy.cpp index eb2157a83929..b0e62d3155c6 100644 --- a/src/jsc/bindings/webcore/WorkerMessagingProxy.cpp +++ b/src/jsc/bindings/webcore/WorkerMessagingProxy.cpp @@ -465,7 +465,7 @@ void WorkerMessagingProxy::postMessageErrorToWorkerObject(String&& message) }); } -bool WorkerMessagingProxy::postSerializedErrorToWorkerObject(Zig::GlobalObject& workerGlobalObject, JSC::JSValue value) +bool WorkerMessagingProxy::postSerializedErrorToWorkerObject(Zig::GlobalObject& workerGlobalObject, const String& message, JSC::JSValue value) { // Top of the worker's error-dispatch stack: neither the structured clone (which can run script // through getters even in NonThrowing mode) nor the `code` read may leave an exception behind. @@ -487,21 +487,26 @@ bool WorkerMessagingProxy::postSerializedErrorToWorkerObject(Zig::GlobalObject& CLEAR_IF_EXCEPTION(scope); } - return ScriptExecutionContext::postTaskTo(m_loaderContextIdentifier, m_loaderLoopKind, [protectedThis = Ref { *this }, serialized = serialized.releaseNonNull(), errorCode = WTF::move(errorCode).isolatedCopy()](ScriptExecutionContext& context) { + return ScriptExecutionContext::postTaskTo(m_loaderContextIdentifier, m_loaderLoopKind, [protectedThis = Ref { *this }, serialized = serialized.releaseNonNull(), errorCode = WTF::move(errorCode).isolatedCopy(), message = message.isolatedCopy()](ScriptExecutionContext& context) { RefPtr workerObject = protectedThis->m_workerObject; if (!workerObject) return; auto* globalObject = context.globalObject(); auto& vm = JSC::getVM(globalObject); auto scope = DECLARE_TOP_EXCEPTION_SCOPE(vm); - JSC::JSValue deserialized = serialized->deserialize(*globalObject, globalObject, SerializationErrorMode::NonThrowing); + bool didFail = false; + JSC::JSValue deserialized = serialized->deserialize(*globalObject, globalObject, SerializationErrorMode::NonThrowing, &didFail); CLEAR_AND_RETURN_IF_EXCEPTION(scope, ); - if (!errorCode.isNull()) { - if (auto* errorObject = deserialized.getObject()) - errorObject->putDirect(vm, WebCore::builtinNames(vm).codePublicName(), JSC::jsString(vm, errorCode)); - } ErrorEvent::Init init; - init.error = deserialized; + if (didFail) { + init.message = message; + } else { + if (!errorCode.isNull()) { + if (auto* errorObject = deserialized.getObject()) + errorObject->putDirect(vm, WebCore::builtinNames(vm).codePublicName(), JSC::jsString(vm, errorCode)); + } + init.error = deserialized; + } workerObject->dispatchEvent(ErrorEvent::create(eventNames().errorEvent, init, EventIsTrusted::Yes)); }); } @@ -513,7 +518,7 @@ void WorkerMessagingProxy::postErrorToWorkerObject(Zig::GlobalObject& workerGlob postMessageErrorToWorkerObject(String { message }); return; case WorkerOptions::Kind::Node: - if (!postSerializedErrorToWorkerObject(workerGlobalObject, error)) + if (!postSerializedErrorToWorkerObject(workerGlobalObject, message, error)) postMessageErrorToWorkerObject(String { message }); return; } diff --git a/src/jsc/bindings/webcore/WorkerMessagingProxy.h b/src/jsc/bindings/webcore/WorkerMessagingProxy.h index 93505354cb95..4184d8739a4e 100644 --- a/src/jsc/bindings/webcore/WorkerMessagingProxy.h +++ b/src/jsc/bindings/webcore/WorkerMessagingProxy.h @@ -131,7 +131,7 @@ class WorkerMessagingProxy final : public ThreadSafeRefCounted m_scriptExecutionContext; diff --git a/src/lsquic_sys/lib.rs b/src/lsquic_sys/lib.rs index e796cd3088bd..375fc0b50f1f 100644 --- a/src/lsquic_sys/lib.rs +++ b/src/lsquic_sys/lib.rs @@ -164,7 +164,6 @@ unsafe extern "C" { fn lsquic_conn_get_sni(c: *mut lsquic_conn) -> *const c_char; fn lsquic_conn_want_datagram_write(c: *mut lsquic_conn, is_want: c_int) -> c_int; fn lsquic_conn_crypto_cipher(c: *const lsquic_conn) -> *const c_char; - fn lsquic_conn_get_server_cert_chain(c: *mut lsquic_conn) -> *mut c_void; pub fn lsquic_conn_get_ssl(c: *const lsquic_conn) -> *mut c_void; pub fn lsquic_ssl_to_conn(ssl: *const c_void) -> *mut lsquic_conn; pub fn lsquic_conn_abort_error( @@ -473,10 +472,6 @@ impl Conn { // SAFETY: as above. (!p.is_null()).then(|| unsafe { core::ffi::CStr::from_ptr(p) }) } - pub fn server_cert_chain(&self) -> *mut c_void { - // SAFETY: as above. - unsafe { lsquic_conn_get_server_cert_chain(self.0) } - } pub fn ssl(&self) -> *mut c_void { // SAFETY: as above. unsafe { lsquic_conn_get_ssl(self.0) } diff --git a/src/runtime/crypto/PasswordObject.bind.ts b/src/runtime/crypto/PasswordObject.bind.ts index 8daf22b0a835..5f550d63e5d6 100644 --- a/src/runtime/crypto/PasswordObject.bind.ts +++ b/src/runtime/crypto/PasswordObject.bind.ts @@ -20,6 +20,8 @@ export const PasswordHashAlgorithm = b.union({ }); const stringOrBuffer = b.bytes({ from: ["string", "buffer"] }); +/** The fields of a hash are parsed more than once. */ +const parsed = b.bytes({ from: ["string", "buffer"], shared: "copied" }); /** For a job to own, and to zero when it is done. */ const copied = b.bytes({ from: ["string", "buffer"], held: "copied" }); @@ -43,7 +45,7 @@ export const password = b.namespace({ throws: true, }, verifySync: { - args: { password: stringOrBuffer, hash: stringOrBuffer, algorithm: b.string.utf8.nullable }, + args: { password: stringOrBuffer, hash: parsed, algorithm: b.string.utf8.nullable }, returns: b.bool, capability: "heap", throws: true, diff --git a/src/runtime/node/quic/session.rs b/src/runtime/node/quic/session.rs index d629bbac4b96..6d430b846cb6 100644 --- a/src/runtime/node/quic/session.rs +++ b/src/runtime/node/quic/session.rs @@ -2210,17 +2210,8 @@ impl QuicSession { } pub(crate) fn get_peer_certificate(&self, cx: &mut JsScope<'_>) -> JsResult { let global = cx.global(); - if let Some(conn) = self.conn() { - // lsquic returns a STACK_OF(X509)* the callee frees - // (sk_X509_pop_free inside leaf_certificate_der). - if let Some(der) = tls::leaf_certificate_der(conn.server_cert_chain()) { - return ArrayBuffer::create_buffer(global, &der); - } - if let Some(ssl) = self.conn_ssl() { - if let Some(der) = tls::peer_certificate_der(ssl) { - return ArrayBuffer::create_buffer(global, &der); - } - } + if let Some(der) = self.conn_ssl().and_then(tls::peer_certificate_der) { + return ArrayBuffer::create_buffer(global, &der); } if let Some(der) = self .hsk_snapshot diff --git a/src/runtime/node/quic/tls.rs b/src/runtime/node/quic/tls.rs index ac36bc49bed3..60dced897c0f 100644 --- a/src/runtime/node/quic/tls.rs +++ b/src/runtime/node/quic/tls.rs @@ -699,29 +699,3 @@ pub(super) fn peer_certificate_der(ssl_ptr: *mut ssl::SSL) -> Option> { result } } - -pub(super) fn leaf_certificate_der(stack: *mut core::ffi::c_void) -> Option> { - if stack.is_null() { - return None; - } - // SAFETY: lsquic returns a STACK_OF(X509)* the caller must free; the - // leaf is at index 0. - unsafe { - let cert = ssl::sk_X509_value(stack.cast(), 0); - let result = if cert.is_null() { - None - } else { - let mut der: *mut u8 = null_mut(); - let len = ssl::i2d_X509(cert, core::ptr::from_mut(&mut der)); - if len > 0 && !der.is_null() { - let bytes = core::slice::from_raw_parts(der, len as usize).to_vec(); - ssl::OPENSSL_free(der.cast()); - Some(bytes) - } else { - None - } - }; - ssl::sk_X509_pop_free(stack.cast()); - result - } -} diff --git a/src/runtime/socket/socket_body.bind.ts b/src/runtime/socket/socket_body.bind.ts index 60a7c3008872..35d4c6f4e85b 100644 --- a/src/runtime/socket/socket_body.bind.ts +++ b/src/runtime/socket/socket_body.bind.ts @@ -118,6 +118,8 @@ export const checkServerIdentityInHandshake = b.fn({ args: { socket: SocketHandl export const firstFlightBeforeFin = b.fn({ args: { socket: SocketHandle } }); export const isNamedPipeSocket = b.fn({ args: { socket: SocketHandle }, returns: b.bool }); export const getBufferedAmount = b.fn({ args: { socket: SocketHandle }, returns: b.usize }); +/** Node's `handle.hasPendingRead()`: data, a FIN or an error that the loop has not polled for yet. */ +export const hasPendingRead = b.fn({ args: { socket: SocketHandle }, returns: b.bool }); /** `tls` is `true` or what `SSLConfig` takes, and can hold the `secureContext`. */ export const DuplexTLSOptions = b.dictionary({ socket: SocketHandler, diff --git a/src/runtime/socket/socket_body.rs b/src/runtime/socket/socket_body.rs index e60c58d4bc7e..75e0fbce4fc3 100644 --- a/src/runtime/socket/socket_body.rs +++ b/src/runtime/socket/socket_body.rs @@ -4705,6 +4705,14 @@ pub(crate) fn get_buffered_amount(socket: SocketHandle<'_>) -> usize { } } +pub(crate) fn has_pending_read(socket: SocketHandle<'_>) -> bool { + match socket { + SocketHandle::Tcp(this) => this.socket.get().queued_input() != uws::QueuedInput::None, + SocketHandle::Tls(this) => this.socket.get().queued_input() != uws::QueuedInput::None, + SocketHandle::Ignored(_) => false, + } +} + pub(crate) fn create_socket_pair(cx: &mut JsScope<'_>) -> JsResult<[c_int; 2]> { jsc::mark_binding!(); let global = cx.global(); diff --git a/test/aot/parallel/node-http/objects-closed-proxies-without-traps.ts b/test/aot/parallel/node-http/objects-closed-proxies-without-traps.ts index 67963b1fd985..fcee76a518c8 100644 --- a/test/aot/parallel/node-http/objects-closed-proxies-without-traps.ts +++ b/test/aot/parallel/node-http/objects-closed-proxies-without-traps.ts @@ -333,594 +333,594 @@ process.exitCode = unlike ? 1 : 0; /* Output: == a server's socket, before the answer: nothing itself, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself open 60 keys, 60 found, 60 writable, 60 configurable -as that open 60 keys, 60 found, 60 writable, 60 configurable +itself open 61 keys, 61 found, 61 writable, 61 configurable +as that open 61 keys, 61 found, 61 writable, 61 configurable defined anew true added true removed true absent removed true absent found false -- response finish | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, before the answer: seal itself, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: seal a Proxy, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: seal a Proxy, then used as that traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: seal a Proxy of a Proxy, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: seal a Proxy with every trap, then used itself -traps while closing: 62 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +traps while closing: 63 of them for a key that is not listed: 0 +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: seal a Proxy with every trap, then used as that -traps while closing: 62 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +traps while closing: 63 of them for a key that is not listed: 0 +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: seal a Proxy with every trap of a Proxy with every trap, then used itself -traps while closing: 307 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +traps while closing: 312 of them for a key that is not listed: 0 +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: seal a revoked Proxy, then used itself closing threw TypeError traps while closing: 0 of them for a key that is not listed: 0 -itself open 60 keys, 60 found, 60 writable, 60 configurable +itself open 61 keys, 61 found, 61 writable, 61 configurable asking threw TypeError changing threw TypeError -- response finish | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, before the answer: seal a Proxy of a revoked Proxy, then used itself closing threw TypeError traps while closing: 0 of them for a key that is not listed: 0 -itself open 60 keys, 60 found, 60 writable, 60 configurable +itself open 61 keys, 61 found, 61 writable, 61 configurable asking threw TypeError changing threw TypeError -- response finish | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, before the answer: seal a Proxy that traps defineProperty, then used itself -traps while closing: 60 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +traps while closing: 61 of them for a key that is not listed: 0 +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: seal a Proxy that traps deleteProperty, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: seal a Proxy that traps get, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: seal a Proxy that traps getOwnPropertyDescriptor, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: seal a Proxy that traps getPrototypeOf, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: seal a Proxy that traps has, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: seal a Proxy that traps isExtensible, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: seal a Proxy that traps ownKeys, then used itself traps while closing: 1 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: seal a Proxy that traps preventExtensions, then used itself traps while closing: 1 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: seal a Proxy that traps set, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 60 keys, 60 found, 60 writable, 0 configurable -as that closed sealed 60 keys, 60 found, 60 writable, 0 configurable +itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable +as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions itself, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions a Proxy, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions a Proxy, then used as that traps while closing: 0 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions a Proxy of a Proxy, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions a Proxy with every trap, then used itself traps while closing: 1 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions a Proxy with every trap, then used as that traps while closing: 1 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions a Proxy with every trap of a Proxy with every trap, then used itself traps while closing: 3 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions a revoked Proxy, then used itself closing threw TypeError traps while closing: 0 of them for a key that is not listed: 0 -itself open 60 keys, 60 found, 60 writable, 60 configurable +itself open 61 keys, 61 found, 61 writable, 61 configurable asking threw TypeError changing threw TypeError -- response finish | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, before the answer: preventExtensions a Proxy of a revoked Proxy, then used itself closing threw TypeError traps while closing: 0 of them for a key that is not listed: 0 -itself open 60 keys, 60 found, 60 writable, 60 configurable +itself open 61 keys, 61 found, 61 writable, 61 configurable asking threw TypeError changing threw TypeError -- response finish | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, before the answer: preventExtensions a Proxy that traps defineProperty, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions a Proxy that traps deleteProperty, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions a Proxy that traps get, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions a Proxy that traps getOwnPropertyDescriptor, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions a Proxy that traps getPrototypeOf, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions a Proxy that traps has, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions a Proxy that traps isExtensible, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions a Proxy that traps ownKeys, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions a Proxy that traps preventExtensions, then used itself traps while closing: 1 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, before the answer: preventExtensions a Proxy that traps set, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 60 keys, 60 found, 60 writable, 60 configurable -as that closed 60 keys, 60 found, 60 writable, 60 configurable +itself closed 61 keys, 61 found, 61 writable, 61 configurable +as that closed 61 keys, 61 found, 61 writable, 61 configurable defined anew true added false removed true absent removed true absent found false -- the listener threw TypeError in setTimeout | request end | request close | response close | socket close | the client saw TypeError == a server's socket, after the answer: nothing itself, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself open 61 keys, 61 found, 61 writable, 61 configurable -as that open 61 keys, 61 found, 61 writable, 61 configurable +itself open 62 keys, 62 found, 62 writable, 62 configurable +as that open 62 keys, 62 found, 62 writable, 62 configurable defined anew true added true removed true absent removed true absent found false -- response finish | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: freeze itself, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: freeze a Proxy, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: freeze a Proxy, then used as that traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: freeze a Proxy of a Proxy, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: freeze a Proxy with every trap, then used itself -traps while closing: 124 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +traps while closing: 126 of them for a key that is not listed: 0 +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: freeze a Proxy with every trap, then used as that -traps while closing: 124 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +traps while closing: 126 of them for a key that is not listed: 0 +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: freeze a Proxy with every trap of a Proxy with every trap, then used itself -traps while closing: 556 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +traps while closing: 565 of them for a key that is not listed: 0 +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: freeze a revoked Proxy, then used itself closing threw TypeError traps while closing: 0 of them for a key that is not listed: 0 -itself open 61 keys, 61 found, 61 writable, 61 configurable +itself open 62 keys, 62 found, 62 writable, 62 configurable asking threw TypeError changing threw TypeError -- response finish | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: freeze a Proxy of a revoked Proxy, then used itself closing threw TypeError traps while closing: 0 of them for a key that is not listed: 0 -itself open 61 keys, 61 found, 61 writable, 61 configurable +itself open 62 keys, 62 found, 62 writable, 62 configurable asking threw TypeError changing threw TypeError -- response finish | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: freeze a Proxy that traps defineProperty, then used itself -traps while closing: 61 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +traps while closing: 62 of them for a key that is not listed: 0 +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: freeze a Proxy that traps deleteProperty, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: freeze a Proxy that traps get, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: freeze a Proxy that traps getOwnPropertyDescriptor, then used itself -traps while closing: 61 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +traps while closing: 62 of them for a key that is not listed: 0 +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: freeze a Proxy that traps getPrototypeOf, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: freeze a Proxy that traps has, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: freeze a Proxy that traps isExtensible, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: freeze a Proxy that traps ownKeys, then used itself traps while closing: 1 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: freeze a Proxy that traps preventExtensions, then used itself traps while closing: 1 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: freeze a Proxy that traps set, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable -as that closed sealed frozen 61 keys, 61 found, 0 writable, 0 configurable +itself closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable +as that closed sealed frozen 62 keys, 62 found, 0 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in | nobody caught TypeError in setTimeout | response close | request end | request close | answered 200 1 answer | socket error TypeError in _destroy | socket close | nobody caught TypeError in releaseServerParserShim == a server's socket, after the answer: seal itself, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy, then used as that traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy of a Proxy, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy with every trap, then used itself -traps while closing: 63 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +traps while closing: 64 of them for a key that is not listed: 0 +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy with every trap, then used as that -traps while closing: 63 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +traps while closing: 64 of them for a key that is not listed: 0 +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy with every trap of a Proxy with every trap, then used itself -traps while closing: 312 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +traps while closing: 317 of them for a key that is not listed: 0 +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a revoked Proxy, then used itself closing threw TypeError traps while closing: 0 of them for a key that is not listed: 0 -itself open 61 keys, 61 found, 61 writable, 61 configurable +itself open 62 keys, 62 found, 62 writable, 62 configurable asking threw TypeError changing threw TypeError -- response finish | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy of a revoked Proxy, then used itself closing threw TypeError traps while closing: 0 of them for a key that is not listed: 0 -itself open 61 keys, 61 found, 61 writable, 61 configurable +itself open 62 keys, 62 found, 62 writable, 62 configurable asking threw TypeError changing threw TypeError -- response finish | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy that traps defineProperty, then used itself -traps while closing: 61 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +traps while closing: 62 of them for a key that is not listed: 0 +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy that traps deleteProperty, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy that traps get, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy that traps getOwnPropertyDescriptor, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy that traps getPrototypeOf, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy that traps has, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy that traps isExtensible, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy that traps ownKeys, then used itself traps while closing: 1 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy that traps preventExtensions, then used itself traps while closing: 1 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: seal a Proxy that traps set, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 61 keys, 61 found, 61 writable, 0 configurable -as that closed sealed 61 keys, 61 found, 61 writable, 0 configurable +itself closed sealed 62 keys, 62 found, 62 writable, 0 configurable +as that closed sealed 62 keys, 62 found, 62 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions itself, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy, then used as that traps while closing: 0 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy of a Proxy, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy with every trap, then used itself traps while closing: 1 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy with every trap, then used as that traps while closing: 1 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy with every trap of a Proxy with every trap, then used itself traps while closing: 3 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a revoked Proxy, then used itself closing threw TypeError traps while closing: 0 of them for a key that is not listed: 0 -itself open 61 keys, 61 found, 61 writable, 61 configurable +itself open 62 keys, 62 found, 62 writable, 62 configurable asking threw TypeError changing threw TypeError -- response finish | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy of a revoked Proxy, then used itself closing threw TypeError traps while closing: 0 of them for a key that is not listed: 0 -itself open 61 keys, 61 found, 61 writable, 61 configurable +itself open 62 keys, 62 found, 62 writable, 62 configurable asking threw TypeError changing threw TypeError -- response finish | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy that traps defineProperty, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy that traps deleteProperty, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy that traps get, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy that traps getOwnPropertyDescriptor, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy that traps getPrototypeOf, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy that traps has, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy that traps isExtensible, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy that traps ownKeys, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy that traps preventExtensions, then used itself traps while closing: 1 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's socket, after the answer: preventExtensions a Proxy that traps set, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 61 keys, 61 found, 61 writable, 61 configurable -as that closed 61 keys, 61 found, 61 writable, 61 configurable +itself closed 62 keys, 62 found, 62 writable, 62 configurable +as that closed 62 keys, 62 found, 62 writable, 62 configurable defined anew true added false removed true absent removed true absent found false -- nobody caught TypeError in onResponseFinishHandleSocket | response close | request end | request close | answered 200 1 answer | socket close == a server's request, before the answer: nothing itself, then used itself @@ -2817,240 +2817,240 @@ defined anew true added false removed true absent removed true absent found fals -- request finish | response end | nobody caught TypeError in endReadableNT | request close | the response's close did not come == a client's socket: nothing itself, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself open 45 keys, 45 found, 45 writable, 45 configurable -as that open 45 keys, 45 found, 45 writable, 45 configurable +itself open 46 keys, 46 found, 46 writable, 46 configurable +as that open 46 keys, 46 found, 46 writable, 46 configurable defined anew true added true removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal itself, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal a Proxy, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal a Proxy, then used as that traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal a Proxy of a Proxy, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal a Proxy with every trap, then used itself -traps while closing: 47 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +traps while closing: 48 of them for a key that is not listed: 0 +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal a Proxy with every trap, then used as that -traps while closing: 47 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +traps while closing: 48 of them for a key that is not listed: 0 +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal a Proxy with every trap of a Proxy with every trap, then used itself -traps while closing: 232 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +traps while closing: 237 of them for a key that is not listed: 0 +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal a revoked Proxy, then used itself closing threw TypeError traps while closing: 0 of them for a key that is not listed: 0 -itself open 45 keys, 45 found, 45 writable, 45 configurable +itself open 46 keys, 46 found, 46 writable, 46 configurable asking threw TypeError changing threw TypeError -- request finish | response end | response close | request close == a client's socket: seal a Proxy of a revoked Proxy, then used itself closing threw TypeError traps while closing: 0 of them for a key that is not listed: 0 -itself open 45 keys, 45 found, 45 writable, 45 configurable +itself open 46 keys, 46 found, 46 writable, 46 configurable asking threw TypeError changing threw TypeError -- request finish | response end | response close | request close == a client's socket: seal a Proxy that traps defineProperty, then used itself -traps while closing: 45 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +traps while closing: 46 of them for a key that is not listed: 0 +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal a Proxy that traps deleteProperty, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal a Proxy that traps get, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal a Proxy that traps getOwnPropertyDescriptor, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal a Proxy that traps getPrototypeOf, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal a Proxy that traps has, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal a Proxy that traps isExtensible, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal a Proxy that traps ownKeys, then used itself traps while closing: 1 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal a Proxy that traps preventExtensions, then used itself traps while closing: 1 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: seal a Proxy that traps set, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed sealed 45 keys, 45 found, 45 writable, 0 configurable -as that closed sealed 45 keys, 45 found, 45 writable, 0 configurable +itself closed sealed 46 keys, 46 found, 46 writable, 0 configurable +as that closed sealed 46 keys, 46 found, 46 writable, 0 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions itself, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy, then used as that traps while closing: 0 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy of a Proxy, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy with every trap, then used itself traps while closing: 1 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy with every trap, then used as that traps while closing: 1 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy with every trap of a Proxy with every trap, then used itself traps while closing: 3 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions a revoked Proxy, then used itself closing threw TypeError traps while closing: 0 of them for a key that is not listed: 0 -itself open 45 keys, 45 found, 45 writable, 45 configurable +itself open 46 keys, 46 found, 46 writable, 46 configurable asking threw TypeError changing threw TypeError -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy of a revoked Proxy, then used itself closing threw TypeError traps while closing: 0 of them for a key that is not listed: 0 -itself open 45 keys, 45 found, 45 writable, 45 configurable +itself open 46 keys, 46 found, 46 writable, 46 configurable asking threw TypeError changing threw TypeError -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy that traps defineProperty, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy that traps deleteProperty, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy that traps get, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy that traps getOwnPropertyDescriptor, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy that traps getPrototypeOf, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy that traps has, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy that traps isExtensible, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy that traps ownKeys, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy that traps preventExtensions, then used itself traps while closing: 1 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a client's socket: preventExtensions a Proxy that traps set, then used itself traps while closing: 0 of them for a key that is not listed: 0 -itself closed 45 keys, 45 found, 45 writable, 45 configurable -as that closed 45 keys, 45 found, 45 writable, 45 configurable +itself closed 46 keys, 46 found, 46 writable, 46 configurable +as that closed 46 keys, 46 found, 46 writable, 46 configurable defined anew true added false removed true absent removed true absent found false -- request finish | response end | response close | request close == a server: nothing itself, then used itself diff --git a/test/js/bun/util/password.test.ts b/test/js/bun/util/password.test.ts index bd5727f76486..87e51266de23 100644 --- a/test/js/bun/util/password.test.ts +++ b/test/js/bun/util/password.test.ts @@ -339,6 +339,14 @@ test.concurrent.each([ ], ["a DataView", (bytes: Uint8Array) => new DataView(bytes.buffer)], ["a Uint16Array", (bytes: Uint8Array) => new Uint16Array(bytes.buffer)], + [ + "a part of a larger buffer", + (bytes: Uint8Array) => { + const larger = new Uint8Array(bytes.length + 8).fill(0x61); + larger.set(bytes, 4); + return larger.subarray(4, 4 + bytes.length); + }, + ], ])("a password and a hash can be %s", async (_, wrap) => { const bytesOf = (text: string) => wrap(new TextEncoder().encode(text)) as Bun.StringOrBuffer; const options = { algorithm: "bcrypt", cost: 4 } as const; @@ -352,6 +360,35 @@ test.concurrent.each([ }).toEqual({ string: true, password: true, hash: true, other: false, sync: true }); }); +test.concurrent("verifySync() takes a hash in memory that another thread is writing", async () => { + const script = ` + const { Worker } = require("node:worker_threads"); + // Of a version that is refused, so that each call only parses. + const text = "$argon2id$v=18$m=8,t=1,p=1$c2FsdHNhbHQ$aGFzaGhhc2hoYXNoaGFzaA"; + const hash = new Uint8Array(new SharedArrayBuffer(text.length)); + hash.set(Buffer.from(text)); + new Worker( + \`const hash = require("node:worker_threads").workerData; + for (;;) { + hash[10] = 0x80; + hash[10] = 0x76; + }\`, + { eval: true, workerData: hash }, + ); + while (Atomics.load(hash, 10) !== 0x80); + for (let i = 0; i < ${isDebug ? 1000 : 5000}; i++) { + try { + Bun.password.verifySync("password", hash); + } catch {} + } + console.log("done"); + process.exit(0); + `; + await using proc = Bun.spawn({ cmd: [bunExe(), "-e", script], env: bunEnv, stdout: "pipe", stderr: "inherit" }); + const [stdout, exitCode] = await Promise.all([proc.stdout.text(), proc.exited]); + expect({ stdout, exitCode }).toEqual({ stdout: "done\n", exitCode: 0 }); +}); + test.concurrent("bcrypt uses the SHA-512 of passwords longer than 72 characters", async () => { const boop = Buffer.from("hey".repeat(100)); const hashed = await password.hash(boop, "bcrypt"); diff --git a/test/js/node/__snapshots__/visible-surface.test.ts.snap b/test/js/node/__snapshots__/visible-surface.test.ts.snap index c0226cfe8ef4..a290192d0669 100644 --- a/test/js/node/__snapshots__/visible-surface.test.ts.snap +++ b/test/js/node/__snapshots__/visible-surface.test.ts.snap @@ -4236,7 +4236,7 @@ ReadableState level 0: highWaterMark:cew buffer:cew bufferIndex:cew length:cew p ReadableState level 1: objectMode:--a ended:--a endEmitted:--a reading:--a constructed:--a sync:--a needReadable:--a emittedReadable:--a readableListening:--a resumeScheduled:--a errorEmitted:--a emitClose:--a autoDestroy:--a destroyed:--a closed:--a closeEmitted:--a multiAwaitDrain:--a readingMore:--a dataEmitted:--a errored:--a defaultEncoding:--a decoder:--a encoding:--a flowing:--a pipesCount:--a paused:--a Symbol(kOnConstructed):cew WritableState level 0: highWaterMark:cew length:cew corked:cew onwrite:cew writelen:cew bufferedIndex:cew pendingcb:cew Symbol(kState):cew Symbol(kBufferedValue):cew WritableState level 1: objectMode:--a finalCalled:--a needDrain:--a ending:--a ended:--a finished:--a destroyed:--a decodeStrings:--a writing:--a sync:--a bufferProcessing:--a constructed:--a prefinished:--a errorEmitted:--a emitClose:--a autoDestroy:--a closed:--a closeEmitted:--a allBuffers:--a allNoop:--a errored:--a writable:--a defaultEncoding:--a writecb:--a afterWriteTickInfo:--a buffered:--a getBuffer:cew bufferedRequestCount:--a Symbol(kOnConstructed):cew -net.Socket level 0: _events:cew _readableState:cew _writableState:cew allowHalfOpen:cew _maxListeners:cew _parent:cew _parentWrap:cew bytesRead:cew connecting:cew _host:cew _port:cew timeout:cew _pendingData:cew _pendingEncoding:cew _hadError:cew isServer:cew _handle:cew server:cew _server:cew _peername:cew _sockname:cew _closeAfterHandlingError:cew _eventsCount:cew Symbol(shapeMode):cew Symbol(kCapture):cew Symbol(kupgraded):cew Symbol(kStandaloneWrap):cew Symbol(kOnUpgradedClose):cew Symbol(kOwesRawClose):cew Symbol(kSetNoDelay):cew Symbol(kSetKeepAlive):cew Symbol(kSetKeepAliveInitialDelay):cew Symbol(khandlers):cew Symbol(kDestroyOnRead):cew Symbol(kBytesWritten):cew Symbol(closed):cew Symbol(ended):cew Symbol(::buntlsconnectoptions::):cew Symbol(::buntimeout::):cew Symbol(writeCallback):cew Symbol(ksocket):cew +net.Socket level 0: _events:cew _readableState:cew _writableState:cew allowHalfOpen:cew _maxListeners:cew _parent:cew _parentWrap:cew bytesRead:cew connecting:cew _host:cew _port:cew timeout:cew _pendingData:cew _pendingEncoding:cew _hadError:cew isServer:cew _handle:cew server:cew _server:cew _peername:cew _sockname:cew _closeAfterHandlingError:cew _eventsCount:cew Symbol(shapeMode):cew Symbol(kCapture):cew Symbol(kupgraded):cew Symbol(kStandaloneWrap):cew Symbol(kOnUpgradedClose):cew Symbol(kOwesRawClose):cew Symbol(kSetNoDelay):cew Symbol(kSetKeepAlive):cew Symbol(kSetKeepAliveInitialDelay):cew Symbol(khandlers):cew Symbol(kDestroyOnRead):cew Symbol(kBytesWritten):cew Symbol(closed):cew Symbol(ended):cew Symbol(::buntlsconnectoptions::):cew Symbol(lastWriteQueueSize):cew Symbol(::buntimeout::):cew Symbol(writeCallback):cew Symbol(ksocket):cew net.Socket level 1: constructor:c-w address:cew _onTimeout:cew bufferSize:--a _bytesDispatched:--a bytesWritten:--a connect:cew end:cew _destroy:cew _final:cew localAddress:--a localFamily:--a localPort:--a _connecting:--a pending:--a resume:cew pause:cew read:cew _read:cew _reset:cew _getpeername:cew _getsockname:cew readyState:--a ref:cew remotePort:--a remoteAddress:--a remoteFamily:--a resetAndDestroy:cew setKeepAlive:cew setNoDelay:cew setTypeOfService:cew getTypeOfService:cew setTimeout:cew _unrefTimer:cew unref:cew destroySoon:cew _writev:cew _write:cew Symbol(kAttach):cew Symbol(kCloseRawConnection):cew Symbol(kReinitializeHandle):cew Symbol(::bunUpgradeServerTLS::):cew Symbol(kUpgradeClientTLS):cew net.Socket level 2: constructor:c-w destroy:cew write:cew cork:cew uncork:cew setDefaultEncoding:cew _write:cew _writev:cew end:cew writable:--a writableHighWaterMark:--a writableObjectMode:--a writableBuffer:--a writableLength:--a writableFinished:--a writableCorked:--a writableEnded:--a writableNeedDrain:--a destroyed:--a net.Socket level 3: constructor:c-w destroy:cew _undestroy:cew _destroy:cew push:cew unshift:cew isPaused:cew setEncoding:cew read:cew _read:cew pipe:cew unpipe:cew on:cew addListener:cew removeListener:cew off:cew removeAllListeners:cew resume:cew pause:cew wrap:cew iterator:cew compose:cew readable:--a readableDidRead:--a readableAborted:--a readableHighWaterMark:--a readableBuffer:--a readableFlowing:--a readableLength:--a readableObjectMode:--a readableEncoding:--a errored:--a closed:--a destroyed:--a readableEnded:--a drop:c-w filter:c-w flatMap:c-w map:c-w take:c-w every:c-w forEach:c-w reduce:c-w toArray:c-w some:c-w find:c-w Symbol(nodejs.rejection):cew Symbol(Symbol.asyncDispose):cew Symbol(Symbol.asyncIterator):cew Symbol(Stream.toAsyncStreamable):cew diff --git a/test/js/node/crypto/crypto-rsa.test.js b/test/js/node/crypto/crypto-rsa.test.js index 947807be7abd..ebe6e39f11ad 100644 --- a/test/js/node/crypto/crypto-rsa.test.js +++ b/test/js/node/crypto/crypto-rsa.test.js @@ -314,6 +314,14 @@ test(`RSA with RSA_PKCS1_OAEP_PADDING`, () => { test_rsa("RSA_PKCS1_OAEP_PADDING", "sha512", "sha512"); }); +test.each([null, 0, -0, false, "", NaN, 0n])("padding: %p is the default padding", padding => { + const input = Buffer.from("input"); + expect(crypto.privateDecrypt(rsaKeyPem, crypto.publicEncrypt({ key: rsaPubPem, padding }, input))).toEqual(input); + expect(crypto.privateDecrypt({ key: rsaKeyPem, padding }, crypto.publicEncrypt(rsaPubPem, input))).toEqual(input); + expect(crypto.publicDecrypt(rsaPubPem, crypto.privateEncrypt({ key: rsaKeyPem, padding }, input))).toEqual(input); + expect(crypto.publicDecrypt({ key: rsaPubPem, padding }, crypto.privateEncrypt(rsaKeyPem, input))).toEqual(input); +}); + test(`RSA with hash mismatch`, () => { expect(() => { test_rsa("RSA_PKCS1_OAEP_PADDING", "sha256", "sha512"); diff --git a/test/js/node/crypto/node-crypto.test.js b/test/js/node/crypto/node-crypto.test.js index 52cdd4b42c9f..c781526b0ab3 100644 --- a/test/js/node/crypto/node-crypto.test.js +++ b/test/js/node/crypto/node-crypto.test.js @@ -676,6 +676,21 @@ describe("Decipheriv", () => { }); }); +it.each([ + ["Cipheriv", ["aes-128-ctr", Buffer.alloc(16), Buffer.alloc(16)], object => object.update("a")], + ["Decipheriv", ["aes-128-ctr", Buffer.alloc(16), Buffer.alloc(16)], object => object.update("a")], + ["Hmac", ["sha256", "key"], object => object.update("a").digest()], + ["Certificate", [], object => typeof object.verifySpkac], +])("%s.call(this) initializes an instance of a function that inherits from it", (name, args, use) => { + const Base = crypto[name]; + function Derived() { + Base.call(this, ...args); + } + util.inherits(Derived, Base); + expect(use(new Derived())).toEqual(use(new Base(...args))); + expect(Base.call({}, ...args)).toBeInstanceOf(Base); +}); + describe("DiffieHellman", () => { it("should have correct method names", () => { const dh = crypto.createDiffieHellman(512); @@ -1417,9 +1432,6 @@ describe("KeyObject raw-public / raw-private / raw-seed formats", () => { expect(() => crypto.createPrivateKey({ key: Buffer.alloc(32), format: "raw-private", asymmetricKeyType: "rsa" }), ).toThrow(expect.objectContaining({ code: "ERR_CRYPTO_INCOMPATIBLE_KEY_OPTIONS" })); - expect(() => - crypto.createPrivateKey({ key: Buffer.alloc(32), format: "raw-private", asymmetricKeyType: "banana" }), - ).toThrow(expect.objectContaining({ code: "ERR_INVALID_ARG_VALUE" })); expect(() => crypto.createPublicKey({ key: Buffer.alloc(32), format: "raw-public", asymmetricKeyType: "ec" }), ).toThrow(expect.objectContaining({ code: "ERR_INVALID_ARG_TYPE" })); @@ -1464,6 +1476,43 @@ describe("KeyObject raw-public / raw-private / raw-seed formats", () => { ).toThrow(expect.objectContaining({ code: "ERR_CRYPTO_INCOMPATIBLE_KEY_OPTIONS" })); }); + it.each(["Ed25519", "ED25519", "X25519", "EC", "ML-DSA-44", "Ml-Dsa-65", "ML-KEM-768", "banana"])( + "asymmetricKeyType %j is not how a key type is spelled", + asymmetricKeyType => { + const invalid = expect.objectContaining({ + name: "TypeError", + code: "ERR_INVALID_ARG_VALUE", + message: `Invalid asymmetricKeyType: ${asymmetricKeyType}`, + }); + const key = Buffer.alloc(32); + expect(() => crypto.createPublicKey({ key, format: "raw-public", asymmetricKeyType })).toThrow(invalid); + expect(() => crypto.createPrivateKey({ key, format: "raw-private", asymmetricKeyType })).toThrow(invalid); + expect(() => crypto.createPrivateKey({ key, format: "raw-seed", asymmetricKeyType })).toThrow(invalid); + }, + ); + + it.each([ + ["an array", name => [name]], + ["an object with toString()", name => ({ toString: () => name })], + ["a String object", name => new String(name)], + ["a symbol", name => Symbol(name)], + ])("%s is not a format to import, nor a type of raw-public to export", (_, wrap) => { + const typeError = (code, message) => + expect.objectContaining({ name: "TypeError", code, message: expect.stringContaining(message) }); + const ed = crypto.generateKeyPairSync("ed25519").publicKey; + expect(() => crypto.createPublicKey({ key: ed.export({ format: "jwk" }), format: wrap("jwk") })).toThrow( + typeError("ERR_INVALID_ARG_TYPE", 'The "key.key" property must be of type string or an instance of'), + ); + const raw = { key: ed.export({ format: "raw-public" }), asymmetricKeyType: "ed25519" }; + expect(() => crypto.createPublicKey({ ...raw, format: wrap("raw-public") })).toThrow( + typeError("ERR_INVALID_ARG_VALUE", "format' is invalid. Received "), + ); + const ec = crypto.generateKeyPairSync("ec", { namedCurve: "P-256" }).publicKey; + expect(() => ec.export({ format: "raw-public", type: wrap("compressed") })).toThrow( + typeError("ERR_INVALID_ARG_VALUE", "'options.type' must be one of: 'compressed', 'uncompressed'. Received "), + ); + }); + it("publicEncrypt is not confused by a buffer detached from an oaepLabel getter", () => { const { publicKey, privateKey } = crypto.generateKeyPairSync("rsa", { modulusLength: 2048 }); const label = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); @@ -2012,6 +2061,24 @@ describe("Sign and Verify", () => { expect(verifier().verify({ key: rsa.publicKey, ...options }, rsaSignature)).toBe(false); }); + it.each(["md5", "ripemd160", "sha512-256", "sha3-256", "blake2b512"])( + "throw for an EC key with %s, which BoringSSL has no ECDSA for", + digest => { + const invalidDigest = expect.objectContaining({ name: "Error", code: "ERR_OSSL_EVP_INVALID_DIGEST_TYPE" }); + expect(() => crypto.createSign(digest).update(data).sign(ec.privateKey)).toThrow(invalidDigest); + expect(() => crypto.createVerify(digest).update(data).verify(ec.publicKey, Buffer.alloc(64))).toThrow( + invalidDigest, + ); + }, + ); + + it("sign() returns a Buffer on an ArrayBuffer of its own length", () => { + // The DER of a P-521 signature is always shorter than the most that BoringSSL allows for. + const { privateKey } = crypto.generateKeyPairSync("ec", { namedCurve: "P-521" }); + const signature = crypto.createSign("sha256").update(data).sign(privateKey); + expect(signature.buffer.byteLength).toBe(signature.length); + }); + it("verify() throws for an ieee-p1363 signature of the wrong length", () => { const key = { key: ec.publicKey, dsaEncoding: "ieee-p1363" }; const signature = crypto.sign("sha256", data, { key: ec.privateKey, dsaEncoding: "ieee-p1363" }); diff --git a/test/js/node/crypto/x509.test.ts b/test/js/node/crypto/x509.test.ts index 11cfb2b7d016..3392f56af858 100644 --- a/test/js/node/crypto/x509.test.ts +++ b/test/js/node/crypto/x509.test.ts @@ -4,7 +4,7 @@ import { once } from "node:events"; import { readFileSync } from "node:fs"; import type { AddressInfo } from "node:net"; import path from "node:path"; -import { connect, createServer, rootCertificates, type PeerCertificate } from "node:tls"; +import { connect, createServer, rootCertificates, type PeerCertificate, type TLSSocket } from "node:tls"; // Self-signed, valid until 2126. Subject CN=wildcard-san.example.com, // subjectAltName: DNS:*.wildcard.example.com, DNS:exact.example.com @@ -263,18 +263,19 @@ describe("the legacy infoAccess", () => { const directory = path.join(import.meta.dir, "..", "test", "fixtures", "x509-escaping"); const cert = readFileSync(path.join(directory, "info-1-cert.pem")); const server = createServer({ key: readFileSync(path.join(directory, "server-key.pem")), cert }); + let socket: TLSSocket | undefined, serverSocket: TLSSocket | undefined; try { await once(server.listen(0), "listening"); const accepted = once(server, "secureConnection"); let checked: PeerCertificate | undefined; - const socket = connect({ + socket = connect({ port: (server.address() as AddressInfo).port, ca: cert, servername: "example.com", checkServerIdentity: (_, peer) => void (checked = peer), }); await once(socket, "secureConnect"); - const [serverSocket] = await accepted; + [serverSocket] = await accepted; const infoAccess = { "CA Issuers - URI": ["http://ca.example.com/\nOCSP - URI:http://evil.example.com"], "OCSP - DNS": ["good.example.com\nOCSP - URI:http://ca.nodejs.org/ca.cert"], @@ -282,11 +283,11 @@ describe("the legacy infoAccess", () => { expect({ checkServerIdentity: checked?.infoAccess, getPeerCertificate: socket.getPeerCertificate().infoAccess, - getCertificate: serverSocket.getCertificate().infoAccess, + getCertificate: (serverSocket!.getCertificate() as PeerCertificate).infoAccess, }).toEqual({ checkServerIdentity: infoAccess, getPeerCertificate: infoAccess, getCertificate: infoAccess }); - socket.destroy(); - serverSocket.destroy(); } finally { + socket?.destroy(); + serverSocket?.destroy(); server.close(); } }); diff --git a/test/js/node/http/client-timeout-error.test.ts b/test/js/node/http/client-timeout-error.test.ts index 489f65200f61..a9411c984ba0 100644 --- a/test/js/node/http/client-timeout-error.test.ts +++ b/test/js/node/http/client-timeout-error.test.ts @@ -52,6 +52,19 @@ describe("node:http client timeout", () => { } }); + it("should emit timeout event while the connection is being made", async () => { + const neverAnswers = () => {}; + const req = request({ host: "localhost", port: 1, lookup: neverAnswers, timeout: 1 }); + req.on("error", () => {}); + try { + req.end(); + await once(req, "timeout"); + expect(req.socket?.connecting).toBe(true); + } finally { + req.destroy(); + } + }); + it("should clear timeout when explicitly set to 0", async () => { const server = createServer((req, res) => { res.end("OK"); diff --git a/test/js/node/http/node-http-own-keys-through-an-exchange.expected.txt b/test/js/node/http/node-http-own-keys-through-an-exchange.expected.txt index f30902b9e373..ba89b38277a9 100644 --- a/test/js/node/http/node-http-own-keys-through-an-exchange.expected.txt +++ b/test/js/node/http/node-http-own-keys-through-an-exchange.expected.txt @@ -41,15 +41,15 @@ an emitter that captures rejections: _events _eventsCount _maxListeners emit @sh an emitter that captures rejections, for-in: _events _eventsCount _maxListeners emit setMaxListeners constructor getMaxListeners addListener on prependListener once prependOnceListener removeListener off removeAllListeners listeners rawListeners listenerCount eventNames its emit: emit, the prototype's false emit() of a subclass that captures: false -a socket at connection: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff +a socket at connection: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff /end req: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture /end res: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback -/end socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback +/end socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback /end res, for-in: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage setHeader appendHeader setHeaders removeHeader cork uncork setTimeout _ended _writeRaw writeEarlyHints writeInformation writeProcessing writeContinue end write _callPendingCallbacks _finish detachSocket _implicitHeader _send writeHead assignSocket destroy emit flushHeaders _isLenientHeaderValidation _renderHeaders _storeHeader getHeader getHeaderNames getRawHeaderNames getHeaders hasHeader addTrailers _flush _flushOutput pipe eventNames setMaxListeners getMaxListeners addListener on prependListener once prependOnceListener removeListener off removeAllListeners listeners rawListeners listenerCount /end res after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback /end res at finish: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kDetachedFrom /end req at finish: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture -/end socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/end socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /end res a tick after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kDetachedFrom /end res at close: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kDetachedFrom /end req at the close of res: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture @@ -57,12 +57,12 @@ a socket at connection: _events _readableState _writableState allowHalfOpen _max /end a client's response at close: _consuming _dumped complete _closed rawTrailers _events _readableState _maxListeners socket httpVersionMajor httpVersionMinor httpVersion joinDuplicateHeaders upgrade url method statusCode statusMessage client req _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @shapeMode @kCapture @noBody @kAutoDestroyed /end req: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture /end res: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback -/end socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/end socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /end res, for-in: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage setHeader appendHeader setHeaders removeHeader cork uncork setTimeout _ended _writeRaw writeEarlyHints writeInformation writeProcessing writeContinue end write _callPendingCallbacks _finish detachSocket _implicitHeader _send writeHead assignSocket destroy emit flushHeaders _isLenientHeaderValidation _renderHeaders _storeHeader getHeader getHeaderNames getRawHeaderNames getHeaders hasHeader addTrailers _flush _flushOutput pipe eventNames setMaxListeners getMaxListeners addListener on prependListener once prependOnceListener removeListener off removeAllListeners listeners rawListeners listenerCount /end res after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback /end res at finish: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kDetachedFrom /end req at finish: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture -/end socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/end socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /end res a tick after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kDetachedFrom /end res at close: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kDetachedFrom /end req at the close of res: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture @@ -70,12 +70,12 @@ a socket at connection: _events _readableState _writableState allowHalfOpen _max /end a client's response at close: _consuming _dumped complete _closed rawTrailers _events _readableState _maxListeners socket httpVersionMajor httpVersionMinor httpVersion joinDuplicateHeaders upgrade url method statusCode statusMessage client req _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @shapeMode @kCapture @noBody @kAutoDestroyed /empty req: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture /empty res: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback -/empty socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/empty socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /empty res, for-in: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage setHeader appendHeader setHeaders removeHeader cork uncork setTimeout _ended _writeRaw writeEarlyHints writeInformation writeProcessing writeContinue end write _callPendingCallbacks _finish detachSocket _implicitHeader _send writeHead assignSocket destroy emit flushHeaders _isLenientHeaderValidation _renderHeaders _storeHeader getHeader getHeaderNames getRawHeaderNames getHeaders hasHeader addTrailers _flush _flushOutput pipe eventNames setMaxListeners getMaxListeners addListener on prependListener once prependOnceListener removeListener off removeAllListeners listeners rawListeners listenerCount /empty res after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback /empty res at finish: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kDetachedFrom /empty req at finish: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture -/empty socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/empty socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /empty res a tick after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kDetachedFrom /empty res at close: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kDetachedFrom /empty req at the close of res: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture @@ -83,13 +83,13 @@ a socket at connection: _events _readableState _writableState allowHalfOpen _max /empty a client's response at close: _consuming _dumped complete _closed rawTrailers _events _readableState _maxListeners socket httpVersionMajor httpVersionMinor httpVersion joinDuplicateHeaders upgrade url method statusCode statusMessage client req _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @shapeMode @kCapture @noBody @kAutoDestroyed /write req: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture /write res: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback -/write socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/write socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /write res, for-in: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage setHeader appendHeader setHeaders removeHeader cork uncork setTimeout _ended _writeRaw writeEarlyHints writeInformation writeProcessing writeContinue end write _callPendingCallbacks _finish detachSocket _implicitHeader _send writeHead assignSocket destroy emit flushHeaders _isLenientHeaderValidation _renderHeaders _storeHeader getHeader getHeaderNames getRawHeaderNames getHeaders hasHeader addTrailers _flush _flushOutput pipe eventNames setMaxListeners getMaxListeners addListener on prependListener once prependOnceListener removeListener off removeAllListeners listeners rawListeners listenerCount /write res after write: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kBytesBuffered @kAccountingFlushScheduled /write res after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kBytesBuffered @kAccountingFlushScheduled /write res at finish: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kBytesBuffered @kAccountingFlushScheduled @kDetachedFrom /write req at finish: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture -/write socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/write socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /write res a tick after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kBytesBuffered @kAccountingFlushScheduled @kDetachedFrom /write res at close: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kBytesBuffered @kAccountingFlushScheduled @kDetachedFrom /write req at the close of res: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture @@ -97,13 +97,13 @@ a socket at connection: _events _readableState _writableState allowHalfOpen _max /write a client's response at close: _consuming _dumped complete _closed rawTrailers _events _readableState _maxListeners socket httpVersionMajor httpVersionMinor httpVersion joinDuplicateHeaders upgrade url method statusCode statusMessage client req _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @shapeMode @kCapture @noBody @kAutoDestroyed /head req: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture /head res: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback -/head socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/head socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /head res, for-in: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage setHeader appendHeader setHeaders removeHeader cork uncork setTimeout _ended _writeRaw writeEarlyHints writeInformation writeProcessing writeContinue end write _callPendingCallbacks _finish detachSocket _implicitHeader _send writeHead assignSocket destroy emit flushHeaders _isLenientHeaderValidation _renderHeaders _storeHeader getHeader getHeaderNames getRawHeaderNames getHeaders hasHeader addTrailers _flush _flushOutput pipe eventNames setMaxListeners getMaxListeners addListener on prependListener once prependOnceListener removeListener off removeAllListeners listeners rawListeners listenerCount /head res after writeHead: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kSnapshotStatusCode @kSnapshotStatusMessage /head res after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kSnapshotStatusCode @kSnapshotStatusMessage /head res at finish: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kSnapshotStatusCode @kSnapshotStatusMessage @kDetachedFrom /head req at finish: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture -/head socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/head socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /head res a tick after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kSnapshotStatusCode @kSnapshotStatusMessage @kDetachedFrom /head res at close: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kSnapshotStatusCode @kSnapshotStatusMessage @kDetachedFrom /head req at the close of res: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture @@ -111,13 +111,13 @@ a socket at connection: _events _readableState _writableState allowHalfOpen _max /head a client's response at close: _consuming _dumped complete _closed rawTrailers _events _readableState _maxListeners socket httpVersionMajor httpVersionMinor httpVersion joinDuplicateHeaders upgrade url method statusCode statusMessage client req _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @shapeMode @kCapture @noBody @kAutoDestroyed /length req: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture /length res: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback -/length socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/length socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /length res, for-in: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage setHeader appendHeader setHeaders removeHeader cork uncork setTimeout _ended _writeRaw writeEarlyHints writeInformation writeProcessing writeContinue end write _callPendingCallbacks _finish detachSocket _implicitHeader _send writeHead assignSocket destroy emit flushHeaders _isLenientHeaderValidation _renderHeaders _storeHeader getHeader getHeaderNames getRawHeaderNames getHeaders hasHeader addTrailers _flush _flushOutput pipe eventNames setMaxListeners getMaxListeners addListener on prependListener once prependOnceListener removeListener off removeAllListeners listeners rawListeners listenerCount /length res after write: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kBytesBuffered @kAccountingFlushScheduled /length res after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kBytesBuffered @kAccountingFlushScheduled /length res at finish: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kBytesBuffered @kAccountingFlushScheduled @kDetachedFrom /length req at finish: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture -/length socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/length socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /length res a tick after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kBytesBuffered @kAccountingFlushScheduled @kDetachedFrom /length res at close: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kBytesBuffered @kAccountingFlushScheduled @kDetachedFrom /length req at the close of res: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture @@ -125,13 +125,13 @@ a socket at connection: _events _readableState _writableState allowHalfOpen _max /length a client's response at close: _consuming _dumped complete _closed rawTrailers _events _readableState _maxListeners socket httpVersionMajor httpVersionMinor httpVersion joinDuplicateHeaders upgrade url method statusCode statusMessage client req _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @shapeMode @kCapture @noBody @kAutoDestroyed /callback req: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture /callback res: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback -/callback socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/callback socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /callback res, for-in: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage setHeader appendHeader setHeaders removeHeader cork uncork setTimeout _ended _writeRaw writeEarlyHints writeInformation writeProcessing writeContinue end write _callPendingCallbacks _finish detachSocket _implicitHeader _send writeHead assignSocket destroy emit flushHeaders _isLenientHeaderValidation _renderHeaders _storeHeader getHeader getHeaderNames getRawHeaderNames getHeaders hasHeader addTrailers _flush _flushOutput pipe eventNames setMaxListeners getMaxListeners addListener on prependListener once prependOnceListener removeListener off removeAllListeners listeners rawListeners listenerCount /callback res after write: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kBytesBuffered @kAccountingFlushScheduled /callback res after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kBytesBuffered @kAccountingFlushScheduled /callback res at finish: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kBytesBuffered @kAccountingFlushScheduled @kDetachedFrom /callback req at finish: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture -/callback socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/callback socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /callback res a tick after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kBytesBuffered @kAccountingFlushScheduled @kDetachedFrom /callback res at close: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kBytesBuffered @kAccountingFlushScheduled @kDetachedFrom /callback req at the close of res: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture @@ -139,13 +139,13 @@ a socket at connection: _events _readableState _writableState allowHalfOpen _max /callback a client's response at close: _consuming _dumped complete _closed rawTrailers _events _readableState _maxListeners socket httpVersionMajor httpVersionMinor httpVersion joinDuplicateHeaders upgrade url method statusCode statusMessage client req _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @shapeMode @kCapture @noBody @kAutoDestroyed /flush req: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture /flush res: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback -/flush socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/flush socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /flush res, for-in: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage setHeader appendHeader setHeaders removeHeader cork uncork setTimeout _ended _writeRaw writeEarlyHints writeInformation writeProcessing writeContinue end write _callPendingCallbacks _finish detachSocket _implicitHeader _send writeHead assignSocket destroy emit flushHeaders _isLenientHeaderValidation _renderHeaders _storeHeader getHeader getHeaderNames getRawHeaderNames getHeaders hasHeader addTrailers _flush _flushOutput pipe eventNames setMaxListeners getMaxListeners addListener on prependListener once prependOnceListener removeListener off removeAllListeners listeners rawListeners listenerCount /flush res after flushHeaders: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kSnapshotStatusCode @kSnapshotStatusMessage @kFramingFrozenChunked /flush res after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kSnapshotStatusCode @kSnapshotStatusMessage @kFramingFrozenChunked /flush res at finish: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kSnapshotStatusCode @kSnapshotStatusMessage @kFramingFrozenChunked @kDetachedFrom /flush req at finish: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture -/flush socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/flush socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /flush res a tick after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kSnapshotStatusCode @kSnapshotStatusMessage @kFramingFrozenChunked @kDetachedFrom /flush res at close: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback @kSnapshotStatusCode @kSnapshotStatusMessage @kFramingFrozenChunked @kDetachedFrom /flush req at the close of res: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture @@ -153,12 +153,12 @@ a socket at connection: _events _readableState _writableState allowHalfOpen _max /flush a client's response at close: _consuming _dumped complete _closed rawTrailers _events _readableState _maxListeners socket httpVersionMajor httpVersionMinor httpVersion joinDuplicateHeaders upgrade url method statusCode statusMessage client req _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @shapeMode @kCapture @noBody @kAutoDestroyed /late req: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture /late res: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback -/late socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/late socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /late res, for-in: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage setHeader appendHeader setHeaders removeHeader cork uncork setTimeout _ended _writeRaw writeEarlyHints writeInformation writeProcessing writeContinue end write _callPendingCallbacks _finish detachSocket _implicitHeader _send writeHead assignSocket destroy emit flushHeaders _isLenientHeaderValidation _renderHeaders _storeHeader getHeader getHeaderNames getRawHeaderNames getHeaders hasHeader addTrailers _flush _flushOutput pipe eventNames setMaxListeners getMaxListeners addListener on prependListener once prependOnceListener removeListener off removeAllListeners listeners rawListeners listenerCount /late res after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback /late res at finish: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback /late req at finish: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture @kAutoDestroyed -/late socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/late socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /late res a tick after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback /late res at close: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback /late req at the close of res: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture @kAutoDestroyed @@ -166,40 +166,40 @@ a socket at connection: _events _readableState _writableState allowHalfOpen _max /late a client's response at close: _consuming _dumped complete _closed rawTrailers _events _readableState _maxListeners socket httpVersionMajor httpVersionMinor httpVersion joinDuplicateHeaders upgrade url method statusCode statusMessage client req _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @shapeMode @kCapture @noBody @kAutoDestroyed /post req: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture /post res: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback -/post socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/post socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /post res, for-in: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage setHeader appendHeader setHeaders removeHeader cork uncork setTimeout _ended _writeRaw writeEarlyHints writeInformation writeProcessing writeContinue end write _callPendingCallbacks _finish detachSocket _implicitHeader _send writeHead assignSocket destroy emit flushHeaders _isLenientHeaderValidation _renderHeaders _storeHeader getHeader getHeaderNames getRawHeaderNames getHeaders hasHeader addTrailers _flush _flushOutput pipe eventNames setMaxListeners getMaxListeners addListener on prependListener once prependOnceListener removeListener off removeAllListeners listeners rawListeners listenerCount /post res after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback /post res at finish: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback /post req at finish: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture @kAutoDestroyed -/post socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet +/post socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback @socketTimeoutTimer @keepAliveTimeoutSet /post res a tick after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback /post res at close: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @fakeSocket @closeCallback /post req at the close of res: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture @kAutoDestroyed /post Object.keys(res) at close: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended /post a client's response at close: _consuming _dumped complete _closed rawTrailers _events _readableState _maxListeners socket httpVersionMajor httpVersionMinor httpVersion joinDuplicateHeaders upgrade url method statusCode statusMessage client req _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @shapeMode @kCapture @noBody @kAutoDestroyed -a socket at connection: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff +a socket at connection: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff /end req: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture /end res: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @kMustCloseConnection @fakeSocket @closeCallback -/end socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback +/end socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback /end res, for-in: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage setHeader appendHeader setHeaders removeHeader cork uncork setTimeout _ended _writeRaw writeEarlyHints writeInformation writeProcessing writeContinue end write _callPendingCallbacks _finish detachSocket _implicitHeader _send writeHead assignSocket destroy emit flushHeaders _isLenientHeaderValidation _renderHeaders _storeHeader getHeader getHeaderNames getRawHeaderNames getHeaders hasHeader addTrailers _flush _flushOutput pipe eventNames setMaxListeners getMaxListeners addListener on prependListener once prependOnceListener removeListener off removeAllListeners listeners rawListeners listenerCount /end res after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @kMustCloseConnection @fakeSocket @closeCallback /end res at finish: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @kMustCloseConnection @fakeSocket @closeCallback @kDetachedFrom /end req at finish: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture -/end socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback +/end socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback /end res a tick after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @kMustCloseConnection @fakeSocket @closeCallback @kDetachedFrom /end res at close: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @kMustCloseConnection @fakeSocket @closeCallback @kDetachedFrom /end req at the close of res: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture /end Object.keys(res) at close: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended /end a client's response at close: _consuming _dumped complete _closed rawTrailers _events _readableState _maxListeners socket httpVersionMajor httpVersionMinor httpVersion joinDuplicateHeaders upgrade url method statusCode statusMessage client req _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @shapeMode @kCapture @noBody @kAutoDestroyed -a socket at connection: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff +a socket at connection: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff /late req: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture /late res: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @kMustCloseConnection @fakeSocket @closeCallback -/late socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback +/late socket: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback /late res, for-in: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage setHeader appendHeader setHeaders removeHeader cork uncork setTimeout _ended _writeRaw writeEarlyHints writeInformation writeProcessing writeContinue end write _callPendingCallbacks _finish detachSocket _implicitHeader _send writeHead assignSocket destroy emit flushHeaders _isLenientHeaderValidation _renderHeaders _storeHeader getHeader getHeaderNames getRawHeaderNames getHeaders hasHeader addTrailers _flush _flushOutput pipe eventNames setMaxListeners getMaxListeners addListener on prependListener once prependOnceListener removeListener off removeAllListeners listeners rawListeners listenerCount /late res after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @kMustCloseConnection @fakeSocket @closeCallback /late res at finish: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @kMustCloseConnection @fakeSocket @closeCallback /late req at finish: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture @kAutoDestroyed -/late socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback +/late socket at finish: _events _readableState _writableState allowHalfOpen _maxListeners _parent _parentWrap bytesRead connecting _host _port timeout _pendingData _pendingEncoding _hadError isServer _handle server _server _peername _sockname _closeAfterHandlingError _eventsCount parser _httpMessage _secureEstablished _paused encrypted @shapeMode @kCapture @kupgraded @kStandaloneWrap @kOnUpgradedClose @kOwesRawClose @kSetNoDelay @kSetKeepAlive @kSetKeepAliveInitialDelay @khandlers @kDestroyOnRead @kBytesWritten @closed @ended @::buntlsconnectoptions:: @lastWriteQueueSize @::buntimeout:: @writeCallback @ksocket @kStreamingEnabled @kBoundOnAbort @keepAliveIdleStart @kBytesWritten @kClosedWithUnsentData @handle @kUpgradeIncoming @kOnReadParsed @kHandoffResponse @kDestroySoon @http.server.socketHandedOff @request @kStopParsingOnCloseListener @closeCallback /late res a tick after end: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @kMustCloseConnection @fakeSocket @closeCallback /late res at close: _events _eventsCount _maxListeners outputData outputSize destroyed _last maxRequestsOnConnectionReached _defaultKeepAlive useChunkedEncodingByDefault sendDate _removedConnection _removedContLen _removedTE strictContentLength _contentLength _hasBody _trailer finished _headerSent _closed _header _keepAliveTimeout _onPendingData req _sent100 statusCode statusMessage _ended @shapeMode @kCapture @kChunkedEncoding @kShouldKeepAlive @kBytesWritten @kNeedDrain @corked @kChunkedBuffer @kChunkedLength @kSocket @kOutHeaders @errored @kHighWaterMark @kRejectNonStandardBodyWrites @kLenientValidation @headerState @pendingCallbacks @handle @kMustCloseConnection @fakeSocket @closeCallback /late req at the close of res: _consuming _dumped complete _closed rawTrailers url method socket client upgrade _events _readableState _maxListeners _eventsCount @aborted @eofInProgress @kHeaders @kReqShouldKeepAlive @kRawHeaders @kHeaderSource @kHeadersCount @kTrailers @kTrailersCount @kAbortController @handle @noBody @shapeMode @kCapture @kAutoDestroyed diff --git a/test/js/node/http/node-http-own-values-through-an-exchange.expected.txt b/test/js/node/http/node-http-own-values-through-an-exchange.expected.txt index eda5e4457507..18618f2e12a6 100644 --- a/test/js/node/http/node-http-own-values-through-an-exchange.expected.txt +++ b/test/js/node/http/node-http-own-values-through-an-exchange.expected.txt @@ -1,65 +1,65 @@ -a socket at connection: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=2 | parser={6: function serverParserShimOnTimeout, incoming: null, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=undefined | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=null | @keepAliveIdleStart=undefined | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false +a socket at connection: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=2 | parser={6: function serverParserShimOnTimeout, incoming: null, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=undefined | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=null | @keepAliveIdleStart=undefined | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false level 1 above a socket: constructor bytesWritten destroyNow _onTimeout _unrefTimer address bufferSize connect _destroy _final destroySoon localAddress localFamily localPort pending _read readyState servername authorized authorizationError ref remoteAddress remotePort remoteFamily resetAndDestroy setKeepAlive setNoDelay setTimeout setEncoding unref _write pause resume @kRememberPeer @kEnableStreaming @::bunternal:: @kHasQueuedReads /end res: _events=[null] {finish: function emitResponseFinish} | _eventsCount=1 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=false | _headerSent=false | _closed=false | _header=null | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=0 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose -/end socket: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=a ServerResponse | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=undefined | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=a IncomingMessage | @kStopParsingOnCloseListener=true | @closeCallback=function onServerResponseClose +/end socket: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=a ServerResponse | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=undefined | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=a IncomingMessage | @kStopParsingOnCloseListener=true | @closeCallback=function onServerResponseClose /end res after end: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=5 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose /end res at finish: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=5 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=undefined | @kDetachedFrom=a Socket -/end socket at finish: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=6000 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=null | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=undefined | @kStopParsingOnCloseListener=true | @closeCallback=undefined | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=true +/end socket at finish: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=6000 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=null | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=undefined | @kStopParsingOnCloseListener=true | @closeCallback=undefined | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=true /end res a tick after end: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=5 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=undefined | @kDetachedFrom=a Socket /end res at close: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=true | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=5 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=true | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=undefined | @kDetachedFrom=a Socket /header res: _events=[null] {finish: function emitResponseFinish} | _eventsCount=1 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=false | _headerSent=false | _closed=false | _header=null | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=0 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose -/header socket: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=a ServerResponse | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=a IncomingMessage | @kStopParsingOnCloseListener=true | @closeCallback=function onServerResponseClose | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=false +/header socket: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=a ServerResponse | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=a IncomingMessage | @kStopParsingOnCloseListener=true | @closeCallback=function onServerResponseClose | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=false /header res after setHeader: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=false | _headerSent=false | _closed=false | _header=null | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=[null] {x-one: ["X-One","1"]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=0 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose /header res after four stores: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=false | _headerSent=false | _closed=false | _header=null | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=[null] {x-one: ["X-One",["1","2"]], x-two: ["X-Two",["a","b"]], x-three: ["x-three",3]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=0 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose /header res after removeHeader: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=false | _headerSent=false | _closed=false | _header=null | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=[null] {x-one: ["X-One",["1","2"]], x-three: ["x-three",3]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=0 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose /header res after end: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=2 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=[null] {x-one: ["X-One",["1","2"]], x-three: ["x-three",3]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose /header res at finish: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=2 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=[null] {x-one: ["X-One",["1","2"]], x-three: ["x-three",3]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=undefined | @kDetachedFrom=a Socket -/header socket at finish: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=6000 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=null | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=undefined | @kStopParsingOnCloseListener=true | @closeCallback=undefined | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=true +/header socket at finish: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=6000 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=null | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=undefined | @kStopParsingOnCloseListener=true | @closeCallback=undefined | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=true /header res a tick after end: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=2 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=[null] {x-one: ["X-One",["1","2"]], x-three: ["x-three",3]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=undefined | @kDetachedFrom=a Socket /header res at close: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=true | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=2 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=true | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=[null] {x-one: ["X-One",["1","2"]], x-three: ["x-three",3]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=undefined | @kDetachedFrom=a Socket /removed res: _events=[null] {finish: function emitResponseFinish} | _eventsCount=1 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=false | _headerSent=false | _closed=false | _header=null | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=0 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose -/removed socket: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=a ServerResponse | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=a IncomingMessage | @kStopParsingOnCloseListener=true | @closeCallback=function onServerResponseClose | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=false +/removed socket: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=a ServerResponse | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=a IncomingMessage | @kStopParsingOnCloseListener=true | @closeCallback=function onServerResponseClose | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=false /removed res after removeHeader: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=false | _headerSent=false | _closed=false | _header=null | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=[null] {} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=0 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose /removed res after end: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=2 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=[null] {} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose /removed res at finish: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=2 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=[null] {} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=undefined | @kDetachedFrom=a Socket -/removed socket at finish: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=6000 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=null | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=undefined | @kStopParsingOnCloseListener=true | @closeCallback=undefined | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=true +/removed socket at finish: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=6000 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=null | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=undefined | @kStopParsingOnCloseListener=true | @closeCallback=undefined | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=true /removed res a tick after end: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=2 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=[null] {} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=undefined | @kDetachedFrom=a Socket /removed res at close: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=true | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=2 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=true | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=[null] {} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=undefined | @kDetachedFrom=a Socket /head res: _events=[null] {finish: function emitResponseFinish} | _eventsCount=1 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=false | _headerSent=false | _closed=false | _header=null | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=0 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose -/head socket: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=a ServerResponse | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=a IncomingMessage | @kStopParsingOnCloseListener=true | @closeCallback=function onServerResponseClose | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=false +/head socket: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=a ServerResponse | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=a IncomingMessage | @kStopParsingOnCloseListener=true | @closeCallback=function onServerResponseClose | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=false /head res after writeHead: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=false | _headerSent=false | _closed=false | _header=null | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=a string of 2 | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=[null] {x-one: ["x-one","1"], content-length: ["content-length",2]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=1 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose | @kSnapshotStatusCode=200 | @kSnapshotStatusMessage=a string of 2 /head res after end: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=2 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=a string of 2 | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=[null] {x-one: ["x-one","1"], content-length: ["content-length",2]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose | @kSnapshotStatusCode=200 | @kSnapshotStatusMessage=a string of 2 /head res at finish: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=2 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=a string of 2 | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=[null] {x-one: ["x-one","1"], content-length: ["content-length",2]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=undefined | @kSnapshotStatusCode=200 | @kSnapshotStatusMessage=a string of 2 | @kDetachedFrom=a Socket -/head socket at finish: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=6000 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=null | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=undefined | @kStopParsingOnCloseListener=true | @closeCallback=undefined | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=true +/head socket at finish: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=6000 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=null | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=undefined | @kStopParsingOnCloseListener=true | @closeCallback=undefined | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=true /head res a tick after end: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=2 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=a string of 2 | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=[null] {x-one: ["x-one","1"], content-length: ["content-length",2]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=undefined | @kSnapshotStatusCode=200 | @kSnapshotStatusMessage=a string of 2 | @kDetachedFrom=a Socket /head res at close: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=true | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=2 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=true | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=a string of 2 | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=[null] {x-one: ["x-one","1"], content-length: ["content-length",2]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=undefined | @kSnapshotStatusCode=200 | @kSnapshotStatusMessage=a string of 2 | @kDetachedFrom=a Socket /length res: _events=[null] {finish: function emitResponseFinish} | _eventsCount=1 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=false | _headerSent=false | _closed=false | _header=null | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=0 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose -/length socket: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=a ServerResponse | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=a IncomingMessage | @kStopParsingOnCloseListener=true | @closeCallback=function onServerResponseClose | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=false +/length socket: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=a ServerResponse | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=a IncomingMessage | @kStopParsingOnCloseListener=true | @closeCallback=function onServerResponseClose | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=false /length res after write: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=false | _headerSent=false | _closed=false | _header=null | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=[null] {content-length: ["content-length",2]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose | @kBytesBuffered=2 | @kAccountingFlushScheduled=true /length res after end: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=[null] {content-length: ["content-length",2]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose | @kBytesBuffered=2 | @kAccountingFlushScheduled=true /length res at finish: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=[null] {content-length: ["content-length",2]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=undefined | @kBytesBuffered=0 | @kAccountingFlushScheduled=false | @kDetachedFrom=a Socket -/length socket at finish: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=6000 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=null | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=undefined | @kStopParsingOnCloseListener=true | @closeCallback=undefined | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=true +/length socket at finish: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=6000 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=null | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=undefined | @kStopParsingOnCloseListener=true | @closeCallback=undefined | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=true /length res a tick after end: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=[null] {content-length: ["content-length",2]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=undefined | @kBytesBuffered=0 | @kAccountingFlushScheduled=false | @kDetachedFrom=a Socket /length res at close: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=true | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=true | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=[null] {content-length: ["content-length",2]} | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=false | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=undefined | @kBytesBuffered=0 | @kAccountingFlushScheduled=false | @kDetachedFrom=a Socket /write res: _events=[null] {finish: function emitResponseFinish} | _eventsCount=1 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=false | _headerSent=false | _closed=false | _header=null | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=0 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose -/write socket: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=a ServerResponse | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=a IncomingMessage | @kStopParsingOnCloseListener=true | @closeCallback=function onServerResponseClose | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=false +/write socket: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=a ServerResponse | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=a IncomingMessage | @kStopParsingOnCloseListener=true | @closeCallback=function onServerResponseClose | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=false /write res after write: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=false | _headerSent=false | _closed=false | _header=null | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose | @kBytesBuffered=6 | @kAccountingFlushScheduled=true /write res after end: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose | @kBytesBuffered=6 | @kAccountingFlushScheduled=true /write res at finish: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=undefined | @kBytesBuffered=0 | @kAccountingFlushScheduled=false | @kDetachedFrom=a Socket -/write socket at finish: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=6000 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=null | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=undefined | @kStopParsingOnCloseListener=true | @closeCallback=undefined | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=true +/write socket at finish: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=6000 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=null | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=undefined | @kStopParsingOnCloseListener=true | @closeCallback=undefined | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=true /write res a tick after end: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=undefined | @kBytesBuffered=0 | @kAccountingFlushScheduled=false | @kDetachedFrom=a Socket /write res at close: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=true | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=true | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=undefined | @kBytesBuffered=0 | @kAccountingFlushScheduled=false | @kDetachedFrom=a Socket /late res: _events=[null] {finish: function emitResponseFinish} | _eventsCount=1 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=false | _headerSent=false | _closed=false | _header=null | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=0 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose -/late socket: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=a ServerResponse | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=a IncomingMessage | @kStopParsingOnCloseListener=true | @closeCallback=function onServerResponseClose | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=false +/late socket: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=a ServerResponse | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=a IncomingMessage | @kStopParsingOnCloseListener=true | @closeCallback=function onServerResponseClose | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=false /late res after end: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=4 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose /late res at finish: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=4 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=function onClose -/late socket at finish: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=6000 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: null, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=null | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=undefined | @kStopParsingOnCloseListener=true | @closeCallback=undefined | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=true +/late socket at finish: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=6000 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: null, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=null | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=undefined | @kStopParsingOnCloseListener=true | @closeCallback=undefined | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=true /late res a tick after end: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=4 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=function onClose /late res at close: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=true | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=4 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=true | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=undefined /post res: _events=[null] {finish: function emitResponseFinish} | _eventsCount=1 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=null | _hasBody=true | _trailer=a string of 0 | finished=false | _headerSent=false | _closed=false | _header=null | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=0 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose -/post socket: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=a ServerResponse | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=a IncomingMessage | @kStopParsingOnCloseListener=true | @closeCallback=function onServerResponseClose | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=false +/post socket: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=0 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: a IncomingMessage, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=a ServerResponse | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=a IncomingMessage | @kStopParsingOnCloseListener=true | @closeCallback=function onServerResponseClose | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=false /post res after end: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=4 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=a Socket | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=a Socket | @closeCallback=function onClose /post res at finish: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=4 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=function onClose -/post socket at finish: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=6000 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: null, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=null | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=undefined | @kStopParsingOnCloseListener=true | @closeCallback=undefined | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=true +/post socket at finish: _events=[null] {timeout: function onNodeHTTPServerSocketTimeout, error: function socketOnError, close: function onSocketCloseStopParsing} | _readableState=a Object | _writableState=a Object | allowHalfOpen=true | _maxListeners=undefined | _parent=null | _parentWrap=null | bytesRead=0 | connecting=false | _host=undefined | _port=undefined | timeout=6000 | _pendingData=undefined | _pendingEncoding=undefined | _hadError=false | isServer=false | _handle=null | server=a Server | _server=undefined | _peername=null | _sockname=null | _closeAfterHandlingError=false | _eventsCount=3 | parser={6: function serverParserShimOnTimeout, incoming: null, outgoing: null, socket: a Socket, free: function serverParserShimFree, close: function serverParserShimClose} | _httpMessage=null | _secureEstablished=false | _paused=false | encrypted=false | @shapeMode=false | @kCapture=false | @kupgraded=null | @kStandaloneWrap=false | @kOnUpgradedClose=undefined | @kOwesRawClose=false | @kSetNoDelay=false | @kSetKeepAlive=false | @kSetKeepAliveInitialDelay=0 | @khandlers={open: function open, data: function data, drain: function drain, end: function end, session: function session, keylog: function keylog, close: function close, handshake: function handshake, error: function error, timeout: function timeout, connectError: function connectError} | @kDestroyOnRead=false | @kBytesWritten=undefined | @closed=false | @ended=false | @::buntlsconnectoptions::=null | @lastWriteQueueSize=0 | @::buntimeout::=null | @writeCallback=undefined | @ksocket=undefined | @kStreamingEnabled=false | @kBoundOnAbort=function bound onServerRequestEvent | @keepAliveIdleStart=a large number | @kBytesWritten=0 | @kClosedWithUnsentData=undefined | @handle=a Object | @kUpgradeIncoming=undefined | @kOnReadParsed=undefined | @kHandoffResponse=undefined | @kDestroySoon=false | @http.server.socketHandedOff=false | @request=undefined | @kStopParsingOnCloseListener=true | @closeCallback=undefined | @socketTimeoutTimer=a Timeout | @keepAliveTimeoutSet=true /post res a tick after end: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=false | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=4 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=false | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=function onClose /post res at close: _events=[null] {finish: [null,null], close: function } | _eventsCount=2 | _maxListeners=undefined | outputData=an array of 0 | outputSize=0 | destroyed=true | _last=false | maxRequestsOnConnectionReached=false | _defaultKeepAlive=true | useChunkedEncodingByDefault=true | sendDate=true | _removedConnection=false | _removedContLen=false | _removedTE=false | strictContentLength=false | _contentLength=4 | _hasBody=true | _trailer=a string of 0 | finished=true | _headerSent=false | _closed=true | _header=a string of 1 | _keepAliveTimeout=5000 | _onPendingData=function nop | req=a IncomingMessage | _sent100=false | statusCode=200 | statusMessage=undefined | _ended=true | @shapeMode=false | @kCapture=false | @kChunkedEncoding=false | @kShouldKeepAlive=true | @kBytesWritten=0 | @kNeedDrain=false | @corked=0 | @kChunkedBuffer=an array of 0 | @kChunkedLength=0 | @kSocket=null | @kOutHeaders=null | @errored=null | @kHighWaterMark=a large number | @kRejectNonStandardBodyWrites=false | @kLenientValidation=undefined | @headerState=2 | @pendingCallbacks=an array of 0 | @handle=a Object | @fakeSocket=null | @closeCallback=undefined diff --git a/test/js/node/net/node-net.test.ts b/test/js/node/net/node-net.test.ts index 3efd0530162a..4c7c7c2e1a7a 100644 --- a/test/js/node/net/node-net.test.ts +++ b/test/js/node/net/node-net.test.ts @@ -21,6 +21,7 @@ import { randomUUID } from "node:crypto"; import { once } from "node:events"; import fs from "node:fs"; import { + type AddressInfo, BlockList, connect, createConnection, @@ -37,7 +38,7 @@ import { Stream, } from "node:net"; import { join } from "node:path"; -import { TLSSocket } from "node:tls"; +import { connect as tlsConnect, TLSSocket } from "node:tls"; const socket_domain = tmpdirSync(); @@ -1030,6 +1031,44 @@ it("should trigger error when aborted even if connection failed, and the signal expect(err.cause?.name).toBe("TimeoutError"); }); +describe.concurrent("'timeout' is emitted with a write that does not move", () => { + it("while the socket is connecting", async () => { + const neverAnswers = () => {}; + const socket = connect({ host: "localhost", port: 1, lookup: neverAnswers }); + try { + socket.write("x"); + socket.setTimeout(1); + await once(socket, "timeout"); + expect(socket.connecting).toBe(true); + } finally { + socket.destroy(); + } + }); + + it.each([ + ["the TLS handshake gets no answer", tlsConnect as typeof connect, (socket: any) => socket.secureConnecting], + ["the peer does not read", connect, (socket: Socket) => socket.writableLength > 0], + ])("while %s", async (_, dial, isWaiting) => { + const accepted: Socket[] = []; + const server = createServer(socket => accepted.push(socket)).listen(0, "127.0.0.1"); + await once(server, "listening"); + const socket = dial({ port: (server.address() as AddressInfo).port, host: "127.0.0.1" }); + try { + await once(socket, "connect"); + // The kernel takes only so much for a peer that does not read. + do socket.write(Buffer.alloc(16 * 1024 * 1024)); + while (socket.writableLength === 0); + socket.setTimeout(1); + await once(socket, "timeout"); + expect(isWaiting(socket)).toBe(true); + } finally { + socket.destroy(); + for (const socket of accepted) socket.destroy(); + server.close(); + } + }); +}); + // Regression test for #30697: net.connect({ localPort, lookup }) on the // happy-eyeballs path must not throw a ReferenceError before the socket // is opened. diff --git a/test/js/node/stream/node-stream.test.js b/test/js/node/stream/node-stream.test.js index b104daaa7ed6..b7ad335a3448 100644 --- a/test/js/node/stream/node-stream.test.js +++ b/test/js/node/stream/node-stream.test.js @@ -1773,6 +1773,18 @@ describe("fromList string chunk boundary (nodejs/node#61884)", () => { }); }); +it.each([ + ["base64", "YWJjZA=="], + ["base64url", "YWJjZA"], + ["hex", "61626364"], +])("setEncoding(%j) after the end keeps what the decoder holds back", (encoding, expected) => { + const r = new Readable({ read() {} }); + r.push(Buffer.from("abcd")); + r.push(null); + r.setEncoding(encoding); + expect(r.read()).toBe(expected); +}); + describe("maybeReadMore is a no-op while a read is in flight (nodejs/node#60454)", () => { it("does not schedule a redundant _read while kReading is set", async () => { let reads = 0; diff --git a/test/js/node/test/parallel/test-http2-origin-set-max-size.mjs b/test/js/node/test/parallel/test-http2-origin-set-max-size.mjs new file mode 100644 index 000000000000..53cadb797a18 --- /dev/null +++ b/test/js/node/test/parallel/test-http2-origin-set-max-size.mjs @@ -0,0 +1,100 @@ +import { + expectsError, + hasCrypto, + mustCall, + mustNotCall, + mustSucceed, + skip, +} from '../common/index.mjs'; +import * as fixtures from '../common/fixtures.mjs'; +import assert from 'node:assert'; + +if (!hasCrypto) + skip('missing crypto'); + +const { + createSecureServer, + connect, +} = await import('node:http2'); + +const key = fixtures.readKey('agent8-key.pem', 'binary'); +const cert = fixtures.readKey('agent8-cert.pem', 'binary'); +const ca = fixtures.readKey('fake-startcom-root-cert.pem', 'binary'); + +const server = createSecureServer({ key, cert }); +server.on('session', (session) => { + let i = 0; + const timer = setInterval(() => { + try { + session.origin(...Array.from({ length: 10 }, () => `https://o${i++}.example.com`)); + } catch { + clearInterval(timer); + } + }, 10); + + session.on('close', () => { + clearInterval(timer); + }); +}); + +await new Promise((resolve) => server.listen(0, resolve)); + +// Test fantasist values +[Symbol(), '0', 1n, {}, [], true, false, /s/, () => {}].forEach((maxOriginSetSize) => { + assert.throws( + () => connect(`https://localhost:${server.address().port}`, { ca, maxOriginSetSize }), + { code: 'ERR_INVALID_ARG_TYPE' }, + ); +}); +[NaN, -1].forEach((maxOriginSetSize) => { + assert.throws( + () => connect(`https://localhost:${server.address().port}`, { ca, maxOriginSetSize }), + { code: 'ERR_OUT_OF_RANGE' }, + ); +}); + +await new Promise((resolve) => server.getConnections(mustSucceed((count) => { + assert.strictEqual(count, 0); + resolve(); +}))); + +// Test default value +await new Promise((resolve) => { + const client = connect(`https://localhost:${server.address().port}`, { ca }); + + client.on('origin', mustCall(12)); // Default value is 128, the first 12 frames should pass, the 13th one should error + client.on('error', expectsError({ + code: 'ERR_HTTP2_TOO_MANY_ORIGINS', + })); + client.on('goaway', mustNotCall()); + client.on('close', resolve); +}); + +// Test non-default values +await Promise.all([-0, 9, 1.5].map((maxOriginSetSize) => new Promise((resolve) => { + const client = connect(`https://localhost:${server.address().port}`, { ca, maxOriginSetSize }); + + client.on('origin', mustNotCall()); // The server send 10 origins on the first frame, that's already too many. + client.on('error', expectsError({ + code: 'ERR_HTTP2_TOO_MANY_ORIGINS', + })); + client.on('goaway', mustNotCall()); + client.on('close', resolve); +}))); + + +// Test values higher than the default value +await Promise.all([512, Infinity].map((maxOriginSetSize) => new Promise((resolve) => { + const client = connect(`https://localhost:${server.address().port}`, { ca, maxOriginSetSize }); + + client.on('origin', mustCall(() => { + if (client.originSet.length > 128) { + client.destroy(); + } + }, 13)); + client.on('error', mustNotCall()); + client.on('goaway', mustNotCall()); + client.on('close', resolve); +}))); + +server.close(); diff --git a/test/js/node/test/parallel/test-stream-readable-setEncoding-existing-buffers.js b/test/js/node/test/parallel/test-stream-readable-setEncoding-existing-buffers.js index eb75260bacfc..38d50b567757 100644 --- a/test/js/node/test/parallel/test-stream-readable-setEncoding-existing-buffers.js +++ b/test/js/node/test/parallel/test-stream-readable-setEncoding-existing-buffers.js @@ -58,3 +58,48 @@ const assert = require('assert'); assert.deepStrictEqual(chunks, ['🎉']); }); } + +{ + // Call .setEncoding() before the stream starts flowing, after _read() + // has buffered the first chunk of a split character. + const chunks = [ + Buffer.from([0xf0, 0x9f]), + Buffer.from([0x8e, 0x89]), + null, + ]; + const r = new Readable({ + read() { + this.push(chunks.shift()); + }, + }); + + r.read(0); + assert.strictEqual(r.readableFlowing, null); + assert.strictEqual(r.readableLength, 2); + + r.setEncoding('utf8'); + const received = []; + r.on('data', (chunk) => received.push(chunk)); + + process.nextTick(() => { + assert.deepStrictEqual(received, ['🎉']); + }); +} + +{ + // Call .setEncoding() after EOF while the buffer contains an + // incomplete character. + const r = new Readable({ read() {} }); + + r.push(Buffer.from([0xf0])); + r.push(Buffer.from([0x9f])); + r.push(null); + + r.setEncoding('utf8'); + const chunks = []; + r.on('data', (chunk) => chunks.push(chunk)); + + process.nextTick(() => { + assert.deepStrictEqual(chunks, ['�']); + }); +}