Compare commits

..

17 commits

Author SHA1 Message Date
WebStreamr
720c9bb651
docs: mention PixelServer / pixeldrain limits 2026-03-27 22:10:38 +00:00
webstreamr
f05cf5040c
chore(release): release v0.69.1 (#801) 2026-03-27 22:05:18 +00:00
WebStreamr
65191cfc8d
fix(source): exclude ad videos in HDHub4u 2026-03-27 22:03:14 +00:00
WebStreamr
bd2dec0392
fix(source): remove stray console.log 2026-03-27 21:59:07 +00:00
webstreamr
5f9fbbb30d
chore(release): release v0.69.0 (#799) 2026-03-27 22:48:26 +01:00
WebStreamr
43f04455f1
feat(source): add HDHub4u 2026-03-27 21:42:10 +00:00
WebStreamr
43637a2ff4
refactor(source): extract hd hub link redirect resolver 2026-03-27 20:17:03 +00:00
WebStreamr
b87bf62362
chore: remove duplicate URLs 2026-03-27 19:40:27 +00:00
WebStreamr
89e57d48d9
chore(extractor): detect languages from HubCloud title 2026-03-27 19:30:47 +00:00
renovate[bot]
ad47aecea3
chore(deps): update dependency axios to v1.14.0 (#800)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-27 19:28:52 +00:00
WebStreamr
f192fd0b75
chore(extractor): detect resolution from HubCloud title 2026-03-27 19:26:31 +00:00
WebStreamr
557efd2079
fix(extractor): don't fail for HubDrive if HubCloud link is missing 2026-03-27 18:02:48 +00:00
webstreamr
373c6c1d4c
chore(release): release v0.68.0 (#798) 2026-03-26 15:57:28 +01:00
WebStreamr
4c7da5dc20
feat: exclude resolution config options 2026-03-26 14:46:07 +00:00
webstreamr
bed5b00300
chore(release): release v0.67.0 (#796) 2026-03-25 10:03:12 +01:00
WebStreamr
e36d460d57
feat(extractor): support FSLv2 server in HubCloud 2026-03-25 09:01:25 +00:00
renovate[bot]
5cffa112ba
chore(deps): update dependency typescript-eslint to v8.57.2 (#795)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-23 17:59:06 +00:00
63 changed files with 31545 additions and 436 deletions

View file

@ -1,3 +1,3 @@
{
".": "0.66.16"
".": "0.69.1"
}

View file

@ -1,5 +1,57 @@
# Changelog
## [0.69.1](https://github.com/webstreamr/webstreamr/compare/v0.69.0...v0.69.1) (2026-03-27)
### Bug Fixes
* **source:** exclude ad videos in HDHub4u ([65191cf](https://github.com/webstreamr/webstreamr/commit/65191cfc8dad8f58b44e2c355b9adc600b99b2bf))
* **source:** remove stray console.log ([bd2dec0](https://github.com/webstreamr/webstreamr/commit/bd2dec03925d8b7760044dbfaaaec00b48f7cb66))
## [0.69.0](https://github.com/webstreamr/webstreamr/compare/v0.68.0...v0.69.0) (2026-03-27)
### Miscellaneous Chores
* **deps:** update dependency axios to v1.14.0 ([#800](https://github.com/webstreamr/webstreamr/issues/800)) ([ad47aec](https://github.com/webstreamr/webstreamr/commit/ad47aecea3f3d34700add442e023bd54f73451c8))
* **extractor:** detect languages from HubCloud title ([89e57d4](https://github.com/webstreamr/webstreamr/commit/89e57d48d95a6f8dd6446048ae72de51dd481f37))
* **extractor:** detect resolution from HubCloud title ([f192fd0](https://github.com/webstreamr/webstreamr/commit/f192fd0b7523094746148989e0cf06717db8152e))
* remove duplicate URLs ([b87bf62](https://github.com/webstreamr/webstreamr/commit/b87bf62362f3cd6b3ea055ecdaec44511bf2ec84))
### Features
* **source:** add HDHub4u ([43f0445](https://github.com/webstreamr/webstreamr/commit/43f04455f17063e459df7e7a34af44de36afd6fc))
### Bug Fixes
* **extractor:** don't fail for HubDrive if HubCloud link is missing ([557efd2](https://github.com/webstreamr/webstreamr/commit/557efd207945ea7ada0bcaf475b0b9b9d60d8f5b))
### Code Refactoring
* **source:** extract hd hub link redirect resolver ([43637a2](https://github.com/webstreamr/webstreamr/commit/43637a2ff4280db208ec9c94c0a5d52a49dc6672))
## [0.68.0](https://github.com/webstreamr/webstreamr/compare/v0.67.0...v0.68.0) (2026-03-26)
### Features
* exclude resolution config options ([4c7da5d](https://github.com/webstreamr/webstreamr/commit/4c7da5dc208a1854a17aa43a26553fb6c83e7287))
## [0.67.0](https://github.com/webstreamr/webstreamr/compare/v0.66.16...v0.67.0) (2026-03-25)
### Miscellaneous Chores
* **deps:** update dependency typescript-eslint to v8.57.2 ([#795](https://github.com/webstreamr/webstreamr/issues/795)) ([5cffa11](https://github.com/webstreamr/webstreamr/commit/5cffa112bac29ee4eb18958f5345f0a3ae68ff30))
### Features
* **extractor:** support FSLv2 server in HubCloud ([e36d460](https://github.com/webstreamr/webstreamr/commit/e36d460d57bdc071fc111b1459ea26184a3233e3))
## [0.66.16](https://github.com/webstreamr/webstreamr/compare/v0.66.15...v0.66.16) (2026-03-23)

View file

@ -16,6 +16,7 @@ A public instance is available at https://webstreamr.hayd.uk. Hosting infrastruc
## Known issues / limitations
- PixelServer / pixeldrain has a daily limit of 6 GB per IP: https://pixeldrain.dev
- Dropload and SuperVideo on Android do not work because Stremio does not use the `Referer` header properly via HLS playlists: https://github.com/Stremio/stremio-bugs/issues/2389, maybe https://github.com/Stremio/stremio-bugs/issues/1579
- MediaFlow proxy has to be used in an inefficient way because Stremio on Android or its players cannot deal with HLS playlist with redirects: https://github.com/Stremio/stremio-bugs/issues/1574
- FlareSolverr cookies cannot be used because Cloudflare does techniques like TLS fingerprinting most likely. But FlareSolverr uses a session per host and should be quick.

145
package-lock.json generated
View file

@ -1,12 +1,12 @@
{
"name": "webstreamr",
"version": "0.66.16",
"version": "0.69.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "webstreamr",
"version": "0.66.16",
"version": "0.69.1",
"license": "MIT",
"dependencies": {
"@keyv/sqlite": "^4.0.5",
@ -2043,17 +2043,17 @@
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.1.tgz",
"integrity": "sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ==",
"version": "8.57.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.2.tgz",
"integrity": "sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.12.2",
"@typescript-eslint/scope-manager": "8.57.1",
"@typescript-eslint/type-utils": "8.57.1",
"@typescript-eslint/utils": "8.57.1",
"@typescript-eslint/visitor-keys": "8.57.1",
"@typescript-eslint/scope-manager": "8.57.2",
"@typescript-eslint/type-utils": "8.57.2",
"@typescript-eslint/utils": "8.57.2",
"@typescript-eslint/visitor-keys": "8.57.2",
"ignore": "^7.0.5",
"natural-compare": "^1.4.0",
"ts-api-utils": "^2.4.0"
@ -2066,7 +2066,7 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
"@typescript-eslint/parser": "^8.57.1",
"@typescript-eslint/parser": "^8.57.2",
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.0.0"
}
@ -2082,16 +2082,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.1.tgz",
"integrity": "sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==",
"version": "8.57.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.2.tgz",
"integrity": "sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/scope-manager": "8.57.1",
"@typescript-eslint/types": "8.57.1",
"@typescript-eslint/typescript-estree": "8.57.1",
"@typescript-eslint/visitor-keys": "8.57.1",
"@typescript-eslint/scope-manager": "8.57.2",
"@typescript-eslint/types": "8.57.2",
"@typescript-eslint/typescript-estree": "8.57.2",
"@typescript-eslint/visitor-keys": "8.57.2",
"debug": "^4.4.3"
},
"engines": {
@ -2107,14 +2107,14 @@
}
},
"node_modules/@typescript-eslint/project-service": {
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.1.tgz",
"integrity": "sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==",
"version": "8.57.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.2.tgz",
"integrity": "sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/tsconfig-utils": "^8.57.1",
"@typescript-eslint/types": "^8.57.1",
"@typescript-eslint/tsconfig-utils": "^8.57.2",
"@typescript-eslint/types": "^8.57.2",
"debug": "^4.4.3"
},
"engines": {
@ -2129,14 +2129,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.1.tgz",
"integrity": "sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==",
"version": "8.57.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.2.tgz",
"integrity": "sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.57.1",
"@typescript-eslint/visitor-keys": "8.57.1"
"@typescript-eslint/types": "8.57.2",
"@typescript-eslint/visitor-keys": "8.57.2"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -2147,9 +2147,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.1.tgz",
"integrity": "sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==",
"version": "8.57.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.2.tgz",
"integrity": "sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==",
"dev": true,
"license": "MIT",
"engines": {
@ -2164,15 +2164,15 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.1.tgz",
"integrity": "sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==",
"version": "8.57.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.2.tgz",
"integrity": "sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.57.1",
"@typescript-eslint/typescript-estree": "8.57.1",
"@typescript-eslint/utils": "8.57.1",
"@typescript-eslint/types": "8.57.2",
"@typescript-eslint/typescript-estree": "8.57.2",
"@typescript-eslint/utils": "8.57.2",
"debug": "^4.4.3",
"ts-api-utils": "^2.4.0"
},
@ -2189,9 +2189,9 @@
}
},
"node_modules/@typescript-eslint/types": {
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.1.tgz",
"integrity": "sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==",
"version": "8.57.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz",
"integrity": "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==",
"dev": true,
"license": "MIT",
"engines": {
@ -2203,16 +2203,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.1.tgz",
"integrity": "sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==",
"version": "8.57.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.2.tgz",
"integrity": "sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/project-service": "8.57.1",
"@typescript-eslint/tsconfig-utils": "8.57.1",
"@typescript-eslint/types": "8.57.1",
"@typescript-eslint/visitor-keys": "8.57.1",
"@typescript-eslint/project-service": "8.57.2",
"@typescript-eslint/tsconfig-utils": "8.57.2",
"@typescript-eslint/types": "8.57.2",
"@typescript-eslint/visitor-keys": "8.57.2",
"debug": "^4.4.3",
"minimatch": "^10.2.2",
"semver": "^7.7.3",
@ -2244,16 +2244,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.1.tgz",
"integrity": "sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==",
"version": "8.57.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.2.tgz",
"integrity": "sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.9.1",
"@typescript-eslint/scope-manager": "8.57.1",
"@typescript-eslint/types": "8.57.1",
"@typescript-eslint/typescript-estree": "8.57.1"
"@typescript-eslint/scope-manager": "8.57.2",
"@typescript-eslint/types": "8.57.2",
"@typescript-eslint/typescript-estree": "8.57.2"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -2268,13 +2268,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.1.tgz",
"integrity": "sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==",
"version": "8.57.2",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.2.tgz",
"integrity": "sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.57.1",
"@typescript-eslint/types": "8.57.2",
"eslint-visitor-keys": "^5.0.0"
},
"engines": {
@ -2961,14 +2961,14 @@
}
},
"node_modules/axios": {
"version": "1.13.6",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz",
"integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==",
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.14.0.tgz",
"integrity": "sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.11",
"form-data": "^4.0.5",
"proxy-from-env": "^1.1.0"
"proxy-from-env": "^2.1.0"
}
},
"node_modules/axios-cache-interceptor": {
@ -9197,10 +9197,13 @@
}
},
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
"license": "MIT"
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz",
"integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==",
"license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/pstree.remy": {
"version": "1.1.8",
@ -11012,16 +11015,16 @@
}
},
"node_modules/typescript-eslint": {
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.57.1.tgz",
"integrity": "sha512-fLvZWf+cAGw3tqMCYzGIU6yR8K+Y9NT2z23RwOjlNFF2HwSB3KhdEFI5lSBv8tNmFkkBShSjsCjzx1vahZfISA==",
"version": "8.57.2",
"resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.57.2.tgz",
"integrity": "sha512-VEPQ0iPgWO/sBaZOU1xo4nuNdODVOajPnTIbog2GKYr31nIlZ0fWPoCQgGfF3ETyBl1vn63F/p50Um9Z4J8O8A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/eslint-plugin": "8.57.1",
"@typescript-eslint/parser": "8.57.1",
"@typescript-eslint/typescript-estree": "8.57.1",
"@typescript-eslint/utils": "8.57.1"
"@typescript-eslint/eslint-plugin": "8.57.2",
"@typescript-eslint/parser": "8.57.2",
"@typescript-eslint/typescript-estree": "8.57.2",
"@typescript-eslint/utils": "8.57.2"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"

View file

@ -1,7 +1,7 @@
{
"name": "webstreamr",
"description": "Provides HTTP URLs from streaming websites.",
"version": "0.66.16",
"version": "0.69.1",
"type": "commonjs",
"scripts": {
"analyse": "tsc --noEmit --project ./tsconfig.dev.json",

View file

@ -21,4 +21,8 @@ describe('HubCloud', () => {
test('handle dark 2017 s03e08', async () => {
expect(await extractorRegistry.handle(ctx, new URL('https://hubcloud.one/drive/nknlofk8snfnknh'))).toMatchSnapshot();
});
test('handle goat 2026', async () => {
expect(await extractorRegistry.handle(ctx, new URL('https://hubcloud.foo/drive/p94k4dccjwxjcx4'))).toMatchSnapshot();
});
});

View file

@ -1,6 +1,7 @@
import bytes from 'bytes';
import * as cheerio from 'cheerio';
import { Context, Format, InternalUrlResult, Meta } from '../types';
import { findCountryCodes, findHeight } from '../utils';
import { Extractor } from './Extractor';
export class HubCloud extends Extractor {
@ -25,6 +26,10 @@ export class HubCloud extends Extractor {
const linksHtml = await this.fetcher.text(ctx, new URL(redirectUrlMatch[1] as string), { headers: { Referer: url.href } });
const $ = cheerio.load(linksHtml);
const title = $('title').text().trim();
const countryCodes = [...new Set([...meta.countryCodes ?? [], ...findCountryCodes(title)])];
const height = meta.height ?? findHeight(title);
return Promise.all([
...$('a')
.filter((_i, el) => {
@ -42,7 +47,31 @@ export class HubCloud extends Extractor {
...meta,
bytes: bytes.parse($('#size').text()) as number,
extractorId: `${this.id}_fsl`,
title: $('title').text().trim(),
countryCodes,
height,
title,
},
};
}).toArray(),
...$('a')
.filter((_i, el) => {
const text = $(el).text();
return text.includes('FSLv2');
})
.map((_i, el) => {
const url = new URL($(el).attr('href') as string);
return {
url,
format: Format.unknown,
label: `${this.label} (FSLv2)`,
meta: {
...meta,
bytes: bytes.parse($('#size').text()) as number,
extractorId: `${this.id}_fslv2`,
countryCodes,
height,
title,
},
};
}).toArray(),
@ -61,7 +90,9 @@ export class HubCloud extends Extractor {
...meta,
bytes: bytes.parse($('#size').text()) as number,
extractorId: `${this.id}_pixelserver`,
title: $('title').text().trim(),
countryCodes,
height,
title,
},
requestHeaders: { Referer: userUrl.href },
};

View file

@ -22,4 +22,8 @@ describe('HubDrive', () => {
test('handle avatar', async () => {
expect(await extractorRegistry.handle(ctx, new URL('https://hubdrive.space/file/7283903021'))).toMatchSnapshot();
});
test('handle missing hubcloud', async () => {
expect(await extractorRegistry.handle(ctx, new URL('https://hubdrive.space/file/2243124026'))).toMatchSnapshot();
});
});

View file

@ -31,8 +31,10 @@ export class HubDrive extends Extractor {
const html = await this.fetcher.text(ctx, url, { headers });
const $ = cheerio.load(html);
const hubCloudUrl = new URL($('a:contains("HubCloud")').attr('href') as string);
const hubCloudUrl = $('a:contains("HubCloud")')
.map((_i, el) => new URL($(el).attr('href') as string))
.get(0);
return this.hubCloud.extract(ctx, hubCloudUrl, meta);
return hubCloudUrl ? this.hubCloud.extract(ctx, hubCloudUrl, meta) : [];
};
}

View file

@ -19,8 +19,7 @@ document.addEventListener("DOMContentLoaded", function() {
<head>
<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</title>
<meta charset="utf-8">
<script async src="https://arc.io/widget.min.js#cmedRMLe"></script>
<meta name="referrer" content="no-referrer">
<meta name="referrer" content="no-referrer"/>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
@ -137,7 +136,8 @@ document.addEventListener("DOMContentLoaded", function() {
color: #000
}
</style>
<body><center>
<body>
<center>
<br/>
<div class="header">
HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
@ -183,15 +183,6 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
<span>If All Servers 🛜 are not working ❌ Then Please <br><b>Change Your Browser DNS To Cloudflare 🚀 or Use <a href="https://one.one.one.one/" target="_blank">VPN</a></b> <br><a href="https://tinyurl.com/Unblock-Ban-Site" target="_blank">How ? Click Here 👉 to Watch Tutorial 👀</a></span>
</div>
<a href="?token=a05d8e6416ce6b745a1073feeb9128a4" id="s3" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6" style="background-color: #2d50e2d1 !important;"><i class="fas fa-file-download fa-lg"></i> Download [FSLv2 Server]</a>
<script>
const fsl = document.getElementById('s3');
if (fsl) fsl.href += '_1' + new Date().getMinutes();
</script>
<div class="ad-container"></div>
@ -201,7 +192,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
<a href="https://pub-6b25c191839c4b01a878de4fdde0227b.r2.dev/e35ec4a9a4efb5a154d0d10f9481dafc?token=1765557445" id="fsl" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6"><i class="fas fa-file-download fa-lg"></i> Download [FSL Server]</a>
<a href="https://hub.oreao-cdn.buzz/e35ec4a9a4efb5a154d0d10f9481dafc?token=1774428754" id="fsl" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6"><i class="fas fa-file-download fa-lg"></i> Download [FSL Server]</a>
<script>
const fsl = document.getElementById('fsl');
if (fsl) fsl.href += '1' + new Date().getMinutes();
@ -213,7 +204,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
<a href="https://pixel.hubcdn.fans/?id=cf9da6de5b5cc1ca5b3e2520b5acf717edf501be7d93b65e393737c54cc02414e98b792baef67306766e1ada227050e941565d787d593d01503ab42aa92cc97a47e47ddd48df7d80a8e8c69d566d8d71fb824057bb75356c67cd624ebbd1497f::e0be1d5c31c2e9e9bce4002ad9cce30a" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-danger btn-lg h6" style="background-color: #dc3545 !important;">
<a href="https://pixel.hubcdn.fans/?id=5c7253dc7782ea14f891ed9f4c4d7f7ee43284d5e72e6ff401de6f1906046db7713b6d892a040a4b3dd31c9f47eee611a17924f224fc27dd70a921d4e9025c6b7d8b937e11b44e737bd4d5cfd203e361f77a8496dd75025ad8ce3e200905ef3f::853f8b4709e1acb8413ec14270adf205" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-danger btn-lg h6" style="background-color: #dc3545 !important;">
<i class="fas fa-file-download fa-lg"></i> Download [Server : 10Gbps]</a>
<p style="font-size: 12px; padding-bottom:4px !important; margin-bottom:0px !important">
@ -227,6 +218,11 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
<a href="https://hidden-boat-e87c.hivegic619569.workers.dev/1397962425/53eaea70751039409adff7a1b54377f9aa8e590cd610a6452c849a7cbd2e40af66e667588bada714c63a9cf5360712f266b304e379bfde1d12c46aa2ccedf6eb::6170837909b2ffc3fc7f892bc959bd7e/Crayon Shinchan Action Kamen vs Demon (1993) 1080p BluRay REMUX AVC [Hindi DD 2.0 + Japanese FLAC 2.0] (PitiPati-Ionicboy) (4kHDHub.com).mkv" download="Crayon Shinchan Action Kamen vs Demon (1993) 1080p BluRay REMUX AVC [Hindi DD 2.0 + Japanese FLAC 2.0] (PitiPati-Ionicboy) (4kHDHub.com).mkv" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6" style="background-color: #6f42c1 !important;"><i class="fas fa-file-download fa-lg"></i> Download [PDL Server]</a>
<script>
fetch('https://ping.rojgaartakkar.com/bmRFb0YweUVYZ1QvZys0OTRsNk53T2JMRG13QWRxYW5YcWYxYzNHYjhHZz0=');
</script>
@ -253,7 +249,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
if(isAndroid()){
android_launch.classList.remove("d-none");
android_launch.addEventListener('click', ()=>{
var anchor = document.createElement('a');anchor.href= createIntentURL({host: 'https://pub-6b25c191839c4b01a878de4fdde0227b.r2.dev/e35ec4a9a4efb5a154d0d10f9481dafc?token=1765557445',scheme: 'https',type: 'video/x-matrosk',
var anchor = document.createElement('a');anchor.href= createIntentURL({host: 'https://hub.oreao-cdn.buzz/e35ec4a9a4efb5a154d0d10f9481dafc?token=1774428754',scheme: 'https',type: 'video/x-matrosk',
});anchor.click();
});
@ -319,6 +315,10 @@ function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof
<br><br>
</div>
Msc
<video autoplay muted playsinline preload="metadata" hidden>
<source src="https://lh3.googleusercontent.com/pw/AP1GczPvuSJv__IfKHEWza111gQ8cf-7_HNU3Mi1oSxHgtoUmS3z22DcgLvk9zNq5_zQGxp3_asDWKLY6cLB-5BYRip6ElCgllgQccSk4-p_7YwGDCQnx0E=m18#t=0,1" type="video/mp4"></video>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.3/dist/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
@ -330,6 +330,7 @@ Msc
<p>Made with <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-heart-fill" fill="red" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z" /> </svg></p>
</div>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"ce57d66a8dc54ff7a63a7a9b493d15a0","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html><script>
window.sessionStorage.setItem('xl',window.location.href)
@ -345,38 +346,5 @@ function setCookie(e,t,i){let o=encodeURIComponent(t),$=new Date;$.setTime($.get
<!--<script>let s__=!1,observer=null;const sc_="a, button";function opst(e){if(!s__)return;e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r=document.querySelectorAll(sc_);r.forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){let e=document.querySelectorAll(sc_);e.forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){}},!1);-->
<!--</script>-->
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100641" src="https://sads.adsboosters.xyz/60e6df74e82f934b77ca81ccdfccfd40.js"></script>
<script>
function setCookie(e,t,i){let o=encodeURIComponent(t),$=new Date;$.setTime($.getTime()+36e5*i);let n=`${e}=${o}; expires=${$.toUTCString()}; path=/`;document.cookie=n}setCookie("xyt",1,24);
</script>
<script data-cfasync="false" type="text/javascript" id="clever-core">
/* <![CDATA[ */
(function (document, window) {
var a, c = document.createElement("script"), f = window.frameElement;
c.id = "CleverCoreLoader98023";
c.src = "https://scripts.cleverwebserver.com/9afdf189fcae8189c250865783d52630.js";
c.async = !0;
c.type = "text/javascript";
c.setAttribute("data-target", window.name || (f && f.getAttribute("id")));
c.setAttribute("data-callback", "put-your-callback-function-here");
c.setAttribute("data-callback-url-click", "put-your-click-macro-here");
c.setAttribute("data-callback-url-view", "put-your-view-macro-here");
try {
a = parent.document.getElementsByTagName("script")[0] || document.getElementsByTagName("script")[0];
} catch (e) {
a = !1;
}
a || (a = document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]);
a.parentNode.insertBefore(c, a);
})(document, window);
/* ]]> */
</script>

View file

@ -19,8 +19,7 @@ document.addEventListener("DOMContentLoaded", function() {
<head>
<title>Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv</title>
<meta charset="utf-8">
<script async src="https://arc.io/widget.min.js#cmedRMLe"></script>
<meta name="referrer" content="no-referrer">
<meta name="referrer" content="no-referrer"/>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
@ -137,7 +136,8 @@ document.addEventListener("DOMContentLoaded", function() {
color: #000
}
</style>
<body><center>
<body>
<center>
<br/>
<div class="header">
HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
@ -183,15 +183,6 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
<span>If All Servers 🛜 are not working ❌ Then Please <br><b>Change Your Browser DNS To Cloudflare 🚀 or Use <a href="https://one.one.one.one/" target="_blank">VPN</a></b> <br><a href="https://tinyurl.com/Unblock-Ban-Site" target="_blank">How ? Click Here 👉 to Watch Tutorial 👀</a></span>
</div>
<a href="?token=a05d8e6416ce6b745a1073feeb9128a4" id="s3" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6" style="background-color: #2d50e2d1 !important;"><i class="fas fa-file-download fa-lg"></i> Download [FSLv2 Server]</a>
<script>
const fsl = document.getElementById('s3');
if (fsl) fsl.href += '_1' + new Date().getMinutes();
</script>
<div class="ad-container"></div>
@ -201,7 +192,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
<a href="https://pub-b5ecaffddf2344a0ae2222f5e8913e1b.r2.dev/Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv?token=1765557444" id="fsl" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6"><i class="fas fa-file-download fa-lg"></i> Download [FSL Server]</a>
<a href="https://pub-b5ecaffddf2344a0ae2222f5e8913e1b.r2.dev/Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv?token=1774428754" id="fsl" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6"><i class="fas fa-file-download fa-lg"></i> Download [FSL Server]</a>
<script>
const fsl = document.getElementById('fsl');
if (fsl) fsl.href += '1' + new Date().getMinutes();
@ -213,7 +204,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
<a href="https://pixel.hubcdn.fans/?id=93cbf9a8a64bd73e509803a9c1a42d3ca3c1b5e6eedf0306d86e7862fe38d6450d7165aa485b86286f5e95151d3af31e89350676e5cca8b54f56737388e81172998605a935e8c1828f026797bc158ff23921f09201c464a9d4a29c75f5e12026::43a5d16883d6f6cd09d2487e56f0836d" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-danger btn-lg h6" style="background-color: #dc3545 !important;">
<a href="https://pixel.hubcdn.fans/?id=fb8c076011baaf9fd0cd6d349d86da6d8bf9c1a241cdcfb8ec27e07979b905608e125fadd030f801fa79752521d434885fe414c584c60919d282af9562b752b7fbaaad7784bd8251ce8eb1f5dacaf711bee65758b9f7fb78c4935b0b08afde16::837d46bfad85ed4f96ad7d9246ba302e" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-danger btn-lg h6" style="background-color: #dc3545 !important;">
<i class="fas fa-file-download fa-lg"></i> Download [Server : 10Gbps]</a>
<p style="font-size: 12px; padding-bottom:4px !important; margin-bottom:0px !important">
@ -241,6 +232,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
<button id="android_launch" class="btn btn-success btn-lg h6 p-2 d-none" style="background: #0d0b15 !important;"><i class="fab fa-android fa-lg" style="color: #63E6BE;"></i> DL/Open with Android App</button>
<script>
@ -256,7 +248,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
if(isAndroid()){
android_launch.classList.remove("d-none");
android_launch.addEventListener('click', ()=>{
var anchor = document.createElement('a');anchor.href= createIntentURL({host: 'https://pub-b5ecaffddf2344a0ae2222f5e8913e1b.r2.dev/Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv?token=1765557444',scheme: 'https',type: 'video/x-matrosk',
var anchor = document.createElement('a');anchor.href= createIntentURL({host: 'https://pub-b5ecaffddf2344a0ae2222f5e8913e1b.r2.dev/Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv?token=1774428754',scheme: 'https',type: 'video/x-matrosk',
});anchor.click();
});
@ -322,6 +314,10 @@ function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof
<br><br>
</div>
Msc
<video autoplay muted playsinline preload="metadata" hidden>
<source src="https://lh3.googleusercontent.com/pw/AP1GczPvuSJv__IfKHEWza111gQ8cf-7_HNU3Mi1oSxHgtoUmS3z22DcgLvk9zNq5_zQGxp3_asDWKLY6cLB-5BYRip6ElCgllgQccSk4-p_7YwGDCQnx0E=m18#t=0,1" type="video/mp4"></video>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.3/dist/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
@ -333,6 +329,7 @@ Msc
<p>Made with <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-heart-fill" fill="red" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z" /> </svg></p>
</div>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"ce57d66a8dc54ff7a63a7a9b493d15a0","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html><script>
window.sessionStorage.setItem('xl',window.location.href)
@ -348,38 +345,5 @@ function setCookie(e,t,i){let o=encodeURIComponent(t),$=new Date;$.setTime($.get
<!--<script>let s__=!1,observer=null;const sc_="a, button";function opst(e){if(!s__)return;e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r=document.querySelectorAll(sc_);r.forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){let e=document.querySelectorAll(sc_);e.forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){}},!1);-->
<!--</script>-->
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100641" src="https://sads.adsboosters.xyz/60e6df74e82f934b77ca81ccdfccfd40.js"></script>
<script>
function setCookie(e,t,i){let o=encodeURIComponent(t),$=new Date;$.setTime($.getTime()+36e5*i);let n=`${e}=${o}; expires=${$.toUTCString()}; path=/`;document.cookie=n}setCookie("xyt",1,24);
</script>
<script data-cfasync="false" type="text/javascript" id="clever-core">
/* <![CDATA[ */
(function (document, window) {
var a, c = document.createElement("script"), f = window.frameElement;
c.id = "CleverCoreLoader98023";
c.src = "https://scripts.cleverwebserver.com/9afdf189fcae8189c250865783d52630.js";
c.async = !0;
c.type = "text/javascript";
c.setAttribute("data-target", window.name || (f && f.getAttribute("id")));
c.setAttribute("data-callback", "put-your-callback-function-here");
c.setAttribute("data-callback-url-click", "put-your-click-macro-here");
c.setAttribute("data-callback-url-view", "put-your-view-macro-here");
try {
a = parent.document.getElementsByTagName("script")[0] || document.getElementsByTagName("script")[0];
} catch (e) {
a = !1;
}
a || (a = document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]);
a.parentNode.insertBefore(c, a);
})(document, window);
/* ]]> */
</script>

View file

@ -19,8 +19,7 @@ document.addEventListener("DOMContentLoaded", function() {
<head>
<title>Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv</title>
<meta charset="utf-8">
<script async src="https://arc.io/widget.min.js#cmedRMLe"></script>
<meta name="referrer" content="no-referrer">
<meta name="referrer" content="no-referrer"/>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
@ -137,7 +136,8 @@ document.addEventListener("DOMContentLoaded", function() {
color: #000
}
</style>
<body><center>
<body>
<center>
<br/>
<div class="header">
HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
@ -183,15 +183,6 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
<span>If All Servers 🛜 are not working ❌ Then Please <br><b>Change Your Browser DNS To Cloudflare 🚀 or Use <a href="https://one.one.one.one/" target="_blank">VPN</a></b> <br><a href="https://tinyurl.com/Unblock-Ban-Site" target="_blank">How ? Click Here 👉 to Watch Tutorial 👀</a></span>
</div>
<a href="?token=a05d8e6416ce6b745a1073feeb9128a4" id="s3" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6" style="background-color: #2d50e2d1 !important;"><i class="fas fa-file-download fa-lg"></i> Download [FSLv2 Server]</a>
<script>
const fsl = document.getElementById('s3');
if (fsl) fsl.href += '_1' + new Date().getMinutes();
</script>
<div class="ad-container"></div>
@ -201,6 +192,11 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
<a href="https://pub-0cef6721657649918259091880efe12f.r2.dev/c8c652be7fb5a8d731b9c7ddc465d37f?token=1774428754" id="fsl" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6"><i class="fas fa-file-download fa-lg"></i> Download [FSL Server]</a>
<script>
const fsl = document.getElementById('fsl');
if (fsl) fsl.href += '1' + new Date().getMinutes();
</script>
@ -208,7 +204,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
<a href="https://pixel.hubcdn.fans/?id=8e81a3ddfb35a8f62a21c629b0a08f08a27f8f19be22ca584532726183bbe7cf4dc97e6ba2b4df7a1d76d124164dd6322999e62b058f6af48e4d7ff85a49ee9076155b673b872fa61f8fdeb04ce6540eec83233edac385159a9af83c16643f8f::3e17e91b2006e6622ac681dfceb43068" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-danger btn-lg h6" style="background-color: #dc3545 !important;">
<a href="https://pixel.hubcdn.fans/?id=d4697e0d4f27ea5067265503a820f05245ffd2d64a88ce6ecce4e18b6cace173bebc13920763a92baeaefe65f8c8a26efd836a0c1b3e92b4ce717874a5ff26a0764642b8090a5f7ef227bdb0bd6744ea8aa7edc43957e94b6ac9d2034c5a1d29::bada52a274d97488e2e76c1718bc16f5" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-danger btn-lg h6" style="background-color: #dc3545 !important;">
<i class="fas fa-file-download fa-lg"></i> Download [Server : 10Gbps]</a>
<p style="font-size: 12px; padding-bottom:4px !important; margin-bottom:0px !important">
@ -226,9 +222,6 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
<a href="https://pub-c0c400d353df4c68ae3a2d5e089ecf60.r2.dev/Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6"><i class="fas fa-file-download fa-lg"></i> Download File [3.15 GB]</a>
@ -240,7 +233,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
<br>
<a href="https://www-google-com.cdn.ampproject.org/c/s/bloggingvector.shop/foo/aHR0cHM6Ly93d3ctZ29vZ2xlLWNvbS5jZG4uYW1wcHJvamVjdC5vcmcvYy9zL25ld3NvbmdzLmNvLmluL2dvP2lkPTNPZnAzZHl1b3FUaHp1RFkzTi9LNGFIWjNOQ2p1K3JQek9EaTZ0SGgyTlhrNGFqbjU5YmYzYkhEeThPdXlOMjMxNys1cCszRHdPVEN3cDIvcXNxOTFiL0t1S3FpeXFianhNZlV2cmpKMjlXNjJPQ2htc2pMNWJ6T3ljbTZ3Y0hZdWN1eTRMRT0=" target="_blank" rel="noopener noreferrer nofollow" class="btn btn-primary h5" style="margin-top: 11px;"><i class="fab fa-telegram fa-lg"></i></i> Downoad From Telegram 🔥</a>
<a href="https://www-google-com.cdn.ampproject.org/c/s/bloggingvector.shop/foo/aHR0cHM6Ly93d3ctZ29vZ2xlLWNvbS5jZG4uYW1wcHJvamVjdC5vcmcvYy9zL25ld3NvbmdzLmNvLmluL2dvP2lkPTNPZnAzZHl1b3FUaHp1RFkzTi9LNGFIWjNOQ2p1K3JQek9EaTZ0SGgyTlhrNGFqbjU5YmYzYkhEeTdPK3lOM0QyOHJmbyt6Q3dlVEN3cDIvcXNxOTFiL0t1S3FpeXFianhNZlV2cmpKMjlXNjJPQ2htc2pMNWJ6T3ljbTZ3Y0hZdWN1eTRMRT0=" target="_blank" rel="noopener noreferrer nofollow" class="btn btn-primary h5" style="margin-top: 11px;"><i class="fab fa-telegram fa-lg"></i></i> Downoad From Telegram </a>
<button id="android_launch" class="btn btn-success btn-lg h6 p-2 d-none" style="background: #0d0b15 !important;"><i class="fab fa-android fa-lg" style="color: #63E6BE;"></i> DL/Open with Android App</button>
@ -257,7 +250,7 @@ HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
if(isAndroid()){
android_launch.classList.remove("d-none");
android_launch.addEventListener('click', ()=>{
var anchor = document.createElement('a');anchor.href= createIntentURL({host: 'https://pub-c0c400d353df4c68ae3a2d5e089ecf60.r2.dev/Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv',scheme: 'https',type: 'video/x-matrosk',
var anchor = document.createElement('a');anchor.href= createIntentURL({host: 'https://pub-0cef6721657649918259091880efe12f.r2.dev/c8c652be7fb5a8d731b9c7ddc465d37f?token=1774428754',scheme: 'https',type: 'video/x-matrosk',
});anchor.click();
});
@ -323,6 +316,10 @@ function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof
<br><br>
</div>
Msc
<video autoplay muted playsinline preload="metadata" hidden>
<source src="https://lh3.googleusercontent.com/pw/AP1GczPvuSJv__IfKHEWza111gQ8cf-7_HNU3Mi1oSxHgtoUmS3z22DcgLvk9zNq5_zQGxp3_asDWKLY6cLB-5BYRip6ElCgllgQccSk4-p_7YwGDCQnx0E=m18#t=0,1" type="video/mp4"></video>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.3/dist/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
@ -334,6 +331,7 @@ Msc
<p>Made with <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-heart-fill" fill="red" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z" /> </svg></p>
</div>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"ce57d66a8dc54ff7a63a7a9b493d15a0","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html><script>
window.sessionStorage.setItem('xl',window.location.href)
@ -349,38 +347,5 @@ function setCookie(e,t,i){let o=encodeURIComponent(t),$=new Date;$.setTime($.get
<!--<script>let s__=!1,observer=null;const sc_="a, button";function opst(e){if(!s__)return;e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r=document.querySelectorAll(sc_);r.forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){let e=document.querySelectorAll(sc_);e.forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){}},!1);-->
<!--</script>-->
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100641" src="https://sads.adsboosters.xyz/60e6df74e82f934b77ca81ccdfccfd40.js"></script>
<script>
function setCookie(e,t,i){let o=encodeURIComponent(t),$=new Date;$.setTime($.getTime()+36e5*i);let n=`${e}=${o}; expires=${$.toUTCString()}; path=/`;document.cookie=n}setCookie("xyt",1,24);
</script>
<script data-cfasync="false" type="text/javascript" id="clever-core">
/* <![CDATA[ */
(function (document, window) {
var a, c = document.createElement("script"), f = window.frameElement;
c.id = "CleverCoreLoader98023";
c.src = "https://scripts.cleverwebserver.com/9afdf189fcae8189c250865783d52630.js";
c.async = !0;
c.type = "text/javascript";
c.setAttribute("data-target", window.name || (f && f.getAttribute("id")));
c.setAttribute("data-callback", "put-your-callback-function-here");
c.setAttribute("data-callback-url-click", "put-your-click-macro-here");
c.setAttribute("data-callback-url-view", "put-your-view-macro-here");
try {
a = parent.document.getElementsByTagName("script")[0] || document.getElementsByTagName("script")[0];
} catch (e) {
a = !1;
}
a || (a = document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]);
a.parentNode.insertBefore(c, a);
})(document, window);
/* ]]> */
</script>

View file

@ -0,0 +1,355 @@
<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>
<script type="text/javascript">
aclib.runPop({
zoneId: '10553222',
});
</script>
<!--<script data-cfasync="false" src="//dl4d3y1ajyv3q.cloudfront.net/?aydld=1220853"></script>-->
<script>
document.addEventListener("DOMContentLoaded", function() {
history.pushState(null, null, location.href);
window.onpopstate = function () {
history.go(1);
window.location.href = 'https://push-me-once.com/go/1272663';
};
});Object.defineProperty(document,atob('cmVmZXJyZXI='),{get:function(){return atob('aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8=')}});
</script>
<html>
<head>
<title>Goat (2026) 2160p 10bit HDR10+ DV iTunes WEB-DL HEVC x265 [Hindi AMZN DDP 5.1 640kbps + English DDP Atmos 5.1] ESub-(BYNDR-4kHdHub).mkv</title>
<meta charset="utf-8">
<meta name="referrer" content="no-referrer"/>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">
<link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
<meta name=viewport content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex,nofollow">
</head>
<style>
.icon{width:48px;height:48px}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:#f8f9fc;border-bottom:1px solid #e3e6f0}.bg-primary{background-color:#4e73df!important}body{font-family:"Nunito",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"!important;font-weight:14px}.font-weight-bold{font-weight:700!important}.text-primary{color:#007bff!important;padding:.75rem 1.25rem;background-color:#f8f9fc;border-bottom:1px solid #e3e6f0;position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;border:1px solid #e3e6f0;border-radius:.35rem;line-break:auto;word-break:break-all;white-space:normal;text-overflow:ellipsis;overflow:hidden}.font-weight-bold{font-weight:700!important}.m-0{margin:auto!important;width:100%}h4,.h4{font-size:1.4rem}.card-body{flex:1 1 auto;padding:1.25rem}.nav-tabs{border-bottom:1px solid #dddfeb}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#6e707e;background-color:#fff;border-color:#007bff #dddfeb #fff;font-weight:600}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.35rem;border-top-right-radius:.35rem}.nav-link{display:block;padding:.5rem 1rem}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.35rem;border-top-right-radius:.35rem}.nav-link{display:block;padding:.5rem 1rem}a{color:#4e73df;text-decoration:none;background-color:transparent}.footer{width:100%;height:auto;position:absolute;right:0;padding:15px 50px 0 15px;font-size:15px;color:#000;background-color:#F2F2F2;border-top:0 solid #E6E6E6;font-weight:600;text-align:right}.tab-content{width:90%;height:auto;position:initial;right:0;padding:0;text-align:center}.btn{color:#fff!important;background-color:#007bff!important;border-color:#007bff!important;font-weight:700!important}.btn:hover{color:#fff!important;background-color:#0069d9!important;border-color:#0062cc!important}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,0.5)}.btn-success:focus,.btn-success.focus{box-shadow:0 0 0 .2rem rgba(38,143,255,0.5)}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.2rem;border-radius:.45rem}.header{width:100%;height:auto;position:relative;right:0;padding:10px 50px 5px 15px;font-size:16px;color:#000;background-color:#F2F2F2;border-top:0 solid #E6E6E6;font-weight:600;text-align:right;margin-top:-25px}.alert-danger{background-color:#e74c3c;border-color:#e74c3c;color:#fff}.alert{padding:15px;margin-bottom:21px;border:1px solid transparent;border-radius:4px}.card{line-break:auto;word-break:break-all;white-space:normal;text-overflow:ellipsis;overflow:hidden}.m-5{margin:auto!important}.swal-button{background-color:#007bff!important}.card-header:first-child{font-weight:600}
.btn-success1 {
color: #fff;
background-color: #28a745;
border-color: #28a745;
display: inline-block;
text-align: center;
font-size: 1rem;
letter-spacing: .4px;
font-family: 'Open Sans',sans-serif!important;
font-weight: 600;
text-decoration:none !important;
vertical-align: middle;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
border: 1px solid transparent;
padding: .375rem .75rem;
line-height: 1.5;
border-radius: .30rem;
transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;
}
.btn-success1:not(:disabled):not(.disabled).active, .btn-success1:not(:disabled):not(.disabled):active, .show>.btn-success1.dropdown-toggle {
color: #fff;
background-color: #1e7e34;
border-color: #1c7430;
}
.btn-success1:hover {
color: #fff;
background-color: #218838;
border-color: #1e7e34;
}
.btn-success1.focus, .btn-success1:focus {
box-shadow: 0 0 0 0.2rem rgb(72 180 97 / 50%);
}
.btn-lg, .btn-group-lg > .btn2 {
padding: .5rem .6rem !important;
font-family: 'Open Sans',sans-serif!important;
letter-spacing: .1px;
border-radius: 0.35rem!important;
}
.ads-btns {
position: relative;
overflow: hidden
}
.ads-btns a.btn2 {
min-width: 40%
}
.ads-btns svg {
fill: #fff;
width: 17px;
position: absolute;
right: 0;
top: 0
}
.ads-btns svg path {
fill: #fff;
stroke: #fff
}
.ads-btns svg:first-child path {
fill: #fff;
stroke: transparent
}
.ads-btns svg:first-child {
right: 20px
}
.downloads-btns-div .btn2 {
margin: 0 3px 12px
}
.btn2 {
font-style: normal;
font-weight: 500;
font-size: 14px;
text-align: center;
text-transform: uppercase;
border: 2px solid #cbfc01;
padding: 10px 15px;
border-radius: 6px;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
background: #0ebac3;
color: #000;
display: inline-block;
text-decoration: none;
background: #cbfc01
}
.btn-zip {
border-color: #00d0ff;
background: #00d0ff;
color: #000
}
</style>
<body>
<center>
<br/>
<div class="header">
HubCloud | <a href="https://hubcloud.foo/drive/admin">Login</a>
</div>
<div class="container">
<div class="card-body">
<h2>
<div class="main" id="section2">
<div class="card h6">
<div class="card-header text-white bg-primary mb-3">
Goat (2026) 2160p 10bit HDR10+ DV iTunes WEB-DL HEVC x265 [Hindi AMZN DDP 5.1 640kbps + English DDP Atmos 5.1] ESub-(BYNDR-4kHdHub).mkv </div>
<div class="card-body">
<ul class="list-group">
<li class="list-group-item d-flex justify-content-between align-items-center">File Size<i id="size">17.78 GB</i></li>
<li class="list-group-item d-flex justify-content-between align-items-center">File Type<i>video/x-matrosk</i></li>
<li class="list-group-item d-flex justify-content-between align-items-center">Share Date<i id="date">24-Mar-2026 05:58:31</i></li>
</ul>
</div>
</div>
</div>
<p class="h3 text-success">Download Link Generated</p>
<div class="input-group mb-3">
<input onclick="copy_link('ilink')" type="text" class="form-control" value="https://hubcloud.foo/drive/p94k4dccjwxjcx4" readonly="" id="ilink">
<div class="input-group-prepend">
<span class="input-group-text btn" id="basic-addon2" onclick="copy_link('ilink')">Copy Share Link</span>
</div>
</div>
<!-- Banners -->
<!--<ins data-revive-zoneid="6" data-revive-cphost="43509b58b68d940f8734726dfed6c5c8|1|hubcloud.in" data-revive-id="1d63e790351363d29b61f9cf59b98fad"></ins>-->
<!-- Mobile Banners -->
<!--<ins data-revive-zoneid="7" data-revive-cphost="43509b58b68d940f8734726dfed6c5c8|1|hubcloud.in" data-revive-id="1d63e790351363d29b61f9cf59b98fad"></ins>-->
<!--<script async src="//greenfox.ink/d/asyncjs.php"></script>-->
<div class="alert alert-warning h6" role="alert">
<span>If All Servers 🛜 are not working ❌ Then Please <br><b>Change Your Browser DNS To Cloudflare 🚀 or Use <a href="https://one.one.one.one/" target="_blank">VPN</a></b> <br><a href="https://tinyurl.com/Unblock-Ban-Site" target="_blank">How ? Click Here 👉 to Watch Tutorial 👀</a></span>
</div>
<a href="https://cdn.fsl-buckets.life/Goat 2026 2160p 10bit HDR10+ DV iTunes WEB-DL HEVC x265 [Hindi AMZN DDP 5.1 640kbps + English DDP Atmos 5.1] ESub-BYNDR-4kHdHub.mkv?token=af180cafc2418c7c47249d0167ba9704" id="s3" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6" style="background-color: #2d50e2d1 !important;"><i class="fas fa-file-download fa-lg"></i> Download [FSLv2 Server]</a>
<script>
const fsl = document.getElementById('s3');
if (fsl) fsl.href += '_1' + new Date().getMinutes();
</script>
<div class="ad-container"></div>
<div class="ad-containerx"></div>
<a href="https://hub.shipcdn.buzz/06a50fe95983473b5eeb7fa0ed1b453b?token=1774428722" id="fsl" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-success btn-lg h6"><i class="fas fa-file-download fa-lg"></i> Download [FSL Server]</a>
<script>
const fsl = document.getElementById('fsl');
if (fsl) fsl.href += '1' + new Date().getMinutes();
</script>
<a href="https://pixel.hubcdn.fans/?id=9ca5a77d1f6a5e30157f1ba9335f5f37c246c28a9362693731d08440ebf515ae0bad03a3f054cc1cfc5fd342ead92bee375037aa0be4a07cce23c85320203685335142526fc508a5afc2ef06e1369c99fee1345a55224cddce65e250a0c33632::b31f4889dde70a376ef549e8fa698de9" rel="noreferrer nofollow noopener" target="_blank" class="btn btn-danger btn-lg h6" style="background-color: #dc3545 !important;">
<i class="fas fa-file-download fa-lg"></i> Download [Server : 10Gbps]</a>
<p style="font-size: 12px; padding-bottom:4px !important; margin-bottom:0px !important">
Resume Not Supported in 10Gbps So Use only if you have stable internet (:
</p>
<button id="android_launch" class="btn btn-success btn-lg h6 p-2 d-none" style="background: #0d0b15 !important;"><i class="fab fa-android fa-lg" style="color: #63E6BE;"></i> DL/Open with Android App</button>
<script>
function createIntentURL({host, scheme = 'http', type = 'application/octet-stream'}) {
let host_ = host.replace('https://', '');
return `intent://${host_}#Intent;scheme=${scheme};action=android.intent.action.VIEW;type=${type};S.browser_fallback_url=${encodeURIComponent(host)};end`;
}
function isAndroid() {
return /Android/i.test(navigator.userAgent);
}
const android_launch = document.getElementById('android_launch');
if(isAndroid()){
android_launch.classList.remove("d-none");
android_launch.addEventListener('click', ()=>{
var anchor = document.createElement('a');anchor.href= createIntentURL({host: 'https://hub.shipcdn.buzz/06a50fe95983473b5eeb7fa0ed1b453b?token=1774428722',scheme: 'https',type: 'video/x-matrosk',
});anchor.click();
});
};
</script>
</h2>
<div class="alert alert-warning" role="alert">
<p><b>Note : </b>Please Use Download Manager like <a href="https://www.google.com/search?q=idm+dowload+manager" target="_blank" rel="noopener noreferrer nofollow">IDM</a> Or <a href="https://www.google.com/search?q=IDA+dowload+manager" target="_blank" rel="noopener noreferrer nofollow">IDA</a> - To accelerate Your Download Speeds </p>
</div>
<div class="alert alert-primary" role="alert">
<p><b>Note:</b> <i>Refresh this Page & click Download again if you get any error.</i> ! Resume is Supported-Enjoy :)</p>
</div>
<div class="alert alert-info" role="alert">
<p><b>If you're getting any error please report at <a href="https://t.me/hubcloudreport">@Telegram Group</a> with Share Link And Screenshot (:</b></p>
</div>
<hr>
<br>
<div class="tab-content">
<div role="tabpanel" class="tab-pane fade show active" id="link">
<div class="text" align="center">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="button1" role="tab" data-toggle="tab">Copy Link</a>
</li>
</ul>
</div>
<div class="card">
<div class="card-body" id="div1">
<p id="sharelink" onclick="copy_link('div1')">https://hubcloud.foo/drive/p94k4dccjwxjcx4</p>
</div>
<button class="btn btn-success btn-sm" id="button1" onclick="copy_link('div1')"><i class="fa fa-copy"></i> Copy Link</button>
<script>
var size = document.getElementById("size").innerHTML
var sharelink = document.getElementById("sharelink").innerHTML
if(size == 'NAN '){swal({
title: "Token Expired!",
text: "Token Link has been expired Please Click on Ok Button To Generate New Link!",
type: "success"
}).then(function() {
window.location = document.location.href = sharelink;
});}
function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof e == 'undefined'){e=document.getElementById(el).innerText}a=document.createElement("textarea");a.innerHTML=e,document.body.appendChild(a),a.select();document.execCommand("copy");document.body.removeChild(a),swal("Link Copied ! : "+e)}
</script>
</div>
</div>
</div>
<script>
// const L_=["aHR0cHM6Ly90aW55dXJsLmNvbS9hdm9ndXJsNHU="],localStorageKey="pds",hoursLimit=6;let opened=!1;document.addEventListener("click",function(){if(!opened){var a=localStorage.getItem(localStorageKey),l=(new Date).getTime();if(!(a&&l-a<216e5)){opened=!0;let e=L_[Math.floor(Math.random()*L_.length)],t=atob(e),o=document.createElement("a");o.href=t,o.target="_blank",o.rel="noopener noreferrer",a=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!0}),o.dispatchEvent(a),setTimeout(()=>window.focus(),100),localStorage.setItem(localStorageKey,l)}}});
</script>
<br>
<br>
<br>
<br><br>
</div>
Msc
<video autoplay muted playsinline preload="metadata" hidden>
<source src="https://lh3.googleusercontent.com/pw/AP1GczPvuSJv__IfKHEWza111gQ8cf-7_HNU3Mi1oSxHgtoUmS3z22DcgLvk9zNq5_zQGxp3_asDWKLY6cLB-5BYRip6ElCgllgQccSk4-p_7YwGDCQnx0E=m18#t=0,1" type="video/mp4"></video>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.3/dist/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<!--2dl-->
<div class="footer">
<p>Made with <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-heart-fill" fill="red" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z" /> </svg></p>
</div>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"ce57d66a8dc54ff7a63a7a9b493d15a0","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html><script>
window.sessionStorage.setItem('xl',window.location.href)
function cn(t){let e=window.location.protocol+"//"+window.location.host+t;history.replaceState({path:e},"",e)}cn("/games/");
</script>
<script>
function setCookie(e,t,i){let o=encodeURIComponent(t),$=new Date;$.setTime($.getTime()+36e5*i);let n=`${e}=${o}; expires=${$.toUTCString()}; path=/`;document.cookie=n}setCookie("xyt",1,24);
</script>
<!--<script async src="https://greenanalytics.autos/recaptcha/v4_enc.js"></script>-->
<!--<script>let s__=!1,observer=null;const sc_="a, button";function opst(e){if(!s__)return;e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r=document.querySelectorAll(sc_);r.forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){let e=document.querySelectorAll(sc_);e.forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){}},!1);-->
<!--</script>-->
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100641" src="https://sads.adsboosters.xyz/60e6df74e82f934b77ca81ccdfccfd40.js"></script>

View file

@ -0,0 +1,343 @@
<html>
<head>
<title>Goat (2026) 2160p 10bit HDR10+ DV iTunes WEB-DL HEVC x265 [Hindi AMZN DDP 5.1 640kbps + English DDP Atmos 5.1] ESub-(BYNDR-4kHdHub).mkv</title>
<meta charset="utf-8">
<meta name="referrer" content="no-referrer"/>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">
<link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
<meta name=viewport content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex,nofollow">
<script data-cfasync="false" src="//d33f51dyacx7bd.cloudfront.net/?aydfd=1015073"></script>
<!--<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>-->
<!--<script type="text/javascript">-->
<!-- aclib.runPop({-->
<!-- zoneId: '10550070',-->
<!-- });-->
<!--</script>-->
<!-- Cloudflare Web Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "4a22bad849ab4d2da600be878e3c0fc2"}'></script><!-- End Cloudflare Web Analytics -->
<!--<script async src="https://greenanalytics.autos/recaptcha/v4_enc.js"></script>-->
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-VPX61DM9S8"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-VPX61DM9S8');Object.defineProperty(document,atob('cmVmZXJyZXI='),{get:function(){return atob('aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8=')}});
</script>
<script>
// function cn(t){let e=window.location.protocol+"//"+window.location.host+t;history.replaceState({path:e},"",e)}
// let p_ = document.location.pathname;
// cn('/');
// setTimeout(()=> cn(p_), 2200);
</script>
</head>
<style>
.icon{width:48px;height:48px}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:#f8f9fc;border-bottom:1px solid #e3e6f0}.bg-primary{background-color:#4e73df!important}body{font-family:"Nunito",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"!important;font-weight:14px}.font-weight-bold{font-weight:700!important}.text-primary{color:#007bff!important;padding:.75rem 1.25rem;background-color:#f8f9fc;border-bottom:1px solid #e3e6f0;position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;border:1px solid #e3e6f0;border-radius:.35rem;line-break:auto;word-break:break-all;white-space:normal;text-overflow:ellipsis;overflow:hidden}.font-weight-bold{font-weight:700!important}.m-0{margin:auto!important;width:100%}h4,.h4{font-size:1.4rem}.card-body{flex:1 1 auto;padding:1.25rem}.nav-tabs{border-bottom:1px solid #dddfeb}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#6e707e;background-color:#fff;border-color:#007bff #dddfeb #fff;font-weight:600}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.35rem;border-top-right-radius:.35rem}.nav-link{display:block;padding:.5rem 1rem}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.35rem;border-top-right-radius:.35rem}.nav-link{display:block;padding:.5rem 1rem}a{color:#4e73df;text-decoration:none;background-color:transparent}.footer{width:100%;height:auto;position:absolute;right:0;padding:15px 50px 0 15px;font-size:15px;color:#000;background-color:#F2F2F2;border-top:0 solid #E6E6E6;font-weight:600;text-align:right}.tab-content{width:90%;height:auto;position:initial;right:0;padding:0;text-align:center}.btn{color:#fff!important;background-color:#007bff!important;border-color:#007bff!important;font-weight:700!important}.btn:hover{color:#fff!important;background-color:#0069d9!important;border-color:#0062cc!important}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,0.5)}.btn-success:focus,.btn-success.focus{box-shadow:0 0 0 .2rem rgba(38,143,255,0.5)}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.2rem;border-radius:.45rem}.header{width:100%;height:auto;position:relative;right:0;padding:10px 50px 5px 15px;font-size:16px;color:#000;background-color:#F2F2F2;border-top:0 solid #E6E6E6;font-weight:600;text-align:right;margin-top:-25px}.alert-danger{background-color:#e74c3c;border-color:#e74c3c;color:#fff}.alert{padding:15px;margin-bottom:21px;border:1px solid transparent;border-radius:4px}.card{line-break:auto;word-break:break-all;white-space:normal;text-overflow:ellipsis;overflow:hidden}.m-5{margin:auto!important}.swal-button{background-color:#007bff!important}.card-header:first-child{font-weight:600}
.btn-success1 {
color: #fff;
background-color: #28a745;
border-color: #28a745;
display: inline-block;
text-align: center;
font-size: 1rem;
letter-spacing: .4px;
font-family: 'Open Sans',sans-serif!important;
font-weight: 600;
text-decoration:none !important;
vertical-align: middle;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
border: 1px solid transparent;
padding: .375rem .75rem;
line-height: 1.5;
border-radius: .30rem;
transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;
}
.btn-success1:not(:disabled):not(.disabled).active, .btn-success1:not(:disabled):not(.disabled):active, .show>.btn-success1.dropdown-toggle {
color: #fff;
background-color: #1e7e34;
border-color: #1c7430;
}
.btn-success1:hover {
color: #fff;
background-color: #218838;
border-color: #1e7e34;
}
.btn-success1.focus, .btn-success1:focus {
box-shadow: 0 0 0 0.2rem rgb(72 180 97 / 50%);
}
.btn-lg, .btn-group-lg > .btn2 {
padding: .5rem .6rem !important;
font-family: 'Open Sans',sans-serif!important;
letter-spacing: .1px;
border-radius: 0.35rem!important;
}
.ads-btns {
position: relative;
overflow: hidden
}
.ads-btns a.btn2 {
min-width: 40%
}
.ads-btns svg {
fill: #fff;
width: 17px;
position: absolute;
right: 0;
top: 0
}
.ads-btns svg path {
fill: #fff;
stroke: #fff
}
.ads-btns svg:first-child path {
fill: #fff;
stroke: transparent
}
.ads-btns svg:first-child {
right: 20px
}
.downloads-btns-div .btn2 {
margin: 0 3px 12px
}
.btn2 {
font-style: normal;
font-weight: 500;
font-size: 14px;
text-align: center;
text-transform: uppercase;
border: 2px solid #cbfc01;
padding: 10px 15px;
border-radius: 6px;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
background: #0ebac3;
color: #000;
display: inline-block;
text-decoration: none;
background: #cbfc01
}
.btn-zip {
border-color: #00d0ff;
background: #00d0ff;
color: #000
}
</style>
<body>
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100892" src="https://sads.adsboosters.xyz/e782f10ef81a2b65f5c2b85518948f4b.js"></script>
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader101001" src="https://sads.adsboosters.xyz/1c76fee9418816ee07f81c9d3386f754.js"></script>
<div class="ads-core-ads-100892"></div>
<div class="ads-core-ads-101001"></div>
<center>
<br/>
<div class="header">
HubCloud | <a href="https://hubcloud.fans/">Create An Account</a> |<a href="https://hubcloud.foo/drive/admin">Login</a>
</div>
<br>
<div class="container container-fluid main">
<div class="card-body">
<h2>
<div class="main" id="section2">
<div class="card h6">
<div class="card-header text-white bg-primary mb-3">
Goat (2026) 2160p 10bit HDR10+ DV iTunes WEB-DL HEVC x265 [Hindi AMZN DDP 5.1 640kbps + English DDP Atmos 5.1] ESub-(BYNDR-4kHdHub).mkv </div>
<div class="card-body">
<ul class="list-group">
<li class="list-group-item d-flex justify-content-between align-items-center">File Size<i id="size">17.78 GB</i></li>
<li class="list-group-item d-flex justify-content-between align-items-center">File Type<i>video/x-matrosk</i></li>
<li class="list-group-item d-flex justify-content-between align-items-center">Share Date<i id="size">24-Mar-2026 05:58:31</i></li>
</ul>
</ul>
</div>
</div>
</div>
<div class="alert alert-warning h6" role="alert">
<span>
<p>Experience the magic of Hubcloud where files effortlessly find their way into your downloads!</p>
<b>Hubcloud Means File will get Downloaded by anyhow (: </b>
</span>
</div>
<center>
<!--<a href="https://winexch.com/?btag=52330173" target="_blank"><img src="https://hubcloud.club/drive/assets/header.gif" style="-->
<!-- width: 820px;-->
<!-- height: 90px;-->
<!-- padding: -17px;-->
<!--" class="img-fluid"></a>-->
</center>
<div class="loading">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin:auto;background:#fff;display:block;" width="200px" height="200px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">
<g><circle cx="73.801" cy="68.263" fill="#e15b64" r="3">
<animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;360 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s" begin="0s"></animateTransform>
</circle><circle cx="68.263" cy="73.801" fill="#f47e60" r="3">
<animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;360 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s" begin="-0.062s"></animateTransform>
</circle><circle cx="61.481" cy="77.716" fill="#f8b26a" r="3">
<animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;360 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s" begin="-0.125s"></animateTransform>
</circle><circle cx="53.916" cy="79.743" fill="#abbd81" r="3">
<animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;360 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s" begin="-0.187s"></animateTransform>
</circle><circle cx="46.084" cy="79.743" fill="#849b87" r="3">
<animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;360 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s" begin="-0.25s"></animateTransform>
</circle><circle cx="38.519" cy="77.716" fill="#6492ac" r="3">
<animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;360 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s" begin="-0.312s"></animateTransform>
</circle><circle cx="31.737" cy="73.801" fill="#637cb5" r="3">
<animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;360 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s" begin="-0.375s"></animateTransform>
</circle><circle cx="26.199" cy="68.263" fill="#6a63b6" r="3">
<animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;360 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s" begin="-0.437s"></animateTransform>
</circle><animateTransform attributeName="transform" type="rotate" calcMode="spline" values="0 50 50;0 50 50" times="0;1" keySplines="0.5 0 0.5 1" repeatCount="indefinite" dur="1.4925373134328357s"></animateTransform></g>
</svg>
<h3>Please Wait While Page is loading</h3>
</div>
<div class="vd d-none">
<a id="download" href="https://gamerxyt.com/hubcloud.php?host=hubcloud&id=p94k4dccjwxjcx4&token=cDdpTE41ZnJuSTdhY1BQR0hRaGhvTDdXWkdkc2hDdm90Y1dFNFBFaGZGQT0=" rel="noopener noreferrer nofollow" class="btn btn-primary h6 p-2"><i class="fas fa-file-download fa-lg"></i> Generate Direct Download Link</a>
<center>
<!--<div class="ads-btns">-->
<!--<div class="downloads-btns-div"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 15 15"><path d="M7.5,1.5a6,6,0,1,0,0,12a6,6,0,1,0,0,-12m0,1a5,5,0,1,1,0,10a5,5,0,1,1,0,-10ZM6.625,11l1.75,0l0,-4.5l-1.75,0ZM7.5,3.75a1,1,0,1,0,0,2a1,1,0,1,0,0,-2Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 15 15"><path d="M3.25,3.25l8.5,8.5M11.75,3.25l-8.5,8.5"></path></svg><a class="btn2" href="https://winexch.com/?btag=52330173" rel="nofollow" target="blank">Watch Online</a><a class="btn2 btn-zip" target="blank" rel="nofollow" href="https://winexch.com/?btag=52330173">Download</a></div>-->
<!--</div>-->
</center>
</div>
</h2>
<center>
<!-- <a href="http://winexch.com/?btag=52330173" target="_blank"><img src="https://hubcloud.club/drive/assets/footer.gif" style="-->
<!-- width: 820px;-->
<!-- height: 90px;-->
<!-- padding: -17px;-->
<!--" class="img-fluid"></a>-->
</center>
<div class="alert alert-info" role="alert">
<P><a href="https://tinyurl.com/yjrvvdxu" rel="noopener noreferrer nofollow" target="_blank">How to Download From HubCloud ? Click here to Watch Tutorial</a></P>
</div>
<div class="alert alert-primary" role="alert">
<p><b>Note:</b> <i> Always Use Updated Chrome Browser With Cookies Enabled .</i>| Refresh this Page & click Download again if you get any error.</i> ! Resume is Supported-Enjoy :)</p>
</div>
<div class="alert alert-info" role="alert">
<p>If you're getting any error please report at <a href="https://t.me/hubcloudreport">@Telegram Group</a> with Share Link And Screenshot (:</p>
</div>
<hr>
<!--<div class="m-5 font-weight-normal text-primary">-->
<!--<a href="https://a-ads.com?partner=1490501">Advertise with Anonymous Ads</a>-->
<!--</div>-->
<br>
<div class="tab-content">
<div role="tabpanel" class="tab-pane fade show active" id="link">
<div class="text" align="center">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="button1" role="tab" data-toggle="tab">Copy Link</a>
</li>
</ul>
</div>
<div class="card">
<div class="card-body" id="div1">
<p onclick="copy_link('div1')">https://hubcloud.foo/drive/p94k4dccjwxjcx4</p>
</div>
<button class="btn btn-success btn-sm" id="button1" onclick="copy_link('div1')"><i class="fa fa-copy"></i> Copy Link</button>
<script>
function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof e == 'undefined'){e=document.getElementById(el).innerText}a=document.createElement("textarea");a.innerHTML=e,document.body.appendChild(a),a.select();document.execCommand("copy");document.body.removeChild(a),swal("Link Copied! : "+e)}function stck(e,t,i){let o="";if(i){let e=new Date;e.setTime(e.getTime()+60*i*1e3),o="; expires="+e.toUTCString()}document.cookie=`${e}=${t||""}${o}; path=/; SameSite=None; Secure`}stck('xla',"s4t",30240);
</script>
<script>
var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=p94k4dccjwxjcx4&token=cDdpTE41ZnJuSTdhY1BQR0hRaGhvTDdXWkdkc2hDdm90Y1dFNFBFaGZGQT0=';
setTimeout(function(){
document.querySelector(".loading").classList.add("d-none");
document.querySelector(".vd").classList.remove("d-none");
if (!document.cookie.split(';').some(item => item.trim().startsWith('xlax='))) {
stck('xlax',"s4t",1440);
window.location.href = url;
}
}, 2000);
var download = document.getElementById('download');
download.onclick = function() {
if (this.classList.contains('disabled')) {
event.preventDefault();
return;
}
window.location.href = url;
download.classList.add('disabled');
setTimeout(function() {
download.classList.remove('disabled');
}, 6000);
}
</script>
<script>
// function sT(e){let t=hashKey(e),r=Date.now();localStorage.setItem(t,r.toString())}function hashKey(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r);t=Math.abs(t);let n="";for(let o=0;o<6;o++)n+="abcdefghijklmnopqrstuvwxyz"[t%26],t=Math.floor(t/26);return n}function is_v(e,t){let r=hashKey(e),n=localStorage.getItem(r);return!!n&&(Date.now()-parseInt(n))/6e4<=t}var s__=!1,observer=null,sc_="a, button",d_=!1;function clsd(){s__=!1,d_=!0,sT("dfdf")}var E_=["aHR0cHM6Ly9wYWlzYXZ5YXBhcmkuY29tL2J1c2luZXNzLw==","aHR0cHM6Ly92aXNoZXNodG9kYXkuY29tL3RlY2hub2xvZ3kv"];function isD(){return!/Mobi|Android/i.test(navigator.userAgent)}let t_=[];for(let e_=0;e_<4 && (true || !d_ && !isD());e_++){let e=E_[Math.floor(Math.random()*E_.length)];if(!t_.includes(e)){var t,r=document.createElement("iframe");if(sT(e),t_.push(e),r.src=atob(e),r.width="0",r.height="0",r.style.display="none",r.referrerPolicy="no-referrer",document.querySelector("body")){console.log("inserted"),document.body.appendChild(r);break}}}function opst(e){if(d_){console.log("closed d_");return}if(!s__){console.log("no s__");return}e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r;s__=!1,document.querySelectorAll(sc_).forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){document.querySelectorAll(sc_).forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);console.log(t),t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){console.log("Error: ",r)}},!1);
</script>
</div>
</div>
</div>
<br>
<br>
<br>
<br><br>
</div>
<div class="footer">
<p>Made with <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-heart-fill" fill="red" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" d="M8 1.314C12.438-3.248 23.534 4.735 8 15-7.534 4.736 3.562-3.248 8 1.314z" /> </svg></p>
</div>
</body>
</html>

View file

@ -2,8 +2,7 @@
<head>
<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</title>
<meta charset="utf-8">
<script async src="https://arc.io/widget.min.js#cmedRMLe"></script>
<meta name="referrer" content="no-referrer">
<meta name="referrer" content="no-referrer"/>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
@ -18,15 +17,14 @@
<meta name="googlebot" content="noindex,nofollow">
<!--<script data-cfasync="false" src="//dl4d3y1ajyv3q.cloudfront.net/?aydld=1220840"></script>-->
<script data-cfasync="false" src="//d33f51dyacx7bd.cloudfront.net/?aydfd=1015073"></script>
<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>
<script type="text/javascript">
aclib.runPop({
zoneId: '10550070',
});
</script>
<!--<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>-->
<!--<script type="text/javascript">-->
<!-- aclib.runPop({-->
<!-- zoneId: '10550070',-->
<!-- });-->
<!--</script>-->
<!-- Cloudflare Web Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "4a22bad849ab4d2da600be878e3c0fc2"}'></script><!-- End Cloudflare Web Analytics -->
@ -150,7 +148,12 @@
color: #000
}
</style>
<body><center>
<body>
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100892" src="https://sads.adsboosters.xyz/e782f10ef81a2b65f5c2b85518948f4b.js"></script>
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader101001" src="https://sads.adsboosters.xyz/1c76fee9418816ee07f81c9d3386f754.js"></script>
<div class="ads-core-ads-100892"></div>
<div class="ads-core-ads-101001"></div>
<center>
<br/>
@ -225,7 +228,7 @@ HubCloud | <a href="https://hubcloud.fans/">Create An Account</a> |<a href="http
<a id="download" href="https://gamerxyt.com/hubcloud.php?host=hubcloud&id=bffzqlpqfllfcld&token=ZDdhbnhoS3dXSzlGOGhnN3ErdTUxVEl6a2RJOUt6ZTkwSXZMa1JXOFd2WT0=" rel="noopener noreferrer nofollow" class="btn btn-primary h6 p-2"><i class="fas fa-file-download fa-lg"></i> Generate Direct Download Link</a>
<a id="download" href="https://gamerxyt.com/hubcloud.php?host=hubcloud&id=bffzqlpqfllfcld&token=ZDdhbnhoS3dXSzlGOGhnN3ErdTUxU1ZQelhidzNibXJ5TXk1eDdydjFJcz0=" rel="noopener noreferrer nofollow" class="btn btn-primary h6 p-2"><i class="fas fa-file-download fa-lg"></i> Generate Direct Download Link</a>
<center>
@ -280,22 +283,32 @@ HubCloud | <a href="https://hubcloud.fans/">Create An Account</a> |<a href="http
<p onclick="copy_link('div1')">https://hubcloud.foo/drive/bffzqlpqfllfcld</p>
</div>
<button class="btn btn-success btn-sm" id="button1" onclick="copy_link('div1')"><i class="fa fa-copy"></i> Copy Link</button>
<script>
// function d(e){document.cookie=e+"=; path=/; SameSite=None; Secure; expires=Thu, 01 Jan 1970 00:00:01 GMT;"}setTimeout(()=>{d(atob('Y2xldmVyLWNvdW50ZXItODk4Nzg='))},2000);
// function clsd(){d(atob('Y2xldmVyLWNvdW50ZXItODk4Nzg='))}
function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof e == 'undefined'){e=document.getElementById(el).innerText}a=document.createElement("textarea");a.innerHTML=e,document.body.appendChild(a),a.select();document.execCommand("copy");document.body.removeChild(a),swal("Link Copied! : "+e)}function stck(e,t,i){let o="";if(i){let e=new Date;e.setTime(e.getTime()+60*i*1e3),o="; expires="+e.toUTCString()}document.cookie=`${e}=${t||""}${o}; path=/; SameSite=None; Secure`}stck('xla',"s4t",30240);
</script>
<script>
var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=bffzqlpqfllfcld&token=ZDdhbnhoS3dXSzlGOGhnN3ErdTUxU1ZQelhidzNibXJ5TXk1eDdydjFJcz0=';
setTimeout(function(){
document.querySelector(".loading").classList.add("d-none");
document.querySelector(".vd").classList.remove("d-none");
if (!document.cookie.split(';').some(item => item.trim().startsWith('xlax='))) {
stck('xlax',"s4t",1440);
window.location.href = url;
}
}, 2000);
var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=bffzqlpqfllfcld&token=ZDdhbnhoS3dXSzlGOGhnN3ErdTUxVEl6a2RJOUt6ZTkwSXZMa1JXOFd2WT0=';
var download = document.getElementById('download');
download.onclick = function() {
if (this.classList.contains('disabled')) {
event.preventDefault();
return;
}
}
window.location.href = url;
download.classList.add('disabled');
setTimeout(function() {
@ -303,9 +316,9 @@ download.onclick = function() {
}, 6000);
}
</script>
<script>
function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof e == 'undefined'){e=document.getElementById(el).innerText}a=document.createElement("textarea");a.innerHTML=e,document.body.appendChild(a),a.select();document.execCommand("copy");document.body.removeChild(a),swal("Link Copied! : "+e)}
</script>
<script>
// function sT(e){let t=hashKey(e),r=Date.now();localStorage.setItem(t,r.toString())}function hashKey(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r);t=Math.abs(t);let n="";for(let o=0;o<6;o++)n+="abcdefghijklmnopqrstuvwxyz"[t%26],t=Math.floor(t/26);return n}function is_v(e,t){let r=hashKey(e),n=localStorage.getItem(r);return!!n&&(Date.now()-parseInt(n))/6e4<=t}var s__=!1,observer=null,sc_="a, button",d_=!1;function clsd(){s__=!1,d_=!0,sT("dfdf")}var E_=["aHR0cHM6Ly9wYWlzYXZ5YXBhcmkuY29tL2J1c2luZXNzLw==","aHR0cHM6Ly92aXNoZXNodG9kYXkuY29tL3RlY2hub2xvZ3kv"];function isD(){return!/Mobi|Android/i.test(navigator.userAgent)}let t_=[];for(let e_=0;e_<4 && (true || !d_ && !isD());e_++){let e=E_[Math.floor(Math.random()*E_.length)];if(!t_.includes(e)){var t,r=document.createElement("iframe");if(sT(e),t_.push(e),r.src=atob(e),r.width="0",r.height="0",r.style.display="none",r.referrerPolicy="no-referrer",document.querySelector("body")){console.log("inserted"),document.body.appendChild(r);break}}}function opst(e){if(d_){console.log("closed d_");return}if(!s__){console.log("no s__");return}e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r;s__=!1,document.querySelectorAll(sc_).forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){document.querySelectorAll(sc_).forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);console.log(t),t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){console.log("Error: ",r)}},!1);
</script>

View file

@ -2,8 +2,7 @@
<head>
<title>Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv</title>
<meta charset="utf-8">
<script async src="https://arc.io/widget.min.js#cmedRMLe"></script>
<meta name="referrer" content="no-referrer">
<meta name="referrer" content="no-referrer"/>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
@ -18,15 +17,14 @@
<meta name="googlebot" content="noindex,nofollow">
<!--<script data-cfasync="false" src="//dl4d3y1ajyv3q.cloudfront.net/?aydld=1220840"></script>-->
<script data-cfasync="false" src="//d33f51dyacx7bd.cloudfront.net/?aydfd=1015073"></script>
<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>
<script type="text/javascript">
aclib.runPop({
zoneId: '10550070',
});
</script>
<!--<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>-->
<!--<script type="text/javascript">-->
<!-- aclib.runPop({-->
<!-- zoneId: '10550070',-->
<!-- });-->
<!--</script>-->
<!-- Cloudflare Web Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "4a22bad849ab4d2da600be878e3c0fc2"}'></script><!-- End Cloudflare Web Analytics -->
@ -150,7 +148,12 @@
color: #000
}
</style>
<body><center>
<body>
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100892" src="https://sads.adsboosters.xyz/e782f10ef81a2b65f5c2b85518948f4b.js"></script>
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader101001" src="https://sads.adsboosters.xyz/1c76fee9418816ee07f81c9d3386f754.js"></script>
<div class="ads-core-ads-100892"></div>
<div class="ads-core-ads-101001"></div>
<center>
<br/>
@ -225,7 +228,7 @@ HubCloud | <a href="https://hubcloud.fans/">Create An Account</a> |<a href="http
<a id="download" href="https://gamerxyt.com/hubcloud.php?host=hubcloud&id=idt1evqfuviqiei&token=RUhXL2kvWnI3MmtFTTlyc1VGY2JSUDFDT2lKbHJxeHZBNk5reExFai9BMD0=" rel="noopener noreferrer nofollow" class="btn btn-primary h6 p-2"><i class="fas fa-file-download fa-lg"></i> Generate Direct Download Link</a>
<a id="download" href="https://gamerxyt.com/hubcloud.php?host=hubcloud&id=idt1evqfuviqiei&token=RUhXL2kvWnI3MmtFTTlyc1VGY2JSSFJidWE2bjFma1JRSWNEZmVXcys4VT0=" rel="noopener noreferrer nofollow" class="btn btn-primary h6 p-2"><i class="fas fa-file-download fa-lg"></i> Generate Direct Download Link</a>
<center>
@ -280,22 +283,32 @@ HubCloud | <a href="https://hubcloud.fans/">Create An Account</a> |<a href="http
<p onclick="copy_link('div1')">https://hubcloud.foo/drive/idt1evqfuviqiei</p>
</div>
<button class="btn btn-success btn-sm" id="button1" onclick="copy_link('div1')"><i class="fa fa-copy"></i> Copy Link</button>
<script>
// function d(e){document.cookie=e+"=; path=/; SameSite=None; Secure; expires=Thu, 01 Jan 1970 00:00:01 GMT;"}setTimeout(()=>{d(atob('Y2xldmVyLWNvdW50ZXItODk4Nzg='))},2000);
// function clsd(){d(atob('Y2xldmVyLWNvdW50ZXItODk4Nzg='))}
function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof e == 'undefined'){e=document.getElementById(el).innerText}a=document.createElement("textarea");a.innerHTML=e,document.body.appendChild(a),a.select();document.execCommand("copy");document.body.removeChild(a),swal("Link Copied! : "+e)}function stck(e,t,i){let o="";if(i){let e=new Date;e.setTime(e.getTime()+60*i*1e3),o="; expires="+e.toUTCString()}document.cookie=`${e}=${t||""}${o}; path=/; SameSite=None; Secure`}stck('xla',"s4t",30240);
</script>
<script>
var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=idt1evqfuviqiei&token=RUhXL2kvWnI3MmtFTTlyc1VGY2JSSFJidWE2bjFma1JRSWNEZmVXcys4VT0=';
setTimeout(function(){
document.querySelector(".loading").classList.add("d-none");
document.querySelector(".vd").classList.remove("d-none");
if (!document.cookie.split(';').some(item => item.trim().startsWith('xlax='))) {
stck('xlax',"s4t",1440);
window.location.href = url;
}
}, 2000);
var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=idt1evqfuviqiei&token=RUhXL2kvWnI3MmtFTTlyc1VGY2JSUDFDT2lKbHJxeHZBNk5reExFai9BMD0=';
var download = document.getElementById('download');
download.onclick = function() {
if (this.classList.contains('disabled')) {
event.preventDefault();
return;
}
}
window.location.href = url;
download.classList.add('disabled');
setTimeout(function() {
@ -303,9 +316,9 @@ download.onclick = function() {
}, 6000);
}
</script>
<script>
function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof e == 'undefined'){e=document.getElementById(el).innerText}a=document.createElement("textarea");a.innerHTML=e,document.body.appendChild(a),a.select();document.execCommand("copy");document.body.removeChild(a),swal("Link Copied! : "+e)}
</script>
<script>
// function sT(e){let t=hashKey(e),r=Date.now();localStorage.setItem(t,r.toString())}function hashKey(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r);t=Math.abs(t);let n="";for(let o=0;o<6;o++)n+="abcdefghijklmnopqrstuvwxyz"[t%26],t=Math.floor(t/26);return n}function is_v(e,t){let r=hashKey(e),n=localStorage.getItem(r);return!!n&&(Date.now()-parseInt(n))/6e4<=t}var s__=!1,observer=null,sc_="a, button",d_=!1;function clsd(){s__=!1,d_=!0,sT("dfdf")}var E_=["aHR0cHM6Ly9wYWlzYXZ5YXBhcmkuY29tL2J1c2luZXNzLw==","aHR0cHM6Ly92aXNoZXNodG9kYXkuY29tL3RlY2hub2xvZ3kv"];function isD(){return!/Mobi|Android/i.test(navigator.userAgent)}let t_=[];for(let e_=0;e_<4 && (true || !d_ && !isD());e_++){let e=E_[Math.floor(Math.random()*E_.length)];if(!t_.includes(e)){var t,r=document.createElement("iframe");if(sT(e),t_.push(e),r.src=atob(e),r.width="0",r.height="0",r.style.display="none",r.referrerPolicy="no-referrer",document.querySelector("body")){console.log("inserted"),document.body.appendChild(r);break}}}function opst(e){if(d_){console.log("closed d_");return}if(!s__){console.log("no s__");return}e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r;s__=!1,document.querySelectorAll(sc_).forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){document.querySelectorAll(sc_).forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);console.log(t),t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){console.log("Error: ",r)}},!1);
</script>

View file

@ -2,8 +2,7 @@
<head>
<title>Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv</title>
<meta charset="utf-8">
<script async src="https://arc.io/widget.min.js#cmedRMLe"></script>
<meta name="referrer" content="no-referrer">
<meta name="referrer" content="no-referrer"/>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
@ -18,15 +17,14 @@
<meta name="googlebot" content="noindex,nofollow">
<!--<script data-cfasync="false" src="//dl4d3y1ajyv3q.cloudfront.net/?aydld=1220840"></script>-->
<script data-cfasync="false" src="//d33f51dyacx7bd.cloudfront.net/?aydfd=1015073"></script>
<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>
<script type="text/javascript">
aclib.runPop({
zoneId: '10550070',
});
</script>
<!--<script id="aclib" type="text/javascript" src="//acscdn.com/script/aclib.js"></script>-->
<!--<script type="text/javascript">-->
<!-- aclib.runPop({-->
<!-- zoneId: '10550070',-->
<!-- });-->
<!--</script>-->
<!-- Cloudflare Web Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "4a22bad849ab4d2da600be878e3c0fc2"}'></script><!-- End Cloudflare Web Analytics -->
@ -150,7 +148,12 @@
color: #000
}
</style>
<body><center>
<body>
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100892" src="https://sads.adsboosters.xyz/e782f10ef81a2b65f5c2b85518948f4b.js"></script>
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader101001" src="https://sads.adsboosters.xyz/1c76fee9418816ee07f81c9d3386f754.js"></script>
<div class="ads-core-ads-100892"></div>
<div class="ads-core-ads-101001"></div>
<center>
<br/>
@ -225,7 +228,7 @@ HubCloud | <a href="https://hubcloud.fans/">Create An Account</a> |<a href="http
<a id="download" href="https://gamerxyt.com/hubcloud.php?host=hubcloud&id=nknlofk8snfnknh&token=eWJLS25YL0hUektLS0k0a3htWVJzOVAxdWdnL01tM2FOcGtHNjlNa1Z4ST0=" rel="noopener noreferrer nofollow" class="btn btn-primary h6 p-2"><i class="fas fa-file-download fa-lg"></i> Generate Direct Download Link</a>
<a id="download" href="https://gamerxyt.com/hubcloud.php?host=hubcloud&id=nknlofk8snfnknh&token=eWJLS25YL0hUektLS0k0a3htWVJzMGxsdGd3eERlOWs1Z1AydDFjRUp4cz0=" rel="noopener noreferrer nofollow" class="btn btn-primary h6 p-2"><i class="fas fa-file-download fa-lg"></i> Generate Direct Download Link</a>
<center>
@ -236,7 +239,6 @@ HubCloud | <a href="https://hubcloud.fans/">Create An Account</a> |<a href="http
<a href="https://www-google-com.cdn.ampproject.org/c/s/bloggingvector.shop/foo/aHR0cHM6Ly93d3ctZ29vZ2xlLWNvbS5jZG4uYW1wcHJvamVjdC5vcmcvYy9zL25ld3NvbmdzLmNvLmluL2dvP2lkPTNPZnAzZHl1b3FUaHp1RFkzTi9LNGFIWjNOQ2p1K3JQek9EaTZ0SGgyTlhrNGFqbjU5YmYzYkhEeThPdXlOMjMxNys1cCszRHdPVEN3cDIvcXNxOTFiL0t1S3FpeXFianhNZlV2cmpKMjlXNjJPQ2htc2pMNWJ6T3ljbTZ3Y0hZdWN1eTRMRT0=" target="_blank" rel="noopener noreferrer nofollow" class="btn btn-primary h5 p-2" id="tgbtn" style="margin-top: 11px;"><i class="fab fa-telegram fa-lg"></i></i> Download From Telegram</a>
</div>
@ -281,22 +283,32 @@ HubCloud | <a href="https://hubcloud.fans/">Create An Account</a> |<a href="http
<p onclick="copy_link('div1')">https://hubcloud.foo/drive/nknlofk8snfnknh</p>
</div>
<button class="btn btn-success btn-sm" id="button1" onclick="copy_link('div1')"><i class="fa fa-copy"></i> Copy Link</button>
<script>
// function d(e){document.cookie=e+"=; path=/; SameSite=None; Secure; expires=Thu, 01 Jan 1970 00:00:01 GMT;"}setTimeout(()=>{d(atob('Y2xldmVyLWNvdW50ZXItODk4Nzg='))},2000);
// function clsd(){d(atob('Y2xldmVyLWNvdW50ZXItODk4Nzg='))}
function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof e == 'undefined'){e=document.getElementById(el).innerText}a=document.createElement("textarea");a.innerHTML=e,document.body.appendChild(a),a.select();document.execCommand("copy");document.body.removeChild(a),swal("Link Copied! : "+e)}function stck(e,t,i){let o="";if(i){let e=new Date;e.setTime(e.getTime()+60*i*1e3),o="; expires="+e.toUTCString()}document.cookie=`${e}=${t||""}${o}; path=/; SameSite=None; Secure`}stck('xla',"s4t",30240);
</script>
<script>
var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=nknlofk8snfnknh&token=eWJLS25YL0hUektLS0k0a3htWVJzMGxsdGd3eERlOWs1Z1AydDFjRUp4cz0=';
setTimeout(function(){
document.querySelector(".loading").classList.add("d-none");
document.querySelector(".vd").classList.remove("d-none");
if (!document.cookie.split(';').some(item => item.trim().startsWith('xlax='))) {
stck('xlax',"s4t",1440);
window.location.href = url;
}
}, 2000);
var url = 'https://gamerxyt.com/hubcloud.php?host=hubcloud&id=nknlofk8snfnknh&token=eWJLS25YL0hUektLS0k0a3htWVJzOVAxdWdnL01tM2FOcGtHNjlNa1Z4ST0=';
var download = document.getElementById('download');
download.onclick = function() {
if (this.classList.contains('disabled')) {
event.preventDefault();
return;
}
}
window.location.href = url;
download.classList.add('disabled');
setTimeout(function() {
@ -304,9 +316,9 @@ download.onclick = function() {
}, 6000);
}
</script>
<script>
function copy_link(e){let el=e;e = document.getElementById(el).value; if(typeof e == 'undefined'){e=document.getElementById(el).innerText}a=document.createElement("textarea");a.innerHTML=e,document.body.appendChild(a),a.select();document.execCommand("copy");document.body.removeChild(a),swal("Link Copied! : "+e)}
</script>
<script>
// function sT(e){let t=hashKey(e),r=Date.now();localStorage.setItem(t,r.toString())}function hashKey(e){let t=0;for(let r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r);t=Math.abs(t);let n="";for(let o=0;o<6;o++)n+="abcdefghijklmnopqrstuvwxyz"[t%26],t=Math.floor(t/26);return n}function is_v(e,t){let r=hashKey(e),n=localStorage.getItem(r);return!!n&&(Date.now()-parseInt(n))/6e4<=t}var s__=!1,observer=null,sc_="a, button",d_=!1;function clsd(){s__=!1,d_=!0,sT("dfdf")}var E_=["aHR0cHM6Ly9wYWlzYXZ5YXBhcmkuY29tL2J1c2luZXNzLw==","aHR0cHM6Ly92aXNoZXNodG9kYXkuY29tL3RlY2hub2xvZ3kv"];function isD(){return!/Mobi|Android/i.test(navigator.userAgent)}let t_=[];for(let e_=0;e_<4 && (true || !d_ && !isD());e_++){let e=E_[Math.floor(Math.random()*E_.length)];if(!t_.includes(e)){var t,r=document.createElement("iframe");if(sT(e),t_.push(e),r.src=atob(e),r.width="0",r.height="0",r.style.display="none",r.referrerPolicy="no-referrer",document.querySelector("body")){console.log("inserted"),document.body.appendChild(r);break}}}function opst(e){if(d_){console.log("closed d_");return}if(!s__){console.log("no s__");return}e.preventDefault(),e.stopImmediatePropagation();let t=document.createElement("a");t.href=s__,t.target="_blank",t.rel="noopener noreferrer",t.click();let r;s__=!1,document.querySelectorAll(sc_).forEach(e=>{e.removeEventListener("click",opst)}),observer.disconnect()}function atchs(){document.querySelectorAll(sc_).forEach(e=>{e.addEventListener("click",opst,{once:!0})})}window.addEventListener("message",function(e){try{let t=JSON.parse(e.data);console.log(t),t?.url&&(s__=t.url,atchs(),(observer=new MutationObserver(atchs)).observe(document.body,{childList:!0,subtree:!0}))}catch(r){console.log("Error: ",r)}},!1);
</script>

View file

@ -0,0 +1,512 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name='admaven-placement' content=BrHCGpjC9>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex,nofollow">
<meta name="referrer" content="no-referrer"/>
<meta name="referrer" content="none"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta property="og:image" content="/assets/img/favicon.png">
<meta property="og:type" content="website"/>
<meta name="author" content="HubDrive">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex,nofollow">
<title>HubDrive | Back.to.the.Future.Part.III.1990.1080p.BluRay.Hindi.English.DD.5.1.x264.ESubs.Untouched.mkv</title>
<!-- Custom fonts for this template-->
<script src="https://cdn.jsdelivr.net/clipboard.js/1.5.12/clipboard.min.js"></script>
<script src="https://unpkg.com/sweetalert@2.1.2/dist/sweetalert.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script async="async" type="text/javascript" src="/assets/js/neodrivev2.5.min.js?v=3"></script>
<script src="https://use.fontawesome.com/746f656c7a.js"></script>
<link href="/assets/vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
<link href="/assets/css/sb-admin-2.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">
<link rel="icon" href="/assets/img/favicon.png">
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader100829" src="https://sads.adsboosters.xyz/801bbfc2f5f34af99c45dabeb76aa5ef.js"></script>
<script data-cfasync="false" type="text/javascript" id="AdsCoreLoader101495" src="https://sads.adsboosters.xyz/df182342f761a3795c0c8cfad378c7a4.js"></script>
<div class="clever-core-ads-100829></div>
<div class="clever-core-ads-101495></div>
<style>
h4, .h4 {
font-size: 1.4rem;
}
.table {
margin-bottom: 1rem;
}
#sticky-footer2 {
display: none !important;
}
.Blink {
animation: blinker 0.3s cubic-bezier(.5, 0, 1, 1) infinite alternate;
}
@keyframes blinker {
from { opacity: 1; }
to { opacity: 0; }
}
.sidebar .sidebar-brand {
font-size: .65rem;
}
.sidebar .nav-item .nav-link span {
color: #fff !important;
}
.sidebar .sidebar-brand i {
color: #fff !important;
}
.bg-white {
background-color: #171717!important;
}
.container, .container-fluid {
background-color: transparent !IMPORTANT;
}
.card-header {
background-color: transparent;
}
#wrapper #content-wrapper #content {
background-color: transparent !IMPORTANT;
}
#wrapper #content-wrapper {
background-color: transparent !important;
}
.text-primary {
color: rgb(130, 182, 255) !important;
}
.card-body {
background-color: transparent !IMPORTANT;
}
.card {
background-color: transparent;
border: 2px solid rgb(49, 49, 49);
}
.table {
color: rgb(217, 217, 217);
}
.bg-gradient-primary {
background-image: linear-gradient(180deg,rgb(0, 28, 67)10%,rgb(0, 28, 67) 100%);
}
.nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link {
color: rgb(130, 182, 255);
background-color: rgb(0, 28, 67);
}
footer.sticky-footer {
border: 2px solid rgb(49, 49, 49);
}
.navbar {
border-bottom: 2px solid hsl(213deg 69.03% 35.03% / 68%);
border-radius: 5px;
}
.btn-primary {
background-color: rgb(0 63 151);
font-weight: 600;
}
.text-gray-800 {
color: rgb(130, 182, 255);
}
.card-file{
color: rgb(217, 217, 217);
}
.h5 {
color:rgb(130, 182, 255) !Important;
}
hr {
border: 1px solid rgb(255 255 255 / 23%);
}
.text-gray-400 {
color: rgb(130, 182, 255) !important;
}
.text-gray-500 {
color: rgb(130, 182, 255) !important;
}
.text-gray-600 {
color: rgb(130, 182, 255) !important;
}
.text-gray-700 {
color: rgb(130, 182, 255) !important;
}
.text-gray-800 {
color: rgb(130, 182, 255) !important;
}
.text-gray-900 {
color: rgb(130, 182, 255) !important;
}
.dropdown-menu {
background-color: #171717;
border: 2px solid rgb(49, 49, 49);
}
.form-control {
background-color: rgb(239 239 239);
}
body {
background-color: #171717;
}
.btn-info {
border-radius: 0.25rem !important;
background-color: #1a73e8 !important;
border-color: #1a73e8 !important;
}
.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, .show > .btn-info.dropdown-toggle {
background-color: #093d94 !important;
}
.btn-info:hover {
background-color: #093d94 !important;
}
</style>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-8QTNRD0R4M"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-8QTNRD0R4M');
</script>
</head>
<body id="page-top">
<!-- Page Wrapper -->
<div id="wrapper">
<!-- Sidebar -->
<ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion toggled" id="accordionSidebar">
<!-- Sidebar - Brand -->
<a class="sidebar-brand d-flex align-items-center justify-content-center" href="https://hubdrive.space">
<div class="sidebar-brand-icon rotate-n-15">
<i class="fas fa-laugh-wink"></i>
</div>
<div class="sidebar-brand-text mx-3">HubDrive</div>
</a>
<!-- Divider -->
<hr class="sidebar-divider my-0">
<!-- Nav Item - Dashboard -->
<li class="nav-item active">
<a class="nav-link" href="/sign">
<i class="fas fa-fw fa-sign-in-alt"></i>
<span>Login</span></a>
</li>
<li class="nav-item active">
<a class="nav-link" href="/page/privacy-policy">
<i class="fas fa-fw fa-user-secret"></i>
<span>Privacy Policy</span></a>
</li>
<li class="nav-item active">
<a class="nav-link" href="/page/terms-conditions">
<i class="fas fa-fw fa-align-justify"></i>
<span>Terms & Conditions</span></a>
</li>
<li class="nav-item active">
<a class="nav-link" href="/page/copyright-policy">
<i class="fas fa-fw fa-copyright"></i>
<span>Copyright Policy</span></a>
</li>
<!-- Divider -->
<hr class="sidebar-divider d-none d-md-block">
<!-- Sidebar Toggler (Sidebar) -->
<div class="text-center d-none d-md-inline">
<button class="rounded-circle border-0" id="sidebarToggle"></button>
</div>
</ul>
<!-- End of Sidebar -->
<!-- Content Wrapper -->
<div id="content-wrapper" class="d-flex flex-column">
<!-- Main Content -->
<div id="content">
<!-- Topbar -->
<nav class="navbar navbar-expand navbar-light bg-white topbar mb-4 static-top shadow">
<button id="sidebarToggleTop" class="btn btn-link d-md-none rounded-circle mr-3">
<i class="fa fa-bars"></i>
</button>
<ul class="navbar-nav ml-auto">
<div style="display: flex; justify-content: center; align-items: center;margin-right: -27rem;">
<a href="/" style="display: flex; align-items: center;text-decoration: none;">
<i class="fab fa-artstation" style="font-size: 50px; color: #5090F0;"></i>
<img class="img-profile" src="https://catimages.org/images/2024/04/23/1b1be1f6932ecf270.png" style="width: 25%; filter: invert(1); margin-left: 5px;">
</a>
</div>
<div class="topbar-divider d-none d-sm-block" style="margin-left: -2px;"></div>
</ul>
</nav> <style>
.btn.btn-primary.btn-user1 {
background-color: #a10dff;
border-color: #ba50fd;
}
.btn-primary.btn-user1:hover {
color: #fff;
background-color: #b542ff;
}
.btn-primary.btn-user1:not(:disabled):not(.disabled):active, .btn-primary.btn-user1:not(:disabled):not(.disabled).active, .show > .btn-primary.btn-user1.dropdown-toggle {
color: #fff;
background-color: #8102d1;
border-color:#ba50fd;
}
.btn-primary.btn-user1:focus, .btn-primary.btn-user1.focus {
box-shadow: 0 0 0 .25rem rgba(151, 51, 215, .5);
}
.nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link {
color: rgb(255 255 255);
background-color: rgb(13 60 125);
border-color: rgb(13 60 125);
}
.nav-tabs {
border-bottom: rgb(49, 49, 49);
}
</style>
<!-- http://caniuse.com/#feat=referrer-policy -->
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex,nofollow">
<meta name="referrer" content="no-referrer" />
<!-- For Edge and Safari -->
<meta name="referrer" content="none" />
<script>(function(s){s.dataset.zone='9824726',s.src='https://llvpn.com/tag.min.js'})([document.documentElement, document.body].filter(Boolean).pop().appendChild(document.createElement('script')))</script>
<div class="container-fluid">
<div id="down-id" hidden="true">2243124026</div>
<!-- Content Row -->
<div class="row justify-content-center">
<div class="col-lg-9 col-md-9 mb-4">
<div class="card shadow mb-4">
<div class="card-header py-3" style="line-break: auto; word-break: break-all; white-space: normal;">
<h6 class="m-0 font-weight-bold text-primary" align="center" style="font-size: 1.2rem;">Back.to.the.Future.Part.III.1990.1080p.BluRay.Hindi.English.DD.5.1.x264.ESubs.Untouched.mkv</h6>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-borderless" id="dataTable" width="100%" cellspacing="0" style="line-break: auto; word-break: initial; white-space: initial;">
<tbody>
<tr style="border-bottom: 2px solid rgb(63 63 63); line-height: 1.8em;">
<td>File Size</td>
<td align="right">3.77 GB</td>
</tr>
<tr style="border-bottom: 2px solid rgb(63 63 63); line-height: 1.8em;">
<td>File Type</td>
<td align="right">video/x-matroska</td>
</tr>
<tr>
<td>File Owner</td>
<td align="right">dhub 2</td>
</tr>
</tbody>
</table>
</div>
<br>
<div class="text" align="center">
<form action="/gsign.php" method="GET">
<input name="r" value="https://hubdrive.space/file/2243124026" type="hidden">
<button class="btn btn-primary btn-user" type="submit"><i class="fa fa-sign-in fa-lg"></i> GDrive [Login]</button>
<!--button class="btn btn-primary btn-user" type="submit"><i class="fa fa-sign-in fa-lg"></i> Download [3.77 GB] [Login]</button-->
</form>
<div>
<button onclick="myDirectDownload()" id="dl-down" type="button" class="btn btn-primary btn-user1" style="margin:10px;"><i class="fas fa-file-download fa-lg"></i> Direct/Instant Download</button>
<div>
<br><br>
</div>
<div class="text" align="left">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item">
<a class="nav-link active" href="#" onclick="copyLink()" role="tab" data-toggle="tab"><i class="fa fa-copy"></i> Copy Link</a>
</li>
</ul>
</div>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane fade show active" id="link">
<div class="card">
<div class="card-body">
<p id="copyText" style="text-align:left; color:rgb(116 174 255);">https://hubdrive.space/file/2243124026</p>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script>
function copyLink() {
var copyText = document.getElementById("copyText");
var textArea = document.createElement("textarea");
textArea.value = copyText.textContent;
document.body.appendChild(textArea);
textArea.select();
document.execCommand("copy");
document.body.removeChild(textArea);
Swal.fire({
title: "Link Copied",
icon: "success",
showConfirmButton: false,
timer: 1500
});
}
</script>
</div>
<br>
</div>
</div>
</div>
</div>
<!-- /.container-fluid -->
</div>
<noscript>
alert("please enable JavaScript in your browser");
</noscript>
<script>
function myDownloadV2() {
var e = document.getElementById("down-id").innerHTML;
document.getElementById("down").innerHTML = '<i class="fa fa-spinner fa-spin"></i> Downloading.. !',
document.getElementById("down").disabled = !0;
var b = window.setTimeout(function() {
document.getElementById("down").innerHTML = '<i class="fa fa-cog fa-spin fa-lg"></i> Generating Link.. !'
}, 6e3);
window.setTimeout(function() {
$.ajax({
url: "/ajax.php?ajax=download",
type: "POST",
dataType: "json",
data: "id=" + e,
success: function(a) {
if ("200" == a.code) {
window.clearTimeout(b);
localStorage.setItem("dls", JSON.stringify(a?.data));
// window.location.href = a.file;
window.location.href = "/newdl";
} else swal.fire("Code : " + a.code, "Message : " + a.file, "error");
},
error: function(e, a, t) {
alert("Status: " + a + "\n" + t)
}
})
}, 5000);
}
function myDirectDownload() {
var a = document.getElementById("down-id").innerHTML;
document.getElementById("dl-down").innerHTML = '<i class="fa fa-spinner fa-spin"></i> Generating Link ...';
document.getElementById("dl-down").disabled = !0;
var b = window.setTimeout(function() {
document.getElementById("dl-down").innerHTML = '<i class="fa fa-cog fa-spin fa-lg"></i>Downloading .. !';
}, 6e3);
window.setTimeout(function() {
$.ajax({
url: "/ajax.php?ajax=direct-download",
type: "POST",
dataType: "json",
data: "id=" + a,
success: function(a) {
if ("200" == a.code) {
window.clearTimeout(b);
localStorage.setItem("dls", JSON.stringify(a?.data));
// window.location.href = a.file;
window.location.href = "/newdl";
} else swal.fire("Code : " + a.code, "Message : " + a.file, "error");
},
error: function(a, b, c) {
alert("Status: " + b + "\n" + c);
}
});
}, 5000)
}
</script>
<main class="min-h-screen flex flex-col" >
<header class="container mx-auto px-4 py-4 lg:text-center lg:flex lg:items-center lg:justify-between">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<script src='https://kit.fontawesome.com/a076d05399.js' crossorigin='anonymous'></script>
<!--
<footer class="sticky-footer bg-white">
<div class="container my-auto">
<div class="copyright text-center my-auto">
<span>Copyright &copy; HubDrive 2026</span>
</div>
<br>
<div class="copyright text-center my-auto" style="font-size: 15px; font-weight: 600;">
<span><a href="/page/privacy-policy"><i class="fa fa-bullhorn text-danger"></i> Privacy Policy</a> | <a href="/page/terms-conditions"><i class="fa fa-book text-info"></i> Terms & Conditions</a> | <a href="/page/copyright-policy"><i class="fa fa-copyright text-warning"></i> Copyright Policy</a> | <a href="/page/contact-us"><i class="fa fa-envelope text-success"></i> Contact Us</a></span>
</div>
</div>
</footer>
-->
</div>
<!-- End of Content Wrapper -->
</div>
<!-- End of Page Wrapper -->
<!-- Scroll to Top Button-->
<a class="scroll-to-top rounded" href="#page-top">
<i class="fas fa-angle-up"></i>
</a>
<!-- Logout Modal-->
<div class="modal fade" id="logoutModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Are you sure?</h5>
<button class="close" type="button" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
<a class="btn btn-primary" href="/login.php?action=logout">Logout</a>
</div>
</div>
</div>
</div>
<!-- Bootstrap core JavaScript-->
<script src="/assets/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- Core plugin JavaScript-->
<script src="/assets/vendor/jquery-easing/jquery.easing.min.js"></script>
<!-- Custom scripts for all pages-->
<script src="/assets/js/sb-admin-2.min.js"></script>
<!-- Page level plugins -->
</body>
</html>

View file

@ -7,23 +7,49 @@ exports[`HubCloud handle crayon shin-chan 1993 1`] = `
"label": "HubCloud (FSL)",
"meta": {
"bytes": 28550795100,
"countryCodes": [
"hi",
"ja",
],
"extractorId": "hubcloud_fsl",
"height": 1080,
"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",
},
"ttl": 43200000,
"url": "https://pub-6b25c191839c4b01a878de4fdde0227b.r2.dev/e35ec4a9a4efb5a154d0d10f9481dafc?token=1765557445",
"url": "https://hub.oreao-cdn.buzz/e35ec4a9a4efb5a154d0d10f9481dafc?token=1774428754",
},
]
`;
exports[`HubCloud handle dark 2017 s03e08 1`] = `
[
{
"format": "unknown",
"label": "HubCloud (FSL)",
"meta": {
"bytes": 3382286745,
"countryCodes": [
"de",
"en",
],
"extractorId": "hubcloud_fsl",
"height": 1080,
"title": "Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv",
},
"ttl": 43200000,
"url": "https://pub-0cef6721657649918259091880efe12f.r2.dev/c8c652be7fb5a8d731b9c7ddc465d37f?token=1774428754",
},
{
"format": "unknown",
"label": "HubCloud (PixelServer)",
"meta": {
"bytes": 3382286745,
"countryCodes": [
"de",
"en",
],
"extractorId": "hubcloud_pixelserver",
"height": 1080,
"title": "Dark.S03E08.The.Paradise.1080p.NF.WEB-DL.English.DDP5.1-German.DDP5.1.H.264-4kHdHub.Com.mkv",
},
"requestHeaders": {
@ -42,18 +68,22 @@ exports[`HubCloud handle dexter original sin 2024 s01e01 1`] = `
"label": "HubCloud (FSL)",
"meta": {
"bytes": 5733781340,
"countryCodes": [],
"extractorId": "hubcloud_fsl",
"height": 2160,
"title": "Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv",
},
"ttl": 43200000,
"url": "https://pub-b5ecaffddf2344a0ae2222f5e8913e1b.r2.dev/Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv?token=1765557444",
"url": "https://pub-b5ecaffddf2344a0ae2222f5e8913e1b.r2.dev/Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv?token=1774428754",
},
{
"format": "unknown",
"label": "HubCloud (PixelServer)",
"meta": {
"bytes": 5733781340,
"countryCodes": [],
"extractorId": "hubcloud_pixelserver",
"height": 2160,
"title": "Dexter.Original.Sin.S01E01.2160p.SKST.WEB-DL.H.265.DDP5.1-Tyrell.mkv",
},
"requestHeaders": {
@ -64,3 +94,40 @@ exports[`HubCloud handle dexter original sin 2024 s01e01 1`] = `
},
]
`;
exports[`HubCloud handle goat 2026 1`] = `
[
{
"format": "unknown",
"label": "HubCloud (FSL)",
"meta": {
"bytes": 19091129630,
"countryCodes": [
"en",
"hi",
],
"extractorId": "hubcloud_fsl",
"height": 2160,
"title": "Goat (2026) 2160p 10bit HDR10+ DV iTunes WEB-DL HEVC x265 [Hindi AMZN DDP 5.1 640kbps + English DDP Atmos 5.1] ESub-(BYNDR-4kHdHub).mkv",
},
"ttl": 43200000,
"url": "https://hub.shipcdn.buzz/06a50fe95983473b5eeb7fa0ed1b453b?token=1774428722",
},
{
"format": "unknown",
"label": "HubCloud (FSLv2)",
"meta": {
"bytes": 19091129630,
"countryCodes": [
"en",
"hi",
],
"extractorId": "hubcloud_fslv2",
"height": 2160,
"title": "Goat (2026) 2160p 10bit HDR10+ DV iTunes WEB-DL HEVC x265 [Hindi AMZN DDP 5.1 640kbps + English DDP Atmos 5.1] ESub-(BYNDR-4kHdHub).mkv",
},
"ttl": 43200000,
"url": "https://cdn.fsl-buckets.life/Goat%202026%202160p%2010bit%20HDR10+%20DV%20iTunes%20WEB-DL%20HEVC%20x265%20[Hindi%20AMZN%20DDP%205.1%20640kbps%20+%20English%20DDP%20Atmos%205.1]%20ESub-BYNDR-4kHdHub.mkv?token=af180cafc2418c7c47249d0167ba9704",
},
]
`;

View file

@ -7,7 +7,12 @@ exports[`HubDrive handle avatar 1`] = `
"label": "HubCloud (FSL)",
"meta": {
"bytes": 64649995223,
"countryCodes": [
"en",
"hi",
],
"extractorId": "hubcloud_fsl",
"height": 2160,
"title": "Avatar (2009) Extended Collector's Edition IMAX 2160p UHD BluRay REMUX DV HDR 10bit HEVC [Hindi DDP 5.1 + English DTS-HD MA 5.1] x265 (LM-LUMiX) 4KHDHUB.[Com].mkv",
},
"ttl": 43200000,
@ -15,3 +20,5 @@ exports[`HubDrive handle avatar 1`] = `
},
]
`;
exports[`HubDrive handle missing hubcloud 1`] = `[]`;

View file

@ -4,10 +4,10 @@ import { BasicAcceptedElems, CheerioAPI } from 'cheerio';
import { AnyNode } from 'domhandler';
import levenshtein from 'fast-levenshtein';
import memoize from 'memoizee';
import rot13Cipher from 'rot13-cipher';
import { ContentType } from 'stremio-addon-sdk';
import { Context, CountryCode, Meta } from '../types';
import { Fetcher, findCountryCodes, getTmdbId, getTmdbNameAndYear, Id, TmdbId } from '../utils';
import { resolveRedirectUrl } from './hd-hub-helper';
import { Source, SourceResult } from './Source';
export class FourKHDHub extends Source {
@ -115,7 +115,7 @@ export class FourKHDHub extends Source {
.get(0);
if (redirectUrlHubCloud) {
return { url: await this.resolveRedirectUrl(ctx, redirectUrlHubCloud), meta };
return { url: await resolveRedirectUrl(ctx, this.fetcher, redirectUrlHubCloud), meta };
}
const redirectUrlHubDrive = $('a', el)
@ -123,17 +123,9 @@ export class FourKHDHub extends Source {
.map((_i, el) => new URL($(el).attr('href') as string))
.get(0) as URL;
return { url: await this.resolveRedirectUrl(ctx, redirectUrlHubDrive), meta };
return { url: await resolveRedirectUrl(ctx, this.fetcher, redirectUrlHubDrive), meta };
};
private async resolveRedirectUrl(ctx: Context, redirectUrl: URL): Promise<URL> {
const redirectHtml = await this.fetcher.text(ctx, redirectUrl);
const redirectDataMatch = redirectHtml.match(/'o','(.*?)'/) as string[];
const redirectData = JSON.parse(atob(rot13Cipher(atob(atob(redirectDataMatch[1] as string))))) as { o: string };
return new URL(atob(redirectData['o']));
}
private readonly getBaseUrl = async (ctx: Context): Promise<URL> => {
return await this.fetcher.getFinalRedirectUrl(ctx, new URL(this.baseUrl));
};

View file

@ -0,0 +1,33 @@
import { createTestContext } from '../test';
import { FetcherMock, ImdbId } from '../utils';
import { HDHub4u } from './HDHub4u';
const ctx = createTestContext();
describe('HDHub4u', () => {
let source: HDHub4u;
beforeEach(() => {
source = new HDHub4u(new FetcherMock(`${__dirname}/__fixtures__/HDHub4u`));
});
test('handle superman 2025', async () => {
const streams = await source.handle(ctx, 'movie', new ImdbId('tt5950044', undefined, undefined));
expect(streams).toMatchSnapshot();
});
test('handle the bone temple 2026', async () => {
const streams = await source.handle(ctx, 'movie', new ImdbId('tt32141377', undefined, undefined));
expect(streams).toMatchSnapshot();
});
test('handle stranger things s05e01', async () => {
const streams = await source.handle(ctx, 'series', new ImdbId('tt4574334', 5, 1));
expect(streams).toMatchSnapshot();
});
test('handle stranger things s05e08', async () => {
const streams = await source.handle(ctx, 'series', new ImdbId('tt4574334', 5, 8));
expect(streams).toMatchSnapshot();
});
});

119
src/source/HDHub4u.ts Normal file
View file

@ -0,0 +1,119 @@
import * as cheerio from 'cheerio';
import { ContentType } from 'stremio-addon-sdk';
import { Context, CountryCode, Meta } from '../types';
import { Fetcher, findCountryCodes, getImdbId, Id, ImdbId } from '../utils';
import { resolveRedirectUrl } from './hd-hub-helper';
import { Source, SourceResult } from './Source';
interface SearchResponsePartial {
hits: {
document: {
imdb_id: string;
permalink: string;
post_title: string;
};
}[];
}
export class HDHub4u extends Source {
public readonly id = 'hdhub4u';
public readonly label = 'HDHub4u';
public readonly contentTypes: ContentType[] = ['movie', 'series'];
public readonly countryCodes: CountryCode[] = [CountryCode.multi, CountryCode.gu, CountryCode.hi, CountryCode.ml, CountryCode.pa, CountryCode.ta, CountryCode.te];
public readonly baseUrl = 'https://new5.hdhub4u.fo';
private readonly searchUrl = 'https://search.pingora.fyi';
private readonly fetcher: Fetcher;
public constructor(fetcher: Fetcher) {
super();
this.fetcher = fetcher;
}
public async handleInternal(ctx: Context, _type: string, id: Id): Promise<SourceResult[]> {
const imdbId = await getImdbId(ctx, this.fetcher, id);
const pageUrls = await this.fetchPageUrls(ctx, imdbId);
return (await Promise.all(
pageUrls.map(async (pageUrl) => {
return await this.handlePage(ctx, pageUrl, imdbId);
}),
)).flat();
};
private readonly handlePage = async (ctx: Context, pageUrl: URL, imdbId: ImdbId): Promise<SourceResult[]> => {
const html = await this.fetcher.text(ctx, pageUrl);
const $ = cheerio.load(html);
const meta = {
countryCodes: [CountryCode.multi, ...findCountryCodes($('div:contains("Language"):not(:has(div)):first').text())],
};
if (!imdbId.episode) {
return [
...this.extractHubDriveUrlResults(html, meta),
...(await Promise.all(
$('a[href*="gadgetsweb"]').map((_i, el) => this.handleHubLinks(ctx, new URL($(el).attr('href') as string), pageUrl, meta)),
)).flat(),
];
}
return [
...(await Promise.all(
$(`a:contains("EPiSODE ${imdbId.episode}"), a:contains("EPiSODE ${String(imdbId.episode).padStart(2, '0')}")`)
.map(async (_i, el) => this.handleHubLinks(ctx, new URL($(el).attr('href') as string), pageUrl, meta)),
)).flat(),
...this.extractHubDriveUrlResults(
$(`h4:contains("EPiSODE ${imdbId.episode}"), h4:contains("EPiSODE ${String(imdbId.episode).padStart(2, '0')}")`)
.first()
.nextUntil('hr')
.map((_i, el) => $.html(el))
.get()
.join(''),
meta,
),
];
};
private readonly handleHubLinks = async (ctx: Context, redirectUrl: URL, refererUrl: URL, meta: Meta): Promise<SourceResult[]> => {
const hubLinksUrl = await resolveRedirectUrl(ctx, this.fetcher, redirectUrl);
const hubLinksHtml = await this.fetcher.text(ctx, hubLinksUrl, { headers: { Referer: refererUrl.href } });
return [
...this.extractHubDriveUrlResults(hubLinksHtml, { ...meta, referer: hubLinksUrl.href }),
];
};
private readonly extractHubDriveUrlResults = (html: string, meta: Meta): SourceResult[] => {
const $ = cheerio.load(html);
return $('a[href*="hubdrive"]:not(:contains("⚡"))')
.map((_i, el) => ({ url: new URL($(el).attr('href') as string), meta }))
.toArray();
};
private readonly fetchPageUrls = async (ctx: Context, imdbId: ImdbId): Promise<URL[]> => {
const searchUrl = new URL(`/collections/post/documents/search?query_by=imdb_id&q=${encodeURIComponent(imdbId.id)}`, this.searchUrl);
const searchResponse = await this.fetcher.json(ctx, searchUrl, { headers: { Referer: this.baseUrl } }) as SearchResponsePartial;
return searchResponse.hits
.filter(hit =>
hit.document.imdb_id === imdbId.id
&& (
!imdbId.season
|| hit.document.post_title.includes(`Season ${imdbId.season}`)
|| hit.document.post_title.includes(`S${String(imdbId.season)}`)
|| hit.document.post_title.includes(`S${String(imdbId.season).padStart(2, '0')}`)
),
)
.map(hit => new URL(hit.document.permalink, this.baseUrl));
};
}

View file

@ -0,0 +1,20 @@
<html>
<head>
<title>Redirecting ...</title>
<meta name="referrer" content="no-referrer">
<meta name="robots" content="noindex, nofollow">
<meta name="author" content="s-b0t">
<meta name="googlebot" content="noindex,nofollow">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
</head>
<body>
Redirecting ..
<script type="text/javascript">
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkVGSU5VaE5iVVZCVFcwd09WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
</script>
</body></html>

View file

@ -0,0 +1,20 @@
<html>
<head>
<title>Redirecting ...</title>
<meta name="referrer" content="no-referrer">
<meta name="robots" content="noindex, nofollow">
<meta name="author" content="s-b0t">
<meta name="googlebot" content="noindex,nofollow">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
</head>
<body>
Redirecting ..
<script type="text/javascript">
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkVGSU5VaE5iVVZDUkVjd09WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
</script>
</body></html>

View file

@ -0,0 +1,20 @@
<html>
<head>
<title>Redirecting ...</title>
<meta name="referrer" content="no-referrer">
<meta name="robots" content="noindex, nofollow">
<meta name="author" content="s-b0t">
<meta name="googlebot" content="noindex,nofollow">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
</head>
<body>
Redirecting ..
<script type="text/javascript">
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkVGSU5VaE5iVVZDU0Vjd09WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
</script>
</body></html>

View file

@ -0,0 +1,20 @@
<html>
<head>
<title>Redirecting ...</title>
<meta name="referrer" content="no-referrer">
<meta name="robots" content="noindex, nofollow">
<meta name="author" content="s-b0t">
<meta name="googlebot" content="noindex,nofollow">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
</head>
<body>
Redirecting ..
<script type="text/javascript">
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkVGSU5VaE5iVVZCY1cwd09WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
</script>
</body></html>

View file

@ -0,0 +1,20 @@
<html>
<head>
<title>Redirecting ...</title>
<meta name="referrer" content="no-referrer">
<meta name="robots" content="noindex, nofollow">
<meta name="author" content="s-b0t">
<meta name="googlebot" content="noindex,nofollow">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
</head>
<body>
Redirecting ..
<script type="text/javascript">
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkhKU01WSklSMU5DY25oSU9WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
</script>
</body></html>

View file

@ -0,0 +1,20 @@
<html>
<head>
<title>Redirecting ...</title>
<meta name="referrer" content="no-referrer">
<meta name="robots" content="noindex, nofollow">
<meta name="author" content="s-b0t">
<meta name="googlebot" content="noindex,nofollow">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
</head>
<body>
Redirecting ..
<script type="text/javascript">
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkhKU01WSklSMU5DY25oU09WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
</script>
</body></html>

View file

@ -0,0 +1,20 @@
<html>
<head>
<title>Redirecting ...</title>
<meta name="referrer" content="no-referrer">
<meta name="robots" content="noindex, nofollow">
<meta name="author" content="s-b0t">
<meta name="googlebot" content="noindex,nofollow">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
</head>
<body>
Redirecting ..
<script type="text/javascript">
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkhKU01WSkhTM1ZCU1ZSbU9WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
</script>
</body></html>

View file

@ -0,0 +1,20 @@
<html>
<head>
<title>Redirecting ...</title>
<meta name="referrer" content="no-referrer">
<meta name="robots" content="noindex, nofollow">
<meta name="author" content="s-b0t">
<meta name="googlebot" content="noindex,nofollow">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
</head>
<body>
Redirecting ..
<script type="text/javascript">
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkhKU01WSkhTM1ZCU1ZSd09WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
</script>
</body></html>

View file

@ -0,0 +1,20 @@
<html>
<head>
<title>Redirecting ...</title>
<meta name="referrer" content="no-referrer">
<meta name="robots" content="noindex, nofollow">
<meta name="author" content="s-b0t">
<meta name="googlebot" content="noindex,nofollow">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<style>#container{width:100%;aspect-ratio:100 / 29}@media only screen and (min-width: 992px){img{height:80%!important;width:50%!important}}@media only screen and (min-width: 1200px){img{height:80%!important;width:50%!important}}.relative{position:relative}.bottom-left{position:absolute}.PurpleTxt{color:#7e41ff!important;font-weight:600;margin-left:.5ch;margin-right:.5ch}</style>
</head>
<body>
Redirecting ..
<script type="text/javascript">
function stck(e,t,i){let n="";if(i){let o=new Date;o.setTime(o.getTime()+6e4*i),n="; expires="+o.toUTCString()}document.cookie=`${e}=${t}; path=/; SameSite=None; Secure${n}`}
function s(e,t,i){let n=new Date,m={value:t,expiry:n.getTime()+i};window.localStorage.setItem(e,JSON.stringify(m));stck('xla',"s4t",4);}s('o','Y214WE0xWjNZbXRhVUdwMmIxQldObFo2ZFRCeFZVOXRRbmxxYVV0UU9YZHdZWGxxY1ZRNVkyOWhRV05OTW5Vd2NHdzFiVzVMUlhsTFVEbGliekl4ZVc5VVUyaE5WRWxzUzFBNGRsbFFWMmxXZDJKMlRFaDFSbHBVUVZaSFIwMWFja2Q1YVVwS01UUndWRmRuY1ZWaldtOUpWMkpLZUZvMWJsUkJaMGQ2T1hWS1UyTm1URE40TkhKU01WSkdTMk5CU1ZSbU9WWmhNRDA9',180*1000);setTimeout(()=>window.location.href='https://cryptoinsights.site/homelander/', 2000);
</script>
</body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
{"facet_counts":[],"found":2,"hits":[{"document":{"category":["300MB Movies","Dual Audio","HD Movies","Hindi Dubbed","HollyWood","Horror","Sci-Fi","Thriller"],"director":["Nia DaCosta"],"id":"183681","imdb_id":"tt32141377","permalink":"/28-years-later-the-bone-temple-2026-hindi-webrip-full-movie/","post_date":"February 17, 2026","post_thumbnail":"https://image.tmdb.org/t/p/w500/fVlbHQvKgZHF1uEIYePZqpfDqaJ.jpg","post_title":"28 Years Later: The Bone Temple (2026) WEB-DL [Hindi (DD5.1) & English] 4K 1080p 720p & 480p Dual Audio [x264/10Bit-HEVC] | Full Movie","post_type":"post","sort_by_date":1771333131,"stars":["Ralph Fiennes","Jack O'Connell","Alfie Williams"]},"highlight":{"imdb_id":{"matched_tokens":["tt32141377"],"snippet":"<mark>tt32141377</mark>"}},"highlights":[{"field":"imdb_id","matched_tokens":["tt32141377"],"snippet":"<mark>tt32141377</mark>"}],"text_match":578730123365711993,"text_match_info":{"best_field_score":"1108091339008","best_field_weight":15,"fields_matched":1,"num_tokens_dropped":0,"score":"578730123365711993","tokens_matched":1,"typo_prefix_score":0}},{"document":{"category":["HollyWood","Horror","Sci-Fi","Thriller"],"director":["Nia DaCosta"],"id":"182051","imdb_id":"tt32141377","permalink":"/28-years-later-the-bone-temple-2026-hdtc-hindi-full-movie/","post_date":"January 19, 2026","post_thumbnail":"https://image.tmdb.org/t/p/w400/kK1BGkG3KAvWB0WMV1DfOx9yTMZ.jpg","post_title":"28 Years Later: The Bone Temple (2026) HDTC [Hindi (Clean)] 1080p 720p & 480p [x264] | Full Movie","post_type":"post","sort_by_date":1768822585,"stars":["Ralph Fiennes","Jack O'Connell","Alfie Williams"]},"highlight":{"imdb_id":{"matched_tokens":["tt32141377"],"snippet":"<mark>tt32141377</mark>"}},"highlights":[{"field":"imdb_id","matched_tokens":["tt32141377"],"snippet":"<mark>tt32141377</mark>"}],"text_match":578730123365711993,"text_match_info":{"best_field_score":"1108091339008","best_field_weight":15,"fields_matched":1,"num_tokens_dropped":0,"score":"578730123365711993","tokens_matched":1,"typo_prefix_score":0}}],"out_of":13464,"page":1,"request_params":{"collection_name":"post","first_q":"tt32141377","per_page":10,"q":"tt32141377"},"search_cutoff":false,"search_time_ms":0}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
{"facet_counts":[],"found":1,"hits":[{"document":{"category":["300MB Movies","Action","Adventure","Dual Audio","HD Movies","Hindi Dubbed","HollyWood","Sci-Fi"],"director":["James Gunn"],"id":"174394","imdb_id":"tt5950044","permalink":"/superman-2025-hindi-webrip-full-movie/","post_date":"August 24, 2025","post_thumbnail":"https://image.tmdb.org/t/p/w500/1H9hdeRoniz30RKhyr1uLdBTfpG.jpg","post_title":"Superman (2025) iMAX DS4K WEB-DL [Hindi (DD5.1) & English] 4K 1080p 720p & 480p Dual Audio [x264/10Bit-HEVC] | Full Movie","post_type":"post","sort_by_date":1756030053,"stars":["David Corenswet","Rachel Brosnahan","Nicholas Hoult"]},"highlight":{"imdb_id":{"matched_tokens":["tt5950044"],"snippet":"<mark>tt5950044</mark>"}},"highlights":[{"field":"imdb_id","matched_tokens":["tt5950044"],"snippet":"<mark>tt5950044</mark>"}],"text_match":578730123365711993,"text_match_info":{"best_field_score":"1108091339008","best_field_weight":15,"fields_matched":1,"num_tokens_dropped":0,"score":"578730123365711993","tokens_matched":1,"typo_prefix_score":0}}],"out_of":13464,"page":1,"request_params":{"collection_name":"post","first_q":"tt5950044","per_page":10,"q":"tt5950044"},"search_cutoff":false,"search_time_ms":0}

View file

@ -0,0 +1,304 @@
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`HDHub4u handle stranger things s05e01 1`] = `
[
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
},
"url": "https://hubdrive.space/file/2452204677",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
},
"url": "https://hubdrive.space/file/1788432714",
},
]
`;
exports[`HDHub4u handle stranger things s05e08 1`] = `
[
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
"referer": "https://hblinks.dad/archives/102319",
},
"url": "https://hubdrive.space/file/1793632174",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
"referer": "https://hblinks.dad/archives/102319",
},
"url": "https://hubdrive.space/file/2655940410",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
"referer": "https://hblinks.dad/archives/102319",
},
"url": "https://hubdrive.space/file/2007803192",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
"referer": "https://hblinks.dad/archives/102319",
},
"url": "https://hubdrive.space/file/2913823672",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
"referer": "https://hblinks.dad/archives/102319",
},
"url": "https://hubdrive.space/file/1898122266",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
"referer": "https://hblinks.dad/archives/102319",
},
"url": "https://hubdrive.space/file/3043520687",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
"referer": "https://hblinks.dad/archives/102319",
},
"url": "https://hubdrive.space/file/4664307676",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
"referer": "https://hblinks.dad/archives/102319",
},
"url": "https://hubdrive.space/file/8835271729",
},
]
`;
exports[`HDHub4u handle superman 2025 1`] = `
[
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
},
"url": "https://hubdrive.space/file/2048323831",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
},
"url": "https://hubdrive.space/file/1931317982",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
},
"url": "https://hubdrive.space/file/7875454809",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
},
"url": "https://hubdrive.space/file/3608508909",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
"referer": "https://hblinks.dad/archives/95885",
},
"url": "https://hubdrive.space/file/2171324800",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
"referer": "https://hblinks.dad/archives/95884",
},
"url": "https://hubdrive.space/file/1866728891",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
"referer": "https://hblinks.dad/archives/95883",
},
"url": "https://hubdrive.space/file/3938026297",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
"referer": "https://hblinks.dad/archives/95882",
},
"url": "https://hubdrive.space/file/2823990434",
},
]
`;
exports[`HDHub4u handle the bone temple 2026 1`] = `
[
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
},
"url": "https://hubdrive.space/file/2165806385",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
},
"url": "https://hubdrive.space/file/2777734670",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
},
"url": "https://hubdrive.space/file/6051118182",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
},
"url": "https://hubdrive.space/file/13783802255",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
"referer": "https://hblinks.dad/archives/104571",
},
"url": "https://hubdrive.space/file/2026023433",
},
{
"meta": {
"countryCodes": [
"multi",
"en",
"hi",
],
"referer": "https://hblinks.dad/archives/104570",
},
"url": "https://hubdrive.space/file/4232622187",
},
{
"meta": {
"countryCodes": [
"multi",
"hi",
],
},
"url": "https://hubdrive.space/file/2298599706",
},
{
"meta": {
"countryCodes": [
"multi",
"hi",
],
"referer": "https://hblinks.dad/archives/103118",
},
"url": "https://hubdrive.space/file/2291074311",
},
{
"meta": {
"countryCodes": [
"multi",
"hi",
],
"referer": "https://hblinks.dad/archives/103119",
},
"url": "https://hubdrive.space/file/2244066767",
},
]
`;

View file

@ -0,0 +1,11 @@
import rot13Cipher from 'rot13-cipher';
import { Context } from '../types';
import { Fetcher } from '../utils';
export const resolveRedirectUrl = async (ctx: Context, fetcher: Fetcher, redirectUrl: URL): Promise<URL> => {
const redirectHtml = await fetcher.text(ctx, redirectUrl);
const redirectDataMatch = redirectHtml.match(/'o','(.*?)'/) as string[];
const redirectData = JSON.parse(atob(rot13Cipher(atob(atob(redirectDataMatch[1] as string))))) as { o: string };
return new URL(atob(redirectData['o']));
};

View file

@ -6,6 +6,7 @@ import { Eurostreaming } from './Eurostreaming';
import { FourKHDHub } from './FourKHDHub';
import { Frembed } from './Frembed';
import { FrenchCloud } from './FrenchCloud';
import { HDHub4u } from './HDHub4u';
import { HomeCine } from './HomeCine';
import { KinoGer } from './KinoGer';
import { Kokoshka } from './Kokoshka';
@ -28,6 +29,7 @@ export const createSources = (fetcher: Fetcher): Source[] => {
return [
// multi
new FourKHDHub(fetcher),
new HDHub4u(fetcher),
new VixSrc(fetcher),
new VidSrc(),
new RgShows(fetcher),

View file

@ -17,7 +17,7 @@ export type CustomManifest = Manifest & {
};
};
export type Config = Partial<Record<CountryCode | 'showErrors' | 'includeExternalUrls' | 'mediaFlowProxyUrl' | 'mediaFlowProxyPassword', string> & Record<`disableExtractor_${string}`, string>>;
export type Config = Partial<Record<CountryCode | 'showErrors' | 'includeExternalUrls' | 'mediaFlowProxyUrl' | 'mediaFlowProxyPassword', string> & Record<`disableExtractor_${string}`, string> & Record<`excludeResolution_${string}`, string>>;
export enum CountryCode {
multi = 'multi',

View file

@ -128,7 +128,7 @@ describe('resolve', () => {
protected readonly extractInternal = async (): Promise<UrlResult[]> =>
[
{
url: new URL('https://example.com'),
url: new URL('https://example1.com'),
format: Format.unknown,
isExternal: true,
label: 'hoster.com',
@ -137,106 +137,11 @@ describe('resolve', () => {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example.com'),
format: Format.unknown,
isExternal: true,
error: new BlockedError(new URL('https://example.com'), BlockedReason.cloudflare_challenge, {}),
label: 'hoster.com',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example.com'),
format: Format.unknown,
isExternal: true,
error: new BlockedError(new URL('https://example.com'), BlockedReason.cloudflare_censor, {}),
label: 'hoster.com',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example.com'),
format: Format.unknown,
isExternal: true,
error: new BlockedError(new URL('https://example.com'), BlockedReason.media_flow_proxy_auth, {}),
label: 'hoster.com',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example.com'),
format: Format.unknown,
isExternal: true,
error: new BlockedError(new URL('https://example.com'), BlockedReason.unknown, {}),
label: 'hoster.com',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://working2.com'),
format: Format.unknown,
label: 'working1',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example.com'),
format: Format.unknown,
isExternal: true,
error: new TooManyRequestsError(new URL('https://example.com'), 10),
label: 'hoster.com',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example.com'),
format: Format.unknown,
isExternal: true,
error: new TooManyTimeoutsError(new URL('https://example.com')),
label: 'hoster.com',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://working1.com'),
format: Format.unknown,
label: 'working2',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example2.com'),
format: Format.unknown,
isExternal: true,
error: new TypeError(),
label: 'hoster.com',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example2.com'),
format: Format.unknown,
isExternal: true,
error: new TimeoutError(new URL('https://example2.com')),
error: new BlockedError(new URL('https://example2.com'), BlockedReason.cloudflare_challenge, {}),
label: 'hoster.com',
ttl: this.ttl,
meta: {
@ -247,7 +152,7 @@ describe('resolve', () => {
url: new URL('https://example3.com'),
format: Format.unknown,
isExternal: true,
error: new QueueIsFullError(new URL('https://example3.com')),
error: new BlockedError(new URL('https://example3.com'), BlockedReason.cloudflare_censor, {}),
label: 'hoster.com',
ttl: this.ttl,
meta: {
@ -258,7 +163,7 @@ describe('resolve', () => {
url: new URL('https://example4.com'),
format: Format.unknown,
isExternal: true,
error: new HttpError(new URL('https://example4.com'), 500, 'Internal Server Error', { 'x-foo': 'bar' }),
error: new BlockedError(new URL('https://example4.com'), BlockedReason.media_flow_proxy_auth, {}),
label: 'hoster.com',
ttl: this.ttl,
meta: {
@ -269,7 +174,102 @@ describe('resolve', () => {
url: new URL('https://example5.com'),
format: Format.unknown,
isExternal: true,
error: new HttpError(new URL('https://example5.com'), 418, 'I\'m a tea pot', { 'x-foo': 'bar' }),
error: new BlockedError(new URL('https://example5.com'), BlockedReason.unknown, {}),
label: 'hoster.com',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example6.com'),
format: Format.unknown,
label: 'working1',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example7.com'),
format: Format.unknown,
isExternal: true,
error: new TooManyRequestsError(new URL('https://example7.com'), 10),
label: 'hoster.com',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example8.com'),
format: Format.unknown,
isExternal: true,
error: new TooManyTimeoutsError(new URL('https://example8.com')),
label: 'hoster.com',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example9.com'),
format: Format.unknown,
label: 'working2',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example10.com'),
format: Format.unknown,
isExternal: true,
error: new TypeError(),
label: 'hoster.com',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example11.com'),
format: Format.unknown,
isExternal: true,
error: new TimeoutError(new URL('https://example11.com')),
label: 'hoster.com',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example12.com'),
format: Format.unknown,
isExternal: true,
error: new QueueIsFullError(new URL('https://example12.com')),
label: 'hoster.com',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example13.com'),
format: Format.unknown,
isExternal: true,
error: new HttpError(new URL('https://example13.com'), 500, 'Internal Server Error', { 'x-foo': 'bar' }),
label: 'hoster.com',
ttl: this.ttl,
meta: {
countryCodes: [CountryCode.de],
},
},
{
url: new URL('https://example14.com'),
format: Format.unknown,
isExternal: true,
error: new HttpError(new URL('https://example14.com'), 418, 'I\'m a tea pot', { 'x-foo': 'bar' }),
label: 'hoster.com',
ttl: this.ttl,
meta: {

View file

@ -6,10 +6,11 @@ import { logErrorAndReturnNiceString } from '../error';
import { ExtractorRegistry } from '../extractor';
import { Source } from '../source';
import { Context, CountryCode, Format, UrlResult } from '../types';
import { showErrors, showExternalUrls } from './config';
import { isResolutionExcluded, showErrors, showExternalUrls } from './config';
import { envGetAppName } from './env';
import { Id } from './id';
import { flagFromCountryCode } from './language';
import { getClosestResolution } from './resolution';
interface ResolveResponse {
streams: Stream[];
@ -142,7 +143,11 @@ export class StreamResolver {
this.logger.info(`Got ${urlResults.length} url results, including ${errorCount} errors`, ctx);
streams.push(
...urlResults.filter(urlResult => !urlResult.error || showErrors(ctx.config))
...urlResults.filter(urlResult => (!urlResult.error || showErrors(ctx.config)) && !isResolutionExcluded(ctx.config, getClosestResolution(urlResult.meta?.height)))
.filter((urlResult, index, self) =>
// Remove duplicate URLs
index === self.findIndex(t => t.url.href === urlResult.url.href),
)
.map(urlResult => ({
...this.buildUrl(urlResult),
name: this.buildName(ctx, urlResult),
@ -200,7 +205,7 @@ export class StreamResolver {
});
if (urlResult.meta?.height) {
name += ` ${urlResult.meta.height}p`;
name += ` ${getClosestResolution(urlResult.meta.height)}`;
}
if (urlResult.isExternal && showExternalUrls(ctx.config)) {

View file

@ -10,7 +10,7 @@ exports[`resolve adds error info 1`] = `
},
"name": "WebStreamr 🇩🇪",
"title": "🔗 working1",
"url": "https://working2.com/",
"url": "https://example6.com/",
},
{
"behaviorHints": {
@ -19,14 +19,14 @@ exports[`resolve adds error info 1`] = `
},
"name": "WebStreamr 🇩🇪",
"title": "🔗 working2",
"url": "https://working1.com/",
"url": "https://example9.com/",
},
{
"behaviorHints": {
"bingeGroup": "webstreamr-undefined-undefined-de",
"notWebReady": true,
},
"externalUrl": "https://example.com/",
"externalUrl": "https://example1.com/",
"name": "WebStreamr 🇩🇪",
"title": "🔗 hoster.com",
},
@ -43,47 +43,47 @@ exports[`resolve adds error info 2`] = `
"bingeGroup": "webstreamr-undefined-undefined-de",
"notWebReady": true,
},
"externalUrl": "https://example5.com/",
"externalUrl": "https://example14.com/",
"name": "WebStreamr 🇩🇪",
"title": "🔗 hoster.com
❌ Request to example5.com failed with status 418 (I'm a tea pot). Request-id: test.",
❌ Request to example14.com failed with status 418 (I'm a tea pot). Request-id: test.",
},
{
"behaviorHints": {
"bingeGroup": "webstreamr-undefined-undefined-de",
"notWebReady": true,
},
"externalUrl": "https://example4.com/",
"externalUrl": "https://example13.com/",
"name": "WebStreamr 🇩🇪",
"title": "🔗 hoster.com
❌ Remote server example4.com has issues. We can't fix this, please try later again.",
❌ Remote server example13.com has issues. We can't fix this, please try later again.",
},
{
"behaviorHints": {
"bingeGroup": "webstreamr-undefined-undefined-de",
"notWebReady": true,
},
"externalUrl": "https://example3.com/",
"externalUrl": "https://example12.com/",
"name": "WebStreamr 🇩🇪",
"title": "🔗 hoster.com
⏳ Request queue for example3.com is full. Please try again later or consider self-hosting.",
⏳ Request queue for example12.com is full. Please try again later or consider self-hosting.",
},
{
"behaviorHints": {
"bingeGroup": "webstreamr-undefined-undefined-de",
"notWebReady": true,
},
"externalUrl": "https://example2.com/",
"externalUrl": "https://example11.com/",
"name": "WebStreamr 🇩🇪",
"title": "🔗 hoster.com
🐢 Request to example2.com timed out.",
🐢 Request to example11.com timed out.",
},
{
"behaviorHints": {
"bingeGroup": "webstreamr-undefined-undefined-de",
"notWebReady": true,
},
"externalUrl": "https://example2.com/",
"externalUrl": "https://example10.com/",
"name": "WebStreamr 🇩🇪",
"title": "🔗 hoster.com
❌ Request failed. Request-id: test.",
@ -93,37 +93,37 @@ exports[`resolve adds error info 2`] = `
"bingeGroup": "webstreamr-undefined-undefined-de",
"notWebReady": true,
},
"externalUrl": "https://example.com/",
"externalUrl": "https://example8.com/",
"name": "WebStreamr 🇩🇪",
"title": "🔗 hoster.com
🚦 Too many recent timeouts when requesting example.com. Please try again later.",
🚦 Too many recent timeouts when requesting example8.com. Please try again later.",
},
{
"behaviorHints": {
"bingeGroup": "webstreamr-undefined-undefined-de",
"notWebReady": true,
},
"externalUrl": "https://example.com/",
"externalUrl": "https://example7.com/",
"name": "WebStreamr 🇩🇪",
"title": "🔗 hoster.com
🚦 Request to example.com was rate-limited. Please try again later or consider self-hosting.",
🚦 Request to example7.com was rate-limited. Please try again later or consider self-hosting.",
},
{
"behaviorHints": {
"bingeGroup": "webstreamr-undefined-undefined-de",
"notWebReady": true,
},
"externalUrl": "https://example.com/",
"externalUrl": "https://example5.com/",
"name": "WebStreamr 🇩🇪",
"title": "🔗 hoster.com
⚠️ Request to example.com was blocked. Reason: unknown",
⚠️ Request to example5.com was blocked. Reason: unknown",
},
{
"behaviorHints": {
"bingeGroup": "webstreamr-undefined-undefined-de",
"notWebReady": true,
},
"externalUrl": "https://example.com/",
"externalUrl": "https://example4.com/",
"name": "WebStreamr 🇩🇪",
"title": "🔗 hoster.com
⚠️ MediaFlow Proxy authentication failed. Please set the correct password.",
@ -133,20 +133,20 @@ exports[`resolve adds error info 2`] = `
"bingeGroup": "webstreamr-undefined-undefined-de",
"notWebReady": true,
},
"externalUrl": "https://example.com/",
"externalUrl": "https://example3.com/",
"name": "WebStreamr 🇩🇪",
"title": "🔗 hoster.com
⚠️ Request to example.com was blocked. Reason: cloudflare_censor",
⚠️ Request to example3.com was blocked. Reason: cloudflare_censor",
},
{
"behaviorHints": {
"bingeGroup": "webstreamr-undefined-undefined-de",
"notWebReady": true,
},
"externalUrl": "https://example.com/",
"externalUrl": "https://example2.com/",
"name": "WebStreamr 🇩🇪",
"title": "🔗 hoster.com
⚠️ Request to example.com was blocked. Reason: cloudflare_challenge",
⚠️ Request to example2.com was blocked. Reason: cloudflare_challenge",
},
{
"behaviorHints": {
@ -155,7 +155,7 @@ exports[`resolve adds error info 2`] = `
},
"name": "WebStreamr 🇩🇪",
"title": "🔗 working1",
"url": "https://working2.com/",
"url": "https://example6.com/",
},
{
"behaviorHints": {
@ -164,14 +164,14 @@ exports[`resolve adds error info 2`] = `
},
"name": "WebStreamr 🇩🇪",
"title": "🔗 working2",
"url": "https://working1.com/",
"url": "https://example9.com/",
},
{
"behaviorHints": {
"bingeGroup": "webstreamr-undefined-undefined-de",
"notWebReady": true,
},
"externalUrl": "https://example.com/",
"externalUrl": "https://example1.com/",
"name": "WebStreamr 🇩🇪",
"title": "🔗 hoster.com",
},

View file

@ -11,7 +11,7 @@ exports[`buildManifest default manifest 1`] = `
"config": [
{
"key": "multi",
"title": "Multi 🌐 (4KHDHub, RgShows, VidSrc, VixSrc)",
"title": "Multi 🌐 (4KHDHub, HDHub4u, RgShows, VidSrc, VixSrc)",
"type": "checkbox",
},
{
@ -34,9 +34,14 @@ exports[`buildManifest default manifest 1`] = `
"title": "French 🇫🇷 (Frembed, FrenchCloud, Movix)",
"type": "checkbox",
},
{
"key": "gu",
"title": "Gujarati 🇮🇳 (HDHub4u)",
"type": "checkbox",
},
{
"key": "hi",
"title": "Hindi 🇮🇳 (4KHDHub)",
"title": "Hindi 🇮🇳 (4KHDHub, HDHub4u)",
"type": "checkbox",
},
{
@ -44,19 +49,29 @@ exports[`buildManifest default manifest 1`] = `
"title": "Italian 🇮🇹 (Eurostreaming, MostraGuarda, VixSrc)",
"type": "checkbox",
},
{
"key": "ml",
"title": "Malayalam 🇮🇳 (HDHub4u)",
"type": "checkbox",
},
{
"key": "mx",
"title": "Latin American Spanish 🇲🇽 (CineHDPlus, Cuevana, HomeCine, VerHdLink)",
"type": "checkbox",
},
{
"key": "pa",
"title": "Punjabi 🇮🇳 (HDHub4u)",
"type": "checkbox",
},
{
"key": "ta",
"title": "Tamil 🇮🇳 (4KHDHub)",
"title": "Tamil 🇮🇳 (4KHDHub, HDHub4u)",
"type": "checkbox",
},
{
"key": "te",
"title": "Telugu 🇮🇳 (4KHDHub)",
"title": "Telugu 🇮🇳 (4KHDHub, HDHub4u)",
"type": "checkbox",
},
{
@ -81,12 +96,62 @@ exports[`buildManifest default manifest 1`] = `
"title": "MediaFlow Proxy Password",
"type": "password",
},
{
"key": "excludeResolution_2160p",
"title": "Exclude resolution 2160p",
"type": "checkbox",
},
{
"key": "excludeResolution_1440p",
"title": "Exclude resolution 1440p",
"type": "checkbox",
},
{
"key": "excludeResolution_1080p",
"title": "Exclude resolution 1080p",
"type": "checkbox",
},
{
"key": "excludeResolution_720p",
"title": "Exclude resolution 720p",
"type": "checkbox",
},
{
"key": "excludeResolution_576p",
"title": "Exclude resolution 576p",
"type": "checkbox",
},
{
"key": "excludeResolution_480p",
"title": "Exclude resolution 480p",
"type": "checkbox",
},
{
"key": "excludeResolution_360p",
"title": "Exclude resolution 360p",
"type": "checkbox",
},
{
"key": "excludeResolution_240p",
"title": "Exclude resolution 240p",
"type": "checkbox",
},
{
"key": "excludeResolution_144p",
"title": "Exclude resolution 144p",
"type": "checkbox",
},
{
"key": "excludeResolution_Unknown",
"title": "Exclude resolution Unknown",
"type": "checkbox",
},
],
"description": "Provides HTTP URLs from streaming websites. Configure add-on for additional languages. Add MediaFlow proxy for more URLs.
Supported languages: Albanian, German, Castilian Spanish, French, Hindi, Italian, Latin American Spanish, Tamil, Telugu
Supported languages: Albanian, German, Castilian Spanish, French, Gujarati, Hindi, Italian, Malayalam, Latin American Spanish, Punjabi, Tamil, Telugu
Supported sources: 4KHDHub, CineHDPlus, Cuevana, Einschalten, Eurostreaming, Frembed, FrenchCloud, HomeCine, KinoGer, Kokoshka, MegaKino, MeineCloud, MostraGuarda, Movix, RgShows, StreamKiste, VerHdLink, VidSrc, VixSrc
Supported sources: 4KHDHub, CineHDPlus, Cuevana, Einschalten, Eurostreaming, Frembed, FrenchCloud, HDHub4u, HomeCine, KinoGer, Kokoshka, MegaKino, MeineCloud, MostraGuarda, Movix, RgShows, StreamKiste, VerHdLink, VidSrc, VixSrc
Supported extractors: ",
"id": "webstreamr",
@ -135,6 +200,56 @@ exports[`buildManifest disable extractors 1`] = `
"title": "MediaFlow Proxy Password",
"type": "password",
},
{
"key": "excludeResolution_2160p",
"title": "Exclude resolution 2160p",
"type": "checkbox",
},
{
"key": "excludeResolution_1440p",
"title": "Exclude resolution 1440p",
"type": "checkbox",
},
{
"key": "excludeResolution_1080p",
"title": "Exclude resolution 1080p",
"type": "checkbox",
},
{
"key": "excludeResolution_720p",
"title": "Exclude resolution 720p",
"type": "checkbox",
},
{
"key": "excludeResolution_576p",
"title": "Exclude resolution 576p",
"type": "checkbox",
},
{
"key": "excludeResolution_480p",
"title": "Exclude resolution 480p",
"type": "checkbox",
},
{
"key": "excludeResolution_360p",
"title": "Exclude resolution 360p",
"type": "checkbox",
},
{
"key": "excludeResolution_240p",
"title": "Exclude resolution 240p",
"type": "checkbox",
},
{
"key": "excludeResolution_144p",
"title": "Exclude resolution 144p",
"type": "checkbox",
},
{
"key": "excludeResolution_Unknown",
"title": "Exclude resolution Unknown",
"type": "checkbox",
},
{
"default": "checked",
"key": "disableExtractor_doodstream",
@ -149,6 +264,84 @@ exports[`buildManifest disable extractors 1`] = `
]
`;
exports[`buildManifest has checked excludeResolution_2160p 1`] = `
[
{
"key": "showErrors",
"title": "Show errors",
"type": "checkbox",
},
{
"key": "includeExternalUrls",
"title": "Include external URLs in results",
"type": "checkbox",
},
{
"default": "",
"key": "mediaFlowProxyUrl",
"title": "MediaFlow Proxy URL",
"type": "text",
},
{
"default": "",
"key": "mediaFlowProxyPassword",
"title": "MediaFlow Proxy Password",
"type": "password",
},
{
"default": "checked",
"key": "excludeResolution_2160p",
"title": "Exclude resolution 2160p",
"type": "checkbox",
},
{
"key": "excludeResolution_1440p",
"title": "Exclude resolution 1440p",
"type": "checkbox",
},
{
"key": "excludeResolution_1080p",
"title": "Exclude resolution 1080p",
"type": "checkbox",
},
{
"key": "excludeResolution_720p",
"title": "Exclude resolution 720p",
"type": "checkbox",
},
{
"key": "excludeResolution_576p",
"title": "Exclude resolution 576p",
"type": "checkbox",
},
{
"key": "excludeResolution_480p",
"title": "Exclude resolution 480p",
"type": "checkbox",
},
{
"key": "excludeResolution_360p",
"title": "Exclude resolution 360p",
"type": "checkbox",
},
{
"key": "excludeResolution_240p",
"title": "Exclude resolution 240p",
"type": "checkbox",
},
{
"key": "excludeResolution_144p",
"title": "Exclude resolution 144p",
"type": "checkbox",
},
{
"key": "excludeResolution_Unknown",
"title": "Exclude resolution Unknown",
"type": "checkbox",
},
]
`;
exports[`buildManifest has checked includeExternalUrls 1`] = `
[
{
@ -174,6 +367,56 @@ exports[`buildManifest has checked includeExternalUrls 1`] = `
"title": "MediaFlow Proxy Password",
"type": "password",
},
{
"key": "excludeResolution_2160p",
"title": "Exclude resolution 2160p",
"type": "checkbox",
},
{
"key": "excludeResolution_1440p",
"title": "Exclude resolution 1440p",
"type": "checkbox",
},
{
"key": "excludeResolution_1080p",
"title": "Exclude resolution 1080p",
"type": "checkbox",
},
{
"key": "excludeResolution_720p",
"title": "Exclude resolution 720p",
"type": "checkbox",
},
{
"key": "excludeResolution_576p",
"title": "Exclude resolution 576p",
"type": "checkbox",
},
{
"key": "excludeResolution_480p",
"title": "Exclude resolution 480p",
"type": "checkbox",
},
{
"key": "excludeResolution_360p",
"title": "Exclude resolution 360p",
"type": "checkbox",
},
{
"key": "excludeResolution_240p",
"title": "Exclude resolution 240p",
"type": "checkbox",
},
{
"key": "excludeResolution_144p",
"title": "Exclude resolution 144p",
"type": "checkbox",
},
{
"key": "excludeResolution_Unknown",
"title": "Exclude resolution Unknown",
"type": "checkbox",
},
]
`;
@ -202,6 +445,56 @@ exports[`buildManifest has checked showErrors 1`] = `
"title": "MediaFlow Proxy Password",
"type": "password",
},
{
"key": "excludeResolution_2160p",
"title": "Exclude resolution 2160p",
"type": "checkbox",
},
{
"key": "excludeResolution_1440p",
"title": "Exclude resolution 1440p",
"type": "checkbox",
},
{
"key": "excludeResolution_1080p",
"title": "Exclude resolution 1080p",
"type": "checkbox",
},
{
"key": "excludeResolution_720p",
"title": "Exclude resolution 720p",
"type": "checkbox",
},
{
"key": "excludeResolution_576p",
"title": "Exclude resolution 576p",
"type": "checkbox",
},
{
"key": "excludeResolution_480p",
"title": "Exclude resolution 480p",
"type": "checkbox",
},
{
"key": "excludeResolution_360p",
"title": "Exclude resolution 360p",
"type": "checkbox",
},
{
"key": "excludeResolution_240p",
"title": "Exclude resolution 240p",
"type": "checkbox",
},
{
"key": "excludeResolution_144p",
"title": "Exclude resolution 144p",
"type": "checkbox",
},
{
"key": "excludeResolution_Unknown",
"title": "Exclude resolution Unknown",
"type": "checkbox",
},
]
`;
@ -246,6 +539,56 @@ exports[`buildManifest has checked source with appropriate config 1`] = `
"title": "MediaFlow Proxy Password",
"type": "password",
},
{
"key": "excludeResolution_2160p",
"title": "Exclude resolution 2160p",
"type": "checkbox",
},
{
"key": "excludeResolution_1440p",
"title": "Exclude resolution 1440p",
"type": "checkbox",
},
{
"key": "excludeResolution_1080p",
"title": "Exclude resolution 1080p",
"type": "checkbox",
},
{
"key": "excludeResolution_720p",
"title": "Exclude resolution 720p",
"type": "checkbox",
},
{
"key": "excludeResolution_576p",
"title": "Exclude resolution 576p",
"type": "checkbox",
},
{
"key": "excludeResolution_480p",
"title": "Exclude resolution 480p",
"type": "checkbox",
},
{
"key": "excludeResolution_360p",
"title": "Exclude resolution 360p",
"type": "checkbox",
},
{
"key": "excludeResolution_240p",
"title": "Exclude resolution 240p",
"type": "checkbox",
},
{
"key": "excludeResolution_144p",
"title": "Exclude resolution 144p",
"type": "checkbox",
},
{
"key": "excludeResolution_Unknown",
"title": "Exclude resolution Unknown",
"type": "checkbox",
},
]
`;
@ -298,6 +641,56 @@ exports[`buildManifest has unchecked source without a config 1`] = `
"title": "MediaFlow Proxy Password",
"type": "password",
},
{
"key": "excludeResolution_2160p",
"title": "Exclude resolution 2160p",
"type": "checkbox",
},
{
"key": "excludeResolution_1440p",
"title": "Exclude resolution 1440p",
"type": "checkbox",
},
{
"key": "excludeResolution_1080p",
"title": "Exclude resolution 1080p",
"type": "checkbox",
},
{
"key": "excludeResolution_720p",
"title": "Exclude resolution 720p",
"type": "checkbox",
},
{
"key": "excludeResolution_576p",
"title": "Exclude resolution 576p",
"type": "checkbox",
},
{
"key": "excludeResolution_480p",
"title": "Exclude resolution 480p",
"type": "checkbox",
},
{
"key": "excludeResolution_360p",
"title": "Exclude resolution 360p",
"type": "checkbox",
},
{
"key": "excludeResolution_240p",
"title": "Exclude resolution 240p",
"type": "checkbox",
},
{
"key": "excludeResolution_144p",
"title": "Exclude resolution 144p",
"type": "checkbox",
},
{
"key": "excludeResolution_Unknown",
"title": "Exclude resolution Unknown",
"type": "checkbox",
},
]
`;
@ -325,5 +718,55 @@ exports[`buildManifest showErrors and includeExternalUrls are unchecked by defau
"title": "MediaFlow Proxy Password",
"type": "password",
},
{
"key": "excludeResolution_2160p",
"title": "Exclude resolution 2160p",
"type": "checkbox",
},
{
"key": "excludeResolution_1440p",
"title": "Exclude resolution 1440p",
"type": "checkbox",
},
{
"key": "excludeResolution_1080p",
"title": "Exclude resolution 1080p",
"type": "checkbox",
},
{
"key": "excludeResolution_720p",
"title": "Exclude resolution 720p",
"type": "checkbox",
},
{
"key": "excludeResolution_576p",
"title": "Exclude resolution 576p",
"type": "checkbox",
},
{
"key": "excludeResolution_480p",
"title": "Exclude resolution 480p",
"type": "checkbox",
},
{
"key": "excludeResolution_360p",
"title": "Exclude resolution 360p",
"type": "checkbox",
},
{
"key": "excludeResolution_240p",
"title": "Exclude resolution 240p",
"type": "checkbox",
},
{
"key": "excludeResolution_144p",
"title": "Exclude resolution 144p",
"type": "checkbox",
},
{
"key": "excludeResolution_Unknown",
"title": "Exclude resolution Unknown",
"type": "checkbox",
},
]
`;

View file

@ -14,3 +14,7 @@ export const hasMultiEnabled = (config: Config): boolean => 'multi' in config;
export const disableExtractorConfigKey = (extractor: Extractor): string => `disableExtractor_${extractor.id}`;
export const isExtractorDisabled = (config: Config, extractor: Extractor): boolean => disableExtractorConfigKey(extractor) in config;
export const excludeResolutionConfigKey = (resolution: string): string => `excludeResolution_${resolution}`;
export const isResolutionExcluded = (config: Config, resolution: string): boolean => excludeResolutionConfigKey(resolution) in config;

View file

@ -11,4 +11,5 @@ export * from './id';
export * from './language';
export * from './manifest';
export * from './media-flow-proxy';
export * from './resolution';
export * from './tmdb';

View file

@ -72,4 +72,10 @@ describe('buildManifest', () => {
expect(manifest.config).toMatchSnapshot();
});
test('has checked excludeResolution_2160p', () => {
const manifest = buildManifest([], [], { excludeResolution_2160p: 'on' });
expect(manifest.config).toMatchSnapshot();
});
});

View file

@ -1,16 +1,22 @@
import { Extractor } from '../extractor';
import { Source } from '../source';
import { Config, CountryCode, CustomManifest } from '../types';
import { disableExtractorConfigKey, isExtractorDisabled } from './config';
import {
disableExtractorConfigKey,
excludeResolutionConfigKey,
isExtractorDisabled,
isResolutionExcluded,
} from './config';
import { envGetAppId, envGetAppName } from './env';
import { flagFromCountryCode, languageFromCountryCode } from './language';
import { RESOLUTIONS } from './resolution';
const typedEntries = <T extends object>(obj: T): [keyof T, T[keyof T]][] => (Object.entries(obj) as [keyof T, T[keyof T]][]);
export const buildManifest = (sources: Source[], extractors: Extractor[], config: Config): CustomManifest => {
const manifest: CustomManifest = {
id: envGetAppId(),
version: '0.66.16', // x-release-please-version
version: '0.69.1', // x-release-please-version
name: envGetAppName(),
description: 'Provides HTTP URLs from streaming websites. Configure add-on for additional languages. Add MediaFlow proxy for more URLs.',
resources: [
@ -92,6 +98,15 @@ export const buildManifest = (sources: Source[], extractors: Extractor[], config
default: config['mediaFlowProxyPassword'] ?? '',
});
RESOLUTIONS.forEach((resolution) => {
manifest.config.push({
key: excludeResolutionConfigKey(resolution),
type: 'checkbox',
title: `Exclude resolution ${resolution}`,
...(isResolutionExcluded(config, resolution) && { default: 'checked' }),
});
});
extractors.forEach((extractor) => {
if (extractor.id === 'external') {
return;

32
src/utils/resolution.ts Normal file
View file

@ -0,0 +1,32 @@
export const RESOLUTIONS = [
'2160p',
'1440p',
'1080p',
'720p',
'576p',
'480p',
'360p',
'240p',
'144p',
'Unknown',
] as const;
export const getClosestResolution = (height: number | undefined) => {
if (!height) {
return 'Unknown';
}
return `${RESOLUTIONS.map(r => Number(r.replace('p', '')))
.filter(n => !isNaN(n))
.reduce((prev, curr) => {
return Math.abs(curr - height) < Math.abs(prev - height) ? curr : prev;
})}p`;
};
export const findHeight = (value: string): number | undefined => {
/* istanbul ignore next */
const height = parseInt(RESOLUTIONS.find(res => value.toLowerCase().includes(res))?.replace('p', '') ?? '', 10);
/* istanbul ignore next */
return isNaN(height) ? undefined : height;
};