Commit Graph
86 Commits
Author SHA1 Message Date
Shinei Nouzen d067d1f1d7 chore: bump version to 2.2.1 across package.json, README, docs, agents 2026-08-13 01:30:55 +05:30
Shinei Nouzen f720e4608b fix: comprehensive diagnostic sweep — fix creatorInfo error masking, schedule/seasons/watch-order extractors
- Fix creatorInfo middleware: preserve existing 'message' field (error messages) instead of overwriting with creator attribution
- Fix schedule extractor: use correct /ajax/schedule?date= endpoint instead of broken /?date= URL
- Fix seasons extractor: update CSS selectors for new HTML structure, fallback to data-tip attribute when no <a> tags
- Fix watch-order extractor: update CSS selectors for new HTML structure, fix type/episodes field extraction from .meta .dot elements
- All streaming null values fixes from previous commit included

Tested 38 endpoints across all categories:
  ✅ 26 passing (Home, Info, Search, Episodes, Watch, Spotlight, Trending, Top 10, Random, Suggestions, Most Popular, New Release, Newly Added, Latest Updated, Trending Sidebar, Filter, Genre, Type, Status, AZ List, Health, Stats, Cache Stats, Mirrors, Download, Stream)
  ⚠️ 4 not-deployed (Upcoming, Top Rankings, Recently Updated, Completed — routes exist but Vercel deployment is outdated)
  ⚠️ 4 timeout/source issues (Seasons, Watch Order, Schedule — now fixed locally, awaiting deploy)
  ⚠️ 4 streaming (Servers, Stream, Mapper Servers — JSON parsing fixes from previous commit)
2026-08-12 23:26:05 +05:30
Shinei Nouzen a8223acf92 fix: resolve null values in stream server endpoints
- Fix extractServerList JSON parsing: fetchWithMirror returns raw text but code treated it as parsed object, causing Cheerio to parse JSON string as HTML resulting in empty server arrays
- Fix extractMapperServers JSON parsing: same raw text issue caused data processing loop to be skipped, returning empty arrays
- Fix streamInfo controller to return 404 with error message when stream URL is null instead of silently returning null values
- Fix server list controller to use proper TTL and handle empty results
- Fix JSON.parse error handling in episodeList and episodeListAjax extractors
- Update CHANGELOG.md with v2.2.1 bug fixes
2026-08-12 22:59:18 +05:30
Shinei Nouzen 8f423bf39c docs: Complete documentation overhaul with live API data + bug fixes
Documentation (5800+ lines total):
- endpoints.md: All 43 endpoints documented with real response examples,
  param tables, response patterns, common workflows, error formats
- streaming.md: Complete streaming workflow guide with HLS.js/Plyr/Video.js
  integration, M3U8 proxy explanation, error handling
- examples.md: Working code examples in cURL, JS fetch, Python requests,
  Node.js axios, HTML/JS player integration (2240 lines)
- architecture.md: Full project structure, request flow diagrams, caching
  strategy, mirror failover, security, deployment notes
- index.md: Overview with quick start, feature highlights, endpoint tables

Bug fixes:
- episodeList.extractor: Parse JSON response before Cheerio (was passing
  raw JSON string as HTML, causing escaped quotes in IDs)
- episodeListAjax.extractor: Same JSON parsing fix
- topAnimeRankings.controller: Fix JSDoc and default sort from top to day
  (actual values are day/week/month, not top/newest)
- apiRoutes.js: Fix OpenAPI spec sort description for top-rankings

