// 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()
}
]
}