@cgaspard/webappmcp
Version:
WebApp MCP - Model Context Protocol integration for web applications with server-side debugging tools
67 lines • 2.37 kB
JavaScript
;
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