import { machinesAppShow, machinesAppsList, summarizeApp } from './fly-core.ts' import type { FlyAppsInput } from './types.ts' /** * List Fly apps for an organization via the Machines REST API. * When `organizationSlug` is omitted, uses the only org visible to the token. * @returns Organization metadata plus summarized app list and count. * @param params - Organization/app filters for this Fly helper. * @example * import apps from 'kody:@kody/fly/apps' * const result = await apps({ organizationSlug: 'my-org' }) * // => { organization: {...}, count: 3, apps: [...] } */ export default async function apps(params: FlyAppsInput = {}) { const appName = String(params.appName || params.app || params.name || '').trim() if (appName) { return await getApp(params) } return await listApps(params) } export async function listApps(params: FlyAppsInput = {}) { const result = await machinesAppsList(params) const apps = result.apps.map(summarizeApp) return { organization: { slug: result.organization.slug, ...(result.organization || {}), }, count: apps.length, totalApps: result.totalApps, apps, } } export async function getApp(params: FlyAppsInput = {}) { const appName = String(params.appName || params.app || params.name || '').trim() if (!appName) throw new Error('appName is required.') const app = await machinesAppShow(appName, params) return { app: summarizeApp(app), raw: app } }