/** * @fileoverview LABSTAT observation ingester — the `sync` generator for the * BLS observations mirror. For each surveyed abbreviation it discovers data * files by parsing the survey's `{abbr}.readme`, fetches them, parses the * tab-delimited rows, and yields pages for the framework's runner. * * Checkpoint: ISO 8601 datestamp of the last `Last-Modified` response header * seen (lexicographically monotonic). On a `refresh` run the checkpoint seeds * an early-exit guard — files whose `Last-Modified` predates the checkpoint * are skipped. Cursor: `{abbr}:{fileIndex}:{rowOffset}` — volatile intra-run * resume for interrupted inits. * @module services/bls-observations/ingester */ import type { SyncContext, SyncPage } from '@cyanheads/mcp-ts-core/mirror'; /** * Options passed to the ingester — sourced from server config via the service. */ export interface IngesterOptions { catalogBaseUrl: string; userAgent: string; } /** * Async generator that harvests LABSTAT observation data. Yields pages of * `ObservationRow` records for the framework runner to upsert. Each page * carries a cursor for mid-run resume and an updated checkpoint (the max * `Last-Modified` header seen so far, ISO 8601). * * The framework writes the completion marker (`completedAt`) ONCE, after the * generator returns normally — never per page. The per-page `checkpoint` * advances the stored high-water mark as pages are committed, so an * interrupted init can skip already-fresh files on resume. */ export declare function observationsSync(ctx: SyncContext, opts: IngesterOptions): AsyncGenerator; //# sourceMappingURL=ingester.d.ts.map