prismcast 1.10.3 → 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 (674) hide show
  1. package/dist/app.d.ts +1 -0
  2. package/dist/app.d.ts.map +1 -0
  3. package/dist/app.js +103 -50
  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 +23 -6
  28. package/dist/browser/hlsPlaylistObserver.d.ts.map +1 -0
  29. package/dist/browser/hlsPlaylistObserver.js +27 -8
  30. package/dist/browser/hlsPlaylistObserver.js.map +1 -1
  31. package/dist/browser/index.d.ts +44 -27
  32. package/dist/browser/index.d.ts.map +1 -0
  33. package/dist/browser/index.js +427 -244
  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 +88 -35
  44. package/dist/browser/manifestInterceptor.d.ts.map +1 -0
  45. package/dist/browser/manifestInterceptor.js +165 -77
  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 +2 -1
  56. package/dist/browser/tabNetworkObserver.d.ts.map +1 -0
  57. package/dist/browser/tabNetworkObserver.js +7 -3
  58. package/dist/browser/tabNetworkObserver.js.map +1 -1
  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 +15 -11
  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 +7 -1
  140. package/dist/config/paths.d.ts.map +1 -0
  141. package/dist/config/paths.js +8 -1
  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 +21 -14
  152. package/dist/config/profiles.d.ts.map +1 -0
  153. package/dist/config/profiles.js +77 -43
  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 +16 -10
  168. package/dist/config/services.d.ts.map +1 -0
  169. package/dist/config/services.js +27 -16
  170. package/dist/config/services.js.map +1 -1
  171. package/dist/config/sites.d.ts +4 -2
  172. package/dist/config/sites.d.ts.map +1 -0
  173. package/dist/config/sites.js +9 -5
  174. package/dist/config/sites.js.map +1 -1
  175. package/dist/config/userChannels.d.ts +23 -18
  176. package/dist/config/userChannels.d.ts.map +1 -0
  177. package/dist/config/userChannels.js +45 -34
  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 +8 -4
  184. package/dist/config/userProfiles.d.ts.map +1 -0
  185. package/dist/config/userProfiles.js +48 -23
  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 +4 -3
  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 +39 -16
  236. package/dist/native/index.d.ts.map +1 -0
  237. package/dist/native/index.js +273 -103
  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 +56 -1
  244. package/dist/native/proxy.d.ts.map +1 -0
  245. package/dist/native/proxy.js +604 -161
  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 +4 -3
  267. package/dist/routes/clientActions.d.ts.map +1 -0
  268. package/dist/routes/components.d.ts +1 -0
  269. package/dist/routes/components.d.ts.map +1 -0
  270. package/dist/routes/components.js +2 -2
  271. package/dist/routes/components.js.map +1 -1
  272. package/dist/routes/config/channels/endpoints/browse.d.ts +1 -0
  273. package/dist/routes/config/channels/endpoints/browse.d.ts.map +1 -0
  274. package/dist/routes/config/channels/endpoints/browse.js +23 -10
  275. package/dist/routes/config/channels/endpoints/browse.js.map +1 -1
  276. package/dist/routes/config/channels/endpoints/bulk.d.ts +1 -0
  277. package/dist/routes/config/channels/endpoints/bulk.d.ts.map +1 -0
  278. package/dist/routes/config/channels/endpoints/bulk.js +5 -3
  279. package/dist/routes/config/channels/endpoints/bulk.js.map +1 -1
  280. package/dist/routes/config/channels/endpoints/crud.d.ts +1 -0
  281. package/dist/routes/config/channels/endpoints/crud.d.ts.map +1 -0
  282. package/dist/routes/config/channels/endpoints/crud.js +49 -22
  283. package/dist/routes/config/channels/endpoints/crud.js.map +1 -1
  284. package/dist/routes/config/channels/endpoints/importExport.d.ts +1 -0
  285. package/dist/routes/config/channels/endpoints/importExport.d.ts.map +1 -0
  286. package/dist/routes/config/channels/endpoints/importExport.js +6 -3
  287. package/dist/routes/config/channels/endpoints/importExport.js.map +1 -1
  288. package/dist/routes/config/channels/endpoints/predefined.d.ts +1 -0
  289. package/dist/routes/config/channels/endpoints/predefined.d.ts.map +1 -0
  290. package/dist/routes/config/channels/endpoints/prefs.d.ts +1 -0
  291. package/dist/routes/config/channels/endpoints/prefs.d.ts.map +1 -0
  292. package/dist/routes/config/channels/endpoints/prefs.js +2 -1
  293. package/dist/routes/config/channels/endpoints/prefs.js.map +1 -1
  294. package/dist/routes/config/channels/endpoints/service.d.ts +2 -1
  295. package/dist/routes/config/channels/endpoints/service.d.ts.map +1 -0
  296. package/dist/routes/config/channels/endpoints/service.js +3 -1
  297. package/dist/routes/config/channels/endpoints/service.js.map +1 -1
  298. package/dist/routes/config/channels/endpoints/tags.d.ts +1 -0
  299. package/dist/routes/config/channels/endpoints/tags.d.ts.map +1 -0
  300. package/dist/routes/config/channels/endpoints/tags.js +13 -7
  301. package/dist/routes/config/channels/endpoints/tags.js.map +1 -1
  302. package/dist/routes/config/channels/healthBridge.d.ts +1 -0
  303. package/dist/routes/config/channels/healthBridge.d.ts.map +1 -0
  304. package/dist/routes/config/channels/healthBridge.js +2 -2
  305. package/dist/routes/config/channels/http/handler.d.ts +1 -0
  306. package/dist/routes/config/channels/http/handler.d.ts.map +1 -0
  307. package/dist/routes/config/channels/http/playlistHint.d.ts +2 -1
  308. package/dist/routes/config/channels/http/playlistHint.d.ts.map +1 -0
  309. package/dist/routes/config/channels/http/playlistHint.js +16 -2
  310. package/dist/routes/config/channels/http/playlistHint.js.map +1 -1
  311. package/dist/routes/config/channels/http/serviceWarning.d.ts +4 -2
  312. package/dist/routes/config/channels/http/serviceWarning.d.ts.map +1 -0
  313. package/dist/routes/config/channels/http/serviceWarning.js +3 -2
  314. package/dist/routes/config/channels/http/serviceWarning.js.map +1 -1
  315. package/dist/routes/config/channels/index.d.ts +1 -0
  316. package/dist/routes/config/channels/index.d.ts.map +1 -0
  317. package/dist/routes/config/channels/setup.d.ts +1 -0
  318. package/dist/routes/config/channels/setup.d.ts.map +1 -0
  319. package/dist/routes/config/channels/table.d.ts +3 -3
  320. package/dist/routes/config/channels/table.d.ts.map +1 -0
  321. package/dist/routes/config/channels/table.js +55 -27
  322. package/dist/routes/config/channels/table.js.map +1 -1
  323. package/dist/routes/config/http/envelope.d.ts +1 -0
  324. package/dist/routes/config/http/envelope.d.ts.map +1 -0
  325. package/dist/routes/config/index.d.ts +35 -3
  326. package/dist/routes/config/index.d.ts.map +1 -0
  327. package/dist/routes/config/index.js +51 -2
  328. package/dist/routes/config/index.js.map +1 -1
  329. package/dist/routes/config/services.d.ts +5 -4
  330. package/dist/routes/config/services.d.ts.map +1 -0
  331. package/dist/routes/config/services.js +35 -24
  332. package/dist/routes/config/services.js.map +1 -1
  333. package/dist/routes/config/settings.d.ts +1 -0
  334. package/dist/routes/config/settings.d.ts.map +1 -0
  335. package/dist/routes/config/settings.js +89 -43
  336. package/dist/routes/config/settings.js.map +1 -1
  337. package/dist/routes/debug.d.ts +1 -0
  338. package/dist/routes/debug.d.ts.map +1 -0
  339. package/dist/routes/debug.js +2 -2
  340. package/dist/routes/debug.js.map +1 -1
  341. package/dist/routes/health.d.ts +39 -1
  342. package/dist/routes/health.d.ts.map +1 -0
  343. package/dist/routes/health.js +33 -27
  344. package/dist/routes/health.js.map +1 -1
  345. package/dist/routes/hls.d.ts +1 -0
  346. package/dist/routes/hls.d.ts.map +1 -0
  347. package/dist/routes/icons.d.ts +1 -0
  348. package/dist/routes/icons.d.ts.map +1 -0
  349. package/dist/routes/icons.js +1 -1
  350. package/dist/routes/index.d.ts +1 -0
  351. package/dist/routes/index.d.ts.map +1 -0
  352. package/dist/routes/logs.d.ts +1 -0
  353. package/dist/routes/logs.d.ts.map +1 -0
  354. package/dist/routes/logs.js +13 -3
  355. package/dist/routes/logs.js.map +1 -1
  356. package/dist/routes/mpegts.d.ts +1 -0
  357. package/dist/routes/mpegts.d.ts.map +1 -0
  358. package/dist/routes/play.d.ts +1 -0
  359. package/dist/routes/play.d.ts.map +1 -0
  360. package/dist/routes/playlist.d.ts +1 -0
  361. package/dist/routes/playlist.d.ts.map +1 -0
  362. package/dist/routes/playlist.js +7 -2
  363. package/dist/routes/playlist.js.map +1 -1
  364. package/dist/routes/root/content.d.ts +8 -5
  365. package/dist/routes/root/content.d.ts.map +1 -0
  366. package/dist/routes/root/content.js +11 -12
  367. package/dist/routes/root/content.js.map +1 -1
  368. package/dist/routes/root/index.d.ts +2 -1
  369. package/dist/routes/root/index.d.ts.map +1 -0
  370. package/dist/routes/root/index.js +10 -8
  371. package/dist/routes/root/index.js.map +1 -1
  372. package/dist/routes/root/scripts/channels.d.ts +6 -0
  373. package/dist/routes/root/scripts/channels.d.ts.map +1 -0
  374. package/dist/routes/root/scripts/channels.js +147 -97
  375. package/dist/routes/root/scripts/channels.js.map +1 -1
  376. package/dist/routes/root/scripts/clientEscape.d.ts +22 -0
  377. package/dist/routes/root/scripts/clientEscape.d.ts.map +1 -0
  378. package/dist/routes/root/scripts/clientEscape.js +41 -0
  379. package/dist/routes/root/scripts/clientEscape.js.map +1 -0
  380. package/dist/routes/root/scripts/clientUrl.d.ts +23 -0
  381. package/dist/routes/root/scripts/clientUrl.d.ts.map +1 -0
  382. package/dist/routes/root/scripts/clientUrl.js +44 -0
  383. package/dist/routes/root/scripts/clientUrl.js.map +1 -0
  384. package/dist/routes/root/scripts/config.d.ts +6 -0
  385. package/dist/routes/root/scripts/config.d.ts.map +1 -0
  386. package/dist/routes/root/scripts/config.js +39 -22
  387. package/dist/routes/root/scripts/config.js.map +1 -1
  388. package/dist/routes/root/scripts/index.d.ts +1 -0
  389. package/dist/routes/root/scripts/index.d.ts.map +1 -0
  390. package/dist/routes/root/scripts/shared.d.ts +1 -0
  391. package/dist/routes/root/scripts/shared.d.ts.map +1 -0
  392. package/dist/routes/root/scripts/shared.js +52 -26
  393. package/dist/routes/root/scripts/shared.js.map +1 -1
  394. package/dist/routes/root/scripts/status.d.ts +1 -0
  395. package/dist/routes/root/scripts/status.d.ts.map +1 -0
  396. package/dist/routes/root/scripts/status.handlers.d.ts +18 -6
  397. package/dist/routes/root/scripts/status.handlers.d.ts.map +1 -0
  398. package/dist/routes/root/scripts/status.handlers.js +38 -32
  399. package/dist/routes/root/scripts/status.handlers.js.map +1 -1
  400. package/dist/routes/root/scripts/status.js +15 -7
  401. package/dist/routes/root/scripts/status.js.map +1 -1
  402. package/dist/routes/root/styles.d.ts +1 -0
  403. package/dist/routes/root/styles.d.ts.map +1 -0
  404. package/dist/routes/root/styles.js +7 -4
  405. package/dist/routes/root/styles.js.map +1 -1
  406. package/dist/routes/services.d.ts +13 -1
  407. package/dist/routes/services.d.ts.map +1 -0
  408. package/dist/routes/services.js +81 -68
  409. package/dist/routes/services.js.map +1 -1
  410. package/dist/routes/sse.d.ts +1 -0
  411. package/dist/routes/sse.d.ts.map +1 -0
  412. package/dist/routes/sse.js +1 -1
  413. package/dist/routes/sse.js.map +1 -1
  414. package/dist/routes/streams.d.ts +2 -1
  415. package/dist/routes/streams.d.ts.map +1 -0
  416. package/dist/routes/streams.js +1 -1
  417. package/dist/routes/theme.d.ts +3 -2
  418. package/dist/routes/theme.d.ts.map +1 -0
  419. package/dist/routes/theme.js +6 -5
  420. package/dist/routes/theme.js.map +1 -1
  421. package/dist/routes/ui.d.ts +3 -1
  422. package/dist/routes/ui.d.ts.map +1 -0
  423. package/dist/routes/ui.js +16 -4
  424. package/dist/routes/ui.js.map +1 -1
  425. package/dist/routes/upgrade.d.ts +1 -0
  426. package/dist/routes/upgrade.d.ts.map +1 -0
  427. package/dist/routes/upgrade.js +6 -2
  428. package/dist/routes/upgrade.js.map +1 -1
  429. package/dist/service/commands.context.d.ts +1 -0
  430. package/dist/service/commands.context.d.ts.map +1 -0
  431. package/dist/service/commands.context.js +3 -2
  432. package/dist/service/commands.context.js.map +1 -1
  433. package/dist/service/commands.d.ts +1 -0
  434. package/dist/service/commands.d.ts.map +1 -0
  435. package/dist/service/commands.js +10 -13
  436. package/dist/service/commands.js.map +1 -1
  437. package/dist/service/generators.context.d.ts +1 -0
  438. package/dist/service/generators.context.d.ts.map +1 -0
  439. package/dist/service/generators.d.ts +3 -2
  440. package/dist/service/generators.d.ts.map +1 -0
  441. package/dist/service/generators.js +108 -20
  442. package/dist/service/generators.js.map +1 -1
  443. package/dist/service/index.d.ts +1 -0
  444. package/dist/service/index.d.ts.map +1 -0
  445. package/dist/streaming/captureLock.d.ts +44 -0
  446. package/dist/streaming/captureLock.d.ts.map +1 -0
  447. package/dist/streaming/captureLock.js +95 -0
  448. package/dist/streaming/captureLock.js.map +1 -0
  449. package/dist/streaming/captureSession.d.ts +31 -0
  450. package/dist/streaming/captureSession.d.ts.map +1 -0
  451. package/dist/streaming/captureSession.js +54 -0
  452. package/dist/streaming/captureSession.js.map +1 -0
  453. package/dist/streaming/clients.d.ts +1 -0
  454. package/dist/streaming/clients.d.ts.map +1 -0
  455. package/dist/streaming/codec.d.ts +1 -0
  456. package/dist/streaming/codec.d.ts.map +1 -0
  457. package/dist/streaming/fmp4Segmenter.d.ts +29 -2
  458. package/dist/streaming/fmp4Segmenter.d.ts.map +1 -0
  459. package/dist/streaming/fmp4Segmenter.js +79 -26
  460. package/dist/streaming/fmp4Segmenter.js.map +1 -1
  461. package/dist/streaming/hls.d.ts +18 -7
  462. package/dist/streaming/hls.d.ts.map +1 -0
  463. package/dist/streaming/hls.js +219 -115
  464. package/dist/streaming/hls.js.map +1 -1
  465. package/dist/streaming/hlsResume.d.ts +1 -0
  466. package/dist/streaming/hlsResume.d.ts.map +1 -0
  467. package/dist/streaming/hlsResume.js +1 -1
  468. package/dist/streaming/hlsResume.js.map +1 -1
  469. package/dist/streaming/hlsSegments.d.ts +58 -1
  470. package/dist/streaming/hlsSegments.d.ts.map +1 -0
  471. package/dist/streaming/hlsSegments.js +147 -17
  472. package/dist/streaming/hlsSegments.js.map +1 -1
  473. package/dist/streaming/lifecycle.d.ts +4 -1
  474. package/dist/streaming/lifecycle.d.ts.map +1 -0
  475. package/dist/streaming/lifecycle.js +65 -85
  476. package/dist/streaming/lifecycle.js.map +1 -1
  477. package/dist/streaming/monitor.d.ts +6 -4
  478. package/dist/streaming/monitor.d.ts.map +1 -0
  479. package/dist/streaming/monitor.js +343 -145
  480. package/dist/streaming/monitor.js.map +1 -1
  481. package/dist/streaming/mp4Parser.d.ts +5 -4
  482. package/dist/streaming/mp4Parser.d.ts.map +1 -0
  483. package/dist/streaming/mp4Parser.js +36 -13
  484. package/dist/streaming/mp4Parser.js.map +1 -1
  485. package/dist/streaming/mpegts.d.ts +16 -0
  486. package/dist/streaming/mpegts.d.ts.map +1 -0
  487. package/dist/streaming/mpegts.js +61 -17
  488. package/dist/streaming/mpegts.js.map +1 -1
  489. package/dist/streaming/playlistBuilder.d.ts +1 -0
  490. package/dist/streaming/playlistBuilder.d.ts.map +1 -0
  491. package/dist/streaming/preroll.d.ts +31 -4
  492. package/dist/streaming/preroll.d.ts.map +1 -0
  493. package/dist/streaming/preroll.js +69 -27
  494. package/dist/streaming/preroll.js.map +1 -1
  495. package/dist/streaming/pretune.d.ts +26 -1
  496. package/dist/streaming/pretune.d.ts.map +1 -0
  497. package/dist/streaming/pretune.js +22 -24
  498. package/dist/streaming/pretune.js.map +1 -1
  499. package/dist/streaming/pretuneTimers.d.ts +24 -0
  500. package/dist/streaming/pretuneTimers.d.ts.map +1 -0
  501. package/dist/streaming/pretuneTimers.js +56 -0
  502. package/dist/streaming/pretuneTimers.js.map +1 -0
  503. package/dist/streaming/recovery.d.ts +139 -5
  504. package/dist/streaming/recovery.d.ts.map +1 -0
  505. package/dist/streaming/recovery.js +160 -16
  506. package/dist/streaming/recovery.js.map +1 -1
  507. package/dist/streaming/registry.d.ts +27 -9
  508. package/dist/streaming/registry.d.ts.map +1 -0
  509. package/dist/streaming/registry.js +21 -3
  510. package/dist/streaming/registry.js.map +1 -1
  511. package/dist/streaming/setup.d.ts +157 -29
  512. package/dist/streaming/setup.d.ts.map +1 -0
  513. package/dist/streaming/setup.js +1034 -458
  514. package/dist/streaming/setup.js.map +1 -1
  515. package/dist/streaming/showInfo.d.ts +21 -1
  516. package/dist/streaming/showInfo.d.ts.map +1 -0
  517. package/dist/streaming/showInfo.js +31 -16
  518. package/dist/streaming/showInfo.js.map +1 -1
  519. package/dist/streaming/statusEmitter.d.ts +5 -2
  520. package/dist/streaming/statusEmitter.d.ts.map +1 -0
  521. package/dist/streaming/statusEmitter.js +5 -3
  522. package/dist/streaming/statusEmitter.js.map +1 -1
  523. package/dist/types/channels.d.ts +15 -12
  524. package/dist/types/channels.d.ts.map +1 -0
  525. package/dist/types/channels.js +4 -2
  526. package/dist/types/channels.js.map +1 -1
  527. package/dist/types/config.d.ts +16 -5
  528. package/dist/types/config.d.ts.map +1 -0
  529. package/dist/types/index.d.ts +3 -2
  530. package/dist/types/index.d.ts.map +1 -0
  531. package/dist/types/profiles.d.ts +4 -2
  532. package/dist/types/profiles.d.ts.map +1 -0
  533. package/dist/types/selection.d.ts +31 -3
  534. package/dist/types/selection.d.ts.map +1 -0
  535. package/dist/types/selection.js +4 -2
  536. package/dist/types/selection.js.map +1 -1
  537. package/dist/types/shared.d.ts +1 -0
  538. package/dist/types/shared.d.ts.map +1 -0
  539. package/dist/types/streaming.d.ts +8 -0
  540. package/dist/types/streaming.d.ts.map +1 -0
  541. package/dist/upgrade/commands.context.d.ts +1 -0
  542. package/dist/upgrade/commands.context.d.ts.map +1 -0
  543. package/dist/upgrade/commands.d.ts +1 -0
  544. package/dist/upgrade/commands.d.ts.map +1 -0
  545. package/dist/upgrade/commands.js +1 -1
  546. package/dist/upgrade/commands.js.map +1 -1
  547. package/dist/upgrade/detection.context.d.ts +1 -0
  548. package/dist/upgrade/detection.context.d.ts.map +1 -0
  549. package/dist/upgrade/detection.context.js +2 -0
  550. package/dist/upgrade/detection.context.js.map +1 -1
  551. package/dist/upgrade/detection.d.ts +7 -6
  552. package/dist/upgrade/detection.d.ts.map +1 -0
  553. package/dist/upgrade/detection.js +4 -4
  554. package/dist/upgrade/index.d.ts +1 -0
  555. package/dist/upgrade/index.d.ts.map +1 -0
  556. package/dist/upgrade/lifecycle.context.d.ts +1 -0
  557. package/dist/upgrade/lifecycle.context.d.ts.map +1 -0
  558. package/dist/upgrade/lifecycle.d.ts +7 -7
  559. package/dist/upgrade/lifecycle.d.ts.map +1 -0
  560. package/dist/upgrade/lifecycle.js +9 -10
  561. package/dist/upgrade/lifecycle.js.map +1 -1
  562. package/dist/upgrade/pathHandle.d.ts +5 -3
  563. package/dist/upgrade/pathHandle.d.ts.map +1 -0
  564. package/dist/upgrade/pathHandle.js +3 -2
  565. package/dist/upgrade/pathHandle.js.map +1 -1
  566. package/dist/utils/bootSession.context.d.ts +1 -0
  567. package/dist/utils/bootSession.context.d.ts.map +1 -0
  568. package/dist/utils/bootSession.context.js +6 -5
  569. package/dist/utils/bootSession.context.js.map +1 -1
  570. package/dist/utils/bootSession.d.ts +1 -0
  571. package/dist/utils/bootSession.d.ts.map +1 -0
  572. package/dist/utils/bootSession.js.map +1 -1
  573. package/dist/utils/chromeFetch.d.ts +1 -0
  574. package/dist/utils/chromeFetch.d.ts.map +1 -0
  575. package/dist/utils/cliOutput.d.ts +1 -0
  576. package/dist/utils/cliOutput.d.ts.map +1 -0
  577. package/dist/utils/clock.d.ts +5 -4
  578. package/dist/utils/clock.d.ts.map +1 -0
  579. package/dist/utils/clock.js +19 -16
  580. package/dist/utils/clock.js.map +1 -1
  581. package/dist/utils/debugFilter.d.ts +9 -1
  582. package/dist/utils/debugFilter.d.ts.map +1 -0
  583. package/dist/utils/debugFilter.js +60 -33
  584. package/dist/utils/debugFilter.js.map +1 -1
  585. package/dist/utils/delay.d.ts +48 -15
  586. package/dist/utils/delay.d.ts.map +1 -0
  587. package/dist/utils/delay.js +73 -20
  588. package/dist/utils/delay.js.map +1 -1
  589. package/dist/utils/errors.d.ts +32 -0
  590. package/dist/utils/errors.d.ts.map +1 -0
  591. package/dist/utils/errors.js +45 -4
  592. package/dist/utils/errors.js.map +1 -1
  593. package/dist/utils/evaluate.d.ts +1 -0
  594. package/dist/utils/evaluate.d.ts.map +1 -0
  595. package/dist/utils/evaluate.js +29 -23
  596. package/dist/utils/evaluate.js.map +1 -1
  597. package/dist/utils/ffmpeg.context.d.ts +1 -0
  598. package/dist/utils/ffmpeg.context.d.ts.map +1 -0
  599. package/dist/utils/ffmpeg.context.js.map +1 -1
  600. package/dist/utils/ffmpeg.d.ts +29 -7
  601. package/dist/utils/ffmpeg.d.ts.map +1 -0
  602. package/dist/utils/ffmpeg.js +31 -13
  603. package/dist/utils/ffmpeg.js.map +1 -1
  604. package/dist/utils/fileLogger.d.ts +3 -1
  605. package/dist/utils/fileLogger.d.ts.map +1 -0
  606. package/dist/utils/fileLogger.js +64 -29
  607. package/dist/utils/fileLogger.js.map +1 -1
  608. package/dist/utils/format.d.ts +14 -1
  609. package/dist/utils/format.d.ts.map +1 -0
  610. package/dist/utils/format.js +19 -5
  611. package/dist/utils/format.js.map +1 -1
  612. package/dist/utils/index.d.ts +1 -0
  613. package/dist/utils/index.d.ts.map +1 -0
  614. package/dist/utils/logEmitter.d.ts +1 -0
  615. package/dist/utils/logEmitter.d.ts.map +1 -0
  616. package/dist/utils/logger.d.ts +1 -0
  617. package/dist/utils/logger.d.ts.map +1 -0
  618. package/dist/utils/logger.js +10 -6
  619. package/dist/utils/logger.js.map +1 -1
  620. package/dist/utils/m3u.d.ts +3 -2
  621. package/dist/utils/m3u.d.ts.map +1 -0
  622. package/dist/utils/m3u.js +4 -3
  623. package/dist/utils/m3u.js.map +1 -1
  624. package/dist/utils/markup.d.ts +4 -2
  625. package/dist/utils/markup.d.ts.map +1 -0
  626. package/dist/utils/markup.js +6 -5
  627. package/dist/utils/markup.js.map +1 -1
  628. package/dist/utils/memo.d.ts +3 -2
  629. package/dist/utils/memo.d.ts.map +1 -0
  630. package/dist/utils/memo.js +3 -3
  631. package/dist/utils/morganStream.d.ts +1 -0
  632. package/dist/utils/morganStream.d.ts.map +1 -0
  633. package/dist/utils/network.d.ts +1 -0
  634. package/dist/utils/network.d.ts.map +1 -0
  635. package/dist/utils/network.js +2 -2
  636. package/dist/utils/pid.d.ts +1 -0
  637. package/dist/utils/pid.d.ts.map +1 -0
  638. package/dist/utils/pid.js +3 -3
  639. package/dist/utils/platform.d.ts +3 -1
  640. package/dist/utils/platform.d.ts.map +1 -0
  641. package/dist/utils/platform.js +2 -1
  642. package/dist/utils/platform.js.map +1 -1
  643. package/dist/utils/processInspector.context.d.ts +1 -0
  644. package/dist/utils/processInspector.context.d.ts.map +1 -0
  645. package/dist/utils/processInspector.context.js +3 -1
  646. package/dist/utils/processInspector.context.js.map +1 -1
  647. package/dist/utils/processInspector.d.ts +4 -3
  648. package/dist/utils/processInspector.d.ts.map +1 -0
  649. package/dist/utils/processInspector.js +2 -0
  650. package/dist/utils/processInspector.js.map +1 -1
  651. package/dist/utils/retry.d.ts +24 -1
  652. package/dist/utils/retry.d.ts.map +1 -0
  653. package/dist/utils/retry.js +32 -5
  654. package/dist/utils/retry.js.map +1 -1
  655. package/dist/utils/runtimeIdentity.context.d.ts +1 -0
  656. package/dist/utils/runtimeIdentity.context.d.ts.map +1 -0
  657. package/dist/utils/runtimeIdentity.context.js +30 -0
  658. package/dist/utils/runtimeIdentity.context.js.map +1 -1
  659. package/dist/utils/runtimeIdentity.d.ts +6 -4
  660. package/dist/utils/runtimeIdentity.d.ts.map +1 -0
  661. package/dist/utils/runtimeIdentity.js +15 -5
  662. package/dist/utils/runtimeIdentity.js.map +1 -1
  663. package/dist/utils/sanitize.d.ts +1 -0
  664. package/dist/utils/sanitize.d.ts.map +1 -0
  665. package/dist/utils/streamContext.d.ts +2 -1
  666. package/dist/utils/streamContext.d.ts.map +1 -0
  667. package/dist/utils/streamContext.js +1 -1
  668. package/dist/utils/timing.d.ts +1 -0
  669. package/dist/utils/timing.d.ts.map +1 -0
  670. package/dist/utils/version.d.ts +1 -0
  671. package/dist/utils/version.d.ts.map +1 -0
  672. package/dist/utils/version.js +7 -3
  673. package/dist/utils/version.js.map +1 -1
  674. package/package.json +26 -20
