From 0f3cd3ec6675f35881e3dc90fa8628e972cde745 Mon Sep 17 00:00:00 2001 From: WebStreamr <210764791+webstreamr@users.noreply.github.com> Date: Sun, 14 Sep 2025 13:30:09 +0000 Subject: [PATCH 1/8] revert: Revert "fix(deps): update dependency jsdom to v27 (#350)" This reverts commit 58b50b49de7ca0aa74e507c0b8c840b578c354ab. --- package-lock.json | 267 ++++++++++++++-------------------------------- package.json | 2 +- 2 files changed, 84 insertions(+), 185 deletions(-) diff --git a/package-lock.json b/package-lock.json index e6a2171..0f40aa7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "express": "^5.1.0", "fetch-socks": "^1.3.2", "http-cache-semantics": "^4.2.0", - "jsdom": "^27.0.0", + "jsdom": "^26.1.0", "minimatch": "^10.0.3", "randomstring": "^1.3.1", "rot13-cipher": "^1.0.0", @@ -55,44 +55,23 @@ } }, "node_modules/@asamuzakjp/css-color": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.0.4.tgz", - "integrity": "sha512-cKjSKvWGmAziQWbCouOsFwb14mp1betm8Y7Fn+yglDMUUu3r9DCbJ9iJbeFDenLMqFbIMC0pQP8K+B8LAxX3OQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", "license": "MIT", "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "lru-cache": "^11.1.0" + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" } }, "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.1.tgz", - "integrity": "sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ==", - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@asamuzakjp/dom-selector": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.5.4.tgz", - "integrity": "sha512-RNSNk1dnB8lAn+xdjlRoM4CzdVrHlmXZtSXAWs2jyl4PiBRWqTZr9ML5M710qgd9RPTBsVG6P0SLy7dwy0Foig==", - "license": "MIT", - "dependencies": { - "@asamuzakjp/nwsapi": "^2.3.9", - "bidi-js": "^1.0.3", - "css-tree": "^3.1.0", - "is-potential-custom-element-name": "^1.0.1" - } - }, - "node_modules/@asamuzakjp/nwsapi": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", - "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", - "license": "MIT" + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" }, "node_modules/@babel/code-frame": { "version": "7.27.1", @@ -742,28 +721,6 @@ "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.14.tgz", - "integrity": "sha512-zSlIxa20WvMojjpCSy8WrNpcZ61RqfTfX3XTaOeVlGJrt/8HF3YbzgFZa01yTbT4GWQLwfTcC3EB8i3XnB647Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, "node_modules/@csstools/css-tokenizer": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", @@ -3180,15 +3137,6 @@ ], "license": "MIT" }, - "node_modules/bidi-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", - "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", - "license": "MIT", - "dependencies": { - "require-from-string": "^2.0.2" - } - }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -3998,19 +3946,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-tree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", - "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.12.2", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, "node_modules/css-what": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", @@ -4024,30 +3959,29 @@ } }, "node_modules/cssstyle": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.0.tgz", - "integrity": "sha512-RveJPnk3m7aarYQ2bJ6iw+Urh55S6FzUiqtBq+TihnTDP4cI8y/TYDqGOyqgnG1J1a6BxJXZsV9JFSTulm9Z7g==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", "license": "MIT", "dependencies": { - "@asamuzakjp/css-color": "^4.0.3", - "@csstools/css-syntax-patches-for-csstree": "^1.0.14", - "css-tree": "^3.1.0" + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" }, "engines": { - "node": ">=20" + "node": ">=18" } }, "node_modules/data-urls": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-6.0.0.tgz", - "integrity": "sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", "license": "MIT", "dependencies": { "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^15.0.0" + "whatwg-url": "^14.0.0" }, "engines": { - "node": ">=20" + "node": ">=18" } }, "node_modules/data-view-buffer": { @@ -7399,34 +7333,34 @@ } }, "node_modules/jsdom": { - "version": "27.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-27.0.0.tgz", - "integrity": "sha512-lIHeR1qlIRrIN5VMccd8tI2Sgw6ieYXSVktcSHaNe3Z5nE/tcPQYQWOq00wxMvYOsz+73eAkNenVvmPC6bba9A==", + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "license": "MIT", "dependencies": { - "@asamuzakjp/dom-selector": "^6.5.4", - "cssstyle": "^5.3.0", - "data-urls": "^6.0.0", + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", "decimal.js": "^10.5.0", "html-encoding-sniffer": "^4.0.0", "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", - "parse5": "^7.3.0", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", "rrweb-cssom": "^0.8.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^6.0.0", + "tough-cookie": "^5.1.1", "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^8.0.0", + "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^15.0.0", - "ws": "^8.18.2", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=20" + "node": ">=18" }, "peerDependencies": { "canvas": "^3.0.0" @@ -7437,6 +7371,36 @@ } } }, + "node_modules/jsdom/node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/jsdom/node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "license": "MIT" + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -7759,12 +7723,6 @@ "node": ">= 0.4" } }, - "node_modules/mdn-data": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", - "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", - "license": "CC0-1.0" - }, "node_modules/media-typer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", @@ -8132,25 +8090,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/napi-build-utils": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", @@ -8459,6 +8398,12 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/nwsapi": { + "version": "2.2.22", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", + "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", + "license": "MIT" + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -8880,6 +8825,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -8928,35 +8874,6 @@ "node": ">= 0.4" } }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, "node_modules/prebuild-install": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", @@ -9323,15 +9240,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", @@ -9990,15 +9898,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", @@ -11213,12 +11112,12 @@ } }, "node_modules/webidl-conversions": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.0.tgz", - "integrity": "sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "license": "BSD-2-Clause", "engines": { - "node": ">=20" + "node": ">=12" } }, "node_modules/whatwg-encoding": { @@ -11243,16 +11142,16 @@ } }, "node_modules/whatwg-url": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-15.0.0.tgz", - "integrity": "sha512-+0q+Pc6oUhtbbeUfuZd4heMNOLDJDdagYxv756mCf9vnLF+NTj4zvv5UyYNkHJpc3CJIesMVoEIOdhi7L9RObA==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", "license": "MIT", "dependencies": { - "tr46": "^5.1.1", - "webidl-conversions": "^8.0.0" + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=20" + "node": ">=18" } }, "node_modules/which": { diff --git a/package.json b/package.json index a9c6544..aaecc89 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "express": "^5.1.0", "fetch-socks": "^1.3.2", "http-cache-semantics": "^4.2.0", - "jsdom": "^27.0.0", + "jsdom": "^26.1.0", "minimatch": "^10.0.3", "randomstring": "^1.3.1", "rot13-cipher": "^1.0.0", -- 2.45.2 From 9e0177ba083a0704dea58bac40c2afa366f36205 Mon Sep 17 00:00:00 2001 From: WebStreamr <210764791+webstreamr@users.noreply.github.com> Date: Sun, 14 Sep 2025 13:30:19 +0000 Subject: [PATCH 2/8] revert: Revert "chore(release): release v0.51.0 (#349)" This reverts commit a79b0bdfdd3f7dd26026b71cdb8430c3bd07624c. --- .release-please-manifest.json | 2 +- CHANGELOG.md | 19 ------------------- package-lock.json | 4 ++-- package.json | 2 +- src/utils/manifest.ts | 2 +- 5 files changed, 5 insertions(+), 24 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 75d439a..b07164f 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.51.0" + ".": "0.50.4" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 59c54db..7075a3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,24 +1,5 @@ # Changelog -## [0.51.0](https://github.com/webstreamr/webstreamr/compare/v0.50.4...v0.51.0) (2025-09-13) - - -### Miscellaneous Chores - -* **fetcher:** log more infos about responses ([731bd33](https://github.com/webstreamr/webstreamr/commit/731bd334703f0592f083d4264c382c28acf68eb1)) -* **fetcher:** log proxy usage, allow to disable proxy via config ([b67e1b8](https://github.com/webstreamr/webstreamr/commit/b67e1b85d634be413e004625b13403acc445ce72)) -* log error count in final result log ([2421913](https://github.com/webstreamr/webstreamr/commit/24219135874be6cdecdb95cabfed86ad60d6c451)) - - -### Features - -* allow to disable cache ([4078f0c](https://github.com/webstreamr/webstreamr/commit/4078f0c404a76f4c5a3c12ec74108d3d03840e34)) - - -### Reverts - -* Revert "fix(extractor): use SuperVideo embed URls which are not triggering CF challenges" ([4351ddc](https://github.com/webstreamr/webstreamr/commit/4351ddc00dc349bde60968dc1490359e4720f924)) - ## [0.50.4](https://github.com/webstreamr/webstreamr/compare/v0.50.3...v0.50.4) (2025-09-12) diff --git a/package-lock.json b/package-lock.json index 0f40aa7..ad1ea98 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "webstreamr", - "version": "0.51.0", + "version": "0.50.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "webstreamr", - "version": "0.51.0", + "version": "0.50.4", "license": "MIT", "dependencies": { "@keyv/sqlite": "^4.0.5", diff --git a/package.json b/package.json index aaecc89..c5cbe89 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "webstreamr", "description": "Provides HTTP URLs from streaming websites.", - "version": "0.51.0", + "version": "0.50.4", "type": "commonjs", "scripts": { "analyse": "tsc --noEmit --project ./tsconfig.dev.json", diff --git a/src/utils/manifest.ts b/src/utils/manifest.ts index 2b9e238..a1c8d48 100644 --- a/src/utils/manifest.ts +++ b/src/utils/manifest.ts @@ -10,7 +10,7 @@ const typedEntries = (obj: T): [keyof T, T[keyof T]][] => (Obj export const buildManifest = (sources: Source[], extractors: Extractor[], config: Config): CustomManifest => { const manifest: CustomManifest = { id: envGetAppId(), - version: '0.51.0', // x-release-please-version + version: '0.50.4', // 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: [ -- 2.45.2 From 97671422870faf1526589a52542c2696f4b2b27e Mon Sep 17 00:00:00 2001 From: WebStreamr <210764791+webstreamr@users.noreply.github.com> Date: Sun, 14 Sep 2025 13:30:30 +0000 Subject: [PATCH 3/8] revert: Revert "chore(fetcher): log proxy usage, allow to disable proxy via config" This reverts commit b67e1b85d634be413e004625b13403acc445ce72. --- src/utils/Fetcher.ts | 10 +++++----- src/utils/StreamResolver.ts | 8 ++++---- src/utils/dispatcher.ts | 22 +++++++++++++--------- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/utils/Fetcher.ts b/src/utils/Fetcher.ts index 77be3a1..eb5e9c0 100644 --- a/src/utils/Fetcher.ts +++ b/src/utils/Fetcher.ts @@ -8,7 +8,7 @@ import winston from 'winston'; import { BlockedError, HttpError, NotFoundError, QueueIsFullError, TimeoutError, TooManyRequestsError, TooManyTimeoutsError } from '../error'; import { BlockedReason, Context } from '../types'; import { noCache } from './config'; -import { createProxyAgent, getProxyForUrl } from './dispatcher'; +import { createDispatcher } from './dispatcher'; import { envGet } from './env'; interface HttpCacheItem { @@ -254,9 +254,7 @@ export class Fetcher { }; protected async fetchWithTimeout(ctx: Context, url: URL, init?: CustomRequestInit, tryCount = 0): Promise { - const proxyUrl = getProxyForUrl(ctx, url); - - this.logger.info(`Fetch ${init?.method ?? 'GET'} ${url} via proxy ${proxyUrl}`, ctx); + this.logger.info(`Fetch ${init?.method ?? 'GET'} ${url}`, ctx); const isRateLimitedRaw = await this.rateLimitedCache.getRaw(url.host); /* istanbul ignore if */ @@ -284,11 +282,13 @@ export class Fetcher { finalUrl.username = ''; finalUrl.password = ''; + const dispatcher = createDispatcher(ctx, url); + const finalInit = { ...init, keepalive: true, signal: AbortSignal.timeout(init?.timeout ?? this.DEFAULT_TIMEOUT), - ...(/* istanbul ignore next */ proxyUrl && { dispatcher: createProxyAgent(proxyUrl) }), + ...(/* istanbul ignore next */ dispatcher && { dispatcher }), }; response = await fetch(finalUrl, finalInit); diff --git a/src/utils/StreamResolver.ts b/src/utils/StreamResolver.ts index 5b78976..1e4ac48 100644 --- a/src/utils/StreamResolver.ts +++ b/src/utils/StreamResolver.ts @@ -39,7 +39,7 @@ export class StreamResolver { const streams: Stream[] = []; - let sourceErrorCount = 0; + let sourceErrorOccurred = false; const urlResults: UrlResult[] = []; const sourcePromises = sources.map(async (source) => { if (!source.contentTypes.includes(type)) { @@ -55,7 +55,7 @@ export class StreamResolver { urlResults.push(...sourceUrlResults.flat()); } catch (error) { - sourceErrorCount++; + sourceErrorOccurred = true; if (showErrors(ctx.config)) { streams.push({ @@ -86,7 +86,7 @@ export class StreamResolver { return a.label.localeCompare(b.label); }); - const errorCount = urlResults.reduce((count, urlResult) => urlResult.error ? count + 1 : count, sourceErrorCount); + const errorCount = urlResults.reduce((count, urlResult) => urlResult.error ? count + 1 : count, 0); this.logger.info(`Got ${urlResults.length} url results, including ${errorCount} errors`, ctx); streams.push( @@ -107,7 +107,7 @@ export class StreamResolver { })), ); - const ttl = sourceErrorCount === 0 ? this.determineTtl(urlResults) : undefined; + const ttl = !sourceErrorOccurred ? this.determineTtl(urlResults) : undefined; return { streams, diff --git a/src/utils/dispatcher.ts b/src/utils/dispatcher.ts index 8e05c77..e15b340 100644 --- a/src/utils/dispatcher.ts +++ b/src/utils/dispatcher.ts @@ -3,7 +3,15 @@ import { minimatch } from 'minimatch'; import { Dispatcher, ProxyAgent } from 'undici'; import { Context } from '../types'; -export const getProxyForUrl = (ctx: Context, url: URL): URL | undefined => { +const createProxyAgent = (proxyUrl: URL): Dispatcher => { + if (proxyUrl.protocol === 'socks5:') { + return socksDispatcher({ type: 5, host: proxyUrl.hostname, port: parseInt(proxyUrl.port) }); + } + + return new ProxyAgent({ uri: proxyUrl.href }); +}; + +const createBasicDispatcher = (ctx: Context, url: URL): Dispatcher | undefined => { const proxyConfig = ctx.config['proxyConfig'] || process.env['PROXY_CONFIG']; if (proxyConfig) { @@ -14,20 +22,16 @@ export const getProxyForUrl = (ctx: Context, url: URL): URL | undefined => { } if (hostPattern === '*' || minimatch(url.host, hostPattern)) { - return proxy === 'false' ? undefined : new URL(proxy); + return createProxyAgent(new URL(proxy)); } } } else if (process.env['ALL_PROXY']) { - return new URL(process.env['ALL_PROXY']); + return createProxyAgent(new URL(process.env['ALL_PROXY'])); } return undefined; }; -export const createProxyAgent = (proxyUrl: URL): Dispatcher => { - if (proxyUrl.protocol === 'socks5:') { - return socksDispatcher({ type: 5, host: proxyUrl.hostname, port: parseInt(proxyUrl.port) }); - } - - return new ProxyAgent({ uri: proxyUrl.href }); +export const createDispatcher = (ctx: Context, url: URL): Dispatcher | undefined => { + return createBasicDispatcher(ctx, url); }; -- 2.45.2 From 7cdc3e1acc7c8b472c5fc253ca62a532609a64cc Mon Sep 17 00:00:00 2001 From: WebStreamr <210764791+webstreamr@users.noreply.github.com> Date: Sun, 14 Sep 2025 13:30:33 +0000 Subject: [PATCH 4/8] revert: Revert "chore: log error count in final result log" This reverts commit 24219135874be6cdecdb95cabfed86ad60d6c451. --- src/utils/StreamResolver.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/utils/StreamResolver.ts b/src/utils/StreamResolver.ts index 1e4ac48..b19fba3 100644 --- a/src/utils/StreamResolver.ts +++ b/src/utils/StreamResolver.ts @@ -86,8 +86,7 @@ export class StreamResolver { return a.label.localeCompare(b.label); }); - const errorCount = urlResults.reduce((count, urlResult) => urlResult.error ? count + 1 : count, 0); - this.logger.info(`Got ${urlResults.length} url results, including ${errorCount} errors`, ctx); + this.logger.info(`Return ${urlResults.length} streams`, ctx); streams.push( ...urlResults.filter(urlResult => !urlResult.error || showErrors(ctx.config)) -- 2.45.2 From c4e25d25e85075b8d9d9c929c68d9bdab70bcb67 Mon Sep 17 00:00:00 2001 From: WebStreamr <210764791+webstreamr@users.noreply.github.com> Date: Sun, 14 Sep 2025 13:30:49 +0000 Subject: [PATCH 5/8] revert: Revert "feat: allow to disable cache" This reverts commit 4078f0c404a76f4c5a3c12ec74108d3d03840e34. --- src/extractor/ExtractorRegistry.ts | 4 +- src/source/Source.ts | 4 +- src/types.ts | 2 +- src/utils/Fetcher.ts | 5 +- src/utils/__snapshots__/manifest.test.ts.snap | 111 +----------------- src/utils/config.ts | 2 - src/utils/manifest.test.ts | 16 +-- src/utils/manifest.ts | 7 -- 8 files changed, 11 insertions(+), 140 deletions(-) diff --git a/src/extractor/ExtractorRegistry.ts b/src/extractor/ExtractorRegistry.ts index 96a45ad..b65bc83 100644 --- a/src/extractor/ExtractorRegistry.ts +++ b/src/extractor/ExtractorRegistry.ts @@ -3,7 +3,7 @@ import KeyvSqlite from '@keyv/sqlite'; import { Cacheable, CacheableMemory, Keyv } from 'cacheable'; import winston from 'winston'; import { Context, Meta, UrlResult } from '../types'; -import { getCacheDir, isExtractorDisabled, noCache } from '../utils'; +import { getCacheDir, isExtractorDisabled } from '../utils'; import { Extractor } from './Extractor'; export class ExtractorRegistry { @@ -41,7 +41,7 @@ export class ExtractorRegistry { const storedDataRaw = await this.urlResultCache.getRaw(cacheKey); const expires = storedDataRaw?.expires; - if (storedDataRaw && expires && !noCache(ctx.config)) { + if (storedDataRaw && expires) { // Ignore the cache randomly after at least 2/3 of the TTL passed to start refreshing results slowly const refreshTimestamp = this.randomInteger(expires - extractor.ttl * (2 / 3), expires); const now = Date.now(); diff --git a/src/source/Source.ts b/src/source/Source.ts index 2ef1bd6..3f5feec 100644 --- a/src/source/Source.ts +++ b/src/source/Source.ts @@ -4,7 +4,7 @@ import { Cacheable, CacheableMemory, Keyv } from 'cacheable'; import { ContentType } from 'stremio-addon-sdk'; import { NotFoundError } from '../error'; import { Context, CountryCode, Meta } from '../types'; -import { getCacheDir, Id, noCache } from '../utils'; +import { getCacheDir, Id } from '../utils'; export interface SourceResult { url: URL; @@ -44,7 +44,7 @@ export abstract class Source { let sourceResults = (await Source.sourceResultCache.get(cacheKey)) ?.map(sourceResult => ({ ...sourceResult, url: new URL(sourceResult.url) })); - if (!sourceResults || noCache(ctx.config)) { + if (!sourceResults) { try { sourceResults = await this.handleInternal(ctx, type, id); } catch (error) { diff --git a/src/types.ts b/src/types.ts index c04729e..0857a68 100644 --- a/src/types.ts +++ b/src/types.ts @@ -17,7 +17,7 @@ export type CustomManifest = Manifest & { }; }; -export type Config = Partial & Record<`disableExtractor_${string}`, string>>; +export type Config = Partial & Record<`disableExtractor_${string}`, string>>; export enum CountryCode { multi = 'multi', diff --git a/src/utils/Fetcher.ts b/src/utils/Fetcher.ts index eb5e9c0..9731d44 100644 --- a/src/utils/Fetcher.ts +++ b/src/utils/Fetcher.ts @@ -7,7 +7,6 @@ import { fetch, Headers, RequestInit, Response } from 'undici'; import winston from 'winston'; import { BlockedError, HttpError, NotFoundError, QueueIsFullError, TimeoutError, TooManyRequestsError, TooManyTimeoutsError } from '../error'; import { BlockedReason, Context } from '../types'; -import { noCache } from './config'; import { createDispatcher } from './dispatcher'; import { envGet } from './env'; @@ -234,8 +233,8 @@ export class Fetcher { const cacheKey = this.determineCacheKey(url, init); let httpCacheItem = await this.cacheGet(cacheKey); - const disableCache = init?.noCache ?? noCache(ctx.config); - if (httpCacheItem && !disableCache) { + const noCache = init?.noCache ?? false; + if (httpCacheItem && !noCache) { this.logger.info(`Cached fetch ${request.method} ${url}: ${httpCacheItem.status} (${httpCacheItem.statusText})`, ctx); return this.handleHttpCacheItem(ctx, httpCacheItem, url, init); } diff --git a/src/utils/__snapshots__/manifest.test.ts.snap b/src/utils/__snapshots__/manifest.test.ts.snap index e1a58a7..452b4fb 100644 --- a/src/utils/__snapshots__/manifest.test.ts.snap +++ b/src/utils/__snapshots__/manifest.test.ts.snap @@ -72,11 +72,6 @@ exports[`buildManifest default manifest 1`] = ` "title": "Proxy Config", "type": "text", }, - { - "key": "noCache", - "title": "Disable cache", - "type": "checkbox", - }, ], "description": "Provides HTTP URLs from streaming websites. Configure add-on for additional languages. Add MediaFlow proxy for more URLs. @@ -136,11 +131,6 @@ exports[`buildManifest disable extractors 1`] = ` "title": "Proxy Config", "type": "text", }, - { - "key": "noCache", - "title": "Disable cache", - "type": "checkbox", - }, { "default": "checked", "key": "disableExtractor_doodstream", @@ -155,9 +145,10 @@ exports[`buildManifest disable extractors 1`] = ` ] `; -exports[`buildManifest has checked includeExternalUrls 1`] = ` +exports[`buildManifest has checked showErrors and includeExternalUrls 1`] = ` [ { + "default": "checked", "key": "showErrors", "title": "Show errors", "type": "checkbox", @@ -186,89 +177,6 @@ exports[`buildManifest has checked includeExternalUrls 1`] = ` "title": "Proxy Config", "type": "text", }, - { - "key": "noCache", - "title": "Disable cache", - "type": "checkbox", - }, -] -`; - -exports[`buildManifest has checked noCache 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": "", - "key": "proxyConfig", - "title": "Proxy Config", - "type": "text", - }, - { - "default": "checked", - "key": "noCache", - "title": "Disable cache", - "type": "checkbox", - }, -] -`; - -exports[`buildManifest has checked showErrors 1`] = ` -[ - { - "default": "checked", - "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": "", - "key": "proxyConfig", - "title": "Proxy Config", - "type": "text", - }, - { - "key": "noCache", - "title": "Disable cache", - "type": "checkbox", - }, ] `; @@ -319,11 +227,6 @@ exports[`buildManifest has checked source with appropriate config 1`] = ` "title": "Proxy Config", "type": "text", }, - { - "key": "noCache", - "title": "Disable cache", - "type": "checkbox", - }, ] `; @@ -382,11 +285,6 @@ exports[`buildManifest has unchecked source without a config 1`] = ` "title": "Proxy Config", "type": "text", }, - { - "key": "noCache", - "title": "Disable cache", - "type": "checkbox", - }, ] `; @@ -420,10 +318,5 @@ exports[`buildManifest showErrors and includeExternalUrls are unchecked by defau "title": "Proxy Config", "type": "text", }, - { - "key": "noCache", - "title": "Disable cache", - "type": "checkbox", - }, ] `; diff --git a/src/utils/config.ts b/src/utils/config.ts index 2702554..fd503db 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -9,8 +9,6 @@ export const showErrors = (config: Config): boolean => 'showErrors' in config; export const showExternalUrls = (config: Config): boolean => 'includeExternalUrls' in config; -export const noCache = (config: Config): boolean => 'noCache' in config; - export const hasMultiEnabled = (config: Config): boolean => 'multi' in config; export const disableExtractorConfigKey = (extractor: Extractor): string => `disableExtractor_${extractor.id}`; diff --git a/src/utils/manifest.test.ts b/src/utils/manifest.test.ts index 9e71309..bbe709d 100644 --- a/src/utils/manifest.test.ts +++ b/src/utils/manifest.test.ts @@ -50,20 +50,8 @@ describe('buildManifest', () => { expect(manifest.config).toMatchSnapshot(); }); - test('has checked showErrors', () => { - const manifest = buildManifest([], [], { showErrors: 'on' }); - - expect(manifest.config).toMatchSnapshot(); - }); - - test('has checked includeExternalUrls', () => { - const manifest = buildManifest([], [], { includeExternalUrls: 'on' }); - - expect(manifest.config).toMatchSnapshot(); - }); - - test('has checked noCache', () => { - const manifest = buildManifest([], [], { noCache: 'on' }); + test('has checked showErrors and includeExternalUrls', () => { + const manifest = buildManifest([], [], { showErrors: 'on', includeExternalUrls: 'on' }); expect(manifest.config).toMatchSnapshot(); }); diff --git a/src/utils/manifest.ts b/src/utils/manifest.ts index a1c8d48..e954fc5 100644 --- a/src/utils/manifest.ts +++ b/src/utils/manifest.ts @@ -96,13 +96,6 @@ export const buildManifest = (sources: Source[], extractors: Extractor[], config default: config['proxyConfig'] ?? '', }); - manifest.config.push({ - key: 'noCache', - type: 'checkbox', - title: 'Disable cache', - ...('noCache' in config && { default: 'checked' }), - }); - extractors.forEach((extractor) => { if (extractor.id === 'external') { return; -- 2.45.2 From 950d0d6f6fe976ed882c23c27a7344249687b832 Mon Sep 17 00:00:00 2001 From: WebStreamr <210764791+webstreamr@users.noreply.github.com> Date: Sun, 14 Sep 2025 13:30:53 +0000 Subject: [PATCH 6/8] revert: Revert "chore(fetcher): log more infos about responses" This reverts commit 731bd334703f0592f083d4264c382c28acf68eb1. --- src/utils/Fetcher.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/utils/Fetcher.ts b/src/utils/Fetcher.ts index 9731d44..4a96035 100644 --- a/src/utils/Fetcher.ts +++ b/src/utils/Fetcher.ts @@ -235,7 +235,7 @@ export class Fetcher { let httpCacheItem = await this.cacheGet(cacheKey); const noCache = init?.noCache ?? false; if (httpCacheItem && !noCache) { - this.logger.info(`Cached fetch ${request.method} ${url}: ${httpCacheItem.status} (${httpCacheItem.statusText})`, ctx); + this.logger.info(`Cached fetch ${request.method} ${url}`, ctx); return this.handleHttpCacheItem(ctx, httpCacheItem, url, init); } @@ -260,7 +260,7 @@ export class Fetcher { if (isRateLimitedRaw && isRateLimitedRaw.value && isRateLimitedRaw.expires) { const ttl = isRateLimitedRaw.expires - Date.now(); if (ttl <= this.MAX_WAIT_RETRY_AFTER && tryCount < 1) { - this.logger.info(`Wait out rate limit for ${url}`, ctx); + this.logger.info('Wait out rate limit', ctx); await this.sleep(ttl); @@ -292,8 +292,6 @@ export class Fetcher { response = await fetch(finalUrl, finalInit); } catch (error) { - this.logger.info(`Got error ${error} for ${url}`, ctx); - if (error instanceof DOMException && ['AbortError', 'TimeoutError'].includes(error.name)) { await this.increaseTimeoutsCount(url); throw new TimeoutError(); @@ -302,8 +300,6 @@ export class Fetcher { throw error; } - this.logger.info(`Got ${response.status} (${response.statusText}) for ${url}`, ctx); - await this.decreaseTimeoutsCount(url); if (response.status === 429) { -- 2.45.2 From 483a232ba2e3e09c0be4c27402135d2d095d54b1 Mon Sep 17 00:00:00 2001 From: WebStreamr <210764791+webstreamr@users.noreply.github.com> Date: Sun, 14 Sep 2025 13:30:56 +0000 Subject: [PATCH 7/8] revert: Revert "revert: Revert "fix(extractor): use SuperVideo embed URls which are not triggering CF challenges"" This reverts commit 4351ddc00dc349bde60968dc1490359e4720f924. --- src/extractor/SuperVideo.ts | 25 +- ...7cwtnu74kaehp2e7ro7gd4pq.urlsetmaster.m3u8 | 5 + ...5xbmjpz2lwk3cmu5azdcnsq.urlsetmaster.m3u8} | 4 +- ...tgupd6p57tdcfdq45p6s4zxa.urlsetmaster.m3u8 | 5 + .../https:supervideo.cc3h1qqoqtldo8 | 381 -------------- .../https:supervideo.ccbj6szat1pval | 124 ----- .../https:supervideo.cce3h1qqoqtldo8 | 57 +++ .../https:supervideo.ccebj6szat1pval | 59 ++- .../https:supervideo.ccendf5shmy9lpt | 468 ++++++++++++++++++ .../https:supervideo.cceq7i0sw1oytw3 | 82 +++ .../https:supervideo.ccndf5shmy9lpt | 138 ------ .../https:supervideo.ccq7i0sw1oytw3 | 406 --------------- .../https:supervideo.tv1p0m1fi9mok8.html | 406 --------------- .../https:supervideo.tve1p0m1fi9mok8 | 82 +++ ...ttps:supervideo.tve1p0m1fi9mok8.html.error | 1 + .../__snapshots__/SuperVideo.test.ts.snap | 11 +- ...tgupd6p57tdcfdqtnows4zxa.urlsetmaster.m3u8 | 5 + ...7gg7pskpznysppkxbh6kuuxq.urlsetmaster.m3u8 | 5 + .../https:supervideo.cc6vri8jyhla3n | 406 --------------- .../https:supervideo.cce6vri8jyhla3n | 82 +++ .../https:supervideo.cceq7i0sw1oytw3 | 82 +++ .../https:supervideo.ccq7i0sw1oytw3 | 406 --------------- .../__snapshots__/StreamResolver.test.ts.snap | 40 +- 23 files changed, 928 insertions(+), 2352 deletions(-) create mode 100644 src/extractor/__fixtures__/SuperVideo/https:hfs307.serversicuro.cchlsdnzpaalv5xg4a3gyvavh52jryoft7o5cd5nm7cwtnu74kaehp2e7ro7gd4pq.urlsetmaster.m3u8 rename src/extractor/__fixtures__/SuperVideo/{https:hfs308.serversicuro.cchlsdnzpe7rf5xg4a3gyva3h5orlyw23xosfzwunl5xbmjpz2l6t3doh5zbwynna.urlsetmaster.m3u8 => https:hfs308.serversicuro.cchlsdnzpe7rf5xg4a3gyva3h5orlyw23xosfzwunl5xbmjpz2lwk3cmu5azdcnsq.urlsetmaster.m3u8} (74%) create mode 100644 src/extractor/__fixtures__/SuperVideo/https:hfs309.serversicuro.cchlsdnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p57tdcfdq45p6s4zxa.urlsetmaster.m3u8 delete mode 100644 src/extractor/__fixtures__/SuperVideo/https:supervideo.cc3h1qqoqtldo8 delete mode 100644 src/extractor/__fixtures__/SuperVideo/https:supervideo.ccbj6szat1pval create mode 100644 src/extractor/__fixtures__/SuperVideo/https:supervideo.cce3h1qqoqtldo8 create mode 100644 src/extractor/__fixtures__/SuperVideo/https:supervideo.ccendf5shmy9lpt create mode 100644 src/extractor/__fixtures__/SuperVideo/https:supervideo.cceq7i0sw1oytw3 delete mode 100644 src/extractor/__fixtures__/SuperVideo/https:supervideo.ccndf5shmy9lpt delete mode 100644 src/extractor/__fixtures__/SuperVideo/https:supervideo.ccq7i0sw1oytw3 delete mode 100644 src/extractor/__fixtures__/SuperVideo/https:supervideo.tv1p0m1fi9mok8.html create mode 100644 src/extractor/__fixtures__/SuperVideo/https:supervideo.tve1p0m1fi9mok8 create mode 100644 src/extractor/__fixtures__/SuperVideo/https:supervideo.tve1p0m1fi9mok8.html.error create mode 100644 src/utils/__fixtures__/StreamResolver/https:hfs309.serversicuro.cchlsdnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p57tdcfdqtnows4zxa.urlsetmaster.m3u8 create mode 100644 src/utils/__fixtures__/StreamResolver/https:hfs311.serversicuro.cchlsdnzpcjj427g4a3gyvbth53rxqgffbu4vol4o7gg7pskpznysppkxbh6kuuxq.urlsetmaster.m3u8 delete mode 100644 src/utils/__fixtures__/StreamResolver/https:supervideo.cc6vri8jyhla3n create mode 100644 src/utils/__fixtures__/StreamResolver/https:supervideo.cce6vri8jyhla3n create mode 100644 src/utils/__fixtures__/StreamResolver/https:supervideo.cceq7i0sw1oytw3 delete mode 100644 src/utils/__fixtures__/StreamResolver/https:supervideo.ccq7i0sw1oytw3 diff --git a/src/extractor/SuperVideo.ts b/src/extractor/SuperVideo.ts index 8e71a3f..65deca6 100644 --- a/src/extractor/SuperVideo.ts +++ b/src/extractor/SuperVideo.ts @@ -1,5 +1,3 @@ -import bytes from 'bytes'; -import * as cheerio from 'cheerio'; import { NotFoundError } from '../error'; import { Context, Format, Meta, UrlResult } from '../types'; import { extractUrlFromPacked, guessHeightFromPlaylist } from '../utils'; @@ -17,7 +15,9 @@ export class SuperVideo extends Extractor { } public override normalize(url: URL): URL { - return new URL(url.href.replace('/e/', '/').replace('/k/', '/').replace('/embed-', '/')); + const fileUrl = new URL(url.href.replace('/e/', '/').replace('/k/', '/').replace('/embed-', '/').replace('.html', '')); + + return new URL(`/e${fileUrl.pathname}`, fileUrl.origin); } protected async extractInternal(ctx: Context, url: URL, meta: Meta): Promise { @@ -25,25 +25,12 @@ export class SuperVideo extends Extractor { const html = await this.fetcher.text(ctx, url, { headers }); - if (html.includes('This video can be watched as embed only')) { - return await this.extractInternal(ctx, new URL(`/e${url.pathname}`, url.origin), meta); - } - - if (/'The file was deleted|The file expired|Video is processing/.test(html)) { + if (/'The file was deleted|The file expired|Video is processing/.test(html) || !html.includes('p,a,c,k,e,d')) { throw new NotFoundError(); } const m3u8Url = extractUrlFromPacked(html, [/sources:\[{file:"(.*?)"/]); - const heightAndSizeMatch = html.match(/\d{3,}x(\d{3,}), ([\d.]+ ?[GM]B)/); - const size = heightAndSizeMatch ? bytes.parse(heightAndSizeMatch[2] as string) as number : undefined; - const height = heightAndSizeMatch - ? parseInt(heightAndSizeMatch[1] as string) - : await guessHeightFromPlaylist(ctx, this.fetcher, m3u8Url, { headers }); - - const $ = cheerio.load(html); - const title = $('.download__title').text().trim(); - return [ { url: m3u8Url, @@ -53,9 +40,7 @@ export class SuperVideo extends Extractor { ttl: this.ttl, meta: { ...meta, - title, - ...(size && { bytes: size }), - ...(height && { height }), + height: await guessHeightFromPlaylist(ctx, this.fetcher, m3u8Url, { headers }), }, }, ]; diff --git a/src/extractor/__fixtures__/SuperVideo/https:hfs307.serversicuro.cchlsdnzpaalv5xg4a3gyvavh52jryoft7o5cd5nm7cwtnu74kaehp2e7ro7gd4pq.urlsetmaster.m3u8 b/src/extractor/__fixtures__/SuperVideo/https:hfs307.serversicuro.cchlsdnzpaalv5xg4a3gyvavh52jryoft7o5cd5nm7cwtnu74kaehp2e7ro7gd4pq.urlsetmaster.m3u8 new file mode 100644 index 0000000..0d3125d --- /dev/null +++ b/src/extractor/__fixtures__/SuperVideo/https:hfs307.serversicuro.cchlsdnzpaalv5xg4a3gyvavh52jryoft7o5cd5nm7cwtnu74kaehp2e7ro7gd4pq.urlsetmaster.m3u8 @@ -0,0 +1,5 @@ +#EXTM3U +#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=691379,RESOLUTION=624x344,FRAME-RATE=25.000,CODECS="avc1.64001e,mp4a.40.2" +https://hfs307.serversicuro.cc/hls/dnzpaalv5xg4a3gyvavh52jryoft7o5cd5nm7cwtnu74kaehp2e7ro7gd4pq/index-v1-a1.m3u8 + +#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=39699,RESOLUTION=624x344,CODECS="avc1.64001e",URI="https://hfs307.serversicuro.cc/hls/dnzpaalv5xg4a3gyvavh52jryoft7o5cd5nm7cwtnu74kaehp2e7ro7gd4pq/iframes-v1-a1.m3u8" diff --git a/src/extractor/__fixtures__/SuperVideo/https:hfs308.serversicuro.cchlsdnzpe7rf5xg4a3gyva3h5orlyw23xosfzwunl5xbmjpz2l6t3doh5zbwynna.urlsetmaster.m3u8 b/src/extractor/__fixtures__/SuperVideo/https:hfs308.serversicuro.cchlsdnzpe7rf5xg4a3gyva3h5orlyw23xosfzwunl5xbmjpz2lwk3cmu5azdcnsq.urlsetmaster.m3u8 similarity index 74% rename from src/extractor/__fixtures__/SuperVideo/https:hfs308.serversicuro.cchlsdnzpe7rf5xg4a3gyva3h5orlyw23xosfzwunl5xbmjpz2l6t3doh5zbwynna.urlsetmaster.m3u8 rename to src/extractor/__fixtures__/SuperVideo/https:hfs308.serversicuro.cchlsdnzpe7rf5xg4a3gyva3h5orlyw23xosfzwunl5xbmjpz2lwk3cmu5azdcnsq.urlsetmaster.m3u8 index 5c5be2c..420eb28 100644 --- a/src/extractor/__fixtures__/SuperVideo/https:hfs308.serversicuro.cchlsdnzpe7rf5xg4a3gyva3h5orlyw23xosfzwunl5xbmjpz2l6t3doh5zbwynna.urlsetmaster.m3u8 +++ b/src/extractor/__fixtures__/SuperVideo/https:hfs308.serversicuro.cchlsdnzpe7rf5xg4a3gyva3h5orlyw23xosfzwunl5xbmjpz2lwk3cmu5azdcnsq.urlsetmaster.m3u8 @@ -1,5 +1,5 @@ #EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3056778,RESOLUTION=1920x1080,FRAME-RATE=25.000,CODECS="avc1.640828,mp4a.40.2" -https://hfs308.serversicuro.cc/hls/dnzpe7rf5xg4a3gyva3h5orlyw23xosfzwunl5xbmjpz2l6t3doh5zbwynna/index-v1-a1.m3u8 +https://hfs308.serversicuro.cc/hls/dnzpe7rf5xg4a3gyva3h5orlyw23xosfzwunl5xbmjpz2lwk3cmu5azdcnsq/index-v1-a1.m3u8 -#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=215307,RESOLUTION=1920x1080,CODECS="avc1.640828",URI="https://hfs308.serversicuro.cc/hls/dnzpe7rf5xg4a3gyva3h5orlyw23xosfzwunl5xbmjpz2l6t3doh5zbwynna/iframes-v1-a1.m3u8" +#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=215307,RESOLUTION=1920x1080,CODECS="avc1.640828",URI="https://hfs308.serversicuro.cc/hls/dnzpe7rf5xg4a3gyva3h5orlyw23xosfzwunl5xbmjpz2lwk3cmu5azdcnsq/iframes-v1-a1.m3u8" diff --git a/src/extractor/__fixtures__/SuperVideo/https:hfs309.serversicuro.cchlsdnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p57tdcfdq45p6s4zxa.urlsetmaster.m3u8 b/src/extractor/__fixtures__/SuperVideo/https:hfs309.serversicuro.cchlsdnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p57tdcfdq45p6s4zxa.urlsetmaster.m3u8 new file mode 100644 index 0000000..06df04b --- /dev/null +++ b/src/extractor/__fixtures__/SuperVideo/https:hfs309.serversicuro.cchlsdnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p57tdcfdq45p6s4zxa.urlsetmaster.m3u8 @@ -0,0 +1,5 @@ +#EXTM3U +#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1339859,RESOLUTION=1280x720,FRAME-RATE=30.000,CODECS="avc1.64001f,mp4a.40.2" +https://hfs309.serversicuro.cc/hls/dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p57tdcfdq45p6s4zxa/index-v1-a1.m3u8 + +#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=86074,RESOLUTION=1280x720,CODECS="avc1.64001f",URI="https://hfs309.serversicuro.cc/hls/dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p57tdcfdq45p6s4zxa/iframes-v1-a1.m3u8" diff --git a/src/extractor/__fixtures__/SuperVideo/https:supervideo.cc3h1qqoqtldo8 b/src/extractor/__fixtures__/SuperVideo/https:supervideo.cc3h1qqoqtldo8 deleted file mode 100644 index be41446..0000000 --- a/src/extractor/__fixtures__/SuperVideo/https:supervideo.cc3h1qqoqtldo8 +++ /dev/null @@ -1,381 +0,0 @@ - - - - - - - Watch Battle Royale (2000) - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - -
Video is processing now.
Conversion stage: ...
- - - - - - -
-
- -
-
- -
-
-

- Battle Royale (2000) -

-
    -
  • - on - Jul 24, 2022 -
  • -
  • - germancloud123 -
  • -
  • - 373 views -
  • -
  • - -
  • - -
-
-
-
    -
  • -
  • -
-
-
-
- - - -
-
-
- -
-
-
-
-
- -
-
-
- -
- -
-
- - -
-
-
-
- - -
-
-
-
-
-
- -
-
-
-
- -
-
-
-
-
-
-
-
- - -
-
-
-
-
-
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/src/extractor/__fixtures__/SuperVideo/https:supervideo.ccbj6szat1pval b/src/extractor/__fixtures__/SuperVideo/https:supervideo.ccbj6szat1pval deleted file mode 100644 index 0261fd0..0000000 --- a/src/extractor/__fixtures__/SuperVideo/https:supervideo.ccbj6szat1pval +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - Watch the walking dead dead city s02e05 german 1080p web x264 wvf - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
- - - - - - -
- - -
- This video can be watched as embed only -
- -
- - - - - - - - \ No newline at end of file diff --git a/src/extractor/__fixtures__/SuperVideo/https:supervideo.cce3h1qqoqtldo8 b/src/extractor/__fixtures__/SuperVideo/https:supervideo.cce3h1qqoqtldo8 new file mode 100644 index 0000000..4196690 --- /dev/null +++ b/src/extractor/__fixtures__/SuperVideo/https:supervideo.cce3h1qqoqtldo8 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
Video is processing now.
Conversion stage: ...
+ +
+ + + + + + + + + + diff --git a/src/extractor/__fixtures__/SuperVideo/https:supervideo.ccebj6szat1pval b/src/extractor/__fixtures__/SuperVideo/https:supervideo.ccebj6szat1pval index e9d3456..c2050fc 100644 --- a/src/extractor/__fixtures__/SuperVideo/https:supervideo.ccebj6szat1pval +++ b/src/extractor/__fixtures__/SuperVideo/https:supervideo.ccebj6szat1pval @@ -3,10 +3,10 @@ - - - - + + + - + + + + + + + + + + + - - - - - - - -
-
-
Disable ADBlock plugin and allow pop-ups in your browser to watch video
-
-
- Upgrade you account to watch videos with no limits! -
- - - - + + + +
- - - + diff --git a/src/extractor/__fixtures__/SuperVideo/https:supervideo.ccendf5shmy9lpt b/src/extractor/__fixtures__/SuperVideo/https:supervideo.ccendf5shmy9lpt new file mode 100644 index 0000000..c99bce7 --- /dev/null +++ b/src/extractor/__fixtures__/SuperVideo/https:supervideo.ccendf5shmy9lpt @@ -0,0 +1,468 @@ + + + + + + + + + +
+ + + + + + +
+
+0:00 + + + +95:12 +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + +
+
+ + + +
+ + + + + + diff --git a/src/extractor/__fixtures__/SuperVideo/https:supervideo.cceq7i0sw1oytw3 b/src/extractor/__fixtures__/SuperVideo/https:supervideo.cceq7i0sw1oytw3 new file mode 100644 index 0000000..2174f60 --- /dev/null +++ b/src/extractor/__fixtures__/SuperVideo/https:supervideo.cceq7i0sw1oytw3 @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + diff --git a/src/extractor/__fixtures__/SuperVideo/https:supervideo.ccndf5shmy9lpt b/src/extractor/__fixtures__/SuperVideo/https:supervideo.ccndf5shmy9lpt deleted file mode 100644 index 6b3ff50..0000000 --- a/src/extractor/__fixtures__/SuperVideo/https:supervideo.ccndf5shmy9lpt +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - Watch - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
- - - - - -
-
-
-

- File Not Found -

-

The file you were looking for could not be found, sorry for any inconvenience.

-

Possible causes of this error could be:

-
    -
  • - The file expired -
  • - The file was deleted by its owner -
  • - The file was deleted by administration because it didn't comply with our Terms of Use -
-
-
-
- - - - - \ No newline at end of file diff --git a/src/extractor/__fixtures__/SuperVideo/https:supervideo.ccq7i0sw1oytw3 b/src/extractor/__fixtures__/SuperVideo/https:supervideo.ccq7i0sw1oytw3 deleted file mode 100644 index ca34d41..0000000 --- a/src/extractor/__fixtures__/SuperVideo/https:supervideo.ccq7i0sw1oytw3 +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - - Watch des teufels bad 2024 - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - - - - - -
-
- - - - - - - - - - - - - - - -
-
-
- -
-
-

- des-teufels-bad-2024 -

-
    -
  • - on - Jun 27, 2024 -
  • -
  • - germancloud123 -
  • -
  • - 1868 views -
  • -
  • - -
  • - -
-
-
-
    -
  • -
  • -
-
-
-
- - - -
-
-
- -
-
-
-
-
- -
-
-
- -
- -
-
- - -
-
-
-
- - -
-
-
-
-
-
- -
-
-
-
- -
-
-
-
-
-
-
-
- - -
-
-
-
-
-
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/src/extractor/__fixtures__/SuperVideo/https:supervideo.tv1p0m1fi9mok8.html b/src/extractor/__fixtures__/SuperVideo/https:supervideo.tv1p0m1fi9mok8.html deleted file mode 100644 index 28a2af1..0000000 --- a/src/extractor/__fixtures__/SuperVideo/https:supervideo.tv1p0m1fi9mok8.html +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - - Watch Babylon 2x3 - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - - - - - -
-
- - - - - - - - - - - - - - - -
-
-
- -
-
-

- Babylon 5 2x3 -

-
    -
  • - on - May 8, 2025 -
  • -
  • - spainseries -
  • -
  • - 14 views -
  • -
  • - -
  • - -
-
-
-
    -
  • -
  • -
-
-
-
- - - -
-
-
- -
-
-
-
-
- -
-
-
- -
- -
-
- - -
-
-
-
- - -
-
-
-
-
-
- -
-
-
-
- -
-
-
-
-
-
-
-
- - -
-
-
-
-
-
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/src/extractor/__fixtures__/SuperVideo/https:supervideo.tve1p0m1fi9mok8 b/src/extractor/__fixtures__/SuperVideo/https:supervideo.tve1p0m1fi9mok8 new file mode 100644 index 0000000..21bdd4e --- /dev/null +++ b/src/extractor/__fixtures__/SuperVideo/https:supervideo.tve1p0m1fi9mok8 @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + diff --git a/src/extractor/__fixtures__/SuperVideo/https:supervideo.tve1p0m1fi9mok8.html.error b/src/extractor/__fixtures__/SuperVideo/https:supervideo.tve1p0m1fi9mok8.html.error new file mode 100644 index 0000000..c31051e --- /dev/null +++ b/src/extractor/__fixtures__/SuperVideo/https:supervideo.tve1p0m1fi9mok8.html.error @@ -0,0 +1 @@ +Fetcher error: 404: Not Found \ No newline at end of file diff --git a/src/extractor/__snapshots__/SuperVideo.test.ts.snap b/src/extractor/__snapshots__/SuperVideo.test.ts.snap index 6027b7f..eb43d4d 100644 --- a/src/extractor/__snapshots__/SuperVideo.test.ts.snap +++ b/src/extractor/__snapshots__/SuperVideo.test.ts.snap @@ -10,11 +10,10 @@ exports[`SuperVideo embed only 1`] = ` "meta": { "countryCodes": [], "height": 1080, - "title": "", }, "sourceId": "supervideo_", "ttl": 10800000, - "url": "https://hfs308.serversicuro.cc/hls/,dnzpe7rf5xg4a3gyva3h5orlyw23xosfzwunl5xbmjpz2l6t3doh5zbwynna,.urlset/master.m3u8", + "url": "https://hfs308.serversicuro.cc/hls/,dnzpe7rf5xg4a3gyva3h5orlyw23xosfzwunl5xbmjpz2lwk3cmu5azdcnsq,.urlset/master.m3u8", }, ] `; @@ -27,14 +26,12 @@ exports[`SuperVideo supervideo.cc /e/ 1`] = ` "format": "hls", "label": "SuperVideo", "meta": { - "bytes": 1073741824, "countryCodes": [], "height": 720, - "title": "des-teufels-bad-2024", }, "sourceId": "supervideo_", "ttl": 10800000, - "url": "https://hfs309.serversicuro.cc/hls/,dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p577fze64cp3rsmdyq,.urlset/master.m3u8", + "url": "https://hfs309.serversicuro.cc/hls/,dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p57tdcfdq45p6s4zxa,.urlset/master.m3u8", }, ] `; @@ -45,14 +42,12 @@ exports[`SuperVideo supervideo.tv /embed-/ 1`] = ` "format": "hls", "label": "SuperVideo", "meta": { - "bytes": 219571814, "countryCodes": [], "height": 344, - "title": "Babylon 5 2x3", }, "sourceId": "supervideo_", "ttl": 10800000, - "url": "https://hfs307.serversicuro.cc/hls/,dnzpaalv5xg4a3gyvavh52jryoft7o5cd5nm7cwtnu74kmc4ohiklh5qwq4q,.urlset/master.m3u8", + "url": "https://hfs307.serversicuro.cc/hls/,dnzpaalv5xg4a3gyvavh52jryoft7o5cd5nm7cwtnu74kaehp2e7ro7gd4pq,.urlset/master.m3u8", }, ] `; diff --git a/src/utils/__fixtures__/StreamResolver/https:hfs309.serversicuro.cchlsdnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p57tdcfdqtnows4zxa.urlsetmaster.m3u8 b/src/utils/__fixtures__/StreamResolver/https:hfs309.serversicuro.cchlsdnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p57tdcfdqtnows4zxa.urlsetmaster.m3u8 new file mode 100644 index 0000000..10e0f94 --- /dev/null +++ b/src/utils/__fixtures__/StreamResolver/https:hfs309.serversicuro.cchlsdnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p57tdcfdqtnows4zxa.urlsetmaster.m3u8 @@ -0,0 +1,5 @@ +#EXTM3U +#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1339859,RESOLUTION=1280x720,FRAME-RATE=30.000,CODECS="avc1.64001f,mp4a.40.2" +https://hfs309.serversicuro.cc/hls/dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p57tdcfdqtnows4zxa/index-v1-a1.m3u8 + +#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=86074,RESOLUTION=1280x720,CODECS="avc1.64001f",URI="https://hfs309.serversicuro.cc/hls/dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p57tdcfdqtnows4zxa/iframes-v1-a1.m3u8" diff --git a/src/utils/__fixtures__/StreamResolver/https:hfs311.serversicuro.cchlsdnzpcjj427g4a3gyvbth53rxqgffbu4vol4o7gg7pskpznysppkxbh6kuuxq.urlsetmaster.m3u8 b/src/utils/__fixtures__/StreamResolver/https:hfs311.serversicuro.cchlsdnzpcjj427g4a3gyvbth53rxqgffbu4vol4o7gg7pskpznysppkxbh6kuuxq.urlsetmaster.m3u8 new file mode 100644 index 0000000..11a2c02 --- /dev/null +++ b/src/utils/__fixtures__/StreamResolver/https:hfs311.serversicuro.cchlsdnzpcjj427g4a3gyvbth53rxqgffbu4vol4o7gg7pskpznysppkxbh6kuuxq.urlsetmaster.m3u8 @@ -0,0 +1,5 @@ +#EXTM3U +#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1315290,RESOLUTION=1280x720,FRAME-RATE=23.974,CODECS="avc1.4d401f,mp4a.40.2" +https://hfs311.serversicuro.cc/hls/dnzpcjj427g4a3gyvbth53rxqgffbu4vol4o7gg7pskpznysppkxbh6kuuxq/index-v1-a1.m3u8 + +#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=28034,RESOLUTION=1280x720,CODECS="avc1.4d401f",URI="https://hfs311.serversicuro.cc/hls/dnzpcjj427g4a3gyvbth53rxqgffbu4vol4o7gg7pskpznysppkxbh6kuuxq/iframes-v1-a1.m3u8" diff --git a/src/utils/__fixtures__/StreamResolver/https:supervideo.cc6vri8jyhla3n b/src/utils/__fixtures__/StreamResolver/https:supervideo.cc6vri8jyhla3n deleted file mode 100644 index d6eaead..0000000 --- a/src/utils/__fixtures__/StreamResolver/https:supervideo.cc6vri8jyhla3n +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - - Watch the devils bath 2024 sub ita - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - - - - - -
-
- - - - - - - - - - - - - - - -
-
-
- -
-
-

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

-
    -
  • - on - Jul 7, 2024 -
  • -
  • - fracobello -
  • -
  • - 2549 views -
  • -
  • - -
  • - -
-
-
-
    -
  • -
  • -
-
-
-
- - - -
-
-
- -
-
-
-
-
- -
-
-
- -
- -
-
- - -
-
-
-
- - -
-
-
-
-
-
- -
-
-
-
- -
-
-
-
-
-
-
-
- - -
-
-
-
-
-
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/src/utils/__fixtures__/StreamResolver/https:supervideo.cce6vri8jyhla3n b/src/utils/__fixtures__/StreamResolver/https:supervideo.cce6vri8jyhla3n new file mode 100644 index 0000000..c831bf2 --- /dev/null +++ b/src/utils/__fixtures__/StreamResolver/https:supervideo.cce6vri8jyhla3n @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + diff --git a/src/utils/__fixtures__/StreamResolver/https:supervideo.cceq7i0sw1oytw3 b/src/utils/__fixtures__/StreamResolver/https:supervideo.cceq7i0sw1oytw3 new file mode 100644 index 0000000..4e2d0e2 --- /dev/null +++ b/src/utils/__fixtures__/StreamResolver/https:supervideo.cceq7i0sw1oytw3 @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + diff --git a/src/utils/__fixtures__/StreamResolver/https:supervideo.ccq7i0sw1oytw3 b/src/utils/__fixtures__/StreamResolver/https:supervideo.ccq7i0sw1oytw3 deleted file mode 100644 index ef0698b..0000000 --- a/src/utils/__fixtures__/StreamResolver/https:supervideo.ccq7i0sw1oytw3 +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - - Watch des teufels bad 2024 - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
-
-
- - - - - - - -
-
- - - - - - - - - - - - - - - -
-
-
- -
-
-

- des-teufels-bad-2024 -

-
    -
  • - on - Jun 27, 2024 -
  • -
  • - germancloud123 -
  • -
  • - 1868 views -
  • -
  • - -
  • - -
-
-
-
    -
  • -
  • -
-
-
-
- - - -
-
-
- -
-
-
-
-
- -
-
-
- -
- -
-
- - -
-
-
-
- - -
-
-
-
-
-
- -
-
-
-
- -
-
-
-
-
-
-
-
- - -
-
-
-
-
-
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/src/utils/__snapshots__/StreamResolver.test.ts.snap b/src/utils/__snapshots__/StreamResolver.test.ts.snap index c097f06..6c4d2ff 100644 --- a/src/utils/__snapshots__/StreamResolver.test.ts.snap +++ b/src/utils/__snapshots__/StreamResolver.test.ts.snap @@ -208,25 +208,21 @@ exports[`resolve returns sorted results 1`] = ` }, { "behaviorHints": { - "bingeGroup": "webstreamr-supervideo_it", + "bingeGroup": "webstreamr-supervideo_de", "notWebReady": true, - "videoSize": 1181116006, }, - "name": "WebStreamr 🇮🇹 720p", - "title": "the-devils-bath-2024-sd-sub-ita -💾 1.1 GB 🔗 SuperVideo", - "url": "https://hfs311.serversicuro.cc/hls/,dnzpcjj427g4a3gyvbth53rxqgffbu4vol4o7gg7pskpzb6josghbkwhnisq,.urlset/master.m3u8", + "name": "WebStreamr 🇩🇪 720p", + "title": "🔗 SuperVideo", + "url": "https://hfs309.serversicuro.cc/hls/,dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p57tdcfdqtnows4zxa,.urlset/master.m3u8", }, { "behaviorHints": { - "bingeGroup": "webstreamr-supervideo_de", + "bingeGroup": "webstreamr-supervideo_it", "notWebReady": true, - "videoSize": 1073741824, }, - "name": "WebStreamr 🇩🇪 720p", - "title": "des-teufels-bad-2024 -💾 1 GB 🔗 SuperVideo", - "url": "https://hfs309.serversicuro.cc/hls/,dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p577fze64mz3bsmdyq,.urlset/master.m3u8", + "name": "WebStreamr 🇮🇹 720p", + "title": "🔗 SuperVideo", + "url": "https://hfs311.serversicuro.cc/hls/,dnzpcjj427g4a3gyvbth53rxqgffbu4vol4o7gg7pskpznysppkxbh6kuuxq,.urlset/master.m3u8", }, { "behaviorHints": { @@ -288,25 +284,21 @@ exports[`resolve returns sorted results 2`] = ` }, { "behaviorHints": { - "bingeGroup": "webstreamr-supervideo_it", + "bingeGroup": "webstreamr-supervideo_de", "notWebReady": true, - "videoSize": 1181116006, }, - "name": "WebStreamr 🇮🇹 720p", - "title": "the-devils-bath-2024-sd-sub-ita -💾 1.1 GB 🔗 SuperVideo", - "url": "https://hfs311.serversicuro.cc/hls/,dnzpcjj427g4a3gyvbth53rxqgffbu4vol4o7gg7pskpzb6josghbkwhnisq,.urlset/master.m3u8", + "name": "WebStreamr 🇩🇪 720p", + "title": "🔗 SuperVideo", + "url": "https://hfs309.serversicuro.cc/hls/,dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p57tdcfdqtnows4zxa,.urlset/master.m3u8", }, { "behaviorHints": { - "bingeGroup": "webstreamr-supervideo_de", + "bingeGroup": "webstreamr-supervideo_it", "notWebReady": true, - "videoSize": 1073741824, }, - "name": "WebStreamr 🇩🇪 720p", - "title": "des-teufels-bad-2024 -💾 1 GB 🔗 SuperVideo", - "url": "https://hfs309.serversicuro.cc/hls/,dnzpfi3d27g4a3gyvbmh5klwtl65qh654hyjtgupd6p577fze64mz3bsmdyq,.urlset/master.m3u8", + "name": "WebStreamr 🇮🇹 720p", + "title": "🔗 SuperVideo", + "url": "https://hfs311.serversicuro.cc/hls/,dnzpcjj427g4a3gyvbth53rxqgffbu4vol4o7gg7pskpznysppkxbh6kuuxq,.urlset/master.m3u8", }, { "behaviorHints": { -- 2.45.2 From e0aa87bb29a102f6e4269147de8f131398bfdc8a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 14 Sep 2025 13:31:57 +0000 Subject: [PATCH 8/8] fix(deps): update dependency jsdom to v27 --- package-lock.json | 267 ++++++++++++++++++++++++++++++++-------------- package.json | 2 +- 2 files changed, 185 insertions(+), 84 deletions(-) diff --git a/package-lock.json b/package-lock.json index ad1ea98..6f59579 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "express": "^5.1.0", "fetch-socks": "^1.3.2", "http-cache-semantics": "^4.2.0", - "jsdom": "^26.1.0", + "jsdom": "^27.0.0", "minimatch": "^10.0.3", "randomstring": "^1.3.1", "rot13-cipher": "^1.0.0", @@ -55,23 +55,44 @@ } }, "node_modules/@asamuzakjp/css-color": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", - "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.0.4.tgz", + "integrity": "sha512-cKjSKvWGmAziQWbCouOsFwb14mp1betm8Y7Fn+yglDMUUu3r9DCbJ9iJbeFDenLMqFbIMC0pQP8K+B8LAxX3OQ==", "license": "MIT", "dependencies": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "lru-cache": "^10.4.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "lru-cache": "^11.1.0" } }, "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.1.tgz", + "integrity": "sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.5.4.tgz", + "integrity": "sha512-RNSNk1dnB8lAn+xdjlRoM4CzdVrHlmXZtSXAWs2jyl4PiBRWqTZr9ML5M710qgd9RPTBsVG6P0SLy7dwy0Foig==", + "license": "MIT", + "dependencies": { + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.1.0", + "is-potential-custom-element-name": "^1.0.1" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "license": "MIT" }, "node_modules/@babel/code-frame": { "version": "7.27.1", @@ -721,6 +742,28 @@ "@csstools/css-tokenizer": "^3.0.4" } }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.14.tgz", + "integrity": "sha512-zSlIxa20WvMojjpCSy8WrNpcZ61RqfTfX3XTaOeVlGJrt/8HF3YbzgFZa01yTbT4GWQLwfTcC3EB8i3XnB647Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, "node_modules/@csstools/css-tokenizer": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", @@ -3137,6 +3180,15 @@ ], "license": "MIT" }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -3946,6 +3998,19 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, "node_modules/css-what": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", @@ -3959,29 +4024,30 @@ } }, "node_modules/cssstyle": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", - "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.0.tgz", + "integrity": "sha512-RveJPnk3m7aarYQ2bJ6iw+Urh55S6FzUiqtBq+TihnTDP4cI8y/TYDqGOyqgnG1J1a6BxJXZsV9JFSTulm9Z7g==", "license": "MIT", "dependencies": { - "@asamuzakjp/css-color": "^3.2.0", - "rrweb-cssom": "^0.8.0" + "@asamuzakjp/css-color": "^4.0.3", + "@csstools/css-syntax-patches-for-csstree": "^1.0.14", + "css-tree": "^3.1.0" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-6.0.0.tgz", + "integrity": "sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==", "license": "MIT", "dependencies": { "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" + "whatwg-url": "^15.0.0" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/data-view-buffer": { @@ -7333,34 +7399,34 @@ } }, "node_modules/jsdom": { - "version": "26.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", - "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-27.0.0.tgz", + "integrity": "sha512-lIHeR1qlIRrIN5VMccd8tI2Sgw6ieYXSVktcSHaNe3Z5nE/tcPQYQWOq00wxMvYOsz+73eAkNenVvmPC6bba9A==", "license": "MIT", "dependencies": { - "cssstyle": "^4.2.1", - "data-urls": "^5.0.0", + "@asamuzakjp/dom-selector": "^6.5.4", + "cssstyle": "^5.3.0", + "data-urls": "^6.0.0", "decimal.js": "^10.5.0", "html-encoding-sniffer": "^4.0.0", "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.16", - "parse5": "^7.2.1", + "parse5": "^7.3.0", "rrweb-cssom": "^0.8.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^5.1.1", + "tough-cookie": "^6.0.0", "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", + "webidl-conversions": "^8.0.0", "whatwg-encoding": "^3.1.1", "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.1.1", - "ws": "^8.18.0", + "whatwg-url": "^15.0.0", + "ws": "^8.18.2", "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "peerDependencies": { "canvas": "^3.0.0" @@ -7371,36 +7437,6 @@ } } }, - "node_modules/jsdom/node_modules/tldts": { - "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", - "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", - "license": "MIT", - "dependencies": { - "tldts-core": "^6.1.86" - }, - "bin": { - "tldts": "bin/cli.js" - } - }, - "node_modules/jsdom/node_modules/tldts-core": { - "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", - "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", - "license": "MIT" - }, - "node_modules/jsdom/node_modules/tough-cookie": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", - "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", - "license": "BSD-3-Clause", - "dependencies": { - "tldts": "^6.1.32" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -7723,6 +7759,12 @@ "node": ">= 0.4" } }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "license": "CC0-1.0" + }, "node_modules/media-typer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", @@ -8090,6 +8132,25 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/napi-build-utils": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", @@ -8398,12 +8459,6 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/nwsapi": { - "version": "2.2.22", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", - "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", - "license": "MIT" - }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -8825,7 +8880,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -8874,6 +8928,35 @@ "node": ">= 0.4" } }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/prebuild-install": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", @@ -9240,6 +9323,15 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", @@ -9898,6 +9990,15 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", @@ -11112,12 +11213,12 @@ } }, "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.0.tgz", + "integrity": "sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==", "license": "BSD-2-Clause", "engines": { - "node": ">=12" + "node": ">=20" } }, "node_modules/whatwg-encoding": { @@ -11142,16 +11243,16 @@ } }, "node_modules/whatwg-url": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", - "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-15.0.0.tgz", + "integrity": "sha512-+0q+Pc6oUhtbbeUfuZd4heMNOLDJDdagYxv756mCf9vnLF+NTj4zvv5UyYNkHJpc3CJIesMVoEIOdhi7L9RObA==", "license": "MIT", "dependencies": { - "tr46": "^5.1.0", - "webidl-conversions": "^7.0.0" + "tr46": "^5.1.1", + "webidl-conversions": "^8.0.0" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/which": { diff --git a/package.json b/package.json index c5cbe89..bd522cd 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "express": "^5.1.0", "fetch-socks": "^1.3.2", "http-cache-semantics": "^4.2.0", - "jsdom": "^26.1.0", + "jsdom": "^27.0.0", "minimatch": "^10.0.3", "randomstring": "^1.3.1", "rot13-cipher": "^1.0.0", -- 2.45.2