#!/usr/bin/env node
'use strict'
// Test same-machine connectivity on PRODUCTION DHT
// with the flushed() fix applied
const Hyperswarm = require('hyperswarm')
const crypto = require('hypercore-crypto')
const b4a = require('b4a')
async function test () {
const topic = crypto.hash(b4a.from('atomspace-bridge-test-' + Date.now()))
console.log('Topic:', b4a.toString(topic, 'hex').slice(0, 24) + '...')
console.log('Using PRODUCTION DHT (no testnet)\n')
// Server swarm
const server = new Hyperswarm()
let serverConnected = false
server.on('connection', (conn, info) => {
serverConnected = true
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()
let clientConnected = false
client.on('connection', (conn, info) => {
clientConnected = true
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 (THE FIX)
console.log('Server: joining topic + waiting for flushed()...')
const t0 = Date.now()
const discovery = server.join(topic, { server: true, client: false })
await discovery.flushed()
const announceMs = Date.now() - t0
console.log('Server: DHT announce complete (' + announceMs + 'ms)')
console.log('Server: DHT bootstrapped')
// Client: join + wait for connection
console.log('\nClient: joining topic + flushing...')
const t1 = Date.now()
client.join(topic, { server: false, client: true })
await client.flush()
const lookupMs = Date.now() - t1
console.log('Client: flush complete (' + lookupMs + 'ms)')
// Wait for connection events
await new Promise(r => setTimeout(r, 2000))
console.log('\nServer connections:', server.connections.size, '(event fired:', serverConnected + ')')
console.log('Client connections:', client.connections.size, '(event fired:', clientConnected + ')')
if (serverConnected && clientConnected) {
console.log('\n✓ SUCCESS — production DHT works with flushed()!')
console.log(' Announce: ' + announceMs + 'ms, Lookup: ' + lookupMs + 'ms')
} else {
console.log('\n✗ FAILED — need testnet for same-machine connections')
}
await server.destroy()
await client.destroy()
process.exit(0)
}
test().catch(err => {
console.error('Test failed:', err)
process.exit(1)
})