import { pickAuthInput } from './auth.ts' import { airtableRequest } from './client.ts' import { mapBase } from './models.ts' import type { AirtableAuthInput, AirtableBaseSummary, AirtablePageInfo } from './types.ts' import { compactRecord, optionalString, requireRecord } from './types.ts' export type ListBasesInput = AirtableAuthInput & { offset?: string } export type ListBasesResult = { items: Array pageInfo: AirtablePageInfo } /** * List Airtable bases the token can access. Needs `schema.bases:read`. * @example * import listBases from 'kody:@kody/airtable/list-bases' * const { items } = await listBases() */ export async function listBases(input: ListBasesInput = {}): Promise { const result = await airtableRequest<{ bases?: Array }>({ ...input, operation: 'bases.read', path: '/meta/bases', query: compactRecord({ offset: optionalString(input.offset, 'offset'), }), }) const body = result.data && typeof result.data === 'object' ? result.data : {} return { items: (Array.isArray(body.bases) ? body.bases : []).map(mapBase), pageInfo: result.pageInfo, } } /** * List Airtable bases the token can access. * @example * import listBases from 'kody:@kody/airtable/list-bases' * const result = await listBases() */ export default async function listBasesEntrypoint( params: ListBasesInput & Record = {}, ) { const input = requireRecord(params, 'list-bases') return listBases({ offset: optionalString(input.offset, 'offset'), ...pickAuthInput(input), }) }