UNPKG

11.6 kBTypeScriptView Raw
1// Type definitions for node-http-proxy 1.17
2// Project: https://github.com/nodejitsu/node-http-proxy
3// Definitions by: Maxime LUCE <https://github.com/SomaticIT>
4// Florian Oellerich <https://github.com/Raigen>
5// Daniel Schmidt <https://github.com/DanielMSchmidt>
6// Jordan Abreu <https://github.com/jabreu610>
7// Samuel Bodin <https://github.com/bodinsamuel>
8// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
9// TypeScript Version: 2.1
10
11/// <reference types="node" />
12
13import * as events from "events";
14import * as http from "http";
15import * as https from "https";
16import * as net from "net";
17import * as stream from "stream";
18import * as url from "url";
19
20interface ProxyTargetDetailed {
21 host: string;
22 port: number;
23 protocol?: string | undefined;
24 hostname?: string | undefined;
25 socketPath?: string | undefined;
26 key?: string | undefined;
27 passphrase?: string | undefined;
28 pfx?: Buffer | string | undefined;
29 cert?: string | undefined;
30 ca?: string | undefined;
31 ciphers?: string | undefined;
32 secureProtocol?: string | undefined;
33}
34
35declare class Server<TIncomingMessage = http.IncomingMessage, TServerResponse = http.ServerResponse>
36 extends events.EventEmitter
37{
38 /**
39 * Creates the proxy server with specified options.
40 * @param options - Config object passed to the proxy
41 */
42 constructor(options?: Server.ServerOptions);
43
44 /**
45 * Used for proxying regular HTTP(S) requests
46 * @param req - Client request.
47 * @param res - Client response.
48 * @param options - Additional options.
49 */
50 web(
51 req: http.IncomingMessage,
52 res: http.ServerResponse,
53 options?: Server.ServerOptions,
54 callback?: Server.ErrorCallback,
55 ): void;
56
57 /**
58 * Used for proxying regular HTTP(S) requests
59 * @param req - Client request.
60 * @param socket - Client socket.
61 * @param head - Client head.
62 * @param options - Additionnal options.
63 */
64 ws(
65 req: http.IncomingMessage,
66 socket: any,
67 head: any,
68 options?: Server.ServerOptions,
69 callback?: Server.ErrorCallback,
70 ): void;
71
72 /**
73 * A function that wraps the object in a webserver, for your convenience
74 * @param port - Port to listen on
75 * @param hostname - The hostname to listen on
76 */
77 listen(port: number, hostname?: string): Server<TIncomingMessage, TServerResponse>;
78
79 /**
80 * A function that closes the inner webserver and stops listening on given port
81 */
82 close(callback?: () => void): void;
83
84 /**
85 * Creates the proxy server with specified options.
86 * @param options Config object passed to the proxy
87 * @returns Proxy object with handlers for `ws` and `web` requests
88 */
89 // tslint:disable:no-unnecessary-generics
90 static createProxyServer<TIncomingMessage = http.IncomingMessage, TServerResponse = http.ServerResponse>(
91 options?: Server.ServerOptions,
92 ): Server<TIncomingMessage, TServerResponse>;
93
94 /**
95 * Creates the proxy server with specified options.
96 * @param options Config object passed to the proxy
97 * @returns Proxy object with handlers for `ws` and `web` requests
98 */
99 // tslint:disable:no-unnecessary-generics
100 static createServer<TIncomingMessage = http.IncomingMessage, TServerResponse = http.ServerResponse>(
101 options?: Server.ServerOptions,
102 ): Server<TIncomingMessage, TServerResponse>;
103
104 /**
105 * Creates the proxy server with specified options.
106 * @param options Config object passed to the proxy
107 * @returns Proxy object with handlers for `ws` and `web` requests
108 */
109 // tslint:disable:no-unnecessary-generics
110 static createProxy<TIncomingMessage = http.IncomingMessage, TServerResponse = http.ServerResponse>(
111 options?: Server.ServerOptions,
112 ): Server<TIncomingMessage, TServerResponse>;
113
114 addListener(event: string, listener: () => void): this;
115 on(event: string, listener: () => void): this;
116 on(event: "error", listener: Server.ErrorCallback<Error, TIncomingMessage, TServerResponse>): this;
117 on(event: "start", listener: Server.StartCallback<TIncomingMessage, TServerResponse>): this;
118 on(
119 event: "proxyReq",
120 listener: Server.ProxyReqCallback<http.ClientRequest, TIncomingMessage, TServerResponse>,
121 ): this;
122 on(event: "proxyRes", listener: Server.ProxyResCallback<TIncomingMessage, TServerResponse>): this;
123 on(event: "proxyReqWs", listener: Server.ProxyReqWsCallback<http.ClientRequest, TIncomingMessage>): this;
124 on(event: "econnreset", listener: Server.EconnresetCallback<Error, TIncomingMessage, TServerResponse>): this;
125 on(event: "end", listener: Server.EndCallback<TIncomingMessage, TServerResponse>): this;
126 on(event: "open", listener: Server.OpenCallback): this;
127 on(event: "close", listener: Server.CloseCallback<TIncomingMessage>): this;
128
129 once(event: string, listener: () => void): this;
130 once(event: "error", listener: Server.ErrorCallback<Error, TIncomingMessage, TServerResponse>): this;
131 once(event: "start", listener: Server.StartCallback<TIncomingMessage, TServerResponse>): this;
132 once(
133 event: "proxyReq",
134 listener: Server.ProxyReqCallback<http.ClientRequest, TIncomingMessage, TServerResponse>,
135 ): this;
136 once(event: "proxyRes", listener: Server.ProxyResCallback<TIncomingMessage, TServerResponse>): this;
137 once(event: "proxyReqWs", listener: Server.ProxyReqWsCallback<http.ClientRequest, TIncomingMessage>): this;
138 once(event: "econnreset", listener: Server.EconnresetCallback<Error, TIncomingMessage, TServerResponse>): this;
139 once(event: "end", listener: Server.EndCallback<TIncomingMessage, TServerResponse>): this;
140 once(event: "open", listener: Server.OpenCallback): this;
141 once(event: "close", listener: Server.CloseCallback<TIncomingMessage>): this;
142 removeListener(event: string, listener: () => void): this;
143 removeAllListeners(event?: string): this;
144 getMaxListeners(): number;
145 setMaxListeners(n: number): this;
146 listeners(event: string): Array<() => void>;
147 emit(event: string, ...args: any[]): boolean;
148 listenerCount(type: string): number;
149}
150
151declare namespace Server {
152 type ProxyTarget = ProxyTargetUrl | ProxyTargetDetailed;
153 type ProxyTargetUrl = string | Partial<url.Url>;
154
155 interface ServerOptions {
156 /** URL string to be parsed with the url module. */
157 target?: ProxyTarget | undefined;
158 /** URL string to be parsed with the url module. */
159 forward?: ProxyTargetUrl | undefined;
160 /** Object to be passed to http(s).request. */
161 agent?: any;
162 /** Object to be passed to https.createServer(). */
163 ssl?: any;
164 /** If you want to proxy websockets. */
165 ws?: boolean | undefined;
166 /** Adds x- forward headers. */
167 xfwd?: boolean | undefined;
168 /** Verify SSL certificate. */
169 secure?: boolean | undefined;
170 /** Explicitly specify if we are proxying to another proxy. */
171 toProxy?: boolean | undefined;
172 /** Specify whether you want to prepend the target's path to the proxy path. */
173 prependPath?: boolean | undefined;
174 /** Specify whether you want to ignore the proxy path of the incoming request. */
175 ignorePath?: boolean | undefined;
176 /** Local interface string to bind for outgoing connections. */
177 localAddress?: string | undefined;
178 /** Changes the origin of the host header to the target URL. */
179 changeOrigin?: boolean | undefined;
180 /** specify whether you want to keep letter case of response header key */
181 preserveHeaderKeyCase?: boolean | undefined;
182 /** Basic authentication i.e. 'user:password' to compute an Authorization header. */
183 auth?: string | undefined;
184 /** Rewrites the location hostname on (301 / 302 / 307 / 308) redirects, Default: null. */
185 hostRewrite?: string | undefined;
186 /** Rewrites the location host/ port on (301 / 302 / 307 / 308) redirects based on requested host/ port.Default: false. */
187 autoRewrite?: boolean | undefined;
188 /** Rewrites the location protocol on (301 / 302 / 307 / 308) redirects to 'http' or 'https'.Default: null. */
189 protocolRewrite?: string | undefined;
190 /** rewrites domain of set-cookie headers. */
191 cookieDomainRewrite?: false | string | { [oldDomain: string]: string } | undefined;
192 /** rewrites path of set-cookie headers. Default: false */
193 cookiePathRewrite?: false | string | { [oldPath: string]: string } | undefined;
194 /** object with extra headers to be added to target requests. */
195 headers?: { [header: string]: string } | undefined;
196 /** Timeout (in milliseconds) when proxy receives no response from target. Default: 120000 (2 minutes) */
197 proxyTimeout?: number | undefined;
198 /** Timeout (in milliseconds) for incoming requests */
199 timeout?: number | undefined;
200 /** Specify whether you want to follow redirects. Default: false */
201 followRedirects?: boolean | undefined;
202 /** If set to true, none of the webOutgoing passes are called and it's your responsibility to appropriately return the response by listening and acting on the proxyRes event */
203 selfHandleResponse?: boolean | undefined;
204 /** Buffer */
205 buffer?: stream.Stream | undefined;
206 }
207
208 type StartCallback<TIncomingMessage = http.IncomingMessage, TServerResponse = http.ServerResponse> = (
209 req: TIncomingMessage,
210 res: TServerResponse,
211 target: ProxyTargetUrl,
212 ) => void;
213 type ProxyReqCallback<
214 TClientRequest = http.ClientRequest,
215 TIncomingMessage = http.IncomingMessage,
216 TServerResponse = http.ServerResponse,
217 > = (proxyReq: TClientRequest, req: TIncomingMessage, res: TServerResponse, options: ServerOptions) => void;
218 type ProxyResCallback<TIncomingMessage = http.IncomingMessage, TServerResponse = http.ServerResponse> = (
219 proxyRes: TIncomingMessage,
220 req: TIncomingMessage,
221 res: TServerResponse,
222 ) => void;
223 type ProxyReqWsCallback<TClientRequest = http.ClientRequest, TIncomingMessage = http.IncomingMessage> = (
224 proxyReq: TClientRequest,
225 req: TIncomingMessage,
226 socket: net.Socket,
227 options: ServerOptions,
228 head: any,
229 ) => void;
230 type EconnresetCallback<
231 TError = Error,
232 TIncomingMessage = http.IncomingMessage,
233 TServerResponse = http.ServerResponse,
234 > = (
235 err: TError,
236 req: TIncomingMessage,
237 res: TServerResponse,
238 target: ProxyTargetUrl,
239 ) => void;
240 type EndCallback<TIncomingMessage = http.IncomingMessage, TServerResponse = http.ServerResponse> = (
241 req: TIncomingMessage,
242 res: TServerResponse,
243 proxyRes: TIncomingMessage,
244 ) => void;
245 type OpenCallback = (proxySocket: net.Socket) => void;
246 type CloseCallback<TIncomingMessage = http.IncomingMessage> = (
247 proxyRes: TIncomingMessage,
248 proxySocket: net.Socket,
249 proxyHead: any,
250 ) => void;
251 type ErrorCallback<TError = Error, TIncomingMessage = http.IncomingMessage, TServerResponse = http.ServerResponse> =
252 (
253 err: TError,
254 req: TIncomingMessage,
255 res: TServerResponse | net.Socket,
256 target?: ProxyTargetUrl,
257 ) => void;
258}
259
260export = Server;