From 8ef47be34655cdfbd2d7d997372b0314f556dfda Mon Sep 17 00:00:00 2001 From: Pas <74743263+Pasithea0@users.noreply.github.com> Date: Mon, 7 Jul 2025 19:14:24 -0600 Subject: [PATCH] add disable cache env --- src/routes/m3u8-proxy.ts | 37 +++++++++++++++++++++++++++++-------- src/routes/ts-proxy.ts | 28 +++++++++++++++++----------- 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/src/routes/m3u8-proxy.ts b/src/routes/m3u8-proxy.ts index e9c17ca..d4e02ee 100644 --- a/src/routes/m3u8-proxy.ts +++ b/src/routes/m3u8-proxy.ts @@ -1,5 +1,8 @@ import { setResponseHeaders } from 'h3'; +// Check if caching is disabled via environment variable +const isCacheDisabled = () => process.env.DISABLE_CACHE === 'true'; + function parseURL(req_url: string, baseUrl?: string) { if (baseUrl) { return new URL(req_url, baseUrl).href; @@ -87,6 +90,11 @@ function startCacheCleanupInterval() { startCacheCleanupInterval(); async function prefetchSegment(url: string, headers: HeadersInit) { + // Skip prefetching if cache is disabled + if (isCacheDisabled()) { + return; + } + if (segmentCache.size >= CACHE_MAX_SIZE) { cleanupCache(); } @@ -131,6 +139,11 @@ async function prefetchSegment(url: string, headers: HeadersInit) { } export function getCachedSegment(url: string) { + // Return undefined immediately if cache is disabled + if (isCacheDisabled()) { + return undefined; + } + const entry = segmentCache.get(url); if (entry) { if (Date.now() - entry.timestamp > CACHE_EXPIRY_MS) { @@ -275,7 +288,10 @@ async function proxyM3U8(event: any) { const proxyKeyUrl = `${baseProxyUrl}/ts-proxy?url=${encodeURIComponent(keyUrl)}&headers=${encodeURIComponent(JSON.stringify(headers))}`; newLines.push(line.replace(keyUrl, proxyKeyUrl)); - prefetchSegment(keyUrl, headers as HeadersInit); + // Only prefetch if cache is enabled + if (!isCacheDisabled()) { + prefetchSegment(keyUrl, headers as HeadersInit); + } } else { newLines.push(line); } @@ -301,13 +317,18 @@ async function proxyM3U8(event: any) { if (segmentUrls.length > 0) { console.log(`Starting to prefetch ${segmentUrls.length} segments for ${url}`); - cleanupCache(); - - Promise.all(segmentUrls.map(segmentUrl => - prefetchSegment(segmentUrl, headers as HeadersInit) - )).catch(error => { - console.error('Error prefetching segments:', error); - }); + // Only perform cache operations if cache is enabled + if (!isCacheDisabled()) { + cleanupCache(); + + Promise.all(segmentUrls.map(segmentUrl => + prefetchSegment(segmentUrl, headers as HeadersInit) + )).catch(error => { + console.error('Error prefetching segments:', error); + }); + } else { + console.log('Cache disabled - skipping prefetch operations'); + } } // Set appropriate headers diff --git a/src/routes/ts-proxy.ts b/src/routes/ts-proxy.ts index b19c7c4..c9d3790 100644 --- a/src/routes/ts-proxy.ts +++ b/src/routes/ts-proxy.ts @@ -1,6 +1,9 @@ import { setResponseHeaders } from 'h3'; import { getCachedSegment } from './m3u8-proxy'; +// Check if caching is disabled via environment variable +const isCacheDisabled = () => process.env.DISABLE_CACHE === 'true'; + export default defineEventHandler(async (event) => { // Handle CORS preflight requests if (isPreflightRequest(event)) return handleCors(event, {}); @@ -26,18 +29,21 @@ export default defineEventHandler(async (event) => { } try { - const cachedSegment = getCachedSegment(url); - - if (cachedSegment) { - setResponseHeaders(event, { - 'Content-Type': cachedSegment.headers['content-type'] || 'video/mp2t', - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': '*', - 'Access-Control-Allow-Methods': '*', - 'Cache-Control': 'public, max-age=3600' // Allow caching of TS segments - }); + // Only check cache if caching is enabled + if (!isCacheDisabled()) { + const cachedSegment = getCachedSegment(url); - return cachedSegment.data; + if (cachedSegment) { + setResponseHeaders(event, { + 'Content-Type': cachedSegment.headers['content-type'] || 'video/mp2t', + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Headers': '*', + 'Access-Control-Allow-Methods': '*', + 'Cache-Control': 'public, max-age=3600' // Allow caching of TS segments + }); + + return cachedSegment.data; + } } const response = await globalThis.fetch(url, {