-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathchrome.js
More file actions
77 lines (65 loc) · 1.8 KB
/
chrome.js
File metadata and controls
77 lines (65 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
const puppeteer = require("puppeteer");
const getPort = require("get-port");
const httpProxy = require("http-proxy");
const logger = require("./logger");
const launchChrome = async () => {
const port = await getPort();
logger.log("info", `launchChrome in port ${port}`);
const args = [
"--disable-dev-shm-usage",
"--disable-gpu",
"--remote-debugging-port=9222",
"--no-sandbox",
"--disable-background-networking",
"--disable-default-apps",
"--disable-extensions",
"--disable-sync",
"--disable-translate",
"--headless",
"--hide-scrollbars",
"--metrics-recording-only",
"--mute-audio",
"--no-first-run",
"--safebrowsing-disable-auto-update",
"--ignore-certificate-errors",
"--ignore-ssl-errors",
"--ignore-certificate-errors-spki-list",
"--user-data-dir=/tmp",
`--remote-debugging-port=${port}`,
"--remote-debugging-address=0.0.0"
];
return puppeteer.launch({ args });
};
const getBrowserInstance = () => {
return new Promise(async resolve => {
const browser = await launchChrome().catch(async error => {
logger.log("error", "launchChrome failed", error);
});
resolve(browser);
});
};
const runWebSocket = async (req, socket, head) => {
const browser = await getBrowserInstance();
// session timeout
setTimeout(async () => {
try {
await browser.close();
} catch (e) {
}
}, 60000);
req.proxy = new httpProxy.createProxyServer();
req.proxy.on("open", async (res, socket, head) => {
logger.log("info", "Client connected");
});
req.proxy.on("error", async (err, req, res) => {
logger.log("info", "proxy errors", err);
});
req.proxy.on("close", async (res, socket, head) => {
logger.log("info", "Client disconnected");
});
const target = browser.wsEndpoint();
return req.proxy.ws(req, socket, head, { target });
};
module.exports = {
runWebSocket
};