UNPKG

@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
/** * 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