alwaysai
Version:
The alwaysAI command-line interface (CLI)
64 lines (58 loc) • 1.77 kB
text/typescript
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' };
}