import { spawn } from 'child_process'; import WaitOn from 'wait-on'; const waitOn = new WaitOn(); async function startServer() { return new Promise((resolve) => { const server = spawn('npm', ['run', 'demo:server'], { stdio: 'inherit', shell: true }); // Wait for server to be ready waitOn({ resources: ['tcp:3001'], timeout: 10000, }).then(() => { console.log('Server is ready'); resolve(server); }); }); } async function startScenario(scenario, delay = 0) { if (delay > 0) { await new Promise(resolve => setTimeout(resolve, delay * 1000)); } const proc = spawn('npm', ['run', `demo:${scenario}`], { stdio: 'inherit', shell: true }); return proc; } async function runDemo() { try { const server = await startServer(); // Start scenarios with delays const user = await startScenario('user'); const ngo = await startScenario('ngo', 2); const advocate = await startScenario('advocate', 4); // Handle process termination process.on('SIGINT', () => { server.kill(); user.kill(); ngo.kill(); advocate.kill(); process.exit(); }); } catch (error) { console.error('Error running demo:', error); process.exit(1); } } runDemo();