From bd97db1fbd06bc143c26578ff9ad979cd3add39b Mon Sep 17 00:00:00 2001 From: Pas <74743263+Pasithea0@users.noreply.github.com> Date: Wed, 14 May 2025 15:47:13 -0600 Subject: [PATCH] init m3u8 proxy rotation --- src/backend/providers/fetchers.ts | 21 +++++++++++++++++++-- src/backend/providers/providers.ts | 6 ++++++ src/setup/config.ts | 7 +++++++ src/utils/proxyUrls.ts | 4 ++++ 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/backend/providers/fetchers.ts b/src/backend/providers/fetchers.ts index 5cb6f6ba..cd619829 100644 --- a/src/backend/providers/fetchers.ts +++ b/src/backend/providers/fetchers.ts @@ -1,8 +1,16 @@ -import { Fetcher, makeSimpleProxyFetcher } from "@movie-web/providers"; +import { + Fetcher, + makeSimpleProxyFetcher, + setM3U8ProxyUrl, +} from "@movie-web/providers"; import { sendExtensionRequest } from "@/backend/extension/messaging"; import { getApiToken, setApiToken } from "@/backend/helpers/providerApi"; -import { getProviderApiUrls, getProxyUrls } from "@/utils/proxyUrls"; +import { + getM3U8ProxyUrls, + getProviderApiUrls, + getProxyUrls, +} from "@/utils/proxyUrls"; import { convertBodyToObject, getBodyTypeFromBody } from "../extension/request"; @@ -22,6 +30,8 @@ function makeLoadbalancedList(getter: () => string[]) { export const getLoadbalancedProxyUrl = makeLoadbalancedList(getProxyUrls); export const getLoadbalancedProviderApiUrl = makeLoadbalancedList(getProviderApiUrls); +export const getLoadbalancedM3U8ProxyUrl = + makeLoadbalancedList(getM3U8ProxyUrls); async function fetchButWithApiTokens( input: RequestInfo | URL, @@ -44,6 +54,13 @@ async function fetchButWithApiTokens( return response; } +export function setupM3U8Proxy() { + const proxyUrl = getLoadbalancedM3U8ProxyUrl(); + if (proxyUrl) { + setM3U8ProxyUrl(proxyUrl); + } +} + export function makeLoadBalancedSimpleProxyFetcher() { const fetcher: Fetcher = async (a, b) => { const currentFetcher = makeSimpleProxyFetcher( diff --git a/src/backend/providers/providers.ts b/src/backend/providers/providers.ts index 20aae64b..c54d7f6b 100644 --- a/src/backend/providers/providers.ts +++ b/src/backend/providers/providers.ts @@ -8,8 +8,12 @@ import { isExtensionActiveCached } from "@/backend/extension/messaging"; import { makeExtensionFetcher, makeLoadBalancedSimpleProxyFetcher, + setupM3U8Proxy, } from "@/backend/providers/fetchers"; +// Initialize M3U8 proxy on module load +setupM3U8Proxy(); + export function getProviders() { if (isExtensionActiveCached()) { return makeProviders({ @@ -20,6 +24,8 @@ export function getProviders() { }); } + setupM3U8Proxy(); + return makeProviders({ fetcher: makeStandardFetcher(fetch), proxiedFetcher: makeLoadBalancedSimpleProxyFetcher(), diff --git a/src/setup/config.ts b/src/setup/config.ts index 9c437cdc..d2d63db7 100644 --- a/src/setup/config.ts +++ b/src/setup/config.ts @@ -14,6 +14,7 @@ interface Config { TWITTER_LINK: string; TMDB_READ_API_KEY: string; CORS_PROXY_URL: string; + M3U8_PROXY_URL: string; NORMAL_ROUTER: boolean; BACKEND_URL: string; DISALLOWED_IDS: string; @@ -39,6 +40,7 @@ export interface RuntimeConfig { TMDB_READ_API_KEY: string | null; NORMAL_ROUTER: boolean; PROXY_URLS: string[]; + M3U8_PROXY_URLS: string[]; BACKEND_URL: string | null; DISALLOWED_IDS: string[]; TURNSTILE_KEY: string | null; @@ -68,6 +70,7 @@ const env: Record = { .VITE_ONBOARDING_PROXY_INSTALL_LINK, DMCA_EMAIL: import.meta.env.VITE_DMCA_EMAIL, CORS_PROXY_URL: import.meta.env.VITE_CORS_PROXY_URL, + M3U8_PROXY_URL: import.meta.env.VITE_M3U8_PROXY_URL, NORMAL_ROUTER: import.meta.env.VITE_NORMAL_ROUTER, BACKEND_URL: import.meta.env.VITE_BACKEND_URL, DISALLOWED_IDS: import.meta.env.VITE_DISALLOWED_IDS, @@ -122,6 +125,10 @@ export function conf(): RuntimeConfig { .split(",") .map((v) => v.trim()) .filter((v) => v.length > 0), + M3U8_PROXY_URLS: getKey("M3U8_PROXY_URL", "") + .split(",") + .map((v) => v.trim()) + .filter((v) => v.length > 0), NORMAL_ROUTER: getKey("NORMAL_ROUTER", "false") === "true", HAS_ONBOARDING: getKey("HAS_ONBOARDING", "false") === "true", ALLOW_AUTOPLAY: getKey("ALLOW_AUTOPLAY", "false") === "true", diff --git a/src/utils/proxyUrls.ts b/src/utils/proxyUrls.ts index 3efd59e3..41573b79 100644 --- a/src/utils/proxyUrls.ts +++ b/src/utils/proxyUrls.ts @@ -70,6 +70,10 @@ export function getProxyUrls() { .map((v) => v.url); } +export function getM3U8ProxyUrls(): string[] { + return conf().M3U8_PROXY_URLS; +} + export function getProviderApiUrls() { return getParsedUrls() .filter((v) => v.type === "api")