From f624029d05ed43dd0243b007d923b1de78d2647e Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 24 Jan 2025 19:20:01 +0300 Subject: [PATCH 01/24] Update parse.ts --- scripts/commands/channels/parse.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/commands/channels/parse.ts b/scripts/commands/channels/parse.ts index 96c57a52..572b5ed6 100644 --- a/scripts/commands/channels/parse.ts +++ b/scripts/commands/channels/parse.ts @@ -26,7 +26,7 @@ async function main() { const logger = new Logger() const file = new File(options.config) const dir = file.dirname() - const config = (await import(pathToFileURL(options.config))).default + const config = (await import(pathToFileURL(options.config).toString())).default const outputFilepath = options.output || `${dir}/${config.site}.channels.xml` let channels = new Collection() From a7b80f88a470780760a5b20c3b38d051f5f94b30 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 24 Jan 2025 19:59:57 +0300 Subject: [PATCH 02/24] Install socks-proxy-agent --- package-lock.json | 131 +++++++++++++++++++++++++++++++++++++++++----- package.json | 5 +- yarn.lock | 58 ++++++++++++++++---- 3 files changed, 169 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 31a33148..a6b4180f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "@alex_neo/jest-expect-message": "^1.0.5", "@eslint/eslintrc": "^3.2.0", "@eslint/js": "^9.17.0", - "@freearhey/core": "^0.5.0", + "@freearhey/core": "^0.5.1", "@ntlab/sfetch": "^1.0.0", "@octokit/core": "^6.1.3", "@octokit/plugin-paginate-rest": "^11.3.6", @@ -38,7 +38,7 @@ "csv-parser": "^3.0.0", "cwait": "^1.1.2", "dayjs": "^1.11.10", - "epg-grabber": "^0.37.4", + "epg-grabber": "^0.37.5", "epg-parser": "^0.3.1", "eslint": "^9.17.0", "eslint-config-prettier": "^9.0.0", @@ -69,6 +69,7 @@ "serve": "^14.2.4", "signale": "^1.4.0", "skip-postinstall": "^1.0.0", + "socks-proxy-agent": "^8.0.5", "srcset": "^4.0.0", "table2array": "^0.0.2", "tabletojson": "^2.0.7", @@ -1203,9 +1204,9 @@ } }, "node_modules/@freearhey/core": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@freearhey/core/-/core-0.5.0.tgz", - "integrity": "sha512-FcA5Pv9RvFvLYAwNmD/2vlSR49Rx+kihJ+xbIUgIACHY6lBUptfbNznm00DQoUyWRJG/cfT3dkYCwIxSUsdP+w==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@freearhey/core/-/core-0.5.1.tgz", + "integrity": "sha512-UDKIOyrtcUXaiAeIvjNFTI6DlempiOQaRB83CqHNF1VPRHNBiNhGhERWyInHE2cjLp/cc0CA/IykOYS39kBK7Q==", "dependencies": { "@types/fs-extra": "^11.0.2", "@types/lodash": "^4.14.198", @@ -4192,9 +4193,9 @@ } }, "node_modules/epg-grabber": { - "version": "0.37.4", - "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.4.tgz", - "integrity": "sha512-PS104bH9tHRa9kivSwx47AKMkfHwKy51XQTx+GO6sIXvIp2Z4LBpwMEXGcfPoAsdIGxgs2Wrl0dZ/QGL+7x6YQ==", + "version": "0.37.5", + "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.5.tgz", + "integrity": "sha512-mkT22NU5docsw6qJByBC5oMKFYETyX/PU7Iq3MQ1MS4A+C2Ale6tm+QN7BRW/9Cd5/szfr/YdkzDUZaoyO5vvw==", "dependencies": { "axios": "^1.6.1", "axios-cache-interceptor": "^0.10.3", @@ -5247,6 +5248,23 @@ "node": ">=8" } }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -6141,6 +6159,11 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -7641,6 +7664,41 @@ "node": ">=8" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -9172,9 +9230,9 @@ } }, "@freearhey/core": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@freearhey/core/-/core-0.5.0.tgz", - "integrity": "sha512-FcA5Pv9RvFvLYAwNmD/2vlSR49Rx+kihJ+xbIUgIACHY6lBUptfbNznm00DQoUyWRJG/cfT3dkYCwIxSUsdP+w==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@freearhey/core/-/core-0.5.1.tgz", + "integrity": "sha512-UDKIOyrtcUXaiAeIvjNFTI6DlempiOQaRB83CqHNF1VPRHNBiNhGhERWyInHE2cjLp/cc0CA/IykOYS39kBK7Q==", "requires": { "@types/fs-extra": "^11.0.2", "@types/lodash": "^4.14.198", @@ -11280,9 +11338,9 @@ "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" }, "epg-grabber": { - "version": "0.37.4", - "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.4.tgz", - "integrity": "sha512-PS104bH9tHRa9kivSwx47AKMkfHwKy51XQTx+GO6sIXvIp2Z4LBpwMEXGcfPoAsdIGxgs2Wrl0dZ/QGL+7x6YQ==", + "version": "0.37.5", + "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.5.tgz", + "integrity": "sha512-mkT22NU5docsw6qJByBC5oMKFYETyX/PU7Iq3MQ1MS4A+C2Ale6tm+QN7BRW/9Cd5/szfr/YdkzDUZaoyO5vvw==", "requires": { "axios": "^1.6.1", "axios-cache-interceptor": "^0.10.3", @@ -12006,6 +12064,22 @@ } } }, + "ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "requires": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "dependencies": { + "sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + } + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -12650,6 +12724,11 @@ "esprima": "^4.0.0" } }, + "jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -13776,6 +13855,30 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + }, + "socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "requires": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "requires": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", diff --git a/package.json b/package.json index 46dcb653..df39e736 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "@alex_neo/jest-expect-message": "^1.0.5", "@eslint/eslintrc": "^3.2.0", "@eslint/js": "^9.17.0", - "@freearhey/core": "^0.5.0", + "@freearhey/core": "^0.5.1", "@ntlab/sfetch": "^1.0.0", "@octokit/core": "^6.1.3", "@octokit/plugin-paginate-rest": "^11.3.6", @@ -67,7 +67,7 @@ "csv-parser": "^3.0.0", "cwait": "^1.1.2", "dayjs": "^1.11.10", - "epg-grabber": "^0.37.4", + "epg-grabber": "^0.37.5", "epg-parser": "^0.3.1", "eslint": "^9.17.0", "eslint-config-prettier": "^9.0.0", @@ -98,6 +98,7 @@ "serve": "^14.2.4", "signale": "^1.4.0", "skip-postinstall": "^1.0.0", + "socks-proxy-agent": "^8.0.5", "srcset": "^4.0.0", "table2array": "^0.0.2", "tabletojson": "^2.0.7", diff --git a/yarn.lock b/yarn.lock index 1ba3d3bd..de4affe8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -396,10 +396,10 @@ dependencies: levn "^0.4.1" -"@freearhey/core@^0.5.0": - version "0.5.0" - resolved "https://registry.npmjs.org/@freearhey/core/-/core-0.5.0.tgz" - integrity sha512-FcA5Pv9RvFvLYAwNmD/2vlSR49Rx+kihJ+xbIUgIACHY6lBUptfbNznm00DQoUyWRJG/cfT3dkYCwIxSUsdP+w== +"@freearhey/core@^0.5.1": + version "0.5.1" + resolved "https://registry.npmjs.org/@freearhey/core/-/core-0.5.1.tgz" + integrity sha512-UDKIOyrtcUXaiAeIvjNFTI6DlempiOQaRB83CqHNF1VPRHNBiNhGhERWyInHE2cjLp/cc0CA/IykOYS39kBK7Q== dependencies: "@types/fs-extra" "^11.0.2" "@types/lodash" "^4.14.198" @@ -1271,7 +1271,7 @@ acorn-walk@^8.1.1: resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz" integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== -agent-base@^7.1.3: +agent-base@^7.1.2, agent-base@^7.1.3: version "7.1.3" resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz" integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== @@ -2158,10 +2158,10 @@ entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: resolved "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz" integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== -epg-grabber@^0.37.4: - version "0.37.4" - resolved "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.4.tgz" - integrity sha512-PS104bH9tHRa9kivSwx47AKMkfHwKy51XQTx+GO6sIXvIp2Z4LBpwMEXGcfPoAsdIGxgs2Wrl0dZ/QGL+7x6YQ== +epg-grabber@^0.37.5: + version "0.37.5" + resolved "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.5.tgz" + integrity sha512-mkT22NU5docsw6qJByBC5oMKFYETyX/PU7Iq3MQ1MS4A+C2Ale6tm+QN7BRW/9Cd5/szfr/YdkzDUZaoyO5vvw== dependencies: axios "^1.6.1" axios-cache-interceptor "^0.10.3" @@ -2835,6 +2835,14 @@ inquirer@^8.2.6: through "^2.3.6" wrap-ansi "^6.0.1" +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" @@ -3373,6 +3381,11 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" @@ -4393,6 +4406,28 @@ slash@^3.0.0: resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^8.0.5: + version "8.0.5" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz" + integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== + dependencies: + agent-base "^7.1.2" + debug "^4.3.4" + socks "^2.8.3" + +socks@^2.8.3: + version "2.8.3" + resolved "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz" + integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" + source-map-support@0.5.13: version "0.5.13" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" @@ -4406,6 +4441,11 @@ source-map@^0.6.0, source-map@^0.6.1: resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" From 3f22ac12f5d64c6d23017f903313f7d70232190d Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:00:25 +0300 Subject: [PATCH 03/24] Update grab.test.ts --- tests/commands/epg/grab.test.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/commands/epg/grab.test.ts b/tests/commands/epg/grab.test.ts index 8d40f16f..648d5057 100644 --- a/tests/commands/epg/grab.test.ts +++ b/tests/commands/epg/grab.test.ts @@ -97,6 +97,30 @@ describe('epg:grab', () => { expect(stdout).toContain('ERR: Connection timeout') }) + + it('can grab epg via https proxy', () => { + const cmd = `${ENV_VAR} npm run grab --- --site=example.com --proxy=https://bob:123456@proxy.com:1234 --output="${path.resolve( + 'tests/__data__/output/guide.xml' + )}"` + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) + + expect(content('tests/__data__/output/guide.xml')).toEqual( + content('tests/__data__/expected/guide2.xml') + ) + }) + + it('can grab epg via socks5 proxy', () => { + const cmd = `${ENV_VAR} npm run grab --- --site=example.com --proxy=socks5://bob:123456@proxy.com:1234 --output="${path.resolve( + 'tests/__data__/output/guide.xml' + )}"` + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) + + expect(content('tests/__data__/output/guide.xml')).toEqual( + content('tests/__data__/expected/guide2.xml') + ) + }) }) function content(filepath: string) { From e02e46562a8e4ace1ee6d44c76fb7d00ba830f29 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:01:57 +0300 Subject: [PATCH 04/24] Create proxyParser.ts --- scripts/core/proxyParser.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 scripts/core/proxyParser.ts diff --git a/scripts/core/proxyParser.ts b/scripts/core/proxyParser.ts new file mode 100644 index 00000000..244290d5 --- /dev/null +++ b/scripts/core/proxyParser.ts @@ -0,0 +1,27 @@ +import { URL } from 'node:url' + +type ProxyParserResult = { + protocol: string | null + auth: { + username: string | null + password: string | null + } + host: string + port: number | null +} + +export class ProxyParser { + parse(_url: string): ProxyParserResult { + const parsed = new URL(_url) + + return { + protocol: parsed.protocol.replace(':', '') || null, + auth: { + username: parsed.username || null, + password: parsed.password || null + }, + host: parsed.hostname, + port: parsed.port ? parseInt(parsed.port) : null + } + } +} From b8c50654f62c1b452d5af46f5a47b08c15dc8701 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:02:04 +0300 Subject: [PATCH 05/24] Update index.ts --- scripts/core/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/core/index.ts b/scripts/core/index.ts index 2c7309ed..db3e75a5 100644 --- a/scripts/core/index.ts +++ b/scripts/core/index.ts @@ -13,3 +13,4 @@ export * from './queueCreator' export * from './issueLoader' export * from './issueParser' export * from './htmlTable' +export * from './proxyParser' From d15b21bfd333d2fed5224504005fc22f454686b4 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:02:33 +0300 Subject: [PATCH 06/24] Update grabber.ts --- scripts/core/grabber.ts | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/scripts/core/grabber.ts b/scripts/core/grabber.ts index 4bed77a3..2248cbc5 100644 --- a/scripts/core/grabber.ts +++ b/scripts/core/grabber.ts @@ -1,8 +1,9 @@ import { EPGGrabber, GrabCallbackData, EPGGrabberMock, SiteConfig, Channel } from 'epg-grabber' import { Logger, Collection } from '@freearhey/core' -import { Queue } from './' +import { Queue, ProxyParser } from './' import { GrabOptions } from '../commands/epg/grab' import { TaskQueue, PromisyClass } from 'cwait' +import { SocksProxyAgent } from 'socks-proxy-agent' type GrabberProps = { logger: Logger @@ -14,6 +15,7 @@ export class Grabber { logger: Logger queue: Queue options: GrabOptions + grabber: EPGGrabber | EPGGrabberMock constructor({ logger, queue, options }: GrabberProps) { this.logger = logger @@ -23,6 +25,7 @@ export class Grabber { } async grab(): Promise<{ channels: Collection; programs: Collection }> { + const proxyParser = new ProxyParser() const taskQueue = new TaskQueue(Promise as PromisyClass, this.options.maxConnections) const total = this.queue.size() @@ -49,6 +52,24 @@ export class Grabber { config.delay = delay } + if (this.options.proxy !== undefined) { + const proxy = proxyParser.parse(this.options.proxy) + + if ( + proxy.protocol && + ['socks', 'socks5', 'socks5h', 'socks4', 'socks4a'].includes(String(proxy.protocol)) + ) { + const socksProxyAgent = new SocksProxyAgent(this.options.proxy) + + config.request = { + ...config.request, + ...{ httpAgent: socksProxyAgent, httpsAgent: socksProxyAgent } + } + } else { + config.request = { ...config.request, ...{ proxy } } + } + } + const _programs = await this.grabber.grab( channel, date, From 85176799987168a708c4ca75c71951adb8020ab1 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:03:00 +0300 Subject: [PATCH 07/24] Update grab.ts --- scripts/commands/epg/grab.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/commands/epg/grab.ts b/scripts/commands/epg/grab.ts index a0d63037..c38b22b9 100644 --- a/scripts/commands/epg/grab.ts +++ b/scripts/commands/epg/grab.ts @@ -16,6 +16,7 @@ program .option('-l, --lang ', 'Filter channels by language (ISO 639-2 code)') .option('-t, --timeout ', 'Override the default timeout for each request') .option('-d, --delay ', 'Override the default delay between request') + .option('-x, --proxy ', 'Use the specified proxy') .option( '--days ', 'Override the number of days for which the program will be loaded (defaults to the value from the site config)', @@ -42,6 +43,7 @@ export type GrabOptions = { lang?: string days?: number cron?: string + proxy?: string } const options: GrabOptions = program.opts() From 7b9fcf3851ae16276b5f792b4f925322f2c34589 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:03:41 +0300 Subject: [PATCH 08/24] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index eb966322..e1840292 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,7 @@ Options: -l, --lang Filter channels by language (ISO 639-2 code) -t, --timeout Override the default timeout for each request -d, --delay Override the default delay between request + -x, --proxy Use the specified proxy (example: "socks5://username:password@127.0.0.1:1234") --days Override the number of days for which the program will be loaded (defaults to the value from the site config) --maxConnections Limit on the number of concurrent requests (default: 1) From 5652ed22c6454cda769a41b3e6a0f28454b84ceb Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:52:53 +0300 Subject: [PATCH 09/24] Update SITES.md --- tests/__data__/expected/SITES.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tests/__data__/expected/SITES.md b/tests/__data__/expected/SITES.md index 5f8597e3..4b99e838 100644 --- a/tests/__data__/expected/SITES.md +++ b/tests/__data__/expected/SITES.md @@ -1,14 +1,12 @@ # Sites -\* Total number of channels / with a valid `xmltv-id` - - + - - - + + +
SiteChannels *StatusNotes
SiteChannels
(total / with xmltv-id)
StatusNotes
iltalehti.fi142 / 44🟡https://github.com/iptv-org/epg/issues/2396
indihometv.com130 / 124🟢
kan.org.il6 / 6🔴https://github.com/iptv-org/epg/issues/2273
iltalehti.fi14244🟡https://github.com/iptv-org/epg/issues/2396
indihometv.com130124🟢
kan.org.il66🔴https://github.com/iptv-org/epg/issues/2273
From e17ce1c403f7d588f3dee6bb28c18f46978920e7 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:53:02 +0300 Subject: [PATCH 10/24] Update _sites.md --- scripts/templates/_sites.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/templates/_sites.md b/scripts/templates/_sites.md index a4c4b906..46191a4e 100644 --- a/scripts/templates/_sites.md +++ b/scripts/templates/_sites.md @@ -1,5 +1,3 @@ # Sites -\* Total number of channels / with a valid `xmltv-id` - _TABLE_ From eef2bf2815b63a739601f26b60c6ac6246793136 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:53:09 +0300 Subject: [PATCH 11/24] Update htmlTable.ts --- scripts/core/htmlTable.ts | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/scripts/core/htmlTable.ts b/scripts/core/htmlTable.ts index 72d6bd8d..144ba01b 100644 --- a/scripts/core/htmlTable.ts +++ b/scripts/core/htmlTable.ts @@ -2,9 +2,15 @@ type Column = { name: string nowrap?: boolean align?: string + colspan?: number } -type DataItem = string[] +type DataItem = { + value: string + nowrap?: boolean + align?: string + colspan?: number +}[] export class HTMLTable { data: DataItem[] @@ -20,20 +26,23 @@ export class HTMLTable { output += ' \r\n ' for (const column of this.columns) { - output += `${column.name}` + const nowrap = column.nowrap ? ' nowrap' : '' + const align = column.align ? ` align="${column.align}"` : '' + const colspan = column.colspan ? ` colspan="${column.colspan}"` : '' + + output += `${column.name}` } output += '\r\n \r\n' output += ' \r\n' - for (const item of this.data) { + for (const row of this.data) { output += ' ' - let i = 0 - for (const prop in item) { - const column = this.columns[i] - const nowrap = column.nowrap ? ' nowrap' : '' - const align = column.align ? ` align="${column.align}"` : '' - output += `${item[prop]}` - i++ + for (const item of row) { + const nowrap = item.nowrap ? ' nowrap' : '' + const align = item.align ? ` align="${item.align}"` : '' + const colspan = item.colspan ? ` colspan="${item.colspan}"` : '' + + output += `${item.value}` } output += '\r\n' } From 71aca65d86a89272398e2fde3dab221b31009b6f Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:53:17 +0300 Subject: [PATCH 12/24] Update update.ts --- scripts/commands/sites/update.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/scripts/commands/sites/update.ts b/scripts/commands/sites/update.ts index 4b587df4..9ffc0b4b 100644 --- a/scripts/commands/sites/update.ts +++ b/scripts/commands/sites/update.ts @@ -40,19 +40,20 @@ async function main() { const data = new Collection() sites.forEach((site: Site) => { data.add([ - `${site.domain}`, - `${site.totalChannels} / ${site.markedChannels}`, - site.getStatus().emoji, - site.getIssues().all().join(', ') + { value: `${site.domain}` }, + { value: site.totalChannels, align: 'right' }, + { value: site.markedChannels, align: 'right' }, + { value: site.getStatus().emoji, align: 'center' }, + { value: site.getIssues().all().join(', ') } ]) }) logger.info('updating sites.md...') const table = new HTMLTable(data.all(), [ - { name: 'Site' }, - { name: 'Channels *', align: 'center' }, - { name: 'Status' }, - { name: 'Notes' } + { name: 'Site', align: 'left' }, + { name: 'Channels
(total / with xmltv-id)', colspan: 2, align: 'left' }, + { name: 'Status', align: 'left' }, + { name: 'Notes', align: 'left' } ]) const rootStorage = new Storage(ROOT_DIR) const sitesTemplate = await new Storage().load('scripts/templates/_sites.md') From 01b99fe98f4a161fc6d7f497e239fddcb56b8a09 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:53:27 +0300 Subject: [PATCH 13/24] Update SITES.md --- SITES.md | 444 +++++++++++++++++++++++++++---------------------------- 1 file changed, 221 insertions(+), 223 deletions(-) diff --git a/SITES.md b/SITES.md index 6324c2ee..f22dba8f 100644 --- a/SITES.md +++ b/SITES.md @@ -1,231 +1,229 @@ # Sites -\* Total number of channels / with a valid `xmltv-id` - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SiteChannels *StatusNotes
SiteChannels
(total / with xmltv-id)
StatusNotes
9tv.co.il1 / 1🟢
abc.net.au540 / 55🟢
allente.dk74 / 44🟢
allente.fi71 / 25🟢
allente.no84 / 53🟢
allente.se92 / 92🟢
andorradifusio.ad1 / 1🟢
anteltv.com.uy53 / 47🟢
antennaeurope.gr1 / 1🟢
antennapacific.gr1 / 1🟢
antennasatellite.gr1 / 1🟢
arianaafgtv.com1 / 1🟢
arianatelevision.com1 / 1🟢
arirang.com3 / 3🟢
artonline.tv5 / 5🟢
awilime.com111 / 0🟢
bein.com160 / 160🟢
beinsports.com104 / 81🟢
berrymedia.co.kr5 / 5🟢
cablego.com.pe100 / 20🟢
cableplus.com.uy171 / 47🟢
canalplus.com11591 / 212🟢
cgates.lt102 / 61🟢
chada.ma1 / 1🟢
chaines-tv.orange.fr296 / 147🟢
clickthecity.com32 / 30🟢
content.astro.com.my157 / 112🟢
cosmotetv.gr108 / 0🟢
cubmu.com174 / 122🟢
cyta.com.cy116 / 0🟢
dens.tv67 / 64🟢
digea.gr92 / 0🟢
digiturk.com.tr108 / 107🟢
directv.com1043 / 698🔴https://github.com/iptv-org/epg/issues/2284
directv.com.ar412 / 229🔴https://github.com/iptv-org/epg/issues/2339
directv.com.uy143 / 142🟢
dishtv.in394 / 287🔴https://github.com/iptv-org/epg/issues/2445
dna.fi122 / 0🟢
dsmart.com.tr104 / 90🟢
dstv.com6983 / 181🟢
elcinema.com224 / 193🟢
ena.skylifetv.co.kr6 / 6🟢
energeek.cl6 / 3🟢
entertainment.ie109 / 95🟢
epg.112114.xyz930 / 1🟢
epg.iptvx.one2862 / 0🟢
epg.telemach.ba259 / 0🟢
epg.telemach.me216 / 0🟢
firstmedia.com116 / 101🟢
foxsports.com.au7 / 7🟢
foxtel.com.au155 / 87🟢
freeview.co.uk165 / 89🟢
frikanalen.no1 / 1🟢
galamtv.kz27 / 22🟢
gatotv.com475 / 362🟢
getafteritmedia.com5 / 5🟢
gigatv.3bbtv.co.th79 / 38🟢
guiadetv.com124 / 0🟢
guida.tv88 / 88🟢
guidatv.sky.it168 / 153🟢
horizon.tv184 / 172🟢
hoy.tv3 / 1🟢
i.mjh.nz6458 / 1488🟢
i24news.tv4 / 3🟢
iltalehti.fi142 / 44🟢
indihometv.com130 / 124🟢
ionplustv.com1 / 1🟢
ipko.tv194 / 152🟢
jiotv.com1094 / 0🟢
kan.org.il3 / 3🔴https://github.com/iptv-org/epg/issues/2273
knr.gl1 / 1🟢
kvf.fo1 / 1🟢
m.tv.sms.cz1027 / 451🟢
m.tving.com30 / 26🟢
magticom.ge240 / 110🟢
mako.co.il1 / 1🟢
maxtvgo.mk110 / 48🟢
mediagenie.co.kr5 / 4🟢
mediaklikk.hu8 / 8🟢
mediasetinfinity.mediaset.it13 / 13🟢
melita.com127 / 111🟢
meo.pt216 / 127🟢
meuguia.tv102 / 97🟢
mewatch.sg25 / 24🟢
mi.tv2084 / 620🟢
mncvision.id276 / 223🟢
moji.id1 / 1🟢
mojmaxtv.hrvatskitelekom.hr243 / 0🟢
mon-programme-tv.be111 / 95🟢
movistarplus.es178 / 0🟢
mtel.ba417 / 220🟢
mts.rs457 / 0🟢
mujtvprogram.cz216 / 203🟢
musor.tv181 / 146🟢
mysky.com.ph115 / 43🟢
mytelly.co.uk488 / 401🟢
mytvsuper.com108 / 99🟢
neo.io337 / 241🟢
nhkworldpremium.com2 / 2🟢
nhl.com1 / 1🟢
nostv.pt168 / 141🟢
novacyprus.com29 / 24🟢
novasports.gr16 / 16🟢
nowplayer.now.com288 / 229🟢
nuevosiglo.com.uy173 / 47🟢
nzxmltv.com532 / 118🟢
ontvtonight.com5177 / 532🟢
opto.sic.pt4 / 2🟢
orangetv.orange.es168 / 165🟢
osn.com118 / 98🟢
pbsguam.org1 / 1🟢
pickx.be378 / 332🟢
player.ee.co.uk241 / 206🟢
playtv.unifi.com.my66 / 61🟢
plex.tv170 / 119🟢
pluto.tv3302 / 0🟢
programacion-tv.elpais.com195 / 105🟢
programacion.tcc.com.uy149 / 56🟢
programetv.ro331 / 225🟢
programme-tv.net295 / 197🟢
programme-tv.vini.pf58 / 2🟢
programme.tvb.com8 / 6🟢
programtv.onet.pl589 / 315🟢
raiplay.it17 / 13🟢
reportv.com.ar163 / 97🟢
rikstv.no80 / 0🟢
rotana.net32 / 28🟢
rtb.gov.bn3 / 3🔴https://github.com/iptv-org/epg/issues/2257
rthk.hk8 / 8🟢
rtmklik.rtm.gov.my8 / 6🟢
rtp.pt10 / 10🟢
ruv.is2 / 2🟢
s.mxtv.jp2 / 2🟢
sat.tv31173 / 277🟢
shahid.mbc.net306 / 120🟢
siba.com.co98 / 96🟢
singtel.com155 / 113🟢
sjonvarp.is13 / 13🟢
sky.co.nz111 / 93🟢
sky.com532 / 433🟢
sky.de75 / 75🟢
skylife.co.kr251 / 0🟢
skyperfectv.co.jp137 / 130🟢
snrt.ma11 / 5🟢
sporttv.pt9 / 8🟢
starhubtvplus.com232 / 208🟢
startimestv.com77 / 58🟢
stod2.is12 / 8🟢
streamingtvguides.com3066 / 1🟢
superguidatv.it204 / 163🟢
taiwanplus.com1 / 1🟢
tapdmv.com39 / 7🟢
telebilbao.es1 / 1🟢
telenet.tv260 / 91🟢
teliatv.ee342 / 233🟢
telkussa.fi66 / 32🟢
telsu.fi17 / 15🟢
thesportplus.com3 / 0🟢
tivie.id50 / 49🟢
tivu.tv69 / 66🟢
toonamiaftermath.com1 / 1🟢
turksatkablo.com.tr175 / 167🟢
tv-programme.telecablesat.fr268 / 250🟢
tv-spored.siol.net312 / 0🟢
tv.blue.ch1030 / 565🟢
tv.cctv.com94 / 88🟢
tv.dir.bg111 / 96🟢
tv.lv137 / 49🟢
tv.magenta.at307 / 228🟢
tv.mail.ru664 / 644🟢
tv.movistar.com.pe282 / 40🟢
tv.nu199 / 181🟢
tv.post.lu332 / 242🟢
tv.sfr.fr503 / 0🟢
tv.trueid.net266 / 74🟢
tv.yandex.ru97 / 67🟢
tv24.co.uk119 / 45🟢
tv24.se326 / 157🟢
tv2go.t-2.net335 / 254🟢
tvarenasport.com14 / 12🟢
tvarenasport.hr10 / 10🟢
tvcesoir.fr135 / 133🟢
tvcubana.icrt.cu10 / 10🟢
tvgids.nl115 / 90🟢
tvguide.com153 / 150🟢
tvguide.myjcom.jp145 / 140🟢
tvhebdo.com317 / 215🟢
tvheute.at53 / 53🟢
tvim.tv25 / 19🟢
tvinsider.com374 / 0🟢
tvireland.ie334 / 304🟢
tvmi.mt3 / 3🟢
tvmusor.hu99 / 68🟢
tvmustra.hu188 / 0🟢
tvpassport.com19287 / 0🟢
tvplus.com.tr143 / 134🟢
tvprofil.com5836 / 457🟢
tvtv.us2299 / 2256🟢
v3.myafn.dodmedia.osd.mil8 / 8🟢
vidio.com47 / 46🟢
virginmediatelevision.ie5 / 5🟢
virgintvgo.virginmedia.com238 / 195🟢
visionplus.id250 / 226🟢
vivoplay.com.br389 / 0🟢
vtm.be7 / 6🟢
walesi.com.fj9 / 8🟢
watch.sportsnet.ca8 / 8🟢
watchyour.tv40 / 24🟢
wavve.com77 / 76🟢
web.magentatv.de348 / 247🟢
webtv.delta.nl247 / 218🟢
winplay.co2 / 2🟢
worldfishingnetwork.com1 / 1🟢
www3.nhk.or.jp1 / 1🟢
xem.kplus.vn77 / 0🟢
xumo.tv350 / 32🟢
zap.co.ao114 / 64🟢
ziggogo.tv152 / 130🟢
znbc.co.zm4 / 4🟢
zuragt.mn36 / 25🟢
9tv.co.il11🟢
abc.net.au54055🟢
allente.dk7444🟢
allente.fi7125🟢
allente.no8453🟢
allente.se9292🟢
andorradifusio.ad11🟢
anteltv.com.uy5347🟢
antennaeurope.gr11🟢
antennapacific.gr11🟢
antennasatellite.gr11🟢
arianaafgtv.com11🟢
arianatelevision.com11🟢
arirang.com33🟢
artonline.tv55🟢
awilime.com1110🟢
bein.com160160🟢
beinsports.com10481🟢
berrymedia.co.kr55🟢
cablego.com.pe10020🟢
cableplus.com.uy17147🟢
canalplus.com11591212🟢
cgates.lt10261🟢
chada.ma11🟢
chaines-tv.orange.fr296147🟢
clickthecity.com3230🟢
content.astro.com.my157112🟢
cosmotetv.gr1080🟢
cubmu.com174122🟢
cyta.com.cy1160🟢
dens.tv6764🟢
digea.gr920🟢
digiturk.com.tr108107🟢
directv.com1043698🔴https://github.com/iptv-org/epg/issues/2284
directv.com.ar412229🔴https://github.com/iptv-org/epg/issues/2339
directv.com.uy143142🟢
dishtv.in394287🔴https://github.com/iptv-org/epg/issues/2445
dna.fi1220🟢
dsmart.com.tr10490🟢
dstv.com6983181🟢
elcinema.com224193🟢
ena.skylifetv.co.kr66🟢
energeek.cl63🟢
entertainment.ie10995🟢
epg.112114.xyz9301🟢
epg.iptvx.one28620🟢
epg.telemach.ba2590🟢
epg.telemach.me2160🟢
firstmedia.com116101🟢
foxsports.com.au77🟢
foxtel.com.au15587🟢
freeview.co.uk16589🟢
frikanalen.no11🟢
galamtv.kz2722🟢
gatotv.com475362🟢
getafteritmedia.com55🟢
gigatv.3bbtv.co.th7938🟢
guiadetv.com1240🟢
guida.tv8888🟢
guidatv.sky.it168153🟢
horizon.tv184172🟢
hoy.tv31🟢
i.mjh.nz64581488🟢
i24news.tv43🟢
iltalehti.fi14244🟢
indihometv.com130124🟢
ionplustv.com11🟢
ipko.tv194152🟢
jiotv.com10940🟢
kan.org.il33🔴https://github.com/iptv-org/epg/issues/2273
knr.gl11🟢
kvf.fo11🟢
m.tv.sms.cz1027451🟢
m.tving.com3026🟢
magticom.ge240110🟢
mako.co.il11🟢
maxtvgo.mk11048🟢
mediagenie.co.kr54🟢
mediaklikk.hu88🟢
mediasetinfinity.mediaset.it1313🟢
melita.com127111🟢
meo.pt216127🟢
meuguia.tv10297🟢
mewatch.sg2524🟢
mi.tv2084620🟢
mncvision.id276223🟢
moji.id11🟢
mojmaxtv.hrvatskitelekom.hr2430🟢
mon-programme-tv.be11195🟢
movistarplus.es1780🟢
mtel.ba417220🟢
mts.rs4570🟢
mujtvprogram.cz216203🟢
musor.tv181146🟢
mysky.com.ph11543🟢
mytelly.co.uk488401🟢
mytvsuper.com10899🟢
neo.io337241🟢
nhkworldpremium.com22🟢
nhl.com11🟢
nostv.pt168141🟢
novacyprus.com2924🟢
novasports.gr1616🟢
nowplayer.now.com288229🟢
nuevosiglo.com.uy17347🟢
nzxmltv.com532118🟢
ontvtonight.com5177532🟢
opto.sic.pt42🟢
orangetv.orange.es168165🟢
osn.com11898🟢
pbsguam.org11🟢
pickx.be378332🟢
player.ee.co.uk241206🟢
playtv.unifi.com.my6661🟢
plex.tv170119🟢
pluto.tv33020🟢
programacion-tv.elpais.com195105🟢
programacion.tcc.com.uy14956🟢
programetv.ro331225🟢
programme-tv.net295197🟢
programme-tv.vini.pf582🟢
programme.tvb.com86🟢
programtv.onet.pl589315🟢
raiplay.it1713🟢
reportv.com.ar16397🟢
rikstv.no800🟢
rotana.net3228🟢
rtb.gov.bn33🔴https://github.com/iptv-org/epg/issues/2257
rthk.hk88🟢
rtmklik.rtm.gov.my86🟢
rtp.pt1010🟢
ruv.is22🟢
s.mxtv.jp22🟢
sat.tv31173277🟢
shahid.mbc.net306120🟢
siba.com.co9896🟢
singtel.com155113🟢
sjonvarp.is1313🟢
sky.co.nz11193🟢
sky.com532433🟢
sky.de7575🟢
skylife.co.kr2510🟢
skyperfectv.co.jp137130🟢
snrt.ma115🟢
sporttv.pt98🟢
starhubtvplus.com232208🟢
startimestv.com7758🟢
stod2.is128🟢
streamingtvguides.com30661🟢
superguidatv.it204163🟢
taiwanplus.com11🟢
tapdmv.com397🟢
telebilbao.es11🟢
telenet.tv26091🟢
teliatv.ee342233🟢
telkussa.fi6632🟢
telsu.fi1715🟢
thesportplus.com30🟢
tivie.id5049🟢
tivu.tv6966🟢
toonamiaftermath.com11🟢
turksatkablo.com.tr175167🟢
tv-programme.telecablesat.fr268250🟢
tv-spored.siol.net3120🟢
tv.blue.ch1030565🟢
tv.cctv.com9488🟢
tv.dir.bg11196🟢
tv.lv13749🟢
tv.magenta.at307228🟢
tv.mail.ru664644🟢
tv.movistar.com.pe28240🟢
tv.nu199181🟢
tv.post.lu332242🟢
tv.sfr.fr5030🟢
tv.trueid.net26674🟢
tv.yandex.ru9767🟢
tv24.co.uk11945🟢
tv24.se326157🟢
tv2go.t-2.net335254🟢
tvarenasport.com1412🟢
tvarenasport.hr1010🟢
tvcesoir.fr135133🟢
tvcubana.icrt.cu1010🟢
tvgids.nl11590🟢
tvguide.com153150🟡https://github.com/iptv-org/epg/issues/2644
tvguide.myjcom.jp145140🟢
tvhebdo.com317215🟢
tvheute.at5353🟢
tvim.tv2519🟢
tvinsider.com3740🟢
tvireland.ie334304🟢
tvmi.mt33🟢
tvmusor.hu9968🟢
tvmustra.hu1880🟢
tvpassport.com192870🟢
tvplus.com.tr143134🟢
tvprofil.com5836457🟢
tvtv.us22992256🟢
v3.myafn.dodmedia.osd.mil88🟢
vidio.com4746🟢
virginmediatelevision.ie55🟢
virgintvgo.virginmedia.com238195🟢
visionplus.id250226🟢
vivoplay.com.br3890🟢
vtm.be76🟢
walesi.com.fj98🟢
watch.sportsnet.ca88🟢
watchyour.tv4024🟢
wavve.com7776🟢
web.magentatv.de348247🟢
webtv.delta.nl247218🟢
winplay.co22🟢
worldfishingnetwork.com11🟢
www3.nhk.or.jp11🟢
xem.kplus.vn770🟢
xumo.tv35032🟢
zap.co.ao11464🟢
ziggogo.tv152130🟢
znbc.co.zm44🟢
zuragt.mn3625🟢
From 71ab07fbea1e4a0ce7f71052c1f05e3301d60310 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 25 Jan 2025 22:21:03 +0300 Subject: [PATCH 14/24] Update tests/__data__ --- tests/__data__/expected/custom_guide.xml | 3 --- tests/__data__/expected/guide.xml | 3 --- tests/__data__/expected/guide.xml.gz | Bin 385 -> 369 bytes 3 files changed, 6 deletions(-) diff --git a/tests/__data__/expected/custom_guide.xml b/tests/__data__/expected/custom_guide.xml index 41efdac8..a57b3322 100644 --- a/tests/__data__/expected/custom_guide.xml +++ b/tests/__data__/expected/custom_guide.xml @@ -9,9 +9,6 @@ Programme1 (example2.com) Program1 (example.com) Programme1 (example.com) -Programme1 (example2.com) Program1 (example2.com) -Program1 (example2.com) Program1 (example2.com) -Program1 (example2.com) \ No newline at end of file diff --git a/tests/__data__/expected/guide.xml b/tests/__data__/expected/guide.xml index 3de58428..66da48ee 100644 --- a/tests/__data__/expected/guide.xml +++ b/tests/__data__/expected/guide.xml @@ -9,9 +9,6 @@ Programme1 (example2.com) Program1 (example.com) Programme1 (example.com) -Programme1 (example2.com) Program1 (example2.com) -Program1 (example2.com) Program1 (example2.com) -Program1 (example2.com) \ No newline at end of file diff --git a/tests/__data__/expected/guide.xml.gz b/tests/__data__/expected/guide.xml.gz index e634dcdf7b1f693a63ccb139fc729a853a952c6f..fb9654e9306fc35871da65ca5b7c84a1fd713b42 100644 GIT binary patch literal 369 zcmV-%0gnD3iwFP!000006UCEVOT#b}hVKRcLkI|ptVy%FsifJ3;+-I(*Am*;1@mQ+ z&iU`9?t?k7&UMqfoV?+@59d9hqp4P4B7Bh6TDTyxaP!MH!Ug_&rO;IdA0KXd=MW5Y8pfbx zfoG6lLSjrX%nuJ}F=ASC2}GH}tFLn$)gI=w6y8eq-qTF+eA)srMc?je?PNX*!TL*t z_=G7dc~lrhQPZGkI(|n=WPK^pB1M*^L}4`WuE^j_P((siwQKaytGd_M_%^b-f~cbd zNefo;GgfV-VP*6tUWDSMV3BbZYAV}Qs4z+y?NJ}~Q`A2q1MawfA~-&4f&Yc6X$yVY zAwTO(<(N_&_`qD4t!#XO(*$D-PBF$90w0WB=ndk9-gMgXss#}w2a+{kgKL=IeJRD@ zcp Date: Sat, 25 Jan 2025 22:21:08 +0300 Subject: [PATCH 15/24] Update configLoader.ts --- scripts/core/configLoader.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/core/configLoader.ts b/scripts/core/configLoader.ts index 36c93d20..1beb3703 100644 --- a/scripts/core/configLoader.ts +++ b/scripts/core/configLoader.ts @@ -7,7 +7,7 @@ export class ConfigLoader { const fileUrl = pathToFileURL(filepath).toString() const config = (await import(fileUrl)).default const defaultConfig = { - days: 2, + days: 1, delay: 0, output: 'guide.xml', request: { From 7682eb28f1fe0d9151ed7412fa04f453963ba380 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 25 Jan 2025 22:24:26 +0300 Subject: [PATCH 16/24] Update example.com.test.js --- .../expected/sites/sites-init/example.com.test.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/tests/__data__/expected/sites/sites-init/example.com.test.js b/tests/__data__/expected/sites/sites-init/example.com.test.js index 37d2d7b3..f462b6ef 100644 --- a/tests/__data__/expected/sites/sites-init/example.com.test.js +++ b/tests/__data__/expected/sites/sites-init/example.com.test.js @@ -6,7 +6,7 @@ dayjs.extend(customParseFormat) dayjs.extend(utc) const date = dayjs.utc('2025-01-12', 'YYYY-MM-DD').startOf('d') -const channel = { site_id: 'bbc1', xmltv_id: 'BBCOne.uk' } +const channel = { site_id: 'bbc1' } it('can generate valid url', () => { expect(url({ channel, date })).toBe('https://example.com/api/bbc1/2025-01-12') @@ -32,11 +32,7 @@ it('can parse response', () => { }) it('can handle empty guide', () => { - const result = parser({ - date, - channel, - content: '' - }) + const results = parser({ content: '' }) - expect(result).toMatchObject([]) + expect(results).toMatchObject([]) }) From b9fe49f763d52a0307b8543355dd14cbfcffb3b1 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 25 Jan 2025 22:24:34 +0300 Subject: [PATCH 17/24] Update _test.js --- scripts/templates/_test.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/scripts/templates/_test.js b/scripts/templates/_test.js index 2bb4cebb..6375d7e7 100644 --- a/scripts/templates/_test.js +++ b/scripts/templates/_test.js @@ -6,7 +6,7 @@ dayjs.extend(customParseFormat) dayjs.extend(utc) const date = dayjs.utc('2025-01-12', 'YYYY-MM-DD').startOf('d') -const channel = { site_id: 'bbc1', xmltv_id: 'BBCOne.uk' } +const channel = { site_id: 'bbc1' } it('can generate valid url', () => { expect(url({ channel, date })).toBe('https://example.com/api/bbc1/2025-01-12') @@ -32,11 +32,7 @@ it('can parse response', () => { }) it('can handle empty guide', () => { - const result = parser({ - date, - channel, - content: '' - }) + const results = parser({ content: '' }) - expect(result).toMatchObject([]) + expect(results).toMatchObject([]) }) From 1affea63ca844099773a5c19adbfe6b4b8858f62 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 31 Jan 2025 20:19:07 +0300 Subject: [PATCH 18/24] Rename to .husky/channels_lint.sh --- .husky/{check_channels.sh => channels_lint.sh} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .husky/{check_channels.sh => channels_lint.sh} (100%) diff --git a/.husky/check_channels.sh b/.husky/channels_lint.sh similarity index 100% rename from .husky/check_channels.sh rename to .husky/channels_lint.sh From a592234794e7844ac8c996e4f443626ad34ef42e Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 31 Jan 2025 20:19:23 +0300 Subject: [PATCH 19/24] Rename to .husky/scripts_lint.sh --- .husky/{check_scripts.sh => scripts_lint.sh} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .husky/{check_scripts.sh => scripts_lint.sh} (100%) diff --git a/.husky/check_scripts.sh b/.husky/scripts_lint.sh similarity index 100% rename from .husky/check_scripts.sh rename to .husky/scripts_lint.sh From 4cb6f660705932021e72ea669687e8d42a7ff853 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 31 Jan 2025 20:20:04 +0300 Subject: [PATCH 20/24] Create channels_validate.sh --- .husky/channels_validate.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100755 .husky/channels_validate.sh diff --git a/.husky/channels_validate.sh b/.husky/channels_validate.sh new file mode 100755 index 00000000..e0fe710e --- /dev/null +++ b/.husky/channels_validate.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +channels_changed="$(git diff --staged --name-only --diff-filter=ACMR -- 'sites/**/*.channels.xml' | sed 's| |\\ |g')" + +if [ ! -z "$channels_changed" ]; then + npm run channels:validate -- $channels_changed +fi \ No newline at end of file From 765a638af1373f871e5eaa66ffb734d0e5861d10 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 31 Jan 2025 20:20:08 +0300 Subject: [PATCH 21/24] Update pre-commit --- .husky/pre-commit | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index ac5a8377..ec89363b 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,2 +1,3 @@ -.husky/check_scripts.sh -.husky/check_channels.sh \ No newline at end of file +.husky/scripts_lint.sh +.husky/channels_lint.sh +.husky/channels_validate.sh \ No newline at end of file From 96faa533257c10c849dd5188811ba0292ab1fb1a Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 31 Jan 2025 20:20:11 +0300 Subject: [PATCH 22/24] Update channels_lint.sh --- .husky/channels_lint.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/.husky/channels_lint.sh b/.husky/channels_lint.sh index f934e7a4..45a15a83 100755 --- a/.husky/channels_lint.sh +++ b/.husky/channels_lint.sh @@ -3,6 +3,5 @@ channels_changed="$(git diff --staged --name-only --diff-filter=ACMR -- 'sites/**/*.channels.xml' | sed 's| |\\ |g')" if [ ! -z "$channels_changed" ]; then - echo "npx eslint $channels_changed" npm run channels:lint -- $channels_changed fi \ No newline at end of file From f55f2bc807c33c5f7e84faf1ef44951651cead98 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 31 Jan 2025 20:20:13 +0300 Subject: [PATCH 23/24] Update scripts_lint.sh --- .husky/scripts_lint.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/.husky/scripts_lint.sh b/.husky/scripts_lint.sh index a29f7607..b6298c27 100755 --- a/.husky/scripts_lint.sh +++ b/.husky/scripts_lint.sh @@ -3,6 +3,5 @@ scripts_changed="$(git diff --staged --name-only --diff-filter=ACMR -- 'tests/**/*.ts' 'tests/**/*.js' 'scripts/**/*.ts' 'scripts/**/*.mts' 'scripts/**/*.js' 'sites/**/*.js' 'sites/**/*.ts' | sed 's| |\\ |g')" if [ ! -z "$scripts_changed" ]; then - echo "npx eslint $scripts_changed" npx eslint $scripts_changed fi \ No newline at end of file From 103a6e7227c472b06006a345f626023884f2c737 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 1 Feb 2025 00:03:19 +0300 Subject: [PATCH 24/24] Update deps --- package-lock.json | 30 ++++++++++++++++-------------- package.json | 4 ++-- yarn.lock | 17 +++++++++-------- 3 files changed, 27 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index a6b4180f..7c8e0bb2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@eslint/eslintrc": "^3.2.0", "@eslint/js": "^9.17.0", "@freearhey/core": "^0.5.1", - "@ntlab/sfetch": "^1.0.0", + "@ntlab/sfetch": "^1.2.0", "@octokit/core": "^6.1.3", "@octokit/plugin-paginate-rest": "^11.3.6", "@octokit/plugin-rest-endpoint-methods": "^13.2.6", @@ -38,7 +38,7 @@ "csv-parser": "^3.0.0", "cwait": "^1.1.2", "dayjs": "^1.11.10", - "epg-grabber": "^0.37.5", + "epg-grabber": "^0.38.0", "epg-parser": "^0.3.1", "eslint": "^9.17.0", "eslint-config-prettier": "^9.0.0", @@ -1864,9 +1864,9 @@ } }, "node_modules/@ntlab/sfetch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@ntlab/sfetch/-/sfetch-1.0.0.tgz", - "integrity": "sha512-AWrC43z1TncvB7S7dl9Wn8xZpCqdKFBfXqaN3BXPfJeS3gxV9Fm86eAsW95YdXTOgPWbCC/GAgVuXi6Aot6DkQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ntlab/sfetch/-/sfetch-1.2.0.tgz", + "integrity": "sha512-9SE4NnqWo8l6mG0rnAkgng6ozSamIpF3EC+GOTQGGa6eAC0tNJvzrylMz6YRjjEGH6mOfn7ZBAuKj5WIZUul6A==", "dependencies": { "axios": "^1.7.9" } @@ -4193,9 +4193,9 @@ } }, "node_modules/epg-grabber": { - "version": "0.37.5", - "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.5.tgz", - "integrity": "sha512-mkT22NU5docsw6qJByBC5oMKFYETyX/PU7Iq3MQ1MS4A+C2Ale6tm+QN7BRW/9Cd5/szfr/YdkzDUZaoyO5vvw==", + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.38.0.tgz", + "integrity": "sha512-jbwTgi6G7e+zrb2oNC0C7mcQYoRkFnvhXCurexeICaEy4avRB6WS5rD/yfqYoiqaXOM3x1BNBpCKFYoS7Ob5YA==", "dependencies": { "axios": "^1.6.1", "axios-cache-interceptor": "^0.10.3", @@ -4210,6 +4210,7 @@ "http-cookie-agent": "^6.0.8", "lodash": "^4.17.21", "node-gzip": "^1.1.2", + "socks-proxy-agent": "^8.0.5", "tough-cookie": "^5.0.0", "winston": "^3.3.3", "xml-js": "^1.6.11" @@ -9719,9 +9720,9 @@ } }, "@ntlab/sfetch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@ntlab/sfetch/-/sfetch-1.0.0.tgz", - "integrity": "sha512-AWrC43z1TncvB7S7dl9Wn8xZpCqdKFBfXqaN3BXPfJeS3gxV9Fm86eAsW95YdXTOgPWbCC/GAgVuXi6Aot6DkQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ntlab/sfetch/-/sfetch-1.2.0.tgz", + "integrity": "sha512-9SE4NnqWo8l6mG0rnAkgng6ozSamIpF3EC+GOTQGGa6eAC0tNJvzrylMz6YRjjEGH6mOfn7ZBAuKj5WIZUul6A==", "requires": { "axios": "^1.7.9" } @@ -11338,9 +11339,9 @@ "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" }, "epg-grabber": { - "version": "0.37.5", - "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.5.tgz", - "integrity": "sha512-mkT22NU5docsw6qJByBC5oMKFYETyX/PU7Iq3MQ1MS4A+C2Ale6tm+QN7BRW/9Cd5/szfr/YdkzDUZaoyO5vvw==", + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.38.0.tgz", + "integrity": "sha512-jbwTgi6G7e+zrb2oNC0C7mcQYoRkFnvhXCurexeICaEy4avRB6WS5rD/yfqYoiqaXOM3x1BNBpCKFYoS7Ob5YA==", "requires": { "axios": "^1.6.1", "axios-cache-interceptor": "^0.10.3", @@ -11355,6 +11356,7 @@ "http-cookie-agent": "^6.0.8", "lodash": "^4.17.21", "node-gzip": "^1.1.2", + "socks-proxy-agent": "^8.0.5", "tough-cookie": "^5.0.0", "winston": "^3.3.3", "xml-js": "^1.6.11" diff --git a/package.json b/package.json index df39e736..95072df8 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "@eslint/eslintrc": "^3.2.0", "@eslint/js": "^9.17.0", "@freearhey/core": "^0.5.1", - "@ntlab/sfetch": "^1.0.0", + "@ntlab/sfetch": "^1.2.0", "@octokit/core": "^6.1.3", "@octokit/plugin-paginate-rest": "^11.3.6", "@octokit/plugin-rest-endpoint-methods": "^13.2.6", @@ -67,7 +67,7 @@ "csv-parser": "^3.0.0", "cwait": "^1.1.2", "dayjs": "^1.11.10", - "epg-grabber": "^0.37.5", + "epg-grabber": "^0.38.0", "epg-parser": "^0.3.1", "eslint": "^9.17.0", "eslint-config-prettier": "^9.0.0", diff --git a/yarn.lock b/yarn.lock index de4affe8..15726e5c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -741,10 +741,10 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@ntlab/sfetch@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@ntlab/sfetch/-/sfetch-1.0.0.tgz" - integrity sha512-AWrC43z1TncvB7S7dl9Wn8xZpCqdKFBfXqaN3BXPfJeS3gxV9Fm86eAsW95YdXTOgPWbCC/GAgVuXi6Aot6DkQ== +"@ntlab/sfetch@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@ntlab/sfetch/-/sfetch-1.2.0.tgz" + integrity sha512-9SE4NnqWo8l6mG0rnAkgng6ozSamIpF3EC+GOTQGGa6eAC0tNJvzrylMz6YRjjEGH6mOfn7ZBAuKj5WIZUul6A== dependencies: axios "^1.7.9" @@ -2158,10 +2158,10 @@ entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: resolved "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz" integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== -epg-grabber@^0.37.5: - version "0.37.5" - resolved "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.5.tgz" - integrity sha512-mkT22NU5docsw6qJByBC5oMKFYETyX/PU7Iq3MQ1MS4A+C2Ale6tm+QN7BRW/9Cd5/szfr/YdkzDUZaoyO5vvw== +epg-grabber@^0.38.0: + version "0.38.0" + resolved "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.38.0.tgz" + integrity sha512-jbwTgi6G7e+zrb2oNC0C7mcQYoRkFnvhXCurexeICaEy4avRB6WS5rD/yfqYoiqaXOM3x1BNBpCKFYoS7Ob5YA== dependencies: axios "^1.6.1" axios-cache-interceptor "^0.10.3" @@ -2176,6 +2176,7 @@ epg-grabber@^0.37.5: http-cookie-agent "^6.0.8" lodash "^4.17.21" node-gzip "^1.1.2" + socks-proxy-agent "^8.0.5" tough-cookie "^5.0.0" winston "^3.3.3" xml-js "^1.6.11"