UNPKG

@copperjs/copper

Version:
37 lines 1.72 kB
"use strict"; 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