From 068ae2f2e7c24ccb7718e2c3ef7c6ed0adc355fd Mon Sep 17 00:00:00 2001 From: jj Date: Thu, 6 Mar 2025 17:16:13 +0000 Subject: [PATCH] api/internal: also transplant youtube HEAD requests --- api/src/stream/internal.js | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/api/src/stream/internal.js b/api/src/stream/internal.js index f55a1b913..8c97c6567 100644 --- a/api/src/stream/internal.js +++ b/api/src/stream/internal.js @@ -53,14 +53,25 @@ async function handleYoutubeStream(streamInfo, res) { const cleanup = () => (res.end(), closeRequest(streamInfo.controller)); try { - const req = await fetch(streamInfo.url, { - headers: getHeaders('youtube'), - method: 'HEAD', - dispatcher: streamInfo.dispatcher, - signal - }); + let req, attempts = 3; + while (attempts--) { + req = await fetch(streamInfo.url, { + headers: getHeaders('youtube'), + method: 'HEAD', + dispatcher: streamInfo.dispatcher, + signal + }); + + streamInfo.url = req.url; + if (req.status === 403 && streamInfo.transplant) { + try { + await streamInfo.transplant(streamInfo.dispatcher); + } catch { + break; + } + } else break; + } - streamInfo.url = req.url; const size = BigInt(req.headers.get('content-length')); if (req.status !== 200 || !size) {