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 } /** * 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 { const baseId = requireString(input.baseId, 'baseId') const result = await airtableRequest<{ tables?: Array }>({ ...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 & Record = {}, ) { const input = requireRecord(params, 'list-tables') return listTables({ baseId: requireString(input.baseId, 'baseId'), ...pickAuthInput(input), }) }