1 |
|
2 |
|
3 | import * as tunnel from "tunnel";
|
4 | import { URLBuilder } from "./url";
|
5 | export function createProxyAgent(requestUrl, proxySettings, headers) {
|
6 | var tunnelOptions = {
|
7 | proxy: {
|
8 | host: URLBuilder.parse(proxySettings.host).getHost(),
|
9 | port: proxySettings.port,
|
10 | headers: (headers && headers.rawHeaders()) || {},
|
11 | },
|
12 | };
|
13 | if (proxySettings.username && proxySettings.password) {
|
14 | tunnelOptions.proxy.proxyAuth = proxySettings.username + ":" + proxySettings.password;
|
15 | }
|
16 | else if (proxySettings.username) {
|
17 | tunnelOptions.proxy.proxyAuth = "" + proxySettings.username;
|
18 | }
|
19 | var requestScheme = URLBuilder.parse(requestUrl).getScheme() || "";
|
20 | var isRequestHttps = requestScheme.toLowerCase() === "https";
|
21 | var proxyScheme = URLBuilder.parse(proxySettings.host).getScheme() || "";
|
22 | var isProxyHttps = proxyScheme.toLowerCase() === "https";
|
23 | var proxyAgent = {
|
24 | isHttps: isRequestHttps,
|
25 | agent: createTunnel(isRequestHttps, isProxyHttps, tunnelOptions),
|
26 | };
|
27 | return proxyAgent;
|
28 | }
|
29 | export function createTunnel(isRequestHttps, isProxyHttps, tunnelOptions) {
|
30 | if (isRequestHttps && isProxyHttps) {
|
31 | return tunnel.httpsOverHttps(tunnelOptions);
|
32 | }
|
33 | else if (isRequestHttps && !isProxyHttps) {
|
34 | return tunnel.httpsOverHttp(tunnelOptions);
|
35 | }
|
36 | else if (!isRequestHttps && isProxyHttps) {
|
37 | return tunnel.httpOverHttps(tunnelOptions);
|
38 | }
|
39 | else {
|
40 | return tunnel.httpOverHttp(tunnelOptions);
|
41 | }
|
42 | }
|
43 |
|
\ | No newline at end of file |