From 14d8f1b0e694c9bd68e61a2e7cd660c307dcddf8 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 17 Apr 2026 00:14:17 +0300 Subject: [PATCH 01/63] Update SITES.md --- tests/__data__/expected/sites_update/SITES.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/__data__/expected/sites_update/SITES.md b/tests/__data__/expected/sites_update/SITES.md index dce09dcf8..ffde517b3 100644 --- a/tests/__data__/expected/sites_update/SITES.md +++ b/tests/__data__/expected/sites_update/SITES.md @@ -1,12 +1,12 @@ -# Sites - - - - - - - - - - -
SiteChannels
(total / with xmltv-id)
StatusNotes
iltalehti.fi14244🟡https://github.com/iptv-org/epg/issues/2396
indihometv.com130124🟢
kan.org.il66🔴https://github.com/iptv-org/epg/issues/2273
+# Sites + + + + + + + + + + +
SiteChannelsStatusNotes
iltalehti.fi142🟡https://github.com/iptv-org/epg/issues/2396
indihometv.com130🟢
kan.org.il3🔴https://github.com/iptv-org/epg/issues/2273
From e39882c1be6c239bb6884f2518d142fd7aae4ffe Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 17 Apr 2026 00:14:46 +0300 Subject: [PATCH 02/63] Update site.ts --- scripts/models/site.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/scripts/models/site.ts b/scripts/models/site.ts index 27d9d1efc..31e901cda 100644 --- a/scripts/models/site.ts +++ b/scripts/models/site.ts @@ -1,5 +1,5 @@ import { Collection } from '@freearhey/core' -import { Issue } from './' +import { Channel, Issue } from './' enum StatusCode { DOWN = 'down', @@ -14,21 +14,18 @@ export interface Status { export interface SiteData { domain: string - totalChannels?: number - markedChannels?: number + channels?: Collection issues: Collection } export class Site { domain: string - totalChannels: number - markedChannels: number + channels: Collection issues: Collection constructor(data: SiteData) { this.domain = data.domain - this.totalChannels = data.totalChannels || 0 - this.markedChannels = data.markedChannels || 0 + this.channels = new Collection() this.issues = data.issues } From ef62c993e74293966a46b8848ae4ef1800ec1e58 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 17 Apr 2026 00:14:55 +0300 Subject: [PATCH 03/63] Update update.ts --- scripts/commands/sites/update.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/scripts/commands/sites/update.ts b/scripts/commands/sites/update.ts index 862762b81..28ee84ebb 100644 --- a/scripts/commands/sites/update.ts +++ b/scripts/commands/sites/update.ts @@ -40,8 +40,7 @@ async function main() { (channel: epgGrabber.Channel) => new Channel(channel.toObject()) ) - site.totalChannels += channels.count() - site.markedChannels += channels.filter((channel: Channel) => channel.xmltv_id).count() + site.channels = site.channels.concat(channels) } sites.add(site) @@ -53,8 +52,13 @@ async function main() { rows.add( new Collection([ { value: `${site.domain}` }, - { value: site.totalChannels.toString(), align: 'right' }, - { value: site.markedChannels.toString(), align: 'right' }, + { + value: site.channels + .uniqBy((channel: Channel) => channel.site_id) + .count() + .toString(), + align: 'right' + }, { value: site.getStatus().emoji, align: 'center' }, { value: site.getIssueUrls().all().join(', ') } ]) @@ -66,7 +70,7 @@ async function main() { rows, new Collection([ { name: 'Site', align: 'left' }, - { name: 'Channels
(total / with xmltv-id)', colspan: 2, align: 'left' }, + { name: 'Channels', align: 'left' }, { name: 'Status', align: 'left' }, { name: 'Notes', align: 'left' } ]) From 93c98f6a2761cff4473965749cbcc2d0cc42971b Mon Sep 17 00:00:00 2001 From: CasperMcFadden95 <145611964+CasperMcFadden95@users.noreply.github.com> Date: Tue, 21 Apr 2026 10:08:56 +0000 Subject: [PATCH 04/63] Update shahid.mbc.net_ar.channels.xml --- sites/shahid.mbc.net/shahid.mbc.net_ar.channels.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sites/shahid.mbc.net/shahid.mbc.net_ar.channels.xml b/sites/shahid.mbc.net/shahid.mbc.net_ar.channels.xml index dfbc74d28..39bbc3ac3 100644 --- a/sites/shahid.mbc.net/shahid.mbc.net_ar.channels.xml +++ b/sites/shahid.mbc.net/shahid.mbc.net_ar.channels.xml @@ -11,17 +11,20 @@ القرآن الكريم بصوت السديس قناة كامل العدد قناة جاك العلم + AWSN عبدالمجيد عبدالله أفلام العربية العربية Business AL Arabiya English + العربية برامج الإخبارية الحدث إذاعة خزامى القرآن الكريم السعودية السعودية الآن + السورية السنة النبوية الشرق ديسكفري Asharq Documentary @@ -34,6 +37,7 @@ إقرأ ماجد المهندس قناة مرايا + MBC1 MBC1 MBC1 MBC2 @@ -41,6 +45,7 @@ MBC3 MBC4 MBC5 + MBC Action MBC Bollywood MBC Drama MBC Drama @@ -63,7 +68,6 @@ الثقافية SBC Spacetoon - السورية طرب ذكريات وناسه From 281ba6cf0e2c58ebcbf3a5937d2aeb307aed82e1 Mon Sep 17 00:00:00 2001 From: CasperMcFadden95 <145611964+CasperMcFadden95@users.noreply.github.com> Date: Tue, 21 Apr 2026 10:09:25 +0000 Subject: [PATCH 05/63] Update shahid.mbc.net_en.channels.xml --- sites/shahid.mbc.net/shahid.mbc.net_en.channels.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sites/shahid.mbc.net/shahid.mbc.net_en.channels.xml b/sites/shahid.mbc.net/shahid.mbc.net_en.channels.xml index ec416a6c8..f766f2435 100644 --- a/sites/shahid.mbc.net/shahid.mbc.net_en.channels.xml +++ b/sites/shahid.mbc.net/shahid.mbc.net_en.channels.xml @@ -11,17 +11,20 @@ The Holy Quran Recited By Al Sudais Kamel El Adad Channel Jak Al Elm Channel + AWSN Abdul Majeed Abdullah Aflam Al Arabiya Al Arabiya Business AL Arabiya English + Al Arabiya Program Alikhbariya Al Hadath Alkhuzama Radio Al Quraan al Kareem AlSaudia KSA Now + Al Souriya TV Al Sunnah al Nabawiyah Asharq Discovery Asharq Documentary @@ -65,7 +68,6 @@ AlThaqafeya SBC Spacetoon - Al Souriya TV Tarab Thikrayat Wanasa From 93339f070c39b063813830dd4bbc18634008e98a Mon Sep 17 00:00:00 2001 From: CasperMcFadden95 <145611964+CasperMcFadden95@users.noreply.github.com> Date: Tue, 21 Apr 2026 10:09:51 +0000 Subject: [PATCH 06/63] Update shahid.mbc.net_fr.channels.xml --- sites/shahid.mbc.net/shahid.mbc.net_fr.channels.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sites/shahid.mbc.net/shahid.mbc.net_fr.channels.xml b/sites/shahid.mbc.net/shahid.mbc.net_fr.channels.xml index 6d64a1048..da35d5339 100644 --- a/sites/shahid.mbc.net/shahid.mbc.net_fr.channels.xml +++ b/sites/shahid.mbc.net/shahid.mbc.net_fr.channels.xml @@ -11,17 +11,20 @@ The Holy Quran Recited By Al Sudais Kamel El Adad Channel Jak Al Elm Channel + AWSN Abdul Majeed Abdullah Aflam Al Arabiya Al Arabiya Business AL Arabiya English + Al Arabiya Program Alikhbariya Al Hadath Alkhuzama Radio Al Quraan al Kareem AlSaudia KSA Now + Al Souriya TV Al Sunnah al Nabawiyah Asharq Discovery Asharq Documentary @@ -65,7 +68,6 @@ AlThaqafeya SBC Spacetoon - Al Souriya TV Tarab Thikrayat Wanasa From 735404af23b9168808ca7ef9513e5fcc12dfef92 Mon Sep 17 00:00:00 2001 From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 01:55:38 +0000 Subject: [PATCH 07/63] [Bot] Update SITES.md Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/24756120032) workflow. --- SITES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SITES.md b/SITES.md index 41e0ccdbb..81a1d4c6a 100644 --- a/SITES.md +++ b/SITES.md @@ -246,7 +246,7 @@ yes.co.il1740🟢 zap.co.ao11463🟢 zap2it.com5950🟢 - ziggogo.tv156150🟡https://github.com/iptv-org/epg/issues/2977 + ziggogo.tv156150🟡https://github.com/iptv-org/epg/issues/2977, https://github.com/iptv-org/epg/issues/2976 znbc.co.zm44🟢 zuragt.mn3427🟢 From a817dabb0276044886d6a98c71fe6efc6708a2c3 Mon Sep 17 00:00:00 2001 From: Toha Date: Wed, 22 Apr 2026 10:06:26 +0700 Subject: [PATCH 08/63] Site indihometv.com is retired. Signed-off-by: Toha --- sites/indihometv.com/__data__/content.html | 1 - sites/indihometv.com/__data__/no_content.html | 1 - .../indihometv.com.channels.xml | 131 ------------------ sites/indihometv.com/indihometv.com.config.js | 92 ------------ sites/indihometv.com/indihometv.com.test.js | 57 -------- sites/indihometv.com/readme.md | 23 --- 6 files changed, 305 deletions(-) delete mode 100644 sites/indihometv.com/__data__/content.html delete mode 100644 sites/indihometv.com/__data__/no_content.html delete mode 100644 sites/indihometv.com/indihometv.com.channels.xml delete mode 100644 sites/indihometv.com/indihometv.com.config.js delete mode 100644 sites/indihometv.com/indihometv.com.test.js delete mode 100644 sites/indihometv.com/readme.md diff --git a/sites/indihometv.com/__data__/content.html b/sites/indihometv.com/__data__/content.html deleted file mode 100644 index 9feda34de..000000000 --- a/sites/indihometv.com/__data__/content.html +++ /dev/null @@ -1 +0,0 @@ -
\ No newline at end of file diff --git a/sites/indihometv.com/__data__/no_content.html b/sites/indihometv.com/__data__/no_content.html deleted file mode 100644 index 6fedfd4c7..000000000 --- a/sites/indihometv.com/__data__/no_content.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/sites/indihometv.com/indihometv.com.channels.xml b/sites/indihometv.com/indihometv.com.channels.xml deleted file mode 100644 index 85d06ca99..000000000 --- a/sites/indihometv.com/indihometv.com.channels.xml +++ /dev/null @@ -1,131 +0,0 @@ - - - ABC Australia - Asian Food Network - Aljazeera - AlQuran Kareem - Animal Planet - Animax - Aniplus - Antara - ANTV - Arirang - ATV - AXN - Bali TV - SPOTV - SPOTV 2 - BTV - Bioskop Indonesia - Bloomberg - Rock Entertainment - Rock Action - Cartoonito - Cartoon Network - CCTV4 - Citra Drama - Celestial Movie - CGTN Documentary - Chinese Drama - Cinema World - Citra Dangdut - CNBC Asia - CNBC Indonesia - CNN Indonesia - CNN International - Crime Investigation - Curiosity - Daai TV - Da Vinci Learning - Discovery Channel - Discovery Asia - Dreamworks - Dunia anak - Dunia Lain - DW (English) - Euronews - FashionTV - Fight Sport - Flik - France 24 - Galaxy - Galaxy Premium - HGTV - History - Hits - HIts Movie - HITS Now - Horee - Horizon Sports - Berita Satu - IDX - IMC - FunPlanet - Indosiar - iNews - JakTV - Jawa Pos TV - JTV - KBS World - Kix - Kompas TV - Kplus - Lifetime - Love Nature - Maxstream - Mentari TV - Metro TV - SINDO News TV - Moonbug - MQTV - MTATV - MTV Live - Muhammadiyah TV - MUI TV - Musik Indonesia - MyKidz - NBA - MDTV - News Asia - New Tv Comprehensive - New Tv Finance - New Tv Variety - nhk world Japan - Nickelodeon - Nick Junior - Nusantara TV - MOJI - Phoenix Chinese - Phoenix InfoNews - Prambors - Rodja TV - Rajawali TV - SCTV - Shenzen - SONE - Studio Universal - Tawaf TV - Thrill - TLC - Trans7 - TransTV - TV5Monde - TV9 NU - TVBS News - TVN - TVN Movies - TV One - TVRI Nasional - UChannel - AllPlay Ent - Warner - ZBioskop - Zhejiang - GTV - MNCTV - RCTI - RT - TVRI World - BBC World News - CBeebies - diff --git a/sites/indihometv.com/indihometv.com.config.js b/sites/indihometv.com/indihometv.com.config.js deleted file mode 100644 index cf943af82..000000000 --- a/sites/indihometv.com/indihometv.com.config.js +++ /dev/null @@ -1,92 +0,0 @@ -const cheerio = require('cheerio') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const customParseFormat = require('dayjs/plugin/customParseFormat') - -dayjs.extend(utc) -dayjs.extend(timezone) -dayjs.extend(customParseFormat) - -const tz = 'Asia/Jakarta' - -module.exports = { - site: 'indihometv.com', - days: 2, - url({ channel }) { - return `https://www.indihometv.com/livetv/${channel.site_id}` - }, - parser({ content, date }) { - const programs = [] - const [$, items] = parseItems(content, date) - items.forEach(item => { - const prev = programs[programs.length - 1] - const $item = $(item) - let start = parseStart($item, date) - if (prev && start.isBefore(prev.start)) { - start = start.add(1, 'd') - date = date.add(1, 'd') - } - let stop = parseStop($item, date) - if (stop.isBefore(start)) { - stop = stop.add(1, 'd') - date = date.add(1, 'd') - } - programs.push({ - title: parseTitle($item), - start, - stop - }) - }) - - return programs - }, - async channels() { - const axios = require('axios') - const cheerio = require('cheerio') - const data = await axios - .get('https://www.indihometv.com/tv/live') - .then(response => response.data) - .catch(console.error) - - const $ = cheerio.load(data) - const items = $('#channelContainer a.channel-item').toArray() - const channels = items.map(item => { - const $item = $(item) - - return { - lang: 'id', - site_id: $item.data('url').substr($item.data('url').lastIndexOf('/') + 1), - name: $item.data('name') - } - }) - - return channels - } -} - -function parseStart($item, date) { - const timeString = $item.find('p').text() - const [, start] = timeString.match(/(\d{2}:\d{2}) -/) || [null, null] - const dateString = `${date.format('YYYY-MM-DD')} ${start}` - - return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm', tz) -} - -function parseStop($item, date) { - const timeString = $item.find('p').text() - const [, stop] = timeString.match(/- (\d{2}:\d{2})/) || [null, null] - const dateString = `${date.format('YYYY-MM-DD')} ${stop}` - - return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm', tz) -} - -function parseTitle($item) { - return $item.find('b').text() -} - -function parseItems(content, date) { - const $ = cheerio.load(content) - - return [$, $(`#pills-${date.format('YYYY-MM-DD')} .schedule-item`).toArray()] -} diff --git a/sites/indihometv.com/indihometv.com.test.js b/sites/indihometv.com/indihometv.com.test.js deleted file mode 100644 index d84c0c24e..000000000 --- a/sites/indihometv.com/indihometv.com.test.js +++ /dev/null @@ -1,57 +0,0 @@ -const { parser, url } = require('./indihometv.com.config.js') -const fs = require('fs') -const path = require('path') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -dayjs.extend(utc) - -const date = dayjs.utc('2022-08-08').startOf('d') -const channel = { - site_id: 'metrotv', - xmltv_id: 'MetroTV.id' -} - -it('can generate valid url', () => { - expect(url({ channel })).toBe('https://www.indihometv.com/livetv/metrotv') -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'), 'utf8') - const result = parser({ content, channel, date }).map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(result).toMatchObject([ - { - title: 'Headline News', - start: '2022-08-08T00:00:00.000Z', - stop: '2022-08-08T00:05:00.000Z' - }, - { - title: 'Editorial Media Indonesia', - start: '2022-08-08T00:05:00.000Z', - stop: '2022-08-08T00:30:00.000Z' - }, - { - title: 'Editorial Media Indonesia', - start: '2022-08-08T00:30:00.000Z', - stop: '2022-08-08T00:45:00.000Z' - }, - { - title: 'Editorial Media Indonesia', - start: '2022-08-08T00:45:00.000Z', - stop: '2022-08-08T01:00:00.000Z' - } - ]) -}) - -it('can handle empty guide', () => { - const result = parser({ - date, - channel, - content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'), 'utf8') - }) - expect(result).toMatchObject([]) -}) diff --git a/sites/indihometv.com/readme.md b/sites/indihometv.com/readme.md deleted file mode 100644 index ccced056c..000000000 --- a/sites/indihometv.com/readme.md +++ /dev/null @@ -1,23 +0,0 @@ -# indihometv.com - -https://www.indihometv.com/ - -### Download the guide - -```sh -npm run grab --- --sites=indihometv.com -``` - -**NOTE:** Requests from some regions may return a "Connection timeout" error (https://check-host.net/check-report/13a843e2ke22). - -### Update channel list - -```sh -npm run channels:parse --- --config=./sites/indihometv.com/indihometv.com.config.js --output=./sites/indihometv.com/indihometv.com.channels.xml -``` - -### Test - -```sh -npm test --- indihometv.com -``` From cf1f841d5bb9c014617bddfe5ed60e14ffe1df98 Mon Sep 17 00:00:00 2001 From: "._______166" Date: Wed, 22 Apr 2026 16:16:53 +0100 Subject: [PATCH 09/63] Freeview: Pull all channels from every region this change builds one massive freeview TV guide for the entire uk, as it merges the guide for every region/transmitter group into one single guide, i have tried my best to remove duplicate channels from the guide, but, specifically with the bbc shifting some of their IDs for some regions, and 'that's tv' owning nearly all the local tv licences in the UK, it is impossible to remove all duplicates --- .../freeview.co.uk.channels.xml | 210 +++++++++++++++++- sites/freeview.co.uk/freeview.co.uk.config.js | 29 ++- 2 files changed, 216 insertions(+), 23 deletions(-) diff --git a/sites/freeview.co.uk/freeview.co.uk.channels.xml b/sites/freeview.co.uk/freeview.co.uk.channels.xml index eee24034c..290c3dcd9 100644 --- a/sites/freeview.co.uk/freeview.co.uk.channels.xml +++ b/sites/freeview.co.uk/freeview.co.uk.channels.xml @@ -21,13 +21,13 @@ Sonlife On Demand 365 Channelbox - That's Oldies CNA Originals GIGS - EuroNews Trailblazer Odyssey TV Ketchup Too + Music & Memories + Outdoor Channel ROK Global Arabic + Amazing Facts @@ -35,7 +35,6 @@ Nosey Shop On TV Purpose Media - LEGEND XTRA RNIB Connect Heart Capital @@ -44,24 +43,117 @@ That's TV 2 SonLife Must Have Ideas - That's 80s + That's 70s Smooth Radio Hobbycraft TV Rewind TV Together TV IP - That's Melody + That's 60s Premier Radio Great! Player Great! Romance Mix - India Today MBC Group - wedotv movies + wedotv Big Stories It Is Written TV OUTflix Proud High Street TV Cartoon Classics wedotv Movies UK Nolly Africa + BBC Solent + BBC Solent Dorset + BBC Sussex + BBC Wiltshire + BBC Kent + KMTV + That's TV + That's TV + Latest TV + That's TV + That's TV + BBC Oxford + BBC Gloucestershire + That's TV + BBC Norfolk + BBC Northampton + BBC Cambridge + BBC Suffolk + That's TV + That's TV + BBC Bristol + BBC Somerset + Bristol TV + BBC Cornwall + BBC Devon + BBC Guernsey + BBC Jersey + BBC WM + BBC Stoke + BBC Derby + BBC H&W + BBC Shropshire + BBC CWR + Birmingham TV + BBC Nottingham + BBC Lincolnshire + BBC Leicester + BBC Sheffield + BBC Humberside + That's TV + That's TV + BBC Leeds + BBC York + That's TV + Leeds TV + That's TV + BBC Newcastle + BBC Cumbria + BBC Tees + Tyne & Wear TV + Teesside TV + BBC Manchester + BBC Lancashire + BBC Merseyside + That's TV (UK) MCR + TV Warehouse + That's 60s MCR + That's Oldies MCR + That's TV 2 MCR + TV Warehouse+1 + That's TV 3 MCR + That's Classics MCR + That's TV + Liverpool TV + That's TV + That's TV + BBC R5L + BBC 5SX + BBC 6 Music + BBC Radio 4 Ex + BBC R1X + BBC Asian Net. + BBC World Sv. + BBC R Scotland + BBC R n Gaidheal + BBC Radio 1 + BBC Radio 2 + BBC Radio 3 + BBC Radio 4 + That's TV + That's TV + That's TV + That's TV + That's TV + BBC Radio Wales + BBC Radio Cymru + BBC Radio Cymru 2 + Cardiff TV + That's TV + North Wales TV + BBC Radio Ulster + BBC Radio Foyle + RTÉ RnaG + That's TV 4seven 5ACTION 5SELECT @@ -72,20 +164,63 @@ Al Jazeera Arabic Al Jazeera English ASHARQ NEWS + BBC ALBA BBC FOUR HD BBC FOUR BBC NEWS + BBC ONE CI + BBC ONE CI HD + BBC ONE East + BBC ONE East + BBC ONE EastHD + BBC ONE EastHD + BBC ONE E Mid + BBC ONE EMidHD BBC ONE Lon BBC ONE Lon HD + BBC ONE NE&C + BBC ONE NE&CHD + BBC ONE NI + BBC ONE NI HD + BBC ONE N West + BBC ONE NWstHD + BBC ONE Scot + BBC 1 Scot HD + BBC ONE South + BBC ONE South + BBC ONE S East + BBC ONE SE HD + BBC ONE Sth HD + BBC ONE Sth HD + BBC ONE S West + BBC ONE SW HD + BBC ONE Wales + BBC 1 Wales HD + BBC ONE West + BBC ONE WestHD + BBC ONE W Mid + BBC ONE WMidHD + BBC ONE Yorks + BBC ONE Yks HD + BBC ONE Yk&Li + BBC ONE Yk&LHD BBC Parliament BBC RB 1 + BBC Scotland HD + BBC Scotland BBC THREE HD BBC THREE BBC TWO BBC TWO HD + BBC TWO NI + BBC TWO NI HD + BBC TWO Wales + BBC 2 Wales HD Blaze+1 Blaze CBBC HD + CBBC HD + CBBC HD CBBC CBeebies HD CBeebies @@ -98,26 +233,61 @@ 5 DMAX E4+1 + E4+1 E4 E4 Extra + EuroNews Film4+1 Film4 Food Network FRANCE 24 GB News Gemporia - God TV Great! Action Great! Mystery Great! Movies Great! Romance Great! TV - HGTV HobbyMaker + LEGEND XTRA Ideal World + ITV1 + ITV1 + ITV1+1 + ITV1 Border England + ITV1+1 + ITV1 Border Scotland + ITV1 HD + ITV1 + ITV1 + ITV1 HD + ITV1+1 + ITV1 + ITV1 + ITV1 HD + ITV1+1 ITV1 HD ITV1 + ITV1 + ITV1 + ITV1 + ITV1 HD + ITV1+1 ITV1+1 + ITV1 + ITV1+1 + ITV1 Wales + ITV1 Wales HD + ITV1+1 + ITV1 + ITV1 + ITV1 HD + ITV1+1 + ITV1+1 + ITV1 + ITV1 + ITV1 HD + ITV1+1 ITV2+1 ITV2 ITV3+1 @@ -137,33 +307,49 @@ POP POP UP QUEST+1 + QUEST+1 QUEST Quest Red QVC2 QVC Really Revelation TV + RTÉ Two + RTÉ One + S4C HD + S4C Sky Arts Sky Mix Sky News + STV HD + STV+1 + STV + STV+1 + STV TalkingPictures TV talkSPORT Talk TBN UK + TG4 That's TV (UK) + That's TV Tiny Pop TJC + TLC+1 + TLC Together TV+1 Together TV TRUE CRIME TRUE CRIME XTRA U&Dave - U&DaveJaVu + U&DaveJaVu U&Drama+1 U&Drama U&Eden - U&W + UTV HD + UTV+1 + UTV + U&W U&Yesterday WildEarth - YAAAS! diff --git a/sites/freeview.co.uk/freeview.co.uk.config.js b/sites/freeview.co.uk/freeview.co.uk.config.js index e98f8302e..3a0f03d46 100644 --- a/sites/freeview.co.uk/freeview.co.uk.config.js +++ b/sites/freeview.co.uk/freeview.co.uk.config.js @@ -36,18 +36,25 @@ module.exports = { return programs }, async channels() { - const networkId = '64257' // Great London const startTimestamp = dayjs.utc().startOf('d').unix() - const data = await axios - .get(`https://www.freeview.co.uk/api/tv-guide?nid=${networkId}&start=${startTimestamp}`) - .then(r => r.data) - .catch(console.log) + let channels = [] + for (let networkId = 64257; networkId <= 64425; networkId++) { // loop through all valid networkIds starting from 64257 (Greater London) to 64425 (Belfast) to ensure we can get all the channels available on freeview + console.log(networkId) + const data = await axios + .get(`https://www.freeview.co.uk/api/tv-guide?nid=${networkId}&start=${startTimestamp}`) + .then(r => r.data) + .catch(console.log) - return data.data.programs.map(item => ({ - lang: 'en', - site_id: `${networkId}#${item.service_id}`, - name: item.title - })) + channels = channels.concat(data.data.programs.map(item => ({ + lang: 'en', + site_id: `${networkId}#${item.service_id}`, + name: item.title + }))) + } + const uniqueServiceIds = Array.from(new Set(channels.map(c => c.site_id.split('#')[1]))) + return uniqueServiceIds.map(serviceId => { + return channels.find(c => c.site_id.split('#')[1] === serviceId) + }) } } @@ -85,4 +92,4 @@ async function loadProgramDetails(item) { }) .catch(console.log) return data || {} -} \ No newline at end of file +} From 74552b70ab3482461d4edee612ab712f98fe52af Mon Sep 17 00:00:00 2001 From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 01:59:51 +0000 Subject: [PATCH 10/63] [Bot] Update SITES.md Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/24812551962) workflow. --- SITES.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SITES.md b/SITES.md index 81a1d4c6a..85d286346 100644 --- a/SITES.md +++ b/SITES.md @@ -79,7 +79,6 @@ i.mjh.nz108702935🟢 i24news.tv43🟢 iltalehti.fi1470🟢 - indihometv.com128122🟢 ionplustv.com11🟢 ipko.tv194151🟢 jiotv.com10940🟢 @@ -151,7 +150,7 @@ ruv.is22🟢 s.mxtv.jp22🟢 sat.tv30308249🟢 - shahid.mbc.net205172🟢 + shahid.mbc.net213177🟢 siba.com.co24488🟢 singtel.com139100🟢 sjonvarp.is1313🟢 From e99068f83931f28694088e0f71c37fc640fb73f4 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Thu, 23 Apr 2026 06:06:36 +0300 Subject: [PATCH 11/63] Update package.json --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index d29fce79e..b5b8f92c7 100644 --- a/package.json +++ b/package.json @@ -104,5 +104,8 @@ "typescript": "^6.0.3", "typescript-eslint": "^8.58.2", "uuid": "^13.0.0" + }, + "overrides": { + "esbuild": "0.23.1" } } From 3480ec327d428e64a202b58d5c9907e44931839c Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Thu, 23 Apr 2026 06:06:41 +0300 Subject: [PATCH 12/63] Update package-lock.json --- package-lock.json | 1248 ++++++++++++++++++++++----------------------- 1 file changed, 601 insertions(+), 647 deletions(-) diff --git a/package-lock.json b/package-lock.json index b2917bb6e..9acb286f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -619,422 +619,6 @@ "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz", "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==" }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", - "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", - "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", - "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", - "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", - "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", - "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", - "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", - "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", - "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", - "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", - "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", - "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", - "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", - "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", - "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", - "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", - "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", - "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", - "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", - "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", - "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", - "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", - "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", - "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", - "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", - "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -6051,47 +5635,6 @@ "node": ">= 0.4" } }, - "node_modules/esbuild": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", - "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.7", - "@esbuild/android-arm": "0.27.7", - "@esbuild/android-arm64": "0.27.7", - "@esbuild/android-x64": "0.27.7", - "@esbuild/darwin-arm64": "0.27.7", - "@esbuild/darwin-x64": "0.27.7", - "@esbuild/freebsd-arm64": "0.27.7", - "@esbuild/freebsd-x64": "0.27.7", - "@esbuild/linux-arm": "0.27.7", - "@esbuild/linux-arm64": "0.27.7", - "@esbuild/linux-ia32": "0.27.7", - "@esbuild/linux-loong64": "0.27.7", - "@esbuild/linux-mips64el": "0.27.7", - "@esbuild/linux-ppc64": "0.27.7", - "@esbuild/linux-riscv64": "0.27.7", - "@esbuild/linux-s390x": "0.27.7", - "@esbuild/linux-x64": "0.27.7", - "@esbuild/netbsd-arm64": "0.27.7", - "@esbuild/netbsd-x64": "0.27.7", - "@esbuild/openbsd-arm64": "0.27.7", - "@esbuild/openbsd-x64": "0.27.7", - "@esbuild/openharmony-arm64": "0.27.7", - "@esbuild/sunos-x64": "0.27.7", - "@esbuild/win32-arm64": "0.27.7", - "@esbuild/win32-ia32": "0.27.7", - "@esbuild/win32-x64": "0.27.7" - } - }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -11339,6 +10882,429 @@ "fsevents": "~2.3.3" } }, + "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, "node_modules/tv4": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", @@ -12263,162 +12229,6 @@ "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz", "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==" }, - "@esbuild/aix-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", - "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", - "optional": true - }, - "@esbuild/android-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", - "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", - "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", - "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", - "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", - "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", - "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", - "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", - "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", - "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", - "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", - "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", - "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", - "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", - "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", - "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", - "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", - "optional": true - }, - "@esbuild/netbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", - "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", - "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", - "optional": true - }, - "@esbuild/openbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", - "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", - "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", - "optional": true - }, - "@esbuild/openharmony-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", - "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", - "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", - "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", - "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", - "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", - "optional": true - }, "@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -15679,39 +15489,6 @@ "hasown": "^2.0.2" } }, - "esbuild": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", - "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", - "requires": { - "@esbuild/aix-ppc64": "0.27.7", - "@esbuild/android-arm": "0.27.7", - "@esbuild/android-arm64": "0.27.7", - "@esbuild/android-x64": "0.27.7", - "@esbuild/darwin-arm64": "0.27.7", - "@esbuild/darwin-x64": "0.27.7", - "@esbuild/freebsd-arm64": "0.27.7", - "@esbuild/freebsd-x64": "0.27.7", - "@esbuild/linux-arm": "0.27.7", - "@esbuild/linux-arm64": "0.27.7", - "@esbuild/linux-ia32": "0.27.7", - "@esbuild/linux-loong64": "0.27.7", - "@esbuild/linux-mips64el": "0.27.7", - "@esbuild/linux-ppc64": "0.27.7", - "@esbuild/linux-riscv64": "0.27.7", - "@esbuild/linux-s390x": "0.27.7", - "@esbuild/linux-x64": "0.27.7", - "@esbuild/netbsd-arm64": "0.27.7", - "@esbuild/netbsd-x64": "0.27.7", - "@esbuild/openbsd-arm64": "0.27.7", - "@esbuild/openbsd-x64": "0.27.7", - "@esbuild/openharmony-arm64": "0.27.7", - "@esbuild/sunos-x64": "0.27.7", - "@esbuild/win32-arm64": "0.27.7", - "@esbuild/win32-ia32": "0.27.7", - "@esbuild/win32-x64": "0.27.7" - } - }, "escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -19222,9 +18999,186 @@ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", "requires": { - "esbuild": "~0.27.0", + "esbuild": "0.23.1", "fsevents": "~2.3.3", "get-tsconfig": "^4.7.5" + }, + "dependencies": { + "@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "optional": true + }, + "esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "requires": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + } } }, "tv4": { From e1db8ac432393924974fc03914de9ffdbfdc55c1 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Thu, 23 Apr 2026 06:08:16 +0300 Subject: [PATCH 13/63] Update package-lock.json --- package-lock.json | 1274 +++++++++++++++++++++++---------------------- 1 file changed, 638 insertions(+), 636 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9acb286f4..915786605 100644 --- a/package-lock.json +++ b/package-lock.json @@ -619,6 +619,390 @@ "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz", "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==" }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -2846,9 +3230,10 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -4375,9 +4760,9 @@ } }, "node_modules/basic-ftp": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.0.tgz", - "integrity": "sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.0.tgz", + "integrity": "sha512-5K9eNNn7ywHPsYnFwjKgYH8Hf8B5emh7JKcPaVjjrMJFQQwGpwowEnZNEtHs7DfR7hCZsmaK3VA4HUK0YarT+w==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -5635,6 +6020,45 @@ "node": ">= 0.4" } }, + "node_modules/esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -6205,9 +6629,10 @@ } }, "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==" + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "license": "ISC" }, "node_modules/fn.name": { "version": "1.1.0", @@ -6215,9 +6640,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", @@ -8989,9 +9414,10 @@ } }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==" + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" }, "node_modules/lodash.groupby": { "version": "4.6.0", @@ -9655,9 +10081,10 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -10882,429 +11309,6 @@ "fsevents": "~2.3.3" } }, - "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", - "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", - "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", - "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", - "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", - "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/darwin-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", - "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", - "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", - "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", - "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", - "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", - "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-loong64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", - "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", - "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", - "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", - "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-s390x": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", - "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", - "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", - "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/openbsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", - "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", - "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/sunos-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", - "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", - "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", - "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", - "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/esbuild": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", - "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.1", - "@esbuild/android-arm": "0.23.1", - "@esbuild/android-arm64": "0.23.1", - "@esbuild/android-x64": "0.23.1", - "@esbuild/darwin-arm64": "0.23.1", - "@esbuild/darwin-x64": "0.23.1", - "@esbuild/freebsd-arm64": "0.23.1", - "@esbuild/freebsd-x64": "0.23.1", - "@esbuild/linux-arm": "0.23.1", - "@esbuild/linux-arm64": "0.23.1", - "@esbuild/linux-ia32": "0.23.1", - "@esbuild/linux-loong64": "0.23.1", - "@esbuild/linux-mips64el": "0.23.1", - "@esbuild/linux-ppc64": "0.23.1", - "@esbuild/linux-riscv64": "0.23.1", - "@esbuild/linux-s390x": "0.23.1", - "@esbuild/linux-x64": "0.23.1", - "@esbuild/netbsd-x64": "0.23.1", - "@esbuild/openbsd-arm64": "0.23.1", - "@esbuild/openbsd-x64": "0.23.1", - "@esbuild/sunos-x64": "0.23.1", - "@esbuild/win32-arm64": "0.23.1", - "@esbuild/win32-ia32": "0.23.1", - "@esbuild/win32-x64": "0.23.1" - } - }, "node_modules/tv4": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", @@ -12229,6 +12233,150 @@ "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz", "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==" }, + "@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "optional": true + }, "@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -13712,9 +13860,9 @@ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==" }, "picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==" } } }, @@ -14629,9 +14777,9 @@ "integrity": "sha512-Lyf3aK28zpsD1yQMiiHD4RvVb6UdMoo8xzG2XzFIfR9luPzOpcBlAsT/qfB1XWS1bxWT+UtE4WmQgsp297FYOA==" }, "basic-ftp": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.0.tgz", - "integrity": "sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.0.tgz", + "integrity": "sha512-5K9eNNn7ywHPsYnFwjKgYH8Hf8B5emh7JKcPaVjjrMJFQQwGpwowEnZNEtHs7DfR7hCZsmaK3VA4HUK0YarT+w==" }, "before-after-hook": { "version": "4.0.0", @@ -15489,6 +15637,37 @@ "hasown": "^2.0.2" } }, + "esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "requires": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, "escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -15849,9 +16028,9 @@ } }, "flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==" + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==" }, "fn.name": { "version": "1.1.0", @@ -15859,9 +16038,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==" + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==" }, "foreground-child": { "version": "3.3.1", @@ -17710,9 +17889,9 @@ } }, "lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==" + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==" }, "lodash.groupby": { "version": "4.6.0", @@ -18183,9 +18362,9 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==" }, "pidusage": { "version": "3.0.2", @@ -19002,183 +19181,6 @@ "esbuild": "0.23.1", "fsevents": "~2.3.3", "get-tsconfig": "^4.7.5" - }, - "dependencies": { - "@esbuild/aix-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", - "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", - "optional": true - }, - "@esbuild/android-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", - "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", - "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", - "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", - "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", - "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", - "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", - "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", - "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", - "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", - "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", - "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", - "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", - "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", - "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", - "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", - "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", - "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", - "optional": true - }, - "@esbuild/openbsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", - "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", - "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", - "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", - "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", - "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", - "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", - "optional": true - }, - "esbuild": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", - "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", - "requires": { - "@esbuild/aix-ppc64": "0.23.1", - "@esbuild/android-arm": "0.23.1", - "@esbuild/android-arm64": "0.23.1", - "@esbuild/android-x64": "0.23.1", - "@esbuild/darwin-arm64": "0.23.1", - "@esbuild/darwin-x64": "0.23.1", - "@esbuild/freebsd-arm64": "0.23.1", - "@esbuild/freebsd-x64": "0.23.1", - "@esbuild/linux-arm": "0.23.1", - "@esbuild/linux-arm64": "0.23.1", - "@esbuild/linux-ia32": "0.23.1", - "@esbuild/linux-loong64": "0.23.1", - "@esbuild/linux-mips64el": "0.23.1", - "@esbuild/linux-ppc64": "0.23.1", - "@esbuild/linux-riscv64": "0.23.1", - "@esbuild/linux-s390x": "0.23.1", - "@esbuild/linux-x64": "0.23.1", - "@esbuild/netbsd-x64": "0.23.1", - "@esbuild/openbsd-arm64": "0.23.1", - "@esbuild/openbsd-x64": "0.23.1", - "@esbuild/sunos-x64": "0.23.1", - "@esbuild/win32-arm64": "0.23.1", - "@esbuild/win32-ia32": "0.23.1", - "@esbuild/win32-x64": "0.23.1" - } - } } }, "tv4": { From 0ce72bd1da2a47d429855ec13d5e08e45c230b44 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Thu, 23 Apr 2026 10:08:01 +0300 Subject: [PATCH 14/63] Update readme.md --- sites/claro.com.br/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/claro.com.br/readme.md b/sites/claro.com.br/readme.md index 576fc5df5..af4f426a1 100644 --- a/sites/claro.com.br/readme.md +++ b/sites/claro.com.br/readme.md @@ -1,6 +1,6 @@ # claro.com.br -https://www.claro.com.br/tv-por-assinatura/programacao/grade +https://www.claro.com.br/tv-por-assinatura/programacao/grade _[Geo-blocked]_ ### Download the guide From 465805ab1e250660051da00f77c0f52fe16832b6 Mon Sep 17 00:00:00 2001 From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com> Date: Fri, 24 Apr 2026 02:00:16 +0000 Subject: [PATCH 15/63] [Bot] Update SITES.md Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/24868354644) workflow. --- SITES.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/SITES.md b/SITES.md index 85d286346..b9d2a64d0 100644 --- a/SITES.md +++ b/SITES.md @@ -41,7 +41,7 @@ derana.lk11🟢 digea.gr880🟢 digiturk.com.tr11291🟢 - directv.com1043640🔴https://github.com/iptv-org/epg/issues/3001, https://github.com/iptv-org/epg/issues/2284 + directv.com11560🟢 directv.com.ar3710🟢 directv.com.uy37459🟢 dishtv.in603548🟢 @@ -62,11 +62,12 @@ firstmedia.com11697🟢 foxsports.com.au77🟢 foxtel.com.au9960🟢 + france.tv158🟢 freetv.tv77🟢 - freeview.co.uk166104🟢 + freeview.co.uk352198🟢 frikanalen.no11🟢 galamtv.kz2722🟢 - gatotv.com477342🟢 + gatotv.com1925342🟢 getafteritmedia.com55🟢 gigatv.3bbtv.co.th7937🟢 go3.ee1470🟢 @@ -217,7 +218,7 @@ tvmustra.hu1890🟢 tvpassport.com192872496🟢 tvplus.com.tr150144🟢 - tvprofil.com9091408🔴https://github.com/iptv-org/epg/issues/3032 + tvprofil.com8865552🔴https://github.com/iptv-org/epg/issues/3032 tvtv.us22992230🟢 v3.myafn.dodmedia.osd.mil88🟢 vantagetv.ee31🟢 From 6a29640ba8e549052630b2c941928269b889e5dc Mon Sep 17 00:00:00 2001 From: "._______166" Date: Thu, 23 Apr 2026 14:20:53 +0100 Subject: [PATCH 16/63] Freeview: Fix xmltv_ids channels:validate was complaining about these --- .../freeview.co.uk.channels.xml | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/sites/freeview.co.uk/freeview.co.uk.channels.xml b/sites/freeview.co.uk/freeview.co.uk.channels.xml index 290c3dcd9..8e41cbe2a 100644 --- a/sites/freeview.co.uk/freeview.co.uk.channels.xml +++ b/sites/freeview.co.uk/freeview.co.uk.channels.xml @@ -17,7 +17,7 @@ BBC Radio 2 BBC Radio 3 BBC Radio 4 - That's TV 3 + That's 20th Century Sonlife On Demand 365 Channelbox @@ -120,8 +120,9 @@ That's Oldies MCR That's TV 2 MCR TV Warehouse+1 - That's TV 3 MCR - That's Classics MCR + That's 20th Century MCR + That's Classics + That's Entertainment That's TV Liverpool TV That's TV @@ -165,8 +166,8 @@ Al Jazeera English ASHARQ NEWS BBC ALBA - BBC FOUR HD BBC FOUR + BBC FOUR HD BBC NEWS BBC ONE CI BBC ONE CI HD @@ -225,9 +226,9 @@ CBeebies HD CBeebies Challenge - Channel 4 HD - Channel 4+1 Channel 4 + Channel 4 HD + Channel 4+1 5 HD 5 +1 5 @@ -255,7 +256,7 @@ ITV1 ITV1+1 ITV1 Border England - ITV1+1 + ITV1+1 ITV1 Border Scotland ITV1 HD ITV1 @@ -266,14 +267,14 @@ ITV1 ITV1 HD ITV1+1 - ITV1 HD ITV1 + ITV1 HD + ITV1+1 ITV1 ITV1 ITV1 ITV1 HD ITV1+1 - ITV1+1 ITV1 ITV1+1 ITV1 Wales @@ -304,10 +305,9 @@ Newsmax NHK WORLD PBS America - POP + POP POP UP - QUEST+1 - QUEST+1 + QUEST+1 QUEST Quest Red QVC2 @@ -351,5 +351,5 @@ UTV U&W U&Yesterday - WildEarth + WildEarth From 0092154ab6b15848b608584d5c311483e7c4186a Mon Sep 17 00:00:00 2001 From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com> Date: Sat, 25 Apr 2026 01:49:53 +0000 Subject: [PATCH 17/63] [Bot] Update SITES.md Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/24919710285) workflow. --- SITES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SITES.md b/SITES.md index b9d2a64d0..65279865b 100644 --- a/SITES.md +++ b/SITES.md @@ -29,7 +29,7 @@ cgates.lt4729🟢 chada.ma11🟢 chaines-tv.orange.fr397327🟢 - claro.com.br2730🟢https://github.com/iptv-org/epg/issues/2988 + claro.com.br2730🟢 clarotvmais.com.br1580🟢 clickthecity.com3230🟢 content.astro.com.my14993🟢 From 7e5251b1d50092881eeb7941f081e447efda88ec Mon Sep 17 00:00:00 2001 From: StrangeDrVN <172238701+StrangeDrVN@users.noreply.github.com> Date: Sun, 26 Apr 2026 17:13:38 +0530 Subject: [PATCH 18/63] create zee5.com + add content.json --- sites/zee5.com/__data__/content.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 sites/zee5.com/__data__/content.json diff --git a/sites/zee5.com/__data__/content.json b/sites/zee5.com/__data__/content.json new file mode 100644 index 000000000..539a7d542 --- /dev/null +++ b/sites/zee5.com/__data__/content.json @@ -0,0 +1 @@ +{"total":1,"page":1,"page_size":500,"items":[{"id":"0-9-zeecinemahd","title":"Zee Cinema HD","original_title":"Zee Cinema HD","asset_type":9,"image":{"cover":"1920x770a2c0642b147d48c187c718c92d1557bb","app_cover":"1920x1080appcoverbb6a37e29fa444b0b156ad2d5a889860","list":"1920x1080listb0707389e11d47edb651c329f76a0755","channel_square":"386x3863e01c38ce532461fa11091a2d509c50a","channel_list":"360x2032123e39878fe48e1af5d3c64af1a8176","channel_web":"170x120397a2a6991f84cafbafda4b8c28d30f6","square":"374x374d317f8e1ff0343f79ef93ce57532a194","tv_cover":"","portrait":"720x1080withlogoc66bd8a1ad89493796ba7f949773eee1","listclean":"1920x1080list4eba330859bf4682916e4603d09931aa","portraitclean":"1920x5484184f0c087f844d8876c4fc552205c73","homefeed-launcher-sticker":"1920x457d091c4f11ec34ab38b4a205aed123db4","vert_banner":"845x1080affdf107e2f9404b890b531106b92256","4k_banner":"","hd_tile":"","2x3_hd_poster":"2000x300081745a1c983647dda8b790146ec72cb5","title_logo":"","tv_banner":"3840x2160tvbanner9d6c6352deea4e14a26332e760076fbb","motion_app_cover":"","motion_cover":"","motion_vert_banner":"","motion_homefeed-launcher-sticker":""},"list_image":"1920x1080listb0707389e11d47edb651c329f76a0755.jpg","cover_image":"1920x770a2c0642b147d48c187c718c92d1557bb.jpg","languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Movie","value":"Movie"}],"items":[{"id":"0-10-CHN-007790000-20260426013300","title":"Tamilarasan","actors":[],"duration":120,"tags":["Action","Crime","Drama","Thriller","Medical Drama","FamilyVijay Antony","Suresh Gopi","Sangeetha","Remya Nambeesan","S. Kowsalya Rani"],"original_title":"Tamilarasan","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDTamilarasan1567745cf08a3ba1a9946d890a2f523ab71f38e","in__cover":"","in__list":""},"description":"An officer seizes control of a hospital, defying orders, which sparks a fierce conflict. His rebellion sets off a chain of events that could lead to a dramatic clash with authorities.","start_time":"2026-04-25T20:03:00Z","end_time":"2026-04-25T22:03:00Z","list_image":"ZeeCinemaHDTamilarasan1567745cf08a3ba1a9946d890a2f523ab71f38e.jpg","licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]},{"id":"0-10-CHN-007790000-20260426033300","title":"Vedha","actors":[],"duration":142,"tags":["Action","Thriller","Murder","Crime","Revenge","Daughter","EscapeShiva Rajkumar","Ganavi Laxman","Shwetha Chengappa","Umashree","Aditi Sagar","Geeta Shiva Rajkumar"],"original_title":"Vedha","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDVedha1500769c92eb40ae1c8457ebb0304fac0b48e21","in__cover":"","in__list":""},"description":"Father daughter killers evade cop pursuit.","start_time":"2026-04-25T22:03:00Z","end_time":"2026-04-26T00:25:00Z","list_image":"ZeeCinemaHDVedha1500769c92eb40ae1c8457ebb0304fac0b48e21.jpg","licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]},{"id":"0-10-CHN-007790000-20260426055500","title":"Sye Raa Narasimha Reddy","actors":[],"duration":185,"tags":["Freedom","Revolution","Colonial Rule","Resistance","Rayalaseema","Courage","Sacrifice","Empire","Atrocities","UprisingChiranjeevi","Nayanthara","Tamannaah Bhatia","Sudeep","Ram Charan"],"original_title":"Sye Raa Narasimha Reddy","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDSyeRaaNarasimhaReddy1108856342f53e21b4a4ae79b5803247f5d29ac","in__cover":"","in__list":""},"description":"10 years before the Sepoy Mutiny, Emperor Uyyalawada Narasimha Reddy fights the British East India Company in order to put an end to their atrocities.","start_time":"2026-04-26T00:25:00Z","end_time":"2026-04-26T03:30:00Z","list_image":"ZeeCinemaHDSyeRaaNarasimhaReddy1108856342f53e21b4a4ae79b5803247f5d29ac.jpg","licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]},{"id":"0-10-CHN-007790000-20260426090000","title":"Aranmanai 4","actors":[],"duration":180,"tags":["mystery","grief","revenge","secrets","thriller","investigation","family","betrayal","darkness","redemptionSundar C","Tamannaah Bhatia","Raashi Khanna","Khushbu Sundar","A. C. Shanmugam","A. C. S. Arun Kumar"],"original_title":"Aranmanai 4","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDAranmanai4178971914d5593b58c84b14ad75cbaf9c28daf9","in__cover":"","in__list":""},"description":"After his sister's suspicious death, a man decides to discover the hidden truth, setting off a chasm for chaos and terror.","start_time":"2026-04-26T03:30:00Z","end_time":"2026-04-26T06:30:00Z","list_image":"ZeeCinemaHDAranmanai4178971914d5593b58c84b14ad75cbaf9c28daf9.jpg","licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]},{"id":"0-10-CHN-007790000-20260426120000","title":"Bhabhi Ji Ghar Par Hain Fun On The Run","duration":147,"tags":["Entertainment"],"original_title":"Bhabhi Ji Ghar Par Hain Fun On The Run","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDBhabhiJiGharParHainFunOnTheRun2069730daaced6acda84bfba0e758765a8b3258","in__cover":"","in__list":""},"description":"Anita and Vibhuti embark on a hilarious adventure filled with chaos, witty exchanges, and quirky situations, bringing laughter through their unique chemistry and comic timing.","start_time":"2026-04-26T06:30:00Z","end_time":"2026-04-26T08:57:00Z","list_image":"ZeeCinemaHDBhabhiJiGharParHainFunOnTheRun2069730daaced6acda84bfba0e758765a8b3258.jpg","actors":[],"licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]},{"id":"0-10-CHN-007790000-20260426142700","title":"Saaho","actors":[],"duration":173,"tags":["Thief","Stolen Money","Crime Lord","Gang War","Investigation","Action","Thriller","Kidnapped Man","Car Accident","Black Panther","Video SurveillancePrabhas","Shraddha Kapoor","Chunky Pandey","Jackie Shroff","V. Vamsi Krishna Reddy","Pramod Uppalapati"],"original_title":"Saaho","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDSaaho8628577baa5b12251146308005ba45cb8c7c57","in__cover":"","in__list":""},"description":"An undercover agent and his partner chase a thief who stole ?2,000 crore, only to uncover ties to a crime lord's death and a dangerous gang war threatening the city.","start_time":"2026-04-26T08:57:00Z","end_time":"2026-04-26T11:50:00Z","list_image":"ZeeCinemaHDSaaho8628577baa5b12251146308005ba45cb8c7c57.jpg","licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]},{"id":"0-10-CHN-007790000-20260426172000","title":"Kisi Ka Bhai Kisi Ki Jaan","actors":[],"duration":155,"tags":["Family","Brotherhood","Sacrifice","Love","Tradition","Responsibility","Romance","Comedy","Unity","ChangeSalman Khan","Pooja Hegde","Venkatesh","Salman Khan"],"original_title":"Kisi Ka Bhai Kisi Ki Jaan","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDKisiKaBhaiKisiKiJaan1509528267f74f3539842a9bca9824e8c8768b3","in__cover":"","in__list":""},"description":"Bhaijaan, the eldest brother of three siblings, refuses to get married to maintain harmony in his family. However, complications arise after his brothers conspire for him to fall in love.","start_time":"2026-04-26T11:50:00Z","end_time":"2026-04-26T14:25:00Z","list_image":"ZeeCinemaHDKisiKaBhaiKisiKiJaan1509528267f74f3539842a9bca9824e8c8768b3.jpg","licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]},{"id":"0-10-CHN-007790000-20260426195500","title":"Raid 2","actors":[],"duration":150,"tags":["corruption","truth","power","justice","deceptionAjay Devgn","Riteish Deshmukh","Vaani Kapoor","Saurabh Shukla.","Abhishek Pathak","Kumar Mangat Pathak","Bhushan Kumar","Pragya Singh","Krishan Kumar"],"original_title":"Raid 2","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDRaid219662512c969bdde5d94e64ba433e53d981da18","in__cover":"","in__list":""},"description":"Amay Patnaik, an Income Tax officer, uncovers corruption tied to Dada Bhai. He battles deceit and power, seeking justice in a dangerous political web.","start_time":"2026-04-26T14:25:00Z","end_time":"2026-04-26T16:55:00Z","list_image":"ZeeCinemaHDRaid219662512c969bdde5d94e64ba433e53d981da18.jpg","licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]},{"id":"0-10-CHN-007790000-20260426222500","title":"Sooryavanshi","actors":[],"duration":143,"tags":["Terrorism","Mumbai","ATS","RDX","Conspiracy","Hunt","Action","Thriller","Akshay Kumar","Katrina Kaif","Jackie Shroff","Jaaved JaaferiAkshay Kumar","Katrina Kaif","Jackie Shroff","Ajay Devgan","Ranveer Singh","Hiroo Yash Johar","Karan Johar","Apoorva Mehta","Rohit Shetty"],"original_title":"Sooryavanshi","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDSooryavanshi13023739c3a165ee1bd4061abdecdce321d93ca","in__cover":"","in__list":""},"description":"In 'Sooryavanshi,' our hero chases down terrorists who have gone missing with a dangerous stash of RDX, navigating intense action and suspense to keep the world safe.","start_time":"2026-04-26T16:55:00Z","end_time":"2026-04-26T19:18:00Z","list_image":"ZeeCinemaHDSooryavanshi13023739c3a165ee1bd4061abdecdce321d93ca.jpg","licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]}]}]} From 594ae1c4096b4a7087daad6b863c51c9d40bf1d6 Mon Sep 17 00:00:00 2001 From: StrangeDrVN <172238701+StrangeDrVN@users.noreply.github.com> Date: Sun, 26 Apr 2026 17:15:07 +0530 Subject: [PATCH 19/63] create config and tests --- sites/zee5.com/readme.md | 21 +++++ sites/zee5.com/zee5.com.channels.xml | 118 +++++++++++++++++++++++++++ sites/zee5.com/zee5.com.config.js | 80 ++++++++++++++++++ sites/zee5.com/zee5.com.test.js | 67 +++++++++++++++ 4 files changed, 286 insertions(+) create mode 100644 sites/zee5.com/readme.md create mode 100644 sites/zee5.com/zee5.com.channels.xml create mode 100644 sites/zee5.com/zee5.com.config.js create mode 100644 sites/zee5.com/zee5.com.test.js diff --git a/sites/zee5.com/readme.md b/sites/zee5.com/readme.md new file mode 100644 index 000000000..7c369e6e9 --- /dev/null +++ b/sites/zee5.com/readme.md @@ -0,0 +1,21 @@ +# zee5.com + +https://zee5.com + +### Download the guide + +```sh +npm run grab --- --site=zee5.com +``` + +### Update channel list + +```sh +npm run channels:parse --- --config=./sites/zee5.com/zee5.com.config.js --output=./sites/zee5.com/zee5.com.channels.xml +``` + +### Test + +```sh +npm test --- zee5.com +``` diff --git a/sites/zee5.com/zee5.com.channels.xml b/sites/zee5.com/zee5.com.channels.xml new file mode 100644 index 000000000..47faff381 --- /dev/null +++ b/sites/zee5.com/zee5.com.channels.xml @@ -0,0 +1,118 @@ + + + &flix HD + &Pictures + &Pictures HD + &TV HD + &TV HD + &TV HD USA + &xplorHD + Aaj Tak + Anmol Cinema + Anmol Cinema 2 + Anmol TV + Asianet News + Big Magic + Dagdusheth Halwai Ganpati Mandir + Good News Today + Great! Movies + Great! Mystery + Great! Romance + India Today + Iskon Vrindavan + Kashi Vishwanath + Ma Naina Devi + Mahavir Mandir Patna + NDTV 24x7 + NDTV India + NDTV Marathi + NDTV Profit + News 9 + Patna Sahib + Polimer News + POP + POP UP + Sai Baba, Shirdi + Salaam TV + Shree Naga Sai Temple - Coimbatore + Somnath Temple + Suvarna News + Tiny Pop + TV9 Bangla + TV9 Bharatvarsh + TV9 Gujarati + TV9 Kannada + TV9 Marathi + TV9 Telugu + WION + Zee 24 Ghanta + Zee 24 Kalak + Zee 24 Taas + Zee Action + Zee Aflam + Zee Aflam HD + Zee Alwan + Zee Alwan HD + Zee Bangla + Zee Bangla HD + Zee Bangla International + Zee Bangla Sonar + Zee Bharat + Zee Bihar Jharkhand + Zee Bioskop + Zee Biskope + Zee Bollywood + Zee Business + Zee Café HD + Zee Cinema + Zee Cinema HD + Zee Cinema ME + Zee Cinema UK + Zee Cinema USA + Zee Cinemalu + Zee Cinemalu HD + Zee Classic + Zee Delhi NCR Haryana + Zee Kannada + Zee Kannada HD + Zee Keralam HD + Zee Madhya Pradesh Chhattisgarh + Zee Marathi + Zee Marathi HD + Zee Marathi USA + Zee News + Zee News Kannada + ZEE News Malayalam + ZEE News Tamil + Zee News Telugu + Zee News Uttar Pradesh Uttrakhand + Zee One + Zee One French + Zee One German + Zee Power HD + Zee Punjab Haryana Himachal Pradesh + Zee Punjabi + Zee Rajasthan News + Zee Sarthak + Zee Talkies + Zee Talkies HD + Zee Tamil + Zee Tamil HD + Zee Tamil HD APAC + Zee Telugu + Zee Telugu HD + Zee Thirai HD + Zee TV + Zee TV APAC HD + Zee TV DE + Zee TV HD + Zee TV HD Canada + Zee TV HD UK + Zee TV HD USA + Zee TV ME + Zee TV USA + Zee Yuva + Zee Zest HD + Zing + Zing USA + diff --git a/sites/zee5.com/zee5.com.config.js b/sites/zee5.com/zee5.com.config.js new file mode 100644 index 000000000..148b6e653 --- /dev/null +++ b/sites/zee5.com/zee5.com.config.js @@ -0,0 +1,80 @@ +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') + +dayjs.extend(utc) +dayjs.extend(timezone) + +module.exports = { + site: 'zee5.com', + days: 2, // max 7 days to the past/future + request: { + cache: { + ttl: 60 * 60 * 1000 + }, + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 Edg/142.0.0.0', + 'Referer': 'https://www.zee5.com/' + } + }, + url: function ({ channel, date }) { + // start=0 (Today), start=1 (Tomorrow) + const today = dayjs.tz(new Date(), 'Asia/Kolkata').startOf('day') + const requestedDate = dayjs.tz(date, 'Asia/Kolkata').startOf('day') + + const diff = requestedDate.diff(today, 'day') + + return `https://gwapi.zee5.com/v1/epg?channels=${channel.site_id}&start=${diff}&end=${diff}&page_size=500` + }, + parser: function ({ content }) { + let programs = [] + + if (!content) return programs + + try { + const json = JSON.parse(content) + + const channelList = json.items ? json.items : (Array.isArray(json) ? json : [json]) + + const channelPrograms = channelList[0] && channelList[0].items ? channelList[0].items : [] + + channelPrograms.forEach(program => { + programs.push({ + title: program.title, + description: program.description || program.list_image_description || null, + start: dayjs(program.start_time), + stop: dayjs(program.end_time), + image: (program.image && program.image.list ? `https://akamaividz2.zee5.com/image/upload/resources/${program.id}/list/${program.image.list}.jpg` : program.list_image) || null, + category: program.genres && program.genres.length ? program.genres.map(g => g.value) : null, + lang: program.languages && program.languages.length ? program.languages : null + }) + }) + + } catch (e) { + console.error('Error parsing programs:', e) + return programs + } + + return programs + }, + + + async channels() { + try { + const url = `https://catalogapi.zee5.com/v1/channel?page=1&page_size=500` + const response = await axios.get(url) + const items = response.data.items || [] + + return items.map(item => ({ + lang: 'en', + site_id: item.id, + name: item.title, + logo: item.list_image ? `https://akamaividz2.zee5.com/image/upload/resources/${item.id}/channel_list/${item.list_image}` : null + })) + } catch (error) { + console.error('Error fetching channels:', error.message) + return [] + } + } +} diff --git a/sites/zee5.com/zee5.com.test.js b/sites/zee5.com/zee5.com.test.js new file mode 100644 index 000000000..b470ba782 --- /dev/null +++ b/sites/zee5.com/zee5.com.test.js @@ -0,0 +1,67 @@ +const { parser, url, channels } = require('./zee5.com.config.js') +const axios = require('axios') +const fs = require('fs') +const path = require('path') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') + +dayjs.extend(utc) +dayjs.extend(timezone) + +jest.mock('axios') + +const date = dayjs.tz('2025-12-02', 'Asia/Kolkata').startOf('d') +const channel = { site_id: '0-9-zeecinema', xmltv_id: 'ZeeCinema.in' } + +it('can generate valid url', () => { + const result = url({ channel, date }) + expect(result).toMatch('https://gwapi.zee5.com/v1/epg') + expect(result).toMatch('channels=0-9-zeecinema') +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8') + const result = parser({ content }) + + expect(result.length).toBe(9) + expect(result[0]).toMatchObject( + { + title: 'Tamilarasan', + description: 'An officer seizes control of a hospital, defying orders, which sparks a fierce conflict. His rebellion sets off a chain of events that could lead to a dramatic clash with authorities.', + start: dayjs('2026-04-25T20:03:00Z'), + stop: dayjs('2026-04-25T22:03:00Z'), + image: 'https://akamaividz2.zee5.com/image/upload/resources/0-10-CHN-007790000-20260426013300/list/ZeeCinemaHDTamilarasan1567745cf08a3ba1a9946d890a2f523ab71f38e.jpg', + category: ['Film'], + lang: ['hi'] + } + ) +}) + +it('can handle empty guide', () => { + const result = parser({ content: '[]' }) + expect(result).toMatchObject([]) +}) + +it('can parse channel list', async () => { + axios.get.mockResolvedValue({ + data: { + items: [ + { + id: '0-9-channel_1643519345', + title: 'Zing USA', + list_image: '1920x1080listclean721faf534a79451fa714b25d2102de48.png' + } + ] + } + }) + + const result = await channels() + expect(result.length).toBe(1) + expect(result[0]).toMatchObject({ + lang: 'en', + site_id: '0-9-channel_1643519345', + name: 'Zing USA', + logo: 'https://akamaividz2.zee5.com/image/upload/resources/0-9-channel_1643519345/channel_list/1920x1080listclean721faf534a79451fa714b25d2102de48.png' + }) +}) From ec262b5a25297bb006b49e8b18f229d880d5900d Mon Sep 17 00:00:00 2001 From: StrangeDrVN <172238701+StrangeDrVN@users.noreply.github.com> Date: Sun, 26 Apr 2026 17:18:12 +0530 Subject: [PATCH 20/63] updated website --- sites/zee5.com/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/zee5.com/readme.md b/sites/zee5.com/readme.md index 7c369e6e9..64f1b59c2 100644 --- a/sites/zee5.com/readme.md +++ b/sites/zee5.com/readme.md @@ -1,6 +1,6 @@ # zee5.com -https://zee5.com +https://zee5.com/tvguide ### Download the guide From 6dce55e12bb283a01cdecc9c6f27c8b4eef90820 Mon Sep 17 00:00:00 2001 From: StrangeDrVN <172238701+StrangeDrVN@users.noreply.github.com> Date: Sun, 26 Apr 2026 17:37:19 +0530 Subject: [PATCH 21/63] add xmltv_id + lint fix --- sites/zee5.com/zee5.com.channels.xml | 84 ++++++++++++++-------------- sites/zee5.com/zee5.com.config.js | 2 +- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/sites/zee5.com/zee5.com.channels.xml b/sites/zee5.com/zee5.com.channels.xml index 47faff381..d1d7573b7 100644 --- a/sites/zee5.com/zee5.com.channels.xml +++ b/sites/zee5.com/zee5.com.channels.xml @@ -4,40 +4,40 @@ &Pictures &Pictures HD &TV HD - &TV HD - &TV HD USA - &xplorHD + &TV HD + &TV HD USA + &xplorHD Aaj Tak Anmol Cinema Anmol Cinema 2 Anmol TV - Asianet News + Asianet News Big Magic Dagdusheth Halwai Ganpati Mandir Good News Today - Great! Movies - Great! Mystery - Great! Romance + Great! Movies + Great! Mystery + Great! Romance India Today Iskon Vrindavan Kashi Vishwanath Ma Naina Devi Mahavir Mandir Patna - NDTV 24x7 - NDTV India - NDTV Marathi - NDTV Profit + NDTV 24x7 + NDTV India + NDTV Marathi + NDTV Profit News 9 Patna Sahib - Polimer News - POP - POP UP + Polimer News + POP + POP UP Sai Baba, Shirdi Salaam TV Shree Naga Sai Temple - Coimbatore Somnath Temple - Suvarna News - Tiny Pop + Suvarna News + Tiny Pop TV9 Bangla TV9 Bharatvarsh TV9 Gujarati @@ -50,12 +50,12 @@ Zee 24 Taas Zee Action Zee Aflam - Zee Aflam HD + Zee Aflam HD Zee Alwan Zee Alwan HD Zee Bangla - Zee Bangla HD - Zee Bangla International + Zee Bangla HD + Zee Bangla International Zee Bangla Sonar Zee Bharat Zee Bihar Jharkhand @@ -63,56 +63,56 @@ Zee Biskope Zee Bollywood Zee Business - Zee Café HD - Zee Cinema + Zee Café HD + Zee Cinema Zee Cinema HD Zee Cinema ME Zee Cinema UK - Zee Cinema USA - Zee Cinemalu - Zee Cinemalu HD + Zee Cinema USA + Zee Cinemalu + Zee Cinemalu HD Zee Classic Zee Delhi NCR Haryana - Zee Kannada - Zee Kannada HD + Zee Kannada + Zee Kannada HD Zee Keralam HD Zee Madhya Pradesh Chhattisgarh - Zee Marathi - Zee Marathi HD - Zee Marathi USA + Zee Marathi + Zee Marathi HD + Zee Marathi USA Zee News Zee News Kannada ZEE News Malayalam - ZEE News Tamil + ZEE News Tamil Zee News Telugu Zee News Uttar Pradesh Uttrakhand Zee One Zee One French Zee One German - Zee Power HD + Zee Power HD Zee Punjab Haryana Himachal Pradesh Zee Punjabi Zee Rajasthan News Zee Sarthak Zee Talkies - Zee Talkies HD - Zee Tamil - Zee Tamil HD - Zee Tamil HD APAC - Zee Telugu - Zee Telugu HD + Zee Talkies HD + Zee Tamil + Zee Tamil HD + Zee Tamil HD APAC + Zee Telugu + Zee Telugu HD Zee Thirai HD - Zee TV + Zee TV Zee TV APAC HD - Zee TV DE - Zee TV HD + Zee TV DE + Zee TV HD Zee TV HD Canada Zee TV HD UK - Zee TV HD USA + Zee TV HD USA Zee TV ME Zee TV USA Zee Yuva - Zee Zest HD + Zee Zest HD Zing Zing USA diff --git a/sites/zee5.com/zee5.com.config.js b/sites/zee5.com/zee5.com.config.js index 148b6e653..14029f8b5 100644 --- a/sites/zee5.com/zee5.com.config.js +++ b/sites/zee5.com/zee5.com.config.js @@ -62,7 +62,7 @@ module.exports = { async channels() { try { - const url = `https://catalogapi.zee5.com/v1/channel?page=1&page_size=500` + const url = 'https://catalogapi.zee5.com/v1/channel?page=1&page_size=500' const response = await axios.get(url) const items = response.data.items || [] From 4700706feca886049b80fe224a0bfda149798370 Mon Sep 17 00:00:00 2001 From: Toha Date: Sun, 26 Apr 2026 22:00:38 +0700 Subject: [PATCH 22/63] Update cubmu.com api and channels. Signed-off-by: Toha --- sites/cubmu.com/__data__/content.json | 302 +++++++++++++++++++++- sites/cubmu.com/cubmu.com.channels.xml | 79 ++++++ sites/cubmu.com/cubmu.com.config.js | 190 ++++++++------ sites/cubmu.com/cubmu.com.test.js | 40 ++- sites/cubmu.com/cubmu.com_en.channels.xml | 73 ------ sites/cubmu.com/cubmu.com_id.channels.xml | 73 ------ sites/cubmu.com/readme.md | 20 +- 7 files changed, 507 insertions(+), 270 deletions(-) create mode 100644 sites/cubmu.com/cubmu.com.channels.xml delete mode 100644 sites/cubmu.com/cubmu.com_en.channels.xml delete mode 100644 sites/cubmu.com/cubmu.com_id.channels.xml diff --git a/sites/cubmu.com/__data__/content.json b/sites/cubmu.com/__data__/content.json index d27a2baa6..049ccbfd1 100644 --- a/sites/cubmu.com/__data__/content.json +++ b/sites/cubmu.com/__data__/content.json @@ -1 +1,301 @@ -{"result":[{"channel_id":"4028c68574537fcd0174be43042758d8","channel_name":"Trans TV","scehedule_title":"CNN Tech News","schedule_date":"2023-11-05 01:30:00","schedule_end_time":"02:00:00","schedule_json":{"availability":0,"channelId":"4028c68574537fcd0174be43042758d8","channelName":"Trans TV","duration":1800,"editable":true,"episodeName":"","imageUrl":"https://cdnjkt2.transvision.co.id:1001/catchup/schedule/thumbnail/4028c68574537fcd0174be43042758d8/4028c6858b8b3621018b9330e3701a7e/458x640","imageUrlWide":"https://cdnjkt2.transvision.co.id:1001/catchup/schedule/thumbnail/4028c68574537fcd0174be43042758d8/4028c6858b8b3621018b9330e3701a7e/320x180","name":"CNN Tech News","ottImageUrl":"","primarySynopsis":"CNN Indonesia Tech News adalah berita teknologi yang membawa pemirsa ke dunia teknologi yang penuh dengan informasi, pendidikan, hiburan sampai informasi kesehatan terkini.","scheduleId":"4028c6858b8b3621018b9330e3701a7e","scheduleTime":"18:30:00","secondarySynopsis":"CNN Indonesia Tech News is tech news brings viewers into the world of technology that provides information, education, entertainment to the latest health information.","startDt":"20231104183000","url":""},"schedule_start_time":"01:30:00"}]} \ No newline at end of file +{ + "data": [ + { + "catchup_id": "1409589", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 45, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Lacak Kriminal", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 02:00:00", + "schedule_start_time": "2026-04-26 01:15:00" + }, + { + "catchup_id": "1409590", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "CNN Indonesia Prime News", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 03:00:00", + "schedule_start_time": "2026-04-26 02:00:00" + }, + { + "catchup_id": "1409591", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 40, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "The Transmart", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 03:40:00", + "schedule_start_time": "2026-04-26 03:00:00" + }, + { + "catchup_id": "1409592", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Klinik Tendean", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 04:40:00", + "schedule_start_time": "2026-04-26 03:40:00" + }, + { + "catchup_id": "1409593", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 20, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Adam And Inul Love Story", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 05:00:00", + "schedule_start_time": "2026-04-26 04:40:00" + }, + { + "catchup_id": "1409594", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 90, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Islam Itu Indah", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 06:30:00", + "schedule_start_time": "2026-04-26 05:00:00" + }, + { + "catchup_id": "1409595", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Insert Pagi", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 07:30:00", + "schedule_start_time": "2026-04-26 06:30:00" + }, + { + "catchup_id": "1409596", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Kajian Hati", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 08:30:00", + "schedule_start_time": "2026-04-26 07:30:00" + }, + { + "catchup_id": "1409597", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 120, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Ambyar In Weekend", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 10:30:00", + "schedule_start_time": "2026-04-26 08:30:00" + }, + { + "catchup_id": "1409598", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Insert", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 11:30:00", + "schedule_start_time": "2026-04-26 10:30:00" + }, + { + "catchup_id": "1409599", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Spill DD Tea", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 12:30:00", + "schedule_start_time": "2026-04-26 11:30:00" + }, + { + "catchup_id": "1409600", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 90, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Brownis On The Weekend", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 14:00:00", + "schedule_start_time": "2026-04-26 12:30:00" + }, + { + "catchup_id": "1409601", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Rumpi Hot Of The Week", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 15:00:00", + "schedule_start_time": "2026-04-26 14:00:00" + }, + { + "catchup_id": "1409602", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Insert Investigasi", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 16:00:00", + "schedule_start_time": "2026-04-26 15:00:00" + }, + { + "catchup_id": "1409603", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Sehari Jadi Ratu", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 17:00:00", + "schedule_start_time": "2026-04-26 16:00:00" + }, + { + "catchup_id": "1409604", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Bikin Laper", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 18:00:00", + "schedule_start_time": "2026-04-26 17:00:00" + }, + { + "catchup_id": "1409605", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Monitor Ketua", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 19:00:00", + "schedule_start_time": "2026-04-26 18:00:00" + }, + { + "catchup_id": "1409606", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 75, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Insert Story", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 20:15:00", + "schedule_start_time": "2026-04-26 19:00:00" + }, + { + "catchup_id": "1409607", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Highlight", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 21:15:00", + "schedule_start_time": "2026-04-26 20:15:00" + }, + { + "catchup_id": "1409608", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 120, + "genre_id": "10", + "is_catchup_available": false, + "is_live": true, + "program_name": "Bioskop TransTV", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 23:15:00", + "schedule_start_time": "2026-04-26 21:15:00" + }, + { + "catchup_id": "1409609", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 120, + "genre_id": "10", + "is_catchup_available": false, + "is_live": false, + "program_name": "Bioskop TransTV", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-27 01:15:00", + "schedule_start_time": "2026-04-26 23:15:00" + } + ], + "error": null, + "message": "Get list EPG success", + "status": "success" +} \ No newline at end of file diff --git a/sites/cubmu.com/cubmu.com.channels.xml b/sites/cubmu.com/cubmu.com.channels.xml new file mode 100644 index 000000000..dd3ee03f7 --- /dev/null +++ b/sites/cubmu.com/cubmu.com.channels.xml @@ -0,0 +1,79 @@ + + + Movies News + Golf Plus ID + Knowledge+ + Cartoon TV Premium + Cartoon TV + Cartoon TV Classic + Football TV + Sports TV + Xtrem Sports + Speed TV + Travel TV + Cooking TV + Gaming TV + Song TV + ABC Australia + Al Jazeera + ANTV + Arirang + Berita Satu + Bioskop Indonesia + BTV + CCTV4 + Celestial Movies + CGTN + CGTN Documentary + Channel Jowo + Channel NewsAsia + CNBC Asia + CNBC Indonesia + CNN Indonesia + DAAI TV + DayStar + DENS Food Channel + DENS Play Channel + DENS Show Bizz + Dunia Anak + Dunia Lain + Eat N Go + Euronews + Fashion TV + Fight TV Premium + France 24 + Garuda TV + GTV + Indosiar + JakTV + jtv + Khazanah + Kompas TV + MDTV + MetroTV + MNC TV + Musik Indonesia + Nabawi TV + NHK World Premium + !nsert + One TV + Pijar TV + PSJ TV + Al Quran Al Kareem + Rtv + RCTI + Russia Today + SCTV + Superyacht TV + Thrill + Trans 7 + Trans TV + TV5 Monde + TV9 + tvMU + tVN + TVN Movies + TVOne + TVRI + Wion TV + diff --git a/sites/cubmu.com/cubmu.com.config.js b/sites/cubmu.com/cubmu.com.config.js index 335a555d3..f3d9a1238 100644 --- a/sites/cubmu.com/cubmu.com.config.js +++ b/sites/cubmu.com/cubmu.com.config.js @@ -1,3 +1,4 @@ +const axios = require('axios') const dayjs = require('dayjs') const timezone = require('dayjs/plugin/timezone') const utc = require('dayjs/plugin/utc') @@ -5,78 +6,72 @@ const utc = require('dayjs/plugin/utc') dayjs.extend(timezone) dayjs.extend(utc) +const tz = 'Asia/Jakarta' +const dateFormat = 'YYYY-MM-DD HH:mm:ss' +const headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36', + 'Origin': 'https://cubmu.com', + 'Referer': 'https://cubmu.com/', +} +let runtimeConfig, accessToken + module.exports = { site: 'cubmu.com', days: 2, url({ channel, date }) { - return `https://servicebuss.transvision.co.id/v2/cms/getEPGData?app_id=cubmu&tvs_platform_id=standalone&schedule_date=${date.format( + return `https://servicebuss.transvision.co.id/global/v2/epg/programs?channel_id=${ + channel.site_id + }&schedule_date=${date.format( 'YYYY-MM-DD' - )}&channel_id=${channel.site_id}` + )}` + }, + request: { + async headers() { + await fetchAccessToken() + + return { + Authorization: `Bearer ${accessToken}`, + ...headers, + } + } }, parser({ content, channel }) { const programs = [] - const items = parseItems(content) - items.forEach(item => { - programs.push({ - title: parseTitle(item), - description: parseDescription(item, channel.lang), - episode: parseEpisode(item), - start: parseStart(item).toISOString(), - stop: parseStop(item).toISOString() + if (content && typeof content === 'string') { + content = JSON.parse(content) + } + if (Array.isArray(content?.data)) { + content.data.forEach(item => { + programs.push({ + title: item.program_name, + start: dayjs.tz(item.schedule_start_time, dateFormat, tz), + stop: dayjs.tz(item.schedule_end_time, dateFormat, tz), + }) }) - }) + } return programs }, - async channels({ lang }) { - const axios = require('axios') - const cheerio = require('cheerio') + async channels({ lang = 'id' }) { + const now = dayjs() + await fetchAccessToken() const result = await axios - .get('https://cubmu.com/live-tv') - .then(response => response.data) - .catch(console.error) - - const $ = cheerio.load(result) - - // retrieve service api data - const config = JSON.parse($('#__NEXT_DATA__').text()).runtimeConfig || {} - - const options = { - headers: { - Origin: 'https://cubmu.com', - Referer: 'https://cubmu.com/live-tv' - } - } - // login to service bus - await axios - .post( - `https://servicebuss.transvision.co.id/tvs/login/external?email=${config.email}&password=${config.password}&deviceId=${config.deviceId}&deviceType=${config.deviceType}&deviceModel=${config.deviceModel}&deviceToken=&serial=&platformId=${config.platformId}`, - options - ) - .then(response => response.data) - .catch(console.error) - // list channels - const subscribedChannels = await axios - .post( - `https://servicebuss.transvision.co.id/tvs/subscribe_product/list?platformId=${config.platformId}`, - options - ) - .then(response => response.data) - .catch(console.error) + .get(`https://servicebuss.transvision.co.id/global/v2/master-channels?platform_id=1&page=1&per_page=100&schedule_date=${now.format('YYYY-MM-DD')}`, { + headers: { + Authorization: `Bearer ${accessToken}`, + ...headers, + } + }) + .then(r => r.data) + .catch(err => console.error(err.message)) const channels = [] - const included = [] - if (Array.isArray(subscribedChannels.channelPackageList)) { - subscribedChannels.channelPackageList.forEach(pkg => { - pkg.channelList.forEach(channel => { - if (included.indexOf(channel.id) < 0) { - included.push(channel.id) - channels.push({ - lang, - site_id: channel.id, - name: channel.name - }) - } + if (Array.isArray(result?.data?.items)) { + result.data.items.forEach(channel => { + channels.push({ + lang, + site_id: channel.channel_id, + name: channel.channel_name, }) }) } @@ -85,30 +80,65 @@ module.exports = { } } -function parseItems(content) { - return content ? JSON.parse(content.trim()).result || [] : [] +async function fetchRuntimeConfig() { + if (!runtimeConfig) { + const cheerio = require('cheerio') + const url = 'https://cubmu.com/' + const result = await axios + .get(url) + .then(r => r.data) + .catch(err => console.error(err.message)) + + const $ = cheerio.load(result) + + runtimeConfig = JSON.parse($('#__NEXT_DATA__').text()).runtimeConfig || {} + } } -function parseTitle(item) { - return item.scehedule_title -} +async function fetchAccessToken() { + if (!runtimeConfig) { + await fetchRuntimeConfig() + } + const url = 'https://servicebuss.transvision.co.id/global/v3/auth/redirect-login' + if (!accessToken) { + // extracted from https://cubmu.com/_next/static/chunks/pages/_app-ac49656f9b4eac2d.js + const f = t => { + let e = t, + r = 'xx', + n = Math.round(+new Date / 1e3), + i = ''.concat(e, '{SPLITTER}').concat(n) + return [0, 1].map(() => { + i = ''.concat(r).concat(btoa(i)) + }), i + } + const payload = { + app_id: 'cubmu', + device: { + device_brand: 'Web Browser', + device_id: 'web_browser', + device_type: 'Opera', + firebase_id: 'NOT_ALLOWED', + notes: 'Web Browser-V2.1', + }, + email_or_phone: runtimeConfig?.emailMaster, + password: f(runtimeConfig?.passwordMaster), + tvs_platform_id: 'standalone', + } + const result = await axios + .post(url, payload, { + headers: { + ...headers, + 'Content-Type': 'application/json', + } + }) + .then(r => r.data) + .catch(err => console.error(err.message)) -function parseDescription(item, lang = 'id') { - return lang === 'id' ? item.schedule_json.primarySynopsis : item.schedule_json.secondarySynopsis -} - -function parseEpisode(item) { - return item.schedule_json.episodeName -} - -function parseStart(item) { - return dayjs.tz(item.schedule_date, 'YYYY-MM-DD HH:mm:ss', 'Asia/Jakarta') -} - -function parseStop(item) { - return dayjs.tz( - [item.schedule_date.split(' ')[0], item.schedule_end_time].join(' '), - 'YYYY-MM-DD HH:mm:ss', - 'Asia/Jakarta' - ) + if (result?.data?.access_token) { + accessToken = result.data.access_token + } + } + if (!accessToken) { + throw new Error(`Unable to fetch access token from ${url}!`); + } } diff --git a/sites/cubmu.com/cubmu.com.test.js b/sites/cubmu.com/cubmu.com.test.js index a12f9e75c..fc45695dc 100644 --- a/sites/cubmu.com/cubmu.com.test.js +++ b/sites/cubmu.com/cubmu.com.test.js @@ -3,41 +3,31 @@ const fs = require('fs') const path = require('path') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') + dayjs.extend(utc) -const date = dayjs.utc('2023-11-05', 'DD/MM/YYYY').startOf('d') -const channel = { site_id: '4028c68574537fcd0174be43042758d8', xmltv_id: 'TransTV.id', lang: 'id' } -const channelEn = Object.assign({}, channel, { lang: 'en' }) +const date = dayjs.utc('2026-04-26').startOf('d') +const channel = { site_id: '210', xmltv_id: 'TransTV.id', lang: 'id' } it('can generate valid url', () => { expect(url({ channel, date })).toBe( - 'https://servicebuss.transvision.co.id/v2/cms/getEPGData?app_id=cubmu&tvs_platform_id=standalone&schedule_date=2023-11-05&channel_id=4028c68574537fcd0174be43042758d8' + 'https://servicebuss.transvision.co.id/global/v2/epg/programs?channel_id=210&schedule_date=2026-04-26' ) }) it('can parse response', () => { const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8') - const idResults = parser({ content, channel }) - expect(idResults).toMatchObject([ - { - start: '2023-11-04T18:30:00.000Z', - stop: '2023-11-04T19:00:00.000Z', - title: 'CNN Tech News', - description: - 'CNN Indonesia Tech News adalah berita teknologi yang membawa pemirsa ke dunia teknologi yang penuh dengan informasi, pendidikan, hiburan sampai informasi kesehatan terkini.' - } - ]) - - const enResults = parser({ content, channel: channelEn }) - expect(enResults).toMatchObject([ - { - start: '2023-11-04T18:30:00.000Z', - stop: '2023-11-04T19:00:00.000Z', - title: 'CNN Tech News', - description: - 'CNN Indonesia Tech News is tech news brings viewers into the world of technology that provides information, education, entertainment to the latest health information.' - } - ]) + const results = parser({ content, channel }) + .map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + expect(results[4]).toMatchObject({ + title: 'Adam And Inul Love Story', + start: '2026-04-25T21:40:00.000Z', + stop: '2026-04-25T22:00:00.000Z', + }) }) it('can handle empty guide', () => { diff --git a/sites/cubmu.com/cubmu.com_en.channels.xml b/sites/cubmu.com/cubmu.com_en.channels.xml deleted file mode 100644 index 5122dab05..000000000 --- a/sites/cubmu.com/cubmu.com_en.channels.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - jtv - Musik Indonesia - Euronews - Wion TV - CCTV 4 - Fight TV Premium - Xtrem Sports - Travel TV - Fashion TV - Movies News - Sports TV - SuperYacht TV - Speed TV - PSJ TV - DENS Food Channel - DENS PLAY Channel - DENS ShowBiz - TV9 - tv Mu - Pijar TV - Al Quran Al Kareem - Nabawi TV - MDTV - Song TV - Cartoon TV Classics - One TV - Channel Jowo - Cooking TV - Cartoon TV Premium - Cartoon TV - Football TV - Knowledge+ - Berita Satu - Garuda TV - CNA - Al Jazeera - France 24 - Arirang - Dunia Anak - Channel Seru! - Dunia Lain - ABC Australia - Eat N Go - Khazanah - CNBC Indonesia - SCTV - Indosiar - DAAI TV - rtv - MNC TV - Lingua - Bioskop Indonesia - GTV - BTV - Russia Today - !nsert - MetroTV - CNN Indonesia - TVRI - CGTN - RCTI - Jak tv - Kompas TV - TV5 Monde - Trans TV - Trans 7 - CGTN Documentary - LPS Financial Festival 2025 - GOLF PLUS ID - Gaming TV - diff --git a/sites/cubmu.com/cubmu.com_id.channels.xml b/sites/cubmu.com/cubmu.com_id.channels.xml deleted file mode 100644 index 0ee5d3662..000000000 --- a/sites/cubmu.com/cubmu.com_id.channels.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - jtv - Musik Indonesia - Euronews - Wion TV - CCTV 4 - Fight TV Premium - Xtrem Sports - Travel TV - Fashion TV - Movies News - Sports TV - SuperYacht TV - Speed TV - PSJ TV - DENS Food Channel - DENS PLAY Channel - DENS ShowBiz - TV9 - tv Mu - Pijar TV - Al Quran Al Kareem - Nabawi TV - MDTV - Song TV - Cartoon TV Classics - One TV - Channel Jowo - Cooking TV - Cartoon TV Premium - Cartoon TV - Football TV - Knowledge+ - Berita Satu - Garuda TV - CNA - Al Jazeera - France 24 - Arirang - Dunia Anak - Channel Seru! - Dunia Lain - ABC Australia - Eat N Go - Khazanah - CNBC Indonesia - SCTV - Indosiar - DAAI TV - rtv - MNC TV - Lingua - Bioskop Indonesia - GTV - BTV - Russia Today - !nsert - MetroTV - CNN Indonesia - TVRI - CGTN - RCTI - Jak tv - Kompas TV - TV5 Monde - Trans TV - Trans 7 - CGTN Documentary - LPS Financial Festival 2025 - GOLF PLUS ID - Gaming TV - diff --git a/sites/cubmu.com/readme.md b/sites/cubmu.com/readme.md index 8a10f641a..fa997a2c4 100644 --- a/sites/cubmu.com/readme.md +++ b/sites/cubmu.com/readme.md @@ -4,30 +4,14 @@ https://cubmu.com/live-tv _[Geo-restricted]_ ### Download the guide -Indonesian: - ```sh -npm run grab --- --sites=cubmu.com --lang=id -``` - -English: - -```sh -npm run grab --- --sites=cubmu.com --lang=en +npm run grab --- --sites=cubmu.com ``` ### Update channel list -Indonesian: - ```sh -npm run channels:parse --- --config=sites/cubmu.com/cubmu.com.config.js --output=sites/cubmu.com/cubmu.com_id.channels.xml --set=lang:id -``` - -English: - -```sh -npm run channels:parse --- --config=sites/cubmu.com/cubmu.com.config.js --output=sites/cubmu.com/cubmu.com_en.channels.xml --set=lang:en +npm run channels:parse --- --config=sites/cubmu.com/cubmu.com.config.js --output=sites/cubmu.com/cubmu.com.channels.xml ``` ### Test From 8a8179bcb957b2aedfce1cb72012c05dc7b9ae88 Mon Sep 17 00:00:00 2001 From: Toha Date: Sun, 26 Apr 2026 22:08:09 +0700 Subject: [PATCH 23/63] Remove unused parameter and semicolon. Signed-off-by: Toha --- sites/cubmu.com/cubmu.com.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sites/cubmu.com/cubmu.com.config.js b/sites/cubmu.com/cubmu.com.config.js index f3d9a1238..a994a967c 100644 --- a/sites/cubmu.com/cubmu.com.config.js +++ b/sites/cubmu.com/cubmu.com.config.js @@ -35,7 +35,7 @@ module.exports = { } } }, - parser({ content, channel }) { + parser({ content }) { const programs = [] if (content && typeof content === 'string') { content = JSON.parse(content) @@ -139,6 +139,6 @@ async function fetchAccessToken() { } } if (!accessToken) { - throw new Error(`Unable to fetch access token from ${url}!`); + throw new Error(`Unable to fetch access token from ${url}!`) } } From 15251d66554039e4b379a520a0449e256f9e7892 Mon Sep 17 00:00:00 2001 From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 02:05:52 +0000 Subject: [PATCH 24/63] [Bot] Update SITES.md Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/24973155531) workflow. --- SITES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SITES.md b/SITES.md index 65279865b..45734ceaa 100644 --- a/SITES.md +++ b/SITES.md @@ -64,7 +64,7 @@ foxtel.com.au9960🟢 france.tv158🟢 freetv.tv77🟢 - freeview.co.uk352198🟢 + freeview.co.uk352197🟢 frikanalen.no11🟢 galamtv.kz2722🟢 gatotv.com1925342🟢 @@ -143,7 +143,7 @@ reportv.com.ar16395🟢 rikstv.no800🟢 rotana.net3226🔴https://github.com/iptv-org/epg/issues/3018 - roya-tv.com108🟢 + roya-tv.com108🟢https://github.com/iptv-org/epg/issues/3108 rthk.hk88🟢 rtmklik.rtm.gov.my86🟢 rtp.pt1010🟢 From b71e17a123f9b258e62d0037e32387787c9bf33f Mon Sep 17 00:00:00 2001 From: "._______166" Date: Thu, 23 Apr 2026 11:48:19 +0100 Subject: [PATCH 25/63] Freeview: map most local TV channels --- .../freeview.co.uk.channels.xml | 90 +++++++++---------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/sites/freeview.co.uk/freeview.co.uk.channels.xml b/sites/freeview.co.uk/freeview.co.uk.channels.xml index 8e41cbe2a..5aaecde68 100644 --- a/sites/freeview.co.uk/freeview.co.uk.channels.xml +++ b/sites/freeview.co.uk/freeview.co.uk.channels.xml @@ -17,7 +17,6 @@ BBC Radio 2 BBC Radio 3 BBC Radio 4 - That's 20th Century Sonlife On Demand 365 Channelbox @@ -40,15 +39,12 @@ Capital Classic FM LBC - That's TV 2 SonLife Must Have Ideas - That's 70s Smooth Radio Hobbycraft TV Rewind TV Together TV IP - That's 60s Premier Radio Great! Player Great! Romance Mix @@ -65,24 +61,14 @@ BBC Sussex BBC Wiltshire BBC Kent - KMTV - That's TV - That's TV - Latest TV - That's TV - That's TV BBC Oxford BBC Gloucestershire - That's TV BBC Norfolk BBC Northampton BBC Cambridge BBC Suffolk - That's TV - That's TV BBC Bristol BBC Somerset - Bristol TV BBC Cornwall BBC Devon BBC Guernsey @@ -93,40 +79,19 @@ BBC H&W BBC Shropshire BBC CWR - Birmingham TV BBC Nottingham BBC Lincolnshire BBC Leicester BBC Sheffield BBC Humberside - That's TV - That's TV BBC Leeds BBC York - That's TV - Leeds TV - That's TV BBC Newcastle BBC Cumbria BBC Tees - Tyne & Wear TV - Teesside TV BBC Manchester BBC Lancashire BBC Merseyside - That's TV (UK) MCR - TV Warehouse - That's 60s MCR - That's Oldies MCR - That's TV 2 MCR - TV Warehouse+1 - That's 20th Century MCR - That's Classics - That's Entertainment - That's TV - Liverpool TV - That's TV - That's TV BBC R5L BBC 5SX BBC 6 Music @@ -140,21 +105,12 @@ BBC Radio 2 BBC Radio 3 BBC Radio 4 - That's TV - That's TV - That's TV - That's TV - That's TV BBC Radio Wales BBC Radio Cymru BBC Radio Cymru 2 - Cardiff TV - That's TV - North Wales TV BBC Radio Ulster BBC Radio Foyle RTÉ RnaG - That's TV 4seven 5ACTION 5SELECT @@ -298,6 +254,8 @@ ITV Quiz Jewellery Maker Ketchup TV + KMTV + Latest TV LEGEND London TV MBC @@ -326,13 +284,53 @@ STV STV+1 STV + Birmingham TV + Bristol TV + Cardiff TV TalkingPictures TV + Leeds TV + Liverpool TV + North Wales TV talkSPORT + Teesside TV Talk + Tyne & Wear TV TBN UK TG4 + That's 20th Century MCR + That's 20th Century + That's 60s MCR + That's 60s + That's 70s + That's Classics + That's Entertainment + That's Oldies MCR + That's TV 2 MCR + That's TV 2 + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV That's TV (UK) - That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV (UK) MCR + That's TV + That's TV Tiny Pop TJC TLC+1 @@ -341,6 +339,8 @@ Together TV TRUE CRIME TRUE CRIME XTRA + TV Warehouse+1 + TV Warehouse U&Dave U&DaveJaVu U&Drama+1 From 74bff45c3403875d60fce82100eb8b020c7e97b4 Mon Sep 17 00:00:00 2001 From: Toha Date: Wed, 29 Apr 2026 21:37:46 +0700 Subject: [PATCH 26/63] Site `firstmedia.com` is retired. Signed-off-by: Toha --- sites/firstmedia.com/__data__/content.json | 1 - .../firstmedia.com.channels.xml | 119 ------------------ sites/firstmedia.com/firstmedia.com.config.js | 102 --------------- sites/firstmedia.com/firstmedia.com.test.js | 38 ------ sites/firstmedia.com/readme.md | 21 ---- 5 files changed, 281 deletions(-) delete mode 100644 sites/firstmedia.com/__data__/content.json delete mode 100644 sites/firstmedia.com/firstmedia.com.channels.xml delete mode 100644 sites/firstmedia.com/firstmedia.com.config.js delete mode 100644 sites/firstmedia.com/firstmedia.com.test.js delete mode 100644 sites/firstmedia.com/readme.md diff --git a/sites/firstmedia.com/__data__/content.json b/sites/firstmedia.com/__data__/content.json deleted file mode 100644 index c6ec2901d..000000000 --- a/sites/firstmedia.com/__data__/content.json +++ /dev/null @@ -1 +0,0 @@ -{"data":{"entries":{"243":[{"createdAt":"2023-11-05T17:09:34.000Z","updatedAt":"2023-11-05T17:09:34.000Z","id":"009f3a34-8164-4ff9-b981-9dcab1a518fc","channelNo":"243","programmeId":null,"title":"News Live","episode":null,"slug":"news-live","date":"2023-11-08 17:00:00","startTime":"2023-11-08 20:00:00","endTime":"2023-11-08 20:30:00","length":1800,"description":"News Live","long_description":"Up to date news and analysis from around the world.","status":true,"channel":{"id":"7fd7a9a6-af32-c861-d2b0-4ddc7846fad2","key":"AljaInt","no":243,"name":"Al Jazeera International","slug":"al-jazeera-international","website":null,"description":"

An international 24-hour English-language It is the first English-language news channel brings you the latest global news stories, analysis from the Middle East & worldwide.

","shortDescription":null,"logo":"files/logos/channels/11-NEWS/AlJazeera Int SD-FirstMedia-Chl-243.jpg","externalId":"132","type":"radio","status":true,"chanel":"SD","locale":"id","relationId":"5a6ea4ae-a008-4889-9c68-7a6f1838e81d","onlyfm":null,"genress":[{"id":"1db3bb43-b00d-49af-b272-6c058a8c0b49","name":"International Free View"},{"id":"2e81a4bd-9719-4186-820a-7e035e07be13","name":"News"}]}}]}}} \ No newline at end of file diff --git a/sites/firstmedia.com/firstmedia.com.channels.xml b/sites/firstmedia.com/firstmedia.com.channels.xml deleted file mode 100644 index 39c5921ba..000000000 --- a/sites/firstmedia.com/firstmedia.com.channels.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - BTV - Investor Daily - First Llifestyle - NET. - Metro TV - SCTV - Indosiar - ANTV - TV One - Kompas TV - TVRI Nasional - Jawa Pos Media Televisi - JTV - Reformed 21 - Kairos - Sekolah Pelita Harapan Channel - SPH - Liga Mahasiswa - MOJI - DAAI TV - Eternal Word Television Network (EWTN) - KaraOKE Channel - Balai Kota Channel - Balai Kota Bandung - Rajawali TV - MNC News - TV9 - Garuda TV - Al Quran Al Kareem - Sunnah TV - West Java Network - AXN - Animax - GTV - Rock Action - Euronews - TBN Asia - Jakarta TV - Jak TV - iNews - The Learning Channel - TLC - Asian Food Network - IMC - Fashion TV - GMS Channel - Discovery Channel - Animal Planet - Nick jr. - Nickelodeon - Cartoon Network - SPOTV - SPOTV 2 - Champions TV 1 - Champions TV 2 - First Football - Eurosport - Star Gold - Zee Bioskop - Star Plus - ZEE TV - Zee Cinema - Wion - Zee Action - TVB Xing He - Phoenix Info News - Phoenix Chinese Channel - Celestial Movies - ONE - Xing Kong China - Zhejiang TV - CCTV 4 - CGTN - TVBS Asia - TVBS News - Hunan TV - Dragon TV - Jiangsu TV - ANHUI TV - Shenzen TV - MTV 90s - DW English - Arirang - BBC World News - CNN International - Fox News - Russia Today - Bloomberg - TRT World - Channel News Asia - Al Jazeera International - KBS World - Al Jazeera Arabic - France 24 - NHK World Premium - ABC Australia - Rai Italia - TV5 Monde - HBO - HBO Signature - HBO Hits - HBO Family - Cinemax - First Atmos HD - First Highlights HD - Jakarta Globe News Channel HD - First Lifestyle HD - HBO HD - HBO Hits HD - HBO Family HD - HBO Signature HD - Cinemax HD - Celestial Movies HD - Warner TV HD - Eurosport HD - Champions TV 1 HD - Champions TV 2 HD - HITS Now HD - Hits Movies HD - HITS HD - diff --git a/sites/firstmedia.com/firstmedia.com.config.js b/sites/firstmedia.com/firstmedia.com.config.js deleted file mode 100644 index 7c6865fc8..000000000 --- a/sites/firstmedia.com/firstmedia.com.config.js +++ /dev/null @@ -1,102 +0,0 @@ -const dayjs = require('dayjs') -const timezone = require('dayjs/plugin/timezone') -const utc = require('dayjs/plugin/utc') - -dayjs.extend(timezone) -dayjs.extend(utc) - -module.exports = { - site: 'firstmedia.com', - days: 2, - url({ channel, date }) { - return `https://api.firstmedia.com/api/content/tv-guide/list?date=${date.format( - 'DD/MM/YYYY' - )}&channel=${channel.site_id}&startTime=1&endTime=24` - }, - parser({ content, channel, date }) { - if (!content || !channel || !date) return [] - - const programs = [] - const items = parseItems(content, channel.site_id) - .map(item => { - item.start = toDelta(item.date, item.startTime) - item.stop = toDelta(item.date, item.endTime) - return item - }) - .sort((a, b) => a.start - b.start) - - const dt = date.tz('Asia/Jakarta').startOf('d') - let lastStop - items.forEach(item => { - if (lastStop === undefined || item.start >= lastStop) { - lastStop = item.stop - programs.push({ - title: parseTitle(item), - description: parseDescription(item), - start: asDate(parseStart({ item, date: dt })), - stop: asDate(parseStop({ item, date: dt })) - }) - } - }) - - return programs - }, - async channels() { - const axios = require('axios') - const result = await axios - .get( - `https://api.firstmedia.com/api/content/tv-guide/list?date=${dayjs().format( - 'DD/MM/YYYY' - )}&channel=&startTime=0&endTime=24` - ) - .then(response => response.data) - .catch(console.error) - - const channels = [] - if (result.data && result.data.entries) { - Object.values(result.data.entries).forEach(schedules => { - if (schedules.length) { - channels.push({ - lang: 'en', - site_id: schedules[0].channel.no, - name: schedules[0].channel.name - }) - } - }) - } - - return channels - } -} - -function parseItems(content, channel) { - return JSON.parse(content.trim()).data.entries[channel] || [] -} - -function parseTitle(item) { - return item.title -} - -function parseDescription(item) { - return item.long_description -} - -function parseStart({ item, date }) { - return date.add(item.start, 'ms') -} - -function parseStop({ item, date }) { - return date.add(item.stop, 'ms') -} - -function toDelta(from, to) { - return toDate(to).diff(toDate(from), 'milliseconds') -} - -function toDate(date) { - return dayjs(date, 'YYYY-MM-DD HH:mm:ss') -} - -function asDate(date) { - return date.toISOString() -} diff --git a/sites/firstmedia.com/firstmedia.com.test.js b/sites/firstmedia.com/firstmedia.com.test.js deleted file mode 100644 index 21bdd7b87..000000000 --- a/sites/firstmedia.com/firstmedia.com.test.js +++ /dev/null @@ -1,38 +0,0 @@ -const { url, parser } = require('./firstmedia.com.config.js') -const fs = require('fs') -const path = require('path') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -dayjs.extend(utc) - -const date = dayjs.utc('2023-11-08').startOf('d') -const channel = { site_id: '243', xmltv_id: 'AlJazeeraEnglish.qa', lang: 'id' } - -it('can generate valid url', () => { - expect(url({ channel, date })).toBe( - 'https://api.firstmedia.com/api/content/tv-guide/list?date=08/11/2023&channel=243&startTime=1&endTime=24' - ) -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8') - const results = parser({ content, channel, date }) - - // All time in Asia/Jakarta - // 2023-11-08 17:00:00 -> 2023-11-08 20:00:00 = 2023-11-08 03:00:00 - // 2023-11-08 17:00:00 -> 2023-11-08 20:30:00 = 2023-11-08 03:30:00 - expect(results).toMatchObject([ - { - start: '2023-11-07T20:00:00.000Z', - stop: '2023-11-07T20:30:00.000Z', - title: 'News Live', - description: 'Up to date news and analysis from around the world.' - } - ]) -}) - -it('can handle empty guide', () => { - const results = parser({ content: '' }) - - expect(results).toMatchObject([]) -}) diff --git a/sites/firstmedia.com/readme.md b/sites/firstmedia.com/readme.md deleted file mode 100644 index 66e2bc2d1..000000000 --- a/sites/firstmedia.com/readme.md +++ /dev/null @@ -1,21 +0,0 @@ -# firstmedia.com - -https://www.firstmedia.com/product/tv-guide - -### Download the guide - -```sh -npm run grab --- --sites=firstmedia.com -``` - -### Update channel list - -```sh -npm run channels:parse --- --config=./sites/firstmedia.com/firstmedia.com.config.js --output=./sites/firstmedia.com/firstmedia.com.channels.xml -``` - -### Test - -```sh -npm test --- firstmedia.com -``` From 467de4c6bdcf34afc0b04d41714772260a5fbbba Mon Sep 17 00:00:00 2001 From: Toha Date: Thu, 30 Apr 2026 08:59:20 +0700 Subject: [PATCH 27/63] Fix `visionplus.id` categories and update channels. Signed-off-by: Toha --- sites/visionplus.id/visionplus.id.config.js | 25 +- sites/visionplus.id/visionplus.id.test.js | 2 + .../visionplus.id_en.channels.xml | 232 +++++++++--------- .../visionplus.id_id.channels.xml | 232 +++++++++--------- 4 files changed, 265 insertions(+), 226 deletions(-) diff --git a/sites/visionplus.id/visionplus.id.config.js b/sites/visionplus.id/visionplus.id.config.js index e4220ca48..20bbb8571 100644 --- a/sites/visionplus.id/visionplus.id.config.js +++ b/sites/visionplus.id/visionplus.id.config.js @@ -36,7 +36,7 @@ module.exports = { programs.push({ title, description: ev.con && ev.con.loc ? ev.con.loc[0].syn : null, - categories: ev.con ? ev.con.categories : null, + categories: ev.con ? parseCategories(ev.con.categories) : null, season: season ? parseInt(season) : season, episode: episode ? parseInt(episode) : episode, start: dayjs(ev.sta), @@ -52,7 +52,9 @@ module.exports = { const result = [] const axios = require('axios') const json = await axios - .get(`https://www.visionplus.id/managetv/tvinfo/channels/get?language=${languages[lang]}`) + .get(`https://www.visionplus.id/managetv/tvinfo/channels/get?language=${ + languages[lang] + }&partition=IndonesiaPartition®ion=Indonesia`) .then(response => response.data) .catch(console.error) @@ -69,3 +71,22 @@ module.exports = { return result } } + +function parseCategories(categories) { + if (Array.isArray(categories)) { + const f = s => (s.match(/\//g) || []).length + const cat = [...categories] + .sort((a, b) => f(a) - f(b)) + .map(a => a.split('/')) + categories = [] + for (const a of cat) { + for (const b of a) { + if (!categories.includes(b)) { + categories.push(b) + } + } + } + } + + return categories +} diff --git a/sites/visionplus.id/visionplus.id.test.js b/sites/visionplus.id/visionplus.id.test.js index f71f7c6fc..46faf4363 100644 --- a/sites/visionplus.id/visionplus.id.test.js +++ b/sites/visionplus.id/visionplus.id.test.js @@ -42,6 +42,7 @@ it('can parse response', () => { title: 'FBI: Most Wanted S4, Ep 18', description: 'After two agents from the Bureau of Land Management go missing while executing a land seizure warrant in Wyoming, the Fugitive Task Force heads west to track them down in an unwelcoming county.', + categories: ['Series', 'Thriller'], season: 4, episode: 18 }) @@ -60,6 +61,7 @@ it('can parse response', () => { title: 'FBI: Most Wanted S4, Ep 18', description: 'Satgas Buronan pergi ke wilayah barat untuk melacak keberadaan dua petugas Biro Pengelolaan Lahan yang menghilang saat menjalankan perintah penyitaan lahan di negara bagian yang tak ramah, Wyoming.', + categories: ['Series', 'Thriller'], season: 4, episode: 18 }) diff --git a/sites/visionplus.id/visionplus.id_en.channels.xml b/sites/visionplus.id/visionplus.id_en.channels.xml index 2f0d700bb..cc7bf3f03 100644 --- a/sites/visionplus.id/visionplus.id_en.channels.xml +++ b/sites/visionplus.id/visionplus.id_en.channels.xml @@ -1,123 +1,25 @@ - RCTI - MNCTV - GTV - iNews - SindoNews - Trans TV - Trans 7 - ANTV - RTV - TVOne - Kompas TV - Metro TV - BTV + SCTV + Indosiar TVRI - SEA Today - DAAI TV - Net TV - JTV - JAK TV - Bali TV - Bandung TV - TV 9 - Tawaf - TV MU - Cinemachi - Cinemachi Kids - Cinemachi Xtra - Cinemachi Max - Cinemachi Action - Thrill - Hits Movies - Celestial Movies - CCM - TVN Movies - Zee Bioskop - GALAXY PREMIUM - GALAXY - IMC (Indonesia Movie Channel) - My Family Channel - My Cinema - My Cinema Asia - Kids TV + Moji + Mentari TV + Studio Universal Moonbug - Cbeebies - Nick Jr - Zoo Moo - Nick - Animax - My Kidz - Dream Works - Food Travel - Entertainment - TVN - One - Kix - NHK World Premium - Hits - AXN - Lifetime - FMN - Vision Prime - Celebrities TV + HITS Now + Formosa + Sanlih Hanacaraka TV - Rock Entertainment - Rock Action - Crime Investigation - Outdoor Channel - BBC Earth - Global Trekker - History - Love Nature - Sportstars - Sportstars 2 - Soccer Channel - SpoTV 1 - SpoTV 2 - Fight Sports - beIN SPORTS + Sportstars 3 beIN SPORTS 2 - beIN SPORTS 3 beIN SPORTS 4 beIN SPORTS 5 - BBC World news - CNBC Asia - FOX News - Bloomberg - IDX - Muslim TV - LIFE - Reformed 21 - Music TV - MTV Live - MTV 90s - DW - France 24 - TRT World - Aljazeera - RT - EURONEWS - Channel News Asia - Al Quran Al Kareem - EWTN - CGTN Documentary - CGTN - Anhui - Xing kong TV - Shanghai Dragon - Hunan TV - Jiangsu TV - NHK - TV5Monde - Arirang - ABC - CCM - Celebrities TV - DENS Food Channel - DENSPLAY Channel - DENS Showbizz Channel + RCTI World + GTV World + MNCTV World + Drama World + Sportstars 4 V+ LIVE R+ LIVE V+ LIVE 2 @@ -125,4 +27,110 @@ V+ LIVE 3 V+ LIVE 4 V+ LIVE 5 + V+ LIVE 6 + V+ LIVE 7 + V+ LIVE 8 + V+ LIVE 9 + ABC + Aljazeera + Al Quran Al Kareem + Anhui + Animax + ANTV + Arirang + AXN + Bali TV + Bandung TV + BBC Earth + BBC World news + beIN SPORTS + beIN SPORTS 3 + Bloomberg + BTV + Cbeebies + Celebrities TV + CCM + Celestial Movies + CGTN + CGTN Documentary + Originals + Cineedge + Buddy Star + Superrix + Uniques + Channel News Asia + CNBC Asia + Crime Investigation + DAAI TV + DENS Food Channel + DENSPLAY Channel + DENS Showbizz Channel + DMI TV + Shanghai Dragon + Dream Works + DW + Entertainment + EURONEWS + EWTN + Fight Sports + FOX News + France 24 + GALAXY + GALAXY PREMIUM + Global Trekker + GTV + History + Hits + Hits Movies + Hunan TV + IDX + IMC (Indonesia Movie Channel) + iNews + JAK TV + Jiangsu TV + JTV + Kids TV + Kix + Kompas TV + LIFE + Lifetime + Love Nature + Metro TV + MNCTV + Music TV + Muslim TV + MDTV + NHK + NHK World Premium + Nick + Nick Jr + Food Travel + One + Outdoor Channel + RTV + RCTI + Reformed 21 + Rock Entertainment + Rock Action + RT + SindoNews + Soccer Channel + Sportstars 2 + Sportstars + SpoTV 2 + SpoTV 1 + Thrill + Trans 7 + Trans TV + TRT World + TV5Monde + TV 9 + TV MU + TVN + TVN Movies + TVOne + Vision Prime + Xing kong TV + Zee Bioskop + Zoo Moo diff --git a/sites/visionplus.id/visionplus.id_id.channels.xml b/sites/visionplus.id/visionplus.id_id.channels.xml index 418c6d5e7..0c2213298 100644 --- a/sites/visionplus.id/visionplus.id_id.channels.xml +++ b/sites/visionplus.id/visionplus.id_id.channels.xml @@ -1,123 +1,25 @@ - RCTI - MNCTV - GTV - iNews - SindoNews - Trans TV - Trans 7 - ANTV - RTV - TVOne - Kompas TV - Metro TV - BTV + SCTV + Indosiar TVRI - SEA Today - DAAI TV - Net TV - JTV - JAK TV - Bali TV - Bandung TV - TV 9 - Tawaf - TV MU - Cinemachi - Cinemachi Kids - Cinemachi Xtra - Cinemachi Max - Cinemachi Action - Thrill - Hits Movies - Celestial Movies - CCM - TVN Movies - Zee Bioskop - GALAXY PREMIUM - GALAXY - IMC (Indonesia Movie Channel) - My Family Channel - My Cinema - My Cinema Asia - Kids TV + Moji + Mentari TV + Studio Universal Moonbug - Cbeebies - Nick Jr - Zoo Moo - Nick - Animax - My Kidz - Dream Works - Food Travel - Entertainment - TVN - One - Kix - NHK World Premium - Hits - AXN - Lifetime - FMN - Vision Prime - Celebrities TV + HITS Now + Formosa + Sanlih Hanacaraka TV - Rock Entertainment - Rock Action - Crime Investigation - Outdoor Channel - BBC Earth - Global Trekker - History - Love Nature - Sportstars - Sportstars 2 - Soccer Channel - SpoTV 1 - SpoTV 2 - Fight Sports - beIN SPORTS + Sportstars 3 beIN SPORTS 2 - beIN SPORTS 3 beIN SPORTS 4 beIN SPORTS 5 - BBC World news - CNBC Asia - FOX News - Bloomberg - IDX - Muslim TV - LIFE - Reformed 21 - Music TV - MTV Live - MTV 90s - DW - France 24 - TRT World - Aljazeera - RT - EURONEWS - Channel News Asia - Al Quran Al Kareem - EWTN - CGTN Documentary - CGTN - Anhui - Xing kong TV - Shanghai Dragon - Hunan TV - Jiangsu TV - NHK - TV5Monde - Arirang - ABC - CCM - Celebrities TV - DENS Food Channel - DENSPLAY Channel - DENS Showbizz Channel + RCTI World + GTV World + MNCTV World + Drama World + Sportstars 4 V+ LIVE R+ LIVE V+ LIVE 2 @@ -125,4 +27,110 @@ V+ LIVE 3 V+ LIVE 4 V+ LIVE 5 + V+ LIVE 6 + V+ LIVE 7 + V+ LIVE 8 + V+ LIVE 9 + ABC + Aljazeera + Al Quran Al Kareem + Anhui + Animax + ANTV + Arirang + AXN + Bali TV + Bandung TV + BBC Earth + BBC World news + beIN SPORTS + beIN SPORTS 3 + Bloomberg + BTV + Cbeebies + Celebrities TV + CCM + Celestial Movies + CGTN + CGTN Documentary + Originals + Cineedge + Buddy Star + Superrix + Uniques + Channel News Asia + CNBC Asia + Crime Investigation + DAAI TV + DENS Food Channel + DENSPLAY Channel + DENS Showbizz Channel + DMI TV + Shanghai Dragon + Dream Works + DW + Entertainment + EURONEWS + EWTN + Fight Sports + FOX News + France 24 + GALAXY + GALAXY PREMIUM + Global Trekker + GTV + History + Hits + Hits Movies + Hunan TV + IDX + IMC (Indonesia Movie Channel) + iNews + JAK TV + Jiangsu TV + JTV + Kids TV + Kix + Kompas TV + LIFE + Lifetime + Love Nature + Metro TV + MNCTV + Music TV + Muslim TV + MDTV + NHK + NHK World Premium + Nick + Nick Jr + Food Travel + One + Outdoor Channel + RTV + RCTI + Reformed 21 + Rock Entertainment + Rock Action + RT + SindoNews + Soccer Channel + Sportstars 2 + Sportstars + SpoTV 2 + SpoTV 1 + Thrill + Trans 7 + Trans TV + TRT World + TV5Monde + TV 9 + TV MU + TVN + TVN Movies + TVOne + Vision Prime + Xing kong TV + Zee Bioskop + Zoo Moo From 8fe6bc349094e32fea23178b43bfcfef19da1a6f Mon Sep 17 00:00:00 2001 From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2026 02:13:34 +0000 Subject: [PATCH 28/63] [Bot] Update SITES.md Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/25143820656) workflow. --- SITES.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SITES.md b/SITES.md index 45734ceaa..0400bef4d 100644 --- a/SITES.md +++ b/SITES.md @@ -35,7 +35,7 @@ content.astro.com.my14993🟢 cosmotetv.gr1090🟢 ctc.ru11🟢 - cubmu.com140104🟢 + cubmu.com7662🟢 cyta.com.cy1170🟢 dens.tv5448🟢 derana.lk11🟢 @@ -59,12 +59,11 @@ epg.telemach.ba4760🟢 epgmaster.com11🟢 epgshare01.online2070615🟢 - firstmedia.com11697🟢 foxsports.com.au77🟢 foxtel.com.au9960🟢 france.tv158🟢 freetv.tv77🟢 - freeview.co.uk352197🟢 + freeview.co.uk352241🟢 frikanalen.no11🟢 galamtv.kz2722🟢 gatotv.com1925342🟢 @@ -246,6 +245,7 @@ yes.co.il1740🟢 zap.co.ao11463🟢 zap2it.com5950🟢 + zee5.com115105🟢 ziggogo.tv156150🟡https://github.com/iptv-org/epg/issues/2977, https://github.com/iptv-org/epg/issues/2976 znbc.co.zm44🟢 zuragt.mn3427🟢 From 8a9023419155caab3e3d703f9632d65ebe42514c Mon Sep 17 00:00:00 2001 From: Toha Date: Thu, 30 Apr 2026 09:20:29 +0700 Subject: [PATCH 29/63] Update some channels XMLTV id. Signed-off-by: Toha --- .../visionplus.id_en.channels.xml | 30 +++++++++---------- .../visionplus.id_id.channels.xml | 30 +++++++++---------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/sites/visionplus.id/visionplus.id_en.channels.xml b/sites/visionplus.id/visionplus.id_en.channels.xml index cc7bf3f03..ff673d91a 100644 --- a/sites/visionplus.id/visionplus.id_en.channels.xml +++ b/sites/visionplus.id/visionplus.id_en.channels.xml @@ -1,25 +1,10 @@ - SCTV - Indosiar - TVRI - Moji - Mentari TV - Studio Universal - Moonbug - HITS Now - Formosa - Sanlih Hanacaraka TV - Sportstars 3 - beIN SPORTS 2 - beIN SPORTS 4 - beIN SPORTS 5 RCTI World GTV World MNCTV World Drama World - Sportstars 4 V+ LIVE R+ LIVE V+ LIVE 2 @@ -44,7 +29,10 @@ BBC Earth BBC World news beIN SPORTS + beIN SPORTS 2 beIN SPORTS 3 + beIN SPORTS 4 + beIN SPORTS 5 Bloomberg BTV Cbeebies @@ -75,6 +63,7 @@ Fight Sports FOX News France 24 + Formosa GALAXY GALAXY PREMIUM Global Trekker @@ -82,9 +71,11 @@ History Hits Hits Movies + HITS Now Hunan TV IDX IMC (Indonesia Movie Channel) + Indosiar iNews JAK TV Jiangsu TV @@ -95,8 +86,11 @@ LIFE Lifetime Love Nature + Mentari TV Metro TV MNCTV + Moji + Moonbug Music TV Muslim TV MDTV @@ -113,12 +107,17 @@ Rock Entertainment Rock Action RT + SCTV + Sanlih SindoNews Soccer Channel Sportstars 2 + Sportstars 3 + Sportstars 4 Sportstars SpoTV 2 SpoTV 1 + Studio Universal Thrill Trans 7 Trans TV @@ -129,6 +128,7 @@ TVN TVN Movies TVOne + TVRI Vision Prime Xing kong TV Zee Bioskop diff --git a/sites/visionplus.id/visionplus.id_id.channels.xml b/sites/visionplus.id/visionplus.id_id.channels.xml index 0c2213298..1fa747118 100644 --- a/sites/visionplus.id/visionplus.id_id.channels.xml +++ b/sites/visionplus.id/visionplus.id_id.channels.xml @@ -1,25 +1,10 @@ - SCTV - Indosiar - TVRI - Moji - Mentari TV - Studio Universal - Moonbug - HITS Now - Formosa - Sanlih Hanacaraka TV - Sportstars 3 - beIN SPORTS 2 - beIN SPORTS 4 - beIN SPORTS 5 RCTI World GTV World MNCTV World Drama World - Sportstars 4 V+ LIVE R+ LIVE V+ LIVE 2 @@ -44,7 +29,10 @@ BBC Earth BBC World news beIN SPORTS + beIN SPORTS 2 beIN SPORTS 3 + beIN SPORTS 4 + beIN SPORTS 5 Bloomberg BTV Cbeebies @@ -75,6 +63,7 @@ Fight Sports FOX News France 24 + Formosa GALAXY GALAXY PREMIUM Global Trekker @@ -82,9 +71,11 @@ History Hits Hits Movies + HITS Now Hunan TV IDX IMC (Indonesia Movie Channel) + Indosiar iNews JAK TV Jiangsu TV @@ -95,8 +86,11 @@ LIFE Lifetime Love Nature + Mentari TV Metro TV MNCTV + Moji + Moonbug Music TV Muslim TV MDTV @@ -113,12 +107,17 @@ Rock Entertainment Rock Action RT + SCTV + Sanlih SindoNews Soccer Channel Sportstars 2 + Sportstars 3 + Sportstars 4 Sportstars SpoTV 2 SpoTV 1 + Studio Universal Thrill Trans 7 Trans TV @@ -129,6 +128,7 @@ TVN TVN Movies TVOne + TVRI Vision Prime Xing kong TV Zee Bioskop From 43645e39c5a0715dff9e7d406b82364c1f006bc6 Mon Sep 17 00:00:00 2001 From: Toha Date: Thu, 30 Apr 2026 09:45:38 +0700 Subject: [PATCH 30/63] Fix `tivie.id` program description and update channels. Signed-off-by: Toha --- sites/tivie.id/__data__/content.html | 3033 +++++++++++++++--------- sites/tivie.id/__data__/program01.html | 290 ++- sites/tivie.id/__data__/program02.html | 292 ++- sites/tivie.id/tivie.id.channels.xml | 29 +- sites/tivie.id/tivie.id.config.js | 43 +- sites/tivie.id/tivie.id.test.js | 38 +- 6 files changed, 2362 insertions(+), 1363 deletions(-) diff --git a/sites/tivie.id/__data__/content.html b/sites/tivie.id/__data__/content.html index f6caa1966..e52f1119d 100644 --- a/sites/tivie.id/__data__/content.html +++ b/sites/tivie.id/__data__/content.html @@ -1,15 +1,853 @@ - -
-
-
-
-
- -
-
    + + + + Jadwal Acara AXN 29 April 2026 | TiViE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +
    +
    + +
    + +
    +

    Jadwal Acara AXN 29 April 2026

    +
    +
    + +
    + + +

    AXN merupakan channel televisi satelit dan/atau kabel. Perlu berlangganan untuk yang dapat menyaksikan channel ini.

    + +

    Siaran AXN bisa disaksikan melalui penyedia layanan televisi berikut:

    + +
    +
    +
    Parabola
    +
      +
    • +
      +
      + MNC Vision +
      + + Channel #438 + +
      +
    • +
    • +
      +
      + K-Vision +
      + + + +
      +
    • +
    • +
      +
      + Nex Parabola +
      + + + +
      +
    • +
    • +
      +
      + TransVision +
      + + Channel #301 + +
      +
    • +
    +
    +
    +
    Kabel/IPTV
    +
      +
    • +
      +
      + First Media +
      + + Channel #51 + +
      +
    • +
    • +
      +
      + IndiHome +
      + + Channel #509 + +
      +
    • +
    • +
      +
      + MNC Play +
      + + Channel #79 + +
      +
    • +
    • +
      +
      + MyRepublic +
      + + Channel #201 + +
      +
    • +
    +
    +
    +
    Internet/OTT
    +
      +
    • +
      +
      + MAXStreamTV +
      + + + +
      +
    • +
    • +
      +
      + Vision+ +
      + + + +
      +
    • +
    +
    +
    +
    +
    + +
    +
    +
    + +
    + + +
    + + +
    + -
    -
    -
    -
    -
    +
    + + + + + + +
  • + + + +
  • +
  • + +
    +
    + 23:30 + + + WIB +
    +
    +
    + + + The Rainmaker, Ep. 1 + + +
    + + +
    +
    +
  • + + +
+
+
+ +
+
+
+
+ +
+

TiViE - Jadwal program acara televisi.

+

Made with in East Java 61353.

+
+
+ + + + + + + + + \ No newline at end of file diff --git a/sites/tivie.id/__data__/program01.html b/sites/tivie.id/__data__/program01.html index 973e0511a..9b0c4fcd2 100644 --- a/sites/tivie.id/__data__/program01.html +++ b/sites/tivie.id/__data__/program01.html @@ -1,102 +1,204 @@ - -
-
-
-
-
-
- -
-
-
- Film -
-

White House Down

-

2013

-
-

Saat melakukan tur di Gedung Putih bersama putrinya yang masih kecil, seorang perwira polisi - beraksi untuk melindungi anaknya dan presiden dari sekelompok penjajah paramiliter - bersenjata lengkap.

-
-
- - - -
-
-

Terakhir Tayang

- -
-
-
-
+ + +
+
+
+ +
+ +
+
+ Serial +
+ +

The Hunting Party S1

+

Episode 3

+ +
+

Di pedalaman Montana, tim memburu seorang pembunuh berantai nan kejam bernama Lowe yang terobsesi dengan kawanan serigala.

+
+ +
+ + + +
+ + +
+

Terakhir Tayang

+ + +
+ + +
+ + + + +
+
+
+
+ +
+

TiViE - Jadwal program acara televisi.

+

Made with in East Java 61353.

+
+
+ + + + + + + + + \ No newline at end of file diff --git a/sites/tivie.id/__data__/program02.html b/sites/tivie.id/__data__/program02.html index 5233f2b0a..1a6b319d9 100644 --- a/sites/tivie.id/__data__/program02.html +++ b/sites/tivie.id/__data__/program02.html @@ -1,106 +1,204 @@ - -
-
-
+ +
+
+
+ +
+ +
+
+ Serial +
+ +

The Rookie S7

+

Episode 6

+ +
+

Grey memberi Tim dan Lucy suatu tugas yang tak menyenangkan, sementara John dan Celina melacak keberadaan seorang gadis yang menghilang. Beberapa hubungan asmara berakhir di suatu acara amal.

+
+ +
+ + + +
+ + +
+

Terakhir Tayang

+ + +
+ + +
+ + + + +
+
+
+
+ +
+

TiViE - Jadwal program acara televisi.

+

Made with in East Java 61353.

+
+
+ + + + + + + + + \ No newline at end of file diff --git a/sites/tivie.id/tivie.id.channels.xml b/sites/tivie.id/tivie.id.channels.xml index 895c50459..361df4348 100644 --- a/sites/tivie.id/tivie.id.channels.xml +++ b/sites/tivie.id/tivie.id.channels.xml @@ -3,9 +3,12 @@ ANTV AXN beIN Sports 1 - beIN Sports 2 + beIN Sports 2 beIN Sports 3 BTV + CCM + Celestial Movies + CinemaWorld Cinemax CNN Galaxy @@ -18,31 +21,39 @@ HBO Signature HITS HITS Movies - HITS Now + HITS Now + IMC Indosiar iNews + KIX Kompas TV + K-Plus Lifetime - MDTV Mentari TV Metro TV MNC TV Moji + MDTV Nusantara TV - RCTI - Rock Action - Rock Entertainment + ONE RTV + RCTI + Rock Entertainment + Rock Action SCTV - SEA Today Sindonews TV + Sin Po TV + SpoTV2 SpoTV - SpoTV 2 + Studio Universal + Thrill Trans7 Trans TV tvN tvN Movies TvOne - TVRI + TVRI + VTV + Warner TV Zee Bioskop
diff --git a/sites/tivie.id/tivie.id.config.js b/sites/tivie.id/tivie.id.config.js index ed3bda766..39ecf7182 100644 --- a/sites/tivie.id/tivie.id.config.js +++ b/sites/tivie.id/tivie.id.config.js @@ -68,23 +68,28 @@ module.exports = { }) if (queues.length) { await doFetch(queues, (queue, res) => { - const $ = cheerio.load(res) - const img = $('#main-content > div > div:nth-child(1) img') - const info = $('#main-content > div > div:nth-child(2)') - const title = parseText(info.find('h2:nth-child(2)')) - if (!queue.i.title.startsWith(title) && !queue.i.title.startsWith('LIVE ')) { - queue.i.subTitle = parseText(info.find('h2:nth-child(2)')) + if (res) { + const $ = cheerio.load(res) + const info = $('#main-content > div > div:nth-child(2)') + // program description + const desc = info.find('div[class=""] > p') + if (desc.length) { + desc.find('.hidden') + .toArray() + .forEach(el => $(el).remove()) + queue.i.description = parseText(desc) + } + // program categories + const cat = info.find('div[class=""] > a') + if (cat.length) { + queue.i.categories = parseText(cat).split(', ') + } + // program image + const img = $('#main-content > div > div:nth-child(1) img') + if (img.length) { + queue.i.image = img.attr('src') + } } - const desc1 = parseText(info.find('div[class=""]:nth-child(3)')) - const desc2 = parseText(info.find('div[class=""]:nth-child(4)')) - if (desc2 == '') { - queue.i.description = desc1.replace('TiViE.id | ', '') - } else { - queue.i.description = desc2.replace('TiViE.id | ', '') - queue.i.date = parseText(info.find('h2:nth-child(3)')) - } - queue.i.categories = parseText(info.find('div[class=""]:nth-child(1)')).split(', ') - queue.i.image = img.length ? img.attr('src') : null }) } // fill start-stop @@ -118,7 +123,7 @@ module.exports = { const url = $item.attr('href') return { lang, - site_id: url.substr(url.lastIndexOf('/') + 1), + site_id: url.substr(url.lastIndexOf('/') + 1, url.lastIndexOf('?') - url.lastIndexOf('/') - 1), name: $item.find('strong').text() } }) @@ -130,8 +135,8 @@ module.exports = { function parseText($item) { let text = $item.text().replace(/\t/g, '').replace(/\n/g, ' ').trim() while (true) { - if (text.match(/\s\s/)) { - text = text.replace(/\s\s/g, ' ') + if (text.match(/\s{2,}/)) { + text = text.replace(/\s{2,}/g, ' ') continue } break diff --git a/sites/tivie.id/tivie.id.test.js b/sites/tivie.id/tivie.id.test.js index dcc4e0ee5..cc609121a 100644 --- a/sites/tivie.id/tivie.id.test.js +++ b/sites/tivie.id/tivie.id.test.js @@ -11,7 +11,7 @@ dayjs.extend(utc) jest.mock('axios') -const date = dayjs.utc('2024-12-31').startOf('d') +const date = dayjs.utc('2026-04-29').startOf('d') const channel = { site_id: 'axn', xmltv_id: 'AXN.id', @@ -20,8 +20,8 @@ const channel = { axios.get.mockImplementation(url => { const urls = { - 'https://tivie.id/film/white-house-down-nwzDnwz9nAv6': 'program01.html', - 'https://tivie.id/program/hudson-rex-s6-e14-nwzDnwvBmQr9': 'program02.html' + 'https://tivie.id/program/the-hunting-party-e3-nwzDnwrCmAnB?utm_source=tivie&utm_medium=referral&utm_campaign=channel_detail&utm_content=button': 'program01.html', + 'https://tivie.id/program/the-rookie-s7-e6-nwzDnwv6mwzC?utm_source=tivie&utm_medium=referral&utm_campaign=channel_detail&utm_content=button': 'program02.html' } let data = '' if (urls[url] !== undefined) { @@ -31,7 +31,7 @@ axios.get.mockImplementation(url => { }) it('can generate valid url', () => { - expect(url({ channel, date })).toBe('https://tivie.id/channel/axn/20241231') + expect(url({ channel, date })).toBe('https://tivie.id/channel/axn/20260429') }) it('can parse response', async () => { @@ -42,26 +42,30 @@ it('can parse response', async () => { return p }) - expect(results.length).toBe(27) + expect(results.length).toBe(28) expect(results[0]).toMatchObject({ - start: '2024-12-30T17:00:00.000Z', - stop: '2024-12-30T17:05:00.000Z', - title: 'White House Down', + start: '2026-04-28T17:00:00.000Z', + stop: '2026-04-28T17:25:00.000Z', + title: 'The Hunting Party S1, Ep. 3', description: - 'Saat melakukan tur di Gedung Putih bersama putrinya yang masih kecil, seorang perwira polisi beraksi untuk melindungi anaknya dan presiden dari sekelompok penjajah paramiliter bersenjata lengkap.', + 'Di pedalaman Montana, tim memburu seorang pembunuh berantai nan kejam bernama Lowe yang terobsesi dengan kawanan serigala.', image: - 'https://i0.wp.com/is3.cloudhost.id/tivie/poster/2023/09/65116c78791c2-1695640694.jpg?resize=480,270' + 'https://i0.wp.com/is3.cloudhost.id/tivie/poster/2025/10/68e9d54962c8f-1760154953.jpg?resize=480,270', + categories: ['Serial'], + season: 1, + episode: 3 }) expect(results[2]).toMatchObject({ - start: '2024-12-30T18:00:00.000Z', - stop: '2024-12-30T18:55:00.000Z', - title: 'Hudson & Rex S6, Ep. 14', + start: '2026-04-28T18:20:00.000Z', + stop: '2026-04-28T19:15:00.000Z', + title: 'The Rookie S7, Ep. 6', description: - 'Saat guru musik Jesse terbunuh di studio rekamannya, Charlie dan Rex menghubungkan kejahatan tersebut dengan pembunuhan yang tampaknya tak ada hubungannya.', + 'Grey memberi Tim dan Lucy suatu tugas yang tak menyenangkan, sementara John dan Celina melacak keberadaan seorang gadis yang menghilang. Beberapa hubungan asmara berakhir di suatu acara amal.', image: - 'https://i0.wp.com/is3.cloudhost.id/tivie/poster/2024/07/668b7ced47b25-1720417517.jpg?resize=480,270', - season: 6, - episode: 14 + 'https://i0.wp.com/is3.cloudhost.id/tivie/poster/2025/01/677a9f2fb4b5f-1736089391.jpg?resize=480,270', + categories: ['Serial'], + season: 7, + episode: 6 }) }) From 87abab3fff4b3f8a90b6d53420b495f81841f7f6 Mon Sep 17 00:00:00 2001 From: Toha Date: Thu, 30 Apr 2026 10:22:08 +0700 Subject: [PATCH 31/63] Update `vidio.com` channels. Signed-off-by: Toha --- sites/vidio.com/vidio.com.channels.xml | 116 +++++++++++++------------ 1 file changed, 62 insertions(+), 54 deletions(-) diff --git a/sites/vidio.com/vidio.com.channels.xml b/sites/vidio.com/vidio.com.channels.xml index c0ea3b1c8..1b88b802c 100644 --- a/sites/vidio.com/vidio.com.channels.xml +++ b/sites/vidio.com/vidio.com.channels.xml @@ -1,60 +1,68 @@ - SCTV - Indosiar - Moji - TRANS TV - Trans7 - Metro TV - ANTV - TVOne - Kompas TV - MDTV - RTV - DW English - Jaktv - BTV - Bein 1 - Bein 3 - TVN - Horee - Aljazeera - News Asia - Euro News - TVRI - DAAI TV - Zoomoo - CTV 1 - CTV 2 - NBA TV - Arirang - CTV 3 - Makkah TV - U-Channel TV - Hip Hip Horee! - ABC Australia - Magna TV - Nusantara TV - Ajwa TV MUSICA - NHK World Japan - ROCK Entertainment - Rock Action - CTV 5 - CTV 6 - Premier League TV - JTV - jawaposTV - Elshinta TV - Tawaf TV - AFRICANEWS TV - SPOTV - SPOTV 2 - TV5Monde - Bein 2 GGS TV - Champions Golf 1 - Champions Golf 2 - BeritaSatu + Voli TV 2 + ABC Australia + Africanews + AJWA TV + Aljazeera + ANTV + Arirang + Bein 1 + Bein 2 + Bein 3 + Berita Satu + BTV + Champions Fight + Champions Golf 1 + Champions Golf 2 + Champions TV 1 + Champions TV 2 + Champions TV 3 + Champions TV 5 + Champions TV 6 + Premier League TV + Citra Drama + CNA + DAAI TV Daystar TV + DMI TV + DW English + Elshinta TV + Euronews + Garuda TV + GTV + Hip Hip Horee! + Horee + Indosiar + iNews + Jaktv + jawaposTV + JTV + Kompas TV + Magna TV + Makkah TV + Mentari TV + Metro TV + MNCTV + Moji + MDTV + NHK World Japan + Nusantara TV + RTV + RCTI + Real Madrid TV + Rock Action + SCTV + Sin Po TV + SPOTV 2 + SPOTV + Trans7 + TRANS TV + TV5Monde + TVN + TVOne + TVRI + U-Channel TV From 9ddff3392d646cb66e4bdca39f65b735e41be904 Mon Sep 17 00:00:00 2001 From: Toha Date: Thu, 30 Apr 2026 10:29:19 +0700 Subject: [PATCH 32/63] Update `dens.tv` channels. Signed-off-by: Toha --- sites/dens.tv/dens.tv.channels.xml | 89 +++++++++++++----------------- 1 file changed, 39 insertions(+), 50 deletions(-) diff --git a/sites/dens.tv/dens.tv.channels.xml b/sites/dens.tv/dens.tv.channels.xml index 0fd5487bd..6c65d4c3e 100644 --- a/sites/dens.tv/dens.tv.channels.xml +++ b/sites/dens.tv/dens.tv.channels.xml @@ -1,57 +1,46 @@ - DensKnowledge Live Streaming 1 - Metro TV - MDTV - CGTN Documentary - TVRI - RodjaTV - RTV - DAAI TV - Al Jazeera Arabic - TV5MONDE Style HD - ANIPLUS HD - ROCK Entertainment HD - TRT World - DensLife&Style - ROCK Action - Al Jazeera English - tvN Movies HD - tvN HD - CNA - France 24 - NHK WORLD-JAPAN - TBN - WION - BTV - DW-TV - Quran TV - CCTV-4 - Sunna TV - TV5MONDE ASIE - My Cinema Europe HD - Elshinta TV - My Kidz HD - Motorvision+ - K-PLUS HD - DensShowBiz - FREEDOM - DensPlay - My Cinema Asia - Jak tv - DensFood Channel - TVRI Sport - Magna Channel Crema TV - Stingray Classica - Dance TV - Berita Satu - DIM TV - KBS Korea - KBS World + Al Jazeera Arabic + Al Jazeera English + Quran TV + Sunna TV + Berita Satu + BTV + CCTV-4 + CGTN Documentary Channel Jowo + CNA + DAAI TV + Dance TV + DensFood Channel + DensKnowledge + DensLife&Style + DensPlay + DensShowBiz + DIM TV + DW-TV + Elshinta TV + France 24 + FREEDOM + Jak tv + Magna Channel + Metro TV + Motorvision+ + My Cinema Europe HD + MDTV + NHK WORLD-JAPAN Nusantara TV (NTV) - Qwest TV - Russia Today (RT) + Qwest TV + RTV + RodjaTV + Russia Today (RT) + Stingray Classica + TBN + TRT World + TV5MONDE ASIE + TVRI + TVRI Sport + WION From d96fd8f3b2807ddbe8dc142fb81978aa5ff3e5f0 Mon Sep 17 00:00:00 2001 From: Toha Date: Thu, 30 Apr 2026 10:34:09 +0700 Subject: [PATCH 33/63] Fixes some channels XMLTV id. Signed-off-by: Toha --- sites/dens.tv/dens.tv.channels.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sites/dens.tv/dens.tv.channels.xml b/sites/dens.tv/dens.tv.channels.xml index 6c65d4c3e..18d821af0 100644 --- a/sites/dens.tv/dens.tv.channels.xml +++ b/sites/dens.tv/dens.tv.channels.xml @@ -9,7 +9,7 @@ Berita Satu BTV CCTV-4 - CGTN Documentary + CGTN Documentary Channel Jowo CNA DAAI TV @@ -26,10 +26,10 @@ FREEDOM Jak tv Magna Channel + MDTV Metro TV Motorvision+ My Cinema Europe HD - MDTV NHK WORLD-JAPAN Nusantara TV (NTV) Qwest TV From bb7bc8f26716c7efa712271b1e0561e9b890dc23 Mon Sep 17 00:00:00 2001 From: Toha Date: Thu, 30 Apr 2026 10:36:41 +0700 Subject: [PATCH 34/63] Update MDTV XMLTV id. Signed-off-by: Toha --- sites/vidio.com/vidio.com.channels.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/vidio.com/vidio.com.channels.xml b/sites/vidio.com/vidio.com.channels.xml index 1b88b802c..8afdff3fe 100644 --- a/sites/vidio.com/vidio.com.channels.xml +++ b/sites/vidio.com/vidio.com.channels.xml @@ -43,11 +43,11 @@ Kompas TV Magna TV Makkah TV + MDTV Mentari TV Metro TV MNCTV Moji - MDTV NHK World Japan Nusantara TV RTV From 6a4bab7539831fa58e24adf281e26451d741e683 Mon Sep 17 00:00:00 2001 From: Toha Date: Thu, 30 Apr 2026 10:39:17 +0700 Subject: [PATCH 35/63] Update MDTV XMLTV id. Signed-off-by: Toha --- sites/visionplus.id/visionplus.id_en.channels.xml | 2 +- sites/visionplus.id/visionplus.id_id.channels.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sites/visionplus.id/visionplus.id_en.channels.xml b/sites/visionplus.id/visionplus.id_en.channels.xml index ff673d91a..079e962fc 100644 --- a/sites/visionplus.id/visionplus.id_en.channels.xml +++ b/sites/visionplus.id/visionplus.id_en.channels.xml @@ -86,6 +86,7 @@ LIFE Lifetime Love Nature + MDTV Mentari TV Metro TV MNCTV @@ -93,7 +94,6 @@ Moonbug Music TV Muslim TV - MDTV NHK NHK World Premium Nick diff --git a/sites/visionplus.id/visionplus.id_id.channels.xml b/sites/visionplus.id/visionplus.id_id.channels.xml index 1fa747118..ee2e93b33 100644 --- a/sites/visionplus.id/visionplus.id_id.channels.xml +++ b/sites/visionplus.id/visionplus.id_id.channels.xml @@ -86,6 +86,7 @@ LIFE Lifetime Love Nature + MDTV Mentari TV Metro TV MNCTV @@ -93,7 +94,6 @@ Moonbug Music TV Muslim TV - MDTV NHK NHK World Premium Nick From cd9de838b272e1ea68744cee1605f22bd943aa5e Mon Sep 17 00:00:00 2001 From: Toha Date: Thu, 30 Apr 2026 10:41:07 +0700 Subject: [PATCH 36/63] Update MDTV XMLTV id. Signed-off-by: Toha --- sites/tivie.id/tivie.id.channels.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/tivie.id/tivie.id.channels.xml b/sites/tivie.id/tivie.id.channels.xml index 361df4348..c233fd09a 100644 --- a/sites/tivie.id/tivie.id.channels.xml +++ b/sites/tivie.id/tivie.id.channels.xml @@ -29,11 +29,11 @@ Kompas TV K-Plus Lifetime + MDTV Mentari TV Metro TV MNC TV Moji - MDTV Nusantara TV ONE RTV From e0cb6d1ff38d2abace61b1ed99ff3589aff8d0d8 Mon Sep 17 00:00:00 2001 From: Toha Date: Thu, 30 Apr 2026 11:01:29 +0700 Subject: [PATCH 37/63] Update `mncvision.id` channels. Signed-off-by: Toha --- .../mncvision.id/mncvision.id_en.channels.xml | 227 ++++++++---------- .../mncvision.id/mncvision.id_id.channels.xml | 227 ++++++++---------- 2 files changed, 196 insertions(+), 258 deletions(-) diff --git a/sites/mncvision.id/mncvision.id_en.channels.xml b/sites/mncvision.id/mncvision.id_en.channels.xml index dd37ec1d7..0dacb3b15 100644 --- a/sites/mncvision.id/mncvision.id_en.channels.xml +++ b/sites/mncvision.id/mncvision.id_en.channels.xml @@ -1,141 +1,110 @@ - Vision Prime HD - CINEMACHI XTRA - CINEMACHI - CINEMACHI ACTION - CINEMACHI KIDS - CINEMACHI MAX - HITS MOVIES - Galaxy Premium - Galaxy - IMC - My Family - My Cinema - My Cinema Asia - Thrill - Celestial Movies - CCM - Zee Bioskop - tvN Movies - Nickelodeon Jr - Zoomoo - Moonbug - CBeebies - Kids TV - Dreamworks - Nickelodeon - My Kidz - Indosiar - RCTI - GTV - MNCTV - iNews - Sindo News TV - Entertainment - Trans TV - Sportstars 4 - SCTV Hanacaraka TV - LIFE - Muslim TV - Al Quran Al Kareem - Vision Prime - FOOD TRAVEL - Celebrities TV - tvOne - Sportstars 2 - Sportstars 3 - IDX - Soccer Channel - Sportstars - BTV - Tawaf TV - Kompas TV - Metro TV - Trans 7 - Music TV - JAKTV - ANTV - NET TV - TVRI - MTV LIVE - MTV 90's - FMN - AXN + ABC Australia + Al Jazeera English + Al Quran Al Kareem Animax - tvN - HITS - KIX - ONE - Lifetime + ANTV + Arirang + AXN BBC Earth - Global Trekker - Outdoor Channel - Love Nature + BBC Earth HD + BBC World News + beIN Sports 1 + beIN Sports 2 + beIN Sports 3 + beIN SPORTS 4 + beIN SPORTS 5 + Bloomberg + BTV + CBeebies + Celebrities TV + CCM + Celestial Movies + CGTN CGTN Documentary - History + ORIGINALS HD + ORIGINALS + CINEEDGE HD + CINEEDGE + BUDDY STARS HD + BUDDY STARS + Superrix HD + Superrix + UNIQUES HD + UNIQUES + Channel News Asia + CNBC Crime Investigation + Tawaf TV + Dreamworks + DW English + Entertainment + EURONEWS + Fight Sports + FOX News + France 24 English + Galaxy + Galaxy Premium + Global Trekker + GTV + History + HITS + HITS MOVIES HD + HITS MOVIES + IDX + IMC + Indosiar + iNews + JAKTV + Kids TV + KIX + Kompas TV + LIFE + Lifetime + Love Nature HD + Love Nature + MDTV + Metro TV + MNCTV + Moonbug + Music TV + Muslim TV + NHK World + NHK World Premium + Nickelodeon + Nick Jr. HD + Nickelodeon Jr + FOOD TRAVEL + ONE HD + ONE + Outdoor channel HD + Outdoor Channel + RCTI Rock Entertainment Rock Action - Fight Sports - SPOTV - SPOTV 2 - beIN Sports 1 - beIN Sports 2 - beIN Sports 3 - beIN SPORTS 4 - beIN SPORTS 5 - Channel News Asia - Al Jazeera English - BBC World News - EURONEWS - FOX News + SCTV SEA TODAY - CNBC - Bloomberg - ABC Australia - Arirang - France 24 English - CGTN - NHK World Premium - NHK World - DW English - CINEMACHI HD - CINEMACHI ACTION HD - CINEMACHI KIDS HD - CINEMACHI MAX HD - CINEMACHI XTRA HD - HITS MOVIES HD - tvN Movies HD - beIN Sports 1 HD - beIN Sports 2 HD - beIN Sports 3 HD - Soccer Channel HD - Sportstars HD - Sportstars 2 HD - sportstars 3 HD - Sportstars 4 HD - SPOTV HD - SPOTV 2 HD - RCTI HD - GTV HD - MNCTV HD - iNews HD - Sindo News TV HD - IDX HD - SCTV HD - Indosiar HD - Music TV HD - ONE HD + Sindo News TV + Soccer Channel + Sportstars 2 + Sportstars 3 + Sportstars 4 + Sportstars + SPOTV 2 + SPOTV + Studio Universal + Thrill + Trans 7 + Trans TV tvN HD - AXN HD - Food Travel HD - Outdoor channel HD - BBC Earth HD - Global Trekker HD - Love Nature HD - Kids TV HD - Nick Jr. HD - Dreamworks HD + tvN + tvN Movies HD + tvN Movies + tvOne + TVRI + Vision Prime + Zee Bioskop + Zoomoo diff --git a/sites/mncvision.id/mncvision.id_id.channels.xml b/sites/mncvision.id/mncvision.id_id.channels.xml index 59957209c..4c0d5cbcc 100644 --- a/sites/mncvision.id/mncvision.id_id.channels.xml +++ b/sites/mncvision.id/mncvision.id_id.channels.xml @@ -1,141 +1,110 @@ - Vision Prime HD - CINEMACHI XTRA - CINEMACHI - CINEMACHI ACTION - CINEMACHI KIDS - CINEMACHI MAX - HITS MOVIES - Galaxy Premium - Galaxy - IMC - My Family - My Cinema - My Cinema Asia - Thrill - Celestial Movies - CCM - Zee Bioskop - tvN Movies - Nickelodeon Jr - Zoomoo - Moonbug - CBeebies - Kids TV - Dreamworks - Nickelodeon - My Kidz - Indosiar - RCTI - GTV - MNCTV - iNews - Sindo News TV - Entertainment - Trans TV - Sportstars 4 - SCTV Hanacaraka TV - LIFE - Muslim TV - Al Quran Al Kareem - Vision Prime - FOOD TRAVEL - Celebrities TV - tvOne - Sportstars 2 - Sportstars 3 - IDX - Soccer Channel - Sportstars - BTV - Tawaf TV - Kompas TV - Metro TV - Trans 7 - Music TV - JAKTV - ANTV - NET TV - TVRI - MTV LIVE - MTV 90's - FMN - AXN + ABC Australia + Al Jazeera English + Al Quran Al Kareem Animax - tvN - HITS - KIX - ONE - Lifetime + ANTV + Arirang + AXN BBC Earth - Global Trekker - Outdoor Channel - Love Nature + BBC Earth HD + BBC World News + beIN Sports 1 + beIN Sports 2 + beIN Sports 3 + beIN SPORTS 4 + beIN SPORTS 5 + Bloomberg + BTV + CBeebies + Celebrities TV + CCM + Celestial Movies + CGTN CGTN Documentary - History + ORIGINALS HD + ORIGINALS + CINEEDGE HD + CINEEDGE + BUDDY STARS HD + BUDDY STARS + Superrix HD + Superrix + UNIQUES HD + UNIQUES + Channel News Asia + CNBC Crime Investigation + Tawaf TV + Dreamworks + DW English + Entertainment + EURONEWS + Fight Sports + FOX News + France 24 English + Galaxy + Galaxy Premium + Global Trekker + GTV + History + HITS + HITS MOVIES HD + HITS MOVIES + IDX + IMC + Indosiar + iNews + JAKTV + Kids TV + KIX + Kompas TV + LIFE + Lifetime + Love Nature HD + Love Nature + MDTV + Metro TV + MNCTV + Moonbug + Music TV + Muslim TV + NHK World + NHK World Premium + Nickelodeon + Nick Jr. HD + Nickelodeon Jr + FOOD TRAVEL + ONE HD + ONE + Outdoor channel HD + Outdoor Channel + RCTI Rock Entertainment Rock Action - Fight Sports - SPOTV - SPOTV 2 - beIN Sports 1 - beIN Sports 2 - beIN Sports 3 - beIN SPORTS 4 - beIN SPORTS 5 - Channel News Asia - Al Jazeera English - BBC World News - EURONEWS - FOX News + SCTV SEA TODAY - CNBC - Bloomberg - ABC Australia - Arirang - France 24 English - CGTN - NHK World Premium - NHK World - DW English - CINEMACHI HD - CINEMACHI ACTION HD - CINEMACHI KIDS HD - CINEMACHI MAX HD - CINEMACHI XTRA HD - HITS MOVIES HD - tvN Movies HD - beIN Sports 1 HD - beIN Sports 2 HD - beIN Sports 3 HD - Soccer Channel HD - Sportstars HD - Sportstars 2 HD - sportstars 3 HD - Sportstars 4 HD - SPOTV HD - SPOTV 2 HD - RCTI HD - GTV HD - MNCTV HD - iNews HD - Sindo News TV HD - IDX HD - SCTV HD - Indosiar HD - Music TV HD - ONE HD + Sindo News TV + Soccer Channel + Sportstars 2 + Sportstars 3 + Sportstars 4 + Sportstars + SPOTV 2 + SPOTV + Studio Universal + Thrill + Trans 7 + Trans TV tvN HD - AXN HD - Food Travel HD - Outdoor channel HD - BBC Earth HD - Global Trekker HD - Love Nature HD - Kids TV HD - Nick Jr. HD - Dreamworks HD + tvN + tvN Movies HD + tvN Movies + tvOne + TVRI + Vision Prime + Zee Bioskop + Zoomoo From 351ddb4aabbb68fdd016d4806f4a84fec4963b2e Mon Sep 17 00:00:00 2001 From: Toha Date: Thu, 30 Apr 2026 13:04:54 +0700 Subject: [PATCH 38/63] Update HBO Asia XMLTV id. Signed-off-by: Toha --- sites/tivie.id/tivie.id.channels.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/tivie.id/tivie.id.channels.xml b/sites/tivie.id/tivie.id.channels.xml index c233fd09a..644a1cf5e 100644 --- a/sites/tivie.id/tivie.id.channels.xml +++ b/sites/tivie.id/tivie.id.channels.xml @@ -15,7 +15,7 @@ Galaxy Premium Garuda TV GTV - HBO + HBO HBO Family HBO Hits HBO Signature From db03466e5c2e23e64ca6a854e2fdad4344dfb43d Mon Sep 17 00:00:00 2001 From: Toha Date: Thu, 30 Apr 2026 13:34:58 +0700 Subject: [PATCH 39/63] Update `nowplayer.now.com` channels. Signed-off-by: Toha --- .../nowplayer.now.com_en.channels.xml | 248 +++++++++--------- .../nowplayer.now.com_zh.channels.xml | 248 +++++++++--------- 2 files changed, 244 insertions(+), 252 deletions(-) diff --git a/sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml b/sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml index fe3e4a524..474bda6cc 100644 --- a/sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml +++ b/sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml @@ -1,147 +1,143 @@ - ViuTVsix - ViuTV - Viu channel - Now Chinese Drama Channel - Now Video Express - NowJelli - HBO Hits - HBO Family - CINEMAX - HBO Signature - HBO - MOVIE MOVIE - Now Baogu Movies - Now Baogu Superstars - Animax - tvN - KBS World - ETTV Asia Channel MOOV Concert/MV - Discovery Asia - Discovery Channel - Animal Planet - Discovery Science - DMAX - TLC - Love Nature - Love Nature 4K - BBC Earth - Outdoor Channel - Crime + Investigation - HISTORY - CNN International - CNBC - BBC News - Bloomberg Television - Channel NewsAsia - Sky News - DW (English) - Al Jazeera English - euronews - France 24 - NHK WORLD-JAPAN - RT - CGTN - Now Direct - Now NEWS - Now Business News Channel - Now Data - Yicai TV - Phoenix InfoNews Channel - Phoenix Hong Kong Channel - ETTV Asia News Watch N Learn - DreamWorks - Cartoon Network - Nickelodeon - Cartoonito - CBeebies - Nick Jr. - Da Vinci - BBC Lifestyle - WarnerTV - AXN - ROCK Entertainment - Lifetime - Food Network - Asian Food Network - Travel Channel - HGTV Netflix - CTI Asia Channel - Shenzhen TV + Sports Schedule Highlights + Now Sports 4K 3 + Now Sports Premier League 7 + Now Sports 641 + Now Sports 647 + Now Sports 651 + Now Sports 652 + Adult Promotional Channel + ABC Australia + Al Jazeera English + Animal Planet + Animax + Asian Food Network + Cricbuzz + AXN + BBC Earth + BBC Lifestyle + BBC News + beIN SPORTS 1 + beIN SPORTS 2 + beIN SPORTS 6 + beIN SPORTS 3 + beIN SPORTS 4 + beIN SPORTS 5 + Bloomberg Television + Cartoon Network + CBeebies CCTV-1 CCTV-4 - GBA Satellite TV - CCTV-13 - Phoenix Chinese Channel - OneTV General Channel - Sansha TV - Zhejiang Satellite TV - ABC Australia - Sports Schedule Highlights + CCTV-13 + CGTN + Channel Adult + CINEMAX + Channel NewsAsia + CNBC + CNN International + COLORS + Crime + Investigation + CTI Asia Channel + Da Vinci + Discovery Asia + Discovery Channel + Discovery Science + DMAX + Dragon TV + DW (English) + euronews + NBA TV + Food Network + France 24 + France 24 (French) + GMA Life TV + GMA News TV + GMA Pinoy TV + HBO + HBO Family + HBO Hits + HBO Signature + HISTORY + HITS + HITS MOVIES + Ice Fire + Panda TV + KBS World + Lifetime + Love Nature 4K + Love Nature + Moonbug + MOVIE MOVIE + MTV India + MUTV + NHK WORLD-JAPAN + NHK World Premium + Nickelodeon + Nick Jr. + Now668 + Now Baogu Movies + Now Baogu Superstars + Now Business News Channel + Now Chinese Drama Channel + Now Data + Now Direct + Now Golf 2 + Now Golf 3 + NowJelli + Now NEWS + Now Sports 1 + Now Sports 2 + Now Sports 3 + Now Sports 4 Now Sports 4K 1 - Now Sports 4K 2 - Now Sports 4K 3 - Now Sports Premier League TV + Now Sports 4K 2 + Now Sports 4K 616 + Now Sports 4K 617 + Now Sports 5 + Now Sports 6 + Now Sports 7 + Now Sports 618 + Now Sports 619 + Now Sports 650 + Now Sports Plus Now Sports Premier League 1 Now Sports Premier League 2 Now Sports Premier League 3 Now Sports Premier League 4 Now Sports Premier League 5 Now Sports Premier League 6 - Now Sports Premier League 7 + Now Sports Premier League TV Now Sports Prime - Now Sports 1 - Now Sports 2 - Now Sports 3 - Now Sports 4 - Now Sports 5 - Now Sports 6 - Now Sports 7 - beIN SPORTS 1 - beIN SPORTS 2 - MUTV - Now Sports 641 - NBA TV - beIN SPORTS 3 - beIN SPORTS 4 - beIN SPORTS 5 - beIN SPORTS 6 - beIN SPORTS RUGBY - Now Sports 651 - Now668 - SPOTV - SPOTV2 - Astro Cricket + Now Video Express + Outdoor Channel + Phoenix Chinese Channel + Phoenix InfoNews Channel + ROCK Entertainment + RT Premier Sports - Now Sports Plus - Now Sports 681 - Now Golf 2 - Now Golf 3 - NHK World Premium - TV5MONDE Style - TV5MONDE ASIE - France 24 (French) - GMA Pinoy TV - GMA Life TV - GMA News TV - TFC - DW Deutsch + Sansha TV + Shenzhen TV + Sky News Sony TV (India) - Sony MAX + Sony MAX Sony SAB - MTV India - COLORS - Zee Cinema International - Zee TV - Zee News + Star Bharat Star Gold STAR PLUS - Star Bharat - Adult Promotional Channel - Ice Fire - Channel Adult + TFC + TLC + TV5MONDE ASIE + TV5MONDE Style + tvN + GBA Satellite TV + Viu channel + ViuTV + ViuTVsix + Zee Cinema International + Zee News + Zee TV diff --git a/sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml b/sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml index 50b3ff493..e9cb9be24 100644 --- a/sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml +++ b/sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml @@ -1,147 +1,143 @@ - ViuTVsix - ViuTV - Viu channel - Now Chinese Drama Channel - Now Video Express - NowJelli - HBO Hits - HBO Family - CINEMAX - HBO Signature - HBO - MOVIE MOVIE - Now Baogu Movies - Now Baogu Superstars - Animax - tvN - KBS World - ETTV Asia Channel MOOV Concert/MV - Discovery Asia - Discovery Channel - Animal Planet - Discovery Science - DMAX - TLC - Love Nature - Love Nature 4K - BBC Earth - Outdoor Channel - Crime + Investigation - HISTORY - CNN International - CNBC - BBC News - Bloomberg Television - Channel NewsAsia - Sky News - DW (English) - Al Jazeera English - euronews - France 24 - NHK WORLD-JAPAN - RT - CGTN - Now Direct - Now NEWS - Now Business News Channel - Now Data - Yicai TV - Phoenix InfoNews Channel - Phoenix Hong Kong Channel - ETTV Asia News Watch N Learn - DreamWorks - Cartoon Network - Nickelodeon - Cartoonito - CBeebies - Nick Jr. - Da Vinci - BBC Lifestyle - WarnerTV - AXN - ROCK Entertainment - Lifetime - Food Network - Asian Food Network - Travel Channel - HGTV Netflix - CTI Asia Channel - Shenzhen TV + Sports Schedule Highlights + Now Sports 4K 3 + Now Sports Premier League 7 + Now Sports 641 + Now Sports 647 + Now Sports 651 + Now Sports 652 + Adult Promotional Channel + ABC Australia + Al Jazeera English + Animal Planet + Animax + Asian Food Network + Cricbuzz + AXN + BBC Earth + BBC Lifestyle + BBC News + beIN SPORTS 1 + beIN SPORTS 2 + beIN SPORTS 6 + beIN SPORTS 3 + beIN SPORTS 4 + beIN SPORTS 5 + Bloomberg Television + Cartoon Network + CBeebies CCTV-1 CCTV-4 - GBA Satellite TV - CCTV-13 - Phoenix Chinese Channel - OneTV General Channel - Sansha TV - Zhejiang Satellite TV - ABC Australia - Sports Schedule Highlights + CCTV-13 + CGTN + Channel Adult + CINEMAX + Channel NewsAsia + CNBC + CNN International + COLORS + Crime + Investigation + CTI Asia Channel + Da Vinci + Discovery Asia + Discovery Channel + Discovery Science + DMAX + Dragon TV + DW (English) + euronews + NBA TV + Food Network + France 24 + France 24 (French) + GMA Life TV + GMA News TV + GMA Pinoy TV + HBO + HBO Family + HBO Hits + HBO Signature + HISTORY + HITS + HITS MOVIES + Ice Fire + Panda TV + KBS World + Lifetime + Love Nature 4K + Love Nature + Moonbug + MOVIE MOVIE + MTV India + MUTV + NHK WORLD-JAPAN + NHK World Premium + Nickelodeon + Nick Jr. + Now668 + Now Baogu Movies + Now Baogu Superstars + Now Business News Channel + Now Chinese Drama Channel + Now Data + Now Direct + Now Golf 2 + Now Golf 3 + NowJelli + Now NEWS + Now Sports 1 + Now Sports 2 + Now Sports 3 + Now Sports 4 Now Sports 4K 1 - Now Sports 4K 2 - Now Sports 4K 3 - Now Sports Premier League TV + Now Sports 4K 2 + Now Sports 4K 616 + Now Sports 4K 617 + Now Sports 5 + Now Sports 6 + Now Sports 7 + Now Sports 618 + Now Sports 619 + Now Sports 650 + Now Sports Plus Now Sports Premier League 1 Now Sports Premier League 2 Now Sports Premier League 3 Now Sports Premier League 4 Now Sports Premier League 5 Now Sports Premier League 6 - Now Sports Premier League 7 + Now Sports Premier League TV Now Sports Prime - Now Sports 1 - Now Sports 2 - Now Sports 3 - Now Sports 4 - Now Sports 5 - Now Sports 6 - Now Sports 7 - beIN SPORTS 1 - beIN SPORTS 2 - MUTV - Now Sports 641 - NBA TV - beIN SPORTS 3 - beIN SPORTS 4 - beIN SPORTS 5 - beIN SPORTS 6 - beIN SPORTS RUGBY - Now Sports 651 - Now668 - SPOTV - SPOTV2 - Astro Cricket + Now Video Express + Outdoor Channel + Phoenix Chinese Channel + Phoenix InfoNews Channel + ROCK Entertainment + RT Premier Sports - Now Sports Plus - Now Sports 681 - Now Golf 2 - Now Golf 3 - NHK World Premium - TV5MONDE Style - TV5MONDE ASIE - France 24 (French) - GMA Pinoy TV - GMA Life TV - GMA News TV - TFC - DW Deutsch + Sansha TV + Shenzhen TV + Sky News Sony TV (India) - Sony MAX + Sony MAX Sony SAB - MTV India - COLORS - Zee Cinema International - Zee TV - Zee News + Star Bharat Star Gold STAR PLUS - Star Bharat - Adult Promotional Channel - Ice Fire - Channel Adult + TFC + TLC + TV5MONDE ASIE + TV5MONDE Style + tvN + GBA Satellite TV + Viu channel + ViuTV + ViuTVsix + Zee Cinema International + Zee News + Zee TV From 576ccfce9645e54d8dc5bdf50c592214e46fdaa6 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Thu, 30 Apr 2026 10:50:09 +0300 Subject: [PATCH 40/63] Update dependencies --- package-lock.json | 59 +++++++++++------------------------------------ package.json | 8 ++++--- 2 files changed, 18 insertions(+), 49 deletions(-) diff --git a/package-lock.json b/package-lock.json index 915786605..b6f294865 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ "csv-parser": "^3.2.0", "curl-generator": "^0.5.0", "dayjs": "^1.11.20", - "epg-grabber": "^0.46.1", + "epg-grabber": "^0.46.2", "epg-parser": "^0.5.0", "eslint": "^10.2.1", "eslint-config-prettier": "^10.1.8", @@ -74,8 +74,10 @@ "tough-cookie": "^6.0.1", "tsx": "^4.21.0", "typescript": "^6.0.3", - "typescript-eslint": "^8.58.2", - "uuid": "^13.0.0" + "typescript-eslint": "^8.58.2" + }, + "engines": { + "node": ">=20.20.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -3336,9 +3338,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -3355,9 +3354,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -3374,9 +3370,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -3393,9 +3386,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -3412,9 +3402,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -3431,9 +3418,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -5822,9 +5806,10 @@ } }, "node_modules/epg-grabber": { - "version": "0.46.1", - "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.46.1.tgz", - "integrity": "sha512-yAVcSBzMnPRrLIbFcgSevAC1ccMDh2W0IdndH6N3me9zFIvDm5+I7Q+MkNVWf6mG1x/8A2oFQC17RzKQ/bSDiw==", + "version": "0.46.2", + "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.46.2.tgz", + "integrity": "sha512-pcZD9eo0d5QFqLr/YUXh4SapjrE3MfHvjyIokVpfCVI5wVXkdy3q9SxM8b34hPYPy2caeaCTpZM1yTAeoIOIMw==", + "license": "MIT", "dependencies": { "@freearhey/core": "^0.14.0", "@types/bluebird": "^3.5.42", @@ -5853,7 +5838,7 @@ "epg-grabber": "dist/cli.js" }, "engines": { - "node": ">=22.12.0" + "node": ">=20.20.0" } }, "node_modules/epg-grabber/node_modules/@freearhey/core": { @@ -11510,19 +11495,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "node_modules/uuid": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", - "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist-node/bin/uuid" - } - }, "node_modules/v8-to-istanbul": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", @@ -15490,9 +15462,9 @@ "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" }, "epg-grabber": { - "version": "0.46.1", - "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.46.1.tgz", - "integrity": "sha512-yAVcSBzMnPRrLIbFcgSevAC1ccMDh2W0IdndH6N3me9zFIvDm5+I7Q+MkNVWf6mG1x/8A2oFQC17RzKQ/bSDiw==", + "version": "0.46.2", + "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.46.2.tgz", + "integrity": "sha512-pcZD9eo0d5QFqLr/YUXh4SapjrE3MfHvjyIokVpfCVI5wVXkdy3q9SxM8b34hPYPy2caeaCTpZM1yTAeoIOIMw==", "requires": { "@freearhey/core": "^0.14.0", "@types/bluebird": "^3.5.42", @@ -19309,11 +19281,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "uuid": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", - "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==" - }, "v8-to-istanbul": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", diff --git a/package.json b/package.json index b5b8f92c7..9e829ed3e 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "csv-parser": "^3.2.0", "curl-generator": "^0.5.0", "dayjs": "^1.11.20", - "epg-grabber": "^0.46.1", + "epg-grabber": "^0.46.2", "epg-parser": "^0.5.0", "eslint": "^10.2.1", "eslint-config-prettier": "^10.1.8", @@ -102,10 +102,12 @@ "tough-cookie": "^6.0.1", "tsx": "^4.21.0", "typescript": "^6.0.3", - "typescript-eslint": "^8.58.2", - "uuid": "^13.0.0" + "typescript-eslint": "^8.58.2" }, "overrides": { "esbuild": "0.23.1" + }, + "engines": { + "node": ">=20.20.0" } } From eea4f687467a45a8ae3ea051b757001bb2cf986d Mon Sep 17 00:00:00 2001 From: Toha Date: Fri, 1 May 2026 06:41:46 +0700 Subject: [PATCH 41/63] Update `singtel.com` channels. Signed-off-by: Toha --- sites/singtel.com/singtel.com.channels.xml | 102 ++++++++++----------- sites/singtel.com/singtel.com.config.js | 20 ++-- 2 files changed, 62 insertions(+), 60 deletions(-) diff --git a/sites/singtel.com/singtel.com.channels.xml b/sites/singtel.com/singtel.com.channels.xml index 60f4da732..8611e7238 100644 --- a/sites/singtel.com/singtel.com.channels.xml +++ b/sites/singtel.com/singtel.com.channels.xml @@ -1,49 +1,31 @@ - Hub Premier 5 - Hub Premier 6 - KBS World (HD) - Russia Today (4K) mio Stadium OD mio Sports (HD) mio Sports 2 (HD) mio Sports 3 (HD) - (HD) Outdoor Channel Cricbuzz (HD) Cricbuzz 2 (HD) Cricket Plus MOLA Sport (HD) - FOX News Channel - Bloomberg Originals - HISTORY™ (HD) - HGTV (HD) - TLC (HD) - AFN (HD) - WAKUWAKU JAPAN (HD) (Mandarin / Malay) - HITS NOW (HD) - ROCK Action (HD) - MTV LIVE HD e-Le (HD) Jia Le Channel (HD) - China Movie Channel - ETTV Asia News (HD) Drama Channel - Zee Thirai - Sony YAY! maa movies Zoom TV - WION - Fight Sports (HD) - CBeebies (HD) CM+ - Cinema One Global - ABS-CBN News Channel ABC Australia Adithya TV + ABS-CBN News Channel Animal Planet (HD) Animax (HD) ANIPLUS HD + Arirang TV (HD) Asianet + Asianet Movies + AFN (HD) + Astro Prima HD + Astro Ria HD SAB TV AXN (HD) BBC Earth (HD) @@ -52,12 +34,22 @@ beIN SPORTS 2 (HD) beIN SPORTS 3 (HD) beIN SPORTS 1 (HD) + Bloomberg Originals Bloomberg Television (HD) - Cartoonito (HD) + BRTV International Cartoon Network (HD) + CBeebies (HD) + CCM + CCTV-4 (HD) + CCTV Entertainment + Celestial Movies (HD) CGTN CGTN-Documentary Ch 5 (HD) + Ch 8 (HD) + Ch U (HD) + China Movie Channel + Cinema One Global CINEMAX (HD) Citra Drama (HD) CNA (HD) @@ -66,39 +58,60 @@ Colors Colors Tamil HD Crime + Investigation™ (HD) - Discovery Asia (HD) + CTI Asia (HD) Discovery Channel (HD) + Dragon TV Intl Deutsche Welle (English) - EUROSPORT (HD) - Food Network (HD) + ETTV Asia (HD) + ETTV Asia News (HD) + Fight Sports (HD) + FOX News Channel France 24 (English) + France 24 (French) + Global Trekker (HD) GMA Life TV GMA News TV GMA Pinoy TV - HBO HD + HBO HD HBO Family (HD) HBO Hits (HD) HBO Signature (HD) + HGTV (HD) + HISTORY™ (HD) HITS (HD) HITS Movies HD + HITS NOW (HD) Hub Premier 1 Hub Premier 2 Hub Premier 3 Hub Premier 4 + Hub Premier 5 + Hub Premier 6 + Hunan International + TVB Jade (HD) + KBS World (HD) KTV HD Lifetime (HD) + Love Nature (HD) MTV India NHK World – Japan (HD) NHK World Premium Nickelodeon Asia HD Nick Jr. + now Jelli (HD) + ONE HD (Mandarin) ONE HD (Malay) + (HD) Outdoor Channel Pesona HD + Phoenix InfoNews Premier Sports + ROCK Action (HD) ROCK Entertainment (HD) + Russia Today Sky News HD SET (HINDI) SONY MAX + Sony YAY! SPOTV 2 (HD) SPOTV (HD) Star Bharat @@ -110,33 +123,18 @@ Suria (HD) The Filipino Channel Times Now + TLC (HD) TRACE Sports Stars HD + TVBS Asia + TVBS News + TVB Xing He (HD) + tvN HD (Mandarin) tvN HD (Malay) Vasantham (HD) Vijay TV + WAKUWAKU JAPAN (HD) (Mandarin) + WION Zee Tamil + Zee Thirai ZEE TV - France 24 (French) - Asianet Movies - Astro Prima HD - Astro Ria HD - ETTV Asia (HD) - BRTV International - CCM - CCTV-4 (HD) - CCTV Entertainment - Celestial Movies (HD) - Ch 8 (HD) - Ch U (HD) - CTI Asia (HD) - Dragon TV Intl - Hunan International - TVB Jade (HD) - now Jelli (HD) - ONE HD (Mandarin) - Phoenix InfoNews - TVBS Asia - TVBS News - TVB Xing He (HD) - tvN HD (Mandarin) diff --git a/sites/singtel.com/singtel.com.config.js b/sites/singtel.com/singtel.com.config.js index 07d3a33e0..c39e7b651 100644 --- a/sites/singtel.com/singtel.com.config.js +++ b/sites/singtel.com/singtel.com.config.js @@ -19,7 +19,7 @@ module.exports = { )}.json` }, parser({ content, channel }) { - let programs = [] + const programs = [] const items = parseItems(content, channel) items.forEach(item => { const start = dayjs.tz(item.startDateTime, 'Asia/Singapore') @@ -36,6 +36,7 @@ module.exports = { return programs }, async channels() { + const channels = {} const axios = require('axios') const cheerio = require('cheerio') @@ -45,16 +46,19 @@ module.exports = { .catch(console.log) const $ = cheerio.load(data) - let datamodel = $('ux-tv-channel-epg').attr('datamodel') - datamodel = JSON.parse(datamodel) + const datamodel = JSON.parse($('ux-tv-channel-epg').attr('datamodel')) - return datamodel.tvChannelLists.map(item => { - return { - lang: 'en', - site_id: item.epgChannelId, - name: item.title.trim() + datamodel?.tvChannelLists.forEach(item => { + if (channels[item.epgChannelId] === undefined) { + channels[item.epgChannelId] = { + lang: 'en', + site_id: item.epgChannelId, + name: item.title.trim() + } } }) + + return Object.values(channels) } } From 10c32fceb4cc7bd9420487ff774362a3eda6a67e Mon Sep 17 00:00:00 2001 From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 02:04:26 +0000 Subject: [PATCH 42/63] [Bot] Update SITES.md Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/25241081676) workflow. --- SITES.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/SITES.md b/SITES.md index 0400bef4d..d0ed29f48 100644 --- a/SITES.md +++ b/SITES.md @@ -37,7 +37,7 @@ ctc.ru11🟢 cubmu.com7662🟢 cyta.com.cy1170🟢 - dens.tv5448🟢 + dens.tv4341🟢 derana.lk11🟢 digea.gr880🟢 digiturk.com.tr11291🟢 @@ -98,7 +98,7 @@ meuguia.tv10296🟢 mewatch.sg11938🟢 mi.tv2084614🟢 - mncvision.id276221🟢 + mncvision.id214212🟢 moji.id11🟢 mojmaxtv.hrvatskitelekom.hr2430🟢 mon-programme-tv.be11194🟢 @@ -116,7 +116,7 @@ nostv.pt161152🟢 novacyprus.com2924🟢 novasports.gr1616🟢 - nowplayer.now.com288227🟢 + nowplayer.now.com280258🟢 nuevosiglo.com.uy17346🟢 nzxmltv.com532118🟢 ontvtonight.com5177528🟢 @@ -152,7 +152,7 @@ sat.tv30308249🟢 shahid.mbc.net213177🟢 siba.com.co24488🟢 - singtel.com139100🟢 + singtel.com137123🟢 sjonvarp.is1313🟢 sky.co.nz9188🟢 sky.com533471🟢 @@ -176,7 +176,7 @@ telkussa.fi6632🟢 telsu.fi1715🟢 thesportplus.com30🟢 - tivie.id4542🟢 + tivie.id5656🟢 tivu.tv809🟢 toonamiaftermath.com11🟢 turksatkablo.com.tr177118🟢 @@ -221,10 +221,10 @@ tvtv.us22992230🟢 v3.myafn.dodmedia.osd.mil88🟢 vantagetv.ee31🟢 - vidio.com5752🟢 + vidio.com6562🟢 virginmediatelevision.ie55🟢 virgintvgo.virginmedia.com238181🟢 - visionplus.id250224🟢 + visionplus.id266234🟢 vivoplay.com.br3970🟢 vodafone.pt146141🟢 vrt.be1010🟢 From b11f0bb1256f05211aae53143f4f86428557cf07 Mon Sep 17 00:00:00 2001 From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com> Date: Sat, 2 May 2026 04:13:50 +0000 Subject: [PATCH 43/63] [Bot] Update SITES.md Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/25243490109) workflow. --- SITES.md | 490 +++++++++++++++++++++++++++---------------------------- 1 file changed, 245 insertions(+), 245 deletions(-) diff --git a/SITES.md b/SITES.md index d0ed29f48..41fa4eff7 100644 --- a/SITES.md +++ b/SITES.md @@ -2,252 +2,252 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SiteChannels
(total / with xmltv-id)
StatusNotes
SiteChannelsStatusNotes
9tv.co.il11🟢
abc.net.au5480🟢
airtelxstream.in972667🟢
aljazeera.com33🟢
allente.no3190🟢
andorradifusio.ad11🟢
anteltv.com.uy5446🟢
antennaeurope.gr11🟢
antennapacific.gr11🟢
antennasatellite.gr11🟢
app.tvufop.com.br11🟢
arianatelevision.com11🟢
arirang.com33🟢
artonline.tv55🟢
awilime.com1100🟢
ayn.om44🟢
bein.com134134🟢
beinsports.com13081🟢
berrymedia.co.kr55🟢
cableplus.com.uy17144🟢
canalplus.com13940172🟢
cgates.lt4729🟢
chada.ma11🟢
chaines-tv.orange.fr397327🟢
claro.com.br2730🟢
clarotvmais.com.br1580🟢
clickthecity.com3230🟢
content.astro.com.my14993🟢
cosmotetv.gr1090🟢
ctc.ru11🟢
cubmu.com7662🟢
cyta.com.cy1170🟢
dens.tv4341🟢
derana.lk11🟢
digea.gr880🟢
digiturk.com.tr11291🟢
directv.com11560🟢
directv.com.ar3710🟢
directv.com.uy37459🟢
dishtv.in603548🟢
distro.tv336125🟢
dna.fi1230🟢
dsmart.com.tr10076🟢
dstv.com297980🟢
dtv8.net11🟢
elcinema.com198196🟢
ena.skylifetv.co.kr66🟢
energeek.cl62🟢
entertainment.ie10580🟢
epg.112114.xyz9421🟢
epg.iptvx.one3329729🟢
epg.telemach.ba4760🟢
epgmaster.com11🟢
epgshare01.online2070615🟢
foxsports.com.au77🟢
foxtel.com.au9960🟢
france.tv158🟢
freetv.tv77🟢
freeview.co.uk352241🟢
frikanalen.no11🟢
galamtv.kz2722🟢
gatotv.com1925342🟢
getafteritmedia.com55🟢
gigatv.3bbtv.co.th7937🟢
go3.ee1470🟢
guiadetv.com1240🟢
guida.tv8886🟢
guidatv.sky.it154154🟢
guidetnt.com6968🟢
horizon.tv184172🟢
hoy.tv31🟢
i.mjh.nz108702935🟢
i24news.tv43🟢
iltalehti.fi1470🟢
ionplustv.com11🟢
ipko.tv194151🟢
jiotv.com10940🟢
knr.gl11🟢
kvf.fo11🟢
m.tv.sms.cz1027449🟢
m.tving.com3026🟢
magticom.ge240110🟢
mako.co.il11🟢
makrodigitaltelevision.com11🟢
maxtvgo.mk11048🟢
mediagenie.co.kr54🟢
mediaklikk.hu88🟢
mediasetinfinity.mediaset.it1313🟢
melita.com127110🟢
meo.pt212199🟢
meuguia.tv10296🟢
mewatch.sg11938🟢
mi.tv2084614🟢
mncvision.id214212🟢
moji.id11🟢
mojmaxtv.hrvatskitelekom.hr2430🟢
mon-programme-tv.be11194🟢
movistarplus.es1380🟢
mtel.ba5010🟢
mts.rs4570🟢
mujtvprogram.cz213190🟢
musor.tv181142🟢
mysky.com.ph11543🟢
mytelly.co.uk488387🟢
mytvsuper.com10899🟢
neo.io337230🟢
nhkworldpremium.com22🟢
nhl.com11🟢
nostv.pt161152🟢
novacyprus.com2924🟢
novasports.gr1616🟢
nowplayer.now.com280258🟢
nuevosiglo.com.uy17346🟢
nzxmltv.com532118🟢
ontvtonight.com5177528🟢
opto.sic.pt33🟢
orangetv.orange.es273151🟢
osn.com13486🟢
passie.nl11🟢
pbsguam.org11🟢
pickx.be404375🟢
player.ee.co.uk231180🟢
playtv.unifi.com.my6661🟢
plex.tv1315555🟢
pluto.tv2591415🟢
port.hu1510🟢
programacion-tv.elpais.com195101🟢
programacion.tcc.com.uy14955🟢
programetv.ro331223🟢
programme-tv.net299171🟢
programme-tv.vini.pf582🟢
programme.tvb.com86🟢
programtv.onet.pl590356🟢
raiplay.it1713🟢
reportv.com.ar16395🟢
rikstv.no800🟢
rotana.net3226🔴https://github.com/iptv-org/epg/issues/3018
roya-tv.com108🟢https://github.com/iptv-org/epg/issues/3108
rthk.hk88🟢
rtmklik.rtm.gov.my86🟢
rtp.pt1010🟢
rts.ch33🟢
ruv.is22🟢
s.mxtv.jp22🟢
sat.tv30308249🟢
shahid.mbc.net213177🟢
siba.com.co24488🟢
singtel.com137123🟢
sjonvarp.is1313🟢
sky.co.nz9188🟢
sky.com533471🟢
sky.de7474🟢
skylife.co.kr2570🟢
skyperfectv.co.jp19667🟢
snrt.ma117🟢
sporttv.pt99🟢
starhubtvplus.com236206🟢
startimestv.com7758🟢
streamingtvguides.com30661🟢
superguidatv.it204159🟢
syn.is90🟢
taiwanplus.com11🟢
tapdmv.com397🟢
tataplay.com1097727🟢
telebilbao.es11🟢
teleboy.ch3250🟢
telenet.tv26091🟢
teliatv.ee342233🟢
telkussa.fi6632🟢
telsu.fi1715🟢
thesportplus.com30🟢
tivie.id5656🟢
tivu.tv809🟢
toonamiaftermath.com11🟢
turksatkablo.com.tr177118🟢
tv-programme.telecablesat.fr268248🟢
tv-spored.siol.net3120🟢
tv.blue.ch1030556🟢
tv.boxbg.net830🟢
tv.cctv.com9488🟢
tv.dir.bg10082🟢
tv.lv13749🟢
tv.magenta.at307219🟢
tv.mail.ru664632🟢
tv.movistar.co970🟢
tv.movistar.com.pe26231🟢
tv.nu199180🟢
tv.post.lu332241🟢
tv.sfr.fr489438🟢
tv.trueid.net24635🟢
tv24.co.uk107238🟢
tv24.se308136🟢
tv2go.t-2.net342232🟢
tvarenasport.com1818🟢
tvarenasport.hr1010🟢
tvcesoir.fr135132🟢
tvcubana.icrt.cu1010🟢
tvgids.nl115101🟢
tvguide.com153153🟢
tvguide.myjcom.jp134128🟢
tvhebdo.com317213🟢
tvheute.at5348🟢
tvi.iol.pt77🟢
tvim.tv2519🟢
tvinsider.com3740🟢
tvireland.ie334288🟢
tvkaista.org1490🟢
tvmi.mt33🟢
tvmusor.hu9966🟢
tvmustra.hu1890🟢
tvpassport.com192872496🟢
tvplus.com.tr150144🟢
tvprofil.com8865552🔴https://github.com/iptv-org/epg/issues/3032
tvtv.us22992230🟢
v3.myafn.dodmedia.osd.mil88🟢
vantagetv.ee31🟢
vidio.com6562🟢
virginmediatelevision.ie55🟢
virgintvgo.virginmedia.com238181🟢
visionplus.id266234🟢
vivoplay.com.br3970🟢
vodafone.pt146141🟢
vrt.be1010🟢
vtm.be76🟢
walesi.com.fj98🟢
watch.sportsnet.ca88🟢
watch.whaletvplus.com364166🟢
watchyour.tv4024🟢
wavve.com7776🟢
web.magentatv.de337216🟢
webtv.delta.nl247204🟢
webtv.sk1860🟢
winplay.co30🟢
worldfishingnetwork.com11🟢
www3.nhk.or.jp11🟢
xem.kplus.vn770🟢
xumo.tv415191🟢
yes.co.il1740🟢
zap.co.ao11463🟢
zap2it.com5950🟢
zee5.com115105🟢
ziggogo.tv156150🟡https://github.com/iptv-org/epg/issues/2977, https://github.com/iptv-org/epg/issues/2976
znbc.co.zm44🟢
zuragt.mn3427🟢
9tv.co.il1🟢
abc.net.au548🟢
airtelxstream.in972🟢
aljazeera.com3🟢
allente.no319🟢
andorradifusio.ad1🟢
anteltv.com.uy54🟢
antennaeurope.gr1🟢
antennapacific.gr1🟢
antennasatellite.gr1🟢
app.tvufop.com.br1🟢
arianatelevision.com1🟢
arirang.com3🟢
artonline.tv5🟢
awilime.com110🟢
ayn.om4🟢
bein.com67🟢
beinsports.com78🟢
berrymedia.co.kr5🟢
cableplus.com.uy171🟢
canalplus.com13940🟢
cgates.lt47🟢
chada.ma1🟢
chaines-tv.orange.fr397🟢
claro.com.br273🟢
clarotvmais.com.br158🟢
clickthecity.com32🟢
content.astro.com.my149🟢
cosmotetv.gr109🟢
ctc.ru1🟢
cubmu.com76🟢
cyta.com.cy117🟢
dens.tv43🟢
derana.lk1🟢
digea.gr88🟢
digiturk.com.tr112🟢
directv.com1156🟢
directv.com.ar371🟢
directv.com.uy374🟢
dishtv.in603🟢
distro.tv336🟢
dna.fi123🟢
dsmart.com.tr100🟢
dstv.com2979🟢
dtv8.net1🟢
elcinema.com104🟢
ena.skylifetv.co.kr6🟢
energeek.cl6🟢
entertainment.ie105🟢
epg.112114.xyz942🟢
epg.iptvx.one3329🟢
epg.telemach.ba364🟢
epgmaster.com1🟢
epgshare01.online20706🟢
foxsports.com.au7🟢
foxtel.com.au99🟢
france.tv15🟢
freetv.tv7🟢
freeview.co.uk352🟢
frikanalen.no1🟢
galamtv.kz27🟢
gatotv.com1925🟢
getafteritmedia.com5🟢
gigatv.3bbtv.co.th79🟢
go3.ee147🟢
guiadetv.com124🟢
guida.tv88🟢
guidatv.sky.it154🟢
guidetnt.com69🟢
horizon.tv184🟢
hoy.tv3🟢
i.mjh.nz10870🟢
i24news.tv4🟢
iltalehti.fi147🟢
ionplustv.com1🟢
ipko.tv194🟢
jiotv.com1094🟢
knr.gl1🟢
kvf.fo1🟢
m.tv.sms.cz1027🟢
m.tving.com30🟢
magticom.ge240🟢
mako.co.il1🟢
makrodigitaltelevision.com1🟢
maxtvgo.mk110🟢
mediagenie.co.kr5🟢
mediaklikk.hu8🟢
mediasetinfinity.mediaset.it13🟢
melita.com127🟢
meo.pt212🟢
meuguia.tv102🟢
mewatch.sg119🟢
mi.tv2084🟢
mncvision.id107🟢
moji.id1🟢
mojmaxtv.hrvatskitelekom.hr243🟢
mon-programme-tv.be111🟢
movistarplus.es138🟢
mtel.ba501🟢
mts.rs457🟢
mujtvprogram.cz213🟢
musor.tv181🟢
mysky.com.ph115🟢
mytelly.co.uk488🟢
mytvsuper.com54🟢
neo.io337🟢
nhkworldpremium.com1🟢
nhl.com1🟢
nostv.pt161🟢
novacyprus.com29🟢
novasports.gr16🟢
nowplayer.now.com140🟢
nuevosiglo.com.uy173🟢
nzxmltv.com532🟢
ontvtonight.com5177🟢
opto.sic.pt3🟢
orangetv.orange.es273🟢
osn.com67🟢
passie.nl1🟢
pbsguam.org1🟢
pickx.be404🟢
player.ee.co.uk231🟢
playtv.unifi.com.my66🟢
plex.tv1315🟢
pluto.tv2591🟢
port.hu151🟢
programacion-tv.elpais.com195🟢
programacion.tcc.com.uy149🟢
programetv.ro331🟢
programme-tv.net299🟢
programme-tv.vini.pf58🟢
programme.tvb.com4🟢
programtv.onet.pl590🟢
raiplay.it17🟢
reportv.com.ar163🟢
rikstv.no80🟢
rotana.net16🔴https://github.com/iptv-org/epg/issues/3018
roya-tv.com10🟢https://github.com/iptv-org/epg/issues/3108
rthk.hk4🟢
rtmklik.rtm.gov.my8🟢
rtp.pt10🟢
rts.ch3🟢
ruv.is2🟢
s.mxtv.jp2🟢
sat.tv28270🟢
shahid.mbc.net71🟢
siba.com.co244🟢
singtel.com137🟢
sjonvarp.is13🟢
sky.co.nz91🟢
sky.com533🟢
sky.de74🟢
skylife.co.kr257🟢
skyperfectv.co.jp196🟢
snrt.ma11🟢
sporttv.pt9🟢
starhubtvplus.com118🟢
startimestv.com77🟢
streamingtvguides.com3066🟢
superguidatv.it204🟢
syn.is9🟢
taiwanplus.com1🟢
tapdmv.com39🟢
tataplay.com917🟢
telebilbao.es1🟢
teleboy.ch325🟢
telenet.tv260🟢
teliatv.ee342🟢
telkussa.fi66🟢
telsu.fi17🟢
thesportplus.com3🟢
tivie.id56🟢
tivu.tv80🟢
toonamiaftermath.com1🟢
turksatkablo.com.tr177🟢
tv-programme.telecablesat.fr268🟢
tv-spored.siol.net312🟢
tv.blue.ch1030🟢
tv.boxbg.net83🟢
tv.cctv.com94🟢
tv.dir.bg100🟢
tv.lv137🟢
tv.magenta.at307🟢
tv.mail.ru664🟢
tv.movistar.co97🟢
tv.movistar.com.pe262🟢
tv.nu199🟢
tv.post.lu332🟢
tv.sfr.fr489🟢
tv.trueid.net123🟢
tv24.co.uk1072🟢
tv24.se308🟢
tv2go.t-2.net342🟢
tvarenasport.com18🟢
tvarenasport.hr10🟢
tvcesoir.fr135🟢
tvcubana.icrt.cu10🟢
tvgids.nl115🟢
tvguide.com153🟢
tvguide.myjcom.jp134🟢
tvhebdo.com317🟢
tvheute.at53🟢
tvi.iol.pt7🟢
tvim.tv25🟢
tvinsider.com374🟢
tvireland.ie334🟢
tvkaista.org149🟢
tvmi.mt3🟢
tvmusor.hu99🟢
tvmustra.hu189🟢
tvpassport.com19287🟢
tvplus.com.tr150🟢
tvprofil.com8865🔴https://github.com/iptv-org/epg/issues/3032
tvtv.us2299🟢
v3.myafn.dodmedia.osd.mil8🟢
vantagetv.ee3🟢
vidio.com65🟢
virginmediatelevision.ie5🟢
virgintvgo.virginmedia.com238🟢
visionplus.id133🟢
vivoplay.com.br397🟢
vodafone.pt146🟢
vrt.be10🟢
vtm.be7🟢
walesi.com.fj9🟢
watch.sportsnet.ca8🟢
watch.whaletvplus.com364🟢
watchyour.tv40🟢
wavve.com77🟢
web.magentatv.de337🟢
webtv.delta.nl247🟢
webtv.sk186🟢
winplay.co3🟢
worldfishingnetwork.com1🟢
www3.nhk.or.jp1🟢
xem.kplus.vn77🟢
xumo.tv415🟢
yes.co.il174🟢
zap.co.ao114🟢
zap2it.com595🟢
zee5.com115🟢
ziggogo.tv156🟡https://github.com/iptv-org/epg/issues/2977, https://github.com/iptv-org/epg/issues/2976
znbc.co.zm4🟢
zuragt.mn34🟢
From 59b893400a4c0450e0bfd4ac0522fff3393d74f4 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 2 May 2026 15:54:25 +0300 Subject: [PATCH 44/63] Delete novacyprus.com --- sites/novacyprus.com/__data__/content.json | 1 - sites/novacyprus.com/__data__/no_content.json | 1 - .../novacyprus.com.channels.xml | 32 --------- sites/novacyprus.com/novacyprus.com.config.js | 67 ------------------- sites/novacyprus.com/novacyprus.com.test.js | 49 -------------- sites/novacyprus.com/readme.md | 21 ------ 6 files changed, 171 deletions(-) delete mode 100644 sites/novacyprus.com/__data__/content.json delete mode 100644 sites/novacyprus.com/__data__/no_content.json delete mode 100644 sites/novacyprus.com/novacyprus.com.channels.xml delete mode 100644 sites/novacyprus.com/novacyprus.com.config.js delete mode 100644 sites/novacyprus.com/novacyprus.com.test.js delete mode 100644 sites/novacyprus.com/readme.md diff --git a/sites/novacyprus.com/__data__/content.json b/sites/novacyprus.com/__data__/content.json deleted file mode 100644 index f3504a962..000000000 --- a/sites/novacyprus.com/__data__/content.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"datetime":"2021-11-17 06:20:00","day":"Wednesday","numDay":17,"numMonth":11,"month":"November","channelName":"Cyprus Novacinema1HD","channelLog":"https://ssl2.novago.gr/EPG/jsp/images/universal/film/logo/20200210/000100/XTV100000762/d6a2f5e0-dbc0-49c7-9843-e3161ca5ae5d.png","cid":"42","ChannelId":"614","startingTime":"06:20","endTime":"08:10","title":"Δεσμοί Αίματος","description":"Θρίλερ Μυστηρίου","duration":"109","slotDuration":"110","bref":"COMMOBLOOX","mediaItems":[{"MediaListTypeId":"6","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_GUIDE_STILL.jpg"},{"MediaListTypeId":"7","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_POSTER_CROSS.jpg"},{"MediaListTypeId":"8","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_ICON_CYP.jpg"},{"MediaListTypeId":"9","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_POSTER_CYP.jpg"},{"MediaListTypeId":"10","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_BACKGROUND_CYP.jpg"}]},{"datetime":"2021-11-17 06:00:00","day":"Wednesday","numDay":17,"numMonth":11,"month":"November","channelName":"Cyprus Novacinema2HD","channelLog":"https://ssl2.novago.gr/EPG/jsp/images/universal/film/logo/20200210/000100/XTV100000763/24e05354-d6ad-4949-bcb3-a81d1c1d2cba.png","cid":"62","ChannelId":"653","startingTime":"06:00","endTime":"07:40","title":"Ανυπόφοροι Γείτονες","description":"Κωμωδία","duration":"93","slotDuration":"100","bref":"NEIGHBORSX","mediaItems":[{"MediaListTypeId":"7","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_POSTER_CROSS.jpg"},{"MediaListTypeId":"8","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_ICON_CYP.jpg"},{"MediaListTypeId":"9","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_POSTER_CYP.jpg"},{"MediaListTypeId":"10","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_BACKGROUND_CYP.jpg"}]}]} \ No newline at end of file diff --git a/sites/novacyprus.com/__data__/no_content.json b/sites/novacyprus.com/__data__/no_content.json deleted file mode 100644 index a0b8012cf..000000000 --- a/sites/novacyprus.com/__data__/no_content.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[],"total":0,"pages":0} \ No newline at end of file diff --git a/sites/novacyprus.com/novacyprus.com.channels.xml b/sites/novacyprus.com/novacyprus.com.channels.xml deleted file mode 100644 index 6354918b0..000000000 --- a/sites/novacyprus.com/novacyprus.com.channels.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - Cyprus Novasports5HD - Cyprus NovalifeHD - InsightTV - Cyprus Novasports4HD - MyZen TV - Mad TV - Discovery - Βουλή - Τηλεόραση - Nickelodeon - FOX Life - Smile tv - Viasat History HD - MAD GREEKZ - One Channel - Travel Channel HD - E! Entertainment - FOX - Boomerang - Cyprus Novacinema1HD - National Geographic Wild HD - National Geographic HD - Cyprus Novasports2HD - Animal Planet - NR1 HD - Cyprus Novacinema3HD - Cyprus Novacinema2HD - Cyprus Novacinema4HD - Cyprus Novasports3HD - MTV Live HD - diff --git a/sites/novacyprus.com/novacyprus.com.config.js b/sites/novacyprus.com/novacyprus.com.config.js deleted file mode 100644 index 6bf63c84b..000000000 --- a/sites/novacyprus.com/novacyprus.com.config.js +++ /dev/null @@ -1,67 +0,0 @@ -process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 - -const axios = require('axios') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const customParseFormat = require('dayjs/plugin/customParseFormat') - -dayjs.extend(utc) -dayjs.extend(timezone) -dayjs.extend(customParseFormat) - -module.exports = { - site: 'novacyprus.com', - days: 2, - url({ date }) { - return `https://www.novacyprus.com/api/v1/tvprogram/from/${date.format('YYYYMMDD')}/to/${date - .add(1, 'd') - .format('YYYYMMDD')}` - }, - parser({ content, channel }) { - let programs = [] - const items = parseItems(content, channel) - items.forEach(item => { - const start = parseStart(item) - const stop = start.add(item.slotDuration, 'm') - programs.push({ - title: item.title, - description: item.description, - image: parseImage(item), - start, - stop - }) - }) - - return programs - }, - async channels() { - const channels = await axios - .get('https://www.novacyprus.com/api/v1/guide/dailychannels') - .then(r => r.data) - .catch(console.log) - - return channels.map(item => { - return { - lang: 'el', - site_id: item.ChannelId, - name: item.nameEl - } - }) - } -} - -function parseStart(item) { - return dayjs.tz(item.datetime, 'YYYY-MM-DD HH:mm:ss', 'Asia/Nicosia') -} - -function parseImage(item) { - return item.mediaItems.length ? item.mediaItems[0].CdnUrl : null -} - -function parseItems(content, channel) { - const data = JSON.parse(content) - if (!data || !Array.isArray(data.nodes)) return [] - - return data.nodes.filter(i => i.ChannelId === channel.site_id) -} diff --git a/sites/novacyprus.com/novacyprus.com.test.js b/sites/novacyprus.com/novacyprus.com.test.js deleted file mode 100644 index 0f4de631a..000000000 --- a/sites/novacyprus.com/novacyprus.com.test.js +++ /dev/null @@ -1,49 +0,0 @@ -const { parser, url } = require('./novacyprus.com.config.js') -const fs = require('fs') -const path = require('path') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') -dayjs.extend(customParseFormat) -dayjs.extend(utc) - -const date = dayjs.utc('2021-11-17', 'YYYY-MM-DD').startOf('d') -const channel = { - site_id: '614', - xmltv_id: 'NovaCinema1.gr' -} - -it('can generate valid url', () => { - expect(url({ date })).toBe( - 'https://www.novacyprus.com/api/v1/tvprogram/from/20211117/to/20211118' - ) -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json')) - const result = parser({ content, channel }).map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(result).toMatchObject([ - { - start: '2021-11-17T04:20:00.000Z', - stop: '2021-11-17T06:10:00.000Z', - title: 'Δεσμοί Αίματος', - description: 'Θρίλερ Μυστηρίου', - image: - 'http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_GUIDE_STILL.jpg' - } - ]) -}) - -it('can handle empty guide', () => { - const result = parser({ - date, - channel, - content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json')) - }) - expect(result).toMatchObject([]) -}) diff --git a/sites/novacyprus.com/readme.md b/sites/novacyprus.com/readme.md deleted file mode 100644 index 6695d154c..000000000 --- a/sites/novacyprus.com/readme.md +++ /dev/null @@ -1,21 +0,0 @@ -# novacyprus.com - -https://www.novacyprus.com/en/node/32742 - -### Download the guide - -```sh -npm run grab --- --sites=novacyprus.com -``` - -### Update channel list - -```sh -npm run channels:parse --- --config=./sites/novacyprus.com/novacyprus.com.config.js --output=./sites/novacyprus.com/novacyprus.com.channels.xml -``` - -### Test - -```sh -npm test --- novacyprus.com -``` From a4299a3741bd68a25e535a15a1723c560d131e56 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 2 May 2026 16:00:14 +0300 Subject: [PATCH 45/63] Update directv.com.uy.config.js --- sites/directv.com.uy/directv.com.uy.config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/sites/directv.com.uy/directv.com.uy.config.js b/sites/directv.com.uy/directv.com.uy.config.js index 6dd1a268e..58cf8feca 100644 --- a/sites/directv.com.uy/directv.com.uy.config.js +++ b/sites/directv.com.uy/directv.com.uy.config.js @@ -1,4 +1,3 @@ -process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') From 040c7e97d7936cbcd348a84385c6e7298b733b2d Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 2 May 2026 16:03:42 +0300 Subject: [PATCH 46/63] Update directv.com.ar.config.js --- sites/directv.com.ar/directv.com.ar.config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/sites/directv.com.ar/directv.com.ar.config.js b/sites/directv.com.ar/directv.com.ar.config.js index fef6a12fe..59df620c5 100644 --- a/sites/directv.com.ar/directv.com.ar.config.js +++ b/sites/directv.com.ar/directv.com.ar.config.js @@ -1,4 +1,3 @@ -process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 const dayjs = require('dayjs') const axios = require('axios') const utc = require('dayjs/plugin/utc') From 75710e87cd6f4eeba5c61ca322ec643203c2d511 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 2 May 2026 16:09:27 +0300 Subject: [PATCH 47/63] Update artonline.tv.config.js --- sites/artonline.tv/artonline.tv.config.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/sites/artonline.tv/artonline.tv.config.js b/sites/artonline.tv/artonline.tv.config.js index b5abb1346..2916314bb 100644 --- a/sites/artonline.tv/artonline.tv.config.js +++ b/sites/artonline.tv/artonline.tv.config.js @@ -1,5 +1,3 @@ -process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 - const customParseFormat = require('dayjs/plugin/customParseFormat') const timezone = require('dayjs/plugin/timezone') const utc = require('dayjs/plugin/utc') From 143df355a55de275af37c88f25e65b4fc08ddb9c Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 2 May 2026 16:11:49 +0300 Subject: [PATCH 48/63] Update clickthecity.com.config.js --- sites/clickthecity.com/clickthecity.com.config.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/sites/clickthecity.com/clickthecity.com.config.js b/sites/clickthecity.com/clickthecity.com.config.js index b65096349..1706b522d 100644 --- a/sites/clickthecity.com/clickthecity.com.config.js +++ b/sites/clickthecity.com/clickthecity.com.config.js @@ -19,10 +19,7 @@ module.exports = { }, data({ date }) { const params = new URLSearchParams() - params.append( - 'optDate', - dayjs(date.valueOf()).tz('Asia/Manila').format('YYYY-MM-DD') - ) + params.append('optDate', dayjs(date.valueOf()).tz('Asia/Manila').format('YYYY-MM-DD')) params.append('optTime', '00:00:00') return params @@ -79,7 +76,7 @@ function parseStart($item, date) { const url = $item('td.cPrg > a').attr('href') || '' let [, time] = url.match(/starttime=(\d{1,2}%3A\d{2}\+(AM|PM))/) || [null, null] if (!time) return null - time = `${date.format('YYYY-MM-DD')} ${time.replace('%3A', ':').replace('+', ' ')}` + time = `${date.format('YYYY-MM-DD')} ${decodeURIComponent(time).replace(/\+/g, ' ')}` return dayjs.tz(time, 'YYYY-MM-DD h:mm A', 'Asia/Manila').utc() } @@ -88,7 +85,7 @@ function parseStop($item, date) { const url = $item('td.cPrg > a').attr('href') || '' let [, time] = url.match(/endtime=(\d{1,2}%3A\d{2}\+(AM|PM))/) || [null, null] if (!time) return null - time = `${date.format('YYYY-MM-DD')} ${time.replace('%3A', ':').replace('+', ' ')}` + time = `${date.format('YYYY-MM-DD')} ${decodeURIComponent(time).replace(/\+/g, ' ')}` return dayjs.tz(time, 'YYYY-MM-DD h:mm A', 'Asia/Manila').utc() } From 9db9f16847ab6a8247bb9d15b66ddda9904c76df Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 2 May 2026 16:15:46 +0300 Subject: [PATCH 49/63] Update streamingtvguides.com.config.js --- .../streamingtvguides.com/streamingtvguides.com.config.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sites/streamingtvguides.com/streamingtvguides.com.config.js b/sites/streamingtvguides.com/streamingtvguides.com.config.js index 28c3e0a0b..bfdd6dd92 100644 --- a/sites/streamingtvguides.com/streamingtvguides.com.config.js +++ b/sites/streamingtvguides.com/streamingtvguides.com.config.js @@ -30,7 +30,10 @@ module.exports = { }) }) - programs = sortBy(uniqBy(programs, p => p.start), p => p.start.valueOf()) + programs = sortBy( + uniqBy(programs, p => p.start), + p => p.start.valueOf() + ) return programs }, @@ -45,7 +48,7 @@ module.exports = { const $ = cheerio.load(data) $('#channel-group-all > div > div').each((i, el) => { - const site_id = $(el).find('input').attr('value').replace('&', '&') + const site_id = $(el).find('input').attr('value').replace(/&/g, '&') const label = $(el).text().trim() const svgTitle = $(el).find('svg').attr('alt') const name = (label || svgTitle || '').replace(site_id, '').trim() From e58f8a2d2be4110fdb2412c4edf6fe33123bf2b5 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 2 May 2026 16:18:05 +0300 Subject: [PATCH 50/63] Create certificate.pem --- .../__data__/certificate.pem | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 sites/toonamiaftermath.com/__data__/certificate.pem diff --git a/sites/toonamiaftermath.com/__data__/certificate.pem b/sites/toonamiaftermath.com/__data__/certificate.pem new file mode 100644 index 000000000..09d1850d9 --- /dev/null +++ b/sites/toonamiaftermath.com/__data__/certificate.pem @@ -0,0 +1,89 @@ +-----BEGIN CERTIFICATE----- +MIIFBjCCA+6gAwIBAgISBqgDKu02NonzjkNEeHx7z9iZMA0GCSqGSIb3DQEBCwUA +MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD +EwNSMTMwHhcNMjYwNDMwMDkwMTM4WhcNMjYwNzI5MDkwMTM3WjAhMR8wHQYDVQQD +DBYqLnRvb25hbWlhZnRlcm1hdGguY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAmqz8whacnCOafltHQbNkcmV5J04A0aKqi8SoPu3zl+x0n30GXHkr +7ssaHaXGb/LhIHQ71b1VrspDMcgb204YmSDYE0Ox5tmEt9+toRRkaR6BuZk2IPgI +Vuhx4z6PIYoY4BPq0wxqAzWCxKOCjN2PcEbzczVOfRnaI8JYWPXF7WrwkwB6gz7M +E2pq3/pS8+OIjMAnivGuvTBq702EzE/Rrym1G2y+kWUg5DeQ+X0Rm5VPIeW7hFNG +WdCz/RC/01dWiWyrFR4C4R7povYfkowJTzfdWeTEDkdxyoyS/4zETFk291aLYkEF +gDvrs6J/GHpCsEQyu21W5UAE5UTQv2hNuQIDAQABo4ICJDCCAiAwDgYDVR0PAQH/ +BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwHQYDVR0O +BBYEFCvvVo6mBZ+wkP+jfF+GLCONwlNzMB8GA1UdIwQYMBaAFOernw8sM6BT015P +eMiyhA471pIzMDMGCCsGAQUFBwEBBCcwJTAjBggrBgEFBQcwAoYXaHR0cDovL3Ix +My5pLmxlbmNyLm9yZy8wIQYDVR0RBBowGIIWKi50b29uYW1pYWZ0ZXJtYXRoLmNv +bTATBgNVHSAEDDAKMAgGBmeBDAECATAuBgNVHR8EJzAlMCOgIaAfhh1odHRwOi8v +cjEzLmMubGVuY3Iub3JnLzI2LmNybDCCAQwGCisGAQQB1nkCBAIEgf0EgfoA+AB2 +AJROQ4f67MHvgfMZJCaoGGUBx9NfOAIBP3JnfVU3LhnYAAABnd3U3sgAAAQDAEcw +RQIhALu/dSOQk6HaGhlSNZxCAAHJT9cEWH1QBbSJ+SFaqrYWAiA0NxkcHvEQN4fa +EgUThyi6rCQSaAXVv5aLeHyPRbHbzwB+ACbjZG5YaSEjvDQ/RyQ1mzeSzSRaiNgV +05Mz/ZkYq0cjAAABnd3U3tgACAAABQALrWUiBAMARzBFAiBlCj3uiItFozSgfHKe +Hbznkv2q1k/0gr6BrqZH4zwE6wIhAOZVWBO329elJp/XbSHbuU0sQ3VF4x9IGRz0 +pVUpORgqMA0GCSqGSIb3DQEBCwUAA4IBAQAwAwhV6gsfenG1GOGsCWdGIC5884mk +r8s8g5DZM0OgsqyJdRry6Umpe1/tMOlxjqumWUcSCgfz+D+PLznJXSGNnHqvQ7sZ +pL7ET8rnuyQn22Qu4AVUxnbpuh4MeR3wNPgFNOx06VxoZA+E3YBwQhJIJzAYj8cg +dmA78ZlL2HfJiZ7pUXoTXC4y6D0U8rEdxHEwU5r8XRDRCVp3elp5s4EM93VQWH/E +Kgfe3MhZF864SHwyqkMEghk+6jsIemYwzg4EddIMasxFkCWcTMU6fZ7rF4iF2rMO +Cn5jJ5SAUy7308TPw6Js3JJ5ahaKTAPHERCvXyHK+c/bLSFT7mXWfdb8 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFBTCCAu2gAwIBAgIQWgDyEtjUtIDzkkFX6imDBTANBgkqhkiG9w0BAQsFADBP +MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy +Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa +Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF +bmNyeXB0MQwwCgYDVQQDEwNSMTMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQClZ3CN0FaBZBUXYc25BtStGZCMJlA3mBZjklTb2cyEBZPs0+wIG6BgUUNI +fSvHSJaetC3ancgnO1ehn6vw1g7UDjDKb5ux0daknTI+WE41b0VYaHEX/D7YXYKg +L7JRbLAaXbhZzjVlyIuhrxA3/+OcXcJJFzT/jCuLjfC8cSyTDB0FxLrHzarJXnzR +yQH3nAP2/Apd9Np75tt2QnDr9E0i2gB3b9bJXxf92nUupVcM9upctuBzpWjPoXTi +dYJ+EJ/B9aLrAek4sQpEzNPCifVJNYIKNLMc6YjCR06CDgo28EdPivEpBHXazeGa +XP9enZiVuppD0EqiFwUBBDDTMrOPAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG +MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/ +AgEAMB0GA1UdDgQWBBTnq58PLDOgU9NeT3jIsoQOO9aSMzAfBgNVHSMEGDAWgBR5 +tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG +Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD +VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B +AQsFAAOCAgEAUTdYUqEimzW7TbrOypLqCfL7VOwYf/Q79OH5cHLCZeggfQhDconl +k7Kgh8b0vi+/XuWu7CN8n/UPeg1vo3G+taXirrytthQinAHGwc/UdbOygJa9zuBc +VyqoH3CXTXDInT+8a+c3aEVMJ2St+pSn4ed+WkDp8ijsijvEyFwE47hulW0Ltzjg +9fOV5Pmrg/zxWbRuL+k0DBDHEJennCsAen7c35Pmx7jpmJ/HtgRhcnz0yjSBvyIw +6L1QIupkCv2SBODT/xDD3gfQQyKv6roV4G2EhfEyAsWpmojxjCUCGiyg97FvDtm/ +NK2LSc9lybKxB73I2+P2G3CaWpvvpAiHCVu30jW8GCxKdfhsXtnIy2imskQqVZ2m +0Pmxobb28Tucr7xBK7CtwvPrb79os7u2XP3O5f9b/H66GNyRrglRXlrYjI1oGYL/ +f4I1n/Sgusda6WvA6C190kxjU15Y12mHU4+BxyR9cx2hhGS9fAjMZKJss28qxvz6 +Axu4CaDmRNZpK/pQrXF17yXCXkmEWgvSOEZy6Z9pcbLIVEGckV/iVeq0AOo2pkg9 +p4QRIy0tK2diRENLSF2KysFwbY6B26BFeFs3v1sYVRhFW9nLkOrQVporCS0KyZmf +wVD89qSTlnctLcZnIavjKsKUu1nA1iU0yYMdYepKR7lWbnwhdx3ewok= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 +WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu +ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc +h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ +0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U +A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW +T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH +B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC +B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv +KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn +OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn +jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw +qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI +rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq +hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ +3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK +NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 +ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur +TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC +jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc +oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq +4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA +mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d +emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- From 8d63692b90221fac2d30ba8f9c104d6301b4c30d Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 2 May 2026 16:18:09 +0300 Subject: [PATCH 51/63] Update toonamiaftermath.com.config.js --- .../toonamiaftermath.com.config.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/sites/toonamiaftermath.com/toonamiaftermath.com.config.js b/sites/toonamiaftermath.com/toonamiaftermath.com.config.js index 4be2308d8..5dc13323f 100644 --- a/sites/toonamiaftermath.com/toonamiaftermath.com.config.js +++ b/sites/toonamiaftermath.com/toonamiaftermath.com.config.js @@ -1,19 +1,26 @@ -process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0' - const dayjs = require('dayjs') const axios = require('axios') +const https = require('https') +const path = require('path') +const fs = require('fs') const API_ENDPOINT = 'https://api.toonamiaftermath.com' -module.exports = { +const config = { site: 'toonamiaftermath.com', days: 3, + request: { + httpsAgent: new https.Agent({ + ca: fs.readFileSync(path.resolve(__dirname, '__data__/certificate.pem')) + }) + }, async url({ channel, date }) { const playlists = await axios .get( `${API_ENDPOINT}/playlists?scheduleName=${channel.site_id}&startDate=${date .add(1, 'd') - .toJSON()}&thisWeek=true&weekStartDay=monday` + .toJSON()}&thisWeek=true&weekStartDay=monday`, + config.request ) .then(r => r.data) .catch(console.error) @@ -58,3 +65,5 @@ function parseEpisode(item) { function parseImage(item) { return item && item.info && item.info.image ? item.info.image : null } + +module.exports = config From a3c27491a150aceb3aa5b3463149d04f2780416d Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 2 May 2026 16:20:39 +0300 Subject: [PATCH 52/63] Update update.yml --- .github/workflows/update.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml index cf94890a5..2f504e4ef 100644 --- a/.github/workflows/update.yml +++ b/.github/workflows/update.yml @@ -3,6 +3,8 @@ on: workflow_dispatch: schedule: - cron: '0 0 * * *' +permissions: + contents: read jobs: main: runs-on: ubuntu-latest From 1a5bf524bd73f6f798e8f851819bf288a28420e1 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 2 May 2026 16:20:43 +0300 Subject: [PATCH 53/63] Update dependencies --- package-lock.json | 870 ++++++---------------------------------------- package.json | 2 +- 2 files changed, 103 insertions(+), 769 deletions(-) diff --git a/package-lock.json b/package-lock.json index b6f294865..f66bf79ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,7 +65,7 @@ "p-limit": "^7.3.0", "pako": "^2.1.0", "parse-duration": "^2.1.6", - "pm2": "^6.0.14", + "pm2": "^7.0.0", "serve": "^14.2.6", "socks-proxy-agent": "^10.0.0", "srcset": "^5.0.3", @@ -2975,78 +2975,6 @@ "url": "https://opencollective.com/pkgr" } }, - "node_modules/@pm2/agent": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-2.1.1.tgz", - "integrity": "sha512-0V9ckHWd/HSC8BgAbZSoq8KXUG81X97nSkAxmhKDhmF8vanyaoc1YXwc2KVkbWz82Rg4gjd2n9qiT3i7bdvGrQ==", - "license": "AGPL-3.0", - "dependencies": { - "async": "~3.2.0", - "chalk": "~3.0.0", - "dayjs": "~1.8.24", - "debug": "~4.3.1", - "eventemitter2": "~5.0.1", - "fast-json-patch": "^3.1.0", - "fclone": "~1.0.11", - "pm2-axon": "~4.0.1", - "pm2-axon-rpc": "~0.7.0", - "proxy-agent": "~6.4.0", - "semver": "~7.5.0", - "ws": "~7.5.10" - } - }, - "node_modules/@pm2/agent/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@pm2/agent/node_modules/dayjs": { - "version": "1.8.36", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz", - "integrity": "sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==", - "license": "MIT" - }, - "node_modules/@pm2/agent/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@pm2/agent/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@pm2/agent/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, "node_modules/@pm2/blessed": { "version": "0.1.81", "resolved": "https://registry.npmjs.org/@pm2/blessed/-/blessed-0.1.81.tgz", @@ -3059,79 +2987,6 @@ "node": ">= 0.8.0" } }, - "node_modules/@pm2/io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@pm2/io/-/io-6.1.0.tgz", - "integrity": "sha512-IxHuYURa3+FQ6BKePlgChZkqABUKFYH6Bwbw7V/pWU1pP6iR1sCI26l7P9ThUEB385ruZn/tZS3CXDUF5IA1NQ==", - "license": "Apache-2", - "dependencies": { - "async": "~2.6.1", - "debug": "~4.3.1", - "eventemitter2": "^6.3.1", - "require-in-the-middle": "^5.0.0", - "semver": "~7.5.4", - "shimmer": "^1.2.0", - "signal-exit": "^3.0.3", - "tslib": "1.9.3" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/@pm2/io/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/@pm2/io/node_modules/eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", - "license": "MIT" - }, - "node_modules/@pm2/io/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@pm2/io/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@pm2/io/node_modules/tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "license": "Apache-2.0" - }, - "node_modules/@pm2/io/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, "node_modules/@pm2/js-api": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@pm2/js-api/-/js-api-0.8.0.tgz", @@ -3155,11 +3010,6 @@ "lodash": "^4.17.14" } }, - "node_modules/@pm2/js-api/node_modules/eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==" - }, "node_modules/@pm2/pm2-version-check": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@pm2/pm2-version-check/-/pm2-version-check-1.0.4.tgz", @@ -4442,14 +4292,6 @@ "string-width": "^4.1.0" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -4744,9 +4586,9 @@ } }, "node_modules/basic-ftp": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.0.tgz", - "integrity": "sha512-5K9eNNn7ywHPsYnFwjKgYH8Hf8B5emh7JKcPaVjjrMJFQQwGpwowEnZNEtHs7DfR7hCZsmaK3VA4HUK0YarT+w==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.1.tgz", + "integrity": "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -5094,11 +4936,6 @@ "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", "license": "MIT" }, - "node_modules/charm": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz", - "integrity": "sha512-syedaZ9cPe7r3hoQA9twWYKu5AIyCswN5+szkmPBe9ccdLrj4bYaCnLVPTLd2kgVRc7+zoX4tyPgRnFKCj5YjQ==" - }, "node_modules/cheerio": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", @@ -5783,17 +5620,6 @@ "node": ">=0.10.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/entities": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", @@ -6402,9 +6228,9 @@ } }, "node_modules/eventemitter2": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz", - "integrity": "sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==", + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", "license": "MIT" }, "node_modules/execa": { @@ -6555,12 +6381,6 @@ "bser": "2.1.1" } }, - "node_modules/fclone": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz", - "integrity": "sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==", - "license": "MIT" - }, "node_modules/fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", @@ -6817,9 +6637,9 @@ } }, "node_modules/get-uri": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", - "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", @@ -7256,21 +7076,6 @@ "node": ">=4" } }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -9561,33 +9366,11 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/module-details-from-path": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", - "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==", - "license": "MIT" - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, "node_modules/napi-postinstall": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", @@ -9617,42 +9400,6 @@ "node": ">=18" } }, - "node_modules/needle": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/negotiator": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", @@ -9662,9 +9409,9 @@ } }, "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz", + "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==", "license": "MIT", "engines": { "node": ">= 0.4.0" @@ -10022,12 +9769,6 @@ "node": ">=8" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, "node_modules/path-scurry": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", @@ -10078,14 +9819,15 @@ } }, "node_modules/pidusage": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-3.0.2.tgz", - "integrity": "sha512-g0VU+y08pKw5M8EZ2rIGiEBaB8wrQMjYGFfW2QVIfyT8V+fq8YFLkvlz4bz5ljvFDJYNFCWT3PWqcRr2FKO81w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-4.0.1.tgz", + "integrity": "sha512-yCH2dtLHfEBnzlHUJymR/Z1nN2ePG3m392Mv8TFlTP1B0xkpMQNHAnfkY0n2tAi6ceKO6YWhxYfZ96V4vVkh/g==", + "license": "MIT", "dependencies": { "safe-buffer": "^5.2.1" }, "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/pirates": { @@ -10110,16 +9852,16 @@ } }, "node_modules/pm2": { - "version": "6.0.14", - "resolved": "https://registry.npmjs.org/pm2/-/pm2-6.0.14.tgz", - "integrity": "sha512-wX1FiFkzuT2H/UUEA8QNXDAA9MMHDsK/3UHj6Dkd5U7kxyigKDA5gyDw78ycTQZAuGCLWyUX5FiXEuVQWafukA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pm2/-/pm2-7.0.0.tgz", + "integrity": "sha512-/VpW9f7jpy6o7k2CjWhsdCSS0YGYSSWZYz8gt2zJYg+PGOcbt50L7oZgiUqJDpJLyhIL+LnvgtRw4HXdg5pQCg==", "license": "AGPL-3.0", "dependencies": { - "@pm2/agent": "~2.1.1", "@pm2/blessed": "0.1.81", - "@pm2/io": "~6.1.0", - "@pm2/js-api": "~0.8.0", - "@pm2/pm2-version-check": "^1.0.4", + "@pm2/js-api": "0.8.0", + "@pm2/pm2-version-check": "1.0.4", + "amp": "0.3.1", + "amp-message": "0.1.2", "ansis": "4.0.0-node10", "async": "3.2.6", "chokidar": "3.6.0", @@ -10128,22 +9870,15 @@ "croner": "4.1.97", "dayjs": "1.11.15", "debug": "4.4.3", - "enquirer": "2.3.6", - "eventemitter2": "5.0.1", - "fclone": "1.0.11", + "eventemitter2": "6.4.9", + "fast-json-patch": "3.1.1", "js-yaml": "4.1.1", - "mkdirp": "1.0.4", - "needle": "2.4.0", - "pidusage": "3.0.2", - "pm2-axon": "~4.0.1", - "pm2-axon-rpc": "~0.7.1", - "pm2-deploy": "~1.0.2", - "pm2-multimeter": "^0.1.2", - "promptly": "2.2.0", + "pidusage": "4.0.1", + "pm2-deploy": "1.0.2", + "proxy-agent": "6.5.0", "semver": "7.7.2", - "source-map-support": "0.5.21", - "sprintf-js": "1.1.2", - "vizion": "~2.2.1" + "vizion": "2.2.1", + "ws": "8.20.0" }, "bin": { "pm2": "bin/pm2", @@ -10152,51 +9887,12 @@ "pm2-runtime": "bin/pm2-runtime" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" }, "optionalDependencies": { "pm2-sysmonit": "^1.2.8" } }, - "node_modules/pm2-axon": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pm2-axon/-/pm2-axon-4.0.1.tgz", - "integrity": "sha512-kES/PeSLS8orT8dR5jMlNl+Yu4Ty3nbvZRmaAtROuVm9nYYGiaoXqqKQqQYzWQzMYWUKHMQTvBlirjE5GIIxqg==", - "license": "MIT", - "dependencies": { - "amp": "~0.3.1", - "amp-message": "~0.1.1", - "debug": "^4.3.1", - "escape-string-regexp": "^4.0.0" - }, - "engines": { - "node": ">=5" - } - }, - "node_modules/pm2-axon-rpc": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/pm2-axon-rpc/-/pm2-axon-rpc-0.7.1.tgz", - "integrity": "sha512-FbLvW60w+vEyvMjP/xom2UPhUN/2bVpdtLfKJeYM3gwzYhoTEEChCOICfFzxkxuoEleOlnpjie+n1nue91bDQw==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.1" - }, - "engines": { - "node": ">=5" - } - }, - "node_modules/pm2-axon/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pm2-deploy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pm2-deploy/-/pm2-deploy-1.0.2.tgz", @@ -10209,14 +9905,6 @@ "node": ">=4.0.0" } }, - "node_modules/pm2-multimeter": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz", - "integrity": "sha512-S+wT6XfyKfd7SJIBqRgOctGxaBzUOmVQzTAS+cg04TsEUObJVreha7lvCfX8zzGVr871XwCSnHUU7DQQ5xEsfA==", - "dependencies": { - "charm": "~0.1.1" - } - }, "node_modules/pm2-sysmonit": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/pm2-sysmonit/-/pm2-sysmonit-1.2.8.tgz", @@ -10270,20 +9958,27 @@ } } }, - "node_modules/pm2/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "node_modules/pm2/node_modules/ws": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/pm2/node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -10329,28 +10024,20 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/promptly": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/promptly/-/promptly-2.2.0.tgz", - "integrity": "sha512-aC9j+BZsRSSzEsXBNBwDnAxujdx19HycZoKgRgzWnS8eOHg1asuf9heuLprfbe739zY3IdUQx+Egv6Jn135WHA==", - "dependencies": { - "read": "^1.0.4" - } - }, "node_modules/proxy-agent": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", + "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", + "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" @@ -10382,7 +10069,8 @@ "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", @@ -10446,17 +10134,6 @@ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "license": "MIT" }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -10519,40 +10196,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-in-the-middle": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.2.0.tgz", - "integrity": "sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "module-details-from-path": "^1.0.3", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -10780,12 +10423,6 @@ "node": ">=8" } }, - "node_modules/shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", - "license": "BSD-2-Clause" - }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -11030,18 +10667,6 @@ "node": ">=8" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/synckit": { "version": "0.11.12", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", @@ -13631,123 +13256,11 @@ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==" }, - "@pm2/agent": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-2.1.1.tgz", - "integrity": "sha512-0V9ckHWd/HSC8BgAbZSoq8KXUG81X97nSkAxmhKDhmF8vanyaoc1YXwc2KVkbWz82Rg4gjd2n9qiT3i7bdvGrQ==", - "requires": { - "async": "~3.2.0", - "chalk": "~3.0.0", - "dayjs": "~1.8.24", - "debug": "~4.3.1", - "eventemitter2": "~5.0.1", - "fast-json-patch": "^3.1.0", - "fclone": "~1.0.11", - "pm2-axon": "~4.0.1", - "pm2-axon-rpc": "~0.7.0", - "proxy-agent": "~6.4.0", - "semver": "~7.5.0", - "ws": "~7.5.10" - }, - "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "dayjs": { - "version": "1.8.36", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz", - "integrity": "sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, "@pm2/blessed": { "version": "0.1.81", "resolved": "https://registry.npmjs.org/@pm2/blessed/-/blessed-0.1.81.tgz", "integrity": "sha512-ZcNHqQjMuNRcQ7Z1zJbFIQZO/BDKV3KbiTckWdfbUaYhj7uNmUwb+FbdDWSCkvxNr9dBJQwvV17o6QBkAvgO0g==" }, - "@pm2/io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@pm2/io/-/io-6.1.0.tgz", - "integrity": "sha512-IxHuYURa3+FQ6BKePlgChZkqABUKFYH6Bwbw7V/pWU1pP6iR1sCI26l7P9ThUEB385ruZn/tZS3CXDUF5IA1NQ==", - "requires": { - "async": "~2.6.1", - "debug": "~4.3.1", - "eventemitter2": "^6.3.1", - "require-in-the-middle": "^5.0.0", - "semver": "~7.5.4", - "shimmer": "^1.2.0", - "signal-exit": "^3.0.3", - "tslib": "1.9.3" - }, - "dependencies": { - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, - "eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, "@pm2/js-api": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@pm2/js-api/-/js-api-0.8.0.tgz", @@ -13767,11 +13280,6 @@ "requires": { "lodash": "^4.17.14" } - }, - "eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==" } } }, @@ -14551,11 +14059,6 @@ "string-width": "^4.1.0" } }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" - }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -14749,9 +14252,9 @@ "integrity": "sha512-Lyf3aK28zpsD1yQMiiHD4RvVb6UdMoo8xzG2XzFIfR9luPzOpcBlAsT/qfB1XWS1bxWT+UtE4WmQgsp297FYOA==" }, "basic-ftp": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.0.tgz", - "integrity": "sha512-5K9eNNn7ywHPsYnFwjKgYH8Hf8B5emh7JKcPaVjjrMJFQQwGpwowEnZNEtHs7DfR7hCZsmaK3VA4HUK0YarT+w==" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.1.tgz", + "integrity": "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==" }, "before-after-hook": { "version": "4.0.0", @@ -14963,11 +14466,6 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==" }, - "charm": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz", - "integrity": "sha512-syedaZ9cPe7r3hoQA9twWYKu5AIyCswN5+szkmPBe9ccdLrj4bYaCnLVPTLd2kgVRc7+zoX4tyPgRnFKCj5YjQ==" - }, "cheerio": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", @@ -15448,14 +14946,6 @@ } } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "requires": { - "ansi-colors": "^4.1.1" - } - }, "entities": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", @@ -15845,9 +15335,9 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "eventemitter2": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz", - "integrity": "sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==" + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==" }, "execa": { "version": "5.1.1", @@ -15955,11 +15445,6 @@ "bser": "2.1.1" } }, - "fclone": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz", - "integrity": "sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==" - }, "fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", @@ -16123,9 +15608,9 @@ } }, "get-uri": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", - "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", "requires": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", @@ -16397,14 +15882,6 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, - "is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "requires": { - "hasown": "^2.0.2" - } - }, "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -17983,26 +17460,11 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==" }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "module-details-from-path": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", - "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==" - }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, "napi-postinstall": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", @@ -18018,43 +17480,15 @@ "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-5.0.0.tgz", "integrity": "sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==" }, - "needle": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, "negotiator": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==" }, "netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz", + "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==" }, "node-cron": { "version": "4.2.1", @@ -18302,11 +17736,6 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, "path-scurry": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", @@ -18339,9 +17768,9 @@ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==" }, "pidusage": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-3.0.2.tgz", - "integrity": "sha512-g0VU+y08pKw5M8EZ2rIGiEBaB8wrQMjYGFfW2QVIfyT8V+fq8YFLkvlz4bz5ljvFDJYNFCWT3PWqcRr2FKO81w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-4.0.1.tgz", + "integrity": "sha512-yCH2dtLHfEBnzlHUJymR/Z1nN2ePG3m392Mv8TFlTP1B0xkpMQNHAnfkY0n2tAi6ceKO6YWhxYfZ96V4vVkh/g==", "requires": { "safe-buffer": "^5.2.1" } @@ -18360,15 +17789,15 @@ } }, "pm2": { - "version": "6.0.14", - "resolved": "https://registry.npmjs.org/pm2/-/pm2-6.0.14.tgz", - "integrity": "sha512-wX1FiFkzuT2H/UUEA8QNXDAA9MMHDsK/3UHj6Dkd5U7kxyigKDA5gyDw78ycTQZAuGCLWyUX5FiXEuVQWafukA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pm2/-/pm2-7.0.0.tgz", + "integrity": "sha512-/VpW9f7jpy6o7k2CjWhsdCSS0YGYSSWZYz8gt2zJYg+PGOcbt50L7oZgiUqJDpJLyhIL+LnvgtRw4HXdg5pQCg==", "requires": { - "@pm2/agent": "~2.1.1", "@pm2/blessed": "0.1.81", - "@pm2/io": "~6.1.0", - "@pm2/js-api": "~0.8.0", - "@pm2/pm2-version-check": "^1.0.4", + "@pm2/js-api": "0.8.0", + "@pm2/pm2-version-check": "1.0.4", + "amp": "0.3.1", + "amp-message": "0.1.2", "ansis": "4.0.0-node10", "async": "3.2.6", "chokidar": "3.6.0", @@ -18377,23 +17806,16 @@ "croner": "4.1.97", "dayjs": "1.11.15", "debug": "4.4.3", - "enquirer": "2.3.6", - "eventemitter2": "5.0.1", - "fclone": "1.0.11", + "eventemitter2": "6.4.9", + "fast-json-patch": "3.1.1", "js-yaml": "4.1.1", - "mkdirp": "1.0.4", - "needle": "2.4.0", - "pidusage": "3.0.2", - "pm2-axon": "~4.0.1", - "pm2-axon-rpc": "~0.7.1", - "pm2-deploy": "~1.0.2", - "pm2-multimeter": "^0.1.2", + "pidusage": "4.0.1", + "pm2-deploy": "1.0.2", "pm2-sysmonit": "^1.2.8", - "promptly": "2.2.0", + "proxy-agent": "6.5.0", "semver": "7.7.2", - "source-map-support": "0.5.21", - "sprintf-js": "1.1.2", - "vizion": "~2.2.1" + "vizion": "2.2.1", + "ws": "8.20.0" }, "dependencies": { "commander": { @@ -18414,48 +17836,14 @@ "ms": "^2.1.3" } }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + "ws": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "requires": {} } } }, - "pm2-axon": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pm2-axon/-/pm2-axon-4.0.1.tgz", - "integrity": "sha512-kES/PeSLS8orT8dR5jMlNl+Yu4Ty3nbvZRmaAtROuVm9nYYGiaoXqqKQqQYzWQzMYWUKHMQTvBlirjE5GIIxqg==", - "requires": { - "amp": "~0.3.1", - "amp-message": "~0.1.1", - "debug": "^4.3.1", - "escape-string-regexp": "^4.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - } - } - }, - "pm2-axon-rpc": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/pm2-axon-rpc/-/pm2-axon-rpc-0.7.1.tgz", - "integrity": "sha512-FbLvW60w+vEyvMjP/xom2UPhUN/2bVpdtLfKJeYM3gwzYhoTEEChCOICfFzxkxuoEleOlnpjie+n1nue91bDQw==", - "requires": { - "debug": "^4.3.1" - } - }, "pm2-deploy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pm2-deploy/-/pm2-deploy-1.0.2.tgz", @@ -18465,14 +17853,6 @@ "tv4": "^1.3.0" } }, - "pm2-multimeter": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz", - "integrity": "sha512-S+wT6XfyKfd7SJIBqRgOctGxaBzUOmVQzTAS+cg04TsEUObJVreha7lvCfX8zzGVr871XwCSnHUU7DQQ5xEsfA==", - "requires": { - "charm": "~0.1.1" - } - }, "pm2-sysmonit": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/pm2-sysmonit/-/pm2-sysmonit-1.2.8.tgz", @@ -18527,27 +17907,19 @@ } } }, - "promptly": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/promptly/-/promptly-2.2.0.tgz", - "integrity": "sha512-aC9j+BZsRSSzEsXBNBwDnAxujdx19HycZoKgRgzWnS8eOHg1asuf9heuLprfbe739zY3IdUQx+Egv6Jn135WHA==", - "requires": { - "read": "^1.0.4" - } - }, "proxy-agent": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", "requires": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", + "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", + "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" + "socks-proxy-agent": "^8.0.5" }, "dependencies": { "lru-cache": { @@ -18610,14 +17982,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "requires": { - "mute-stream": "~0.0.4" - } - }, "readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -18663,26 +18027,6 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, - "require-in-the-middle": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.2.0.tgz", - "integrity": "sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==", - "requires": { - "debug": "^4.1.1", - "module-details-from-path": "^1.0.3", - "resolve": "^1.22.1" - } - }, - "resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "requires": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, "resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -18827,11 +18171,6 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, - "shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" - }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -18998,11 +18337,6 @@ "has-flag": "^4.0.0" } }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, "synckit": { "version": "0.11.12", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", diff --git a/package.json b/package.json index 9e829ed3e..017530196 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,7 @@ "p-limit": "^7.3.0", "pako": "^2.1.0", "parse-duration": "^2.1.6", - "pm2": "^6.0.14", + "pm2": "^7.0.0", "serve": "^14.2.6", "socks-proxy-agent": "^10.0.0", "srcset": "^5.0.3", From 38d21cd2e91beb8b66fa16298ec65e3ff26cec84 Mon Sep 17 00:00:00 2001 From: Julio Cesar <104462712+JulioCesarXY@users.noreply.github.com> Date: Sun, 3 May 2026 10:02:07 -0300 Subject: [PATCH 54/63] Update XMLTV IDs for several channels --- sites/distro.tv/distro.tv.channels.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/sites/distro.tv/distro.tv.channels.xml b/sites/distro.tv/distro.tv.channels.xml index b04004a4b..43e0fe5ab 100644 --- a/sites/distro.tv/distro.tv.channels.xml +++ b/sites/distro.tv/distro.tv.channels.xml @@ -111,11 +111,11 @@ Estrella Games Balle Balle TRACE Latina - TRACE Urban + TRACE Urban Bollywood Classic Bollywood HD IndieBox - TRACE Brazuca + TRACE Brazuca Motorvision TV Motorvision TV Español CCTV-4 @@ -123,11 +123,11 @@ CGTN Documentary CGTN Español DeFiance Media - Sports Connect + Sports Connect MTRSPT1 CraftsyTV - 9XM - 9X Jalwa + 9XM + 9X Jalwa BritAsiaTV Jewish Life Television JLTV Scream TV @@ -139,7 +139,7 @@ TV9 Kannada TV9 Marathi TV9 Telugu - FloRacing 24/7 + FloRacing 24/7 TV9 Telugu USA crema.tv Negocios TV @@ -169,7 +169,7 @@ Global Punjab TV PLL Network PLL Network - TRACE UK + TRACE UK TidPix-Authentically African Green Chillies TV- Zindagi ka Tadka! Cowboy+ Sports @@ -177,7 +177,7 @@ FUEL TV FUEL TV Willow Sports - Punjabi Hits + Punjabi Hits CNA Originals Ghost Dimension Nolly Africa HD From b7752cf0665ef95bddffaac2f6513e9f3548ae2e Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sun, 3 May 2026 17:22:17 +0300 Subject: [PATCH 55/63] Update ipko.tv.channels.xml --- sites/ipko.tv/ipko.tv.channels.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sites/ipko.tv/ipko.tv.channels.xml b/sites/ipko.tv/ipko.tv.channels.xml index d2695f745..8158a6b21 100644 --- a/sites/ipko.tv/ipko.tv.channels.xml +++ b/sites/ipko.tv/ipko.tv.channels.xml @@ -194,4 +194,11 @@ Ülke TV Vizion+ Zico TV + Tring Sport 1 + Tring Sport 2 + Tring Sport 3 + Tring Sport 4 + Tring Sport 5 + Tring Sport 6 + Tring Sport 7
From f4db54bf70bdbf1ccd0763aec8f5f4159f84737b Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sun, 3 May 2026 17:23:50 +0300 Subject: [PATCH 56/63] Update ipko.tv.channels.xml --- sites/ipko.tv/ipko.tv.channels.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sites/ipko.tv/ipko.tv.channels.xml b/sites/ipko.tv/ipko.tv.channels.xml index 8158a6b21..5a64991d5 100644 --- a/sites/ipko.tv/ipko.tv.channels.xml +++ b/sites/ipko.tv/ipko.tv.channels.xml @@ -194,11 +194,11 @@ Ülke TV Vizion+ Zico TV - Tring Sport 1 - Tring Sport 2 - Tring Sport 3 - Tring Sport 4 - Tring Sport 5 - Tring Sport 6 - Tring Sport 7 + Tring Sport 1 + Tring Sport 2 + Tring Sport 3 + Tring Sport 4 + Tring Sport 5 + Tring Sport 6 + Tring Sport 7 From 6db4043647d1d6cb3336c20ce032c64e94dee679 Mon Sep 17 00:00:00 2001 From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 02:09:22 +0000 Subject: [PATCH 57/63] [Bot] Update SITES.md Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/25297627366) workflow. --- SITES.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/SITES.md b/SITES.md index 41fa4eff7..6a49f6d1d 100644 --- a/SITES.md +++ b/SITES.md @@ -114,14 +114,13 @@ nhkworldpremium.com1🟢 nhl.com1🟢 nostv.pt161🟢 - novacyprus.com29🟢 novasports.gr16🟢 nowplayer.now.com140🟢 nuevosiglo.com.uy173🟢 nzxmltv.com532🟢 ontvtonight.com5177🟢 opto.sic.pt3🟢 - orangetv.orange.es273🟢 + orangetv.orange.es273🔴https://github.com/iptv-org/epg/issues/3099 osn.com67🟢 passie.nl1🟢 pbsguam.org1🟢 @@ -142,7 +141,7 @@ reportv.com.ar163🟢 rikstv.no80🟢 rotana.net16🔴https://github.com/iptv-org/epg/issues/3018 - roya-tv.com10🟢https://github.com/iptv-org/epg/issues/3108 + roya-tv.com10🟢 rthk.hk4🟢 rtmklik.rtm.gov.my8🟢 rtp.pt10🟢 From f2cfb97ebee089fe697738433516864907ab7d99 Mon Sep 17 00:00:00 2001 From: Toha Date: Sat, 2 May 2026 08:50:44 +0700 Subject: [PATCH 58/63] Add site `maxstream.tv`. Signed-off-by: Toha --- sites/maxstream.tv/__data__/content.json | 5365 ++++++++++++++++++ sites/maxstream.tv/maxstream.tv.channels.xml | 132 + sites/maxstream.tv/maxstream.tv.config.js | 69 + sites/maxstream.tv/maxstream.tv.test.js | 54 + sites/maxstream.tv/readme.md | 21 + 5 files changed, 5641 insertions(+) create mode 100644 sites/maxstream.tv/__data__/content.json create mode 100644 sites/maxstream.tv/maxstream.tv.channels.xml create mode 100644 sites/maxstream.tv/maxstream.tv.config.js create mode 100644 sites/maxstream.tv/maxstream.tv.test.js create mode 100644 sites/maxstream.tv/readme.md diff --git a/sites/maxstream.tv/__data__/content.json b/sites/maxstream.tv/__data__/content.json new file mode 100644 index 000000000..6b233f699 --- /dev/null +++ b/sites/maxstream.tv/__data__/content.json @@ -0,0 +1,5365 @@ +{ + "serverTime": "2026-05-02", + "data": [ + { + "date": "2026-04-25", + "metadata": [ + { + "playUrlId": 30903381, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-25T00:00:00Z", + "endTime": "2026-04-25T00:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-25/30903381.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903382, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-25T00:30:00Z", + "endTime": "2026-04-25T01:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903383, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.16", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T01:00:00Z", + "endTime": "2026-04-25T01:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903384, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T01:30:00Z", + "endTime": "2026-04-25T02:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903385, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.24", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-25T02:00:00Z", + "endTime": "2026-04-25T02:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-25/30903385.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903386, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.25", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-25T02:30:00Z", + "endTime": "2026-04-25T03:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903387, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-25T03:00:00Z", + "endTime": "2026-04-25T03:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903388, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-25T03:30:00Z", + "endTime": "2026-04-25T04:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903389, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-25T04:00:00Z", + "endTime": "2026-04-25T04:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903390, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-25T04:30:00Z", + "endTime": "2026-04-25T05:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903391, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.13", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T05:00:00Z", + "endTime": "2026-04-25T05:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903392, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.14", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T05:30:00Z", + "endTime": "2026-04-25T06:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903393, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.15", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T06:00:00Z", + "endTime": "2026-04-25T06:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903394, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.16", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T06:30:00Z", + "endTime": "2026-04-25T07:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903395, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T07:00:00Z", + "endTime": "2026-04-25T07:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903396, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.5", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T07:30:00Z", + "endTime": "2026-04-25T08:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903397, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.6", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T08:00:00Z", + "endTime": "2026-04-25T08:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903398, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.7", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T08:30:00Z", + "endTime": "2026-04-25T09:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903399, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.8", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T09:00:00Z", + "endTime": "2026-04-25T09:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903400, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.496", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-25T09:30:00Z", + "endTime": "2026-04-25T10:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903401, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.497", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-25T10:00:00Z", + "endTime": "2026-04-25T10:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903402, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-25T10:30:00Z", + "endTime": "2026-04-25T11:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903403, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Godzilla Minus One - Eps.", + "description": "Jepang pascaperang menghadapi ancaman baru saat Godzilla muncul. Film ini menyoroti perjuangan manusia yang rapuh melawan kehancuran, dengan drama emosional dan aksi spektakuler yang intens.", + "startTime": "2026-04-25T11:00:00Z", + "endTime": "2026-04-25T13:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-25/30903403.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903404, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.13", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T13:30:00Z", + "endTime": "2026-04-25T14:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903405, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.14", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T14:00:00Z", + "endTime": "2026-04-25T14:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-25/30903405.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903406, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.5", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T14:30:00Z", + "endTime": "2026-04-25T15:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903407, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.6", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T15:00:00Z", + "endTime": "2026-04-25T15:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903408, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.7", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T15:30:00Z", + "endTime": "2026-04-25T15:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903409, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.8", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T15:58:00Z", + "endTime": "2026-04-25T16:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-25/30903409.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903410, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.6", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-25T16:30:00Z", + "endTime": "2026-04-25T17:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903411, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.7", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-25T17:00:00Z", + "endTime": "2026-04-25T17:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903412, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-25T17:30:00Z", + "endTime": "2026-04-25T17:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903413, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-25T17:58:00Z", + "endTime": "2026-04-25T18:28:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-25/30903413.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903414, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-25T18:28:00Z", + "endTime": "2026-04-25T19:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903415, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.496", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-25T19:00:00Z", + "endTime": "2026-04-25T19:28:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903416, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.497", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-25T19:28:00Z", + "endTime": "2026-04-25T19:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903417, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-25T19:58:00Z", + "endTime": "2026-04-25T20:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-25/30903417.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903418, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.13", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T20:30:00Z", + "endTime": "2026-04-25T21:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903419, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.14", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T21:00:00Z", + "endTime": "2026-04-25T21:28:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903420, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.15", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T21:28:00Z", + "endTime": "2026-04-25T21:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903421, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.16", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T21:58:00Z", + "endTime": "2026-04-25T22:26:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-25/30903421.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903422, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T22:26:00Z", + "endTime": "2026-04-25T23:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903423, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.5", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T23:00:00Z", + "endTime": "2026-04-25T23:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903424, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.6", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T23:30:00Z", + "endTime": "2026-04-26T00:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + } + ] + }, + { + "date": "2026-04-26", + "metadata": [ + { + "playUrlId": 30903425, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.7", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-26T00:00:00Z", + "endTime": "2026-04-26T00:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-26/30903425.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903426, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.8", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-26T00:30:00Z", + "endTime": "2026-04-26T01:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903427, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.6", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T01:00:00Z", + "endTime": "2026-04-26T01:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903428, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.7", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T01:30:00Z", + "endTime": "2026-04-26T02:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903429, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T02:00:00Z", + "endTime": "2026-04-26T02:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-26/30903429.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903430, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-26T02:30:00Z", + "endTime": "2026-04-26T03:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903431, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-26T03:00:00Z", + "endTime": "2026-04-26T03:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903432, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.496", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-26T03:30:00Z", + "endTime": "2026-04-26T04:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903433, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.497", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-26T04:00:00Z", + "endTime": "2026-04-26T04:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903434, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-26T04:30:00Z", + "endTime": "2026-04-26T05:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903435, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.15", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T05:00:00Z", + "endTime": "2026-04-26T05:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903436, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T05:30:00Z", + "endTime": "2026-04-26T06:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903437, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T06:00:00Z", + "endTime": "2026-04-26T06:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903438, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.6", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T06:30:00Z", + "endTime": "2026-04-26T07:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903439, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.7", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T07:00:00Z", + "endTime": "2026-04-26T07:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903440, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T07:30:00Z", + "endTime": "2026-04-26T08:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903441, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.23", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T08:00:00Z", + "endTime": "2026-04-26T08:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903442, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.24", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T08:30:00Z", + "endTime": "2026-04-26T09:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903443, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.25", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T09:00:00Z", + "endTime": "2026-04-26T09:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903444, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.15", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-26T09:30:00Z", + "endTime": "2026-04-26T10:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903445, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-26T10:00:00Z", + "endTime": "2026-04-26T10:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903446, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-26T10:30:00Z", + "endTime": "2026-04-26T11:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903447, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.496", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-26T11:00:00Z", + "endTime": "2026-04-26T11:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903448, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.497", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-26T11:30:00Z", + "endTime": "2026-04-26T12:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903449, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-26T12:00:00Z", + "endTime": "2026-04-26T12:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-26/30903449.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903450, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.23", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T12:30:00Z", + "endTime": "2026-04-26T13:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903451, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.24", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T13:00:00Z", + "endTime": "2026-04-26T13:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903452, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.25", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T13:30:00Z", + "endTime": "2026-04-26T14:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903453, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.16", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-26T14:00:00Z", + "endTime": "2026-04-26T14:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-26/30903453.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903454, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.6", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T14:30:00Z", + "endTime": "2026-04-26T14:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903455, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.7", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T14:58:00Z", + "endTime": "2026-04-26T15:28:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903456, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T15:28:00Z", + "endTime": "2026-04-26T16:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903457, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-26T16:00:00Z", + "endTime": "2026-04-26T16:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-26/30903457.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903458, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-26T16:30:00Z", + "endTime": "2026-04-26T17:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903459, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.15", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T17:00:00Z", + "endTime": "2026-04-26T17:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903460, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T17:30:00Z", + "endTime": "2026-04-26T17:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903461, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T17:58:00Z", + "endTime": "2026-04-26T18:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-26/30903461.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903462, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.6", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T18:30:00Z", + "endTime": "2026-04-26T18:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903463, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.7", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T18:58:00Z", + "endTime": "2026-04-26T19:28:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903464, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T19:28:00Z", + "endTime": "2026-04-26T20:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903465, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.23", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T20:00:00Z", + "endTime": "2026-04-26T20:28:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-26/30903465.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903466, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.24", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T20:28:00Z", + "endTime": "2026-04-26T20:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903467, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.25", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T20:58:00Z", + "endTime": "2026-04-26T21:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903468, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-26T21:30:00Z", + "endTime": "2026-04-26T22:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903469, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.15", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T22:00:00Z", + "endTime": "2026-04-26T22:28:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-26/30903469.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903470, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T22:28:00Z", + "endTime": "2026-04-26T22:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903471, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T22:58:00Z", + "endTime": "2026-04-26T23:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903472, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.496", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-26T23:30:00Z", + "endTime": "2026-04-27T00:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + } + ] + }, + { + "date": "2026-04-27", + "metadata": [ + { + "playUrlId": 30903473, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.497", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-27T00:00:00Z", + "endTime": "2026-04-27T00:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-27/30903473.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903474, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-27T00:30:00Z", + "endTime": "2026-04-27T01:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903475, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-27T01:00:00Z", + "endTime": "2026-04-27T01:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903476, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-27T01:30:00Z", + "endTime": "2026-04-27T02:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903477, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.15", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T02:00:00Z", + "endTime": "2026-04-27T02:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-27/30903477.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903478, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T02:30:00Z", + "endTime": "2026-04-27T03:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903479, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T03:00:00Z", + "endTime": "2026-04-27T03:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903480, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.6", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T03:30:00Z", + "endTime": "2026-04-27T04:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903481, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.7", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T04:00:00Z", + "endTime": "2026-04-27T04:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903482, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T04:30:00Z", + "endTime": "2026-04-27T05:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903483, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.16", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T05:00:00Z", + "endTime": "2026-04-27T05:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903484, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T05:30:00Z", + "endTime": "2026-04-27T06:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903485, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-27T06:00:00Z", + "endTime": "2026-04-27T06:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903486, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-27T06:30:00Z", + "endTime": "2026-04-27T07:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903487, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.24", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-27T07:00:00Z", + "endTime": "2026-04-27T07:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903488, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.25", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-27T07:30:00Z", + "endTime": "2026-04-27T08:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903489, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.16", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T08:00:00Z", + "endTime": "2026-04-27T08:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903490, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T08:30:00Z", + "endTime": "2026-04-27T09:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903491, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T09:00:00Z", + "endTime": "2026-04-27T09:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903492, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T09:30:00Z", + "endTime": "2026-04-27T10:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903493, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-27T10:00:00Z", + "endTime": "2026-04-27T10:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903494, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-27T10:30:00Z", + "endTime": "2026-04-27T11:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903495, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.25", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-27T11:00:00Z", + "endTime": "2026-04-27T11:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903496, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.24", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-27T11:30:00Z", + "endTime": "2026-04-27T12:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903497, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.16", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T12:00:00Z", + "endTime": "2026-04-27T12:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-27/30903497.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903498, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T12:30:00Z", + "endTime": "2026-04-27T13:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903499, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T13:00:00Z", + "endTime": "2026-04-27T13:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903500, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T13:30:00Z", + "endTime": "2026-04-27T14:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903501, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-27T14:00:00Z", + "endTime": "2026-04-27T14:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-27/30903501.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903502, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-27T14:30:00Z", + "endTime": "2026-04-27T15:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903503, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.16", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T15:00:00Z", + "endTime": "2026-04-27T15:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903504, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T15:30:00Z", + "endTime": "2026-04-27T16:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903505, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T16:00:00Z", + "endTime": "2026-04-27T16:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-27/30903505.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903506, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T16:30:00Z", + "endTime": "2026-04-27T17:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903507, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T17:00:00Z", + "endTime": "2026-04-27T17:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903508, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T17:30:00Z", + "endTime": "2026-04-27T18:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903509, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T18:00:00Z", + "endTime": "2026-04-27T18:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-27/30903509.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903510, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T18:30:00Z", + "endTime": "2026-04-27T19:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903511, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-27T19:00:00Z", + "endTime": "2026-04-27T19:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903512, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-27T19:30:00Z", + "endTime": "2026-04-27T20:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903513, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T20:00:00Z", + "endTime": "2026-04-27T20:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-27/30903513.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903514, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T20:30:00Z", + "endTime": "2026-04-27T21:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903515, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-27T21:00:00Z", + "endTime": "2026-04-27T21:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903516, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-27T21:30:00Z", + "endTime": "2026-04-27T22:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903517, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-27T22:00:00Z", + "endTime": "2026-04-27T22:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-27/30903517.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903518, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-27T22:30:00Z", + "endTime": "2026-04-27T23:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903519, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T23:00:00Z", + "endTime": "2026-04-27T23:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903520, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T23:30:00Z", + "endTime": "2026-04-28T00:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + } + ] + }, + { + "date": "2026-04-28", + "metadata": [ + { + "playUrlId": 30903521, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T00:00:00Z", + "endTime": "2026-04-28T00:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-28/30903521.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903522, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T00:30:00Z", + "endTime": "2026-04-28T01:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903523, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T01:00:00Z", + "endTime": "2026-04-28T01:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903524, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T01:30:00Z", + "endTime": "2026-04-28T02:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903525, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T02:00:00Z", + "endTime": "2026-04-28T02:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-28/30903525.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903526, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T02:30:00Z", + "endTime": "2026-04-28T03:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903527, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T03:00:00Z", + "endTime": "2026-04-28T03:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903528, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T03:30:00Z", + "endTime": "2026-04-28T04:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903529, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T04:00:00Z", + "endTime": "2026-04-28T04:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903530, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T04:30:00Z", + "endTime": "2026-04-28T05:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903531, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T05:00:00Z", + "endTime": "2026-04-28T05:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903532, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T05:30:00Z", + "endTime": "2026-04-28T06:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903533, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T06:00:00Z", + "endTime": "2026-04-28T06:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903534, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T06:30:00Z", + "endTime": "2026-04-28T07:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903535, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T07:00:00Z", + "endTime": "2026-04-28T07:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903536, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T07:30:00Z", + "endTime": "2026-04-28T08:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903537, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T08:00:00Z", + "endTime": "2026-04-28T08:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903538, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T08:30:00Z", + "endTime": "2026-04-28T09:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903539, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T09:00:00Z", + "endTime": "2026-04-28T09:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903540, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T09:30:00Z", + "endTime": "2026-04-28T10:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903541, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T10:00:00Z", + "endTime": "2026-04-28T10:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903542, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T10:30:00Z", + "endTime": "2026-04-28T11:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903543, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T11:00:00Z", + "endTime": "2026-04-28T11:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903544, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T11:30:00Z", + "endTime": "2026-04-28T12:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903545, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T12:00:00Z", + "endTime": "2026-04-28T12:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903546, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T12:30:00Z", + "endTime": "2026-04-28T13:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903547, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T13:00:00Z", + "endTime": "2026-04-28T13:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903548, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T13:30:00Z", + "endTime": "2026-04-28T14:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903549, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T14:00:00Z", + "endTime": "2026-04-28T14:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903550, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T14:30:00Z", + "endTime": "2026-04-28T15:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903551, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T15:00:00Z", + "endTime": "2026-04-28T15:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903552, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T15:30:00Z", + "endTime": "2026-04-28T16:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903553, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T16:00:00Z", + "endTime": "2026-04-28T16:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-28/30903553.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903554, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T16:30:00Z", + "endTime": "2026-04-28T17:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903555, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T17:00:00Z", + "endTime": "2026-04-28T17:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903556, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T17:30:00Z", + "endTime": "2026-04-28T18:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903557, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T18:00:00Z", + "endTime": "2026-04-28T18:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-28/30903557.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903558, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T18:30:00Z", + "endTime": "2026-04-28T19:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903559, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T19:00:00Z", + "endTime": "2026-04-28T19:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903560, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T19:30:00Z", + "endTime": "2026-04-28T20:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903561, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T20:00:00Z", + "endTime": "2026-04-28T20:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-28/30903561.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903562, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T20:30:00Z", + "endTime": "2026-04-28T21:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903563, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.11", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T21:00:00Z", + "endTime": "2026-04-28T21:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903564, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.12", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T21:30:00Z", + "endTime": "2026-04-28T22:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903565, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T22:00:00Z", + "endTime": "2026-04-28T22:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-28/30903565.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903566, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T22:30:00Z", + "endTime": "2026-04-28T23:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903567, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T23:00:00Z", + "endTime": "2026-04-28T23:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903568, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T23:30:00Z", + "endTime": "2026-04-29T00:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + } + ] + }, + { + "date": "2026-04-29", + "metadata": [ + { + "playUrlId": 30903569, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.11", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T00:00:00Z", + "endTime": "2026-04-29T00:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-29/30903569.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903570, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.12", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T00:30:00Z", + "endTime": "2026-04-29T01:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903571, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T01:00:00Z", + "endTime": "2026-04-29T01:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903572, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T01:30:00Z", + "endTime": "2026-04-29T02:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903573, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T02:00:00Z", + "endTime": "2026-04-29T02:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-29/30903573.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903574, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T02:30:00Z", + "endTime": "2026-04-29T03:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903575, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T03:00:00Z", + "endTime": "2026-04-29T03:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903576, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T03:30:00Z", + "endTime": "2026-04-29T04:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903577, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.11", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T04:00:00Z", + "endTime": "2026-04-29T04:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903578, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.12", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T04:30:00Z", + "endTime": "2026-04-29T05:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903579, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T05:00:00Z", + "endTime": "2026-04-29T05:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903580, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T05:30:00Z", + "endTime": "2026-04-29T06:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903581, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T06:00:00Z", + "endTime": "2026-04-29T06:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903582, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T06:30:00Z", + "endTime": "2026-04-29T07:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903583, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T07:00:00Z", + "endTime": "2026-04-29T07:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903584, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T07:30:00Z", + "endTime": "2026-04-29T08:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903585, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T08:00:00Z", + "endTime": "2026-04-29T08:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903586, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T08:30:00Z", + "endTime": "2026-04-29T09:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903587, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.11", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T09:00:00Z", + "endTime": "2026-04-29T09:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903588, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.12", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T09:30:00Z", + "endTime": "2026-04-29T10:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903589, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T10:00:00Z", + "endTime": "2026-04-29T10:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903590, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T10:30:00Z", + "endTime": "2026-04-29T11:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903591, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T11:00:00Z", + "endTime": "2026-04-29T11:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903592, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T11:30:00Z", + "endTime": "2026-04-29T12:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903593, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T12:00:00Z", + "endTime": "2026-04-29T12:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903594, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T12:30:00Z", + "endTime": "2026-04-29T13:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903595, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.11", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T13:00:00Z", + "endTime": "2026-04-29T13:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903596, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.12", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T13:30:00Z", + "endTime": "2026-04-29T14:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903597, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T14:00:00Z", + "endTime": "2026-04-29T14:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903598, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T14:30:00Z", + "endTime": "2026-04-29T15:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903599, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T15:00:00Z", + "endTime": "2026-04-29T15:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903600, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T15:30:00Z", + "endTime": "2026-04-29T16:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903601, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.11", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T16:00:00Z", + "endTime": "2026-04-29T16:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903602, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.12", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T16:30:00Z", + "endTime": "2026-04-29T17:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903603, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T17:00:00Z", + "endTime": "2026-04-29T17:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903604, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T17:30:00Z", + "endTime": "2026-04-29T18:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903605, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T18:00:00Z", + "endTime": "2026-04-29T18:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903606, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.11", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T18:30:00Z", + "endTime": "2026-04-29T19:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903607, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T19:00:00Z", + "endTime": "2026-04-29T19:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903608, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.501", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T19:30:00Z", + "endTime": "2026-04-29T20:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903609, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T20:00:00Z", + "endTime": "2026-04-29T20:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-29/30903609.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903610, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.11", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T20:30:00Z", + "endTime": "2026-04-29T21:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903611, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-29T21:00:00Z", + "endTime": "2026-04-29T21:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903612, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-29T21:30:00Z", + "endTime": "2026-04-29T22:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903613, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T22:00:00Z", + "endTime": "2026-04-29T22:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-29/30903613.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903614, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.501", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T22:30:00Z", + "endTime": "2026-04-29T23:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903615, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T23:00:00Z", + "endTime": "2026-04-29T23:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903616, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.11", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T23:30:00Z", + "endTime": "2026-04-30T00:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + } + ] + }, + { + "date": "2026-04-30", + "metadata": [ + { + "playUrlId": 30903617, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T00:00:00Z", + "endTime": "2026-04-30T00:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-30/30903617.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903618, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T00:30:00Z", + "endTime": "2026-04-30T01:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903619, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T01:00:00Z", + "endTime": "2026-04-30T01:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903620, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T01:30:00Z", + "endTime": "2026-04-30T02:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903621, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-30T02:00:00Z", + "endTime": "2026-04-30T02:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-30/30903621.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903622, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.501", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-30T02:30:00Z", + "endTime": "2026-04-30T03:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903623, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-30T03:00:00Z", + "endTime": "2026-04-30T03:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903624, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.11", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-30T03:30:00Z", + "endTime": "2026-04-30T04:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903625, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T04:00:00Z", + "endTime": "2026-04-30T04:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903626, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T04:30:00Z", + "endTime": "2026-04-30T05:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903627, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T05:00:00Z", + "endTime": "2026-04-30T05:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903628, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T05:30:00Z", + "endTime": "2026-04-30T06:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903629, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-30T06:00:00Z", + "endTime": "2026-04-30T06:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903630, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.11", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-30T06:30:00Z", + "endTime": "2026-04-30T07:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903631, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-30T07:00:00Z", + "endTime": "2026-04-30T07:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903632, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.501", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-30T07:30:00Z", + "endTime": "2026-04-30T08:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903633, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T08:00:00Z", + "endTime": "2026-04-30T08:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903634, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T08:30:00Z", + "endTime": "2026-04-30T09:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903635, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T09:00:00Z", + "endTime": "2026-04-30T09:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903636, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T09:30:00Z", + "endTime": "2026-04-30T10:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903637, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-30T10:00:00Z", + "endTime": "2026-04-30T10:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903638, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.11", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-30T10:30:00Z", + "endTime": "2026-04-30T11:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903639, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-30T11:00:00Z", + "endTime": "2026-04-30T11:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903640, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.501", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-30T11:30:00Z", + "endTime": "2026-04-30T12:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903641, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T12:00:00Z", + "endTime": "2026-04-30T12:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903642, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T12:30:00Z", + "endTime": "2026-04-30T13:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903643, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T13:00:00Z", + "endTime": "2026-04-30T13:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903644, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T13:30:00Z", + "endTime": "2026-04-30T14:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903645, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-30T14:00:00Z", + "endTime": "2026-04-30T14:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903646, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.11", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-30T14:30:00Z", + "endTime": "2026-04-30T15:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903647, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T15:00:00Z", + "endTime": "2026-04-30T15:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903648, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T15:30:00Z", + "endTime": "2026-04-30T16:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903649, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T16:00:00Z", + "endTime": "2026-04-30T16:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903650, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T16:30:00Z", + "endTime": "2026-04-30T17:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903651, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T17:00:00Z", + "endTime": "2026-04-30T17:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903652, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T17:30:00Z", + "endTime": "2026-04-30T18:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903653, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-30T18:00:00Z", + "endTime": "2026-04-30T18:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903654, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-30T18:30:00Z", + "endTime": "2026-04-30T19:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903655, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.1", + "description": "Dunia dilanda wabah aneh yang mengubah manusia menjadi kucing. Seorang pria berusaha bertahan hidup di tengah kekacauan, menghadirkan perpaduan horor, komedi absurd, dan satire unik.", + "startTime": "2026-04-30T19:00:00Z", + "endTime": "2026-04-30T19:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903656, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.2", + "description": "Dunia dilanda wabah aneh yang mengubah manusia menjadi kucing. Seorang pria berusaha bertahan hidup di tengah kekacauan, menghadirkan perpaduan horor, komedi absurd, dan satire unik.", + "startTime": "2026-04-30T19:30:00Z", + "endTime": "2026-04-30T20:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903657, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-30T20:00:00Z", + "endTime": "2026-04-30T20:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903658, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-30T20:30:00Z", + "endTime": "2026-04-30T21:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903659, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T21:00:00Z", + "endTime": "2026-04-30T21:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903660, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T21:30:00Z", + "endTime": "2026-04-30T22:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903661, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.1", + "description": "Dunia dilanda wabah aneh yang mengubah manusia menjadi kucing. Seorang pria berusaha bertahan hidup di tengah kekacauan, menghadirkan perpaduan horor, komedi absurd, dan satire unik.", + "startTime": "2026-04-30T22:00:00Z", + "endTime": "2026-04-30T22:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903662, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.2", + "description": "Dunia dilanda wabah aneh yang mengubah manusia menjadi kucing. Seorang pria berusaha bertahan hidup di tengah kekacauan, menghadirkan perpaduan horor, komedi absurd, dan satire unik.", + "startTime": "2026-04-30T22:30:00Z", + "endTime": "2026-04-30T23:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903663, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-30T23:00:00Z", + "endTime": "2026-04-30T23:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903664, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-30T23:30:00Z", + "endTime": "2026-05-01T00:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + } + ] + }, + { + "date": "2026-05-01", + "metadata": [ + { + "playUrlId": 31857332, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-05-01T00:00:00Z", + "endTime": "2026-05-01T00:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857333, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-05-01T00:30:00Z", + "endTime": "2026-05-01T01:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857334, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-05-01T01:00:00Z", + "endTime": "2026-05-01T01:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857335, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-05-01T01:30:00Z", + "endTime": "2026-05-01T02:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857336, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.1", + "description": "Dunia dilanda wabah aneh yang mengubah manusia menjadi kucing. Seorang pria berusaha bertahan hidup di tengah kekacauan, menghadirkan perpaduan horor, komedi absurd, dan satire unik.", + "startTime": "2026-05-01T02:00:00Z", + "endTime": "2026-05-01T02:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857337, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.2", + "description": "Dunia dilanda wabah aneh yang mengubah manusia menjadi kucing. Seorang pria berusaha bertahan hidup di tengah kekacauan, menghadirkan perpaduan horor, komedi absurd, dan satire unik.", + "startTime": "2026-05-01T02:30:00Z", + "endTime": "2026-05-01T03:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857338, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-05-01T03:00:00Z", + "endTime": "2026-05-01T03:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857339, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-05-01T03:30:00Z", + "endTime": "2026-05-01T04:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857340, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-05-01T04:00:00Z", + "endTime": "2026-05-01T04:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857341, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-05-01T04:30:00Z", + "endTime": "2026-05-01T05:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857342, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T05:00:00Z", + "endTime": "2026-05-01T05:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857343, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T05:30:00Z", + "endTime": "2026-05-01T06:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857344, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T06:00:00Z", + "endTime": "2026-05-01T06:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857345, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T06:30:00Z", + "endTime": "2026-05-01T07:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857346, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.1", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-01T07:00:00Z", + "endTime": "2026-05-01T07:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857347, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.2", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-01T07:30:00Z", + "endTime": "2026-05-01T08:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857348, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T08:00:00Z", + "endTime": "2026-05-01T08:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857349, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T08:30:00Z", + "endTime": "2026-05-01T09:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857350, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-01T09:00:00Z", + "endTime": "2026-05-01T09:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857351, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-01T09:30:00Z", + "endTime": "2026-05-01T10:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857352, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T10:00:00Z", + "endTime": "2026-05-01T10:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857353, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T10:30:00Z", + "endTime": "2026-05-01T11:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857354, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.1", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-01T11:00:00Z", + "endTime": "2026-05-01T11:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857355, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.2", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-01T11:30:00Z", + "endTime": "2026-05-01T12:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857356, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T12:00:00Z", + "endTime": "2026-05-01T12:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857357, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T12:30:00Z", + "endTime": "2026-05-01T13:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857358, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-01T13:00:00Z", + "endTime": "2026-05-01T13:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857359, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-01T13:30:00Z", + "endTime": "2026-05-01T14:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857360, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T14:00:00Z", + "endTime": "2026-05-01T14:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857361, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T14:30:00Z", + "endTime": "2026-05-01T15:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857362, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T15:00:00Z", + "endTime": "2026-05-01T15:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857363, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T15:30:00Z", + "endTime": "2026-05-01T16:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857364, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-01T16:00:00Z", + "endTime": "2026-05-01T16:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857365, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-01T16:30:00Z", + "endTime": "2026-05-01T17:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857366, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T17:00:00Z", + "endTime": "2026-05-01T17:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857367, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.22", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T17:30:00Z", + "endTime": "2026-05-01T18:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857368, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T18:00:00Z", + "endTime": "2026-05-01T18:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857369, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.12", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T18:30:00Z", + "endTime": "2026-05-01T19:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857370, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.3", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-01T19:00:00Z", + "endTime": "2026-05-01T19:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857371, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.4", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-01T19:30:00Z", + "endTime": "2026-05-01T20:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857372, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T20:00:00Z", + "endTime": "2026-05-01T20:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857373, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.12", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T20:30:00Z", + "endTime": "2026-05-01T21:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857374, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-01T21:00:00Z", + "endTime": "2026-05-01T21:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857375, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.20", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-01T21:30:00Z", + "endTime": "2026-05-01T22:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857376, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.3", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-01T22:00:00Z", + "endTime": "2026-05-01T22:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857377, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.4", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-01T22:30:00Z", + "endTime": "2026-05-01T23:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857378, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T23:00:00Z", + "endTime": "2026-05-01T23:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857379, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.12", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T23:30:00Z", + "endTime": "2026-05-02T00:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + } + ] + }, + { + "date": "2026-05-02", + "metadata": [ + { + "playUrlId": 31857380, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-02T00:00:00Z", + "endTime": "2026-05-02T00:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857381, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.20", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-02T00:30:00Z", + "endTime": "2026-05-02T01:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857382, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T01:00:00Z", + "endTime": "2026-05-02T01:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857383, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.22", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T01:30:00Z", + "endTime": "2026-05-02T02:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857384, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.3", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-02T02:00:00Z", + "endTime": "2026-05-02T02:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857385, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.4", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-02T02:30:00Z", + "endTime": "2026-05-02T03:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857386, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-02T03:00:00Z", + "endTime": "2026-05-02T03:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857387, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.12", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-02T03:30:00Z", + "endTime": "2026-05-02T04:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857388, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-02T04:00:00Z", + "endTime": "2026-05-02T04:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857389, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.20", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-02T04:30:00Z", + "endTime": "2026-05-02T05:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857390, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T05:00:00Z", + "endTime": "2026-05-02T05:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857391, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T05:30:00Z", + "endTime": "2026-05-02T06:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857392, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T06:00:00Z", + "endTime": "2026-05-02T06:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857393, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T06:30:00Z", + "endTime": "2026-05-02T07:00:00Z", + "thumbnail_url": "", + "status": "ongoing", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857394, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.22", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T07:00:00Z", + "endTime": "2026-05-02T07:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857395, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T07:30:00Z", + "endTime": "2026-05-02T08:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857396, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T08:00:00Z", + "endTime": "2026-05-02T08:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857397, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.11", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T08:30:00Z", + "endTime": "2026-05-02T09:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857398, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.12", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T09:00:00Z", + "endTime": "2026-05-02T09:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857399, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.40", + "description": "Luffy terlibat dalam perang besar di Marineford untuk menyelamatkan Ace. Pertempuran antara Angkatan Laut dan Bajak Laut memicu tragedi besar, mengubah keseimbangan kekuatan dunia secara dramatis.", + "startTime": "2026-05-02T09:30:00Z", + "endTime": "2026-05-02T10:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857400, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.41", + "description": "Luffy terlibat dalam perang besar di Marineford untuk menyelamatkan Ace. Pertempuran antara Angkatan Laut dan Bajak Laut memicu tragedi besar, mengubah keseimbangan kekuatan dunia secara dramatis.", + "startTime": "2026-05-02T10:00:00Z", + "endTime": "2026-05-02T10:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857401, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.42", + "description": "Luffy terlibat dalam perang besar di Marineford untuk menyelamatkan Ace. Pertempuran antara Angkatan Laut dan Bajak Laut memicu tragedi besar, mengubah keseimbangan kekuatan dunia secara dramatis.", + "startTime": "2026-05-02T10:30:00Z", + "endTime": "2026-05-02T11:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857402, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-02T11:00:00Z", + "endTime": "2026-05-02T11:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857403, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.12", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-02T11:30:00Z", + "endTime": "2026-05-02T12:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857404, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T12:00:00Z", + "endTime": "2026-05-02T12:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857405, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T12:30:00Z", + "endTime": "2026-05-02T13:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857406, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T13:00:00Z", + "endTime": "2026-05-02T13:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857407, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T13:30:00Z", + "endTime": "2026-05-02T14:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857408, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.22", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T14:00:00Z", + "endTime": "2026-05-02T14:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857409, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T14:30:00Z", + "endTime": "2026-05-02T15:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857410, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T15:00:00Z", + "endTime": "2026-05-02T15:28:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857411, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.11", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T15:28:00Z", + "endTime": "2026-05-02T15:56:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857412, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.12", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T15:56:00Z", + "endTime": "2026-05-02T16:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857413, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangan di dunia lain dengan membangun kekuatan dan aliansi baru. Konflik dengan dewa dan berbagai ras semakin kompleks, menghadirkan aksi, strategi, dan dinamika politik.", + "startTime": "2026-05-02T16:30:00Z", + "endTime": "2026-05-02T17:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857414, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangan di dunia lain dengan membangun kekuatan dan aliansi baru. Konflik dengan dewa dan berbagai ras semakin kompleks, menghadirkan aksi, strategi, dan dinamika politik.", + "startTime": "2026-05-02T17:00:00Z", + "endTime": "2026-05-02T17:28:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857415, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.11", + "description": "Makoto melanjutkan petualangan di dunia lain dengan membangun kekuatan dan aliansi baru. Konflik dengan dewa dan berbagai ras semakin kompleks, menghadirkan aksi, strategi, dan dinamika politik.", + "startTime": "2026-05-02T17:28:00Z", + "endTime": "2026-05-02T18:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857416, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-02T18:00:00Z", + "endTime": "2026-05-02T18:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857417, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.12", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-02T18:30:00Z", + "endTime": "2026-05-02T19:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857418, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.40", + "description": "Luffy terlibat dalam perang besar di Marineford untuk menyelamatkan Ace. Pertempuran antara Angkatan Laut dan Bajak Laut memicu tragedi besar, mengubah keseimbangan kekuatan dunia secara dramatis.", + "startTime": "2026-05-02T19:00:00Z", + "endTime": "2026-05-02T19:28:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857419, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.41", + "description": "Luffy terlibat dalam perang besar di Marineford untuk menyelamatkan Ace. Pertempuran antara Angkatan Laut dan Bajak Laut memicu tragedi besar, mengubah keseimbangan kekuatan dunia secara dramatis.", + "startTime": "2026-05-02T19:28:00Z", + "endTime": "2026-05-02T19:56:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857420, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.42", + "description": "Luffy terlibat dalam perang besar di Marineford untuk menyelamatkan Ace. Pertempuran antara Angkatan Laut dan Bajak Laut memicu tragedi besar, mengubah keseimbangan kekuatan dunia secara dramatis.", + "startTime": "2026-05-02T19:56:00Z", + "endTime": "2026-05-02T20:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857421, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T20:30:00Z", + "endTime": "2026-05-02T21:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857422, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T21:00:00Z", + "endTime": "2026-05-02T21:28:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857423, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T21:28:00Z", + "endTime": "2026-05-02T21:58:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857424, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T21:58:00Z", + "endTime": "2026-05-02T22:26:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857425, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.22", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T22:26:00Z", + "endTime": "2026-05-02T23:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857426, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T23:00:00Z", + "endTime": "2026-05-02T23:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857427, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T23:30:00Z", + "endTime": "2026-05-03T00:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + } + ] + } + ] +} \ No newline at end of file diff --git a/sites/maxstream.tv/maxstream.tv.channels.xml b/sites/maxstream.tv/maxstream.tv.channels.xml new file mode 100644 index 000000000..138ce9b30 --- /dev/null +++ b/sites/maxstream.tv/maxstream.tv.channels.xml @@ -0,0 +1,132 @@ + + + ABC Australia + Al Jazeera + Animal Planet + Animax + Aniplus + ANTARA TV + ANTV + Arirang + afn + AXN + BBC News + Berita Satu + Bioskop Indonesia + Bloomberg + BTV + CBeebies + CCTV 4 + Celestial Movies + CGTN + CGTN Documentary + Chinese Drama + CinemaWorld + Cinemax + Citra Dangdut + Citra Drama + CNA + CNBC Asia + CNBC Indonesia + CNN Indonesia + CNN International + Crime Investigation + Curiosity Channel + DAAI TV + Da Vinci Learning + Discovery Asia + Discovery Channel + DMI TV + DreamWorks + Dunia Anak + Dunia Lain + DW English + Euronews + Fashion TV + Fight Sports + Flik + France 24 + Galaxy + Galaxy Premium + GTV + HBO + HBO Family + HBO Hits + HBO Signature + HGTV + History + HITS + HITS MOVIES + HITS Now + Horee + Horizon Sports + IDX Channel + IMC + Indosiar + Inews + JAK TV + Jawa Pos TV + JTV + KBS World + KIX + Kompas TV + K Plus + Lifetime + Love Nature + MAXEats + MAXKids + MAXReels + MAXSports + MAXStreak + MAXStream TV + MDTV + Mentari TV + Metro TV + MNC TV + Moji + Moonbug + MQTV + MTA TV + Musik Indonesia + My Kidz + New TV Comprehensive + New TV Finance + New TV Variety + NHK World Japan + Nickelodeon + Nick Junior + ONE + Phoenix Chinese + Phoenix Info News + Prambors + RTV + RCTI + Rock Action + Rock Entertainment + Rodja TV + SCTV + Shenzhen TV + Sindo News + Sinpo TV + SPOTV 2 + SPOTV + Studio Universal + The Indonesia Channel + Thrill + TLC + TRANS 7 + Trans TV + TV5 MONDE + TV9 + TVBS News + TV MU + TV MUI + tvN + tvN Movies + TV One + TVRI + TVRI World + U Channel + Zee Bioskop + Zhejiang Int + diff --git a/sites/maxstream.tv/maxstream.tv.config.js b/sites/maxstream.tv/maxstream.tv.config.js new file mode 100644 index 000000000..1ce8f47c0 --- /dev/null +++ b/sites/maxstream.tv/maxstream.tv.config.js @@ -0,0 +1,69 @@ +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(utc) +dayjs.extend(timezone) +dayjs.extend(customParseFormat) + +const tz = 'Asia/Jakarta' + +module.exports = { + site: 'maxstream.tv', + days: 2, + url({ channel }) { + return `https://vmp.maxstream.tv/api/v3/videos/${channel.site_id}/schedules` + }, + parser({ content, channel, date }) { + const programs = [] + if (content && typeof content === 'string') { + content = JSON.parse(content) + } + if (Array.isArray(content?.data)) { + const schedules = [] + content.data.forEach(item => { + schedules.push(...item.metadata) + }) + const f = dt => dayjs.tz(dt, tz).isSame(date, 'day') + schedules + .filter(entry => entry.parentId === channel.site_id && (f(entry.startTime) || f(entry.endTime))) + .forEach(entry => { + const [, , , season, , , session2, , , episode] = entry.tvProgram.match( + /((\s(\d+)[a-zA-Z]{2})?\s(Season(\s)?||S)(\d+)?)?(\s-\sEps\.(\s)?(\d+))/ + ) || [null, null, null, null, null, null, null, null, null, null] + programs.push({ + title: entry.tvProgram, + description: entry.description, + start: dayjs.tz(entry.startTime, tz), + stop: dayjs.tz(entry.endTime, tz), + season: season || session2 ? parseInt(season || session2) : null, + episode: episode ? parseInt(episode) : null, + image: entry.thumbnail_url + }) + }) + } + + return programs + }, + async channels() { + const channels = [] + const data = await axios + .get('https://vmp.maxstream.tv/api/v3/videos/list?contentType=channel') + .then(response => response.data) + .catch(console.error) + + if (Array.isArray(data?.videos)) { + channels.push(...data.videos + .filter(item => item?.contentType === 'Channel') + .map(item => ({ + lang: 'id', + site_id: item.id, + name: item.translations.id.title + }))) + } + + return channels + } +} diff --git a/sites/maxstream.tv/maxstream.tv.test.js b/sites/maxstream.tv/maxstream.tv.test.js new file mode 100644 index 000000000..07b0b9113 --- /dev/null +++ b/sites/maxstream.tv/maxstream.tv.test.js @@ -0,0 +1,54 @@ +const { parser, url } = require('./maxstream.tv.config.js') +const fs = require('fs') +const path = require('path') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') + +dayjs.extend(utc) + +const date = dayjs.utc('2026-05-02').startOf('d') +const channel = { site_id: '0_86sal99e' } + +it('can generate valid url', () => { + expect(url({ channel })).toBe( + 'https://vmp.maxstream.tv/api/v3/videos/0_86sal99e/schedules' + ) +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json')) + .toString() + const results = parser({ content, channel, date }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(results.length).toBe(49) + expect(results[0]).toMatchObject({ + title: 'I\'ll Become A Villainess Who Goes Down In History - Eps.12', + description: + 'Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.', + start: '2026-05-01T16:30:00.000Z', + stop: '2026-05-01T17:00:00.000Z', + episode: 12 + }) + expect(results[46]).toMatchObject({ + title: 'Haikyu!! 4Th Season - Eps.22', + description: + 'Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.', + start: '2026-05-02T15:26:00.000Z', + stop: '2026-05-02T16:00:00.000Z', + season: 4, + episode: 22 + }) +}) + +it('can handle empty guide', () => { + const results = parser({ + content: '', + channel + }) + + expect(results).toMatchObject([]) +}) diff --git a/sites/maxstream.tv/readme.md b/sites/maxstream.tv/readme.md new file mode 100644 index 000000000..3d0557638 --- /dev/null +++ b/sites/maxstream.tv/readme.md @@ -0,0 +1,21 @@ +# maxstream.tv + +https://maxstream.tv/home + +### Download the guide + +```sh +npm run grab --- --channels=sites/maxstream.tv/maxstream.tv.channels.xml +``` + +### Update channel list + +```sh +npm run channels:parse --- --config=./sites/maxstream.tv/maxstream.tv.config.js --output=./sites/maxstream.tv/maxstream.tv.channels.xml +``` + +### Test + +```sh +npm test --- maxstream.tv +``` From e440b4c356f8694595436cd8e44f680cfab57c1d Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Tue, 5 May 2026 12:42:41 +0300 Subject: [PATCH 59/63] Fixes EOL character --- sites/maxstream.tv/maxstream.tv.channels.xml | 264 +++++++++---------- sites/maxstream.tv/maxstream.tv.config.js | 142 +++++----- sites/maxstream.tv/maxstream.tv.test.js | 105 ++++---- sites/maxstream.tv/readme.md | 42 +-- 4 files changed, 277 insertions(+), 276 deletions(-) diff --git a/sites/maxstream.tv/maxstream.tv.channels.xml b/sites/maxstream.tv/maxstream.tv.channels.xml index 138ce9b30..28e813ea9 100644 --- a/sites/maxstream.tv/maxstream.tv.channels.xml +++ b/sites/maxstream.tv/maxstream.tv.channels.xml @@ -1,132 +1,132 @@ - - - ABC Australia - Al Jazeera - Animal Planet - Animax - Aniplus - ANTARA TV - ANTV - Arirang - afn - AXN - BBC News - Berita Satu - Bioskop Indonesia - Bloomberg - BTV - CBeebies - CCTV 4 - Celestial Movies - CGTN - CGTN Documentary - Chinese Drama - CinemaWorld - Cinemax - Citra Dangdut - Citra Drama - CNA - CNBC Asia - CNBC Indonesia - CNN Indonesia - CNN International - Crime Investigation - Curiosity Channel - DAAI TV - Da Vinci Learning - Discovery Asia - Discovery Channel - DMI TV - DreamWorks - Dunia Anak - Dunia Lain - DW English - Euronews - Fashion TV - Fight Sports - Flik - France 24 - Galaxy - Galaxy Premium - GTV - HBO - HBO Family - HBO Hits - HBO Signature - HGTV - History - HITS - HITS MOVIES - HITS Now - Horee - Horizon Sports - IDX Channel - IMC - Indosiar - Inews - JAK TV - Jawa Pos TV - JTV - KBS World - KIX - Kompas TV - K Plus - Lifetime - Love Nature - MAXEats - MAXKids - MAXReels - MAXSports - MAXStreak - MAXStream TV - MDTV - Mentari TV - Metro TV - MNC TV - Moji - Moonbug - MQTV - MTA TV - Musik Indonesia - My Kidz - New TV Comprehensive - New TV Finance - New TV Variety - NHK World Japan - Nickelodeon - Nick Junior - ONE - Phoenix Chinese - Phoenix Info News - Prambors - RTV - RCTI - Rock Action - Rock Entertainment - Rodja TV - SCTV - Shenzhen TV - Sindo News - Sinpo TV - SPOTV 2 - SPOTV - Studio Universal - The Indonesia Channel - Thrill - TLC - TRANS 7 - Trans TV - TV5 MONDE - TV9 - TVBS News - TV MU - TV MUI - tvN - tvN Movies - TV One - TVRI - TVRI World - U Channel - Zee Bioskop - Zhejiang Int - + + + ABC Australia + Al Jazeera + Animal Planet + Animax + Aniplus + ANTARA TV + ANTV + Arirang + afn + AXN + BBC News + Berita Satu + Bioskop Indonesia + Bloomberg + BTV + CBeebies + CCTV 4 + Celestial Movies + CGTN + CGTN Documentary + Chinese Drama + CinemaWorld + Cinemax + Citra Dangdut + Citra Drama + CNA + CNBC Asia + CNBC Indonesia + CNN Indonesia + CNN International + Crime Investigation + Curiosity Channel + DAAI TV + Da Vinci Learning + Discovery Asia + Discovery Channel + DMI TV + DreamWorks + Dunia Anak + Dunia Lain + DW English + Euronews + Fashion TV + Fight Sports + Flik + France 24 + Galaxy + Galaxy Premium + GTV + HBO + HBO Family + HBO Hits + HBO Signature + HGTV + History + HITS + HITS MOVIES + HITS Now + Horee + Horizon Sports + IDX Channel + IMC + Indosiar + Inews + JAK TV + Jawa Pos TV + JTV + KBS World + KIX + Kompas TV + K Plus + Lifetime + Love Nature + MAXEats + MAXKids + MAXReels + MAXSports + MAXStreak + MAXStream TV + MDTV + Mentari TV + Metro TV + MNC TV + Moji + Moonbug + MQTV + MTA TV + Musik Indonesia + My Kidz + New TV Comprehensive + New TV Finance + New TV Variety + NHK World Japan + Nickelodeon + Nick Junior + ONE + Phoenix Chinese + Phoenix Info News + Prambors + RTV + RCTI + Rock Action + Rock Entertainment + Rodja TV + SCTV + Shenzhen TV + Sindo News + Sinpo TV + SPOTV 2 + SPOTV + Studio Universal + The Indonesia Channel + Thrill + TLC + TRANS 7 + Trans TV + TV5 MONDE + TV9 + TVBS News + TV MU + TV MUI + tvN + tvN Movies + TV One + TVRI + TVRI World + U Channel + Zee Bioskop + Zhejiang Int + diff --git a/sites/maxstream.tv/maxstream.tv.config.js b/sites/maxstream.tv/maxstream.tv.config.js index 1ce8f47c0..53d67705f 100644 --- a/sites/maxstream.tv/maxstream.tv.config.js +++ b/sites/maxstream.tv/maxstream.tv.config.js @@ -1,69 +1,73 @@ -const axios = require('axios') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const customParseFormat = require('dayjs/plugin/customParseFormat') - -dayjs.extend(utc) -dayjs.extend(timezone) -dayjs.extend(customParseFormat) - -const tz = 'Asia/Jakarta' - -module.exports = { - site: 'maxstream.tv', - days: 2, - url({ channel }) { - return `https://vmp.maxstream.tv/api/v3/videos/${channel.site_id}/schedules` - }, - parser({ content, channel, date }) { - const programs = [] - if (content && typeof content === 'string') { - content = JSON.parse(content) - } - if (Array.isArray(content?.data)) { - const schedules = [] - content.data.forEach(item => { - schedules.push(...item.metadata) - }) - const f = dt => dayjs.tz(dt, tz).isSame(date, 'day') - schedules - .filter(entry => entry.parentId === channel.site_id && (f(entry.startTime) || f(entry.endTime))) - .forEach(entry => { - const [, , , season, , , session2, , , episode] = entry.tvProgram.match( - /((\s(\d+)[a-zA-Z]{2})?\s(Season(\s)?||S)(\d+)?)?(\s-\sEps\.(\s)?(\d+))/ - ) || [null, null, null, null, null, null, null, null, null, null] - programs.push({ - title: entry.tvProgram, - description: entry.description, - start: dayjs.tz(entry.startTime, tz), - stop: dayjs.tz(entry.endTime, tz), - season: season || session2 ? parseInt(season || session2) : null, - episode: episode ? parseInt(episode) : null, - image: entry.thumbnail_url - }) - }) - } - - return programs - }, - async channels() { - const channels = [] - const data = await axios - .get('https://vmp.maxstream.tv/api/v3/videos/list?contentType=channel') - .then(response => response.data) - .catch(console.error) - - if (Array.isArray(data?.videos)) { - channels.push(...data.videos - .filter(item => item?.contentType === 'Channel') - .map(item => ({ - lang: 'id', - site_id: item.id, - name: item.translations.id.title - }))) - } - - return channels - } -} +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(utc) +dayjs.extend(timezone) +dayjs.extend(customParseFormat) + +const tz = 'Asia/Jakarta' + +module.exports = { + site: 'maxstream.tv', + days: 2, + url({ channel }) { + return `https://vmp.maxstream.tv/api/v3/videos/${channel.site_id}/schedules` + }, + parser({ content, channel, date }) { + const programs = [] + if (content && typeof content === 'string') { + content = JSON.parse(content) + } + if (Array.isArray(content?.data)) { + const schedules = [] + content.data.forEach(item => { + schedules.push(...item.metadata) + }) + const f = dt => dayjs.tz(dt, tz).isSame(date, 'day') + schedules + .filter( + entry => entry.parentId === channel.site_id && (f(entry.startTime) || f(entry.endTime)) + ) + .forEach(entry => { + const [, , , season, , , session2, , , episode] = entry.tvProgram.match( + /((\s(\d+)[a-zA-Z]{2})?\s(Season(\s)?||S)(\d+)?)?(\s-\sEps\.(\s)?(\d+))/ + ) || [null, null, null, null, null, null, null, null, null, null] + programs.push({ + title: entry.tvProgram, + description: entry.description, + start: dayjs.tz(entry.startTime, tz), + stop: dayjs.tz(entry.endTime, tz), + season: season || session2 ? parseInt(season || session2) : null, + episode: episode ? parseInt(episode) : null, + image: entry.thumbnail_url + }) + }) + } + + return programs + }, + async channels() { + const channels = [] + const data = await axios + .get('https://vmp.maxstream.tv/api/v3/videos/list?contentType=channel') + .then(response => response.data) + .catch(console.error) + + if (Array.isArray(data?.videos)) { + channels.push( + ...data.videos + .filter(item => item?.contentType === 'Channel') + .map(item => ({ + lang: 'id', + site_id: item.id, + name: item.translations.id.title + })) + ) + } + + return channels + } +} diff --git a/sites/maxstream.tv/maxstream.tv.test.js b/sites/maxstream.tv/maxstream.tv.test.js index 07b0b9113..6ff7a0713 100644 --- a/sites/maxstream.tv/maxstream.tv.test.js +++ b/sites/maxstream.tv/maxstream.tv.test.js @@ -1,54 +1,51 @@ -const { parser, url } = require('./maxstream.tv.config.js') -const fs = require('fs') -const path = require('path') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') - -dayjs.extend(utc) - -const date = dayjs.utc('2026-05-02').startOf('d') -const channel = { site_id: '0_86sal99e' } - -it('can generate valid url', () => { - expect(url({ channel })).toBe( - 'https://vmp.maxstream.tv/api/v3/videos/0_86sal99e/schedules' - ) -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json')) - .toString() - const results = parser({ content, channel, date }).map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(results.length).toBe(49) - expect(results[0]).toMatchObject({ - title: 'I\'ll Become A Villainess Who Goes Down In History - Eps.12', - description: - 'Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.', - start: '2026-05-01T16:30:00.000Z', - stop: '2026-05-01T17:00:00.000Z', - episode: 12 - }) - expect(results[46]).toMatchObject({ - title: 'Haikyu!! 4Th Season - Eps.22', - description: - 'Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.', - start: '2026-05-02T15:26:00.000Z', - stop: '2026-05-02T16:00:00.000Z', - season: 4, - episode: 22 - }) -}) - -it('can handle empty guide', () => { - const results = parser({ - content: '', - channel - }) - - expect(results).toMatchObject([]) -}) +const { parser, url } = require('./maxstream.tv.config.js') +const fs = require('fs') +const path = require('path') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') + +dayjs.extend(utc) + +const date = dayjs.utc('2026-05-02').startOf('d') +const channel = { site_id: '0_86sal99e' } + +it('can generate valid url', () => { + expect(url({ channel })).toBe('https://vmp.maxstream.tv/api/v3/videos/0_86sal99e/schedules') +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json')).toString() + const results = parser({ content, channel, date }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(results.length).toBe(49) + expect(results[0]).toMatchObject({ + title: "I'll Become A Villainess Who Goes Down In History - Eps.12", + description: + 'Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.', + start: '2026-05-01T16:30:00.000Z', + stop: '2026-05-01T17:00:00.000Z', + episode: 12 + }) + expect(results[46]).toMatchObject({ + title: 'Haikyu!! 4Th Season - Eps.22', + description: + 'Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.', + start: '2026-05-02T15:26:00.000Z', + stop: '2026-05-02T16:00:00.000Z', + season: 4, + episode: 22 + }) +}) + +it('can handle empty guide', () => { + const results = parser({ + content: '', + channel + }) + + expect(results).toMatchObject([]) +}) diff --git a/sites/maxstream.tv/readme.md b/sites/maxstream.tv/readme.md index 3d0557638..6df945a40 100644 --- a/sites/maxstream.tv/readme.md +++ b/sites/maxstream.tv/readme.md @@ -1,21 +1,21 @@ -# maxstream.tv - -https://maxstream.tv/home - -### Download the guide - -```sh -npm run grab --- --channels=sites/maxstream.tv/maxstream.tv.channels.xml -``` - -### Update channel list - -```sh -npm run channels:parse --- --config=./sites/maxstream.tv/maxstream.tv.config.js --output=./sites/maxstream.tv/maxstream.tv.channels.xml -``` - -### Test - -```sh -npm test --- maxstream.tv -``` +# maxstream.tv + +https://maxstream.tv/home + +### Download the guide + +```sh +npm run grab --- --channels=sites/maxstream.tv/maxstream.tv.channels.xml +``` + +### Update channel list + +```sh +npm run channels:parse --- --config=./sites/maxstream.tv/maxstream.tv.config.js --output=./sites/maxstream.tv/maxstream.tv.channels.xml +``` + +### Test + +```sh +npm test --- maxstream.tv +``` From f14439d4415872e010c2158f3019ee7fc3cc5bb8 Mon Sep 17 00:00:00 2001 From: Toha Date: Wed, 6 May 2026 10:22:44 +0700 Subject: [PATCH 60/63] Update channels XMLTV id. Signed-off-by: Toha --- sites/clickthecity.com/clickthecity.com.channels.xml | 2 +- sites/cubmu.com/cubmu.com.channels.xml | 6 +++--- sites/dens.tv/dens.tv.channels.xml | 2 +- sites/mncvision.id/mncvision.id_en.channels.xml | 2 +- sites/mncvision.id/mncvision.id_id.channels.xml | 2 +- sites/mysky.com.ph/mysky.com.ph.channels.xml | 2 +- sites/mytvsuper.com/mytvsuper.com_en.channels.xml | 2 +- sites/mytvsuper.com/mytvsuper.com_zh.channels.xml | 2 +- sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml | 2 +- sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml | 2 +- sites/tivie.id/tivie.id.channels.xml | 2 +- sites/vidio.com/vidio.com.channels.xml | 2 +- sites/visionplus.id/visionplus.id_en.channels.xml | 2 +- sites/visionplus.id/visionplus.id_id.channels.xml | 2 +- 14 files changed, 16 insertions(+), 16 deletions(-) diff --git a/sites/clickthecity.com/clickthecity.com.channels.xml b/sites/clickthecity.com/clickthecity.com.channels.xml index 0252df28f..9db75411d 100644 --- a/sites/clickthecity.com/clickthecity.com.channels.xml +++ b/sites/clickthecity.com/clickthecity.com.channels.xml @@ -29,7 +29,7 @@ K-Movies Pinoy GEM Kapamilya Channel - Rock Extreme + Rock Extreme Liga a2z Channel 11 diff --git a/sites/cubmu.com/cubmu.com.channels.xml b/sites/cubmu.com/cubmu.com.channels.xml index dd3ee03f7..3b706bc78 100644 --- a/sites/cubmu.com/cubmu.com.channels.xml +++ b/sites/cubmu.com/cubmu.com.channels.xml @@ -16,6 +16,7 @@ Song TV ABC Australia Al Jazeera + Al Quran Al Kareem ANTV Arirang Berita Satu @@ -31,7 +32,7 @@ CNBC Indonesia CNN Indonesia DAAI TV - DayStar + DayStar DENS Food Channel DENS Play Channel DENS Show Bizz @@ -49,7 +50,7 @@ jtv Khazanah Kompas TV - MDTV + MDTV MetroTV MNC TV Musik Indonesia @@ -59,7 +60,6 @@ One TV Pijar TV PSJ TV - Al Quran Al Kareem Rtv RCTI Russia Today diff --git a/sites/dens.tv/dens.tv.channels.xml b/sites/dens.tv/dens.tv.channels.xml index 18d821af0..812d1e7aa 100644 --- a/sites/dens.tv/dens.tv.channels.xml +++ b/sites/dens.tv/dens.tv.channels.xml @@ -15,7 +15,7 @@ DAAI TV Dance TV DensFood Channel - DensKnowledge + DensKnowledge DensLife&Style DensPlay DensShowBiz diff --git a/sites/mncvision.id/mncvision.id_en.channels.xml b/sites/mncvision.id/mncvision.id_en.channels.xml index 0dacb3b15..ec79f99c6 100644 --- a/sites/mncvision.id/mncvision.id_en.channels.xml +++ b/sites/mncvision.id/mncvision.id_en.channels.xml @@ -82,8 +82,8 @@ Outdoor channel HD Outdoor Channel RCTI + Rock Action Rock Entertainment - Rock Action SCTV SEA TODAY Sindo News TV diff --git a/sites/mncvision.id/mncvision.id_id.channels.xml b/sites/mncvision.id/mncvision.id_id.channels.xml index 4c0d5cbcc..3b3e6e33b 100644 --- a/sites/mncvision.id/mncvision.id_id.channels.xml +++ b/sites/mncvision.id/mncvision.id_id.channels.xml @@ -82,8 +82,8 @@ Outdoor channel HD Outdoor Channel RCTI + Rock Action Rock Entertainment - Rock Action SCTV SEA TODAY Sindo News TV diff --git a/sites/mysky.com.ph/mysky.com.ph.channels.xml b/sites/mysky.com.ph/mysky.com.ph.channels.xml index 189ba6180..071f0538c 100644 --- a/sites/mysky.com.ph/mysky.com.ph.channels.xml +++ b/sites/mysky.com.ph/mysky.com.ph.channels.xml @@ -42,7 +42,7 @@ HBO SIGNATURE HBO FAMILY NICK JR. - ROCK ACTION + ROCK ACTION THRILL FASHION TV CHANNEL NEWS ASIA diff --git a/sites/mytvsuper.com/mytvsuper.com_en.channels.xml b/sites/mytvsuper.com/mytvsuper.com_en.channels.xml index a8294d575..7ee70c783 100644 --- a/sites/mytvsuper.com/mytvsuper.com_en.channels.xml +++ b/sites/mytvsuper.com/mytvsuper.com_en.channels.xml @@ -26,7 +26,7 @@ Nickelodeon Creation TV ROCK Entertainment - ROCK Action + ROCK Action Thrill TVBS Asia TVBS News diff --git a/sites/mytvsuper.com/mytvsuper.com_zh.channels.xml b/sites/mytvsuper.com/mytvsuper.com_zh.channels.xml index 2449a2122..130a9da02 100644 --- a/sites/mytvsuper.com/mytvsuper.com_zh.channels.xml +++ b/sites/mytvsuper.com/mytvsuper.com_zh.channels.xml @@ -26,7 +26,7 @@ Nickelodeon 創世電視 ROCK綜藝娛樂 - ROCK Action + ROCK Action Thrill 無線衛星亞洲台 無線衛星新聞台 diff --git a/sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml b/sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml index 474bda6cc..c4538e3ab 100644 --- a/sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml +++ b/sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml @@ -50,7 +50,6 @@ Dragon TV DW (English) euronews - NBA TV Food Network France 24 France 24 (French) @@ -74,6 +73,7 @@ MOVIE MOVIE MTV India MUTV + NBA TV NHK WORLD-JAPAN NHK World Premium Nickelodeon diff --git a/sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml b/sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml index e9cb9be24..065b20d65 100644 --- a/sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml +++ b/sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml @@ -50,7 +50,6 @@ Dragon TV DW (English) euronews - NBA TV Food Network France 24 France 24 (French) @@ -74,6 +73,7 @@ MOVIE MOVIE MTV India MUTV + NBA TV NHK WORLD-JAPAN NHK World Premium Nickelodeon diff --git a/sites/tivie.id/tivie.id.channels.xml b/sites/tivie.id/tivie.id.channels.xml index 644a1cf5e..b31f0ae9c 100644 --- a/sites/tivie.id/tivie.id.channels.xml +++ b/sites/tivie.id/tivie.id.channels.xml @@ -38,8 +38,8 @@ ONE RTV RCTI + Rock Action Rock Entertainment - Rock Action SCTV Sindonews TV Sin Po TV diff --git a/sites/vidio.com/vidio.com.channels.xml b/sites/vidio.com/vidio.com.channels.xml index 8afdff3fe..797d690a9 100644 --- a/sites/vidio.com/vidio.com.channels.xml +++ b/sites/vidio.com/vidio.com.channels.xml @@ -53,7 +53,7 @@ RTV RCTI Real Madrid TV - Rock Action + Rock Action SCTV Sin Po TV SPOTV 2 diff --git a/sites/visionplus.id/visionplus.id_en.channels.xml b/sites/visionplus.id/visionplus.id_en.channels.xml index 079e962fc..eed2cae95 100644 --- a/sites/visionplus.id/visionplus.id_en.channels.xml +++ b/sites/visionplus.id/visionplus.id_en.channels.xml @@ -104,8 +104,8 @@ RTV RCTI Reformed 21 + Rock Action Rock Entertainment - Rock Action RT SCTV Sanlih diff --git a/sites/visionplus.id/visionplus.id_id.channels.xml b/sites/visionplus.id/visionplus.id_id.channels.xml index ee2e93b33..f4cd9c853 100644 --- a/sites/visionplus.id/visionplus.id_id.channels.xml +++ b/sites/visionplus.id/visionplus.id_id.channels.xml @@ -104,8 +104,8 @@ RTV RCTI Reformed 21 + Rock Action Rock Entertainment - Rock Action RT SCTV Sanlih From 384748d9cea8587bac531ee795f14b07b3b9fcc4 Mon Sep 17 00:00:00 2001 From: Julio Cesar <104462712+JulioCesarXY@users.noreply.github.com> Date: Wed, 6 May 2026 20:05:53 -0300 Subject: [PATCH 61/63] Update xmltv_id attributes for several channels --- sites/distro.tv/distro.tv.channels.xml | 32 +++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/sites/distro.tv/distro.tv.channels.xml b/sites/distro.tv/distro.tv.channels.xml index 43e0fe5ab..5beb1a516 100644 --- a/sites/distro.tv/distro.tv.channels.xml +++ b/sites/distro.tv/distro.tv.channels.xml @@ -1,7 +1,7 @@ FTF Sports - Horizon Sports + Horizon Sports The Boat Show Outside Dove @@ -9,28 +9,28 @@ Newsmax TV Lone Star Hard Knocks - Right Now Tv + Right Now Tv OAN Plus AWE Plus - Qello Concerts - Stingray Karaoke + Qello Concerts + Stingray Karaoke Stingray Naturescape Stingray Classica Stingray DJAZZ - Stingray Hit List - Stingray Hot Country - Stingray Rock Alternative - Stingray Pop Adult - Stingray Classic Rock - Stingray Éxitos del Momento - Stingray Greatest Hits - Stingray HipHop and RnB - Stingray Flashback 70s - Stingray Remember the 80s + Stingray Hit List + Stingray Hot Country + Stingray Rock Alternative + Stingray Pop Adult + Stingray Classic Rock + Stingray Éxitos del Momento + Stingray Greatest Hits + Stingray HipHop and RnB + Stingray Flashback 70s + Stingray Remember the 80s Schwab Network CJC Television Network World Poker Tour - Law & Crime + Law & Crime 24 Hour Free Movies SKWAD Channel Fight @@ -90,7 +90,7 @@ Cinema Hausa True African NatureStream.tv - FITE 24/7 + FITE 24/7 TNA Wrestling Channel Fight Network Africanews From 86b2df12493e432d84f7aaffa3b5a1e37baeabd9 Mon Sep 17 00:00:00 2001 From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com> Date: Thu, 7 May 2026 02:09:51 +0000 Subject: [PATCH 62/63] [Bot] Update SITES.md Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/25472045590) workflow. --- SITES.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SITES.md b/SITES.md index 6a49f6d1d..47efc793e 100644 --- a/SITES.md +++ b/SITES.md @@ -80,7 +80,7 @@ i24news.tv4🟢 iltalehti.fi147🟢 ionplustv.com1🟢 - ipko.tv194🟢 + ipko.tv201🟢 jiotv.com1094🟢 knr.gl1🟢 kvf.fo1🟢 @@ -89,6 +89,7 @@ magticom.ge240🟢 mako.co.il1🟢 makrodigitaltelevision.com1🟢 + maxstream.tv129🟢 maxtvgo.mk110🟢 mediagenie.co.kr5🟢 mediaklikk.hu8🟢 From bac140b55c6aad41575e26ab55174689980e3dee Mon Sep 17 00:00:00 2001 From: Julio Cesar <104462712+JulioCesarXY@users.noreply.github.com> Date: Wed, 6 May 2026 23:25:21 -0300 Subject: [PATCH 63/63] Update XMLTV IDs for Bollywood channels and TRACE UK --- sites/distro.tv/distro.tv.channels.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sites/distro.tv/distro.tv.channels.xml b/sites/distro.tv/distro.tv.channels.xml index 5beb1a516..fe456ddfb 100644 --- a/sites/distro.tv/distro.tv.channels.xml +++ b/sites/distro.tv/distro.tv.channels.xml @@ -112,8 +112,8 @@ Balle Balle TRACE Latina TRACE Urban - Bollywood Classic - Bollywood HD + Bollywood Classic + Bollywood HD IndieBox TRACE Brazuca Motorvision TV @@ -169,7 +169,7 @@ Global Punjab TV PLL Network PLL Network - TRACE UK + TRACE UK TidPix-Authentically African Green Chillies TV- Zindagi ka Tadka! Cowboy+ Sports