diff --git a/src/extractor/DoodStream.test.ts b/src/extractor/DoodStream.test.ts
index 105f868..4dfa3d1 100644
--- a/src/extractor/DoodStream.test.ts
+++ b/src/extractor/DoodStream.test.ts
@@ -26,4 +26,8 @@ describe('DoodStream', () => {
test('can guess height from title', async () => {
expect(await extractorRegistry.handle(ctx, new URL('https://do7go.com/e/dfx8me4un4ul'), CountryCode.fr)).toMatchSnapshot();
});
+
+ test('cloudflare storage', async () => {
+ expect(await extractorRegistry.handle(ctx, new URL('https://doodstream.com/e/wfpwtsgyr1xi'), CountryCode.mx)).toMatchSnapshot();
+ });
});
diff --git a/src/extractor/DoodStream.ts b/src/extractor/DoodStream.ts
index 26ebcdd..cc03a15 100644
--- a/src/extractor/DoodStream.ts
+++ b/src/extractor/DoodStream.ts
@@ -44,9 +44,17 @@ export class DoodStream extends Extractor {
const $ = cheerio.load(html);
const title = $('title').text().trim().replace(/ - DoodStream$/, '').trim();
- const mp4Url = new URL(`${baseUrl}${randomstring.generate(10)}?token=${token}&expiry=${Date.now()}`);
-
- const mp4Head = await this.fetcher.head(ctx, mp4Url, { headers: { Referer: url.origin } });
+ let mp4Url: URL;
+ let bytes: number | undefined;
+ if (baseUrl.includes('cloudflarestorage')) {
+ mp4Url = new URL(baseUrl);
+ } else {
+ mp4Url = new URL(`${baseUrl}${randomstring.generate(10)}?token=${token}&expiry=${Date.now()}`);
+ const mp4Head = await this.fetcher.head(ctx, mp4Url, { headers: { Referer: url.origin } });
+ if (mp4Head['content-length']) {
+ bytes = parseInt(mp4Head['content-length'] as string);
+ }
+ }
return [
{
@@ -58,7 +66,7 @@ export class DoodStream extends Extractor {
meta: {
countryCodes: [countryCode],
title,
- ...(mp4Head['content-length'] && { bytes: parseInt(mp4Head['content-length'] as string) }),
+ ...(bytes && { bytes }),
},
requestHeaders: {
Referer: url.origin,
diff --git a/src/extractor/__fixtures__/DoodStream/http:dood.toewfpwtsgyr1xi b/src/extractor/__fixtures__/DoodStream/http:dood.toewfpwtsgyr1xi
new file mode 100644
index 0000000..31085c8
--- /dev/null
+++ b/src/extractor/__fixtures__/DoodStream/http:dood.toewfpwtsgyr1xi
@@ -0,0 +1 @@
+
241653--5bf448d3-184a-4b3f-a766-fa98d93c1300--bllz--2100527-doodstream - DoodStream
Not Found
video you are looking for is not found.
Resume playing?
Welcome back! You left off at 0:0:0. Would you like to resume watching where you left off?
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
new file mode 100644
index 0000000..368ef61
--- /dev/null
+++ b/src/extractor/__fixtures__/DoodStream/http:dood.topass_md5163663266-254-70-1752507840-ff2f201ab91945d62f297b2b1efe192aig5l9qo88wwzt14z4izyrrn2
@@ -0,0 +1 @@
+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/__snapshots__/DoodStream.test.ts.snap b/src/extractor/__snapshots__/DoodStream.test.ts.snap
index 60d8ad7..e86537d 100644
--- a/src/extractor/__snapshots__/DoodStream.test.ts.snap
+++ b/src/extractor/__snapshots__/DoodStream.test.ts.snap
@@ -22,6 +22,28 @@ exports[`DoodStream can guess height from title 1`] = `
]
`;
+exports[`DoodStream cloudflare storage 1`] = `
+[
+ {
+ "format": "mp4",
+ "label": "DoodStream",
+ "meta": {
+ "countryCodes": [
+ "mx",
+ ],
+ "height": undefined,
+ "title": "241653--5bf448d3-184a-4b3f-a766-fa98d93c1300--bllz--2100527-doodstream",
+ },
+ "requestHeaders": {
+ "Referer": "http://dood.to",
+ },
+ "sourceId": "doodstream_mx",
+ "ttl": 900000,
+ "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",
+ },
+]
+`;
+
exports[`DoodStream dood.to 1`] = `
[
{