@dynatrace/js-runtime
Version:
This package provides the Dynatrace JavaScript runtime used by the [Dynatrace App Toolkit](https://www.npmjs.com/package/dt-app).
884 lines • 99.6 kB
TypeScript
/**
* To use the HTTP server and client one must import the `node:http` module.
*
* The HTTP interfaces in Node.js are designed to support many features
* of the protocol which have been traditionally difficult to use.
* In particular, large, possibly chunk-encoded, messages. The interface is
* careful to never buffer entire requests or responses, so the
* user is able to stream data.
*
* HTTP message headers are represented by an object like this:
*
* ```json
* { "content-length": "123",
* "content-type": "text/plain",
* "connection": "keep-alive",
* "host": "example.com",
* "accept": "*" }
* ```
*
* Keys are lowercased. Values are not modified.
*
* In order to support the full spectrum of possible HTTP applications, the Node.js
* HTTP API is very low-level. It deals with stream handling and message
* parsing only. It parses a message into headers and body but it does not
* parse the actual headers or the body.
*
* See `message.headers` for details on how duplicate headers are handled.
*
* The raw headers as they were received are retained in the `rawHeaders` property, which is an array of `[key, value, key2, value2, ...]`. For
* example, the previous message header object might have a `rawHeaders` list like the following:
*
* ```js
* [ 'ConTent-Length', '123456',
* 'content-LENGTH', '123',
* 'content-type', 'text/plain',
* 'CONNECTION', 'keep-alive',
* 'Host', 'example.com',
* 'accepT', '*' ]
* ```
* @see [source](https://github.com/nodejs/node/blob/v22.x/lib/http.js)
*/
declare module "http" {
import * as stream from "node:stream";
import { URL } from "node:url";
import { LookupOptions } from "node:dns";
import { EventEmitter } from "node:events";
import {
LookupFunction,
// DT-disabled // Server as NetServer,
Socket,
TcpSocketConnectOpts
} from "node:net";
// incoming headers will never contain number
interface IncomingHttpHeaders extends NodeJS.Dict<string | string[]> {
accept?: string | undefined;
"accept-encoding"?: string | undefined;
"accept-language"?: string | undefined;
"accept-patch"?: string | undefined;
"accept-ranges"?: string | undefined;
"access-control-allow-credentials"?: string | undefined;
"access-control-allow-headers"?: string | undefined;
"access-control-allow-methods"?: string | undefined;
"access-control-allow-origin"?: string | undefined;
"access-control-expose-headers"?: string | undefined;
"access-control-max-age"?: string | undefined;
"access-control-request-headers"?: string | undefined;
"access-control-request-method"?: string | undefined;
age?: string | undefined;
allow?: string | undefined;
"alt-svc"?: string | undefined;
authorization?: string | undefined;
"cache-control"?: string | undefined;
connection?: string | undefined;
"content-disposition"?: string | undefined;
"content-encoding"?: string | undefined;
"content-language"?: string | undefined;
"content-length"?: string | undefined;
"content-location"?: string | undefined;
"content-range"?: string | undefined;
"content-type"?: string | undefined;
cookie?: string | undefined;
date?: string | undefined;
etag?: string | undefined;
expect?: string | undefined;
expires?: string | undefined;
forwarded?: string | undefined;
from?: string | undefined;
host?: string | undefined;
"if-match"?: string | undefined;
"if-modified-since"?: string | undefined;
"if-none-match"?: string | undefined;
"if-unmodified-since"?: string | undefined;
"last-modified"?: string | undefined;
location?: string | undefined;
origin?: string | undefined;
pragma?: string | undefined;
"proxy-authenticate"?: string | undefined;
"proxy-authorization"?: string | undefined;
"public-key-pins"?: string | undefined;
range?: string | undefined;
referer?: string | undefined;
"retry-after"?: string | undefined;
"sec-websocket-accept"?: string | undefined;
"sec-websocket-extensions"?: string | undefined;
"sec-websocket-key"?: string | undefined;
"sec-websocket-protocol"?: string | undefined;
"sec-websocket-version"?: string | undefined;
"set-cookie"?: string[] | undefined;
"strict-transport-security"?: string | undefined;
tk?: string | undefined;
trailer?: string | undefined;
"transfer-encoding"?: string | undefined;
upgrade?: string | undefined;
"user-agent"?: string | undefined;
vary?: string | undefined;
via?: string | undefined;
warning?: string | undefined;
"www-authenticate"?: string | undefined;
}
// outgoing headers allows numbers (as they are converted internally to strings)
type OutgoingHttpHeader = number | string | string[];
interface OutgoingHttpHeaders extends NodeJS.Dict<OutgoingHttpHeader> {
accept?: string | string[] | undefined;
"accept-charset"?: string | string[] | undefined;
"accept-encoding"?: string | string[] | undefined;
"accept-language"?: string | string[] | undefined;
"accept-ranges"?: string | undefined;
"access-control-allow-credentials"?: string | undefined;
"access-control-allow-headers"?: string | undefined;
"access-control-allow-methods"?: string | undefined;
"access-control-allow-origin"?: string | undefined;
"access-control-expose-headers"?: string | undefined;
"access-control-max-age"?: string | undefined;
"access-control-request-headers"?: string | undefined;
"access-control-request-method"?: string | undefined;
age?: string | undefined;
allow?: string | undefined;
authorization?: string | undefined;
"cache-control"?: string | undefined;
"cdn-cache-control"?: string | undefined;
connection?: string | string[] | undefined;
"content-disposition"?: string | undefined;
"content-encoding"?: string | undefined;
"content-language"?: string | undefined;
"content-length"?: string | number | undefined;
"content-location"?: string | undefined;
"content-range"?: string | undefined;
"content-security-policy"?: string | undefined;
"content-security-policy-report-only"?: string | undefined;
"content-type"?: string | undefined;
cookie?: string | string[] | undefined;
dav?: string | string[] | undefined;
dnt?: string | undefined;
date?: string | undefined;
etag?: string | undefined;
expect?: string | undefined;
expires?: string | undefined;
forwarded?: string | undefined;
from?: string | undefined;
host?: string | undefined;
"if-match"?: string | undefined;
"if-modified-since"?: string | undefined;
"if-none-match"?: string | undefined;
"if-range"?: string | undefined;
"if-unmodified-since"?: string | undefined;
"last-modified"?: string | undefined;
link?: string | string[] | undefined;
location?: string | undefined;
"max-forwards"?: string | undefined;
origin?: string | undefined;
pragma?: string | string[] | undefined;
"proxy-authenticate"?: string | string[] | undefined;
"proxy-authorization"?: string | undefined;
"public-key-pins"?: string | undefined;
"public-key-pins-report-only"?: string | undefined;
range?: string | undefined;
referer?: string | undefined;
"referrer-policy"?: string | undefined;
refresh?: string | undefined;
"retry-after"?: string | undefined;
"sec-websocket-accept"?: string | undefined;
"sec-websocket-extensions"?: string | string[] | undefined;
"sec-websocket-key"?: string | undefined;
"sec-websocket-protocol"?: string | string[] | undefined;
"sec-websocket-version"?: string | undefined;
server?: string | undefined;
"set-cookie"?: string | string[] | undefined;
"strict-transport-security"?: string | undefined;
te?: string | undefined;
trailer?: string | undefined;
"transfer-encoding"?: string | undefined;
"user-agent"?: string | undefined;
upgrade?: string | undefined;
"upgrade-insecure-requests"?: string | undefined;
vary?: string | undefined;
via?: string | string[] | undefined;
warning?: string | undefined;
"www-authenticate"?: string | string[] | undefined;
"x-content-type-options"?: string | undefined;
"x-dns-prefetch-control"?: string | undefined;
"x-frame-options"?: string | undefined;
"x-xss-protection"?: string | undefined;
}
interface ClientRequestArgs {
_defaultAgent?: Agent | undefined;
agent?: Agent | boolean | undefined;
auth?: string | null | undefined;
createConnection?:
| ((
options: ClientRequestArgs,
oncreate: (err: Error | null, socket: stream.Duplex) => void,
) => stream.Duplex | null | undefined)
| undefined;
defaultPort?: number | string | undefined;
family?: number | undefined;
headers?: OutgoingHttpHeaders | readonly string[] | undefined;
hints?: LookupOptions["hints"];
host?: string | null | undefined;
hostname?: string | null | undefined;
insecureHTTPParser?: boolean | undefined;
localAddress?: string | undefined;
localPort?: number | undefined;
// DT-notImplemented // lookup?: LookupFunction | undefined;
/**
* @default 16384
*/
maxHeaderSize?: number | undefined;
method?: string | undefined;
path?: string | null | undefined;
port?: number | string | null | undefined;
protocol?: string | null | undefined;
setDefaultHeaders?: boolean | undefined;
setHost?: boolean | undefined;
signal?: AbortSignal | undefined;
socketPath?: string | undefined;
timeout?: number | undefined;
uniqueHeaders?: Array<string | string[]> | undefined;
joinDuplicateHeaders?: boolean;
}
// DT-disabled // interface ServerOptions<
// DT-disabled // Request extends typeof IncomingMessage = typeof IncomingMessage,
// DT-disabled // Response extends typeof ServerResponse<InstanceType<Request>> = typeof ServerResponse,
// DT-disabled // > {
// DT-disabled // /**
// DT-disabled // * Specifies the `IncomingMessage` class to be used. Useful for extending the original `IncomingMessage`.
// DT-disabled // */
// DT-disabled // IncomingMessage?: Request | undefined;
// DT-disabled // /**
// DT-disabled // * Specifies the `ServerResponse` class to be used. Useful for extending the original `ServerResponse`.
// DT-disabled // */
// DT-disabled // ServerResponse?: Response | undefined;
// DT-disabled // /**
// DT-disabled // * Sets the timeout value in milliseconds for receiving the entire request from the client.
// DT-disabled // * @see Server.requestTimeout for more information.
// DT-disabled // * @default 300000
// DT-disabled // * @since v18.0.0
// DT-disabled // */
// DT-disabled // requestTimeout?: number | undefined;
// DT-disabled // /**
// DT-disabled // * It joins the field line values of multiple headers in a request with `, ` instead of discarding the duplicates.
// DT-disabled // * @default false
// DT-disabled // * @since v18.14.0
// DT-disabled // */
// DT-disabled // joinDuplicateHeaders?: boolean;
// DT-disabled // /**
// DT-disabled // * The number of milliseconds of inactivity a server needs to wait for additional incoming data,
// DT-disabled // * after it has finished writing the last response, before a socket will be destroyed.
// DT-disabled // * @see Server.keepAliveTimeout for more information.
// DT-disabled // * @default 5000
// DT-disabled // * @since v18.0.0
// DT-disabled // */
// DT-disabled // keepAliveTimeout?: number | undefined;
// DT-disabled // /**
// DT-disabled // * Sets the interval value in milliseconds to check for request and headers timeout in incomplete requests.
// DT-disabled // * @default 30000
// DT-disabled // */
// DT-disabled // connectionsCheckingInterval?: number | undefined;
// DT-disabled // /**
// DT-disabled // * Sets the timeout value in milliseconds for receiving the complete HTTP headers from the client.
// DT-disabled // * See {@link Server.headersTimeout} for more information.
// DT-disabled // * @default 60000
// DT-disabled // * @since 18.0.0
// DT-disabled // */
// DT-disabled // headersTimeout?: number | undefined;
// DT-disabled // /**
// DT-disabled // * Optionally overrides all `socket`s' `readableHighWaterMark` and `writableHighWaterMark`.
// DT-disabled // * This affects `highWaterMark` property of both `IncomingMessage` and `ServerResponse`.
// DT-disabled // * Default: @see stream.getDefaultHighWaterMark().
// DT-disabled // * @since v20.1.0
// DT-disabled // */
// DT-disabled // highWaterMark?: number | undefined;
// DT-disabled // /**
// DT-disabled // * Use an insecure HTTP parser that accepts invalid HTTP headers when `true`.
// DT-disabled // * Using the insecure parser should be avoided.
// DT-disabled // * See --insecure-http-parser for more information.
// DT-disabled // * @default false
// DT-disabled // */
// DT-disabled // insecureHTTPParser?: boolean | undefined;
// DT-disabled // /**
// DT-disabled // * Optionally overrides the value of `--max-http-header-size` for requests received by
// DT-disabled // * this server, i.e. the maximum length of request headers in bytes.
// DT-disabled // * @default 16384
// DT-disabled // * @since v13.3.0
// DT-disabled // */
// DT-disabled // maxHeaderSize?: number | undefined;
// DT-disabled // /**
// DT-disabled // * If set to `true`, it disables the use of Nagle's algorithm immediately after a new incoming connection is received.
// DT-disabled // * @default true
// DT-disabled // * @since v16.5.0
// DT-disabled // */
// DT-disabled // noDelay?: boolean | undefined;
// DT-disabled // /**
// DT-disabled // * If set to `true`, it forces the server to respond with a 400 (Bad Request) status code
// DT-disabled // * to any HTTP/1.1 request message that lacks a Host header (as mandated by the specification).
// DT-disabled // * @default true
// DT-disabled // * @since 20.0.0
// DT-disabled // */
// DT-disabled // requireHostHeader?: boolean | undefined;
// DT-disabled // /**
// DT-disabled // * If set to `true`, it enables keep-alive functionality on the socket immediately after a new incoming connection is received,
// DT-disabled // * similarly on what is done in `socket.setKeepAlive([enable][, initialDelay])`.
// DT-disabled // * @default false
// DT-disabled // * @since v16.5.0
// DT-disabled // */
// DT-disabled // keepAlive?: boolean | undefined;
// DT-disabled // /**
// DT-disabled // * If set to a positive number, it sets the initial delay before the first keepalive probe is sent on an idle socket.
// DT-disabled // * @default 0
// DT-disabled // * @since v16.5.0
// DT-disabled // */
// DT-disabled // keepAliveInitialDelay?: number | undefined;
// DT-disabled // /**
// DT-disabled // * A list of response headers that should be sent only once.
// DT-disabled // * If the header's value is an array, the items will be joined using `; `.
// DT-disabled // */
// DT-disabled // uniqueHeaders?: Array<string | string[]> | undefined;
// DT-disabled // /**
// DT-disabled // * If set to `true`, an error is thrown when writing to an HTTP response which does not have a body.
// DT-disabled // * @default false
// DT-disabled // * @since v18.17.0, v20.2.0
// DT-disabled // */
// DT-disabled // rejectNonStandardBodyWrites?: boolean | undefined;
// DT-disabled // }
// DT-disabled // type RequestListener<
// DT-disabled // Request extends typeof IncomingMessage = typeof IncomingMessage,
// DT-disabled // Response extends typeof ServerResponse<InstanceType<Request>> = typeof ServerResponse,
// DT-disabled // > = (req: InstanceType<Request>, res: InstanceType<Response> & { req: InstanceType<Request> }) => void;
// DT-disabled // /**
// DT-disabled // * @since v0.1.17
// DT-disabled // */
// DT-disabled // class Server<
// DT-disabled // Request extends typeof IncomingMessage = typeof IncomingMessage,
// DT-disabled // Response extends typeof ServerResponse<InstanceType<Request>> = typeof ServerResponse,
// DT-disabled // > extends NetServer {
// DT-disabled // constructor(requestListener?: RequestListener<Request, Response>);
// DT-disabled // constructor(options: ServerOptions<Request, Response>, requestListener?: RequestListener<Request, Response>);
// DT-disabled // /**
// DT-disabled // * Sets the timeout value for sockets, and emits a `'timeout'` event on
// DT-disabled // * the Server object, passing the socket as an argument, if a timeout
// DT-disabled // * occurs.
// DT-disabled // *
// DT-disabled // * If there is a `'timeout'` event listener on the Server object, then it
// DT-disabled // * will be called with the timed-out socket as an argument.
// DT-disabled // *
// DT-disabled // * By default, the Server does not timeout sockets. However, if a callback
// DT-disabled // * is assigned to the Server's `'timeout'` event, timeouts must be handled
// DT-disabled // * explicitly.
// DT-disabled // * @since v0.9.12
// DT-disabled // * @param [msecs=0 (no timeout)]
// DT-disabled // */
// DT-disabled // setTimeout(msecs?: number, callback?: (socket: Socket) => void): this;
// DT-disabled // setTimeout(callback: (socket: Socket) => void): this;
// DT-disabled // /**
// DT-disabled // * Limits maximum incoming headers count. If set to 0, no limit will be applied.
// DT-disabled // * @since v0.7.0
// DT-disabled // */
// DT-disabled // maxHeadersCount: number | null;
// DT-disabled // /**
// DT-disabled // * The maximum number of requests socket can handle
// DT-disabled // * before closing keep alive connection.
// DT-disabled // *
// DT-disabled // * A value of `0` will disable the limit.
// DT-disabled // *
// DT-disabled // * When the limit is reached it will set the `Connection` header value to `close`,
// DT-disabled // * but will not actually close the connection, subsequent requests sent
// DT-disabled // * after the limit is reached will get `503 Service Unavailable` as a response.
// DT-disabled // * @since v16.10.0
// DT-disabled // */
// DT-disabled // maxRequestsPerSocket: number | null;
// DT-disabled // /**
// DT-disabled // * The number of milliseconds of inactivity before a socket is presumed
// DT-disabled // * to have timed out.
// DT-disabled // *
// DT-disabled // * A value of `0` will disable the timeout behavior on incoming connections.
// DT-disabled // *
// DT-disabled // * The socket timeout logic is set up on connection, so changing this
// DT-disabled // * value only affects new connections to the server, not any existing connections.
// DT-disabled // * @since v0.9.12
// DT-disabled // */
// DT-disabled // timeout: number;
// DT-disabled // /**
// DT-disabled // * Limit the amount of time the parser will wait to receive the complete HTTP
// DT-disabled // * headers.
// DT-disabled // *
// DT-disabled // * If the timeout expires, the server responds with status 408 without
// DT-disabled // * forwarding the request to the request listener and then closes the connection.
// DT-disabled // *
// DT-disabled // * It must be set to a non-zero value (e.g. 120 seconds) to protect against
// DT-disabled // * potential Denial-of-Service attacks in case the server is deployed without a
// DT-disabled // * reverse proxy in front.
// DT-disabled // * @since v11.3.0, v10.14.0
// DT-disabled // */
// DT-disabled // headersTimeout: number;
// DT-disabled // /**
// DT-disabled // * The number of milliseconds of inactivity a server needs to wait for additional
// DT-disabled // * incoming data, after it has finished writing the last response, before a socket
// DT-disabled // * will be destroyed. If the server receives new data before the keep-alive
// DT-disabled // * timeout has fired, it will reset the regular inactivity timeout, i.e., `server.timeout`.
// DT-disabled // *
// DT-disabled // * A value of `0` will disable the keep-alive timeout behavior on incoming
// DT-disabled // * connections.
// DT-disabled // * A value of `0` makes the http server behave similarly to Node.js versions prior
// DT-disabled // * to 8.0.0, which did not have a keep-alive timeout.
// DT-disabled // *
// DT-disabled // * The socket timeout logic is set up on connection, so changing this value only
// DT-disabled // * affects new connections to the server, not any existing connections.
// DT-disabled // * @since v8.0.0
// DT-disabled // */
// DT-disabled // keepAliveTimeout: number;
// DT-disabled // /**
// DT-disabled // * Sets the timeout value in milliseconds for receiving the entire request from
// DT-disabled // * the client.
// DT-disabled // *
// DT-disabled // * If the timeout expires, the server responds with status 408 without
// DT-disabled // * forwarding the request to the request listener and then closes the connection.
// DT-disabled // *
// DT-disabled // * It must be set to a non-zero value (e.g. 120 seconds) to protect against
// DT-disabled // * potential Denial-of-Service attacks in case the server is deployed without a
// DT-disabled // * reverse proxy in front.
// DT-disabled // * @since v14.11.0
// DT-disabled // */
// DT-disabled // requestTimeout: number;
// DT-disabled // /**
// DT-disabled // * Closes all connections connected to this server.
// DT-disabled // * @since v18.2.0
// DT-disabled // */
// DT-disabled // closeAllConnections(): void;
// DT-disabled // /**
// DT-disabled // * Closes all connections connected to this server which are not sending a request
// DT-disabled // * or waiting for a response.
// DT-disabled // * @since v18.2.0
// DT-disabled // */
// DT-disabled // closeIdleConnections(): void;
// DT-disabled // addListener(event: string, listener: (...args: any[]) => void): this;
// DT-disabled // addListener(event: "close", listener: () => void): this;
// DT-disabled // addListener(event: "connection", listener: (socket: Socket) => void): this;
// DT-disabled // addListener(event: "error", listener: (err: Error) => void): this;
// DT-disabled // addListener(event: "listening", listener: () => void): this;
// DT-disabled // addListener(event: "checkContinue", listener: RequestListener<Request, Response>): this;
// DT-disabled // addListener(event: "checkExpectation", listener: RequestListener<Request, Response>): this;
// DT-disabled // addListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this;
// DT-disabled // addListener(
// DT-disabled // event: "connect",
// DT-disabled // listener: (req: InstanceType<Request>, socket: stream.Duplex, head: Buffer) => void,
// DT-disabled // ): this;
// DT-disabled // addListener(event: "dropRequest", listener: (req: InstanceType<Request>, socket: stream.Duplex) => void): this;
// DT-disabled // addListener(event: "request", listener: RequestListener<Request, Response>): this;
// DT-disabled // addListener(
// DT-disabled // event: "upgrade",
// DT-disabled // listener: (req: InstanceType<Request>, socket: stream.Duplex, head: Buffer) => void,
// DT-disabled // ): this;
// DT-disabled // emit(event: string, ...args: any[]): boolean;
// DT-disabled // emit(event: "close"): boolean;
// DT-disabled // emit(event: "connection", socket: Socket): boolean;
// DT-disabled // emit(event: "error", err: Error): boolean;
// DT-disabled // emit(event: "listening"): boolean;
// DT-disabled // emit(
// DT-disabled // event: "checkContinue",
// DT-disabled // req: InstanceType<Request>,
// DT-disabled // res: InstanceType<Response> & { req: InstanceType<Request> },
// DT-disabled // ): boolean;
// DT-disabled // emit(
// DT-disabled // event: "checkExpectation",
// DT-disabled // req: InstanceType<Request>,
// DT-disabled // res: InstanceType<Response> & { req: InstanceType<Request> },
// DT-disabled // ): boolean;
// DT-disabled // emit(event: "clientError", err: Error, socket: stream.Duplex): boolean;
// DT-disabled // emit(event: "connect", req: InstanceType<Request>, socket: stream.Duplex, head: Buffer): boolean;
// DT-disabled // emit(event: "dropRequest", req: InstanceType<Request>, socket: stream.Duplex): boolean;
// DT-disabled // emit(
// DT-disabled // event: "request",
// DT-disabled // req: InstanceType<Request>,
// DT-disabled // res: InstanceType<Response> & { req: InstanceType<Request> },
// DT-disabled // ): boolean;
// DT-disabled // emit(event: "upgrade", req: InstanceType<Request>, socket: stream.Duplex, head: Buffer): boolean;
// DT-disabled // on(event: string, listener: (...args: any[]) => void): this;
// DT-disabled // on(event: "close", listener: () => void): this;
// DT-disabled // on(event: "connection", listener: (socket: Socket) => void): this;
// DT-disabled // on(event: "error", listener: (err: Error) => void): this;
// DT-disabled // on(event: "listening", listener: () => void): this;
// DT-disabled // on(event: "checkContinue", listener: RequestListener<Request, Response>): this;
// DT-disabled // on(event: "checkExpectation", listener: RequestListener<Request, Response>): this;
// DT-disabled // on(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this;
// DT-disabled // on(event: "connect", listener: (req: InstanceType<Request>, socket: stream.Duplex, head: Buffer) => void): this;
// DT-disabled // on(event: "dropRequest", listener: (req: InstanceType<Request>, socket: stream.Duplex) => void): this;
// DT-disabled // on(event: "request", listener: RequestListener<Request, Response>): this;
// DT-disabled // on(event: "upgrade", listener: (req: InstanceType<Request>, socket: stream.Duplex, head: Buffer) => void): this;
// DT-disabled // once(event: string, listener: (...args: any[]) => void): this;
// DT-disabled // once(event: "close", listener: () => void): this;
// DT-disabled // once(event: "connection", listener: (socket: Socket) => void): this;
// DT-disabled // once(event: "error", listener: (err: Error) => void): this;
// DT-disabled // once(event: "listening", listener: () => void): this;
// DT-disabled // once(event: "checkContinue", listener: RequestListener<Request, Response>): this;
// DT-disabled // once(event: "checkExpectation", listener: RequestListener<Request, Response>): this;
// DT-disabled // once(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this;
// DT-disabled // once(
// DT-disabled // event: "connect",
// DT-disabled // listener: (req: InstanceType<Request>, socket: stream.Duplex, head: Buffer) => void,
// DT-disabled // ): this;
// DT-disabled // once(event: "dropRequest", listener: (req: InstanceType<Request>, socket: stream.Duplex) => void): this;
// DT-disabled // once(event: "request", listener: RequestListener<Request, Response>): this;
// DT-disabled // once(
// DT-disabled // event: "upgrade",
// DT-disabled // listener: (req: InstanceType<Request>, socket: stream.Duplex, head: Buffer) => void,
// DT-disabled // ): this;
// DT-disabled // prependListener(event: string, listener: (...args: any[]) => void): this;
// DT-disabled // prependListener(event: "close", listener: () => void): this;
// DT-disabled // prependListener(event: "connection", listener: (socket: Socket) => void): this;
// DT-disabled // prependListener(event: "error", listener: (err: Error) => void): this;
// DT-disabled // prependListener(event: "listening", listener: () => void): this;
// DT-disabled // prependListener(event: "checkContinue", listener: RequestListener<Request, Response>): this;
// DT-disabled // prependListener(event: "checkExpectation", listener: RequestListener<Request, Response>): this;
// DT-disabled // prependListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this;
// DT-disabled // prependListener(
// DT-disabled // event: "connect",
// DT-disabled // listener: (req: InstanceType<Request>, socket: stream.Duplex, head: Buffer) => void,
// DT-disabled // ): this;
// DT-disabled // prependListener(
// DT-disabled // event: "dropRequest",
// DT-disabled // listener: (req: InstanceType<Request>, socket: stream.Duplex) => void,
// DT-disabled // ): this;
// DT-disabled // prependListener(event: "request", listener: RequestListener<Request, Response>): this;
// DT-disabled // prependListener(
// DT-disabled // event: "upgrade",
// DT-disabled // listener: (req: InstanceType<Request>, socket: stream.Duplex, head: Buffer) => void,
// DT-disabled // ): this;
// DT-disabled // prependOnceListener(event: string, listener: (...args: any[]) => void): this;
// DT-disabled // prependOnceListener(event: "close", listener: () => void): this;
// DT-disabled // prependOnceListener(event: "connection", listener: (socket: Socket) => void): this;
// DT-disabled // prependOnceListener(event: "error", listener: (err: Error) => void): this;
// DT-disabled // prependOnceListener(event: "listening", listener: () => void): this;
// DT-disabled // prependOnceListener(event: "checkContinue", listener: RequestListener<Request, Response>): this;
// DT-disabled // prependOnceListener(event: "checkExpectation", listener: RequestListener<Request, Response>): this;
// DT-disabled // prependOnceListener(event: "clientError", listener: (err: Error, socket: stream.Duplex) => void): this;
// DT-disabled // prependOnceListener(
// DT-disabled // event: "connect",
// DT-disabled // listener: (req: InstanceType<Request>, socket: stream.Duplex, head: Buffer) => void,
// DT-disabled // ): this;
// DT-disabled // prependOnceListener(
// DT-disabled // event: "dropRequest",
// DT-disabled // listener: (req: InstanceType<Request>, socket: stream.Duplex) => void,
// DT-disabled // ): this;
// DT-disabled // prependOnceListener(event: "request", listener: RequestListener<Request, Response>): this;
// DT-disabled // prependOnceListener(
// DT-disabled // event: "upgrade",
// DT-disabled // listener: (req: InstanceType<Request>, socket: stream.Duplex, head: Buffer) => void,
// DT-disabled // ): this;
// DT-disabled // }
/**
* This class serves as the parent class of {@link ClientRequest} and {@link ServerResponse}. It is an abstract outgoing message from
* the perspective of the participants of an HTTP transaction.
* @since v0.1.17
*/
class OutgoingMessage<Request extends IncomingMessage = IncomingMessage> extends stream.Writable {
readonly req: Request;
chunkedEncoding: boolean;
shouldKeepAlive: boolean;
useChunkedEncodingByDefault: boolean;
sendDate: boolean;
/**
* @deprecated Use `writableEnded` instead.
*/
finished: boolean;
/**
* Read-only. `true` if the headers were sent, otherwise `false`.
* @since v0.9.3
*/
readonly headersSent: boolean;
/**
* Alias of `outgoingMessage.socket`.
* @since v0.3.0
* @deprecated Since v15.12.0,v14.17.1 - Use `socket` instead.
*/
readonly connection: Socket | null;
/**
* Reference to the underlying socket. Usually, users will not want to access
* this property.
*
* After calling `outgoingMessage.end()`, this property will be nulled.
* @since v0.3.0
*/
readonly socket: Socket | null;
constructor();
/**
* Once a socket is associated with the message and is connected, `socket.setTimeout()` will be called with `msecs` as the first parameter.
* @since v0.9.12
* @param callback Optional function to be called when a timeout occurs. Same as binding to the `timeout` event.
*/
setTimeout(msecs: number, callback?: () => void): this;
/**
* Sets a single header value. If the header already exists in the to-be-sent
* headers, its value will be replaced. Use an array of strings to send multiple
* headers with the same name.
* @since v0.4.0
* @param name Header name
* @param value Header value
*/
setHeader(name: string, value: number | string | readonly string[]): this;
/**
* Sets multiple header values for implicit headers. headers must be an instance of
* `Headers` or `Map`, if a header already exists in the to-be-sent headers, its
* value will be replaced.
*
* ```js
* const headers = new Headers({ foo: 'bar' });
* outgoingMessage.setHeaders(headers);
* ```
*
* or
*
* ```js
* const headers = new Map([['foo', 'bar']]);
* outgoingMessage.setHeaders(headers);
* ```
*
* When headers have been set with `outgoingMessage.setHeaders()`, they will be
* merged with any headers passed to `response.writeHead()`, with the headers passed
* to `response.writeHead()` given precedence.
*
* ```js
* // Returns content-type = text/plain
* const server = http.createServer((req, res) => {
* const headers = new Headers({ 'Content-Type': 'text/html' });
* res.setHeaders(headers);
* res.writeHead(200, { 'Content-Type': 'text/plain' });
* res.end('ok');
* });
* ```
*
* @since v19.6.0, v18.15.0
* @param name Header name
* @param value Header value
*/
setHeaders(headers: Headers | Map<string, number | string | readonly string[]>): this;
/**
* Append a single header value to the header object.
*
* If the value is an array, this is equivalent to calling this method multiple
* times.
*
* If there were no previous values for the header, this is equivalent to calling `outgoingMessage.setHeader(name, value)`.
*
* Depending of the value of `options.uniqueHeaders` when the client request or the
* server were created, this will end up in the header being sent multiple times or
* a single time with values joined using `; `.
* @since v18.3.0, v16.17.0
* @param name Header name
* @param value Header value
*/
appendHeader(name: string, value: string | readonly string[]): this;
/**
* Gets the value of the HTTP header with the given name. If that header is not
* set, the returned value will be `undefined`.
* @since v0.4.0
* @param name Name of header
*/
getHeader(name: string): number | string | string[] | undefined;
/**
* Returns a shallow copy of the current outgoing headers. Since a shallow
* copy is used, array values may be mutated without additional calls to
* various header-related HTTP module methods. The keys of the returned
* object are the header names and the values are the respective header
* values. All header names are lowercase.
*
* The object returned by the `outgoingMessage.getHeaders()` method does
* not prototypically inherit from the JavaScript `Object`. This means that
* typical `Object` methods such as `obj.toString()`, `obj.hasOwnProperty()`,
* and others are not defined and will not work.
*
* ```js
* outgoingMessage.setHeader('Foo', 'bar');
* outgoingMessage.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']);
*
* const headers = outgoingMessage.getHeaders();
* // headers === { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] }
* ```
* @since v7.7.0
*/
getHeaders(): OutgoingHttpHeaders;
/**
* Returns an array containing the unique names of the current outgoing headers.
* All names are lowercase.
* @since v7.7.0
*/
getHeaderNames(): string[];
/**
* Returns `true` if the header identified by `name` is currently set in the
* outgoing headers. The header name is case-insensitive.
*
* ```js
* const hasContentType = outgoingMessage.hasHeader('content-type');
* ```
* @since v7.7.0
*/
hasHeader(name: string): boolean;
/**
* Removes a header that is queued for implicit sending.
*
* ```js
* outgoingMessage.removeHeader('Content-Encoding');
* ```
* @since v0.4.0
* @param name Header name
*/
removeHeader(name: string): void;
// DT-notImplemented // /**
// DT-notImplemented // * Adds HTTP trailers (headers but at the end of the message) to the message.
// DT-notImplemented // *
// DT-notImplemented // * Trailers will **only** be emitted if the message is chunked encoded. If not,
// DT-notImplemented // * the trailers will be silently discarded.
// DT-notImplemented // *
// DT-notImplemented // * HTTP requires the `Trailer` header to be sent to emit trailers,
// DT-notImplemented // * with a list of header field names in its value, e.g.
// DT-notImplemented // *
// DT-notImplemented // * ```js
// DT-notImplemented // * message.writeHead(200, { 'Content-Type': 'text/plain',
// DT-notImplemented // * 'Trailer': 'Content-MD5' });
// DT-notImplemented // * message.write(fileData);
// DT-notImplemented // * message.addTrailers({ 'Content-MD5': '7895bf4b8828b55ceaf47747b4bca667' });
// DT-notImplemented // * message.end();
// DT-notImplemented // * ```
// DT-notImplemented // *
// DT-notImplemented // * Attempting to set a header field name or value that contains invalid characters
// DT-notImplemented // * will result in a `TypeError` being thrown.
// DT-notImplemented // * @since v0.3.0
// DT-notImplemented // */
// DT-notImplemented // addTrailers(headers: OutgoingHttpHeaders | ReadonlyArray<[string, string]>): void;
/**
* Flushes the message headers.
*
* For efficiency reason, Node.js normally buffers the message headers
* until `outgoingMessage.end()` is called or the first chunk of message data
* is written. It then tries to pack the headers and data into a single TCP
* packet.
*
* It is usually desired (it saves a TCP round-trip), but not when the first
* data is not sent until possibly much later. `outgoingMessage.flushHeaders()` bypasses the optimization and kickstarts the message.
* @since v1.6.0
*/
flushHeaders(): void;
}
// DT-disabled // /**
// DT-disabled // * This object is created internally by an HTTP server, not by the user. It is
// DT-disabled // * passed as the second parameter to the `'request'` event.
// DT-disabled // * @since v0.1.17
// DT-disabled // */
// DT-disabled // class ServerResponse<Request extends IncomingMessage = IncomingMessage> extends OutgoingMessage<Request> {
// DT-disabled // /**
// DT-disabled // * When using implicit headers (not calling `response.writeHead()` explicitly),
// DT-disabled // * this property controls the status code that will be sent to the client when
// DT-disabled // * the headers get flushed.
// DT-disabled // *
// DT-disabled // * ```js
// DT-disabled // * response.statusCode = 404;
// DT-disabled // * ```
// DT-disabled // *
// DT-disabled // * After response header was sent to the client, this property indicates the
// DT-disabled // * status code which was sent out.
// DT-disabled // * @since v0.4.0
// DT-disabled // */
// DT-disabled // statusCode: number;
// DT-disabled // /**
// DT-disabled // * When using implicit headers (not calling `response.writeHead()` explicitly),
// DT-disabled // * this property controls the status message that will be sent to the client when
// DT-disabled // * the headers get flushed. If this is left as `undefined` then the standard
// DT-disabled // * message for the status code will be used.
// DT-disabled // *
// DT-disabled // * ```js
// DT-disabled // * response.statusMessage = 'Not found';
// DT-disabled // * ```
// DT-disabled // *
// DT-disabled // * After response header was sent to the client, this property indicates the
// DT-disabled // * status message which was sent out.
// DT-disabled // * @since v0.11.8
// DT-disabled // */
// DT-disabled // statusMessage: string;
// DT-disabled // /**
// DT-disabled // * If set to `true`, Node.js will check whether the `Content-Length` header value and the size of the body, in bytes, are equal.
// DT-disabled // * Mismatching the `Content-Length` header value will result
// DT-disabled // * in an `Error` being thrown, identified by `code:``'ERR_HTTP_CONTENT_LENGTH_MISMATCH'`.
// DT-disabled // * @since v18.10.0, v16.18.0
// DT-disabled // */
// DT-disabled // strictContentLength: boolean;
// DT-disabled // constructor(req: Request);
// DT-disabled // assignSocket(socket: Socket): void;
// DT-disabled // detachSocket(socket: Socket): void;
// DT-disabled // /**
// DT-disabled // * Sends an HTTP/1.1 100 Continue message to the client, indicating that
// DT-disabled // * the request body should be sent. See the `'checkContinue'` event on `Server`.
// DT-disabled // * @since v0.3.0
// DT-disabled // */
// DT-disabled // writeContinue(callback?: () => void): void;
// DT-disabled // /**
// DT-disabled // * Sends an HTTP/1.1 103 Early Hints message to the client with a Link header,
// DT-disabled // * indicating that the user agent can preload/preconnect the linked resources.
// DT-disabled // * The `hints` is an object containing the values of headers to be sent with
// DT-disabled // * early hints message. The optional `callback` argument will be called when
// DT-disabled // * the response message has been written.
// DT-disabled // *
// DT-disabled // * **Example**
// DT-disabled // *
// DT-disabled // * ```js
// DT-disabled // * const earlyHintsLink = '</styles.css>; rel=preload; as=style';
// DT-disabled // * response.writeEarlyHints({
// DT-disabled // * 'link': earlyHintsLink,
// DT-disabled // * });
// DT-disabled // *
// DT-disabled // * const earlyHintsLinks = [
// DT-disabled // * '</styles.css>; rel=preload; as=style',
// DT-disabled // * '</scripts.js>; rel=preload; as=script',
// DT-disabled // * ];
// DT-disabled // * response.writeEarlyHints({
// DT-disabled // * 'link': earlyHintsLinks,
// DT-disabled // * 'x-trace-id': 'id for diagnostics',
// DT-disabled // * });
// DT-disabled // *
// DT-disabled // * const earlyHintsCallback = () => console.log('early hints message sent');
// DT-disabled // * response.writeEarlyHints({
// DT-disabled // * 'link': earlyHintsLinks,
// DT-disabled // * }, earlyHintsCallback);
// DT-disabled // * ```
// DT-disabled // * @since v18.11.0
// DT-disabled // * @param hints An object containing the values of headers
// DT-disabled // * @param callback Will be called when the response message has been written
// DT-disabled // */
// DT-disabled // writeEarlyHints(hints: Record<string, string | string[]>, callback?: () => void): void;
// DT-disabled // /**
// DT-disabled // * Sends a response header to the request. The status code is a 3-digit HTTP
// DT-disabled // * status code, like `404`. The last argument, `headers`, are the response headers.
// DT-disabled // * Optionally one can give a human-readable `statusMessage` as the second
// DT-disabled // * argument.
// DT-disabled // *
// DT-disabled // * `headers` may be an `Array` where the keys and values are in the same list.
// DT-disabled // * It is _not_ a list of tuples. So, the even-numbered offsets are key values,
// DT-disabled // * and the odd-numbered offsets are the associated values. The array is in the same
// DT-disabled // * format as `request.rawHeaders`.
// DT-disabled // *
// DT-disabled // * Returns a reference to the `ServerResponse`, so that calls can be chained.
// DT-disabled // *
// DT-disabled // * ```js
// DT-disabled // * const body = 'hello world';
// DT-disabled // * response
// DT-disabled // * .writeHead(200, {
// DT-disabled // * 'Content-Length': Buffer.byteLength(body),
// DT-disabled // * 'Content-Type': 'text/plain',
// DT-disabled // * })
// DT-disabled // * .end(body);
// DT-disabled // * ```
// DT-disabled // *
// DT-disabled // * This method must only be called once on a message and it must
// DT-disabled // * be called before `response.end()` is called.
// DT-disabled // *
// DT-disabled // * If `response.write()` or `response.end()` are called before calling
// DT-disabled // * this, the implicit/mutable headers will be calculated and call this function.
// DT-disabled // *
// DT-disabled // * When headers have been set with `response.setHeader()`, they will be merged
// DT-disabled // * with any headers passed to `response.writeHead()`, with the headers passed
// DT-disabled // * to `response.writeHead()` given precedence.
// DT-disabled // *
// DT-disabled // * If this method is called and `response.setHeader()` has not been called,
// DT-disabled // * it will directly write the supplied header values onto the network channel
// DT-disabled // * without caching internally, and the `response.getHeader()` on the header
// DT-disabled // * will not yield the expected result. If progressive population of headers is
// DT-disabled // * desired with potential future retrieval and modifica