import { TorrentRelease, StreamStats } from '../types/torrent.js'; import { Anime } from '../types/anime.js'; export declare class TorrentStreamer { private client; private currentTorrent; private server; private tempSessionDir; private statsInterval; private onStatsCallback; private selectedFile; private serverPort; private isDestroyed; private mkvExtractor; private currentAnime; private currentEpisode; constructor(); /** * Initializes the torrent stream for a given release, episode number, and anime metadata. */ startStream(release: TorrentRelease, episodeNumber?: number, onStats?: (stats: StreamStats) => void, animeDetails?: Anime): Promise<{ streamUrl: string; webPlayerUrl: string; port: number; fileName: string; }>; /** * Intelligently selects the video file matching the episode from a batch torrent. */ private selectVideoFile; /** * Starts periodically publishing stream stats to the callback. */ private startStatsReporter; private getMimeType; /** * Patches the EBML FlagDefault values in the Matroska header buffer to make targetTrackNum the active audio track. */ private patchEbmlAudioTrackDefault; private serveMediaStream; /** * Scans the torrent files for subtitle files (.ass, .ssa, .srt, .vtt). */ private getSubtitleFiles; /** * Serves an individual subtitle file from the torrent. */ private serveSubtitleFile; /** * Serves the redesigned cyberpunk HTML5 custom web player with anime subtitle support. */ private serveWebPlayerHtml; /** * Switches to another episode in the active stream. * If the active torrent is a batch release (e.g. 1-12), switches files instantly. */ switchEpisode(targetEpisode: number): Promise<{ fileName: string; isBatch: boolean; }>; /** * Stops streaming, closes server, destroys WebTorrent client, * and completely wipes temporary cached pieces from disk. */ stopStream(): Promise; /** * Universal CORS & Referer Proxy for M3U8 HLS streaming. * Rewrites internal playlist URI and sub-segment links to route through localhost. */ private handleM3u8ProxyRequest; private handlePlaybackSync; }