From 7cf313cedbfe7d6fa7e6a43a3e140ecbeb669f5a Mon Sep 17 00:00:00 2001 From: WebStreamr <210764791+webstreamr@users.noreply.github.com> Date: Wed, 16 Jul 2025 10:56:51 +0000 Subject: [PATCH] chore(extractor): normalize Mixdrop non-embed URLs --- src/extractor/Mixdrop.test.ts | 4 ++++ src/extractor/Mixdrop.ts | 2 ++ .../__snapshots__/Mixdrop.test.ts.snap | 20 +++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/src/extractor/Mixdrop.test.ts b/src/extractor/Mixdrop.test.ts index 78035df..604a205 100644 --- a/src/extractor/Mixdrop.test.ts +++ b/src/extractor/Mixdrop.test.ts @@ -15,6 +15,10 @@ describe('Mixdrop', () => { expect(await extractorRegistry.handle(ctx, new URL('https://mixdrop.my/e/knq0kj8waq44l8'), CountryCode.de)).toMatchSnapshot(); }); + test('mixdrop.my /f/', async () => { + expect(await extractorRegistry.handle(ctx, new URL('https://mixdrop.my/f/knq0kj8waq44l8'), CountryCode.de)).toMatchSnapshot(); + }); + test('deleted or expired file', async () => { expect(await extractorRegistry.handle(ctx, new URL('https://mixdrop.ag/e/123456789'), CountryCode.de)).toMatchSnapshot(); }); diff --git a/src/extractor/Mixdrop.ts b/src/extractor/Mixdrop.ts index 437c6ba..093d65a 100644 --- a/src/extractor/Mixdrop.ts +++ b/src/extractor/Mixdrop.ts @@ -26,6 +26,8 @@ export class Mixdrop extends Extractor { return null !== url.host.match(/mixdrop/) && supportsMediaFlowProxy(ctx); } + public override readonly normalize = (url: URL): URL => new URL(url.href.replace('/f/', '/e/')); + protected async extractInternal(ctx: Context, url: URL, countryCode: CountryCode): Promise { const fileUrl = new URL(url.href.replace('/e/', '/f/')); const html = await this.fetcher.text(ctx, fileUrl); diff --git a/src/extractor/__snapshots__/Mixdrop.test.ts.snap b/src/extractor/__snapshots__/Mixdrop.test.ts.snap index 18b2bcb..b434348 100644 --- a/src/extractor/__snapshots__/Mixdrop.test.ts.snap +++ b/src/extractor/__snapshots__/Mixdrop.test.ts.snap @@ -21,3 +21,23 @@ exports[`Mixdrop mixdrop.my /e/ 1`] = ` }, ] `; + +exports[`Mixdrop mixdrop.my /f/ 1`] = ` +[ + { + "format": "mp4", + "label": "Mixdrop (via MediaFlow Proxy)", + "meta": { + "bytes": 1059806248, + "countryCodes": [ + "de", + ], + "height": undefined, + "title": "28_giorni_dopo_2002_HD_-_Altadefinizione01.mp4", + }, + "sourceId": "mixdrop_de", + "ttl": 0, + "url": "https://mediaflow-proxy.test/extractor/video?host=Mixdrop&api_password=asdfg&d=https%3A%2F%2Fmixdrop.my%2Fe%2Fknq0kj8waq44l8&redirect_stream=true", + }, +] +`;