feat: v2.5.1 — domain sync, spotlight fix, embed providers, info IDs, latest-episode checker, full docs pass

- Sync mirror domains with official hub (anikoto.site): replace dead
  anikoto.se with official anikototv.se (dataUrl.js, render.yaml, README)
- Fix redesigned #hotest spotlight carousel selectors in homeInfo and
  spotlight extractors (dual-selector fallback for old layout)
- New GET /api/stream/embeds: iframe-ready Megavid/AniXo/MegaPlay URLs
  that bypass Cloudflare; ?slug= auto-resolves MAL/AniList IDs (cached),
  or pass ?mal=/?anilist= directly with zero scraping
- GET /api/info now returns externalIds { animeId, malId, anilistId }
  for direct feed into /api/stream/embeds (best-effort, 60min cache)
- New GET /api/episodes/latest?slug=: newest-episode checker for bot
  polling — latest episode + counts only (10min cache), registered
  before /episodes/:id so the literal path wins
- Top rankings ?sort=day|week|month verified already supported (docs)
- Full repo-style documentation on all new modules (box headers, FEATURE
  markers, NOTE/TIP inline notes, JSDoc, footers)
- Diagnostic sweep: all counts synced to 40 endpoints / 30 handlers /
  29 scrapers, stale badges and sample responses fixed, render.yaml EOF,
  Dockerfile node:18-alpine (EOL) -> node:22-alpine
- Tests: 38 passed / 0 failed / 2 optional skips; 77 JS files syntax-OK
This commit is contained in:
Shinei Nouzen
2026-10-13 07:23:04 +05:30
parent 1d71a1e557
commit 0f2258a8d5
23 changed files with 870 additions and 78 deletions
+12 -7
View File
@@ -67,13 +67,13 @@
* │ │ │ │ │
* │ │ ▼ │ │
* │ │ ┌──────────────────────────────────────────────────────────┐ │ │
* │ │ │ CONTROLLER LAYER (28 controllers) │ │ │
* │ │ │ CONTROLLER LAYER (30 controllers) │ │ │
* │ │ │ Validation · Parameter parsing · Response formatting │ │ │
* │ │ └──────────────────────┬───────────────────────────────────┘ │ │
* │ │ │ │ │
* │ │ ▼ │ │
* │ │ ┌──────────────────────────────────────────────────────────┐ │ │
* │ │ │ EXTRACTOR / SCRAPER LAYER (28 extractors) │ │ │
* │ │ │ EXTRACTOR / SCRAPER LAYER (29 extractors) │ │ │
* │ │ │ HTML fetching · Cheerio parsing · Data transformation │ │ │
* │ │ └──────────────────────┬───────────────────────────────────┘ │ │
* │ │ │ │ │
@@ -180,15 +180,18 @@
* ├── src/
* │ ├── configs/
* │ │ ├── header.config.js # Default HTTP headers for upstream requests
* │ │ └── ids.config.js # Genre / Type / Status numeric ID mappings
* │ ├── controllers/ # 28 route handlers (one per endpoint)
* │ │ ├── ids.config.js # Genre / Type / Status numeric ID mappings
* │ │ └── embedProviders.config.js # Direct embed provider registry (Megavid/AniXo/MegaPlay)
* │ ├── controllers/ # 30 route handlers (one per endpoint)
* │ │ ├── homeInfo.controller.js
* │ │ ├── animeInfo.controller.js
* │ │ ├── search.controller.js
* │ │ ├── episodeList.controller.js
* │ │ ├── episodeLatest.controller.js
* │ │ ├── episodeListAjax.controller.js
* │ │ ├── streamInfo.controller.js
* │ │ ├── streamResolver.controller.js
* │ │ ├── embedProviders.controller.js
* │ │ ├── schedule.controller.js
* │ │ ├── spotlight.controller.js
* │ │ ├── trending.controller.js
@@ -210,7 +213,7 @@
* │ │ ├── recentlyUpdatedTabs.controller.js
* │ │ ├── completedAnime.controller.js
* │ │ └── category.controller.js
* │ ├── extractors/ # 28 HTML scrapers (one per data source)
* │ ├── extractors/ # 29 HTML scrapers (one per data source)
* │ │ ├── homeInfo.extractor.js
* │ │ ├── animeInfo.extractor.js
* │ │ ├── search.extractor.js
@@ -218,6 +221,7 @@
* │ │ ├── episodeListAjax.extractor.js
* │ │ ├── streamInfo.extractor.js
* │ │ ├── streamResolver.extractor.js
* │ │ ├── embedProviders.extractor.js
* │ │ ├── schedule.extractor.js
* │ │ ├── spotlight.extractor.js
* │ │ ├── trending.extractor.js
@@ -308,7 +312,7 @@
* └────────────────────────────────────────────────────────────────────────┘
*
* ┌────────────────────────────────────────────────────────────────────────┐
* │ Extractors (28 scrapers) │
* │ Extractors (29 scrapers) │
* ├────────────────────────────────────────────────────────────────────────┤
* │ One extractor per data source on the target site. Responsibilities: │
* │ • Build the upstream URL (via mirror.helper) │
@@ -861,7 +865,8 @@
* │ Search & Filter │ search, filter, azList, category │
* │ Anime Detail │ animeInfo, watchPage, status │
* │ Episode & Stream │ episodeList, episodeListAjax, │
* │ │ streamInfo, streamResolver, download │
* │ │ streamInfo, streamResolver, download,│
* │ │ embedProviders │
* │ Lists │ newRelease, trendingSidebar, │
* │ │ topAnimeRankings, recentlyUpdated, │
* │ │ completedAnime, upcomingAnime │