TypeScript 61.9%
HTML 37.2%
SQL 0.7%
1/**2 * Live fixture capture for the gcd connector (real API responses, trimmed).3 * Usage: pnpm tsx connectors/api/gcd/_capture.ts [seriesId...]4 */5import { createCrawlContext, createRouter } from '@rareindex/connectors';6import { saveFixture } from '@rareindex/connectors/testing';7import { childLogger } from '@rareindex/shared';8import { localMeta } from '../_lib/local-meta.js';9import { useGroupDomains } from '../_g6-comics-toys-games-lib/capture-env.js';10import meta from './meta.json' with { type: 'json' };11import createConnector, { type Payload } from './index.js';1213useGroupDomains();14const connector = createConnector(localMeta(meta));15const router = createRouter({});16const ctx = createCrawlContext({ router, meta: connector.meta, options: { mode: 'probe', limit: 2 }, log: childLogger({ connector: 'gcd', level: 'warn' }) });1718// 1. First page of the series walk (probe: 2 series, issues trimmed to 3 each)19let n = 0;20for await (const raw of connector.crawl(ctx)) {21 const p = raw.payload as Payload;22 p.issues = p.issues.slice(0, 3);23 saveFixture('gcd', `series-page1-${n++}-${p.series.id}`, {24 raw: { url: raw.url, externalId: raw.externalId ?? null, kind: raw.kind, engine: raw.engine, payload: raw.payload, fetchedAt: raw.fetchedAt ?? new Date() },25 expect: { minCount: 1, kinds: ['catalog_item'], requiredFields: ['attributes.identifiers.comics_org_id', 'attributes.set', 'attributes.brand'] },26 note: `Live capture of https://www.comics.org/api/series/?format=json&page=1 (series ${p.series.id}) + /api/issue/<id>/ details, trimmed to 3 issues.`,27 });28}2930// 2. Lookups of well-known series (ids passed on the command line; defaults probe a few candidates)31const ids = process.argv.slice(2).length ? process.argv.slice(2) : ['1571', '2001', '12345'];32for (const id of ids) {33 const recs = await connector.lookup(`https://www.comics.org/series/${id}/`, ctx);34 for (const raw of recs) {35 const p = raw.payload as Payload;36 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}`);37 p.issues = p.issues.slice(0, 4);38 saveFixture('gcd', `series-lookup-${id}`, {39 raw: { url: raw.url, externalId: raw.externalId ?? null, kind: raw.kind, engine: raw.engine, payload: raw.payload, fetchedAt: raw.fetchedAt ?? new Date() },40 expect: { minCount: 1, kinds: ['catalog_item'], requiredFields: ['attributes.identifiers.comics_org_id', 'attributes.number', 'attributes.year'] },41 note: `Live capture of https://www.comics.org/api/series/${id}/?format=json + first issues (trimmed to 4).`,42 });43 }44}45console.log('gcd fixtures written; engineStats=', JSON.stringify(ctx.engineStats), 'anomalies=', ctx.anomalies);46