Projekt

Obecné

Profil

Stáhnout (17.3 KB) Statistiky
| Větev: | Revize:
1
declare module "http" {
2
    import * as events from "events";
3
    import * as stream from "stream";
4
    import { URL } from "url";
5
    import { Socket, Server as NetServer } from "net";
6

    
7
    // incoming headers will never contain number
8
    interface IncomingHttpHeaders {
9
        'accept'?: string;
10
        'accept-language'?: string;
11
        'accept-patch'?: string;
12
        'accept-ranges'?: string;
13
        'access-control-allow-credentials'?: string;
14
        'access-control-allow-headers'?: string;
15
        'access-control-allow-methods'?: string;
16
        'access-control-allow-origin'?: string;
17
        'access-control-expose-headers'?: string;
18
        'access-control-max-age'?: string;
19
        'age'?: string;
20
        'allow'?: string;
21
        'alt-svc'?: string;
22
        'authorization'?: string;
23
        'cache-control'?: string;
24
        'connection'?: string;
25
        'content-disposition'?: string;
26
        'content-encoding'?: string;
27
        'content-language'?: string;
28
        'content-length'?: string;
29
        'content-location'?: string;
30
        'content-range'?: string;
31
        'content-type'?: string;
32
        'cookie'?: string;
33
        'date'?: string;
34
        'expect'?: string;
35
        'expires'?: string;
36
        'forwarded'?: string;
37
        'from'?: string;
38
        'host'?: string;
39
        'if-match'?: string;
40
        'if-modified-since'?: string;
41
        'if-none-match'?: string;
42
        'if-unmodified-since'?: string;
43
        'last-modified'?: string;
44
        'location'?: string;
45
        'pragma'?: string;
46
        'proxy-authenticate'?: string;
47
        'proxy-authorization'?: string;
48
        'public-key-pins'?: string;
49
        'range'?: string;
50
        'referer'?: string;
51
        'retry-after'?: string;
52
        'set-cookie'?: string[];
53
        'strict-transport-security'?: string;
54
        'tk'?: string;
55
        'trailer'?: string;
56
        'transfer-encoding'?: string;
57
        'upgrade'?: string;
58
        'user-agent'?: string;
59
        'vary'?: string;
60
        'via'?: string;
61
        'warning'?: string;
62
        'www-authenticate'?: string;
63
        [header: string]: string | string[] | undefined;
64
    }
65

    
66
    // outgoing headers allows numbers (as they are converted internally to strings)
67
    interface OutgoingHttpHeaders {
68
        [header: string]: number | string | string[] | undefined;
69
    }
70

    
71
    interface ClientRequestArgs {
72
        protocol?: string | null;
73
        host?: string | null;
74
        hostname?: string | null;
75
        family?: number;
76
        port?: number | string | null;
77
        defaultPort?: number | string;
78
        localAddress?: string;
79
        socketPath?: string;
80
        /**
81
         * @default 8192
82
         */
83
        maxHeaderSize?: number;
84
        method?: string;
85
        path?: string | null;
86
        headers?: OutgoingHttpHeaders;
87
        auth?: string | null;
88
        agent?: Agent | boolean;
89
        _defaultAgent?: Agent;
90
        timeout?: number;
91
        setHost?: boolean;
92
        // https://github.com/nodejs/node/blob/master/lib/_http_client.js#L278
93
        createConnection?: (options: ClientRequestArgs, oncreate: (err: Error, socket: Socket) => void) => Socket;
94
    }
95

    
96
    interface ServerOptions {
97
        IncomingMessage?: typeof IncomingMessage;
98
        ServerResponse?: typeof ServerResponse;
99
        /**
100
         * Optionally overrides the value of
101
         * [`--max-http-header-size`][] for requests received by this server, i.e.
102
         * the maximum length of request headers in bytes.
103
         * @default 8192
104
         */
105
        maxHeaderSize?: number;
106
        /**
107
         * Use an insecure HTTP parser that accepts invalid HTTP headers when true.
108
         * Using the insecure parser should be avoided.
109
         * See --insecure-http-parser for more information.
110
         * @default false
111
         */
112
        insecureHTTPParser?: boolean;
113
    }
114

    
115
    type RequestListener = (req: IncomingMessage, res: ServerResponse) => void;
116

    
117
    interface HttpBase {
118
        setTimeout(msecs?: number, callback?: () => void): this;
119
        setTimeout(callback: () => void): this;
120
        /**
121
         * Limits maximum incoming headers count. If set to 0, no limit will be applied.
122
         * @default 2000
123
         * {@link https://nodejs.org/api/http.html#http_server_maxheaderscount}
124
         */
125
        maxHeadersCount: number | null;
126
        timeout: number;
127
        /**
128
         * Limit the amount of time the parser will wait to receive the complete HTTP headers.
129
         * @default 60000
130
         * {@link https://nodejs.org/api/http.html#http_server_headerstimeout}
131
         */
132
        headersTimeout: number;
133
        keepAliveTimeout: number;
134
    }
135

    
136
    interface Server extends HttpBase {}
137
    class Server extends NetServer {
138
        constructor(requestListener?: RequestListener);
139
        constructor(options: ServerOptions, requestListener?: RequestListener);
140
    }
141

    
142
    // https://github.com/nodejs/node/blob/master/lib/_http_outgoing.js
143
    class OutgoingMessage extends stream.Writable {
144
        upgrading: boolean;
145
        chunkedEncoding: boolean;
146
        shouldKeepAlive: boolean;
147
        useChunkedEncodingByDefault: boolean;
148
        sendDate: boolean;
149
        /**
150
         * @deprecated Use `writableEnded` instead.
151
         */
152
        finished: boolean;
153
        headersSent: boolean;
154
        /**
155
         * @deprecate Use `socket` instead.
156
         */
157
        connection: Socket;
158
        socket: Socket;
159

    
160
        constructor();
161

    
162
        setTimeout(msecs: number, callback?: () => void): this;
163
        setHeader(name: string, value: number | string | string[]): void;
164
        getHeader(name: string): number | string | string[] | undefined;
165
        getHeaders(): OutgoingHttpHeaders;
166
        getHeaderNames(): string[];
167
        hasHeader(name: string): boolean;
168
        removeHeader(name: string): void;
169
        addTrailers(headers: OutgoingHttpHeaders | Array<[string, string]>): void;
170
        flushHeaders(): void;
171
    }
172

    
173
    // https://github.com/nodejs/node/blob/master/lib/_http_server.js#L108-L256
174
    class ServerResponse extends OutgoingMessage {
175
        statusCode: number;
176
        statusMessage: string;
177

    
178
        constructor(req: IncomingMessage);
179

    
180
        assignSocket(socket: Socket): void;
181
        detachSocket(socket: Socket): void;
182
        // https://github.com/nodejs/node/blob/master/test/parallel/test-http-write-callbacks.js#L53
183
        // no args in writeContinue callback
184
        writeContinue(callback?: () => void): void;
185
        writeHead(statusCode: number, reasonPhrase?: string, headers?: OutgoingHttpHeaders): this;
186
        writeHead(statusCode: number, headers?: OutgoingHttpHeaders): this;
187
        writeProcessing(): void;
188
    }
189

    
190
    interface InformationEvent {
191
        statusCode: number;
192
        statusMessage: string;
193
        httpVersion: string;
194
        httpVersionMajor: number;
195
        httpVersionMinor: number;
196
        headers: IncomingHttpHeaders;
197
        rawHeaders: string[];
198
    }
199

    
200
    // https://github.com/nodejs/node/blob/master/lib/_http_client.js#L77
201
    class ClientRequest extends OutgoingMessage {
202
        connection: Socket;
203
        socket: Socket;
204
        aborted: number;
205

    
206
        constructor(url: string | URL | ClientRequestArgs, cb?: (res: IncomingMessage) => void);
207

    
208
        method: string;
209
        path: string;
210
        abort(): void;
211
        onSocket(socket: Socket): void;
212
        setTimeout(timeout: number, callback?: () => void): this;
213
        setNoDelay(noDelay?: boolean): void;
214
        setSocketKeepAlive(enable?: boolean, initialDelay?: number): void;
215

    
216
        addListener(event: 'abort', listener: () => void): this;
217
        addListener(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
218
        addListener(event: 'continue', listener: () => void): this;
219
        addListener(event: 'information', listener: (info: InformationEvent) => void): this;
220
        addListener(event: 'response', listener: (response: IncomingMessage) => void): this;
221
        addListener(event: 'socket', listener: (socket: Socket) => void): this;
222
        addListener(event: 'timeout', listener: () => void): this;
223
        addListener(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
224
        addListener(event: 'close', listener: () => void): this;
225
        addListener(event: 'drain', listener: () => void): this;
226
        addListener(event: 'error', listener: (err: Error) => void): this;
227
        addListener(event: 'finish', listener: () => void): this;
228
        addListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
229
        addListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
230
        addListener(event: string | symbol, listener: (...args: any[]) => void): this;
231

    
232
        on(event: 'abort', listener: () => void): this;
233
        on(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
234
        on(event: 'continue', listener: () => void): this;
235
        on(event: 'information', listener: (info: InformationEvent) => void): this;
236
        on(event: 'response', listener: (response: IncomingMessage) => void): this;
237
        on(event: 'socket', listener: (socket: Socket) => void): this;
238
        on(event: 'timeout', listener: () => void): this;
239
        on(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
240
        on(event: 'close', listener: () => void): this;
241
        on(event: 'drain', listener: () => void): this;
242
        on(event: 'error', listener: (err: Error) => void): this;
243
        on(event: 'finish', listener: () => void): this;
244
        on(event: 'pipe', listener: (src: stream.Readable) => void): this;
245
        on(event: 'unpipe', listener: (src: stream.Readable) => void): this;
246
        on(event: string | symbol, listener: (...args: any[]) => void): this;
247

    
248
        once(event: 'abort', listener: () => void): this;
249
        once(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
250
        once(event: 'continue', listener: () => void): this;
251
        once(event: 'information', listener: (info: InformationEvent) => void): this;
252
        once(event: 'response', listener: (response: IncomingMessage) => void): this;
253
        once(event: 'socket', listener: (socket: Socket) => void): this;
254
        once(event: 'timeout', listener: () => void): this;
255
        once(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
256
        once(event: 'close', listener: () => void): this;
257
        once(event: 'drain', listener: () => void): this;
258
        once(event: 'error', listener: (err: Error) => void): this;
259
        once(event: 'finish', listener: () => void): this;
260
        once(event: 'pipe', listener: (src: stream.Readable) => void): this;
261
        once(event: 'unpipe', listener: (src: stream.Readable) => void): this;
262
        once(event: string | symbol, listener: (...args: any[]) => void): this;
263

    
264
        prependListener(event: 'abort', listener: () => void): this;
265
        prependListener(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
266
        prependListener(event: 'continue', listener: () => void): this;
267
        prependListener(event: 'information', listener: (info: InformationEvent) => void): this;
268
        prependListener(event: 'response', listener: (response: IncomingMessage) => void): this;
269
        prependListener(event: 'socket', listener: (socket: Socket) => void): this;
270
        prependListener(event: 'timeout', listener: () => void): this;
271
        prependListener(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
272
        prependListener(event: 'close', listener: () => void): this;
273
        prependListener(event: 'drain', listener: () => void): this;
274
        prependListener(event: 'error', listener: (err: Error) => void): this;
275
        prependListener(event: 'finish', listener: () => void): this;
276
        prependListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
277
        prependListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
278
        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
279

    
280
        prependOnceListener(event: 'abort', listener: () => void): this;
281
        prependOnceListener(event: 'connect', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
282
        prependOnceListener(event: 'continue', listener: () => void): this;
283
        prependOnceListener(event: 'information', listener: (info: InformationEvent) => void): this;
284
        prependOnceListener(event: 'response', listener: (response: IncomingMessage) => void): this;
285
        prependOnceListener(event: 'socket', listener: (socket: Socket) => void): this;
286
        prependOnceListener(event: 'timeout', listener: () => void): this;
287
        prependOnceListener(event: 'upgrade', listener: (response: IncomingMessage, socket: Socket, head: Buffer) => void): this;
288
        prependOnceListener(event: 'close', listener: () => void): this;
289
        prependOnceListener(event: 'drain', listener: () => void): this;
290
        prependOnceListener(event: 'error', listener: (err: Error) => void): this;
291
        prependOnceListener(event: 'finish', listener: () => void): this;
292
        prependOnceListener(event: 'pipe', listener: (src: stream.Readable) => void): this;
293
        prependOnceListener(event: 'unpipe', listener: (src: stream.Readable) => void): this;
294
        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
295
    }
296

    
297
    class IncomingMessage extends stream.Readable {
298
        constructor(socket: Socket);
299

    
300
        aborted: boolean;
301
        httpVersion: string;
302
        httpVersionMajor: number;
303
        httpVersionMinor: number;
304
        complete: boolean;
305
        /**
306
         * @deprecate Use `socket` instead.
307
         */
308
        connection: Socket;
309
        socket: Socket;
310
        headers: IncomingHttpHeaders;
311
        rawHeaders: string[];
312
        trailers: { [key: string]: string | undefined };
313
        rawTrailers: string[];
314
        setTimeout(msecs: number, callback?: () => void): this;
315
        /**
316
         * Only valid for request obtained from http.Server.
317
         */
318
        method?: string;
319
        /**
320
         * Only valid for request obtained from http.Server.
321
         */
322
        url?: string;
323
        /**
324
         * Only valid for response obtained from http.ClientRequest.
325
         */
326
        statusCode?: number;
327
        /**
328
         * Only valid for response obtained from http.ClientRequest.
329
         */
330
        statusMessage?: string;
331
        destroy(error?: Error): void;
332
    }
333

    
334
    interface AgentOptions {
335
        /**
336
         * Keep sockets around in a pool to be used by other requests in the future. Default = false
337
         */
338
        keepAlive?: boolean;
339
        /**
340
         * When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000.
341
         * Only relevant if keepAlive is set to true.
342
         */
343
        keepAliveMsecs?: number;
344
        /**
345
         * Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity
346
         */
347
        maxSockets?: number;
348
        /**
349
         * Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256.
350
         */
351
        maxFreeSockets?: number;
352
        /**
353
         * Socket timeout in milliseconds. This will set the timeout after the socket is connected.
354
         */
355
        timeout?: number;
356
    }
357

    
358
    class Agent {
359
        maxFreeSockets: number;
360
        maxSockets: number;
361
        readonly sockets: {
362
            readonly [key: string]: Socket[];
363
        };
364
        readonly requests: {
365
            readonly [key: string]: IncomingMessage[];
366
        };
367

    
368
        constructor(opts?: AgentOptions);
369

    
370
        /**
371
         * Destroy any sockets that are currently in use by the agent.
372
         * It is usually not necessary to do this. However, if you are using an agent with KeepAlive enabled,
373
         * then it is best to explicitly shut down the agent when you know that it will no longer be used. Otherwise,
374
         * sockets may hang open for quite a long time before the server terminates them.
375
         */
376
        destroy(): void;
377
    }
378

    
379
    const METHODS: string[];
380

    
381
    const STATUS_CODES: {
382
        [errorCode: number]: string | undefined;
383
        [errorCode: string]: string | undefined;
384
    };
385

    
386
    function createServer(requestListener?: RequestListener): Server;
387
    function createServer(options: ServerOptions, requestListener?: RequestListener): Server;
388

    
389
    // although RequestOptions are passed as ClientRequestArgs to ClientRequest directly,
390
    // create interface RequestOptions would make the naming more clear to developers
391
    interface RequestOptions extends ClientRequestArgs { }
392
    function request(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest;
393
    function request(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest;
394
    function get(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest;
395
    function get(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest;
396
    let globalAgent: Agent;
397

    
398
    /**
399
     * Read-only property specifying the maximum allowed size of HTTP headers in bytes.
400
     * Defaults to 8KB. Configurable using the [`--max-http-header-size`][] CLI option.
401
     */
402
    const maxHeaderSize: number;
403
}
(18-18/45)