stream.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992
  1. // @ts-check
  2. /**
  3. * @typedef {Object} StreamService
  4. * @property {string} name
  5. * @property {Object} [ip]
  6. * @property {string[]} ip.v4
  7. * @property {string[]} ip.v6
  8. * @property {string[]} rules
  9. */
  10. /** @type {StreamService} */
  11. const $4GTV = {
  12. name: '4gtv',
  13. rules: [
  14. 'DOMAIN-SUFFIX,4gtv.tv',
  15. 'DOMAIN,4gtvfreepcvod-cds.cdn.hinet.net'
  16. ]
  17. };
  18. /** @type {StreamService} */
  19. const ALL4 = {
  20. name: 'All4',
  21. rules: [
  22. 'DOMAIN-SUFFIX,c4assets.com',
  23. 'DOMAIN-SUFFIX,channel4.com',
  24. 'USER-AGENT,All4*'
  25. ]
  26. };
  27. /** @type {StreamService} */
  28. const AMAZON_PRIME_VIDEO = {
  29. name: 'Amazon Prime Video',
  30. rules: [
  31. 'DOMAIN,avodmp4s3ww-a.akamaihd.net',
  32. 'DOMAIN,d1v5ir2lpwr8os.cloudfront.net',
  33. 'DOMAIN,d22qjgkvxw22r6.cloudfront.net',
  34. 'DOMAIN,d25xi40x97liuc.cloudfront.net',
  35. 'DOMAIN,dmqdd6hw24ucf.cloudfront.net',
  36. 'DOMAIN,d27xxe7juh1us6.cloudfront.net',
  37. 'DOMAIN,d184dfn36gombl.cloudfront.net',
  38. 'DOMAIN,d1xfray82862hr.cloudfront.net',
  39. 'DOMAIN,d3196yreox78o9.cloudfront.net',
  40. 'DOMAIN-KEYWORD,avoddashs',
  41. 'DOMAIN-SUFFIX,aiv-cdn.net',
  42. 'DOMAIN-SUFFIX,aiv-delivery.net',
  43. 'DOMAIN-SUFFIX,amazonvideo.com',
  44. 'DOMAIN-SUFFIX,amazonvideo.cc',
  45. 'DOMAIN-SUFFIX,media-amazon.com',
  46. 'DOMAIN-SUFFIX,primevideo.com',
  47. 'DOMAIN-SUFFIX,prime-video.com',
  48. 'DOMAIN-SUFFIX,primevideo.cc',
  49. 'DOMAIN-SUFFIX,primevideo.info',
  50. 'DOMAIN-SUFFIX,primevideo.org',
  51. 'DOMAIN-SUFFIX,primevideo.tv',
  52. 'DOMAIN-SUFFIX,amazonvideodirect.cc',
  53. 'DOMAIN-SUFFIX,amazonprimevideos.com',
  54. 'DOMAIN-SUFFIX,atv-ps.amazon.com',
  55. 'DOMAIN-SUFFIX,avodmp4s3ww-a.akamaihd.net',
  56. 'DOMAIN-SUFFIX,fls-na.amazon.com',
  57. 'USER-AGENT,InstantVideo.US*',
  58. 'USER-AGENT,Prime%20Video*',
  59. 'PROCESS-NAME,com.amazon.avod.thirdpartyclient'
  60. ]
  61. };
  62. /** @type {StreamService} */
  63. const ABEMA_TV = {
  64. name: 'AbemaTV',
  65. rules: [
  66. 'DOMAIN-KEYWORD,abematv.akamaized.net',
  67. 'DOMAIN-SUFFIX,abema.io',
  68. 'DOMAIN-SUFFIX,abema.tv',
  69. 'DOMAIN-SUFFIX,ameba.jp',
  70. 'DOMAIN-SUFFIX,abema-tv.com',
  71. 'DOMAIN-SUFFIX,hayabusa.dev',
  72. 'DOMAIN-SUFFIX,hayabusa.io',
  73. 'DOMAIN-SUFFIX,hayabusa.media',
  74. 'DOMAIN-SUFFIX,amebame.com',
  75. 'DOMAIN-SUFFIX,amebaownd.com',
  76. 'DOMAIN-SUFFIX,amebaowndme.com',
  77. 'DOMAIN-SUFFIX,ameblo.jp',
  78. 'DOMAIN-SUFFIX,dokusho-ojikan.jp',
  79. 'DOMAIN-SUFFIX,winticket.jp',
  80. 'USER-AGENT,AbemaTV*'
  81. ]
  82. };
  83. /** @type {StreamService} */
  84. const APPLE_TV = {
  85. name: 'Apple TV',
  86. rules: [
  87. 'DOMAIN,ocvideo.apple.com',
  88. 'DOMAIN,linear.tv.apple.com',
  89. 'DOMAIN,play-edge.itunes.apple.com',
  90. 'DOMAIN,np-edge.itunes.apple.com',
  91. 'DOMAIN,uts-api.itunes.apple.com',
  92. 'DOMAIN,hls-amt.itunes.apple.com',
  93. 'DOMAIN,hls.itunes.apple.com',
  94. 'USER-AGENT,AppleTV*',
  95. 'USER-AGENT,com.apple.tv*',
  96. 'PROCESS-NAME,tv'
  97. ]
  98. };
  99. /** @type {StreamService} */
  100. const APPLE_MUSIC_TV = {
  101. name: 'Apple Music TV',
  102. rules: [
  103. 'DOMAIN-SUFFIX,applemusic.com',
  104. 'PROCESS-NAME,music'
  105. ]
  106. };
  107. /** @type {StreamService} */
  108. const BAHAMUT = {
  109. name: 'Bahamut',
  110. rules: [
  111. 'DOMAIN,bahamut.akamaized.net',
  112. 'DOMAIN,gamer-cds.cdn.hinet.net',
  113. 'DOMAIN,gamer2-cds.cdn.hinet.net',
  114. 'DOMAIN-SUFFIX,viblast.com',
  115. 'DOMAIN-SUFFIX,bahamut.com.tw',
  116. 'DOMAIN-SUFFIX,gamer.com.tw',
  117. 'USER-AGENT,Anime*'
  118. ]
  119. };
  120. /** @type {StreamService} */
  121. const BBC = {
  122. name: 'BBC',
  123. rules: [
  124. 'DOMAIN-KEYWORD,bbcfmt',
  125. 'DOMAIN-KEYWORD,uk-live',
  126. 'DOMAIN-SUFFIX,bbc.co.uk',
  127. 'DOMAIN-SUFFIX,bbci.co.uk',
  128. 'USER-AGENT,BBCiPlayer*'
  129. ]
  130. };
  131. /** @type {StreamService} */
  132. const BILIBILI_INTL = {
  133. name: 'Bilibili International',
  134. rules: [
  135. 'DOMAIN-SUFFIX,biliintl.com',
  136. 'DOMAIN,apm-misaka.biliapi.net',
  137. 'DOMAIN,p.bstarstatic.com',
  138. 'DOMAIN,p-bstarstatic.akamaized.net',
  139. 'DOMAIN,upos-bstar-mirrorakam.akamaized.net',
  140. 'DOMAIN,upos-bstar1-mirrorakam.akamaized.net',
  141. 'DOMAIN-SUFFIX,bilibili.tv',
  142. 'PROCESS-NAME,com.bstar.intl'
  143. ]
  144. };
  145. /** @type {StreamService} */
  146. const DAZN = {
  147. name: 'DAZN',
  148. rules: [
  149. 'DOMAIN,d151l6v8er5bdm.cloudfront.net',
  150. 'DOMAIN,d1sgwhnao7452x.cloudfront.net',
  151. 'DOMAIN-KEYWORD,voddazn',
  152. 'DOMAIN-SUFFIX,dazn-api.com',
  153. 'DOMAIN-SUFFIX,dazn.com',
  154. 'DOMAIN-SUFFIX,dazndn.com',
  155. 'DOMAIN-SUFFIX,indazn.com',
  156. 'DOMAIN-SUFFIX,indaznlab.com',
  157. 'DOMAIN-SUFFIX,dca-ll-livedazn-dznlivejp.s.llnwi.net',
  158. 'DOMAIN-SUFFIX,dcalivedazn.akamaized.net',
  159. 'DOMAIN-SUFFIX,dcblivedazn.akamaized.net',
  160. 'USER-AGENT,DAZN*'
  161. ]
  162. };
  163. /** @type {StreamService} */
  164. const DEEZER = {
  165. name: 'Deezer',
  166. rules: [
  167. 'DOMAIN-SUFFIX,deezer.com',
  168. 'DOMAIN-SUFFIX,dzcdn.net',
  169. 'USER-AGENT,Deezer*'
  170. ]
  171. };
  172. /** @type {StreamService} */
  173. const DISNEY_PLUS = {
  174. name: 'Disney+',
  175. rules: [
  176. 'DOMAIN,cdn.registerdisney.go.com',
  177. 'DOMAIN-SUFFIX,bamgrid.com',
  178. 'DOMAIN-SUFFIX,disney-plus.net',
  179. 'DOMAIN-SUFFIX,disneyplus.com',
  180. 'DOMAIN-SUFFIX,dssott.com',
  181. 'DOMAIN-SUFFIX,disneystreaming.com',
  182. 'USER-AGENT,Disney+*'
  183. ]
  184. };
  185. /** @type {StreamService} */
  186. const DISCOVERY_PLUS = {
  187. name: 'Discovery+',
  188. rules: [
  189. 'USER-AGENT,DPlus*',
  190. 'USER-AGENT,discovery+*',
  191. 'DOMAIN-SUFFIX,disco-api.com',
  192. 'DOMAIN-SUFFIX,discoveryplus.co.uk',
  193. 'DOMAIN-SUFFIX,discoveryplus.com',
  194. 'DOMAIN-SUFFIX,discoveryplus.in',
  195. 'DOMAIN-SUFFIX,dnitv.com'
  196. ]
  197. };
  198. /** @type {StreamService} */
  199. const DMM = {
  200. name: 'DMM',
  201. rules: [
  202. 'DOMAIN-SUFFIX,dmm.co.jp',
  203. 'DOMAIN-SUFFIX,dmm.com',
  204. 'DOMAIN-SUFFIX,dmm-extension.com'
  205. ]
  206. };
  207. /** @type {StreamService} */
  208. const ENCORE_TVB = {
  209. name: 'encoreTVB',
  210. rules: [
  211. 'DOMAIN,bcbolt446c5271-a.akamaihd.net',
  212. 'DOMAIN,edge.api.brightcove.com',
  213. 'DOMAIN-SUFFIX,encoretvb.com',
  214. 'USER-AGENT,encoreTVB*',
  215. 'USER-AGENT,TVer-Release*',
  216. 'DOMAIN-SUFFIX,tver.jp'
  217. ]
  218. };
  219. /** @type {StreamService} */
  220. const FOX_NOW = {
  221. name: 'Fox Now',
  222. rules: [
  223. 'DOMAIN-SUFFIX,fox.com',
  224. 'DOMAIN-SUFFIX,foxdcg.com',
  225. 'DOMAIN-SUFFIX,uplynk.com',
  226. 'USER-AGENT,FOX%20NOW*'
  227. ]
  228. };
  229. /** @type {StreamService} */
  230. const FOX_PLUS = {
  231. name: 'Fox+',
  232. rules: [
  233. 'DOMAIN,dashasiafox.akamaized.netflix',
  234. 'DOMAIN,staticasiafox.akamaized.net',
  235. 'DOMAIN-SUFFIX,foxplus.com',
  236. 'DOMAIN-SUFFIX,theplatform.com',
  237. 'USER-AGENT,FOXPlus*'
  238. ]
  239. };
  240. /** @type {StreamService} */
  241. const HBO = {
  242. name: 'HBO Go / HBO Now / HBO Max',
  243. rules: [
  244. 'DOMAIN-SUFFIX,hbo.com',
  245. 'DOMAIN-SUFFIX,hbogo.com',
  246. 'DOMAIN-SUFFIX,hbonow.com',
  247. 'USER-AGENT,HBO%20NOW*',
  248. 'USER-AGENT,HBOMAX*',
  249. 'DOMAIN-SUFFIX,hbomax.com',
  250. 'DOMAIN-SUFFIX,hbomaxcdn.com'
  251. ]
  252. };
  253. /** @type {StreamService} */
  254. const HBO_ASIA = {
  255. name: 'HBO Asia',
  256. rules: [
  257. 'DOMAIN-SUFFIX,hboasia.com',
  258. 'DOMAIN-SUFFIX,hbogoasia.com',
  259. 'DOMAIN-SUFFIX,hbogoasia.hk',
  260. 'DOMAIN-KEYWORD,.hbogoasia.',
  261. 'DOMAIN,44wilhpljf.execute-api.ap-southeast-1.amazonaws.com',
  262. 'DOMAIN,bcbolthboa-a.akamaihd.net',
  263. 'DOMAIN,cf-images.ap-southeast-1.prod.boltdns.net',
  264. 'DOMAIN,dai3fd1oh325y.cloudfront.net',
  265. 'DOMAIN,hboasia1-i.akamaihd.net',
  266. 'DOMAIN,hboasia2-i.akamaihd.net',
  267. 'DOMAIN,hboasia3-i.akamaihd.net',
  268. 'DOMAIN,hboasia4-i.akamaihd.net',
  269. 'DOMAIN,hboasia5-i.akamaihd.net',
  270. 'DOMAIN,hbogoprod-vod.akamaized.net',
  271. 'DOMAIN,manifest.prod.boltdns.net',
  272. 'DOMAIN,players.brightcove.net',
  273. 'DOMAIN,s3-ap-southeast-1.amazonaws.com',
  274. 'DOMAIN,hboasialive.akamaized.net',
  275. 'DOMAIN,hbounify-prod.evergent.com',
  276. 'DOMAIN,hbolb.onwardsmg.com',
  277. 'USER-AGENT,HBO%20GO%20PROD%20HKG*',
  278. 'USER-AGENT,HBO*'
  279. ]
  280. };
  281. /** @type {StreamService} */
  282. const HIMALAYA_FM = {
  283. name: 'Himalaya FM',
  284. rules: [
  285. 'USER-AGENT,Himalaya*',
  286. 'DOMAIN-SUFFIX,himalaya.com'
  287. ]
  288. };
  289. /** @type {StreamService} */
  290. const HULU = {
  291. name: 'Hulu',
  292. rules: [
  293. 'DOMAIN-SUFFIX,happyon.jp',
  294. 'DOMAIN-SUFFIX,hulu.com',
  295. 'DOMAIN-SUFFIX,hulu.jp',
  296. 'DOMAIN-SUFFIX,hulu.tv',
  297. 'DOMAIN-SUFFIX,hulu.us',
  298. 'DOMAIN-SUFFIX,huluim.com',
  299. 'DOMAIN-SUFFIX,hulustream.com',
  300. 'DOMAIN-SUFFIX,hjholdings.jp',
  301. 'USER-AGENT,Hulu*',
  302. 'PROCESS-NAME,com.hulu.plus'
  303. ]
  304. };
  305. /** @type {StreamService} */
  306. const HWTV = {
  307. name: 'HWTV',
  308. rules: [
  309. 'USER-AGENT,HWTVMobile*',
  310. 'DOMAIN-SUFFIX,5itv.tv',
  311. 'DOMAIN-SUFFIX,ocnttv.com'
  312. ]
  313. };
  314. /** @type {StreamService} */
  315. const ITV = {
  316. name: 'ITV',
  317. rules: [
  318. 'DOMAIN,itvpnpmobile-a.akamaihd.net',
  319. 'DOMAIN-SUFFIX,itv.com',
  320. 'DOMAIN-SUFFIX,itvstatic.com',
  321. 'USER-AGENT,ITV_Player*'
  322. ]
  323. };
  324. /** @type {StreamService} */
  325. const IQIYI_GLOBAL = {
  326. name: 'iQiYi Global',
  327. rules: [
  328. 'DOMAIN-SUFFIX,iq.com',
  329. 'DOMAIN,cache.video.iqiyi.com',
  330. 'DOMAIN,cache-video.iq.com',
  331. 'DOMAIN,akmcdnoversea-tw.inter.ptqy.gitv.tv',
  332. 'DOMAIN,chuangcachecdnoversea-tw.inter.ptqy.gitv.tv',
  333. 'DOMAIN-SUFFIX,inter.iqiyi.com',
  334. 'DOMAIN-SUFFIX,intl-rcd.iqiyi.com',
  335. 'DOMAIN-SUFFIX,intl-subscription.iqiyi.com',
  336. 'DOMAIN-SUFFIX,intl.iqiyi.com'
  337. ]
  338. };
  339. /** @type {StreamService} */
  340. const JOOX = {
  341. name: 'JOOX',
  342. rules: [
  343. 'DOMAIN-SUFFIX,joox.com',
  344. 'DOMAIN-KEYWORD,jooxweb-api',
  345. 'USER-AGENT,JOOX*',
  346. 'USER-AGENT,WeMusic*',
  347. 'PROCESS-NAME,com.tencent.ibg.joox'
  348. ]
  349. };
  350. /** @type {StreamService} */
  351. const KKBOX = {
  352. name: 'KKBOX',
  353. rules: [
  354. 'DOMAIN-SUFFIX,kfs.io',
  355. 'DOMAIN-SUFFIX,kkbox.com',
  356. 'DOMAIN-SUFFIX,kkbox.com.tw',
  357. 'DOMAIN-SUFFIX,kkbox-prime.com',
  358. 'DOMAIN-SUFFIX,kktix.com'
  359. ]
  360. };
  361. /** @type {StreamService} */
  362. const KKTV = {
  363. name: 'KKTV',
  364. rules: [
  365. 'DOMAIN-SUFFIX,kk.stream',
  366. 'DOMAIN-SUFFIX,kktv.com.tw',
  367. 'DOMAIN-SUFFIX,kktv.me',
  368. 'USER-AGENT,com.kktv.ios.kktv*',
  369. 'USER-AGENT,KKTV*'
  370. ]
  371. };
  372. /** @type {StreamService} */
  373. const LINE_TV = {
  374. name: 'Line TV',
  375. rules: [
  376. 'DOMAIN,d3c7rimkq79yfu.cloudfront.net',
  377. 'DOMAIN-SUFFIX,linetv.tw',
  378. 'USER-AGENT,LINE%20TV*',
  379. 'PROCESS-NAME,com.linecorp.linetv'
  380. ]
  381. };
  382. /** @type {StreamService} */
  383. const LITV = {
  384. name: 'LiTV',
  385. rules: [
  386. 'DOMAIN,litvfreemobile-hichannel.cdn.hinet.net',
  387. 'DOMAIN-SUFFIX,litv.tv'
  388. ]
  389. };
  390. /** @type {StreamService} */
  391. const MAX = {
  392. name: 'Max',
  393. rules: [
  394. 'USER-AGENT,Max*',
  395. 'PROCESS-NAME,com.wbd.stream',
  396. 'DOMAIN-SUFFIX,max.com',
  397. 'DOMAIN-SUFFIX,discomax.com'
  398. ]
  399. };
  400. /** @type {StreamService} */
  401. const MY5 = {
  402. name: 'My5',
  403. rules: [
  404. 'DOMAIN,d349g9zuie06uo.cloudfront.net',
  405. 'DOMAIN-SUFFIX,channel5.com',
  406. 'DOMAIN-SUFFIX,my5.tv',
  407. 'USER-AGENT,My5*'
  408. ]
  409. };
  410. /** @type {StreamService} */
  411. const MYTV_SUPER = {
  412. name: 'myTV Super',
  413. rules: [
  414. 'DOMAIN-SUFFIX,mytvsuper.com',
  415. 'DOMAIN-SUFFIX,tvb.com',
  416. 'USER-AGENT,mytv*',
  417. 'DOMAIN-KEYWORD,nowtv100',
  418. 'DOMAIN-KEYWORD,rthklive'
  419. ]
  420. };
  421. /** @type {StreamService} */
  422. const NAVER_TV = {
  423. name: 'Naver TV',
  424. rules: [
  425. 'USER-AGENT,Naver%20TV*',
  426. 'DOMAIN-SUFFIX,tv.naver.com',
  427. 'DOMAIN-SUFFIX,smartmediarep.com'
  428. ]
  429. };
  430. /** @type {StreamService} */
  431. const NICONICO = {
  432. name: 'niconico',
  433. rules: [
  434. 'DOMAIN-SUFFIX,dmc.nico',
  435. 'DOMAIN-SUFFIX,nicovideo.jp',
  436. 'DOMAIN-SUFFIX,nimg.jp',
  437. 'DOMAIN-SUFFIX,socdm.com',
  438. 'USER-AGENT,Niconico*'
  439. ]
  440. };
  441. /** @type {StreamService} */
  442. const NETFLIX = {
  443. name: 'Netflix',
  444. ip: {
  445. v4: [
  446. '23.246.18.0/23',
  447. '37.77.184.0/21',
  448. '45.57.0.0/17',
  449. '64.120.128.0/17',
  450. '66.197.128.0/17',
  451. '69.53.224.0/19',
  452. '108.175.32.0/20',
  453. '185.2.220.0/22',
  454. '185.9.188.0/22',
  455. '192.173.64.0/18',
  456. '198.38.96.0/19',
  457. '198.45.48.0/20',
  458. '208.75.76.0/22'
  459. ],
  460. v6: [
  461. '2607:fb10::/32',
  462. '2620:10c:7000::/44',
  463. '2a00:86c0::/32',
  464. '2a03:5640::/32'
  465. ]
  466. },
  467. rules: [
  468. 'DOMAIN-SUFFIX,netflix.ca',
  469. 'DOMAIN-SUFFIX,netflix.com',
  470. 'DOMAIN-SUFFIX,netflix.net',
  471. 'DOMAIN-SUFFIX,nflxext.com',
  472. 'DOMAIN-SUFFIX,nflximg.com',
  473. 'DOMAIN-SUFFIX,nflximg.net',
  474. 'DOMAIN-SUFFIX,nflxso.net',
  475. 'DOMAIN-SUFFIX,nflxvideo.net',
  476. 'DOMAIN-SUFFIX,nflxsearch.net',
  477. 'DOMAIN-SUFFIX,netflix.com.edgesuite.net',
  478. 'DOMAIN-KEYWORD,netflixdnstest',
  479. 'DOMAIN-KEYWORD,dualstack.apiproxy-',
  480. 'DOMAIN-KEYWORD,dualstack.ichnaea-web-',
  481. 'DOMAIN-KEYWORD,apiproxy-device-prod-nlb-',
  482. 'USER-AGENT,Argo*',
  483. 'PROCESS-NAME,com.netflix.mediaclient'
  484. ]
  485. };
  486. /** @type {StreamService} */
  487. const NOW_E = {
  488. name: 'Now E',
  489. rules: [
  490. 'DOMAIN-SUFFIX,nowe.com'
  491. ]
  492. };
  493. /** @type {StreamService} */
  494. const OVERCAST_FM = {
  495. name: 'Overcast FM',
  496. rules: [
  497. 'USER-AGENT,Overcast*',
  498. 'DOMAIN-SUFFIX,overcast.fm'
  499. ]
  500. };
  501. /** @type {StreamService} */
  502. const PARAMOUNT = {
  503. name: 'Paramount+',
  504. rules: [
  505. 'USER-AGENT,PPlus*',
  506. 'DOMAIN-SUFFIX,cbsi.com',
  507. 'DOMAIN-SUFFIX,cbsaavideo.com',
  508. 'DOMAIN-SUFFIX,cbsivideo.com',
  509. 'DOMAIN-SUFFIX,paramountplus.com',
  510. 'DOMAIN,cbsi.live.ott.irdeto.com',
  511. 'DOMAIN,cbsplaylistserver.aws.syncbak.com',
  512. 'DOMAIN,cbsservice.aws.syncbak.com',
  513. 'DOMAIN,link.theplatform.com'
  514. ]
  515. };
  516. /** @type {StreamService} */
  517. const PBS = {
  518. name: 'PBS',
  519. rules: [
  520. 'USER-AGENT,PBS*',
  521. 'DOMAIN-SUFFIX,pbs.org'
  522. ]
  523. };
  524. /** @type {StreamService} */
  525. const PEACOCK = {
  526. name: 'Peacock',
  527. rules: [
  528. 'USER-AGENT,PeacockMobile*',
  529. 'DOMAIN-SUFFIX,peacocktv.com'
  530. ]
  531. };
  532. /** @type {StreamService} */
  533. const PANDORA = {
  534. name: 'Pandora',
  535. rules: [
  536. 'DOMAIN-SUFFIX,pandora.com',
  537. 'USER-AGENT,Pandora*'
  538. ]
  539. };
  540. /** @type {StreamService} */
  541. const PORNHUB = {
  542. name: 'Pornhub',
  543. rules: [
  544. 'DOMAIN-SUFFIX,phprcdn.com',
  545. 'DOMAIN-SUFFIX,pornhub.com',
  546. 'DOMAIN-SUFFIX,pornhubpremium.com'
  547. ]
  548. };
  549. /** @type {StreamService} */
  550. const SOUNDCLOUD = {
  551. name: 'SoundCloud',
  552. rules: [
  553. 'DOMAIN-SUFFIX,sndcdn.com',
  554. 'DOMAIN-SUFFIX,soundcloud.com',
  555. 'USER-AGENT,SoundCloud*'
  556. ]
  557. };
  558. /** @type {StreamService} */
  559. const SPOTIFY = {
  560. name: 'Spotify',
  561. ip: {
  562. v4: ['35.186.224.47/32'],
  563. v6: []
  564. },
  565. rules: [
  566. 'DOMAIN-KEYWORD,-spotify-com',
  567. 'DOMAIN-SUFFIX,pscdn.co',
  568. 'DOMAIN-SUFFIX,scdn.co',
  569. 'DOMAIN-SUFFIX,spoti.fi',
  570. 'DOMAIN-SUFFIX,spotify.com',
  571. 'DOMAIN-SUFFIX,byspotify.com',
  572. 'DOMAIN-SUFFIX,spotify-everywhere.com',
  573. 'DOMAIN-SUFFIX,spotify.design',
  574. 'DOMAIN-SUFFIX,spotifycdn.com',
  575. 'DOMAIN-SUFFIX,spotifycdn.net',
  576. 'DOMAIN-SUFFIX,spotifycharts.com',
  577. 'DOMAIN-SUFFIX,spotifycodes.com',
  578. 'DOMAIN-SUFFIX,spotifyforbrands.com',
  579. 'DOMAIN-SUFFIX,spotifyjobs.com',
  580. 'DOMAIN-SUFFIX,spotify-com.akamaized.net',
  581. 'DOMAIN-SUFFIX,spotifynewsroom.jp',
  582. 'DOMAIN-SUFFIX,spotilocal.com',
  583. 'DOMAIN-SUFFIX,tospotify.com',
  584. 'USER-AGENT,*Spotify*'
  585. ]
  586. };
  587. /** @type {StreamService} */
  588. const TVB_ANYWHERE = {
  589. name: 'TVB Anywhere',
  590. rules: [
  591. 'DOMAIN-KEYWORD,tvbanywhere'
  592. ]
  593. };
  594. /** @type {StreamService} */
  595. const TAIWAN_GOOD = {
  596. name: 'TaiwanGood',
  597. rules: [
  598. 'DOMAIN,hamifans.emome.net',
  599. 'DOMAIN-SUFFIX,skyking.com.tw',
  600. 'USER-AGENT,TaiwanGood*'
  601. ]
  602. };
  603. /** @type {StreamService} */
  604. const TIDAL = {
  605. name: 'TIDAL',
  606. rules: [
  607. 'USER-AGENT,TIDAL*',
  608. 'DOMAIN-SUFFIX,tidal.com',
  609. 'DOMAIN-SUFFIX,tidalhifi.com'
  610. ]
  611. };
  612. /** @type {StreamService} */
  613. const TIKTOK = {
  614. name: 'TikTok',
  615. rules: [
  616. 'DOMAIN-SUFFIX,byteoversea.com',
  617. 'DOMAIN-SUFFIX,ibytedtos.com',
  618. 'DOMAIN-SUFFIX,ibyteimg.com',
  619. 'DOMAIN-SUFFIX,ipstatp.com',
  620. 'DOMAIN-SUFFIX,isnssdk.com',
  621. 'DOMAIN-SUFFIX,muscdn.com',
  622. 'DOMAIN-SUFFIX,musical.ly',
  623. 'DOMAIN-SUFFIX,tiktok.com',
  624. 'DOMAIN-SUFFIX,tik-tokapi.com',
  625. 'DOMAIN-SUFFIX,tiktokcdn.com',
  626. 'DOMAIN-SUFFIX,tiktokv.com',
  627. 'DOMAIN-KEYWORD,-tiktokcdn-com',
  628. 'USER-AGENT,TikTok*'
  629. ]
  630. };
  631. /** @type {StreamService} */
  632. const TWITCH = {
  633. name: 'Twitch',
  634. rules: [
  635. 'DOMAIN-SUFFIX,jtvnw.net',
  636. 'DOMAIN-SUFFIX,ttvnw.net',
  637. 'DOMAIN-SUFFIX,twitch.tv',
  638. 'DOMAIN-SUFFIX,twitchcdn.net',
  639. 'DOMAIN-SUFFIX,twitchsvc.net',
  640. 'DOMAIN-SUFFIX,ext-twitch.tv',
  641. 'PROCESS-NAME,tv.twitch.android.app'
  642. ]
  643. };
  644. /** @type {StreamService} */
  645. const VIUTV = {
  646. name: 'ViuTV',
  647. rules: [
  648. 'DOMAIN,api.viu.now.com',
  649. 'DOMAIN,d1k2us671qcoau.cloudfront.net',
  650. 'DOMAIN,d2anahhhmp1ffz.cloudfront.net',
  651. 'DOMAIN,dfp6rglgjqszk.cloudfront.net',
  652. 'DOMAIN-SUFFIX,viu.com',
  653. 'DOMAIN-SUFFIX,viu.now.com',
  654. 'DOMAIN-SUFFIX,viu.tv',
  655. 'PROCESS-NAME,com.viu.pad',
  656. 'PROCESS-NAME,com.viu.phone',
  657. 'PROCESS-NAME,com.vuclip.viu',
  658. 'USER-AGENT,Viu*'
  659. ]
  660. };
  661. /** @type {StreamService} */
  662. const YOUTUBE = {
  663. name: 'YouTube',
  664. rules: [
  665. 'DOMAIN,youtubei.googleapis.com',
  666. 'DOMAIN,youtube.googleapis.com',
  667. 'DOMAIN-SUFFIX,googlevideo.com',
  668. 'DOMAIN-SUFFIX,youtube.com',
  669. 'DOMAIN-SUFFIX,withyoutube.com',
  670. 'DOMAIN-SUFFIX,youtubeeducation.com',
  671. 'DOMAIN-SUFFIX,youtubegaming.com',
  672. 'DOMAIN-SUFFIX,youtubekids.com',
  673. 'DOMAIN-SUFFIX,youtube-nocookie.com',
  674. 'USER-AGENT,com.google.ios.youtube*',
  675. 'USER-AGENT,YouTube*'
  676. ]
  677. };
  678. /** @type {StreamService} */
  679. const YOUTUBE_MUSIC = {
  680. name: 'YouTube Music',
  681. rules: [
  682. 'USER-AGENT,com.google.ios.youtubemusic*',
  683. 'USER-AGENT,YouTubeMusic*'
  684. ]
  685. };
  686. /** @type {StreamService} */
  687. const SHOWTIME = {
  688. name: 'SHOWTIME',
  689. rules: [
  690. 'DOMAIN-SUFFIX,sho.com',
  691. 'DOMAIN-SUFFIX,showtime.com'
  692. ]
  693. };
  694. /** @type {StreamService} */
  695. const WETV = {
  696. name: 'WeTV',
  697. ip: {
  698. v4: ['150.109.28.51/32'],
  699. v6: []
  700. },
  701. rules: [
  702. 'USER-AGENT,WeTV*',
  703. 'DOMAIN-SUFFIX,wetv.vip',
  704. 'DOMAIN-SUFFIX,wetvinfo.com'
  705. ]
  706. };
  707. /** @type {StreamService[]} */
  708. module.exports.ALL = [
  709. $4GTV,
  710. ABEMA_TV, AMAZON_PRIME_VIDEO, ALL4, APPLE_TV, APPLE_MUSIC_TV,
  711. BAHAMUT, BBC, BILIBILI_INTL,
  712. DAZN, DEEZER, DISNEY_PLUS, DISCOVERY_PLUS, DMM,
  713. ENCORE_TVB,
  714. FOX_NOW, FOX_PLUS,
  715. HBO, HBO_ASIA, HIMALAYA_FM, HULU, HWTV,
  716. IQIYI_GLOBAL, ITV,
  717. JOOX,
  718. KKBOX,
  719. KKTV,
  720. LINE_TV, LITV,
  721. MAX, MY5, MYTV_SUPER,
  722. NETFLIX, NAVER_TV, NICONICO, NOW_E,
  723. OVERCAST_FM,
  724. PARAMOUNT, PBS, PEACOCK, PANDORA, PORNHUB,
  725. SOUNDCLOUD, SPOTIFY,
  726. TAIWAN_GOOD, TIDAL, TIKTOK, TVB_ANYWHERE, TWITCH,
  727. VIUTV,
  728. WETV,
  729. YOUTUBE, YOUTUBE_MUSIC,
  730. SHOWTIME
  731. ];
  732. /** @type {StreamService[]} */
  733. module.exports.NORTH_AMERICA = [
  734. FOX_NOW,
  735. FOX_PLUS,
  736. HULU, // Hulu US
  737. // HBO,
  738. // www.nfl.com
  739. // epix.com
  740. // starz.com
  741. // www.philo.com
  742. // https://www.shudder.com/
  743. // https://www.britbox.com
  744. // crackle.com
  745. // www.cwtv.com
  746. // www.aetv.com
  747. // https://www.nba.com/watch/
  748. // fubo.tv
  749. // mola.tv
  750. // https://setantasports.com/
  751. // tubitv.com
  752. // SlingTV
  753. // PlutoTV
  754. // AcornTV
  755. SHOWTIME,
  756. ENCORE_TVB,
  757. // Funimation
  758. DISCOVERY_PLUS,
  759. PARAMOUNT,
  760. PEACOCK
  761. // Popcornflix
  762. // Crunchyroll
  763. // ATTNOW
  764. // KBSAmerican
  765. // KOCOWA
  766. // MathsSpot
  767. // CBCGem
  768. // Crave
  769. ];
  770. /** @type {StreamService[]} */
  771. module.exports.EU = [
  772. // RakutenTV
  773. // Funimation
  774. // SkyShowTime
  775. // HBO,
  776. // MathSpot
  777. // SkyGo
  778. // BritBox
  779. ITV, // ITVHUB
  780. // BBC Channel 4
  781. // BBC Channel 5
  782. BBC
  783. // Discovery+ UK discoveryplus.co.uk
  784. // Salto
  785. // CanalPlus
  786. // Molotov
  787. // Joyn
  788. // SKY_DE
  789. // ZDF
  790. // NLZIET
  791. // videoland
  792. // NPO_START_PLUS
  793. // HBO_Spain
  794. // Pantaya
  795. // RaiPlay
  796. // MegogoTV
  797. // Amediateka
  798. ];
  799. /** @type {StreamService[]} */
  800. module.exports.HK = [
  801. NOW_E,
  802. VIUTV,
  803. MYTV_SUPER,
  804. HBO_ASIA,
  805. BILIBILI_INTL
  806. ];
  807. /** @type {StreamService[]} */
  808. module.exports.TW = [
  809. KKTV,
  810. LITV,
  811. // MyVideo
  812. $4GTV,
  813. LINE_TV,
  814. // HamiVideo
  815. // CatchPlay
  816. HBO_ASIA,
  817. BAHAMUT,
  818. // elevensportstw
  819. BILIBILI_INTL
  820. ];
  821. /** @type {StreamService[]} */
  822. module.exports.JP = [
  823. DMM,
  824. // DMMTV
  825. ABEMA_TV,
  826. NICONICO
  827. // music.jp
  828. // Telasa
  829. // Paravi
  830. // unext
  831. // HuluJP
  832. // TVer
  833. // GYAO!
  834. // wowow
  835. // VideoMarket
  836. // FOD (Fuji TV)
  837. // Radiko
  838. // Karaoke@DAM
  839. // J:COM
  840. // Kancolle Japan
  841. // Pretty Derby Japan
  842. // Konosuba Fantastic Days
  843. ];
  844. /** @type {StreamService[]} */
  845. module.exports.AU = [
  846. // Stan
  847. // Binge
  848. // 7plus
  849. // Channel9
  850. // Channel10
  851. // ABCiView
  852. // OptusSports
  853. // SBSonDemand
  854. // NeonTV
  855. // SKyGONZ
  856. // ThreeNow
  857. // MaoriTV
  858. ];
  859. /** @type {StreamService[]} */
  860. module.exports.KR = [
  861. // WAVEE
  862. // Tving
  863. // CoupangPlay
  864. NAVER_TV
  865. // Afreeca
  866. // KBSDomestic
  867. // KOCOWA
  868. ];
  869. /** @type {StreamService[]} */
  870. module.exports.SOUTH_EAST_ASIA = [
  871. // HBO
  872. // B-Global SouthEastAsia
  873. // MeWatch SG
  874. // AISPlay Thailand
  875. // B-Global Thailand
  876. // B-Global Indonesia
  877. // K_Plus VN
  878. // TV360 VN
  879. // B-Global VN
  880. ];