OverviewFilesCommitsIssuesDocsReleasesPeers

P2P-Hiverelay / scripts / test-discovery-long.js

41 lines · javascript ref:
import Hyperswarm from 'hyperswarm'
import b4a from 'b4a'
import sodium from 'sodium-universal'

const RELAY_DISCOVERY_TOPIC = b4a.alloc(32)
sodium.crypto_generichash(RELAY_DISCOVERY_TOPIC, b4a.from('hiverelay-discovery-v1'))

console.log('Topic:', b4a.toString(RELAY_DISCOVERY_TOPIC, 'hex'))

const swarm = new Hyperswarm()

swarm.on('connection', (conn, info) => {
  const pk = info.publicKey ? b4a.toString(info.publicKey, 'hex') : 'unknown'
  console.log(`[${new Date().toISOString()}] CONNECTED: ${pk.slice(0, 16)}...`)
})

// Join as client only — looking for relay servers
swarm.join(RELAY_DISCOVERY_TOPIC, { server: false, client: true })
console.log('Flushing DHT...')
await swarm.flush()
console.log('Flush done at', new Date().toISOString())
console.log('My PK:', b4a.toString(swarm.keyPair.publicKey, 'hex').slice(0, 16))
console.log('Waiting 60s for relay discovery...')

// Log every 10s
let elapsed = 0
const interval = setInterval(() => {
  elapsed += 10
  console.log(`[${elapsed}s] connections: ${swarm.connections.size}`)
}, 10000)

setTimeout(async () => {
  clearInterval(interval)
  console.log('\nFinal connections:', swarm.connections.size)
  for (const conn of swarm.connections) {
    console.log('  peer:', conn.remotePublicKey ? b4a.toString(conn.remotePublicKey, 'hex').slice(0, 16) : '?')
  }
  await swarm.destroy()
  process.exit(0)
}, 60000)