package/dist/app.d.ts CHANGED
@@ -12,3 +12,4 @@ export declare function releaseInstanceSlot(): void;
12
12
  * @param parsedArgs - Parsed command-line arguments containing flags and override values.
13
13
  */
14
14
  export declare function startServer(parsedArgs: ParsedArgs): Promise<void>;
15
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA0X7C;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAU1C;AAuDD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAsOvE"}
package/dist/app.js CHANGED
@@ -2,13 +2,15 @@
2
2
  *
3
3
  * app.ts: Express application builder for PrismCast.
4
4
  */
5
- import { CONFIG, displayConfiguration, initializeConfiguration, validateConfiguration } from "./config/index.js";
5
+ import { CONFIG, displayConfiguration, initializeConfiguration, persistCoercedConfig, validateConfiguration } from "./config/index.js";
6
6
  import { LOG, claim, createMorganStream, formatError, formatTimestamp, getCurrentPattern, getPackageVersion, isDebugLogging, release, resolveFFmpegPath, setConsoleLogging, startUpdateChecking, stopUpdateChecking } from "./utils/index.js";
7
- import { closeBrowser, ensureDataDirectory, getCurrentBrowser, killStaleChrome, minimizeBrowserWindow, prepareExtension, setGracefulShutdown, startBrowserRestartChecking, startStalePageCleanup, stopBrowserRestartChecking, stopStalePageCleanup } from "./browser/index.js";
7
+ import { closeBrowser, ensureDataDirectory, getCurrentBrowser, killStaleChrome, minimizeBrowserWindow, prepareExtension, setGracefulShutdown, setLoginModeEndObserver, startBrowserRestartChecking, startStalePageCleanup, stopBrowserRestartChecking, stopStalePageCleanup } from "./browser/index.js";
8
8
  import { ensureAllMigrated, snapshotAllForRelease } from "./config/persistence.js";
