@stoar/cli
Version:
CLI tool for STOAR - decentralized file storage on Arweave
84 lines • 3.13 kB
JavaScript
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