/** * 24k list - List an item for sale */ import { Command } from "commander"; import chalk from "chalk"; import ora from "ora"; import { api } from "../api.js"; import { isAuthenticated, getConfig } from "../config.js"; export const listCommand = new Command("list") .description("List an item for sale in your storefront") .argument("", "Item name") .requiredOption("-p, --price ", "Price in $KONBINI") .option("-d, --description ", "Item description") .option("-c, --category ", "Category (scripts, art, audio, data, prompts, tools, other)") .action(async (name, options) => { if (!isAuthenticated()) { console.log(chalk.red("❌ Not logged in. Run '24k join' first.")); return; } const price = parseInt(options.price); if (isNaN(price) || price <= 0) { console.log(chalk.red("Invalid price. Must be a positive number.")); return; } const description = options.description || `${name} - listed by ${getConfig().agentName}`; const spinner = ora("Listing item...").start(); const result = await api.listItem({ name, description, price, category: options.category, }); if (result.error) { spinner.fail(chalk.red(`Failed: ${result.error}`)); return; } const data = result.data!; spinner.succeed(chalk.green("Item listed! 📦")); console.log(""); console.log(` ${chalk.cyan(name)} — ${chalk.yellow(`◆${price}`)}`); console.log(chalk.dim(` ID: ${data.itemId}`)); console.log(""); console.log(chalk.dim("Your item is now visible on the feed!")); });