// e2e/run_e2e_with_mock.js // Starts an express mock server in-process, runs the local validator against it, then shuts down. const express = require('express'); const bodyParser = require('body-parser'); const path = require('path'); const { spawn } = require('child_process'); async function startMock(port = 4001) { const app = express(); app.use(bodyParser.json()); const sessions = new Map(); function generateId() { return 's' + Math.random().toString(36).slice(2,9); } app.post('/api/session', (req, res) => { const body = req.body || {}; const id = generateId(); const token = 'mocktoken-' + Math.random().toString(36).slice(2,12); sessions.set(id, { token, room: body.room || 'room', username: body.username || 'user' }); const studioUrl = `http://localhost:${port}/studio/${id}`; res.json({ id, studioUrl, redirectUrl: studioUrl, ttlSeconds: 300 }); }); app.get('/api/session/:id/token', (req, res) => { const id = req.params.id; const s = sessions.get(id); if (!s) return res.status(404).json({ error: 'not_found' }); res.json({ token: s.token, ttlSeconds: 300, room: s.room, username: s.username, url: `ws://localhost:7880` }); }); app.get('/broadcast', (req, res) => { res.setHeader('Content-Type', 'text/html'); res.send(` Mock Broadcast

Broadcast Panel - Mock

Entrar al estudio `); }); app.get('/studio/:id', (req, res) => { const id = req.params.id; res.setHeader('Content-Type', 'text/html'); res.send(` Mock Studio ${id}

Studio Portal - Mock

loading...
`); }); return new Promise((resolve, reject) => { const server = app.listen(port, () => { console.log('Mock server listening on', port); resolve(server); }); server.on('error', reject); }); } (async () => { const port = 4001; let server; try { server = await startMock(port); } catch (err) { console.error('Failed to start mock', err); process.exit(1); } console.log('Running local validator against mock...'); const env = Object.assign({}, process.env, { BROADCAST_URL: `http://localhost:${port}/broadcast`, TOKEN: 'mock-runner-token-1', STUDIO_URL: `http://localhost:${port}/studio`, }); const child = spawn(process.execPath, [path.join(__dirname, 'validate-flow-domains-local.js')], { env, stdio: 'inherit' }); child.on('exit', (code) => { console.log('Validator exited with', code); server.close(() => { console.log('Mock server stopped'); process.exit(code || 0); }); }); })();