OverviewFilesCommitsIssuesDocsReleasesPeers

pear-git / scripts / create-token.js

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

/**
 * Create a bearer token for API access
 */

import Corestore from 'corestore'
import Hyperbee from 'hyperbee'
import process from 'bare-process'
import { BearerTokenProvider } from '../lib/auth/providers/bearer-token.js'
import { IdentityFacade } from '../lib/facades/identity-facade.js'
import { MetadataBase } from '../lib/metadata-base.js'

async function main() {
  const username = process.argv[2] || 'admin'
  const description = process.argv[3] || 'CLI-generated token'
  const permissions = process.argv[4]?.split(',') || ['read', 'create-issue', 'manage-issues', 'write', 'admin']

  console.log('🔑 Creating bearer token...')
  console.log(`   Username: ${username}`)
  console.log(`   Description: ${description}`)
  console.log(`   Permissions: ${permissions.join(', ')}`)
  console.log('')

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

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

  const registry = { db }
  const tokenProvider = new BearerTokenProvider(registry)

  try {
    const result = await tokenProvider.createToken({
      username,
      description,
      permissions,
      repos: ['*']
    })

    console.log('✅ Token created successfully!')
    console.log('')
    console.log('Token:', result.token)
    console.log('')
    console.log('Usage:')
    console.log(`  curl -H "Authorization: Bearer ${result.token}" http://localhost:5005/git/tabertron/pear-git/api/issues`)
    console.log('')
    console.log('⚠️  Save this token securely - it cannot be retrieved later!')
  } catch (err) {
    console.error('❌ Error creating token:', err.message)
    process.exit(1)
  } finally {
    await db.close()
    await store.close()
  }
}

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