1declare module "http2" {
2    import * as events from "events";
3    import * as fs from "fs";
4    import * as net from "net";
5    import * as stream from "stream";
6    import * as tls from "tls";
7    import * as url from "url";
8
9    import { IncomingHttpHeaders as Http1IncomingHttpHeaders, OutgoingHttpHeaders, IncomingMessage, ServerResponse } from "http";
10    export { OutgoingHttpHeaders } from "http";
11
12    export interface IncomingHttpStatusHeader {
13        ":status"?: number;
14    }
15
16    export interface IncomingHttpHeaders extends Http1IncomingHttpHeaders {
17        ":path"?: string;
18        ":method"?: string;
19        ":authority"?: string;
20        ":scheme"?: string;
21    }
22
23    // Http2Stream
24
25    export interface StreamPriorityOptions {
26        exclusive?: boolean;
27        parent?: number;
28        weight?: number;
29        silent?: boolean;
30    }
31
32    export interface StreamState {
33        localWindowSize?: number;
34        state?: number;
35        localClose?: number;
36        remoteClose?: number;
37        sumDependencyWeight?: number;
38        weight?: number;
39    }
40
41    export interface ServerStreamResponseOptions {
42        endStream?: boolean;
43        waitForTrailers?: boolean;
44    }
45
46    export interface StatOptions {
47        offset: number;
48        length: number;
49    }
50
51    export interface ServerStreamFileResponseOptions {
52        statCheck?(stats: fs.Stats, headers: OutgoingHttpHeaders, statOptions: StatOptions): void | boolean;
53        waitForTrailers?: boolean;
54        offset?: number;
55        length?: number;
56    }
57
58    export interface ServerStreamFileResponseOptionsWithError extends ServerStreamFileResponseOptions {
59        onError?(err: NodeJS.ErrnoException): void;
60    }
61
62    export interface Http2Stream extends stream.Duplex {
63        readonly aborted: boolean;
64        readonly bufferSize: number;
65        readonly closed: boolean;
66        readonly destroyed: boolean;
67        /**
68         * Set the true if the END_STREAM flag was set in the request or response HEADERS frame received,
69         * indicating that no additional data should be received and the readable side of the Http2Stream will be closed.
70         */
71        readonly endAfterHeaders: boolean;
72        readonly id?: number;
73        readonly pending: boolean;
74        readonly rstCode: number;
75        readonly sentHeaders: OutgoingHttpHeaders;
76        readonly sentInfoHeaders?: OutgoingHttpHeaders[];
77        readonly sentTrailers?: OutgoingHttpHeaders;
78        readonly session: Http2Session;
79        readonly state: StreamState;
80
81        close(code?: number, callback?: () => void): void;
82        priority(options: StreamPriorityOptions): void;
83        setTimeout(msecs: number, callback?: () => void): void;
84        sendTrailers(headers: OutgoingHttpHeaders): void;
85
86        addListener(event: "aborted", listener: () => void): this;
87        addListener(event: "close", listener: () => void): this;
88        addListener(event: "data", listener: (chunk: Buffer | string) => void): this;
89        addListener(event: "drain", listener: () => void): this;
90        addListener(event: "end", listener: () => void): this;
91        addListener(event: "error", listener: (err: Error) => void): this;
92        addListener(event: "finish", listener: () => void): this;
93        addListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
94        addListener(event: "pipe", listener: (src: stream.Readable) => void): this;
95        addListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
96        addListener(event: "streamClosed", listener: (code: number) => void): this;
97        addListener(event: "timeout", listener: () => void): this;
98        addListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
99        addListener(event: "wantTrailers", listener: () => void): this;
100        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
101
102        emit(event: "aborted"): boolean;
103        emit(event: "close"): boolean;
104        emit(event: "data", chunk: Buffer | string): boolean;
105        emit(event: "drain"): boolean;
106        emit(event: "end"): boolean;
107        emit(event: "error", err: Error): boolean;
108        emit(event: "finish"): boolean;
109        emit(event: "frameError", frameType: number, errorCode: number): boolean;
110        emit(event: "pipe", src: stream.Readable): boolean;
111        emit(event: "unpipe", src: stream.Readable): boolean;
112        emit(event: "streamClosed", code: number): boolean;
113        emit(event: "timeout"): boolean;
114        emit(event: "trailers", trailers: IncomingHttpHeaders, flags: number): boolean;
115        emit(event: "wantTrailers"): boolean;
116        emit(event: string | symbol, ...args: any[]): boolean;
117
118        on(event: "aborted", listener: () => void): this;
119        on(event: "close", listener: () => void): this;
120        on(event: "data", listener: (chunk: Buffer | string) => void): this;
121        on(event: "drain", listener: () => void): this;
122        on(event: "end", listener: () => void): this;
123        on(event: "error", listener: (err: Error) => void): this;
124        on(event: "finish", listener: () => void): this;
125        on(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
126        on(event: "pipe", listener: (src: stream.Readable) => void): this;
127        on(event: "unpipe", listener: (src: stream.Readable) => void): this;
128        on(event: "streamClosed", listener: (code: number) => void): this;
129        on(event: "timeout", listener: () => void): this;
130        on(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
131        on(event: "wantTrailers", listener: () => void): this;
132        on(event: string | symbol, listener: (...args: any[]) => void): this;
133
134        once(event: "aborted", listener: () => void): this;
135        once(event: "close", listener: () => void): this;
136        once(event: "data", listener: (chunk: Buffer | string) => void): this;
137        once(event: "drain", listener: () => void): this;
138        once(event: "end", listener: () => void): this;
139        once(event: "error", listener: (err: Error) => void): this;
140        once(event: "finish", listener: () => void): this;
141        once(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
142        once(event: "pipe", listener: (src: stream.Readable) => void): this;
143        once(event: "unpipe", listener: (src: stream.Readable) => void): this;
144        once(event: "streamClosed", listener: (code: number) => void): this;
145        once(event: "timeout", listener: () => void): this;
146        once(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
147        once(event: "wantTrailers", listener: () => void): this;
148        once(event: string | symbol, listener: (...args: any[]) => void): this;
149
150        prependListener(event: "aborted", listener: () => void): this;
151        prependListener(event: "close", listener: () => void): this;
152        prependListener(event: "data", listener: (chunk: Buffer | string) => void): this;
153        prependListener(event: "drain", listener: () => void): this;
154        prependListener(event: "end", listener: () => void): this;
155        prependListener(event: "error", listener: (err: Error) => void): this;
156        prependListener(event: "finish", listener: () => void): this;
157        prependListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
158        prependListener(event: "pipe", listener: (src: stream.Readable) => void): this;
159        prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
160        prependListener(event: "streamClosed", listener: (code: number) => void): this;
161        prependListener(event: "timeout", listener: () => void): this;
162        prependListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
163        prependListener(event: "wantTrailers", listener: () => void): this;
164        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
165
166        prependOnceListener(event: "aborted", listener: () => void): this;
167        prependOnceListener(event: "close", listener: () => void): this;
168        prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this;
169        prependOnceListener(event: "drain", listener: () => void): this;
170        prependOnceListener(event: "end", listener: () => void): this;
171        prependOnceListener(event: "error", listener: (err: Error) => void): this;
172        prependOnceListener(event: "finish", listener: () => void): this;
173        prependOnceListener(event: "frameError", listener: (frameType: number, errorCode: number) => void): this;
174        prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this;
175        prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
176        prependOnceListener(event: "streamClosed", listener: (code: number) => void): this;
177        prependOnceListener(event: "timeout", listener: () => void): this;
178        prependOnceListener(event: "trailers", listener: (trailers: IncomingHttpHeaders, flags: number) => void): this;
179        prependOnceListener(event: "wantTrailers", listener: () => void): this;
180        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
181    }
182
183    export interface ClientHttp2Stream extends Http2Stream {
184        addListener(event: "continue", listener: () => {}): this;
185        addListener(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
186        addListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
187        addListener(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
188        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
189
190        emit(event: "continue"): boolean;
191        emit(event: "headers", headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean;
192        emit(event: "push", headers: IncomingHttpHeaders, flags: number): boolean;
193        emit(event: "response", headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean;
194        emit(event: string | symbol, ...args: any[]): boolean;
195
196        on(event: "continue", listener: () => {}): this;
197        on(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
198        on(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
199        on(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
200        on(event: string | symbol, listener: (...args: any[]) => void): this;
201
202        once(event: "continue", listener: () => {}): this;
203        once(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
204        once(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
205        once(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
206        once(event: string | symbol, listener: (...args: any[]) => void): this;
207
208        prependListener(event: "continue", listener: () => {}): this;
209        prependListener(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
210        prependListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
211        prependListener(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
212        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
213
214        prependOnceListener(event: "continue", listener: () => {}): this;
215        prependOnceListener(event: "headers", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
216        prependOnceListener(event: "push", listener: (headers: IncomingHttpHeaders, flags: number) => void): this;
217        prependOnceListener(event: "response", listener: (headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
218        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
219    }
220
221    export interface ServerHttp2Stream extends Http2Stream {
222        readonly headersSent: boolean;
223        readonly pushAllowed: boolean;
224        additionalHeaders(headers: OutgoingHttpHeaders): void;
225        pushStream(headers: OutgoingHttpHeaders, callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void): void;
226        pushStream(headers: OutgoingHttpHeaders, options?: StreamPriorityOptions, callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void): void;
227        respond(headers?: OutgoingHttpHeaders, options?: ServerStreamResponseOptions): void;
228        respondWithFD(fd: number | fs.promises.FileHandle, headers?: OutgoingHttpHeaders, options?: ServerStreamFileResponseOptions): void;
229        respondWithFile(path: string, headers?: OutgoingHttpHeaders, options?: ServerStreamFileResponseOptionsWithError): void;
230    }
231
232    // Http2Session
233
234    export interface Settings {
235        headerTableSize?: number;
236        enablePush?: boolean;
237        initialWindowSize?: number;
238        maxFrameSize?: number;
239        maxConcurrentStreams?: number;
240        maxHeaderListSize?: number;
241        enableConnectProtocol?: boolean;
242    }
243
244    export interface ClientSessionRequestOptions {
245        endStream?: boolean;
246        exclusive?: boolean;
247        parent?: number;
248        weight?: number;
249        waitForTrailers?: boolean;
250    }
251
252    export interface SessionState {
253        effectiveLocalWindowSize?: number;
254        effectiveRecvDataLength?: number;
255        nextStreamID?: number;
256        localWindowSize?: number;
257        lastProcStreamID?: number;
258        remoteWindowSize?: number;
259        outboundQueueSize?: number;
260        deflateDynamicTableSize?: number;
261        inflateDynamicTableSize?: number;
262    }
263
264    export interface Http2Session extends events.EventEmitter {
265        readonly alpnProtocol?: string;
266        readonly closed: boolean;
267        readonly connecting: boolean;
268        readonly destroyed: boolean;
269        readonly encrypted?: boolean;
270        readonly localSettings: Settings;
271        readonly originSet?: string[];
272        readonly pendingSettingsAck: boolean;
273        readonly remoteSettings: Settings;
274        readonly socket: net.Socket | tls.TLSSocket;
275        readonly state: SessionState;
276        readonly type: number;
277
278        close(callback?: () => void): void;
279        destroy(error?: Error, code?: number): void;
280        goaway(code?: number, lastStreamID?: number, opaqueData?: NodeJS.ArrayBufferView): void;
281        ping(callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean;
282        ping(payload: NodeJS.ArrayBufferView, callback: (err: Error | null, duration: number, payload: Buffer) => void): boolean;
283        ref(): void;
284        setTimeout(msecs: number, callback?: () => void): void;
285        settings(settings: Settings): void;
286        unref(): void;
287
288        addListener(event: "close", listener: () => void): this;
289        addListener(event: "error", listener: (err: Error) => void): this;
290        addListener(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
291        addListener(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
292        addListener(event: "localSettings", listener: (settings: Settings) => void): this;
293        addListener(event: "ping", listener: () => void): this;
294        addListener(event: "remoteSettings", listener: (settings: Settings) => void): this;
295        addListener(event: "timeout", listener: () => void): this;
296        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
297
298        emit(event: "close"): boolean;
299        emit(event: "error", err: Error): boolean;
300        emit(event: "frameError", frameType: number, errorCode: number, streamID: number): boolean;
301        emit(event: "goaway", errorCode: number, lastStreamID: number, opaqueData: Buffer): boolean;
302        emit(event: "localSettings", settings: Settings): boolean;
303        emit(event: "ping"): boolean;
304        emit(event: "remoteSettings", settings: Settings): boolean;
305        emit(event: "timeout"): boolean;
306        emit(event: string | symbol, ...args: any[]): boolean;
307
308        on(event: "close", listener: () => void): this;
309        on(event: "error", listener: (err: Error) => void): this;
310        on(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
311        on(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
312        on(event: "localSettings", listener: (settings: Settings) => void): this;
313        on(event: "ping", listener: () => void): this;
314        on(event: "remoteSettings", listener: (settings: Settings) => void): this;
315        on(event: "timeout", listener: () => void): this;
316        on(event: string | symbol, listener: (...args: any[]) => void): this;
317
318        once(event: "close", listener: () => void): this;
319        once(event: "error", listener: (err: Error) => void): this;
320        once(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
321        once(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
322        once(event: "localSettings", listener: (settings: Settings) => void): this;
323        once(event: "ping", listener: () => void): this;
324        once(event: "remoteSettings", listener: (settings: Settings) => void): this;
325        once(event: "timeout", listener: () => void): this;
326        once(event: string | symbol, listener: (...args: any[]) => void): this;
327
328        prependListener(event: "close", listener: () => void): this;
329        prependListener(event: "error", listener: (err: Error) => void): this;
330        prependListener(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
331        prependListener(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
332        prependListener(event: "localSettings", listener: (settings: Settings) => void): this;
333        prependListener(event: "ping", listener: () => void): this;
334        prependListener(event: "remoteSettings", listener: (settings: Settings) => void): this;
335        prependListener(event: "timeout", listener: () => void): this;
336        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
337
338        prependOnceListener(event: "close", listener: () => void): this;
339        prependOnceListener(event: "error", listener: (err: Error) => void): this;
340        prependOnceListener(event: "frameError", listener: (frameType: number, errorCode: number, streamID: number) => void): this;
341        prependOnceListener(event: "goaway", listener: (errorCode: number, lastStreamID: number, opaqueData: Buffer) => void): this;
342        prependOnceListener(event: "localSettings", listener: (settings: Settings) => void): this;
343        prependOnceListener(event: "ping", listener: () => void): this;
344        prependOnceListener(event: "remoteSettings", listener: (settings: Settings) => void): this;
345        prependOnceListener(event: "timeout", listener: () => void): this;
346        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
347    }
348
349    export interface ClientHttp2Session extends Http2Session {
350        request(headers?: OutgoingHttpHeaders, options?: ClientSessionRequestOptions): ClientHttp2Stream;
351
352        addListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
353        addListener(event: "origin", listener: (origins: string[]) => void): this;
354        addListener(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
355        addListener(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
356        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
357
358        emit(event: "altsvc", alt: string, origin: string, stream: number): boolean;
359        emit(event: "origin", origins: string[]): boolean;
360        emit(event: "connect", session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket): boolean;
361        emit(event: "stream", stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number): boolean;
362        emit(event: string | symbol, ...args: any[]): boolean;
363
364        on(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
365        on(event: "origin", listener: (origins: string[]) => void): this;
366        on(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
367        on(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
368        on(event: string | symbol, listener: (...args: any[]) => void): this;
369
370        once(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
371        once(event: "origin", listener: (origins: string[]) => void): this;
372        once(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
373        once(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
374        once(event: string | symbol, listener: (...args: any[]) => void): this;
375
376        prependListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
377        prependListener(event: "origin", listener: (origins: string[]) => void): this;
378        prependListener(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
379        prependListener(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
380        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
381
382        prependOnceListener(event: "altsvc", listener: (alt: string, origin: string, stream: number) => void): this;
383        prependOnceListener(event: "origin", listener: (origins: string[]) => void): this;
384        prependOnceListener(event: "connect", listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
385        prependOnceListener(event: "stream", listener: (stream: ClientHttp2Stream, headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number) => void): this;
386        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
387    }
388
389    export interface AlternativeServiceOptions {
390        origin: number | string | url.URL;
391    }
392
393    export interface ServerHttp2Session extends Http2Session {
394        readonly server: Http2Server | Http2SecureServer;
395
396        altsvc(alt: string, originOrStream: number | string | url.URL | AlternativeServiceOptions): void;
397        origin(...args: Array<string | url.URL | { origin: string }>): void;
398
399        addListener(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
400        addListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
401        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
402
403        emit(event: "connect", session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket): boolean;
404        emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean;
405        emit(event: string | symbol, ...args: any[]): boolean;
406
407        on(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
408        on(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
409        on(event: string | symbol, listener: (...args: any[]) => void): this;
410
411        once(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
412        once(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
413        once(event: string | symbol, listener: (...args: any[]) => void): this;
414
415        prependListener(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
416        prependListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
417        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
418
419        prependOnceListener(event: "connect", listener: (session: ServerHttp2Session, socket: net.Socket | tls.TLSSocket) => void): this;
420        prependOnceListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
421        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
422    }
423
424    // Http2Server
425
426    export interface SessionOptions {
427        maxDeflateDynamicTableSize?: number;
428        maxSessionMemory?: number;
429        maxHeaderListPairs?: number;
430        maxOutstandingPings?: number;
431        maxSendHeaderBlockLength?: number;
432        paddingStrategy?: number;
433        peerMaxConcurrentStreams?: number;
434        settings?: Settings;
435
436        selectPadding?(frameLen: number, maxFrameLen: number): number;
437        createConnection?(authority: url.URL, option: SessionOptions): stream.Duplex;
438    }
439
440    export interface ClientSessionOptions extends SessionOptions {
441        maxReservedRemoteStreams?: number;
442        createConnection?: (authority: url.URL, option: SessionOptions) => stream.Duplex;
443    }
444
445    export interface ServerSessionOptions extends SessionOptions {
446        Http1IncomingMessage?: typeof IncomingMessage;
447        Http1ServerResponse?: typeof ServerResponse;
448        Http2ServerRequest?: typeof Http2ServerRequest;
449        Http2ServerResponse?: typeof Http2ServerResponse;
450    }
451
452    export interface SecureClientSessionOptions extends ClientSessionOptions, tls.ConnectionOptions { }
453    export interface SecureServerSessionOptions extends ServerSessionOptions, tls.TlsOptions { }
454
455    export interface ServerOptions extends ServerSessionOptions { }
456
457    export interface SecureServerOptions extends SecureServerSessionOptions {
458        allowHTTP1?: boolean;
459        origins?: string[];
460    }
461
462    export interface Http2Server extends net.Server {
463        addListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
464        addListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
465        addListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
466        addListener(event: "sessionError", listener: (err: Error) => void): this;
467        addListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
468        addListener(event: "timeout", listener: () => void): this;
469        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
470
471        emit(event: "checkContinue", request: Http2ServerRequest, response: Http2ServerResponse): boolean;
472        emit(event: "request", request: Http2ServerRequest, response: Http2ServerResponse): boolean;
473        emit(event: "session", session: ServerHttp2Session): boolean;
474        emit(event: "sessionError", err: Error): boolean;
475        emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean;
476        emit(event: "timeout"): boolean;
477        emit(event: string | symbol, ...args: any[]): boolean;
478
479        on(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
480        on(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
481        on(event: "session", listener: (session: ServerHttp2Session) => void): this;
482        on(event: "sessionError", listener: (err: Error) => void): this;
483        on(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
484        on(event: "timeout", listener: () => void): this;
485        on(event: string | symbol, listener: (...args: any[]) => void): this;
486
487        once(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
488        once(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
489        once(event: "session", listener: (session: ServerHttp2Session) => void): this;
490        once(event: "sessionError", listener: (err: Error) => void): this;
491        once(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
492        once(event: "timeout", listener: () => void): this;
493        once(event: string | symbol, listener: (...args: any[]) => void): this;
494
495        prependListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
496        prependListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
497        prependListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
498        prependListener(event: "sessionError", listener: (err: Error) => void): this;
499        prependListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
500        prependListener(event: "timeout", listener: () => void): this;
501        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
502
503        prependOnceListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
504        prependOnceListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
505        prependOnceListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
506        prependOnceListener(event: "sessionError", listener: (err: Error) => void): this;
507        prependOnceListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
508        prependOnceListener(event: "timeout", listener: () => void): this;
509        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
510
511        setTimeout(msec?: number, callback?: () => void): this;
512    }
513
514    export interface Http2SecureServer extends tls.Server {
515        addListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
516        addListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
517        addListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
518        addListener(event: "sessionError", listener: (err: Error) => void): this;
519        addListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
520        addListener(event: "timeout", listener: () => void): this;
521        addListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
522        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
523
524        emit(event: "checkContinue", request: Http2ServerRequest, response: Http2ServerResponse): boolean;
525        emit(event: "request", request: Http2ServerRequest, response: Http2ServerResponse): boolean;
526        emit(event: "session", session: ServerHttp2Session): boolean;
527        emit(event: "sessionError", err: Error): boolean;
528        emit(event: "stream", stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number): boolean;
529        emit(event: "timeout"): boolean;
530        emit(event: "unknownProtocol", socket: tls.TLSSocket): boolean;
531        emit(event: string | symbol, ...args: any[]): boolean;
532
533        on(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
534        on(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
535        on(event: "session", listener: (session: ServerHttp2Session) => void): this;
536        on(event: "sessionError", listener: (err: Error) => void): this;
537        on(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
538        on(event: "timeout", listener: () => void): this;
539        on(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
540        on(event: string | symbol, listener: (...args: any[]) => void): this;
541
542        once(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
543        once(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
544        once(event: "session", listener: (session: ServerHttp2Session) => void): this;
545        once(event: "sessionError", listener: (err: Error) => void): this;
546        once(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
547        once(event: "timeout", listener: () => void): this;
548        once(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
549        once(event: string | symbol, listener: (...args: any[]) => void): this;
550
551        prependListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
552        prependListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
553        prependListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
554        prependListener(event: "sessionError", listener: (err: Error) => void): this;
555        prependListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
556        prependListener(event: "timeout", listener: () => void): this;
557        prependListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
558        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
559
560        prependOnceListener(event: "checkContinue", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
561        prependOnceListener(event: "request", listener: (request: Http2ServerRequest, response: Http2ServerResponse) => void): this;
562        prependOnceListener(event: "session", listener: (session: ServerHttp2Session) => void): this;
563        prependOnceListener(event: "sessionError", listener: (err: Error) => void): this;
564        prependOnceListener(event: "stream", listener: (stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number) => void): this;
565        prependOnceListener(event: "timeout", listener: () => void): this;
566        prependOnceListener(event: "unknownProtocol", listener: (socket: tls.TLSSocket) => void): this;
567        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
568
569        setTimeout(msec?: number, callback?: () => void): this;
570    }
571
572    export class Http2ServerRequest extends stream.Readable {
573        constructor(stream: ServerHttp2Stream, headers: IncomingHttpHeaders, options: stream.ReadableOptions, rawHeaders: string[]);
574
575        readonly aborted: boolean;
576        readonly authority: string;
577        readonly headers: IncomingHttpHeaders;
578        readonly httpVersion: string;
579        readonly method: string;
580        readonly rawHeaders: string[];
581        readonly rawTrailers: string[];
582        readonly scheme: string;
583        readonly socket: net.Socket | tls.TLSSocket;
584        readonly stream: ServerHttp2Stream;
585        readonly trailers: IncomingHttpHeaders;
586        readonly url: string;
587
588        setTimeout(msecs: number, callback?: () => void): void;
589        read(size?: number): Buffer | string | null;
590
591        addListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
592        addListener(event: "close", listener: () => void): this;
593        addListener(event: "data", listener: (chunk: Buffer | string) => void): this;
594        addListener(event: "end", listener: () => void): this;
595        addListener(event: "readable", listener: () => void): this;
596        addListener(event: "error", listener: (err: Error) => void): this;
597        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
598
599        emit(event: "aborted", hadError: boolean, code: number): boolean;
600        emit(event: "close"): boolean;
601        emit(event: "data", chunk: Buffer | string): boolean;
602        emit(event: "end"): boolean;
603        emit(event: "readable"): boolean;
604        emit(event: "error", err: Error): boolean;
605        emit(event: string | symbol, ...args: any[]): boolean;
606
607        on(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
608        on(event: "close", listener: () => void): this;
609        on(event: "data", listener: (chunk: Buffer | string) => void): this;
610        on(event: "end", listener: () => void): this;
611        on(event: "readable", listener: () => void): this;
612        on(event: "error", listener: (err: Error) => void): this;
613        on(event: string | symbol, listener: (...args: any[]) => void): this;
614
615        once(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
616        once(event: "close", listener: () => void): this;
617        once(event: "data", listener: (chunk: Buffer | string) => void): this;
618        once(event: "end", listener: () => void): this;
619        once(event: "readable", listener: () => void): this;
620        once(event: "error", listener: (err: Error) => void): this;
621        once(event: string | symbol, listener: (...args: any[]) => void): this;
622
623        prependListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
624        prependListener(event: "close", listener: () => void): this;
625        prependListener(event: "data", listener: (chunk: Buffer | string) => void): this;
626        prependListener(event: "end", listener: () => void): this;
627        prependListener(event: "readable", listener: () => void): this;
628        prependListener(event: "error", listener: (err: Error) => void): this;
629        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
630
631        prependOnceListener(event: "aborted", listener: (hadError: boolean, code: number) => void): this;
632        prependOnceListener(event: "close", listener: () => void): this;
633        prependOnceListener(event: "data", listener: (chunk: Buffer | string) => void): this;
634        prependOnceListener(event: "end", listener: () => void): this;
635        prependOnceListener(event: "readable", listener: () => void): this;
636        prependOnceListener(event: "error", listener: (err: Error) => void): this;
637        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
638    }
639
640    export class Http2ServerResponse extends stream.Stream {
641        constructor(stream: ServerHttp2Stream);
642
643        readonly connection: net.Socket | tls.TLSSocket;
644        readonly finished: boolean;
645        readonly headersSent: boolean;
646        readonly socket: net.Socket | tls.TLSSocket;
647        readonly stream: ServerHttp2Stream;
648        sendDate: boolean;
649        statusCode: number;
650        statusMessage: '';
651        addTrailers(trailers: OutgoingHttpHeaders): void;
652        end(callback?: () => void): void;
653        end(data: string | Uint8Array, callback?: () => void): void;
654        end(data: string | Uint8Array, encoding: string, callback?: () => void): void;
655        getHeader(name: string): string;
656        getHeaderNames(): string[];
657        getHeaders(): OutgoingHttpHeaders;
658        hasHeader(name: string): boolean;
659        removeHeader(name: string): void;
660        setHeader(name: string, value: number | string | string[]): void;
661        setTimeout(msecs: number, callback?: () => void): void;
662        write(chunk: string | Uint8Array, callback?: (err: Error) => void): boolean;
663        write(chunk: string | Uint8Array, encoding: string, callback?: (err: Error) => void): boolean;
664        writeContinue(): void;
665        writeHead(statusCode: number, headers?: OutgoingHttpHeaders): this;
666        writeHead(statusCode: number, statusMessage: string, headers?: OutgoingHttpHeaders): this;
667        createPushResponse(headers: OutgoingHttpHeaders, callback: (err: Error | null, res: Http2ServerResponse) => void): void;
668
669        addListener(event: "close", listener: () => void): this;
670        addListener(event: "drain", listener: () => void): this;
671        addListener(event: "error", listener: (error: Error) => void): this;
672        addListener(event: "finish", listener: () => void): this;
673        addListener(event: "pipe", listener: (src: stream.Readable) => void): this;
674        addListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
675        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
676
677        emit(event: "close"): boolean;
678        emit(event: "drain"): boolean;
679        emit(event: "error", error: Error): boolean;
680        emit(event: "finish"): boolean;
681        emit(event: "pipe", src: stream.Readable): boolean;
682        emit(event: "unpipe", src: stream.Readable): boolean;
683        emit(event: string | symbol, ...args: any[]): boolean;
684
685        on(event: "close", listener: () => void): this;
686        on(event: "drain", listener: () => void): this;
687        on(event: "error", listener: (error: Error) => void): this;
688        on(event: "finish", listener: () => void): this;
689        on(event: "pipe", listener: (src: stream.Readable) => void): this;
690        on(event: "unpipe", listener: (src: stream.Readable) => void): this;
691        on(event: string | symbol, listener: (...args: any[]) => void): this;
692
693        once(event: "close", listener: () => void): this;
694        once(event: "drain", listener: () => void): this;
695        once(event: "error", listener: (error: Error) => void): this;
696        once(event: "finish", listener: () => void): this;
697        once(event: "pipe", listener: (src: stream.Readable) => void): this;
698        once(event: "unpipe", listener: (src: stream.Readable) => void): this;
699        once(event: string | symbol, listener: (...args: any[]) => void): this;
700
701        prependListener(event: "close", listener: () => void): this;
702        prependListener(event: "drain", listener: () => void): this;
703        prependListener(event: "error", listener: (error: Error) => void): this;
704        prependListener(event: "finish", listener: () => void): this;
705        prependListener(event: "pipe", listener: (src: stream.Readable) => void): this;
706        prependListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
707        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
708
709        prependOnceListener(event: "close", listener: () => void): this;
710        prependOnceListener(event: "drain", listener: () => void): this;
711        prependOnceListener(event: "error", listener: (error: Error) => void): this;
712        prependOnceListener(event: "finish", listener: () => void): this;
713        prependOnceListener(event: "pipe", listener: (src: stream.Readable) => void): this;
714        prependOnceListener(event: "unpipe", listener: (src: stream.Readable) => void): this;
715        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
716    }
717
718    // Public API
719
720    export namespace constants {
721        const NGHTTP2_SESSION_SERVER: number;
722        const NGHTTP2_SESSION_CLIENT: number;
723        const NGHTTP2_STREAM_STATE_IDLE: number;
724        const NGHTTP2_STREAM_STATE_OPEN: number;
725        const NGHTTP2_STREAM_STATE_RESERVED_LOCAL: number;
726        const NGHTTP2_STREAM_STATE_RESERVED_REMOTE: number;
727        const NGHTTP2_STREAM_STATE_HALF_CLOSED_LOCAL: number;
728        const NGHTTP2_STREAM_STATE_HALF_CLOSED_REMOTE: number;
729        const NGHTTP2_STREAM_STATE_CLOSED: number;
730        const NGHTTP2_NO_ERROR: number;
731        const NGHTTP2_PROTOCOL_ERROR: number;
732        const NGHTTP2_INTERNAL_ERROR: number;
733        const NGHTTP2_FLOW_CONTROL_ERROR: number;
734        const NGHTTP2_SETTINGS_TIMEOUT: number;
735        const NGHTTP2_STREAM_CLOSED: number;
736        const NGHTTP2_FRAME_SIZE_ERROR: number;
737        const NGHTTP2_REFUSED_STREAM: number;
738        const NGHTTP2_CANCEL: number;
739        const NGHTTP2_COMPRESSION_ERROR: number;
740        const NGHTTP2_CONNECT_ERROR: number;
741        const NGHTTP2_ENHANCE_YOUR_CALM: number;
742        const NGHTTP2_INADEQUATE_SECURITY: number;
743        const NGHTTP2_HTTP_1_1_REQUIRED: number;
744        const NGHTTP2_ERR_FRAME_SIZE_ERROR: number;
745        const NGHTTP2_FLAG_NONE: number;
746        const NGHTTP2_FLAG_END_STREAM: number;
747        const NGHTTP2_FLAG_END_HEADERS: number;
748        const NGHTTP2_FLAG_ACK: number;
749        const NGHTTP2_FLAG_PADDED: number;
750        const NGHTTP2_FLAG_PRIORITY: number;
751        const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number;
752        const DEFAULT_SETTINGS_ENABLE_PUSH: number;
753        const DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE: number;
754        const DEFAULT_SETTINGS_MAX_FRAME_SIZE: number;
755        const MAX_MAX_FRAME_SIZE: number;
756        const MIN_MAX_FRAME_SIZE: number;
757        const MAX_INITIAL_WINDOW_SIZE: number;
758        const NGHTTP2_DEFAULT_WEIGHT: number;
759        const NGHTTP2_SETTINGS_HEADER_TABLE_SIZE: number;
760        const NGHTTP2_SETTINGS_ENABLE_PUSH: number;
761        const NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS: number;
762        const NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE: number;
763        const NGHTTP2_SETTINGS_MAX_FRAME_SIZE: number;
764        const NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE: number;
765        const PADDING_STRATEGY_NONE: number;
766        const PADDING_STRATEGY_MAX: number;
767        const PADDING_STRATEGY_CALLBACK: number;
768        const HTTP2_HEADER_STATUS: string;
769        const HTTP2_HEADER_METHOD: string;
770        const HTTP2_HEADER_AUTHORITY: string;
771        const HTTP2_HEADER_SCHEME: string;
772        const HTTP2_HEADER_PATH: string;
773        const HTTP2_HEADER_ACCEPT_CHARSET: string;
774        const HTTP2_HEADER_ACCEPT_ENCODING: string;
775        const HTTP2_HEADER_ACCEPT_LANGUAGE: string;
776        const HTTP2_HEADER_ACCEPT_RANGES: string;
777        const HTTP2_HEADER_ACCEPT: string;
778        const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN: string;
779        const HTTP2_HEADER_AGE: string;
780        const HTTP2_HEADER_ALLOW: string;
781        const HTTP2_HEADER_AUTHORIZATION: string;
782        const HTTP2_HEADER_CACHE_CONTROL: string;
783        const HTTP2_HEADER_CONNECTION: string;
784        const HTTP2_HEADER_CONTENT_DISPOSITION: string;
785        const HTTP2_HEADER_CONTENT_ENCODING: string;
786        const HTTP2_HEADER_CONTENT_LANGUAGE: string;
787        const HTTP2_HEADER_CONTENT_LENGTH: string;
788        const HTTP2_HEADER_CONTENT_LOCATION: string;
789        const HTTP2_HEADER_CONTENT_MD5: string;
790        const HTTP2_HEADER_CONTENT_RANGE: string;
791        const HTTP2_HEADER_CONTENT_TYPE: string;
792        const HTTP2_HEADER_COOKIE: string;
793        const HTTP2_HEADER_DATE: string;
794        const HTTP2_HEADER_ETAG: string;
795        const HTTP2_HEADER_EXPECT: string;
796        const HTTP2_HEADER_EXPIRES: string;
797        const HTTP2_HEADER_FROM: string;
798        const HTTP2_HEADER_HOST: string;
799        const HTTP2_HEADER_IF_MATCH: string;
800        const HTTP2_HEADER_IF_MODIFIED_SINCE: string;
801        const HTTP2_HEADER_IF_NONE_MATCH: string;
802        const HTTP2_HEADER_IF_RANGE: string;
803        const HTTP2_HEADER_IF_UNMODIFIED_SINCE: string;
804        const HTTP2_HEADER_LAST_MODIFIED: string;
805        const HTTP2_HEADER_LINK: string;
806        const HTTP2_HEADER_LOCATION: string;
807        const HTTP2_HEADER_MAX_FORWARDS: string;
808        const HTTP2_HEADER_PREFER: string;
809        const HTTP2_HEADER_PROXY_AUTHENTICATE: string;
810        const HTTP2_HEADER_PROXY_AUTHORIZATION: string;
811        const HTTP2_HEADER_RANGE: string;
812        const HTTP2_HEADER_REFERER: string;
813        const HTTP2_HEADER_REFRESH: string;
814        const HTTP2_HEADER_RETRY_AFTER: string;
815        const HTTP2_HEADER_SERVER: string;
816        const HTTP2_HEADER_SET_COOKIE: string;
817        const HTTP2_HEADER_STRICT_TRANSPORT_SECURITY: string;
818        const HTTP2_HEADER_TRANSFER_ENCODING: string;
819        const HTTP2_HEADER_TE: string;
820        const HTTP2_HEADER_UPGRADE: string;
821        const HTTP2_HEADER_USER_AGENT: string;
822        const HTTP2_HEADER_VARY: string;
823        const HTTP2_HEADER_VIA: string;
824        const HTTP2_HEADER_WWW_AUTHENTICATE: string;
825        const HTTP2_HEADER_HTTP2_SETTINGS: string;
826        const HTTP2_HEADER_KEEP_ALIVE: string;
827        const HTTP2_HEADER_PROXY_CONNECTION: string;
828        const HTTP2_METHOD_ACL: string;
829        const HTTP2_METHOD_BASELINE_CONTROL: string;
830        const HTTP2_METHOD_BIND: string;
831        const HTTP2_METHOD_CHECKIN: string;
832        const HTTP2_METHOD_CHECKOUT: string;
833        const HTTP2_METHOD_CONNECT: string;
834        const HTTP2_METHOD_COPY: string;
835        const HTTP2_METHOD_DELETE: string;
836        const HTTP2_METHOD_GET: string;
837        const HTTP2_METHOD_HEAD: string;
838        const HTTP2_METHOD_LABEL: string;
839        const HTTP2_METHOD_LINK: string;
840        const HTTP2_METHOD_LOCK: string;
841        const HTTP2_METHOD_MERGE: string;
842        const HTTP2_METHOD_MKACTIVITY: string;
843        const HTTP2_METHOD_MKCALENDAR: string;
844        const HTTP2_METHOD_MKCOL: string;
845        const HTTP2_METHOD_MKREDIRECTREF: string;
846        const HTTP2_METHOD_MKWORKSPACE: string;
847        const HTTP2_METHOD_MOVE: string;
848        const HTTP2_METHOD_OPTIONS: string;
849        const HTTP2_METHOD_ORDERPATCH: string;
850        const HTTP2_METHOD_PATCH: string;
851        const HTTP2_METHOD_POST: string;
852        const HTTP2_METHOD_PRI: string;
853        const HTTP2_METHOD_PROPFIND: string;
854        const HTTP2_METHOD_PROPPATCH: string;
855        const HTTP2_METHOD_PUT: string;
856        const HTTP2_METHOD_REBIND: string;
857        const HTTP2_METHOD_REPORT: string;
858        const HTTP2_METHOD_SEARCH: string;
859        const HTTP2_METHOD_TRACE: string;
860        const HTTP2_METHOD_UNBIND: string;
861        const HTTP2_METHOD_UNCHECKOUT: string;
862        const HTTP2_METHOD_UNLINK: string;
863        const HTTP2_METHOD_UNLOCK: string;
864        const HTTP2_METHOD_UPDATE: string;
865        const HTTP2_METHOD_UPDATEREDIRECTREF: string;
866        const HTTP2_METHOD_VERSION_CONTROL: string;
867        const HTTP_STATUS_CONTINUE: number;
868        const HTTP_STATUS_SWITCHING_PROTOCOLS: number;
869        const HTTP_STATUS_PROCESSING: number;
870        const HTTP_STATUS_OK: number;
871        const HTTP_STATUS_CREATED: number;
872        const HTTP_STATUS_ACCEPTED: number;
873        const HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION: number;
874        const HTTP_STATUS_NO_CONTENT: number;
875        const HTTP_STATUS_RESET_CONTENT: number;
876        const HTTP_STATUS_PARTIAL_CONTENT: number;
877        const HTTP_STATUS_MULTI_STATUS: number;
878        const HTTP_STATUS_ALREADY_REPORTED: number;
879        const HTTP_STATUS_IM_USED: number;
880        const HTTP_STATUS_MULTIPLE_CHOICES: number;
881        const HTTP_STATUS_MOVED_PERMANENTLY: number;
882        const HTTP_STATUS_FOUND: number;
883        const HTTP_STATUS_SEE_OTHER: number;
884        const HTTP_STATUS_NOT_MODIFIED: number;
885        const HTTP_STATUS_USE_PROXY: number;
886        const HTTP_STATUS_TEMPORARY_REDIRECT: number;
887        const HTTP_STATUS_PERMANENT_REDIRECT: number;
888        const HTTP_STATUS_BAD_REQUEST: number;
889        const HTTP_STATUS_UNAUTHORIZED: number;
890        const HTTP_STATUS_PAYMENT_REQUIRED: number;
891        const HTTP_STATUS_FORBIDDEN: number;
892        const HTTP_STATUS_NOT_FOUND: number;
893        const HTTP_STATUS_METHOD_NOT_ALLOWED: number;
894        const HTTP_STATUS_NOT_ACCEPTABLE: number;
895        const HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED: number;
896        const HTTP_STATUS_REQUEST_TIMEOUT: number;
897        const HTTP_STATUS_CONFLICT: number;
898        const HTTP_STATUS_GONE: number;
899        const HTTP_STATUS_LENGTH_REQUIRED: number;
900        const HTTP_STATUS_PRECONDITION_FAILED: number;
901        const HTTP_STATUS_PAYLOAD_TOO_LARGE: number;
902        const HTTP_STATUS_URI_TOO_LONG: number;
903        const HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE: number;
904        const HTTP_STATUS_RANGE_NOT_SATISFIABLE: number;
905        const HTTP_STATUS_EXPECTATION_FAILED: number;
906        const HTTP_STATUS_TEAPOT: number;
907        const HTTP_STATUS_MISDIRECTED_REQUEST: number;
908        const HTTP_STATUS_UNPROCESSABLE_ENTITY: number;
909        const HTTP_STATUS_LOCKED: number;
910        const HTTP_STATUS_FAILED_DEPENDENCY: number;
911        const HTTP_STATUS_UNORDERED_COLLECTION: number;
912        const HTTP_STATUS_UPGRADE_REQUIRED: number;
913        const HTTP_STATUS_PRECONDITION_REQUIRED: number;
914        const HTTP_STATUS_TOO_MANY_REQUESTS: number;
915        const HTTP_STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE: number;
916        const HTTP_STATUS_UNAVAILABLE_FOR_LEGAL_REASONS: number;
917        const HTTP_STATUS_INTERNAL_SERVER_ERROR: number;
918        const HTTP_STATUS_NOT_IMPLEMENTED: number;
919        const HTTP_STATUS_BAD_GATEWAY: number;
920        const HTTP_STATUS_SERVICE_UNAVAILABLE: number;
921        const HTTP_STATUS_GATEWAY_TIMEOUT: number;
922        const HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED: number;
923        const HTTP_STATUS_VARIANT_ALSO_NEGOTIATES: number;
924        const HTTP_STATUS_INSUFFICIENT_STORAGE: number;
925        const HTTP_STATUS_LOOP_DETECTED: number;
926        const HTTP_STATUS_BANDWIDTH_LIMIT_EXCEEDED: number;
927        const HTTP_STATUS_NOT_EXTENDED: number;
928        const HTTP_STATUS_NETWORK_AUTHENTICATION_REQUIRED: number;
929    }
930
931    export function getDefaultSettings(): Settings;
932    export function getPackedSettings(settings: Settings): Buffer;
933    export function getUnpackedSettings(buf: Uint8Array): Settings;
934
935    export function createServer(onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2Server;
936    export function createServer(options: ServerOptions, onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2Server;
937
938    export function createSecureServer(onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2SecureServer;
939    export function createSecureServer(options: SecureServerOptions, onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void): Http2SecureServer;
940
941    export function connect(authority: string | url.URL, listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void): ClientHttp2Session;
942    export function connect(
943        authority: string | url.URL,
944        options?: ClientSessionOptions | SecureClientSessionOptions,
945        listener?: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void
946    ): ClientHttp2Session;
947}
948