import { machinesAppShow, machinesAppsList, summarizeApp } from './fly-core.ts'
import type { FlyAppsInput } from './types.ts'
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 }
}
/**
* 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.
* @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)
}