#!/usr/bin/env node /** * Minimal libp2p bootstrap + pubsub relay. * Browsers connect via WSS to this server and form a pubsub mesh for lobby/signaling. */ import { createLibp2p } from 'libp2p'; import { tcp } from '@libp2p/tcp'; import { webSockets } from '@libp2p/websockets'; import { noise } from '@chainsafe/libp2p-noise'; import { yamux } from '@chainsafe/libp2p-yamux'; import { mplex } from '@libp2p/mplex'; import { gossipsub } from '@libp2p/gossipsub'; const PORT = Number(process.env.PORT) || 9090; const node = await createLibp2p({ addresses: { listen: [ `/ip4/0.0.0.0/tcp/${PORT}`, `/ip4/0.0.0.0/tcp/${PORT}/ws`, ], }, transports: [tcp(), webSockets()], streamMuxers: [yamux(), mplex()], connectionEncrypters: [noise()], services: { pubsub: gossipsub({ allowPublishToZeroTopicPeers: true }), }, }); await node.start(); const addrs = node.getMultiaddrs().map((ma) => ma.toString()); console.log('Bombo bootstrap server running'); console.log('Browser: connect to ws://localhost:' + PORT); console.log('Multiaddrs:', addrs.join(', '));