UNPKG

pigeonhub

Version:

PigeonHub - Decentralized mesh network with WebSocket signaling and PeerPigeon bootstrap nodes

88 lines (71 loc) • 2.52 kB
#!/usr/bin/env node /** * Start a PeerPigeon Hub * * Usage: * npm run hub * PORT=3001 npm run hub * PORT=8080 npm run hub * BOOTSTRAP_HUBS=ws://localhost:3000 PORT=3001 npm run hub * BOOTSTRAP_HUBS=ws://hub1:3000,ws://hub2:3001 PORT=3002 npm run hub */ import { PeerPigeonServer } from 'peerpigeon'; // Get port from environment variable or use default const PORT = parseInt(process.env.PORT) || 3000; const HOST = process.env.HOST || '0.0.0.0'; // Get bootstrap hubs from environment variable let bootstrapHubs = ['wss://pigeonhub.fly.dev/']; if (process.env.BOOTSTRAP_HUBS) { bootstrapHubs = process.env.BOOTSTRAP_HUBS.split(',').map(uri => uri.trim()).filter(uri => uri); console.log(`šŸ”— Bootstrap hubs configured: ${bootstrapHubs.join(', ')}\n`); } console.log('šŸš€ Starting PeerPigeon Hub...\n'); // Create hub server const hub = new PeerPigeonServer({ port: PORT, host: HOST, isHub: true, autoConnect: true, // Auto-connect to bootstrap on port 3000 bootstrapHubs: bootstrapHubs.length > 0 ? bootstrapHubs : undefined }); // Event listeners hub.on('started', ({ host, port }) => { console.log(`āœ… Hub running on ws://${host}:${port}`); console.log(` Health: http://${host}:${port}/health`); console.log(` Hubs: http://${host}:${port}/hubs\n`); }); hub.on('peerConnected', ({ peerId, totalConnections }) => { console.log(`āœ… Peer: ${peerId.substring(0, 8)}... (${totalConnections} total)`); }); hub.on('peerDisconnected', ({ peerId, totalConnections }) => { console.log(`āŒ Peer: ${peerId.substring(0, 8)}... (${totalConnections} remaining)`); }); hub.on('hubRegistered', ({ peerId, totalHubs }) => { console.log(`šŸ¢ Hub: ${peerId.substring(0, 8)}... (${totalHubs} total)`); }); hub.on('bootstrapConnected', ({ uri }) => { console.log(`šŸ”— Connected to bootstrap: ${uri}`); }); hub.on('hubDiscovered', ({ peerId }) => { console.log(`šŸ” Discovered hub: ${peerId.substring(0, 8)}...`); }); hub.on('error', (error) => { console.error('āŒ Error:', error.message); }); // Graceful shutdown process.on('SIGINT', async () => { console.log('\nšŸ›‘ Shutting down...'); await hub.stop(); console.log('āœ… Stopped'); process.exit(0); }); process.on('SIGTERM', async () => { console.log('\nšŸ›‘ Shutting down...'); await hub.stop(); process.exit(0); }); // Start the hub hub.start().catch(error => { console.error('āŒ Failed to start:', error.message); process.exit(1); });