diff --git a/src/extractor/HubCloud.ts b/src/extractor/HubCloud.ts index 6e5357a..aaa982a 100644 --- a/src/extractor/HubCloud.ts +++ b/src/extractor/HubCloud.ts @@ -21,7 +21,7 @@ export class HubCloud extends Extractor { const linksHtml = await this.fetcher.text(ctx, new URL(redirectUrlMatch[1] as string)); const $ = cheerio.load(linksHtml); - return [ + const urlResults = [ ...$('a') .filter((_i, el) => { const text = $(el).text(); @@ -61,5 +61,21 @@ export class HubCloud extends Extractor { }; }).toArray(), ]; + + return this.asyncFilter(urlResults, async ({ url }) => { + try { + await this.fetcher.head(ctx, url); + } catch { + return false; + } + + return true; + }); }; + + private async asyncFilter(array: T[], asyncCallback: (item: T) => Promise): Promise { + const results = await Promise.all(array.map(asyncCallback)); + + return array.filter((_, index) => results[index]); + } } diff --git a/src/extractor/__fixtures__/HubCloud/head-https:pixeldrain.devapifile2kFQBQiodownload b/src/extractor/__fixtures__/HubCloud/head-https:pixeldrain.devapifile2kFQBQiodownload new file mode 100644 index 0000000..f911fbf --- /dev/null +++ b/src/extractor/__fixtures__/HubCloud/head-https:pixeldrain.devapifile2kFQBQiodownload @@ -0,0 +1 @@ +{"accept-ranges":"bytes","access-control-allow-origin":"*","cache-control":"public, max-age=31536000","connection":"close","content-disposition":"attachment; filename=\"Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv\"","content-length":"3386258053","content-security-policy":"default-src 'self'; script-src 'none'","content-type":"video/x-matroska","date":"Tue, 16 Sep 2025 12:25:06 GMT","last-modified":"Sun, 18 May 2025 10:50:26 GMT","strict-transport-security":"max-age=31536000","x-ratelimit-limit":"3000","x-ratelimit-remaining":"2998","x-ratelimit-reset":"1758025560","x-robots-tag":"noindex, nofollow"} \ No newline at end of file diff --git a/src/extractor/__fixtures__/HubCloud/head-https:pixeldrain.netapifileHqAiguQV b/src/extractor/__fixtures__/HubCloud/head-https:pixeldrain.netapifileHqAiguQV new file mode 100644 index 0000000..66ffc88 --- /dev/null +++ b/src/extractor/__fixtures__/HubCloud/head-https:pixeldrain.netapifileHqAiguQV @@ -0,0 +1 @@ +{"accept-ranges":"bytes","access-control-allow-origin":"*","cache-control":"public, max-age=31536000","connection":"close","content-disposition":"inline; filename=\"Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv\"","content-length":"5733546178","content-security-policy":"default-src 'self'; script-src 'none'","content-type":"video/x-matroska","date":"Tue, 16 Sep 2025 12:25:05 GMT","last-modified":"Sun, 25 May 2025 11:45:11 GMT","strict-transport-security":"max-age=31536000","x-ratelimit-limit":"3000","x-ratelimit-remaining":"2998","x-ratelimit-reset":"1758025560","x-robots-tag":"noindex, nofollow"} \ No newline at end of file diff --git a/src/extractor/__fixtures__/HubCloud/head-https:pub-52f57cc1b81f4ecdac02802c1566c33d.r2.dev-e8f5101f73a4cf8b912d84c41e08628f.error b/src/extractor/__fixtures__/HubCloud/head-https:pub-52f57cc1b81f4ecdac02802c1566c33d.r2.dev-e8f5101f73a4cf8b912d84c41e08628f.error new file mode 100644 index 0000000..91789e8 --- /dev/null +++ b/src/extractor/__fixtures__/HubCloud/head-https:pub-52f57cc1b81f4ecdac02802c1566c33d.r2.dev-e8f5101f73a4cf8b912d84c41e08628f.error @@ -0,0 +1 @@ +Fetcher error: 403: Forbidden \ No newline at end of file diff --git a/src/extractor/__fixtures__/HubCloud/head-https:pub-52f57cc1b81f4ecdac02802c1566c33d.r2.devDexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkvtoken1758025505.error b/src/extractor/__fixtures__/HubCloud/head-https:pub-52f57cc1b81f4ecdac02802c1566c33d.r2.devDexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkvtoken1758025505.error new file mode 100644 index 0000000..91789e8 --- /dev/null +++ b/src/extractor/__fixtures__/HubCloud/head-https:pub-52f57cc1b81f4ecdac02802c1566c33d.r2.devDexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkvtoken1758025505.error @@ -0,0 +1 @@ +Fetcher error: 403: Forbidden \ No newline at end of file diff --git a/src/extractor/__fixtures__/HubCloud/head-https:pub-c0c400d353df4c68ae3a2d5e089ecf60.r2.devDark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv b/src/extractor/__fixtures__/HubCloud/head-https:pub-c0c400d353df4c68ae3a2d5e089ecf60.r2.devDark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv new file mode 100644 index 0000000..29388c0 --- /dev/null +++ b/src/extractor/__fixtures__/HubCloud/head-https:pub-c0c400d353df4c68ae3a2d5e089ecf60.r2.devDark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv @@ -0,0 +1 @@ +{"accept-ranges":"bytes","cache-control":"public, max-age=604800","cf-ray":"980058374e5337d8-FRA","connection":"close","content-disposition":"attachment; filename*=UTF-8''Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv","content-language":"S-B0t","content-length":"3386258051","content-type":"application/octet-stream","date":"Tue, 16 Sep 2025 12:25:06 GMT","etag":"\"26f5e98cf3cc3ef929a660fbf44fe115-404\"","last-modified":"Sun, 18 May 2025 11:02:51 GMT","server":"cloudflare","vary":"Accept-Encoding"} \ No newline at end of file diff --git a/src/extractor/__fixtures__/HubCloud/https:stockbhoomi.comhubcloud.phphosthubcloudandidbffzqlpqfllfcldandtokenZDdhbnhoS3dXSzlGOGhnN3ErdTUxUWJhR3Q3UGxaTElRQjFnWVNObGdyZz0 b/src/extractor/__fixtures__/HubCloud/https:gamerxyt.comhubcloud.phphosthubcloudandidbffzqlpqfllfcldandtokenZDdhbnhoS3dXSzlGOGhnN3ErdTUxVGpNRHpBR2lCakE1ZHJUTlcvUTlaTT0 similarity index 86% rename from src/extractor/__fixtures__/HubCloud/https:stockbhoomi.comhubcloud.phphosthubcloudandidbffzqlpqfllfcldandtokenZDdhbnhoS3dXSzlGOGhnN3ErdTUxUWJhR3Q3UGxaTElRQjFnWVNObGdyZz0 rename to src/extractor/__fixtures__/HubCloud/https:gamerxyt.comhubcloud.phphosthubcloudandidbffzqlpqfllfcldandtokenZDdhbnhoS3dXSzlGOGhnN3ErdTUxVGpNRHpBR2lCakE1ZHJUTlcvUTlaTT0 index 3b194e1..437b8b8 100644 --- a/src/extractor/__fixtures__/HubCloud/https:stockbhoomi.comhubcloud.phphosthubcloudandidbffzqlpqfllfcldandtokenZDdhbnhoS3dXSzlGOGhnN3ErdTUxUWJhR3Q3UGxaTElRQjFnWVNObGdyZz0 +++ b/src/extractor/__fixtures__/HubCloud/https:gamerxyt.comhubcloud.phphosthubcloudandidbffzqlpqfllfcldandtokenZDdhbnhoS3dXSzlGOGhnN3ErdTUxVGpNRHpBR2lCakE1ZHJUTlcvUTlaTT0 @@ -190,7 +190,7 @@ HubCloud | Login - + Download [Server : 10Gbps]

