#!/usr/bin/env node
/**
* Read-only inspect of pear-git-v3's identity-db hyperbee — the direct-
* write per-daemon KV store, separate from the autobase view.
*
* Daemon must be stopped first (RocksDB exclusive lock).
*
* Usage: node scripts/inspect-identity-db.mjs [storage-path]
*/
import Corestore from 'corestore'
import Hyperbee from 'hyperbee'
import b4a from 'b4a'
const STORE = process.argv[2] || '/home/fleeky/pgv3-storage/store'
async function main () {
console.log('opening', STORE, '(read-only)')
const store = new Corestore(STORE)
await store.ready()
const dbCore = store.namespace('identity-db').get({ name: 'db' })
await dbCore.ready()
console.log('--- identity-db core ---')
console.log(' key: ', b4a.toString(dbCore.key, 'hex').slice(0, 24) + '…')
console.log(' length: ', dbCore.length)
console.log(' fork: ', dbCore.fork)
console.log(' writable: ', dbCore.writable)
if (dbCore.length === 0) {
console.log(' (empty — no entries to enumerate)')
await dbCore.close()
await store.close()
return
}
const bee = new Hyperbee(dbCore, {
keyEncoding: 'utf-8',
valueEncoding: 'json'
})
await bee.ready()
console.log('--- bee ---')
console.log(' version: ', bee.version)
console.log(' feed.length:', bee.feed && bee.feed.length)
console.log('--- entries by prefix ---')
const prefixes = ['identity:', 'sshkey:', 'pubkey:', 'noisekey:', 'username:', 'pending:']
for (const prefix of prefixes) {
let count = 0
const samples = []
for await (const e of bee.createReadStream({ gte: prefix, lt: prefix + '\xff' })) {
count++
if (samples.length < 3) samples.push(e.key)
}
if (count > 0) {
console.log(` ${prefix.padEnd(14)} ${count} entries sample: ${samples.join(', ').slice(0, 100)}`)
}
}
console.log('--- TOTAL keys (full scan) ---')
let total = 0
for await (const _ of bee.createReadStream()) total++
console.log(' total entries:', total)
await dbCore.close()
await store.close()
}
main().catch(err => {
console.error('error:', err.message)
if (err.stack) console.error(err.stack)
process.exit(1)
})