/** * Live smoke test: renders one Goldin "Sold Items" page per selected seed through Scrapfly and prints * normalised sales. Usage: SCRAPFLY_API_KEY=… pnpm tsx connectors/scrapfly/goldin/_smoke.ts [categorySlug…] * Costs ~6 Scrapfly credits per page. */ import { createCrawlContext, createRouter, getConnectorMeta } from '@rareindex/connectors'; import { childLogger } from '@rareindex/shared'; import createConnector from './index.js'; const meta = getConnectorMeta('goldin'); const connector = createConnector(meta); const router = createRouter({ scrapflyApiKey: process.env.SCRAPFLY_API_KEY, firecrawlApiKey: process.env.FIRECRAWL_API_KEY }); const categories = process.argv.slice(2); const ctx = createCrawlContext({ router, meta, options: { mode: 'probe', limit: 10, categories: categories.length ? categories : ['pokemon'] }, log: childLogger({ connector: meta.id, smoke: true }) }); let total = 0; for await (const raw of connector.crawl(ctx)) { const records = await connector.normalize({ ...raw, externalId: raw.externalId ?? null, fetchedAt: raw.fetchedAt ?? new Date() }); total += records.length; const p = raw.payload as { total: number | null; lots: unknown[]; seed: { path: string } }; console.log(`page ${raw.url} → ${p.lots.length} lots (source total ${p.total}) → ${records.length} sales`); for (const r of records.slice(0, 3)) console.log(JSON.stringify(r, null, 1)); } console.log({ totalNormalized: total, engineStats: ctx.engineStats, anomalies: ctx.anomalies });