OverviewFilesCommitsIssuesDocsReleasesPeers

pear-git / scripts / list-tokens.js

56 lines · javascript ref:
#!/usr/bin/env bare

/**
 * List all bearer tokens
 */

import Corestore from 'corestore'
import Hyperbee from 'hyperbee'
import process from 'bare-process'

async function main() {
  console.log('🔑 Listing all bearer tokens...\n')

  // Initialize storage
  const store = new Corestore('./pear-git-storage')
  await store.ready()

  const core = store.get({ name: 'pear-git-db' })
  const db = new Hyperbee(core, { keyEncoding: 'utf-8', valueEncoding: 'json' })
  await db.ready()

  try {
    let count = 0
    for await (const entry of db.createReadStream({ gt: 'token:', lt: 'token:\xFF' })) {
      count++
      const tokenData = entry.value
      console.log(`Token ${count}:`)
      console.log(`  Hash: ${tokenData.tokenHash}`)
      console.log(`  Username: ${tokenData.username}`)
      console.log(`  Description: ${tokenData.description}`)
      console.log(`  Permissions: ${tokenData.permissions.join(', ')}`)
      console.log(`  Created: ${new Date(tokenData.createdAt).toISOString()}`)
      console.log(`  Last used: ${tokenData.lastUsedAt ? new Date(tokenData.lastUsedAt).toISOString() : 'Never'}`)
      console.log(`  Usage count: ${tokenData.usageCount}`)
      console.log('')
    }

    if (count === 0) {
      console.log('No tokens found.')
    } else {
      console.log(`Total: ${count} token(s)`)
    }
  } catch (err) {
    console.error('❌ Error listing tokens:', err.message)
    process.exit(1)
  } finally {
    await db.close()
    await store.close()
  }
}

main().catch(err => {
  console.error('Fatal error:', err)
  process.exit(1)
})