@@ -202,7 +202,7 @@ HubCloud | Login - Download [FSL Server] + Download [FSL Server] - + diff --git a/src/extractor/__fixtures__/HubCloud/https:stockbhoomi.comhubcloud.phphosthubcloudandididt1evqfuviqieiandtokenRUhXL2kvWnI3MmtFTTlyc1VGY2JSR2FsTnZCdkd0NFN5aUpPN1V0NHRSaz0 b/src/extractor/__fixtures__/HubCloud/https:gamerxyt.comhubcloud.phphosthubcloudandididt1evqfuviqieiandtokenRUhXL2kvWnI3MmtFTTlyc1VGY2JSUHJiRlcvSTBwOG9HNWFOa2tiMWVxMD0 similarity index 86% rename from src/extractor/__fixtures__/HubCloud/https:stockbhoomi.comhubcloud.phphosthubcloudandididt1evqfuviqieiandtokenRUhXL2kvWnI3MmtFTTlyc1VGY2JSR2FsTnZCdkd0NFN5aUpPN1V0NHRSaz0 rename to src/extractor/__fixtures__/HubCloud/https:gamerxyt.comhubcloud.phphosthubcloudandididt1evqfuviqieiandtokenRUhXL2kvWnI3MmtFTTlyc1VGY2JSUHJiRlcvSTBwOG9HNWFOa2tiMWVxMD0 index 011081d..2c27a94 100644 --- a/src/extractor/__fixtures__/HubCloud/https:stockbhoomi.comhubcloud.phphosthubcloudandididt1evqfuviqieiandtokenRUhXL2kvWnI3MmtFTTlyc1VGY2JSR2FsTnZCdkd0NFN5aUpPN1V0NHRSaz0 +++ b/src/extractor/__fixtures__/HubCloud/https:gamerxyt.comhubcloud.phphosthubcloudandididt1evqfuviqieiandtokenRUhXL2kvWnI3MmtFTTlyc1VGY2JSUHJiRlcvSTBwOG9HNWFOa2tiMWVxMD0 @@ -193,7 +193,7 @@ HubCloud | Login - + Download [Server : 10Gbps]

