// How long does a FRESH node take to converge on the fleet's namespace, and does fast-forward
// ever fire? Measured against the live log over the real DHT.
import Corestore from 'corestore'
import Hyperswarm from 'hyperswarm'
import b4a from 'b4a'
import fs from '#node:fs'
import os from '#node:os'
import { join } from '#node:path'
import { Namespace } from './lib/namespace.js'
const NS = '2c9290ede07757087ba7983708508174768f92879ddd94858fac215ecbff9ca5'
const dir = fs.mkdtempSync(join(os.tmpdir(), 'ff-'))
const store = new Corestore(dir)
const swarm = new Hyperswarm()
const n = new Namespace(store.namespace('names'), b4a.from(NS, 'hex'))
await n.ready()
swarm.on('connection', (s) => { try { n.replicate(s) } catch {} })
swarm.join(n.discoveryKey, { server: true, client: true })
let ff = 0
n.base.on('fast-forward', () => { ff++ })
const t0 = Date.now()
let converged = null
for (let i = 0; i < 120; i++) {
await new Promise((r) => setTimeout(r, 250))
await n.update()
const admins = await n.admins()
const claims = await n.list()
if (admins.length >= 3 && claims.length >= 3) { converged = Date.now() - t0; break }
}
console.log(JSON.stringify({
convergedMs: converged,
admins: (await n.admins()).length,
handles: (await n.list()).map((c) => c.handle),
writers: (await n.writers()).length,
fastForwards: ff,
systemLength: n.base.system && n.base.system.core ? n.base.system.core.length : 'n/a',
viewLength: n.base.view && n.base.view.core ? n.base.view.core.length : 'n/a'
}, null, 2))
await n.close(); await swarm.destroy(); await store.close()