1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | import * as events from "events";
|
14 | import * as http from "http";
|
15 | import * as https from "https";
|
16 | import * as net from "net";
|
17 | import * as stream from "stream";
|
18 | import * as url from "url";
|
19 |
|
20 | interface 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 |
|
35 | declare class Server<TIncomingMessage = http.IncomingMessage, TServerResponse = http.ServerResponse>
|
36 | extends events.EventEmitter
|
37 | {
|
38 | |
39 |
|
40 |
|
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 |
|
151 | declare namespace Server {
|
152 | type ProxyTarget = ProxyTargetUrl | ProxyTargetDetailed;
|
153 | type ProxyTargetUrl = string | Partial<url.Url>;
|
154 |
|
155 | interface ServerOptions {
|
156 |
|
157 | target?: ProxyTarget | undefined;
|
158 |
|
159 | forward?: ProxyTargetUrl | undefined;
|
160 |
|
161 | agent?: any;
|
162 |
|
163 | ssl?: any;
|
164 |
|
165 | ws?: boolean | undefined;
|
166 |
|
167 | xfwd?: boolean | undefined;
|
168 |
|
169 | secure?: boolean | undefined;
|
170 |
|
171 | toProxy?: boolean | undefined;
|
172 |
|
173 | prependPath?: boolean | undefined;
|
174 |
|
175 | ignorePath?: boolean | undefined;
|
176 |
|
177 | localAddress?: string | undefined;
|
178 |
|
179 | changeOrigin?: boolean | undefined;
|
180 |
|
181 | preserveHeaderKeyCase?: boolean | undefined;
|
182 |
|
183 | auth?: string | undefined;
|
184 |
|
185 | hostRewrite?: string | undefined;
|
186 |
|
187 | autoRewrite?: boolean | undefined;
|
188 |
|
189 | protocolRewrite?: string | undefined;
|
190 |
|
191 | cookieDomainRewrite?: false | string | { [oldDomain: string]: string } | undefined;
|
192 |
|
193 | cookiePathRewrite?: false | string | { [oldPath: string]: string } | undefined;
|
194 |
|
195 | headers?: { [header: string]: string } | undefined;
|
196 |
|
197 | proxyTimeout?: number | undefined;
|
198 |
|
199 | timeout?: number | undefined;
|
200 |
|
201 | followRedirects?: boolean | undefined;
|
202 |
|
203 | selfHandleResponse?: boolean | undefined;
|
204 |
|
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 |
|
260 | export = Server;
|