TypeScript 61.9%
HTML 37.2%
SQL 0.7%
1import { createRouter, createCrawlContext, getConnectorMeta } from '@rareindex/connectors';2import { saveFixture } from '@rareindex/connectors/testing';3import createConnector from './index.js';45const save = process.argv.includes('--save');6const meta = getConnectorMeta('aucfree');7const connector = createConnector(meta);8const router = createRouter({ firecrawlApiKey: process.env.FIRECRAWL_API_KEY, scrapflyApiKey: process.env.SCRAPFLY_API_KEY });9const ctx = createCrawlContext({ router, meta, options: { mode: 'probe', limit: 2, categories: ['pokemon', 'gundam'] } });10let i = 0;11for await (const raw of connector.crawl(ctx)) {12 const out = await connector.normalize({ ...raw, externalId: raw.externalId ?? null, fetchedAt: raw.fetchedAt ?? new Date() });13 console.log(`raw ${raw.externalId} (${raw.engine}) → ${out.length} sales`);14 for (const r of out.slice(0, 3)) console.log(' ', JSON.stringify(r).slice(0, 360));15 if (save && i < 2) saveFixture('aucfree', i === 0 ? 'pokemon-psa10-page1' : 'seed-page-2', { 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'], requiredFields: ['saleDate', 'price', 'currency'] }, note: 'Captured live via Firecrawl from aucfree.com' });16 i++;17}18console.log('engineStats', ctx.engineStats, 'anomalies', ctx.anomalies);19