prismcast 1.10.2 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (693) hide show
  1. package/dist/app.d.ts +6 -3
  2. package/dist/app.d.ts.map +1 -0
  3. package/dist/app.js +140 -86
  4. package/dist/app.js.map +1 -1
  5. package/dist/browser/blockedPage.d.ts +80 -0
  6. package/dist/browser/blockedPage.d.ts.map +1 -0
  7. package/dist/browser/blockedPage.js +209 -0
  8. package/dist/browser/blockedPage.js.map +1 -0
  9. package/dist/browser/browserSupervisor.d.ts +80 -0
  10. package/dist/browser/browserSupervisor.d.ts.map +1 -0
  11. package/dist/browser/browserSupervisor.js +186 -0
  12. package/dist/browser/browserSupervisor.js.map +1 -0
  13. package/dist/browser/cdp.d.ts +1 -0
  14. package/dist/browser/cdp.d.ts.map +1 -0
  15. package/dist/browser/cdp.js +6 -5
  16. package/dist/browser/cdp.js.map +1 -1
  17. package/dist/browser/channelSelection.d.ts +45 -14
  18. package/dist/browser/channelSelection.d.ts.map +1 -0
  19. package/dist/browser/channelSelection.js +81 -18
  20. package/dist/browser/channelSelection.js.map +1 -1
  21. package/dist/browser/consent.d.ts +152 -0
  22. package/dist/browser/consent.d.ts.map +1 -0
  23. package/dist/browser/consent.js +418 -0
  24. package/dist/browser/consent.js.map +1 -0
  25. package/dist/browser/display.d.ts +1 -0
  26. package/dist/browser/display.d.ts.map +1 -0
  27. package/dist/browser/hlsPlaylistObserver.d.ts +55 -0
  28. package/dist/browser/hlsPlaylistObserver.d.ts.map +1 -0
  29. package/dist/browser/hlsPlaylistObserver.js +132 -0
  30. package/dist/browser/hlsPlaylistObserver.js.map +1 -0
  31. package/dist/browser/index.d.ts +67 -40
  32. package/dist/browser/index.d.ts.map +1 -0
  33. package/dist/browser/index.js +508 -300
  34. package/dist/browser/index.js.map +1 -1
  35. package/dist/browser/launchGovernor.d.ts +89 -0
  36. package/dist/browser/launchGovernor.d.ts.map +1 -0
  37. package/dist/browser/launchGovernor.js +96 -0
  38. package/dist/browser/launchGovernor.js.map +1 -0
  39. package/dist/browser/login.d.ts +10 -2
  40. package/dist/browser/login.d.ts.map +1 -0
  41. package/dist/browser/login.js +36 -5
  42. package/dist/browser/login.js.map +1 -1
  43. package/dist/browser/manifestInterceptor.d.ts +102 -49
  44. package/dist/browser/manifestInterceptor.d.ts.map +1 -0
  45. package/dist/browser/manifestInterceptor.js +219 -237
  46. package/dist/browser/manifestInterceptor.js.map +1 -1
  47. package/dist/browser/pageStaleness.d.ts +30 -0
  48. package/dist/browser/pageStaleness.d.ts.map +1 -0
  49. package/dist/browser/pageStaleness.js +76 -0
  50. package/dist/browser/pageStaleness.js.map +1 -0
  51. package/dist/browser/precaching.d.ts +95 -3
  52. package/dist/browser/precaching.d.ts.map +1 -0
  53. package/dist/browser/precaching.js +499 -65
  54. package/dist/browser/precaching.js.map +1 -1
  55. package/dist/browser/tabNetworkObserver.d.ts +49 -0
  56. package/dist/browser/tabNetworkObserver.d.ts.map +1 -0
  57. package/dist/browser/tabNetworkObserver.js +144 -0
  58. package/dist/browser/tabNetworkObserver.js.map +1 -0
  59. package/dist/browser/tuning/cache.d.ts +61 -0
  60. package/dist/browser/tuning/cache.d.ts.map +1 -0
  61. package/dist/browser/tuning/cache.js +62 -0
  62. package/dist/browser/tuning/cache.js.map +1 -0
  63. package/dist/browser/tuning/comcastPolymer.d.ts +3 -2
  64. package/dist/browser/tuning/comcastPolymer.d.ts.map +1 -0
  65. package/dist/browser/tuning/comcastPolymer.js +79 -102
  66. package/dist/browser/tuning/comcastPolymer.js.map +1 -1
  67. package/dist/browser/tuning/cox.d.ts +1 -0
  68. package/dist/browser/tuning/cox.d.ts.map +1 -0
  69. package/dist/browser/tuning/directv.d.ts +1 -0
  70. package/dist/browser/tuning/directv.d.ts.map +1 -0
  71. package/dist/browser/tuning/directv.js +52 -46
  72. package/dist/browser/tuning/directv.js.map +1 -1
  73. package/dist/browser/tuning/fox.d.ts +1 -0
  74. package/dist/browser/tuning/fox.d.ts.map +1 -0
  75. package/dist/browser/tuning/fox.js +13 -12
  76. package/dist/browser/tuning/fox.js.map +1 -1
  77. package/dist/browser/tuning/gridSearch.d.ts +68 -0
  78. package/dist/browser/tuning/gridSearch.d.ts.map +1 -0
  79. package/dist/browser/tuning/gridSearch.js +85 -0
  80. package/dist/browser/tuning/gridSearch.js.map +1 -0
  81. package/dist/browser/tuning/hbo.d.ts +1 -0
  82. package/dist/browser/tuning/hbo.d.ts.map +1 -0
  83. package/dist/browser/tuning/hbo.js +73 -45
  84. package/dist/browser/tuning/hbo.js.map +1 -1
  85. package/dist/browser/tuning/hulu.d.ts +1 -0
  86. package/dist/browser/tuning/hulu.d.ts.map +1 -0
  87. package/dist/browser/tuning/hulu.js +128 -173
  88. package/dist/browser/tuning/hulu.js.map +1 -1
  89. package/dist/browser/tuning/shared.d.ts +75 -5
  90. package/dist/browser/tuning/shared.d.ts.map +1 -0
  91. package/dist/browser/tuning/shared.js +216 -6
  92. package/dist/browser/tuning/shared.js.map +1 -1
  93. package/dist/browser/tuning/sling.d.ts +1 -0
  94. package/dist/browser/tuning/sling.d.ts.map +1 -0
  95. package/dist/browser/tuning/sling.js +105 -126
  96. package/dist/browser/tuning/sling.js.map +1 -1
  97. package/dist/browser/tuning/spectrum.d.ts +1 -0
  98. package/dist/browser/tuning/spectrum.d.ts.map +1 -0
  99. package/dist/browser/tuning/spectrum.js +80 -125
  100. package/dist/browser/tuning/spectrum.js.map +1 -1
  101. package/dist/browser/tuning/thumbnailRow.d.ts +1 -0
  102. package/dist/browser/tuning/thumbnailRow.d.ts.map +1 -0
  103. package/dist/browser/tuning/thumbnailRow.js +8 -2
  104. package/dist/browser/tuning/thumbnailRow.js.map +1 -1
  105. package/dist/browser/tuning/tileClick.d.ts +1 -0
  106. package/dist/browser/tuning/tileClick.d.ts.map +1 -0
  107. package/dist/browser/tuning/tileClick.js +3 -2
  108. package/dist/browser/tuning/tileClick.js.map +1 -1
  109. package/dist/browser/tuning/xfinity.d.ts +1 -0
  110. package/dist/browser/tuning/xfinity.d.ts.map +1 -0
  111. package/dist/browser/tuning/youtubeTv.d.ts +1 -0
  112. package/dist/browser/tuning/youtubeTv.d.ts.map +1 -0
  113. package/dist/browser/tuning/youtubeTv.js +74 -127
  114. package/dist/browser/tuning/youtubeTv.js.map +1 -1
  115. package/dist/browser/video.d.ts +54 -14
  116. package/dist/browser/video.d.ts.map +1 -0
  117. package/dist/browser/video.js +296 -138
  118. package/dist/browser/video.js.map +1 -1
  119. package/dist/channels/index.d.ts +1 -0
  120. package/dist/channels/index.d.ts.map +1 -0
  121. package/dist/channels/index.js +12 -9
  122. package/dist/channels/index.js.map +1 -1
  123. package/dist/config/channelForm.d.ts +15 -1
  124. package/dist/config/channelForm.d.ts.map +1 -0
  125. package/dist/config/channelForm.js +28 -12
  126. package/dist/config/channelForm.js.map +1 -1
  127. package/dist/config/consistencyProbe.d.ts +1 -0
  128. package/dist/config/consistencyProbe.d.ts.map +1 -0
  129. package/dist/config/consistencyProbe.js +27 -21
  130. package/dist/config/consistencyProbe.js.map +1 -1
  131. package/dist/config/health.d.ts +41 -8
  132. package/dist/config/health.d.ts.map +1 -0
  133. package/dist/config/health.js +189 -38
  134. package/dist/config/health.js.map +1 -1
  135. package/dist/config/index.d.ts +55 -3
  136. package/dist/config/index.d.ts.map +1 -0
  137. package/dist/config/index.js +320 -69
  138. package/dist/config/index.js.map +1 -1
  139. package/dist/config/paths.d.ts +10 -9
  140. package/dist/config/paths.d.ts.map +1 -0
  141. package/dist/config/paths.js +11 -11
  142. package/dist/config/paths.js.map +1 -1
  143. package/dist/config/persistence.context.d.ts +1 -0
  144. package/dist/config/persistence.context.d.ts.map +1 -0
  145. package/dist/config/persistence.d.ts +13 -10
  146. package/dist/config/persistence.d.ts.map +1 -0
  147. package/dist/config/persistence.js +40 -21
  148. package/dist/config/persistence.js.map +1 -1
  149. package/dist/config/presets.d.ts +1 -0
  150. package/dist/config/presets.d.ts.map +1 -0
  151. package/dist/config/profiles.d.ts +22 -15
  152. package/dist/config/profiles.d.ts.map +1 -0
  153. package/dist/config/profiles.js +81 -47
  154. package/dist/config/profiles.js.map +1 -1
  155. package/dist/config/providerLineups.d.ts +47 -0
  156. package/dist/config/providerLineups.d.ts.map +1 -0
  157. package/dist/config/providerLineups.js +137 -0
  158. package/dist/config/providerLineups.js.map +1 -0
  159. package/dist/config/reactivity.d.ts +84 -0
  160. package/dist/config/reactivity.d.ts.map +1 -0
  161. package/dist/config/reactivity.js +226 -0
  162. package/dist/config/reactivity.js.map +1 -0
  163. package/dist/config/servicePacks.d.ts +18 -2
  164. package/dist/config/servicePacks.d.ts.map +1 -0
  165. package/dist/config/servicePacks.js +53 -11
  166. package/dist/config/servicePacks.js.map +1 -1
  167. package/dist/config/services.d.ts +21 -15
  168. package/dist/config/services.d.ts.map +1 -0
  169. package/dist/config/services.js +35 -24
  170. package/dist/config/services.js.map +1 -1
  171. package/dist/config/sites.d.ts +6 -4
  172. package/dist/config/sites.d.ts.map +1 -0
  173. package/dist/config/sites.js +15 -11
  174. package/dist/config/sites.js.map +1 -1
  175. package/dist/config/userChannels.d.ts +129 -30
  176. package/dist/config/userChannels.d.ts.map +1 -0
  177. package/dist/config/userChannels.js +333 -68
  178. package/dist/config/userChannels.js.map +1 -1
  179. package/dist/config/userConfig.d.ts +14 -9
  180. package/dist/config/userConfig.d.ts.map +1 -0
  181. package/dist/config/userConfig.js +87 -25
  182. package/dist/config/userConfig.js.map +1 -1
  183. package/dist/config/userProfiles.d.ts +10 -6
  184. package/dist/config/userProfiles.d.ts.map +1 -0
  185. package/dist/config/userProfiles.js +64 -39
  186. package/dist/config/userProfiles.js.map +1 -1
  187. package/dist/hdhr/channelMap.d.ts +1 -0
  188. package/dist/hdhr/channelMap.d.ts.map +1 -0
  189. package/dist/hdhr/deviceId.d.ts +1 -0
  190. package/dist/hdhr/deviceId.d.ts.map +1 -0
  191. package/dist/hdhr/discover.d.ts +1 -0
  192. package/dist/hdhr/discover.d.ts.map +1 -0
  193. package/dist/hdhr/discover.js +48 -47
  194. package/dist/hdhr/discover.js.map +1 -1
  195. package/dist/hdhr/getHandlers.d.ts +29 -0
  196. package/dist/hdhr/getHandlers.d.ts.map +1 -0
  197. package/dist/hdhr/getHandlers.js +196 -0
  198. package/dist/hdhr/getHandlers.js.map +1 -0
  199. package/dist/hdhr/identity.d.ts +36 -0
  200. package/dist/hdhr/identity.d.ts.map +1 -0
  201. package/dist/hdhr/identity.js +51 -0
  202. package/dist/hdhr/identity.js.map +1 -0
  203. package/dist/hdhr/index.d.ts +22 -4
  204. package/dist/hdhr/index.d.ts.map +1 -0
  205. package/dist/hdhr/index.js +229 -54
  206. package/dist/hdhr/index.js.map +1 -1
  207. package/dist/hdhr/protocol.d.ts +75 -0
  208. package/dist/hdhr/protocol.d.ts.map +1 -0
  209. package/dist/hdhr/protocol.js +264 -0
  210. package/dist/hdhr/protocol.js.map +1 -0
  211. package/dist/hdhr/tunerState.d.ts +24 -0
  212. package/dist/hdhr/tunerState.d.ts.map +1 -0
  213. package/dist/hdhr/tunerState.js +67 -0
  214. package/dist/hdhr/tunerState.js.map +1 -0
  215. package/dist/hdhr/udp.d.ts +43 -0
  216. package/dist/hdhr/udp.d.ts.map +1 -0
  217. package/dist/hdhr/udp.js +277 -0
  218. package/dist/hdhr/udp.js.map +1 -0
  219. package/dist/identity.d.ts +1 -0
  220. package/dist/identity.d.ts.map +1 -0
  221. package/dist/identity.js +13 -11
  222. package/dist/identity.js.map +1 -1
  223. package/dist/index.d.ts +1 -0
  224. package/dist/index.d.ts.map +1 -0
  225. package/dist/index.js +11 -12
  226. package/dist/index.js.map +1 -1
  227. package/dist/native/codecInference.d.ts +1 -0
  228. package/dist/native/codecInference.d.ts.map +1 -0
  229. package/dist/native/codecInference.js +50 -5
  230. package/dist/native/codecInference.js.map +1 -1
  231. package/dist/native/decrypt.d.ts +6 -2
  232. package/dist/native/decrypt.d.ts.map +1 -0
  233. package/dist/native/decrypt.js +15 -8
  234. package/dist/native/decrypt.js.map +1 -1
  235. package/dist/native/index.d.ts +40 -17
  236. package/dist/native/index.d.ts.map +1 -0
  237. package/dist/native/index.js +281 -120
  238. package/dist/native/index.js.map +1 -1
  239. package/dist/native/probe.d.ts +114 -18
  240. package/dist/native/probe.d.ts.map +1 -0
  241. package/dist/native/probe.js +452 -115
  242. package/dist/native/probe.js.map +1 -1
  243. package/dist/native/proxy.d.ts +57 -5
  244. package/dist/native/proxy.d.ts.map +1 -0
  245. package/dist/native/proxy.js +604 -170
  246. package/dist/native/proxy.js.map +1 -1
  247. package/dist/native/tokenExpiry.d.ts +1 -0
  248. package/dist/native/tokenExpiry.d.ts.map +1 -0
  249. package/dist/native/tokenExpiry.js +1 -1
  250. package/dist/routes/assets.d.ts +1 -0
  251. package/dist/routes/assets.d.ts.map +1 -0
  252. package/dist/routes/assets.js +4 -2
  253. package/dist/routes/assets.js.map +1 -1
  254. package/dist/routes/auth.d.ts +1 -0
  255. package/dist/routes/auth.d.ts.map +1 -0
  256. package/dist/routes/auth.js +0 -1
  257. package/dist/routes/auth.js.map +1 -1
  258. package/dist/routes/cdp.d.ts +5 -5
  259. package/dist/routes/cdp.d.ts.map +1 -0
  260. package/dist/routes/cdp.js +59 -20
  261. package/dist/routes/cdp.js.map +1 -1
  262. package/dist/routes/channels.d.ts +1 -0
  263. package/dist/routes/channels.d.ts.map +1 -0
  264. package/dist/routes/channels.js +2 -1
  265. package/dist/routes/channels.js.map +1 -1
  266. package/dist/routes/clientActions.d.ts +98 -0
  267. package/dist/routes/clientActions.d.ts.map +1 -0
  268. package/dist/routes/clientActions.js +113 -0
  269. package/dist/routes/clientActions.js.map +1 -0
  270. package/dist/routes/components.d.ts +5 -3
  271. package/dist/routes/components.d.ts.map +1 -0
  272. package/dist/routes/components.js +36 -39
  273. package/dist/routes/components.js.map +1 -1
  274. package/dist/routes/config/channels/endpoints/browse.d.ts +1 -0
  275. package/dist/routes/config/channels/endpoints/browse.d.ts.map +1 -0
  276. package/dist/routes/config/channels/endpoints/browse.js +23 -10
  277. package/dist/routes/config/channels/endpoints/browse.js.map +1 -1
  278. package/dist/routes/config/channels/endpoints/bulk.d.ts +1 -0
  279. package/dist/routes/config/channels/endpoints/bulk.d.ts.map +1 -0
  280. package/dist/routes/config/channels/endpoints/bulk.js +5 -3
  281. package/dist/routes/config/channels/endpoints/bulk.js.map +1 -1
  282. package/dist/routes/config/channels/endpoints/crud.d.ts +1 -0
  283. package/dist/routes/config/channels/endpoints/crud.d.ts.map +1 -0
  284. package/dist/routes/config/channels/endpoints/crud.js +85 -93
  285. package/dist/routes/config/channels/endpoints/crud.js.map +1 -1
  286. package/dist/routes/config/channels/endpoints/importExport.d.ts +1 -0
  287. package/dist/routes/config/channels/endpoints/importExport.d.ts.map +1 -0
  288. package/dist/routes/config/channels/endpoints/importExport.js +6 -3
  289. package/dist/routes/config/channels/endpoints/importExport.js.map +1 -1
  290. package/dist/routes/config/channels/endpoints/predefined.d.ts +1 -0
  291. package/dist/routes/config/channels/endpoints/predefined.d.ts.map +1 -0
  292. package/dist/routes/config/channels/endpoints/prefs.d.ts +1 -0
  293. package/dist/routes/config/channels/endpoints/prefs.d.ts.map +1 -0
  294. package/dist/routes/config/channels/endpoints/prefs.js +2 -1
  295. package/dist/routes/config/channels/endpoints/prefs.js.map +1 -1
  296. package/dist/routes/config/channels/endpoints/service.d.ts +2 -1
  297. package/dist/routes/config/channels/endpoints/service.d.ts.map +1 -0
  298. package/dist/routes/config/channels/endpoints/service.js +3 -1
  299. package/dist/routes/config/channels/endpoints/service.js.map +1 -1
  300. package/dist/routes/config/channels/endpoints/tags.d.ts +1 -0
  301. package/dist/routes/config/channels/endpoints/tags.d.ts.map +1 -0
  302. package/dist/routes/config/channels/endpoints/tags.js +13 -7
  303. package/dist/routes/config/channels/endpoints/tags.js.map +1 -1
  304. package/dist/routes/config/channels/healthBridge.d.ts +24 -0
  305. package/dist/routes/config/channels/healthBridge.d.ts.map +1 -0
  306. package/dist/routes/config/channels/healthBridge.js +71 -0
  307. package/dist/routes/config/channels/healthBridge.js.map +1 -0
  308. package/dist/routes/config/channels/http/handler.d.ts +1 -0
  309. package/dist/routes/config/channels/http/handler.d.ts.map +1 -0
  310. package/dist/routes/config/channels/http/playlistHint.d.ts +2 -1
  311. package/dist/routes/config/channels/http/playlistHint.d.ts.map +1 -0
  312. package/dist/routes/config/channels/http/playlistHint.js +16 -2
  313. package/dist/routes/config/channels/http/playlistHint.js.map +1 -1
  314. package/dist/routes/config/channels/http/serviceWarning.d.ts +4 -2
  315. package/dist/routes/config/channels/http/serviceWarning.d.ts.map +1 -0
  316. package/dist/routes/config/channels/http/serviceWarning.js +3 -2
  317. package/dist/routes/config/channels/http/serviceWarning.js.map +1 -1
  318. package/dist/routes/config/channels/index.d.ts +1 -0
  319. package/dist/routes/config/channels/index.d.ts.map +1 -0
  320. package/dist/routes/config/channels/setup.d.ts +1 -0
  321. package/dist/routes/config/channels/setup.d.ts.map +1 -0
  322. package/dist/routes/config/channels/table.d.ts +3 -3
  323. package/dist/routes/config/channels/table.d.ts.map +1 -0
  324. package/dist/routes/config/channels/table.js +148 -107
  325. package/dist/routes/config/channels/table.js.map +1 -1
  326. package/dist/routes/config/http/envelope.d.ts +1 -0
  327. package/dist/routes/config/http/envelope.d.ts.map +1 -0
  328. package/dist/routes/config/index.d.ts +35 -3
  329. package/dist/routes/config/index.d.ts.map +1 -0
  330. package/dist/routes/config/index.js +51 -2
  331. package/dist/routes/config/index.js.map +1 -1
  332. package/dist/routes/config/services.d.ts +5 -4
  333. package/dist/routes/config/services.d.ts.map +1 -0
  334. package/dist/routes/config/services.js +57 -43
  335. package/dist/routes/config/services.js.map +1 -1
  336. package/dist/routes/config/settings.d.ts +1 -0
  337. package/dist/routes/config/settings.d.ts.map +1 -0
  338. package/dist/routes/config/settings.js +98 -49
  339. package/dist/routes/config/settings.js.map +1 -1
  340. package/dist/routes/debug.d.ts +1 -0
  341. package/dist/routes/debug.d.ts.map +1 -0
  342. package/dist/routes/debug.js +277 -139
  343. package/dist/routes/debug.js.map +1 -1
  344. package/dist/routes/health.d.ts +39 -1
  345. package/dist/routes/health.d.ts.map +1 -0
  346. package/dist/routes/health.js +33 -27
  347. package/dist/routes/health.js.map +1 -1
  348. package/dist/routes/hls.d.ts +1 -0
  349. package/dist/routes/hls.d.ts.map +1 -0
  350. package/dist/routes/icons.d.ts +1 -0
  351. package/dist/routes/icons.d.ts.map +1 -0
  352. package/dist/routes/icons.js +1 -1
  353. package/dist/routes/index.d.ts +1 -0
  354. package/dist/routes/index.d.ts.map +1 -0
  355. package/dist/routes/logs.d.ts +1 -0
  356. package/dist/routes/logs.d.ts.map +1 -0
  357. package/dist/routes/logs.js +14 -4
  358. package/dist/routes/logs.js.map +1 -1
  359. package/dist/routes/mpegts.d.ts +1 -0
  360. package/dist/routes/mpegts.d.ts.map +1 -0
  361. package/dist/routes/play.d.ts +1 -0
  362. package/dist/routes/play.d.ts.map +1 -0
  363. package/dist/routes/playlist.d.ts +1 -0
  364. package/dist/routes/playlist.d.ts.map +1 -0
  365. package/dist/routes/playlist.js +7 -2
  366. package/dist/routes/playlist.js.map +1 -1
  367. package/dist/routes/root/content.d.ts +8 -5
  368. package/dist/routes/root/content.d.ts.map +1 -0
  369. package/dist/routes/root/content.js +29 -26
  370. package/dist/routes/root/content.js.map +1 -1
  371. package/dist/routes/root/index.d.ts +2 -1
  372. package/dist/routes/root/index.d.ts.map +1 -0
  373. package/dist/routes/root/index.js +26 -21
  374. package/dist/routes/root/index.js.map +1 -1
  375. package/dist/routes/root/scripts/channels.d.ts +6 -0
  376. package/dist/routes/root/scripts/channels.d.ts.map +1 -0
  377. package/dist/routes/root/scripts/channels.js +197 -118
  378. package/dist/routes/root/scripts/channels.js.map +1 -1
  379. package/dist/routes/root/scripts/clientEscape.d.ts +22 -0
  380. package/dist/routes/root/scripts/clientEscape.d.ts.map +1 -0
  381. package/dist/routes/root/scripts/clientEscape.js +41 -0
  382. package/dist/routes/root/scripts/clientEscape.js.map +1 -0
  383. package/dist/routes/root/scripts/clientUrl.d.ts +23 -0
  384. package/dist/routes/root/scripts/clientUrl.d.ts.map +1 -0
  385. package/dist/routes/root/scripts/clientUrl.js +44 -0
  386. package/dist/routes/root/scripts/clientUrl.js.map +1 -0
  387. package/dist/routes/root/scripts/config.d.ts +6 -0
  388. package/dist/routes/root/scripts/config.d.ts.map +1 -0
  389. package/dist/routes/root/scripts/config.js +110 -24
  390. package/dist/routes/root/scripts/config.js.map +1 -1
  391. package/dist/routes/root/scripts/index.d.ts +1 -0
  392. package/dist/routes/root/scripts/index.d.ts.map +1 -0
  393. package/dist/routes/root/scripts/shared.d.ts +1 -0
  394. package/dist/routes/root/scripts/shared.d.ts.map +1 -0
  395. package/dist/routes/root/scripts/shared.js +112 -26
  396. package/dist/routes/root/scripts/shared.js.map +1 -1
  397. package/dist/routes/root/scripts/status.d.ts +1 -0
  398. package/dist/routes/root/scripts/status.d.ts.map +1 -0
  399. package/dist/routes/root/scripts/status.handlers.d.ts +23 -33
  400. package/dist/routes/root/scripts/status.handlers.d.ts.map +1 -0
  401. package/dist/routes/root/scripts/status.handlers.js +46 -92
  402. package/dist/routes/root/scripts/status.handlers.js.map +1 -1
  403. package/dist/routes/root/scripts/status.js +21 -8
  404. package/dist/routes/root/scripts/status.js.map +1 -1
  405. package/dist/routes/root/styles.d.ts +1 -0
  406. package/dist/routes/root/styles.d.ts.map +1 -0
  407. package/dist/routes/root/styles.js +7 -4
  408. package/dist/routes/root/styles.js.map +1 -1
  409. package/dist/routes/services.d.ts +13 -1
  410. package/dist/routes/services.d.ts.map +1 -0
  411. package/dist/routes/services.js +81 -68
  412. package/dist/routes/services.js.map +1 -1
  413. package/dist/routes/sse.d.ts +1 -0
  414. package/dist/routes/sse.d.ts.map +1 -0
  415. package/dist/routes/sse.js +1 -1
  416. package/dist/routes/sse.js.map +1 -1
  417. package/dist/routes/streams.d.ts +2 -1
  418. package/dist/routes/streams.d.ts.map +1 -0
  419. package/dist/routes/streams.js +6 -4
  420. package/dist/routes/streams.js.map +1 -1
  421. package/dist/routes/theme.d.ts +3 -2
  422. package/dist/routes/theme.d.ts.map +1 -0
  423. package/dist/routes/theme.js +6 -5
  424. package/dist/routes/theme.js.map +1 -1
  425. package/dist/routes/ui.d.ts +3 -1
  426. package/dist/routes/ui.d.ts.map +1 -0
  427. package/dist/routes/ui.js +16 -4
  428. package/dist/routes/ui.js.map +1 -1
  429. package/dist/routes/upgrade.d.ts +1 -0
  430. package/dist/routes/upgrade.d.ts.map +1 -0
  431. package/dist/routes/upgrade.js +6 -2
  432. package/dist/routes/upgrade.js.map +1 -1
  433. package/dist/service/commands.context.d.ts +1 -0
  434. package/dist/service/commands.context.d.ts.map +1 -0
  435. package/dist/service/commands.context.js +4 -3
  436. package/dist/service/commands.context.js.map +1 -1
  437. package/dist/service/commands.d.ts +1 -0
  438. package/dist/service/commands.d.ts.map +1 -0
  439. package/dist/service/commands.js +10 -13
  440. package/dist/service/commands.js.map +1 -1
  441. package/dist/service/generators.context.d.ts +1 -0
  442. package/dist/service/generators.context.d.ts.map +1 -0
  443. package/dist/service/generators.context.js +1 -1
  444. package/dist/service/generators.context.js.map +1 -1
  445. package/dist/service/generators.d.ts +4 -3
  446. package/dist/service/generators.d.ts.map +1 -0
  447. package/dist/service/generators.js +111 -31
  448. package/dist/service/generators.js.map +1 -1
  449. package/dist/service/index.d.ts +1 -0
  450. package/dist/service/index.d.ts.map +1 -0
  451. package/dist/streaming/captureLock.d.ts +44 -0
  452. package/dist/streaming/captureLock.d.ts.map +1 -0
  453. package/dist/streaming/captureLock.js +95 -0
  454. package/dist/streaming/captureLock.js.map +1 -0
  455. package/dist/streaming/captureSession.d.ts +31 -0
  456. package/dist/streaming/captureSession.d.ts.map +1 -0
  457. package/dist/streaming/captureSession.js +54 -0
  458. package/dist/streaming/captureSession.js.map +1 -0
  459. package/dist/streaming/clients.d.ts +1 -0
  460. package/dist/streaming/clients.d.ts.map +1 -0
  461. package/dist/streaming/codec.d.ts +1 -0
  462. package/dist/streaming/codec.d.ts.map +1 -0
  463. package/dist/streaming/fmp4Segmenter.d.ts +29 -2
  464. package/dist/streaming/fmp4Segmenter.d.ts.map +1 -0
  465. package/dist/streaming/fmp4Segmenter.js +79 -26
  466. package/dist/streaming/fmp4Segmenter.js.map +1 -1
  467. package/dist/streaming/hls.d.ts +18 -7
  468. package/dist/streaming/hls.d.ts.map +1 -0
  469. package/dist/streaming/hls.js +220 -120
  470. package/dist/streaming/hls.js.map +1 -1
  471. package/dist/streaming/hlsResume.d.ts +1 -0
  472. package/dist/streaming/hlsResume.d.ts.map +1 -0
  473. package/dist/streaming/hlsResume.js +1 -1
  474. package/dist/streaming/hlsResume.js.map +1 -1
  475. package/dist/streaming/hlsSegments.d.ts +59 -2
  476. package/dist/streaming/hlsSegments.d.ts.map +1 -0
  477. package/dist/streaming/hlsSegments.js +147 -17
  478. package/dist/streaming/hlsSegments.js.map +1 -1
  479. package/dist/streaming/lifecycle.d.ts +4 -1
  480. package/dist/streaming/lifecycle.d.ts.map +1 -0
  481. package/dist/streaming/lifecycle.js +65 -85
  482. package/dist/streaming/lifecycle.js.map +1 -1
  483. package/dist/streaming/monitor.d.ts +6 -4
  484. package/dist/streaming/monitor.d.ts.map +1 -0
  485. package/dist/streaming/monitor.js +343 -145
  486. package/dist/streaming/monitor.js.map +1 -1
  487. package/dist/streaming/mp4Parser.d.ts +5 -4
  488. package/dist/streaming/mp4Parser.d.ts.map +1 -0
  489. package/dist/streaming/mp4Parser.js +36 -13
  490. package/dist/streaming/mp4Parser.js.map +1 -1
  491. package/dist/streaming/mpegts.d.ts +16 -0
  492. package/dist/streaming/mpegts.d.ts.map +1 -0
  493. package/dist/streaming/mpegts.js +61 -17
  494. package/dist/streaming/mpegts.js.map +1 -1
  495. package/dist/streaming/playlistBuilder.d.ts +1 -0
  496. package/dist/streaming/playlistBuilder.d.ts.map +1 -0
  497. package/dist/streaming/preroll.d.ts +32 -5
  498. package/dist/streaming/preroll.d.ts.map +1 -0
  499. package/dist/streaming/preroll.js +70 -32
  500. package/dist/streaming/preroll.js.map +1 -1
  501. package/dist/streaming/pretune.d.ts +26 -1
  502. package/dist/streaming/pretune.d.ts.map +1 -0
  503. package/dist/streaming/pretune.js +22 -24
  504. package/dist/streaming/pretune.js.map +1 -1
  505. package/dist/streaming/pretuneTimers.d.ts +24 -0
  506. package/dist/streaming/pretuneTimers.d.ts.map +1 -0
  507. package/dist/streaming/pretuneTimers.js +56 -0
  508. package/dist/streaming/pretuneTimers.js.map +1 -0
  509. package/dist/streaming/recovery.d.ts +139 -5
  510. package/dist/streaming/recovery.d.ts.map +1 -0
  511. package/dist/streaming/recovery.js +160 -16
  512. package/dist/streaming/recovery.js.map +1 -1
  513. package/dist/streaming/registry.d.ts +27 -9
  514. package/dist/streaming/registry.d.ts.map +1 -0
  515. package/dist/streaming/registry.js +21 -3
  516. package/dist/streaming/registry.js.map +1 -1
  517. package/dist/streaming/setup.d.ts +157 -29
  518. package/dist/streaming/setup.d.ts.map +1 -0
  519. package/dist/streaming/setup.js +1034 -458
  520. package/dist/streaming/setup.js.map +1 -1
  521. package/dist/streaming/showInfo.d.ts +21 -1
  522. package/dist/streaming/showInfo.d.ts.map +1 -0
  523. package/dist/streaming/showInfo.js +31 -16
  524. package/dist/streaming/showInfo.js.map +1 -1
  525. package/dist/streaming/statusEmitter.d.ts +10 -10
  526. package/dist/streaming/statusEmitter.d.ts.map +1 -0
  527. package/dist/streaming/statusEmitter.js +5 -8
  528. package/dist/streaming/statusEmitter.js.map +1 -1
  529. package/dist/types/channels.d.ts +16 -4
  530. package/dist/types/channels.d.ts.map +1 -0
  531. package/dist/types/channels.js +4 -2
  532. package/dist/types/channels.js.map +1 -1
  533. package/dist/types/config.d.ts +16 -5
  534. package/dist/types/config.d.ts.map +1 -0
  535. package/dist/types/index.d.ts +3 -2
  536. package/dist/types/index.d.ts.map +1 -0
  537. package/dist/types/profiles.d.ts +6 -4
  538. package/dist/types/profiles.d.ts.map +1 -0
  539. package/dist/types/selection.d.ts +31 -3
  540. package/dist/types/selection.d.ts.map +1 -0
  541. package/dist/types/selection.js +4 -2
  542. package/dist/types/selection.js.map +1 -1
  543. package/dist/types/shared.d.ts +1 -0
  544. package/dist/types/shared.d.ts.map +1 -0
  545. package/dist/types/streaming.d.ts +8 -0
  546. package/dist/types/streaming.d.ts.map +1 -0
  547. package/dist/upgrade/commands.context.d.ts +1 -0
  548. package/dist/upgrade/commands.context.d.ts.map +1 -0
  549. package/dist/upgrade/commands.context.js +14 -10
  550. package/dist/upgrade/commands.context.js.map +1 -1
  551. package/dist/upgrade/commands.d.ts +8 -15
  552. package/dist/upgrade/commands.d.ts.map +1 -0
  553. package/dist/upgrade/commands.js +27 -28
  554. package/dist/upgrade/commands.js.map +1 -1
  555. package/dist/upgrade/detection.context.d.ts +1 -0
  556. package/dist/upgrade/detection.context.d.ts.map +1 -0
  557. package/dist/upgrade/detection.context.js +4 -1
  558. package/dist/upgrade/detection.context.js.map +1 -1
  559. package/dist/upgrade/detection.d.ts +9 -7
  560. package/dist/upgrade/detection.d.ts.map +1 -0
  561. package/dist/upgrade/detection.js +23 -54
  562. package/dist/upgrade/detection.js.map +1 -1
  563. package/dist/upgrade/index.d.ts +2 -0
  564. package/dist/upgrade/index.d.ts.map +1 -0
  565. package/dist/upgrade/index.js +1 -0
  566. package/dist/upgrade/index.js.map +1 -1
  567. package/dist/upgrade/lifecycle.context.d.ts +20 -0
  568. package/dist/upgrade/lifecycle.context.d.ts.map +1 -0
  569. package/dist/upgrade/lifecycle.context.js +47 -0
  570. package/dist/upgrade/lifecycle.context.js.map +1 -0
  571. package/dist/upgrade/lifecycle.d.ts +72 -0
  572. package/dist/upgrade/lifecycle.d.ts.map +1 -0
  573. package/dist/upgrade/lifecycle.js +175 -0
  574. package/dist/upgrade/lifecycle.js.map +1 -0
  575. package/dist/upgrade/pathHandle.d.ts +30 -0
  576. package/dist/upgrade/pathHandle.d.ts.map +1 -0
  577. package/dist/upgrade/pathHandle.js +102 -0
  578. package/dist/upgrade/pathHandle.js.map +1 -0
  579. package/dist/utils/bootSession.context.d.ts +16 -0
  580. package/dist/utils/bootSession.context.d.ts.map +1 -0
  581. package/dist/utils/bootSession.context.js +60 -0
  582. package/dist/utils/bootSession.context.js.map +1 -0
  583. package/dist/utils/bootSession.d.ts +17 -0
  584. package/dist/utils/bootSession.d.ts.map +1 -0
  585. package/dist/utils/bootSession.js +20 -0
  586. package/dist/utils/bootSession.js.map +1 -0
  587. package/dist/utils/chromeFetch.d.ts +1 -0
  588. package/dist/utils/chromeFetch.d.ts.map +1 -0
  589. package/dist/utils/cliOutput.d.ts +1 -0
  590. package/dist/utils/cliOutput.d.ts.map +1 -0
  591. package/dist/utils/clock.d.ts +5 -4
  592. package/dist/utils/clock.d.ts.map +1 -0
  593. package/dist/utils/clock.js +19 -16
  594. package/dist/utils/clock.js.map +1 -1
  595. package/dist/utils/debugFilter.d.ts +9 -1
  596. package/dist/utils/debugFilter.d.ts.map +1 -0
  597. package/dist/utils/debugFilter.js +60 -33
  598. package/dist/utils/debugFilter.js.map +1 -1
  599. package/dist/utils/delay.d.ts +48 -15
  600. package/dist/utils/delay.d.ts.map +1 -0
  601. package/dist/utils/delay.js +73 -20
  602. package/dist/utils/delay.js.map +1 -1
  603. package/dist/utils/errors.d.ts +32 -0
  604. package/dist/utils/errors.d.ts.map +1 -0
  605. package/dist/utils/errors.js +45 -4
  606. package/dist/utils/errors.js.map +1 -1
  607. package/dist/utils/evaluate.d.ts +1 -0
  608. package/dist/utils/evaluate.d.ts.map +1 -0
  609. package/dist/utils/evaluate.js +29 -23
  610. package/dist/utils/evaluate.js.map +1 -1
  611. package/dist/utils/ffmpeg.context.d.ts +1 -0
  612. package/dist/utils/ffmpeg.context.d.ts.map +1 -0
  613. package/dist/utils/ffmpeg.context.js.map +1 -1
  614. package/dist/utils/ffmpeg.d.ts +29 -7
  615. package/dist/utils/ffmpeg.d.ts.map +1 -0
  616. package/dist/utils/ffmpeg.js +32 -14
  617. package/dist/utils/ffmpeg.js.map +1 -1
  618. package/dist/utils/fileLogger.d.ts +3 -1
  619. package/dist/utils/fileLogger.d.ts.map +1 -0
  620. package/dist/utils/fileLogger.js +64 -29
  621. package/dist/utils/fileLogger.js.map +1 -1
  622. package/dist/utils/format.d.ts +14 -1
  623. package/dist/utils/format.d.ts.map +1 -0
  624. package/dist/utils/format.js +19 -5
  625. package/dist/utils/format.js.map +1 -1
  626. package/dist/utils/index.d.ts +4 -0
  627. package/dist/utils/index.d.ts.map +1 -0
  628. package/dist/utils/index.js +3 -0
  629. package/dist/utils/index.js.map +1 -1
  630. package/dist/utils/logEmitter.d.ts +1 -0
  631. package/dist/utils/logEmitter.d.ts.map +1 -0
  632. package/dist/utils/logger.d.ts +1 -0
  633. package/dist/utils/logger.d.ts.map +1 -0
  634. package/dist/utils/logger.js +10 -6
  635. package/dist/utils/logger.js.map +1 -1
  636. package/dist/utils/m3u.d.ts +3 -2
  637. package/dist/utils/m3u.d.ts.map +1 -0
  638. package/dist/utils/m3u.js +4 -3
  639. package/dist/utils/m3u.js.map +1 -1
  640. package/dist/utils/markup.d.ts +13 -1
  641. package/dist/utils/markup.d.ts.map +1 -0
  642. package/dist/utils/markup.js +28 -4
  643. package/dist/utils/markup.js.map +1 -1
  644. package/dist/utils/memo.d.ts +3 -2
  645. package/dist/utils/memo.d.ts.map +1 -0
  646. package/dist/utils/memo.js +3 -3
  647. package/dist/utils/morganStream.d.ts +1 -0
  648. package/dist/utils/morganStream.d.ts.map +1 -0
  649. package/dist/utils/network.d.ts +1 -0
  650. package/dist/utils/network.d.ts.map +1 -0
  651. package/dist/utils/network.js +2 -2
  652. package/dist/utils/pid.d.ts +3 -25
  653. package/dist/utils/pid.d.ts.map +1 -0
  654. package/dist/utils/pid.js +10 -49
  655. package/dist/utils/pid.js.map +1 -1
  656. package/dist/utils/platform.d.ts +3 -1
  657. package/dist/utils/platform.d.ts.map +1 -0
  658. package/dist/utils/platform.js +2 -1
  659. package/dist/utils/platform.js.map +1 -1
  660. package/dist/utils/processInspector.context.d.ts +8 -0
  661. package/dist/utils/processInspector.context.d.ts.map +1 -0
  662. package/dist/utils/processInspector.context.js +106 -0
  663. package/dist/utils/processInspector.context.js.map +1 -0
  664. package/dist/utils/processInspector.d.ts +55 -0
  665. package/dist/utils/processInspector.d.ts.map +1 -0
  666. package/dist/utils/processInspector.js +127 -0
  667. package/dist/utils/processInspector.js.map +1 -0
  668. package/dist/utils/retry.d.ts +25 -2
  669. package/dist/utils/retry.d.ts.map +1 -0
  670. package/dist/utils/retry.js +33 -6
  671. package/dist/utils/retry.js.map +1 -1
  672. package/dist/utils/runtimeIdentity.context.d.ts +7 -0
  673. package/dist/utils/runtimeIdentity.context.d.ts.map +1 -0
  674. package/dist/utils/runtimeIdentity.context.js +43 -0
  675. package/dist/utils/runtimeIdentity.context.js.map +1 -0
  676. package/dist/utils/runtimeIdentity.d.ts +98 -0
  677. package/dist/utils/runtimeIdentity.d.ts.map +1 -0
  678. package/dist/utils/runtimeIdentity.js +181 -0
  679. package/dist/utils/runtimeIdentity.js.map +1 -0
  680. package/dist/utils/sanitize.d.ts +1 -0
  681. package/dist/utils/sanitize.d.ts.map +1 -0
  682. package/dist/utils/streamContext.d.ts +2 -1
  683. package/dist/utils/streamContext.d.ts.map +1 -0
  684. package/dist/utils/streamContext.js +1 -1
  685. package/dist/utils/timing.d.ts +2 -1
  686. package/dist/utils/timing.d.ts.map +1 -0
  687. package/dist/utils/timing.js +0 -5
  688. package/dist/utils/timing.js.map +1 -1
  689. package/dist/utils/version.d.ts +1 -0
  690. package/dist/utils/version.d.ts.map +1 -0
  691. package/dist/utils/version.js +47 -13
  692. package/dist/utils/version.js.map +1 -1
  693. package/package.json +26 -20
