UNPKG

@stoar/cli

Version:

CLI tool for STOAR - decentralized file storage on Arweave

84 lines 3.13 kB
import { Command } from 'commander'; import { getWalletConfig, formatArweaveAmount } from '../utils/wallet.js'; import { output, success, createSpinner } from '../utils/output.js'; import { wrapCommand } from '../utils/error.js'; import { getArweave } from '../utils/arweave.js'; export const walletCommand = new Command('wallet') .description('Wallet management commands'); walletCommand .command('balance') .description('Check wallet balance') .action(wrapCommand(async (_options, command) => { const globalOptions = command.parent?.parent?.opts() || {}; const spinner = createSpinner('Checking wallet balance...'); spinner.start(); try { const { client } = await getWalletConfig(globalOptions); const balance = await client.getBalance(); spinner.stop(); const data = { balance: formatArweaveAmount(balance), winston: (parseFloat(balance) * 1e12).toString() }; output(data, globalOptions); if (!globalOptions.json && !globalOptions.quiet) { success(`Balance: ${data.balance}`); } } catch (error) { spinner.stop(); throw error; } })); walletCommand .command('address') .description('Show wallet address') .action(wrapCommand(async (_options, command) => { const globalOptions = command.parent?.parent?.opts() || {}; const { wallet, arweave } = await getWalletConfig(globalOptions); const address = await arweave.wallets.jwkToAddress(wallet); output({ address }, globalOptions); if (!globalOptions.json && !globalOptions.quiet) { success(`Address: ${address}`); } })); walletCommand .command('create') .description('Create a new wallet') .option('-o, --output <path>', 'Output wallet to file') .action(wrapCommand(async (options, command) => { const globalOptions = command.parent?.parent?.opts() || {}; const spinner = createSpinner('Creating new wallet...'); spinner.start(); try { // Create a temporary Arweave instance for wallet generation const Arweave = await getArweave(); const arweave = Arweave.init({ host: 'arweave.net', port: 443, protocol: 'https' }); const wallet = await arweave.wallets.generate(); const address = await arweave.wallets.jwkToAddress(wallet); spinner.stop(); if (options.output) { const { writeFileSync } = await import('node:fs'); writeFileSync(options.output, JSON.stringify(wallet, null, 2)); success(`Wallet saved to: ${options.output}`, globalOptions); } const data = { address, wallet: globalOptions.json ? wallet : '[hidden]' }; output(data, globalOptions); if (!globalOptions.json && !globalOptions.quiet && !options.output) { console.log('\nWallet JSON:'); console.log(JSON.stringify(wallet, null, 2)); } } catch (error) { spinner.stop(); throw error; } })); //# sourceMappingURL=wallet.js.map