// cmd/balance.js - Show Wallet Balances
/**
* Balance command handler
* @param {WalletContext} context - Wallet context
* @param {Object} enabledProtocols - Enabled protocol instances
* @returns {Array} - Command definition
*/
export default function (context, enabledProtocols) {
return [
async function handler(args) {
console.log('💰 Wallet Balances')
console.log('')
// Filter protocols if specific one requested
const protocols = args.protocol
? { [args.protocol]: context.protocols[args.protocol] }
: context.protocols
if (args.protocol && !protocols[args.protocol]) {
console.error(`❌ Protocol "${args.protocol}" not enabled`)
process.exit(1)
}
// Get balances from each protocol
for (const [name, instance] of Object.entries(protocols)) {
const balances = await instance.getBalance()
console.log(`${name.toUpperCase()}:`)
if (Array.isArray(balances)) {
// Multi-asset protocol (like WDK)
for (const balance of balances) {
if (balance.error) {
console.log(` ${balance.currency || balance.chain}: Error - ${balance.error}`)
continue
}
const currency = balance.currency || 'UNKNOWN'
const chain = balance.chain
// Format balance based on chain using protocol's formatter
if (instance.formatBalance) {
const formatted = instance.formatBalance(balance.wei || BigInt(balance.amount), chain)
console.log(` ${currency} (${chain}): ${formatted}`)
} else {
const amount = balance.amount || '0'
console.log(` ${currency} (${chain}): ${amount}`)
}
}
} else {
// Single asset protocol
console.log(` ${balances.currency}: ${balances.amount}`)
}
console.log('')
}
}
]
}