@@ -1,18 +1,17 @@
1
1
  import { LOG, evaluateWithAbort, formatError } from "../../utils/index.js";
2
+ import { attemptGuideRecovery, createEmptyDiscoveryGuard, logAvailableChannels } from "./shared.js";
3
+ import { createProviderChannelCache, dedupeCacheEntries } from "./cache.js";
2
4
  import { CONFIG } from "../../config/index.js";
3
- import { logAvailableChannels } from "./shared.js";
4
5
  // Base URL for YouTube TV watch page navigation.
5
6
  const YOUTUBE_TV_BASE_URL = "https://tv.youtube.com";
6
7
  // Unified channel cache for YouTube TV. Maps lowercased guide names (e.g., "cnn", "nbc 5", "espn") to their combined discovery and tuning data. Populated during
7
8
  // the first tune (when the strategy enumerates all ~256 channels from the non-virtualized EPG grid) or the first discovery call. Both tuning (via findWatchUrl) and
8
9
  // discovery (via getCachedChannels / discoverYttvChannels) read from this single cache. Cleared on browser disconnect via clearYttvCache().
9
- const yttvChannelCache = new Map();
10
- // Tracks consecutive guide page loads that discover zero channels. When this reaches the recovery threshold, the strategy clears YTTV site data (service workers
11
- // and cache storage) via CDP and reloads the guide to break out of a degraded state where the guide grid container renders but channel entries are not populated.
12
- // Reset to zero on any successful discovery (> 0 channels found) or on browser restart (via clearYttvCache).
13
- let consecutiveEmptyDiscoveries = 0;
14
- // Number of consecutive empty discoveries before attempting site data recovery via CDP.
15
- const EMPTY_DISCOVERY_RECOVERY_THRESHOLD = 3;
10
+ const yttvCache = createProviderChannelCache((entry) => entry.discovered);
11
+ // Recovery guard for the degraded guide state where the grid container renders but channel entries are not populated, which stale browser session state -
12
+ // service workers and cached SPA code after a Chrome update - produces. The guard counts the empty loads and signals when clearing YTTV site data (service
13
+ // workers and cache storage) via CDP is warranted. Reset on any successful discovery (> 0 channels found) and on browser restart (via clearYttvCache).
14
+ const emptyDiscoveryGuard = createEmptyDiscoveryGuard("YouTube TV");
16
15
  // Known alternate channel names for affiliates that vary by market. CW appears as "WGN" in some markets. PBS affiliates appear under local call letters (e.g.,
