OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-wallet / cmd / init.js

78 lines · javascript ref:
// cmd/init.js - Initialize Wallet Command

import bip39 from 'bip39'
import { getEnabledProtocols } from '../protocols/index.js'
import { storeMnemonic, isInitialized } from '../lib/secure-storage.js'

/**
 * Init command handler
 * @param {WalletContext} context - Wallet context
 * @returns {Array} - Command definition for paparam
 */
export default function (context) {
  return [
    async function handler(args) {
      console.log('🔐 Initializing Hyper Wallet...')
      console.log('')

      // Check if already initialized
      if (await isInitialized() && !args.import) {
        console.error('❌ Wallet already initialized')
        console.error('   To import a different wallet, use: hyper-wallet init --import "<mnemonic>"')
        process.exit(1)
      }

      // Generate or import mnemonic
      let mnemonic

      if (args.import) {
        mnemonic = args.import
        if (!bip39.validateMnemonic(mnemonic)) {
          console.error('❌ Error: Invalid mnemonic')
          process.exit(1)
        }
        console.log('✅ Imported existing mnemonic')
      } else {
        mnemonic = bip39.generateMnemonic()
        console.log('🔑 Generated new mnemonic (WRITE THIS DOWN):')
        console.log('')
        console.log(`   ${mnemonic}`)
        console.log('')
        console.log('⚠️  Store this safely! You will need it to recover your wallet.')
      }

      console.log('')
      console.log('🔐 Storing mnemonic in secure OS keychain...')

      // Store mnemonic securely
      await storeMnemonic(mnemonic)

      // Initialize wallet context
      await context.init(mnemonic)

      // Load enabled protocols
      const enabled = getEnabledProtocols(context.config)
      await context.loadProtocols(enabled)

      // Save metadata
      await context.db.put('meta/initialized', {
        timestamp: Date.now(),
        protocols: Object.keys(enabled),
        version: '0.1.0'
      })

      console.log('')
      console.log('✅ Wallet initialized!')
      console.log(`   Protocols: ${Object.keys(enabled).join(', ')}`)
      console.log('   Mnemonic stored securely in OS keychain')
      console.log('')
      console.log('Next steps:')
      console.log('   hyper-wallet whoami     - Show wallet identity')
      console.log('   hyper-wallet balance    - Check balances')

      // Close corestore to release lock
      await context.store.close()
    }
  ]
}