import { machinesAppShow, machinesAppsList, resolveOrgSlug, summarizeApp } from './core.ts'
import type { FlyAppsInput } from './types.ts'
/**
* List Fly apps for an organization via the Machines REST API (`org_slug`, default `personal`).
* Pass `appName` to fetch a single app instead.
*
* @param params.organizationSlug - Fly org slug (default `personal`).
* @param params.appName - Optional app name to fetch one app.
* @returns Organization metadata plus summarized app list and count, or `{ app, raw }` for one app.
*
* @example
* import apps from 'kody:@kentcdodds/fly/apps'
* const result = await apps({ organizationSlug: 'personal' })
* // => { 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 = {}) {
const organizationSlug = resolveOrgSlug(params)
const result = await machinesAppsList(params)
const apps = result.apps.map(summarizeApp)
return {
organization: {
slug: organizationSlug,
...(result.organization || {}),
},
count: apps.length,
totalApps: result.totalApps,
apps,
}
}
export async function getApp(params = {}) {
const appName = String(params.appName || params.app || params.name || '').trim()
if (!appName) throw new Error('appName is required.')
const app = await machinesAppShow(appName)
return { app: summarizeApp(app), raw: app }
}