import { listApps } from './apps.ts' import { listMachines } from './machines.ts' import type { FlyAppMachinesInput } from './types.ts' /** * List machines for one Fly app resolved by `appName` or `appId`. * @param params.appName - Fly app name when `appId` is omitted. * @returns Matched app metadata plus machine list for that app. * @example * import appMachines from 'kody:@kody/fly/app-machines' * const result = await appMachines({ appName: 'my-app' }) * // => { app: { id, name }, count: 2, machines: [...] } */ export default async function appMachines(params: FlyAppMachinesInput = {}) { const appName = String(params.appName || params.app || '').trim() if (!appName && !params.appId) throw new Error('appName or appId is required.') let resolvedName = appName let app: any = null if (!resolvedName && params.appId) { const apps = await listApps(params) app = apps.apps.find((candidate: any) => candidate.id === params.appId) if (!app) throw new Error('Could not find Fly app id: ' + params.appId) resolvedName = app.name } else if (resolvedName) { try { const apps = await listApps(params) app = apps.apps.find( (candidate: any) => candidate.name === resolvedName || candidate.id === resolvedName, ) if (app) resolvedName = app.name } catch { app = { id: params.appId || null, name: resolvedName } } } const machines = await listMachines({ ...params, appName: resolvedName, appId: undefined }) return { app: app || { id: params.appId || null, name: resolvedName }, ...machines, } }