import { pickAuthInput } from './auth.ts'
import { airtableRequest } from './client.ts'
import { mapTable } from './models.ts'
import type { AirtableAuthInput, AirtableTableSummary } from './types.ts'
import { requireRecord, requireString } from './types.ts'
export type ListTablesInput = AirtableAuthInput & {
/** Base id (`app…`). */
baseId: string
}
export type ListTablesResult = {
items: Array<AirtableTableSummary>
}
/**
* List tables in an Airtable base (schema). Needs `schema.bases:read`.
* @example
* import listTables from 'kody:@kody/airtable/list-tables'
* const { items } = await listTables({ baseId: 'appXXXXXXXXXXXXXX' })
*/
export async function listTables(input: ListTablesInput): Promise<ListTablesResult> {
const baseId = requireString(input.baseId, 'baseId')
const result = await airtableRequest<{ tables?: Array<unknown> }>({
...input,
operation: 'tables.read',
path: `/meta/bases/${encodeURIComponent(baseId)}/tables`,
})
const body = result.data && typeof result.data === 'object' ? result.data : {}
return {
items: (Array.isArray(body.tables) ? body.tables : []).map(mapTable),
}
}
/**
* List tables in an Airtable base (schema).
* @example
* import listTables from 'kody:@kody/airtable/list-tables'
* const result = await listTables({ baseId: 'appXXXXXXXXXXXXXX' })
*/
export default async function listTablesEntrypoint(
params: Partial<ListTablesInput> & Record<string, unknown> = {},
) {
const input = requireRecord(params, 'list-tables')
return listTables({
baseId: requireString(input.baseId, 'baseId'),
...pickAuthInput(input),
})
}