From b2eb16fc820840b57c2026c7ec3e54f429e860dd Mon Sep 17 00:00:00 2001 From: WebStreamr <210764791+webstreamr@users.noreply.github.com> Date: Tue, 24 Jun 2025 10:52:38 +0000 Subject: [PATCH] refactor: extract Media Flow Proxy functions --- src/extractor/Mixdrop.ts | 4 ++-- src/extractor/Uqload.ts | 4 ++-- src/utils/config.ts | 15 --------------- src/utils/index.ts | 1 + src/utils/media-flow-proxy.ts | 16 ++++++++++++++++ 5 files changed, 21 insertions(+), 19 deletions(-) create mode 100644 src/utils/media-flow-proxy.ts diff --git a/src/extractor/Mixdrop.ts b/src/extractor/Mixdrop.ts index 14d606e..0d6ae41 100644 --- a/src/extractor/Mixdrop.ts +++ b/src/extractor/Mixdrop.ts @@ -1,7 +1,7 @@ import bytes from 'bytes'; import * as cheerio from 'cheerio'; import { Extractor } from './Extractor'; -import { buildMediaFlowProxyUrl, Fetcher, hasMediaFlowProxy } from '../utils'; +import { buildMediaFlowProxyExtractorRedirectUrl, Fetcher, hasMediaFlowProxy } from '../utils'; import { Context, CountryCode, Format, UrlResult } from '../types'; import { NotFoundError } from '../error'; @@ -39,7 +39,7 @@ export class Mixdrop extends Extractor { return [ { - url: buildMediaFlowProxyUrl(ctx.config, 'Mixdrop', url), + url: buildMediaFlowProxyExtractorRedirectUrl(ctx.config, 'Mixdrop', url), format: Format.mp4, label: this.label, sourceId: `${this.id}_${countryCode}`, diff --git a/src/extractor/Uqload.ts b/src/extractor/Uqload.ts index ca9588c..427d1ca 100644 --- a/src/extractor/Uqload.ts +++ b/src/extractor/Uqload.ts @@ -1,6 +1,6 @@ import * as cheerio from 'cheerio'; import { Extractor } from './Extractor'; -import { buildMediaFlowProxyUrl, Fetcher, hasMediaFlowProxy } from '../utils'; +import { buildMediaFlowProxyExtractorRedirectUrl, Fetcher, hasMediaFlowProxy } from '../utils'; import { Context, CountryCode, Format, UrlResult } from '../types'; export class Uqload extends Extractor { @@ -36,7 +36,7 @@ export class Uqload extends Extractor { return [ { - url: buildMediaFlowProxyUrl(ctx.config, 'Uqload', url), + url: buildMediaFlowProxyExtractorRedirectUrl(ctx.config, 'Uqload', url), format: Format.mp4, label: this.label, sourceId: `${this.id}_${countryCode}`, diff --git a/src/utils/config.ts b/src/utils/config.ts index b0e2411..0181cbe 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -5,18 +5,3 @@ export const getDefaultConfig = (): Config => { }; export const showExternalUrls = (config: Config): boolean => 'includeExternalUrls' in config; - -export const hasMediaFlowProxy = (config: Config): boolean => !!(config['mediaFlowProxyUrl'] && config['mediaFlowProxyPassword']); - -export const buildMediaFlowProxyUrl = (config: Config, host: string, url: URL): URL => { - const mediaFlowProxyUrl = new URL(`${config.mediaFlowProxyUrl}/extractor/video`); - - const params = new URLSearchParams(); - params.append('host', host); - params.append('redirect_stream', 'true'); - params.append('api_password', `${config.mediaFlowProxyPassword}`); - params.append('d', url.href); - mediaFlowProxyUrl.search = params.toString(); - - return mediaFlowProxyUrl; -}; diff --git a/src/utils/index.ts b/src/utils/index.ts index 288576f..2e549e9 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -8,4 +8,5 @@ export * from './height'; export * from './id'; export * from './language'; export * from './manifest'; +export * from './media-flow-proxy'; export * from './tmdb'; diff --git a/src/utils/media-flow-proxy.ts b/src/utils/media-flow-proxy.ts new file mode 100644 index 0000000..dbe11d4 --- /dev/null +++ b/src/utils/media-flow-proxy.ts @@ -0,0 +1,16 @@ +import { Config } from '../types'; + +export const hasMediaFlowProxy = (config: Config): boolean => !!(config['mediaFlowProxyUrl'] && config['mediaFlowProxyPassword']); + +export const buildMediaFlowProxyExtractorRedirectUrl = (config: Config, host: string, url: URL): URL => { + const mediaFlowProxyUrl = new URL(`${config.mediaFlowProxyUrl}/extractor/video`); + + const params = new URLSearchParams(); + params.append('host', host); + params.append('redirect_stream', 'true'); + params.append('api_password', `${config.mediaFlowProxyPassword}`); + params.append('d', url.href); + mediaFlowProxyUrl.search = params.toString(); + + return mediaFlowProxyUrl; +};