Files
iptvnator/apps/xtream-mock-server
4gray 0553cd8097 test: add xtream-mock-server with initial implementation
- Created project structure and configuration for xtream-mock-server.
- Implemented data generation for live, VOD, and series content using Faker.js.
- Developed API handlers for account info, categories, streams, and series information.
- Added caching mechanisms for portal data and details.
- Implemented scenario management for user credentials and account status.
- Set up Express server with health check and reset endpoints.
- Configured TypeScript settings for the project.

Entire-Checkpoint: 815a29d0e5a4
2026-02-21 08:40:51 +01:00
..

Xtream Codes Mock Server

A lightweight Express server that simulates the Xtream Codes API for local development and end-to-end testing. Uses @faker-js/faker with deterministic seeding so every credential pair always produces the same data.


Quick Start

# Start on port 3211
pnpm nx run xtream-mock-server:serve

# Start with file-watch (auto-restart on code changes)
pnpm nx run xtream-mock-server:serve-with-watch

Available Scenarios (credential pairs)

Username Password Scenario Live cats VOD cats Series cats Items/cat Status
user1 pass1 default 8 8 8 40 active
large large large catalog 20 20 20 200 active
series series series-heavy 3 4 15 30 active
minimal minimal minimal (edge cases) 2 2 2 5 active
expired expired expired account 4 4 4 10 Expired
inactive inactive disabled account 4 4 4 10 Disabled

Any other credential pair is auto-generated using a hash of username:password as the faker seed (6 categories, 30 items each, active account).


API Endpoints

Direct Xtream Protocol

GET /player_api.php?action=<action>&username=<u>&password=<p>[&...]

Action Description
(none) / get_account_info User info + server info
get_live_categories Live TV categories
get_vod_categories VOD (movie) categories
get_series_categories Series categories
get_live_streams Live streams (optionally filtered by category_id)
get_vod_streams VOD streams (optionally filtered by category_id)
get_series Series list (optionally filtered by category_id)
get_vod_info?vod_id=<id> Full movie details
get_series_info?series_id=<id> Full series info (seasons + episodes)
get_short_epg?stream_id=<id>[&limit=N] EPG listings for a live channel

PWA CORS Proxy Endpoint

IPTVnator's PWA routes Xtream calls through a backend proxy:

GET /xtream?url=<serverUrl>&action=<action>&username=<u>&password=<p>

Response: { payload: <data>, action: <action> }

Stream URLs (stub redirects)

GET /live/<username>/<password>/<streamId>.m3u8  → HLS test stream
GET /movie/<username>/<password>/<streamId>.<ext> → HLS test stream
GET /series/<username>/<password>/<streamId>.<ext> → HLS test stream

Utility Endpoints

GET  /health   → { status: "ok", server: "xtream-mock-server", port: 3211 }
POST /reset    → clears all in-memory caches; data regenerates on next request

Example Requests

# Account info (direct)
curl "http://localhost:3211/player_api.php?username=user1&password=pass1"

# Live categories (direct)
curl "http://localhost:3211/player_api.php?username=user1&password=pass1&action=get_live_categories"

# VOD details (direct)
curl "http://localhost:3211/player_api.php?username=user1&password=pass1&action=get_vod_info&vod_id=20000"

# Series info (direct)
curl "http://localhost:3211/player_api.php?username=user1&password=pass1&action=get_series_info&series_id=30000"

# EPG for stream (direct)
curl "http://localhost:3211/player_api.php?username=user1&password=pass1&action=get_short_epg&stream_id=10000"

# Via PWA proxy
curl "http://localhost:3211/xtream?url=http://localhost:3211&username=user1&password=pass1&action=get_live_categories"

Playwright Integration

The mock server starts automatically with nx e2e web-e2e. Run only Xtream tests using the @xtream tag:

nx e2e web-e2e --grep "@xtream"

Test files: apps/web-e2e/src/xtream.e2e.ts

The Playwright tests use page.route() to redirect the app's backend proxy calls (localhost:3000/xtream**) to the mock server without modifying any application code.


Data Characteristics

  • Deterministic: Same credentials → same data every time (seeded faker)
  • Cached per session: Data generated once on first request, reused until /reset
  • EPG: Titles and descriptions are base64-encoded (matches real Xtream API)
  • Stream IDs: Live 10,000+, VOD 20,000+, Series 30,000+
  • Category IDs: Live 101+, VOD 201+, Series 301+

Architecture

See docs/architecture/xtream-mock-server.md for a full description of the data pipeline, response shapes, and extension points.