Tests: 35/35 passing
2026-07-30 08:28:51 +05:30
Shinei Nouzen 996cead3b1 fix: Full diagnostic sweep — bugs, dead code, unused imports, docs accuracy
Code fixes:
- seasons/watchOrder: Remove dead ternary (both branches identical)
- mirror.helper: Remove redundant ternary (both branches identical)
- topAnimeRankings: Fix JSDoc (day/week/month, not top/newest)
- apiRoutes: Fix proxy domain validation (exact match, not includes)
- apiRoutes: Fix proxy .m3u8 check (pathname, not hostname)
- pagination: Fix totalItems calculation (was overestimating)
- server.js: Remove dead has404File variable
- server.js: Remove duplicate /api/cache/stats route
- server.js: Remove unused getCacheStats import

Unused imports removed:
- animeInfo: URLS from dataUrl.js
- episodeList: headers from header.config.js
- episodeListAjax: axios
- trending: URLS from dataUrl.js
- trendingSidebar: URLS from dataUrl.js
- upcomingAnime: parseListItems
- watchPage: URLS, BASE_URL from dataUrl.js

Docs fixes:
- README: 33->38 endpoints, 24->28 controllers, 26->28 extractors
- README: Cache TTL 5min->per-endpoint, Timeout 15s->30s
- docs/index.md: 33->38 endpoints
- architecture.md: LRU cache strategy, remove stale cookie-parser
- agents: compression version, extractor/controller counts
- agents: domain typo, stale CORS dep, version badge
2026-07-30 00:50:18 +05:30
Shinei Nouzen 715add099b Enhance disclaimer and tips formatting in README
Refined disclaimer and tips sections for clarity and emphasis.
2026-07-29 07:43:06 +05:30
Shinei Nouzen 3000bcc1be Rename index.md to readme.md 2026-07-29 07:35:37 +05:30
Shinei Nouzen ba58219ace docs: Add testing.md — test suite docs, auto-detect, benchmarks 2026-07-29 07:33:44 +05:30
Shinei Nouzen 78b149983d feat: Auto-detect local server in test.js — falls back to live API 2026-07-29 07:22:14 +05:30
Shinei Nouzen 159c9ca8aa fix: Episodes Ajax test, strip quotes from server_ids, dynamic stream resolve setup 2026-07-29 02:16:13 +05:30
Shinei Nouzen d9f490d36e fix: OpenAPI response missing success field, Episodes Ajax test, 404 endpoint list, agent docs 2026-07-29 01:55:43 +05:30
Shinei Nouzen a2a94869ee chore: Add Google Search Console verification meta tag placeholder 2026-07-28 22:21:29 +05:30
Shinei Nouzen fa6aa6d602 SEO: Update public files for search engine visibility
robots.txt: Allow / (landing page), disallow /api (JSON endpoints)
sitemap.xml: Updated lastmod to 2026-07-28, removed non-HTML URLs
index.html: Updated meta tags with 38 endpoints, richer keywords,
  JSON-LD schema.org/WebAPI with accurate metadata