9
+ import { flushHealthStateNow, loadHealthState } from "./config/health.js";
9
10
  import { getDebugEnv, getLogFilePath, getServerPidFilePath } from "./config/paths.js";
10
11
  import { initializeFileLogger, shutdownFileLogger } from "./utils/fileLogger.js";
11
12
  import { loadResumeState, saveResumeState } from "./streaming/hlsResume.js";
13
+ import { revalidateDomainAuth, stopPrecaching } from "./browser/precaching.js";
12
14
  import { startHdhrServer, stopHdhrServer } from "./hdhr/index.js";
13
15
  import { startPretunePolling, stopPretunePolling } from "./streaming/pretune.js";
14
16
  import { startShowInfoPolling, stopShowInfoPolling } from "./streaming/showInfo.js";
@@ -21,22 +23,28 @@ import { getAllStreams } from "./streaming/registry.js";
21
23
  import { initializeUserChannels } from "./config/userChannels.js";
22
24
  import { initializeUserProfiles } from "./config/userProfiles.js";
23
25
  import { installHealthBridge } from "./routes/config/channels/healthBridge.js";
24
- import { loadHealthState } from "./config/health.js";
26
+ import { loadProviderLineups } from "./config/providerLineups.js";
25
27
  import morgan from "morgan";
26
28
  import { runConsistencyProbeAtStartup } from "./config/consistencyProbe.js";
