UNPKG

alwaysai

Version:

The alwaysAI command-line interface (CLI)

71 lines (63 loc) 2 kB
import { CliTerseError } from '@alwaysai/alwayscli'; import { RpcProject } from '@alwaysai/cloud-api'; import { PLEASE_REPORT_THIS_ERROR_MESSAGE } from '../../constants'; import { DeviceMode, CliRpcClient, AaiDevice } from '../../infrastructure'; import { logger } from '../../util'; import { getUpgradeUrl } from './check-for-project-id'; async function checkDeviceLimit(deviceMode: DeviceMode, project: RpcProject) { const teamLimits = await CliRpcClient().checkTeamLimits({ team_id: project.team_id }); if (!teamLimits.enforce_limits) { return; } let deviceLimits; switch (deviceMode) { case 'development': { deviceLimits = teamLimits.dev_devices; break; } case 'production': { deviceLimits = teamLimits.prod_devices; break; } default: logger.error(`Invalid device mode (${deviceMode}).`); throw new CliTerseError( `Invalid device mode (${deviceMode}). ${PLEASE_REPORT_THIS_ERROR_MESSAGE}` ); } const devicesUsed = deviceLimits.used; const devicesLimit = deviceLimits.limit; if (devicesLimit !== null && devicesUsed >= devicesLimit) { throw new CliTerseError( `You've reached your limit of ${deviceMode} devices for this project. Please upgrade to continue: ${await getUpgradeUrl()}` ); } } export async function addDeviceToProject(props: { device: AaiDevice; projectId: string; }) { const { device, projectId } = props; const client = CliRpcClient(); const project = await client.getProjectByUUID({ uuid: projectId }); const projectDevices = await client.getProjectDevices({ project_id: project.id }); let deviceInProject = false; for (const d of projectDevices) { if (d.id === device.id) { deviceInProject = true; break; } } if (deviceInProject === true) { return; } await checkDeviceLimit(device.mode as DeviceMode, project); await client.addProjectDevice({ device_id: device.id, project_id: project.id }); }