From e7ebfc1b0113c75020cf7897a96fca06b6994ccc Mon Sep 17 00:00:00 2001 From: erdinccurebal Date: Sat, 21 Feb 2026 22:41:28 +0300 Subject: [PATCH] fix(engine.io): emit initial_headers and headers events in uServer The uServer (uWebSockets.js) implementation did not emit "initial_headers" and "headers" events during WebSocket upgrades, unlike the regular Server which does this via the ws "headers" event. This adds the missing event emissions in uServer.handleUpgrade() and enables the previously skipped tests for the uws engine. Fixes: socketio/socket.io#5300 --- packages/engine.io/lib/userver.ts | 14 ++++++++++++++ packages/engine.io/test/server.js | 10 ++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/packages/engine.io/lib/userver.ts b/packages/engine.io/lib/userver.ts index 71ed616fbb..54d34a6030 100644 --- a/packages/engine.io/lib/userver.ts +++ b/packages/engine.io/lib/userver.ts @@ -226,9 +226,23 @@ export class uServer extends BaseServer { } } + // emit headers events for WebSocket upgrades + const additionalHeaders = {}; + const isInitialRequest = !id; + + if (isInitialRequest) { + this.emit("initial_headers", additionalHeaders, req); + } + + this.emit("headers", additionalHeaders, req); + // calling writeStatus() triggers the flushing of any header added in a middleware req.res.writeStatus("101 Switching Protocols"); + Object.keys(additionalHeaders).forEach((key) => { + req.res.writeHeader(key, additionalHeaders[key]); + }); + res.upgrade( { transport, diff --git a/packages/engine.io/test/server.js b/packages/engine.io/test/server.js index 1795b00bbc..75b287c186 100644 --- a/packages/engine.io/test/server.js +++ b/packages/engine.io/test/server.js @@ -3598,10 +3598,7 @@ describe("server", () => { }); it("should emit a 'initial_headers' event (websocket)", function (done) { - if ( - process.env.EIO_WS_ENGINE === "eiows" || - process.env.EIO_WS_ENGINE === "uws" - ) { + if (process.env.EIO_WS_ENGINE === "eiows") { return this.skip(); } const partialDone = createPartialDone(done, 2); @@ -3644,10 +3641,7 @@ describe("server", () => { }); it("should emit several 'headers' events per connection", function (done) { - if ( - process.env.EIO_WS_ENGINE === "eiows" || - process.env.EIO_WS_ENGINE === "uws" - ) { + if (process.env.EIO_WS_ENGINE === "eiows") { return this.skip(); } const partialDone = createPartialDone(done, 4);