@@ -205,7 +205,7 @@ HubCloud | Login - Download [FSL Server] + Download [FSL Server] - + diff --git a/src/extractor/__fixtures__/HubCloud/https:stockbhoomi.comhubcloud.phphosthubcloudandidnknlofk8snfnknhandtokeneWJLS25YL0hUektLS0k0a3htWVJzeWVoZm85QS9CaENJTnBXdVlOakd0bz0 b/src/extractor/__fixtures__/HubCloud/https:gamerxyt.comhubcloud.phphosthubcloudandidnknlofk8snfnknhandtokeneWJLS25YL0hUektLS0k0a3htWVJzOEFuVnVvTHVEKzJ4eCtPUFBuUkRQRT0 similarity index 87% rename from src/extractor/__fixtures__/HubCloud/https:stockbhoomi.comhubcloud.phphosthubcloudandidnknlofk8snfnknhandtokeneWJLS25YL0hUektLS0k0a3htWVJzeWVoZm85QS9CaENJTnBXdVlOakd0bz0 rename to src/extractor/__fixtures__/HubCloud/https:gamerxyt.comhubcloud.phphosthubcloudandidnknlofk8snfnknhandtokeneWJLS25YL0hUektLS0k0a3htWVJzOEFuVnVvTHVEKzJ4eCtPUFBuUkRQRT0 index 6f99c8a..6d252ea 100644 --- a/src/extractor/__fixtures__/HubCloud/https:stockbhoomi.comhubcloud.phphosthubcloudandidnknlofk8snfnknhandtokeneWJLS25YL0hUektLS0k0a3htWVJzeWVoZm85QS9CaENJTnBXdVlOakd0bz0 +++ b/src/extractor/__fixtures__/HubCloud/https:gamerxyt.comhubcloud.phphosthubcloudandidnknlofk8snfnknhandtokeneWJLS25YL0hUektLS0k0a3htWVJzOEFuVnVvTHVEKzJ4eCtPUFBuUkRQRT0 @@ -193,7 +193,7 @@ HubCloud | Login - + Download [Server : 10Gbps]

