MCPcopy
hub / github.com/browserless/browserless / wrapHTTPHandler

Method wrapHTTPHandler

src/router.ts:186–239  ·  view source on GitHub ↗
(
    route: HTTPRoute | BrowserHTTPRoute,
    handler: HTTPRoute['handler'] | BrowserHTTPRoute['handler'],
  )

Source from the content-addressed store, hash-verified

184 }
185
186 protected wrapHTTPHandler(
187 route: HTTPRoute | BrowserHTTPRoute,
188 handler: HTTPRoute['handler'] | BrowserHTTPRoute['handler'],
189 ) {
190 return async (req: Request, res: Response) => {
191 if (!isConnected(res)) {
192 this.log.warn(`HTTP Request has closed prior to running`);
193 return ROUTE_DID_NOT_RUN;
194 }
195 const logger = new this.logger(route.name, req);
196 if (
197 Object.getPrototypeOf(route) instanceof BrowserHTTPRoute &&
198 'browser' in route &&
199 route.browser
200 ) {
201 const browser = await this.browserManager.getBrowserForRequest(
202 req,
203 route,
204 logger,
205 );
206
207 if (!isConnected(res)) {
208 this.log.warn(`HTTP Request has closed prior to running`);
209 this.browserManager.complete(browser);
210 return ROUTE_DID_NOT_RUN;
211 }
212
213 if (!browser) {
214 return writeResponse(res, 500, `Error loading the browser`);
215 }
216
217 try {
218 this.log.trace(`Running found HTTP handler.`);
219 return await Promise.race([
220 handler(req, res, logger, browser),
221 new Promise((resolve, reject) => {
222 res.once('close', () => {
223 if (!res.writableEnded) {
224 reject(new Error(`Request closed prior to writing results`));
225 }
226 this.log.trace(`Response has been written, resolving`);
227 resolve(null);
228 });
229 }),
230 ]);
231 } finally {
232 this.log.trace(`HTTP Request handler has finished.`);
233 this.browserManager.complete(browser);
234 }
235 }
236
237 return (handler as HTTPRoute['handler'])(req, res, logger);
238 };
239 }
240
241 protected wrapWebSocketHandler(
242 route: WebSocketRoute | BrowserWebsocketRoute,

Callers 1

registerHTTPRouteMethod · 0.95

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