27
29
  import { setupRoutes } from "./routes/index.js";
28
30
  import { terminateStream } from "./streaming/lifecycle.js";
29
31
  import { validateProfiles } from "./config/profiles.js";
30
- import { verifyCaptureSystem } from "./streaming/setup.js";
31
- /* The logging mode is set at startup based on the --console CLI flag. When console logging is enabled, the four standard console methods are wrapped to prepend a
32
- * formatTimestamp() prefix so console output matches the file logger's timestamp format. When file logging is used (the default), output goes to the configured
33
- * log file (default: prismcast.log in the data directory).
32
+ /* The logging mode is set at startup based on the --console CLI flag. When console logging is enabled, the standard console output methods are wrapped to
33
+ * prepend a formatTimestamp() prefix so console output matches the file logger's timestamp format. When file logging is used (the default), output goes to the
34
+ * configured log file (default: prismcast.log in the data directory).
34
35
  */
35
36
  // Track whether console logging is enabled, set during startServer().
36
37
  let usingConsoleLogging = false;
37
38
  /* The HTTP server instance is stored globally so it can be closed during graceful shutdown.
38
39
  */
39
40
  let server = null;
41
+ /* The background-service teardown stack. Each long-lived background service (stale-page sweep, browser-restart watchdog, idle cleanup, show-info/pretune polling,
42
+ * update check) registers its stop here at the moment it starts in startServer(); graceful shutdown disposes the stack wholesale, so a future service cannot be
43
+ * started without also being torn down. An AsyncDisposableStack is used (rather than the synchronous DisposableStack) so the teardown awaits each registered stop -
44
+ * today's registered stops are all synchronous, but a future service whose stop must complete (e.g. flushing to disk) would be silently fire-and-forgotten by a
45
+ * sync stack.
46
+ */
47
+ let backgroundServices = null;
40
48
  // Interval for idle stream cleanup.
