Something went wrong. Try again.
Monorepo for Aesthetic.Computer aesthetic.computer
Something went wrong. Try again.
JavaScript
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#!/usr/bin/env node// Build Stream Server - WebSocket server for streaming build progressimport { WebSocketServer } from 'ws';import http from 'http';import express from 'express';
const PORT = 8890;const app = express();app.use(express.text());
const clients = new Set();
// HTTP endpoint to receive log linesapp.post('/log', (req, res) => { const line = req.body; broadcast({ type: 'log', line, timestamp: Date.now() }); res.status(200).send('OK');});
// HTTP endpoint to send build status updatesapp.post('/status', express.json(), (req, res) => { broadcast({ type: 'status', ...req.body, timestamp: Date.now() }); res.status(200).send('OK');});
// Create HTTP + WebSocket serverconst server = http.createServer(app);const wss = new WebSocketServer({ server, path: '/stream' });
wss.on('connection', (ws) => { console.log('📡 Client connected'); clients.add(ws); // Send welcome message ws.send(JSON.stringify({ type: 'connected', message: 'Build stream connected', timestamp: Date.now() })); ws.on('close', () => { console.log('📡 Client disconnected'); clients.delete(ws); }); ws.on('error', (err) => { console.error('WebSocket error:', err); clients.delete(ws); });});
function broadcast(data) { const message = JSON.stringify(data); clients.forEach(client => { if (client.readyState === 1) { // OPEN client.send(message); } });}
server.listen(PORT, () => { console.log(`🔥 Build stream server running on http://localhost:${PORT}`); console.log(` POST /log - Send log lines`); console.log(` POST /status - Send status updates`); console.log(` WebSocket: ws://localhost:${PORT}/stream`);});