@@ -213,7 +213,7 @@ HubCloud | Login - Download [ZipDisk Server] + Download [ZipDisk Server]

Resume is Supported in ZipDisk But please extract it as the files is inside zip

@@ -224,7 +224,7 @@ HubCloud | Login
- Downoad From Telegram 🔥 + Downoad From Telegram 🔥 @@ -260,7 +260,7 @@ HubCloud | Login
@@ -319,41 +319,32 @@ Msc - + diff --git a/src/extractor/__fixtures__/HubCloud/https:hubcloud.onedrivebffzqlpqfllfcld b/src/extractor/__fixtures__/HubCloud/https:hubcloud.onedrivebffzqlpqfllfcld index 03c3fe9..029df6f 100644 --- a/src/extractor/__fixtures__/HubCloud/https:hubcloud.onedrivebffzqlpqfllfcld +++ b/src/extractor/__fixtures__/HubCloud/https:hubcloud.onedrivebffzqlpqfllfcld @@ -217,7 +217,7 @@ HubCloud | Create An Account | Generate Direct Download Link + Generate Direct Download Link
@@ -248,7 +248,7 @@ HubCloud | Create An Account | -

If you're getting any error please report at @Telegram Group with Share Link And Screenshot (:

+

If you're getting any error please report at @Telegram Group with Share Link And Screenshot (:


@@ -280,7 +280,7 @@ setTimeout(function(){ document.querySelector(".loading").classList.add("d-none"); document.querySelector(".vd").classList.remove("d-none"); }, 2000); -var url = 'https://stockbhoomi.com/hubcloud.php?host=hubcloud&id=bffzqlpqfllfcld&token=ZDdhbnhoS3dXSzlGOGhnN3ErdTUxUWJhR3Q3UGxaTElRQjFnWVNObGdyZz0='; +var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=bffzqlpqfllfcld&token=ZDdhbnhoS3dXSzlGOGhnN3ErdTUxVGpNRHpBR2lCakE1ZHJUTlcvUTlaTT0='; var download = document.getElementById('download'); download.onclick = function() { diff --git a/src/extractor/__fixtures__/HubCloud/https:hubcloud.onedriveidt1evqfuviqiei b/src/extractor/__fixtures__/HubCloud/https:hubcloud.onedriveidt1evqfuviqiei index 99b1382..0de56ee 100644 --- a/src/extractor/__fixtures__/HubCloud/https:hubcloud.onedriveidt1evqfuviqiei +++ b/src/extractor/__fixtures__/HubCloud/https:hubcloud.onedriveidt1evqfuviqiei @@ -217,7 +217,7 @@ HubCloud | Create An Account | Generate Direct Download Link + Generate Direct Download Link
@@ -248,7 +248,7 @@ HubCloud | Create An Account | -

If you're getting any error please report at @Telegram Group with Share Link And Screenshot (:

+

If you're getting any error please report at @Telegram Group with Share Link And Screenshot (:


@@ -280,7 +280,7 @@ setTimeout(function(){ document.querySelector(".loading").classList.add("d-none"); document.querySelector(".vd").classList.remove("d-none"); }, 2000); -var url = 'https://stockbhoomi.com/hubcloud.php?host=hubcloud&id=idt1evqfuviqiei&token=RUhXL2kvWnI3MmtFTTlyc1VGY2JSR2FsTnZCdkd0NFN5aUpPN1V0NHRSaz0='; +var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=idt1evqfuviqiei&token=RUhXL2kvWnI3MmtFTTlyc1VGY2JSUHJiRlcvSTBwOG9HNWFOa2tiMWVxMD0='; var download = document.getElementById('download'); download.onclick = function() { diff --git a/src/extractor/__fixtures__/HubCloud/https:hubcloud.onedrivenknlofk8snfnknh b/src/extractor/__fixtures__/HubCloud/https:hubcloud.onedrivenknlofk8snfnknh index 026216f..107fb80 100644 --- a/src/extractor/__fixtures__/HubCloud/https:hubcloud.onedrivenknlofk8snfnknh +++ b/src/extractor/__fixtures__/HubCloud/https:hubcloud.onedrivenknlofk8snfnknh @@ -217,7 +217,7 @@ HubCloud | Create An Account | Generate Direct Download Link + Generate Direct Download Link
@@ -228,7 +228,7 @@ HubCloud | Create An Account | Download From Telegram + Download From Telegram @@ -249,7 +249,7 @@ HubCloud | Create An Account | -