17
16
  // WTTW, KQED) or branded names (e.g., "Cascade PBS", "Lakeshore PBS") rather than "PBS", so we list the major market call letters and branded names to cover most
18
17
  // users. Each alternate is tried after the primary name fails both exact and prefix+digit matching. Users in smaller markets override via custom channel entries with
@@ -33,63 +32,70 @@ const CHANNEL_ALTERNATES = {
33
32
  * "abc 7") while excluding unrelated channels that share the prefix (e.g., "nbc sports").
34
33
  * 3. Parenthetical suffix: cache key starts with the name followed by " (". Catches timezone/region variants like "magnolia network (pacific)".
35
34
  *
36
- * When a non-exact match succeeds, the result is also cached under the primary channelSelector key for O(1) lookup on subsequent calls. This function doubles as
37
- * the resolveDirectUrl hook - after the first tune populates the cache via channel discovery, every subsequent YTTV tune resolves here without loading the guide
38
- * page.
35
+ * When a non-exact match succeeds, the result is also cached under the primary channelSelector key for O(1) lookup on subsequent calls. This function backs the
36
+ * resolveDirectUrl hook via the async resolveYttvDirectUrl wrapper - after the first tune populates the cache via channel discovery, every subsequent YTTV tune
37
+ * resolves here without loading the guide page.
39
38
  * @param channelName - The channelSelector value (e.g., "CNN", "NBC", "CW").
