prismcast 1.8.0 → 1.10.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 (392) hide show
  1. package/README.md +6 -6
  2. package/dist/app.d.ts +1 -1
  3. package/dist/app.js +41 -13
  4. package/dist/app.js.map +1 -1
  5. package/dist/browser/cdp.d.ts +4 -6
  6. package/dist/browser/cdp.js +18 -22
  7. package/dist/browser/cdp.js.map +1 -1
  8. package/dist/browser/channelSelection.d.ts +41 -11
  9. package/dist/browser/channelSelection.js +75 -24
  10. package/dist/browser/channelSelection.js.map +1 -1
  11. package/dist/browser/display.d.ts +1 -1
  12. package/dist/browser/index.d.ts +8 -8
  13. package/dist/browser/index.js +44 -45
  14. package/dist/browser/index.js.map +1 -1
  15. package/dist/browser/login.d.ts +2 -2
  16. package/dist/browser/login.js +1 -1
  17. package/dist/browser/manifestInterceptor.d.ts +77 -0
  18. package/dist/browser/manifestInterceptor.js +323 -0
  19. package/dist/browser/manifestInterceptor.js.map +1 -0
  20. package/dist/browser/precaching.d.ts +1 -1
  21. package/dist/browser/precaching.js +23 -23
  22. package/dist/browser/precaching.js.map +1 -1
  23. package/dist/browser/tuning/comcastPolymer.d.ts +1 -1
  24. package/dist/browser/tuning/cox.d.ts +1 -1
  25. package/dist/browser/tuning/directv.d.ts +1 -1
  26. package/dist/browser/tuning/directv.js +65 -69
  27. package/dist/browser/tuning/directv.js.map +1 -1
  28. package/dist/browser/tuning/fox.d.ts +1 -1
  29. package/dist/browser/tuning/fox.js +172 -15
  30. package/dist/browser/tuning/fox.js.map +1 -1
  31. package/dist/browser/tuning/hbo.d.ts +1 -1
  32. package/dist/browser/tuning/hbo.js +7 -7
  33. package/dist/browser/tuning/hbo.js.map +1 -1
  34. package/dist/browser/tuning/hulu.d.ts +1 -1
  35. package/dist/browser/tuning/hulu.js +120 -113
  36. package/dist/browser/tuning/hulu.js.map +1 -1
  37. package/dist/browser/tuning/shared.d.ts +3 -3
  38. package/dist/browser/tuning/shared.js +5 -5
  39. package/dist/browser/tuning/sling.d.ts +1 -1
  40. package/dist/browser/tuning/sling.js +30 -30
  41. package/dist/browser/tuning/sling.js.map +1 -1
  42. package/dist/browser/tuning/spectrum.d.ts +1 -1
  43. package/dist/browser/tuning/spectrum.js +21 -22
  44. package/dist/browser/tuning/spectrum.js.map +1 -1
  45. package/dist/browser/tuning/thumbnailRow.d.ts +1 -1
  46. package/dist/browser/tuning/thumbnailRow.js +1 -1
  47. package/dist/browser/tuning/tileClick.d.ts +1 -1
  48. package/dist/browser/tuning/tileClick.js +5 -5
  49. package/dist/browser/tuning/xfinity.d.ts +1 -1
  50. package/dist/browser/tuning/youtubeTv.d.ts +1 -1
  51. package/dist/browser/tuning/youtubeTv.js +17 -18
  52. package/dist/browser/tuning/youtubeTv.js.map +1 -1
  53. package/dist/browser/video.d.ts +20 -6
  54. package/dist/browser/video.js +30 -38
  55. package/dist/browser/video.js.map +1 -1
  56. package/dist/channels/index.d.ts +1 -2
  57. package/dist/channels/index.js +475 -442
  58. package/dist/channels/index.js.map +1 -1
  59. package/dist/config/channelForm.d.ts +58 -0
  60. package/dist/config/channelForm.js +129 -0
  61. package/dist/config/channelForm.js.map +1 -0
  62. package/dist/config/consistencyProbe.d.ts +7 -0
  63. package/dist/config/consistencyProbe.js +143 -0
  64. package/dist/config/consistencyProbe.js.map +1 -0
  65. package/dist/config/health.d.ts +7 -6
  66. package/dist/config/health.js +78 -65
  67. package/dist/config/health.js.map +1 -1
  68. package/dist/config/index.d.ts +1 -1
  69. package/dist/config/index.js +21 -14
  70. package/dist/config/index.js.map +1 -1
  71. package/dist/config/paths.d.ts +9 -3
  72. package/dist/config/paths.js +12 -4
  73. package/dist/config/paths.js.map +1 -1
  74. package/dist/config/persistence.context.d.ts +8 -0
  75. package/dist/config/persistence.context.js +30 -0
  76. package/dist/config/persistence.context.js.map +1 -0
  77. package/dist/config/persistence.d.ts +157 -0
  78. package/dist/config/persistence.js +446 -0
  79. package/dist/config/persistence.js.map +1 -0
  80. package/dist/config/presets.d.ts +14 -4
  81. package/dist/config/presets.js +84 -75
  82. package/dist/config/presets.js.map +1 -1
  83. package/dist/config/profiles.d.ts +2 -2
  84. package/dist/config/profiles.js +7 -9
  85. package/dist/config/profiles.js.map +1 -1
  86. package/dist/config/servicePacks.d.ts +46 -0
  87. package/dist/config/{providerPacks.js → servicePacks.js} +50 -53
  88. package/dist/config/servicePacks.js.map +1 -0
  89. package/dist/config/services.d.ts +228 -0
  90. package/dist/config/services.js +772 -0
  91. package/dist/config/services.js.map +1 -0
  92. package/dist/config/sites.d.ts +3 -3
  93. package/dist/config/sites.js +75 -75
  94. package/dist/config/sites.js.map +1 -1
  95. package/dist/config/userChannels.d.ts +522 -54
  96. package/dist/config/userChannels.js +1343 -366
  97. package/dist/config/userChannels.js.map +1 -1
  98. package/dist/config/userConfig.d.ts +108 -13
  99. package/dist/config/userConfig.js +296 -143
  100. package/dist/config/userConfig.js.map +1 -1
  101. package/dist/config/userProfiles.d.ts +34 -16
  102. package/dist/config/userProfiles.js +189 -100
  103. package/dist/config/userProfiles.js.map +1 -1
  104. package/dist/hdhr/channelMap.d.ts +1 -1
  105. package/dist/hdhr/channelMap.js +10 -16
  106. package/dist/hdhr/channelMap.js.map +1 -1
  107. package/dist/hdhr/deviceId.js +10 -9
  108. package/dist/hdhr/deviceId.js.map +1 -1
  109. package/dist/hdhr/discover.js +4 -5
  110. package/dist/hdhr/discover.js.map +1 -1
  111. package/dist/hdhr/index.js +12 -19
  112. package/dist/hdhr/index.js.map +1 -1
  113. package/dist/index.js +12 -12
  114. package/dist/index.js.map +1 -1
  115. package/dist/native/codecInference.d.ts +44 -0
  116. package/dist/native/codecInference.js +327 -0
  117. package/dist/native/codecInference.js.map +1 -0
  118. package/dist/native/decrypt.d.ts +1 -1
  119. package/dist/native/index.d.ts +5 -5
  120. package/dist/native/index.js +45 -67
  121. package/dist/native/index.js.map +1 -1
  122. package/dist/native/probe.d.ts +27 -9
  123. package/dist/native/probe.js +159 -68
  124. package/dist/native/probe.js.map +1 -1
  125. package/dist/native/proxy.d.ts +4 -2
  126. package/dist/native/proxy.js +56 -53
  127. package/dist/native/proxy.js.map +1 -1
  128. package/dist/native/tokenExpiry.d.ts +22 -0
  129. package/dist/native/tokenExpiry.js +153 -0
  130. package/dist/native/tokenExpiry.js.map +1 -0
  131. package/dist/routes/assets.js +3 -3
  132. package/dist/routes/assets.js.map +1 -1
  133. package/dist/routes/auth.js +9 -13
  134. package/dist/routes/auth.js.map +1 -1
  135. package/dist/routes/components.js +2 -2
  136. package/dist/routes/components.js.map +1 -1
  137. package/dist/routes/config/channels/endpoints/browse.d.ts +6 -0
  138. package/dist/routes/config/channels/endpoints/browse.js +195 -0
  139. package/dist/routes/config/channels/endpoints/browse.js.map +1 -0
  140. package/dist/routes/config/channels/endpoints/bulk.d.ts +6 -0
  141. package/dist/routes/config/channels/endpoints/bulk.js +128 -0
  142. package/dist/routes/config/channels/endpoints/bulk.js.map +1 -0
  143. package/dist/routes/config/channels/endpoints/crud.d.ts +6 -0
  144. package/dist/routes/config/channels/endpoints/crud.js +504 -0
  145. package/dist/routes/config/channels/endpoints/crud.js.map +1 -0
  146. package/dist/routes/config/channels/endpoints/importExport.d.ts +6 -0
  147. package/dist/routes/config/channels/endpoints/importExport.js +131 -0
  148. package/dist/routes/config/channels/endpoints/importExport.js.map +1 -0
  149. package/dist/routes/config/channels/endpoints/predefined.d.ts +6 -0
  150. package/dist/routes/config/channels/endpoints/predefined.js +78 -0
  151. package/dist/routes/config/channels/endpoints/predefined.js.map +1 -0
  152. package/dist/routes/config/channels/endpoints/prefs.d.ts +6 -0
  153. package/dist/routes/config/channels/endpoints/prefs.js +58 -0
  154. package/dist/routes/config/channels/endpoints/prefs.js.map +1 -0
  155. package/dist/routes/config/channels/endpoints/service.d.ts +6 -0
  156. package/dist/routes/config/channels/endpoints/service.js +149 -0
  157. package/dist/routes/config/channels/endpoints/service.js.map +1 -0
  158. package/dist/routes/config/channels/endpoints/tags.d.ts +6 -0
  159. package/dist/routes/config/channels/endpoints/tags.js +185 -0
  160. package/dist/routes/config/channels/endpoints/tags.js.map +1 -0
  161. package/dist/routes/config/channels/http/handler.d.ts +10 -0
  162. package/dist/routes/config/channels/http/handler.js +20 -0
  163. package/dist/routes/config/channels/http/handler.js.map +1 -0
  164. package/dist/routes/config/channels/http/playlistHint.d.ts +25 -0
  165. package/dist/routes/config/channels/http/playlistHint.js +40 -0
  166. package/dist/routes/config/channels/http/playlistHint.js.map +1 -0
  167. package/dist/routes/config/channels/http/serviceWarning.d.ts +10 -0
  168. package/dist/routes/config/channels/http/serviceWarning.js +28 -0
  169. package/dist/routes/config/channels/http/serviceWarning.js.map +1 -0
  170. package/dist/routes/config/channels/index.d.ts +3 -3
  171. package/dist/routes/config/channels/index.js +2 -2
  172. package/dist/routes/config/channels/index.js.map +1 -1
  173. package/dist/routes/config/channels/{routes.d.ts → setup.d.ts} +1 -1
  174. package/dist/routes/config/channels/setup.js +23 -0
  175. package/dist/routes/config/channels/setup.js.map +1 -0
  176. package/dist/routes/config/channels/table.d.ts +13 -13
  177. package/dist/routes/config/channels/table.js +291 -184
  178. package/dist/routes/config/channels/table.js.map +1 -1
  179. package/dist/routes/config/http/envelope.d.ts +111 -0
  180. package/dist/routes/config/http/envelope.js +103 -0
  181. package/dist/routes/config/http/envelope.js.map +1 -0
  182. package/dist/routes/config/index.d.ts +9 -9
  183. package/dist/routes/config/index.js +5 -5
  184. package/dist/routes/config/index.js.map +1 -1
  185. package/dist/routes/config/{providers.js → services.js} +105 -99
  186. package/dist/routes/config/services.js.map +1 -0
  187. package/dist/routes/config/settings.d.ts +1 -1
  188. package/dist/routes/config/settings.js +85 -60
  189. package/dist/routes/config/settings.js.map +1 -1
  190. package/dist/routes/debug.js +17 -18
  191. package/dist/routes/debug.js.map +1 -1
  192. package/dist/routes/health.js +1 -1
  193. package/dist/routes/health.js.map +1 -1
  194. package/dist/routes/icons.js +2 -2
  195. package/dist/routes/icons.js.map +1 -1
  196. package/dist/routes/index.js +2 -2
  197. package/dist/routes/index.js.map +1 -1
  198. package/dist/routes/logs.js +23 -34
  199. package/dist/routes/logs.js.map +1 -1
  200. package/dist/routes/mpegts.js +1 -1
  201. package/dist/routes/playlist.d.ts +5 -5
  202. package/dist/routes/playlist.js +84 -61
  203. package/dist/routes/playlist.js.map +1 -1
  204. package/dist/routes/root/content.js +82 -61
  205. package/dist/routes/root/content.js.map +1 -1
  206. package/dist/routes/root/index.js +2 -5
  207. package/dist/routes/root/index.js.map +1 -1
  208. package/dist/routes/root/scripts/channels.js +538 -581
  209. package/dist/routes/root/scripts/channels.js.map +1 -1
  210. package/dist/routes/root/scripts/config.js +868 -1022
  211. package/dist/routes/root/scripts/config.js.map +1 -1
  212. package/dist/routes/root/scripts/index.d.ts +4 -4
  213. package/dist/routes/root/scripts/shared.js +445 -197
  214. package/dist/routes/root/scripts/shared.js.map +1 -1
  215. package/dist/routes/root/scripts/status.d.ts +4 -0
  216. package/dist/routes/root/scripts/status.handlers.d.ts +182 -0
  217. package/dist/routes/root/scripts/status.handlers.js +713 -0
  218. package/dist/routes/root/scripts/status.handlers.js.map +1 -0
  219. package/dist/routes/root/scripts/status.js +85 -436
  220. package/dist/routes/root/scripts/status.js.map +1 -1
  221. package/dist/routes/root/styles.js +16 -8
  222. package/dist/routes/root/styles.js.map +1 -1
  223. package/dist/routes/services.d.ts +6 -0
  224. package/dist/routes/{providers.js → services.js} +58 -55
  225. package/dist/routes/services.js.map +1 -0
  226. package/dist/routes/sse.d.ts +16 -0
  227. package/dist/routes/sse.js +29 -0
  228. package/dist/routes/sse.js.map +1 -0
  229. package/dist/routes/streams.js +10 -23
  230. package/dist/routes/streams.js.map +1 -1
  231. package/dist/routes/ui.d.ts +2 -2
  232. package/dist/routes/ui.js +2 -0
  233. package/dist/routes/ui.js.map +1 -1
  234. package/dist/routes/upgrade.js +6 -7
  235. package/dist/routes/upgrade.js.map +1 -1
  236. package/dist/service/commands.context.d.ts +6 -0
  237. package/dist/service/commands.context.js +47 -0
  238. package/dist/service/commands.context.js.map +1 -0
  239. package/dist/service/commands.d.ts +53 -8
  240. package/dist/service/commands.js +172 -192
  241. package/dist/service/commands.js.map +1 -1
  242. package/dist/service/generators.context.d.ts +6 -0
  243. package/dist/service/generators.context.js +45 -0
  244. package/dist/service/generators.context.js.map +1 -0
  245. package/dist/service/generators.d.ts +56 -16
  246. package/dist/service/generators.js +509 -291
  247. package/dist/service/generators.js.map +1 -1
  248. package/dist/service/index.d.ts +2 -2
  249. package/dist/streaming/clients.d.ts +2 -2
  250. package/dist/streaming/clients.js +2 -2
  251. package/dist/streaming/codec.d.ts +2 -2
  252. package/dist/streaming/codec.js +0 -1
  253. package/dist/streaming/codec.js.map +1 -1
  254. package/dist/streaming/fmp4Segmenter.d.ts +2 -2
  255. package/dist/streaming/fmp4Segmenter.js +12 -12
  256. package/dist/streaming/hls.d.ts +7 -7
  257. package/dist/streaming/hls.js +104 -92
  258. package/dist/streaming/hls.js.map +1 -1
  259. package/dist/streaming/hlsResume.d.ts +3 -3
  260. package/dist/streaming/hlsResume.js +6 -6
  261. package/dist/streaming/hlsResume.js.map +1 -1
  262. package/dist/streaming/hlsSegments.d.ts +5 -2
  263. package/dist/streaming/hlsSegments.js +14 -9
  264. package/dist/streaming/hlsSegments.js.map +1 -1
  265. package/dist/streaming/monitor.d.ts +12 -12
  266. package/dist/streaming/monitor.js +98 -66
  267. package/dist/streaming/monitor.js.map +1 -1
  268. package/dist/streaming/mp4Parser.d.ts +34 -4
  269. package/dist/streaming/mp4Parser.js +111 -29
  270. package/dist/streaming/mp4Parser.js.map +1 -1
  271. package/dist/streaming/mpegts.d.ts +1 -1
  272. package/dist/streaming/mpegts.js +13 -10
  273. package/dist/streaming/mpegts.js.map +1 -1
  274. package/dist/streaming/playlistBuilder.d.ts +1 -1
  275. package/dist/streaming/playlistBuilder.js +2 -2
  276. package/dist/streaming/preroll.d.ts +9 -9
  277. package/dist/streaming/preroll.js +40 -42
  278. package/dist/streaming/preroll.js.map +1 -1
  279. package/dist/streaming/pretune.js +4 -4
  280. package/dist/streaming/pretune.js.map +1 -1
  281. package/dist/streaming/recovery.d.ts +3 -3
  282. package/dist/streaming/recovery.js +4 -4
  283. package/dist/streaming/registry.d.ts +6 -6
  284. package/dist/streaming/registry.js +4 -8
  285. package/dist/streaming/registry.js.map +1 -1
  286. package/dist/streaming/setup.d.ts +11 -10
  287. package/dist/streaming/setup.js +120 -71
  288. package/dist/streaming/setup.js.map +1 -1
  289. package/dist/streaming/showInfo.d.ts +9 -3
  290. package/dist/streaming/showInfo.js +33 -27
  291. package/dist/streaming/showInfo.js.map +1 -1
  292. package/dist/streaming/statusEmitter.d.ts +8 -7
  293. package/dist/streaming/statusEmitter.js +5 -5
  294. package/dist/streaming/statusEmitter.js.map +1 -1
  295. package/dist/types/channels.d.ts +139 -36
  296. package/dist/types/channels.js +39 -1
  297. package/dist/types/channels.js.map +1 -1
  298. package/dist/types/config.d.ts +22 -3
  299. package/dist/types/index.d.ts +9 -8
  300. package/dist/types/index.js +1 -0
  301. package/dist/types/index.js.map +1 -1
  302. package/dist/types/profiles.d.ts +14 -13
  303. package/dist/types/selection.d.ts +49 -5
  304. package/dist/types/shared.d.ts +1 -1
  305. package/dist/types/streaming.d.ts +2 -2
  306. package/dist/upgrade/commands.context.d.ts +6 -0
  307. package/dist/upgrade/commands.context.js +29 -0
  308. package/dist/upgrade/commands.context.js.map +1 -0
  309. package/dist/upgrade/commands.d.ts +29 -2
  310. package/dist/upgrade/commands.js +87 -134
  311. package/dist/upgrade/commands.js.map +1 -1
  312. package/dist/upgrade/detection.context.d.ts +6 -0
  313. package/dist/upgrade/detection.context.js +24 -0
  314. package/dist/upgrade/detection.context.js.map +1 -0
  315. package/dist/upgrade/detection.d.ts +140 -10
  316. package/dist/upgrade/detection.js +153 -66
  317. package/dist/upgrade/detection.js.map +1 -1
  318. package/dist/upgrade/index.d.ts +2 -2
  319. package/dist/utils/chromeFetch.d.ts +1 -1
  320. package/dist/utils/chromeFetch.js +2 -2
  321. package/dist/utils/clock.d.ts +14 -0
  322. package/dist/utils/clock.js +28 -0
  323. package/dist/utils/clock.js.map +1 -0
  324. package/dist/utils/debugFilter.d.ts +1 -1
  325. package/dist/utils/debugFilter.js +8 -6
  326. package/dist/utils/debugFilter.js.map +1 -1
  327. package/dist/utils/delay.d.ts +2 -3
  328. package/dist/utils/delay.js +10 -16
  329. package/dist/utils/delay.js.map +1 -1
  330. package/dist/utils/evaluate.js +12 -14
  331. package/dist/utils/evaluate.js.map +1 -1
  332. package/dist/utils/ffmpeg.context.d.ts +6 -0
  333. package/dist/utils/ffmpeg.context.js +31 -0
  334. package/dist/utils/ffmpeg.context.js.map +1 -0
  335. package/dist/utils/ffmpeg.d.ts +85 -29
  336. package/dist/utils/ffmpeg.js +126 -129
  337. package/dist/utils/ffmpeg.js.map +1 -1
  338. package/dist/utils/fileLogger.d.ts +18 -2
  339. package/dist/utils/fileLogger.js +60 -31
  340. package/dist/utils/fileLogger.js.map +1 -1
  341. package/dist/utils/format.d.ts +7 -1
  342. package/dist/utils/format.js +22 -2
  343. package/dist/utils/format.js.map +1 -1
  344. package/dist/utils/html.js +1 -3
  345. package/dist/utils/html.js.map +1 -1
  346. package/dist/utils/index.d.ts +21 -20
  347. package/dist/utils/index.js +1 -0
  348. package/dist/utils/index.js.map +1 -1
  349. package/dist/utils/logger.js +31 -45
  350. package/dist/utils/logger.js.map +1 -1
  351. package/dist/utils/m3u.d.ts +18 -3
  352. package/dist/utils/m3u.js +28 -14
  353. package/dist/utils/m3u.js.map +1 -1
  354. package/dist/utils/memo.d.ts +19 -0
  355. package/dist/utils/memo.js +53 -0
  356. package/dist/utils/memo.js.map +1 -0
  357. package/dist/utils/morganStream.js +4 -4
  358. package/dist/utils/morganStream.js.map +1 -1
  359. package/dist/utils/pid.d.ts +2 -2
  360. package/dist/utils/pid.js +2 -2
  361. package/dist/utils/platform.d.ts +1 -1
  362. package/dist/utils/platform.js +3 -2
  363. package/dist/utils/platform.js.map +1 -1
  364. package/dist/utils/retry.d.ts +2 -0
  365. package/dist/utils/retry.js +9 -7
  366. package/dist/utils/retry.js.map +1 -1
  367. package/dist/utils/sanitize.d.ts +2 -2
  368. package/dist/utils/sanitize.js +4 -4
  369. package/dist/utils/streamContext.d.ts +7 -0
  370. package/dist/utils/streamContext.js +10 -1
  371. package/dist/utils/streamContext.js.map +1 -1
  372. package/dist/utils/timing.d.ts +6 -3
  373. package/dist/utils/timing.js +10 -6
  374. package/dist/utils/timing.js.map +1 -1
  375. package/dist/utils/version.d.ts +3 -2
  376. package/dist/utils/version.js +15 -28
  377. package/dist/utils/version.js.map +1 -1
  378. package/package.json +14 -10
  379. package/dist/config/providerPacks.d.ts +0 -46
  380. package/dist/config/providerPacks.js.map +0 -1
  381. package/dist/config/providers.d.ts +0 -175
  382. package/dist/config/providers.js +0 -691
  383. package/dist/config/providers.js.map +0 -1
  384. package/dist/native/intercept.d.ts +0 -35
  385. package/dist/native/intercept.js +0 -184
  386. package/dist/native/intercept.js.map +0 -1
  387. package/dist/routes/config/channels/routes.js +0 -1477
  388. package/dist/routes/config/channels/routes.js.map +0 -1
  389. package/dist/routes/config/providers.js.map +0 -1
  390. package/dist/routes/providers.d.ts +0 -6
  391. package/dist/routes/providers.js.map +0 -1
  392. /package/dist/routes/config/{providers.d.ts → services.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.handlers.js","sourceRoot":"","sources":["../../../../src/routes/root/scripts/status.handlers.ts"],"names":[],"mappings":"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"}
@@ -1,446 +1,95 @@
1
1
  /* Copyright(C) 2024-2026, HJD (https://github.com/hjdhjd). All rights reserved.
2
2
  *
3
- * status.ts: Client-side JavaScript generator for the PrismCast status display.
3
+ * status.ts: Client-side JavaScript generator for the PrismCast status display. The pure handler logic lives in status.handlers.ts as ports-and-adapters TS
4
+ * functions over a HandlerContext; this file is the boundary that builds the script string.
5
+ *
6
+ * The generator emits three sections in order:
7
+ *
8
+ * 1. The script-side constants (HANDLER_CONSTANTS) as `const NAME = <JSON.stringify(value)>;` lines. The handler bodies reference these by their TS-side
9
+ * identifiers; emitting them via JSON.stringify keeps the constants single-sourced rather than hand-mirrored as string templates.
10
+ *
11
+ * 2. The pure handler functions (HANDLER_FUNCTIONS) via Function.prototype.toString() concatenation. Each function declaration emits its full source; the
12
+ * browser parses them as siblings in script-tag scope, so cross-handler references resolve naturally. TypeScript type annotations strip to whitespace via
13
+ * Node's strip-types and to nothing via tsc compilation; the runtime body is identical between test and production.
14
+ *
15
+ * 3. A small IIFE that constructs the initial state, resolves the window.* externals, opens the EventSource, dispatches incoming events to the extracted
16
+ * handlers, attaches the window-bound trampolines (toggleStreamPopover, toggleStreamDetails, copyOverviewPlaylistUrl), and starts the periodic timers
17
+ * (1-second duration tick, 45-second staleness watchdog) plus the visibility-driven reconnect listener and the iPad tooltip initializer.
18
+ *
19
+ * Every function the IIFE references is one of: a sibling extracted via .toString() (resolves at the script-tag top scope), or a browser global (Date,
20
+ * EventSource, JSON, document, setInterval, window). The IIFE has no closures over server-side TS state.
21
+ */
22
+ import { HANDLER_CONSTANTS, HANDLER_FUNCTIONS } from "./status.handlers.js";
23
+ /**
24
+ * Generates the inline <script> block that drives the status display. Returns a complete <script>...</script> string ready to embed in the page wrapper.
25
+ * @returns The script string.
4
26
  */
5
27
  export function generateStatusScript() {
6
- return [
7
- "<script>",
8
- "var statusEventSource = null;",
9
- "var streamData = {};",
10
- "var systemData = null;",
11
- "var expandedStreams = {};",
12
- "var healthColorVars = { healthy: 'var(--stream-healthy)', buffering: 'var(--stream-buffering)', recovering: 'var(--stream-recovering)', ",
13
- " stalled: 'var(--stream-stalled)', error: 'var(--stream-error)' };",
14
- // Format duration in human readable format.
15
- "function formatDuration(seconds) {",
16
- " if (seconds < 60) return seconds + 's';",
17
- " if (seconds < 3600) return Math.floor(seconds / 60) + 'm ' + (seconds % 60) + 's';",
18
- " var h = Math.floor(seconds / 3600);",
19
- " var m = Math.floor((seconds % 3600) / 60);",
20
- " return h + 'h ' + m + 'm';",
21
- "}",
22
- // Format bytes in human readable format.
23
- "function formatBytes(bytes) {",
24
- " if (bytes === 0) return '0 B';",
25
- " if (bytes < 1024) return bytes + ' B';",
26
- " if (bytes < 1048576) return (bytes / 1024).toFixed(1) + ' KB';",
27
- " return (bytes / 1048576).toFixed(1) + ' MB';",
28
- "}",
29
- // Format absolute time (e.g., "6:54 AM" or "Jan 14, 6:54 AM" if different day).
30
- "function formatTime(isoString) {",
31
- " var date = new Date(isoString);",
32
- " var now = new Date();",
33
- " var hours = date.getHours();",
34
- " var minutes = date.getMinutes();",
35
- " var ampm = hours >= 12 ? 'PM' : 'AM';",
36
- " hours = hours % 12;",
37
- " hours = hours ? hours : 12;",
38
- " var timeStr = hours + ':' + (minutes < 10 ? '0' : '') + minutes + ' ' + ampm;",
39
- " if (date.toDateString() !== now.toDateString()) {",
40
- " var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];",
41
- " timeStr = months[date.getMonth()] + ' ' + date.getDate() + ', ' + timeStr;",
42
- " }",
43
- " return timeStr;",
44
- "}",
45
- // Extract concise domain from URL for display (last two hostname parts). Mirrors the server-side extractDomain() in utils/format.ts.
46
- "function getDomain(url) {",
47
- " try {",
48
- " var parts = new URL(url).hostname.split('.');",
49
- " return parts.length > 2 ? parts.slice(-2).join('.') : parts.join('.');",
50
- " } catch (e) {",
51
- " return url;",
52
- " }",
53
- "}",
54
- // Get row background color based on health status. Uses CSS variables for theme support.
55
- "function getRowTint(health) {",
56
- " var tints = {",
57
- " healthy: 'transparent',",
58
- " buffering: 'var(--stream-tint-buffering)',",
59
- " stalled: 'var(--stream-tint-stalled)',",
60
- " recovering: 'var(--stream-tint-recovering)',",
61
- " error: 'var(--stream-tint-error)'",
28
+ // Section 1: emit each constant as a `const name = <json>;` declaration. Stable serialization (Object.entries are emitted in declaration order from
29
+ // status.handlers.ts) keeps generation deterministic across calls.
30
+ const constantDecls = HANDLER_CONSTANTS.map((c) => "const " + c.name + " = " + JSON.stringify(c.value) + ";").join("\n");
31
+ // Section 2: emit each handler/helper as its source via Function.prototype.toString(). Function declarations are hoisted in script-tag scope, so cross-handler
32
+ // references resolve regardless of declaration order; the order chosen in HANDLER_FUNCTIONS reflects the logical groups (formatters, renderers, mutators,
33
+ // schedulers, handlers, trampolines).
34
+ const handlerSources = HANDLER_FUNCTIONS.map((fn) => fn.toString()).join("\n\n");
35
+ // Section 3: the IIFE. Wires the runtime side - constructs the state and externals, opens the EventSource, dispatches events, attaches window.* trampolines,
36
+ // starts the timers. The handler-side state mutations all go through the ctx that is built here. The shared sibling-script values (channelDisplayHtml,
37
+ // channelTable, copyToClipboard, dropdowns) are referenced as bare identifiers, matching the existing client-side idiom - shared.ts assigns them via
38
+ // window.X = ... before this script loads, and bare identifiers in non-strict script-tag scope resolve through the global object. updateRestartDialogStatus
39
+ // is wrapped in a typeof guard inside a getter because config.ts loads after status.ts; a streamRemoved event arriving before config.ts has registered the
40
+ // callback must not throw.
41
+ const iife = [
42
+ "(function() {",
43
+ " const state = {",
44
+ " expandedStreams: {},",
45
+ " hiddenSince: 0,",
46
+ " lastStatusEventTime: Date.now(),",
47
+ " popoverRenderPending: false,",
48
+ " streamData: {},",
49
+ " systemData: null,",
50
+ " tableRenderPending: false",
62
51
  " };",
63
- " return tints[health] || 'transparent';",
64
- "}",
65
- // Get health badge HTML using CSS variables for theme-aware colors. NOTE: Escalation level semantics defined in monitor.ts.
66
- // L1=play/unmute, L2=seek, L3=source reload, L4=page navigation.
67
- "function getHealthBadge(health, level) {",
68
- " var label = '';",
69
- " if (health === 'healthy') { label = 'Healthy'; }",
70
- " else if (health === 'buffering') { label = 'Buffering'; }",
71
- " else if (health === 'stalled') { label = 'Stalled'; }",
72
- " else if (health === 'error') { label = 'Error'; }",
73
- " else if (health === 'recovering') {",
74
- " if (level === 1) { label = 'Resuming playback'; }",
75
- " else if (level === 2) { label = 'Syncing to live'; }",
76
- " else if (level === 3) { label = 'Reloading player'; }",
77
- " else if (level >= 4) { label = 'Reloading page'; }",
78
- " else { label = 'Recovering'; }",
79
- " }",
80
- " else { label = health; }",
81
- " return '<span class=\"status-dot\" style=\"color: ' + (healthColorVars[health] || 'var(--text-muted)') + ';\">&#9679;</span> ' +",
82
- " '<span style=\"color: var(--text-secondary);\">' + label + '</span>';",
83
- "}",
84
- // Update system status display in header. Shows system health (green dot when connected, red with label when not) and stream count.
85
- "function updateSystemStatus() {",
86
- " if(!systemData) return;",
87
- " var healthEl = document.getElementById('system-health');",
88
- " var streamEl = document.getElementById('stream-count');",
89
- " if(systemData.browser.connected) {",
90
- " healthEl.innerHTML = '<span class=\"status-dot\" style=\"color: var(--stream-healthy);\">&#9679;</span>';",
91
- " } else {",
92
- " healthEl.innerHTML = '<span class=\"status-dot\" style=\"color: var(--stream-error);\">&#9679;</span> Browser offline';",
93
- " }",
94
- " var active = systemData.streams.active;",
95
- " var limit = systemData.streams.limit;",
96
- " if(active === 0) {",
97
- " streamEl.textContent = '0 streams';",
98
- " streamEl.classList.remove('clickable');",
99
- " var popMenu = document.getElementById('stream-popover-menu');",
100
- " if(popMenu) popMenu.classList.remove('show');",
101
- " } else {",
102
- " streamEl.textContent = active + '/' + limit + ' streams';",
103
- " streamEl.classList.add('clickable');",
104
- " }",
105
- "}",
106
- // Build the popover content from streamData. Populates the given menu element with one row per active stream.
107
- "function buildStreamPopoverContent(menu) {",
108
- " var ids = Object.keys(streamData);",
109
- " var html = '';",
110
- " var now = Date.now();",
111
- " for(var i = 0; i < ids.length; i++) {",
112
- " var s = streamData[ids[i]];",
113
- " var color = healthColorVars[s.health] || 'var(--text-muted)';",
114
- " var name = s.channel || s.providerName || getDomain(s.url);",
115
- " var dur = Math.floor((now - new Date(s.startTime).getTime()) / 1000);",
116
- " var hwBadge = s.hardwareAccelerated ? ' <span title=\"Hardware accelerated\">\\u26A1</span>' : '';",
117
- " var showSuffix = s.showName ? ' <span class=\"stream-popover-show\">' + s.showName + '</span>' : '';",
118
- " html += '<div class=\"stream-popover-row\">';",
119
- " html += '<span class=\"status-dot\" style=\"color: ' + color + ';\">&#9679;</span>';",
120
- " html += channelDisplayHtml(s.logoUrl, name, 'stream-popover-logo', 'stream-popover-channel');",
121
- " html += hwBadge + showSuffix;",
122
- " html += '<span class=\"stream-popover-duration\">' + formatDuration(dur) + '</span>';",
123
- " html += '</div>';",
124
- " }",
125
- " menu.innerHTML = html;",
126
- "}",
127
- // Update an already-open stream popover with current data. Called from SSE handlers and the duration interval.
128
- "function updateStreamPopover() {",
129
- " var menu = document.getElementById('stream-popover-menu');",
130
- " if(!menu || !menu.classList.contains('show')) return;",
131
- " var ids = Object.keys(streamData);",
132
- " if(ids.length === 0) {",
133
- " menu.classList.remove('show');",
134
- " return;",
135
- " }",
136
- " buildStreamPopoverContent(menu);",
137
- "}",
138
- // Toggle the stream popover open or closed.
139
- "window.toggleStreamPopover = function() {",
140
- " var ids = Object.keys(streamData);",
141
- " if(ids.length === 0) return;",
142
- " var menu = document.getElementById('stream-popover-menu');",
143
- " if(!menu) return;",
144
- " var isOpen = menu.classList.contains('show');",
145
- " closeDropdowns();",
146
- " if(!isOpen) {",
147
- " buildStreamPopoverContent(menu);",
148
- " menu.classList.add('show');",
149
- " }",
150
- "};",
151
- // Format last issue for display.
152
- "function formatLastIssue(s) {",
153
- " if (!s.lastIssueType || !s.lastIssueTime) { return 'None'; }",
154
- " var issueLabel = s.lastIssueType.charAt(0).toUpperCase() + s.lastIssueType.slice(1);",
155
- " var timeStr = formatTime(new Date(s.lastIssueTime).toISOString());",
156
- " var status = (s.health === 'healthy') ? ' (recovered)' : ' (recovering)';",
157
- " return issueLabel + ' at ' + timeStr + status;",
158
- "}",
159
- // Format auto-recovery info for display.
160
- "function formatAutoRecovery(s) {",
161
- " var attempts = s.recoveryAttempts;",
162
- " var reloads = s.pageReloadsInWindow;",
163
- " if (attempts === 0) { return 'N/A'; }",
164
- " var str = attempts + (attempts === 1 ? ' attempt' : ' attempts');",
165
- " if (reloads > 0) { str += ', ' + reloads + (reloads === 1 ? ' page reload' : ' page reloads'); }",
166
- " return str;",
167
- "}",
168
- // Format client type breakdown for the detail row.
169
- "function formatClients(s) {",
170
- " if (s.clientCount === 0) { return 'None'; }",
171
- " var labels = { 'hls': 'HLS', 'mpegts': 'MPEG-TS' };",
172
- " var parts = [];",
173
- " for (var i = 0; i < s.clients.length; i++) {",
174
- " var c = s.clients[i];",
175
- " parts.push(c.count + ' ' + (labels[c.type] || c.type));",
176
- " }",
177
- " return parts.join(', ');",
178
- "}",
179
- // Render the streams table.
180
- "function renderStreamsTable() {",
181
- " var tbody = document.getElementById('streams-tbody');",
182
- " if (!tbody) return;",
183
- " var streamIds = Object.keys(streamData);",
184
- " if (streamIds.length === 0) {",
185
- " tbody.innerHTML = '<tr class=\"empty-row\"><td colspan=\"4\">No active streams</td></tr>';",
186
- " return;",
187
- " }",
188
- " var html = '';",
189
- " for (var i = 0; i < streamIds.length; i++) {",
190
- " var id = streamIds[i];",
191
- " var s = streamData[id];",
192
- " var isExpanded = expandedStreams[id];",
193
- " var chevron = isExpanded ? '&#9660;' : '&#9654;';",
194
- " var rowTint = getRowTint(s.health);",
195
- " var channelText = s.channel || s.providerName || getDomain(s.url);",
196
- " var channelDisplay = channelDisplayHtml(s.logoUrl, channelText, 'channel-logo', 'channel-text');",
197
- " html += '<tr class=\"stream-row\" data-id=\"' + id + '\" onclick=\"toggleStreamDetails(' + id + ')\" style=\"background-color: ' + rowTint + ';\">';",
198
- " html += '<td class=\"chevron\">' + chevron + '</td>';",
199
- " var hwIcon = s.hardwareAccelerated ? '\\u26A1 ' : '';",
200
- " var nativeBadge = '';",
201
- " if (s.streamingMode === 'native') {",
202
- " nativeBadge = ' <span class=\"native-badge\" title=\"Native HLS\">Native</span>';",
203
- " } else if (s.hardwareAccelerated) {",
204
- " nativeBadge = ' <span class=\"native-badge\" title=\"Hardware accelerated\">' + hwIcon + (s.captureCodec || '') + '</span>';",
205
- " }",
206
- " var durationSpan = '<span class=\"stream-duration\" id=\"duration-' + id + '\">\\u00b7 ' + formatDuration(s.duration) + '</span>';",
207
- " html += '<td class=\"stream-info\">' + channelDisplay + nativeBadge + ' ' + durationSpan + '</td>';",
208
- " var showDisplay = s.showName ? s.showName : '';",
209
- " html += '<td class=\"stream-show\">' + showDisplay + '</td>';",
210
- " var clientIndicator = '';",
211
- " if (s.clientCount > 0) {",
212
- " var title = s.clientCount + (s.clientCount !== 1 ? ' clients' : ' client');",
213
- " clientIndicator = '<span class=\"client-count\" title=\"' + title + '\">&#9673; ' + s.clientCount + '</span> ';",
214
- " }",
215
- " html += '<td class=\"stream-health\">' + clientIndicator + getHealthBadge(s.health, s.escalationLevel) + '</td>';",
216
- " html += '</tr>';",
217
- " if (isExpanded) {",
218
- " html += '<tr class=\"stream-details\" data-id=\"' + id + '\">';",
219
- " html += '<td colspan=\"4\">';",
220
- " html += '<div class=\"details-content\">';",
221
- " html += '<div class=\"details-header\">';",
222
- " html += '<div class=\"details-url\">' + s.url + '</div>';",
223
- " var clientSuffix = s.clientCount > 0 ? ' &middot; ' + formatClients(s) : '';",
224
- " html += '<div class=\"details-started\"><strong>Started:</strong> ' + formatTime(s.startTime) + clientSuffix + '</div>';",
225
- " html += '</div>';",
226
- " html += '<div class=\"details-metrics\">';",
227
- " var codecLabel = s.captureCodec ? (s.hardwareAccelerated ? '\\u26A1 ' + s.captureCodec : s.captureCodec) :",
228
- " (s.streamingMode === 'native' ? 'Native HLS' : 'Unknown');",
229
- " var modeLabel = s.streamingMode === 'native' ? 'Native HLS' : 'Capture';",
230
- " var qualitySuffix = '';",
231
- " if (s.streamingMode === 'native') {",
232
- " var qParts = [];",
233
- " if (s.nativeBandwidth > 0) { qParts.push((s.nativeBandwidth / 1000000).toFixed(1) + 'Mbps'); }",
234
- " if (s.nativeResolution) {",
235
- " var resLabels = { '1080': '1080p', '2160': '4K', '360': '360p', '480': '480p', '720': '720p' };",
236
- " var h = s.nativeResolution.split('x')[1];",
237
- " qParts.push(resLabels[h] || s.nativeResolution);",
238
- " }",
239
- " if (qParts.length > 0) { qualitySuffix = ' - ' + qParts.join(' '); }",
240
- " }",
241
- " html += '<div class=\"details-codec\"><strong>Codec:</strong> ' + codecLabel + ' (' + modeLabel + ')' + qualitySuffix + '</div>';",
242
- " html += '<div class=\"details-issue\"><strong>Last issue:</strong> ' + formatLastIssue(s) + '</div>';",
243
- " html += '<div class=\"details-recovery\"><strong>Recovery:</strong> ' + formatAutoRecovery(s) + '</div>';",
244
- " html += '<div class=\"details-memory\"><strong>Memory:</strong> ' + formatBytes(s.memoryBytes) + '</div>';",
245
- " html += '</div>';",
246
- " html += '</div>';",
247
- " html += '</td></tr>';",
248
- " }",
249
- " }",
250
- " tbody.innerHTML = html;",
251
- "}",
252
- // Toggle stream details.
253
- "function toggleStreamDetails(id) {",
254
- " expandedStreams[id] = !expandedStreams[id];",
255
- " renderStreamsTable();",
256
- "}",
257
- // Update stream durations every second. We calculate duration from the immutable startTime rather than incrementing a counter, ensuring the displayed duration is
258
- // always accurate regardless of any staleness in server-sent updates.
259
- "function updateDurations() {",
260
- " var now = Date.now();",
261
- " var streamIds = Object.keys(streamData);",
262
- " for (var i = 0; i < streamIds.length; i++) {",
263
- " var id = streamIds[i];",
264
- " var s = streamData[id];",
265
- " var durationSec = Math.floor((now - new Date(s.startTime).getTime()) / 1000);",
266
- " var el = document.getElementById('duration-' + id);",
267
- " if (el) el.textContent = '\\u00b7 ' + formatDuration(durationSec);",
268
- " }",
269
- " updateStreamPopover();",
270
- "}",
271
- // Track the last time any SSE event was received from the status stream. Used by the staleness checker to detect silently dead connections.
272
- "var lastStatusEventTime = Date.now();",
273
- "var hiddenSince = 0;",
274
- // Real-time health indicator updates. These functions update channel health icons and provider login icons in the Channels tab without a page refresh.
275
- "function formatTimeAgo(ts) {",
276
- " var seconds = Math.floor((Date.now() - ts) / 1000);",
277
- " if(seconds < 60) { return 'just now'; }",
278
- " var minutes = Math.floor(seconds / 60);",
279
- " if(minutes < 60) { return minutes + (minutes === 1 ? ' minute ago' : ' minutes ago'); }",
280
- " var hours = Math.floor(minutes / 60);",
281
- " if(hours < 24) { return hours + (hours === 1 ? ' hour ago' : ' hours ago'); }",
282
- " var days = Math.floor(hours / 24);",
283
- " return days + (days === 1 ? ' day ago' : ' days ago');",
284
- "}",
285
- "function updateChannelHealth(channelKey, status, timestamp, domain) {",
286
- " var row = document.getElementById('display-row-' + channelKey);",
287
- " if(!row) { return; }",
288
- // If a domain was supplied (snapshot and real-time events both include it), verify it matches the currently selected domain for this channel. The login button
289
- // carries a data-auth-domain attribute with the selected domain. If they differ the health entry is from a previous provider and should be ignored.
290
- " if(domain) {",
291
- " var loginBtn = row.querySelector('.btn-icon-login');",
292
- " if(loginBtn && loginBtn.getAttribute('data-auth-domain') !== domain) { return; }",
293
- " }",
294
- " var icon = row.querySelector('.btn-icon-health');",
295
- " if(!icon) { return; }",
296
- " icon.classList.remove('health-success', 'health-failed');",
297
- " if(status === 'success') { icon.classList.add('health-success'); }",
298
- " else if(status === 'failed') { icon.classList.add('health-failed'); }",
299
- " icon.title = (status === 'success' ? 'Succeeded ' : 'Failed ') + formatTimeAgo(timestamp);",
300
- "}",
301
- "function updateDomainAuth(domain, timestamp) {",
302
- " var buttons = document.querySelectorAll('.btn-icon-login[data-auth-domain=\"' + domain + '\"]');",
303
- " for(var i = 0; i < buttons.length; i++) {",
304
- " buttons[i].classList.add('health-success');",
305
- " buttons[i].title = 'Verified ' + formatTimeAgo(timestamp);",
306
- " }",
307
- "}",
308
- "function applyHealthSnapshot(data) {",
309
- " var key;",
310
- " for(key in data.channels) {",
311
- " var entry = data.channels[key];",
312
- " updateChannelHealth(key, entry.status, entry.timestamp, entry.domain);",
313
- " }",
314
- " for(key in data.domains) {",
315
- " updateDomainAuth(key, data.domains[key]);",
316
- " }",
317
- "}",
318
- // Connect (or reconnect) to the status SSE stream. Closes any existing connection first so this is safe to call repeatedly.
319
- "function connectStatusSSE() {",
320
- " if(statusEventSource) { statusEventSource.close(); }",
321
- " statusEventSource = new EventSource('/streams/status');",
322
- " lastStatusEventTime = Date.now();",
323
- // Local helper that registers an event listener and updates the staleness timestamp on every event. Handlers are optional so heartbeat can
324
- // be registered with just on('heartbeat') for pure keepalive tracking. The onerror handler stays outside this wrapper because errors must
325
- // not reset the staleness timer — a connection that only fires errors is still dead.
326
- " function on(event, handler) {",
327
- " statusEventSource.addEventListener(event, function(e) {",
328
- " lastStatusEventTime = Date.now();",
329
- " if(handler) { handler(e); }",
330
- " });",
331
- " }",
332
- " on('heartbeat');",
333
- " on('snapshot', function(e) {",
334
- " var data = JSON.parse(e.data);",
335
- " systemData = data.system;",
336
- " streamData = {};",
337
- " for (var i = 0; i < data.streams.length; i++) {",
338
- " streamData[data.streams[i].id] = data.streams[i];",
339
- " }",
340
- " updateSystemStatus();",
341
- " renderStreamsTable();",
342
- " updateStreamPopover();",
343
- " if(data.health) { applyHealthSnapshot(data.health); }",
344
- " });",
345
- " on('streamAdded', function(e) {",
346
- " var s = JSON.parse(e.data);",
347
- " streamData[s.id] = s;",
348
- " renderStreamsTable();",
349
- " updateStreamPopover();",
350
- " });",
351
- " on('streamRemoved', function(e) {",
352
- " var data = JSON.parse(e.data);",
353
- " delete streamData[data.id];",
354
- " delete expandedStreams[data.id];",
355
- " renderStreamsTable();",
356
- " updateStreamPopover();",
357
- " if (typeof updateRestartDialogStatus === 'function') {",
358
- " updateRestartDialogStatus();",
359
- " }",
360
- " });",
361
- " on('streamHealthChanged', function(e) {",
362
- " var s = JSON.parse(e.data);",
363
- " if (streamData[s.id]) {",
364
- " streamData[s.id] = s;",
365
- " renderStreamsTable();",
366
- " updateStreamPopover();",
367
- " }",
368
- " });",
369
- " on('systemStatusChanged', function(e) {",
370
- " systemData = JSON.parse(e.data);",
371
- " updateSystemStatus();",
372
- " });",
373
- " on('healthChanged', function(e) {",
374
- " var event = JSON.parse(e.data);",
375
- " updateChannelHealth(event.channelKey, event.status, event.timestamp, event.domain);",
376
- " if(event.status === 'success') { updateDomainAuth(event.domain, event.timestamp); }",
377
- " });",
378
- // Channel table updates from the server (e.g., logo population after startup). Applies the patch via the shared applyChannelPatch function.
379
- " on('channelUpdate', function(e) {",
380
- " if(window.applyChannelPatch) { applyChannelPatch(JSON.parse(e.data)); }",
381
- " });",
382
- " statusEventSource.onerror = function() {",
383
- " document.getElementById('system-health').innerHTML = '<span class=\"status-dot\" style=\"color: var(--stream-stalled);\">&#9679;</span> Updates paused';",
52
+ " const externals = {",
53
+ " channelDisplayHtml: channelDisplayHtml,",
54
+ " channelTable: channelTable,",
55
+ " copyToClipboard: copyToClipboard,",
56
+ " dropdowns: dropdowns,",
57
+ " get updateRestartDialogStatus() { return (typeof updateRestartDialogStatus !== 'undefined') ? updateRestartDialogStatus : undefined; }",
384
58
  " };",
385
- "}",
386
- // Initial connection and periodic timers.
387
- "connectStatusSSE();",
388
- "setInterval(updateDurations, 1000);",
389
- // Staleness detection: if no SSE event has arrived in 45 seconds, the connection is likely dead. Reconnect proactively.
390
- "setInterval(function() {",
391
- " if((Date.now() - lastStatusEventTime) > 45000) { connectStatusSSE(); }",
392
- "}, 45000);",
393
- // Visibility-driven reconnect. When the page returns from being hidden for more than 30 seconds, reconnect the status stream and re-activate
394
- // the current tab so the logs stream reconnects naturally through its existing tabactivated listener.
395
- "document.addEventListener('visibilitychange', function() {",
396
- " if(document.hidden) {",
397
- " hiddenSince = Date.now();",
398
- " } else if((hiddenSince > 0) && ((Date.now() - hiddenSince) > 30000)) {",
399
- " hiddenSince = 0;",
400
- " connectStatusSSE();",
401
- " var activeTab = document.querySelector('.tab-btn.active');",
402
- " if(activeTab) {",
403
- " document.dispatchEvent(new CustomEvent('tabactivated', { detail: { category: activeTab.getAttribute('data-category') } }));",
59
+ " const ctx = { document: document, externals: externals, state: state };",
60
+ " let statusEventSource = null;",
61
+ " function connectStatusSSE() {",
62
+ " if(statusEventSource) { statusEventSource.close(); }",
63
+ " statusEventSource = new EventSource('/streams/status');",
64
+ " state.lastStatusEventTime = Date.now();",
65
+ " function on(event, handler) {",
66
+ " statusEventSource.addEventListener(event, (e) => {",
67
+ " state.lastStatusEventTime = Date.now();",
68
+ " if(handler) { handler(e); }",
69
+ " });",
404
70
  " }",
405
- " } else {",
406
- " hiddenSince = 0;",
407
- " }",
408
- "});",
409
- // Copy playlist URL function for Overview tab Quick Start section. Delegates to the shared copyToClipboard utility for consistent clipboard handling
410
- // across all contexts (HTTPS Clipboard API with execCommand fallback for plain HTTP).
411
- "window.copyOverviewPlaylistUrl = function() {",
412
- " var urlEl = document.getElementById('overview-playlist-url');",
413
- " if(urlEl) { copyToClipboard(urlEl.textContent, 'Playlist URL copied to clipboard.'); }",
414
- "};",
415
- // JS-based tooltips for devices where the primary input can't hover (iPadOS). Safari on iPadOS doesn't show native title tooltips, so we use
416
- // a single <div> appended to <body> and positioned via getBoundingClientRect(). This is immune to overflow containers and stacking contexts.
417
- // On pure-touch devices without a trackpad, mouseenter never fires so the tooltip stays hidden. Desktop skips initialization entirely.
418
- "(function() {",
419
- " if(!window.matchMedia('(hover: none)').matches) return;",
420
- " var tip = document.createElement('div');",
421
- " tip.className = 'btn-icon-tooltip';",
422
- " document.body.appendChild(tip);",
423
- " document.addEventListener('mouseenter', function(e) {",
424
- " var btn = e.target.closest('.btn-icon[aria-label]');",
425
- " if(!btn) return;",
426
- " var label = btn.getAttribute('title') || btn.getAttribute('aria-label');",
427
- " if(!label) return;",
428
- " var rect = btn.getBoundingClientRect();",
429
- " tip.textContent = label;",
430
- " tip.classList.add('visible');",
431
- " tip.style.top = (rect.bottom + 6 + (window.scrollY || 0)) + 'px';",
432
- " tip.style.left = (rect.left + rect.width / 2 + (window.scrollX || 0)) + 'px';",
433
- " tip.style.transform = 'translateX(-50%)';",
434
- " }, true);",
435
- " document.addEventListener('mouseleave', function(e) {",
436
- " var src = e.target.closest('.btn-icon[aria-label]');",
437
- " if(!src) return;",
438
- " var dest = e.relatedTarget && e.relatedTarget.closest && e.relatedTarget.closest('.btn-icon[aria-label]');",
439
- " if(dest === src) return;",
440
- " tip.classList.remove('visible');",
441
- " }, true);",
442
- "})();",
443
- "</script>"
71
+ " on('heartbeat');",
72
+ " on('snapshot', (e) => handleSnapshot(JSON.parse(e.data), ctx));",
73
+ " on('streamAdded', (e) => handleStreamAdded(JSON.parse(e.data), ctx));",
74
+ " on('streamRemoved', (e) => handleStreamRemoved(JSON.parse(e.data), ctx));",
75
+ " on('streamHealthChanged', (e) => handleStreamHealthChanged(JSON.parse(e.data), ctx));",
76
+ " on('systemStatusChanged', (e) => handleSystemStatusChanged(JSON.parse(e.data), ctx));",
77
+ " on('healthChanged', (e) => handleHealthChanged(JSON.parse(e.data), ctx));",
78
+ " on('channelUpdate', (e) => handleChannelUpdate(JSON.parse(e.data), ctx));",
79
+ " statusEventSource.onerror = () => handleSseError(ctx);",
80
+ " }",
81
+ " window.toggleStreamPopover = () => toggleStreamPopover(ctx);",
82
+ " window.toggleStreamDetails = (id) => toggleStreamDetails(id, ctx);",
83
+ " window.copyOverviewPlaylistUrl = () => copyOverviewPlaylistUrl(ctx);",
84
+ " connectStatusSSE();",
85
+ " setInterval(() => updateDurations(ctx), 1000);",
86
+ " setInterval(() => {",
87
+ " if((Date.now() - state.lastStatusEventTime) > 45000) { connectStatusSSE(); }",
88
+ " }, 45000);",
89
+ " document.addEventListener('visibilitychange', () => handleVisibilityChange(ctx, connectStatusSSE));",
90
+ " initIPadTooltips(ctx);",
91
+ "})();"
444
92
  ].join("\n");
93
+ return ["<script>", constantDecls, handlerSources, iife, "</script>"].join("\n");
445
94
  }
446
95
  //# sourceMappingURL=status.js.map