From 8ca69eecae486a9d192a9b81729126611f9610c1 Mon Sep 17 00:00:00 2001 From: Bram Kelchtermans Date: Wed, 4 Nov 2026 11:26:40 +0100 Subject: [PATCH] fix rewrite proxy --- Dockers/xtream-proxy/src/proxy.js | 2 +- Dockers/xtream-proxy/src/rewrite.js | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Dockers/xtream-proxy/src/proxy.js b/Dockers/xtream-proxy/src/proxy.js index 6c5f1ba..8d6ee35 100644 --- a/Dockers/xtream-proxy/src/proxy.js +++ b/Dockers/xtream-proxy/src/proxy.js @@ -207,7 +207,7 @@ function handleProxy(req, res, reqUrl) { clearTimeout(headersTimeout); const proxyOrigin = getProxyOrigin(req); - const rewriting = shouldRewriteBody(req, proxyRes); + const rewriting = shouldRewriteBody(req, proxyRes, reqUrl.pathname); const responseHeaders = filterResponseHeaders( proxyRes.headers, rewriting diff --git a/Dockers/xtream-proxy/src/rewrite.js b/Dockers/xtream-proxy/src/rewrite.js index 52fc867..e801a58 100644 --- a/Dockers/xtream-proxy/src/rewrite.js +++ b/Dockers/xtream-proxy/src/rewrite.js @@ -17,6 +17,7 @@ const HOP_BY_HOP = new Set([ const STREAM_PATH = /^\/(live|movie|series|timeshift|hls|stream|vod)\//i; const STREAM_EXT = /\.(ts|m3u8|mp4|mkv|avi|mov|mpg|mpeg|flv|mp3|aac|m4a|m4v)$/i; +const PLAYLIST_CONTENT_TYPE = /(mpegurl|m3u)/i; class ReplaceStream extends Transform { constructor(replacements) { @@ -149,7 +150,7 @@ function isRewritableContentType(contentType) { ); } -function shouldRewriteBody(req, upstreamResponse) { +function shouldRewriteBody(req, upstreamResponse, pathname = '') { if (req.method === 'HEAD') return false; if ( upstreamResponse.statusCode === 204 || @@ -159,7 +160,13 @@ function shouldRewriteBody(req, upstreamResponse) { } const encoding = upstreamResponse.headers['content-encoding']; if (encoding && encoding.toLowerCase() !== 'identity') return false; - return isRewritableContentType(upstreamResponse.headers['content-type']); + + const contentType = upstreamResponse.headers['content-type']; + const isPlaylist = + PLAYLIST_CONTENT_TYPE.test(contentType || '') || /\.m3u8?$/i.test(pathname); + if (isStreamPath(pathname) && !isPlaylist) return false; + + return isRewritableContentType(contentType); } function filterHopByHop(headers) {