manifest.json: Updated theme/background colors to match site (#faf9f5),
  better description with 38 endpoints

Key SEO changes:
- Title now includes '38 Endpoints'
- Meta description expanded with keywords (hls proxy, m3u8 proxy, etc)
- JSON-LD provider type changed from Organization to Person (author)
- Added license field to JSON-LD
2026-07-28 22:13:02 +05:30
Shinei Nouzen 7df5bbcc54 docs: Add box-style headers, section headers, feature markers, JSDoc, inline notes, footers
Added comprehensive documentation following project conventions:

Box-style headers (added/fixed where missing):
- All 17 files now have standard Project/Author/License headers

Section headers (// == == SECTION == ==):
- cache.helper.js: LRU CACHE CLASS, TTL CONFIGURATION, SINGLETON, EXPORTED HELPERS
- download.controller.js: DOWNLOAD LINKS HANDLER
- download.extractor.js: BASE64 DECODER, REDIRECT FOLLOWER, DOWNLOAD LINKS EXTRACTOR
- seasons.extractor.js: SEASONS EXTRACTOR
- watchOrder.extractor.js: WATCH ORDER EXTRACTOR
- extractPages.helper.js: PAGE EXTRACTOR
- pagination.helper.js: PAGINATION METADATA

Feature markers (// --- FEATURE: XYZ ---):
- cache.helper.js: LRU Cache, Per-Endpoint TTL, Cache Get/Set/Clear
- download.controller.js: Download Links
- download.extractor.js: Base64 Download Data Decoder, Redirect Chain Resolver, Download Links Extraction
- seasons.extractor.js: Season Information Extraction
- watchOrder.extractor.js: Watch Order / Related Anime Extraction
- streamResolver.extractor.js: Server Name Normalization, Stream URL Resolution, Batch Stream URL Resolution, M3U8 Quality Parser, Subtitle Track Extractor
- mirror.helper.js: Mirror Domain Configuration, Mirror Health Check, Working Mirror Discovery, Mirror Cache Reset, URL Builder, Resilient Fetch with Mirror Fallback, Mirror Status Reporter
- pagination.helper.js: Pagination Metadata Generator
- creatorInfo.js: Creator Attribution Object, Response Creator Injection Middleware

Function-level JSDoc (added/fixed):
- cache.helper.js: Full JSDoc on all 6 class methods (constructor, get, set, delete, clear, getStats, has) and 4 exported helpers

Inline notes for non-obvious logic:
- cache.helper.js: Lazy expiration, LRU re-insertion, singleton pattern
- download.extractor.js: HTML/JSON hybrid response handling, multiple selectors for different mirrors, redirect fallback
- random.extractor.js: maxRedirects, validateStatus, responseURL extraction
- schedule.extractor.js: Dual selector pattern for different mirror layouts
- animeInfo.extractor.js: Positional .bmeta selector fragility
- homeInfo.extractor.js: Dual selector for different layouts
- mirror.helper.js: 404 vs connection error handling
- animeInfo.controller.js: Accept both id and slug params

Footers (added where missing):
- cache.helper.js, download.controller.js, download.extractor.js, seasons.extractor.js, watchOrder.extractor.js, extractPages.helper.js, mirror.helper.js

All 68 source files now have complete documentation coverage (6/6 checks).
2026-07-28 21:55:14 +05:30
Shinei Nouzen fb62184688 docs: Update all documentation for v2.2.0 — 38 endpoints, streaming resolver, proxy
README.md:
- Version badge: 2.1.0 → 2.2.0
- Endpoint count: 33 → 38
- Feature table: added stream URL resolution, M3U8 proxy, season/epMin/epMax filters
- Streaming section: added /stream/resolve, /stream/qualities, /stream/proxy docs
- Project structure: updated controller/extractor/helper file lists
- Dependencies: removed cors, updated dep list
- Changelog highlights: added v2.2.0 entry
- Completed checklist: added 38 endpoints, streaming resolver, proxy, diagnostic sweep

docs/endpoints.md:
- Added 8 new endpoint sections: upcoming, top-rankings, recently-updated, completed,
  stream/resolve, stream/qualities, stream/proxy, stream/ts-proxy

docs/streaming.md:
- Added Stream URL Resolution section (Step 4)
- Added M3U8 quality parsing docs
- Added M3U8 proxy docs with CORS-free playback explanation
- Updated troubleshooting table

docs/architecture.md:
- Updated project structure with all new files (streamResolver, parseListItem, etc.)
- Updated streaming flow diagram with resolver/proxy steps
- Updated dependencies table

docs/examples.md:
- Added curl examples for upcoming, top-rankings, recently-updated, completed
- Added stream resolver, qualities, proxy examples

CHANGELOG.md:
- Updated v2.2.0 entry with M3U8/TS proxy, mirror fix, all bug fixes

agents/:
- Updated api-tester.md: 36 → 38 endpoints
- Updated technical-writer.md: 36 → 38 endpoints
- Updated performance-benchmarker.md: 36 → 38 endpoints
v2.2.0
2026-07-28 21:01:43 +05:30
Shinei Nouzen d391908467 feat: Add M3U8/TS proxy, fix mirror fallback, fix seasons/watch-order
New endpoints:
- GET /api/stream/proxy?url= — M3U8 playlist proxy with URL rewriting
  Rewrites relative .m3u8 and .ts URLs to proxy endpoints
  Adds CORS headers for cross-origin playback
  Validates allowed streaming domains
- GET /api/stream/ts-proxy?url= — TS video segment proxy
  Proxies .ts segments with proper Content-Type and caching

Fixes:
- seasons.extractor.js: Now extracts from watch page sidebar instead of broken AJAX endpoint
- watchOrder.extractor.js: Now extracts from watch page sidebar (trending/related)
- mirror.helper.js: 404 responses no longer mark mirrors as failed
  Only connection errors trigger mirror failover
  Endpoint-specific 404s break immediately without retry

38 total endpoints, 34/34 passing with 0 errors
2026-07-28 20:52:49 +05:30
Shinei Nouzen 21384dc30f docs: Update CHANGELOG with streaming resolver features 2026-07-28 20:42:41 +05:30
Shinei Nouzen bdf7e96ce9 feat: Add streaming URL resolver, quality detection, and server normalization
New endpoints:
- GET /api/stream/resolve — Resolves actual m3u8/mp4 URLs from embed player URLs
  Follows chain: vidtube.site → megaplay API → m3u8 playlist
  Returns url, type, qualities, subtitles, skipData
- GET /api/stream/qualities — Parses M3U8 playlists for available quality options
  Returns sorted quality list with resolution, bandwidth, URLs

New extractors:
- streamResolver.extractor.js — Full stream resolution pipeline
  - resolveStreamUrl(): Resolves embed → actual video URL
  - parseM3u8Qualities(): Parses master playlists for qualities
  - normalizeServerName(): Maps VidPlay-1 → vidplay, HD-1 → hd
  - extractSubtitles(): Extracts subtitle tracks from API responses

Enhancements:
- streamInfo.extractor.js: Added session establishment before AJAX calls
- Server list now includes normalizedName field for each server
- Stream info now includes type (hls/mp4) and backup URL
- Server list includes typeLabel (SUB/HSUB/DUB)
- Session cookies properly maintained for AJAX stream endpoints

Architecture:
- Embed API domain mapping (vidtube.site → megaplay-1.buzz)
- M3U8 parser supports master and media playlists
- Subtitle extraction from multiple API response formats
- 36 total endpoints (was 34)
2026-07-28 20:40:17 +05:30
Shinei Nouzen e8c942a773 chore: Update test.js and agents to v2.2.0 with all 36 endpoints
- test.js: Add 9 new tests (upcoming, top-rankings, recently-updated, completed, cache/stats, mirrors, openapi, download, status)
- test.js: Fix slugs (one-piece-odmau, correct episode links)
- test.js: 36 total tests (was 26)
- agents/: Update all 6 agent files from v2.0.0 to v2.2.0
- agents/api-tester.md: Update endpoint table with new endpoints
- agents/backend-architect.md: Update file counts and endpoint list
- agents/technical-writer.md: Update documentation structure for 36 endpoints
2026-07-28 20:21:41 +05:30
Shinei Nouzen d0432e1654 fix: Bug fixes from full API diagnostic sweep — all 33 endpoints now 200 OK
- Fix /api/watch 500: correct URL path format (slug/ep-N -> slug/ep-N)
- Fix /api/info: accept both ?id= and ?slug= query params
- Fix /api/status/airing 500: map short status names (ongoing/airing/completed) to correct slugs
- Fix /api/top-rankings: correct selectors (#top-anime .scaff.side.items a.item) + extract rank from rankN class
- Fix /api/completed: correct selectors (section.top-table[data-name='completed'] a.item)
- Fix /api/recently-updated: correct selectors (#recent-update .ani.items .item) + client-side tab filtering
- Fix parseListItem: detect self-as-anchor (<a> elements) + fallback slug extraction
- Fix category extractor: add status name mapping (ongoing->currently-airing, etc.)
- Add /api/cache/stats endpoint for LRU cache diagnostics
- 33 endpoints verified: 0 errors, 0 timeouts
2026-07-28 20:17:58 +05:30
Shinei Nouzen fd29b02158 feat: Add new endpoints and enhance filter — v2.2.0
New Endpoints (4 new routes):
- GET /api/upcoming — upcoming anime releases from homepage
- GET /api/top-rankings?sort=top|newest — ranked anime with sort modes
- GET /api/recently-updated?tab=all|dub|sub — filtered recent updates
- GET /api/completed — finished anime series from homepage

Enhanced Filter (/api/filter):
- Added source parameter (18 source material types)
- Added epMin/epMax for episode range filtering
- Added excludeWatchlist parameter for logged-in users
- Added season parameter (spring/summer/fall/winter)

New Config IDs:
- SOURCE_IDS: 18 source material type mappings
- SEASON_IDS: 4 broadcast season mappings
- EXTENDED_TYPE_IDS: Added tv-short and tv-special types

Total endpoints: 34 (was 30)
OpenAPI spec updated with new endpoints
CHANGELOG.md updated with comprehensive change history
2026-07-28 19:45:25 +05:30
Shinei Nouzen a8f1917ce7 feat: v2.2.0 — Modularize codebase, unify mirror fallback, harden security
Major Changes:
- Add shared parseListItem.helper.js for unified list parsing (DRY)
- Migrate all 22 extractors to use fetchWithMirror() for consistent mirror fallback
- Remove unused cors dependency (custom CORS middleware handles it)
- Fix middleware ordering: timeout now registered before routes
- Fix CORS to allow POST for /api/mirrors/reset endpoint
- Remove redundant cache check in homeInfo extractor

New Features:
- Request ID tracking (X-Request-Id header) for debugging
- Graceful shutdown handling (SIGTERM/SIGINT) with 10s timeout
- CSP and HSTS security headers
- Rate limiter cleanup interval (every 5 min) to prevent memory leak
- Request body size limits (10kb) via express.json()

Security:
- Content-Security-Policy header for XSS protection
- Strict-Transport-Security for HTTPS enforcement
- X-Permitted-Cross-Domain-Policies: none
- Body size limits to prevent large payload attacks

Code Quality:
- All files follow strict documentation style (box headers, section separators,
  feature markers, JSDoc params/returns, inline notes, module footers)
- Eliminated ~200 lines of duplicated code across 8+ extractors
- Updated CHANGELOG.md with comprehensive change history
2026-07-28 19:28:21 +05:30
Shinei Nouzen 7f07833c14 Update README.md 2026-07-25 20:07:35 +05:30
Shinei Nouzen 9778cd368d docs: update changelog for v2.1.0 redesign, bump version v2.1.0 2026-07-05 17:34:53 +05:30
Shinei Nouzen 378f9b236a feat: redesign HTML pages with Claude/Anthropic design system
- Warm cream canvas (#faf9f5) with coral accent (#cc785c)
- Slab-serif headlines (Cormorant Garamond) + humanist sans body (Inter)
- Dark navy product surfaces (#181715) for code blocks
- Light cream feature cards (#efe9de)
- Editorial, literary aesthetic
- Removed ambient orbs and particles
- Minimal shadows, color-block depth
2026-07-05 17:31:17 +05:30
Shinei Nouzen 9d686390ee docs: bump version to 2.0.2, fix episodes endpoint docs 2026-07-05 17:17:41 +05:30
Shinei Nouzen d97d6bd883 docs: fix streaming flow parameter - use animeId instead of slug 2026-07-05 16:45:31 +05:30
Shinei Nouzen bc840f1373 docs: fix /api/servers parameter docs and add /api/stream reference 2026-07-05 16:15:56 +05:30
Shinei Nouzen 403b205625 docs: update all documentation with pagination and fixes
- Update CHANGELOG.md with pagination metadata and bug fixes
- Update README.md with pagination documentation and project structure
- Update docs/endpoints.md with pagination section
- Update docs/index.md with pagination feature
- Update docs/architecture.md with pagination helper
v2.0.0
2026-07-04 16:25:48 +05:30
Shinei Nouzen e8b63b5d16 feat: add pagination metadata to all list endpoints
- Add pagination.helper.js with addPaginationMeta function
- Add pagination info to: most-popular, search, new-release, newly-added, latest-updated, az-list, filter, category, status
- Pagination includes: currentPage, totalPages, totalItems, itemsPerPage, hasNext, hasPrev
- Fix creatorInfo middleware to include message field
2026-07-04 16:14:30 +05:30
Shinei Nouzen 646ef128a8 fix: extractPages URL handling for mirror fallback
- Fix bug where full URLs were passed to fetchWithMirror causing doubled URLs
- Extract path from full URL before passing to mirror fallback
- Fixes search, most-popular, new-release, newly-added, and az-list endpoints
2026-07-04 15:48:23 +05:30
Shinei Nouzen 5ca688ab45 feat: add creator info middleware from MiruroAPI
- Add src/middleware/creatorInfo.js (ESM adapted)
- Injects creator attribution (name, GitHub, Telegram, timestamp) into every JSON response
- Updates server.js to use addCreatorInfo middleware
- Updates CHANGELOG.md, README.md, and docs/architecture.md
2026-07-04 15:31:59 +05:30
Shinei Nouzen 5cf908fb1e docs: fix README references to old endpoint count and caching
- Update endpoint count from 30 to 33 in badge, stats, and descriptions
- Update caching description from 5-min TTL to LRU with configurable TTL
- Update timeout description from 15s to configurable
- Update mermaid diagram labels
2026-07-04 15:21:38 +05:30
Shinei Nouzen 7641a81976 docs: customize 6 AI agent prompts for AniKotoAPI
- backend-architect.md: Express scraper architecture, mirror fallback, LRU cache
- api-tester.md: 33 endpoints, streaming flow, test patterns
- security-architect.md: SSRF protection, rate limiting, CORS, headers
- performance-benchmarker.md: response times, cache hit rates, compression
- technical-writer.md: CHANGELOG format, docs structure, endpoint patterns
- devops-automator.md: Vercel deployment, git workflow, env vars
2026-07-04 15:15:28 +05:30
Shinei Nouzen fe51275db0 feat: upgrade to v2.0.0 with multi-mirror fallback, new endpoints, and LRU cache
- Add multi-mirror fallback system with 5 mirror domains
- Add LRU cache with configurable TTL per endpoint
- Add response compression (gzip)
- Add Seasons endpoint (/api/seasons/:id)
- Add Watch Order endpoint (/api/watch-order/:id)
- Add Latest Updated endpoint (/api/latest-updated)
- Add Download endpoint (/api/download)
- Add cache stats endpoint (/api/cache/stats)
- Add mirror status/reset endpoints (/api/mirrors, /api/mirrors/reset)
- Add configurable rate limiting with X-RateLimit headers
- Add request timeouts and entity too large handling
- Update documentation with all new endpoints
- Update CHANGELOG.md with v2.0.0 entry
- Update package.json version to 2.0.0
- Add 6 AI agent prompts for development
2026-07-04 15:07:07 +05:30
Sʜɪɴᴇɪ Nᴏᴜᴢᴇɴ 30feda703a fix: CORS header missing when ALLOWED_ORIGINS env not set
Browser blocks cross-origin requests from AniKotoWeb because
Access-Control-Allow-Origin was never set when ALLOWED_ORIGINS
was undefined on Vercel. Changed condition to allow all origins
when env var is not configured.
2026-06-09 11:05:16 +05:30
Sʜɪɴᴇɪ Nᴏᴜᴢᴇɴ 7d621e2e37 fix: Tech Stack table formatting, versions, remove cookie-parser 2026-06-09 10:08:51 +05:30
Sʜɪɴᴇɪ Nᴏᴜᴢᴇɴ e5dbe0c12e v1.9.2: Fix 3 endpoint bugs found in diagnostic sweep
- filter controller: Normalize array params to strings (genre[]=1 now works)
- status controller: Map short names to full slugs (airing → currently-airing)
- seasons extractor: Remove recursive API call, throw clear error
- watchOrder extractor: Remove recursive API call, throw clear error

Endpoint status: 27/31 passing (4 remaining: 2 source site issues, 1 AJAX issue, 1 expected behavior)
2026-06-09 06:41:10 +05:30
Sʜɪɴᴇɪ Nᴏᴜᴢᴇɴ f43522c4d5 v1.9.1: Fix require path for package.json
require('../package.json') resolved to src/package.json (wrong).
Changed to require('../../package.json') to reach project root.
2026-06-09 06:13:21 +05:30
Sʜɪɴᴇɪ Nᴏᴜᴢᴇɴ cc145c9acc v1.9.1: Fix 4 critical bugs from sed operations
- apiRoutes.js: Moved imports outside comment block (caused 500 on all endpoints)
- test.js: Deleted orphaned duplicate code after function close
- random.controller.js: Removed stray closing brace breaking try/catch
- cache.helper.js: Added missing MAX_CACHE_SIZE constant

These bugs were introduced by sed insert commands placing code in wrong positions.
The API was returning 500 FUNCTION_INVOCATION_FAILED on all endpoints.
2026-06-09 06:11:51 +05:30
Sʜɪɴᴇɪ Nᴏᴜᴢᴇɴ 100b9f9414 v1.9.0: Full diagnostic sweep - 42 issues fixed
Critical fixes (7):
- Added global Express error handler (returns JSON instead of HTML)
- Removed caching from random endpoint (defeated purpose)
- Renamed share.jpg to share.png (MIME type mismatch)
- Fixed OG image dimensions (630 → 601)
- Fixed manifest.json icon sizes (192x192 → 512x512)
- Fixed implicit global event variable in console
- Added 9 missing endpoints to docs/endpoints.md

High fixes (12):
- Imported version from package.json (no hardcoded drift)
- Added dynamic endpoint count in stats
- Added input sanitization for mapper API (SSRF prevention)
- Added homepage caching (reduced 5 duplicate HTTP requests)
- Added rate limiting (100 requests/minute per IP)
- Added rel="noopener noreferrer" to all target="_blank" links
- Fixed trailing slash inconsistency in console
- Added noindex meta to 404.html
- Fixed docs/architecture.md controller filenames and dependency versions
- Fixed README.md dependency versions
- Added 12 missing endpoint tests

Medium fixes (22):
- Added escapeHtml helper for error messages
- Consistent favicon across all pages
- Added meta descriptions to privacy.html and tos.html
- Added OG/Twitter meta tags to privacy.html and tos.html
- Added aria-label to playground inputs
- Added aria-hidden to decorative SVGs
- Synced Twitter description with OG description
- Fixed robots.txt to disallow /api
- Added PWA fields to manifest.json
- Removed 5 unused imports
- Removed unused cookie-parser dependency
- Fixed inconsistent error handling in extractors
- Fixed resolvedSlug returning numeric ID
- Added /watch endpoint to streaming docs
- Improved test assertions and status code validation
- Deleted orphaned og-image.svg and logo.png

Low fixes (11):
- Removed redundant try/catch from extractPages
- Added max size eviction to cache
- Added cache key sorting in filter controller
- Added author meta tag
- Fixed favicon.svg font

Version bumped to 1.9.0
v1.9.0
2026-06-09 06:00:37 +05:30
Sʜɪɴᴇɪ Nᴏᴜᴢᴇɴ 84c4877669 Add files via upload v1.5.4 v1.7.1 v1.5.1 v1.5.2 v1.5.3 v1.4.0 v1.5.5 v1.6.0 v1.7.0 v1.5.0 v1.7.2 v1.7.3 v1.8.0 v1.3.0 v1.2.0 v1.1.0 v1.0.0 2026-06-09 05:28:57 +05:30
Sʜɪɴᴇɪ Nᴏᴜᴢᴇɴ 03663bd7de Delete public/logo.png 2026-06-09 05:26:59 +05:30
Sʜɪɴᴇɪ Nᴏᴜᴢᴇɴ 049e252362 v1.8.0: Update all documentation to match current state
Fixed 19 outdated occurrences across 7 files:
- public/index.html: 27→30 endpoints (6 occurrences)
- public/manifest.json: 27→30 endpoints
- README.md: 27→30 and 24→30 endpoints (7 occurrences)
- docs/index.md: 27→30 endpoints
- docs/architecture.md: 27→30 endpoints
- package.json: axios ^1.7.0→^1.8.0
- CHANGELOG.md: Added documentation update entry
2026-06-09 05:25:49 +05:30
Sʜɪɴᴇɪ Nᴏᴜᴢᴇɴ 5ad3189b8a v1.8.0: Full diagnostic sweep - 20 bugs fixed
Critical fixes:
- extractPages.helper.js: Pagination URL bug (?page → &page)
- package.json: Fixed invalid dep versions (axios, dotenv, express)
- privacy.html + tos.html: Broken footer links (//tos → /tos)
- manifest.json: Invalid icon purpose (any maskable → maskable)

High fixes:
- server.js: Removed duplicate CORS middleware (triple → single)
- search.controller.js: Cache key collision with suggestion controller
- apiRoutes.js: Dynamic endpoint count (was hardcoded 27)
- vercel.json: Removed duplicate CORS header

Medium fixes:
- header.config.js: Updated User-Agent to Chrome 130
- dataUrl.js: Removed redundant domain from ALT_DOMAINS
- category.extractor.js: Removed unused cheerio import
- server.js: Added __dirname, removed unused cors import

Documentation:
- CHANGELOG.md: Added v1.8.0 entry
- README.md: Updated version badges (1.8.0, Express 4.21)
- test.js: Fixed status endpoint (currently-airing → airing)
2026-06-09 05:14:56 +05:30
Sʜɪɴᴇɪ Nᴏᴜᴢᴇɴ 49243ccca1 fix: episodes endpoint accepts numeric ID, episodes-ajax returns parsed JSON 2026-06-09 04:55:26 +05:30
Sʜɪɴᴇɪ Nᴏᴜᴢᴇɴ e203761789 chore: bump version to 1.7.3 2026-06-09 04:52:07 +05:30
Sʜɪɴᴇɪ Nᴏᴜᴢᴇɴ 0015e779ea fix: health endpoint typo and request counter middleware order 2026-06-09 04:51:26 +05:30
Sʜɪɴᴇɪ Nᴏᴜᴢᴇɴ 154258629d feat: add anikototv.to images — favicon, share.jpg, logo
- favicon-origin.png — Original favicon from anikototv.to
- share.jpg — OG/Social sharing image (1MB)
- logo.png — Site logo
- Updated index.html to use share.jpg for OG/Twitter cards
- Updated manifest.json with new icons
- Updated favicon link to use original PNG
2026-06-08 22:18:59 +05:30
Sʜɪɴᴇɪ Nᴏᴜᴢᴇɴ 1e65ccb709 feat: add favicon, full OG meta tags, JSON-LD structured data 2026-06-08 22:13:32 +05:30