41
49
  let idleCleanupInterval = null;
42
50
  /**
@@ -76,14 +84,12 @@ function setupGracefulShutdown() {
76
84
  LOG.info("Shutting down.");
77
85
  // Set the graceful shutdown flag early so that page close errors are suppressed during stream termination.
78
86
  setGracefulShutdown(true);
79
- // Stop cleanup and polling intervals.
80
- stopHdhrServer();
81
- stopBrowserRestartChecking();
82
- stopStalePageCleanup();
83
- stopIdleCleanup();
84
- stopPretunePolling();
85
- stopShowInfoPolling();
86
- stopUpdateChecking();
87
+ // Tear down the background services. HDHR is torn down first and awaited so its HTTP and UDP sockets fully release before the rest of shutdown proceeds. The
88
+ // long-lived pollers are disposed wholesale via the AsyncDisposableStack they registered on at startup. The browser-launch-scoped precache cycle is cancelled
89
+ // separately - its graceful-shutdown guard has already neutralized it via setGracefulShutdown above, and this clears the pending timer.
90
+ await stopHdhrServer();
91
+ await backgroundServices?.disposeAsync();
92
+ stopPrecaching();
87
93
  // Terminate all streams. terminateStream() handles all cleanup including page closure and registry removal.
88
94
  const streams = getAllStreams();
89
95
  // Collect resume state from active streams before termination destroys the segmenters. Each entry captures sequence numbers and timestamps so the next startup
@@ -92,13 +98,14 @@ function setupGracefulShutdown() {
92
98
  // via drop_until_next_sequence when the playlist range would otherwise jump past it.
93
99
  const resumeEntries = [];
94
100
  for (const stream of streams) {
95
- if (stream.info.storeKey && stream.segmenter) {
101
+ const segmenter = stream.captureSession?.segmenter;
102
+ if (stream.info.storeKey && segmenter) {
96
103
  resumeEntries.push({
97
104
  channelName: stream.info.storeKey,
98
- initSegment: stream.segmenter.getInitSegment(),
99
- initVersion: stream.segmenter.getInitVersion(),
100
- segmentIndex: Math.max(0, stream.segmenter.getSegmentIndex() - 1),
101
- trackTimestamps: stream.segmenter.getTrackTimestamps()
105
+ initSegment: segmenter.getInitSegment(),
106
+ initVersion: segmenter.getInitVersion(),
107
+ segmentIndex: Math.max(0, segmenter.getSegmentIndex() - 1),
108
+ trackTimestamps: segmenter.getTrackTimestamps()
102
109
  });
103
110
  }
104
111
  }
@@ -106,6 +113,8 @@ function setupGracefulShutdown() {
106
113
  for (const stream of streams) {
107
114
  terminateStream(stream.id, stream.info.storeKey, "server shutdown");
108
115
  }
116
+ // Flush any pending debounced health-state write so the final channel/domain health is durably persisted even when shutdown lands inside the FLUSH_DELAY window.
117
+ await flushHealthStateNow();
109
118
  // Close the browser.
110
119
  await closeBrowser();
111
120
  // Release the server instance slot so the next startup does not see a stale identity file.
@@ -177,7 +186,7 @@ async function buildApp() {
177
186
  // Log requests with 4xx or 5xx status codes, but skip 404s for common browser asset requests.
178
187
  app.use(morgan(morganFormat, {
179
188
  skip: (req, res) => {
180
- // Log all non-error responses.
189
+ // Skip all non-error responses. In errors-only mode we log only 4xx and 5xx statuses, so any successful response is skipped here.
181
190
  if (res.statusCode < 400) {
182
191
  return true;
183
192
  }
@@ -239,7 +248,6 @@ async function buildApp() {
239
248
  // Set up all HTTP endpoints.
240
249
  setupRoutes(app);
241
250
  // Global error handler. Express error handlers require 4 parameters even if unused.
242
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
243
251
  app.use((err, _req, res, _next) => {
244
252
  LOG.error("Unhandled error in request: %s.", formatError(err));
245
253
  if (!res.headersSent) {
@@ -287,6 +295,41 @@ export function releaseInstanceSlot() {
287
295
  // legitimate holder's file, if any, is in the configured data directory which we cannot address - so we never could have touched it. Silent no-op is safe.
288
296
  }
289
297
  }
298
+ /**
299
+ * Starts the main HTTP server and resolves only once the bind has actually succeeded. Express's app.listen callback fires even when the bind fails (it resolves
300
+ * with a non-listening server on EADDRINUSE / EADDRNOTAVAIL), so it cannot be trusted to signal success; we detect the outcome through the explicit "listening"
301
+ * and "error" events instead, mirroring the HDHomeRun HTTP server and the UDP responder. A bind failure rejects rather than lingering, so startServer's caller
302
+ * logs the error and exits cleanly instead of leaving a process that printed a false "listening" line while its HTTP surface never came up.
303
+ * @param app - The built Express application.
304
+ * @returns The listening http.Server.
305
+ */
306
+ async function listenMainServer(app) {
307
+ const { promise, reject, resolve } = Promise.withResolvers();
308
+ const httpServer = app.listen(CONFIG.server.port, CONFIG.server.host);
309
+ // On a bind failure, reject with a clear, operator-actionable message. Exactly one of "error" or "listening" fires for a given bind attempt, so the promise
310
+ // always settles.
311
+ const onBindError = (error) => {
312
+ if (error.code === "EADDRINUSE") {
313
+ LOG.error("Cannot start PrismCast: port %s on %s is already in use. Stop the conflicting service or choose a different port.", CONFIG.server.port, CONFIG.server.host);
314
+ }
315
+ else {
316
+ LOG.error("Failed to start the PrismCast HTTP server: %s.", formatError(error));
317
+ }
318
+ reject(error);
319
+ };
320
+ httpServer.once("error", onBindError);
321
+ httpServer.once("listening", () => {
322
+ // Bind succeeded: retire the bind-failure handler and attach a long-lived runtime handler so a later socket error is logged rather than crashing the process
323
+ // on an unhandled "error" event.
324
+ httpServer.removeListener("error", onBindError);
325
+ httpServer.on("error", (error) => {
326
+ LOG.error("PrismCast HTTP server encountered a socket error: %s.", formatError(error));
327
+ });
328
+ LOG.info("PrismCast is now listening on %s:%s.", CONFIG.server.host, CONFIG.server.port);
329
+ resolve(httpServer);
330
+ });
331
+ return promise;
332
+ }
290
333
  /* The startServer function initializes and starts the HTTP server. It validates configuration, cleans up stale processes, warms up the browser, and starts the
291
334
  * Express application.
292
335
  */
