MCPcopy Index your code
hub / github.com/browserless/browserless / wrapWebSocketHandler

Method wrapWebSocketHandler

src/router.ts:241–283  ·  view source on GitHub ↗
(
    route: WebSocketRoute | BrowserWebsocketRoute,
    handler: WebSocketRoute['handler'] | BrowserWebsocketRoute['handler'],
  )

Source from the content-addressed store, hash-verified

239 }
240
241 protected wrapWebSocketHandler(
242 route: WebSocketRoute | BrowserWebsocketRoute,
243 handler: WebSocketRoute['handler'] | BrowserWebsocketRoute['handler'],
244 ) {
245 return async (req: Request, socket: stream.Duplex, head: Buffer) => {
246 if (!isConnected(socket)) {
247 this.log.warn(`WebSocket Request has closed prior to running`);
248 return ROUTE_DID_NOT_RUN;
249 }
250 const logger = new this.logger(route.name, req);
251 if (
252 Object.getPrototypeOf(route) instanceof BrowserWebsocketRoute &&
253 'browser' in route &&
254 route.browser
255 ) {
256 const browser = await this.browserManager.getBrowserForRequest(
257 req,
258 route,
259 logger,
260 );
261
262 if (!isConnected(socket)) {
263 this.log.warn(`WebSocket Request has closed prior to running`);
264 this.browserManager.complete(browser);
265 return ROUTE_DID_NOT_RUN;
266 }
267
268 if (!browser) {
269 return writeResponse(socket, 500, `Error loading the browser.`);
270 }
271
272 try {
273 this.log.trace(`Running found WebSocket handler.`);
274 await handler(req, socket, head, logger, browser);
275 } finally {
276 this.log.trace(`WebSocket Request handler has finished.`);
277 this.browserManager.complete(browser);
278 }
279 return;
280 }
281 return (handler as WebSocketRoute['handler'])(req, socket, head, logger);
282 };
283 }
284
285 public registerHTTPRoute(
286 route: HTTPRoute | BrowserHTTPRoute,

Callers 1

Calls 7

isConnectedFunction · 0.85
writeResponseFunction · 0.85
handlerFunction · 0.85
warnMethod · 0.80
getBrowserForRequestMethod · 0.80
completeMethod · 0.80
traceMethod · 0.80

Tested by

no test coverage detected