UNPKG

@cgaspard/webappmcp

Version:

WebApp MCP - Model Context Protocol integration for web applications with server-side debugging tools

67 lines 2.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WebSocketManager = void 0; const ws_1 = require("ws"); const http_1 = require("http"); const uuid_1 = require("uuid"); class WebSocketManager { constructor(config) { this.config = config; this.server = (0, http_1.createServer)(); this.wss = new ws_1.WebSocketServer({ server: this.server }); this.setupWebSocketServer(); } setupWebSocketServer() { this.wss.on('connection', (ws, req) => { const clientId = (0, uuid_1.v4)(); if (this.config.authToken) { const authHeader = req.headers.authorization; if (!authHeader || authHeader !== `Bearer ${this.config.authToken}`) { ws.close(1008, 'Unauthorized'); return; } } console.error(`Client connected: ${clientId}`); this.config.onConnection(clientId, ws); ws.on('message', (data) => { try { const message = JSON.parse(data.toString()); this.config.onMessage(clientId, message); } catch (error) { console.error('Failed to parse WebSocket message:', error); } }); ws.on('close', () => { console.error(`Client disconnected: ${clientId}`); this.config.onDisconnection(clientId); }); ws.on('error', (error) => { console.error(`WebSocket error for client ${clientId}:`, error); }); ws.send(JSON.stringify({ type: 'connected', clientId, })); }); } async start() { return new Promise((resolve) => { this.server.listen(this.config.port, () => { console.error(`WebSocket server listening on port ${this.config.port}`); resolve(); }); }); } async stop() { return new Promise((resolve) => { this.wss.close(() => { this.server.close(() => { resolve(); }); }); }); } } exports.WebSocketManager = WebSocketManager; //# sourceMappingURL=websocket-manager.js.map