@copperjs/copper
Version:
A lightweight chromium grid
37 lines • 1.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.registerWebsocket = void 0;
const httpProxy = require("http-proxy");
const logger_1 = require("../logger");
const config_1 = require("../standalone/config");
const registerWebsocket = (app, handler, done) => {
const getDefaultOpts = () => {
return config_1.copperConfig.value.defaultSessionOptions
? { chromeOptions: config_1.copperConfig.value.defaultSessionOptions }
: undefined;
};
const proxy = httpProxy.createProxyServer({});
proxy.on('error', (err) => logger_1.logger.error(err, 'websocket proxy error'));
app.server.on('upgrade', async (req, socket, head) => {
try {
let [, sessionId] = req.url.split('/ws/');
sessionId = (sessionId !== null && sessionId !== void 0 ? sessionId : '').split('/')[0];
sessionId = sessionId || (await handler.createSession(getDefaultOpts())).id;
const target = handler.getWebSocketUrl(sessionId);
logger_1.logger.info({ sessionId, target }, 'proxying websocket');
proxy.ws(req, socket, head, { target, toProxy: true });
}
catch (err) {
logger_1.logger.error(err, 'error proxying websocket');
socket.end();
}
});
app.get('/ws/:sessionId/json/version', async (req) => {
const session = handler.getSession(req.params.sessionId);
const webSocketDebuggerUrl = `ws://${req.headers.host}/ws/${session.id}`;
return Object.assign(Object.assign({}, session), { webSocketDebuggerUrl });
});
done();
};
exports.registerWebsocket = registerWebsocket;
//# sourceMappingURL=websockets.js.map