From d9bee1235d89d7f858295f77fc3e094a4e2bf371 Mon Sep 17 00:00:00 2001 From: Leonard Kinday Date: Wed, 4 Mar 2026 18:37:06 +0100 Subject: [PATCH] Expose server handlers --- base-server/index.d.ts | 14 ++++++++++++++ base-server/index.js | 12 ++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/base-server/index.d.ts b/base-server/index.d.ts index cd220a6..293759a 100644 --- a/base-server/index.d.ts +++ b/base-server/index.d.ts @@ -19,6 +19,7 @@ import type { IncomingMessage, ServerResponse } from 'node:http' +import type { WebSocket } from 'ws' import type { ChannelContext, @@ -863,6 +864,19 @@ export class BaseServer< */ destroy(): Promise + /** + * Handle WebSocket connection explicitly + * + * This is a low-level method allowing to integrate Logux server with an existing server + * + * ```js + * fastify.get('/', { websocket: true }, (socket, req) => { + * loguxServer.handleClient(socket, req) + * }) + * ``` + */ + handleClient(ws: WebSocket, req: IncomingMessage): void + /** * Add non-WebSocket HTTP request processor. * diff --git a/base-server/index.js b/base-server/index.js index 8b260cd..35f550b 100644 --- a/base-server/index.js +++ b/base-server/index.js @@ -522,6 +522,11 @@ export class BaseServer { return undefined } + handleClient(ws, req) { + ws.upgradeReq = req + this.addClient(new ServerConnection(ws)) + } + http(method, url, listener) { if (this.options.disableHttpServer) { throw new Error( @@ -624,10 +629,9 @@ export class BaseServer { await readFile(join(import.meta.dirname, '..', 'package.json')) ) - this.ws.on('connection', (ws, req) => { - ws.upgradeReq = req - this.addClient(new ServerConnection(ws)) - }) + this.ws.on('connection', (ws, req) => + this.handleClient(ws, req) + ) this.emitter.emit('report', 'listen', { cert: !!this.options.cert, environment: this.env,