feat(sources): Genshin's Miliastra Pass windows from Fandom

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Lucas Winther
2026-10-16 06:20:22 +02:00
co-authored by Claude Opus 5.5
parent 0a4be4e339
commit 9f8150fda7
7 changed files with 76 additions and 6 deletions
+21
View File
@@ -137,6 +137,27 @@ const SOURCES: SourceSpec[] = [
url: "https://honkai-star-rail.fandom.com/api.php?action=parse&page=Nameless_Honor&prop=text&formatversion=2&format=json",
parserId: "fandomtable",
},
{
id: "genshin-fandom-miliastra-pass",
game: "genshin",
// The API, as every Fandom source (AGENTS.md § Fandom). This host's
// robots.txt is the one a person recorded for `genshin-fandom-events`
// above (standard Fandom file: `Allow: /api.php?action=` for
// `User-agent: *`, no `Disallow: /` for `*`). Re-checked with the runner's
// own client (`RobotsCache`, the real User-Agent) on 2026-10-16: it
// answered 403 (the interstitial challenge), so that person-recorded
// reading and the standing `--assume-robots-on-403` decision
// (AGENTS.md § Scraping conduct) are what cover this source, as they do
// the other Fandom sources. The API path itself answered 200 to the real
// User-Agent for the single fixture fetch; no browser-shaped headers.
//
// A pass history, not an event page: the same `Name | Start | End |
// Version` table as Nameless Honor, day precision, one row per run. Read by
// the `fandomtable` parser; the title (`Miliastra Pass: <name>`) comes from
// `PASS_SOURCES` in `parsers/fandomTable.ts`, keyed by this id.
url: "https://genshin-impact.fandom.com/api.php?action=parse&page=Miliastra_Pass&prop=text&formatversion=2&format=json",
parserId: "fandomtable",
},
{
id: "r1999-fandom-events",
game: "r1999",
+6
View File
@@ -52,6 +52,12 @@ export const PASS_SOURCES: Readonly<Record<string, PassSource>> = {
pass: "Nameless Honor",
title: () => "Nameless Honor",
},
"genshin-fandom-miliastra-pass": {
// The Name cell is the run's own chronicle name (`Silvery Moonlight
// Chronicle`), a new one each version, so the title carries it.
pass: "Miliastra Pass",
title: (rowName) => `Miliastra Pass: ${rowName}`,
},
};
/** The columns a pass table is recognised by, as normalised heading text. */