/** * Live fixture capture for the gcd connector (real API responses, trimmed). * Usage: pnpm tsx connectors/api/gcd/_capture.ts [seriesId...] */ import { createCrawlContext, createRouter } from '@rareindex/connectors'; import { saveFixture } from '@rareindex/connectors/testing'; import { childLogger } from '@rareindex/shared'; import { localMeta } from '../_lib/local-meta.js'; import { useGroupDomains } from '../_g6-comics-toys-games-lib/capture-env.js'; import meta from './meta.json' with { type: 'json' }; import createConnector, { type Payload } from './index.js'; useGroupDomains(); const connector = createConnector(localMeta(meta)); const router = createRouter({}); const ctx = createCrawlContext({ router, meta: connector.meta, options: { mode: 'probe', limit: 2 }, log: childLogger({ connector: 'gcd', level: 'warn' }) }); // 1. First page of the series walk (probe: 2 series, issues trimmed to 3 each) let n = 0; for await (const raw of connector.crawl(ctx)) { const p = raw.payload as Payload; p.issues = p.issues.slice(0, 3); saveFixture('gcd', `series-page1-${n++}-${p.series.id}`, { raw: { url: raw.url, externalId: raw.externalId ?? null, kind: raw.kind, engine: raw.engine, payload: raw.payload, fetchedAt: raw.fetchedAt ?? new Date() }, expect: { minCount: 1, kinds: ['catalog_item'], requiredFields: ['attributes.identifiers.comics_org_id', 'attributes.set', 'attributes.brand'] }, note: `Live capture of https://www.comics.org/api/series/?format=json&page=1 (series ${p.series.id}) + /api/issue// details, trimmed to 3 issues.`, }); } // 2. Lookups of well-known series (ids passed on the command line; defaults probe a few candidates) const ids = process.argv.slice(2).length ? process.argv.slice(2) : ['1571', '2001', '12345']; for (const id of ids) { const recs = await connector.lookup(`https://www.comics.org/series/${id}/`, ctx); for (const raw of recs) { const p = raw.payload as Payload; console.log(`series ${id}: ${p.series.name} (${p.series.year_began}) publisher=${p.publisher.name} issues=${p.issues.length} first=#${p.issues[0]?.number} key_date=${p.issues[0]?.key_date} price=${p.issues[0]?.price} barcode=${p.issues[0]?.barcode}`); p.issues = p.issues.slice(0, 4); saveFixture('gcd', `series-lookup-${id}`, { raw: { url: raw.url, externalId: raw.externalId ?? null, kind: raw.kind, engine: raw.engine, payload: raw.payload, fetchedAt: raw.fetchedAt ?? new Date() }, expect: { minCount: 1, kinds: ['catalog_item'], requiredFields: ['attributes.identifiers.comics_org_id', 'attributes.number', 'attributes.year'] }, note: `Live capture of https://www.comics.org/api/series/${id}/?format=json + first issues (trimmed to 4).`, }); } } console.log('gcd fixtures written; engineStats=', JSON.stringify(ctx.engineStats), 'anomalies=', ctx.anomalies);