From 8c6807ccfed0ae8c19c3f9b506d3d03f6cfbc309 Mon Sep 17 00:00:00 2001 From: GSTAR <44748406+GLlgGL@users.noreply.github.com> Date: Tue, 20 Jan 2026 15:22:29 +0100 Subject: [PATCH 1/9] Update DoodStream.ts Use MFP to fix problems with doodstream and make it work on android. --- src/extractor/DoodStream.ts | 86 +++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 47 deletions(-) diff --git a/src/extractor/DoodStream.ts b/src/extractor/DoodStream.ts index f2962bb..584fc44 100644 --- a/src/extractor/DoodStream.ts +++ b/src/extractor/DoodStream.ts @@ -1,70 +1,62 @@ -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 { Extractor } from './Extractor'; +import { NotFoundError } from '../error'; +import { + buildMediaFlowProxyExtractorStreamUrl, + supportsMediaFlowProxy, +} from '../utils'; export class DoodStream extends Extractor { public readonly id = 'doodstream'; + public readonly label = 'Dood(MFP)'; + public override readonly ttl = 6 * 60 * 60 * 1000; // 6h - public readonly label = 'DoodStream'; + public override viaMediaFlowProxy = true; - public override readonly ttl: number = 21600000; // 6h + public supports(ctx: Context, url: URL): boolean { + const supportedDomain = + /dood|do[0-9]go|doood|dooood|ds2play|ds2video|dsvplay|d0o0d|do0od|d0000d|d000d|myvidplay|vidply|all3do|doply|vide0|vvide0|d-s/.test( + url.host + ); - /** @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/); - }; + return supportedDomain && supportsMediaFlowProxy(ctx); + } public override normalize(url: URL): URL { - const videoId = url.pathname.replace(/\/+$/, '').split('/').at(-1) as string; + const id = url.pathname.replace(/\/+$/, '').split('/').pop(); + if (!id) throw new NotFoundError('Dood: invalid URL'); - return new URL(`http://dood.to/e/${videoId}`); - }; + return new URL(`https://dood.to/e/${id}`); + } - protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise { - const headers = { Referer: meta.referer ?? url.href }; + protected async extractInternal( + ctx: Context, + url: URL, + meta: Meta + ): Promise { - const html = await this.fetcher.text(ctx, url, { headers }); + const headers = { + Referer: meta.referer ?? url.href, + }; - if (/Video not found/.test(html)) { - 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()}`); - } + const streamUrl = + await buildMediaFlowProxyExtractorStreamUrl( + ctx, + this.fetcher, + 'Doodstream', + url, + headers + ); return [ { - url: mp4Url, + url: streamUrl, format: Format.mp4, label: this.label, + sourceId: `${this.id}_${meta.countryCodes?.join('_')}`, ttl: this.ttl, - meta: { - ...meta, - title, - ...(sizeMatch && { bytes: bytes.parse(sizeMatch[1] as string) as number }), - }, - requestHeaders: { - Referer: url.origin, - }, + meta, }, ]; - }; + } } -- 2.45.2 From b90f1d1ebaef9a01b78063602d08cb39f9c30d36 Mon Sep 17 00:00:00 2001 From: GSTAR <44748406+GLlgGL@users.noreply.github.com> Date: Tue, 20 Jan 2026 15:29:27 +0100 Subject: [PATCH 2/9] Update DoodStream.ts --- src/extractor/DoodStream.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/extractor/DoodStream.ts b/src/extractor/DoodStream.ts index 584fc44..8e612b9 100644 --- a/src/extractor/DoodStream.ts +++ b/src/extractor/DoodStream.ts @@ -1,10 +1,10 @@ -import { Context, Format, Meta, UrlResult } from '../types'; -import { Extractor } from './Extractor'; import { NotFoundError } from '../error'; +import { Context, Format, Meta, UrlResult } from '../types'; import { buildMediaFlowProxyExtractorStreamUrl, supportsMediaFlowProxy, } from '../utils'; +import { Extractor } from './Extractor'; export class DoodStream extends Extractor { public readonly id = 'doodstream'; @@ -14,10 +14,9 @@ export class DoodStream extends Extractor { public override viaMediaFlowProxy = true; public supports(ctx: Context, url: URL): boolean { - const supportedDomain = - /dood|do[0-9]go|doood|dooood|ds2play|ds2video|dsvplay|d0o0d|do0od|d0000d|d000d|myvidplay|vidply|all3do|doply|vide0|vvide0|d-s/.test( - url.host - ); + const supportedDomain = /dood|do[0-9]go|doood|dooood|ds2play|ds2video|dsvplay|d0o0d|do0od|d0000d|d000d|myvidplay|vidply|all3do|doply|vide0|vvide0|d-s/.test( + url.host + ); return supportedDomain && supportsMediaFlowProxy(ctx); } @@ -34,7 +33,6 @@ export class DoodStream extends Extractor { url: URL, meta: Meta ): Promise { - const headers = { Referer: meta.referer ?? url.href, }; @@ -45,7 +43,7 @@ export class DoodStream extends Extractor { this.fetcher, 'Doodstream', url, - headers + headers, ); return [ -- 2.45.2 From 982dfcfc8a6937b02f8d48a057ea71891cf6e528 Mon Sep 17 00:00:00 2001 From: GSTAR <44748406+GLlgGL@users.noreply.github.com> Date: Tue, 20 Jan 2026 15:34:35 +0100 Subject: [PATCH 3/9] Update DoodStream.ts --- src/extractor/DoodStream.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/extractor/DoodStream.ts b/src/extractor/DoodStream.ts index 8e612b9..f58c14c 100644 --- a/src/extractor/DoodStream.ts +++ b/src/extractor/DoodStream.ts @@ -14,9 +14,10 @@ export class DoodStream extends Extractor { public override viaMediaFlowProxy = true; public supports(ctx: Context, url: URL): boolean { - const supportedDomain = /dood|do[0-9]go|doood|dooood|ds2play|ds2video|dsvplay|d0o0d|do0od|d0000d|d000d|myvidplay|vidply|all3do|doply|vide0|vvide0|d-s/.test( - url.host - ); + const supportedDomain = + /dood|do[0-9]go|doood|dooood|ds2play|ds2video|dsvplay|d0o0d|do0od|d0000d|d000d|myvidplay|vidply|all3do|doply|vide0|vvide0|d-s/.test( + url.host, + ); return supportedDomain && supportsMediaFlowProxy(ctx); } @@ -31,7 +32,7 @@ export class DoodStream extends Extractor { protected async extractInternal( ctx: Context, url: URL, - meta: Meta + meta: Meta, ): Promise { const headers = { Referer: meta.referer ?? url.href, -- 2.45.2 From 20eaadaefaeac95a6557d92dbdc206776ecfdab0 Mon Sep 17 00:00:00 2001 From: GSTAR <44748406+GLlgGL@users.noreply.github.com> Date: Tue, 20 Jan 2026 15:43:31 +0100 Subject: [PATCH 4/9] Update DoodStream.ts --- src/extractor/DoodStream.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extractor/DoodStream.ts b/src/extractor/DoodStream.ts index f58c14c..24a8296 100644 --- a/src/extractor/DoodStream.ts +++ b/src/extractor/DoodStream.ts @@ -14,7 +14,7 @@ export class DoodStream extends Extractor { public override viaMediaFlowProxy = true; public supports(ctx: Context, url: URL): boolean { - const supportedDomain = + const supportedDomain = /dood|do[0-9]go|doood|dooood|ds2play|ds2video|dsvplay|d0o0d|do0od|d0000d|d000d|myvidplay|vidply|all3do|doply|vide0|vvide0|d-s/.test( url.host, ); -- 2.45.2 From 9f0b715ac688abda247a2597a617f397f99f040e Mon Sep 17 00:00:00 2001 From: GSTAR <44748406+GLlgGL@users.noreply.github.com> Date: Tue, 20 Jan 2026 15:46:31 +0100 Subject: [PATCH 5/9] Update DoodStream.ts -- 2.45.2 From 849dfe951c89ffe0cd55a4be7e0f35c93495fdc7 Mon Sep 17 00:00:00 2001 From: GSTAR <44748406+GLlgGL@users.noreply.github.com> Date: Tue, 20 Jan 2026 16:09:07 +0100 Subject: [PATCH 6/9] Update DoodStream.ts --- src/extractor/DoodStream.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/extractor/DoodStream.ts b/src/extractor/DoodStream.ts index 24a8296..7717ae1 100644 --- a/src/extractor/DoodStream.ts +++ b/src/extractor/DoodStream.ts @@ -14,8 +14,8 @@ export class DoodStream extends Extractor { public override viaMediaFlowProxy = true; public supports(ctx: Context, url: URL): boolean { - const supportedDomain = - /dood|do[0-9]go|doood|dooood|ds2play|ds2video|dsvplay|d0o0d|do0od|d0000d|d000d|myvidplay|vidply|all3do|doply|vide0|vvide0|d-s/.test( + const supportedDomain + = /dood|do[0-9]go|doood|dooood|ds2play|ds2video|dsvplay|d0o0d|do0od|d0000d|d000d|myvidplay|vidply|all3do|doply|vide0|vvide0|d-s/.test( url.host, ); @@ -38,8 +38,8 @@ export class DoodStream extends Extractor { Referer: meta.referer ?? url.href, }; - const streamUrl = - await buildMediaFlowProxyExtractorStreamUrl( + const streamUrl + = await buildMediaFlowProxyExtractorStreamUrl( ctx, this.fetcher, 'Doodstream', @@ -52,9 +52,11 @@ export class DoodStream extends Extractor { url: streamUrl, format: Format.mp4, label: this.label, - sourceId: `${this.id}_${meta.countryCodes?.join('_')}`, ttl: this.ttl, - meta, + meta: { + ...meta, + sourceId: `${this.id}_${meta.countryCodes?.join('_')}`, + }, }, ]; } -- 2.45.2 From 6b82e3d8c3da51e26e3f9d5d26327a80ecfbdd09 Mon Sep 17 00:00:00 2001 From: WebStreamr <210764791+webstreamr@users.noreply.github.com> Date: Tue, 20 Jan 2026 15:47:58 +0000 Subject: [PATCH 7/9] cleanup/revert doodstream --- src/extractor/DoodStream.ts | 66 +++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 36 deletions(-) diff --git a/src/extractor/DoodStream.ts b/src/extractor/DoodStream.ts index 7717ae1..5e3ca99 100644 --- a/src/extractor/DoodStream.ts +++ b/src/extractor/DoodStream.ts @@ -1,63 +1,57 @@ +import bytes from 'bytes'; +import * as cheerio from 'cheerio'; import { NotFoundError } from '../error'; import { Context, Format, Meta, UrlResult } from '../types'; -import { - buildMediaFlowProxyExtractorStreamUrl, - supportsMediaFlowProxy, -} from '../utils'; +import { buildMediaFlowProxyExtractorStreamUrl, supportsMediaFlowProxy } from '../utils'; import { Extractor } from './Extractor'; export class DoodStream extends Extractor { public readonly id = 'doodstream'; - public readonly label = 'Dood(MFP)'; - public override readonly ttl = 6 * 60 * 60 * 1000; // 6h + + public readonly label = 'DoodStream'; + + 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 { - const supportedDomain - = /dood|do[0-9]go|doood|dooood|ds2play|ds2video|dsvplay|d0o0d|do0od|d0000d|d000d|myvidplay|vidply|all3do|doply|vide0|vvide0|d-s/.test( - url.host, - ); - - return supportedDomain && supportsMediaFlowProxy(ctx); - } + 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 { - const id = url.pathname.replace(/\/+$/, '').split('/').pop(); - if (!id) throw new NotFoundError('Dood: invalid URL'); + const videoId = url.pathname.replace(/\/+$/, '').split('/').at(-1) as string; - return new URL(`https://dood.to/e/${id}`); - } + return new URL(`http://dood.to/e/${videoId}`); + }; - protected async extractInternal( - ctx: Context, - url: URL, - meta: Meta, - ): Promise { - const headers = { - Referer: meta.referer ?? url.href, - }; + protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise { + const headers = { Referer: meta.referer ?? url.href }; - const streamUrl - = await buildMediaFlowProxyExtractorStreamUrl( - ctx, - this.fetcher, - 'Doodstream', - url, - headers, - ); + const html = await this.fetcher.text(ctx, url, { headers }); + + if (/Video not found/.test(html)) { + throw new NotFoundError(); + } + + 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)/); return [ { - url: streamUrl, + url: await buildMediaFlowProxyExtractorStreamUrl(ctx, this.fetcher, 'Doodstream', url, headers), format: Format.mp4, label: this.label, ttl: this.ttl, meta: { ...meta, - sourceId: `${this.id}_${meta.countryCodes?.join('_')}`, + title, + ...(sizeMatch && { bytes: bytes.parse(sizeMatch[1] as string) as number }), }, }, ]; - } + }; } -- 2.45.2 From b822e034b045e49d6e09623b448b2e62d166f732 Mon Sep 17 00:00:00 2001 From: WebStreamr <210764791+webstreamr@users.noreply.github.com> Date: Tue, 20 Jan 2026 20:20:05 +0000 Subject: [PATCH 8/9] use more efficient MFP redirect solution --- src/extractor/DoodStream.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/extractor/DoodStream.ts b/src/extractor/DoodStream.ts index 5e3ca99..f03356b 100644 --- a/src/extractor/DoodStream.ts +++ b/src/extractor/DoodStream.ts @@ -2,7 +2,7 @@ import bytes from 'bytes'; import * as cheerio from 'cheerio'; import { NotFoundError } from '../error'; import { Context, Format, Meta, UrlResult } from '../types'; -import { buildMediaFlowProxyExtractorStreamUrl, supportsMediaFlowProxy } from '../utils'; +import { buildMediaFlowProxyExtractorRedirectUrl, supportsMediaFlowProxy } from '../utils'; import { Extractor } from './Extractor'; export class DoodStream extends Extractor { @@ -42,7 +42,7 @@ export class DoodStream extends Extractor { return [ { - url: await buildMediaFlowProxyExtractorStreamUrl(ctx, this.fetcher, 'Doodstream', url, headers), + url: buildMediaFlowProxyExtractorRedirectUrl(ctx, 'Doodstream', url, headers), format: Format.mp4, label: this.label, ttl: this.ttl, -- 2.45.2 From 895ac236df0aa2e04bc459519579433ac9924ffb Mon Sep 17 00:00:00 2001 From: WebStreamr <210764791+webstreamr@users.noreply.github.com> Date: Tue, 20 Jan 2026 20:47:56 +0000 Subject: [PATCH 9/9] adapt tests --- src/extractor/DoodStream.test.ts | 10 +- ...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 +++++++----------- 27 files changed, 62 insertions(+), 127 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/__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", + }, ] `; -- 2.45.2