#!/usr/bin/env node
'use strict'
// Minimal same-machine Hyperswarm connectivity test
// Tests the fix: testnet + flushed()
const Hyperswarm = require('hyperswarm')
const createTestnet = require('@hyperswarm/testnet')
const crypto = require('hypercore-crypto')
const b4a = require('b4a')
async function test () {
console.log('Creating testnet with 3 DHT bootstrap nodes...')
const testnet = await createTestnet(3)
console.log('Testnet ready:', testnet.bootstrap.map(n => n.host + ':' + n.port))
const topic = crypto.hash(b4a.from('atomspace-bridge-test'))
// Server swarm
const server = new Hyperswarm({ bootstrap: testnet.bootstrap })
server.on('connection', (conn, info) => {
console.log('[server] Got connection from', b4a.toString(info.publicKey, 'hex').slice(0, 12))
conn.on('data', d => console.log('[server] Received:', d.toString()))
conn.write('hello from server')
conn.on('error', () => {})
})
// Client swarm
const client = new Hyperswarm({ bootstrap: testnet.bootstrap })
client.on('connection', (conn, info) => {
console.log('[client] Got connection to', b4a.toString(info.publicKey, 'hex').slice(0, 12))
conn.on('data', d => console.log('[client] Received:', d.toString()))
conn.write('hello from client')
conn.on('error', () => {})
})
// Server: join + wait for DHT announce
console.log('\nServer joining topic...')
const t0 = Date.now()
const discovery = server.join(topic, { server: true, client: false })
await discovery.flushed()
console.log('Server announced on DHT (' + (Date.now() - t0) + 'ms)')
// Client: join + lookup
console.log('Client joining topic...')
const t1 = Date.now()
client.join(topic, { server: false, client: true })
await client.flush()
console.log('Client connected (' + (Date.now() - t1) + 'ms)')
// Wait a beat for both connection events to fire
await new Promise(r => setTimeout(r, 500))
console.log('\nServer connections:', server.connections.size)
console.log('Client connections:', client.connections.size)
if (server.connections.size > 0 && client.connections.size > 0) {
console.log('\n✓ SUCCESS — peers connected!')
} else {
console.log('\n✗ FAILED — no connections')
}
// Give time for data exchange
await new Promise(r => setTimeout(r, 500))
// Cleanup
await server.destroy()
await client.destroy()
await testnet.destroy()
console.log('\nDone.')
process.exit(0)
}
test().catch(err => {
console.error('Test failed:', err)
process.exit(1)
})