/** Live smoke: pnpm tsx connectors/firecrawl/phillips-watches/_smoke.ts [saleNumber…] (CAPTURE=1 to save fixtures) */ import { createRouter, createCrawlContext, getConnectorMeta } from '@rareindex/connectors'; import { saveFixture } from '@rareindex/connectors/testing'; import { env } from '@rareindex/shared'; import createConnector from './index.js'; const e = env(); const meta = getConnectorMeta('phillips-watches'); const connector = createConnector(meta); const router = createRouter({ firecrawlApiKey: e.FIRECRAWL_API_KEY, scrapflyApiKey: e.SCRAPFLY_API_KEY }); const seeds = process.argv.slice(2); const ctx = createCrawlContext({ router, meta, options: { mode: 'probe', limit: Number(process.env.LIMIT ?? 1), seeds: seeds.length ? seeds : undefined } }); for await (const raw of connector.crawl(ctx)) { const recs = await connector.normalize({ ...raw, externalId: raw.externalId ?? null, fetchedAt: raw.fetchedAt ?? new Date() }); const p = raw.payload as { saleNumber: string; title: string; endDate: string | null; lotCount: number | null }; const sales = recs.filter((r) => r.kind === 'sale'); console.log(`\n# ${p.saleNumber} ${p.title} (${p.endDate}) — ${p.lotCount} lots → ${recs.length} records (${sales.length} sales)`); for (const r of recs.slice(0, 3)) console.log(JSON.stringify(r).slice(0, 700)); if (process.env.CAPTURE) saveFixture('phillips-watches', p.saleNumber, { raw: { url: raw.url, externalId: raw.externalId ?? null, kind: raw.kind, engine: raw.engine, fetchedAt: raw.fetchedAt ?? new Date(), payload: raw.payload }, expect: { minCount: 10, kinds: ['sale', 'auction_lot'] }, note: `captured live from ${raw.url}` }); } console.log('\nengine stats', ctx.engineStats, 'anomalies', ctx.anomalies);