@@ -299,7 +342,7 @@ export async function startServer(parsedArgs) {
299
342
  // Set logging mode early before any log calls.
300
343
  usingConsoleLogging = parsedArgs.consoleLogging;
301
344
  setConsoleLogging(parsedArgs.consoleLogging);
302
- // Apply timestamps to console output only when using console logging. Wraps the four standard console methods so each call prepends a timestamp matching the
345
+ // Apply timestamps to console output only when using console logging. Wraps the standard console output methods so each call prepends a timestamp matching the
303
346
  // file logger's format, ensuring console output and prismcast.log share identical timestamps. The wrappers are installed once at startup and affect every log
304
347
  // call from anywhere in the process - ours, Node's internal warnings, third-party library output - without distributing the responsibility across hundreds of
305
348
  // call sites. The no-console suppressions are intentional: the entire purpose of this block is to replace console's standard methods with timestamped wrappers.
@@ -327,9 +370,9 @@ export async function startServer(parsedArgs) {
327
370
  }
328
371
  }
329
372
  // Release boot coordinator: snapshot every persistence-managed file before any reads or migrations run, then apply any pending schema migrations across all
330
- // stores. Both operations are idempotent within a release (snapshots skip when the labeled copy already exists; ensureMigrated skips when the file is at the
331
- // current schema version). Running them up front guarantees a restore point exists for every file at the start of every release boot, even if a subsequent
332
- // initialize* function or migration discovers a problem and aborts startup.
373
+ // stores. Both operations are safe to run more than once within a release (snapshots skip when the labeled copy already exists; ensureMigrated skips when the
374
+ // file is at the current schema version). Running them up front guarantees a restore point exists for every file at the start of every release boot, even if a
375
+ // subsequent initialize* function or migration discovers a problem and aborts startup.
333
376
  try {
334
377
  await snapshotAllForRelease("pre-v" + getPackageVersion());
335
378
  await ensureAllMigrated();
@@ -343,6 +386,10 @@ export async function startServer(parsedArgs) {
343
386
  try {
344
387
  await initializeConfiguration(cliOverrides);
345
388
  validateConfiguration();
389
+ // Write any startup capture coercion back to disk so the on-disk state matches the coerced live CONFIG. This keeps a config file that holds an unsupported
390
+ // capture value (native mode) from staying divergent forever, which would otherwise make the reload-validation path reject every later save on the phantom
391
+ // capture diff. A no-op unless validateConfiguration actually coerced something.
392
+ await persistCoercedConfig();
346
393
  await initializeUserProfiles();
347
394
  validateProfiles();
348
395
  }
@@ -391,16 +438,25 @@ export async function startServer(parsedArgs) {
391
438
  await initializeUserChannels();
392
439
  // Load persisted health state (channel health + domain auth) from health.json.
393
440
  await loadHealthState();
441
+ // Load the provider channel lineups persisted by earlier sessions from provider-lineups.json. They are verify-on-use hints: they load before the browser does,
442
+ // so a boot whose own precache walk comes back empty can still tune a channel directly instead of failing at a guide page it cannot read.
443
+ await loadProviderLineups();
394
444
  // Install the reactive bridge that translates health/auth state changes into channel table patches over SSE. Channel row HTML has a single source of truth -
395
445
  // generateChannelRowHtml on the server - and every reactive update flows through this bridge so the client never composes channel row state imperatively.
396
446
  installHealthBridge();
397
- // Run the cross-store consistency probe now that every store is loaded. Validates foreign-key-style invariants spanning multiple stores (service selections,
398
- // variant canonicalKey targets, domain profile mappings, service tag filter) and auto-fixes warnings where safe. Errors do not block startup.
447
+ // Wire the login-end observer: when login mode ends, a domain currently marked needs-sign-in gets an automatic revalidation discovery so fresh success evidence
448
+ // can clear the flag without waiting for the next precache cycle. Composition-root wiring - login.ts stays free of discovery knowledge, and revalidateDomainAuth
449
+ // never rejects, so voiding the promise is safe.
450
+ setLoginModeEndObserver((url) => void revalidateDomainAuth(url));
451
+ // Run the cross-store consistency probe now that every store is loaded. Validates foreign-key-style rules spanning multiple stores (service selections, variant
452
+ // canonicalKey targets, domain profile mappings, service tag filter) and auto-fixes warnings where safe. Errors do not block startup.
399
453
  await runConsistencyProbeAtStartup();
400
454
  // Load HLS resume state from the previous shutdown. This seeds sequence numbers so streams resume forward instead of resetting to 0.
401
455
  loadResumeState();
402
456
  killStaleChrome();
403
- // Warm up browser.
457
+ // Warm up the browser. getCurrentBrowser() launches Chrome through the capture-readiness supervisor, whose launch gate runs the real capture probe (the
458
+ // capability tier) at every launch - including this one. So a successful warm-up already means capture is verified. A stale-capture mutex exits the process from
459
+ // inside the probe, and any other gate failure rejects here and aborts startup.
404
460
  try {
405
461
  await getCurrentBrowser();
406
462
  }
@@ -411,43 +467,40 @@ export async function startServer(parsedArgs) {
411
467
  // Generate the preroll fMP4 segment for immediate HLS response during stream startup. This runs after browser launch so that display detection has completed and
412
468
  // getEffectiveViewport() returns the true dimensions - ensuring the preroll resolution matches what Chrome MediaRecorder will actually produce.
413
469
  await generatePreroll();
414
- // Verify the capture system works before accepting requests. This detects stale tabCapture state from a previous Chrome process and exits immediately if
415
- // found, since the puppeteer-stream mutex would be permanently leaked. The probe also ensures the STOP_RECORDING cleanup chain completes before returning.
416
- try {
417
- await verifyCaptureSystem();
418
- }
419
- catch (error) {
420
- LOG.error("Capture system verification failed during startup: %s.", formatError(error));
421
- throw error;
422
- }
423
470
  // Minimize the browser window to reduce GPU usage and desktop clutter. The browser must be visible (not headless) for capture to work, but minimizing it reduces
424
- // resource consumption. CDP allows us to control window state without affecting capture. We defer minimization until after display detection and capture
425
- // verification complete, since both require the window in a normal state.
471
+ // resource consumption. CDP allows us to control window state without affecting capture. We defer minimization until after display detection and the launch-gate
472
+ // capture probe complete, since both require the window in a normal state.
426
473
  await minimizeBrowserWindow();
427
- // Start stale page cleanup.
474
+ // Start the background services and register each one's stop on an AsyncDisposableStack the moment it starts, so graceful shutdown can dispose them all wholesale
475
+ // and a future service cannot be started without also being torn down. These are order-independent background loops/timers, so LIFO disposal order is immaterial.
476
+ // HDHR is intentionally not a member (it is torn down first in shutdown so its sockets release before the rest), and the browser-launch-scoped precache cycle is
477
+ // started elsewhere and stopped separately.
478
+ backgroundServices = new AsyncDisposableStack();
428
479
  startStalePageCleanup();
429
- // Start browser restart checking.
480
+ backgroundServices.defer(stopStalePageCleanup);
430
481
  startBrowserRestartChecking();
431
- // Start idle cleanup.
482
+ backgroundServices.defer(stopBrowserRestartChecking);
432
483
  startIdleCleanup();
433
- // Start show info polling for Channels DVR integration.
484
+ backgroundServices.defer(stopIdleCleanup);
434
485
  startShowInfoPolling();
435
- // Start pretune polling for predictive channel pretuning from Channels DVR schedule.
486
+ backgroundServices.defer(stopShowInfoPolling);
436
487
  startPretunePolling();
437
- // Start checking for updates.
488
+ backgroundServices.defer(stopPretunePolling);
438
489
  startUpdateChecking(getPackageVersion());
490
+ backgroundServices.defer(stopUpdateChecking);
439
491
  // Build and start Express application.
440
492
  try {
441
493
  const app = await buildApp();
442
- server = app.listen(CONFIG.server.port, CONFIG.server.host, () => {
443
- LOG.info("PrismCast is now listening on %s:%s.", CONFIG.server.host, CONFIG.server.port);
444
- });
494
+ // Bind the main HTTP server, detecting bind success or failure through explicit events rather than the unreliable listen callback. A bind failure throws out
495
+ // of here so the catch below surfaces it and the process exits cleanly rather than lingering with no HTTP surface.
496
+ server = await listenMainServer(app);
445
497
  // Attach the CDP proxy upgrade handler once the underlying http.Server exists. The handler is gated on the `cdp` debug category at request time, so it sits
446
498
  // dormant until the user enables CDP via /debug. We attach unconditionally so the toggle takes effect without requiring a restart.
447
499
  attachCdpUpgradeHandler(server);
448
500
  }
449
501
  catch (error) {
450
- LOG.error("Failed to build application: %s.", formatError(error));
502
+ // Covers both a buildApp failure and a listenMainServer bind failure; the latter already logged the precise, operator-actionable line before rejecting.
503
+ LOG.error("Failed to build or start the HTTP server: %s.", formatError(error));
451
504
  throw error;
452
505
  }
453
506
  // Start HDHomeRun emulation server if enabled. This runs independently of the main server and handles EADDRINUSE gracefully without affecting PrismCast's
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import type { AuthWallIndicators } from "../types/index.ts";
2
+ import type { Page } from "puppeteer-core";
3
+ /**
4
+ * The classification of a page whose discovery walk returned zero channels.
5
+ *
6
+ * - "authWall": the provider is presenting an authentication wall; evidence is a short human-readable summary naming the landed page's host and path.
7
+ * - "consentOverlay": a consent or cookie prompt is present and may be masking the guide (or a wall behind it).
8
+ * - "unknown": nothing recognizable - the emptiness is unexplained and no state should change on its account.
9
+ */
10
+ export type BlockedPageClassification = {
11
+ evidence: string;
12
+ kind: "authWall";
13
+ } | {
14
+ kind: "consentOverlay";
15
+ } | {
16
+ kind: "unknown";
17
+ };
18
+ /**
19
+ * Options for classifyBlockedPage().
20
+ */
21
+ export interface ClassifyBlockedPageOptions {
22
+ indicators?: AuthWallIndicators;
23
+ requestedUrl: string;
24
+ }
25
+ /**
26
+ * A candidate sign-in container reported by the in-page collector: one record per password, email, or text input whose surrounding container could plausibly be a
27
+ * sign-in form. The decision core applies the qualification rules; the collector only reports structure.
28
+ */
29
+ export interface SignInContainerRecord {
30
+ hasPasswordInput: boolean;
31
+ hasSubmitAffordance: boolean;
32
+ hasTextEntry: boolean;
33
+ text: string;
34
+ }
35
+ /**
36
+ * The signals decideBlockedPage decides over, gathered from the live page by classifyBlockedPage. Exposed so the decision core can be exercised directly against
37
+ * fixture-derived signals.
38
+ */
39
+ export interface BlockedPageSignals {
40
+ readonly consentOverlayPresent: boolean;
41
+ readonly containers: readonly SignInContainerRecord[];
42
+ readonly indicatorHostMatched: boolean;
43
+ readonly indicatorSelectorMatched: boolean;
44
+ readonly landedUrl: string;
45
+ readonly requestedUrl: string;
46
+ }
47
+ /**
48
+ * In-page collector for candidate sign-in containers. For every password, email, or text input on the page, it resolves the input's candidate container - the
49
+ * enclosing form when one exists, otherwise the nearest ancestor within a bounded depth that carries a submit affordance - and reports the container's structure.
50
+ * The body and document element are never candidates, which (together with the depth bound) is what makes the shape rule container-scoped: a newsletter form in the
51
+ * footer and a "Sign In" link in the nav can never merge into one record.
52
+ *
53
+ * This function crosses the page.evaluate boundary by source serialization, so it is self-contained: it references only its argument and the page's document
54
+ * global. Exported so unit tests can run it against a synthetic DOM.
55
+ * @param args - The depth bound for the ancestor search and the text cap per record.
56
+ * @returns One record per qualifying input's container. Containers are reported per seeding input, without deduplication - the decision core only asks whether any
57
+ * record qualifies.
58
+ */
59
+ export declare function collectSignInContainers(args: {
60
+ maxDepth: number;
61
+ textLimit: number;
62
+ }): SignInContainerRecord[];
63
+ /**
64
+ * The pure decision core: classifies a blocked page from its collected signals. Decision order is (a) provider indicators, (b) consent overlay, (c) the generic
65
+ * container-scoped sign-in shape, (d) unknown - see the module comment for the (b)-before-(c) rationale. The landed-URL-differs signal strengthens authWall
66
+ * evidence but never suffices alone: with no indicator, no consent overlay, and no qualifying container, a redirect classifies as unknown.
67
+ * @param signals - The collected page signals.
68
+ * @returns The classification.
69
+ */
70
+ export declare function decideBlockedPage(signals: BlockedPageSignals): BlockedPageClassification;
71
+ /**
72
+ * Classifies a still-open page whose discovery walk returned zero channels. Gathers signals lazily in decision order - each probe is skipped once an earlier signal
73
+ * already decides the outcome - and hands them to the pure decision core. The gathering is bounded by BLOCKED_PAGE_CLASSIFY_TIMEOUT internally, so the classifier is
74
+ * both never-throwing AND never-hanging: every caller gets an advisory result within the budget with no wrapper of its own.
75
+ * @param page - The still-open discovery page.
76
+ * @param options - The provider's optional auth wall indicators and the originally requested URL.
77
+ * @returns The page's classification.
78
+ */
79
+ export declare function classifyBlockedPage(page: Page, options: ClassifyBlockedPageOptions): Promise<BlockedPageClassification>;
80
+ //# sourceMappingURL=blockedPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockedPage.d.ts","sourceRoot":"","sources":["../../src/browser/blockedPage.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAY,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AA2C3C;;;;;;GAMG;AACH,MAAM,MAAM,yBAAyB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAElI;;GAEG;AACH,MAAM,WAAW,0BAA0B;IAGzC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAGhC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAGpC,gBAAgB,EAAE,OAAO,CAAC;IAG1B,mBAAmB,EAAE,OAAO,CAAC;IAG7B,YAAY,EAAE,OAAO,CAAC;IAGtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAGjC,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IAGxC,QAAQ,CAAC,UAAU,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAGtD,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IAGvC,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;IAG3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAG3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,qBAAqB,EAAE,CA4E9G;AAuCD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,yBAAyB,CAiCxF;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAsD7H"}