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%
3.3 KB

# 401 Games connector (401-games)

  • Source: https://store.401games.ca · dealer · CA · CAD · Shopify storefront
  • Acquisition: public /collections/<handle>/products.json?limit=250&page=N (shared ShopifyStoreConnector adapter wrapped by MarketPinnedShopifyConnector, which adds a localization=CA cookie so Shopify Markets never geo-converts prices; no store-specific code)
  • Records: listing (asking prices, one per variant; out-of-stock variants → ended)
  • Refresh: every 12 h (ACTIVE→NORMAL boundary, large catalogue) · history: none (listings only)

Canada's largest TCG/board-game retailer (Toronto). Public Shopify storefront with one umbrella collection per game plus sports and non-sport cards.

# Collections → taxonomy

collection handle category brand / franchise / series
all-magic-the-gathering magic_the_gathering Magic: The Gathering
all-pokemon pokemon Pokémon
all-yugioh yugioh Yu-Gi-Oh!
all-one-piece-card-game one_piece_card_game One Piece
all-disney-lorcana disney_lorcana Disney Lorcana
all-weiss-schwarz weiss_schwarz Weiß Schwarz
all-digimon-card-game digimon_tcg Digimon
all-dragon-ball-super dragon_ball_tcg Dragon Ball Super
all-star-wars-unlimited star_wars_tcg Star Wars Unlimited
all-cardfight-vanguard other_tcg Cardfight!! Vanguard
all-riftbound-league-of-legends-tcg other_tcg Riftbound
all-gundam-card-game other_tcg Gundam Card Game
all-sports-cards sports_cards —
all-non-sports-trading-cards non_sport_cards —
all-board-games board_games —

Rules (first match wins, applied to "title | product_type | tags | collection"):

  • ^(?=[\s\S]*\bhockey\b)[\s\S]*\| all-sports-cards$ → hockey_cards
  • ^(?=[\s\S]*\bbaseball\b)[\s\S]*\| all-sports-cards$ → baseball_cards
  • ^(?=[\s\S]*\bbasketball\b)[\s\S]*\| all-sports-cards$ → basketball_cards
  • ^(?=[\s\S]*\bfootball\b)[\s\S]*\| all-sports-cards$ → football_cards
  • ^(?=[\s\S]*\b(soccer|premier league|uefa|fifa)\b)[\s\S]*\| all-sports-cards$ → soccer_cards
  • ^(?=[\s\S]*\b(formula 1|formula one|\bf1\b)\b)[\s\S]*\| all-sports-cards$ → f1_cards

Excluded (regex): gift card|sleeves?|deck box|binder|playmat|toploader|top loader|storage box|dice|tokens? only|bundle of|mystery|buylist|submission|event ticket|\bentry\b|tournament|store credit|pre-?release event|supplies|card savers?|\brepack|bulk lot|\blot of\b|\bpaints?\b|primer|brushes|online (pack|code)|digital code|code card|unused digital|ptcgo|ptcg live

# Access & compliance

See accessNotes in meta.json: robots.txt verified 2026-09-08 (standard Shopify rules, products.json paths allowed), honest UA, 1 req / 1.5 s, listings only, no personal data. Not fetched: supplies/dice/modelling collections, event tickets, staff-loyalty and "acorn" migration collections, the 0.00-priced Easy-Buy buylist placeholders (dropped: no price).

# Fixtures & tests

data/fixtures/401-games/ — live captures (pnpm tsx connectors/api/_g3-shops-na-lib/capture.ts 401-games), trimmed single-product payloads incl. a sold-out variant and a graded item. pnpm vitest run connectors/api/401-games · live probe: pnpm tsx connectors/api/_g3-shops-na-lib/probe.ts 401-games.