123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- declare module "http" {
- import * as events from "events";
- import * as stream from "stream";
- import { URL } from "url";
- import { Socket, Server as NetServer } from "net";
-
- // incoming headers will never contain number
- interface IncomingHttpHeaders {
- 'accept'?: string;
- 'accept-language'?: string;
- 'accept-patch'?: string;
- 'accept-ranges'?: string;
- 'access-control-allow-credentials'?: string;
- 'access-control-allow-headers'?: string;
- 'access-control-allow-methods'?: string;
- 'access-control-allow-origin'?: string;
- 'access-control-expose-headers'?: string;
- 'access-control-max-age'?: string;
- 'age'?: string;
- 'allow'?: string;
- 'alt-svc'?: string;
- 'authorization'?: string;
- 'cache-control'?: string;
- 'connection'?: string;
- 'content-disposition'?: string;
- 'content-encoding'?: string;
- 'content-language'?: string;
- 'content-length'?: string;
- 'content-location'?: string;
- 'content-range'?: string;
- 'content-type'?: string;
- 'cookie'?: string;
- 'date'?: string;
- 'expect'?: string;
- 'expires'?: string;
- 'forwarded'?: string;
- 'from'?: string;
- 'host'?: string;
- 'if-match'?: string;
- 'if-modified-since'?: string;
- 'if-none-match'?: string;
- 'if-unmodified-since'?: string;
- 'last-modified'?: string;
- 'location'?: string;
- 'pragma'?: string;
- 'proxy-authenticate'?: string;
- 'proxy-authorization'?: string;
- 'public-key-pins'?: string;
- 'range'?: string;
- 'referer'?: string;
- 'retry-after'?: string;
- 'set-cookie'?: string[];
- 'strict-transport-security'?: string;
- 'tk'?: string;
- 'trailer'?: string;
- 'transfer-encoding'?: string;
- 'upgrade'?: string;
- 'user-agent'?: string;
- 'vary'?: string;
- 'via'?: string;
- 'warning'?: string;
- 'www-authenticate'?: string;
- [header: string]: string | string[] | undefined;
- }
-
- // outgoing headers allows numbers (as they are converted internally to strings)
- interface OutgoingHttpHeaders {
- [header: string]: number | string | string[] | undefined;
- }
-
- interface ClientRequestArgs {
- protocol?: string;
- host?: string;
- hostname?: string;
- family?: number;
- port?: number | string;
- defaultPort?: number | string;
- localAddress?: string;
- socketPath?: string;
- method?: string;
- path?: string;
- headers?: OutgoingHttpHeaders;
- auth?: string;
- agent?: Agent | boolean;
- _defaultAgent?: Agent;
- timeout?: number;
- setHost?: boolean;
- // https://github.com/nodejs/node/blob/master/lib/_http_client.js#L278
- createConnection?: (options: ClientRequestArgs, oncreate: (err: Error, socket: Socket) => void) => Socket;
- }
-
- interface ServerOptions {
- IncomingMessage?: typeof IncomingMessage;
- ServerResponse?: typeof ServerResponse;
- }
-
- type RequestListener = (req: IncomingMessage, res: ServerResponse) => void;
-
- class Server extends NetServer {
- constructor(requestListener?: RequestListener);
- constructor(options: ServerOptions, requestListener?: RequestListener);
-
- setTimeout(msecs?: number, callback?: () => void): this;
- setTimeout(callback: () => void): this;
- /**
- * Limits maximum incoming headers count. If set to 0, no limit will be applied.
- * @default 2000
- * {@link https://nodejs.org/api/http.html#http_server_maxheaderscount}
- */
- maxHeadersCount: number | null;
- timeout: number;
- /**
- * Limit the amount of time the parser will wait to receive the complete HTTP headers.
- * @default 40000
- * {@link https://nodejs.org/api/http.html#http_server_headerstimeout}
- */
- headersTimeout: number;
- keepAliveTimeout: number;
- }
-
- // https://github.com/nodejs/node/blob/master/lib/_http_outgoing.js
- class OutgoingMessage extends stream.Writable {
- upgrading: boolean;
- chunkedEncoding: boolean;
- shouldKeepAlive: boolean;
- useChunkedEncodingByDefault: boolean;
- sendDate: boolean;
- finished: boolean;
- headersSent: boolean;
- connection: Socket;
-
- constructor();
-
- setTimeout(msecs: number, callback?: () => void): this;
- setHeader(name: string, value: number | string | string[]): void;
- getHeader(name: string): number | string | string[] | undefined;
- getHeaders(): OutgoingHttpHeaders;
- getHeaderNames(): string[];
- hasHeader(name: string): boolean;
- removeHeader(name: string): void;
- addTrailers(headers: OutgoingHttpHeaders | Array<[string, string]>): void;
- flushHeaders(): void;
- }
-
- // https://github.com/nodejs/node/blob/master/lib/_http_server.js#L108-L256
- class ServerResponse extends OutgoingMessage {
- statusCode: number;
- statusMessage: string;
-
- constructor(req: IncomingMessage);
-
- assignSocket(socket: Socket): void;
- detachSocket(socket: Socket): void;
- // https://github.com/nodejs/node/blob/master/test/parallel/test-http-write-callbacks.js#L53
- // no args in writeContinue callback
- writeContinue(callback?: () => void): void;
- writeHead(statusCode: number, reasonPhrase?: string, headers?: OutgoingHttpHeaders): this;
- writeHead(statusCode: number, headers?: OutgoingHttpHeaders): this;
- }
-
- // https://github.com/nodejs/node/blob/master/lib/_http_client.js#L77
- class ClientRequest extends OutgoingMessage {
- connection: Socket;
- socket: Socket;
- aborted: number;
-
- constructor(url: string | URL | ClientRequestArgs, cb?: (res: IncomingMessage) => void);
-
- readonly path: string;
- abort(): void;
- onSocket(socket: Socket): void;
- setTimeout(timeout: number, callback?: () => void): this;
- setNoDelay(noDelay?: boolean): void;
- setSocketKeepAlive(enable?: boolean, initialDelay?: number): void;
- }
-
- class IncomingMessage extends stream.Readable {
- constructor(socket: Socket);
-
- httpVersion: string;
- httpVersionMajor: number;
- httpVersionMinor: number;
- complete: boolean;
- connection: Socket;
- headers: IncomingHttpHeaders;
- rawHeaders: string[];
- trailers: { [key: string]: string | undefined };
- rawTrailers: string[];
- setTimeout(msecs: number, callback: () => void): this;
- /**
- * Only valid for request obtained from http.Server.
- */
- method?: string;
- /**
- * Only valid for request obtained from http.Server.
- */
- url?: string;
- /**
- * Only valid for response obtained from http.ClientRequest.
- */
- statusCode?: number;
- /**
- * Only valid for response obtained from http.ClientRequest.
- */
- statusMessage?: string;
- socket: Socket;
- destroy(error?: Error): void;
- }
-
- interface AgentOptions {
- /**
- * Keep sockets around in a pool to be used by other requests in the future. Default = false
- */
- keepAlive?: boolean;
- /**
- * When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000.
- * Only relevant if keepAlive is set to true.
- */
- keepAliveMsecs?: number;
- /**
- * Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity
- */
- maxSockets?: number;
- /**
- * Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256.
- */
- maxFreeSockets?: number;
- /**
- * Socket timeout in milliseconds. This will set the timeout after the socket is connected.
- */
- timeout?: number;
- }
-
- class Agent {
- maxFreeSockets: number;
- maxSockets: number;
- readonly sockets: {
- readonly [key: string]: Socket[];
- };
- readonly requests: {
- readonly [key: string]: IncomingMessage[];
- };
-
- constructor(opts?: AgentOptions);
-
- /**
- * Destroy any sockets that are currently in use by the agent.
- * It is usually not necessary to do this. However, if you are using an agent with KeepAlive enabled,
- * then it is best to explicitly shut down the agent when you know that it will no longer be used. Otherwise,
- * sockets may hang open for quite a long time before the server terminates them.
- */
- destroy(): void;
- }
-
- const METHODS: string[];
-
- const STATUS_CODES: {
- [errorCode: number]: string | undefined;
- [errorCode: string]: string | undefined;
- };
-
- function createServer(requestListener?: RequestListener): Server;
- function createServer(options: ServerOptions, requestListener?: RequestListener): Server;
-
- // although RequestOptions are passed as ClientRequestArgs to ClientRequest directly,
- // create interface RequestOptions would make the naming more clear to developers
- interface RequestOptions extends ClientRequestArgs { }
- function request(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest;
- function request(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest;
- function get(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest;
- function get(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest;
- let globalAgent: Agent;
-
- /**
- * Read-only property specifying the maximum allowed size of HTTP headers in bytes.
- * Defaults to 8KB. Configurable using the [`--max-http-header-size`][] CLI option.
- */
- const maxHeaderSize: number;
- }
|