1 | import { PassThrough } from "stream";
|
2 | import { request as httpsRequest } from "https";
|
3 |
|
4 |
|
5 |
|
6 | export const createReadableCopies = (n, readable) => {
|
7 | return Array.from({ length: n }, () => readable.pipe(new PassThrough()));
|
8 | };
|
9 |
|
10 |
|
11 |
|
12 | export const fromCallback = (fn) =>
|
13 | new Promise((resolve, reject) => {
|
14 | fn((error, result) => (error ? reject(error) : resolve(result)));
|
15 | });
|
16 |
|
17 |
|
18 |
|
19 | export const proxyHttpsRequest = (
|
20 | { headers, hostname, method, url, port },
|
21 | inputReq
|
22 | ) =>
|
23 | new Promise((resolve, reject) => {
|
24 | const req = httpsRequest(
|
25 | {
|
26 | headers: headers || inputReq.headers,
|
27 | hostname,
|
28 | method: method || inputReq.method,
|
29 | path: url || inputReq.url,
|
30 | port,
|
31 | rejectUnauthorized: false,
|
32 | },
|
33 | resolve
|
34 | ).on("error", reject);
|
35 | inputReq.pipe(req);
|
36 | });
|
37 |
|
38 |
|
39 |
|
40 | const _isPort = (value) =>
|
41 | typeof value === "number" &&
|
42 | value >= 0 &&
|
43 | value <= 65534 &&
|
44 | Math.floor(value) === value;
|
45 |
|
46 |
|
47 |
|
48 |
|
49 | export const splitHost = (host) => {
|
50 | host = String(host);
|
51 | const i = host.lastIndexOf(":");
|
52 |
|
53 | if (i === -1) {
|
54 | const port = +host;
|
55 | return _isPort(port) ? { port } : { hostname: host };
|
56 | }
|
57 |
|
58 | const port = +host.slice(i + 1);
|
59 | return _isPort(port)
|
60 | ? {
|
61 | hostname: host.slice(0, i),
|
62 | port,
|
63 | }
|
64 | : { hostname: host };
|
65 | };
|