From a00fa2c3d65ace25783532066e33d105a17b2853 Mon Sep 17 00:00:00 2001 From: GSTAR <44748406+GLlgGL@users.noreply.github.com> Date: Tue, 20 Jan 2026 21:49:37 +0100 Subject: [PATCH] fix(extractor): use MediaFlow Proxy for DoodStream (#676) Co-authored-by: WebStreamr <210764791+webstreamr@users.noreply.github.com> --- src/extractor/DoodStream.test.ts | 10 +- src/extractor/DoodStream.ts | 25 ++--- ...bebipnnhusa4xnyea1er4andexpiry639837296000 | 1 - ...rdlhjvao7chgxndsi3ra7andexpiry639837296000 | 1 - .../DoodStream/http:dood.toddfx8me4un4ul | 3 +- .../DoodStream/http:dood.todsk1m9eumzyjj | 3 +- .../DoodStream/http:dood.todwfpwtsgyr1xi | 1 - .../DoodStream/http:dood.toecz7cus0bvlzr | 3 +- .../DoodStream/http:dood.toedfx8me4un4ul | 3 +- .../DoodStream/http:dood.toegy8l8mb2i311 | 1 - .../DoodStream/http:dood.toesk1m9eumzyjj | 3 +- .../DoodStream/http:dood.toewfpwtsgyr1xi | 1 - ...eb495bd0f75d6853e2fh3rdlhjvao7chgxndsi3ra7 | 1 - ...d62f297b2b1efe192aig5l9qo88wwzt14z4izyrrn2 | 1 - ...ccee01807c7a7e302f7uebebipnnhusa4xnyea1er4 | 1 - .../__snapshots__/DoodStream.test.ts.snap | 34 +----- src/utils/StreamResolver.test.ts | 9 ++ src/utils/StreamResolver.ts | 4 +- .../StreamResolver/http:dood.tod1srct94x5yfz | 1 - .../StreamResolver/http:dood.tod37o04m33q3g5 | 1 - .../StreamResolver/http:dood.todsk1m9eumzyjj | 1 - .../StreamResolver/http:dood.toe1srct94x5yfz | 1 - .../StreamResolver/http:dood.toe37o04m33q3g5 | 1 - .../StreamResolver/http:dood.toesk1m9eumzyjj | 1 - ...057b7566c8d4366d1caej8q7ajug1gt0nd4lbs8zgd | 1 - ...bf76d92c97ccad515e7uebebipnnhusa4xnyea1er4 | 1 - ...81179cf3966d1ef38daw2v2d8uhbrj2ky54d573ujk | 1 - .../__snapshots__/StreamResolver.test.ts.snap | 100 +++++++----------- 28 files changed, 68 insertions(+), 146 deletions(-) delete mode 100644 src/extractor/__fixtures__/DoodStream/head-https:aa360cc.cloudatacdn.comu5kjv4jxytd3sdgge5uogji5dg4huat2pxrm2qibdbm5rlyusvl46iz3u3ta1f4isxg0tw~mocked-random-stringtoken7uebebipnnhusa4xnyea1er4andexpiry639837296000 delete mode 100644 src/extractor/__fixtures__/DoodStream/head-https:ee317r.cloudatacdn.comu5kj63yvxddlsdgge7qremqqka27irwiupc4k7o5cikbhjliz6xwv2xr53uqlco4d3heif~mocked-random-stringtokenfh3rdlhjvao7chgxndsi3ra7andexpiry639837296000 delete mode 100644 src/extractor/__fixtures__/DoodStream/http:dood.todwfpwtsgyr1xi delete mode 100644 src/extractor/__fixtures__/DoodStream/http:dood.toegy8l8mb2i311 delete mode 100644 src/extractor/__fixtures__/DoodStream/http:dood.toewfpwtsgyr1xi delete mode 100644 src/extractor/__fixtures__/DoodStream/http:dood.topass_md5145783570-50-99-1749845418-e121a0832a193beb495bd0f75d6853e2fh3rdlhjvao7chgxndsi3ra7 delete mode 100644 src/extractor/__fixtures__/DoodStream/http:dood.topass_md5163663266-254-70-1752507840-ff2f201ab91945d62f297b2b1efe192aig5l9qo88wwzt14z4izyrrn2 delete mode 100644 src/extractor/__fixtures__/DoodStream/http:dood.topass_md5164387212-50-99-1749845416-b6650e7c153523ccee01807c7a7e302f7uebebipnnhusa4xnyea1er4 delete mode 100644 src/utils/__fixtures__/StreamResolver/http:dood.tod1srct94x5yfz delete mode 100644 src/utils/__fixtures__/StreamResolver/http:dood.tod37o04m33q3g5 delete mode 100644 src/utils/__fixtures__/StreamResolver/http:dood.todsk1m9eumzyjj delete mode 100644 src/utils/__fixtures__/StreamResolver/http:dood.toe1srct94x5yfz delete mode 100644 src/utils/__fixtures__/StreamResolver/http:dood.toe37o04m33q3g5 delete mode 100644 src/utils/__fixtures__/StreamResolver/http:dood.toesk1m9eumzyjj delete mode 100644 src/utils/__fixtures__/StreamResolver/http:dood.topass_md5158055412-45-38-1759848086-3cf7d759fe3ad4057b7566c8d4366d1caej8q7ajug1gt0nd4lbs8zgd delete mode 100644 src/utils/__fixtures__/StreamResolver/http:dood.topass_md5164387212-45-38-1759848085-32ec32c6c5a194bf76d92c97ccad515e7uebebipnnhusa4xnyea1er4 delete mode 100644 src/utils/__fixtures__/StreamResolver/http:dood.topass_md5165649626-45-38-1759848085-df2d3f389663cb81179cf3966d1ef38daw2v2d8uhbrj2ky54d573ujk diff --git a/src/extractor/DoodStream.test.ts b/src/extractor/DoodStream.test.ts index 92ac1fd..fcde202 100644 --- a/src/extractor/DoodStream.test.ts +++ b/src/extractor/DoodStream.test.ts @@ -7,25 +7,17 @@ import { ExtractorRegistry } from './ExtractorRegistry'; const logger = winston.createLogger({ transports: [new winston.transports.Console({ level: 'nope' })] }); const extractorRegistry = new ExtractorRegistry(logger, [new DoodStream(new FetcherMock(`${__dirname}/__fixtures__/DoodStream`))]); -const ctx = createTestContext(); +const ctx = createTestContext({ mediaFlowProxyUrl: 'https://mediaflow.test.org', mediaFlowProxyPassword: 'test' }); describe('DoodStream', () => { test('dood.to', async () => { expect(await extractorRegistry.handle(ctx, new URL('http://dood.to/e/sk1m9eumzyjj'))).toMatchSnapshot(); }); - test('missing pass_md5 -> not found', async () => { - expect(await extractorRegistry.handle(ctx, new URL('https://dood.to/e/gy8l8mb2i311'))).toMatchSnapshot(); - }); - test('can guess height from title', async () => { expect(await extractorRegistry.handle(ctx, new URL('https://do7go.com/e/dfx8me4un4ul'))).toMatchSnapshot(); }); - test('cloudflare storage', async () => { - expect(await extractorRegistry.handle(ctx, new URL('https://doodstream.com/e/wfpwtsgyr1xi'))).toMatchSnapshot(); - }); - test('not found', async () => { expect(await extractorRegistry.handle(ctx, new URL('https://myvidplay.com/e/cz7cus0bvlzr'))).toMatchSnapshot(); }); diff --git a/src/extractor/DoodStream.ts b/src/extractor/DoodStream.ts index f2962bb..f03356b 100644 --- a/src/extractor/DoodStream.ts +++ b/src/extractor/DoodStream.ts @@ -1,8 +1,8 @@ import bytes from 'bytes'; import * as cheerio from 'cheerio'; -import randomstring from 'randomstring'; import { NotFoundError } from '../error'; import { Context, Format, Meta, UrlResult } from '../types'; +import { buildMediaFlowProxyExtractorRedirectUrl, supportsMediaFlowProxy } from '../utils'; import { Extractor } from './Extractor'; export class DoodStream extends Extractor { @@ -12,9 +12,11 @@ export class DoodStream extends Extractor { public override readonly ttl: number = 21600000; // 6h + public override viaMediaFlowProxy = true; + /** @see https://github.com/Gujal00/ResolveURL/blob/master/script.module.resolveurl/lib/resolveurl/plugins/doodstream.py */ - public supports(_ctx: Context, url: URL): boolean { - return null !== url.host.match(/dood|do[0-9]go|doood|dooood|ds2play|ds2video|dsvplay|d0o0d|do0od|d0000d|d000d|myvidplay|vidply|all3do|doply|vide0|vvide0|d-s/); + public supports(ctx: Context, url: URL): boolean { + return null !== url.host.match(/dood|do[0-9]go|doood|dooood|ds2play|ds2video|dsvplay|d0o0d|do0od|d0000d|d000d|myvidplay|vidply|all3do|doply|vide0|vvide0|d-s/) && supportsMediaFlowProxy(ctx); }; public override normalize(url: URL): URL { @@ -32,27 +34,15 @@ export class DoodStream extends Extractor { throw new NotFoundError(); } - const passMd5Match = html.match(/\/pass_md5\/[\w-]+\/([\w-]+)/) as string[]; - const token = passMd5Match[1] as string; - - const baseUrl = await this.fetcher.text(ctx, new URL(passMd5Match[0] as string, url.origin), { headers: { Referer: url.href } }); - const $ = cheerio.load(html); const title = $('title').text().trim().replace(/ - DoodStream$/, '').trim(); const downloadHtml = await this.fetcher.text(ctx, new URL(url.href.replace('/e/', '/d/'))); const sizeMatch = downloadHtml.match(/([\d.]+ ?[GM]B)/); - let mp4Url: URL; - if (baseUrl.includes('cloudflarestorage')) { - mp4Url = new URL(baseUrl); - } else { - mp4Url = new URL(`${baseUrl}${randomstring.generate(10)}?token=${token}&expiry=${Date.now()}`); - } - return [ { - url: mp4Url, + url: buildMediaFlowProxyExtractorRedirectUrl(ctx, 'Doodstream', url, headers), format: Format.mp4, label: this.label, ttl: this.ttl, @@ -61,9 +51,6 @@ export class DoodStream extends Extractor { title, ...(sizeMatch && { bytes: bytes.parse(sizeMatch[1] as string) as number }), }, - requestHeaders: { - Referer: url.origin, - }, }, ]; }; diff --git a/src/extractor/__fixtures__/DoodStream/head-https:aa360cc.cloudatacdn.comu5kjv4jxytd3sdgge5uogji5dg4huat2pxrm2qibdbm5rlyusvl46iz3u3ta1f4isxg0tw~mocked-random-stringtoken7uebebipnnhusa4xnyea1er4andexpiry639837296000 b/src/extractor/__fixtures__/DoodStream/head-https:aa360cc.cloudatacdn.comu5kjv4jxytd3sdgge5uogji5dg4huat2pxrm2qibdbm5rlyusvl46iz3u3ta1f4isxg0tw~mocked-random-stringtoken7uebebipnnhusa4xnyea1er4andexpiry639837296000 deleted file mode 100644 index 00bf5ee..0000000 --- a/src/extractor/__fixtures__/DoodStream/head-https:aa360cc.cloudatacdn.comu5kjv4jxytd3sdgge5uogji5dg4huat2pxrm2qibdbm5rlyusvl46iz3u3ta1f4isxg0tw~mocked-random-stringtoken7uebebipnnhusa4xnyea1er4andexpiry639837296000 +++ /dev/null @@ -1 +0,0 @@ -{"server":"nginx","date":"Sun, 08 Jun 2025 19:20:59 GMT","content-type":"video/mp4","content-length":791702409,"last-modified":"Wed, 03 Apr 2024 09:53:31 GMT","connection":"keep-alive","etag":"660d271b-2f306b89","access-control-allow-origin":"*","accept-ranges":"bytes"} diff --git a/src/extractor/__fixtures__/DoodStream/head-https:ee317r.cloudatacdn.comu5kj63yvxddlsdgge7qremqqka27irwiupc4k7o5cikbhjliz6xwv2xr53uqlco4d3heif~mocked-random-stringtokenfh3rdlhjvao7chgxndsi3ra7andexpiry639837296000 b/src/extractor/__fixtures__/DoodStream/head-https:ee317r.cloudatacdn.comu5kj63yvxddlsdgge7qremqqka27irwiupc4k7o5cikbhjliz6xwv2xr53uqlco4d3heif~mocked-random-stringtokenfh3rdlhjvao7chgxndsi3ra7andexpiry639837296000 deleted file mode 100644 index 9e26dfe..0000000 --- a/src/extractor/__fixtures__/DoodStream/head-https:ee317r.cloudatacdn.comu5kj63yvxddlsdgge7qremqqka27irwiupc4k7o5cikbhjliz6xwv2xr53uqlco4d3heif~mocked-random-stringtokenfh3rdlhjvao7chgxndsi3ra7andexpiry639837296000 +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/extractor/__fixtures__/DoodStream/http:dood.toddfx8me4un4ul b/src/extractor/__fixtures__/DoodStream/http:dood.toddfx8me4un4ul index 2fa18a2..d0d2a62 100644 --- a/src/extractor/__fixtures__/DoodStream/http:dood.toddfx8me4un4ul +++ b/src/extractor/__fixtures__/DoodStream/http:dood.toddfx8me4un4ul @@ -1 +1,2 @@ - Black Mirror S04E02 FRENCH 720p WEB x264-RiPiT - DoodStream

Not Found

video you are looking for is not found.

Black Mirror S04E02 FRENCH 720p WEB x264-RiPiT

52:19
523.7 MB
Feb 20, 2024
\ No newline at end of file + Black Mirror S04E02 FRENCH 720p WEB x264-RiPiT - DoodStream

Not Found

video you are looking for is not found.

Black Mirror S04E02 FRENCH 720p WEB x264-RiPiT

52:19
523.7 MB
Feb 20, 2024
+ \ No newline at end of file diff --git a/src/extractor/__fixtures__/DoodStream/http:dood.todsk1m9eumzyjj b/src/extractor/__fixtures__/DoodStream/http:dood.todsk1m9eumzyjj index 8f87f18..6a36633 100644 --- a/src/extractor/__fixtures__/DoodStream/http:dood.todsk1m9eumzyjj +++ b/src/extractor/__fixtures__/DoodStream/http:dood.todsk1m9eumzyjj @@ -1 +1,2 @@ - des-teufels-bad-2024 - DoodStream

Not Found

video you are looking for is not found.

des-teufels-bad-2024

02:00:59
1.3 GB
Jun 27, 2024
Please wait 5 seconds
Download Now
High quality
\ No newline at end of file + des-teufels-bad-2024 - DoodStream

Not Found

video you are looking for is not found.

des-teufels-bad-2024

02:00:59
1.3 GB
Jun 27, 2024
Please wait 5 seconds
Download Now
High quality
+ \ No newline at end of file diff --git a/src/extractor/__fixtures__/DoodStream/http:dood.todwfpwtsgyr1xi b/src/extractor/__fixtures__/DoodStream/http:dood.todwfpwtsgyr1xi deleted file mode 100644 index 98ed128..0000000 --- a/src/extractor/__fixtures__/DoodStream/http:dood.todwfpwtsgyr1xi +++ /dev/null @@ -1 +0,0 @@ - Video not found | DoodStream

Not Found

video you are looking for is not found.

\ No newline at end of file diff --git a/src/extractor/__fixtures__/DoodStream/http:dood.toecz7cus0bvlzr b/src/extractor/__fixtures__/DoodStream/http:dood.toecz7cus0bvlzr index ba9ff3b..d66df80 100644 --- a/src/extractor/__fixtures__/DoodStream/http:dood.toecz7cus0bvlzr +++ b/src/extractor/__fixtures__/DoodStream/http:dood.toecz7cus0bvlzr @@ -1 +1,2 @@ - Video not found | DoodStream

Not Found

video you are looking for is not found.

+ Video not found | DoodStream

Not Found

video you are looking for is not found.

+ \ No newline at end of file diff --git a/src/extractor/__fixtures__/DoodStream/http:dood.toedfx8me4un4ul b/src/extractor/__fixtures__/DoodStream/http:dood.toedfx8me4un4ul index 46b1280..2514d5e 100644 --- a/src/extractor/__fixtures__/DoodStream/http:dood.toedfx8me4un4ul +++ b/src/extractor/__fixtures__/DoodStream/http:dood.toedfx8me4un4ul @@ -1 +1,2 @@ - Black Mirror S04E02 FRENCH 720p WEB x264-RiPiT - DoodStream

Not Found

video you are looking for is not found.

\ No newline at end of file + Black Mirror S04E02 FRENCH 720p WEB x264-RiPiT - DoodStream

Not Found

video you are looking for is not found.

+ \ No newline at end of file diff --git a/src/extractor/__fixtures__/DoodStream/http:dood.toegy8l8mb2i311 b/src/extractor/__fixtures__/DoodStream/http:dood.toegy8l8mb2i311 deleted file mode 100644 index 98ed128..0000000 --- a/src/extractor/__fixtures__/DoodStream/http:dood.toegy8l8mb2i311 +++ /dev/null @@ -1 +0,0 @@ - Video not found | DoodStream

Not Found

video you are looking for is not found.

\ No newline at end of file diff --git a/src/extractor/__fixtures__/DoodStream/http:dood.toesk1m9eumzyjj b/src/extractor/__fixtures__/DoodStream/http:dood.toesk1m9eumzyjj index 0ab3ce9..d3efd0b 100644 --- a/src/extractor/__fixtures__/DoodStream/http:dood.toesk1m9eumzyjj +++ b/src/extractor/__fixtures__/DoodStream/http:dood.toesk1m9eumzyjj @@ -1 +1,2 @@ - des-teufels-bad-2024 - DoodStream

Not Found

video you are looking for is not found.

\ No newline at end of file + des-teufels-bad-2024 - DoodStream

Not Found

video you are looking for is not found.

+ \ No newline at end of file diff --git a/src/extractor/__fixtures__/DoodStream/http:dood.toewfpwtsgyr1xi b/src/extractor/__fixtures__/DoodStream/http:dood.toewfpwtsgyr1xi deleted file mode 100644 index 31085c8..0000000 --- a/src/extractor/__fixtures__/DoodStream/http:dood.toewfpwtsgyr1xi +++ /dev/null @@ -1 +0,0 @@ - 241653--5bf448d3-184a-4b3f-a766-fa98d93c1300--bllz--2100527-doodstream - DoodStream

Not Found

video you are looking for is not found.

diff --git a/src/extractor/__fixtures__/DoodStream/http:dood.topass_md5145783570-50-99-1749845418-e121a0832a193beb495bd0f75d6853e2fh3rdlhjvao7chgxndsi3ra7 b/src/extractor/__fixtures__/DoodStream/http:dood.topass_md5145783570-50-99-1749845418-e121a0832a193beb495bd0f75d6853e2fh3rdlhjvao7chgxndsi3ra7 deleted file mode 100644 index 16cdb51..0000000 --- a/src/extractor/__fixtures__/DoodStream/http:dood.topass_md5145783570-50-99-1749845418-e121a0832a193beb495bd0f75d6853e2fh3rdlhjvao7chgxndsi3ra7 +++ /dev/null @@ -1 +0,0 @@ -https://ee317r.cloudatacdn.com/u5kj63yvxddlsdgge7qremqqka27irwiupc4k7o5cikbhjliz6xwv2xr53uq/lco4d3heif~ \ No newline at end of file diff --git a/src/extractor/__fixtures__/DoodStream/http:dood.topass_md5163663266-254-70-1752507840-ff2f201ab91945d62f297b2b1efe192aig5l9qo88wwzt14z4izyrrn2 b/src/extractor/__fixtures__/DoodStream/http:dood.topass_md5163663266-254-70-1752507840-ff2f201ab91945d62f297b2b1efe192aig5l9qo88wwzt14z4izyrrn2 deleted file mode 100644 index 368ef61..0000000 --- a/src/extractor/__fixtures__/DoodStream/http:dood.topass_md5163663266-254-70-1752507840-ff2f201ab91945d62f297b2b1efe192aig5l9qo88wwzt14z4izyrrn2 +++ /dev/null @@ -1 +0,0 @@ -https://wec6bnh7rx7rw11bv9e9vslw4rud8nam.5f1ebd98099ce35faeeddb30c1752191.r2.cloudflarestorage.com/icxxqqdsfdc4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ab085b515b950aae0a86cae59456cacd%2F20250714%2Fauto%2Fs3%2Faws4_request&X-Amz-Date=20250714T154400Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=845ebfa5feedd840027e431f31e013513dd4c4f74364b4e75a2c8ddb213bd97a diff --git a/src/extractor/__fixtures__/DoodStream/http:dood.topass_md5164387212-50-99-1749845416-b6650e7c153523ccee01807c7a7e302f7uebebipnnhusa4xnyea1er4 b/src/extractor/__fixtures__/DoodStream/http:dood.topass_md5164387212-50-99-1749845416-b6650e7c153523ccee01807c7a7e302f7uebebipnnhusa4xnyea1er4 deleted file mode 100644 index ab7b188..0000000 --- a/src/extractor/__fixtures__/DoodStream/http:dood.topass_md5164387212-50-99-1749845416-b6650e7c153523ccee01807c7a7e302f7uebebipnnhusa4xnyea1er4 +++ /dev/null @@ -1 +0,0 @@ -https://aa360cc.cloudatacdn.com/u5kjv4jxytd3sdgge5uogji5dg4huat2pxrm2qibdbm5rlyusvl46iz3u3ta/1f4isxg0tw~ \ No newline at end of file diff --git a/src/extractor/__snapshots__/DoodStream.test.ts.snap b/src/extractor/__snapshots__/DoodStream.test.ts.snap index 87ff26c..eee502d 100644 --- a/src/extractor/__snapshots__/DoodStream.test.ts.snap +++ b/src/extractor/__snapshots__/DoodStream.test.ts.snap @@ -4,35 +4,14 @@ exports[`DoodStream can guess height from title 1`] = ` [ { "format": "mp4", - "label": "DoodStream", + "label": "DoodStream (MFP)", "meta": { "bytes": 549139251, "extractorId": "doodstream", "title": "Black Mirror S04E02 FRENCH 720p WEB x264-RiPiT", }, - "requestHeaders": { - "Referer": "http://dood.to", - }, "ttl": 21600000, - "url": "https://ee317r.cloudatacdn.com/u5kj63yvxddlsdgge7qremqqka27irwiupc4k7o5cikbhjliz6xwv2xr53uq/lco4d3heif~mocked-random-string?token=fh3rdlhjvao7chgxndsi3ra7&expiry=639837296000", - }, -] -`; - -exports[`DoodStream cloudflare storage 1`] = ` -[ - { - "format": "mp4", - "label": "DoodStream", - "meta": { - "extractorId": "doodstream", - "title": "241653--5bf448d3-184a-4b3f-a766-fa98d93c1300--bllz--2100527-doodstream", - }, - "requestHeaders": { - "Referer": "http://dood.to", - }, - "ttl": 21600000, - "url": "https://wec6bnh7rx7rw11bv9e9vslw4rud8nam.5f1ebd98099ce35faeeddb30c1752191.r2.cloudflarestorage.com/icxxqqdsfdc4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ab085b515b950aae0a86cae59456cacd%2F20250714%2Fauto%2Fs3%2Faws4_request&X-Amz-Date=20250714T154400Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=845ebfa5feedd840027e431f31e013513dd4c4f74364b4e75a2c8ddb213bd97a", + "url": "https://mediaflow.test.org/extractor/video?host=Doodstream&api_password=test&d=http%3A%2F%2Fdood.to%2Fe%2Fdfx8me4un4ul&h_referer=http%3A%2F%2Fdood.to%2Fe%2Fdfx8me4un4ul&redirect_stream=true", }, ] `; @@ -41,21 +20,16 @@ exports[`DoodStream dood.to 1`] = ` [ { "format": "mp4", - "label": "DoodStream", + "label": "DoodStream (MFP)", "meta": { "bytes": 1395864371, "extractorId": "doodstream", "title": "des-teufels-bad-2024", }, - "requestHeaders": { - "Referer": "http://dood.to", - }, "ttl": 21600000, - "url": "https://aa360cc.cloudatacdn.com/u5kjv4jxytd3sdgge5uogji5dg4huat2pxrm2qibdbm5rlyusvl46iz3u3ta/1f4isxg0tw~mocked-random-string?token=7uebebipnnhusa4xnyea1er4&expiry=639837296000", + "url": "https://mediaflow.test.org/extractor/video?host=Doodstream&api_password=test&d=http%3A%2F%2Fdood.to%2Fe%2Fsk1m9eumzyjj&h_referer=http%3A%2F%2Fdood.to%2Fe%2Fsk1m9eumzyjj&redirect_stream=true", }, ] `; -exports[`DoodStream missing pass_md5 -> not found 1`] = `[]`; - exports[`DoodStream not found 1`] = `[]`; diff --git a/src/utils/StreamResolver.test.ts b/src/utils/StreamResolver.test.ts index 685f4d2..857fd51 100644 --- a/src/utils/StreamResolver.test.ts +++ b/src/utils/StreamResolver.test.ts @@ -127,6 +127,15 @@ describe('resolve', () => { protected readonly extractInternal = async (): Promise => [ + { + url: new URL('https://example.com'), + format: Format.unknown, + isExternal: true, + label: 'hoster.com', + meta: { + countryCodes: [CountryCode.de], + }, + }, { url: new URL('https://example.com'), format: Format.unknown, diff --git a/src/utils/StreamResolver.ts b/src/utils/StreamResolver.ts index d077e84..ffa7c83 100644 --- a/src/utils/StreamResolver.ts +++ b/src/utils/StreamResolver.ts @@ -113,7 +113,7 @@ export class StreamResolver { urlResults.sort((a, b) => { if (a.error || b.error) { - return a.isExternal ? -1 : 1; + return a.error ? -1 : 1; } if (a.isExternal || b.isExternal) { @@ -149,7 +149,7 @@ export class StreamResolver { title: this.buildTitle(ctx, urlResult), behaviorHints: { bingeGroup: `webstreamr-${urlResult.meta?.sourceId}-${urlResult.meta?.extractorId}-${urlResult.meta?.countryCodes?.join('_')}`, - ...((urlResult.format !== Format.mp4 || urlResult.url.protocol !== 'https:') && { notWebReady: true }), + ...(urlResult.format !== Format.mp4 && { notWebReady: true }), ...(urlResult.requestHeaders !== undefined && { notWebReady: true, proxyHeaders: { request: urlResult.requestHeaders }, diff --git a/src/utils/__fixtures__/StreamResolver/http:dood.tod1srct94x5yfz b/src/utils/__fixtures__/StreamResolver/http:dood.tod1srct94x5yfz deleted file mode 100644 index 72bdc9a..0000000 --- a/src/utils/__fixtures__/StreamResolver/http:dood.tod1srct94x5yfz +++ /dev/null @@ -1 +0,0 @@ - Solaris 1972 PROPER 1080p BluRay x264-SADPANDA - ENG SUBS - tt0069293 - DoodStream

Not Found

video you are looking for is not found.

Solaris 1972 PROPER 1080p BluRay x264-SADPANDA - ENG SUBS - tt0069293

02:46:54
1.8 GB
May 6, 2024
Please wait 5 seconds
Download Now
High quality
\ No newline at end of file diff --git a/src/utils/__fixtures__/StreamResolver/http:dood.tod37o04m33q3g5 b/src/utils/__fixtures__/StreamResolver/http:dood.tod37o04m33q3g5 deleted file mode 100644 index ed99ef4..0000000 --- a/src/utils/__fixtures__/StreamResolver/http:dood.tod37o04m33q3g5 +++ /dev/null @@ -1 +0,0 @@ - the-devils-bath-2024-sd-sub-ita - DoodStream

Not Found

video you are looking for is not found.

the-devils-bath-2024-sd-sub-ita

02:00:59
1.1 GB
Jul 6, 2024
Please wait 5 seconds
Download Now
High quality
\ No newline at end of file diff --git a/src/utils/__fixtures__/StreamResolver/http:dood.todsk1m9eumzyjj b/src/utils/__fixtures__/StreamResolver/http:dood.todsk1m9eumzyjj deleted file mode 100644 index c35356e..0000000 --- a/src/utils/__fixtures__/StreamResolver/http:dood.todsk1m9eumzyjj +++ /dev/null @@ -1 +0,0 @@ - des-teufels-bad-2024 - DoodStream

Not Found

video you are looking for is not found.

des-teufels-bad-2024

02:00:59
1.3 GB
Jun 27, 2024
Please wait 5 seconds
Download Now
High quality
\ No newline at end of file diff --git a/src/utils/__fixtures__/StreamResolver/http:dood.toe1srct94x5yfz b/src/utils/__fixtures__/StreamResolver/http:dood.toe1srct94x5yfz deleted file mode 100644 index b2f09df..0000000 --- a/src/utils/__fixtures__/StreamResolver/http:dood.toe1srct94x5yfz +++ /dev/null @@ -1 +0,0 @@ - Solaris 1972 PROPER 1080p BluRay x264-SADPANDA - ENG SUBS - tt0069293 - DoodStream

Not Found

video you are looking for is not found.

\ No newline at end of file diff --git a/src/utils/__fixtures__/StreamResolver/http:dood.toe37o04m33q3g5 b/src/utils/__fixtures__/StreamResolver/http:dood.toe37o04m33q3g5 deleted file mode 100644 index 4b25bc9..0000000 --- a/src/utils/__fixtures__/StreamResolver/http:dood.toe37o04m33q3g5 +++ /dev/null @@ -1 +0,0 @@ - the-devils-bath-2024-sd-sub-ita - DoodStream

Not Found

video you are looking for is not found.

\ No newline at end of file diff --git a/src/utils/__fixtures__/StreamResolver/http:dood.toesk1m9eumzyjj b/src/utils/__fixtures__/StreamResolver/http:dood.toesk1m9eumzyjj deleted file mode 100644 index b80b04b..0000000 --- a/src/utils/__fixtures__/StreamResolver/http:dood.toesk1m9eumzyjj +++ /dev/null @@ -1 +0,0 @@ - des-teufels-bad-2024 - DoodStream

Not Found

video you are looking for is not found.

< \ No newline at end of file diff --git a/src/utils/__fixtures__/StreamResolver/http:dood.topass_md5158055412-45-38-1759848086-3cf7d759fe3ad4057b7566c8d4366d1caej8q7ajug1gt0nd4lbs8zgd b/src/utils/__fixtures__/StreamResolver/http:dood.topass_md5158055412-45-38-1759848086-3cf7d759fe3ad4057b7566c8d4366d1caej8q7ajug1gt0nd4lbs8zgd deleted file mode 100644 index 578be36..0000000 --- a/src/utils/__fixtures__/StreamResolver/http:dood.topass_md5158055412-45-38-1759848086-3cf7d759fe3ad4057b7566c8d4366d1caej8q7ajug1gt0nd4lbs8zgd +++ /dev/null @@ -1 +0,0 @@ -https://do365ki.cloudatacdn.com/u5kjzcovmpd3sdgge7tc4jacdzaikwer6ff4qd463b6qj6lodlgpnsbkffvq/xy59ygfkku~ \ No newline at end of file diff --git a/src/utils/__fixtures__/StreamResolver/http:dood.topass_md5164387212-45-38-1759848085-32ec32c6c5a194bf76d92c97ccad515e7uebebipnnhusa4xnyea1er4 b/src/utils/__fixtures__/StreamResolver/http:dood.topass_md5164387212-45-38-1759848085-32ec32c6c5a194bf76d92c97ccad515e7uebebipnnhusa4xnyea1er4 deleted file mode 100644 index 088c406..0000000 --- a/src/utils/__fixtures__/StreamResolver/http:dood.topass_md5164387212-45-38-1759848085-32ec32c6c5a194bf76d92c97ccad515e7uebebipnnhusa4xnyea1er4 +++ /dev/null @@ -1 +0,0 @@ -https://aa360cc.cloudatacdn.com/u5kjv4jxytd3sdgge5uogji5dg4huat2pxrm2qibdbm5rmcr6fv2tcniineq/6aqs1w2xla~ \ No newline at end of file diff --git a/src/utils/__fixtures__/StreamResolver/http:dood.topass_md5165649626-45-38-1759848085-df2d3f389663cb81179cf3966d1ef38daw2v2d8uhbrj2ky54d573ujk b/src/utils/__fixtures__/StreamResolver/http:dood.topass_md5165649626-45-38-1759848085-df2d3f389663cb81179cf3966d1ef38daw2v2d8uhbrj2ky54d573ujk deleted file mode 100644 index 3eb4288..0000000 --- a/src/utils/__fixtures__/StreamResolver/http:dood.topass_md5165649626-45-38-1759848085-df2d3f389663cb81179cf3966d1ef38daw2v2d8uhbrj2ky54d573ujk +++ /dev/null @@ -1 +0,0 @@ -https://et1095c.cloudatacdn.com/u5kjxj7s27d3sdgge5woezkbi7milmjrckehcrwuw63gsvytfwxlfmjzvu3a/jli1t787d1~ \ No newline at end of file diff --git a/src/utils/__snapshots__/StreamResolver.test.ts.snap b/src/utils/__snapshots__/StreamResolver.test.ts.snap index bfa7963..df269cd 100644 --- a/src/utils/__snapshots__/StreamResolver.test.ts.snap +++ b/src/utils/__snapshots__/StreamResolver.test.ts.snap @@ -21,6 +21,15 @@ exports[`resolve adds error info 1`] = ` "title": "🔗 working2", "url": "https://working1.com/", }, + { + "behaviorHints": { + "bingeGroup": "webstreamr-undefined-undefined-de", + "notWebReady": true, + }, + "externalUrl": "https://example.com/", + "name": "WebStreamr 🇩🇪", + "title": "🔗 hoster.com", + }, ], } `; @@ -156,6 +165,15 @@ exports[`resolve adds error info 2`] = ` "title": "🔗 working2", "url": "https://working1.com/", }, + { + "behaviorHints": { + "bingeGroup": "webstreamr-undefined-undefined-de", + "notWebReady": true, + }, + "externalUrl": "https://example.com/", + "name": "WebStreamr 🇩🇪", + "title": "🔗 hoster.com", + }, ], } `; @@ -254,38 +272,6 @@ exports[`resolve returns sorted results 1`] = ` 💾 1 GB 🔗 SuperVideo from MeineCloud", "url": "https://hfs309.serversicuro.cc/hls/,dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p577fze64mz3bsmdyq,.urlset/master.m3u8", }, - { - "behaviorHints": { - "bingeGroup": "webstreamr-meinecloud-doodstream-de", - "notWebReady": true, - "proxyHeaders": { - "request": { - "Referer": "http://dood.to", - }, - }, - "videoSize": 1395864371, - }, - "name": "WebStreamr 🇩🇪", - "title": "des-teufels-bad-2024 -💾 1.3 GB 🔗 DoodStream from MeineCloud", - "url": "https://aa360cc.cloudatacdn.com/u5kjv4jxytd3sdgge5uogji5dg4huat2pxrm2qibdbm5rmcr6fv2tcniineq/6aqs1w2xla~mocked-random-string?token=7uebebipnnhusa4xnyea1er4&expiry=639837296000", - }, - { - "behaviorHints": { - "bingeGroup": "webstreamr-mostraguarda-doodstream-it", - "notWebReady": true, - "proxyHeaders": { - "request": { - "Referer": "http://dood.to", - }, - }, - "videoSize": 1181116006, - }, - "name": "WebStreamr 🇮🇹", - "title": "the-devils-bath-2024-sd-sub-ita -💾 1.1 GB 🔗 DoodStream from MostraGuarda", - "url": "https://et1095c.cloudatacdn.com/u5kjxj7s27d3sdgge5woezkbi7milmjrckehcrwuw63gsvytfwxlfmjzvu3a/jli1t787d1~mocked-random-string?token=aw2v2d8uhbrj2ky54d573ujk&expiry=639837296000", - }, ] `; @@ -335,38 +321,6 @@ exports[`resolve returns sorted results 2`] = ` 💾 1 GB 🔗 SuperVideo from MeineCloud", "url": "https://hfs309.serversicuro.cc/hls/,dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p577fze64mz3bsmdyq,.urlset/master.m3u8", }, - { - "behaviorHints": { - "bingeGroup": "webstreamr-meinecloud-doodstream-de", - "notWebReady": true, - "proxyHeaders": { - "request": { - "Referer": "http://dood.to", - }, - }, - "videoSize": 1395864371, - }, - "name": "WebStreamr 🇩🇪", - "title": "des-teufels-bad-2024 -💾 1.3 GB 🔗 DoodStream from MeineCloud", - "url": "https://aa360cc.cloudatacdn.com/u5kjv4jxytd3sdgge5uogji5dg4huat2pxrm2qibdbm5rmcr6fv2tcniineq/6aqs1w2xla~mocked-random-string?token=7uebebipnnhusa4xnyea1er4&expiry=639837296000", - }, - { - "behaviorHints": { - "bingeGroup": "webstreamr-mostraguarda-doodstream-it", - "notWebReady": true, - "proxyHeaders": { - "request": { - "Referer": "http://dood.to", - }, - }, - "videoSize": 1181116006, - }, - "name": "WebStreamr 🇮🇹", - "title": "the-devils-bath-2024-sd-sub-ita -💾 1.1 GB 🔗 DoodStream from MostraGuarda", - "url": "https://et1095c.cloudatacdn.com/u5kjxj7s27d3sdgge5woezkbi7milmjrckehcrwuw63gsvytfwxlfmjzvu3a/jli1t787d1~mocked-random-string?token=aw2v2d8uhbrj2ky54d573ujk&expiry=639837296000", - }, { "behaviorHints": { "bingeGroup": "webstreamr-meinecloud-external-de", @@ -385,6 +339,24 @@ exports[`resolve returns sorted results 2`] = ` "name": "WebStreamr 🇮🇹 ⚠️ external", "title": "🔗 mixdrop.ag from MostraGuarda", }, + { + "behaviorHints": { + "bingeGroup": "webstreamr-meinecloud-external-de", + "notWebReady": true, + }, + "externalUrl": "https://dood.to/e/sk1m9eumzyjj", + "name": "WebStreamr 🇩🇪 ⚠️ external", + "title": "🔗 dood.to from MeineCloud", + }, + { + "behaviorHints": { + "bingeGroup": "webstreamr-mostraguarda-external-it", + "notWebReady": true, + }, + "externalUrl": "https://dood.to/e/37o04m33q3g5", + "name": "WebStreamr 🇮🇹 ⚠️ external", + "title": "🔗 dood.to from MostraGuarda", + }, ] `;