UNPKG

alwaysai

Version:

The alwaysAI command-line interface (CLI)

64 lines (58 loc) 1.77 kB
import { CliUsageError } from '@alwaysai/alwayscli'; import * as chalk from 'chalk'; import { Choice } from 'prompts'; import { RequiredWithYesMessage, promptForInput } from '../../util'; import { deviceAddComponent } from './device-add-component'; import { CliRpcClient, CliAuthenticationClient, getDeviceByUuid, AaiDevice } from '../../infrastructure'; export async function deviceSelectComponent(props: { yes: boolean; deviceId?: string; }): Promise<{ device: AaiDevice; new: boolean }> { const { yes, deviceId } = props; if (deviceId) { const device = await getDeviceByUuid({ uuid: deviceId }); return { device, new: false }; } if (yes && !deviceId) { throw new CliUsageError(RequiredWithYesMessage('deviceId')); } const { username } = await CliAuthenticationClient().getInfo(); const userDevices = await CliRpcClient().getUserDevices({ user_name: username }); const choices: Choice[] = [ { title: chalk.green.bold('Add a new device'), value: 'new' } ]; userDevices.forEach((device, index) => { choices.push({ title: `${device.friendly_name} (${device.mode})`, value: `${index}` }); }); const choice = await promptForInput({ purpose: 'to select a target device', questions: [ { type: 'select', name: 'targetDevice', message: 'select a target device', initial: 0, choices } ] }); let selectedDevice: AaiDevice; if (choice.targetDevice === 'new') { const device = await deviceAddComponent({ yes }); selectedDevice = device; } else { const device = userDevices[choice.targetDevice]; selectedDevice = device as AaiDevice; } return { device: selectedDevice, new: choice.targetDevice === 'new' }; }