diff --git a/src/forward.ts b/src/forward.ts index 97dce759..ab653368 100644 --- a/src/forward.ts +++ b/src/forward.ts @@ -51,8 +51,7 @@ export const forward = async ( request: http.IncomingMessage, response: http.ServerResponse, handlerOpts: HandlerOpts, - // eslint-disable-next-line no-async-promise-executor -): Promise => new Promise(async (resolve, reject) => { +): Promise => new Promise((resolve, reject) => { const proxy = handlerOpts.upstreamProxyUrlParsed; const origin = proxy ? proxy.origin : request.url; diff --git a/src/forward_socks.ts b/src/forward_socks.ts index aecedee0..07b1c954 100644 --- a/src/forward_socks.ts +++ b/src/forward_socks.ts @@ -38,8 +38,7 @@ export const forwardSocks = async ( request: http.IncomingMessage, response: http.ServerResponse, handlerOpts: HandlerOpts, - // eslint-disable-next-line no-async-promise-executor -): Promise => new Promise(async (resolve, reject) => { +): Promise => new Promise((resolve, reject) => { const agent = new SocksProxyAgent(handlerOpts.upstreamProxyUrlParsed); const options: Options = { diff --git a/test/e2e/server.ts b/test/e2e/server.ts index c8f431c2..c3150be6 100644 --- a/test/e2e/server.ts +++ b/test/e2e/server.ts @@ -1388,6 +1388,44 @@ it('supports localAddress', async () => { } }); +it('returns 500 when forward() throws synchronously', async () => { + const target = http.createServer((_serverRequest, serverResponse) => { + serverResponse.end('ok'); + }); + + await listenOnPort(target); + + const server = new Server({ + port: 0, + prepareRequestFunction: () => { + return { + localAddress: 'not-an-ip', + }; + }, + }); + + const failedErrors: NodeJS.ErrnoException[] = []; + server.on('requestFailed', ({ error }) => { + failedErrors.push(error); + }); + + await server.listen(); + + try { + const response = await httpRequest({ + url: `http://127.0.0.1:${getServerPort(target)}`, + proxyUrl: `http://127.0.0.1:${server.port}`, + }); + + expect(response.statusCode).toBe(500); + expect(failedErrors).toHaveLength(1); + expect(failedErrors[0].code).toBe('ERR_INVALID_IP_ADDRESS'); + } finally { + await server.close(); + await util.promisify(target.close.bind(target))(); + } +}); + it('supports https proxy relay', async () => { const target = https.createServer(() => { });