SPB Git forge

spb/rareindex

Public
54commits 1branches 0releases
7.1 MBsize
maindefault branch
10 days agolast push
TypeScript 61.9% HTML 37.2% SQL 0.7%
1.9 KB · 35 lines typescript
Raw Blame History
1/**2 * Live smoke test for the official-API connectors: real router + crawl context, probe mode, limit 5.3 * Usage: pnpm tsx connectors/api/_lib/smoke.ts [scryfall|pokemontcg|ygoprodeck]4 */5import { createCrawlContext, createRouter, loadConnector } from '@rareindex/connectors';6import { childLogger } from '@rareindex/shared';78const ids = process.argv.slice(2).length ? process.argv.slice(2) : ['scryfall', 'pokemontcg', 'ygoprodeck'];9const router = createRouter({});10for (const id of ids) {11  const started = Date.now();12  const connector = await loadConnector(id);13  const ctx = createCrawlContext({ router, meta: connector.meta, options: { mode: 'probe', limit: 5, ...(id === 'pokemontcg' ? { seeds: ['base1'] } : {}) }, log: childLogger({ connector: id, level: 'warn' }) });14  let raws = 0;15  let normalized = 0;16  let firstPrinted = false;17  for await (const raw of connector.crawl(ctx)) {18    raws++;19    const out = await connector.normalize({ ...raw, externalId: raw.externalId ?? null, fetchedAt: raw.fetchedAt ?? new Date() });20    normalized += out.length;21    if (!firstPrinted) {22      firstPrinted = true;23      for (const r of out.slice(0, 3)) {24        const summary = r.kind === 'price_observation' ? `${r.priceKind} ${r.price} ${r.currency} @ ${r.observationDate.toISOString().slice(0, 10)}` : r.kind === 'catalog_item' ? `variant=${r.attributes.variant ?? '-'} ids=${JSON.stringify(r.attributes.identifiers)}` : '';25        console.log(`  [${id}] ${r.kind}: ${'rawTitle' in r ? r.rawTitle : ''} → ${summary}`);26      }27    }28  }29  if (id === 'scryfall') {30    const looked = await connector.lookup?.('https://scryfall.com/card/lea/232/black-lotus', ctx);31    console.log(`  [${id}] lookup(black lotus) → ${looked?.length ?? 0} raw record(s)`);32  }33  console.log(`[${id}] raw=${raws} normalized=${normalized} engineStats=${JSON.stringify(ctx.engineStats)} anomalies=${ctx.anomalies.length} ms=${Date.now() - started}`);34}35