UNPKG

amaran-light-cli

Version:

Command line tool for controlling Aputure Amaran lights via WebSocket to a local Amaran desktop app.

101 lines 4.56 kB
import chalk from 'chalk'; import { addStandardOptions } from '../cmdUtils.js'; export function registerGroup(program, deps) { const { asyncCommand } = deps; const group = program.command('group').description('Manage device groups'); addStandardOptions(group.command('list').description('List all groups')).action(asyncCommand(handleGroupList(deps))); addStandardOptions(group.command('create <name>').description('Create a new group')).action(asyncCommand(handleGroupCreate(deps))); addStandardOptions(group.command('delete <id>').description('Delete a group')).action(asyncCommand(handleGroupDelete(deps))); addStandardOptions(group.command('add <group_id> <node_id>').description('Add a device to a group')).action(asyncCommand(handleGroupAdd(deps))); addStandardOptions(group.command('remove <group_id> <node_id>').description('Remove a device from a group')).action(asyncCommand(handleGroupRemove(deps))); } function handleGroupList(deps) { const { createController } = deps; return async (options) => { const controller = await createController(options.url, options.clientId, options.debug); controller.getGroupList((success, message, data) => { if (success) { // biome-ignore lint/suspicious/noExplicitAny: API response data structure varies const groups = data.data; if (groups.length === 0) { console.log(chalk.yellow('No groups found')); } else { console.log(chalk.blue('Groups:')); // biome-ignore lint/suspicious/noExplicitAny: API response data structure varies groups.forEach((group, index) => { console.log(`${index + 1}. ${chalk.green(group.name || 'Unnamed')} (${chalk.gray(group.id || group.group_id)})`); }); } } else { console.error(chalk.red(`Error getting group list: ${message}`)); } controller.disconnect(); }); }; } function handleGroupCreate(deps) { const { createController } = deps; return async (name, options) => { const controller = await createController(options.url, options.clientId, options.debug); controller.createGroup(name, (success, message, data) => { if (success) { console.log(chalk.green(`Group "${name}" created successfully`)); if (data) console.log('Data:', data); } else { console.error(chalk.red(`Error creating group: ${message}`)); } controller.disconnect(); }); }; } function handleGroupDelete(deps) { const { createController } = deps; return async (id, options) => { const controller = await createController(options.url, options.clientId, options.debug); controller.deleteGroup(id, (success, message) => { if (success) { console.log(chalk.green(`Group ${id} deleted successfully`)); } else { console.error(chalk.red(`Error deleting group: ${message}`)); } controller.disconnect(); }); }; } function handleGroupAdd(deps) { const { createController } = deps; return async (groupId, nodeId, options) => { const controller = await createController(options.url, options.clientId, options.debug); controller.addToGroup(groupId, nodeId, (success, message) => { if (success) { console.log(chalk.green(`Device ${nodeId} added to group ${groupId}`)); } else { console.error(chalk.red(`Error adding device to group: ${message}`)); } controller.disconnect(); }); }; } function handleGroupRemove(deps) { const { createController } = deps; return async (groupId, nodeId, options) => { const controller = await createController(options.url, options.clientId, options.debug); controller.removeFromGroup(groupId, nodeId, (success, message) => { if (success) { console.log(chalk.green(`Device ${nodeId} removed from group ${groupId}`)); } else { console.error(chalk.red(`Error removing device from group: ${message}`)); } controller.disconnect(); }); }; } export default registerGroup; //# sourceMappingURL=group.js.map