stream.ts 21 KB

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