diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml new file mode 100644 index 000000000..ad1bd9022 --- /dev/null +++ b/.github/workflows/format.yml @@ -0,0 +1,62 @@ +name: format +on: + workflow_dispatch: + # pull_request: + # types: + # - closed +jobs: + main: + # if: ${{ github.event.pull_request.merged == true }} + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 2 + - uses: getsentry/action-github-app-token@v2 + if: ${{ !env.ACT }} + id: create-app-token + with: + app_id: ${{ secrets.APP_ID }} + private_key: ${{ secrets.APP_PRIVATE_KEY }} + - uses: actions/checkout@v3 + if: ${{ !env.ACT }} + with: + fetch-depth: 2 + token: ${{ steps.create-app-token.outputs.token }} + - name: setup git + run: | + git config user.name "iptv-bot[bot]" + git config user.email "84861620+iptv-bot[bot]@users.noreply.github.com" + - uses: tj-actions/changed-files@v35 + id: files + with: + files: streams/*.m3u + - name: download data from api + run: | + mkdir -p temp/data + curl -L -o temp/data/blocklist.json https://iptv-org.github.io/api/blocklist.json + curl -L -o temp/data/channels.json https://iptv-org.github.io/api/channels.json + - uses: actions/setup-node@v3 + if: ${{ !env.ACT }} + with: + node-version: 18 + cache: 'npm' + - name: install dependencies + run: npm install + - name: format internal playlists + run: npm run playlist:format + - name: check internal playlists + run: | + npm run playlist:lint + npm run playlist:validate + - run: git status + - name: commit changes to /streams + run: | + git add streams + git status + git commit -m "[Bot] Format /streams" -m "Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [format](https://github.com/iptv-org/iptv/actions/runs/${{ github.run_id }}) workflow." --no-verify + - name: push all changes to the repository + if: ${{ !env.ACT && github.ref == 'refs/heads/master' }} + run: git push diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml index 3e13b6b69..27b6319da 100644 --- a/.github/workflows/update.yml +++ b/.github/workflows/update.yml @@ -6,11 +6,9 @@ on: jobs: main: runs-on: ubuntu-latest - permissions: - contents: write steps: - uses: actions/checkout@v3 - - uses: getsentry/action-github-app-token@v2 + - uses: tibdex/github-app-token@v2 if: ${{ !env.ACT }} id: create-app-token with: @@ -33,8 +31,6 @@ jobs: run: npm install - name: load api data run: npm run api:load - - name: setup database - run: npm run db:create - name: update internal playlists run: npm run playlist:update --silent >> $GITHUB_OUTPUT id: playlist-update diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f2950166c..a83661b00 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -123,21 +123,22 @@ For scripts to work, you must have [Node.js](https://nodejs.org/en) installed on To run scripts use the `npm run ` command. - `act:check`: allows to run the [check](https://github.com/iptv-org/iptv/blob/master/.github/workflows/check.yml) workflow locally. Depends on [nektos/act](https://github.com/nektos/act). +- `act:format`: allows to test the [format](https://github.com/iptv-org/iptv/blob/master/.github/workflows/update.yml) workflow locally. Depends on [nektos/act](https://github.com/nektos/act). - `act:update`: allows to test the [update](https://github.com/iptv-org/iptv/blob/master/.github/workflows/update.yml) workflow locally. Depends on [nektos/act](https://github.com/nektos/act). - `api:load`: downloads the latest channel and stream data from the [iptv-org/api](https://github.com/iptv-org/api). - `api:generate`: generates a JSON file with all streams for the [iptv-org/api](https://github.com/iptv-org/api) repository. - `api:deploy`: allows to manually upload a JSON file created via `api:generate` to the [iptv-org/api](https://github.com/iptv-org/api) repository. To run the script you must provide your [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) with write access to the repository. -- `db:create`: ัreates a temporary file `temp/database/streams.db` containing all links from the [/streams]() folder. -- `playlist:update`: triggers an update of internal playlists. The process involves processing approved requests from issues, URL normalization, and sorting links by channel name, quality, and label. +- `playlist:format`: formats internal playlists. The process includes [URL normalization](https://en.wikipedia.org/wiki/URI_normalization), duplicate removal, removing invalid id's and sorting links by channel name, quality, and label. +- `playlist:update`: triggers an update of internal playlists. The process involves processing approved requests from issues. +- `playlist:generate`: generates all public playlists. - `playlist:validate`: ัhecks ids and links in internal playlists for errors. - `playlist:lint`: ัhecks internal playlists for syntax errors. -- `playlist:generate`: generates all public playlists. - `playlist:deploy`: allows to manually publish all generated via `playlist:generate` playlists. To run the script you must provide your [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) with write access to the repository. - `readme:update`: updates the list of playlists in [README.md](README.md). - `report:create`: shows a list of all current requests and their status. -- `format`: (shorthand) sequentially runs the `db:create` and `db:create` commands. +- `format`: (shorthand) sequentially runs the `api:load` and `playlist:format` commands. - `check`: (shorthand) sequentially runs the `api:load`, `playlist:lint` and `playlist:validate` commands. -- `update`: (shorthand) sequentially runs the `api:load`, `db:create`, `playlist:generate`, `api:generate` and `readme:update` commands. +- `update`: (shorthand) sequentially runs the `api:load`, `playlist:generate`, `api:generate` and `readme:update` commands. - `deploy`: (shorthand) sequentially runs the `playlist:deploy` and `api:deploy` commands. - `report`: (shorthand) sequentially runs the `api:load` and `report:create` commands. - `test`: runs a test of all the scripts described above. @@ -148,5 +149,6 @@ To automate the run of the scripts described above, we use the [GitHub Actions w Each workflow includes its own set of scripts that can be run either manually or in response to an event. -- `check`: sequentially runs the `playlist:check` and `playlist:validate` scripts when a new pull request appears, and blocks the merge if it detects an error in it. -- `update`: every day at 0:00 UTC sequentially runs `api:load`, `db:create`, `playlist:update`, `playlist:lint`, `playlist:validate`, `playlist:generate`, `api:generate` and `readme:update` scripts and deploys the output files if successful. +- `check`: sequentially runs the `api:load`, `playlist:check` and `playlist:validate` scripts when a new pull request appears, and blocks the merge if it detects an error in it. +- `format`: sequentially runs `api:load`, `playlist:format`, `playlist:lint` and `playlist:validate` scripts. +- `update`: every day at 0:00 UTC sequentially runs `api:load`, `playlist:update`, `playlist:lint`, `playlist:validate`, `playlist:generate`, `api:generate` and `readme:update` scripts and deploys the output files if successful. diff --git a/README.md b/README.md index a340967c1..6f88ba061 100644 --- a/README.md +++ b/README.md @@ -59,35 +59,35 @@ Same thing, but split up into separate files: CategoryChannelsPlaylist - Auto15https://iptv-org.github.io/iptv/categories/auto.m3u Animation50https://iptv-org.github.io/iptv/categories/animation.m3u + Auto15https://iptv-org.github.io/iptv/categories/auto.m3u Business57https://iptv-org.github.io/iptv/categories/business.m3u Classic55https://iptv-org.github.io/iptv/categories/classic.m3u Comedy57https://iptv-org.github.io/iptv/categories/comedy.m3u Cooking23https://iptv-org.github.io/iptv/categories/cooking.m3u - Culture76https://iptv-org.github.io/iptv/categories/culture.m3u + Culture79https://iptv-org.github.io/iptv/categories/culture.m3u Documentary64https://iptv-org.github.io/iptv/categories/documentary.m3u Education116https://iptv-org.github.io/iptv/categories/education.m3u - Entertainment354https://iptv-org.github.io/iptv/categories/entertainment.m3u + Entertainment356https://iptv-org.github.io/iptv/categories/entertainment.m3u Family40https://iptv-org.github.io/iptv/categories/family.m3u - General1101https://iptv-org.github.io/iptv/categories/general.m3u + General1123https://iptv-org.github.io/iptv/categories/general.m3u Kids182https://iptv-org.github.io/iptv/categories/kids.m3u - Legislative166https://iptv-org.github.io/iptv/categories/legislative.m3u + Legislative167https://iptv-org.github.io/iptv/categories/legislative.m3u Lifestyle79https://iptv-org.github.io/iptv/categories/lifestyle.m3u - Movies274https://iptv-org.github.io/iptv/categories/movies.m3u - Music483https://iptv-org.github.io/iptv/categories/music.m3u - News705https://iptv-org.github.io/iptv/categories/news.m3u + Movies275https://iptv-org.github.io/iptv/categories/movies.m3u + Music486https://iptv-org.github.io/iptv/categories/music.m3u + News707https://iptv-org.github.io/iptv/categories/news.m3u Outdoor44https://iptv-org.github.io/iptv/categories/outdoor.m3u Relax16https://iptv-org.github.io/iptv/categories/relax.m3u - Religious438https://iptv-org.github.io/iptv/categories/religious.m3u - Series160https://iptv-org.github.io/iptv/categories/series.m3u + Religious441https://iptv-org.github.io/iptv/categories/religious.m3u Science25https://iptv-org.github.io/iptv/categories/science.m3u + Series160https://iptv-org.github.io/iptv/categories/series.m3u Shop74https://iptv-org.github.io/iptv/categories/shop.m3u - Sports205https://iptv-org.github.io/iptv/categories/sports.m3u + Sports207https://iptv-org.github.io/iptv/categories/sports.m3u Travel30https://iptv-org.github.io/iptv/categories/travel.m3u Weather14https://iptv-org.github.io/iptv/categories/weather.m3u XXX46https://iptv-org.github.io/iptv/categories/xxx.m3u - Undefined5262https://iptv-org.github.io/iptv/categories/undefined.m3u + Undefined5263https://iptv-org.github.io/iptv/categories/undefined.m3u @@ -118,7 +118,7 @@ Same thing, but split up into separate files: Albanian58https://iptv-org.github.io/iptv/languages/sqi.m3u Alemannic1https://iptv-org.github.io/iptv/languages/gsw.m3u Amharic5https://iptv-org.github.io/iptv/languages/amh.m3u - Arabic379https://iptv-org.github.io/iptv/languages/ara.m3u + Arabic380https://iptv-org.github.io/iptv/languages/ara.m3u Armenian29https://iptv-org.github.io/iptv/languages/hye.m3u Assamese7https://iptv-org.github.io/iptv/languages/asm.m3u Assyrian Neo-Aramaic1https://iptv-org.github.io/iptv/languages/aii.m3u @@ -142,28 +142,28 @@ Same thing, but split up into separate files: Dholuo1https://iptv-org.github.io/iptv/languages/luo.m3u Dimili1https://iptv-org.github.io/iptv/languages/zza.m3u Dutch191https://iptv-org.github.io/iptv/languages/nld.m3u - English2177https://iptv-org.github.io/iptv/languages/eng.m3u - Estonian8https://iptv-org.github.io/iptv/languages/est.m3u + English2181https://iptv-org.github.io/iptv/languages/eng.m3u + Estonian9https://iptv-org.github.io/iptv/languages/est.m3u Ewe1https://iptv-org.github.io/iptv/languages/ewe.m3u Faroese1https://iptv-org.github.io/iptv/languages/fao.m3u Fataleka1https://iptv-org.github.io/iptv/languages/far.m3u Filipino1https://iptv-org.github.io/iptv/languages/fil.m3u Finnish25https://iptv-org.github.io/iptv/languages/fin.m3u - French364https://iptv-org.github.io/iptv/languages/fra.m3u + French378https://iptv-org.github.io/iptv/languages/fra.m3u Galician12https://iptv-org.github.io/iptv/languages/glg.m3u Galolen1https://iptv-org.github.io/iptv/languages/gal.m3u Georgian8https://iptv-org.github.io/iptv/languages/kat.m3u German281https://iptv-org.github.io/iptv/languages/deu.m3u Gikuyu2https://iptv-org.github.io/iptv/languages/kik.m3u Goan Konkani1https://iptv-org.github.io/iptv/languages/gom.m3u - Greek124https://iptv-org.github.io/iptv/languages/ell.m3u + Greek125https://iptv-org.github.io/iptv/languages/ell.m3u Greenlandic2https://iptv-org.github.io/iptv/languages/kal.m3u Gujarati10https://iptv-org.github.io/iptv/languages/guj.m3u Haitian5https://iptv-org.github.io/iptv/languages/hat.m3u Hausa1https://iptv-org.github.io/iptv/languages/hau.m3u Hebrew13https://iptv-org.github.io/iptv/languages/heb.m3u Hindi163https://iptv-org.github.io/iptv/languages/hin.m3u - Hungarian111https://iptv-org.github.io/iptv/languages/hun.m3u + Hungarian112https://iptv-org.github.io/iptv/languages/hun.m3u Icelandic5https://iptv-org.github.io/iptv/languages/isl.m3u Indonesian182https://iptv-org.github.io/iptv/languages/ind.m3u Inuktitut1https://iptv-org.github.io/iptv/languages/iku.m3u @@ -178,11 +178,11 @@ Same thing, but split up into separate files: Kirghiz7https://iptv-org.github.io/iptv/languages/kir.m3u Konkani (macrolanguage)2https://iptv-org.github.io/iptv/languages/kok.m3u Korean112https://iptv-org.github.io/iptv/languages/kor.m3u - Kurdish23https://iptv-org.github.io/iptv/languages/kur.m3u + Kurdish24https://iptv-org.github.io/iptv/languages/kur.m3u Lahnda1https://iptv-org.github.io/iptv/languages/lah.m3u Lao9https://iptv-org.github.io/iptv/languages/lao.m3u Latin1https://iptv-org.github.io/iptv/languages/lat.m3u - Latvian9https://iptv-org.github.io/iptv/languages/lav.m3u + Latvian10https://iptv-org.github.io/iptv/languages/lav.m3u Letzeburgesch3https://iptv-org.github.io/iptv/languages/ltz.m3u Lithuanian8https://iptv-org.github.io/iptv/languages/lit.m3u Macedonian34https://iptv-org.github.io/iptv/languages/mkd.m3u @@ -203,11 +203,11 @@ Same thing, but split up into separate files: Parsi-Dari2https://iptv-org.github.io/iptv/languages/prd.m3u Pashto18https://iptv-org.github.io/iptv/languages/pus.m3u Persian135https://iptv-org.github.io/iptv/languages/fas.m3u - Polish53https://iptv-org.github.io/iptv/languages/pol.m3u - Portuguese363https://iptv-org.github.io/iptv/languages/por.m3u + Polish54https://iptv-org.github.io/iptv/languages/pol.m3u + Portuguese364https://iptv-org.github.io/iptv/languages/por.m3u Romanian117https://iptv-org.github.io/iptv/languages/ron.m3u Romany1https://iptv-org.github.io/iptv/languages/rom.m3u - Russian301https://iptv-org.github.io/iptv/languages/rus.m3u + Russian302https://iptv-org.github.io/iptv/languages/rus.m3u Saint Lucian Creole French2https://iptv-org.github.io/iptv/languages/acf.m3u Santali1https://iptv-org.github.io/iptv/languages/sat.m3u Serbian82https://iptv-org.github.io/iptv/languages/srp.m3u @@ -217,12 +217,12 @@ Same thing, but split up into separate files: Slovak44https://iptv-org.github.io/iptv/languages/slk.m3u Slovenian16https://iptv-org.github.io/iptv/languages/slv.m3u Somali8https://iptv-org.github.io/iptv/languages/som.m3u - Spanish1830https://iptv-org.github.io/iptv/languages/spa.m3u + Spanish1853https://iptv-org.github.io/iptv/languages/spa.m3u Swahili14https://iptv-org.github.io/iptv/languages/swa.m3u - Swedish20https://iptv-org.github.io/iptv/languages/swe.m3u + Swedish19https://iptv-org.github.io/iptv/languages/swe.m3u Tagalog14https://iptv-org.github.io/iptv/languages/tgl.m3u Tajik2https://iptv-org.github.io/iptv/languages/tgk.m3u - Tamil62https://iptv-org.github.io/iptv/languages/tam.m3u + Tamil63https://iptv-org.github.io/iptv/languages/tam.m3u Telugu31https://iptv-org.github.io/iptv/languages/tel.m3u Tetum1https://iptv-org.github.io/iptv/languages/tet.m3u Thai83https://iptv-org.github.io/iptv/languages/tha.m3u @@ -238,7 +238,7 @@ Same thing, but split up into separate files: Wolof3https://iptv-org.github.io/iptv/languages/wol.m3u Yucatec Maya1https://iptv-org.github.io/iptv/languages/yua.m3u Yue Chinese10https://iptv-org.github.io/iptv/languages/yue.m3u - Undefined1283https://iptv-org.github.io/iptv/languages/undefined.m3u + Undefined1277https://iptv-org.github.io/iptv/languages/undefined.m3u @@ -264,15 +264,15 @@ Same thing, but split up into separate files: CountryChannelsPlaylist - ๐Ÿ‡ฆ๐Ÿ‡ซ Afghanistan31https://iptv-org.github.io/iptv/countries/af.m3u + ๐Ÿ‡ฆ๐Ÿ‡ซ Afghanistan32https://iptv-org.github.io/iptv/countries/af.m3u ๐Ÿ‡ฆ๐Ÿ‡ฑ Albania30https://iptv-org.github.io/iptv/countries/al.m3u - ๐Ÿ‡ฉ๐Ÿ‡ฟ Algeria51https://iptv-org.github.io/iptv/countries/dz.m3u + ๐Ÿ‡ฉ๐Ÿ‡ฟ Algeria52https://iptv-org.github.io/iptv/countries/dz.m3u ๐Ÿ‡ฆ๐Ÿ‡ธ American Samoa6https://iptv-org.github.io/iptv/countries/as.m3u ๐Ÿ‡ฆ๐Ÿ‡ฉ Andorra17https://iptv-org.github.io/iptv/countries/ad.m3u ๐Ÿ‡ฆ๐Ÿ‡ด Angola14https://iptv-org.github.io/iptv/countries/ao.m3u ๐Ÿ‡ฆ๐Ÿ‡ฎ Anguilla5https://iptv-org.github.io/iptv/countries/ai.m3u ๐Ÿ‡ฆ๐Ÿ‡ฌ Antigua and Barbuda7https://iptv-org.github.io/iptv/countries/ag.m3u - ๐Ÿ‡ฆ๐Ÿ‡ท Argentina313https://iptv-org.github.io/iptv/countries/ar.m3u + ๐Ÿ‡ฆ๐Ÿ‡ท Argentina316https://iptv-org.github.io/iptv/countries/ar.m3u       Buenos Aires30https://iptv-org.github.io/iptv/subdivisions/ar-b.m3u       Catamarca2https://iptv-org.github.io/iptv/subdivisions/ar-k.m3u       Chaco5https://iptv-org.github.io/iptv/subdivisions/ar-h.m3u @@ -302,24 +302,24 @@ Same thing, but split up into separate files: ๐Ÿ‡ฆ๐Ÿ‡น Austria48https://iptv-org.github.io/iptv/countries/at.m3u ๐Ÿ‡ฆ๐Ÿ‡ฟ Azerbaijan33https://iptv-org.github.io/iptv/countries/az.m3u ๐Ÿ‡ง๐Ÿ‡ธ Bahamas7https://iptv-org.github.io/iptv/countries/bs.m3u - ๐Ÿ‡ง๐Ÿ‡ญ Bahrain37https://iptv-org.github.io/iptv/countries/bh.m3u - ๐Ÿ‡ง๐Ÿ‡ฉ Bangladesh53https://iptv-org.github.io/iptv/countries/bd.m3u + ๐Ÿ‡ง๐Ÿ‡ญ Bahrain38https://iptv-org.github.io/iptv/countries/bh.m3u + ๐Ÿ‡ง๐Ÿ‡ฉ Bangladesh54https://iptv-org.github.io/iptv/countries/bd.m3u ๐Ÿ‡ง๐Ÿ‡ง Barbados6https://iptv-org.github.io/iptv/countries/bb.m3u ๐Ÿ‡ง๐Ÿ‡พ Belarus42https://iptv-org.github.io/iptv/countries/by.m3u ๐Ÿ‡ง๐Ÿ‡ช Belgium56https://iptv-org.github.io/iptv/countries/be.m3u ๐Ÿ‡ง๐Ÿ‡ฟ Belize6https://iptv-org.github.io/iptv/countries/bz.m3u ๐Ÿ‡ง๐Ÿ‡ฏ Benin19https://iptv-org.github.io/iptv/countries/bj.m3u ๐Ÿ‡ง๐Ÿ‡ฒ Bermuda4https://iptv-org.github.io/iptv/countries/bm.m3u - ๐Ÿ‡ง๐Ÿ‡น Bhutan7https://iptv-org.github.io/iptv/countries/bt.m3u - ๐Ÿ‡ง๐Ÿ‡ด Bolivia83https://iptv-org.github.io/iptv/countries/bo.m3u + ๐Ÿ‡ง๐Ÿ‡น Bhutan8https://iptv-org.github.io/iptv/countries/bt.m3u + ๐Ÿ‡ง๐Ÿ‡ด Bolivia94https://iptv-org.github.io/iptv/countries/bo.m3u       Cochabamba1https://iptv-org.github.io/iptv/subdivisions/bo-c.m3u -       La Paz1https://iptv-org.github.io/iptv/subdivisions/bo-l.m3u +       La Paz2https://iptv-org.github.io/iptv/subdivisions/bo-l.m3u       Oruro1https://iptv-org.github.io/iptv/subdivisions/bo-o.m3u -       Santa Cruz1https://iptv-org.github.io/iptv/subdivisions/bo-s.m3u +       Santa Cruz2https://iptv-org.github.io/iptv/subdivisions/bo-s.m3u ๐Ÿ‡ง๐Ÿ‡ฆ Bosnia and Herzegovina31https://iptv-org.github.io/iptv/countries/ba.m3u ๐Ÿ‡ง๐Ÿ‡ผ Botswana13https://iptv-org.github.io/iptv/countries/bw.m3u ๐Ÿ‡ง๐Ÿ‡ป Bouvet Island3https://iptv-org.github.io/iptv/countries/bv.m3u - ๐Ÿ‡ง๐Ÿ‡ท Brazil321https://iptv-org.github.io/iptv/countries/br.m3u + ๐Ÿ‡ง๐Ÿ‡ท Brazil322https://iptv-org.github.io/iptv/countries/br.m3u       Alagoas3https://iptv-org.github.io/iptv/subdivisions/br-al.m3u       Amazonas1https://iptv-org.github.io/iptv/subdivisions/br-am.m3u       Bahia5https://iptv-org.github.io/iptv/subdivisions/br-ba.m3u @@ -366,7 +366,7 @@ Same thing, but split up into separate files: ๐Ÿ‡ฐ๐Ÿ‡พ Cayman Islands5https://iptv-org.github.io/iptv/countries/ky.m3u ๐Ÿ‡จ๐Ÿ‡ซ Central African Republic12https://iptv-org.github.io/iptv/countries/cf.m3u ๐Ÿ‡น๐Ÿ‡ฉ Chad13https://iptv-org.github.io/iptv/countries/td.m3u - ๐Ÿ‡จ๐Ÿ‡ฑ Chile256https://iptv-org.github.io/iptv/countries/cl.m3u + ๐Ÿ‡จ๐Ÿ‡ฑ Chile259https://iptv-org.github.io/iptv/countries/cl.m3u       Biobio3https://iptv-org.github.io/iptv/subdivisions/cl-bi.m3u       Coquimbo1https://iptv-org.github.io/iptv/subdivisions/cl-co.m3u       La Araucania2https://iptv-org.github.io/iptv/subdivisions/cl-ar.m3u @@ -376,8 +376,7 @@ Same thing, but split up into separate files:       Nuble3https://iptv-org.github.io/iptv/subdivisions/cl-nb.m3u       Valparaiso2https://iptv-org.github.io/iptv/subdivisions/cl-vs.m3u ๐Ÿ‡จ๐Ÿ‡ณ China562https://iptv-org.github.io/iptv/countries/cn.m3u - ๐Ÿ‡จ๐Ÿ‡ด Colombia134https://iptv-org.github.io/iptv/countries/co.m3u -       San Andres, Providencia y Santa Catalina1https://iptv-org.github.io/iptv/subdivisions/co-sap.m3u + ๐Ÿ‡จ๐Ÿ‡ด Colombia137https://iptv-org.github.io/iptv/countries/co.m3u       Antioquia1https://iptv-org.github.io/iptv/subdivisions/co-ant.m3u       Atlantico1https://iptv-org.github.io/iptv/subdivisions/co-atl.m3u       Bolivar1https://iptv-org.github.io/iptv/subdivisions/co-bol.m3u @@ -391,23 +390,24 @@ Same thing, but split up into separate files:       Norte de Santander2https://iptv-org.github.io/iptv/subdivisions/co-nsa.m3u       Quindio1https://iptv-org.github.io/iptv/subdivisions/co-qui.m3u       Risaralda1https://iptv-org.github.io/iptv/subdivisions/co-ris.m3u +       San Andres, Providencia y Santa Catalina1https://iptv-org.github.io/iptv/subdivisions/co-sap.m3u       Tolima1https://iptv-org.github.io/iptv/subdivisions/co-tol.m3u       Valle del Cauca5https://iptv-org.github.io/iptv/subdivisions/co-vac.m3u - ๐Ÿ‡ฐ๐Ÿ‡ฒ Comoros40https://iptv-org.github.io/iptv/countries/km.m3u + ๐Ÿ‡ฐ๐Ÿ‡ฒ Comoros41https://iptv-org.github.io/iptv/countries/km.m3u ๐Ÿ‡จ๐Ÿ‡ฐ Cook Islands6https://iptv-org.github.io/iptv/countries/ck.m3u - ๐Ÿ‡จ๐Ÿ‡ท Costa Rica94https://iptv-org.github.io/iptv/countries/cr.m3u + ๐Ÿ‡จ๐Ÿ‡ท Costa Rica97https://iptv-org.github.io/iptv/countries/cr.m3u       Puntarenas1https://iptv-org.github.io/iptv/subdivisions/cr-p.m3u       San Jose1https://iptv-org.github.io/iptv/subdivisions/cr-sj.m3u ๐Ÿ‡ญ๐Ÿ‡ท Croatia27https://iptv-org.github.io/iptv/countries/hr.m3u - ๐Ÿ‡จ๐Ÿ‡บ Cuba49https://iptv-org.github.io/iptv/countries/cu.m3u + ๐Ÿ‡จ๐Ÿ‡บ Cuba53https://iptv-org.github.io/iptv/countries/cu.m3u ๐Ÿ‡จ๐Ÿ‡ผ Curacao10https://iptv-org.github.io/iptv/countries/cw.m3u ๐Ÿ‡จ๐Ÿ‡พ Cyprus41https://iptv-org.github.io/iptv/countries/cy.m3u ๐Ÿ‡จ๐Ÿ‡ฟ Czech Republic43https://iptv-org.github.io/iptv/countries/cz.m3u ๐Ÿ‡จ๐Ÿ‡ฉ Democratic Republic of the Congo33https://iptv-org.github.io/iptv/countries/cd.m3u ๐Ÿ‡ฉ๐Ÿ‡ฐ Denmark34https://iptv-org.github.io/iptv/countries/dk.m3u - ๐Ÿ‡ฉ๐Ÿ‡ฏ Djibouti45https://iptv-org.github.io/iptv/countries/dj.m3u + ๐Ÿ‡ฉ๐Ÿ‡ฏ Djibouti46https://iptv-org.github.io/iptv/countries/dj.m3u ๐Ÿ‡ฉ๐Ÿ‡ฒ Dominica5https://iptv-org.github.io/iptv/countries/dm.m3u - ๐Ÿ‡ฉ๐Ÿ‡ด Dominican Republic205https://iptv-org.github.io/iptv/countries/do.m3u + ๐Ÿ‡ฉ๐Ÿ‡ด Dominican Republic208https://iptv-org.github.io/iptv/countries/do.m3u       Distrito Nacional (Santo Domingo)2https://iptv-org.github.io/iptv/subdivisions/do-01.m3u       La Altagracia2https://iptv-org.github.io/iptv/subdivisions/do-11.m3u       La Vega3https://iptv-org.github.io/iptv/subdivisions/do-13.m3u @@ -417,23 +417,23 @@ Same thing, but split up into separate files:       Santiago1https://iptv-org.github.io/iptv/subdivisions/do-25.m3u       Valverde1https://iptv-org.github.io/iptv/subdivisions/do-27.m3u ๐Ÿ‡น๐Ÿ‡ฑ East Timor27https://iptv-org.github.io/iptv/countries/tl.m3u - ๐Ÿ‡ช๐Ÿ‡จ Ecuador79https://iptv-org.github.io/iptv/countries/ec.m3u + ๐Ÿ‡ช๐Ÿ‡จ Ecuador82https://iptv-org.github.io/iptv/countries/ec.m3u       Azuay1https://iptv-org.github.io/iptv/subdivisions/ec-a.m3u       Loja1https://iptv-org.github.io/iptv/subdivisions/ec-l.m3u       Orellana1https://iptv-org.github.io/iptv/subdivisions/ec-d.m3u - ๐Ÿ‡ช๐Ÿ‡ฌ Egypt76https://iptv-org.github.io/iptv/countries/eg.m3u - ๐Ÿ‡ธ๐Ÿ‡ป El Salvador64https://iptv-org.github.io/iptv/countries/sv.m3u + ๐Ÿ‡ช๐Ÿ‡ฌ Egypt77https://iptv-org.github.io/iptv/countries/eg.m3u + ๐Ÿ‡ธ๐Ÿ‡ป El Salvador67https://iptv-org.github.io/iptv/countries/sv.m3u ๐Ÿ‡ฌ๐Ÿ‡ถ Equatorial Guinea14https://iptv-org.github.io/iptv/countries/gq.m3u ๐Ÿ‡ช๐Ÿ‡ท Eritrea12https://iptv-org.github.io/iptv/countries/er.m3u - ๐Ÿ‡ช๐Ÿ‡ช Estonia23https://iptv-org.github.io/iptv/countries/ee.m3u + ๐Ÿ‡ช๐Ÿ‡ช Estonia24https://iptv-org.github.io/iptv/countries/ee.m3u ๐Ÿ‡ช๐Ÿ‡น Ethiopia18https://iptv-org.github.io/iptv/countries/et.m3u ๐Ÿ‡ซ๐Ÿ‡ฐ Falkland Islands3https://iptv-org.github.io/iptv/countries/fk.m3u ๐Ÿ‡ซ๐Ÿ‡ด Faroe Islands1https://iptv-org.github.io/iptv/countries/fo.m3u ๐Ÿ‡ซ๐Ÿ‡ฏ Fiji7https://iptv-org.github.io/iptv/countries/fj.m3u - ๐Ÿ‡ซ๐Ÿ‡ฎ Finland40https://iptv-org.github.io/iptv/countries/fi.m3u + ๐Ÿ‡ซ๐Ÿ‡ฎ Finland41https://iptv-org.github.io/iptv/countries/fi.m3u       Keski-Suomi1https://iptv-org.github.io/iptv/subdivisions/fi-08.m3u -       Pohjanmaa2https://iptv-org.github.io/iptv/subdivisions/fi-12.m3u - ๐Ÿ‡ซ๐Ÿ‡ท France242https://iptv-org.github.io/iptv/countries/fr.m3u +       Pohjanmaa3https://iptv-org.github.io/iptv/subdivisions/fi-12.m3u + ๐Ÿ‡ซ๐Ÿ‡ท France256https://iptv-org.github.io/iptv/countries/fr.m3u ๐Ÿ‡ฌ๐Ÿ‡ซ French Guiana7https://iptv-org.github.io/iptv/countries/gf.m3u ๐Ÿ‡ต๐Ÿ‡ซ French Polynesia7https://iptv-org.github.io/iptv/countries/pf.m3u ๐Ÿ‡น๐Ÿ‡ซ French Southern Territories12https://iptv-org.github.io/iptv/countries/tf.m3u @@ -442,12 +442,12 @@ Same thing, but split up into separate files: ๐Ÿ‡ฌ๐Ÿ‡ช Georgia20https://iptv-org.github.io/iptv/countries/ge.m3u ๐Ÿ‡ฉ๐Ÿ‡ช Germany266https://iptv-org.github.io/iptv/countries/de.m3u ๐Ÿ‡ฌ๐Ÿ‡ญ Ghana36https://iptv-org.github.io/iptv/countries/gh.m3u - ๐Ÿ‡ฌ๐Ÿ‡ท Greece117https://iptv-org.github.io/iptv/countries/gr.m3u + ๐Ÿ‡ฌ๐Ÿ‡ท Greece118https://iptv-org.github.io/iptv/countries/gr.m3u ๐Ÿ‡ฌ๐Ÿ‡ฑ Greenland6https://iptv-org.github.io/iptv/countries/gl.m3u ๐Ÿ‡ฌ๐Ÿ‡ฉ Grenada5https://iptv-org.github.io/iptv/countries/gd.m3u ๐Ÿ‡ฌ๐Ÿ‡ต Guadeloupe9https://iptv-org.github.io/iptv/countries/gp.m3u ๐Ÿ‡ฌ๐Ÿ‡บ Guam7https://iptv-org.github.io/iptv/countries/gu.m3u - ๐Ÿ‡ฌ๐Ÿ‡น Guatemala100https://iptv-org.github.io/iptv/countries/gt.m3u + ๐Ÿ‡ฌ๐Ÿ‡น Guatemala104https://iptv-org.github.io/iptv/countries/gt.m3u       Escuintla2https://iptv-org.github.io/iptv/subdivisions/gt-05.m3u       Izabal1https://iptv-org.github.io/iptv/subdivisions/gt-18.m3u       Quiche1https://iptv-org.github.io/iptv/subdivisions/gt-14.m3u @@ -461,11 +461,11 @@ Same thing, but split up into separate files: ๐Ÿ‡ฌ๐Ÿ‡ผ Guinea-Bissau12https://iptv-org.github.io/iptv/countries/gw.m3u ๐Ÿ‡ฌ๐Ÿ‡พ Guyana4https://iptv-org.github.io/iptv/countries/gy.m3u ๐Ÿ‡ญ๐Ÿ‡น Haiti40https://iptv-org.github.io/iptv/countries/ht.m3u - ๐Ÿ‡ญ๐Ÿ‡ณ Honduras107https://iptv-org.github.io/iptv/countries/hn.m3u + ๐Ÿ‡ญ๐Ÿ‡ณ Honduras110https://iptv-org.github.io/iptv/countries/hn.m3u ๐Ÿ‡ญ๐Ÿ‡ฐ Hong Kong21https://iptv-org.github.io/iptv/countries/hk.m3u - ๐Ÿ‡ญ๐Ÿ‡บ Hungary117https://iptv-org.github.io/iptv/countries/hu.m3u + ๐Ÿ‡ญ๐Ÿ‡บ Hungary118https://iptv-org.github.io/iptv/countries/hu.m3u ๐Ÿ‡ฎ๐Ÿ‡ธ Iceland16https://iptv-org.github.io/iptv/countries/is.m3u - ๐Ÿ‡ฎ๐Ÿ‡ณ India438https://iptv-org.github.io/iptv/countries/in.m3u + ๐Ÿ‡ฎ๐Ÿ‡ณ India439https://iptv-org.github.io/iptv/countries/in.m3u ๐Ÿ‡ฎ๐Ÿ‡ฉ Indonesia207https://iptv-org.github.io/iptv/countries/id.m3u       Aceh2https://iptv-org.github.io/iptv/subdivisions/id-ac.m3u       Bali2https://iptv-org.github.io/iptv/subdivisions/id-ba.m3u @@ -483,8 +483,8 @@ Same thing, but split up into separate files:       Kalimantan Timur2https://iptv-org.github.io/iptv/subdivisions/id-ki.m3u       Kepulauan Bangka Belitung1https://iptv-org.github.io/iptv/subdivisions/id-bb.m3u       Lampung3https://iptv-org.github.io/iptv/subdivisions/id-la.m3u -       Maluku Utara1https://iptv-org.github.io/iptv/subdivisions/id-mu.m3u       Maluku1https://iptv-org.github.io/iptv/subdivisions/id-ml.m3u +       Maluku Utara1https://iptv-org.github.io/iptv/subdivisions/id-mu.m3u       Nusa Tenggara Barat1https://iptv-org.github.io/iptv/subdivisions/id-nb.m3u       Nusa Tenggara Timur1https://iptv-org.github.io/iptv/subdivisions/id-nt.m3u       Papua2https://iptv-org.github.io/iptv/subdivisions/id-pp.m3u @@ -498,42 +498,42 @@ Same thing, but split up into separate files:       Yogyakarta4https://iptv-org.github.io/iptv/subdivisions/id-yo.m3u ๐Ÿ‡ฎ๐Ÿ‡ท Iran129https://iptv-org.github.io/iptv/countries/ir.m3u       Tehran2https://iptv-org.github.io/iptv/subdivisions/ir-23.m3u - ๐Ÿ‡ฎ๐Ÿ‡ถ Iraq126https://iptv-org.github.io/iptv/countries/iq.m3u + ๐Ÿ‡ฎ๐Ÿ‡ถ Iraq127https://iptv-org.github.io/iptv/countries/iq.m3u ๐Ÿ‡ฎ๐Ÿ‡ช Ireland22https://iptv-org.github.io/iptv/countries/ie.m3u ๐Ÿ‡ฎ๐Ÿ‡ฑ Israel21https://iptv-org.github.io/iptv/countries/il.m3u ๐Ÿ‡ฎ๐Ÿ‡น Italy409https://iptv-org.github.io/iptv/countries/it.m3u ๐Ÿ‡จ๐Ÿ‡ฎ Ivory Coast30https://iptv-org.github.io/iptv/countries/ci.m3u ๐Ÿ‡ฏ๐Ÿ‡ฒ Jamaica11https://iptv-org.github.io/iptv/countries/jm.m3u ๐Ÿ‡ฏ๐Ÿ‡ต Japan48https://iptv-org.github.io/iptv/countries/jp.m3u - ๐Ÿ‡ฏ๐Ÿ‡ด Jordan61https://iptv-org.github.io/iptv/countries/jo.m3u + ๐Ÿ‡ฏ๐Ÿ‡ด Jordan62https://iptv-org.github.io/iptv/countries/jo.m3u ๐Ÿ‡ฐ๐Ÿ‡ฟ Kazakhstan51https://iptv-org.github.io/iptv/countries/kz.m3u ๐Ÿ‡ฐ๐Ÿ‡ช Kenya54https://iptv-org.github.io/iptv/countries/ke.m3u ๐Ÿ‡ฐ๐Ÿ‡ฎ Kiribati6https://iptv-org.github.io/iptv/countries/ki.m3u ๐Ÿ‡ฝ๐Ÿ‡ฐ Kosovo25https://iptv-org.github.io/iptv/countries/xk.m3u - ๐Ÿ‡ฐ๐Ÿ‡ผ Kuwait46https://iptv-org.github.io/iptv/countries/kw.m3u + ๐Ÿ‡ฐ๐Ÿ‡ผ Kuwait47https://iptv-org.github.io/iptv/countries/kw.m3u ๐Ÿ‡ฐ๐Ÿ‡ฌ Kyrgyzstan9https://iptv-org.github.io/iptv/countries/kg.m3u ๐Ÿ‡ฑ๐Ÿ‡ฆ Laos44https://iptv-org.github.io/iptv/countries/la.m3u - ๐Ÿ‡ฑ๐Ÿ‡ป Latvia24https://iptv-org.github.io/iptv/countries/lv.m3u - ๐Ÿ‡ฑ๐Ÿ‡ง Lebanon56https://iptv-org.github.io/iptv/countries/lb.m3u + ๐Ÿ‡ฑ๐Ÿ‡ป Latvia25https://iptv-org.github.io/iptv/countries/lv.m3u + ๐Ÿ‡ฑ๐Ÿ‡ง Lebanon57https://iptv-org.github.io/iptv/countries/lb.m3u ๐Ÿ‡ฑ๐Ÿ‡ธ Lesotho12https://iptv-org.github.io/iptv/countries/ls.m3u ๐Ÿ‡ฑ๐Ÿ‡ท Liberia12https://iptv-org.github.io/iptv/countries/lr.m3u - ๐Ÿ‡ฑ๐Ÿ‡พ Libya56https://iptv-org.github.io/iptv/countries/ly.m3u + ๐Ÿ‡ฑ๐Ÿ‡พ Libya57https://iptv-org.github.io/iptv/countries/ly.m3u ๐Ÿ‡ฑ๐Ÿ‡ฎ Liechtenstein16https://iptv-org.github.io/iptv/countries/li.m3u - ๐Ÿ‡ฑ๐Ÿ‡น Lithuania18https://iptv-org.github.io/iptv/countries/lt.m3u + ๐Ÿ‡ฑ๐Ÿ‡น Lithuania19https://iptv-org.github.io/iptv/countries/lt.m3u ๐Ÿ‡ฑ๐Ÿ‡บ Luxembourg22https://iptv-org.github.io/iptv/countries/lu.m3u ๐Ÿ‡ฒ๐Ÿ‡ด Macao8https://iptv-org.github.io/iptv/countries/mo.m3u ๐Ÿ‡ฒ๐Ÿ‡ฌ Madagascar13https://iptv-org.github.io/iptv/countries/mg.m3u ๐Ÿ‡ฒ๐Ÿ‡ผ Malawi14https://iptv-org.github.io/iptv/countries/mw.m3u ๐Ÿ‡ฒ๐Ÿ‡พ Malaysia61https://iptv-org.github.io/iptv/countries/my.m3u - ๐Ÿ‡ฒ๐Ÿ‡ป Maldives9https://iptv-org.github.io/iptv/countries/mv.m3u + ๐Ÿ‡ฒ๐Ÿ‡ป Maldives10https://iptv-org.github.io/iptv/countries/mv.m3u ๐Ÿ‡ฒ๐Ÿ‡ฑ Mali13https://iptv-org.github.io/iptv/countries/ml.m3u ๐Ÿ‡ฒ๐Ÿ‡น Malta13https://iptv-org.github.io/iptv/countries/mt.m3u ๐Ÿ‡ฒ๐Ÿ‡ญ Marshall Islands6https://iptv-org.github.io/iptv/countries/mh.m3u ๐Ÿ‡ฒ๐Ÿ‡ถ Martinique10https://iptv-org.github.io/iptv/countries/mq.m3u - ๐Ÿ‡ฒ๐Ÿ‡ท Mauritania42https://iptv-org.github.io/iptv/countries/mr.m3u + ๐Ÿ‡ฒ๐Ÿ‡ท Mauritania43https://iptv-org.github.io/iptv/countries/mr.m3u ๐Ÿ‡ฒ๐Ÿ‡บ Mauritius13https://iptv-org.github.io/iptv/countries/mu.m3u ๐Ÿ‡พ๐Ÿ‡น Mayotte13https://iptv-org.github.io/iptv/countries/yt.m3u - ๐Ÿ‡ฒ๐Ÿ‡ฝ Mexico207https://iptv-org.github.io/iptv/countries/mx.m3u + ๐Ÿ‡ฒ๐Ÿ‡ฝ Mexico210https://iptv-org.github.io/iptv/countries/mx.m3u       Aguascalientes1https://iptv-org.github.io/iptv/subdivisions/mx-agu.m3u       Baja California1https://iptv-org.github.io/iptv/subdivisions/mx-bcn.m3u       Chihuahua4https://iptv-org.github.io/iptv/subdivisions/mx-chh.m3u @@ -562,16 +562,16 @@ Same thing, but split up into separate files: ๐Ÿ‡ฒ๐Ÿ‡ช Montenegro18https://iptv-org.github.io/iptv/countries/me.m3u       Ulcinj1https://iptv-org.github.io/iptv/subdivisions/me-20.m3u ๐Ÿ‡ฒ๐Ÿ‡ธ Montserrat5https://iptv-org.github.io/iptv/countries/ms.m3u - ๐Ÿ‡ฒ๐Ÿ‡ฆ Morocco59https://iptv-org.github.io/iptv/countries/ma.m3u + ๐Ÿ‡ฒ๐Ÿ‡ฆ Morocco60https://iptv-org.github.io/iptv/countries/ma.m3u ๐Ÿ‡ฒ๐Ÿ‡ฟ Mozambique15https://iptv-org.github.io/iptv/countries/mz.m3u ๐Ÿ‡ฒ๐Ÿ‡ฒ Myanmar (Burma)47https://iptv-org.github.io/iptv/countries/mm.m3u ๐Ÿ‡ณ๐Ÿ‡ฆ Namibia12https://iptv-org.github.io/iptv/countries/na.m3u ๐Ÿ‡ณ๐Ÿ‡ท Nauru6https://iptv-org.github.io/iptv/countries/nr.m3u - ๐Ÿ‡ณ๐Ÿ‡ต Nepal21https://iptv-org.github.io/iptv/countries/np.m3u + ๐Ÿ‡ณ๐Ÿ‡ต Nepal22https://iptv-org.github.io/iptv/countries/np.m3u ๐Ÿ‡ณ๐Ÿ‡ฑ Netherlands201https://iptv-org.github.io/iptv/countries/nl.m3u ๐Ÿ‡ณ๐Ÿ‡จ New Caledonia6https://iptv-org.github.io/iptv/countries/nc.m3u ๐Ÿ‡ณ๐Ÿ‡ฟ New Zealand32https://iptv-org.github.io/iptv/countries/nz.m3u - ๐Ÿ‡ณ๐Ÿ‡ฎ Nicaragua59https://iptv-org.github.io/iptv/countries/ni.m3u + ๐Ÿ‡ณ๐Ÿ‡ฎ Nicaragua62https://iptv-org.github.io/iptv/countries/ni.m3u ๐Ÿ‡ณ๐Ÿ‡ช Niger13https://iptv-org.github.io/iptv/countries/ne.m3u ๐Ÿ‡ณ๐Ÿ‡ฌ Nigeria55https://iptv-org.github.io/iptv/countries/ng.m3u ๐Ÿ‡ณ๐Ÿ‡บ Niue6https://iptv-org.github.io/iptv/countries/nu.m3u @@ -580,21 +580,21 @@ Same thing, but split up into separate files: ๐Ÿ‡ฒ๐Ÿ‡ฐ North Macedonia48https://iptv-org.github.io/iptv/countries/mk.m3u ๐Ÿ‡ฒ๐Ÿ‡ต Northern Mariana Islands6https://iptv-org.github.io/iptv/countries/mp.m3u ๐Ÿ‡ณ๐Ÿ‡ด Norway24https://iptv-org.github.io/iptv/countries/no.m3u - ๐Ÿ‡ด๐Ÿ‡ฒ Oman39https://iptv-org.github.io/iptv/countries/om.m3u - ๐Ÿ‡ต๐Ÿ‡ฐ Pakistan75https://iptv-org.github.io/iptv/countries/pk.m3u + ๐Ÿ‡ด๐Ÿ‡ฒ Oman40https://iptv-org.github.io/iptv/countries/om.m3u + ๐Ÿ‡ต๐Ÿ‡ฐ Pakistan76https://iptv-org.github.io/iptv/countries/pk.m3u       Islamabad1https://iptv-org.github.io/iptv/subdivisions/pk-is.m3u ๐Ÿ‡ต๐Ÿ‡ผ Palau6https://iptv-org.github.io/iptv/countries/pw.m3u - ๐Ÿ‡ต๐Ÿ‡ธ Palestine59https://iptv-org.github.io/iptv/countries/ps.m3u - ๐Ÿ‡ต๐Ÿ‡ฆ Panama62https://iptv-org.github.io/iptv/countries/pa.m3u + ๐Ÿ‡ต๐Ÿ‡ธ Palestine60https://iptv-org.github.io/iptv/countries/ps.m3u + ๐Ÿ‡ต๐Ÿ‡ฆ Panama69https://iptv-org.github.io/iptv/countries/pa.m3u ๐Ÿ‡ต๐Ÿ‡ฌ Papua New Guinea6https://iptv-org.github.io/iptv/countries/pg.m3u - ๐Ÿ‡ต๐Ÿ‡พ Paraguay86https://iptv-org.github.io/iptv/countries/py.m3u + ๐Ÿ‡ต๐Ÿ‡พ Paraguay88https://iptv-org.github.io/iptv/countries/py.m3u       Alto Parana2https://iptv-org.github.io/iptv/subdivisions/py-10.m3u       Boqueron1https://iptv-org.github.io/iptv/subdivisions/py-19.m3u       Caaguazu1https://iptv-org.github.io/iptv/subdivisions/py-5.m3u       Central1https://iptv-org.github.io/iptv/subdivisions/py-11.m3u       Itapua1https://iptv-org.github.io/iptv/subdivisions/py-7.m3u       Presidente Hayes1https://iptv-org.github.io/iptv/subdivisions/py-15.m3u - ๐Ÿ‡ต๐Ÿ‡ช Peru197https://iptv-org.github.io/iptv/countries/pe.m3u + ๐Ÿ‡ต๐Ÿ‡ช Peru201https://iptv-org.github.io/iptv/countries/pe.m3u       Amazonas1https://iptv-org.github.io/iptv/subdivisions/pe-ama.m3u       Ancash1https://iptv-org.github.io/iptv/subdivisions/pe-anc.m3u       Apurimac1https://iptv-org.github.io/iptv/subdivisions/pe-apu.m3u @@ -606,20 +606,20 @@ Same thing, but split up into separate files:       Loreto2https://iptv-org.github.io/iptv/subdivisions/pe-lor.m3u       Moquegua3https://iptv-org.github.io/iptv/subdivisions/pe-moq.m3u       Puno1https://iptv-org.github.io/iptv/subdivisions/pe-pun.m3u -       San Martin1https://iptv-org.github.io/iptv/subdivisions/pe-sam.m3u +       San Martin2https://iptv-org.github.io/iptv/subdivisions/pe-sam.m3u ๐Ÿ‡ต๐Ÿ‡ญ Philippines50https://iptv-org.github.io/iptv/countries/ph.m3u ๐Ÿ‡ต๐Ÿ‡ณ Pitcairn Islands6https://iptv-org.github.io/iptv/countries/pn.m3u - ๐Ÿ‡ต๐Ÿ‡ฑ Poland64https://iptv-org.github.io/iptv/countries/pl.m3u + ๐Ÿ‡ต๐Ÿ‡ฑ Poland66https://iptv-org.github.io/iptv/countries/pl.m3u ๐Ÿ‡ต๐Ÿ‡น Portugal54https://iptv-org.github.io/iptv/countries/pt.m3u - ๐Ÿ‡ต๐Ÿ‡ท Puerto Rico83https://iptv-org.github.io/iptv/countries/pr.m3u - ๐Ÿ‡ถ๐Ÿ‡ฆ Qatar37https://iptv-org.github.io/iptv/countries/qa.m3u + ๐Ÿ‡ต๐Ÿ‡ท Puerto Rico86https://iptv-org.github.io/iptv/countries/pr.m3u + ๐Ÿ‡ถ๐Ÿ‡ฆ Qatar38https://iptv-org.github.io/iptv/countries/qa.m3u ๐Ÿ‡จ๐Ÿ‡ฌ Republic of the Congo16https://iptv-org.github.io/iptv/countries/cg.m3u       Brazzaville1https://iptv-org.github.io/iptv/subdivisions/cg-bzv.m3u + ๐Ÿ‡ท๐Ÿ‡ช Rรฉunion13https://iptv-org.github.io/iptv/countries/re.m3u ๐Ÿ‡ท๐Ÿ‡ด Romania110https://iptv-org.github.io/iptv/countries/ro.m3u       Gorj1https://iptv-org.github.io/iptv/subdivisions/ro-gj.m3u ๐Ÿ‡ท๐Ÿ‡บ Russia326https://iptv-org.github.io/iptv/countries/ru.m3u ๐Ÿ‡ท๐Ÿ‡ผ Rwanda24https://iptv-org.github.io/iptv/countries/rw.m3u - ๐Ÿ‡ท๐Ÿ‡ช Rรฉunion13https://iptv-org.github.io/iptv/countries/re.m3u ๐Ÿ‡ง๐Ÿ‡ฑ Saint Barthรฉlemy8https://iptv-org.github.io/iptv/countries/bl.m3u ๐Ÿ‡ธ๐Ÿ‡ญ Saint Helena12https://iptv-org.github.io/iptv/countries/sh.m3u ๐Ÿ‡ฐ๐Ÿ‡ณ Saint Kitts and Nevis6https://iptv-org.github.io/iptv/countries/kn.m3u @@ -629,7 +629,8 @@ Same thing, but split up into separate files: ๐Ÿ‡ป๐Ÿ‡จ Saint Vincent and the Grenadines5https://iptv-org.github.io/iptv/countries/vc.m3u ๐Ÿ‡ผ๐Ÿ‡ธ Samoa6https://iptv-org.github.io/iptv/countries/ws.m3u ๐Ÿ‡ธ๐Ÿ‡ฒ San Marino13https://iptv-org.github.io/iptv/countries/sm.m3u - ๐Ÿ‡ธ๐Ÿ‡ฆ Saudi Arabia73https://iptv-org.github.io/iptv/countries/sa.m3u + ๐Ÿ‡ธ๐Ÿ‡น Sรฃo Tomรฉ and Prรญncipe13https://iptv-org.github.io/iptv/countries/st.m3u + ๐Ÿ‡ธ๐Ÿ‡ฆ Saudi Arabia74https://iptv-org.github.io/iptv/countries/sa.m3u ๐Ÿ‡ธ๐Ÿ‡ณ Senegal30https://iptv-org.github.io/iptv/countries/sn.m3u ๐Ÿ‡ท๐Ÿ‡ธ Serbia89https://iptv-org.github.io/iptv/countries/rs.m3u ๐Ÿ‡ธ๐Ÿ‡จ Seychelles12https://iptv-org.github.io/iptv/countries/sc.m3u @@ -639,7 +640,7 @@ Same thing, but split up into separate files: ๐Ÿ‡ธ๐Ÿ‡ฐ Slovakia62https://iptv-org.github.io/iptv/countries/sk.m3u ๐Ÿ‡ธ๐Ÿ‡ฎ Slovenia37https://iptv-org.github.io/iptv/countries/si.m3u ๐Ÿ‡ธ๐Ÿ‡ง Solomon Islands6https://iptv-org.github.io/iptv/countries/sb.m3u - ๐Ÿ‡ธ๐Ÿ‡ด Somalia61https://iptv-org.github.io/iptv/countries/so.m3u + ๐Ÿ‡ธ๐Ÿ‡ด Somalia62https://iptv-org.github.io/iptv/countries/so.m3u ๐Ÿ‡ฟ๐Ÿ‡ฆ South Africa36https://iptv-org.github.io/iptv/countries/za.m3u ๐Ÿ‡ฌ๐Ÿ‡ธ South Georgia and the South Sandwich Islands3https://iptv-org.github.io/iptv/countries/gs.m3u ๐Ÿ‡ฐ๐Ÿ‡ท South Korea112https://iptv-org.github.io/iptv/countries/kr.m3u @@ -658,13 +659,9 @@ Same thing, but split up into separate files:       Ulsan-gwangyeoksi2https://iptv-org.github.io/iptv/subdivisions/kr-31.m3u ๐Ÿ‡ธ๐Ÿ‡ธ South Sudan12https://iptv-org.github.io/iptv/countries/ss.m3u ๐Ÿ‡ช๐Ÿ‡ธ Spain326https://iptv-org.github.io/iptv/countries/es.m3u -       Asturias, Principado de2https://iptv-org.github.io/iptv/subdivisions/es-as.m3u -       Madrid, Comunidad de6https://iptv-org.github.io/iptv/subdivisions/es-md.m3u -       Murcia, Region de3https://iptv-org.github.io/iptv/subdivisions/es-mc.m3u -       Navarra, Comunidad Foral de1https://iptv-org.github.io/iptv/subdivisions/es-nc.m3u -       Valenciana, Comunidad15https://iptv-org.github.io/iptv/subdivisions/es-vc.m3u       Andalucia38https://iptv-org.github.io/iptv/subdivisions/es-an.m3u       Aragon1https://iptv-org.github.io/iptv/subdivisions/es-ar.m3u +       Asturias, Principado de2https://iptv-org.github.io/iptv/subdivisions/es-as.m3u       Canarias11https://iptv-org.github.io/iptv/subdivisions/es-cn.m3u       Castilla y Leon1https://iptv-org.github.io/iptv/subdivisions/es-cl.m3u       Castilla-La Mancha17https://iptv-org.github.io/iptv/subdivisions/es-cm.m3u @@ -673,15 +670,18 @@ Same thing, but split up into separate files:       Galicia5https://iptv-org.github.io/iptv/subdivisions/es-ga.m3u       Illes Balears1https://iptv-org.github.io/iptv/subdivisions/es-ib.m3u       La Rioja1https://iptv-org.github.io/iptv/subdivisions/es-ri.m3u +       Madrid, Comunidad de6https://iptv-org.github.io/iptv/subdivisions/es-md.m3u +       Murcia, Region de3https://iptv-org.github.io/iptv/subdivisions/es-mc.m3u +       Navarra, Comunidad Foral de1https://iptv-org.github.io/iptv/subdivisions/es-nc.m3u       Pais Vasco6https://iptv-org.github.io/iptv/subdivisions/es-pv.m3u - ๐Ÿ‡ฑ๐Ÿ‡ฐ Sri Lanka18https://iptv-org.github.io/iptv/countries/lk.m3u - ๐Ÿ‡ธ๐Ÿ‡ฉ Sudan49https://iptv-org.github.io/iptv/countries/sd.m3u +       Valenciana, Comunidad15https://iptv-org.github.io/iptv/subdivisions/es-vc.m3u + ๐Ÿ‡ฑ๐Ÿ‡ฐ Sri Lanka20https://iptv-org.github.io/iptv/countries/lk.m3u + ๐Ÿ‡ธ๐Ÿ‡ฉ Sudan50https://iptv-org.github.io/iptv/countries/sd.m3u ๐Ÿ‡ธ๐Ÿ‡ท Suriname3https://iptv-org.github.io/iptv/countries/sr.m3u ๐Ÿ‡ธ๐Ÿ‡ฟ Swaziland13https://iptv-org.github.io/iptv/countries/sz.m3u - ๐Ÿ‡ธ๐Ÿ‡ช Sweden44https://iptv-org.github.io/iptv/countries/se.m3u + ๐Ÿ‡ธ๐Ÿ‡ช Sweden43https://iptv-org.github.io/iptv/countries/se.m3u ๐Ÿ‡จ๐Ÿ‡ญ Switzerland71https://iptv-org.github.io/iptv/countries/ch.m3u - ๐Ÿ‡ธ๐Ÿ‡พ Syria45https://iptv-org.github.io/iptv/countries/sy.m3u - ๐Ÿ‡ธ๐Ÿ‡น Sรฃo Tomรฉ and Prรญncipe13https://iptv-org.github.io/iptv/countries/st.m3u + ๐Ÿ‡ธ๐Ÿ‡พ Syria46https://iptv-org.github.io/iptv/countries/sy.m3u ๐Ÿ‡น๐Ÿ‡ผ Taiwan69https://iptv-org.github.io/iptv/countries/tw.m3u ๐Ÿ‡น๐Ÿ‡ฏ Tajikistan3https://iptv-org.github.io/iptv/countries/tj.m3u ๐Ÿ‡น๐Ÿ‡ฟ Tanzania23https://iptv-org.github.io/iptv/countries/tz.m3u @@ -690,7 +690,7 @@ Same thing, but split up into separate files: ๐Ÿ‡น๐Ÿ‡ฐ Tokelau6https://iptv-org.github.io/iptv/countries/tk.m3u ๐Ÿ‡น๐Ÿ‡ด Tonga6https://iptv-org.github.io/iptv/countries/to.m3u ๐Ÿ‡น๐Ÿ‡น Trinidad and Tobago8https://iptv-org.github.io/iptv/countries/tt.m3u - ๐Ÿ‡น๐Ÿ‡ณ Tunisia53https://iptv-org.github.io/iptv/countries/tn.m3u + ๐Ÿ‡น๐Ÿ‡ณ Tunisia54https://iptv-org.github.io/iptv/countries/tn.m3u ๐Ÿ‡น๐Ÿ‡ท Turkey226https://iptv-org.github.io/iptv/countries/tr.m3u ๐Ÿ‡น๐Ÿ‡ฒ Turkmenistan7https://iptv-org.github.io/iptv/countries/tm.m3u ๐Ÿ‡น๐Ÿ‡จ Turks and Caicos Islands5https://iptv-org.github.io/iptv/countries/tc.m3u @@ -698,10 +698,10 @@ Same thing, but split up into separate files: ๐Ÿ‡ป๐Ÿ‡ฎ U.S. Virgin Islands5https://iptv-org.github.io/iptv/countries/vi.m3u ๐Ÿ‡บ๐Ÿ‡ฌ Uganda26https://iptv-org.github.io/iptv/countries/ug.m3u ๐Ÿ‡บ๐Ÿ‡ฆ Ukraine87https://iptv-org.github.io/iptv/countries/ua.m3u - ๐Ÿ‡ฆ๐Ÿ‡ช United Arab Emirates75https://iptv-org.github.io/iptv/countries/ae.m3u + ๐Ÿ‡ฆ๐Ÿ‡ช United Arab Emirates76https://iptv-org.github.io/iptv/countries/ae.m3u ๐Ÿ‡ฌ๐Ÿ‡ง United Kingdom194https://iptv-org.github.io/iptv/countries/uk.m3u       Wales2https://iptv-org.github.io/iptv/subdivisions/gb-wls.m3u - ๐Ÿ‡บ๐Ÿ‡ธ United States1889https://iptv-org.github.io/iptv/countries/us.m3u + ๐Ÿ‡บ๐Ÿ‡ธ United States1892https://iptv-org.github.io/iptv/countries/us.m3u       Alabama4https://iptv-org.github.io/iptv/subdivisions/us-al.m3u       Alaska2https://iptv-org.github.io/iptv/subdivisions/us-ak.m3u       Arizona14https://iptv-org.github.io/iptv/subdivisions/us-az.m3u @@ -753,17 +753,17 @@ Same thing, but split up into separate files:       Washington8https://iptv-org.github.io/iptv/subdivisions/us-wa.m3u       Wisconsin7https://iptv-org.github.io/iptv/subdivisions/us-wi.m3u       Wyoming1https://iptv-org.github.io/iptv/subdivisions/us-wy.m3u - ๐Ÿ‡บ๐Ÿ‡พ Uruguay58https://iptv-org.github.io/iptv/countries/uy.m3u + ๐Ÿ‡บ๐Ÿ‡พ Uruguay60https://iptv-org.github.io/iptv/countries/uy.m3u ๐Ÿ‡บ๐Ÿ‡ฟ Uzbekistan9https://iptv-org.github.io/iptv/countries/uz.m3u ๐Ÿ‡ป๐Ÿ‡บ Vanuatu6https://iptv-org.github.io/iptv/countries/vu.m3u ๐Ÿ‡ป๐Ÿ‡ฆ Vatican City19https://iptv-org.github.io/iptv/countries/va.m3u - ๐Ÿ‡ป๐Ÿ‡ช Venezuela104https://iptv-org.github.io/iptv/countries/ve.m3u + ๐Ÿ‡ป๐Ÿ‡ช Venezuela107https://iptv-org.github.io/iptv/countries/ve.m3u       Aragua2https://iptv-org.github.io/iptv/subdivisions/ve-d.m3u       Lara1https://iptv-org.github.io/iptv/subdivisions/ve-k.m3u ๐Ÿ‡ป๐Ÿ‡ณ Vietnam125https://iptv-org.github.io/iptv/countries/vn.m3u ๐Ÿ‡ผ๐Ÿ‡ซ Wallis and Futuna6https://iptv-org.github.io/iptv/countries/wf.m3u ๐Ÿ‡ช๐Ÿ‡ญ Western Sahara17https://iptv-org.github.io/iptv/countries/eh.m3u - ๐Ÿ‡พ๐Ÿ‡ช Yemen43https://iptv-org.github.io/iptv/countries/ye.m3u + ๐Ÿ‡พ๐Ÿ‡ช Yemen44https://iptv-org.github.io/iptv/countries/ye.m3u ๐Ÿ‡ฟ๐Ÿ‡ฒ Zambia13https://iptv-org.github.io/iptv/countries/zm.m3u ๐Ÿ‡ฟ๐Ÿ‡ผ Zimbabwe12https://iptv-org.github.io/iptv/countries/zw.m3u ๐ŸŒ International73https://iptv-org.github.io/iptv/countries/int.m3u @@ -793,37 +793,37 @@ Same thing, but split up into separate files: Africa424https://iptv-org.github.io/iptv/regions/afr.m3u - Americas3801https://iptv-org.github.io/iptv/regions/amer.m3u - Asia-Pacific1918https://iptv-org.github.io/iptv/regions/apac.m3u - Arab world427https://iptv-org.github.io/iptv/regions/arab.m3u + Americas3817https://iptv-org.github.io/iptv/regions/amer.m3u + Arab world428https://iptv-org.github.io/iptv/regions/arab.m3u + Asia2962https://iptv-org.github.io/iptv/regions/asia.m3u + Asia-Pacific1919https://iptv-org.github.io/iptv/regions/apac.m3u Association of Southeast Asian Nations472https://iptv-org.github.io/iptv/regions/asean.m3u - Asia2961https://iptv-org.github.io/iptv/regions/asia.m3u Benelux240https://iptv-org.github.io/iptv/regions/benelux.m3u - Caribbean252https://iptv-org.github.io/iptv/regions/carib.m3u + Caribbean253https://iptv-org.github.io/iptv/regions/carib.m3u + Central America206https://iptv-org.github.io/iptv/regions/cenamer.m3u + Central and Eastern Europe1022https://iptv-org.github.io/iptv/regions/cee.m3u Central Asia64https://iptv-org.github.io/iptv/regions/cas.m3u - Central and Eastern Europe1019https://iptv-org.github.io/iptv/regions/cee.m3u - Central America201https://iptv-org.github.io/iptv/regions/cenamer.m3u Commonwealth of Independent States461https://iptv-org.github.io/iptv/regions/cis.m3u - Europe, the Middle East and Africa4046https://iptv-org.github.io/iptv/regions/emea.m3u - Europe3227https://iptv-org.github.io/iptv/regions/eur.m3u - Hispanic America1458https://iptv-org.github.io/iptv/regions/hispam.m3u - Latin America and the Caribbean1793https://iptv-org.github.io/iptv/regions/lac.m3u - Latin America1771https://iptv-org.github.io/iptv/regions/latam.m3u + Europe3246https://iptv-org.github.io/iptv/regions/eur.m3u + Europe, the Middle East and Africa4065https://iptv-org.github.io/iptv/regions/emea.m3u + Hispanic America1474https://iptv-org.github.io/iptv/regions/hispam.m3u + Latin America1785https://iptv-org.github.io/iptv/regions/latam.m3u + Latin America and the Caribbean1807https://iptv-org.github.io/iptv/regions/lac.m3u Maghreb59https://iptv-org.github.io/iptv/regions/maghreb.m3u - Middle East and North Africa755https://iptv-org.github.io/iptv/regions/mena.m3u Middle East705https://iptv-org.github.io/iptv/regions/mideast.m3u - Northern America2023https://iptv-org.github.io/iptv/regions/nam.m3u - Northern Europe125https://iptv-org.github.io/iptv/regions/neur.m3u - North America2619https://iptv-org.github.io/iptv/regions/noram.m3u + Middle East and North Africa755https://iptv-org.github.io/iptv/regions/mena.m3u Nordics97https://iptv-org.github.io/iptv/regions/nord.m3u + North America2627https://iptv-org.github.io/iptv/regions/noram.m3u + Northern America2026https://iptv-org.github.io/iptv/regions/nam.m3u + Northern Europe126https://iptv-org.github.io/iptv/regions/neur.m3u Oceania55https://iptv-org.github.io/iptv/regions/oce.m3u - South Asia596https://iptv-org.github.io/iptv/regions/sas.m3u + South America1195https://iptv-org.github.io/iptv/regions/southam.m3u + South Asia598https://iptv-org.github.io/iptv/regions/sas.m3u Southeast Asia493https://iptv-org.github.io/iptv/regions/sea.m3u - Southern Europe1103https://iptv-org.github.io/iptv/regions/ser.m3u - South America1187https://iptv-org.github.io/iptv/regions/southam.m3u + Southern Europe1104https://iptv-org.github.io/iptv/regions/ser.m3u Sub-Saharan Africa341https://iptv-org.github.io/iptv/regions/ssa.m3u West Africa140https://iptv-org.github.io/iptv/regions/wafr.m3u - Western Europe983https://iptv-org.github.io/iptv/regions/wer.m3u + Western Europe997https://iptv-org.github.io/iptv/regions/wer.m3u diff --git a/act.json b/act.json new file mode 100644 index 000000000..7801daa89 --- /dev/null +++ b/act.json @@ -0,0 +1,5 @@ +{ + "pull_request": { + "merged": true + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 798b38d0d..e16a1924b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "@octokit/plugin-paginate-rest": "^7.1.2", "@octokit/plugin-rest-endpoint-methods": "^7.1.3", "@octokit/types": "^11.1.0", - "@seald-io/nedb": "^4.0.2", "@types/fs-extra": "^11.0.1", "@types/glob": "^8.1.0", "@types/jest": "^29.5.4", @@ -1338,21 +1337,6 @@ "node": ">=14" } }, - "node_modules/@seald-io/binary-search-tree": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz", - "integrity": "sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA==" - }, - "node_modules/@seald-io/nedb": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@seald-io/nedb/-/nedb-4.0.2.tgz", - "integrity": "sha512-gJ91fT1sgh2cLXYVcTSh7khZ8LdemI8+SojCdpZ5wy+DUQ4fSrEwGqOwbdV49NDs2BBO6GeBpSb8CnhG2IW1rw==", - "dependencies": { - "@seald-io/binary-search-tree": "^1.0.3", - "localforage": "^1.9.0", - "util": "^0.12.4" - } - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -1658,17 +1642,6 @@ "node": ">=0.10.0" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/babel-jest": { "version": "29.6.4", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", @@ -1855,18 +1828,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "peer": true }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2318,14 +2279,6 @@ "node": ">=8" } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, "node_modules/foreground-child": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", @@ -2395,7 +2348,8 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "peer": true }, "node_modules/gensync": { "version": "1.0.0-beta.2", @@ -2414,20 +2368,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -2595,17 +2535,6 @@ "node": ">=0.10.0" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", @@ -2615,6 +2544,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "peer": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -2630,42 +2560,6 @@ "node": ">=8" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -2681,11 +2575,6 @@ "node": ">=10.17.0" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" - }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -2737,32 +2626,6 @@ "validator": "^13.7.0" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-core-module": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", @@ -2800,20 +2663,6 @@ "node": ">=6" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", @@ -2864,20 +2713,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-valid-path": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", @@ -3808,14 +3643,6 @@ "node": ">=6" } }, - "node_modules/lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", - "dependencies": { - "immediate": "~3.0.5" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -3856,14 +3683,6 @@ "node": ">=4" } }, - "node_modules/localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "dependencies": { - "lie": "3.1.1" - } - }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -5117,18 +4936,6 @@ "node": ">= 4.0.0" } }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -5191,24 +4998,6 @@ "node": ">= 8" } }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -6319,21 +6108,6 @@ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "optional": true }, - "@seald-io/binary-search-tree": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz", - "integrity": "sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA==" - }, - "@seald-io/nedb": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@seald-io/nedb/-/nedb-4.0.2.tgz", - "integrity": "sha512-gJ91fT1sgh2cLXYVcTSh7khZ8LdemI8+SojCdpZ5wy+DUQ4fSrEwGqOwbdV49NDs2BBO6GeBpSb8CnhG2IW1rw==", - "requires": { - "@seald-io/binary-search-tree": "^1.0.3", - "localforage": "^1.9.0", - "util": "^0.12.4" - } - }, "@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -6608,11 +6382,6 @@ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, "babel-jest": { "version": "29.6.4", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz", @@ -6761,15 +6530,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "peer": true }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -7089,14 +6849,6 @@ "path-exists": "^4.0.0" } }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, "foreground-child": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", @@ -7145,7 +6897,8 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "peer": true }, "gensync": { "version": "1.0.0-beta.2", @@ -7158,17 +6911,6 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } - }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -7293,14 +7035,6 @@ } } }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", @@ -7310,6 +7044,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "peer": true, "requires": { "function-bind": "^1.1.1" } @@ -7319,24 +7054,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -7349,11 +7066,6 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "peer": true }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" - }, "import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -7393,20 +7105,6 @@ "validator": "^13.7.0" } }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - }, "is-core-module": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", @@ -7432,14 +7130,6 @@ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "peer": true }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", @@ -7472,14 +7162,6 @@ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "peer": true }, - "is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "requires": { - "which-typed-array": "^1.1.11" - } - }, "is-valid-path": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", @@ -8186,14 +7868,6 @@ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "peer": true }, - "lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", - "requires": { - "immediate": "~3.0.5" - } - }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -8227,14 +7901,6 @@ } } }, - "localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "requires": { - "lie": "3.1.1" - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -9116,18 +8782,6 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, - "util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, "v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -9180,18 +8834,6 @@ "isexe": "^2.0.0" } }, - "which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index 24762d030..55ec7891f 100644 --- a/package.json +++ b/package.json @@ -2,11 +2,12 @@ "name": "iptv", "scripts": { "act:check": "act pull_request -W .github/workflows/check.yml", + "act:format": "act workflow_dispatch -W .github/workflows/format.yml", "act:update": "act workflow_dispatch -W .github/workflows/update.yml", "api:load": "./scripts/commands/api/load.sh", "api:generate": "npm run ts-node scripts/commands/api/generate.ts", "api:deploy": "npx gh-pages-clean && npx gh-pages -a -m \"Deploy to iptv-org/api\" -d .api -r https://$GITHUB_TOKEN@github.com/iptv-org/api.git", - "db:create": "npm run ts-node scripts/commands/database/create.ts", + "playlist:format": "npm run ts-node scripts/commands/playlist/format.ts", "playlist:update": "npm run ts-node scripts/commands/playlist/update.ts", "playlist:generate": "npm run ts-node scripts/commands/playlist/generate.ts", "playlist:validate": "npm run ts-node scripts/commands/playlist/validate.ts", @@ -14,9 +15,9 @@ "playlist:deploy": "npx gh-pages-clean && npx gh-pages -m \"Deploy to GitHub Pages\" -d .gh-pages -r https://$GITHUB_TOKEN@github.com/iptv-org/iptv.git", "readme:update": "npm run ts-node scripts/commands/readme/update.ts", "report:create": "npm run ts-node scripts/commands/report/create.ts", - "format": "npm run db:create && npm run playlist:format", + "format": "npm run api:load && npm run playlist:format", "check": "npm run api:load && npm run playlist:lint && npm run playlist:validate", - "update": "npm run api:load && npm run db:create && npm run playlist:generate && npm run api:generate && npm run readme:update", + "update": "npm run api:load && npm run playlist:generate && npm run api:generate && npm run readme:update", "deploy": "npm run playlist:deploy && npm run api:deploy", "report": "npm run api:load && npm run report:create", "test": "jest --runInBand", @@ -45,7 +46,6 @@ "@octokit/plugin-paginate-rest": "^7.1.2", "@octokit/plugin-rest-endpoint-methods": "^7.1.3", "@octokit/types": "^11.1.0", - "@seald-io/nedb": "^4.0.2", "@types/fs-extra": "^11.0.1", "@types/glob": "^8.1.0", "@types/jest": "^29.5.4", diff --git a/scripts/commands/api/generate.ts b/scripts/commands/api/generate.ts index edb08db48..0c0b033d7 100644 --- a/scripts/commands/api/generate.ts +++ b/scripts/commands/api/generate.ts @@ -1,16 +1,16 @@ -import { API_DIR, DB_DIR } from '../../constants' -import { Logger, Database, Collection, Storage } from '../../core' +import { API_DIR, STREAMS_DIR } from '../../constants' +import { Logger, PlaylistParser, Storage } from '../../core' import { Stream } from '../../models' async function main() { const logger = new Logger() - logger.info(`loading streams...`) - const db = new Database(DB_DIR) - const dbStreams = await db.load('streams.db') - const docs = await dbStreams.find({}) - - const streams = new Collection(docs as any[]) + logger.info('loading streams...') + const streamsStorage = new Storage(STREAMS_DIR) + const parser = new PlaylistParser({ storage: streamsStorage }) + const files = await streamsStorage.list('**/*.m3u') + let streams = await parser.parse(files) + streams = streams .map(data => new Stream(data)) .orderBy((stream: Stream) => stream.channel) .map((stream: Stream) => stream.toJSON()) @@ -18,8 +18,8 @@ async function main() { logger.info(`found ${streams.count()} streams`) logger.info('saving to .api/streams.json...') - const storage = new Storage(API_DIR) - await storage.save('streams.json', streams.toJSON()) + const apiStorage = new Storage(API_DIR) + await apiStorage.save('streams.json', streams.toJSON()) } main() diff --git a/scripts/commands/api/load.sh b/scripts/commands/api/load.sh index 866074753..7dea082ea 100755 --- a/scripts/commands/api/load.sh +++ b/scripts/commands/api/load.sh @@ -4,7 +4,6 @@ mkdir -p temp/data curl -L -o temp/data/blocklist.json https://iptv-org.github.io/api/blocklist.json curl -L -o temp/data/categories.json https://iptv-org.github.io/api/categories.json curl -L -o temp/data/channels.json https://iptv-org.github.io/api/channels.json -curl -L -o temp/data/streams.json https://iptv-org.github.io/api/streams.json curl -L -o temp/data/countries.json https://iptv-org.github.io/api/countries.json curl -L -o temp/data/languages.json https://iptv-org.github.io/api/languages.json curl -L -o temp/data/regions.json https://iptv-org.github.io/api/regions.json diff --git a/scripts/commands/database/create.ts b/scripts/commands/database/create.ts deleted file mode 100644 index fee17a1f7..000000000 --- a/scripts/commands/database/create.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Storage, Logger, PlaylistParser, Collection, Database } from '../../core' -import { Stream, Playlist } from '../../models' -import { STREAMS_DIR, DB_DIR } from '../../constants' - -async function main() { - const logger = new Logger() - - logger.info(`looking for streams...`) - const storage = new Storage(STREAMS_DIR) - const parser = new PlaylistParser({ - storage - }) - const files = await storage.list(`**/*.m3u`) - let streams = new Collection() - for (let filepath of files) { - const playlist: Playlist = await parser.parse(filepath) - streams = streams.concat(playlist.streams) - } - - logger.info(`found ${streams.count()} streams`) - - logger.info('clean up the storage...') - const dbStorage = new Storage(DB_DIR) - await dbStorage.clear('streams.db') - - logger.info('saving streams to the database...') - const db = new Database(DB_DIR) - const dbStreams = await db.load('streams.db') - const data = streams.map((stream: Stream) => stream.data()).all() - await dbStreams.insert(data) -} - -main() diff --git a/scripts/commands/playlist/format.ts b/scripts/commands/playlist/format.ts new file mode 100644 index 000000000..862b90e36 --- /dev/null +++ b/scripts/commands/playlist/format.ts @@ -0,0 +1,67 @@ +import { STREAMS_DIR, DATA_DIR } from '../../constants' +import { Storage, Logger, PlaylistParser, Collection } from '../../core' +import { Stream, Playlist, Channel } from '../../models' +import { program } from 'commander' + +program.argument('[filepath]', 'Path to file to validate').parse(process.argv) + +async function main() { + const storage = new Storage(STREAMS_DIR) + const logger = new Logger() + + logger.info('loading channels from api...') + const dataStorage = new Storage(DATA_DIR) + const channelsContent = await dataStorage.json('channels.json') + const groupedChannels = new Collection(channelsContent) + .map(data => new Channel(data)) + .keyBy((channel: Channel) => channel.id) + + logger.info('loading streams...') + const parser = new PlaylistParser({ storage }) + const files = program.args.length ? program.args : await storage.list('**/*.m3u') + let streams = await parser.parse(files) + + logger.info(`found ${streams.count()} streams`) + + logger.info('normalizing links...') + streams = streams.map(stream => { + stream.normalizeURL() + return stream + }) + + logger.info('removing duplicates...') + streams = streams.uniqBy(stream => stream.url) + + logger.info('removing wrong id...') + streams = streams.map((stream: Stream) => { + if (groupedChannels.missing(stream.channel)) { + stream.channel = '' + } + + return stream + }) + + logger.info('sorting links...') + streams = streams.orderBy( + [ + (stream: Stream) => stream.name, + (stream: Stream) => parseInt(stream.quality.replace('p', '')), + (stream: Stream) => stream.label, + (stream: Stream) => stream.url + ], + ['asc', 'desc', 'asc', 'asc'] + ) + + logger.info('saving...') + const groupedStreams = streams.groupBy((stream: Stream) => stream.filepath) + for (let filepath of groupedStreams.keys()) { + const streams = groupedStreams.get(filepath) || [] + + if (!streams.length) return + + const playlist = new Playlist(streams, { public: false }) + await storage.save(filepath, playlist.toString()) + } +} + +main() diff --git a/scripts/commands/playlist/generate.ts b/scripts/commands/playlist/generate.ts index b21c44be8..44a75be23 100644 --- a/scripts/commands/playlist/generate.ts +++ b/scripts/commands/playlist/generate.ts @@ -1,6 +1,5 @@ -import { File, Storage } from '../../core' +import { File, PlaylistParser, Storage } from '../../core' import { Stream, Category, Channel, Language, Country, Region, Subdivision } from '../../models' -import { Database } from '../../core/database' import { Collection } from '../../core/collection' import { Logger } from '../../core/logger' import _ from 'lodash' @@ -16,32 +15,31 @@ import { IndexLanguageGenerator, IndexRegionGenerator } from '../../generators' -import { DATA_DIR, DB_DIR, LOGS_DIR } from '../../constants' +import { DATA_DIR, LOGS_DIR, STREAMS_DIR } from '../../constants' async function main() { const logger = new Logger() + const dataStorage = new Storage(DATA_DIR) - const storage = new Storage(DATA_DIR) - - const channelsContent = await storage.json('channels.json') + logger.info('loading data from api...') + const channelsContent = await dataStorage.json('channels.json') const channels = new Collection(channelsContent).map(data => new Channel(data)) - - const categoriesContent = await storage.json('categories.json') + const categoriesContent = await dataStorage.json('categories.json') const categories = new Collection(categoriesContent).map(data => new Category(data)) - - const countriesContent = await storage.json('countries.json') + const countriesContent = await dataStorage.json('countries.json') const countries = new Collection(countriesContent).map(data => new Country(data)) - - const languagesContent = await storage.json('languages.json') + const languagesContent = await dataStorage.json('languages.json') const languages = new Collection(languagesContent).map(data => new Language(data)) - - const regionsContent = await storage.json('regions.json') + const regionsContent = await dataStorage.json('regions.json') const regions = new Collection(regionsContent).map(data => new Region(data)) - - const subdivisionsContent = await storage.json('subdivisions.json') + const subdivisionsContent = await dataStorage.json('subdivisions.json') const subdivisions = new Collection(subdivisionsContent).map(data => new Subdivision(data)) - const streams = await loadStreams({ channels, categories, languages }) + logger.info('loading streams...') + let streams = await loadStreams({ channels, categories, languages }) + let totalStreams = streams.count() + streams = streams.uniqBy((stream: Stream) => stream.channel || _.uniqueId()) + logger.info(`found ${totalStreams} streams (including ${streams.count()} unique)`) const generatorsLogger = new Logger({ stream: await new Storage(LOGS_DIR).createStream(`generators.log`) @@ -49,7 +47,6 @@ async function main() { logger.info('generating categories/...') await new CategoriesGenerator({ categories, streams, logger: generatorsLogger }).generate() - logger.info('generating countries/...') await new CountriesGenerator({ countries, @@ -58,10 +55,8 @@ async function main() { subdivisions, logger: generatorsLogger }).generate() - logger.info('generating languages/...') await new LanguagesGenerator({ streams, logger: generatorsLogger }).generate() - logger.info('generating regions/...') await new RegionsGenerator({ streams, @@ -69,16 +64,12 @@ async function main() { subdivisions, logger: generatorsLogger }).generate() - logger.info('generating index.m3u...') await new IndexGenerator({ streams, logger: generatorsLogger }).generate() - logger.info('generating index.nsfw.m3u...') await new IndexNsfwGenerator({ streams, logger: generatorsLogger }).generate() - logger.info('generating index.category.m3u...') await new IndexCategoryGenerator({ streams, logger: generatorsLogger }).generate() - logger.info('generating index.country.m3u...') await new IndexCountryGenerator({ streams, @@ -87,10 +78,8 @@ async function main() { subdivisions, logger: generatorsLogger }).generate() - logger.info('generating index.language.m3u...') await new IndexLanguageGenerator({ streams, logger: generatorsLogger }).generate() - logger.info('generating index.region.m3u...') await new IndexRegionGenerator({ streams, regions, logger: generatorsLogger }).generate() } @@ -110,13 +99,13 @@ async function loadStreams({ const groupedCategories = categories.keyBy(category => category.id) const groupedLanguages = languages.keyBy(language => language.code) - const db = new Database(DB_DIR) - const dbStreams = await db.load('streams.db') - const docs = await dbStreams.find({}) - const streams = new Collection(docs as any[]) - .map((data: any) => new Stream(data)) + const storage = new Storage(STREAMS_DIR) + const parser = new PlaylistParser({ storage }) + const files = await storage.list('**/*.m3u') + let streams = await parser.parse(files) + + streams = streams .orderBy([(stream: Stream) => stream.channel, (stream: Stream) => stream.url], ['asc', 'asc']) - .uniqBy((stream: Stream) => stream.channel || _.uniqueId()) .map((stream: Stream) => { const channel: Channel | undefined = groupedChannels.get(stream.channel) diff --git a/scripts/commands/playlist/update.ts b/scripts/commands/playlist/update.ts index 723d19d46..839de24fd 100644 --- a/scripts/commands/playlist/update.ts +++ b/scripts/commands/playlist/update.ts @@ -1,6 +1,6 @@ -import { DB_DIR, DATA_DIR, STREAMS_DIR } from '../../constants' -import { Database, Storage, Logger, Collection, Dictionary, IssueLoader } from '../../core' -import { Stream, Playlist, Channel } from '../../models' +import { DATA_DIR, STREAMS_DIR } from '../../constants' +import { Storage, Logger, Collection, Dictionary, IssueLoader, PlaylistParser } from '../../core' +import { Stream, Playlist, Channel, Issue } from '../../models' let processedIssues = new Collection() let streams: Collection @@ -10,19 +10,19 @@ async function main() { const logger = new Logger({ disabled: true }) const loader = new IssueLoader() - logger.info('loading streams...') - const db = new Database(DB_DIR) - const docs = await db.load('streams.db') - const dbStreams = await docs.find({}) - - streams = new Collection(dbStreams as any[]).map(data => new Stream(data)) - - const storage = new Storage(DATA_DIR) - const channelsContent = await storage.json('channels.json') + logger.info('loading channels from api...') + const dataStorage = new Storage(DATA_DIR) + const channelsContent = await dataStorage.json('channels.json') groupedChannels = new Collection(channelsContent) .map(data => new Channel(data)) .keyBy((channel: Channel) => channel.id) + logger.info('loading streams...') + const streamsStorage = new Storage(STREAMS_DIR) + const parser = new PlaylistParser({ storage: streamsStorage }) + const files = await streamsStorage.list('**/*.m3u') + streams = await parser.parse(files) + logger.info('removing broken streams...') await removeStreams(loader) @@ -32,25 +32,7 @@ async function main() { logger.info('add new streams...') await addStreams(loader) - logger.info('normalizing links...') - streams = streams.map(stream => { - stream.normalizeURL() - return stream - }) - - logger.info('sorting links...') - streams = streams.orderBy( - [ - (stream: Stream) => stream.name, - (stream: Stream) => parseInt(stream.quality.replace('p', '')), - (stream: Stream) => stream.label, - (stream: Stream) => stream.url - ], - ['asc', 'desc', 'asc', 'asc'] - ) - logger.info('saving...') - const streamsStorage = new Storage(STREAMS_DIR) const groupedStreams = streams.groupBy((stream: Stream) => stream.filepath) for (let filepath of groupedStreams.keys()) { const streams = groupedStreams.get(filepath) || [] @@ -69,19 +51,22 @@ main() async function removeStreams(loader: IssueLoader) { const issues = await loader.load({ labels: ['streams:remove', 'approved'] }) - issues.forEach((data: Dictionary) => { + issues.forEach((issue: Issue) => { + const data = issue.data if (data.missing('stream_url')) return const removed = streams.remove((_stream: Stream) => _stream.url === data.get('stream_url')) if (removed.notEmpty()) { - processedIssues.add(data.get('issue_number')) + processedIssues.add(issue.number) } }) } async function editStreams(loader: IssueLoader) { const issues = await loader.load({ labels: ['streams:edit', 'approved'] }) - issues.forEach((data: Dictionary) => { + issues.forEach((issue: Issue) => { + const data = issue.data + if (data.missing('stream_url')) return let stream = streams.first( @@ -111,13 +96,14 @@ async function editStreams(loader: IssueLoader) { streams.remove((_stream: Stream) => _stream.channel === stream.channel) streams.add(stream) - processedIssues.add(data.get('issue_number')) + processedIssues.add(issue.number) }) } async function addStreams(loader: IssueLoader) { const issues = await loader.load({ labels: ['streams:add', 'approved'] }) - issues.forEach((data: Dictionary) => { + issues.forEach((issue: Issue) => { + const data = issue.data if (data.missing('channel_id') || data.missing('stream_url')) return if (streams.includes((_stream: Stream) => _stream.url === data.get('stream_url'))) return @@ -138,6 +124,6 @@ async function addStreams(loader: IssueLoader) { }) streams.add(stream) - processedIssues.add(data.get('issue_number')) + processedIssues.add(issue.number) }) } diff --git a/scripts/commands/playlist/validate.ts b/scripts/commands/playlist/validate.ts index 8c6f020e3..03295a47c 100644 --- a/scripts/commands/playlist/validate.ts +++ b/scripts/commands/playlist/validate.ts @@ -5,7 +5,6 @@ import chalk from 'chalk' import { transliterate } from 'transliteration' import _ from 'lodash' import { DATA_DIR, STREAMS_DIR } from '../../constants' -import path from 'path' program.argument('[filepath]', 'Path to file to validate').parse(process.argv) @@ -19,73 +18,70 @@ async function main() { const logger = new Logger() logger.info(`loading blocklist...`) - const storage = new Storage(DATA_DIR) - const channelsContent = await storage.json('channels.json') + const dataStorage = new Storage(DATA_DIR) + const channelsContent = await dataStorage.json('channels.json') const channels = new Collection(channelsContent).map(data => new Channel(data)) - const blocklistContent = await storage.json('blocklist.json') + const blocklistContent = await dataStorage.json('blocklist.json') const blocklist = new Collection(blocklistContent).map(data => new Blocked(data)) logger.info(`found ${blocklist.count()} records`) - let errors = new Collection() - let warnings = new Collection() + logger.info('loading streams...') const streamsStorage = new Storage(STREAMS_DIR) const parser = new PlaylistParser({ storage: streamsStorage }) const files = program.args.length ? program.args : await streamsStorage.list('**/*.m3u') - for (const filepath of files) { - const file = new File(filepath) - if (file.extension() !== 'm3u') continue + const streams = await parser.parse(files) + logger.info(`found ${streams.count()} streams`) + + let errors = new Collection() + let warnings = new Collection() + let groupedStreams = streams.groupBy((stream: Stream) => stream.filepath) + for (const filepath of groupedStreams.keys()) { + const streams = groupedStreams.get(filepath) + if (!streams) continue + + const file = new File(filepath) const [, countryCode] = file.basename().match(/([a-z]{2})(|_.*)\.m3u/i) || [null, ''] const log = new Collection() const buffer = new Dictionary() - try { - const relativeFilepath = filepath.replace(path.normalize(STREAMS_DIR), '') - const playlist = await parser.parse(relativeFilepath) - playlist.streams.forEach((stream: Stream) => { - const channelNotInDatabase = - stream.channel && !channels.first((channel: Channel) => channel.id === stream.channel) - if (channelNotInDatabase) { - log.add({ - type: 'warning', - line: stream.line, - message: `"${stream.channel}" is not in the database` - }) - } + streams.forEach((stream: Stream) => { + const channelNotInDatabase = + stream.channel && !channels.first((channel: Channel) => channel.id === stream.channel) + if (channelNotInDatabase) { + log.add({ + type: 'warning', + line: stream.line, + message: `"${stream.channel}" is not in the database` + }) + } - const alreadyOnPlaylist = stream.url && buffer.has(stream.url) - if (alreadyOnPlaylist) { - log.add({ - type: 'warning', - line: stream.line, - message: `"${stream.url}" is already on the playlist` - }) - } else { - buffer.set(stream.url, true) - } + const alreadyOnPlaylist = stream.url && buffer.has(stream.url) + if (alreadyOnPlaylist) { + log.add({ + type: 'warning', + line: stream.line, + message: `"${stream.url}" is already on the playlist` + }) + } else { + buffer.set(stream.url, true) + } - const channelId = generateChannelId(stream.name, countryCode) - const blocked = blocklist.first( - blocked => - stream.channel.toLowerCase() === blocked.channel.toLowerCase() || - channelId.toLowerCase() === blocked.channel.toLowerCase() - ) - if (blocked) { - log.add({ - type: 'error', - line: stream.line, - message: `"${stream.name}" is on the blocklist due to claims of copyright holders (${blocked.ref})` - }) - } - }) - } catch (error) { - log.add({ - type: 'error', - line: 0, - message: error.message.toLowerCase() - }) - } + const channelId = generateChannelId(stream.name, countryCode) + const blocked = blocklist.first( + blocked => + stream.channel.toLowerCase() === blocked.channel.toLowerCase() || + channelId.toLowerCase() === blocked.channel.toLowerCase() + ) + if (blocked) { + log.add({ + type: 'error', + line: stream.line, + message: `"${stream.name}" is on the blocklist due to claims of copyright holders (${blocked.ref})` + }) + } + }) if (log.notEmpty()) { logger.info(`\n${chalk.underline(filepath)}`) diff --git a/scripts/commands/report/create.ts b/scripts/commands/report/create.ts index 6194449fd..d3da0a9d4 100644 --- a/scripts/commands/report/create.ts +++ b/scripts/commands/report/create.ts @@ -1,36 +1,43 @@ -import { DATA_DIR } from '../../constants' -import { Collection, Dictionary, IssueLoader, Storage } from '../../core' -import { Blocked, Channel, Stream } from '../../models' +import { DATA_DIR, STREAMS_DIR } from '../../constants' +import { Collection, Dictionary, IssueLoader, Storage, Logger, PlaylistParser } from '../../core' +import { Blocked, Channel, Issue, Stream } from '../../models' async function main() { + const logger = new Logger() const loader = new IssueLoader() const storage = new Storage(DATA_DIR) + logger.info('loading channels from api...') const channelsContent = await storage.json('channels.json') const groupedChannels = new Collection(channelsContent) .map(data => new Channel(data)) .groupBy((channel: Channel) => channel.id) - const streamsContent = await storage.json('streams.json') - const groupedStreams = new Collection(streamsContent) - .map(data => new Stream(data)) - .groupBy((stream: Stream) => stream.url) - + logger.info('loading blocklist from api...') const blocklistContent = await storage.json('blocklist.json') const groupedBlocklist = new Collection(blocklistContent) .map(data => new Blocked(data)) .groupBy((blocked: Blocked) => blocked.channel) + logger.info('loading streams...') + const streamsStorage = new Storage(STREAMS_DIR) + const parser = new PlaylistParser({ storage: streamsStorage }) + const files = await streamsStorage.list('**/*.m3u') + const streams = await parser.parse(files) + const groupedStreams = streams.groupBy((stream: Stream) => stream.url) + + logger.info('loading issue from github...') const issues = await loader.load({ labels: ['streams:add'] }) + logger.info('creating report...') const buffer = new Dictionary() - const report = issues.map(data => { - const channelId = data.get('channel_id') || undefined - const streamUrl = data.get('stream_url') || undefined + const report = issues.map((issue: Issue) => { + const channelId = issue.data.get('channel_id') || undefined + const streamUrl = issue.data.get('stream_url') || undefined const result = new Dictionary({ - issueNumber: data.get('issue_number'), + issueNumber: issue.number, channelId, status: undefined }) diff --git a/scripts/constants.ts b/scripts/constants.ts index 7609d051f..23db757e9 100644 --- a/scripts/constants.ts +++ b/scripts/constants.ts @@ -5,7 +5,6 @@ export const README_DIR = process.env.README_DIR || './.readme' export const API_DIR = process.env.API_DIR || './.api' export const DATA_DIR = process.env.DATA_DIR || './temp/data' export const LOGS_DIR = process.env.LOGS_DIR || './temp/logs' -export const DB_DIR = process.env.DB_DIR || './temp/database' export const TESTING = process.env.NODE_ENV === 'test' ? true : false export const OWNER = 'iptv-org' export const REPO = 'iptv' diff --git a/scripts/core/database.ts b/scripts/core/database.ts deleted file mode 100644 index c2d231320..000000000 --- a/scripts/core/database.ts +++ /dev/null @@ -1,22 +0,0 @@ -import Datastore from '@seald-io/nedb' -import * as path from 'path' - -export class Database { - rootDir: string - - constructor(rootDir: string) { - this.rootDir = rootDir - } - - async load(filepath: string) { - const absFilepath = path.join(this.rootDir, filepath) - - return new Datastore({ - filename: path.resolve(absFilepath), - autoload: true, - onload: (error: Error): any => { - if (error) console.error(error.message) - } - }) - } -} diff --git a/scripts/core/index.ts b/scripts/core/index.ts index c090ad9b0..75090eca2 100644 --- a/scripts/core/index.ts +++ b/scripts/core/index.ts @@ -1,4 +1,3 @@ -export * from './database' export * from './logger' export * from './playlistParser' export * from './numberParser' diff --git a/scripts/core/issueParser.ts b/scripts/core/issueParser.ts index c97a7a7f2..e3fa2c779 100644 --- a/scripts/core/issueParser.ts +++ b/scripts/core/issueParser.ts @@ -1,33 +1,31 @@ import { Dictionary } from './' +import { Issue } from '../models' +import _ from 'lodash' + +const FIELDS = new Dictionary({ + 'Channel ID': 'channel_id', + 'Channel ID (required)': 'channel_id', + 'Broken Link': 'stream_url', + 'Stream URL': 'stream_url', + 'Stream URL (optional)': 'stream_url', + 'Stream URL (required)': 'stream_url', + Label: 'label', + Quality: 'quality', + 'Channel Name': 'channel_name', + 'HTTP User-Agent': 'user_agent', + 'HTTP Referrer': 'http_referrer', + Reason: 'reason', + 'What happened to the stream?': 'reason', + 'Possible Replacement (optional)': 'possible_replacement', + Notes: 'notes', + 'Notes (optional)': 'notes' +}) export class IssueParser { - parse(issue: any): Dictionary { - const data = new Dictionary() - data.set('issue_number', issue.number) - - const idDict = new Dictionary({ - 'Channel ID': 'channel_id', - 'Channel ID (required)': 'channel_id', - 'Broken Link': 'stream_url', - 'Stream URL': 'stream_url', - 'Stream URL (optional)': 'stream_url', - 'Stream URL (required)': 'stream_url', - Label: 'label', - Quality: 'quality', - 'Channel Name': 'channel_name', - 'HTTP User-Agent': 'user_agent', - 'HTTP Referrer': 'http_referrer', - Reason: 'reason', - 'What happened to the stream?': 'reason', - 'Possible Replacement (optional)': 'possible_replacement', - Notes: 'notes', - 'Notes (optional)': 'notes' - }) - + parse(issue: any): Issue { const fields = issue.body.split('###') - if (!fields.length) return data - + const data = new Dictionary() fields.forEach((field: string) => { let [_label, , _value] = field.split(/\r?\n/) _label = _label ? _label.trim() : '' @@ -35,7 +33,7 @@ export class IssueParser { if (!_label || !_value) return data - const id: string = idDict.get(_label) + const id: string = FIELDS.get(_label) const value: string = _value === '_No response_' || _value === 'None' ? '' : _value if (!id) return @@ -43,6 +41,6 @@ export class IssueParser { data.set(id, value) }) - return data + return new Issue({ number: issue.number, data }) } } diff --git a/scripts/core/playlistParser.ts b/scripts/core/playlistParser.ts index 96ab8b2b3..7a96dacc7 100644 --- a/scripts/core/playlistParser.ts +++ b/scripts/core/playlistParser.ts @@ -1,6 +1,8 @@ import parser from 'iptv-playlist-parser' -import { Playlist, Stream } from '../models' +import { Stream } from '../models' import { Collection, Storage } from './' +import path from 'path' +import { STREAMS_DIR } from '../constants' export class PlaylistParser { storage: Storage @@ -9,7 +11,19 @@ export class PlaylistParser { this.storage = storage } - async parse(filepath: string): Promise { + async parse(files: string[]): Promise { + let streams = new Collection() + + for (let filepath of files) { + const relativeFilepath = filepath.replace(path.normalize(STREAMS_DIR), '') + const _streams: Collection = await this.parseFile(relativeFilepath) + streams = streams.concat(_streams) + } + + return streams + } + + async parseFile(filepath: string): Promise { const streams = new Collection() const content = await this.storage.read(filepath) @@ -32,7 +46,7 @@ export class PlaylistParser { streams.add(stream) }) - return new Playlist(streams) + return streams } } diff --git a/scripts/core/storage.ts b/scripts/core/storage.ts index 128ae3ba4..81f2ede4f 100644 --- a/scripts/core/storage.ts +++ b/scripts/core/storage.ts @@ -10,10 +10,12 @@ export class Storage { this.rootDir = path.normalize(rootDir || './') } - list(pattern: string): Promise { - return glob(pattern, { + async list(pattern: string): Promise { + const files = await glob(pattern, { cwd: this.rootDir }) + + return files.sort() } async createDir(dir: string): Promise { diff --git a/scripts/models/index.ts b/scripts/models/index.ts index 9cdfbba30..9782fdae8 100644 --- a/scripts/models/index.ts +++ b/scripts/models/index.ts @@ -1,3 +1,4 @@ +export * from './issue' export * from './playlist' export * from './blocked' export * from './stream' diff --git a/scripts/models/issue.ts b/scripts/models/issue.ts new file mode 100644 index 000000000..85261261c --- /dev/null +++ b/scripts/models/issue.ts @@ -0,0 +1,16 @@ +import { Dictionary } from '../core' + +type IssueProps = { + number: number + data: Dictionary +} + +export class Issue { + number: number + data: Dictionary + + constructor({ number, data }: IssueProps) { + this.number = number + this.data = data + } +} diff --git a/streams/ad.m3u b/streams/ad.m3u index 9f50d0c26..998b7b0c8 100644 --- a/streams/ad.m3u +++ b/streams/ad.m3u @@ -2,4 +2,4 @@ #EXTINF:-1 tvg-id="AndorraTV.ad",ATV (720p) https://videos.rtva.ad/live/rtva/playlist.m3u8 #EXTINF:-1 tvg-id="LoriaTV.ad",Lรฒria TV (1080p) [Not 24/7] -https://ythls.onrender.com/channel/UCCCnrECJpv84QKM4olodZOQ.m3u8 +https://ythls.onrender.com/channel/UCCCnrECJpv84QKM4olodZOQ.m3u8 diff --git a/streams/af.m3u b/streams/af.m3u index a96971b12..975fd93be 100644 --- a/streams/af.m3u +++ b/streams/af.m3u @@ -33,23 +33,23 @@ https://raw.githubusercontent.com/taodicakhia/IPTV_Exception/master/channels/af/ https://d10rltuy0iweup.cloudfront.net/ATNINT/myStream/playlist.m3u8 #EXTINF:-1 tvg-id="SharqRadioTV.af",Sharq Radio TV (1080p) https://59nyqa5elwap-hls-live.5centscdn.com/Sharq/eec89088ee408b80387155272b113256.sdp/playlist.m3u8 -#EXTINF:-1 tvg-id="NoorTV.af",Noor TV (720p) +#EXTINF:-1 tvg-id="NoorTV.af",Noor TV (720p) https://www.hewadwal.com:19360/noortv_abr/noortv_abr.m3u8 -#EXTINF:-1 tvg-id="RTA.af",RTA (720p) +#EXTINF:-1 tvg-id="RTA.af",RTA (720p) https://hls.rta.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="AfghanNobelMovies.ca",Afghan Nobel Movies (720p) +#EXTINF:-1 tvg-id="AfghanNobelMovies.ca",Afghan Nobel Movies (720p) https://live.relentlessinnovations.net:1936/afghannobel/afghannobel/playlist.m3u8 -#EXTINF:-1 tvg-id="ImanTV.af",Iman TV (480p) +#EXTINF:-1 tvg-id="ImanTV.af",Iman TV (480p) https://live.relentlessinnovations.net:1936/imantv/imantv/playlist.m3u8 -#EXTINF:-1 tvg-id="SohailTV.ca",Sohail TV (1080p) +#EXTINF:-1 tvg-id="SohailTV.ca",Sohail TV (1080p) https://iptv.sohailtv.com/sohail/playlist/index.m3u8 -#EXTINF:-1 tvg-id="WataneMaaTV.ca",Watan-e-Maa TV (720p) +#EXTINF:-1 tvg-id="WataneMaaTV.ca",Watan-e-Maa TV (720p) https://5caf24a595d94.streamlock.net:1937/8132/8132/playlist.m3u8 -#EXTINF:-1 tvg-id="EslahTV.af",Eslah TV (720p) +#EXTINF:-1 tvg-id="EslahTV.af",Eslah TV (720p) https://eslahtvhls.wns.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="DunyaNawTV.af",Dunya Naw TV (576p) +#EXTINF:-1 tvg-id="DunyaNawTV.af",Dunya Naw TV (576p) https://dunyanhls.wns.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="ABNAfghanistan.us",ABN Afghanistan (540p) +#EXTINF:-1 tvg-id="ABNAfghanistan.us",ABN Afghanistan (540p) https://rtmp2.abnvideos.com/hls/abnafghanistan.m3u8 -#EXTINF:-1 tvg-id="SadaEHaqTV.us",Sada-E-Haq TV (720p) +#EXTINF:-1 tvg-id="SadaEHaqTV.us",Sada-E-Haq TV (720p) https://live.relentlessinnovations.net:1936/sadaehaq/sadaehaq/playlist.m3u8 diff --git a/streams/ar.m3u b/streams/ar.m3u index 969274c28..bdf631ca1 100644 --- a/streams/ar.m3u +++ b/streams/ar.m3u @@ -517,7 +517,7 @@ https://stmv1.cnarlatam.com/cinesuspenso/cinesuspenso/playlist.m3u8 https://stmv1.cnarlatam.com/cineterror/cineterror/playlist.m3u8 #EXTINF:-1 tvg-id="ZondaTV.ar",Zonda TV (432p) [Geo-blocked] https://cnnsanjuan.com:9999/zonda/zonda/playlist.m3u8 -#EXTINF:-1 tvg-id="AcequiaTV.ar",Acequia TV (720p) [Not 24/7] +#EXTINF:-1 tvg-id="AcequiaTV.ar",Acequia TV (720p) [Not 24/7] https://ythls.onrender.com/channel/UCrYFBjFOP_zlFzsif9XDhgw.m3u8 #EXTINF:-1 tvg-id="CableImagenArmstrong.ar",Cable Imagen Armstrong (540p) [Not 24/7] https://stream.arcast.com.ar/casse/casse/playlist.m3u8 @@ -551,7 +551,7 @@ https://videostream.shockmedia.com.ar:19360/canal4telecondor/canal4telecondor.m3 https://stmv1.cnarlatam.com/canal5pueblo/canal5pueblo/playlist.m3u8 #EXTINF:-1 tvg-id="CanalE.ar",Canal E (720p) https://unlimited1-us.dps.live/perfiltv/perfiltv.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="LinkTV.ar",Link TV (1080p) +#EXTINF:-1 tvg-id="LinkTV.ar",Link TV (1080p) https://panel.dattalive.com/8128_1/8128_1/playlist.m3u8 #EXTINF:-1 tvg-id="MalbecPlay.ar",Malbec Play (1080p) https://streamlov.alsolnet.com/malbecplay/live/playlist.m3u8 diff --git a/streams/bo.m3u b/streams/bo.m3u index 6f22c525d..68a156e59 100644 --- a/streams/bo.m3u +++ b/streams/bo.m3u @@ -63,25 +63,25 @@ https://live.seo.tv.bo/live/6SEO.m3u8 https://live.seo.tv.bo/live/7SEO.m3u8 #EXTINF:-1 tvg-id="CineramaTelevision.bo",Cinerama TV (480p) [Not 24/7] https://5d00db0e0fcd5.streamlock.net/7062/7062/playlist.m3u8 -#EXTINF:-1 tvg-id="CVC.bo",CVC (540p) +#EXTINF:-1 tvg-id="CVC.bo",CVC (540p) https://5d00db0e0fcd5.streamlock.net/7034/7034/playlist.m3u8 -#EXTINF:-1 tvg-id="GogoPlayTV.bo",Gogo Play TV (720p) +#EXTINF:-1 tvg-id="GogoPlayTV.bo",Gogo Play TV (720p) https://tgn.bozztv.com/ssh101/ssh101/gogoplay/playlist.m3u8 #EXTINF:-1 tvg-id="Gigavision.bo",Gigavisiรณn (1080p) [Not 24/7] https://master.tucableip.com//gigavision/playlist.m3u8 -#EXTINF:-1 tvg-id="NeoTV.bo",Neo TV (720p) +#EXTINF:-1 tvg-id="NeoTV.bo",Neo TV (720p) https://tv1.mediacp.eu:3661/live/rlbpwxvhlive.m3u8 -#EXTINF:-1 tvg-id="PTV.bo",PTV (720p) +#EXTINF:-1 tvg-id="PTV.bo",PTV (720p) https://xhateaec.com:8800/hls/Pacenisima/Pacenisima/de5454962ef31da329d3a70355e62dfe/index.m3u8 -#EXTINF:-1 tvg-id="RedCCTV.bo",Red CCTV (480p) +#EXTINF:-1 tvg-id="RedCCTV.bo",Red CCTV (480p) https://solo.disfrutaenlared.com:1936/redcctv/redcctv/playlist.m3u8 -#EXTINF:-1 tvg-id="TLEstrella.bo",TL Estrella (720p) +#EXTINF:-1 tvg-id="TLEstrella.bo",TL Estrella (720p) https://solo.disfrutaenlared.com:1936/teleestrella/teleestrella/playlist.m3u8 -#EXTINF:-1 tvg-id="Megavision.bo",Megavisiรณn (720p) +#EXTINF:-1 tvg-id="Megavision.bo",Megavisiรณn (720p) https://video.live.com.bo:3699/live/megavisionlive.m3u8 -#EXTINF:-1 tvg-id="UnivalleTelevision.bo",Univalle Televisiรณn (1080p) +#EXTINF:-1 tvg-id="UnivalleTelevision.bo",Univalle Televisiรณn (1080p) https://master.tucableip.com/univalletv/playlist.m3u8 -#EXTINF:-1 tvg-id="AgendaMineraTV.bo",Agenda Minera TV (720p) +#EXTINF:-1 tvg-id="AgendaMineraTV.bo",Agenda Minera TV (720p) https://srv.panelcast.net/amitel/amitel/playlist.m3u8 #EXTINF:-1 tvg-id="DeltaTV.bo",Delta TV (480p) [Not 24/7] https://vsrv1.az-streamingserver.com:3068/live/vdsocmnulive.m3u8 @@ -89,13 +89,13 @@ https://vsrv1.az-streamingserver.com:3068/live/vdsocmnulive.m3u8 https://cdn.digital.com.bo/__cl/cg:sworigin2/__c/UNITEL/__op/hls-default/__f/index.m3u8 #EXTINF:-1 tvg-id="TelevisionCristal.bo",Cristal TV (720p) [Not 24/7] https://master.tucableip.com/cristaltv/index.m3u8 -#EXTINF:-1 tvg-id="AYNITV.bo",AYNI TV (720p) +#EXTINF:-1 tvg-id="AYNITV.bo",AYNI TV (720p) http://hd.istbolivia.com:1935/aynitv/aynitv/playlist.m3u8 -#EXTINF:-1 tvg-id="TVShowOruro.bo",TV Show Oruro (480p) +#EXTINF:-1 tvg-id="TVShowOruro.bo",TV Show Oruro (480p) http://tv.istbolivia.com:1935/tvshow/tvshow/playlist.m3u8 -#EXTINF:-1 tvg-id="Canal50RTVE.bo",Canal 50 RTVE Punata (720p) +#EXTINF:-1 tvg-id="Canal50RTVE.bo",Canal 50 RTVE Punata (720p) https://vdo.grupolimalive.com:3241/live/encuentrotvlive.m3u8 -#EXTINF:-1 tvg-id="CoralTV.bo",Coral TV (480p) +#EXTINF:-1 tvg-id="CoralTV.bo",Coral TV (480p) https://tv.mediacp.eu:8081/coraltv/index.m3u8 #EXTINF:-1 tvg-id="ImperialTV.bo",Imperial TV (720p) [Not 24/7] https://vdo.grupolimalive.com:3162/live/imperialtvlive.m3u8 diff --git a/streams/br.m3u b/streams/br.m3u index 94a5d1586..b86927e52 100644 --- a/streams/br.m3u +++ b/streams/br.m3u @@ -581,9 +581,9 @@ http://painelvj.com.br/tvaguaboa2/tvaguaboa2.sdp/playlist.m3u8 https://stmv1.srvstm.com/wtvbrasil/wtvbrasil/playlist.m3u8 #EXTINF:-1 tvg-id="ForaTedioTV.br",Fora Tรฉdio TV (720p) [Not 24/7] http://stream.foratedio.com/foratedio/foratedio/playlist.m3u8 -#EXTINF:-1 tvg-id="SBTRio.br",SBT Rio (720p) [Not 24/7] [Geo-blocked] +#EXTINF:-1 tvg-id="SBTRio.br",SBT Rio (720p) [Not 24/7] [Geo-blocked] https://ythls.onrender.com/channel/UCsRfBAspa72ExrsN347W2xg.m3u8 -#EXTINF:-1 tvg-id="SBTRioGrande.br",SBT RS (720p) [Not 24/7] [Geo-blocked] +#EXTINF:-1 tvg-id="SBTRioGrande.br",SBT RS (720p) [Not 24/7] [Geo-blocked] https://ythls.onrender.com/channel/UCHDfPYXReWt5EVIzBA6TzOQ.m3u8 #EXTINF:-1 tvg-id="BandMinas.br",Band Minas (720p) [Not 24/7] http://evpp.mm.uol.com.br:1935/bandpracas/debatemg/playlist.m3u8 @@ -615,13 +615,13 @@ https://cdn.jmvstream.com/w/LVW-8719/LVW8719_AcLVAxWy5J/playlist.m3u8 https://stmv3.duvoxtv.com.br/tvcariocas/tvcariocas/playlist.m3u8 #EXTINF:-1 tvg-id="RioTVCamara.br",Rio TV Cรขmara (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCmkgkpuRbUGzwLSpnV2nevQ.m3u8 -#EXTINF:-1 tvg-id="TVAldeia.br",TV Aldeia (720p) +#EXTINF:-1 tvg-id="TVAldeia.br",TV Aldeia (720p) https://stmv1.samcast.com.br/giovane7843/giovane7843/playlist.m3u8 -#EXTINF:-1 tvg-id="TVTudoBH.br",TV Tudo BH (720p) +#EXTINF:-1 tvg-id="TVTudoBH.br",TV Tudo BH (720p) https://tv02.zas.media:1936/tvtudo/tvtudo/playlist.m3u8 -#EXTINF:-1 tvg-id="RedeTVMais.br",Rede TV! Mais (720p) +#EXTINF:-1 tvg-id="RedeTVMais.br",Rede TV! Mais (720p) https://stmv7.samcast.com.br/playredetvmais/playredetvmais/playlist.m3u8 -#EXTINF:-1 tvg-id="RedeSul.br",Rede Sul (720p) +#EXTINF:-1 tvg-id="RedeSul.br",Rede Sul (720p) https://video05.logicahost.com.br/tvurbana/tvurbana/playlist.m3u8 #EXTINF:-1 tvg-id="TVCamaraPortoAlegre.br",TV Cรขmara Porto Alegre (1080p) [Not 24/7] https://ythls.onrender.com/channel/UC-0IsdHsbWQcZolu66jkQZQ.m3u8 @@ -633,11 +633,13 @@ https://5ad482a77183d.streamlock.net/marliomelohotmail.com/marliomelohotmail.com https://ythls.onrender.com/channel/UCnLSKfHkgZ6ujEYCO9jq7Sw.m3u8 #EXTINF:-1 tvg-id="TVSenado.br",TV Senado (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCLgti7NuK0RuW9wty-fxPjQ.m3u8 -#EXTINF:-1 tvg-id="TVGazeta.br",TV Gazeta (720p) +#EXTINF:-1 tvg-id="TVGazeta.br",TV Gazeta (720p) https://video02.logicahost.com.br/tvc21/tvc21/playlist.m3u8 #EXTINF:-1 tvg-id="VTV.br",SBT VTV (720p) [Not 24/7] https://ythls.onrender.com/channel/UC40TUSUx490U5uR1lZt3Ajg.m3u8 -#EXTINF:-1 tvg-id="SBTCuiaba.br",SBT Cuiabรก (720p) +#EXTINF:-1 tvg-id="SBTCuiaba.br",SBT Cuiabรก (720p) https://5ad482a77183d.streamlock.net/sbtsbtmt.com/sbtsbtmt.com/playlist.m3u8 #EXTINF:-1 tvg-id="TVCorreio.br",TV Correio (720p) [Not 24/7] https://ythls.onrender.com/channel/UCJ4uxK_mo6gNoqk9cyvgWkw.m3u8 +#EXTINF:-1 tvg-id="RecordTV.br",RecordTV +https://cdn.jmvstream.com/w/LVW-10842/LVW10842_513N26MDBL/chunklist.m3u8 diff --git a/streams/cd.m3u b/streams/cd.m3u index 75753d2fe..0f6aa5fb2 100644 --- a/streams/cd.m3u +++ b/streams/cd.m3u @@ -17,31 +17,31 @@ http://51.254.199.122:8080/PSTV/index.m3u8 https://tv2.isi-broadcast.tech/ISI-BROADCAST/HDLIVE1/index.m3u8 #EXTINF:-1 tvg-id="MikubaTV.cd",Mikuba TV (480p) [Not 24/7] http://51.254.199.122:8080/MIKUBATV/index.m3u8 -#EXTINF:-1 tvg-id="RTNC.cd",RTNC (540p) +#EXTINF:-1 tvg-id="RTNC.cd",RTNC (540p) https://tv2.isi-broadcast.tech/ISI-BROADCAST/RTNC-1/index.m3u8 -#EXTINF:-1 tvg-id="RTNC.cd",RTNC (1080p) [Not 24/7] +#EXTINF:-1 tvg-id="RTNC.cd",RTNC (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCip2DNtZUPC82a_xLLTFcgA.m3u8 -#EXTINF:-1 tvg-id="Tele50.cd",Tรฉlรฉ 50 (576p) +#EXTINF:-1 tvg-id="Tele50.cd",Tรฉlรฉ 50 (576p) https://tv2.isi-broadcast.tech/ISI-BROADCAST/TELE-50/index.m3u8 -#EXTINF:-1 tvg-id="DigitalCongoTV.cd",Digital Congo TV (480p) +#EXTINF:-1 tvg-id="DigitalCongoTV.cd",Digital Congo TV (480p) https://tv2.isi-broadcast.tech/ISI-BROADCAST/DIGITAL-TV/index.m3u8 -#EXTINF:-1 tvg-id="MishapiVoiceTV.cd",Mishapi Voice TV (1080p) +#EXTINF:-1 tvg-id="MishapiVoiceTV.cd",Mishapi Voice TV (1080p) https://tv1.isi-broadcast.tech/MISHAPI-STREAM1/index.m3u8 -#EXTINF:-1 tvg-id="MetanoiaTV.cd",Metanoia TV (720p) +#EXTINF:-1 tvg-id="MetanoiaTV.cd",Metanoia TV (720p) https://tv1.isi-broadcast.tech/METANOIA-STREAM1/index.m3u8 -#EXTINF:-1 tvg-id="ParoleEternelleTV.cd",Parole ร‰ternelle TV (1080p) +#EXTINF:-1 tvg-id="ParoleEternelleTV.cd",Parole ร‰ternelle TV (1080p) https://tv2.isi-broadcast.tech/ISI-BROADCAST/PAROLETV/index.m3u8 -#EXTINF:-1 tvg-id="GeopolisTV.cd",Gรฉopolis TV (240p) +#EXTINF:-1 tvg-id="GeopolisTV.cd",Gรฉopolis TV (240p) https://tv2.isi-broadcast.tech/ISI-BROADCAST/GeopoliceTV/index.m3u8 -#EXTINF:-1 tvg-id="SSMTV.cd",SSM TV (576p) +#EXTINF:-1 tvg-id="SSMTV.cd",SSM TV (576p) https://tv2.isi-broadcast.tech/ISI-BROADCAST/SSM/index.m3u8 -#EXTINF:-1 tvg-id="MadiTV.cd",Madi TV (576p) +#EXTINF:-1 tvg-id="MadiTV.cd",Madi TV (576p) https://tv1.isi-broadcast.tech/MADI-TV/index.m3u8 -#EXTINF:-1 tvg-id="CCPVTelevision.cd",CCPV TV (1080p) +#EXTINF:-1 tvg-id="CCPVTelevision.cd",CCPV TV (1080p) https://tv1.isi-broadcast.tech/CCPV-TV/index.m3u8 -#EXTINF:-1 tvg-id="NumericaTV.cd",Numerica TV (1080p) +#EXTINF:-1 tvg-id="NumericaTV.cd",Numerica TV (1080p) https://tv1.isi-broadcast.tech/NUMERICA/index.m3u8 -#EXTINF:-1 tvg-id="CNTV.cd",CNTV Canal Numรฉrique (720p) +#EXTINF:-1 tvg-id="CNTV.cd",CNTV Canal Numรฉrique (720p) https://tv1.isi-broadcast.tech/CN-TV_CANAL/index.m3u8 -#EXTINF:-1 tvg-id="KingTV.cd",King TV (544p) +#EXTINF:-1 tvg-id="KingTV.cd",King TV (544p) https://tv1.isi-broadcast.tech/KING_TV/index.m3u8 diff --git a/streams/ch.m3u b/streams/ch.m3u index f5274b474..363dbb85b 100644 --- a/streams/ch.m3u +++ b/streams/ch.m3u @@ -81,9 +81,9 @@ https://bild-und-ton.stream/die-neue-zeit-tv-live/smil:dnz-de.smil/playlist.m3u8 http://sivantv.livebox.co.in/sivantvhls/sivan.m3u8 #EXTINF:-1 tvg-id="MLeMedia.ch",M Le Mรฉdia (720p) [Not 24/7] https://raw.githubusercontent.com/Sphinxroot/HSL/main/DM/ch/M.m3u8 -#EXTINF:-1 tvg-id="RTVPendimi.ch",RTV Pendimi (720p) +#EXTINF:-1 tvg-id="RTVPendimi.ch",RTV Pendimi (720p) http://live.rtvpendimi.com:8081/hls/RTVPendimi/index.m3u8 -#EXTINF:-1 tvg-id="RTVIslam.ch",RTV Islam (1080p) +#EXTINF:-1 tvg-id="RTVIslam.ch",RTV Islam (1080p) https://protokolldns.xyz/rtvislamweebstdkksdfsdjkd/index.m3u8 #EXTINF:-1 tvg-id="Meteonews.ch",Meteonews (1080p) https://streaming.meteonews.net/hls/stream.m3u8 diff --git a/streams/cl.m3u b/streams/cl.m3u index 755681563..798bee59b 100644 --- a/streams/cl.m3u +++ b/streams/cl.m3u @@ -309,7 +309,7 @@ https://mdstrm.com/live-stream-playlist/5fad9b1d978fe1080e3ac4a8.m3u8 https://paneltv.online:1936/8034/8034/playlist.m3u8 #EXTINF:-1 tvg-id="T13.cl",T13 (720p) [Not 24/7] https://ythls.onrender.com/channel/UCsRnhjcUCR78Q3Ud6OXCTNg.m3u8 -#EXTINF:-1 tvg-id="T13.cl",T13 (720p) +#EXTINF:-1 tvg-id="T13.cl",T13 (720p) https://jireh-2-hls-video-us-isp.dps.live/hls-video/10b92cafdf3646cbc1e727f3dc76863621a327fd/t13/t13.smil/playlist.m3u8 #EXTINF:-1 tvg-id="Tele2WebRetiro.cl",Tele 2 Web (Retiro) (720p) [Not 24/7] https://inliveserver.com:1936/11516/11516/playlist.m3u8 @@ -443,9 +443,9 @@ https://origin.dpsgo.com/ssai/event/LhHrVtyeQkKZ-Ye_xEU75g/master.m3u8 https://origin.dpsgo.com/ssai/event/cKWySXKgSK-SzlJmESkOWw/master.m3u8 #EXTINF:-1 tvg-id="13Festival.cl",13 Festival (1080p) https://origin.dpsgo.com/ssai/event/Nftd0fM2SXasfDlRphvUsg/master.m3u8 -#EXTINF:-1 tvg-id="TVN.cl",TVN (1080p) [Geo-blocked] +#EXTINF:-1 tvg-id="TVN.cl",TVN (1080p) [Geo-blocked] https://panel.miplay.cl:8081/tvn/index.m3u8 #EXTINF:-1 tvg-id="TVN3.cl",TVN3 (1080p) [Geo-blocked] https://mdstrm.com/live-stream-playlist/5653641561b4eba30a7e4929.m3u8 -#EXTINF:-1 tvg-id="AnimaxRevival.cl",Animax Revival (936p) +#EXTINF:-1 tvg-id="AnimaxRevival.cl",Animax Revival (936p) https://streaming.zappix.live:3062/live/animaxlive.m3u8 diff --git a/streams/co.m3u b/streams/co.m3u index 9222f9eaf..b5d751a4c 100644 --- a/streams/co.m3u +++ b/streams/co.m3u @@ -103,7 +103,7 @@ https://liveingesta118.cdnmedia.tv/teleamigatvlive/smil:dvrlive.smil/playlist.m3 #EXTINF:-1 tvg-id="Teleantioquia.co",Teleantioquia (360p) [Not 24/7] #EXTVLCOPT:http-referrer=https://player.instantvideocloud.net/ https://liveingesta118.cdnmedia.tv/teleantioquialive/smil:dvrlive.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="Teleantioquia.co",Teleantioquia (1080p) +#EXTINF:-1 tvg-id="Teleantioquia.co",Teleantioquia (1080p) https://d1xgz5r2yxvjwj.cloudfront.net/out/v1/49d5fdc5370d4f43aab4930ec7a9cbf8/index.m3u8 #EXTINF:-1 tvg-id="Telecafe.co",Telecafรฉ (720p) #EXTVLCOPT:http-referrer=https://player.instantvideocloud.net/ @@ -120,7 +120,7 @@ https://stream.logicideas.media/telepacifico-live/smil:live.smil/playlist.m3u8 https://movil.ejeserver.com/live/telesanjacinto.m3u8 #EXTINF:-1 tvg-id="TeleSanJacinto.co",Tele San Jacinto (720p) https://video.ejeserver.com/live/telesanjacinto.m3u8 -#EXTINF:-1 tvg-id="Trece.co",Trece (720p) +#EXTINF:-1 tvg-id="Trece.co",Trece (720p) https://stream.logicideas.media/canaltrece-live/smil:live.smil/playlist.m3u8 #EXTINF:-1 tvg-id="TrecePlus.co",Trece + (720p) https://stream.logicideas.media/canaltreceplus-live/smil:live1plus.smil/playlist.m3u8 @@ -142,7 +142,7 @@ https://servidordevideo.com:3077/live/despechadalive.m3u8 https://movil.ejeserver.com/live/nets.m3u8 #EXTINF:-1 tvg-id="CanalNets.co",Canal Nets (720p) [Not 24/7] https://video.ejeserver.com/live/nets.m3u8 -#EXTINF:-1 tvg-id="CanalTRO.co",Canal TRO (1080p) +#EXTINF:-1 tvg-id="CanalTRO.co",Canal TRO (1080p) #EXTVLCOPT:http-referrer=https://player.instantvideocloud.net/ https://liveingesta118.cdnmedia.tv/canaltro2live/smil:live.smil/playlist.m3u8 #EXTINF:-1 tvg-id="NoticiasCaracolAhora.co",Noticias Caracol Ahora (720p) [Not 24/7] @@ -177,21 +177,21 @@ https://hvtraficonew.ddns.net/pastocnc4/cnc4/playlist.m3u8 https://ythls.onrender.com/channel/UCnPwQV0-W7S02i_omPEpJBg.m3u8 #EXTINF:-1 tvg-id="NTN24.co",NTN24 (720p) [Not 24/7] https://ythls.onrender.com/channel/UCEJs1fTF3KszRJGxJY14VrA.m3u8 -#EXTINF:-1 tvg-id="Telemedellin.co",Telemedellรญn (720p) +#EXTINF:-1 tvg-id="Telemedellin.co",Telemedellรญn (720p) https://d3cglye48cl6m2.cloudfront.net/out/v1/37d85e2ab37c4873aed6849fe74e78b8/index.m3u8 -#EXTINF:-1 tvg-id="RCNXtra.co",RCN Xtra (1080p) +#EXTINF:-1 tvg-id="RCNXtra.co",RCN Xtra (1080p) https://latv-rcn-xtra-1-mx.tcl.wurl.tv/playlist.m3u8 -#EXTINF:-1 tvg-id="Cristovision.co",Cristovisiรณn (480p) +#EXTINF:-1 tvg-id="Cristovision.co",Cristovisiรณn (480p) https://151972.global.ssl.fastly.net/60a5a559e3414ce54aa8a44d/live_66dad780017a11ee87ff5592d1e02764/index.m3u8 -#EXTINF:-1 tvg-id="CNCTulua.co",CNC Tuluรก (720p) +#EXTINF:-1 tvg-id="CNCTulua.co",CNC Tuluรก (720p) https://servers.amelbasoluciones.co:19360/cnctulualive/cnctulualive.m3u8 -#EXTINF:-1 tvg-id="TuKanal.co",Tu Kanal (1080p) +#EXTINF:-1 tvg-id="TuKanal.co",Tu Kanal (1080p) http://45.33.63.98/hls/abdi.m3u8 #EXTINF:-1 tvg-id="TVSanJorge.co",TV San Jorge (1080p) [Not 24/7] https://asucap.com/livestream/asucap_envivo.m3u8 -#EXTINF:-1 tvg-id="ViveTV.co",Vive TV Colombia (1080p) +#EXTINF:-1 tvg-id="ViveTV.co",Vive TV Colombia (1080p) http://192.144.113.132:1935/live/ViveTV/playlist.m3u8 -#EXTINF:-1 tvg-id="TuUniversoTV.co",Tu Universo TV (720p) +#EXTINF:-1 tvg-id="TuUniversoTV.co",Tu Universo TV (720p) https://5bf8041cb3fed.streamlock.net/TUUNIVERSOTV/TUUNIVERSOTV/playlist.m3u8 #EXTINF:-1 tvg-id="ChamberofRepresentatives.co",Cรกmara de Representantes (720p) [Not 24/7] https://ythls.onrender.com/channel/UCzescUFTh2jiZkYIx9uZtqA.m3u8 diff --git a/streams/cr.m3u b/streams/cr.m3u index ee66f55fa..91dfb8387 100644 --- a/streams/cr.m3u +++ b/streams/cr.m3u @@ -91,7 +91,7 @@ https://videohd.live:19360/8076/8076.m3u8 https://59ef525c24caa.streamlock.net/vmtv/soyplancha/playlist.m3u8 #EXTINF:-1 tvg-id="VintageMusic.cr",Vintage Music (720p) https://59ef525c24caa.streamlock.net/vmtv/tvvintage/playlist.m3u8 -#EXTINF:-1 tvg-id="Teletica7.cr",Teletica 7 (720p) [Geo-blocked] +#EXTINF:-1 tvg-id="Teletica7.cr",Teletica 7 (720p) [Geo-blocked] #EXTVLCOPT:http-referrer=https://bradmax.com https://cdn01.teletica.com/TeleticaLiveStreamCR/Stream/playlist_dvr.m3u8 #EXTINF:-1 tvg-id="TeleredTelevision.cr",Telered (720p) diff --git a/streams/cu.m3u b/streams/cu.m3u index 8c9229f6e..6e202b3cb 100644 --- a/streams/cu.m3u +++ b/streams/cu.m3u @@ -3,5 +3,5 @@ http://190.122.96.187:8888/http/010 #EXTINF:-1 tvg-id="CubavisionInternacional.cu",Cubavisiรณn Internacional (480p) [Not 24/7] http://paz.sytes.net:32769/memfs/c153c555-6806-482e-9eee-aecf1dffbbef.m3u8 -#EXTINF:-1 tvg-id="RadioyTelevisionMarti.us",Radio y Televisiรณn Martรญ (720p) +#EXTINF:-1 tvg-id="RadioyTelevisionMarti.us",Radio y Televisiรณn Martรญ (720p) https://ocb-ingest.akamaized.net/hls/live/2037032/tvmc01/playlist.m3u8 diff --git a/streams/cw.m3u b/streams/cw.m3u index 55500aa77..89dc11d4e 100644 --- a/streams/cw.m3u +++ b/streams/cw.m3u @@ -5,7 +5,7 @@ https://seswa.bonce.tv/hls/bonceswa.m3u8 http://highvolume04.streampartner.nl/nos_pais_24_7/nos_pais_24_7/playlist.m3u8 #EXTINF:-1 tvg-id="TVDirect13.cw",TV Direct 13 (480p) [Not 24/7] https://oqgdrog4d4rm-hls-live.5centscdn.com/tvdirect/f7b44cfafd5c52223d5498196c8a2e7b.sdp/tvdirect/stream1/index.m3u8 -#EXTINF:-1 tvg-id="",Intermediate League Curaรงao [Geo-blocked] +#EXTINF:-1 tvg-id="",Intermediate League Curaรงao [Geo-blocked] https://streannlivecariflix.cachefly.net/cariflix12/cariflix12/playlist.m3u8 #EXTINF:-1 tvg-id="VAMTV.cw",VAM Vid's & More (720p) https://cur.watch/api/get_stream/vam/streann/playlist.m3u8 diff --git a/streams/cy.m3u b/streams/cy.m3u index bbf794d39..a3d15ab77 100644 --- a/streams/cy.m3u +++ b/streams/cy.m3u @@ -73,5 +73,5 @@ https://sc-kuzeykibrissmarttv.ercdn.net/gunestv/bant1/playlist.m3u8 https://dev.aftermind.xyz/hls/unitrust/voulitv/index.m3u8?token=8TXWzhY3h6jrzqEqu #EXTINF:-1 tvg-id="VouliTV.cy",Vouli TV (1080p) [Not 24/7] https://dev.aftermind.xyz/edge-hls/unitrust/voulitv/index.m3u8?token=8TXWzhY3h6jrzqEqu -#EXTINF:-1 tvg-id="OmegaChannel.cy",Omega Channel (1080p) +#EXTINF:-1 tvg-id="OmegaChannel.cy",Omega Channel (1080p) http://l1.cloudskep.com/tst/omcy/playlist.m3u8 diff --git a/streams/de.m3u b/streams/de.m3u index 9d80c152a..527b01bd8 100644 --- a/streams/de.m3u +++ b/streams/de.m3u @@ -51,7 +51,7 @@ https://58bd5b7a98e04.streamlock.net/medienasa-live/_definst_/BLKonline_high/pla https://58bd5b7a98e04.streamlock.net/medienasa-live/_definst_/mp4:BLKonline_high/playlist.m3u8 #EXTINF:-1 tvg-id="BLKRegionalTV.de",BLK TV Hohenmรถlsen (1080p) https://58bd5b7a98e04.streamlock.net/medienasa-live/_definst_/mp4:BLKonline_high/playlist.m3u8?ref=medienportal-sachsen- -#EXTINF:-1 tvg-id="BRFernsehenNord.de",BR Fernsehen Nord (720p) +#EXTINF:-1 tvg-id="BRFernsehenNord.de",BR Fernsehen Nord (720p) https://mcdn.br.de/br/fs/bfs_nord/hls/de/master.m3u8 #EXTINF:-1 tvg-id="BRFernsehenSud.de",BR Fernsehen Sรผd (720p) https://brcdn.vo.llnwd.net/br/fs/bfs_sued/hls/de/master.m3u8 diff --git a/streams/dk.m3u b/streams/dk.m3u index 73d385b91..3c6204f4b 100644 --- a/streams/dk.m3u +++ b/streams/dk.m3u @@ -29,13 +29,13 @@ https://cdn-lt-live.tvsyd.dk/env/cluster-1-e.live.nvp1/live/hls/p/1956351/e/0_e9 https://cdnapi.kaltura.com/p/2158211/sp/327418300/playManifest/entryId/1_24gfa7qq/protocol/https/format/applehttp/a.m3u8 #EXTINF:-1 tvg-id="KanalHovedstaden.dk",Kanal Hovedstaden (720p) [Not 24/7] http://khkbh.dk:8080/hls/livestream/index.m3u8 -#EXTINF:-1 tvg-id="DRTV.dk",DRTV (TV Avisen) (720p) +#EXTINF:-1 tvg-id="DRTV.dk",DRTV (TV Avisen) (720p) https://drevent01hls.akamaized.net/hls/live/2014198/drevent01/master.m3u8 -#EXTINF:-1 tvg-id="TVMidtvest.dk",TV Midtvest (1080p) +#EXTINF:-1 tvg-id="TVMidtvest.dk",TV Midtvest (1080p) https://cdnapisec.kaltura.com/p/1953371/sp/195337100/playManifest/entryId/1_qwqu2d0z/protocol/https/format/applehttp/a.m3u8 -#EXTINF:-1 tvg-id="TV2Ost.dk",TV2 ร˜st (1080p) +#EXTINF:-1 tvg-id="TV2Ost.dk",TV2 ร˜st (1080p) https://cdnapisec.kaltura.com/p/1953381/sp/195338100/playManifest/entryId/0_zphj9q61/protocol/https/format/applehttp/a.m3u8 -#EXTINF:-1 tvg-id="TV2Nord.dk",TV2 Nord (1080p) +#EXTINF:-1 tvg-id="TV2Nord.dk",TV2 Nord (1080p) https://cdnapisec.kaltura.com/p/1956931/sp/195693100/playManifest/entryId/1_h9yfe7h2/protocol/https/format/applehttp/a.m3u8 #EXTINF:-1 tvg-id="TVStorbyen.dk",BL-TV/TV Storbyen (720p) [Not 24/7] https://5eeb3940cfaa0.streamlock.net/webtv_live/_definst_/mp4:kanalnordvest/playlist.m3u8 diff --git a/streams/do.m3u b/streams/do.m3u index e3fb992fc..c2f3498cf 100644 --- a/streams/do.m3u +++ b/streams/do.m3u @@ -97,7 +97,7 @@ https://cm.hostlagarto.com:4445/Hmtv/hmtv.myStream/playlist.m3u8 https://hilandofinotv.essastream.com:3606/live/canalhilandofinotvlive.m3u8 #EXTINF:-1 tvg-id="Hits360TV.do",Hits 360 TV (720p) [Not 24/7] http://cm.hostlagarto.com:8081/hits360tv/hits360HD.myStream/playlist.m3u8 -#EXTINF:-1 tvg-id="HM.do",HMTV (720p) +#EXTINF:-1 tvg-id="HM.do",HMTV (720p) https://cm.hostlagarto.com:4445/Hmtv/hmtv.myStream/playlist.m3u8 #EXTINF:-1 tvg-id="HTVLive.do",HTV Live (1080p) https://vdo1.streamgato.us:3833/live/canalhtvlivelive.m3u8 @@ -271,47 +271,47 @@ https://ss3.domint.net:3108/zol_str/vzol/playlist.m3u8 https://lb00zdigital.streamprolive.com/mnt/hls/live.m3u8 #EXTINF:-1 tvg-id="Area809ElOriginal.do",Area 809 El Original (1080p) https://samson.streamerr.co:8081/rudydurisimotv/index.m3u8 -#EXTINF:-1 tvg-id="Telemicro.do",Telemicro (480p) +#EXTINF:-1 tvg-id="Telemicro.do",Telemicro (480p) http://51.81.93.239:8084/hls/tmicro.m3u8 -#EXTINF:-1 tvg-id="Digital15.do",Digital 15 (480p) +#EXTINF:-1 tvg-id="Digital15.do",Digital 15 (480p) http://51.81.93.29:8084/hls/d15.m3u8 -#EXTINF:-1 tvg-id="Telecentro.do",Telecentro (480p) +#EXTINF:-1 tvg-id="Telecentro.do",Telecentro (480p) http://51.81.93.239:8084/hls/telecentro.m3u8 #EXTINF:-1 tvg-id="ColorVision.do",Color Visiรณn (720p) [Not 24/7] http://paz.sytes.net:32769/memfs/6aa68aa7-49e0-427c-be37-d60daecb939f.m3u8 -#EXTINF:-1 tvg-id="BonchesLatinosTV.do",Bonches Latinos TV (720p) +#EXTINF:-1 tvg-id="BonchesLatinosTV.do",Bonches Latinos TV (720p) https://ss5.domint.net:3172/btv_str/bonchestv/playlist.m3u8 #EXTINF:-1 tvg-id="ClaroTelevisionDominicana.do",Claro Televisiรณn Dominicana (360p) https://vsrv2.az-streamingserver.com:3960/live/claroteledomlive.m3u8 -#EXTINF:-1 tvg-id="ClaroVisionTV.do",Claro Visiรณn TV (720p) +#EXTINF:-1 tvg-id="ClaroVisionTV.do",Claro Visiรณn TV (720p) https://vsrv2.az-streamingserver.com:3057/live/clarovisiontvlive.m3u8 -#EXTINF:-1 tvg-id="El75.do",El 75 (720p) +#EXTINF:-1 tvg-id="El75.do",El 75 (720p) https://castv10.plugstreaming.com:19360/el75/el75.m3u8 -#EXTINF:-1 tvg-id="Enntivision.do",Enntivisiรณn (720p) +#EXTINF:-1 tvg-id="Enntivision.do",Enntivisiรณn (720p) https://rdn.essastream.com:3356/live/enntivisiontvlive.m3u8 -#EXTINF:-1 tvg-id="FRATATV.do",FRATA TV (720p) +#EXTINF:-1 tvg-id="FRATATV.do",FRATA TV (720p) https://cdn9.streamgato.us:3602/live/fratatvlive.m3u8 #EXTINF:-1 tvg-id="LaVozdelTropico.do",La Voz del Trรณpico (480p) [Not 24/7] https://ss2.domint.net:3226/vttv_str/tropicotv/playlist.m3u8 #EXTINF:-1 tvg-id="LocomotionTV.do",Locomotion TV (480p) [Not 24/7] http://51.222.85.85:81/hls/loco/index.m3u8 -#EXTINF:-1 tvg-id="NisibonTV.do",Nisibon TV (480p) +#EXTINF:-1 tvg-id="NisibonTV.do",Nisibon TV (480p) https://250weu.bozztv.com/ssh101/ssh101/nisibontv48/playlist.m3u8 -#EXTINF:-1 tvg-id="PinponTV.do",Pinpon TV (720p) +#EXTINF:-1 tvg-id="PinponTV.do",Pinpon TV (720p) https://vdo2.streamgato.us:3613/live/pinpontvlive.m3u8 #EXTINF:-1 tvg-id="RETV.do",R&E TV (480p) [Not 24/7] https://multimedia.tmcreativos.com:1936/ekhmygctur/ekhmygctur/playlist.m3u8 -#EXTINF:-1 tvg-id="Rumba985FM.do",Rumba 98.5 FM (720p) +#EXTINF:-1 tvg-id="Rumba985FM.do",Rumba 98.5 FM (720p) https://ss5.domint.net:3038/rum_str/rumba985fm/playlist.m3u8 #EXTINF:-1 tvg-id="SomosTopoPointTV.do",Somos Topo Point TV (1080p) [Not 24/7] https://cloudflare.streamgato.us:3901/live/somostopopointtvlive.m3u8 #EXTINF:-1 tvg-id="Televida.do",Televida Canal 41 (720p) [Not 24/7] https://ythls.onrender.com/channel/UCGwhsjKuqSNscX-XjtuF_yA.m3u8 -#EXTINF:-1 tvg-id="TVLuz.do",TV Luz (480p) +#EXTINF:-1 tvg-id="TVLuz.do",TV Luz (480p) https://rdn.essastream.com:3307/live/tvluzlive.m3u8 #EXTINF:-1 tvg-id="VegaTeve.do",VegaTeve (1080p) [Not 24/7] https://kali.vdopanel.com:3396/live/arseniolive.m3u8 -#EXTINF:-1 tvg-id="VTVCanal32.do",VTV Canal 32 (1080p) +#EXTINF:-1 tvg-id="VTVCanal32.do",VTV Canal 32 (1080p) https://cnn.livestreaminggroup.info:3507/live/vtv32live.m3u8 #EXTINF:-1 tvg-id="CanaTVDigital.do",Cana TV Digital (720p) [Not 24/7] https://livetv.305streamhd.com:3707/live/canatvdigitallive.m3u8 diff --git a/streams/dz.m3u b/streams/dz.m3u index 56c511290..e5a184ddd 100644 --- a/streams/dz.m3u +++ b/streams/dz.m3u @@ -14,5 +14,5 @@ https://ennahar-live.dzsecurity.net/fullres/EnnaharTV_First/playlist.m3u8 https://d2p6676ajpsg1j.cloudfront.net/out/v1/2daff8b433344d659bd5079224afc3ab/index.m3u8 #EXTINF:-1 tvg-id="SamiraTV.dz",Samira TV (1080p) https://shls-live-ak.akamaized.net/out/v1/2daff8b433344d659bd5079224afc3ab/index.m3u8 -#EXTINF:-1 tvg-id="TV2.dz",Canal Algรฉrie (480p) +#EXTINF:-1 tvg-id="TV2.dz",Canal Algรฉrie (480p) https://bozztv.com/inim03/live1/giniko_canalalgerie/chunks.m3u8 diff --git a/streams/ec.m3u b/streams/ec.m3u index d65d93cad..83fc743ac 100644 --- a/streams/ec.m3u +++ b/streams/ec.m3u @@ -47,17 +47,17 @@ https://video1.makrodigital.com/rtu/rtu/chunks.m3u8?nimblesessionid= https://live.obslivestream.com/sonoondatv/index.m3u8 #EXTINF:-1 tvg-id="Telerama.ec",Telerama (240p) [Not 24/7] https://envivo.telerama.ec/stream.m3u8 -#EXTINF:-1 tvg-id="TVC.ec",TVC (480p) +#EXTINF:-1 tvg-id="TVC.ec",TVC (480p) https://d2vb5iv6i34lh5.cloudfront.net/TVCEC/d58f5eb5cbb9ad9c56649a0083de7c8b.sdp/playlist.m3u8 #EXTINF:-1 tvg-id="WuanPlus.ec",Wuan+ (1080p) https://video2.makrodigital.com/wuanplus/wuanplus/playlist.m3u8 #EXTINF:-1 tvg-id="ZaracayTV.ec",Zaracay TV (1080p) [Not 24/7] https://video2.makrodigital.com/zaracay/zaracay/playlist.m3u8 -#EXTINF:-1 tvg-id="AntenaUnoRadiovideo.ec",Antena Uno RadioVideo (360p) +#EXTINF:-1 tvg-id="AntenaUnoRadiovideo.ec",Antena Uno RadioVideo (360p) https://tvdatta.com:3578/live/antenaunolive.m3u8 -#EXTINF:-1 tvg-id="EcuadorTV.ec",Ecuador TV (720p) +#EXTINF:-1 tvg-id="EcuadorTV.ec",Ecuador TV (720p) https://customer-qczi39xffvq35rae.cloudflarestream.com/f41c1d91e17809daf3bc4a6c212680b7/manifest/video.m3u8 -#EXTINF:-1 tvg-id="TVLegislativa.ec",TV Legislativa (1080p) +#EXTINF:-1 tvg-id="TVLegislativa.ec",TV Legislativa (1080p) http://181.198.32.153:8080/hls/stream.m3u8 #EXTINF:-1 tvg-id="UCSGTV.ec",UCSG TV (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCH5499PHqkqKPsGEUJl5lZg.m3u8 diff --git a/streams/ee.m3u b/streams/ee.m3u index 2de95e739..c34a39dba 100644 --- a/streams/ee.m3u +++ b/streams/ee.m3u @@ -15,5 +15,7 @@ http://dc.tbnbaltia.eu:8088/dvr/rewind-21600.m3u8 https://le02.euddn.net/6487956abb8faf0706d8c4c2465f54cb3625b812fec8e13d11668907ff00f44b004ea22691a9216c71ebda22b7e6e57c8b923aeee9e1e6aa447947c014b7a3babd73ab865562f4ae463ce0c617da65805296ed52a0af64d7d881781d282ea970de7a1ab524c1ea73e271a8df71d43212f4850e2d81241308886184db1abf516f2d6d0b9965402fc7c960e27fa968eabb077474e7493c278ebae58d614923fb2f5c76c2865cb681763ffd765a39a629ce/smil:rk_live_1.smil/playlist.m3u8 #EXTINF:-1 tvg-id="DelfiTV.ee",Delfi TV (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCQGN5-eIjRRy6MGcHKDE_6g.m3u8 -#EXTINF:-1 tvg-id="TVN.ee",TVN (1080p) +#EXTINF:-1 tvg-id="TVN.ee",TVN (1080p) https://s4.telset.ee/tvn/index.m3u8?filter.tracks=v1a1&token=tvn_token +#EXTINF:-1 tvg-id="Kanal7.ee",Kanal 7 +http://89.254.128.5:22280/duo7_hd/index.m3u8 diff --git a/streams/eg.m3u b/streams/eg.m3u index 4dff1f1af..816cbf953 100644 --- a/streams/eg.m3u +++ b/streams/eg.m3u @@ -57,7 +57,7 @@ https://ythls.onrender.com/channel/UCXw5vClfMWccw-OocfhQHiA.m3u8 https://ythls.onrender.com/channel/UCzKamNFKCvzLOrqfBUAsD6Q.m3u8 #EXTINF:-1 tvg-id="DaawahTV.tr",Daawah TV (720p) [Not 24/7] https://cdg8.edge.technocdn.com/daawahtv/live/playlist.m3u8 -#EXTINF:-1 tvg-id="AlhayatTV.eg",Alhayat TV (720p) +#EXTINF:-1 tvg-id="AlhayatTV.eg",Alhayat TV (720p) https://cdn3.wowza.com/5/OE5HREpIcEkySlNT/alhayat-live/ngrp:livestream_all/playlist.m3u8 #EXTINF:-1 tvg-id="CAFTV.eg",CAF TV (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCr5K057x3mHroPHsNk9OiwA.m3u8 diff --git a/streams/es.m3u b/streams/es.m3u index 2d4e1ae91..17fcd89bb 100644 --- a/streams/es.m3u +++ b/streams/es.m3u @@ -237,7 +237,7 @@ https://streamingtvi.gestec-video.com/hls/tvixa.m3u8 https://nim.controlstreams.com/LiveApp/islatel/playlist.m3u8 #EXTINF:-1 tvg-id="JuntadeCastillayLeon.es",Junta de Castilla y Leรณn (1080p) [Not 24/7] https://16escalones-live2.flumotion.com/chunks.m3u8 -#EXTINF:-1 tvg-id="La1.es",La 1 (720p) +#EXTINF:-1 tvg-id="La1.es",La 1 (720p) https://ztnr.rtve.es/ztnr/1688877.m3u8 #EXTINF:-1 tvg-id="La1.es",La 1 (720p) [Geo-blocked] https://rtvelivestream.akamaized.net/rtvesec/la1/la1_main_720.m3u8 @@ -550,7 +550,7 @@ https://liveingesta318.cdnmedia.tv/9tvlive/smil:live.smil/playlist.m3u8?DVR #EXTINF:-1 tvg-id="etv.es",ETV Terramar (1080p) #EXTVLCOPT:http-referrer=https://player.instantvideocloud.net/ https://liveingesta318.cdnmedia.tv/tvetvlive/smil:rtmp01.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="La1Catalunya.es",La 1 Catalunya (720p) +#EXTINF:-1 tvg-id="La1Catalunya.es",La 1 Catalunya (720p) https://ztnr.rtve.es/ztnr/3293681.m3u8 #EXTINF:-1 tvg-id="La1Catalunya.es",La 1 Catalunya (720p) [Geo-blocked] https://rtvelivestream-clnx.rtve.es/rtvesec/cat/la1_cat_main_720.m3u8 diff --git a/streams/fi.m3u b/streams/fi.m3u index ce93abcfe..1f034aa56 100644 --- a/streams/fi.m3u +++ b/streams/fi.m3u @@ -37,13 +37,13 @@ https://yletv.akamaized.net/hls/live/622367/yletvteemafemfin/playlist.m3u8 https://yletv.akamaized.net/hls/live/622365/yletv1fin/playlist.m3u8 #EXTINF:-1 tvg-id="YleTV2.fi",YLE TV 2 (720p) [Geo-blocked] https://yletv.akamaized.net/hls/live/622366/yletv2fin/playlist.m3u8 -#EXTINF:-1 tvg-id="MTVUutiset.fi",MTV Uutiset (720p) +#EXTINF:-1 tvg-id="MTVUutiset.fi",MTV Uutiset (720p) https://live.streaming.a2d.tv/asset/20025962.isml/.m3u8 #EXTINF:-1 tvg-id="AlfaTV.fi",IRR-TV (576p) [Not 24/7] https://irrtv.digitacdn.net/live/_definst_/irrtv/amlst:irrtv.amlst/playlist.m3u8 -#EXTINF:-1 tvg-id="ArvasTV.fi",ร…rvasTV (1080p) [Not 24/7] +#EXTINF:-1 tvg-id="ArvasTV.fi",ร…rvasTV (1080p) [Not 24/7] https://ythls.onrender.com/channel/UC__baaN73Zp5Hn0N_d4BTdg.m3u8 -#EXTINF:-1 tvg-id="WorTV.fi",WรถrTV (1080p) [Not 24/7] +#EXTINF:-1 tvg-id="WorTV.fi",WรถrTV (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCQ36NJ8-XNhBDvSSsh8gS2Q.m3u8 -#EXTINF:-1 tvg-id="SundomTV.fi",Sundom TV (1080p) [Not 24/7] +#EXTINF:-1 tvg-id="SundomTV.fi",Sundom TV (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCyDiTtktwmrc20Bvs_G4pow.m3u8 diff --git a/streams/fr.m3u b/streams/fr.m3u index 31304db9b..d2d5afc7a 100644 --- a/streams/fr.m3u +++ b/streams/fr.m3u @@ -301,7 +301,7 @@ https://ythls.onrender.com/channel/UCjbvuMcOCvyYFZKKPvU6QHw.m3u8 https://mn-nl.mncdn.com/awraastv/awraastv_hd.smil/playlist.m3u8 #EXTINF:-1 tvg-id="",Evangรฉlisation des Nations (EVDN) https://ythls.onrender.com/channel/UCt6UJcNkqVKIGAuFg23oh2w.m3u8 -#EXTINF:-1 tvg-id="",HANDICAP TV France +#EXTINF:-1 tvg-id="",HANDICAP TV France https://srv.webtvmanager.fr:3697/stream/play.m3u8 #EXTINF:-1 tvg-id="LEquipe.fr",L'EQUIPE 21 TV https://d3awaj0f2u3w26.cloudfront.net/v1/manifest/3722c60a815c199d9c0ef36c5b73da68a62b09d1/cc-gy7euubgydp20-ssai-prd/8fd3efae-4468-4ca0-9486-c6cdcb7b65d7/2.m3u8 @@ -309,7 +309,7 @@ https://d3awaj0f2u3w26.cloudfront.net/v1/manifest/3722c60a815c199d9c0ef36c5b73da https://d2l55nvfkhk4sg.cloudfront.net/v1/manifest/3722c60a815c199d9c0ef36c5b73da68a62b09d1/cc-jg7go1lqzgpny-ssai-prd/435d04a5-ab47-47c5-a2c1-bae01ae6d0c1/2.m3u8 #EXTINF:-1 tvg-id="MosaikCristal.fr",Mosaik Cristal https://ythls.onrender.com/channel/UCQC0xLG_W0QpqAXQ4-yhwBA.m3u8 -#EXTINF:-1 tvg-id="MuseumTV.fr",Museum TV +#EXTINF:-1 tvg-id="MuseumTV.fr",Museum TV https://live2.creacast.com/museum-france/smil:museum-france.smil/master.m3u8 #EXTINF:-1 tvg-id="P2MTV.fr",P2M TV (720p) https://vdo2.pro-fhi.net:3207/stream/play.m3u8 @@ -337,3 +337,33 @@ https://tv3v.hdr-tv.com/live/tv3v/livestream/master.m3u8 https://static.lefigaro.fr/secom/tnt.m3u8 #EXTINF:-1 tvg-id="",LE FIGARO IDF https://figarotv-live.freecaster.com/live/freecaster/figarotv.m3u8 +#EXTINF:-1 tvg-id="TFX.fr",TFX +http://livetv.ktv.zone/13/play.m3u8 +#EXTINF:-1 tvg-id="TMC.fr",TMC +http://livetv.ktv.zone/12/play.m3u8 +#EXTINF:-1 tvg-id="TF1SeriesFilms.fr",TF1 Series Films +http://livetv.ktv.zone/22/play.m3u8 +#EXTINF:-1 tvg-id="TF1.fr",TF 1 +http://livetv.ktv.zone/3/play.m3u8 +#EXTINF:-1 tvg-id="France3RhoneAlpes.fr",France 3 Rhone-Alpes +http://livetv.ktv.zone/233/play.m3u8 +#EXTINF:-1 tvg-id="France3ProvenceAlpes.fr",France 3 Provence-Alpes +http://livetv.ktv.zone/232/play.m3u8 +#EXTINF:-1 tvg-id="France3NouvelleAquitaine.fr",France 3 Nouvelle-Aquitaine +http://livetv.ktv.zone/231/play.m3u8 +#EXTINF:-1 tvg-id="France3NouvelleAquitaine.fr",France 3 Nouvelle-Aquitaine +http://livetv.ktv.zone/224/play.m3u8 +#EXTINF:-1 tvg-id="France3CotedAzur.fr",France 3 Cote d'Azur +http://livetv.ktv.zone/220/play.m3u8 +#EXTINF:-1 tvg-id="France3Bretagne.fr",France 3 Bretagne +http://livetv.ktv.zone/216/play.m3u8 +#EXTINF:-1 tvg-id="France3Auvergne.fr",France 3 Auvergne +http://livetv.ktv.zone/213/play.m3u8 +#EXTINF:-1 tvg-id="France3Aquitaine.fr",France 3 Aquitaine +http://livetv.ktv.zone/212/play.m3u8 +#EXTINF:-1 tvg-id="France5.fr",France 5 +http://livetv.ktv.zone/107/play.m3u8 +#EXTINF:-1 tvg-id="France3.fr",France 3 +http://livetv.ktv.zone/105/play.m3u8 +#EXTINF:-1 tvg-id="France2.fr",France 2 +http://livetv.ktv.zone/104/play.m3u8 diff --git a/streams/fr_persiana.m3u b/streams/fr_persiana.m3u index e74e3c62e..5f5f2a036 100644 --- a/streams/fr_persiana.m3u +++ b/streams/fr_persiana.m3u @@ -47,7 +47,7 @@ https://persiana-sonnati.icdndhcp.com/hls/stream.m3u8 http://51.210.199.16/hls/stream.m3u8 #EXTINF:-1 tvg-id="Persiana1.fr",Persiana One (720p) [Not 24/7] https://persiana-one.icdndhcp.com/hls/stream.m3u8 -#EXTINF:-1 tvg-id="PersianaRap.fr",Persiana Rap (720p) +#EXTINF:-1 tvg-id="PersianaRap.fr",Persiana Rap (720p) https://persiana-rap.icdndhcp.com/hls/stream.m3u8 #EXTINF:-1 tvg-id="PersianaSports.fr",Persiana Sports (720p) https://af.ayas.ir/hls2/persiana.m3u8 diff --git a/streams/gh.m3u b/streams/gh.m3u index 8e67ad909..f8cb7002d 100644 --- a/streams/gh.m3u +++ b/streams/gh.m3u @@ -47,5 +47,5 @@ https://ythls.onrender.com/channel/UC9hyY_wWSJnkUKPfrfOP4dQ.m3u8 https://ythls.onrender.com/channel/UCZVRKO43AAGpAJs1isPEg-g.m3u8 #EXTINF:-1 tvg-id="WontumiTV.gh",Wontumi TV (720p) [Not 24/7] https://ythls.onrender.com/channel/UCn7CnwFDT3wXBE3xqQm5riQ.m3u8 -#EXTINF:-1 tvg-id="EwenyigbaTV.de",Ewenyigba TV (720p) +#EXTINF:-1 tvg-id="EwenyigbaTV.de",Ewenyigba TV (720p) https://barakyah-hls.secdn.net/barakyah-channel/play/mp4:enyigba/playlist.m3u8 diff --git a/streams/gr.m3u b/streams/gr.m3u index 2ef563881..eac580561 100644 --- a/streams/gr.m3u +++ b/streams/gr.m3u @@ -187,7 +187,7 @@ http://web.onair-radio.eu:1935/explorecy/explorecy/playlist.m3u8 http://5db313b643fd8.streamlock.net:1935/ZerounoTV/ZerounoTV/playlist.m3u8 #EXTINF:-1 tvg-id="ZouglaTV.gr",Zougla TV (720p) https://zouglacam-mdc-secure.akamaized.net/zouglalive/main/playlist.m3u8 -#EXTINF:-1 tvg-id="MakedoniaTV.gr",Makedonia TV (1080p) [Geo-blocked] +#EXTINF:-1 tvg-id="MakedoniaTV.gr",Makedonia TV (1080p) [Geo-blocked] http://dlm34ll53zqql.cloudfront.net/out/v1/d4177931deff4c7ba994b8126d153d9f/maktv.m3u8 #EXTINF:-1 tvg-id="PronewsTV.gr",ProNews TV (720p) http://di-8zai2lrc.leasewebultracdn.com/pronews/ngrp:myStream_all/playlist.m3u8 @@ -235,5 +235,6 @@ http://d1nfykbwa3n98t.cloudfront.net/out/v1/6e5667da5a6843899a337dea72adb61b/ant http://ovh-edge-h.evrideo.com:8080/23e234f2-aec8-4804-b694-4cdd71d2d48d_MONITORING_HLS/video_240p_WEBRTC_MONITORING.m3u8 #EXTINF:-1 tvg-id="AigaioTV.gr",Aigaio TV (360p) https://250weu.bozztv.com/ssh101/ssh101/aigaiotv/playlist.m3u8 -#EXTINF:-1 tvg-id="AstraTV.gr",Astra TV (480p) +#EXTINF:-1 tvg-id="AstraTV.gr",Astra TV (480p) [Not 24/7] +#EXTVLCOPT:http-referrer=https://astratv.gr https://ssh101.bozztv.com/ssh101/astratv/playlist.m3u8 diff --git a/streams/gt.m3u b/streams/gt.m3u index 3977c16a8..39a19a607 100644 --- a/streams/gt.m3u +++ b/streams/gt.m3u @@ -99,11 +99,11 @@ https://cdn.streamhispanatv.net:3409/live/soltvlive.m3u8 https://streamtv.intervenhosting.net:3155/live/juandelacruz3live.m3u8 #EXTINF:-1 tvg-id="CanalAntigua.gt",Canal Antigua (1080p) [Not 24/7] https://5ca9af4645e15.streamlock.net/antigua/antigua.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="CanaldeGobierno.gt",Canal de Gobierno (1080p) [Not 24/7] +#EXTINF:-1 tvg-id="CanaldeGobierno.gt",Canal de Gobierno (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCh4GjKBcqxOsL_Bt8gCCSLg.m3u8 -#EXTINF:-1 tvg-id="ElRoiTV.gt",El-Roi TV (720p) +#EXTINF:-1 tvg-id="ElRoiTV.gt",El-Roi TV (720p) https://cdn.streamhispanatv.net:3648/live/elroitvlive.m3u8 -#EXTINF:-1 tvg-id="PMCSTV.gt",PMCS TV (720p) +#EXTINF:-1 tvg-id="PMCSTV.gt",PMCS TV (720p) https://cdn.streamhispanatv.net:3787/live/pmcstvlive.m3u8 -#EXTINF:-1 tvg-id="Canal25Regional.gt",Canal 25 Regional (720p) +#EXTINF:-1 tvg-id="Canal25Regional.gt",Canal 25 Regional (720p) https://srv6.zcast.com.br/canalsantarosa/canalsantarosa/playlist.m3u8 diff --git a/streams/hn.m3u b/streams/hn.m3u index def41b2eb..eb71da962 100644 --- a/streams/hn.m3u +++ b/streams/hn.m3u @@ -103,19 +103,19 @@ https://mdstrm.com/live-stream-playlist/6287fdc9303e3008289ab711.m3u8 https://mdstrm.com/live-stream-playlist/6287fda8ea3b8b397d1ca2ed.m3u8 #EXTINF:-1 tvg-id="AlfaOmegaVision.hn",Alfa & Omega Vision (480p) [Not 24/7] https://srv.panelcast.net/dorian/dorian/playlist.m3u8 -#EXTINF:-1 tvg-id="45TV.hn",45 TV (720p) +#EXTINF:-1 tvg-id="45TV.hn",45 TV (720p) https://stream.alojamientowebgt.com:3656/live/tv45live.m3u8 #EXTINF:-1 tvg-id="GloboTV.hn",Globo TV (1080p) [Not 24/7] https://panel.dattalive.com/8122/8122/playlist.m3u8 #EXTINF:-1 tvg-id="MayaTV.hn",Maya TV (480p) [Not 24/7] https://media.streambrothers.com:19360/8356/8356.m3u8 -#EXTINF:-1 tvg-id="RTV.hn",RTV Honduras (1080p) +#EXTINF:-1 tvg-id="RTV.hn",RTV Honduras (1080p) https://stmv1.zcasthn.com.br/rtv/rtv/playlist.m3u8 -#EXTINF:-1 tvg-id="GuayapeTV.hn",Guayape TV (1080p) +#EXTINF:-1 tvg-id="GuayapeTV.hn",Guayape TV (1080p) https://srv6.zcast.com.br/guayapetv/guayapetv/playlist.m3u8 -#EXTINF:-1 tvg-id="Canal51.hn",Canal 51 (720p) +#EXTINF:-1 tvg-id="Canal51.hn",Canal 51 (720p) https://tvcn51.com/hls/cn51480.m3u8 -#EXTINF:-1 tvg-id="GirasolTV.hn",Girasol TV (720p) +#EXTINF:-1 tvg-id="GirasolTV.hn",Girasol TV (720p) https://video.misistemareseller.com/Girasoltv/Girasoltv/playlist.m3u8 -#EXTINF:-1 tvg-id="Telerayo.hn",Telerayo (1080p) +#EXTINF:-1 tvg-id="Telerayo.hn",Telerayo (1080p) https://emisoras.hn:8081/telerayo/index.m3u8 diff --git a/streams/ht.m3u b/streams/ht.m3u index 8c35712a5..758f52f0d 100644 --- a/streams/ht.m3u +++ b/streams/ht.m3u @@ -51,15 +51,15 @@ https://ythls.onrender.com/channel/UCOvGbDh5biuOqjx6G3CdrQg.m3u8 https://ythls.onrender.com/channel/UCBJ9zxns1hxblYZw4urBd_w.m3u8 #EXTINF:-1 tvg-id="TVCaraibes.ht",RTV Caraibes (480p) [Not 24/7] https://ythls.onrender.com/channel/UCWwP6VfG61i7BWSV0H3Jn9A.m3u8 -#EXTINF:-1 tvg-id="RadioTelevisionHirondelle.ht",Radio Tรฉlรฉvision Hirondelle (480p) +#EXTINF:-1 tvg-id="RadioTelevisionHirondelle.ht",Radio Tรฉlรฉvision Hirondelle (480p) https://acwstream.com/acw/hbrtvh/index.fmp4.m3u8 -#EXTINF:-1 tvg-id="TelemastersTV.us",Telemasters TV (720p) +#EXTINF:-1 tvg-id="TelemastersTV.us",Telemasters TV (720p) https://link.frontlayer.com/services/hls2/fl823467/index.m3u8 -#EXTINF:-1 tvg-id="TeleMIX.us",TeleMIX (720p) +#EXTINF:-1 tvg-id="TeleMIX.us",TeleMIX (720p) https://haititivi.com/haiti/telemix1/index.m3u8 -#EXTINF:-1 tvg-id="RTHTV1.us",RTH-TV1 (1080p) +#EXTINF:-1 tvg-id="RTHTV1.us",RTH-TV1 (1080p) https://2-fss-2.streamhoster.com/pl_120/amlst:206708-4203440/playlist.m3u8 -#EXTINF:-1 tvg-id="RTHTV2.us",RTH-TV2 Gospel (1080p) +#EXTINF:-1 tvg-id="RTHTV2.us",RTH-TV2 Gospel (1080p) https://2-fss-2.streamhoster.com/pl_120/amlst:206708-4202592/playlist.m3u8 #EXTINF:-1 tvg-id="",Radio Tรฉlรฉ Yaguana (1080p) https://lakay.online/relay/teleyaguana/index.m3u8 diff --git a/streams/hu.m3u b/streams/hu.m3u index 06401b3ce..ede5210f4 100644 --- a/streams/hu.m3u +++ b/streams/hu.m3u @@ -169,101 +169,101 @@ http://146.59.85.40:89/m2hd/index.m3u8 http://194.76.186.33:8000/play/a03z/index.m3u8 #EXTINF:-1 tvg-id="HBOHungary.hu",HBO Hungary (1080p) http://194.76.186.33:8000/play/a03n/index.m3u8 -#EXTINF:-1 tvg-id="SuperOne.hu",SuperOne (1080p) +#EXTINF:-1 tvg-id="SuperOne.hu",SuperOne (1080p) http://84.17.61.203:8086/udp/238.2.25.83:1234 -#EXTINF:-1 tvg-id="CoolTV.hu",Cool TV (1080p) +#EXTINF:-1 tvg-id="CoolTV.hu",Cool TV (1080p) http://146.59.85.40:89/coolhd/index.m3u8 -#EXTINF:-1 tvg-id="CoolTV.hu",Cool TV (576p) +#EXTINF:-1 tvg-id="CoolTV.hu",Cool TV (576p) http://194.76.186.33:8000/play/a01l/index.m3u8 #EXTINF:-1 tvg-id="CoolTV.hu",Cool TV (576p) http://194.76.186.33:8000/play/a04i/index.m3u8 -#EXTINF:-1 tvg-id="SorozatPlus.hu",Sorozat+ (576p) +#EXTINF:-1 tvg-id="SorozatPlus.hu",Sorozat+ (576p) http://194.76.186.33:8000/play/a05e/index.m3u8 -#EXTINF:-1 tvg-id="MAX4.hu",MAX4 (576p) +#EXTINF:-1 tvg-id="MAX4.hu",MAX4 (576p) http://146.59.85.40:89/max4/index.m3u8 -#EXTINF:-1 tvg-id="RTLGold.hu",RTL Gold (576p) +#EXTINF:-1 tvg-id="RTLGold.hu",RTL Gold (576p) http://194.76.186.33:8000/play/a05h/index.m3u8 -#EXTINF:-1 tvg-id="TV2.hu",TV2 (1080p) +#EXTINF:-1 tvg-id="TV2.hu",TV2 (1080p) http://194.76.186.33:8000/play/a023/index.m3u8 -#EXTINF:-1 tvg-id="TV2.hu",TV2 (1080p) +#EXTINF:-1 tvg-id="TV2.hu",TV2 (1080p) http://146.59.85.40:89/tv2hd/index.m3u8 -#EXTINF:-1 tvg-id="TV2.hu",TV2 (576p) +#EXTINF:-1 tvg-id="TV2.hu",TV2 (576p) http://194.76.186.33:8000/play/a01f/index.m3u8 -#EXTINF:-1 tvg-id="TV2.hu",TV2 (1080p) +#EXTINF:-1 tvg-id="TV2.hu",TV2 (1080p) http://194.76.186.33:8000/play/a043/index.m3u8 -#EXTINF:-1 tvg-id="TV2.hu",TV2 (576p) +#EXTINF:-1 tvg-id="TV2.hu",TV2 (576p) http://194.76.186.33:8000/play/a04f/index.m3u8 -#EXTINF:-1 tvg-id="RTLKETTO.hu",RTL KETTล (1080p) +#EXTINF:-1 tvg-id="RTLKETTO.hu",RTL KETTล (1080p) http://194.76.186.33:8000/play/a01z/index.m3u8 -#EXTINF:-1 tvg-id="RTLKETTO.hu",RTL KETTล (576p) +#EXTINF:-1 tvg-id="RTLKETTO.hu",RTL KETTล (576p) http://194.76.186.33:8000/play/a05c/index.m3u8 -#EXTINF:-1 tvg-id="RTLKETTO.hu",RTL KETTล (576p) +#EXTINF:-1 tvg-id="RTLKETTO.hu",RTL KETTล (576p) http://194.76.186.33:8000/play/a05i/index.m3u8 -#EXTINF:-1 tvg-id="RTLHAROM.hu",RTL HรROM (1080p) +#EXTINF:-1 tvg-id="RTLHAROM.hu",RTL HรROM (1080p) http://194.76.186.33:8000/play/a02a/index.m3u8 -#EXTINF:-1 tvg-id="RTLHAROM.hu",RTL HรROM (576p) +#EXTINF:-1 tvg-id="RTLHAROM.hu",RTL HรROM (576p) http://194.76.186.33:8000/play/a05d/index.m3u8 -#EXTINF:-1 tvg-id="TV4.hu",TV4 (576p) +#EXTINF:-1 tvg-id="TV4.hu",TV4 (576p) http://194.76.186.33:8000/play/a02z/index.m3u8 -#EXTINF:-1 tvg-id="TV2Kids.hu",TV2 Kids (576p) +#EXTINF:-1 tvg-id="TV2Kids.hu",TV2 Kids (576p) http://146.59.85.40:89/tv2kids/index.m3u8 -#EXTINF:-1 tvg-id="TV2Kids.hu",TV2 Kids (576p) +#EXTINF:-1 tvg-id="TV2Kids.hu",TV2 Kids (576p) http://194.76.186.33:8000/play/a033/index.m3u8 -#EXTINF:-1 tvg-id="MuzsikaTV.hu",Muzsika TV (576p) +#EXTINF:-1 tvg-id="MuzsikaTV.hu",Muzsika TV (576p) http://194.76.186.33:8000/play/a05f/index.m3u8 -#EXTINF:-1 tvg-id="FonixTV.hu",Fล‘nix TV (576p) +#EXTINF:-1 tvg-id="FonixTV.hu",Fล‘nix TV (576p) https://stream.streaming4u.hu/FonixTV/index.fmp4.m3u8 -#EXTINF:-1 tvg-id="DikhTV.hu",Dikh TV (576p) +#EXTINF:-1 tvg-id="DikhTV.hu",Dikh TV (576p) http://194.76.186.33:8000/play/a04h/index.m3u8 #EXTINF:-1 tvg-id="TV2040.hu",TV2040 (720p) [Not 24/7] https://ythls.onrender.com/channel/UC9-eDX-ZzjriryVPE2VnEfQ.m3u8 -#EXTINF:-1 tvg-id="ObudaTV.hu",ร“buda TV (576p) +#EXTINF:-1 tvg-id="ObudaTV.hu",ร“buda TV (576p) https://stream.streaming4u.hu/ObudaTV/index.m3u8 #EXTINF:-1 tvg-id="NYTV.hu",NYTV (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCx7cFh63AWsK3cbfgX3GaaQ.m3u8 -#EXTINF:-1 tvg-id="XVTV.hu",XV TV (480p) +#EXTINF:-1 tvg-id="XVTV.hu",XV TV (480p) https://cloudfront44.lexanetwork.com:1344/relay01/HDE051.sdp/playlist.m3u8 -#EXTINF:-1 tvg-id="BTV.hu",Bรกbolnai TV (360p) +#EXTINF:-1 tvg-id="BTV.hu",Bรกbolnai TV (360p) https://cloudfront44.lexanetwork.com:1344/freerelay/babolnatv.sdp/playlist.m3u8 #EXTINF:-1 tvg-id="SzarvasiTelevizio.hu",Szarvasi Televรญziรณ (720p) [Not 24/7] https://ythls.onrender.com/channel/UCI25fQ-PhqM2vsdQRLcR8bw.m3u8 -#EXTINF:-1 tvg-id="EgykerTV.hu",Elsรถ Kerรผlet TV (1080p) +#EXTINF:-1 tvg-id="EgykerTV.hu",Elsรถ Kerรผlet TV (1080p) https://iptv01.eurocable.co.hu:443/EC-EGYKERTVHD/index.m3u8 -#EXTINF:-1 tvg-id="",Hangulat TV (720p) +#EXTINF:-1 tvg-id="",Hangulat TV (720p) https://iptv01.eurocable.co.hu:443/EC-HANGULATTV/index.m3u8 -#EXTINF:-1 tvg-id="SIXOTV.hu",SIXO TV (360p) +#EXTINF:-1 tvg-id="SIXOTV.hu",SIXO TV (360p) https://cloudfront44.lexanetwork.com:1344/relay01/HDE038.sdp/playlist.m3u8 -#EXTINF:-1 tvg-id="RTLHungary.hu",RTL Hungary (576p) +#EXTINF:-1 tvg-id="RTLHungary.hu",RTL Hungary (576p) http://194.76.186.33:8000/play/a01e/index.m3u8 -#EXTINF:-1 tvg-id="RTLHungary.hu",RTL Hungary (1080p) +#EXTINF:-1 tvg-id="RTLHungary.hu",RTL Hungary (1080p) http://194.76.186.33:8000/play/a041/index.m3u8 -#EXTINF:-1 tvg-id="RTLHungary.hu",RTL Hungary (576p) +#EXTINF:-1 tvg-id="RTLHungary.hu",RTL Hungary (576p) http://194.76.186.33:8000/play/a04g/index.m3u8 -#EXTINF:-1 tvg-id="M4Sport.hu",M4 Sport (1080p) +#EXTINF:-1 tvg-id="M4Sport.hu",M4 Sport (1080p) http://146.59.85.40:89/m4hd/index.m3u8 -#EXTINF:-1 tvg-id="M4Sport.hu",M4 Sport (1080p) +#EXTINF:-1 tvg-id="M4Sport.hu",M4 Sport (1080p) http://194.76.186.33:8000/play/a02c/index.m3u8 -#EXTINF:-1 tvg-id="M4Sport.hu",M4 Sport (576p) +#EXTINF:-1 tvg-id="M4Sport.hu",M4 Sport (576p) http://194.76.186.33:8000/play/a02p/index.m3u8 -#EXTINF:-1 tvg-id="M1.hu",M1 (576p) +#EXTINF:-1 tvg-id="M1.hu",M1 (576p) http://146.59.85.40:89/m1sd/index.m3u8 -#EXTINF:-1 tvg-id="M1.hu",M1 (576p) +#EXTINF:-1 tvg-id="M1.hu",M1 (576p) http://194.76.186.33:8000/play/a00w/index.m3u8 -#EXTINF:-1 tvg-id="M1.hu",M1 (1080p) +#EXTINF:-1 tvg-id="M1.hu",M1 (1080p) http://194.76.186.33:8000/play/a024/index.m3u8 #EXTINF:-1 tvg-id="M1.hu",M1 (720p) [Not 24/7] https://ythls.onrender.com/channel/UCHJ8gW2vKH5R3VohymtBCrQ.m3u8 -#EXTINF:-1 tvg-id="M5.hu",M5 (1080p) +#EXTINF:-1 tvg-id="M5.hu",M5 (1080p) http://146.59.85.40:89/m5/index.m3u8 -#EXTINF:-1 tvg-id="M5.hu",M5 (576p) +#EXTINF:-1 tvg-id="M5.hu",M5 (576p) http://194.76.186.33:8000/play/a030/index.m3u8 -#EXTINF:-1 tvg-id="M5.hu",M5 (1080p) +#EXTINF:-1 tvg-id="M5.hu",M5 (1080p) http://194.76.186.33:8000/play/a045/index.m3u8 -#EXTINF:-1 tvg-id="DunaWorld.hu",Duna World (576p) +#EXTINF:-1 tvg-id="DunaWorld.hu",Duna World (576p) http://146.59.85.40:89/dunaworld/index.m3u8 -#EXTINF:-1 tvg-id="DunaWorld.hu",Duna World (576p) +#EXTINF:-1 tvg-id="DunaWorld.hu",Duna World (576p) http://194.76.186.33:8000/play/a01i/index.m3u8 -#EXTINF:-1 tvg-id="DunaTV.hu",Duna TV (1080p) +#EXTINF:-1 tvg-id="DunaTV.hu",Duna TV (1080p) http://146.59.85.40:89/dunahd/index.m3u8 #EXTINF:-1 tvg-id="DunaTV.hu",Duna TV (576p) http://194.76.186.33:8000/play/a01u/index.m3u8 @@ -271,25 +271,27 @@ http://194.76.186.33:8000/play/a01u/index.m3u8 http://194.76.186.33:8000/play/a029/index.m3u8 #EXTINF:-1 tvg-id="OrszaggyulesOGYplenaris.hu",Orszรกggyลฑlรฉs (Plenรกris) (720p) [Not 24/7] http://plenaris.parlament.hu:1935/edgelive/smil:mkogyplen.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="OrszaggyulesOGYplenaris.hu",Orszรกggyลฑlรฉs (Plenรกris) (720p) [Not 24/7] +#EXTINF:-1 tvg-id="OrszaggyulesOGYplenaris.hu",Orszรกggyลฑlรฉs (Plenรกris) (720p) [Not 24/7] https://plenaris.parlament.hu:446/edgelive/smil:mkogyplen.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="OrszaggyulesOGYTAB.hu",Orszรกggyลฑlรฉs (Tรถrvรฉnyalkotรกsi bizottsรกg) (720p) [Not 24/7] +#EXTINF:-1 tvg-id="OrszaggyulesOGYTAB.hu",Orszรกggyลฑlรฉs (Tรถrvรฉnyalkotรกsi bizottsรกg) (720p) [Not 24/7] http://tab.parlament.hu:1935/edgelive/smil:mkogytab.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="OrszaggyulesOGYTAB.hu",Orszรกggyลฑlรฉs (Tรถrvรฉnyalkotรกsi bizottsรกg) (720p) [Not 24/7] +#EXTINF:-1 tvg-id="OrszaggyulesOGYTAB.hu",Orszรกggyลฑlรฉs (Tรถrvรฉnyalkotรกsi bizottsรกg) (720p) [Not 24/7] https://tab.parlament.hu:446/edgelive/smil:mkogytab.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="TV2Comedy.hu",TV2 Comedy (576p) +#EXTINF:-1 tvg-id="TV2Comedy.hu",TV2 Comedy (576p) http://194.76.186.33:8000/play/a031/index.m3u8 -#EXTINF:-1 tvg-id="TV2Sef.hu",TV2 Sรฉf (576p) +#EXTINF:-1 tvg-id="TV2Sef.hu",TV2 Sรฉf (576p) http://194.76.186.33:8000/play/a02s/index.m3u8 -#EXTINF:-1 tvg-id="IzauraTV.hu",Izaura TV (576p) +#EXTINF:-1 tvg-id="IzauraTV.hu",Izaura TV (576p) http://146.59.85.40:89/izaura/index.m3u8 -#EXTINF:-1 tvg-id="IzauraTV.hu",Izaura TV (576p) +#EXTINF:-1 tvg-id="IzauraTV.hu",Izaura TV (576p) http://194.76.186.33:8000/play/a05j/index.m3u8 -#EXTINF:-1 tvg-id="JockyTV.hu",Jocky TV (576p) +#EXTINF:-1 tvg-id="JockyTV.hu",Jocky TV (576p) http://146.59.85.40:89/jocky/index.m3u8 -#EXTINF:-1 tvg-id="JockyTV.hu",Jocky TV (576p) +#EXTINF:-1 tvg-id="JockyTV.hu",Jocky TV (576p) http://194.76.186.33:8000/play/a012/index.m3u8 -#EXTINF:-1 tvg-id="GranTV.hu",Gran TV (720p) +#EXTINF:-1 tvg-id="GranTV.hu",Gran TV (720p) https://stream.medialive.hu/gran/grantvlive/playlist.m3u8 #EXTINF:-1 tvg-id="LadanyTV.hu",Ladรกny TV (720p) [Not 24/7] https://ythls.onrender.com/channel/UCnG322MGBA4q5QWwDzUTh0Q.m3u8 +#EXTINF:-1 tvg-id="Match4.hu",Match4 +http://194.76.186.33:8000/play/a04d/index.m3u8 diff --git a/streams/id.m3u b/streams/id.m3u index 8260cd0e5..1112eaa0d 100644 --- a/streams/id.m3u +++ b/streams/id.m3u @@ -522,13 +522,13 @@ https://wowza.convergen.co/ctv/ctv.stream/playlist.m3u8 https://dhohotv.siar.us/dhohotv/live/playlist.m3u8 #EXTINF:-1 tvg-id="RadarTasikmalayaTV.id",Radar Tasikmalaya TV (720p) [Not 24/7] http://103.140.188.211:1935/radartv/myStream/playlist.m3u8 -#EXTINF:-1 tvg-id="TVTempo.id",TV Tempo (1080p) +#EXTINF:-1 tvg-id="TVTempo.id",TV Tempo (1080p) https://app-etslive-2.vidio.com/live/7946/master.m3u8 -#EXTINF:-1 tvg-id="MentariTV.id",Mentari TV (720p) +#EXTINF:-1 tvg-id="MentariTV.id",Mentari TV (720p) https://app-etslive-2.vidio.com/live/8237/master.m3u8 -#EXTINF:-1 tvg-id="WesalTV.id",Wesal TV (720p) [Not 24/7] +#EXTINF:-1 tvg-id="WesalTV.id",Wesal TV (720p) [Not 24/7] https://ams.juraganstreaming.com:5443/LiveApp/streams/wesaltv.m3u8 -#EXTINF:-1 tvg-id="TawafTV.id",Tawaf TV (720p) +#EXTINF:-1 tvg-id="TawafTV.id",Tawaf TV (720p) https://app-etslive-2.vidio.com/live/12607/master.m3u8 #EXTINF:-1 tvg-id="DuniaGamesTV.id",Dunia Games TV (720p) [Not 24/7] [Geo-blocked] https://cdn01-telkomsel-01.akamaized.net/Content/HLS/Live/channel(6854467f-52fe-48ee-9822-00233c678709)/index.m3u8 diff --git a/streams/in.m3u b/streams/in.m3u index dafbd7b7d..b31b6407e 100644 --- a/streams/in.m3u +++ b/streams/in.m3u @@ -504,7 +504,7 @@ https://ythls.onrender.com/channel/UCsfh2Zb7-m4qzT8jLhK_Fzw.m3u8 https://5b48d7e1b4bce.streamlock.net/myapp/newslive/playlist.m3u8 #EXTINF:-1 tvg-id="NewsNation.in",News Nation (720p) [Not 24/7] https://ythls.onrender.com/channel/UCsNdeLwEZf86swPD3qJJ7Dw.m3u8 -#EXTINF:-1 tvg-id="NewsNation.in",News Nation (720p) +#EXTINF:-1 tvg-id="NewsNation.in",News Nation (720p) https://livetv-channels.b-cdn.net/8006/playlist.m3u8 #EXTINF:-1 tvg-id="NewsStateMPCHG.in",News State MP & CHG (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCz6sfaICYbi4LEXC-022qpg.m3u8 @@ -929,3 +929,7 @@ https://mntv.livebox.co.in/mntvhls/live.m3u8 https://mntv.livebox.co.in/musichls/live.m3u8 #EXTINF:-1 tvg-id="ReporterTV.in",Reporter TV https://ythls.onrender.com/channel/UCFx1nseXKTc1Culiu3neeSQ.m3u8 +#EXTINF:-1 tvg-id="ManoramaNews.in",Manorama News +https://ythls.onrender.com/channel/UCP0uG-mcMImgKnJz-VjJZmQ.m3u8 +#EXTINF:-1 tvg-id="AajTak.in",Aaj Tak +https://feeds.intoday.in/aajtak/api/aajtakhd/master.m3u8 diff --git a/streams/iq.m3u b/streams/iq.m3u index 6a5906afc..76c501ea3 100644 --- a/streams/iq.m3u +++ b/streams/iq.m3u @@ -21,7 +21,7 @@ http://63b03f7689049.streamlock.net:1935/live/13/playlist.m3u8 http://63b03f7689049.streamlock.net:1935/live/19/playlist.m3u8 #EXTINF:-1 tvg-id="AlEtejahTV.iq",Al Etejah TV http://63b03f7689049.streamlock.net:1935/live/33/playlist.m3u8 -#EXTINF:-1 tvg-id="AlforatTV.iq",Alforat TV (1080p) +#EXTINF:-1 tvg-id="AlforatTV.iq",Alforat TV (1080p) http://95.216.180.111:1935/live/10/playlist.m3u8 #EXTINF:-1 tvg-id="AlGhadeerTV.iq",Al Ghadeer TV http://63b03f7689049.streamlock.net:1935/live/2/playlist.m3u8 @@ -87,7 +87,7 @@ http://77.36.160.164:1935/live4/thaghalayn/playlist.m3u8 http://63b03f7689049.streamlock.net:1935/live/16/playlist.m3u8 #EXTINF:-1 tvg-id="Alqanat9TV.iq",Alqanat9 TV (1080p) https://cdn.bestream.io:19360/alqanat9/alqanat9.m3u8 -#EXTINF:-1 tvg-id="Alquran.iq",Alquran (1080p) +#EXTINF:-1 tvg-id="Alquran.iq",Alquran (1080p) https://ktv.imamhussain.org/stream/hls/ch1.m3u8 #EXTINF:-1 tvg-id="AmozhgaryTV.iq",Amozhgary TV (1080p) https://media.streambrothers.com:1936/8248/8248/playlist.m3u8 @@ -131,9 +131,9 @@ https://live.imamhossaintv.com/live/ih4.m3u8 https://mn-nl.mncdn.com/alzahra/alzahra_hd.smil/playlist.m3u8 #EXTINF:-1 tvg-id="ImamHusseinTV6.iq",Imam Hussein TV 6 (1080p) [Not 24/7] https://mn-nl.mncdn.com/arbaeen/arbaeen_hd.smil/index.m3u8 -#EXTINF:-1 tvg-id="INews.iq",iNEWS TV (1080p) +#EXTINF:-1 tvg-id="INews.iq",iNEWS TV (1080p) https://svs.itworkscdn.net/inewsiqlive/inewsiq.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="IshtarTV.iq",Ishtar TV (1080p) +#EXTINF:-1 tvg-id="IshtarTV.iq",Ishtar TV (1080p) http://ishtar.cdncast.xyz:1935/live/iShtarHD/playlist.m3u8 #EXTINF:-1 tvg-id="KarbalaTV.iq",Karbala TV (1080p) [Geo-blocked] https://livestream.almanasa.tv:8117/islamic/ch3/ch3_1080.m3u8 @@ -175,9 +175,9 @@ https://livestream.almanasa.tv:8001/islamic/ch7/ch7_1080.m3u8 https://livestream.almanasa.tv:8045/enter/ch6/ch6_1080.m3u8 #EXTINF:-1 tvg-id="SPITV.iq",SPI TV (720p) https://cdn1.karwan.tv/spi-tv/index.m3u8 -#EXTINF:-1 tvg-id="SpedaTV.iq",Speda TV (720p) +#EXTINF:-1 tvg-id="SpedaTV.iq",Speda TV (720p) https://speda.dwasat.com/upload/images/spedahd.m3u8 -#EXTINF:-1 tvg-id="UTV.iq",UTV (1080p) +#EXTINF:-1 tvg-id="UTV.iq",UTV (1080p) https://mn-nl.mncdn.com/utviraqi2/64c80359/index.m3u8 #EXTINF:-1 tvg-id="WaarTV.iq",Waar TV (720p) https://ikomg4.s.llnwi.net/waarhd/waar-hd.m3u8 diff --git a/streams/ir.m3u b/streams/ir.m3u index 790463ff5..617c24685 100644 --- a/streams/ir.m3u +++ b/streams/ir.m3u @@ -89,77 +89,77 @@ http://51.210.227.134/hls/stream.m3u8 https://af.ayas.ir/hls2/tv3.m3u8 #EXTINF:-1 tvg-id="iFilmPersian.ir",iFilm Persian (540p) https://live.aionet.ir/hls/ifilm/ifilm.m3u8 -#EXTINF:-1 tvg-id="AioSport1.ir",Aio Sport 1 (480p) +#EXTINF:-1 tvg-id="AioSport1.ir",Aio Sport 1 (480p) https://af.ayas.ir/hls2/aiosport.m3u8 -#EXTINF:-1 tvg-id="AioSport2.ir",Aio Sport 2 (480p) [Not 24/7] +#EXTINF:-1 tvg-id="AioSport2.ir",Aio Sport 2 (480p) [Not 24/7] https://af.ayas.ir/hls2/aiosport2.m3u8 #EXTINF:-1 tvg-id="AvangTV.us",Avang TV (720p) https://hls.avang.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="AlZahraTV.ir",Al Zahra TV (1080p) +#EXTINF:-1 tvg-id="AlZahraTV.ir",Al Zahra TV (1080p) https://mn-nl.mncdn.com/alzahra/alzahra_hd.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="MihanTV.ir",Mihan TV (720p) +#EXTINF:-1 tvg-id="MihanTV.ir",Mihan TV (720p) https://iptv.mihantv.com/mihantv/playlist.m3u8 -#EXTINF:-1 tvg-id="NegahTV.ir",Negah TV (720p) +#EXTINF:-1 tvg-id="NegahTV.ir",Negah TV (720p) https://iptv.negahtv.com/negahtv/playlist.m3u8 -#EXTINF:-1 tvg-id="AMGTV.ca",AMG TV (720p) +#EXTINF:-1 tvg-id="AMGTV.ca",AMG TV (720p) https://nl.livekadeh.com/hls2/AMG_src.m3u8 -#EXTINF:-1 tvg-id="BravoFarsiTV.ir",Bravo Farsi TV (360p) +#EXTINF:-1 tvg-id="BravoFarsiTV.ir",Bravo Farsi TV (360p) https://bravoohls.wns.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="FarsiTV.us",Farsi TV (1080p) +#EXTINF:-1 tvg-id="FarsiTV.us",Farsi TV (1080p) https://live.farsitv.us/live/stream.m3u8 -#EXTINF:-1 tvg-id="TODAYTV.us",Today TV (720p) +#EXTINF:-1 tvg-id="TODAYTV.us",Today TV (720p) https://todayhls.wns.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="",Health Media TV (720p) +#EXTINF:-1 tvg-id="",Health Media TV (720p) https://6n3yowknl9ok-hls-live.5centscdn.com/HMN/271ddf829afeece44d8732757fba1a66.sdp/playlist.m3u8 -#EXTINF:-1 tvg-id="PersianBazaarTV.us",Persian Bazaar TV (720p) +#EXTINF:-1 tvg-id="PersianBazaarTV.us",Persian Bazaar TV (720p) https://stream.persiantv1.com/ptv1/playlist.m3u8 -#EXTINF:-1 tvg-id="ChannelOne.us",Channel Yek (720p) +#EXTINF:-1 tvg-id="ChannelOne.us",Channel Yek (720p) https://ch1hls.wns.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="IraneFardaTV.us",IraneFarda TV (576p) +#EXTINF:-1 tvg-id="IraneFardaTV.us",IraneFarda TV (576p) https://hls.iranfarda.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="MTC.us",MTC (720p) +#EXTINF:-1 tvg-id="MTC.us",MTC (720p) https://mtchls.wns.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="OXIRTV.ir",OXIR TV (720p) +#EXTINF:-1 tvg-id="OXIRTV.ir",OXIR TV (720p) https://hls.oxir.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="ICCTV.ir",ICC TV (1080p) +#EXTINF:-1 tvg-id="ICCTV.ir",ICC TV (1080p) https://icchls.wns.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="JavananTV.us",Javanan TV (480p) +#EXTINF:-1 tvg-id="JavananTV.us",Javanan TV (480p) https://nl.livekadeh.com/hls2/javanantv.m3u8 -#EXTINF:-1 tvg-id="DamacPersian.ae",Damac Persian (720p) +#EXTINF:-1 tvg-id="DamacPersian.ae",Damac Persian (720p) https://damac-tv.icdndhcp.com/hls/stream.m3u8 -#EXTINF:-1 tvg-id="TBNNejatTV.ir",TBN Nejat TV (720p) +#EXTINF:-1 tvg-id="TBNNejatTV.ir",TBN Nejat TV (720p) https://hls.nejat.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="Shabakeh7.us",Shabakeh 7 (576p) +#EXTINF:-1 tvg-id="Shabakeh7.us",Shabakeh 7 (576p) https://t.northtelecom.org/Shabakeh.m3u8 -#EXTINF:-1 tvg-id="ErfanHalghehTV.ca",Erfan Halgheh TV (720p) +#EXTINF:-1 tvg-id="ErfanHalghehTV.ca",Erfan Halgheh TV (720p) https://hls.erfanhalgheh.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="KanalJadid.uk",Kanal Jadid (720p) +#EXTINF:-1 tvg-id="KanalJadid.uk",Kanal Jadid (720p) https://kjhls.wns.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="SimayeAzadi.uk",Simaye Azadi (1080p) +#EXTINF:-1 tvg-id="SimayeAzadi.uk",Simaye Azadi (1080p) https://simaytv.akamaized.net/hls/live/2043550/simayhls/index.m3u8 -#EXTINF:-1 tvg-id="KhaterehTV.de",Khatereh TV (720p) +#EXTINF:-1 tvg-id="KhaterehTV.de",Khatereh TV (720p) https://khaterehhls.wns.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="CafeTradeTV.us",Cafe Trade TV (720p) +#EXTINF:-1 tvg-id="CafeTradeTV.us",Cafe Trade TV (720p) https://cafetradehls.wns.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="",FX TV Iran (720p) +#EXTINF:-1 tvg-id="",FX TV Iran (720p) https://fxtvhls.wns.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="PayameArameshTV.us",Payame Aramesh TV (720p) +#EXTINF:-1 tvg-id="PayameArameshTV.us",Payame Aramesh TV (720p) https://hls.keshishhamid.live/hls/stream.m3u8 -#EXTINF:-1 tvg-id="DerakhteZendegiTV.us",Derakhte Zendegi TV (404p) +#EXTINF:-1 tvg-id="DerakhteZendegiTV.us",Derakhte Zendegi TV (404p) http://iran620.com:1935/derakhte-zendegi/test/playlist.m3u8 -#EXTINF:-1 tvg-id="RanTVIsrael.il",Ran TV Israel (720p) +#EXTINF:-1 tvg-id="RanTVIsrael.il",Ran TV Israel (720p) https://streaminglive.co.il:3730/live/raniamranilive.m3u8 -#EXTINF:-1 tvg-id="iFilmEnglish.ir",iFilm English (480p) +#EXTINF:-1 tvg-id="iFilmEnglish.ir",iFilm English (480p) https://live1.presstv.ir/live/ifilmen.m3u8 -#EXTINF:-1 tvg-id="IRNA24.ir",IRNA24 (720p) +#EXTINF:-1 tvg-id="IRNA24.ir",IRNA24 (720p) https://irna-tv.icdndhcp.com/live/stream/index.m3u8 -#EXTINF:-1 tvg-id="iFilm2.ir",iFilm 2 (480p) +#EXTINF:-1 tvg-id="iFilm2.ir",iFilm 2 (480p) https://live1.presstv.ir/live/ifilm2.m3u8 -#EXTINF:-1 tvg-id="VelayatTVNetwork.us",Velayat TV (480p) +#EXTINF:-1 tvg-id="VelayatTVNetwork.us",Velayat TV (480p) https://nl.livekadeh.com/hls2/velayattv.m3u8 -#EXTINF:-1 tvg-id="AbalfadhlTV.ir",Abalfadhl TV (720p) +#EXTINF:-1 tvg-id="AbalfadhlTV.ir",Abalfadhl TV (720p) https://t.northtelecom.org/ABALFADHLTV.m3u8 -#EXTINF:-1 tvg-id="HausaTV.ir",Hausa TV (432p) +#EXTINF:-1 tvg-id="HausaTV.ir",Hausa TV (432p) https://live1.presstv.ir/live/hausatvha/index.m3u8 #EXTINF:-1 tvg-id="ParsTV.ir",Pars TV (720p) http://167.235.204.214/hls/stream.m3u8 diff --git a/streams/is.m3u b/streams/is.m3u index cbdf0151d..be6cd42f9 100644 --- a/streams/is.m3u +++ b/streams/is.m3u @@ -5,7 +5,7 @@ https://althingi-live.secure.footprint.net/althingi/live/index.m3u8 https://ruvlive.akamaized.net/out/v1/2ff7673de40f419fa5164498fae89089/index.m3u8 #EXTINF:-1 tvg-id="RUV.is",RรšV (720p) https://ruv-web-live.akamaized.net/streymi/ruverl/ruverl.m3u8 -#EXTINF:-1 tvg-id="Visir.is",Vรญsir (1080p) +#EXTINF:-1 tvg-id="Visir.is",Vรญsir (1080p) https://live.visir.is/hls-live/visir.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="Omega.is",Omega (1080p) +#EXTINF:-1 tvg-id="Omega.is",Omega (1080p) https://196914.global.ssl.fastly.net/63fe5f3a8f037f47ac36fb2a/live_1d411f00b7a411eda9b5d3bb4704377e/index.m3u8 diff --git a/streams/jp.m3u b/streams/jp.m3u index b7f7147e5..490c8beb2 100644 --- a/streams/jp.m3u +++ b/streams/jp.m3u @@ -85,7 +85,7 @@ https://ythls.onrender.com/channel/UC8iN-WKPu820ve-4t9NxHRw.m3u8 https://ythls.onrender.com/channel/UCvF5vIejmf-H_XSluaBldfg.m3u8 #EXTINF:-1 tvg-id="HOMEHiroshimaNews.jp",HOME Hiroshima News (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCRnFGOp_mjaCYEhMzsE2iHA.m3u8 -#EXTINF:-1 tvg-id="JOCXDTV.jp",Fuji TV (540p) +#EXTINF:-1 tvg-id="JOCXDTV.jp",Fuji TV (540p) https://fujitv4.mov3.co/hls/fujitv.m3u8 #EXTINF:-1 tvg-id="MBSNews.jp",MBS News (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCkKJhKO73xF1pK5h9R82ZGQ.m3u8 @@ -115,3 +115,5 @@ https://cdn.nhkworld.jp/www11/nhkworld-tv/bmcc-live/fr/playlist.m3u8 https://cdn.nhkworld.jp/www11/nhkworld-tv/bmcc-live/pt/playlist.m3u8 #EXTINF:-1 tvg-id="NHKGeneralTV.jp",NHK G (360p) [Not 24/7] https://newssimul-stream.nhk.jp/hls/live/2010561/nhknewssimul/master.m3u8 +#EXTINF:-1 tvg-id="Weathernews.jp",Weathernews +https://ythls.onrender.com/channel/UCNsidkYpIAQ4QaufptQBPHQ.m3u8 diff --git a/streams/ke.m3u b/streams/ke.m3u index e1842912c..4c3884d7d 100644 --- a/streams/ke.m3u +++ b/streams/ke.m3u @@ -35,11 +35,11 @@ https://goliveafrica.media:9998/live/638da5440743c/index.m3u8 https://goliveafrica.media:9998/live/627e198474bd1/index.m3u8 #EXTINF:-1 tvg-id="FaithTVKenya.ke",Faith TV Kenya (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCQFnIxX1vwsqW7MPcJdYTeg.m3u8 -#EXTINF:-1 tvg-id="DestinyVoicesTV.ke",Destiny Voices TV (480p) +#EXTINF:-1 tvg-id="DestinyVoicesTV.ke",Destiny Voices TV (480p) https://apps.digitaltv.co.ke/live/2004.m3u8 #EXTINF:-1 tvg-id="SasaTV.ke",Sasa TV (720p) [Not 24/7] https://ythls.onrender.com/channel/UCrBGAWr24pPQn-HUWZDBelQ.m3u8 -#EXTINF:-1 tvg-id="MuthingiTV.ke",Muthingi TV (480p) +#EXTINF:-1 tvg-id="MuthingiTV.ke",Muthingi TV (480p) https://apps.digitaltv.co.ke/live/2005.m3u8 #EXTINF:-1 tvg-id="TestimonyTV.ke",Testimony TV (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCDmLoDM4S60MhbfmO2yr_SA.m3u8 @@ -49,7 +49,7 @@ https://goliveafrica.media:9998/live/6389d571d20af/index.m3u8 https://goliveafrica.media:9998/live/64a26e4dd21a3/index.m3u8 #EXTINF:-1 tvg-id="GTNTV.ke",GTN TV (1080p) [Not 24/7] https://goliveafrica.media:9998/live/644e07abdc1d3/index.m3u8 -#EXTINF:-1 tvg-id="AviationTV.ke",Aviation TV (480p) +#EXTINF:-1 tvg-id="AviationTV.ke",Aviation TV (480p) http://streamer02.nbo1.angani.co:1935/aviationtv/myStream/playlist.m3u8 #EXTINF:-1 tvg-id="JCMTV.ke",JCM TV (720p) [Not 24/7] https://goliveafrica.media:9998/live/646c92d07b16c/index.m3u8 @@ -81,5 +81,5 @@ https://goliveafrica.media:9998/live/628e5c1991061/index.m3u8 https://goliveafrica.media:9998/live/647460ac1ddd6/index.m3u8 #EXTINF:-1 tvg-id="KTNHome.ke",KTN Home (720p) [Not 24/7] [Geo-blocked] https://ythls.onrender.com/channel/UCkWr5PLM8hp8M4WNIkjpKsQ.m3u8 -#EXTINF:-1 tvg-id="AlHudaTV.ke",Al Huda TV (720p) [Not 24/7] +#EXTINF:-1 tvg-id="AlHudaTV.ke",Al Huda TV (720p) [Not 24/7] https://ythls.onrender.com/channel/UCdTAsRrQEp-IVoMzKoRG4ZQ.m3u8 diff --git a/streams/kg.m3u b/streams/kg.m3u index 1468586a2..290518835 100644 --- a/streams/kg.m3u +++ b/streams/kg.m3u @@ -15,3 +15,5 @@ http://onlinetv.ktrk.kg:1935/live/myStream2/playlist.m3u8 http://onlinetv.ktrk.kg:1935/live/myStream/playlist.m3u8 #EXTINF:-1 tvg-id="KTRKSport.kg",KTRK Sport (576p) http://onlinetv.ktrk.kg:1935/live/myStream4/playlist.m3u8 +#EXTINF:-1 tvg-id="Balastan.kg",Balastan +https://64e5ed58c00d4.streamlock.net/live/smil:balastan.smil/playlist.m3u8 diff --git a/streams/kr.m3u b/streams/kr.m3u index 9ac77e895..c47e2ad0c 100644 --- a/streams/kr.m3u +++ b/streams/kr.m3u @@ -249,7 +249,7 @@ http://live.kytv.co.kr:8080/hls/stream.m3u8 http://210.210.155.37/dr9445/h/h21/index.m3u8 #EXTINF:-1 tvg-id="YTNWorld.kr",YTN Korean (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCizGMtU0Lt-O9X0tLJzyZ2Q.m3u8 -#EXTINF:-1 tvg-id="OUN.kr",OUN (1080p) +#EXTINF:-1 tvg-id="OUN.kr",OUN (1080p) https://live.knou.ac.kr/knou1/live1/playlist.m3u8 #EXTINF:-1 tvg-id="PaxEconomyTV.kr",Pax Economy TV (1080p) [Not 24/7] https://ythls.onrender.com/channel/UC6UEuBvk-0rmV4FUu0LDiTw.m3u8 diff --git a/streams/lc.m3u b/streams/lc.m3u index 33fa7bb8b..9bb76b899 100644 --- a/streams/lc.m3u +++ b/streams/lc.m3u @@ -1,5 +1,5 @@ #EXTM3U -#EXTINF:-1 tvg-id="CaribbeanHot7TV.lc",Caribbean Hot 7 TV (720p) +#EXTINF:-1 tvg-id="CaribbeanHot7TV.lc",Caribbean Hot 7 TV (720p) https://586a9edea75f1.streamlock.net/caribbeanhot7tv/ch7-1.stream/playlist.m3u8 #EXTINF:-1 tvg-id="GovernmentofSaintLucia.lc",Government of Saint Lucia (1080p) [Not 24/7] https://ythls.onrender.com/channel/UC4al3A_gysYEIzAM1L2qZbg.m3u8 diff --git a/streams/lk.m3u b/streams/lk.m3u index dd770a07a..388b51c23 100644 --- a/streams/lk.m3u +++ b/streams/lk.m3u @@ -25,3 +25,5 @@ https://ythls.onrender.com/channel/UC37lrcLuvJmWDoooxwiPXXA.m3u8 https://ythls.onrender.com/channel/UC1WREaxq8LRhdOOmzSFg2pA.m3u8 #EXTINF:-1 tvg-id="AdaDerana24x7.lk",Ada Derana News (720p) [Not 24/7] https://ythls.onrender.com/channel/UCCK3OZi788Ok44K97WAhLKQ.m3u8 +#EXTINF:-1 tvg-id="MethTV.lk",Meth TV +https://ythls.onrender.com/channel/UC7kBHRaynsJMB6JcooGLTmA.m3u8 diff --git a/streams/mx.m3u b/streams/mx.m3u index 912944b91..49ffa634b 100644 --- a/streams/mx.m3u +++ b/streams/mx.m3u @@ -75,11 +75,11 @@ https://616eee1852d6c.streamlock.net/live/myStream/playlist.m3u8 https://dish.akamaized.net/Content/HLS_HLS_CLR/Live/channel(mvs)/variant.m3u8 #EXTINF:-1 tvg-id="NoticiasCanal10.mx",Noticias Canal 10 (360p) [Not 24/7] https://canal10.mediaflix.istream.mx/wza_live/live/movil/playlist.m3u8 -#EXTINF:-1 tvg-id="NPlus.mx",NMรกs (1080p) +#EXTINF:-1 tvg-id="NPlus.mx",NMรกs (1080p) https://channel07-notusa.akamaized.net/hls/live/2036971/event01/index.m3u8 -#EXTINF:-1 tvg-id="NPlusMedia.mx",NMรกs Media (1080p) +#EXTINF:-1 tvg-id="NPlusMedia.mx",NMรกs Media (1080p) https://channel04-notusa.akamaized.net/hls/live/2029754-b/event01/index.m3u8 -#EXTINF:-1 tvg-id="NPlusMedia.mx",NMรกs Media (1080p) +#EXTINF:-1 tvg-id="NPlusMedia.mx",NMรกs Media (1080p) https://channel04-notusa.akamaized.net/hls/live/2029754/event01/index.m3u8 #EXTINF:-1 tvg-id="NRTMexico.mx",NRT Mรฉxico Canal 4 (720p) https://59e88b197fb16.streamlock.net:4443/live/canal4/playlist.m3u8 @@ -207,7 +207,7 @@ https://channel01.akamaized.net/hls/live/2022749/event01/index.m3u8 https://ssh101.bozztv.com/ssh101/ochotv/playlist.m3u8 #EXTINF:-1 tvg-id="UMTV.mx",UMTV (1080p) [Not 24/7] https://60417ddeaf0d9.streamlock.net:443/montemorelos/videomontemorelos/playlist.m3u8 -#EXTINF:-1 tvg-id="RomanzaPlusAfrica.mx",Romanza+ Africa (720p) +#EXTINF:-1 tvg-id="RomanzaPlusAfrica.mx",Romanza+ Africa (720p) https://origin3.afxp.telemedia.co.za/PremiumFree/romanza/playlist.m3u8 #EXTINF:-1 tvg-id="Canal13Oaxaca.mx",Canal 13 Oaxaca (720p) [Not 24/7] https://dbdfj5y8nz2u4.cloudfront.net/c13oaxaca/d0dbe915091d400bd8ee7f27f0791303.sdp/playlist.m3u8 @@ -227,5 +227,5 @@ https://dbdfj5y8nz2u4.cloudfront.net/c13tabasco/d0dbe915091d400bd8ee7f27f0791303 https://dbdfj5y8nz2u4.cloudfront.net/c13tapachula/d0dbe915091d400bd8ee7f27f0791303.sdp/playlist.m3u8 #EXTINF:-1 tvg-id="Canal13Yucatan.mx",Canal 13 Yucatรกn (720p) [Not 24/7] https://dbdfj5y8nz2u4.cloudfront.net/c13yucatan/d0dbe915091d400bd8ee7f27f0791303.sdp/playlist.m3u8 -#EXTINF:-1 tvg-id="TN23.mx",TN23 Mรฉxico (720p) [Not 24/7] +#EXTINF:-1 tvg-id="TN23.mx",TN23 Mรฉxico (720p) [Not 24/7] https://dbdfj5y8nz2u4.cloudfront.net/TN23/139a1b22959c10235fe85f3db0041ecf.sdp/playlist.m3u8 diff --git a/streams/my.m3u b/streams/my.m3u index 73767d7ec..50e74536c 100644 --- a/streams/my.m3u +++ b/streams/my.m3u @@ -72,3 +72,5 @@ https://d25tgymtnqzu8s.cloudfront.net/smil:tv2/playlist.m3u8?id=2 https://d25tgymtnqzu8s.cloudfront.net/smil:tv6/playlist.m3u8?id=6 #EXTINF:-1 tvg-id="",TVIKIM https://edge-sg1.vediostream.com/abr/tvikim/playlist.m3u8 +#EXTINF:-1 tvg-id="TV3.my",TV3 +https://live-streams-ssai-01.tonton.com.my/live/2dd2b7cd-1b34-4871-b669-57b5c9beca23/live.isml/.m3u8 diff --git a/streams/ng.m3u b/streams/ng.m3u index fa413f98d..cccf82f2c 100644 --- a/streams/ng.m3u +++ b/streams/ng.m3u @@ -68,15 +68,15 @@ https://tv.ifastekpanel.com:3013/live/atntvlive.m3u8 https://webstreaming-11.viewmedia.tv/web_160/Stream/playlist.m3u8 #EXTINF:-1 tvg-id="QausainTV.ng",Qausain TV (720p) https://acasmedia2.acangroup.org/qausaintv/qausaintv_output/playlist.m3u8 -#EXTINF:-1 tvg-id="SuperscreenTV.ng",Superscreen TV (412p) +#EXTINF:-1 tvg-id="SuperscreenTV.ng",Superscreen TV (412p) https://video1.getstreamhosting.com:1936/8398/8398/playlist.m3u8 #EXTINF:-1 tvg-id="MFMTV.ng",MFM TV (720p) [Not 24/7] https://ythls.onrender.com/channel/UCMd5fYoenMlMJQ6-Bt6gsRw.m3u8 -#EXTINF:-1 tvg-id="LN247.ng",LN247 (1080p) +#EXTINF:-1 tvg-id="LN247.ng",LN247 (1080p) https://oj7lnn58lg82-hls-live.5centscdn.com/LN247/e54a58cc63ad1a32f28ef53006be2937.sdp/playlist.m3u8 -#EXTINF:-1 tvg-id="MoreGraceTV.ng",More Grace TV (410p) +#EXTINF:-1 tvg-id="MoreGraceTV.ng",More Grace TV (410p) https://atechgroupuk.site/ETV.m3u8 -#EXTINF:-1 tvg-id="PhenomenalLifeTV.ng",Phenomenal Life TV (1080p) +#EXTINF:-1 tvg-id="PhenomenalLifeTV.ng",Phenomenal Life TV (1080p) https://5be80bd118c27.streamlock.net:433/phenomenaltv/phenomenal/playlist.m3u8 #EXTINF:-1 tvg-id="TV360Nigeria.ng",TV360 Nigeria (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCBzu4YqGiBxBD8pq8NiBuKw.m3u8 diff --git a/streams/pa.m3u b/streams/pa.m3u index daaae6296..447e3a9b2 100644 --- a/streams/pa.m3u +++ b/streams/pa.m3u @@ -15,15 +15,15 @@ https://vcp4.myplaytv.com:1936/mas23/mas23/playlist.m3u8 https://vcp4.myplaytv.com:1936/nextv/nextv/playlist.m3u8 #EXTINF:-1 tvg-id="OyeTV.pa",Oye TV (480p) [Geo-blocked] https://mdstrm.com/live-stream-playlist/5d88df173853e7072f3f953f.m3u8 -#EXTINF:-1 tvg-id="RPCTV.pa",RPC TV (720p) +#EXTINF:-1 tvg-id="RPCTV.pa",RPC TV (720p) https://mdstrm.com/live-stream-playlist/5d88d659120a717cf93ce620.m3u8 -#EXTINF:-1 tvg-id="Telemetro.pa",Telemetro (720p) +#EXTINF:-1 tvg-id="Telemetro.pa",Telemetro (720p) https://mdstrm.com/live-stream-playlist/5d88dd2229b0890723df2165.m3u8 #EXTINF:-1 tvg-id="TVMax.pa",TVMAX (720p) https://bcovlive-a.akamaihd.net/474b6caf58f8407fb1d1cc1ef64f50ff/us-west-2/6058004209001/playlist_dvr.m3u8 #EXTINF:-1 tvg-id="TVN.pa",TVN (720p) https://bcovlive-a.akamaihd.net/628aecb4fccb4c52b4f9c8d5cc57fb73/us-west-2/6058004209001/playlist_dvr.m3u8 -#EXTINF:-1 tvg-id="LaXitosaPanama.pa",LaXitosa Panamรก (360p) +#EXTINF:-1 tvg-id="LaXitosaPanama.pa",LaXitosa Panamรก (360p) https://stmvideo2.livecastv.com/lax953/lax953/playlist.m3u8 #EXTINF:-1 tvg-id="TuCanalTV.pa",Tu Canal TV (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCziREKwhu2KgoDVNlRrfMBw.m3u8 diff --git a/streams/pe.m3u b/streams/pe.m3u index 9249c534a..fcde8ce78 100644 --- a/streams/pe.m3u +++ b/streams/pe.m3u @@ -273,23 +273,25 @@ https://live-latinav2-mdstrm.secure.footprint.net/live-stream-mp/d1aden84nxx8u4/ https://servilive.com:3531/stream/play.m3u8 #EXTINF:-1 tvg-id="PlanetaTV.pe",Planeta TV (720p) [Not 24/7] https://live.obslivestream.com/planetatv/index.m3u8 -#EXTINF:-1 tvg-id="AtmosferaTV.pe",Atmรณsfera TV (1080p) +#EXTINF:-1 tvg-id="AtmosferaTV.pe",Atmรณsfera TV (1080p) https://castv10.plugstreaming.com:19360/atmosferatv/atmosferatv.m3u8 -#EXTINF:-1 tvg-id="Canal33Ayacucho.pe",Canal 33 Ayacucho (360p) +#EXTINF:-1 tvg-id="Canal33Ayacucho.pe",Canal 33 Ayacucho (360p) https://video2.getstreamhosting.com:19360/8206/8206.m3u8 #EXTINF:-1 tvg-id="CanalB.pe",CanalB (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCFrOdZIiGOGFP5kk4xZgH6Q.m3u8 #EXTINF:-1 tvg-id="CTC.pe",CTC (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCJqwSXVmnG6hZrIoqdpjRYQ.m3u8 -#EXTINF:-1 tvg-id="DobleAA.pe",Doble AA (1080p) +#EXTINF:-1 tvg-id="DobleAA.pe",Doble AA (1080p) https://videoserver.tmcreativos.com:19360/yvmgbdpqmp/yvmgbdpqmp.m3u8 #EXTINF:-1 tvg-id="NovaTVStar.pe",Nova TV Star (360p) [Not 24/7] https://7.innovatestream.pe:19360/radionovastar/radionovastar.m3u8 -#EXTINF:-1 tvg-id="QuassarTV.pe",Quassar TV (720p) +#EXTINF:-1 tvg-id="QuassarTV.pe",Quassar TV (720p) https://gnstreammedia.com:19360/4000/4000.m3u8 -#EXTINF:-1 tvg-id="VivaTVYurimaguas.pe",Viva TV Yurimaguas (720p) +#EXTINF:-1 tvg-id="VivaTVYurimaguas.pe",Viva TV Yurimaguas (720p) https://live.obslivestream.com/vivatv/index.m3u8 -#EXTINF:-1 tvg-id="Wtv.pe",Wtv (720p) [Not 24/7] +#EXTINF:-1 tvg-id="Wtv.pe",Wtv (720p) [Not 24/7] https://live.obslivestream.com/wtv/index.m3u8 -#EXTINF:-1 tvg-id="CumoTV.pe",Cumo TV (720p) [Not 24/7] +#EXTINF:-1 tvg-id="CumoTV.pe",Cumo TV (720p) [Not 24/7] https://live.obslivestream.com/cumo/index.m3u8 +#EXTINF:-1 tvg-id="ATVPlus.pe",ATV+ +https://linear-258.frequency.stream/dist/vix/258/hls/master/playlist.m3u8 diff --git a/streams/ph.m3u b/streams/ph.m3u index 2fa2c9022..5a50ced50 100644 --- a/streams/ph.m3u +++ b/streams/ph.m3u @@ -27,7 +27,7 @@ https://ythls.onrender.com/channel/UCDXPB23ws_T0rVvrXVCYqyA.m3u8 https://untv.mmdlive.lldns.net/untv/0251dac212a94932ae3563150cbb3788/untvweb.m3u8 #EXTINF:-1 tvg-id="",Super Radyo DZBB (720p) [Not 24/7] https://stream.gmanews.tv/ioslive/livestream/playlist.m3u8 -#EXTINF:-1 tvg-id="GreatCommissionTV.ph",Great Commission TV (468p) +#EXTINF:-1 tvg-id="GreatCommissionTV.ph",Great Commission TV (468p) http://45.32.115.103/live/livestream/index.m3u8 #EXTINF:-1 tvg-id="PIE.ph",PIE Channel (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCAxAaFQnH5IK_ZTwiQWV-9A.m3u8 diff --git a/streams/pk.m3u b/streams/pk.m3u index 6c844adbb..c576eff5c 100644 --- a/streams/pk.m3u +++ b/streams/pk.m3u @@ -131,15 +131,15 @@ https://ythls.onrender.com/channel/UCmqlO4sewQO97iCeakXTdaw.m3u8 https://ythls.onrender.com/channel/UC95lddVg_04jAevVGYknx_w.m3u8 #EXTINF:-1 tvg-id="CapitalTV.pk",Capital TV (720p) [Not 24/7] https://ythls.onrender.com/channel/UC-an6pHQfTVZXgrLP0p1EGA.m3u8 -#EXTINF:-1 tvg-id="GeoTez.pk",Geo Tez (576p) +#EXTINF:-1 tvg-id="GeoTez.pk",Geo Tez (576p) https://jk3lz82elw79-hls-live.5centscdn.com/TEZ/955ad3298db330b5ee880c2c9e6f23a0.sdp/playlist.m3u8 #EXTINF:-1 tvg-id="SunoNewsHD.pk",Suno News HD (720p) https://cdn.bmstudiopk.com/sunotv/live/playlist.m3u8 #EXTINF:-1 tvg-id="SunoNewsHD.pk",Suno News HD (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCB82Zom1MYh8VV4q7wXkfGA.m3u8 -#EXTINF:-1 tvg-id="VoiceNews.pk",Voice News (720p) +#EXTINF:-1 tvg-id="VoiceNews.pk",Voice News (720p) https://cdn.bmstudiopk.com/vop/live/playlist.m3u8 -#EXTINF:-1 tvg-id="CityNewsHD.pk",City News HD (1080p) +#EXTINF:-1 tvg-id="CityNewsHD.pk",City News HD (1080p) http://cdn.citymediagroupreg.com:1935/citynewshd/myStream/playlist.m3u8 #EXTINF:-1 tvg-id="CityNewsHD.pk",City News HD (1080p) [Not 24/7] https://ythls.onrender.com/channel/UC5DtDCEclIwhOlP0p8UeQMA.m3u8 diff --git a/streams/pr.m3u b/streams/pr.m3u index d4dfd1dda..023a846a5 100644 --- a/streams/pr.m3u +++ b/streams/pr.m3u @@ -55,21 +55,21 @@ https://59a564764e2b6.streamlock.net/palestra/palestra/playlist.m3u8 https://59825a54e4454.streamlock.net:8443/william652/william652/playlist.m3u8 #EXTINF:-1 tvg-id="Zeta93.pr",WZNT (Zeta 93) (1080p) [Not 24/7] https://livestream.lamusica.com/nacionz/ngrp:nacionz_all/playlist.m3u8 -#EXTINF:-1 tvg-id="WAPADT1.pr",WAPA-DT1 (WAPA-TV) (1080p) +#EXTINF:-1 tvg-id="WAPADT1.pr",WAPA-DT1 (WAPA-TV) (1080p) https://live.field59.com/wapa/wapa1/playlist.m3u8 #EXTINF:-1 tvg-id="WAPADT2.pr",WAPA-DT2 (WAPA Deportes) (1080p) https://live.field59.com/wapa/wapa2/playlist.m3u8 -#EXTINF:-1 tvg-id="FarodeSantidadTV.pr",Faro de Santidad TV (720p) +#EXTINF:-1 tvg-id="FarodeSantidadTV.pr",Faro de Santidad TV (720p) https://5dbcd1053301e.streamlock.net:4443/farodesantidad/farodesantidad/playlist.m3u8 -#EXTINF:-1 tvg-id="ParaisoTV.pr",Paraรญso TV (720p) +#EXTINF:-1 tvg-id="ParaisoTV.pr",Paraรญso TV (720p) https://stream.eleden.com/livewtpm/ngrp:livewtpm_all/playlist.m3u8 -#EXTINF:-1 tvg-id="DNJTV.pr",DNJ TV (720p) +#EXTINF:-1 tvg-id="DNJTV.pr",DNJ TV (720p) https://eu1.servers10.com:8081/wegqaafnsa/index.m3u8 -#EXTINF:-1 tvg-id="RadioYaucanaTV.pr",Radio Yaucana TV (720p) +#EXTINF:-1 tvg-id="RadioYaucanaTV.pr",Radio Yaucana TV (720p) https://stmvideo2.livecastv.com/rytv2015/rytv2015/playlist.m3u8 -#EXTINF:-1 tvg-id="Telenorte.pr",Telenorte (720p) +#EXTINF:-1 tvg-id="Telenorte.pr",Telenorte (720p) https://627bb251f23c7.streamlock.net:444/TopRadioTV/TopRadioTV/playlist.m3u8 -#EXTINF:-1 tvg-id="XLevelTV.pr",XLevel TV (1080p) +#EXTINF:-1 tvg-id="XLevelTV.pr",XLevel TV (1080p) https://tv.portalexpress.es:3220/live/xleveladminlive.m3u8 -#EXTINF:-1 tvg-id="TheRetroChannel.pr",The Retro Channel (1080p) +#EXTINF:-1 tvg-id="TheRetroChannel.pr",The Retro Channel (1080p) https://5fd5567570c0e.streamlock.net/theretrochannel/stream/playlist.m3u8 diff --git a/streams/pt.m3u b/streams/pt.m3u index c1dc9da54..3435df1e9 100644 --- a/streams/pt.m3u +++ b/streams/pt.m3u @@ -11,7 +11,7 @@ https://w1.manasat.com/ktv/smil:ktv.smil/playlist.m3u8 http://176.79.76.155:8000/play/a01x/index.m3u8 #EXTINF:-1 tvg-id="PortoCanal.pt",Porto Canal (720p) https://raw.githubusercontent.com/azgaresncf/strm2hls/main/streams/PortoCanal.m3u8 -#EXTINF:-1 tvg-id="RTP1.pt",RTP 1 (480p) +#EXTINF:-1 tvg-id="RTP1.pt",RTP 1 (480p) http://162.212.178.69:41042/bysid/608 #EXTINF:-1 tvg-id="RTP1.pt" user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0",RTP 1 (720p) [Not 24/7] #EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0 diff --git a/streams/sa.m3u b/streams/sa.m3u index 57da73ef0..6d2ced9fd 100644 --- a/streams/sa.m3u +++ b/streams/sa.m3u @@ -95,11 +95,11 @@ https://daiconnect.com/live/hls/rotana/classical/.m3u8 https://rotanastudios-rotanaclassic-1-eu.xiaomi.wurl.tv/playlist.m3u8 #EXTINF:-1 tvg-id="RotanaClassic.sa",Rotana Classic (1080p) https://shls-rotanaclassic-prod-dub.shahid.net/out/v1/4eebed211c8441228321b4f67a46c5a5/index.m3u8 -#EXTINF:-1 tvg-id="RotanaComedy.sa",Rotana Comedy (1080p) +#EXTINF:-1 tvg-id="RotanaComedy.sa",Rotana Comedy (1080p) https://daiconnect.com/live/hls/rotana/comedy/.m3u8 -#EXTINF:-1 tvg-id="RotanaComedy.sa",Rotana Comedy (1080p) +#EXTINF:-1 tvg-id="RotanaComedy.sa",Rotana Comedy (1080p) https://rotanastudios-rotanacomedy-1-eu.xiaomi.wurl.tv/playlist.m3u8 -#EXTINF:-1 tvg-id="RotanaDrama.sa",Rotana Drama (1080p) +#EXTINF:-1 tvg-id="RotanaDrama.sa",Rotana Drama (1080p) https://daiconnect.com/live/hls/rotana/drama/.m3u8 #EXTINF:-1 tvg-id="RotanaDrama.sa",Rotana Drama (1080p) https://rotanastudios-rotanadrama-1-eu.xiaomi.wurl.tv/playlist.m3u8 diff --git a/streams/se.m3u b/streams/se.m3u index d229f3e73..2427051b7 100644 --- a/streams/se.m3u +++ b/streams/se.m3u @@ -27,5 +27,5 @@ https://svtk-c.akamaized.net/se/svtk/master.m3u8 https://livecdn.live247stream.com/missionasia/tv/playlist.m3u8 #EXTINF:-1 tvg-id="AryenTV.se",Aryen TV (1080p) [Not 24/7] https://aryen.tv/live/tv/playlist.m3u8 -#EXTINF:-1 tvg-id="",LifeStyleTV (1080p) +#EXTINF:-1 tvg-id="",LifeStyleTV (1080p) https://app.viloud.tv/hls/channel/711fd3f3a4728449889ee22ba72958ff.m3u8 diff --git a/streams/si.m3u b/streams/si.m3u index 6bf8e009a..03aca043a 100644 --- a/streams/si.m3u +++ b/streams/si.m3u @@ -23,5 +23,5 @@ https://ythls.onrender.com/channel/UCOGseusAY1nMkEhpmmz6Mmg.m3u8 http://ott.sgn.net/hls/tvurslja.m3u8 #EXTINF:-1 tvg-id="TopTV.si",Top TV (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCsvbFFKlD-oZXO9igJfcdJw.m3u8 -#EXTINF:-1 tvg-id="RadioAktualTV.si",Radio Aktual TV (1080p) +#EXTINF:-1 tvg-id="RadioAktualTV.si",Radio Aktual TV (1080p) https://vr1.radioaktual.si/hls/stream.m3u8 diff --git a/streams/sk.m3u b/streams/sk.m3u index 48b55afb1..d5fbfffce 100644 --- a/streams/sk.m3u +++ b/streams/sk.m3u @@ -81,5 +81,5 @@ https://ythls.onrender.com/channel/UCdsKjmExW-0pFskKYbjNIQg.m3u8 https://ythls.onrender.com/channel/UCnEQCNDsMtPlrVwCrRViaeQ.m3u8 #EXTINF:-1 tvg-id="TVDK.sk",TV DK (486p) [Not 24/7] https://5ca49f2417d90.streamlock.net/live/dolnykubin1/playlist.m3u8 -#EXTINF:-1 tvg-id="ZapadoslovenskaTV.sk",Zรกpadoslovenskรก TV (1080p) +#EXTINF:-1 tvg-id="ZapadoslovenskaTV.sk",Zรกpadoslovenskรก TV (1080p) https://live.zstv.sk/memfs/5b0f9dd2-8f77-4fe5-9527-bc11bb8b18e5.m3u8 diff --git a/streams/so.m3u b/streams/so.m3u index 34ef0c6f4..c899b7095 100644 --- a/streams/so.m3u +++ b/streams/so.m3u @@ -3,9 +3,9 @@ https://ap02.iqplay.tv:8082/iqb8002/s03btv/playlist.m3u8 #EXTINF:-1 tvg-id="SomaliNationalTV.so",Somali National TV (576p) https://ap02.iqplay.tv:8082/iqb8002/s4ne/playlist.m3u8 -#EXTINF:-1 tvg-id="PuntlandTV.so",Puntland TV (720p) +#EXTINF:-1 tvg-id="PuntlandTV.so",Puntland TV (720p) http://cdn.mediavisionuae.com:1935/live/putlandtv2.stream/playlist.m3u8 -#EXTINF:-1 tvg-id="SNTV2.so",SNTV Daljir (576p) +#EXTINF:-1 tvg-id="SNTV2.so",SNTV Daljir (576p) https://ap02.iqplay.tv:8082/iqb8002/s2tve/playlist.m3u8 #EXTINF:-1 tvg-id="SBCTV.so",SBC TV (720p) [Not 24/7] http://cdn.mediavisionuae.com:1935/live/sbctv.stream/playlist.m3u8 diff --git a/streams/sy.m3u b/streams/sy.m3u index 635e33af6..debe5bfd4 100644 --- a/streams/sy.m3u +++ b/streams/sy.m3u @@ -33,7 +33,7 @@ http://vod.alikhbaria.net:1935/oLive/snews05042022/playlist.m3u8 http://vod.ortas.sy:1935/oLive/snews05042022/playlist.m3u8 #EXTINF:-1 tvg-id="SyrianSatelliteChannel.sy",Syria Satellite Channel (360p) [Not 24/7] http://vod.ortas.sy:1935/oLive/sat05042022/playlist.m3u8 -#EXTINF:-1 tvg-id="AlalamNewsChannelSyria.sy",Alalam News Channel Syria (576p) +#EXTINF:-1 tvg-id="AlalamNewsChannelSyria.sy",Alalam News Channel Syria (576p) https://live2.alalam.ir/alalam.m3u8 #EXTINF:-1 tvg-id="RadioAlkulTV.sy",Radio Alkul TV (1080p) [Not 24/7] https://ffs.gulfsat.com/AlkulTV/video.m3u8 diff --git a/streams/th.m3u b/streams/th.m3u index 5a03f9711..bc6b25278 100644 --- a/streams/th.m3u +++ b/streams/th.m3u @@ -184,3 +184,7 @@ http://183.89.246.119:8010/play/a00c/index.m3u8 http://183.89.246.119:8010/play/a00u/index.m3u8 #EXTINF:-1 tvg-id="TopNews.th",Top News (480p) https://live.topnews.co.th/hls/topnews.m3u8 +#EXTINF:-1 tvg-id="AmarinTV.th",Amarin TV +https://cdn6.goprimetime.info/feed/202306140918/chamarin/index.m3u8 +#EXTINF:-1 tvg-id="MCOTHD.th",MCOT HD +https://cdn6.goprimetime.info/feed/202306140918/chmcothd/index.m3u8 diff --git a/streams/tn.m3u b/streams/tn.m3u index f90b91fb3..84b32fe56 100644 --- a/streams/tn.m3u +++ b/streams/tn.m3u @@ -19,3 +19,5 @@ https://ythls.onrender.com/channel/UCdvWVsmQBROkgcGzVep73oA.m3u8 http://live.watania2.tn:1935/live/watanya2.stream/playlist.m3u8 #EXTINF:-1 tvg-id="Watania2.tn",Watania 2 (480p) https://ythls.onrender.com/channel/UCJW9gatYczI191TunQxMGbA.m3u8 +#EXTINF:-1 tvg-id="EssaidaTV.tn",Essaida TV +https://app.rtvli.com/hls/stream/index.m3u8 diff --git a/streams/tr.m3u b/streams/tr.m3u index d8f38301c..751315132 100644 --- a/streams/tr.m3u +++ b/streams/tr.m3u @@ -495,3 +495,21 @@ https://win29.yayin.com.tr/erzurumwebtv/erzurumwebtv/iptvdelisi.m3u8 https://ythls.onrender.com/channel/UCqq-1-YntK4Gq53Ka9PaVlg.m3u8 #EXTINF:-1 tvg-id="MinikaGo.tr",Minika Go (576p) [Not 24/7] https://ythls.onrender.com/channel/UCVbCXWXWd0WCNhdBnmP_TmA.m3u8 +#EXTINF:-1 tvg-id="PowerTurkTV.tr",PowerTurk TV +https://powerturk.blutv.com/blutv_powerturk/powerturk_sd.smil/playlist.m3u8 +#EXTINF:-1 tvg-id="BloombergHT.tr",Bloomberg HT +https://bloomberght2dvr.blutv.com/blutv_bloomberght_dvr/live.m3u8 +#EXTINF:-1 tvg-id="24TV.tr",24 TV +https://kanal24.blutv.com/blutv_kanal24_live/live.m3u8 +#EXTINF:-1 tvg-id="Ekoturk.tr",Ekoturk +https://ekoturk.blutv.com/blutv_ekoturk2/live.m3u8 +#EXTINF:-1 tvg-id="HaberGlobal.tr",Haber Global +https://haberglobaldvr.blutv.com/blutv_haberglobal_dvr/live.m3u8 +#EXTINF:-1 tvg-id="TRT2.tr",TRT 2 +https://trt2.blutv.com/blutv_trt2/live.m3u8 +#EXTINF:-1 tvg-id="TRTTurk.tr",TRT Turk +https://trtturk.blutv.com/blutv_trtturk2/live.m3u8 +#EXTINF:-1 tvg-id="ShowTurk.tr",Show Turk +https://showturk.blutv.com/blutv_showturk2/live.m3u8 +#EXTINF:-1 tvg-id="ShowTV.tr",Show TV +https://showtv.blutv.com/blutv_showtv_live/live.m3u8 diff --git a/streams/uk.m3u b/streams/uk.m3u index 4cde9f4ed..c137094a4 100644 --- a/streams/uk.m3u +++ b/streams/uk.m3u @@ -205,3 +205,7 @@ https://a.jsrdn.com/broadcast/22680_3BR3zocwi9/-0500/c.m3u8 https://ap02.iqplay.tv:8082/iqb8002/ka1s0n/playlist.m3u8 #EXTINF:-1 tvg-id="LollyKids.uk",Lolly Kids (480p) http://45.225.95.170:8000/play/a0ei/index.m3u8 +#EXTINF:-1 tvg-id="BBCWorldNewsSouthAsia.uk",BBC World News South Asia +http://103.199.161.254/Content/bbcworld/Live/Channel%28BBCworld%29/Stream%2801%29/index.m3u8 +#EXTINF:-1 tvg-id="BeanoTV.uk",Beano TV +https://a5b4bacecd47433dad06d3189fc7422e.mediatailor.us-east-1.amazonaws.com/v1/manifest/04fd913bb278d8775298c26fdca9d9841f37601f/RakutenTV-eu_BeanoTV/b1f233d5-847c-437d-aa4f-f73e67a85323/2.m3u8 diff --git a/streams/us.m3u b/streams/us.m3u index 6049d6314..19565ac45 100644 --- a/streams/us.m3u +++ b/streams/us.m3u @@ -1010,7 +1010,7 @@ https://cdn-unified-hls.streamspot.com/ingest1/6ec6f5ba47/playlist.m3u8?origin=1 https://hls-cdn.tvstartup16.net/tvstartup16-channel/live/mp4:jimbobklynedge/playlist.m3u8 #EXTINF:-1 tvg-id="",BLUES TV https://2-fss-2.streamhoster.com/pl_138/205510-3094608-1/playlist.m3u8 -#EXTINF:-1 tvg-id="Alhurra.us",Alhurra (720p) +#EXTINF:-1 tvg-id="Alhurra.us",Alhurra (720p) https://mbn-ingest-worldsafe.akamaized.net/hls/live/2038900/MBN_Alhurra_Worldsafe_HLS/master.m3u8 #EXTINF:-1 tvg-id="",30A TV Classic Movies https://30a-tv.com/feeds/pzaz/30atvmovies.m3u8 @@ -1088,15 +1088,27 @@ https://origin1.noisypeak.com/4XhPa5v93P3za6G0cMyV/playlist.m3u8 https://unidfp-nlds145.global.ssl.fastly.net/nlds/univisionnow/univision_hou2/as/live/univision_hou2_hd_pc.m3u8?t1= #EXTINF:-1 tvg-id="WXTVDT1.us",WXTV-DT1 (Univision New York) [Geo-blocked] https://unidfp-nlds143.global.ssl.fastly.net/nlds/univisionnow/univision_ny2/as/live/univision_ny2_hd_pc.m3u8?t1= -#EXTINF:-1 tvg-id="ABNAfrica.us",ABN Africa (480p) +#EXTINF:-1 tvg-id="ABNAfrica.us",ABN Africa (480p) https://rtmp2.abnvideos.com/hls/abnafrica.m3u8 -#EXTINF:-1 tvg-id="ABNChina.us",ABN China (720p) +#EXTINF:-1 tvg-id="ABNChina.us",ABN China (720p) https://rtmp2.abnvideos.com/hls/abnchina.m3u8 -#EXTINF:-1 tvg-id="ABNTVIndia.us",ABN TV India (540p) +#EXTINF:-1 tvg-id="ABNTVIndia.us",ABN TV India (540p) https://rtmp2.abnvideos.com/hls/abntvindia.m3u8 -#EXTINF:-1 tvg-id="ABNUrdu.us",ABN Urdu (540p) +#EXTINF:-1 tvg-id="ABNUrdu.us",ABN Urdu (540p) https://rtmp2.abnvideos.com/hls/abnurdu.m3u8 -#EXTINF:-1 tvg-id="ABNBibleMoviesChannel.us",ABN Bible Movies (720p) +#EXTINF:-1 tvg-id="ABNBibleMoviesChannel.us",ABN Bible Movies (720p) https://rtmp2.abnvideos.com/hls/abnbiblemovies.m3u8 #EXTINF:-1 tvg-id="DNews.us",DNews (1080p) [Not 24/7] https://ythls.onrender.com/channel/UC4dWvSKVWJ36tJyhjDQCCaQ.m3u8 +#EXTINF:-1 tvg-id="TropicalMoonUrbanTV.us",Tropical Moon Urban TV +https://srv.tropicalmoonmedia.com/urbantvnetott/urbantvnetott/playlist.m3u8 +#EXTINF:-1 tvg-id="TropicalMoonEventosTV.us",Tropical Moon Eventos TV +https://srv2.tropicalmoonmedia.com/eventostv/eventostv/playlist.m3u8 +#EXTINF:-1 tvg-id="TropicalMoonSalsaTV.us",Tropical Moon Salsa TV +https://srv.tropicalmoonmedia.com/musictv/musictv/playlist.m3u8 +#EXTINF:-1 tvg-id="TUTV.us",TUTV +https://livestream.telvue.com/templeuni1/f7b44cfafd5c52223d5498196c8a2e7b.sdp/playlist.m3u8 +#EXTINF:-1 tvg-id="StarTrek2.us",Star Trek 2 +https://service-stitcher.clusters.pluto.tv/v1/stitch/embed/hls/channel/634dacf51d90320007fcd5fa/master.m3u8?advertisingId=channel&appName=rokuchannel&appVersion=1.0&bmodel=bm1&channel_id=channel&content=channel&content_rating=ROKU_ADS_CONTENT_RATING&content_type=livefeed&coppa=false&deviceDNT=1&deviceId=channel&deviceMake=rokuChannel&deviceModel=web&deviceType=rokuChannel&deviceVersion=1.0&embedPartner=rokuChannel&genre=ROKU_ADS_CONTENT_GENRE&is_lat=1&platform=web&rdid=channel&studio_id=viacom&tags=ROKU_CONTENT_TAGS +#EXTINF:-1 tvg-id="FastTV.us",Fast TV +https://3fa797d5.wurl.com/manifest/f36d25e7e52f1ba8d7e56eb859c636563214f541/T05PX01vdG9yVHJlbmRGYXN0VFZfSExT/b5e5e0e2-12b3-4312-93c9-c0a7c50b41ca/4.m3u8 diff --git a/streams/us_canelatv.m3u b/streams/us_canelatv.m3u index 600935b6a..4f2717519 100644 --- a/streams/us_canelatv.m3u +++ b/streams/us_canelatv.m3u @@ -43,7 +43,7 @@ https://stream.ads.ottera.tv/playlist.m3u8?network_id=771 https://stream.ads.ottera.tv/playlist.m3u8?network_id=4312 #EXTINF:-1 tvg-id="",Canela Hits https://stream.ads.ottera.tv/playlist.m3u8?network_id=1058 -#EXTINF:-1 tvg-id="",Canela Music Presents +#EXTINF:-1 tvg-id="",Canela Music Presents https://stream.ads.ottera.tv/playlist.m3u8?network_id=2548 #EXTINF:-1 tvg-id="",CHILL LATINO https://stream.ads.ottera.tv/playlist.m3u8?network_id=1085 diff --git a/streams/us_local.m3u b/streams/us_local.m3u index 4553b22ef..ec86b7082 100644 --- a/streams/us_local.m3u +++ b/streams/us_local.m3u @@ -625,7 +625,7 @@ http://trn03.tulix.tv/teleup-nbc-wgal-new1/playlist.m3u8 http://trn03.tulix.tv/teleup-cw-whp/playlist.m3u8 #EXTINF:-1 tvg-id="WJLADT1.us",ABC 7 Washington DC (WJLA) (720p) https://content.uplynk.com/40cec2bf074c40f08932da03ab4510be.m3u8 -#EXTINF:-1 tvg-id="WLCT96.us",Wolcott Governmental TV (720p) (Wolcott CT) +#EXTINF:-1 tvg-id="WLCT96.us",Wolcott Governmental TV (Wolcott CT) (720p) https://5a5c57d042315.streamlock.net/live11704001/ngrp:government_all/playlist.m3u8 #EXTINF:-1 tvg-id="WLIIDT1.us",TeleOnce (WLII-DT) (1080p) https://univision-live.cdn.vustreams.com/live/ce88b839-6376-4494-a2ee-83d66bc7cfc1/live.isml/ce88b839-6376-4494-a2ee-83d66bc7cfc1.m3u8 diff --git a/streams/za.m3u b/streams/za.m3u index 6b149bb13..cb2860445 100644 --- a/streams/za.m3u +++ b/streams/za.m3u @@ -33,9 +33,9 @@ https://ythls.onrender.com/channel/UCVklphu0DdSFQaoRu1e0fsw.m3u8 https://ythls.onrender.com/channel/UCwgzvE6tj56aYkCF8_65TKQ.m3u8 #EXTINF:-1 tvg-id="RabboniTV.za",Rabboni TV (1080p) [Not 24/7] https://ythls.onrender.com/channel/UCWnCfp6jZHGuuX547SJ5F7g.m3u8 -#EXTINF:-1 tvg-id="BOKTV.za",BOKTV (720p) +#EXTINF:-1 tvg-id="BOKTV.za",BOKTV (720p) https://livestream2.bokradio.co.za/hls/Bok5c.m3u8 #EXTINF:-1 tvg-id="RaphaTV.za",Rapha TV (720p) [Not 24/7] https://ythls.onrender.com/channel/UCYo1cBqDWMAQ-_krJdEw9ew.m3u8 -#EXTINF:-1 tvg-id="SeraphimTV.za",Seraphim TV (720p) +#EXTINF:-1 tvg-id="SeraphimTV.za",Seraphim TV (720p) https://932y48q5djv8-hls-live.5centscdn.com/dncpull/live.stream/chunks.m3u8 diff --git a/tests/__data__/expected/.api/streams.json b/tests/__data__/expected/.api/streams.json index 5d7934d81..df10e542b 100644 --- a/tests/__data__/expected/.api/streams.json +++ b/tests/__data__/expected/.api/streams.json @@ -1 +1 @@ -[{"channel":"AndorraTV.ad","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","http_referrer":"http://imn.iq","user_agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"},{"channel":"BBCNews.uk","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8","http_referrer":null,"user_agent":null},{"channel":"BBCNewsHD.uk","url":"https://master.starmena-cloud.com/hls/bbc.m3u8","http_referrer":null,"user_agent":null},{"channel":"KayhanTV.af","url":"http://208.93.117.113/live/Stream1/playlist.m3u8","http_referrer":null,"user_agent":null},{"channel":"LDPRTV.ru","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8","http_referrer":null,"user_agent":null},{"channel":"LibyasChannel.ly","url":"https://master.starmena-cloud.com/hls/libyas.m3u8","http_referrer":null,"user_agent":null},{"channel":"Sharq.af","url":"https://forerunnerrtmp.livestreamingcdn.com/output18/output18.stream/playlist.m3u8","http_referrer":null,"user_agent":null}] \ No newline at end of file +[{"channel":"","url":"http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8","http_referrer":null,"user_agent":null},{"channel":"","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8","http_referrer":"http://imn.iq","user_agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"},{"channel":"AndorraTV.ad","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","http_referrer":null,"user_agent":null},{"channel":"BBCNews.uk","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8","http_referrer":null,"user_agent":null},{"channel":"LDPRTV.ru","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8","http_referrer":null,"user_agent":null},{"channel":"MeteoMedia.ca","url":"http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8","http_referrer":null,"user_agent":null},{"channel":"VisitXTV.nl","url":"https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8","http_referrer":null,"user_agent":null},{"channel":"Zoo.ad","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/zoo","http_referrer":null,"user_agent":null}] \ No newline at end of file diff --git a/tests/__data__/expected/.gh-pages/countries/uk.m3u b/tests/__data__/expected/.gh-pages/countries/uk.m3u deleted file mode 100644 index 5da897947..000000000 --- a/tests/__data__/expected/.gh-pages/countries/uk.m3u +++ /dev/null @@ -1,5 +0,0 @@ -#EXTM3U -#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7] -#EXTVLCOPT:http-referrer=http://imn.iq -#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 -http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8 diff --git a/tests/__data__/expected/.gh-pages/index.country.m3u b/tests/__data__/expected/.gh-pages/index.country.m3u index f2aa6bde0..63f4c8e0f 100644 --- a/tests/__data__/expected/.gh-pages/index.country.m3u +++ b/tests/__data__/expected/.gh-pages/index.country.m3u @@ -9,9 +9,9 @@ http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8 http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8 #EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Russia",ะ›ะ”ะŸะ  ะขะ’ (1080p) http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8 -#EXTINF:-1 tvg-id="" tvg-logo="" group-title="United Kingdom" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7] +#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="International",BBC News HD +http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8 +#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7] #EXTVLCOPT:http-referrer=http://imn.iq #EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8 -#EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="International",BBC News HD -http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8 diff --git a/tests/__data__/expected/.gh-pages/index.region.m3u b/tests/__data__/expected/.gh-pages/index.region.m3u index 2d4eb8a5e..83ba6d4e4 100644 --- a/tests/__data__/expected/.gh-pages/index.region.m3u +++ b/tests/__data__/expected/.gh-pages/index.region.m3u @@ -9,20 +9,12 @@ http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8 http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8 #EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Commonwealth of Independent States",ะ›ะ”ะŸะ  ะขะ’ (1080p) http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8 -#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Europe" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7] -#EXTVLCOPT:http-referrer=http://imn.iq -#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 -http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8 #EXTINF:-1 tvg-id="AndorraTV.ad" tvg-logo="" group-title="Europe",ATV https://iptv-all.lanesh4d0w.repl.co/andorra/atv #EXTINF:-1 tvg-id="Zoo.ad" tvg-logo="" group-title="Europe",Zoo (720p) https://iptv-all.lanesh4d0w.repl.co/andorra/zoo #EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Europe",ะ›ะ”ะŸะ  ะขะ’ (1080p) http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8 -#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Europe, the Middle East and Africa" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7] -#EXTVLCOPT:http-referrer=http://imn.iq -#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 -http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8 #EXTINF:-1 tvg-id="AndorraTV.ad" tvg-logo="" group-title="Europe, the Middle East and Africa",ATV https://iptv-all.lanesh4d0w.repl.co/andorra/atv #EXTINF:-1 tvg-id="Zoo.ad" tvg-logo="" group-title="Europe, the Middle East and Africa",Zoo (720p) @@ -35,10 +27,6 @@ http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8 http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8 #EXTINF:-1 tvg-id="" tvg-logo="" group-title="South Asia",Daawah TV http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8 -#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Worldwide" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7] -#EXTVLCOPT:http-referrer=http://imn.iq -#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 -http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8 #EXTINF:-1 tvg-id="AndorraTV.ad" tvg-logo="" group-title="Worldwide",ATV https://iptv-all.lanesh4d0w.repl.co/andorra/atv #EXTINF:-1 tvg-id="BBCNews.uk" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/united-kingdom/bbc-news-uk.png" group-title="Worldwide",BBC News HD @@ -51,3 +39,7 @@ http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8 https://iptv-all.lanesh4d0w.repl.co/andorra/zoo #EXTINF:-1 tvg-id="LDPRTV.ru" tvg-logo="https://iptvx.one/icn/ldpr-tv.png" group-title="Worldwide",ะ›ะ”ะŸะ  ะขะ’ (1080p) http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8 +#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7] +#EXTVLCOPT:http-referrer=http://imn.iq +#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 +http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8 diff --git a/tests/__data__/expected/.gh-pages/regions/emea.m3u b/tests/__data__/expected/.gh-pages/regions/emea.m3u index c8116aef1..6b40ee03c 100644 --- a/tests/__data__/expected/.gh-pages/regions/emea.m3u +++ b/tests/__data__/expected/.gh-pages/regions/emea.m3u @@ -1,8 +1,4 @@ #EXTM3U -#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7] -#EXTVLCOPT:http-referrer=http://imn.iq -#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 -http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8 #EXTINF:-1 tvg-id="AndorraTV.ad" tvg-logo="" group-title="Undefined",ATV https://iptv-all.lanesh4d0w.repl.co/andorra/atv #EXTINF:-1 tvg-id="Zoo.ad" tvg-logo="" group-title="Undefined",Zoo (720p) diff --git a/tests/__data__/expected/.gh-pages/regions/eur.m3u b/tests/__data__/expected/.gh-pages/regions/eur.m3u index c8116aef1..6b40ee03c 100644 --- a/tests/__data__/expected/.gh-pages/regions/eur.m3u +++ b/tests/__data__/expected/.gh-pages/regions/eur.m3u @@ -1,8 +1,4 @@ #EXTM3U -#EXTINF:-1 tvg-id="" tvg-logo="" group-title="Undefined" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7] -#EXTVLCOPT:http-referrer=http://imn.iq -#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 -http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8 #EXTINF:-1 tvg-id="AndorraTV.ad" tvg-logo="" group-title="Undefined",ATV https://iptv-all.lanesh4d0w.repl.co/andorra/atv #EXTINF:-1 tvg-id="Zoo.ad" tvg-logo="" group-title="Undefined",Zoo (720p) diff --git a/tests/__data__/expected/database/db_create.streams.db b/tests/__data__/expected/database/db_create.streams.db deleted file mode 100644 index be143f27e..000000000 --- a/tests/__data__/expected/database/db_create.streams.db +++ /dev/null @@ -1,7 +0,0 @@ -{"line":2,"channel":"ATV.ad","quality":"720p","label":"Offline","name":"ATV","filepath":"ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","httpReferrer":"http://imn.iq","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148","_id":"k4XpZHQAyqyTbcf0"} -{"line":2,"channel":"LibyasChannel.ly","quality":"","label":"","name":"Libyas Channel","filepath":"ly.m3u","url":"https://master.starmena-cloud.com/hls/libyas.m3u8","httpReferrer":"","userAgent":"","_id":"ki4YjAoNNoIY8sSm"} -{"line":2,"channel":"","quality":"720p","label":"","name":"1A Network","filepath":"unsorted.m3u","url":"https://simultv.s.llnwi.net/n4s4/2ANetwork/interlink.m3u8","httpReferrer":"","userAgent":"","_id":"IZpCJjjWPaBYh7Dr"} -{"line":2,"channel":"","quality":"720p","label":"","name":"Fox Sports 2 Asia (Thai)","filepath":"us_blocked.m3u","url":"https://example.com/playlist.m3u8","httpReferrer":"","userAgent":"","_id":"6c4J4vs8K69wMJ7S"} -{"line":4,"channel":"","quality":"","label":"","name":"TVN","filepath":"us_blocked.m3u","url":"https://example.com/playlist2.m3u8","httpReferrer":"","userAgent":"","_id":"xEmbX384v3t3F5Wg"} -{"line":6,"channel":"EverydayHeroes.us","quality":"720p","label":"","name":"Everyday Heroes","filepath":"us_blocked.m3u","url":"https://a.jsrdn.com/broadcast/7b1451fa52/+0000/c.m3u8","httpReferrer":"","userAgent":"","_id":"BZsRPt8VS4kIJnfi"} -{"line":2,"channel":"qib22lAq1L.us","quality":"720p","label":"","name":"ABC","filepath":"wrong_id.m3u","url":"https://example.com/playlist2.m3u8","httpReferrer":"","userAgent":"","_id":"eFUlUnST5zJSBWAF"} diff --git a/tests/__data__/expected/logs/generators.log b/tests/__data__/expected/logs/generators.log index eb311d382..4663f9103 100644 --- a/tests/__data__/expected/logs/generators.log +++ b/tests/__data__/expected/logs/generators.log @@ -32,14 +32,13 @@ {"filepath":"subdivisions/ca-on.m3u","count":1} {"filepath":"countries/in.m3u","count":1} {"filepath":"countries/ru.m3u","count":1} -{"filepath":"countries/uk.m3u","count":1} {"filepath":"countries/int.m3u","count":1} {"filepath":"index.category.m3u","count":8} {"filepath":"index.country.m3u","count":7} {"filepath":"index.language.m3u","count":7} {"filepath":"index.m3u","count":7} {"filepath":"index.nsfw.m3u","count":8} -{"filepath":"index.region.m3u","count":23} +{"filepath":"index.region.m3u","count":21} {"filepath":"languages/eng.m3u","count":1} {"filepath":"languages/rus.m3u","count":1} {"filepath":"languages/cat.m3u","count":1} @@ -54,8 +53,8 @@ {"filepath":"regions/cas.m3u","count":0} {"filepath":"regions/cenamer.m3u","count":0} {"filepath":"regions/cis.m3u","count":1} -{"filepath":"regions/emea.m3u","count":4} -{"filepath":"regions/eur.m3u","count":4} +{"filepath":"regions/emea.m3u","count":3} +{"filepath":"regions/eur.m3u","count":3} {"filepath":"regions/hispam.m3u","count":0} {"filepath":"regions/lac.m3u","count":0} {"filepath":"regions/latam.m3u","count":0} diff --git a/tests/__data__/expected/streams/ad.m3u b/tests/__data__/expected/streams/ad.m3u deleted file mode 100644 index 5007b9ec0..000000000 --- a/tests/__data__/expected/streams/ad.m3u +++ /dev/null @@ -1,5 +0,0 @@ -#EXTM3U -#EXTINF:-1 tvg-id="AndorraTV.ad" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",ATV (720p) [Offline] -#EXTVLCOPT:http-referrer=http://imn.iq -#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 -https://iptv-all.lanesh4d0w.repl.co/andorra/atv diff --git a/tests/__data__/expected/streams/af.m3u b/tests/__data__/expected/streams/af.m3u deleted file mode 100644 index 976a1d532..000000000 --- a/tests/__data__/expected/streams/af.m3u +++ /dev/null @@ -1,5 +0,0 @@ -#EXTM3U -#EXTINF:-1 tvg-id="KayhanTV.af",Kayhan TV -http://208.93.117.113/live/Stream1/playlist.m3u8 -#EXTINF:-1 tvg-id="Sharq.af",Sharq -http://51.210.199.50/hls/stream.m3u8 diff --git a/tests/__data__/expected/streams/aw.m3u b/tests/__data__/expected/streams/aw.m3u deleted file mode 100644 index 3c2c2eb89..000000000 --- a/tests/__data__/expected/streams/aw.m3u +++ /dev/null @@ -1,6 +0,0 @@ -#EXTM3U -#EXTINF:-1 tvg-id="Telearuba.aw",Telearuba (720p) -http://cdn.setar.aw:1935/Telearuba/smil:telearuba.smil/playlist.m3u8 -#EXTINF:-1 tvg-id="Telearuba.aw" user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",Telearuba (480p) [Not 24/7] -#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36 -https://backend-server-dot-telearuba-app.appspot.com/media/livestream13/playlist.m3u8 diff --git a/tests/__data__/expected/streams/es.m3u b/tests/__data__/expected/streams/es.m3u deleted file mode 100644 index 9b94dc893..000000000 --- a/tests/__data__/expected/streams/es.m3u +++ /dev/null @@ -1,7 +0,0 @@ -#EXTM3U -#EXTINF:-1 tvg-id="",Caillou -https://dhx-caillou-1-es.samsung.wurl.tv/playlist.m3u8 -#EXTINF:-1 tvg-id="",iHola Play -https://rakuten-hola-2-es.samsung.wurl.tv/playlist.m3u8 -#EXTINF:-1 tvg-id="",Planeta Junior TV -https://deaplaneta-planetakidz-1-es.samsung.wurl.tv/playlist.m3u8 diff --git a/tests/__data__/expected/streams/ru.m3u b/tests/__data__/expected/streams/ru.m3u deleted file mode 100644 index 17ed7be44..000000000 --- a/tests/__data__/expected/streams/ru.m3u +++ /dev/null @@ -1,9 +0,0 @@ -#EXTM3U -#EXTINF:-1 tvg-id="LDPRTV.ru",ะ›ะ”ะŸะ  ะขะ’ (1080p) -http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8 -#EXTINF:-1 tvg-id="LDPRTV.ru",ะ›ะ”ะŸะ  ะขะ’ (1080p) -http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8 -#EXTINF:-1 tvg-id="LDPRTV.ru",ะ›ะ”ะŸะ  ะขะ’ (1080p) -http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8 -#EXTINF:-1 tvg-id="LDPRTV.ru",ะ›ะ”ะŸะ  ะขะ’ (1080p) -https://service-stitcher.clusters.pluto.tv/stitch/hls/channel/5ca525b650be2571e3943c63/master.m3u8?advertisingId=&appName=web&deviceId=5ca525b650be2571e3943c63 diff --git a/tests/__data__/expected/streams_format/in.m3u b/tests/__data__/expected/streams_format/in.m3u new file mode 100644 index 000000000..dace15a30 --- /dev/null +++ b/tests/__data__/expected/streams_format/in.m3u @@ -0,0 +1,3 @@ +#EXTM3U +#EXTINF:-1 tvg-id="",Manorama News +https://ythls.onrender.com/channel/UCP0uG-mcMImgKnJz-VjJZmQ.m3u8 diff --git a/tests/__data__/expected/streams/nl.m3u b/tests/__data__/expected/streams_format/nl.m3u similarity index 63% rename from tests/__data__/expected/streams/nl.m3u rename to tests/__data__/expected/streams_format/nl.m3u index 0be4e08e1..ff3188ba0 100644 --- a/tests/__data__/expected/streams/nl.m3u +++ b/tests/__data__/expected/streams_format/nl.m3u @@ -1,8 +1,4 @@ #EXTM3U -#EXTINF:-1 tvg-id="NPO1.nl",NPO 1 (1080p) [Geo-blocked] -http://stream.tvtap.net:8081/live/nl-npo1.stream/30fps.m3u8 -#EXTINF:-1 tvg-id="NPO1.nl",NPO 1 (1080p) [Geo-blocked] -http://stream.tvtap.net:8081/live/nl-npo1.stream/60fps.m3u8 #EXTINF:-1 tvg-id="NPO1.nl",NPO 1 (342p) [Geo-blocked] http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo1/npo1.isml/.m3u8 #EXTINF:-1 tvg-id="NPO2.nl",NPO 2 (342p) diff --git a/tests/__data__/expected/streams/in.m3u b/tests/__data__/expected/streams_update/in.m3u similarity index 100% rename from tests/__data__/expected/streams/in.m3u rename to tests/__data__/expected/streams_update/in.m3u diff --git a/tests/__data__/expected/streams/my.m3u b/tests/__data__/expected/streams_update/my.m3u similarity index 100% rename from tests/__data__/expected/streams/my.m3u rename to tests/__data__/expected/streams_update/my.m3u diff --git a/tests/__data__/expected/streams/uk.m3u b/tests/__data__/expected/streams_update/uk.m3u similarity index 100% rename from tests/__data__/expected/streams/uk.m3u rename to tests/__data__/expected/streams_update/uk.m3u diff --git a/tests/__data__/expected/streams/us.m3u b/tests/__data__/expected/streams_update/us.m3u similarity index 100% rename from tests/__data__/expected/streams/us.m3u rename to tests/__data__/expected/streams_update/us.m3u diff --git a/tests/__data__/input/data/streams.json b/tests/__data__/input/data/streams.json deleted file mode 100644 index 5b97f3e1e..000000000 --- a/tests/__data__/input/data/streams.json +++ /dev/null @@ -1 +0,0 @@ -[{"channel":"TUTV.us","url":"https://livestream.telvue.com/templeuni1/f7b44cfafd5c52223d5498196c8a2e7b.sdp/playlist.m3u8","http_referrer":null,"user_agent":null}] \ No newline at end of file diff --git a/tests/__data__/input/database/api_generate.streams.db b/tests/__data__/input/database/api_generate.streams.db deleted file mode 100644 index 110767d61..000000000 --- a/tests/__data__/input/database/api_generate.streams.db +++ /dev/null @@ -1,7 +0,0 @@ -{"line": 2,"quality":null,"label":null,"name":"ะ›ะ”ะŸะ  ะขะ’","channel":"LDPRTV.ru","filepath":"ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8","httpReferrer":null,"userAgent":null,"cluster_id":1,"_id":"2ST8btby3mmsgPF0","status":"error"} -{"line": 2,"quality":null,"label":null,"name":"BBC News HD","channel":"BBCNews.uk","filepath":"uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8","httpReferrer":null,"userAgent":null,"cluster_id":3,"_id":"3TbieV1ptnZVCIdn","status":"blocked"} -{"line": 2,"quality":null,"label":null,"name":"ATV","channel":"AndorraTV.ad","filepath":"ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","httpReferrer":"http://imn.iq","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148","cluster_id":1,"_id":"I6cjG2xCBRFFP4sz","status":"error"} -{"line": 2,"quality":null,"label":null,"name":"BBC News HD","channel":"BBCNewsHD.uk","filepath":"uk.m3u","url":"https://master.starmena-cloud.com/hls/bbc.m3u8","httpReferrer":null,"userAgent":null,"cluster_id":3,"_id":"WTbieV1ptnXVCIdn","status":"online","bitrate":0,"frame_rate":25,"width":1024,"height":576} -{"line": 2,"quality":null,"label":null,"name":"Kayhan TV","channel":"KayhanTV.af","filepath":"channels/af.m3u","url":"http://208.93.117.113/live/Stream1/playlist.m3u8","httpReferrer":null,"userAgent":null,"cluster_id":1,"_id":"cFFpFVzSn6xFMUF3","status":"error"} -{"line": 2,"quality":null,"label":null,"name":"Sharq","channel":"Sharq.af","filepath":"channels/af.m3u","bitrate":2226543,"frame_rate":25,"width":1280,"height":720,"url":"https://forerunnerrtmp.livestreamingcdn.com/output18/output18.stream/playlist.m3u8","httpReferrer":null,"userAgent":null,"cluster_id":1,"_id":"u7iyA6cjtf1iWWAZ","status":"online"} -{"line": 2,"quality":null,"label":null,"name":"Libyas Channel","channel":"LibyasChannel.ly","filepath":"ly.m3u","url":"https://master.starmena-cloud.com/hls/libyas.m3u8","httpReferrer":null,"userAgent":null,"cluster_id":3,"_id":"WTbieV1ptnZVCIdn","status":"online","bitrate":0,"frame_rate":25,"width":1024,"height":576} diff --git a/tests/__data__/input/database/playlist_generate.streams.db b/tests/__data__/input/database/playlist_generate.streams.db deleted file mode 100644 index 4367a38c1..000000000 --- a/tests/__data__/input/database/playlist_generate.streams.db +++ /dev/null @@ -1,14 +0,0 @@ -{"line": 2,"quality":"1080p","label":null,"name":"ะ›ะ”ะŸะ  ะขะ’","channel":"LDPRTV.ru","filepath":"ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF0"} -{"line": 2,"quality":"1080p","label":null,"name":"ะ›ะ”ะŸะ  ะขะ’","channel":"LDPRTV.ru","filepath":"ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/timeout.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF1"} -{"line": 2,"quality":"1080p","label":null,"name":"ะ›ะ”ะŸะ  ะขะ’","channel":"LDPRTV.ru","filepath":"ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF2"} -{"line": 2,"quality":"1080p","label":null,"name":"ะ›ะ”ะŸะ  ะขะ’","channel":"LDPRTV.ru","filepath":"ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/error.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF3"} -{"line": 2,"quality":"720p","label":"Geo-blocked","name":"BBC News HD","channel":"BBCNews.uk","filepath":"uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"3TbieV1ptnZVCId5"} -{"line": 2,"quality":null,"label":null,"name":"BBC News HD","channel":"BBCNews.uk","filepath":"uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8","httpReferrer":null,"userAgent":null,"_id":"3TbieV1ptnZVCIdn"} -{"line": 2,"quality":null,"label":null,"name":"ATV","channel":"AndorraTV.ad","filepath":"ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","httpReferrer":null,"userAgent":null,"_id":"I6cjG2xCBRFFP44z"} -{"line": 2,"quality":"720p","label":"Not 24/7","name":"Andorra TV","channel":"","filepath":"uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8","httpReferrer":"http://imn.iq","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148","_id":"WTbieV1ptnZVCIdn"} -{"line": 2,"quality":null,"label":null,"name":"Visit-X TV","channel":"VisitXTV.nl","filepath":"nl.m3u","url":"https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF5"} -{"line": 2,"quality":null,"label":null,"name":"Visit-X TV","channel":"VisitXTV.nl","filepath":"nl.m3u","url":"https://stream.visit-x.tv/vxtv/ngrp:live_all/60fps.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF6"} -{"line": 2,"quality":null,"label":null,"name":"Daawah TV","channel":"","filepath":"in.m3u","url":"http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF9"} -{"line": 2,"quality":null,"label":null,"name":"Meteomedia","channel":"MeteoMedia.ca","filepath":"in.m3u","url":"http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgP49"} -{"line": 2,"quality":"480p","label":null,"name":"Zoo","channel":"Zoo.ad","filepath":"ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/zoo?480","httpReferrer":null,"userAgent":null,"_id":"I6cjG2xCBRFFP4s3"} -{"line": 2,"quality":"720p","label":null,"name":"Zoo","channel":"Zoo.ad","filepath":"ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/zoo","httpReferrer":null,"userAgent":null,"_id":"I6cjG2xCBRFFP4sz"} diff --git a/tests/__data__/input/database/playlist_update.streams.db b/tests/__data__/input/database/playlist_update.streams.db deleted file mode 100644 index 898b99357..000000000 --- a/tests/__data__/input/database/playlist_update.streams.db +++ /dev/null @@ -1,21 +0,0 @@ -{"line": 2,"name":"ะ›ะ”ะŸะ  ะขะ’","quality":"1080p","label":null,"channel":"LDPRTV.ru","filepath":"ru.m3u","url":"https://service-stitcher.clusters.pluto.tv/stitch/hls/channel/5ca525b650be2571e3943c63/master.m3u8?deviceId=5ca525b650be2571e3943c63&appName=web&advertisingId=","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF3"} -{"line": 2,"name":"ะ›ะ”ะŸะ  ะขะ’","quality":"1080p","label":null,"channel":"LDPRTV.ru","filepath":"ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF0"} -{"line": 2,"name":"ะ›ะ”ะŸะ  ะขะ’","quality":"1080p","label":null,"channel":"LDPRTV.ru","filepath":"ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF1"} -{"line": 2,"name":"ะ›ะ”ะŸะ  ะขะ’","quality":"1080p","label":null,"channel":"LDPRTV.ru","filepath":"ru.m3u","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"2ST8btby3mmsgPF2"} -{"line": 2,"name":"BBC News HD","quality":"720p","label":"Not 24/7","channel":"BBCNews.uk","filepath":"uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8","httpReferrer":null,"userAgent":null,"_id":"3TbieV1ptnZVCIdn"} -{"line": 2,"quality":"720p","label":"Offline","name":"ATV","channel":"AndorraTV.ad","filepath":"ad.m3u","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","httpReferrer":"http://imn.iq","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148","_id":"I6cjG2xCBRFFP4sz"} -{"line": 2,"quality":"480p","label":"Geo-blocked","name":"BBC News HD","channel":"BBCNews.uk","filepath":"uk.m3u","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"WTbieV1ptnZVCIdn"} -{"line": 2,"quality":null,"label":null,"name":"Kayhan TV","channel":"KayhanTV.af","filepath":"af.m3u","url":"http://208.93.117.113/live/Stream1/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"cFFpFVzSn6xFMUF3"} -{"line": 2,"quality":null,"label":null,"name":"Sharq","channel":"Sharq.af","filepath":"af.m3u","url":"http://51.210.199.50/hls/stream.m3u8","httpReferrer":null,"userAgent":null,"_id":"u7iyA6cjtf1iWWAZ"} -{"line": 2,"quality":"342p","label":"Geo-blocked","channel":"NPO1.nl","name":"NPO 1","filepath":"nl.m3u","url":"http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo1/npo1.isml/.m3u8","httpReferrer":null,"userAgent":null,"_id":"mvUyDVuS5gc8gLJV"} -{"line": 2,"quality":"1080p","label":"Geo-blocked","channel":"NPO1.nl","name":"NPO 1","filepath":"nl.m3u","url":"http://stream.tvtap.net:8081/live/nl-npo1.stream/30fps.m3u8","httpReferrer":null,"userAgent":null,"_id":"8WVbsxsYeOL7kHQl"} -{"line": 2,"quality":"1080p","label":"Geo-blocked","channel":"NPO1.nl","name":"NPO 1","filepath":"nl.m3u","url":"http://stream.tvtap.net:8081/live/nl-npo1.stream/60fps.m3u8","httpReferrer":null,"userAgent":null,"_id":"8WVbsxsYeOL7kHQB"} -{"line": 2,"quality":"342p","label":null,"channel":"NPO2.nl","name":"NPO 2","filepath":"nl.m3u","url":"http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo2.isml/.m3u8","httpReferrer":null,"userAgent":null,"_id":"2p1TNGO0mF0MJOGy"} -{"line": 2,"quality":"302p","label":"Geo-blocked","channel":"NPO2.nl","name":"NPO 2","filepath":"nl.m3u","url":"http://stream.tvtap.net:8081/live/nl-npo2.stream/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"nhL85BL7YM5OR7cn"} -{"line": 2,"quality":null,"label":null,"name":"Tele 2000","channel":"Tele2000.pe","filepath":"pe.m3u","url":"https://servilive.com:3126/live/tele2000live.m3u8","httpReferrer":"https://example2.com/","userAgent":null,"_id":"cF0pFVzSn6xFMUF3"} -{"line": 2,"quality":null,"label":null,"name":"Planeta Junior TV","channel":"","filepath":"es.m3u","url":"https://deaplaneta-planetakidz-1-es.samsung.wurl.tv/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"1BT8btby3mmsgPF0"} -{"line": 2,"quality":null,"label":null,"name":"Caillou","channel":"","filepath":"es.m3u","url":"https://dhx-caillou-1-es.samsung.wurl.tv/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"3BT8btby3mmsgPF0"} -{"line": 2,"quality":null,"label":null,"name":"iHola Play","channel":"","filepath":"es.m3u","url":"https://rakuten-hola-2-es.samsung.wurl.tv/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"2BT8btby3mmsgPF0"} -{"line": 2,"quality":"720p","label":null,"name":"Telearuba","channel":"Telearuba.aw","filepath":"aw.m3u","url":"http://cdn.setar.aw:1935/Telearuba/smil:telearuba.smil/playlist.m3u8","httpReferrer":null,"userAgent":null,"_id":"6BT8btby3mmsgPF0"} -{"line": 2,"quality":"480p","label":"Not 24/7","name":"Telearuba","channel":"Telearuba.aw","filepath":"aw.m3u","url":"https://backend-server-dot-telearuba-app.appspot.com/media/livestream13/playlist.m3u8","httpReferrer":null,"userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36","_id":"4BT8btby3mmsgPF0"} -{"line": 2,"quality":"","label":"","name":"Telearuba","channel":"","filepath":"bg.m3u","url":"https://ythls.onrender.com/channel/UC40TUSUx490U5uR1lZt3Ajgm3u8","httpReferrer":null,"userAgent":null,"_id":"4BT8btby3mmsgSF0"} diff --git a/tests/__data__/input/streams/ad.m3u b/tests/__data__/input/streams/ad.m3u deleted file mode 100644 index 8bde22790..000000000 --- a/tests/__data__/input/streams/ad.m3u +++ /dev/null @@ -1,5 +0,0 @@ -#EXTM3U -#EXTINF:-1 tvg-id="ATV.ad" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",ATV (720p) [Offline] -#EXTVLCOPT:http-referrer=http://imn.iq -#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 -https://iptv-all.lanesh4d0w.repl.co/andorra/atv \ No newline at end of file diff --git a/tests/__data__/input/streams/ly.m3u b/tests/__data__/input/streams/ly.m3u deleted file mode 100644 index 8dd73939a..000000000 --- a/tests/__data__/input/streams/ly.m3u +++ /dev/null @@ -1,3 +0,0 @@ -#EXTM3U -#EXTINF:-1 tvg-id="LibyasChannel.ly",Libyas Channel -https://master.starmena-cloud.com/hls/libyas.m3u8 diff --git a/tests/__data__/input/streams/unsorted.m3u b/tests/__data__/input/streams/unsorted.m3u deleted file mode 100644 index 0cb74b761..000000000 --- a/tests/__data__/input/streams/unsorted.m3u +++ /dev/null @@ -1,3 +0,0 @@ -#EXTM3U -#EXTINF:-1 tvg-id="",1A Network (720p) -https://simultv.s.llnwi.net/n4s4/2ANetwork/interlink.m3u8 diff --git a/tests/__data__/input/streams_format/in.m3u b/tests/__data__/input/streams_format/in.m3u new file mode 100644 index 000000000..da450b06f --- /dev/null +++ b/tests/__data__/input/streams_format/in.m3u @@ -0,0 +1,3 @@ +#EXTM3U +#EXTINF:-1 tvg-id="mn.in",Manorama News +https://ythls.onrender.com/channel/UCP0uG-mcMImgKnJz-VjJZmQ.m3u8 diff --git a/tests/__data__/input/streams_format/nl.m3u b/tests/__data__/input/streams_format/nl.m3u new file mode 100644 index 000000000..3ba85b77e --- /dev/null +++ b/tests/__data__/input/streams_format/nl.m3u @@ -0,0 +1,9 @@ +#EXTM3U +#EXTINF:-1 tvg-id="NPO2.nl",NPO 2 (302p) [Geo-blocked] +http://stream.tvtap.net:8081/live/nl-npo2.stream/playlist.m3u8? +#EXTINF:-1 tvg-id="NPO2.nl",NPO 2 (342p) +http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo2.isml/.m3u8 +#EXTINF:-1 tvg-id="NPO1.nl",NPO 1 (342p) [Geo-blocked] +http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo1/npo1.isml/.m3u8 +#EXTINF:-1 tvg-id="",NPO 2 (Duplicate) +http://resolver.streaming.api.nos.nl/livestream?url=/live/npo/tvlive/npo2/npo2.isml/.m3u8 diff --git a/tests/__data__/input/streams_generate/ad.m3u b/tests/__data__/input/streams_generate/ad.m3u new file mode 100644 index 000000000..aed019154 --- /dev/null +++ b/tests/__data__/input/streams_generate/ad.m3u @@ -0,0 +1,5 @@ +#EXTM3U +#EXTINF:-1 tvg-id="Zoo.ad",Zoo (720p) +https://iptv-all.lanesh4d0w.repl.co/andorra/zoo +#EXTINF:-1 tvg-id="AndorraTV.ad",ATV +https://iptv-all.lanesh4d0w.repl.co/andorra/atv diff --git a/tests/__data__/input/streams_generate/ca.m3u b/tests/__data__/input/streams_generate/ca.m3u new file mode 100644 index 000000000..9c198b682 --- /dev/null +++ b/tests/__data__/input/streams_generate/ca.m3u @@ -0,0 +1,3 @@ +#EXTM3U +#EXTINF:-1 tvg-id="MeteoMedia.ca",Meteomedia +http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8 diff --git a/tests/__data__/input/streams_generate/in.m3u b/tests/__data__/input/streams_generate/in.m3u new file mode 100644 index 000000000..62594eb4b --- /dev/null +++ b/tests/__data__/input/streams_generate/in.m3u @@ -0,0 +1,3 @@ +#EXTM3U +#EXTINF:-1 tvg-id="",Daawah TV +http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8 diff --git a/tests/__data__/input/streams_generate/uk.m3u b/tests/__data__/input/streams_generate/uk.m3u new file mode 100644 index 000000000..5e8c7318e --- /dev/null +++ b/tests/__data__/input/streams_generate/uk.m3u @@ -0,0 +1,3 @@ +#EXTM3U +#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD +http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8 diff --git a/tests/__data__/input/streams_generate/unsorted.m3u b/tests/__data__/input/streams_generate/unsorted.m3u new file mode 100644 index 000000000..1a9c40b9f --- /dev/null +++ b/tests/__data__/input/streams_generate/unsorted.m3u @@ -0,0 +1,9 @@ +#EXTM3U +#EXTINF:-1 tvg-id="LDPRTV.ru",ะ›ะ”ะŸะ  ะขะ’ (1080p) +http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8 +#EXTINF:-1 tvg-id="VisitXTV.nl",Visit-X TV +https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8 +#EXTINF:-1 tvg-id="" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Andorra TV (720p) [Not 24/7] +#EXTVLCOPT:http-referrer=http://imn.iq +#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 +http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8 diff --git a/tests/__data__/input/streams_report/us.m3u b/tests/__data__/input/streams_report/us.m3u new file mode 100644 index 000000000..92cee65b0 --- /dev/null +++ b/tests/__data__/input/streams_report/us.m3u @@ -0,0 +1,3 @@ +#EXTM3U +#EXTINF:-1 tvg-id="",TUTV +https://livestream.telvue.com/templeuni1/f7b44cfafd5c52223d5498196c8a2e7b.sdp/playlist.m3u8 diff --git a/tests/__data__/input/streams_update/br.m3u b/tests/__data__/input/streams_update/br.m3u new file mode 100644 index 000000000..5d1b51ed4 --- /dev/null +++ b/tests/__data__/input/streams_update/br.m3u @@ -0,0 +1,6 @@ +#EXTM3U +#EXTINF:-1 tvg-id="",VTV +https://ythls.onrender.com/channel/UC40TUSUx490U5uR1lZt3Ajgm3u8 +#EXTINF:-1 tvg-id="",Tele2000 +#EXTVLCOPT:http-referrer=https://example2.com/ +https://servilive.com:3126/live/tele2000live.m3u8 diff --git a/tests/__data__/input/streams_update/uk.m3u b/tests/__data__/input/streams_update/uk.m3u new file mode 100644 index 000000000..c1deeea97 --- /dev/null +++ b/tests/__data__/input/streams_update/uk.m3u @@ -0,0 +1,5 @@ +#EXTM3U +#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (720p) [Not 24/7] +http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8 +#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (480p) [Geo-blocked] +http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/playlist.m3u8 diff --git a/tests/__data__/input/streams/us_blocked.m3u b/tests/__data__/input/streams_validate/us_blocked.m3u similarity index 100% rename from tests/__data__/input/streams/us_blocked.m3u rename to tests/__data__/input/streams_validate/us_blocked.m3u diff --git a/tests/__data__/input/streams/wrong_id.m3u b/tests/__data__/input/streams_validate/wrong_id.m3u similarity index 100% rename from tests/__data__/input/streams/wrong_id.m3u rename to tests/__data__/input/streams_validate/wrong_id.m3u diff --git a/tests/commands/api/generate.test.ts b/tests/commands/api/generate.test.ts index 74a70e11d..fe3c1215d 100644 --- a/tests/commands/api/generate.test.ts +++ b/tests/commands/api/generate.test.ts @@ -3,14 +3,9 @@ import fs from 'fs-extra' beforeEach(() => { fs.emptyDirSync('tests/__data__/output') - fs.mkdirSync('tests/__data__/output/database') - fs.copyFileSync( - 'tests/__data__/input/database/api_generate.streams.db', - 'tests/__data__/output/database/streams.db' - ) const stdout = execSync( - 'DB_DIR=tests/__data__/output/database API_DIR=tests/__data__/output/.api npm run api:generate', + 'STREAMS_DIR=tests/__data__/input/streams_generate API_DIR=tests/__data__/output/.api npm run api:generate', { encoding: 'utf8' } ) }) diff --git a/tests/commands/database/create.test.ts b/tests/commands/database/create.test.ts deleted file mode 100644 index 4ca4d4023..000000000 --- a/tests/commands/database/create.test.ts +++ /dev/null @@ -1,45 +0,0 @@ -import * as fs from 'fs-extra' -import * as path from 'path' -import { execSync } from 'child_process' -import * as _ from 'lodash' - -beforeEach(() => { - fs.emptyDirSync('tests/__data__/output') - fs.mkdirSync('tests/__data__/output/database') - - const stdout = execSync( - 'DB_DIR=tests/__data__/output/database DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/streams npm run db:create', - { encoding: 'utf8' } - ) -}) - -it('can create database', () => { - let output = content('tests/__data__/output/database/streams.db') - let expected = content('tests/__data__/expected/database/db_create.streams.db') - - output = output.map(i => { - i._id = null - return i - }) - expected = expected.map(i => { - i._id = null - return i - }) - - expect(_.orderBy(output, 'name')).toMatchObject( - expect.arrayContaining(_.orderBy(expected, 'name')) - ) -}) - -function content(filepath: string) { - const data = fs.readFileSync(path.resolve(filepath), { - encoding: 'utf8' - }) - - return data - .split('\n') - .filter(l => l) - .map(l => { - return JSON.parse(l) - }) -} diff --git a/tests/commands/playlist/format.test.ts b/tests/commands/playlist/format.test.ts new file mode 100644 index 000000000..0c867dd36 --- /dev/null +++ b/tests/commands/playlist/format.test.ts @@ -0,0 +1,30 @@ +import { execSync } from 'child_process' +import * as fs from 'fs-extra' +import { glob } from 'glob' + +beforeEach(() => { + fs.emptyDirSync('tests/__data__/output') + fs.copySync('tests/__data__/input/streams_format', 'tests/__data__/output/streams') +}) + +it('can format playlists', () => { + const stdout = execSync('STREAMS_DIR=tests/__data__/output/streams npm run playlist:format', { + encoding: 'utf8' + }) + + const files = glob + .sync('tests/__data__/expected/streams_format/*.m3u') + .map(f => f.replace('tests/__data__/expected/streams_format/', '')) + + files.forEach(filepath => { + expect(content(`output/streams/${filepath}`), filepath).toBe( + content(`expected/streams_format/${filepath}`) + ) + }) +}) + +function content(filepath: string) { + return fs.readFileSync(`tests/__data__/${filepath}`, { + encoding: 'utf8' + }) +} diff --git a/tests/commands/playlist/generate.test.ts b/tests/commands/playlist/generate.test.ts index 1e2d38abe..8c6d80d6a 100644 --- a/tests/commands/playlist/generate.test.ts +++ b/tests/commands/playlist/generate.test.ts @@ -4,13 +4,9 @@ import * as glob from 'glob' beforeEach(() => { fs.emptyDirSync('tests/__data__/output') - fs.copyFileSync( - 'tests/__data__/input/database/playlist_generate.streams.db', - 'tests/__data__/output/streams.db' - ) const stdout = execSync( - 'DB_DIR=tests/__data__/output DATA_DIR=tests/__data__/input/data PUBLIC_DIR=tests/__data__/output/.gh-pages LOGS_DIR=tests/__data__/output/logs npm run playlist:generate', + 'STREAMS_DIR=tests/__data__/input/streams_generate DATA_DIR=tests/__data__/input/data PUBLIC_DIR=tests/__data__/output/.gh-pages LOGS_DIR=tests/__data__/output/logs npm run playlist:generate', { encoding: 'utf8' } ) }) diff --git a/tests/commands/playlist/update.test.ts b/tests/commands/playlist/update.test.ts index 01cad1b84..4670b9452 100644 --- a/tests/commands/playlist/update.test.ts +++ b/tests/commands/playlist/update.test.ts @@ -4,15 +4,12 @@ import { glob } from 'glob' beforeEach(() => { fs.emptyDirSync('tests/__data__/output') - fs.copyFileSync( - 'tests/__data__/input/database/playlist_update.streams.db', - 'tests/__data__/output/streams.db' - ) + fs.copySync('tests/__data__/input/streams_update', 'tests/__data__/output/streams') }) it('can format playlists', () => { const stdout = execSync( - 'DEBUG=true DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/output/streams DB_DIR=tests/__data__/output npm run playlist:update --silent', + 'DEBUG=true DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/output/streams npm run playlist:update --silent', { encoding: 'utf8' } @@ -21,11 +18,13 @@ it('can format playlists', () => { expect(stdout).toBe(`OUTPUT=closes #14151, closes #14110, closes #14179, closes #14178\n`) const files = glob - .sync('tests/__data__/expected/streams/*.m3u') - .map(f => f.replace('tests/__data__/expected/', '')) + .sync('tests/__data__/expected/streams_update/*.m3u') + .map(f => f.replace('tests/__data__/expected/streams_update/', '')) files.forEach(filepath => { - expect(content(`output/${filepath}`), filepath).toBe(content(`expected/${filepath}`)) + expect(content(`output/streams/${filepath}`), filepath).toBe( + content(`expected/streams_update/${filepath}`) + ) }) }) diff --git a/tests/commands/playlist/validate.test.ts b/tests/commands/playlist/validate.test.ts index 7f702bb36..d0c6d1396 100644 --- a/tests/commands/playlist/validate.test.ts +++ b/tests/commands/playlist/validate.test.ts @@ -3,7 +3,7 @@ import { execSync } from 'child_process' it('show an error if channel name in the blocklist', () => { try { const stdout = execSync( - 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/streams npm run playlist:validate -- tests/__data__/input/streams/us_blocked.m3u', + 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/streams_validate npm run playlist:validate -- us_blocked.m3u', { encoding: 'utf8' } @@ -14,7 +14,7 @@ it('show an error if channel name in the blocklist', () => { expect(error.status).toBe(1) expect( error.stdout.includes( - `loading blocklist...\nfound 4 records\n\ntests/__data__/input/streams/us_blocked.m3u\n 2 error "Fox Sports 2 Asia (Thai)" is on the blocklist due to claims of copyright holders (https://github.com/iptv-org/iptv/issues/0000)\n\n1 problems (1 errors, 0 warnings)\n` + `us_blocked.m3u\n 2 error "Fox Sports 2 Asia (Thai)" is on the blocklist due to claims of copyright holders (https://github.com/iptv-org/iptv/issues/0000)\n\n1 problems (1 errors, 0 warnings)\n` ) ).toBe(true) } @@ -22,7 +22,7 @@ it('show an error if channel name in the blocklist', () => { it('show a warning if channel has wrong id', () => { const stdout = execSync( - 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/streams npm run playlist:validate -- tests/__data__/input/streams/wrong_id.m3u', + 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/streams_validate npm run playlist:validate -- wrong_id.m3u', { encoding: 'utf8' } @@ -30,7 +30,7 @@ it('show a warning if channel has wrong id', () => { expect( stdout.includes( - `loading blocklist...\nfound 4 records\n\ntests/__data__/input/streams/wrong_id.m3u\n 2 warning "qib22lAq1L.us" is not in the database\n\n1 problems (0 errors, 1 warnings)\n` + `wrong_id.m3u\n 2 warning "qib22lAq1L.us" is not in the database\n\n1 problems (0 errors, 1 warnings)\n` ) ).toBe(true) }) diff --git a/tests/commands/report/create.test.ts b/tests/commands/report/create.test.ts index b6002eeba..55199f81c 100644 --- a/tests/commands/report/create.test.ts +++ b/tests/commands/report/create.test.ts @@ -1,9 +1,12 @@ import { execSync } from 'child_process' it('can create report', () => { - const stdout = execSync('DATA_DIR=tests/__data__/input/data npm run report:create', { - encoding: 'utf8' - }) + const stdout = execSync( + 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/streams_report npm run report:create', + { + encoding: 'utf8' + } + ) expect( stdout.includes(` diff --git a/yarn.lock b/yarn.lock index 0df54a9ed..79504afd3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -670,20 +670,6 @@ resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@seald-io/binary-search-tree@^1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz" - integrity sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA== - -"@seald-io/nedb@^4.0.2": - version "4.0.2" - resolved "https://registry.npmjs.org/@seald-io/nedb/-/nedb-4.0.2.tgz" - integrity sha512-gJ91fT1sgh2cLXYVcTSh7khZ8LdemI8+SojCdpZ5wy+DUQ4fSrEwGqOwbdV49NDs2BBO6GeBpSb8CnhG2IW1rw== - dependencies: - "@seald-io/binary-search-tree" "^1.0.3" - localforage "^1.9.0" - util "^0.12.4" - "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" @@ -947,11 +933,6 @@ async@^3.2.4: resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - babel-jest@^29.0.0, babel-jest@^29.6.4: version "29.6.4" resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.4.tgz" @@ -1074,14 +1055,6 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" @@ -1431,13 +1404,6 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - foreground-child@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" @@ -1489,16 +1455,6 @@ get-caller-file@^2.0.5: resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.3: - version "1.2.1" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" @@ -1597,13 +1553,6 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: version "4.2.9" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz" @@ -1619,23 +1568,6 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - has@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" @@ -1653,11 +1585,6 @@ human-signals@^2.1.0: resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" - integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= - import-local@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" @@ -1679,7 +1606,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.3, inherits@2: +inherits@2: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1692,24 +1619,11 @@ iptv-playlist-parser@^0.12.3: is-valid-path "^0.1.1" validator "^13.7.0" -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-callable@^1.1.3: - version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - is-core-module@^2.13.0: version "2.13.0" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz" @@ -1732,13 +1646,6 @@ is-generator-fn@^2.0.0: resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - is-glob@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" @@ -1768,13 +1675,6 @@ is-stream@^2.0.0: resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-typed-array@^1.1.3: - version "1.1.12" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - is-valid-path@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz" @@ -2272,13 +2172,6 @@ leven@^3.1.0: resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -lie@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz" - integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4= - dependencies: - immediate "~3.0.5" - lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" @@ -2294,13 +2187,6 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -localforage@^1.9.0: - version "1.10.0" - resolved "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz" - integrity sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg== - dependencies: - lie "3.1.1" - locate-path@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" @@ -3008,17 +2894,6 @@ universalify@^2.0.0: resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -util@^0.12.4: - version "0.12.5" - resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" @@ -3058,17 +2933,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which-typed-array@^1.1.11, which-typed-array@^1.1.2: - version "1.1.11" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - which@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"