@underpostnet/underpost
Version:
Underpost Platform — end-to-end CI/CD and application-delivery toolchain CLI. Covers bare metal, Kubernetes, K3s, kubeadm, LXD, container/image orchestration, secrets, databases, cron jobs, monitoring, SSH, runners, PWA + Workbox delivery, and release orc
45 lines (37 loc) • 1.64 kB
JavaScript
/**
* Core WebSocket server factory — initializes channels and creates the Socket.IO server.
* @module ws/core/core.ws.server
*/
;
import { IoServer } from '../IoServer.js';
import { CoreWsConnectionHandler } from './core.ws.connection.js';
import { CoreWsChatChannel } from './channels/core.ws.chat.js';
import { CoreWsMailerChannel } from './channels/core.ws.mailer.js';
import { CoreWsStreamChannel } from './channels/core.ws.stream.js';
import { resolveHostKeyContext } from '../../server/conf.js';
/**
* @class CoreWsServer
* @classdesc Creates the core WebSocket server, initializing all channel state
* before attaching the connection handler.
*/
class CoreWsServer {
/**
* Initializes channel state and creates the Socket.IO server.
* @param {import('http').Server} httpServer
* @param {Object} options
* @param {string} options.host
* @param {string} options.path
* @returns {{ options: import('socket.io').ServerOptions, ioServer: import('socket.io').Server, meta: ImportMeta }}
*/
static create(httpServer, options) {
const { host, path } = options;
const hostKeyContext = resolveHostKeyContext({ host, path });
CoreWsChatChannel.init(hostKeyContext);
CoreWsMailerChannel.init(hostKeyContext);
CoreWsStreamChannel.init(hostKeyContext);
return IoServer.create(httpServer, options, (socket) => CoreWsConnectionHandler.handle(socket, hostKeyContext));
}
}
/** Required by Express.js dynamic import: `const { createIoServer } = await import(...)` */
const createIoServer = CoreWsServer.create.bind(CoreWsServer);
export { CoreWsServer, createIoServer };