If you're getting any error please report at @Telegram Group with Share Link And Screenshot (:

+

If you're getting any error please report at @Telegram Group with Share Link And Screenshot (:


@@ -281,7 +281,7 @@ setTimeout(function(){ document.querySelector(".loading").classList.add("d-none"); document.querySelector(".vd").classList.remove("d-none"); }, 2000); -var url = 'https://stockbhoomi.com/hubcloud.php?host=hubcloud&id=nknlofk8snfnknh&token=eWJLS25YL0hUektLS0k0a3htWVJzeWVoZm85QS9CaENJTnBXdVlOakd0bz0='; +var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=nknlofk8snfnknh&token=eWJLS25YL0hUektLS0k0a3htWVJzOEFuVnVvTHVEKzJ4eCtPUFBuUkRQRT0='; var download = document.getElementById('download'); download.onclick = function() { diff --git a/src/extractor/__snapshots__/HubCloud.test.ts.snap b/src/extractor/__snapshots__/HubCloud.test.ts.snap index 0e3f376..2642167 100644 --- a/src/extractor/__snapshots__/HubCloud.test.ts.snap +++ b/src/extractor/__snapshots__/HubCloud.test.ts.snap @@ -1,21 +1,6 @@ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing -exports[`HubCloud handle crayon shin-chan 1993 1`] = ` -[ - { - "format": "unknown", - "label": "HubCloud (FSL)", - "meta": { - "bytes": 28550795100, - "countryCodes": [], - "title": "Crayon Shinchan Action Kamen vs Demon (1993) 1080p BluRay REMUX AVC [Hindi DD 2.0 + Japanese FLAC 2.0] (PitiPati-Ionicboy) (4kHDHub.com).mkv", - }, - "sourceId": "hubcloud_fsl", - "ttl": 259200000, - "url": "https://pub-52f57cc1b81f4ecdac02802c1566c33d.r2.dev/Crayon%20Shinchan%20Action%20Kamen%20vs%20Demon%201993%201080p%20BluRay%20REMUX%20AVC%20[Hindi%20DD%202.0%20+%20Japanese%20FLAC%202.0]%20PitiPati-Ionicboy%204kHDHub.com.mkv?token=1757269247", - }, -] -`; +exports[`HubCloud handle crayon shin-chan 1993 1`] = `[]`; exports[`HubCloud handle dark 2017 s03e08 1`] = ` [ @@ -48,18 +33,6 @@ exports[`HubCloud handle dark 2017 s03e08 1`] = ` exports[`HubCloud handle dexter original sin 2024 s01e01 1`] = ` [ - { - "format": "unknown", - "label": "HubCloud (FSL)", - "meta": { - "bytes": 5733781340, - "countryCodes": [], - "title": "Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv", - }, - "sourceId": "hubcloud_fsl", - "ttl": 259200000, - "url": "https://pub-52f57cc1b81f4ecdac02802c1566c33d.r2.dev/Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv?token=1757321957", - }, { "format": "unknown", "label": "HubCloud (PixelServer)", diff --git a/src/utils/FetcherMock.ts b/src/utils/FetcherMock.ts index 0c22d8e..19e3c79 100644 --- a/src/utils/FetcherMock.ts +++ b/src/utils/FetcherMock.ts @@ -37,7 +37,7 @@ export class FetcherMock extends Fetcher { }; private readonly slugifyUrl = (url: URL): string => { - if (url.href.length > 255) { + if (url.href.length > 240) { return slugify(`${url.origin}-${crypto.createHash('md5').update(url.href).digest('hex')}`); }