40
39
  * @returns The full watch URL or null if no match is found.
41
40
  */
42
41
  function findWatchUrl(channelName) {
43
42
  const lower = channelName.toLowerCase();
44
- // Build the candidate list: primary name first, then any known alternates for markets where the affiliate uses a different name. The eslint disable is needed
45
- // because TypeScript's Record indexing doesn't capture that the key may not exist at runtime.
43
+ // Build the candidate list: primary name first, then any known alternates for markets where the affiliate uses a different name.
46
44
  const alternates = CHANNEL_ALTERNATES[lower];
47
45
  const namesToTry = alternates ? [lower, ...alternates.map((a) => a.toLowerCase())] : [lower];
48
46
  for (const name of namesToTry) {
49
47
  // Tier 1: Exact match.
50
- const exact = yttvChannelCache.get(name);
48
+ const exact = yttvCache.map.get(name);
51
49
  if (exact) {
52
50
  // Cache under the primary channelSelector key if we matched via an alternate name, so subsequent lookups are O(1).
53
51
  if (name !== lower) {
54
- yttvChannelCache.set(lower, exact);
52
+ yttvCache.map.set(lower, exact);
55
53
  }
56
54
  return exact.watchUrl;
57
55
  }
58
56
  // Tier 2: Prefix+digit match for local affiliates. Iterate all cache entries to find one whose key starts with "{name} " followed by a digit, matching the
59
- // "{Network} {Number}" pattern (e.g., "nbc 5", "abc 7") while excluding unrelated channels that share the prefix (e.g., "nbc sports").
60
- for (const [key, entry] of yttvChannelCache) {
57
+ // "{Network} {Number}" pattern (e.g., "nbc 5", "abc 7") while excluding unrelated channels that share the prefix (e.g., "nbc sports"). The 48 and 57 bounds
58
+ // are the ASCII code points for '0' and '9', so the charCodeAt comparison tests that the character after the space is a digit.
59
+ for (const [key, entry] of yttvCache.map) {
61
60
  if (key.startsWith(name + " ") && (key.length > name.length + 1) && (key.charCodeAt(name.length + 1) >= 48) && (key.charCodeAt(name.length + 1) <= 57)) {
62
- yttvChannelCache.set(lower, entry);
61
+ yttvCache.map.set(lower, entry);
63
62
  return entry.watchUrl;
64
63
  }
65
64
  }
66
65
  // Tier 3: Parenthetical suffix match for timezone/region variants. Find a cache entry whose key starts with "{name} (" to catch channels like
67
66
  // "magnolia network (pacific)" or "the filipino channel (pacific)".
68
- for (const [key, entry] of yttvChannelCache) {
67
+ for (const [key, entry] of yttvCache.map) {
69
68
  if (key.startsWith(name + " (")) {
70
- yttvChannelCache.set(lower, entry);
69
+ yttvCache.map.set(lower, entry);
71
70
  return entry.watchUrl;
72
71
  }
73
72
  }
74
73
  }
75
74
  return null;
76
75
  }
77
- /**
78
- * Invalidates the cached YouTube TV watch URL for the given channel selector. Called when a cached URL fails to produce a working stream. Deletes the
79
- * channelSelector key - the guide-name entries from channel discovery are left intact and will be refreshed on the next strategy run when the guide page is
80
- * reloaded.
81
- * @param channelSelector - The channel selector string to invalidate.
82
- */
83
- function invalidateYttvDirectUrl(channelSelector) {
84
- yttvChannelCache.delete(channelSelector.toLowerCase());
85
- }
86
76
  /**
87
77
  * Clears all YouTube TV caches: the unified channel cache and the empty discovery counter. Called by clearChannelSelectionCaches() in the coordinator when the
88
78
  * browser restarts, since a fresh browser session resolves the degraded guide state that the counter tracks.
89
79
  */
90
80
  function clearYttvCache() {
91
- consecutiveEmptyDiscoveries = 0;
92
- yttvChannelCache.clear();
81
+ emptyDiscoveryGuard.reset();
82
+ yttvCache.clear();
83
+ }
84
+ /**
85
+ * Returns YouTube TV's durable lineup for the persisted lineup store: each cached channel's identity paired with its watch URL. The URL is built from the guide's
86
+ * own watch path and carries no session state, so it survives a restart and lets a boot whose guide read failed still tune directly. The three-tier matching above
87
+ * files one entry object under several alias keys, so the entries are reduced to one occurrence per object before projection.
88
+ * @returns The durable lineup rows, or null when the cache is cold.
89
+ */
90
+ function exportYttvLineup() {
91
+ if (yttvCache.map.size === 0) {
92
+ return null;
93
+ }
94
+ return dedupeCacheEntries(yttvCache.map.values()).map((entry) => ({
95
+ channelSelector: entry.discovered.channelSelector,
96
+ name: entry.discovered.name,
97
+ watchUrl: entry.watchUrl
98
+ }));
93
99
  }
94
100
  /**
95
101
  * Discovers all channels from the YouTube TV EPG grid in a single evaluate round-trip. For each thumbnail endpoint with a valid watch/ href, extracts the channel
@@ -116,85 +122,24 @@ async function discoverGuideChannels(page) {
116
122
  return results;
117
123
  }, []);
118
124
  }
119
- /**
120
- * Attempts to recover from a degraded YouTube TV guide state by clearing cached site data (service workers and cache storage) via CDP and reloading the guide page.
121
- * This targets the specific failure mode where the guide grid container renders but channel entries are not populated, typically caused by stale browser session
122
- * state after a Chrome update. Cookies and login session are preserved - only caching layers are cleared.
123
- * @param page - The Puppeteer page object.
124
- * @returns Discovered channels after recovery, or an empty array if recovery failed.
125
- */
126
- async function attemptGuideRecovery(page) {
127
- LOG.warn("Clearing YouTube TV cached site data to recover from empty guide.");
128
- // Clear service workers and cache storage for the YouTube TV origin. These are caching layers that will be repopulated on reload - cookies and login session
129
- // state are deliberately preserved to avoid forcing re-authentication.
130
- try {
131
- const client = await page.createCDPSession();
132
- await client.send("Storage.clearDataForOrigin", { origin: YOUTUBE_TV_BASE_URL, storageTypes: "cache_storage,service_workers" });
133
- await client.detach();
134
- }
135
- catch (error) {
136
- LOG.warn("Failed to clear YouTube TV site data: %s.", formatError(error));
137
- return [];
138
- }
139
- // Reload the guide page with fresh state.
140
- try {
141
- await page.goto(YOUTUBE_TV_BASE_URL + "/live", { timeout: CONFIG.streaming.navigationTimeout, waitUntil: "load" });
142
- }
143
- catch (error) {
144
- LOG.warn("Failed to reload YouTube TV guide after clearing site data: %s.", formatError(error));
145
- return [];
146
- }
147
- // Wait for the EPG grid to render after reload.
148
- try {
149
- await page.waitForSelector("ytu-epg-row", { timeout: CONFIG.streaming.videoTimeout });
150
- }
151
- catch {
152
- LOG.warn("YouTube TV guide grid did not load after clearing site data.");
153
- return [];
154
- }
155
- // Re-attempt channel discovery on the reloaded page.
156
- const channels = await discoverGuideChannels(page);
157
- if (channels.length > 0) {
158
- LOG.info("YouTube TV guide recovery succeeded - discovered %s channels after clearing site data.", channels.length);
159
- }
160
- else {
161
- LOG.warn("YouTube TV guide still empty after clearing site data.");
162
- }
163
- return channels;
164
- }
165
125
  // Broadcast network names that have local affiliates displayed as "{Network} {Number}" (e.g., "NBC 5", "ABC 7") in the YouTube TV guide. Used to constrain
166
126
  // prefix+digit affiliate detection to actual broadcast networks and avoid false positives like "ESPN 2" or "Fox Sports 1".
167
127
  const YTTV_BROADCAST_NETWORKS = new Set(["abc", "cbs", "cw", "fox", "nbc", "pbs"]);
168
128
  // Pattern for detecting local affiliate channels displayed as "{Network} {Number}" (e.g., "NBC 5", "ABC 7"). The prefix is validated against
169
129
  // YTTV_BROADCAST_NETWORKS before tagging as an affiliate.
170
130
  const YTTV_AFFILIATE_PATTERN = /^(.+?) \d/;
171
- /**
172
- * Derives a DiscoveredChannel array from the unified channel cache, deduplicating alias entries via Set reference equality. Aliases are created by findWatchUrl
173
- * when a prefix+digit, parenthetical, or CHANNEL_ALTERNATES match caches the same YttvChannelEntry under the primary channelSelector key. Without deduplication,
174
- * iterating cache values would produce duplicate entries in the discovery output. Sorts by name before returning.
175
- * @returns Sorted, deduplicated array of discovered channels.
176
- */
177
- function buildYttvDiscoveredChannels() {
178
- const channels = [];
179
- const seen = new Set();
180
- for (const entry of yttvChannelCache.values()) {
181
- if (seen.has(entry)) {
182
- continue;
183
- }
184
- seen.add(entry);
185
- channels.push(entry.discovered);
186
- }
187
- channels.sort((a, b) => a.name.localeCompare(b.name));
188
- return channels;
189
- }
190
131
  /**
191
132
  * Populates the unified channel cache from raw guide channel data. For each channel, builds a DiscoveredChannel with affiliate detection and pairs it with the
192
- * full watch URL. Detects affiliates via two mechanisms: (1) prefix+digit pattern constrained to known broadcast networks (e.g., "NBC 5" -> affiliate of "NBC"),
193
- * and (2) CHANNEL_ALTERNATES entries for affiliates that use different names entirely (e.g., "WGN" -> affiliate of "CW"). Shared by youtubeGridStrategy
133
+ * full watch URL. Detects affiliates via the following mechanisms: a prefix+digit pattern constrained to known broadcast networks (e.g., "NBC 5" -> affiliate
134
+ * of "NBC"), and CHANNEL_ALTERNATES entries for affiliates that use different names entirely (e.g., "WGN" -> affiliate of "CW"). Shared by youtubeGridStrategy
194
135
  * (tuning-time population) and discoverYttvChannels (discovery endpoint).
195
136
  * @param rawChannels - Array of channel names and watch paths from discoverGuideChannels().
196
137
  */
197
138
  function populateYttvChannelCache(rawChannels) {
139
+ // Every caller hands us a complete read of the non-virtualized guide grid, so the cache mirrors that read rather than accumulating the union of every lineup a
140
+ // browser session has seen. A channel the provider has dropped is absent from the next read, and starting from an empty cache is what keeps it out. The tiered
141
+ // alias keys go with it and are re-derived by the next lookup that needs one.
142
+ yttvCache.clear();
198
143
  // Build a reverse lookup from alternate names to their parent network for affiliate detection.
199
144
  const alternateToNetwork = new Map();
200
145
  for (const [network, alts] of Object.entries(CHANNEL_ALTERNATES)) {
@@ -220,8 +165,11 @@ function populateYttvChannelCache(rawChannels) {
220
165
  entry.channelSelector = altNetwork;
221
166
  }
222
167
  }
223
- yttvChannelCache.set(ch.name.toLowerCase(), { discovered: entry, watchUrl: YOUTUBE_TV_BASE_URL + "/" + ch.watchPath });
168
+ yttvCache.map.set(ch.name.toLowerCase(), { discovered: entry, watchUrl: YOUTUBE_TV_BASE_URL + "/" + ch.watchPath });
224
169
  }
170
+ // The read this pass was built from covered the entire grid, so what sits in the cache at this point is the complete lineup and warm reads can be served
171
+ // from it.
172
+ yttvCache.markComplete();
225
173
  }
226
174
  /**
227
175
  * YouTube TV grid strategy: discovers all channels from the non-virtualized EPG grid at tv.youtube.com/live in a single pass, populating the unified channel cache
@@ -246,7 +194,7 @@ async function youtubeGridStrategy(page, profile) {
246
194
  await page.waitForSelector("ytu-epg-row", { timeout: CONFIG.streaming.videoTimeout });
247
195
  }
248
196
  catch {
249
- return { reason: "YouTube TV guide grid did not load.", success: false };
197
+ return { guideUnavailable: true, reason: "YouTube TV guide grid did not load.", success: false };
250
198
  }
251
199
  // Discover all channels from the guide grid.
252
200
  let allChannels = await discoverGuideChannels(page);
@@ -254,10 +202,15 @@ async function youtubeGridStrategy(page, profile) {
254
202
  // This can happen when stale browser session state (service workers, cached SPA code) becomes inconsistent after a Chrome update. Track consecutive occurrences
255
203
  // and attempt recovery by clearing cached site data once the threshold is reached.
256
204
  if (allChannels.length === 0) {
257
- consecutiveEmptyDiscoveries++;
258
- LOG.warn("YouTube TV guide loaded but no channels were discovered (%s consecutive). The guide may be in a degraded state.", consecutiveEmptyDiscoveries);
259
- if (consecutiveEmptyDiscoveries >= EMPTY_DISCOVERY_RECOVERY_THRESHOLD) {
260
- allChannels = await attemptGuideRecovery(page);
205
+ if (emptyDiscoveryGuard.recordEmpty()) {
206
+ allChannels = await attemptGuideRecovery(page, {
207
+ discover: discoverGuideChannels,
208
+ origin: YOUTUBE_TV_BASE_URL,
209
+ providerName: "YouTube TV",
210
+ reloadUrl: YOUTUBE_TV_BASE_URL + "/live",
211
+ storageTypes: "cache_storage,service_workers",
212
+ waitSelector: "ytu-epg-row"
213
+ });
261
214
  }
262
215
  }
263
216
  // If we still have no channels after the initial discovery and any recovery attempt, there is nothing to search or cache. This error message is deliberately
@@ -266,8 +219,8 @@ async function youtubeGridStrategy(page, profile) {
266
219
  return { reason: "YouTube TV guide is empty - no channels were discovered.", success: false };
267
220
  }
268
221
  // Successful discovery - reset the consecutive empty counter and repopulate the unified channel cache. Always repopulate rather than skipping when the cache has
269
- // entries, because invalidated entries (deleted by invalidateYttvDirectUrl) need to be restored with fresh watch URLs from the guide.
270
- consecutiveEmptyDiscoveries = 0;
222
+ // entries, because an entry the invalidate hook dropped needs restoring with a fresh watch URL from the guide.
223
+ emptyDiscoveryGuard.reset();
271
224
  populateYttvChannelCache(allChannels);
272
225
  LOG.debug("tuning:yttv", "Discovered %s YouTube TV channels.", allChannels.length);
273
226
  // Look up the target channel using tiered matching against the populated cache.
@@ -307,7 +260,6 @@ async function youtubeGridStrategy(page, profile) {
307
260
  * @param _page - Unused. Present to satisfy the async resolveDirectUrl signature.
308
261
  * @returns The cached watch URL or null.
309
262
  */
310
- // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await
311
263
  async function resolveYttvDirectUrl(channelSelector, _page) {
312
264
  return findWatchUrl(channelSelector);
313
265
  }
@@ -320,9 +272,10 @@ async function resolveYttvDirectUrl(channelSelector, _page) {
320
272
  * @returns Array of discovered channels with affiliate tagging.
321
273
  */
322
274
  async function discoverYttvChannels(page) {
323
- // Return from the unified cache if already populated.
324
- if (yttvChannelCache.size > 0) {
325
- return buildYttvDiscoveredChannels();
275
+ // Return from the unified cache if a prior tune or discovery call already enumerated the lineup.
276
+ const cached = yttvCache.cached();
277
+ if (cached) {
278
+ return cached;
326
279
  }
327
280
  // Wait for at least one EPG row to confirm the guide grid has rendered. The route handler navigates with networkidle2, which ensures all API data has arrived
328
281
  // before this function is called - no additional network idle wait is needed here.
@@ -338,28 +291,20 @@ async function discoverYttvChannels(page) {
338
291
  return [];
339
292
  }
340
293
  populateYttvChannelCache(allChannels);
341
- return buildYttvDiscoveredChannels();
342
- }
343
- /**
344
- * Returns cached discovered channels from the unified channel cache, or null if the cache is empty (no prior tune or discovery call has enumerated the lineup).
345
- * @returns Sorted array of discovered channels or null.
346
- */
347
- function getYttvCachedChannels() {
348
- if (yttvChannelCache.size === 0) {
349
- return null;
350
- }
351
- return buildYttvDiscoveredChannels();
294
+ return yttvCache.discovered();
352
295
  }
353
296
  export const yttvProvider = {
354
297
  discoverChannels: discoverYttvChannels,
355
- getCachedChannels: getYttvCachedChannels,
298
+ exportDurableLineup: exportYttvLineup,
299
+ getCachedChannels: yttvCache.cached,
356
300
  guideUrl: "https://tv.youtube.com/live",
357
301
  label: "YouTube TV",
358
302
  // Profile for YouTube TV (tv.youtube.com/live). The guide grid renders all ~256 channel rows in the DOM simultaneously (no virtualization), each containing a
359
- // direct watch URL. The youtubeGrid strategy performs a single querySelector to find the target channel's watch link via aria-label, extracts the URL, and
360
- // navigates directly - no scrolling, clicking, or timing workarounds needed. Uses selectReadyVideo because the watch page has ~36 video elements (live preview
361
- // thumbnails from the guide) but only one active stream with readyState >= 3 and videoWidth > 0. Extends fullscreenApi because requestFullscreen() works
362
- // directly on the active video element without gesture requirements.
303
+ // direct watch URL. The youtubeGrid strategy enumerates every channel in a single evaluate round-trip - one querySelectorAll reads all channel names and watch
304
+ // URLs into the unified cache - then resolves the target channel's watch URL from that cache and navigates directly, with no scrolling, clicking, or timing
305
+ // workarounds needed. Uses selectReadyVideo because the watch page has ~36 video elements (live preview thumbnails from the guide) but only one active stream
306
+ // with readyState >= 3 and videoWidth > 0. Extends fullscreenApi because requestFullscreen() works directly on the active video element without gesture
307
+ // requirements.
363
308
  profile: {
364
309
  category: "multiChannel",
365
310
  channelSelection: { strategy: "youtubeGrid" },
@@ -373,7 +318,9 @@ export const yttvProvider = {
373
318
  strategy: {
374
319
  clearCache: clearYttvCache,
375
320
  execute: youtubeGridStrategy,
376
- invalidateDirectUrl: invalidateYttvDirectUrl,
321
+ // Only the failing selector's own key is dropped. The guide-name entries stay put, and the next strategy run reloads the guide and rebuilds them all with
322
+ // fresh watch URLs.
323
+ invalidateDirectUrl: yttvCache.invalidate,
377
324
  resolveDirectUrl: resolveYttvDirectUrl
378
325
  },
379
326
  strategyName: "youtubeGrid"
@@ -1 +1 @@
1
- {"version":3,"file":"youtubeTv.js","sourceRoot":"","sources":["../../../src/browser/tuning/youtubeTv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"youtubeTv.js","sourceRoot":"","sources":["../../../src/browser/tuning/youtubeTv.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  import type { Frame, Page } from "puppeteer-core";
2
2
  import type { Nullable, ResolvedSiteProfile, TuneResult, VideoSelectorType } from "../types/index.ts";
3
+ import { getProvidersForDomain, selectChannel } from "./channelSelection.ts";
4
+ import { classifyBlockedPage } from "./blockedPage.ts";
5
+ import { startOverlayHandling } from "./consent.ts";
3
6
  /**
4
7
  * Builds a selector type identifier for the video element based on the site profile. This returns a string that browser context code interprets to select the
5
8
  * appropriate video element. Using a string identifier instead of passing functions avoids serialization issues with page.evaluate() and is more secure than
@@ -33,9 +36,11 @@ export interface VideoStateInfo {
33
36
  * Gets the current state of the video element for health monitoring. Returns null if no video element is found.
34
37
  * @param context - The frame or page containing the video element.
35
38
  * @param selectorType - The video selector type for finding the element.
39
+ * @param timeoutMs - How long to wait for the read before giving up. Omit for the evaluate wrapper's default bound; a caller that already has reason to suspect
40
+ * an unresponsive tab passes a shorter one, since it needs to tell a hung page from a live one rather than wait out a slow answer.
36
41
  * @returns The video state or null if no video found.
37
42
  */
38
- export declare function getVideoState(context: Frame | Page, selectorType: VideoSelectorType): Promise<Nullable<VideoStateInfo>>;
43
+ export declare function getVideoState(context: Frame | Page, selectorType: VideoSelectorType, timeoutMs?: number): Promise<Nullable<VideoStateInfo>>;
39
44
  /**
40
45
  * Enforces volume settings on the video element. Sets muted to false and volume to 1. This is called periodically during health monitoring to counter sites that
41
46
  * aggressively mute videos.
@@ -43,6 +48,18 @@ export declare function getVideoState(context: Frame | Page, selectorType: Video
43
48
  * @param selectorType - The video selector type for finding the element.
44
49
  */
45
50
  export declare function enforceVideoVolume(context: Frame | Page, selectorType: VideoSelectorType): Promise<void>;
51
+ /**
52
+ * Mutes every video element currently on the page, silencing audio that does not belong to the channel being established. A multi-channel page auto-plays a
53
+ * default livestream on load (Hulu's /live, for example), and with a capture pipeline already running that audio bleeds into the stream until channel selection
54
+ * reaches the requested channel; a page reloaded to re-establish a channel meets the same default again. Two moments call for it: where a tune begins, and where
55
+ * a re-establishment's playback initialization settles - the latter because playback establishment unmutes by a direct property write that an already-playing
56
+ * element keeps until something mutes it again.
57
+ *
58
+ * Best-effort: a page with no video elements yet, or one in a transitional state, swallows the failure rather than failing the caller. The unmute that matters
59
+ * happens naturally when startVideoPlayback() runs on the tuned channel.
60
+ * @param page - The Puppeteer page object.
61
+ */
62
+ export declare function muteExistingVideos(page: Page): Promise<void>;
46
63
  /**
47
64
  * Suppresses audio on a browser page for native HLS streaming. Native mode fetches segments directly from the provider's CDN - the page's video element is not needed
48
65
  * for content delivery, but the page stays alive for token refresh. Without suppression, the video continues playing audibly on the local machine.
@@ -107,8 +124,8 @@ export declare function startVideoPlayback(context: Frame | Page, selectorType:
107
124
  /**
108
125
  * Navigates a browser page to the specified URL with site-appropriate wait conditions. The navigation strategy depends on the site's player implementation:
109
126
  *
110
- * - waitForNetworkIdle=true: Wait for network activity to settle (no requests for 500ms). This ensures all JavaScript has loaded and the player is fully
111
- * initialized. Used for sites with complex async initialization.
127
+ * - waitForNetworkIdle=true: Wait for network activity to settle, allowing up to 2 concurrent connections for 500ms. This ensures all JavaScript has loaded
128
+ * and the player is fully initialized. Used for sites with complex async initialization.
112
129
  *
113
130
  * - waitForNetworkIdle=false: Return as soon as the page fires load event. Used for sites that have persistent connections or polling that would prevent
114
131
  * networkidle from ever completing.
@@ -149,8 +166,10 @@ export declare function findVideoContext(page: Page, profile: ResolvedSiteProfil
149
166
  * or playback issues.
150
167
  * @param context - The frame or page containing the video element.
151
168
  * @param profile - The site profile with video selection preferences.
169
+ * @param signal - Optional abort signal; when aborted the wait is abandoned without emitting the timeout warning, so the caller can supersede it after accepting an
170
+ * embedded-player consent gate that triggers a reload.
152
171
  */
153
- export declare function waitForVideoReady(context: Frame | Page, profile: ResolvedSiteProfile): Promise<void>;
172
+ export declare function waitForVideoReady(context: Frame | Page, profile: ResolvedSiteProfile, signal?: AbortSignal): Promise<void>;
154
173
  /**
155
174
  * Applies fullscreen styling to the video element using CSS to maximize the capture area. This CSS-based approach works for all sites regardless of their native
156
175
  * fullscreen mechanism (keyboard shortcuts, JavaScript API, etc.).
@@ -174,7 +193,7 @@ export declare function applyVideoStyles(context: Frame | Page, selectorType: Vi
174
193
  * This function uses Object.defineProperty to intercept property access, making it impossible for site JavaScript to change muted or volume values. The property
175
194
  * descriptors are set to configurable: true so the browser can still access the underlying values for playback.
176
195
  *
177
- * The function is idempotent - a __volumeLocked flag on the video element prevents applying the lock multiple times.
196
+ * The function is safe to call more than once - a __volumeLocked flag on the video element prevents applying the lock multiple times.
178
197
  * @param context - The frame or page containing the video element.
179
198
  * @param selectorType - The video selector type for finding the element.
180
199
  */
@@ -182,6 +201,9 @@ export declare function lockVolumeProperties(context: Frame | Page, selectorType
182
201
  /**
183
202
  * Triggers fullscreen mode using the appropriate method for the site. Different sites have different fullscreen implementations:
184
203
  *
204
+ * - Fullscreen button (fullscreenSelector): When configured, this is tried first by clicking the site's own fullscreen control, which uses the site's native
205
+ * mechanism and is the most reliable approach when the button is present.
206
+ *
185
207
  * - Keyboard shortcuts (fullscreenKey): Many players use "f" as a keyboard shortcut for fullscreen. We send this keypress to activate the player's native
186
208
  * fullscreen mode.
187
209
  *
@@ -189,7 +211,7 @@ export declare function lockVolumeProperties(context: Frame | Page, selectorType
189
211
  * prompts or be blocked by CSP, but works on many sites.
190
212
  *
191
213
  * Note that we also apply CSS-based fullscreen styling separately (in applyVideoStyles), which provides a reliable fallback when native fullscreen methods fail.
192
- * @param page - The Puppeteer page object for keyboard input.
214
+ * @param page - The Puppeteer page object, used for keyboard input and for clicking the fullscreen button when fullscreenSelector is configured.
193
215
  * @param context - The frame or page containing the video element.
194
216
  * @param profile - The site profile indicating fullscreen method.
195
217
  * @param selectorType - The video selector type for finding the element.
@@ -236,7 +258,7 @@ interface EnsurePlaybackOptions {
236
258
  }
237
259
  /**
238
260
  * Ensures the video is playing with proper audio settings. This is the core playback function that handles both initial setup and recovery from stalls. It is
239
- * designed to be idempotent - safe to call multiple times without adverse effects.
261
+ * safe to call more than once without adverse effects.
240
262
  *
241
263
  * Recovery escalation levels (higher levels include all lower-level actions):
242
264
  *
@@ -261,6 +283,12 @@ interface EnsurePlaybackOptions {
261
283
  * @param options - Optional recovery configuration. Omit for initial tune (full fullscreen behavior, level 1).
262
284
  */
263
285
  export declare function ensurePlayback(page: Page, context: Frame | Page, profile: ResolvedSiteProfile, options?: EnsurePlaybackOptions): Promise<void>;
286
+ export interface VideoTuneDeps {
287
+ readonly classifyBlockedPage: typeof classifyBlockedPage;
288
+ readonly getProvidersForDomain: typeof getProvidersForDomain;
289
+ readonly selectChannel: typeof selectChannel;
290
+ readonly startOverlayHandling: typeof startOverlayHandling;
291
+ }
264
292
  /**
265
293
  * Optional behaviors for initializePlayback(). All fields are optional; an empty options object preserves the default tune flow.
266
294
  */
@@ -270,6 +298,12 @@ export interface InitializePlaybackOptions {
270
298
  * store. The streaming setup layer constructs this closure with the channel key and service tag in scope.
271
299
  */
272
300
  persistResolution?: (resolvedSelector: string) => Promise<void>;
301
+ /**
302
+ * The URL this tune navigated to. When present, a failed tune diagnoses the still-open blocked page: a confirmed sign-in wall or consent overlay replaces the
303
+ * generic failure with an actionable error, and an unrecognized page rethrows the original failure unchanged. When absent, every failure propagates exactly as
304
+ * it occurred with no classifier pass.
305
+ */
306
+ requestedUrl?: string;
273
307
  /**
274
308
  * When true, skip the channel selection phase entirely. Used when navigating directly to a cached watch URL that already targets the correct channel - only
275
309
  * video detection, playback, and fullscreen setup are needed.
@@ -282,21 +316,26 @@ export interface InitializePlaybackOptions {
282
316
  * timeout, while channel selection and video setup run with their own internal time budgets (click retry loops, videoTimeout, etc.) without being killed by the
283
317
  * navigation timeout.
284
318
  *
285
- * For guideGrid channel selection failures, the function attempts a single retry after dismissing any stale overlay that may be covering the guide grid. This
286
- * handles the case where a failed click attempt left an overlay open, causing subsequent locateOnNowCell calls to fail.
319
+ * When channel selection fails because the guide surface itself never rendered, the function reloads the page and retries selection once. That failure class is
320
+ * transient - a rail whose lazy tiles never populated, an SPA shell that did not come up - and a reload is what cures it. A failure on a guide that did render,
321
+ * such as a channel name that is simply not in the lineup, gets no retry: reading the same rendered guide again would fail the same way, more slowly.
287
322
  *
288
323
  * @param page - The Puppeteer page object.
289
324
  * @param profile - The site profile containing all behavior flags.
290
325
  * @param options - Optional behaviors. See InitializePlaybackOptions.
326
+ * @param deps - Injected tune collaborators for testing; defaults to defaultVideoTuneDeps in production.
291
327
  * @returns The video context (frame or page) for subsequent monitoring, and a directTune flag when the channel was tuned via API interception.
292
328
  */
293
- export declare function initializePlayback(page: Page, profile: ResolvedSiteProfile, options?: InitializePlaybackOptions): Promise<TuneResult>;
329
+ export declare function initializePlayback(page: Page, profile: ResolvedSiteProfile, options?: InitializePlaybackOptions, deps?: VideoTuneDeps): Promise<TuneResult>;
294
330
  /**
295
- * Tunes to a channel by navigating to the URL and initializing video playback. This is the single source of truth for channel initialization, used by both initial
296
- * stream setup and recovery. Having one authoritative function ensures consistent behavior and prevents code divergence between setup and recovery paths.
331
+ * Tunes to a channel by navigating to the URL and initializing video playback. This is the recovery path's tune: the playback monitor calls it to bring a stream
332
+ * back by navigating the page again. Initial stream setup and native re-establishment reach the same phases through establishChannelPlayback in streaming/setup.ts,
333
+ * which composes navigation and playback initialization with the per-path policy each of those callers carries. Both routes land in initializePlayback, so the
334
+ * channel selection, video detection, and playback steps a recovered stream runs are the steps a fresh one ran.
297
335
  *
298
336
  * The tuning process:
299
- * 0. Check cache: If a direct watch URL is cached, navigate to it and skip channel selection. On failure, invalidate and fall through.
337
+ * 0. Check cache: If a direct watch URL is cached, navigate to it and skip channel selection. On failure, fall through, and let the cache coordinator classify
338
+ * the cause to decide whether the entry survives.
300
339
  * 1. Navigate: Load the target URL using site-appropriate wait conditions
301
340
  * 2. Select channel: For multi-channel players, click the desired channel in the UI
302
341
  * 3. Find video: Locate the video element (which may be in an iframe)
@@ -310,7 +349,8 @@ export declare function initializePlayback(page: Page, profile: ResolvedSiteProf
310
349
  * @param page - The Puppeteer page object.
311
350
  * @param url - The URL to navigate to.
312
351
  * @param profile - The site profile containing all behavior flags.
313
- * @returns The video context (frame or page) for subsequent monitoring.
352
+ * @returns The video context (frame or page) for subsequent monitoring, and a directTune flag when the channel was tuned via API interception.
314
353
  */
315
354
  export declare function tuneToChannel(page: Page, url: string, profile: ResolvedSiteProfile): Promise<TuneResult>;
316
355
  export {};
356
+ //# sourceMappingURL=video.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../src/browser/video.ts"],"names":[],"mappings":"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"}