TypeScript 61.9%
HTML 37.2%
SQL 0.7%
1import { createRouter, createCrawlContext, ConnectorMetaSchema } from '@rareindex/connectors';2import { saveFixture } from '@rareindex/connectors/testing';3import metaJson from './meta.json' with { type: 'json' };4import createConnector from './index.js';56const save = process.argv.includes('--save');7const meta = ConnectorMetaSchema.parse(metaJson);8const connector = createConnector(meta);9const router = createRouter({ firecrawlApiKey: process.env.FIRECRAWL_API_KEY, scrapflyApiKey: process.env.SCRAPFLY_API_KEY });10const ctx = createCrawlContext({ router, meta, options: { mode: 'probe', limit: 4 } });11let i = 0;12for await (const raw of connector.crawl(ctx)) {13 const out = await connector.normalize({ ...raw, externalId: raw.externalId ?? null, fetchedAt: raw.fetchedAt ?? new Date() });14 const sales = out.filter((r) => r.kind === 'sale');15 console.log(`raw ${raw.externalId} (${raw.engine}) → ${out.length} records, ${sales.length} sales`);16 for (const r of sales.slice(0, 2)) console.log(' ', JSON.stringify(r).slice(0, 420));17 if (save && i < 2 && sales.length) saveFixture(meta.id, `item-${(raw.externalId ?? '').replace('item:', '')}`, { raw: { url: raw.url, externalId: raw.externalId ?? null, kind: raw.kind, engine: raw.engine, fetchedAt: raw.fetchedAt ?? new Date(), payload: raw.payload }, expect: { minCount: 2, kinds: ['sale', 'listing'], requiredFields: ['rawTitle', 'attributes.name'] }, note: 'Captured live from winebid.com item page (plain HTTPS)' });18 if (sales.length) i++;19}20console.log('engineStats', ctx.engineStats, 'anomalies', ctx.anomalies);21