TypeScript 61.9%
HTML 37.2%
SQL 0.7%
1import type { ConnectorMeta, CrawlContext } from '@rareindex/connectors';2import type { ExtractionResult } from '@rareindex/shared';3import { goauctionPageUrl, parseGoauctionCalendar, parseGoauctionLots, type GoauctionHouse } from '../_g8-auctions-eu-apac-lib/goauction-platform.js';4import { SaleResultsConnector, type HouseConfig, type ParsedSalePage, type SaleRef } from '../_g8-auctions-eu-apac-lib/sale-results.js';56/**7 * Dominic Winter Auctioneers (Cirencester — printed books, maps, documents, photographs, Ornithology) — goauction8 * platform with capitalised routes: /auction-results/ calendar → /Auction/Search?au=<id>&sd=2&pn=N&g=1 grid9 * (48 lots per page, "Sold for £480").10 */11const HOUSE: GoauctionHouse = { base: 'https://www.dominicwinter.co.uk', currency: 'GBP', listStyle: 'search' };1213export class DominicWinterConnector extends SaleResultsConnector {14 readonly version = '1.0.0';15 readonly house: HouseConfig = { houseName: 'Dominic Winter Auctioneers', defaultCurrency: 'GBP', location: 'Cirencester, United Kingdom', idKey: 'dominic_winter_lot', premiumIncluded: null, fallbackSlug: 'books', minIntervalMs: 2500, maxPagesPerSale: 25 };16 protected override minIntervalMs = 2500;1718 async listSales(ctx: CrawlContext): Promise<SaleRef[]> {19 const url = String(this.meta.config.resultsUrl ?? `${HOUSE.base}/auction-results/`);20 await this.throttle(url);21 const res = await ctx.fetch(url, { engines: ['api'], responseType: 'text', minQuality: 0, timeoutMs: 60_000 });22 if (!res.success || !res.html) {23 ctx.anomaly('past_list_failed', `${url}: ${res.error ?? res.httpStatus}`);24 return [];25 }26 return parseGoauctionCalendar(res.html, HOUSE);27 }2829 salePageUrl(sale: SaleRef, page: number): string {30 return goauctionPageUrl(sale, page, HOUSE);31 }3233 parseSalePage(res: ExtractionResult, sale: SaleRef): ParsedSalePage | null {34 return res.html ? parseGoauctionLots(res.html, sale, HOUSE) : null;35 }36}3738export default function createConnector(meta: ConnectorMeta) {39 return new DominicWinterConnector(meta);40}41