summaryrefslogtreecommitdiff
path: root/node_modules/@types/node/ts4.8/http2.d.ts
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@types/node/ts4.8/http2.d.ts')
-rwxr-xr-xnode_modules/@types/node/ts4.8/http2.d.ts2101
1 files changed, 2101 insertions, 0 deletions
diff --git a/node_modules/@types/node/ts4.8/http2.d.ts b/node_modules/@types/node/ts4.8/http2.d.ts
new file mode 100755
index 0000000..f46a33e
--- /dev/null
+++ b/node_modules/@types/node/ts4.8/http2.d.ts
@@ -0,0 +1,2101 @@
+/**
+ * The `http2` module provides an implementation of the [HTTP/2](https://tools.ietf.org/html/rfc7540) protocol. It
+ * can be accessed using:
+ *
+ * ```js
+ * const http2 = require('http2');
+ * ```
+ * @since v8.4.0
+ * @see [source](https://github.com/nodejs/node/blob/v16.9.0/lib/http2.js)
+ */
+declare module 'http2' {
+ import EventEmitter = require('node:events');
+ import * as fs from 'node:fs';
+ import * as net from 'node:net';
+ import * as stream from 'node:stream';
+ import * as tls from 'node:tls';
+ import * as url from 'node:url';
+ import { IncomingHttpHeaders as Http1IncomingHttpHeaders, OutgoingHttpHeaders, IncomingMessage, ServerResponse } from 'node:http';
+ export { OutgoingHttpHeaders } from 'node:http';
+ export interface IncomingHttpStatusHeader {
+ ':status'?: number | undefined;
+ }
+ export interface IncomingHttpHeaders extends Http1IncomingHttpHeaders {
+ ':path'?: string | undefined;
+ ':method'?: string | undefined;
+ ':authority'?: string | undefined;
+ ':scheme'?: string | undefined;
+ }
+ // Http2Stream
+ export interface StreamPriorityOptions {
+ exclusive?: boolean | undefined;
+ parent?: number | undefined;
+ weight?: number | undefined;
+ silent?: boolean | undefined;
+ }
+ export interface StreamState {
+ localWindowSize?: number | undefined;
+ state?: number | undefined;
+ localClose?: number | undefined;
+ remoteClose?: number | undefined;
+ sumDependencyWeight?: number | undefined;
+ weight?: number | undefined;
+ }
+ export interface ServerStreamResponseOptions {
+ endStream?: boolean | undefined;
+ waitForTrailers?: boolean | undefined;
+ }
+ export interface StatOptions {
+ offset: number;
+ length: number;
+ }
+ export interface ServerStreamFileResponseOptions {
+ statCheck?(stats: fs.Stats, headers: OutgoingHttpHeaders, statOptions: StatOptions): void | boolean;
+ waitForTrailers?: boolean | undefined;
+ offset?: number | undefined;
+ length?: number | undefined;
+ }
+ export interface ServerStreamFileResponseOptionsWithError extends ServerStreamFileResponseOptions {
+ onError?(err: NodeJS.ErrnoException): void;
+ }
+ export interface Http2Stream extends stream.Duplex {
+ /**
+ * Set to `true` if the `Http2Stream` instance was aborted abnormally. When set,
+ * the `'aborted'` event will have been emitted.
+ * @since v8.4.0
+ */
+ readonly aborted: boolean;
+ /**
+ * This property shows the number of characters currently buffered to be written.
+ * See `net.Socket.bufferSize` for details.
+ * @since v11.2.0, v10.16.0
+ */
+ readonly bufferSize: number;
+ /**
+ * Set to `true` if the `Http2Stream` instance has been closed.
+ * @since v9.4.0
+ */
+ readonly closed: boolean;
+ /**
+ * Set to `true` if the `Http2Stream` instance has been destroyed and is no longer
+ * usable.
+ * @since v8.4.0
+ */
+ readonly destroyed: boolean;
+ /**
+ * Set the `true` if the `END_STREAM` flag was set in the request or response
+ * HEADERS frame received, indicating that no additional data should be received
+ * and the readable side of the `Http2Stream` will be closed.
+ * @since v10.11.0
+ */
+ readonly endAfterHeaders: boolean;
+ /**
+ * The numeric stream identifier of this `Http2Stream` instance. Set to `undefined`if the stream identifier has not yet been assigned.
+ * @since v8.4.0
+ */
+ readonly id?: number | undefined;
+ /**
+ * Set to `true` if the `Http2Stream` instance has not yet been assigned a
+ * numeric stream identifier.
+ * @since v9.4.0
+ */
+ readonly pending: boolean;
+ /**
+ * Set to the `RST_STREAM` `error code` reported when the `Http2Stream` is
+ * destroyed after either receiving an `RST_STREAM` frame from the connected peer,
+ * calling `http2stream.close()`, or `http2stream.destroy()`. Will be`undefined` if the `Http2Stream` has not been closed.
+ * @since v8.4.0
+ */
+ readonly rstCode: number;
+ /**
+ * An object containing the outbound headers sent for this `Http2Stream`.
+ * @since v9.5.0
+ */
+ readonly sentHeaders: OutgoingHttpHeaders;
+ /**
+ * An array of objects containing the outbound informational (additional) headers
+ * sent for this `Http2Stream`.
+ * @since v9.5.0
+ */
+ readonly sentInfoHeaders?: OutgoingHttpHeaders[] | undefined;
+ /**
+ * An object containing the outbound trailers sent for this `HttpStream`.
+ * @since v9.5.0
+ */
+ readonly sentTrailers?: OutgoingHttpHeaders | undefined;
+ /**
+ * A reference to the `Http2Session` instance that owns this `Http2Stream`. The
+ * value will be `undefined` after the `Http2Stream` instance is destroyed.
+ * @since v8.4.0
+ */
+ readonly session: Http2Session;
+ /**
+ * Provides miscellaneous information about the current state of the`Http2Stream`.
+ *
+ * A current state of this `Http2Stream`.
+ * @since v8.4.0
+ */
+ readonly state: StreamState;
+ /**
+ * Closes the `Http2Stream` instance by sending an `RST_STREAM` frame to the
+ * connected HTTP/2 peer.
+ * @since v8.4.0
+ * @param [code=http2.constants.NGHTTP2_NO_ERROR] Unsigned 32-bit integer identifying the error code.
+ * @param callback An optional function registered to listen for the `'close'` event.
+ */
+ close(code?: number, callback?: () => void): void;
+ /**
+ * Updates the priority for this `Http2Stream` instance.
+ * @since v8.4.0
+ */
+ priority(options: StreamPriorityOptions): void;
+ /**
+ * ```js
+ * const http2 = require('http2');
+ * const client = http2.connect('http://example.org:8000');
+ * const { NGHTTP2_CANCEL } = http2.constants;
+ * const req = client.request({ ':path': '/' });
+ *
+ * // Cancel the stream if there's no activity after 5 seconds
+ * req.setTimeout(5000, () => req.close(NGHTTP2_CANCEL));
+ * ```
+ * @since v8.4.0
+ */
+ setTimeout(msecs: number, callback?: () => void): void;
+ /**
+ * Sends a trailing `HEADERS` frame to the connected HTTP/2 peer. This method
+ * will cause the `Http2Stream` to be immediately closed and must only be
+ * called after the `'wantTrailers'` event has been emitted. When sending a
+ * request or sending a response, the `options.waitForTrailers` option must be set
+ * in order to keep the `Http2Stream` open after the final `DATA` frame so that
+ * trailers can be sent.
+ *
+ * ```js
+ * const http2 = require('http2');
+ * const server = http2.createServer();
+ * server.on('stream', (stream) => {
+ * stream.respond(undefined, { waitForTrailers: true });
+ * stream.on('wantTrailers', () => {
+ * stream.sendTrailers({ xyz: 'abc' });
+ * });
+ * stream.end('Hello World');
+ * });
+ * ```
+ *
+ * The HTTP/1 specification forbids trailers from containing HTTP/2 pseudo-header
+ * fields (e.g. `':method'`, `':path'`, etc).
+ * @since v10.0.0
+ */
+ sendTrailers(headers: OutgoingHttpHeaders): void;
+ addListener(event: 'aborted', listener: () => void): this;
+ addListener(event: 'close', listener: () => void): this;
+ addListener(event: 'data', listener: (chunk: Buffer | string) => void): this;
+ addListener(event: 'drain', listener: () => void): this;
+ addListener(event: 'end', listener: () => void): this;
+ addListener(event: 'error', listener: (err: Error) => void): this;
+ addListener(event: 'finish', listener: () => void): this;
+ addListener(event: 'frameError', listener: (frameType: number, errorCode: number) => void): this;
+ addListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
+ addListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
+ addListener(event: 'streamClosed', listener: (code: number) => void): this;
+ addListener(event: 'timeout', listener: () => void): this;
+ addListener(event: 'trailers', listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
+ addListener(event: 'wantTrailers', listener: () => void): this;
+ addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ emit(event: 'aborted'): boolean;
+ emit(event: 'close'): boolean;
+ emit(event: 'data', chunk: Buffer | string): boolean;
+ emit(event: 'drain'): boolean;
+ emit(event: 'end'): boolean;
+ emit(event: 'error', err: Error): boolean;
+ emit(event: 'finish'): boolean;
+ emit(event: 'frameError', frameType: number, errorCode: number): boolean;
+ emit(event: 'pipe', src: stream.Readable): boolean;
+ emit(event: 'unpipe', src: stream.Readable): boolean;
+ emit(event: 'streamClosed', code: number): boolean;
+ emit(event: 'timeout'): boolean;
+ emit(event: 'trailers', trailers: IncomingHttpHeaders, flags: number): boolean;
+ emit(event: 'wantTrailers'): boolean;
+ emit(event: string | symbol, ...args: any[]): boolean;
+ on(event: 'aborted', listener: () => void): this;
+ on(event: 'close', listener: () => void): this;
+ on(event: 'data', listener: (chunk: Buffer | string) => void): this;
+ on(event: 'drain', listener: () => void): this;
+ on(event: 'end', listener: () => void): this;
+ on(event: 'error', listener: (err: Error) => void): this;
+ on(event: 'finish', listener: () => void): this;
+ on(event: 'frameError', listener: (frameType: number, errorCode: number) => void): this;
+ on(event: 'pipe', listener: (src: stream.Readable) => void): this;
+ on(event: 'unpipe', listener: (src: stream.Readable) => void): this;
+ on(event: 'streamClosed', listener: (code: number) => void): this;
+ on(event: 'timeout', listener: () => void): this;
+ on(event: 'trailers', listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
+ on(event: 'wantTrailers', listener: () => void): this;
+ on(event: string | symbol, listener: (...args: any[]) => void): this;
+ once(event: 'aborted', listener: () => void): this;
+ once(event: 'close', listener: () => void): this;
+ once(event: 'data', listener: (chunk: Buffer | string) => void): this;
+ once(event: 'drain', listener: () => void): this;
+ once(event: 'end', listener: () => void): this;
+ once(event: 'error', listener: (err: Error) => void): this;
+ once(event: 'finish', listener: () => void): this;
+ once(event: 'frameError', listener: (frameType: number, errorCode: number) => void): this;
+ once(event: 'pipe', listener: (src: stream.Readable) => void): this;
+ once(event: 'unpipe', listener: (src: stream.Readable) => void): this;
+ once(event: 'streamClosed', listener: (code: number) => void): this;
+ once(event: 'timeout', listener: () => void): this;
+ once(event: 'trailers', listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
+ once(event: 'wantTrailers', listener: () => void): this;
+ once(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependListener(event: 'aborted', listener: () => void): this;
+ prependListener(event: 'close', listener: () => void): this;
+ prependListener(event: 'data', listener: (chunk: Buffer | string) => void): this;
+ prependListener(event: 'drain', listener: () => void): this;
+ prependListener(event: 'end', listener: () => void): this;
+ prependListener(event: 'error', listener: (err: Error) => void): this;
+ prependListener(event: 'finish', listener: () => void): this;
+ prependListener(event: 'frameError', listener: (frameType: number, errorCode: number) => void): this;
+ prependListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
+ prependListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
+ prependListener(event: 'streamClosed', listener: (code: number) => void): this;
+ prependListener(event: 'timeout', listener: () => void): this;
+ prependListener(event: 'trailers', listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
+ prependListener(event: 'wantTrailers', listener: () => void): this;
+ prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: 'aborted', listener: () => void): this;
+ prependOnceListener(event: 'close', listener: () => void): this;
+ prependOnceListener(event: 'data', listener: (chunk: Buffer | string) => void): this;
+ prependOnceListener(event: 'drain', listener: () => void): this;
+ prependOnceListener(event: 'end', listener: () => void): this;
+ prependOnceListener(event: 'error', listener: (err: Error) => void): this;
+ prependOnceListener(event: 'finish', listener: () => void): this;
+ prependOnceListener(event: 'frameError', listener: (frameType: number, errorCode: number) => void): this;
+ prependOnceListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
+ prependOnceListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
+ prependOnceListener(event: 'streamClosed', listener: (code: number) => void): this;
+ prependOnceListener(event: 'timeout', listener: () => void): this;
+ prependOnceListener(event: 'trailers', listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
+ prependOnceListener(event: 'wantTrailers', listener: () => void): this;
+ prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ }
+ export interface ClientHttp2Stream extends Http2Stream {
+ addListener(event: 'continue', listener: () => {}): this;
+ addListener(event: 'headers', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+ addListener(event: 'push', listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
+ addListener(event: 'response', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+ addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ emit(event: 'continue'): boolean;
+ emit(event: 'headers', headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean;
+ emit(event: 'push', headers: IncomingHttpHeaders, flags: number): boolean;
+ emit(event: 'response', headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean;
+ emit(event: string | symbol, ...args: any[]): boolean;
+ on(event: 'continue', listener: () => {}): this;
+ on(event: 'headers', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+ on(event: 'push', listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
+ on(event: 'response', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+ on(event: string | symbol, listener: (...args: any[]) => void): this;
+ once(event: 'continue', listener: () => {}): this;
+ once(event: 'headers', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+ once(event: 'push', listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
+ once(event: 'response', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+ once(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependListener(event: 'continue', listener: () => {}): this;
+ prependListener(event: 'headers', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+ prependListener(event: 'push', listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
+ prependListener(event: 'response', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+ prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: 'continue', listener: () => {}): this;
+ prependOnceListener(event: 'headers', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+ prependOnceListener(event: 'push', listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
+ prependOnceListener(event: 'response', listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+ prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ }
+ export interface ServerHttp2Stream extends Http2Stream {
+ /**
+ * True if headers were sent, false otherwise (read-only).
+ * @since v8.4.0
+ */
+ readonly headersSent: boolean;
+ /**
+ * Read-only property mapped to the `SETTINGS_ENABLE_PUSH` flag of the remote
+ * client's most recent `SETTINGS` frame. Will be `true` if the remote peer
+ * accepts push streams, `false` otherwise. Settings are the same for every`Http2Stream` in the same `Http2Session`.
+ * @since v8.4.0
+ */
+ readonly pushAllowed: boolean;
+ /**
+ * Sends an additional informational `HEADERS` frame to the connected HTTP/2 peer.
+ * @since v8.4.0
+ */
+ additionalHeaders(headers: OutgoingHttpHeaders): void;
+ /**
+ * Initiates a push stream. The callback is invoked with the new `Http2Stream`instance created for the push stream passed as the second argument, or an`Error` passed as the first argument.
+ *
+ * ```js
+ * const http2 = require('http2');
+ * const server = http2.createServer();
+ * server.on('stream', (stream) => {
+ * stream.respond({ ':status': 200 });
+ * stream.pushStream({ ':path': '/' }, (err, pushStream, headers) => {
+ * if (err) throw err;
+ * pushStream.respond({ ':status': 200 });
+ * pushStream.end('some pushed data');
+ * });
+ * stream.end('some data');
+ * });
+ * ```
+ *
+ * Setting the weight of a push stream is not allowed in the `HEADERS` frame. Pass
+ * a `weight` value to `http2stream.priority` with the `silent` option set to`true` to enable server-side bandwidth balancing between concurrent streams.
+ *
+ * Calling `http2stream.pushStream()` from within a pushed stream is not permitted
+ * and will throw an error.
+ * @since v8.4.0
+ * @param callback Callback that is called once the push stream has been initiated.
+ */
+ pushStream(headers: OutgoingHttpHeaders, callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void): void;
+ pushStream(headers: OutgoingHttpHeaders, options?: StreamPriorityOptions, callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void): void;
+ /**
+ * ```js
+ * const http2 = require('http2');
+ * const server = http2.createServer();
+ * server.on('stream', (stream) => {
+ * stream.respond({ ':status': 200 });
+ * stream.end('some data');
+ * });
+ * ```
+ *
+ * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event
+ * will be emitted immediately after queuing the last chunk of payload data to be
+ * sent. The `http2stream.sendTrailers()` method can then be used to sent trailing
+ * header fields to the peer.
+ *
+ * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically
+ * close when the final `DATA` frame is transmitted. User code must call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`.
+ *
+ * ```js
+ * const http2 = require('http2');
+ * const server = http2.createServer();
+ * server.on('stream', (stream) => {
+ * stream.respond({ ':status': 200 }, { waitForTrailers: true });
+ * stream.on('wantTrailers', () => {
+ * stream.sendTrailers({ ABC: 'some value to send' });
+ * });
+ * stream.end('some data');
+ * });
+ * ```
+ * @since v8.4.0
+ */
+ respond(headers?: OutgoingHttpHeaders, options?: ServerStreamResponseOptions): void;
+ /**
+ * Initiates a response whose data is read from the given file descriptor. No
+ * validation is performed on the given file descriptor. If an error occurs while
+ * attempting to read data using the file descriptor, the `Http2Stream` will be
+ * closed using an `RST_STREAM` frame using the standard `INTERNAL_ERROR` code.
+ *
+ * When used, the `Http2Stream` object's `Duplex` interface will be closed
+ * automatically.
+ *
+ * ```js
+ * const http2 = require('http2');
+ * const fs = require('fs');
+ *
+ * const server = http2.createServer();
+ * server.on('stream', (stream) => {
+ * const fd = fs.openSync('/some/file', 'r');
+ *
+ * const stat = fs.fstatSync(fd);
+ * const headers = {
+ * 'content-length': stat.size,
+ * 'last-modified': stat.mtime.toUTCString(),
+ * 'content-type': 'text/plain; charset=utf-8'
+ * };
+ * stream.respondWithFD(fd, headers);
+ * stream.on('close', () => fs.closeSync(fd));
+ * });
+ * ```
+ *
+ * The optional `options.statCheck` function may be specified to give user code
+ * an opportunity to set additional content headers based on the `fs.Stat` details
+ * of the given fd. If the `statCheck` function is provided, the`http2stream.respondWithFD()` method will perform an `fs.fstat()` call to
+ * collect details on the provided file descriptor.
+ *
+ * The `offset` and `length` options may be used to limit the response to a
+ * specific range subset. This can be used, for instance, to support HTTP Range
+ * requests.
+ *
+ * The file descriptor or `FileHandle` is not closed when the stream is closed,
+ * so it will need to be closed manually once it is no longer needed.
+ * Using the same file descriptor concurrently for multiple streams
+ * is not supported and may result in data loss. Re-using a file descriptor
+ * after a stream has finished is supported.
+ *
+ * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event
+ * will be emitted immediately after queuing the last chunk of payload data to be
+ * sent. The `http2stream.sendTrailers()` method can then be used to sent trailing
+ * header fields to the peer.
+ *
+ * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically
+ * close when the final `DATA` frame is transmitted. User code _must_ call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`.
+ *
+ * ```js
+ * const http2 = require('http2');
+ * const fs = require('fs');
+ *
+ * const server = http2.createServer();
+ * server.on('stream', (stream) => {
+ * const fd = fs.openSync('/some/file', 'r');
+ *
+ * const stat = fs.fstatSync(fd);
+ * const headers = {
+ * 'content-length': stat.size,
+ * 'last-modified': stat.mtime.toUTCString(),
+ * 'content-type': 'text/plain; charset=utf-8'
+ * };
+ * stream.respondWithFD(fd, headers, { waitForTrailers: true });
+ * stream.on('wantTrailers', () => {
+ * stream.sendTrailers({ ABC: 'some value to send' });
+ * });
+ *
+ * stream.on('close', () => fs.closeSync(fd));
+ * });
+ * ```
+ * @since v8.4.0
+ * @param fd A readable file descriptor.
+ */
+ respondWithFD(fd: number | fs.promises.FileHandle, headers?: OutgoingHttpHeaders, options?: ServerStreamFileResponseOptions): void;
+ /**
+ * Sends a regular file as the response. The `path` must specify a regular file
+ * or an `'error'` event will be emitted on the `Http2Stream` object.
+ *
+ * When used, the `Http2Stream` object's `Duplex` interface will be closed
+ * automatically.
+ *
+ * The optional `options.statCheck` function may be specified to give user code
+ * an opportunity to set additional content headers based on the `fs.Stat` details
+ * of the given file:
+ *
+ * If an error occurs while attempting to read the file data, the `Http2Stream`will be closed using an `RST_STREAM` frame using the standard `INTERNAL_ERROR`code. If the `onError` callback is
+ * defined, then it will be called. Otherwise
+ * the stream will be destroyed.
+ *
+ * Example using a file path:
+ *
+ * ```js
+ * const http2 = require('http2');
+ * const server = http2.createServer();
+ * server.on('stream', (stream) => {
+ * function statCheck(stat, headers) {
+ * headers['last-modified'] = stat.mtime.toUTCString();
+ * }
+ *
+ * function onError(err) {
+ * // stream.respond() can throw if the stream has been destroyed by
+ * // the other side.
+ * try {
+ * if (err.code === 'ENOENT') {
+ * stream.respond({ ':status': 404 });
+ * } else {
+ * stream.respond({ ':status': 500 });
+ * }
+ * } catch (err) {
+ * // Perform actual error handling.
+ * console.log(err);
+ * }
+ * stream.end();
+ * }
+ *
+ * stream.respondWithFile('/some/file',
+ * { 'content-type': 'text/plain; charset=utf-8' },
+ * { statCheck, onError });
+ * });
+ * ```
+ *
+ * The `options.statCheck` function may also be used to cancel the send operation
+ * by returning `false`. For instance, a conditional request may check the stat
+ * results to determine if the file has been modified to return an appropriate`304` response:
+ *
+ * ```js
+ * const http2 = require('http2');
+ * const server = http2.createServer();
+ * server.on('stream', (stream) => {
+ * function statCheck(stat, headers) {
+ * // Check the stat here...
+ * stream.respond({ ':status': 304 });
+ * return false; // Cancel the send operation
+ * }
+ * stream.respondWithFile('/some/file',
+ * { 'content-type': 'text/plain; charset=utf-8' },
+ * { statCheck });
+ * });
+ * ```
+ *
+ * The `content-length` header field will be automatically set.
+ *
+ * The `offset` and `length` options may be used to limit the response to a
+ * specific range subset. This can be used, for instance, to support HTTP Range
+ * requests.
+ *
+ * The `options.onError` function may also be used to handle all the errors
+ * that could happen before the delivery of the file is initiated. The
+ * default behavior is to destroy the stream.
+ *
+ * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event
+ * will be emitted immediately after queuing the last chunk of payload data to be
+ * sent. The `http2stream.sendTrailers()` method can then be used to sent trailing
+ * header fields to the peer.
+ *
+ * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically
+ * close when the final `DATA` frame is transmitted. User code must call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`.
+ *
+ * ```js
+ * const http2 = require('http2');
+ * const server = http2.createServer();
+ * server.on('stream', (stream) => {
+ * stream.respondWithFile('/some/file',
+ * { 'content-type': 'text/plain; charset=utf-8' },
+ * { waitForTrailers: true });
+ * stream.on('wantTrailers', () => {
+ * stream.sendTrailers({ ABC: 'some value to send' });
+ * });
+ * });
+ * ```
+ * @since v8.4.0
+ */
+ respondWithFile(path: string, headers?: OutgoingHttpHeaders, options?: ServerStreamFileResponseOptionsWithError): void;
+ }
+ // Http2Session
+ export interface Settings {
+ headerTableSize?: number | undefined;
+ enablePush?: boolean | undefined;
+ initialWindowSize?: number | undefined;
+ maxFrameSize?: number | undefined;
+ maxConcurrentStreams?: number | undefined;
+ maxHeaderListSize?: number | undefined;
+ enableConnectProtocol?: boolean | undefined;
+ }
+ export interface ClientSessionRequestOptions {
+ endStream?: boolean | undefined;
+ exclusive?: boolean | undefined;
+ parent?: number | undefined;
+ weight?: number | undefined;
+ waitForTrailers?: boolean | undefined;
+ signal?: AbortSignal | undefined;
+ }
+ export interface SessionState {
+ effectiveLocalWindowSize?: number | undefined;
+ effectiveRecvDataLength?: number | undefined;
+ nextStreamID?: number | undefined;
+ localWindowSize?: number | undefined;
+ lastProcStreamID?: number | undefined;
+ remoteWindowSize?: number | undefined;
+ outboundQueueSize?: number | undefined;
+ deflateDynamicTableSize?: number | undefined;
+ inflateDynamicTableSize?: number | undefined;
+ }
+ export interface Http2Session extends EventEmitter {
+ /**
+ * Value will be `undefined` if the `Http2Session` is not yet connected to a
+ * socket, `h2c` if the `Http2Session` is not connected to a `TLSSocket`, or
+ * will return the value of the connected `TLSSocket`'s own `alpnProtocol`property.
+ * @since v9.4.0
+ */
+ readonly alpnProtocol?: string | undefined;
+ /**
+ * Will be `true` if this `Http2Session` instance has been closed, otherwise`false`.
+ * @since v9.4.0
+ */
+ readonly closed: boolean;
+ /**
+ * Will be `true` if this `Http2Session` instance is still connecting, will be set
+ * to `false` before emitting `connect` event and/or calling the `http2.connect`callback.
+ * @since v10.0.0
+ */
+ readonly connecting: boolean;
+ /**
+ * Will be `true` if this `Http2Session` instance has been destroyed and must no
+ * longer be used, otherwise `false`.
+ * @since v8.4.0
+ */
+ readonly destroyed: boolean;
+ /**
+ * Value is `undefined` if the `Http2Session` session socket has not yet been
+ * connected, `true` if the `Http2Session` is connected with a `TLSSocket`,
+ * and `false` if the `Http2Session` is connected to any other kind of socket
+ * or stream.
+ * @since v9.4.0
+ */
+ readonly encrypted?: boolean | undefined;
+ /**
+ * A prototype-less object describing the current local settings of this`Http2Session`. The local settings are local to _this_`Http2Session` instance.
+ * @since v8.4.0
+ */
+ readonly localSettings: Settings;
+ /**
+ * If the `Http2Session` is connected to a `TLSSocket`, the `originSet` property
+ * will return an `Array` of origins for which the `Http2Session` may be
+ * considered authoritative.
+ *
+ * The `originSet` property is only available when using a secure TLS connection.
+ * @since v9.4.0
+ */
+ readonly originSet?: string[] | undefined;
+ /**
+ * Indicates whether the `Http2Session` is currently waiting for acknowledgment of
+ * a sent `SETTINGS` frame. Will be `true` after calling the`http2session.settings()` method. Will be `false` once all sent `SETTINGS`frames have been acknowledged.
+ * @since v8.4.0
+ */
+ readonly pendingSettingsAck: boolean;
+ /**
+ * A prototype-less object describing the current remote settings of this`Http2Session`. The remote settings are set by the _connected_ HTTP/2 peer.
+ * @since v8.4.0
+ */
+ readonly remoteSettings: Settings;
+ /**
+ * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but
+ * limits available methods to ones safe to use with HTTP/2.
+ *
+ * `destroy`, `emit`, `end`, `pause`, `read`, `resume`, and `write` will throw
+ * an error with code `ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for more information.
+ *
+ * `setTimeout` method will be called on this `Http2Session`.
+ *
+ * All other interactions will be routed directly to the socket.
+ * @since v8.4.0
+ */
+ readonly socket: net.Socket | tls.TLSSocket;
+ /**
+ * Provides miscellaneous information about the current state of the`Http2Session`.
+ *
+ * An object describing the current status of this `Http2Session`.
+ * @since v8.4.0
+ */
+ readonly state: SessionState;
+ /**
+ * The `http2session.type` will be equal to`http2.constants.NGHTTP2_SESSION_SERVER` if this `Http2Session` instance is a
+ * server, and `http2.constants.NGHTTP2_SESSION_CLIENT` if the instance is a
+ * client.
+ * @since v8.4.0
+ */
+ readonly type: number;
+ /**
+ * Gracefully closes the `Http2Session`, allowing any existing streams to
+ * complete on their own and preventing new `Http2Stream` instances from being
+ * created. Once closed, `http2session.destroy()`_might_ be called if there
+ * are no open `Http2Stream` instances.
+ *
+ * If specified, the `callback` function is registered as a handler for the`'close'` event.
+ * @since v9.4.0
+ */
+ close(callback?: () => void): void;
+ /**
+ * Immediately terminates the `Http2Session` and the associated `net.Socket` or`tls.TLSSocket`.
+ *
+ * Once destroyed, the `Http2Session` will emit the `'close'` event. If `error`is not undefined, an `'error'` event will be emitted immediately before the`'close'` event.
+ *
+ * If there are any remaining open `Http2Streams` associated with the`Http2Session`, those will also be destroyed.
+ * @since v8.4.0
+ * @param error An `Error` object if the `Http2Session` is being destroyed due to an error.
+ * @param code The HTTP/2 error code to send in the final `GOAWAY` frame. If unspecified, and `error` is not undefined, the default is `INTERNAL_ERROR`, otherwise defaults to `NO_ERROR`.
+ */
+ destroy(error?: Error, code?: number): void;
+ /**
+ * Transmits a `GOAWAY` frame to the connected peer _without_ shutting down the`Http2Session`.
+ * @since v9.4.0
+ * @param code An HTTP/2 error code
+ * @param lastStreamID The numeric ID of the last processed `Http2Stream`
+ * @param opaqueData A `TypedArray` or `DataView` instance containing additional data to be carried within the `GOAWAY` frame.
+ */
+ goaway(code?: number, lastStreamID?: number, opaqueData?: NodeJS.ArrayBufferView): void;
+ /**
+ * Sends a `PING` frame to the connected HTTP/2 peer. A `callback` function must
+ * be provided. The method will return `true` if the `PING` was sent, `false`otherwise.
+ *
+ * The maximum number of outstanding (unacknowledged) pings is determined by the`maxOutstandingPings` configuration option. The default maximum is 10.
+ *
+ * If provided, the `payload` must be a `Buffer`, `TypedArray`, or `DataView`containing 8 bytes of data that will be transmitted with the `PING` and
+ * returned with the ping acknowledgment.
+ *
+ * The callback will be invoked with three arguments: an error argument that will
+ * be `null` if the `PING` was successfully acknowledged, a `duration` argument
+ * that reports the number of milliseconds elapsed since the ping was sent and the
+ * acknowledgment was received, and a `Buffer` containing the 8-byte `PING`payload.
+ *
+ * ```js
+ * session.ping(Buffer.from('abcdefgh'), (err, duration, payload) => {
+ * if (!err) {
+ * console.log(`Ping acknowledged in ${duration} milliseconds`);
+ * console.log(`With payload '${payload.toString()}'`);
+ * }
+ * });
+ * ```
+ *
+ * If the `payload` argument is not specified, the default payload will be the
+ * 64-bit timestamp (little endian) marking the start of the `PING` duration.
+ * @since v8.9.3
+ * @param payload Optional ping payload.
+ */
+ ping(callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean;
+ ping(payload: NodeJS.ArrayBufferView, callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean;
+ /**
+ * Calls `ref()` on this `Http2Session`instance's underlying `net.Socket`.
+ * @since v9.4.0
+ */
+ ref(): void;
+ /**
+ * Sets the local endpoint's window size.
+ * The `windowSize` is the total window size to set, not
+ * the delta.
+ *
+ * ```js
+ * const http2 = require('http2');
+ *
+ * const server = http2.createServer();
+ * const expectedWindowSize = 2 ** 20;
+ * server.on('connect', (session) => {
+ *
+ * // Set local window size to be 2 ** 20
+ * session.setLocalWindowSize(expectedWindowSize);
+ * });
+ * ```
+ * @since v15.3.0
+ */
+ setLocalWindowSize(windowSize: number): void;
+ /**
+ * Used to set a callback function that is called when there is no activity on
+ * the `Http2Session` after `msecs` milliseconds. The given `callback` is
+ * registered as a listener on the `'timeout'` event.
+ * @since v8.4.0
+ */
+ setTimeout(msecs: number, callback?: () => void): void;
+ /**
+ * Updates the current local settings for this `Http2Session` and sends a new`SETTINGS` frame to the connected HTTP/2 peer.
+ *
+ * Once called, the `http2session.pendingSettingsAck` property will be `true`while the session is waiting for the remote peer to acknowledge the new
+ * settings.
+ *
+ * The new settings will not become effective until the `SETTINGS` acknowledgment
+ * is received and the `'localSettings'` event is emitted. It is possible to send
+ * multiple `SETTINGS` frames while acknowledgment is still pending.
+ * @since v8.4.0
+ * @param callback Callback that is called once the session is connected or right away if the session is already connected.
+ */
+ settings(settings: Settings, callback?: (err: Error | null, settings: Settings, duration: number) => void): void;
+ /**
+ * Calls `unref()` on this `Http2Session`instance's underlying `net.Socket`.
+ * @since v9.4.0
+ */
+ unref(): void;
+ addListener(event: 'close', listener: () => void): this;
+ addListener(event: 'error', listener: (err: Error) => void): this;
+ addListener(event: 'frameError', listener: (frameType: number, errorCode: number, streamID: number) => void): this;
+ addListener(event: 'goaway', listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
+ addListener(event: 'localSettings', listener: (settings: Settings) => void): this;
+ addListener(event: 'ping', listener: () => void): this;
+ addListener(event: 'remoteSettings', listener: (settings: Settings) => void): this;
+ addListener(event: 'timeout', listener: () => void): this;
+ addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ emit(event: 'close'): boolean;
+ emit(event: 'error', err: Error): boolean;
+ emit(event: 'frameError', frameType: number, errorCode: number, streamID: number): boolean;
+ emit(event: 'goaway', errorCode: number, lastStreamID: number, opaqueData: Buffer): boolean;
+ emit(event: 'localSettings', settings: Settings): boolean;
+ emit(event: 'ping'): boolean;
+ emit(event: 'remoteSettings', settings: Settings): boolean;
+ emit(event: 'timeout'): boolean;
+ emit(event: string | symbol, ...args: any[]): boolean;
+ on(event: 'close', listener: () => void): this;
+ on(event: 'error', listener: (err: Error) => void): this;
+ on(event: 'frameError', listener: (frameType: number, errorCode: number, streamID: number) => void): this;
+ on(event: 'goaway', listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
+ on(event: 'localSettings', listener: (settings: Settings) => void): this;
+ on(event: 'ping', listener: () => void): this;
+ on(event: 'remoteSettings', listener: (settings: Settings) => void): this;
+ on(event: 'timeout', listener: () => void): this;
+ on(event: string | symbol, listener: (...args: any[]) => void): this;
+ once(event: 'close', listener: () => void): this;
+ once(event: 'error', listener: (err: Error) => void): this;
+ once(event: 'frameError', listener: (frameType: number, errorCode: number, streamID: number) => void): this;
+ once(event: 'goaway', listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
+ once(event: 'localSettings', listener: (settings: Settings) => void): this;
+ once(event: 'ping', listener: () => void): this;
+ once(event: 'remoteSettings', listener: (settings: Settings) => void): this;
+ once(event: 'timeout', listener: () => void): this;
+ once(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependListener(event: 'close', listener: () => void): this;
+ prependListener(event: 'error', listener: (err: Error) => void): this;
+ prependListener(event: 'frameError', listener: (frameType: number, errorCode: number, streamID: number) => void): this;
+ prependListener(event: 'goaway', listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
+ prependListener(event: 'localSettings', listener: (settings: Settings) => void): this;
+ prependListener(event: 'ping', listener: () => void): this;
+ prependListener(event: 'remoteSettings', listener: (settings: Settings) => void): this;
+ prependListener(event: 'timeout', listener: () => void): this;
+ prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: 'close', listener: () => void): this;
+ prependOnceListener(event: 'error', listener: (err: Error) => void): this;
+ prependOnceListener(event: 'frameError', listener: (frameType: number, errorCode: number, streamID: number) => void): this;
+ prependOnceListener(event: 'goaway', listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
+ prependOnceListener(event: 'localSettings', listener: (settings: Settings) => void): this;
+ prependOnceListener(event: 'ping', listener: () => void): this;
+ prependOnceListener(event: 'remoteSettings', listener: (settings: Settings) => void): this;
+ prependOnceListener(event: 'timeout', listener: () => void): this;
+ prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ }
+ export interface ClientHttp2Session extends Http2Session {
+ /**
+ * For HTTP/2 Client `Http2Session` instances only, the `http2session.request()`creates and returns an `Http2Stream` instance that can be used to send an
+ * HTTP/2 request to the connected server.
+ *
+ * This method is only available if `http2session.type` is equal to`http2.constants.NGHTTP2_SESSION_CLIENT`.
+ *
+ * ```js
+ * const http2 = require('http2');
+ * const clientSession = http2.connect('https://localhost:1234');
+ * const {
+ * HTTP2_HEADER_PATH,
+ * HTTP2_HEADER_STATUS
+ * } = http2.constants;
+ *
+ * const req = clientSession.request({ [HTTP2_HEADER_PATH]: '/' });
+ * req.on('response', (headers) => {
+ * console.log(headers[HTTP2_HEADER_STATUS]);
+ * req.on('data', (chunk) => { // .. });
+ * req.on('end', () => { // .. });
+ * });
+ * ```
+ *
+ * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event
+ * is emitted immediately after queuing the last chunk of payload data to be sent.
+ * The `http2stream.sendTrailers()` method can then be called to send trailing
+ * headers to the peer.
+ *
+ * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically
+ * close when the final `DATA` frame is transmitted. User code must call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`.
+ *
+ * When `options.signal` is set with an `AbortSignal` and then `abort` on the
+ * corresponding `AbortController` is called, the request will emit an `'error'`event with an `AbortError` error.
+ *
+ * The `:method` and `:path` pseudo-headers are not specified within `headers`,
+ * they respectively default to:
+ *
+ * * `:method` \= `'GET'`
+ * * `:path` \= `/`
+ * @since v8.4.0
+ */
+ request(headers?: OutgoingHttpHeaders, options?: ClientSessionRequestOptions): ClientHttp2Stream;
+ addListener(event: 'altsvc', listener: (alt: string, origin: string, stream: number) => void): this;
+ addListener(event: 'origin', listener: (origins: string[]) => void): this;
+ addListener(event: 'connect', listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+ addListener(event: 'stream', listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+ addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ emit(event: 'altsvc', alt: string, origin: string, stream: number): boolean;
+ emit(event: 'origin', origins: ReadonlyArray<string>): boolean;
+ emit(event: 'connect', session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket): boolean;
+ emit(event: 'stream', stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean;
+ emit(event: string | symbol, ...args: any[]): boolean;
+ on(event: 'altsvc', listener: (alt: string, origin: string, stream: number) => void): this;
+ on(event: 'origin', listener: (origins: string[]) => void): this;
+ on(event: 'connect', listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+ on(event: 'stream', listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+ on(event: string | symbol, listener: (...args: any[]) => void): this;
+ once(event: 'altsvc', listener: (alt: string, origin: string, stream: number) => void): this;
+ once(event: 'origin', listener: (origins: string[]) => void): this;
+ once(event: 'connect', listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+ once(event: 'stream', listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+ once(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependListener(event: 'altsvc', listener: (alt: string, origin: string, stream: number) => void): this;
+ prependListener(event: 'origin', listener: (origins: string[]) => void): this;
+ prependListener(event: 'connect', listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+ prependListener(event: 'stream', listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+ prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: 'altsvc', listener: (alt: string, origin: string, stream: number) => void): this;
+ prependOnceListener(event: 'origin', listener: (origins: string[]) => void): this;
+ prependOnceListener(event: 'connect', listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+ prependOnceListener(event: 'stream', listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
+ prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ }
+ export interface AlternativeServiceOptions {
+ origin: number | string | url.URL;
+ }
+ export interface ServerHttp2Session extends Http2Session {
+ readonly server: Http2Server | Http2SecureServer;
+ /**
+ * Submits an `ALTSVC` frame (as defined by [RFC 7838](https://tools.ietf.org/html/rfc7838)) to the connected client.
+ *
+ * ```js
+ * const http2 = require('http2');
+ *
+ * const server = http2.createServer();
+ * server.on('session', (session) => {
+ * // Set altsvc for origin https://example.org:80
+ * session.altsvc('h2=":8000"', 'https://example.org:80');
+ * });
+ *
+ * server.on('stream', (stream) => {
+ * // Set altsvc for a specific stream
+ * stream.session.altsvc('h2=":8000"', stream.id);
+ * });
+ * ```
+ *
+ * Sending an `ALTSVC` frame with a specific stream ID indicates that the alternate
+ * service is associated with the origin of the given `Http2Stream`.
+ *
+ * The `alt` and origin string _must_ contain only ASCII bytes and are
+ * strictly interpreted as a sequence of ASCII bytes. The special value `'clear'`may be passed to clear any previously set alternative service for a given
+ * domain.
+ *
+ * When a string is passed for the `originOrStream` argument, it will be parsed as
+ * a URL and the origin will be derived. For instance, the origin for the
+ * HTTP URL `'https://example.org/foo/bar'` is the ASCII string`'https://example.org'`. An error will be thrown if either the given string
+ * cannot be parsed as a URL or if a valid origin cannot be derived.
+ *
+ * A `URL` object, or any object with an `origin` property, may be passed as`originOrStream`, in which case the value of the `origin` property will be
+ * used. The value of the `origin` property _must_ be a properly serialized
+ * ASCII origin.
+ * @since v9.4.0
+ * @param alt A description of the alternative service configuration as defined by `RFC 7838`.
+ * @param originOrStream Either a URL string specifying the origin (or an `Object` with an `origin` property) or the numeric identifier of an active `Http2Stream` as given by the
+ * `http2stream.id` property.
+ */
+ altsvc(alt: string, originOrStream: number | string | url.URL | AlternativeServiceOptions): void;
+ /**
+ * Submits an `ORIGIN` frame (as defined by [RFC 8336](https://tools.ietf.org/html/rfc8336)) to the connected client
+ * to advertise the set of origins for which the server is capable of providing
+ * authoritative responses.
+ *
+ * ```js
+ * const http2 = require('http2');
+ * const options = getSecureOptionsSomehow();
+ * const server = http2.createSecureServer(options);
+ * server.on('stream', (stream) => {
+ * stream.respond();
+ * stream.end('ok');
+ * });
+ * server.on('session', (session) => {
+ * session.origin('https://example.com', 'https://example.org');
+ * });
+ * ```
+ *
+ * When a string is passed as an `origin`, it will be parsed as a URL and the
+ * origin will be derived. For instance, the origin for the HTTP URL`'https://example.org/foo/bar'` is the ASCII string`'https://example.org'`. An error will be thrown if either the given
+ * string
+ * cannot be parsed as a URL or if a valid origin cannot be derived.
+ *
+ * A `URL` object, or any object with an `origin` property, may be passed as
+ * an `origin`, in which case the value of the `origin` property will be
+ * used. The value of the `origin` property _must_ be a properly serialized
+ * ASCII origin.
+ *
+ * Alternatively, the `origins` option may be used when creating a new HTTP/2
+ * server using the `http2.createSecureServer()` method:
+ *
+ * ```js
+ * const http2 = require('http2');
+ * const options = getSecureOptionsSomehow();
+ * options.origins = ['https://example.com', 'https://example.org'];
+ * const server = http2.createSecureServer(options);
+ * server.on('stream', (stream) => {
+ * stream.respond();
+ * stream.end('ok');
+ * });
+ * ```
+ * @since v10.12.0
+ * @param origins One or more URL Strings passed as separate arguments.
+ */
+ origin(
+ ...origins: Array<
+ | string
+ | url.URL
+ | {
+ origin: string;
+ }
+ >
+ ): void;
+ addListener(event: 'connect', listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+ addListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+ addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ emit(event: 'connect', session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket): boolean;
+ emit(event: 'stream', stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean;
+ emit(event: string | symbol, ...args: any[]): boolean;
+ on(event: 'connect', listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+ on(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+ on(event: string | symbol, listener: (...args: any[]) => void): this;
+ once(event: 'connect', listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+ once(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+ once(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependListener(event: 'connect', listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+ prependListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+ prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: 'connect', listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
+ prependOnceListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+ prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ }
+ // Http2Server
+ export interface SessionOptions {
+ maxDeflateDynamicTableSize?: number | undefined;
+ maxSessionMemory?: number | undefined;
+ maxHeaderListPairs?: number | undefined;
+ maxOutstandingPings?: number | undefined;
+ maxSendHeaderBlockLength?: number | undefined;
+ paddingStrategy?: number | undefined;
+ peerMaxConcurrentStreams?: number | undefined;
+ settings?: Settings | undefined;
+ /**
+ * Specifies a timeout in milliseconds that
+ * a server should wait when an [`'unknownProtocol'`][] is emitted. If the
+ * socket has not been destroyed by that time the server will destroy it.
+ * @default 100000
+ */
+ unknownProtocolTimeout?: number | undefined;
+ selectPadding?(frameLen: number, maxFrameLen: number): number;
+ createConnection?(authority: url.URL, option: SessionOptions): stream.Duplex;
+ }
+ export interface ClientSessionOptions extends SessionOptions {
+ maxReservedRemoteStreams?: number | undefined;
+ createConnection?: ((authority: url.URL, option: SessionOptions) => stream.Duplex) | undefined;
+ protocol?: 'http:' | 'https:' | undefined;
+ }
+ export interface ServerSessionOptions extends SessionOptions {
+ Http1IncomingMessage?: typeof IncomingMessage | undefined;
+ Http1ServerResponse?: typeof ServerResponse | undefined;
+ Http2ServerRequest?: typeof Http2ServerRequest | undefined;
+ Http2ServerResponse?: typeof Http2ServerResponse | undefined;
+ }
+ export interface SecureClientSessionOptions extends ClientSessionOptions, tls.ConnectionOptions {}
+ export interface SecureServerSessionOptions extends ServerSessionOptions, tls.TlsOptions {}
+ export interface ServerOptions extends ServerSessionOptions {}
+ export interface SecureServerOptions extends SecureServerSessionOptions {
+ allowHTTP1?: boolean | undefined;
+ origins?: string[] | undefined;
+ }
+ interface HTTP2ServerCommon {
+ setTimeout(msec?: number, callback?: () => void): this;
+ /**
+ * Throws ERR_HTTP2_INVALID_SETTING_VALUE for invalid settings values.
+ * Throws ERR_INVALID_ARG_TYPE for invalid settings argument.
+ */
+ updateSettings(settings: Settings): void;
+ }
+ export interface Http2Server extends net.Server, HTTP2ServerCommon {
+ addListener(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ addListener(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ addListener(event: 'session', listener: (session: ServerHttp2Session) => void): this;
+ addListener(event: 'sessionError', listener: (err: Error) => void): this;
+ addListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+ addListener(event: 'timeout', listener: () => void): this;
+ addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ emit(event: 'checkContinue', request: Http2ServerRequest, response: Http2ServerResponse): boolean;
+ emit(event: 'request', request: Http2ServerRequest, response: Http2ServerResponse): boolean;
+ emit(event: 'session', session: ServerHttp2Session): boolean;
+ emit(event: 'sessionError', err: Error): boolean;
+ emit(event: 'stream', stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean;
+ emit(event: 'timeout'): boolean;
+ emit(event: string | symbol, ...args: any[]): boolean;
+ on(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ on(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ on(event: 'session', listener: (session: ServerHttp2Session) => void): this;
+ on(event: 'sessionError', listener: (err: Error) => void): this;
+ on(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+ on(event: 'timeout', listener: () => void): this;
+ on(event: string | symbol, listener: (...args: any[]) => void): this;
+ once(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ once(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ once(event: 'session', listener: (session: ServerHttp2Session) => void): this;
+ once(event: 'sessionError', listener: (err: Error) => void): this;
+ once(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+ once(event: 'timeout', listener: () => void): this;
+ once(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependListener(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ prependListener(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ prependListener(event: 'session', listener: (session: ServerHttp2Session) => void): this;
+ prependListener(event: 'sessionError', listener: (err: Error) => void): this;
+ prependListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+ prependListener(event: 'timeout', listener: () => void): this;
+ prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ prependOnceListener(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ prependOnceListener(event: 'session', listener: (session: ServerHttp2Session) => void): this;
+ prependOnceListener(event: 'sessionError', listener: (err: Error) => void): this;
+ prependOnceListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+ prependOnceListener(event: 'timeout', listener: () => void): this;
+ prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ }
+ export interface Http2SecureServer extends tls.Server, HTTP2ServerCommon {
+ addListener(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ addListener(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ addListener(event: 'session', listener: (session: ServerHttp2Session) => void): this;
+ addListener(event: 'sessionError', listener: (err: Error) => void): this;
+ addListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+ addListener(event: 'timeout', listener: () => void): this;
+ addListener(event: 'unknownProtocol', listener: (socket: tls.TLSSocket) => void): this;
+ addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ emit(event: 'checkContinue', request: Http2ServerRequest, response: Http2ServerResponse): boolean;
+ emit(event: 'request', request: Http2ServerRequest, response: Http2ServerResponse): boolean;
+ emit(event: 'session', session: ServerHttp2Session): boolean;
+ emit(event: 'sessionError', err: Error): boolean;
+ emit(event: 'stream', stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean;
+ emit(event: 'timeout'): boolean;
+ emit(event: 'unknownProtocol', socket: tls.TLSSocket): boolean;
+ emit(event: string | symbol, ...args: any[]): boolean;
+ on(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ on(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ on(event: 'session', listener: (session: ServerHttp2Session) => void): this;
+ on(event: 'sessionError', listener: (err: Error) => void): this;
+ on(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+ on(event: 'timeout', listener: () => void): this;
+ on(event: 'unknownProtocol', listener: (socket: tls.TLSSocket) => void): this;
+ on(event: string | symbol, listener: (...args: any[]) => void): this;
+ once(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ once(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ once(event: 'session', listener: (session: ServerHttp2Session) => void): this;
+ once(event: 'sessionError', listener: (err: Error) => void): this;
+ once(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+ once(event: 'timeout', listener: () => void): this;
+ once(event: 'unknownProtocol', listener: (socket: tls.TLSSocket) => void): this;
+ once(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependListener(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ prependListener(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ prependListener(event: 'session', listener: (session: ServerHttp2Session) => void): this;
+ prependListener(event: 'sessionError', listener: (err: Error) => void): this;
+ prependListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+ prependListener(event: 'timeout', listener: () => void): this;
+ prependListener(event: 'unknownProtocol', listener: (socket: tls.TLSSocket) => void): this;
+ prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: 'checkContinue', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ prependOnceListener(event: 'request', listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
+ prependOnceListener(event: 'session', listener: (session: ServerHttp2Session) => void): this;
+ prependOnceListener(event: 'sessionError', listener: (err: Error) => void): this;
+ prependOnceListener(event: 'stream', listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
+ prependOnceListener(event: 'timeout', listener: () => void): this;
+ prependOnceListener(event: 'unknownProtocol', listener: (socket: tls.TLSSocket) => void): this;
+ prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ }
+ /**
+ * A `Http2ServerRequest` object is created by {@link Server} or {@link SecureServer} and passed as the first argument to the `'request'` event. It may be used to access a request status,
+ * headers, and
+ * data.
+ * @since v8.4.0
+ */
+ export class Http2ServerRequest extends stream.Readable {
+ constructor(stream: ServerHttp2Stream, headers: IncomingHttpHeaders, options: stream.ReadableOptions, rawHeaders: ReadonlyArray<string>);
+ /**
+ * The `request.aborted` property will be `true` if the request has
+ * been aborted.
+ * @since v10.1.0
+ */
+ readonly aborted: boolean;
+ /**
+ * The request authority pseudo header field. Because HTTP/2 allows requests
+ * to set either `:authority` or `host`, this value is derived from`req.headers[':authority']` if present. Otherwise, it is derived from`req.headers['host']`.
+ * @since v8.4.0
+ */
+ readonly authority: string;
+ /**
+ * See `request.socket`.
+ * @since v8.4.0
+ * @deprecated Since v13.0.0 - Use `socket`.
+ */
+ readonly connection: net.Socket | tls.TLSSocket;
+ /**
+ * The `request.complete` property will be `true` if the request has
+ * been completed, aborted, or destroyed.
+ * @since v12.10.0
+ */
+ readonly complete: boolean;
+ /**
+ * The request/response headers object.
+ *
+ * Key-value pairs of header names and values. Header names are lower-cased.
+ *
+ * ```js
+ * // Prints something like:
+ * //
+ * // { 'user-agent': 'curl/7.22.0',
+ * // host: '127.0.0.1:8000',
+ * // accept: '*' }
+ * console.log(request.headers);
+ * ```
+ *
+ * See `HTTP/2 Headers Object`.
+ *
+ * In HTTP/2, the request path, host name, protocol, and method are represented as
+ * special headers prefixed with the `:` character (e.g. `':path'`). These special
+ * headers will be included in the `request.headers` object. Care must be taken not
+ * to inadvertently modify these special headers or errors may occur. For instance,
+ * removing all headers from the request will cause errors to occur:
+ *
+ * ```js
+ * removeAllHeaders(request.headers);
+ * assert(request.url); // Fails because the :path header has been removed
+ * ```
+ * @since v8.4.0
+ */
+ readonly headers: IncomingHttpHeaders;
+ /**
+ * In case of server request, the HTTP version sent by the client. In the case of
+ * client response, the HTTP version of the connected-to server. Returns`'2.0'`.
+ *
+ * Also `message.httpVersionMajor` is the first integer and`message.httpVersionMinor` is the second.
+ * @since v8.4.0
+ */
+ readonly httpVersion: string;
+ readonly httpVersionMinor: number;
+ readonly httpVersionMajor: number;
+ /**
+ * The request method as a string. Read-only. Examples: `'GET'`, `'DELETE'`.
+ * @since v8.4.0
+ */
+ readonly method: string;
+ /**
+ * The raw request/response headers list exactly as they were received.
+ *
+ * The keys and values are in the same list. It is _not_ a
+ * list of tuples. So, the even-numbered offsets are key values, and the
+ * odd-numbered offsets are the associated values.
+ *
+ * Header names are not lowercased, and duplicates are not merged.
+ *
+ * ```js
+ * // Prints something like:
+ * //
+ * // [ 'user-agent',
+ * // 'this is invalid because there can be only one',
+ * // 'User-Agent',
+ * // 'curl/7.22.0',
+ * // 'Host',
+ * // '127.0.0.1:8000',
+ * // 'ACCEPT',
+ * // '*' ]
+ * console.log(request.rawHeaders);
+ * ```
+ * @since v8.4.0
+ */
+ readonly rawHeaders: string[];
+ /**
+ * The raw request/response trailer keys and values exactly as they were
+ * received. Only populated at the `'end'` event.
+ * @since v8.4.0
+ */
+ readonly rawTrailers: string[];
+ /**
+ * The request scheme pseudo header field indicating the scheme
+ * portion of the target URL.
+ * @since v8.4.0
+ */
+ readonly scheme: string;
+ /**
+ * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but
+ * applies getters, setters, and methods based on HTTP/2 logic.
+ *
+ * `destroyed`, `readable`, and `writable` properties will be retrieved from and
+ * set on `request.stream`.
+ *
+ * `destroy`, `emit`, `end`, `on` and `once` methods will be called on`request.stream`.
+ *
+ * `setTimeout` method will be called on `request.stream.session`.
+ *
+ * `pause`, `read`, `resume`, and `write` will throw an error with code`ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for
+ * more information.
+ *
+ * All other interactions will be routed directly to the socket. With TLS support,
+ * use `request.socket.getPeerCertificate()` to obtain the client's
+ * authentication details.
+ * @since v8.4.0
+ */
+ readonly socket: net.Socket | tls.TLSSocket;
+ /**
+ * The `Http2Stream` object backing the request.
+ * @since v8.4.0
+ */
+ readonly stream: ServerHttp2Stream;
+ /**
+ * The request/response trailers object. Only populated at the `'end'` event.
+ * @since v8.4.0
+ */
+ readonly trailers: IncomingHttpHeaders;
+ /**
+ * Request URL string. This contains only the URL that is present in the actual
+ * HTTP request. If the request is:
+ *
+ * ```http
+ * GET /status?name=ryan HTTP/1.1
+ * Accept: text/plain
+ * ```
+ *
+ * Then `request.url` will be:
+ *
+ * ```js
+ * '/status?name=ryan'
+ * ```
+ *
+ * To parse the url into its parts, `new URL()` can be used:
+ *
+ * ```console
+ * $ node
+ * > new URL('/status?name=ryan', 'http://example.com')
+ * URL {
+ * href: 'http://example.com/status?name=ryan',
+ * origin: 'http://example.com',
+ * protocol: 'http:',
+ * username: '',
+ * password: '',
+ * host: 'example.com',
+ * hostname: 'example.com',
+ * port: '',
+ * pathname: '/status',
+ * search: '?name=ryan',
+ * searchParams: URLSearchParams { 'name' => 'ryan' },
+ * hash: ''
+ * }
+ * ```
+ * @since v8.4.0
+ */
+ url: string;
+ /**
+ * Sets the `Http2Stream`'s timeout value to `msecs`. If a callback is
+ * provided, then it is added as a listener on the `'timeout'` event on
+ * the response object.
+ *
+ * If no `'timeout'` listener is added to the request, the response, or
+ * the server, then `Http2Stream` s are destroyed when they time out. If a
+ * handler is assigned to the request, the response, or the server's `'timeout'`events, timed out sockets must be handled explicitly.
+ * @since v8.4.0
+ */
+ setTimeout(msecs: number, callback?: () => void): void;
+ read(size?: number): Buffer | string | null;
+ addListener(event: 'aborted', listener: (hadError: boolean, code: number) => void): this;
+ addListener(event: 'close', listener: () => void): this;
+ addListener(event: 'data', listener: (chunk: Buffer | string) => void): this;
+ addListener(event: 'end', listener: () => void): this;
+ addListener(event: 'readable', listener: () => void): this;
+ addListener(event: 'error', listener: (err: Error) => void): this;
+ addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ emit(event: 'aborted', hadError: boolean, code: number): boolean;
+ emit(event: 'close'): boolean;
+ emit(event: 'data', chunk: Buffer | string): boolean;
+ emit(event: 'end'): boolean;
+ emit(event: 'readable'): boolean;
+ emit(event: 'error', err: Error): boolean;
+ emit(event: string | symbol, ...args: any[]): boolean;
+ on(event: 'aborted', listener: (hadError: boolean, code: number) => void): this;
+ on(event: 'close', listener: () => void): this;
+ on(event: 'data', listener: (chunk: Buffer | string) => void): this;
+ on(event: 'end', listener: () => void): this;
+ on(event: 'readable', listener: () => void): this;
+ on(event: 'error', listener: (err: Error) => void): this;
+ on(event: string | symbol, listener: (...args: any[]) => void): this;
+ once(event: 'aborted', listener: (hadError: boolean, code: number) => void): this;
+ once(event: 'close', listener: () => void): this;
+ once(event: 'data', listener: (chunk: Buffer | string) => void): this;
+ once(event: 'end', listener: () => void): this;
+ once(event: 'readable', listener: () => void): this;
+ once(event: 'error', listener: (err: Error) => void): this;
+ once(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependListener(event: 'aborted', listener: (hadError: boolean, code: number) => void): this;
+ prependListener(event: 'close', listener: () => void): this;
+ prependListener(event: 'data', listener: (chunk: Buffer | string) => void): this;
+ prependListener(event: 'end', listener: () => void): this;
+ prependListener(event: 'readable', listener: () => void): this;
+ prependListener(event: 'error', listener: (err: Error) => void): this;
+ prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: 'aborted', listener: (hadError: boolean, code: number) => void): this;
+ prependOnceListener(event: 'close', listener: () => void): this;
+ prependOnceListener(event: 'data', listener: (chunk: Buffer | string) => void): this;
+ prependOnceListener(event: 'end', listener: () => void): this;
+ prependOnceListener(event: 'readable', listener: () => void): this;
+ prependOnceListener(event: 'error', listener: (err: Error) => void): this;
+ prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ }
+ /**
+ * This object is created internally by an HTTP server, not by the user. It is
+ * passed as the second parameter to the `'request'` event.
+ * @since v8.4.0
+ */
+ export class Http2ServerResponse extends stream.Writable {
+ constructor(stream: ServerHttp2Stream);
+ /**
+ * See `response.socket`.
+ * @since v8.4.0
+ * @deprecated Since v13.0.0 - Use `socket`.
+ */
+ readonly connection: net.Socket | tls.TLSSocket;
+ /**
+ * Boolean value that indicates whether the response has completed. Starts
+ * as `false`. After `response.end()` executes, the value will be `true`.
+ * @since v8.4.0
+ * @deprecated Since v13.4.0,v12.16.0 - Use `writableEnded`.
+ */
+ readonly finished: boolean;
+ /**
+ * True if headers were sent, false otherwise (read-only).
+ * @since v8.4.0
+ */
+ readonly headersSent: boolean;
+ /**
+ * A reference to the original HTTP2 request object.
+ * @since v15.7.0
+ */
+ readonly req: Http2ServerRequest;
+ /**
+ * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but
+ * applies getters, setters, and methods based on HTTP/2 logic.
+ *
+ * `destroyed`, `readable`, and `writable` properties will be retrieved from and
+ * set on `response.stream`.
+ *
+ * `destroy`, `emit`, `end`, `on` and `once` methods will be called on`response.stream`.
+ *
+ * `setTimeout` method will be called on `response.stream.session`.
+ *
+ * `pause`, `read`, `resume`, and `write` will throw an error with code`ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for
+ * more information.
+ *
+ * All other interactions will be routed directly to the socket.
+ *
+ * ```js
+ * const http2 = require('http2');
+ * const server = http2.createServer((req, res) => {
+ * const ip = req.socket.remoteAddress;
+ * const port = req.socket.remotePort;
+ * res.end(`Your IP address is ${ip} and your source port is ${port}.`);
+ * }).listen(3000);
+ * ```
+ * @since v8.4.0
+ */
+ readonly socket: net.Socket | tls.TLSSocket;
+ /**
+ * The `Http2Stream` object backing the response.
+ * @since v8.4.0
+ */
+ readonly stream: ServerHttp2Stream;
+ /**
+ * When true, the Date header will be automatically generated and sent in
+ * the response if it is not already present in the headers. Defaults to true.
+ *
+ * This should only be disabled for testing; HTTP requires the Date header
+ * in responses.
+ * @since v8.4.0
+ */
+ sendDate: boolean;
+ /**
+ * When using implicit headers (not calling `response.writeHead()` explicitly),
+ * this property controls the status code that will be sent to the client when
+ * the headers get flushed.
+ *
+ * ```js
+ * response.statusCode = 404;
+ * ```
+ *
+ * After response header was sent to the client, this property indicates the
+ * status code which was sent out.
+ * @since v8.4.0
+ */
+ statusCode: number;
+ /**
+ * Status message is not supported by HTTP/2 (RFC 7540 8.1.2.4). It returns
+ * an empty string.
+ * @since v8.4.0
+ */
+ statusMessage: '';
+ /**
+ * This method adds HTTP trailing headers (a header but at the end of the
+ * message) to the response.
+ *
+ * Attempting to set a header field name or value that contains invalid characters
+ * will result in a `TypeError` being thrown.
+ * @since v8.4.0
+ */
+ addTrailers(trailers: OutgoingHttpHeaders): void;
+ /**
+ * This method signals to the server that all of the response headers and body
+ * have been sent; that server should consider this message complete.
+ * The method, `response.end()`, MUST be called on each response.
+ *
+ * If `data` is specified, it is equivalent to calling `response.write(data, encoding)` followed by `response.end(callback)`.
+ *
+ * If `callback` is specified, it will be called when the response stream
+ * is finished.
+ * @since v8.4.0
+ */
+ end(callback?: () => void): this;
+ end(data: string | Uint8Array, callback?: () => void): this;
+ end(data: string | Uint8Array, encoding: BufferEncoding, callback?: () => void): this;
+ /**
+ * Reads out a header that has already been queued but not sent to the client.
+ * The name is case-insensitive.
+ *
+ * ```js
+ * const contentType = response.getHeader('content-type');
+ * ```
+ * @since v8.4.0
+ */
+ getHeader(name: string): string;
+ /**
+ * Returns an array containing the unique names of the current outgoing headers.
+ * All header names are lowercase.
+ *
+ * ```js
+ * response.setHeader('Foo', 'bar');
+ * response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']);
+ *
+ * const headerNames = response.getHeaderNames();
+ * // headerNames === ['foo', 'set-cookie']
+ * ```
+ * @since v8.4.0
+ */
+ getHeaderNames(): string[];
+ /**
+ * 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 `response.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
+ * response.setHeader('Foo', 'bar');
+ * response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']);
+ *
+ * const headers = response.getHeaders();
+ * // headers === { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] }
+ * ```
+ * @since v8.4.0
+ */
+ getHeaders(): OutgoingHttpHeaders;
+ /**
+ * Returns `true` if the header identified by `name` is currently set in the
+ * outgoing headers. The header name matching is case-insensitive.
+ *
+ * ```js
+ * const hasContentType = response.hasHeader('content-type');
+ * ```
+ * @since v8.4.0
+ */
+ hasHeader(name: string): boolean;
+ /**
+ * Removes a header that has been queued for implicit sending.
+ *
+ * ```js
+ * response.removeHeader('Content-Encoding');
+ * ```
+ * @since v8.4.0
+ */
+ removeHeader(name: string): void;
+ /**
+ * Sets a single header value for implicit headers. If this header already exists
+ * in the to-be-sent headers, its value will be replaced. Use an array of strings
+ * here to send multiple headers with the same name.
+ *
+ * ```js
+ * response.setHeader('Content-Type', 'text/html; charset=utf-8');
+ * ```
+ *
+ * or
+ *
+ * ```js
+ * response.setHeader('Set-Cookie', ['type=ninja', 'language=javascript']);
+ * ```
+ *
+ * Attempting to set a header field name or value that contains invalid characters
+ * will result in a `TypeError` being thrown.
+ *
+ * When headers have been set with `response.setHeader()`, 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 = http2.createServer((req, res) => {
+ * res.setHeader('Content-Type', 'text/html; charset=utf-8');
+ * res.setHeader('X-Foo', 'bar');
+ * res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
+ * res.end('ok');
+ * });
+ * ```
+ * @since v8.4.0
+ */
+ setHeader(name: string, value: number | string | ReadonlyArray<string>): void;
+ /**
+ * Sets the `Http2Stream`'s timeout value to `msecs`. If a callback is
+ * provided, then it is added as a listener on the `'timeout'` event on
+ * the response object.
+ *
+ * If no `'timeout'` listener is added to the request, the response, or
+ * the server, then `Http2Stream` s are destroyed when they time out. If a
+ * handler is assigned to the request, the response, or the server's `'timeout'`events, timed out sockets must be handled explicitly.
+ * @since v8.4.0
+ */
+ setTimeout(msecs: number, callback?: () => void): void;
+ /**
+ * If this method is called and `response.writeHead()` has not been called,
+ * it will switch to implicit header mode and flush the implicit headers.
+ *
+ * This sends a chunk of the response body. This method may
+ * be called multiple times to provide successive parts of the body.
+ *
+ * In the `http` module, the response body is omitted when the
+ * request is a HEAD request. Similarly, the `204` and `304` responses_must not_ include a message body.
+ *
+ * `chunk` can be a string or a buffer. If `chunk` is a string,
+ * the second parameter specifies how to encode it into a byte stream.
+ * By default the `encoding` is `'utf8'`. `callback` will be called when this chunk
+ * of data is flushed.
+ *
+ * This is the raw HTTP body and has nothing to do with higher-level multi-part
+ * body encodings that may be used.
+ *
+ * The first time `response.write()` is called, it will send the buffered
+ * header information and the first chunk of the body to the client. The second
+ * time `response.write()` is called, Node.js assumes data will be streamed,
+ * and sends the new data separately. That is, the response is buffered up to the
+ * first chunk of the body.
+ *
+ * Returns `true` if the entire data was flushed successfully to the kernel
+ * buffer. Returns `false` if all or part of the data was queued in user memory.`'drain'` will be emitted when the buffer is free again.
+ * @since v8.4.0
+ */
+ write(chunk: string | Uint8Array, callback?: (err: Error) => void): boolean;
+ write(chunk: string | Uint8Array, encoding: BufferEncoding, callback?: (err: Error) => void): boolean;
+ /**
+ * Sends a status `100 Continue` to the client, indicating that the request body
+ * should be sent. See the `'checkContinue'` event on `Http2Server` and`Http2SecureServer`.
+ * @since v8.4.0
+ */
+ writeContinue(): void;
+ /**
+ * Sends a response header to the request. The status code is a 3-digit HTTP
+ * status code, like `404`. The last argument, `headers`, are the response headers.
+ *
+ * Returns a reference to the `Http2ServerResponse`, so that calls can be chained.
+ *
+ * For compatibility with `HTTP/1`, a human-readable `statusMessage` may be
+ * passed as the second argument. However, because the `statusMessage` has no
+ * meaning within HTTP/2, the argument will have no effect and a process warning
+ * will be emitted.
+ *
+ * ```js
+ * const body = 'hello world';
+ * response.writeHead(200, {
+ * 'Content-Length': Buffer.byteLength(body),
+ * 'Content-Type': 'text/plain; charset=utf-8',
+ * });
+ * ```
+ *
+ * `Content-Length` is given in bytes not characters. The`Buffer.byteLength()` API may be used to determine the number of bytes in a
+ * given encoding. On outbound messages, Node.js does not check if Content-Length
+ * and the length of the body being transmitted are equal or not. However, when
+ * receiving messages, Node.js will automatically reject messages when the`Content-Length` does not match the actual payload size.
+ *
+ * This method may be called at most one time on a message before `response.end()` is called.
+ *
+ * If `response.write()` or `response.end()` are called before calling
+ * this, the implicit/mutable headers will be calculated and call this function.
+ *
+ * When headers have been set with `response.setHeader()`, 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 = http2.createServer((req, res) => {
+ * res.setHeader('Content-Type', 'text/html; charset=utf-8');
+ * res.setHeader('X-Foo', 'bar');
+ * res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
+ * res.end('ok');
+ * });
+ * ```
+ *
+ * Attempting to set a header field name or value that contains invalid characters
+ * will result in a `TypeError` being thrown.
+ * @since v8.4.0
+ */
+ writeHead(statusCode: number, headers?: OutgoingHttpHeaders): this;
+ writeHead(statusCode: number, statusMessage: string, headers?: OutgoingHttpHeaders): this;
+ /**
+ * Call `http2stream.pushStream()` with the given headers, and wrap the
+ * given `Http2Stream` on a newly created `Http2ServerResponse` as the callback
+ * parameter if successful. When `Http2ServerRequest` is closed, the callback is
+ * called with an error `ERR_HTTP2_INVALID_STREAM`.
+ * @since v8.4.0
+ * @param headers An object describing the headers
+ * @param callback Called once `http2stream.pushStream()` is finished, or either when the attempt to create the pushed `Http2Stream` has failed or has been rejected, or the state of
+ * `Http2ServerRequest` is closed prior to calling the `http2stream.pushStream()` method
+ */
+ createPushResponse(headers: OutgoingHttpHeaders, callback: (err: Error | null, res: Http2ServerResponse) => void): void;
+ addListener(event: 'close', listener: () => void): this;
+ addListener(event: 'drain', listener: () => void): this;
+ addListener(event: 'error', listener: (error: Error) => void): this;
+ addListener(event: 'finish', listener: () => void): this;
+ addListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
+ addListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
+ addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ emit(event: 'close'): boolean;
+ emit(event: 'drain'): boolean;
+ emit(event: 'error', error: Error): boolean;
+ emit(event: 'finish'): boolean;
+ emit(event: 'pipe', src: stream.Readable): boolean;
+ emit(event: 'unpipe', src: stream.Readable): boolean;
+ emit(event: string | symbol, ...args: any[]): boolean;
+ on(event: 'close', listener: () => void): this;
+ on(event: 'drain', listener: () => void): this;
+ on(event: 'error', listener: (error: Error) => void): this;
+ on(event: 'finish', listener: () => void): this;
+ on(event: 'pipe', listener: (src: stream.Readable) => void): this;
+ on(event: 'unpipe', listener: (src: stream.Readable) => void): this;
+ on(event: string | symbol, listener: (...args: any[]) => void): this;
+ once(event: 'close', listener: () => void): this;
+ once(event: 'drain', listener: () => void): this;
+ once(event: 'error', listener: (error: Error) => void): this;
+ once(event: 'finish', listener: () => void): this;
+ once(event: 'pipe', listener: (src: stream.Readable) => void): this;
+ once(event: 'unpipe', listener: (src: stream.Readable) => void): this;
+ once(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependListener(event: 'close', listener: () => void): this;
+ prependListener(event: 'drain', listener: () => void): this;
+ prependListener(event: 'error', listener: (error: Error) => void): this;
+ prependListener(event: 'finish', listener: () => void): this;
+ prependListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
+ prependListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
+ prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: 'close', listener: () => void): this;
+ prependOnceListener(event: 'drain', listener: () => void): this;
+ prependOnceListener(event: 'error', listener: (error: Error) => void): this;
+ prependOnceListener(event: 'finish', listener: () => void): this;
+ prependOnceListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
+ prependOnceListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
+ prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ }
+ export namespace constants {
+ const NGHTTP2_SESSION_SERVER: number;
+ const NGHTTP2_SESSION_CLIENT: number;
+ const NGHTTP2_STREAM_STATE_IDLE: number;
+ const NGHTTP2_STREAM_STATE_OPEN: number;
+ const NGHTTP2_STREAM_STATE_RESERVED_LOCAL: number;
+ const NGHTTP2_STREAM_STATE_RESERVED_REMOTE: number;
+ const NGHTTP2_STREAM_STATE_HALF_CLOSED_LOCAL: number;
+ const NGHTTP2_STREAM_STATE_HALF_CLOSED_REMOTE: number;
+ const NGHTTP2_STREAM_STATE_CLOSED: number;
+ const NGHTTP2_NO_ERROR: number;
+ const NGHTTP2_PROTOCOL_ERROR: number;
+ const NGHTTP2_INTERNAL_ERROR: number;
+ const NGHTTP2_FLOW_CONTROL_ERROR: number;
+ const NGHTTP2_SETTINGS_TIMEOUT: number;
+ const NGHTTP2_STREAM_CLOSED: number;
+ const NGHTTP2_FRAME_SIZE_ERROR: number;
+ const NGHTTP2_REFUSED_STREAM: number;
+ const NGHTTP2_CANCEL: number;
+ const NGHTTP2_COMPRESSION_ERROR: number;
+ const NGHTTP2_CONNECT_ERROR: number;
+ const NGHTTP2_ENHANCE_YOUR_CALM: number;
+ const NGHTTP2_INADEQUATE_SECURITY: number;
+ const NGHTTP2_HTTP_1_1_REQUIRED: number;
+ const NGHTTP2_ERR_FRAME_SIZE_ERROR: number;
+ const NGHTTP2_FLAG_NONE: number;
+ const NGHTTP2_FLAG_END_STREAM: number;
+ const NGHTTP2_FLAG_END_HEADERS: number;
+ const NGHTTP2_FLAG_ACK: number;
+ const NGHTTP2_FLAG_PADDED: number;
+ const NGHTTP2_FLAG_PRIORITY: number;
+ const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number;
+ const DEFAULT_SETTINGS_ENABLE_PUSH: number;
+ const DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE: number;
+ const DEFAULT_SETTINGS_MAX_FRAME_SIZE: number;
+ const MAX_MAX_FRAME_SIZE: number;
+ const MIN_MAX_FRAME_SIZE: number;
+ const MAX_INITIAL_WINDOW_SIZE: number;
+ const NGHTTP2_DEFAULT_WEIGHT: number;
+ const NGHTTP2_SETTINGS_HEADER_TABLE_SIZE: number;
+ const NGHTTP2_SETTINGS_ENABLE_PUSH: number;
+ const NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS: number;
+ const NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE: number;
+ const NGHTTP2_SETTINGS_MAX_FRAME_SIZE: number;
+ const NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE: number;
+ const PADDING_STRATEGY_NONE: number;
+ const PADDING_STRATEGY_MAX: number;
+ const PADDING_STRATEGY_CALLBACK: number;
+ const HTTP2_HEADER_STATUS: string;
+ const HTTP2_HEADER_METHOD: string;
+ const HTTP2_HEADER_AUTHORITY: string;
+ const HTTP2_HEADER_SCHEME: string;
+ const HTTP2_HEADER_PATH: string;
+ const HTTP2_HEADER_ACCEPT_CHARSET: string;
+ const HTTP2_HEADER_ACCEPT_ENCODING: string;
+ const HTTP2_HEADER_ACCEPT_LANGUAGE: string;
+ const HTTP2_HEADER_ACCEPT_RANGES: string;
+ const HTTP2_HEADER_ACCEPT: string;
+ const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN: string;
+ const HTTP2_HEADER_AGE: string;
+ const HTTP2_HEADER_ALLOW: string;
+ const HTTP2_HEADER_AUTHORIZATION: string;
+ const HTTP2_HEADER_CACHE_CONTROL: string;
+ const HTTP2_HEADER_CONNECTION: string;
+ const HTTP2_HEADER_CONTENT_DISPOSITION: string;
+ const HTTP2_HEADER_CONTENT_ENCODING: string;
+ const HTTP2_HEADER_CONTENT_LANGUAGE: string;
+ const HTTP2_HEADER_CONTENT_LENGTH: string;
+ const HTTP2_HEADER_CONTENT_LOCATION: string;
+ const HTTP2_HEADER_CONTENT_MD5: string;
+ const HTTP2_HEADER_CONTENT_RANGE: string;
+ const HTTP2_HEADER_CONTENT_TYPE: string;
+ const HTTP2_HEADER_COOKIE: string;
+ const HTTP2_HEADER_DATE: string;
+ const HTTP2_HEADER_ETAG: string;
+ const HTTP2_HEADER_EXPECT: string;
+ const HTTP2_HEADER_EXPIRES: string;
+ const HTTP2_HEADER_FROM: string;
+ const HTTP2_HEADER_HOST: string;
+ const HTTP2_HEADER_IF_MATCH: string;
+ const HTTP2_HEADER_IF_MODIFIED_SINCE: string;
+ const HTTP2_HEADER_IF_NONE_MATCH: string;
+ const HTTP2_HEADER_IF_RANGE: string;
+ const HTTP2_HEADER_IF_UNMODIFIED_SINCE: string;
+ const HTTP2_HEADER_LAST_MODIFIED: string;
+ const HTTP2_HEADER_LINK: string;
+ const HTTP2_HEADER_LOCATION: string;
+ const HTTP2_HEADER_MAX_FORWARDS: string;
+ const HTTP2_HEADER_PREFER: string;
+ const HTTP2_HEADER_PROXY_AUTHENTICATE: string;
+ const HTTP2_HEADER_PROXY_AUTHORIZATION: string;
+ const HTTP2_HEADER_RANGE: string;
+ const HTTP2_HEADER_REFERER: string;
+ const HTTP2_HEADER_REFRESH: string;
+ const HTTP2_HEADER_RETRY_AFTER: string;
+ const HTTP2_HEADER_SERVER: string;
+ const HTTP2_HEADER_SET_COOKIE: string;
+ const HTTP2_HEADER_STRICT_TRANSPORT_SECURITY: string;
+ const HTTP2_HEADER_TRANSFER_ENCODING: string;
+ const HTTP2_HEADER_TE: string;
+ const HTTP2_HEADER_UPGRADE: string;
+ const HTTP2_HEADER_USER_AGENT: string;
+ const HTTP2_HEADER_VARY: string;
+ const HTTP2_HEADER_VIA: string;
+ const HTTP2_HEADER_WWW_AUTHENTICATE: string;
+ const HTTP2_HEADER_HTTP2_SETTINGS: string;
+ const HTTP2_HEADER_KEEP_ALIVE: string;
+ const HTTP2_HEADER_PROXY_CONNECTION: string;
+ const HTTP2_METHOD_ACL: string;
+ const HTTP2_METHOD_BASELINE_CONTROL: string;
+ const HTTP2_METHOD_BIND: string;
+ const HTTP2_METHOD_CHECKIN: string;
+ const HTTP2_METHOD_CHECKOUT: string;
+ const HTTP2_METHOD_CONNECT: string;
+ const HTTP2_METHOD_COPY: string;
+ const HTTP2_METHOD_DELETE: string;
+ const HTTP2_METHOD_GET: string;
+ const HTTP2_METHOD_HEAD: string;
+ const HTTP2_METHOD_LABEL: string;
+ const HTTP2_METHOD_LINK: string;
+ const HTTP2_METHOD_LOCK: string;
+ const HTTP2_METHOD_MERGE: string;
+ const HTTP2_METHOD_MKACTIVITY: string;
+ const HTTP2_METHOD_MKCALENDAR: string;
+ const HTTP2_METHOD_MKCOL: string;
+ const HTTP2_METHOD_MKREDIRECTREF: string;
+ const HTTP2_METHOD_MKWORKSPACE: string;
+ const HTTP2_METHOD_MOVE: string;
+ const HTTP2_METHOD_OPTIONS: string;
+ const HTTP2_METHOD_ORDERPATCH: string;
+ const HTTP2_METHOD_PATCH: string;
+ const HTTP2_METHOD_POST: string;
+ const HTTP2_METHOD_PRI: string;
+ const HTTP2_METHOD_PROPFIND: string;
+ const HTTP2_METHOD_PROPPATCH: string;
+ const HTTP2_METHOD_PUT: string;
+ const HTTP2_METHOD_REBIND: string;
+ const HTTP2_METHOD_REPORT: string;
+ const HTTP2_METHOD_SEARCH: string;
+ const HTTP2_METHOD_TRACE: string;
+ const HTTP2_METHOD_UNBIND: string;
+ const HTTP2_METHOD_UNCHECKOUT: string;
+ const HTTP2_METHOD_UNLINK: string;
+ const HTTP2_METHOD_UNLOCK: string;
+ const HTTP2_METHOD_UPDATE: string;
+ const HTTP2_METHOD_UPDATEREDIRECTREF: string;
+ const HTTP2_METHOD_VERSION_CONTROL: string;
+ const HTTP_STATUS_CONTINUE: number;
+ const HTTP_STATUS_SWITCHING_PROTOCOLS: number;
+ const HTTP_STATUS_PROCESSING: number;
+ const HTTP_STATUS_OK: number;
+ const HTTP_STATUS_CREATED: number;
+ const HTTP_STATUS_ACCEPTED: number;
+ const HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION: number;
+ const HTTP_STATUS_NO_CONTENT: number;
+ const HTTP_STATUS_RESET_CONTENT: number;
+ const HTTP_STATUS_PARTIAL_CONTENT: number;
+ const HTTP_STATUS_MULTI_STATUS: number;
+ const HTTP_STATUS_ALREADY_REPORTED: number;
+ const HTTP_STATUS_IM_USED: number;
+ const HTTP_STATUS_MULTIPLE_CHOICES: number;
+ const HTTP_STATUS_MOVED_PERMANENTLY: number;
+ const HTTP_STATUS_FOUND: number;
+ const HTTP_STATUS_SEE_OTHER: number;
+ const HTTP_STATUS_NOT_MODIFIED: number;
+ const HTTP_STATUS_USE_PROXY: number;
+ const HTTP_STATUS_TEMPORARY_REDIRECT: number;
+ const HTTP_STATUS_PERMANENT_REDIRECT: number;
+ const HTTP_STATUS_BAD_REQUEST: number;
+ const HTTP_STATUS_UNAUTHORIZED: number;
+ const HTTP_STATUS_PAYMENT_REQUIRED: number;
+ const HTTP_STATUS_FORBIDDEN: number;
+ const HTTP_STATUS_NOT_FOUND: number;
+ const HTTP_STATUS_METHOD_NOT_ALLOWED: number;
+ const HTTP_STATUS_NOT_ACCEPTABLE: number;
+ const HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED: number;
+ const HTTP_STATUS_REQUEST_TIMEOUT: number;
+ const HTTP_STATUS_CONFLICT: number;
+ const HTTP_STATUS_GONE: number;
+ const HTTP_STATUS_LENGTH_REQUIRED: number;
+ const HTTP_STATUS_PRECONDITION_FAILED: number;
+ const HTTP_STATUS_PAYLOAD_TOO_LARGE: number;
+ const HTTP_STATUS_URI_TOO_LONG: number;
+ const HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE: number;
+ const HTTP_STATUS_RANGE_NOT_SATISFIABLE: number;
+ const HTTP_STATUS_EXPECTATION_FAILED: number;
+ const HTTP_STATUS_TEAPOT: number;
+ const HTTP_STATUS_MISDIRECTED_REQUEST: number;
+ const HTTP_STATUS_UNPROCESSABLE_ENTITY: number;
+ const HTTP_STATUS_LOCKED: number;
+ const HTTP_STATUS_FAILED_DEPENDENCY: number;
+ const HTTP_STATUS_UNORDERED_COLLECTION: number;
+ const HTTP_STATUS_UPGRADE_REQUIRED: number;
+ const HTTP_STATUS_PRECONDITION_REQUIRED: number;
+ const HTTP_STATUS_TOO_MANY_REQUESTS: number;
+ const HTTP_STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE: number;
+ const HTTP_STATUS_UNAVAILABLE_FOR_LEGAL_REASONS: number;
+ const HTTP_STATUS_INTERNAL_SERVER_ERROR: number;
+ const HTTP_STATUS_NOT_IMPLEMENTED: number;
+ const HTTP_STATUS_BAD_GATEWAY: number;
+ const HTTP_STATUS_SERVICE_UNAVAILABLE: number;
+ const HTTP_STATUS_GATEWAY_TIMEOUT: number;
+ const HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED: number;
+ const HTTP_STATUS_VARIANT_ALSO_NEGOTIATES: number;
+ const HTTP_STATUS_INSUFFICIENT_STORAGE: number;
+ const HTTP_STATUS_LOOP_DETECTED: number;
+ const HTTP_STATUS_BANDWIDTH_LIMIT_EXCEEDED: number;
+ const HTTP_STATUS_NOT_EXTENDED: number;
+ const HTTP_STATUS_NETWORK_AUTHENTICATION_REQUIRED: number;
+ }
+ /**
+ * This symbol can be set as a property on the HTTP/2 headers object with
+ * an array value in order to provide a list of headers considered sensitive.
+ */
+ export const sensitiveHeaders: symbol;
+ /**
+ * Returns an object containing the default settings for an `Http2Session`instance. This method returns a new object instance every time it is called
+ * so instances returned may be safely modified for use.
+ * @since v8.4.0
+ */
+ export function getDefaultSettings(): Settings;
+ /**
+ * Returns a `Buffer` instance containing serialized representation of the given
+ * HTTP/2 settings as specified in the [HTTP/2](https://tools.ietf.org/html/rfc7540) specification. This is intended
+ * for use with the `HTTP2-Settings` header field.
+ *
+ * ```js
+ * const http2 = require('http2');
+ *
+ * const packed = http2.getPackedSettings({ enablePush: false });
+ *
+ * console.log(packed.toString('base64'));
+ * // Prints: AAIAAAAA
+ * ```
+ * @since v8.4.0
+ */
+ export function getPackedSettings(settings: Settings): Buffer;
+ /**
+ * Returns a `HTTP/2 Settings Object` containing the deserialized settings from
+ * the given `Buffer` as generated by `http2.getPackedSettings()`.
+ * @since v8.4.0
+ * @param buf The packed settings.
+ */
+ export function getUnpackedSettings(buf: Uint8Array): Settings;
+ /**
+ * Returns a `net.Server` instance that creates and manages `Http2Session`instances.
+ *
+ * Since there are no browsers known that support [unencrypted HTTP/2](https://http2.github.io/faq/#does-http2-require-encryption), the use of {@link createSecureServer} is necessary when
+ * communicating
+ * with browser clients.
+ *
+ * ```js
+ * const http2 = require('http2');
+ *
+ * // Create an unencrypted HTTP/2 server.
+ * // Since there are no browsers known that support
+ * // unencrypted HTTP/2, the use of `http2.createSecureServer()`
+ * // is necessary when communicating with browser clients.
+ * const server = http2.createServer();
+ *
+ * server.on('stream', (stream, headers) => {
+ * stream.respond({
+ * 'content-type': 'text/html; charset=utf-8',
+ * ':status': 200
+ * });
+ * stream.end('<h1>Hello World</h1>');
+ * });
+ *
+ * server.listen(80);
+ * ```
+ * @since v8.4.0
+ * @param onRequestHandler See `Compatibility API`
+ */
+ export function createServer(onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2Server;
+ export function createServer(options: ServerOptions, onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2Server;
+ /**
+ * Returns a `tls.Server` instance that creates and manages `Http2Session`instances.
+ *
+ * ```js
+ * const http2 = require('http2');
+ * const fs = require('fs');
+ *
+ * const options = {
+ * key: fs.readFileSync('server-key.pem'),
+ * cert: fs.readFileSync('server-cert.pem')
+ * };
+ *
+ * // Create a secure HTTP/2 server
+ * const server = http2.createSecureServer(options);
+ *
+ * server.on('stream', (stream, headers) => {
+ * stream.respond({
+ * 'content-type': 'text/html; charset=utf-8',
+ * ':status': 200
+ * });
+ * stream.end('<h1>Hello World</h1>');
+ * });
+ *
+ * server.listen(80);
+ * ```
+ * @since v8.4.0
+ * @param onRequestHandler See `Compatibility API`
+ */
+ export function createSecureServer(onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2SecureServer;
+ export function createSecureServer(options: SecureServerOptions, onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2SecureServer;
+ /**
+ * Returns a `ClientHttp2Session` instance.
+ *
+ * ```js
+ * const http2 = require('http2');
+ * const client = http2.connect('https://localhost:1234');
+ *
+ * // Use the client
+ *
+ * client.close();
+ * ```
+ * @since v8.4.0
+ * @param authority The remote HTTP/2 server to connect to. This must be in the form of a minimal, valid URL with the `http://` or `https://` prefix, host name, and IP port (if a non-default port
+ * is used). Userinfo (user ID and password), path, querystring, and fragment details in the URL will be ignored.
+ * @param listener Will be registered as a one-time listener of the {@link 'connect'} event.
+ */
+ export function connect(authority: string | url.URL, listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): ClientHttp2Session;
+ export function connect(
+ authority: string | url.URL,
+ options?: ClientSessionOptions | SecureClientSessionOptions,
+ listener?: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void
+ ): ClientHttp2Session;
+}
+declare module 'node:http2' {
+ export * from 'http2';
+}