prismcast 1.12.0 → 1.13.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 (631) hide show
  1. package/dist/app.d.ts +41 -1
  2. package/dist/app.js +164 -76
  3. package/dist/app.js.map +1 -1
  4. package/dist/browser/blockedPage.d.ts +0 -1
  5. package/dist/browser/browserSupervisor.d.ts +34 -5
  6. package/dist/browser/browserSupervisor.js +39 -12
  7. package/dist/browser/browserSupervisor.js.map +1 -1
  8. package/dist/browser/cdp.d.ts +58 -6
  9. package/dist/browser/cdp.js +147 -9
  10. package/dist/browser/cdp.js.map +1 -1
  11. package/dist/browser/channelSelection.d.ts +18 -6
  12. package/dist/browser/channelSelection.js +47 -36
  13. package/dist/browser/channelSelection.js.map +1 -1
  14. package/dist/browser/consent.d.ts +33 -4
  15. package/dist/browser/consent.js +87 -50
  16. package/dist/browser/consent.js.map +1 -1
  17. package/dist/browser/display.d.ts +0 -1
  18. package/dist/browser/hlsPlaylistObserver.d.ts +3 -2
  19. package/dist/browser/hlsPlaylistObserver.js +11 -6
  20. package/dist/browser/hlsPlaylistObserver.js.map +1 -1
  21. package/dist/browser/index.d.ts +273 -59
  22. package/dist/browser/index.js +768 -255
  23. package/dist/browser/index.js.map +1 -1
  24. package/dist/browser/launchGovernor.d.ts +0 -1
  25. package/dist/browser/login.d.ts +11 -10
  26. package/dist/browser/login.js +42 -33
  27. package/dist/browser/login.js.map +1 -1
  28. package/dist/browser/manifestInterceptor.d.ts +14 -5
  29. package/dist/browser/manifestInterceptor.js +26 -13
  30. package/dist/browser/manifestInterceptor.js.map +1 -1
  31. package/dist/browser/navigation.d.ts +28 -0
  32. package/dist/browser/navigation.js +57 -0
  33. package/dist/browser/navigation.js.map +1 -0
  34. package/dist/browser/pageStaleness.d.ts +1 -2
  35. package/dist/browser/pageStaleness.js +9 -9
  36. package/dist/browser/pageStaleness.js.map +1 -1
  37. package/dist/browser/precaching.d.ts +27 -13
  38. package/dist/browser/precaching.js +219 -73
  39. package/dist/browser/precaching.js.map +1 -1
  40. package/dist/browser/tabCapture.d.ts +97 -0
  41. package/dist/browser/tabCapture.js +314 -0
  42. package/dist/browser/tabCapture.js.map +1 -0
  43. package/dist/browser/tabNetworkObserver.d.ts +0 -1
  44. package/dist/browser/tabSelection.d.ts +117 -0
  45. package/dist/browser/tabSelection.js +547 -0
  46. package/dist/browser/tabSelection.js.map +1 -0
  47. package/dist/browser/tuning/cache.d.ts +0 -1
  48. package/dist/browser/tuning/comcastPolymer.d.ts +0 -1
  49. package/dist/browser/tuning/comcastPolymer.js +18 -19
  50. package/dist/browser/tuning/comcastPolymer.js.map +1 -1
  51. package/dist/browser/tuning/cox.d.ts +0 -1
  52. package/dist/browser/tuning/directv.d.ts +0 -1
  53. package/dist/browser/tuning/directv.js +12 -13
  54. package/dist/browser/tuning/directv.js.map +1 -1
  55. package/dist/browser/tuning/fox.d.ts +0 -1
  56. package/dist/browser/tuning/fox.js +2 -2
  57. package/dist/browser/tuning/fox.js.map +1 -1
  58. package/dist/browser/tuning/gridSearch.d.ts +0 -1
  59. package/dist/browser/tuning/hbo.d.ts +0 -1
  60. package/dist/browser/tuning/hbo.js +2 -2
  61. package/dist/browser/tuning/hbo.js.map +1 -1
  62. package/dist/browser/tuning/hulu.d.ts +14 -2
  63. package/dist/browser/tuning/hulu.js +150 -24
  64. package/dist/browser/tuning/hulu.js.map +1 -1
  65. package/dist/browser/tuning/shared.d.ts +1 -2
  66. package/dist/browser/tuning/shared.js +1 -1
  67. package/dist/browser/tuning/sling.d.ts +0 -1
  68. package/dist/browser/tuning/sling.js +17 -22
  69. package/dist/browser/tuning/sling.js.map +1 -1
  70. package/dist/browser/tuning/spectrum.d.ts +0 -1
  71. package/dist/browser/tuning/thumbnailRow.d.ts +0 -1
  72. package/dist/browser/tuning/tileClick.d.ts +0 -1
  73. package/dist/browser/tuning/xfinity.d.ts +0 -1
  74. package/dist/browser/tuning/youtubeTv.d.ts +0 -1
  75. package/dist/browser/tuning/youtubeTv.js +1 -2
  76. package/dist/browser/tuning/youtubeTv.js.map +1 -1
  77. package/dist/browser/video.d.ts +55 -33
  78. package/dist/browser/video.js +213 -169
  79. package/dist/browser/video.js.map +1 -1
  80. package/dist/browser/windowSync.d.ts +45 -0
  81. package/dist/browser/windowSync.js +153 -0
  82. package/dist/browser/windowSync.js.map +1 -0
  83. package/dist/channels/index.d.ts +7 -1
  84. package/dist/channels/index.js +24 -8
  85. package/dist/channels/index.js.map +1 -1
  86. package/dist/config/channelForm.d.ts +0 -1
  87. package/dist/config/channelIdentity.d.ts +27 -0
  88. package/dist/config/channelIdentity.js +72 -0
  89. package/dist/config/channelIdentity.js.map +1 -0
  90. package/dist/config/channelSort.d.ts +25 -0
  91. package/dist/config/channelSort.js +101 -0
  92. package/dist/config/channelSort.js.map +1 -0
  93. package/dist/config/consistencyProbe.d.ts +0 -1
  94. package/dist/config/consistencyProbe.js +1 -1
  95. package/dist/config/consistencyProbe.js.map +1 -1
  96. package/dist/config/health.d.ts +3 -2
  97. package/dist/config/health.js +41 -31
  98. package/dist/config/health.js.map +1 -1
  99. package/dist/config/index.d.ts +12 -1
  100. package/dist/config/index.js +77 -31
  101. package/dist/config/index.js.map +1 -1
  102. package/dist/config/paths.d.ts +17 -2
  103. package/dist/config/paths.js +21 -1
  104. package/dist/config/paths.js.map +1 -1
  105. package/dist/config/persistence.context.d.ts +0 -1
  106. package/dist/config/persistence.d.ts +8 -4
  107. package/dist/config/persistence.js +143 -82
  108. package/dist/config/persistence.js.map +1 -1
  109. package/dist/config/presets.d.ts +0 -1
  110. package/dist/config/profiles.d.ts +9 -4
  111. package/dist/config/profiles.js +39 -6
  112. package/dist/config/profiles.js.map +1 -1
  113. package/dist/config/providerLineups.d.ts +0 -1
  114. package/dist/config/providerLineups.js +0 -3
  115. package/dist/config/providerLineups.js.map +1 -1
  116. package/dist/config/reactivity.d.ts +0 -1
  117. package/dist/config/servicePacks.d.ts +0 -1
  118. package/dist/config/services.d.ts +1 -47
  119. package/dist/config/services.js +4 -135
  120. package/dist/config/services.js.map +1 -1
  121. package/dist/config/sites.d.ts +0 -9
  122. package/dist/config/sites.js +82 -98
  123. package/dist/config/sites.js.map +1 -1
  124. package/dist/config/userChannels.d.ts +22 -29
  125. package/dist/config/userChannels.js +47 -65
  126. package/dist/config/userChannels.js.map +1 -1
  127. package/dist/config/userConfig.d.ts +19 -4
  128. package/dist/config/userConfig.js +123 -25
  129. package/dist/config/userConfig.js.map +1 -1
  130. package/dist/config/userProfiles.d.ts +2 -3
  131. package/dist/config/userProfiles.js +16 -13
  132. package/dist/config/userProfiles.js.map +1 -1
  133. package/dist/hdhr/channelMap.d.ts +0 -1
  134. package/dist/hdhr/deviceId.d.ts +0 -1
  135. package/dist/hdhr/discover.d.ts +0 -1
  136. package/dist/hdhr/getHandlers.d.ts +0 -1
  137. package/dist/hdhr/identity.d.ts +0 -1
  138. package/dist/hdhr/index.d.ts +0 -1
  139. package/dist/hdhr/protocol.d.ts +1 -2
  140. package/dist/hdhr/protocol.js +1 -1
  141. package/dist/hdhr/tunerState.d.ts +0 -1
  142. package/dist/hdhr/udp.d.ts +0 -1
  143. package/dist/hdhr/udp.js +16 -4
  144. package/dist/hdhr/udp.js.map +1 -1
  145. package/dist/identity.d.ts +0 -1
  146. package/dist/index.d.ts +0 -1
  147. package/dist/index.js +10 -3
  148. package/dist/index.js.map +1 -1
  149. package/dist/native/codecInference.d.ts +5 -4
  150. package/dist/native/codecInference.js +12 -7
  151. package/dist/native/codecInference.js.map +1 -1
  152. package/dist/native/decrypt.d.ts +10 -3
  153. package/dist/native/decrypt.js +9 -5
  154. package/dist/native/decrypt.js.map +1 -1
  155. package/dist/native/index.d.ts +26 -24
  156. package/dist/native/index.js +26 -20
  157. package/dist/native/index.js.map +1 -1
  158. package/dist/native/probe.d.ts +7 -10
  159. package/dist/native/probe.js +41 -37
  160. package/dist/native/probe.js.map +1 -1
  161. package/dist/native/proxy.d.ts +3 -4
  162. package/dist/native/proxy.js +91 -69
  163. package/dist/native/proxy.js.map +1 -1
  164. package/dist/native/tokenExpiry.d.ts +0 -1
  165. package/dist/routes/assets.d.ts +0 -1
  166. package/dist/routes/auth.d.ts +0 -1
  167. package/dist/routes/auth.js +1 -1
  168. package/dist/routes/auth.js.map +1 -1
  169. package/dist/routes/cdp.d.ts +11 -5
  170. package/dist/routes/cdp.js +91 -63
  171. package/dist/routes/cdp.js.map +1 -1
  172. package/dist/routes/channels.d.ts +0 -1
  173. package/dist/routes/clientActions.d.ts +0 -1
  174. package/dist/routes/components.d.ts +0 -1
  175. package/dist/routes/config/channels/endpoints/browse.d.ts +0 -1
  176. package/dist/routes/config/channels/endpoints/bulk.d.ts +0 -1
  177. package/dist/routes/config/channels/endpoints/bulk.js +3 -3
  178. package/dist/routes/config/channels/endpoints/bulk.js.map +1 -1
  179. package/dist/routes/config/channels/endpoints/crud.d.ts +0 -1
  180. package/dist/routes/config/channels/endpoints/crud.js +4 -3
  181. package/dist/routes/config/channels/endpoints/crud.js.map +1 -1
  182. package/dist/routes/config/channels/endpoints/importExport.d.ts +0 -1
  183. package/dist/routes/config/channels/endpoints/importExport.js +7 -3
  184. package/dist/routes/config/channels/endpoints/importExport.js.map +1 -1
  185. package/dist/routes/config/channels/endpoints/predefined.d.ts +0 -1
  186. package/dist/routes/config/channels/endpoints/prefs.d.ts +0 -1
  187. package/dist/routes/config/channels/endpoints/prefs.js +1 -1
  188. package/dist/routes/config/channels/endpoints/prefs.js.map +1 -1
  189. package/dist/routes/config/channels/endpoints/service.d.ts +0 -1
  190. package/dist/routes/config/channels/endpoints/service.js +8 -5
  191. package/dist/routes/config/channels/endpoints/service.js.map +1 -1
  192. package/dist/routes/config/channels/endpoints/tags.d.ts +0 -1
  193. package/dist/routes/config/channels/endpoints/tags.js +3 -3
  194. package/dist/routes/config/channels/endpoints/tags.js.map +1 -1
  195. package/dist/routes/config/channels/healthBridge.d.ts +4 -1
  196. package/dist/routes/config/channels/healthBridge.js +9 -5
  197. package/dist/routes/config/channels/healthBridge.js.map +1 -1
  198. package/dist/routes/config/channels/http/handler.d.ts +0 -1
  199. package/dist/routes/config/channels/http/playlistHint.d.ts +0 -1
  200. package/dist/routes/config/channels/http/serviceWarning.d.ts +0 -1
  201. package/dist/routes/config/channels/http/serviceWarning.js +1 -1
  202. package/dist/routes/config/channels/http/serviceWarning.js.map +1 -1
  203. package/dist/routes/config/channels/index.d.ts +0 -1
  204. package/dist/routes/config/channels/setup.d.ts +0 -1
  205. package/dist/routes/config/channels/table.d.ts +0 -1
  206. package/dist/routes/config/channels/table.js +66 -134
  207. package/dist/routes/config/channels/table.js.map +1 -1
  208. package/dist/routes/config/http/envelope.d.ts +1 -2
  209. package/dist/routes/config/index.d.ts +5 -5
  210. package/dist/routes/config/index.js +7 -5
  211. package/dist/routes/config/index.js.map +1 -1
  212. package/dist/routes/config/services.d.ts +0 -1
  213. package/dist/routes/config/services.js +17 -19
  214. package/dist/routes/config/services.js.map +1 -1
  215. package/dist/routes/config/settings.d.ts +6 -15
  216. package/dist/routes/config/settings.js +16 -35
  217. package/dist/routes/config/settings.js.map +1 -1
  218. package/dist/routes/debug.d.ts +0 -1
  219. package/dist/routes/debug.js +1 -1
  220. package/dist/routes/debug.js.map +1 -1
  221. package/dist/routes/health.d.ts +16 -8
  222. package/dist/routes/health.js +27 -12
  223. package/dist/routes/health.js.map +1 -1
  224. package/dist/routes/hls.d.ts +0 -1
  225. package/dist/routes/icons.d.ts +0 -1
  226. package/dist/routes/index.d.ts +0 -1
  227. package/dist/routes/logs.d.ts +3 -2
  228. package/dist/routes/logs.js +54 -14
  229. package/dist/routes/logs.js.map +1 -1
  230. package/dist/routes/mpegts.d.ts +0 -1
  231. package/dist/routes/play.d.ts +0 -1
  232. package/dist/routes/playlist.d.ts +0 -1
  233. package/dist/routes/playlist.js +2 -1
  234. package/dist/routes/playlist.js.map +1 -1
  235. package/dist/routes/root/content.d.ts +0 -1
  236. package/dist/routes/root/content.js +32 -11
  237. package/dist/routes/root/content.js.map +1 -1
  238. package/dist/routes/root/index.d.ts +10 -1
  239. package/dist/routes/root/index.js +17 -7
  240. package/dist/routes/root/index.js.map +1 -1
  241. package/dist/routes/root/scripts/channels.d.ts +0 -1
  242. package/dist/routes/root/scripts/channels.js +10 -20
  243. package/dist/routes/root/scripts/channels.js.map +1 -1
  244. package/dist/routes/root/scripts/clientEscape.d.ts +0 -1
  245. package/dist/routes/root/scripts/clientEscape.js +1 -1
  246. package/dist/routes/root/scripts/clientUrl.d.ts +0 -1
  247. package/dist/routes/root/scripts/config.d.ts +0 -1
  248. package/dist/routes/root/scripts/config.js +8 -29
  249. package/dist/routes/root/scripts/config.js.map +1 -1
  250. package/dist/routes/root/scripts/index.d.ts +0 -1
  251. package/dist/routes/root/scripts/shared.d.ts +0 -1
  252. package/dist/routes/root/scripts/shared.js +16 -13
  253. package/dist/routes/root/scripts/shared.js.map +1 -1
  254. package/dist/routes/root/scripts/status.d.ts +0 -1
  255. package/dist/routes/root/scripts/status.handlers.d.ts +3 -1
  256. package/dist/routes/root/scripts/status.handlers.js +52 -26
  257. package/dist/routes/root/scripts/status.handlers.js.map +1 -1
  258. package/dist/routes/root/styles.d.ts +0 -1
  259. package/dist/routes/root/styles.js +10 -18
  260. package/dist/routes/root/styles.js.map +1 -1
  261. package/dist/routes/services.d.ts +0 -1
  262. package/dist/routes/services.js +1 -1
  263. package/dist/routes/services.js.map +1 -1
  264. package/dist/routes/sse.d.ts +3 -2
  265. package/dist/routes/sse.js +7 -3
  266. package/dist/routes/sse.js.map +1 -1
  267. package/dist/routes/streams.d.ts +4 -2
  268. package/dist/routes/streams.js +8 -5
  269. package/dist/routes/streams.js.map +1 -1
  270. package/dist/routes/theme.d.ts +0 -1
  271. package/dist/routes/theme.js +3 -3
  272. package/dist/routes/theme.js.map +1 -1
  273. package/dist/routes/ui.d.ts +0 -1
  274. package/dist/routes/ui.js +5 -5
  275. package/dist/routes/ui.js.map +1 -1
  276. package/dist/routes/upgrade.d.ts +0 -1
  277. package/dist/routes/upgrade.js +2 -1
  278. package/dist/routes/upgrade.js.map +1 -1
  279. package/dist/service/commands.context.d.ts +0 -1
  280. package/dist/service/commands.context.js +7 -1
  281. package/dist/service/commands.context.js.map +1 -1
  282. package/dist/service/commands.d.ts +0 -1
  283. package/dist/service/generators.context.d.ts +0 -1
  284. package/dist/service/generators.d.ts +0 -1
  285. package/dist/service/index.d.ts +0 -1
  286. package/dist/streaming/captureLock.d.ts +1 -2
  287. package/dist/streaming/captureLock.js +8 -7
  288. package/dist/streaming/captureLock.js.map +1 -1
  289. package/dist/streaming/captureSession.d.ts +0 -1
  290. package/dist/streaming/clients.d.ts +4 -3
  291. package/dist/streaming/clients.js +5 -4
  292. package/dist/streaming/clients.js.map +1 -1
  293. package/dist/streaming/codec.d.ts +0 -1
  294. package/dist/streaming/fmp4Segmenter.d.ts +11 -6
  295. package/dist/streaming/fmp4Segmenter.js +39 -17
  296. package/dist/streaming/fmp4Segmenter.js.map +1 -1
  297. package/dist/streaming/hls.d.ts +96 -3
  298. package/dist/streaming/hls.js +282 -171
  299. package/dist/streaming/hls.js.map +1 -1
  300. package/dist/streaming/hlsResume.d.ts +8 -5
  301. package/dist/streaming/hlsResume.js +10 -8
  302. package/dist/streaming/hlsResume.js.map +1 -1
  303. package/dist/streaming/hlsSegments.d.ts +11 -8
  304. package/dist/streaming/hlsSegments.js +38 -18
  305. package/dist/streaming/hlsSegments.js.map +1 -1
  306. package/dist/streaming/lifecycle.d.ts +5 -4
  307. package/dist/streaming/lifecycle.js +43 -13
  308. package/dist/streaming/lifecycle.js.map +1 -1
  309. package/dist/streaming/monitor.d.ts +14 -3
  310. package/dist/streaming/monitor.js +447 -234
  311. package/dist/streaming/monitor.js.map +1 -1
  312. package/dist/streaming/mp4Parser.d.ts +0 -1
  313. package/dist/streaming/mpegts.d.ts +11 -1
  314. package/dist/streaming/mpegts.js +92 -28
  315. package/dist/streaming/mpegts.js.map +1 -1
  316. package/dist/streaming/playlistBuilder.d.ts +0 -1
  317. package/dist/streaming/preroll.d.ts +34 -15
  318. package/dist/streaming/preroll.js +32 -30
  319. package/dist/streaming/preroll.js.map +1 -1
  320. package/dist/streaming/pretune.d.ts +2 -3
  321. package/dist/streaming/pretune.js +45 -45
  322. package/dist/streaming/pretune.js.map +1 -1
  323. package/dist/streaming/pretuneTimers.d.ts +16 -12
  324. package/dist/streaming/pretuneTimers.js +27 -37
  325. package/dist/streaming/pretuneTimers.js.map +1 -1
  326. package/dist/streaming/recovery.d.ts +97 -9
  327. package/dist/streaming/recovery.js +96 -18
  328. package/dist/streaming/recovery.js.map +1 -1
  329. package/dist/streaming/registry.d.ts +102 -15
  330. package/dist/streaming/registry.js +90 -5
  331. package/dist/streaming/registry.js.map +1 -1
  332. package/dist/streaming/setup.d.ts +90 -32
  333. package/dist/streaming/setup.js +379 -248
  334. package/dist/streaming/setup.js.map +1 -1
  335. package/dist/streaming/showInfo.d.ts +8 -4
  336. package/dist/streaming/showInfo.js +54 -45
  337. package/dist/streaming/showInfo.js.map +1 -1
  338. package/dist/streaming/statusEmitter.d.ts +5 -3
  339. package/dist/streaming/statusEmitter.js +20 -8
  340. package/dist/streaming/statusEmitter.js.map +1 -1
  341. package/dist/types/channels.d.ts +0 -1
  342. package/dist/types/channels.js +0 -4
  343. package/dist/types/channels.js.map +1 -1
  344. package/dist/types/config.d.ts +0 -1
  345. package/dist/types/index.d.ts +4 -4
  346. package/dist/types/index.js +2 -1
  347. package/dist/types/index.js.map +1 -1
  348. package/dist/types/profiles.d.ts +51 -9
  349. package/dist/types/profiles.js +35 -1
  350. package/dist/types/profiles.js.map +1 -1
  351. package/dist/types/selection.d.ts +10 -1
  352. package/dist/types/shared.d.ts +0 -1
  353. package/dist/types/streaming.d.ts +8 -1
  354. package/dist/types/streaming.js +7 -0
  355. package/dist/types/streaming.js.map +1 -1
  356. package/dist/upgrade/commands.context.d.ts +0 -1
  357. package/dist/upgrade/commands.d.ts +0 -1
  358. package/dist/upgrade/commands.js +1 -1
  359. package/dist/upgrade/commands.js.map +1 -1
  360. package/dist/upgrade/detection.context.d.ts +0 -1
  361. package/dist/upgrade/detection.d.ts +1 -2
  362. package/dist/upgrade/index.d.ts +0 -1
  363. package/dist/upgrade/lifecycle.context.d.ts +2 -1
  364. package/dist/upgrade/lifecycle.context.js +9 -4
  365. package/dist/upgrade/lifecycle.context.js.map +1 -1
  366. package/dist/upgrade/lifecycle.d.ts +0 -1
  367. package/dist/upgrade/pathHandle.d.ts +0 -1
  368. package/dist/utils/bootSession.context.d.ts +0 -1
  369. package/dist/utils/bootSession.context.js +3 -2
  370. package/dist/utils/bootSession.context.js.map +1 -1
  371. package/dist/utils/bootSession.d.ts +0 -1
  372. package/dist/utils/chromeFetch.d.ts +0 -1
  373. package/dist/utils/cliOutput.d.ts +0 -1
  374. package/dist/utils/debugFilter.d.ts +0 -1
  375. package/dist/utils/debugFilter.js +5 -3
  376. package/dist/utils/debugFilter.js.map +1 -1
  377. package/dist/utils/delay.d.ts +65 -13
  378. package/dist/utils/delay.js +96 -23
  379. package/dist/utils/delay.js.map +1 -1
  380. package/dist/utils/errors.d.ts +0 -11
  381. package/dist/utils/errors.js +3 -14
  382. package/dist/utils/errors.js.map +1 -1
  383. package/dist/utils/evaluate.d.ts +11 -3
  384. package/dist/utils/evaluate.js +4 -3
  385. package/dist/utils/evaluate.js.map +1 -1
  386. package/dist/utils/ffmpeg.context.d.ts +0 -1
  387. package/dist/utils/ffmpeg.d.ts +1 -1
  388. package/dist/utils/ffmpeg.js +2 -1
  389. package/dist/utils/ffmpeg.js.map +1 -1
  390. package/dist/utils/fileLogger.d.ts +26 -7
  391. package/dist/utils/fileLogger.js +241 -102
  392. package/dist/utils/fileLogger.js.map +1 -1
  393. package/dist/utils/format.d.ts +36 -4
  394. package/dist/utils/format.js +66 -12
  395. package/dist/utils/format.js.map +1 -1
  396. package/dist/utils/index.d.ts +1 -2
  397. package/dist/utils/index.js +1 -1
  398. package/dist/utils/index.js.map +1 -1
  399. package/dist/utils/logEmitter.d.ts +0 -1
  400. package/dist/utils/logger.d.ts +0 -1
  401. package/dist/utils/m3u.d.ts +0 -1
  402. package/dist/utils/markup.d.ts +0 -1
  403. package/dist/utils/memo.d.ts +0 -1
  404. package/dist/utils/morganStream.d.ts +2 -3
  405. package/dist/utils/morganStream.js +6 -8
  406. package/dist/utils/morganStream.js.map +1 -1
  407. package/dist/utils/network.d.ts +0 -1
  408. package/dist/utils/never.d.ts +8 -0
  409. package/dist/utils/never.js +20 -0
  410. package/dist/utils/never.js.map +1 -0
  411. package/dist/utils/pid.d.ts +0 -1
  412. package/dist/utils/platform.d.ts +0 -1
  413. package/dist/utils/processInspector.context.d.ts +32 -2
  414. package/dist/utils/processInspector.context.js +117 -1
  415. package/dist/utils/processInspector.context.js.map +1 -1
  416. package/dist/utils/processInspector.d.ts +0 -32
  417. package/dist/utils/processInspector.js +10 -117
  418. package/dist/utils/processInspector.js.map +1 -1
  419. package/dist/utils/retry.d.ts +5 -4
  420. package/dist/utils/retry.js +43 -33
  421. package/dist/utils/retry.js.map +1 -1
  422. package/dist/utils/runtimeIdentity.context.d.ts +0 -1
  423. package/dist/utils/runtimeIdentity.context.js +3 -1
  424. package/dist/utils/runtimeIdentity.context.js.map +1 -1
  425. package/dist/utils/runtimeIdentity.d.ts +1 -1
  426. package/dist/utils/runtimeIdentity.js +1 -1
  427. package/dist/utils/runtimeIdentity.js.map +1 -1
  428. package/dist/utils/sanitize.d.ts +8 -1
  429. package/dist/utils/sanitize.js +19 -0
  430. package/dist/utils/sanitize.js.map +1 -1
  431. package/dist/utils/streamContext.d.ts +0 -1
  432. package/dist/utils/timing.d.ts +3 -4
  433. package/dist/utils/timing.js +4 -4
  434. package/dist/utils/timing.js.map +1 -1
  435. package/dist/utils/version.d.ts +14 -8
  436. package/dist/utils/version.js +35 -24
  437. package/dist/utils/version.js.map +1 -1
  438. package/package.json +7 -7
  439. package/dist/app.d.ts.map +0 -1
  440. package/dist/browser/blockedPage.d.ts.map +0 -1
  441. package/dist/browser/browserSupervisor.d.ts.map +0 -1
  442. package/dist/browser/cdp.d.ts.map +0 -1
  443. package/dist/browser/channelSelection.d.ts.map +0 -1
  444. package/dist/browser/consent.d.ts.map +0 -1
  445. package/dist/browser/display.d.ts.map +0 -1
  446. package/dist/browser/hlsPlaylistObserver.d.ts.map +0 -1
  447. package/dist/browser/index.d.ts.map +0 -1
  448. package/dist/browser/launchGovernor.d.ts.map +0 -1
  449. package/dist/browser/login.d.ts.map +0 -1
  450. package/dist/browser/manifestInterceptor.d.ts.map +0 -1
  451. package/dist/browser/pageStaleness.d.ts.map +0 -1
  452. package/dist/browser/precaching.d.ts.map +0 -1
  453. package/dist/browser/tabNetworkObserver.d.ts.map +0 -1
  454. package/dist/browser/tuning/cache.d.ts.map +0 -1
  455. package/dist/browser/tuning/comcastPolymer.d.ts.map +0 -1
  456. package/dist/browser/tuning/cox.d.ts.map +0 -1
  457. package/dist/browser/tuning/directv.d.ts.map +0 -1
  458. package/dist/browser/tuning/fox.d.ts.map +0 -1
  459. package/dist/browser/tuning/gridSearch.d.ts.map +0 -1
  460. package/dist/browser/tuning/hbo.d.ts.map +0 -1
  461. package/dist/browser/tuning/hulu.d.ts.map +0 -1
  462. package/dist/browser/tuning/shared.d.ts.map +0 -1
  463. package/dist/browser/tuning/sling.d.ts.map +0 -1
  464. package/dist/browser/tuning/spectrum.d.ts.map +0 -1
  465. package/dist/browser/tuning/thumbnailRow.d.ts.map +0 -1
  466. package/dist/browser/tuning/tileClick.d.ts.map +0 -1
  467. package/dist/browser/tuning/xfinity.d.ts.map +0 -1
  468. package/dist/browser/tuning/youtubeTv.d.ts.map +0 -1
  469. package/dist/browser/video.d.ts.map +0 -1
  470. package/dist/channels/index.d.ts.map +0 -1
  471. package/dist/config/channelForm.d.ts.map +0 -1
  472. package/dist/config/consistencyProbe.d.ts.map +0 -1
  473. package/dist/config/health.d.ts.map +0 -1
  474. package/dist/config/index.d.ts.map +0 -1
  475. package/dist/config/paths.d.ts.map +0 -1
  476. package/dist/config/persistence.context.d.ts.map +0 -1
  477. package/dist/config/persistence.d.ts.map +0 -1
  478. package/dist/config/presets.d.ts.map +0 -1
  479. package/dist/config/profiles.d.ts.map +0 -1
  480. package/dist/config/providerLineups.d.ts.map +0 -1
  481. package/dist/config/reactivity.d.ts.map +0 -1
  482. package/dist/config/servicePacks.d.ts.map +0 -1
  483. package/dist/config/services.d.ts.map +0 -1
  484. package/dist/config/sites.d.ts.map +0 -1
  485. package/dist/config/userChannels.d.ts.map +0 -1
  486. package/dist/config/userConfig.d.ts.map +0 -1
  487. package/dist/config/userProfiles.d.ts.map +0 -1
  488. package/dist/hdhr/channelMap.d.ts.map +0 -1
  489. package/dist/hdhr/deviceId.d.ts.map +0 -1
  490. package/dist/hdhr/discover.d.ts.map +0 -1
  491. package/dist/hdhr/getHandlers.d.ts.map +0 -1
  492. package/dist/hdhr/identity.d.ts.map +0 -1
  493. package/dist/hdhr/index.d.ts.map +0 -1
  494. package/dist/hdhr/protocol.d.ts.map +0 -1
  495. package/dist/hdhr/tunerState.d.ts.map +0 -1
  496. package/dist/hdhr/udp.d.ts.map +0 -1
  497. package/dist/identity.d.ts.map +0 -1
  498. package/dist/index.d.ts.map +0 -1
  499. package/dist/native/codecInference.d.ts.map +0 -1
  500. package/dist/native/decrypt.d.ts.map +0 -1
  501. package/dist/native/index.d.ts.map +0 -1
  502. package/dist/native/probe.d.ts.map +0 -1
  503. package/dist/native/proxy.d.ts.map +0 -1
  504. package/dist/native/tokenExpiry.d.ts.map +0 -1
  505. package/dist/routes/assets.d.ts.map +0 -1
  506. package/dist/routes/auth.d.ts.map +0 -1
  507. package/dist/routes/cdp.d.ts.map +0 -1
  508. package/dist/routes/channels.d.ts.map +0 -1
  509. package/dist/routes/clientActions.d.ts.map +0 -1
  510. package/dist/routes/components.d.ts.map +0 -1
  511. package/dist/routes/config/channels/endpoints/browse.d.ts.map +0 -1
  512. package/dist/routes/config/channels/endpoints/bulk.d.ts.map +0 -1
  513. package/dist/routes/config/channels/endpoints/crud.d.ts.map +0 -1
  514. package/dist/routes/config/channels/endpoints/importExport.d.ts.map +0 -1
  515. package/dist/routes/config/channels/endpoints/predefined.d.ts.map +0 -1
  516. package/dist/routes/config/channels/endpoints/prefs.d.ts.map +0 -1
  517. package/dist/routes/config/channels/endpoints/service.d.ts.map +0 -1
  518. package/dist/routes/config/channels/endpoints/tags.d.ts.map +0 -1
  519. package/dist/routes/config/channels/healthBridge.d.ts.map +0 -1
  520. package/dist/routes/config/channels/http/handler.d.ts.map +0 -1
  521. package/dist/routes/config/channels/http/playlistHint.d.ts.map +0 -1
  522. package/dist/routes/config/channels/http/serviceWarning.d.ts.map +0 -1
  523. package/dist/routes/config/channels/index.d.ts.map +0 -1
  524. package/dist/routes/config/channels/setup.d.ts.map +0 -1
  525. package/dist/routes/config/channels/table.d.ts.map +0 -1
  526. package/dist/routes/config/http/envelope.d.ts.map +0 -1
  527. package/dist/routes/config/index.d.ts.map +0 -1
  528. package/dist/routes/config/services.d.ts.map +0 -1
  529. package/dist/routes/config/settings.d.ts.map +0 -1
  530. package/dist/routes/debug.d.ts.map +0 -1
  531. package/dist/routes/health.d.ts.map +0 -1
  532. package/dist/routes/hls.d.ts.map +0 -1
  533. package/dist/routes/icons.d.ts.map +0 -1
  534. package/dist/routes/index.d.ts.map +0 -1
  535. package/dist/routes/logs.d.ts.map +0 -1
  536. package/dist/routes/mpegts.d.ts.map +0 -1
  537. package/dist/routes/play.d.ts.map +0 -1
  538. package/dist/routes/playlist.d.ts.map +0 -1
  539. package/dist/routes/root/content.d.ts.map +0 -1
  540. package/dist/routes/root/index.d.ts.map +0 -1
  541. package/dist/routes/root/scripts/channels.d.ts.map +0 -1
  542. package/dist/routes/root/scripts/clientEscape.d.ts.map +0 -1
  543. package/dist/routes/root/scripts/clientUrl.d.ts.map +0 -1
  544. package/dist/routes/root/scripts/config.d.ts.map +0 -1
  545. package/dist/routes/root/scripts/index.d.ts.map +0 -1
  546. package/dist/routes/root/scripts/shared.d.ts.map +0 -1
  547. package/dist/routes/root/scripts/status.d.ts.map +0 -1
  548. package/dist/routes/root/scripts/status.handlers.d.ts.map +0 -1
  549. package/dist/routes/root/styles.d.ts.map +0 -1
  550. package/dist/routes/services.d.ts.map +0 -1
  551. package/dist/routes/sse.d.ts.map +0 -1
  552. package/dist/routes/streams.d.ts.map +0 -1
  553. package/dist/routes/theme.d.ts.map +0 -1
  554. package/dist/routes/ui.d.ts.map +0 -1
  555. package/dist/routes/upgrade.d.ts.map +0 -1
  556. package/dist/service/commands.context.d.ts.map +0 -1
  557. package/dist/service/commands.d.ts.map +0 -1
  558. package/dist/service/generators.context.d.ts.map +0 -1
  559. package/dist/service/generators.d.ts.map +0 -1
  560. package/dist/service/index.d.ts.map +0 -1
  561. package/dist/streaming/captureLock.d.ts.map +0 -1
  562. package/dist/streaming/captureSession.d.ts.map +0 -1
  563. package/dist/streaming/clients.d.ts.map +0 -1
  564. package/dist/streaming/codec.d.ts.map +0 -1
  565. package/dist/streaming/fmp4Segmenter.d.ts.map +0 -1
  566. package/dist/streaming/hls.d.ts.map +0 -1
  567. package/dist/streaming/hlsResume.d.ts.map +0 -1
  568. package/dist/streaming/hlsSegments.d.ts.map +0 -1
  569. package/dist/streaming/lifecycle.d.ts.map +0 -1
  570. package/dist/streaming/monitor.d.ts.map +0 -1
  571. package/dist/streaming/mp4Parser.d.ts.map +0 -1
  572. package/dist/streaming/mpegts.d.ts.map +0 -1
  573. package/dist/streaming/playlistBuilder.d.ts.map +0 -1
  574. package/dist/streaming/preroll.d.ts.map +0 -1
  575. package/dist/streaming/pretune.d.ts.map +0 -1
  576. package/dist/streaming/pretuneTimers.d.ts.map +0 -1
  577. package/dist/streaming/recovery.d.ts.map +0 -1
  578. package/dist/streaming/registry.d.ts.map +0 -1
  579. package/dist/streaming/setup.d.ts.map +0 -1
  580. package/dist/streaming/showInfo.d.ts.map +0 -1
  581. package/dist/streaming/statusEmitter.d.ts.map +0 -1
  582. package/dist/types/channels.d.ts.map +0 -1
  583. package/dist/types/config.d.ts.map +0 -1
  584. package/dist/types/index.d.ts.map +0 -1
  585. package/dist/types/profiles.d.ts.map +0 -1
  586. package/dist/types/selection.d.ts.map +0 -1
  587. package/dist/types/shared.d.ts.map +0 -1
  588. package/dist/types/streaming.d.ts.map +0 -1
  589. package/dist/upgrade/commands.context.d.ts.map +0 -1
  590. package/dist/upgrade/commands.d.ts.map +0 -1
  591. package/dist/upgrade/detection.context.d.ts.map +0 -1
  592. package/dist/upgrade/detection.d.ts.map +0 -1
  593. package/dist/upgrade/index.d.ts.map +0 -1
  594. package/dist/upgrade/lifecycle.context.d.ts.map +0 -1
  595. package/dist/upgrade/lifecycle.d.ts.map +0 -1
  596. package/dist/upgrade/pathHandle.d.ts.map +0 -1
  597. package/dist/utils/bootSession.context.d.ts.map +0 -1
  598. package/dist/utils/bootSession.d.ts.map +0 -1
  599. package/dist/utils/chromeFetch.d.ts.map +0 -1
  600. package/dist/utils/cliOutput.d.ts.map +0 -1
  601. package/dist/utils/clock.d.ts +0 -15
  602. package/dist/utils/clock.d.ts.map +0 -1
  603. package/dist/utils/clock.js +0 -31
  604. package/dist/utils/clock.js.map +0 -1
  605. package/dist/utils/debugFilter.d.ts.map +0 -1
  606. package/dist/utils/delay.d.ts.map +0 -1
  607. package/dist/utils/errors.d.ts.map +0 -1
  608. package/dist/utils/evaluate.d.ts.map +0 -1
  609. package/dist/utils/ffmpeg.context.d.ts.map +0 -1
  610. package/dist/utils/ffmpeg.d.ts.map +0 -1
  611. package/dist/utils/fileLogger.d.ts.map +0 -1
  612. package/dist/utils/format.d.ts.map +0 -1
  613. package/dist/utils/index.d.ts.map +0 -1
  614. package/dist/utils/logEmitter.d.ts.map +0 -1
  615. package/dist/utils/logger.d.ts.map +0 -1
  616. package/dist/utils/m3u.d.ts.map +0 -1
  617. package/dist/utils/markup.d.ts.map +0 -1
  618. package/dist/utils/memo.d.ts.map +0 -1
  619. package/dist/utils/morganStream.d.ts.map +0 -1
  620. package/dist/utils/network.d.ts.map +0 -1
  621. package/dist/utils/pid.d.ts.map +0 -1
  622. package/dist/utils/platform.d.ts.map +0 -1
  623. package/dist/utils/processInspector.context.d.ts.map +0 -1
  624. package/dist/utils/processInspector.d.ts.map +0 -1
  625. package/dist/utils/retry.d.ts.map +0 -1
  626. package/dist/utils/runtimeIdentity.context.d.ts.map +0 -1
  627. package/dist/utils/runtimeIdentity.d.ts.map +0 -1
  628. package/dist/utils/sanitize.d.ts.map +0 -1
  629. package/dist/utils/streamContext.d.ts.map +0 -1
  630. package/dist/utils/timing.d.ts.map +0 -1
  631. package/dist/utils/version.d.ts.map +0 -1
@@ -0,0 +1,547 @@
1
+ import { LOG, evaluateWithAbort, formatError, timeoutSignal, waitWithTimeout } from "../utils/index.js";
2
+ import { CONFIG } from "../config/index.js";
3
+ import { TargetType } from "puppeteer-core";
4
+ import { getExtensionPage } from "puppeteer-stream";
5
+ import { systemClock } from "homebridge-plugin-utils";
6
+ // Constants.
7
+ // The failure when the extension cannot name the tab a page is showing in. Both messages carry the phrase "capture extension" on purpose: streaming/recovery.ts
8
+ // classifies a capture-start failure as capture infrastructure by substring, which is what earns a 503 back-off and a re-verification of the browser rather than a
9
+ // 500 the client would not retry.
10
+ export const TAB_NOT_FOUND_MESSAGE = "The capture extension could not find the page's tab.";
11
+ // The failure when Chrome did not honor the selection. Neither a capture start nor a fullscreen request can proceed against a tab that is not the selected one.
12
+ export const TAB_NOT_SELECTED_MESSAGE = "The capture extension did not select the page's tab.";
13
+ // How long an open waits for the tab it asked for to show up as a target. Chrome has already been told to open it, so this bounds an event arriving rather than
14
+ // any work: an open with no target by now is one that produced none.
15
+ const OPEN_TARGET_WAIT_MS = 3000;
16
+ // The ceiling on a whole open turn, its one retry included. It sits under the deadline a capture start already runs under, so a turn that lapses still leaves the
17
+ // caller that is waiting on it time to get a page the plain way.
18
+ const OPEN_TURN_CEILING_MS = 8000;
19
+ // How many times a turn resolves a carrier and opens against it. The second pass is the retry a wrong-window tab and a carrier that closed under the evaluate
20
+ // both earn: each is evidence about the carrier rather than about the open, so resolving again is the only thing worth doing differently.
21
+ const OPEN_ATTEMPTS = 2;
22
+ // The marker every opened tab wears ahead of its pass's own serial. It is written once here because everything that reasons about a marked tab has to agree on
23
+ // it: the open that asks Chrome for the URL, the scan that looks the tab up among the browser's pages, and the reaper that judges a target by its URL alone.
24
+ const OPEN_NONCE_PREFIX = "prismcast-open-";
25
+ // The whole of the URL prefix a marked tab carries. The reaper tests a target's URL against it and reads the pass's nonce out of what follows.
26
+ const OPEN_NONCE_URL_PREFIX = "about:blank#" + OPEN_NONCE_PREFIX;
27
+ // The production collaborators.
28
+ export const defaultTabSelectionDeps = { getExtensionPage };
29
+ /* The tab id each page was identified as, cached for the page's life. A tab id survives navigation, so one identification per page is enough - while the window
30
+ * that tab sits in can change under us at any time (a user can drag a tab into another window), which is why the window is read fresh at every hold and never
31
+ * cached beside the id.
32
+ */
33
+ const tabIds = new WeakMap();
34
+ // The counter behind each identification's title token. It only moves forward, so no two identifications in this process can match one another's marker.
35
+ let nextTitleToken = 0;
36
+ // The counter behind each open's nonce. It only moves forward for the same reason the title token's does: two opens must never be able to wait for one another's
37
+ // tab, and the nonce is the whole of what tells them apart.
38
+ let nextOpenNonce = 0;
39
+ /* The nonces of the passes still waiting for the tab they asked for. A pass enters its own just before it asks Chrome to open and leaves the moment it claims
40
+ * a target or gives the pass up, so a marked tab whose nonce is in here is somebody's and one whose nonce is not belongs to nobody - which is the whole of the
41
+ * test the reaper applies.
42
+ */
43
+ const waitingOpens = new Set();
44
+ /* The pages passes have claimed. A claimed page keeps its marked URL until its caller navigates it, so the URL alone would read as residue for as long as it
45
+ * sits there, which is why the reaper consults this before it closes anything. A tab that landed in the wrong window is claimed too and closed by the turn
46
+ * itself, so nothing here ever needs taking out again.
47
+ */
48
+ const claimedOpens = new WeakSet();
49
+ // The tail of the selection chain. Each hold is queued onto it and replaces it with its own release signal, so the next hold begins when the selection was handed
50
+ // back rather than when the caller before it finished reading its result.
51
+ let selectionQueue = Promise.resolve();
52
+ // The subscribers the activation report walks. Module-level rather than per-hold, because the fact reported is about the browser's tabs rather than about any one
53
+ // hold, and the capture layer subscribes once for the life of the process.
54
+ const activationListeners = new Set();
55
+ // Activation reporting.
56
+ /**
57
+ * Subscribes to the activation report: every tab this module activates through the extension, announced by id as soon as the update resolves.
58
+ *
59
+ * A captured page cannot hear its own activation, so the module performing the activation is the one place the fact exists to be announced at all. The report
60
+ * carries the id and stops there, which is what keeps this module's vocabulary to tabs and windows no matter what a subscriber goes on to do with one.
61
+ * @param listener - Called with the id of each tab this module activates.
62
+ * @returns The closure that ends the subscription. A subscriber that has gone away without calling it stays in the set for the life of the process.
63
+ */
64
+ export function onTabActivation(listener) {
65
+ activationListeners.add(listener);
66
+ return () => {
67
+ activationListeners.delete(listener);
68
+ };
69
+ }
70
+ /**
71
+ * Announces an activation to every subscriber.
72
+ *
73
+ * Each listener is called inside a swallow of its own, because a subscriber is somebody else's code and a hold's correctness cannot rest on it: a throw would
74
+ * otherwise fail the selection step a capture start is waiting on, or replace the give-back's own reading of what went wrong with a subscriber's.
75
+ * @param tabId - The tab that was activated.
76
+ */
77
+ function reportActivation(tabId) {
78
+ for (const listener of activationListeners) {
79
+ try {
80
+ listener(tabId);
81
+ }
82
+ catch (error) {
83
+ LOG.debug("browser:lifecycle", "A tab-activation subscriber failed to handle the report: %s.", formatError(error));
84
+ }
85
+ }
86
+ }
87
+ /**
88
+ * The tab id a page was identified as, when it has one.
89
+ *
90
+ * The report names a tab and a subscriber holds pages, so this is the bridge between them. The answer is only ever an id a completed identification cached, which
91
+ * means a page this module has never selected reads undefined - the right answer for it, because no activation of ours can have named it.
92
+ * @param page - The page to look up.
93
+ * @returns The cached tab id, or undefined when this page has not been identified.
94
+ */
95
+ export function getCachedTabId(page) {
96
+ return tabIds.get(page);
97
+ }
98
+ // Selection.
99
+ /**
100
+ * Reads a tab's current state from the extension.
101
+ * @param extension - The extension's options page.
102
+ * @param tabId - The tab to read.
103
+ * @returns The tab as the extension reports it.
104
+ */
105
+ async function readTab(extension, tabId) {
106
+ return extension.evaluate((id) => chrome.tabs.get(id), tabId);
107
+ }
108
+ /**
109
+ * Names the tab a page is showing in, caching the answer for the page's life.
110
+ *
111
+ * The extension cannot see CDP target ids, and a capture page is a fresh about:blank when it is first selected - its capture start precedes its navigation - so
112
+ * there is nothing on the page to match against. A unique token written into the page's own title is something both sides can see: the page sets it, the extension
113
+ * finds the tab wearing it, and the title it replaced goes back in a finally so a navigated page is never left carrying the marker.
114
+ * @param page - The page to identify.
115
+ * @param extension - The extension's options page.
116
+ * @returns The page's tab id.
117
+ * @throws When no tab wears the token, or the tab that does carries no id.
118
+ */
119
+ async function identifyTab(page, extension) {
120
+ const cached = tabIds.get(page);
121
+ if (cached !== undefined) {
122
+ return cached;
123
+ }
124
+ const token = "prismcast-tab-" + String(++nextTitleToken);
125
+ const replaced = await page.evaluate((marker) => {
126
+ const previousTitle = document.title;
127
+ document.title = marker;
128
+ return previousTitle;
129
+ }, token);
130
+ try {
131
+ const tabs = await extension.evaluate(() => chrome.tabs.query({}));
132
+ const match = tabs.find((tab) => tab.title === token);
133
+ if (match?.id === undefined) {
134
+ throw new Error(TAB_NOT_FOUND_MESSAGE);
135
+ }
136
+ tabIds.set(page, match.id);
137
+ return match.id;
138
+ }
139
+ finally {
140
+ try {
141
+ await page.evaluate((title) => { document.title = title; }, replaced);
142
+ }
143
+ catch (error) {
144
+ // Restoring the title is housekeeping, and a page that has gone away mid-identification has taken its title with it. Letting this reach the caller would
145
+ // replace the identification's own verdict with a note about the cleanup.
146
+ LOG.debug("browser:lifecycle", "The page's title could not be restored after identifying its tab: %s.", formatError(error));
147
+ }
148
+ }
149
+ }
150
+ /**
151
+ * Hands the selection back to the tab that had it before this module took it.
152
+ *
153
+ * Three readings, three answers: the tab this module selected is still the selected one, so the tab that was selected before gets it back; something else is
154
+ * selected, so whoever moved it since - a user clicking a tab, login mode opening its page - chose more recently and their choice stands; or the tab cannot be
155
+ * read at all, which means it has gone and nothing of ours is holding the selection either way. Every path a selection is taken on comes back through here, so
156
+ * the hold and the open give the tab back on identical terms.
157
+ * @param extension - The extension's options page.
158
+ * @param selectedId - The tab this module selected.
159
+ * @param previousId - The tab that was selected before, when the window had one.
160
+ */
161
+ async function returnSelection(extension, selectedId, previousId) {
162
+ if ((previousId === undefined) || (previousId === selectedId)) {
163
+ return;
164
+ }
165
+ let stillSelected = true;
166
+ try {
167
+ stillSelected = (await readTab(extension, selectedId)).active === true;
168
+ }
169
+ catch (error) {
170
+ LOG.debug("browser:lifecycle", "The capture extension could not re-read the tab before returning the selection: %s.", formatError(error));
171
+ }
172
+ if (!stillSelected) {
173
+ return;
174
+ }
175
+ try {
176
+ await extension.evaluate((target) => chrome.tabs.update(target, { active: true }), previousId);
177
+ // The tab handed the selection back can be another stream's capture tab, which is the activation the report matters most for. It sits inside the try so an
178
+ // update that never happened is never announced.
179
+ reportActivation(previousId);
180
+ }
181
+ catch (error) {
182
+ // The tab that was selected before may have closed while the selection was held, and there is nothing else to return the selection to.
183
+ LOG.debug("browser:lifecycle", "The capture extension could not return the selection to the tab that had it: %s.", formatError(error));
184
+ }
185
+ }
186
+ /**
187
+ * Runs a body with a page's tab selected in its window, and hands back the tab that was selected before it afterwards.
188
+ *
189
+ * Holds are serialized: this queues onto the chain, and the hold that follows begins when this one has given the selection back - not when this caller has
190
+ * finished reading its result, which is what lets a body that outlives its ceiling keep running without holding the selection or the queue.
191
+ * @param page - The page whose tab the body needs selected.
192
+ * @param body - The work to run while the tab is selected. It receives the selected tab.
193
+ * @param context - The ceiling, clock, and collaborators. Defaults to the capture start's own deadline on the system clock with the production collaborators.
194
+ * @returns Whatever the body resolves with, even when the hold's ceiling lapsed first.
195
+ * @throws The body's own rejection, or a selection failure of this module's own.
196
+ */
197
+ export async function withTabSelected(page, body, context = {}) {
198
+ // eslint-disable-next-line @typescript-eslint/no-invalid-void-type -- Standard pattern for signal promises.
199
+ const released = Promise.withResolvers();
200
+ /* The chain advances on the release signal rather than on this call's own promise. Those are different moments whenever a body outlives the ceiling: chaining
201
+ * the queue on the caller's promise would either hold the selection until the body finally settled, or hand the caller a result the body never produced.
202
+ * hold() settles the release in a finally on every path, including the paths where the selection was never taken, so the chain cannot wedge on a failure.
203
+ */
204
+ const run = selectionQueue.then(async () => hold(page, body, context, released));
205
+ selectionQueue = released.promise;
206
+ return run;
207
+ }
208
+ /**
209
+ * Takes the selection, runs the body under it, and gives the previous tab back.
210
+ * @param page - The page whose tab is selected.
211
+ * @param body - The work to run while it is selected.
212
+ * @param context - The ceiling, clock, and collaborators.
213
+ * @param released - The signal the executor chains the next hold on, settled as soon as the selection has been handed back.
214
+ * @returns Whatever the body resolves with.
215
+ */
216
+ async function hold(page, body, context, released) {
217
+ const { ceilingMs = CONFIG.streaming.navigationTimeout, clock = systemClock, deps = defaultTabSelectionDeps } = context;
218
+ try {
219
+ const extension = await deps.getExtensionPage(page.browser());
220
+ const id = await identifyTab(page, extension);
221
+ const tab = await readTab(extension, id);
222
+ // The window is read fresh on every hold, and the fields the selection depends on are narrowed here rather than asserted downstream, so SelectedTab's
223
+ // required fields are earned by a read that actually carried them.
224
+ if ((tab.id === undefined) || (tab.windowId === undefined)) {
225
+ throw new Error(TAB_NOT_FOUND_MESSAGE);
226
+ }
227
+ const windowId = tab.windowId;
228
+ const [previous] = await extension.evaluate((target) => chrome.tabs.query({ active: true, windowId: target }), windowId);
229
+ const previousId = previous?.id;
230
+ // Whether this hold has already reported another window holding the focus. The correction itself runs as often as it is needed - the selection step and every
231
+ // re-assert perform it - while one report is what an operator needs to see per hold.
232
+ let focusReported = false;
233
+ /* Makes this page's window the one Chrome treats as current, and only then. chrome.tabCapture.capture records the active tab of the LAST-FOCUSED window, so a
234
+ * tab that is merely active in a window Chrome does not consider current is not selected in the sense either caller needs - a site popup holding the focus
235
+ * would have its own tab recorded instead. This is the one deliberate raise in the module, taken only when the read names a tab in another window.
236
+ */
237
+ const focusWindow = async () => {
238
+ const [focused] = await extension.evaluate(() => chrome.tabs.query({ active: true, lastFocusedWindow: true }));
239
+ if ((focused?.id === undefined) || (focused.windowId === undefined) || (focused.windowId === windowId)) {
240
+ return;
241
+ }
242
+ if (!focusReported) {
243
+ focusReported = true;
244
+ LOG.warn("Another browser window held the focus while a tab was selected for capture, so PrismCast brought its own window forward.", { focusedTab: focused.url ?? null });
245
+ }
246
+ await extension.evaluate((target) => chrome.windows.update(target, { focused: true }), windowId);
247
+ };
248
+ // Selects this page's tab and confirms Chrome honored it. A selection Chrome did not take is a failure to report rather than one to run a capture start or a
249
+ // fullscreen request against.
250
+ const selectTab = async () => {
251
+ await extension.evaluate((target) => chrome.tabs.update(target, { active: true }), id);
252
+ // Reported ahead of the confirmation rather than behind it, because the update is what Chrome acted on: a selection that then fails its confirmation was
253
+ // still an activation, and a heal fired for it is a re-issue against a surface that already carries the right values.
254
+ reportActivation(id);
255
+ const confirmed = await readTab(extension, id);
256
+ if (confirmed.active !== true) {
257
+ throw new Error(TAB_NOT_SELECTED_MESSAGE);
258
+ }
259
+ };
260
+ try {
261
+ await selectTab();
262
+ await focusWindow();
263
+ const selected = {
264
+ id,
265
+ reassert: async () => {
266
+ if ((await readTab(extension, id)).active !== true) {
267
+ await selectTab();
268
+ }
269
+ await focusWindow();
270
+ },
271
+ url: tab.url ?? null,
272
+ windowId
273
+ };
274
+ /* The ceiling is raced against the body rather than enforced by cancelling it, because the body belongs to the caller and this module has no way to stop it.
275
+ * The lapse error is this hold's own object, so a lapse is told from the body's own rejection by identity rather than by message.
276
+ */
277
+ const lapse = new Error("The tab selection was held longer than " + String(ceilingMs) + " ms.");
278
+ const running = body(selected);
279
+ try {
280
+ return await waitWithTimeout(running, ceilingMs, { clock, reason: lapse });
281
+ }
282
+ catch (error) {
283
+ if (error !== lapse) {
284
+ throw error;
285
+ }
286
+ LOG.warn("A tab selection was held past its ceiling, so the selection was returned while the operation that took it continues.", { ceilingMs });
287
+ /* The body keeps running detached and its result still reaches the caller...what ends here is the hold, so the next capture start or fullscreen request
288
+ * is not queued behind work this module cannot bound. The promise is returned unawaited on purpose: awaiting it here would put the wait INSIDE the try,
289
+ * so the give-back in the finally would sit behind the very body the ceiling just gave up on, and the selection would be held for exactly as long as if
290
+ * there were no ceiling at all.
291
+ */
292
+ // eslint-disable-next-line @typescript-eslint/return-await -- Awaiting here would defer the give-back until the body settles, defeating the ceiling.
293
+ return running;
294
+ }
295
+ }
296
+ finally {
297
+ await returnSelection(extension, id, previousId);
298
+ }
299
+ }
300
+ finally {
301
+ released.resolve();
302
+ }
303
+ }
304
+ // Opening.
305
+ /**
306
+ * Opens a page as a tab of the shared browser window, and hands the selection straight back to the tab that had it.
307
+ *
308
+ * The open belongs here because the open IS a selection change. Chrome picks the window for a plain background page and skips a minimized one, so a capture tab
309
+ * created while the shared window rests minimized beside a discovery window takes root in the discovery window instead and keeps that window alive long past the
310
+ * walk it was opened for. The one anchor Chrome honors in every window state is the opener relationship: a window.open evaluated on a page of the shared window
311
+ * opens its tab in that window, minimized or not, and restores the window on the way in (measured 2026-08-31, both window states).
312
+ *
313
+ * Running it as a turn on this module's executor closes two races rather than one. chrome.tabCapture records whichever tab is selected and page creation runs
314
+ * outside the capture lock, so a bare open could land between a concurrent stream's re-assert and its recording start and put a blank tab on that stream's
315
+ * recording; and two overlapping opens on one page silently lose all but the first, because a page carries a single transient activation. Serialized turns make
316
+ * both unrepresentable rather than unlikely.
317
+ *
318
+ * Two id spaces meet at this call and are never compared. The window identity a placement is confirmed against belongs to CDP's table, and this module never sees
319
+ * it - it arrives as an injected answer of true or false. Every id this module reads or writes itself, the tab that was selected and the tab that gets it back,
320
+ * is the capture extension's.
321
+ *
322
+ * Three side effects belong to somebody else. The tab arrives selected, which is why the selection goes back inside this same turn. The open restores a minimized
323
+ * window, which the window-visibility policy settles afterwards. And the give-back's activation report re-affirms whichever tab regains the selection, so when
324
+ * that is another stream's capture page its composition wobbles for about a second until the re-affirm ladder lands - the same self-healing wobble a capture
325
+ * start already causes once, now possible a second time at page creation.
326
+ * @param browser - The browser to open the tab in.
327
+ * @param context - The turn's ceiling, the clock it runs on, and the collaborators it runs through.
328
+ * @returns The opened page, or a page created the plain way when the anchor could not be had.
329
+ */
330
+ export async function openSharedWindowTab(browser, context) {
331
+ // eslint-disable-next-line @typescript-eslint/no-invalid-void-type -- Standard pattern for signal promises.
332
+ const released = Promise.withResolvers();
333
+ // The open queues onto the same chain a hold does, and the chain advances on the release signal for the same reason: the next holder begins when this turn has
334
+ // genuinely finished with the selection.
335
+ const run = selectionQueue.then(async () => openTurn(browser, context, released));
336
+ selectionQueue = released.promise;
337
+ return run;
338
+ }
339
+ /**
340
+ * Opens the tab under the selection, gives the selection back, and settles - degrading to a plain background page whenever the anchor cannot be had.
341
+ * @param browser - The browser to open the tab in.
342
+ * @param context - The turn's ceiling, clock, and collaborators.
343
+ * @param released - The signal the executor chains the next turn on, settled once this turn has genuinely finished.
344
+ * @returns The page, opened as a tab of the shared window or created plainly.
345
+ */
346
+ async function openTurn(browser, context, released) {
347
+ const { ceilingMs = OPEN_TURN_CEILING_MS, clock = systemClock, deps } = context;
348
+ const { confirmPlacement, getExtensionPage: lookup = getExtensionPage, resolveCarrier } = deps;
349
+ /* The fragment the opened tab wears, and the whole of what tells it from any other tab. Chrome reports a fragment on the target verbatim, so the target that
350
+ * turns up wearing this one is this pass's and nobody else's. Each pass takes a fresh pair, which is what stops a later pass from claiming the tab an earlier
351
+ * one gave up on, and the scan and the abandon that follow always read whichever pass was the last to run.
352
+ */
353
+ let nonce = "";
354
+ let nonceUrl = "";
355
+ /* The turn's one ceiling. It is expressed as a signal because that is the form the target wait takes, and it reaches every other await through the bound below.
356
+ * It CANCELS rather than detaching, which is the opposite of what a hold's ceiling does and deliberately so: a hold's body belongs to its caller and is left to
357
+ * finish, while a detached open could still land its tab, give the selection back, or close a tab after the queue had already moved on to the next holder -
358
+ * the alternating-holders race this executor exists to make unrepresentable.
359
+ */
360
+ const lapse = new Error("The capture extension's window did not take a new tab within " + String(ceilingMs) + " ms.");
361
+ const deadline = clock.now() + ceilingMs;
362
+ const ceiling = timeoutSignal(ceilingMs, { clock, reason: lapse });
363
+ const bounded = async (work) => waitWithTimeout(work, Math.max(1, deadline - clock.now()), { clock, reason: lapse });
364
+ // The tab this turn opened, for as long as there is one that might still need closing.
365
+ let opened = null;
366
+ /* Closes the tab an abandoned open produced. The target-timeout path holds no page at all, so the tab is looked up among the browser's pages by the marked
367
+ * URL it still carries: a tab left behind here is one nothing registered, which means the staleness sweep never judges it and it would sit in the window for
368
+ * the life of the browser.
369
+ */
370
+ const closeOpenedTab = async () => {
371
+ // A turn that failed before its first pass took a marker has nothing to look for, and a page that has yet to navigate reports an empty URL of its own.
372
+ if (!opened && (nonceUrl === "")) {
373
+ return;
374
+ }
375
+ const tab = opened ?? (await browser.pages()).find((page) => page.url() === nonceUrl) ?? null;
376
+ opened = null;
377
+ if (!tab || tab.isClosed()) {
378
+ return;
379
+ }
380
+ try {
381
+ await tab.close();
382
+ }
383
+ catch (error) {
384
+ LOG.debug("browser:lifecycle", "The tab an abandoned open produced could not be closed: %s.", formatError(error));
385
+ }
386
+ };
387
+ /* Gives the current pass's nonce up and then looks for the tab it opened. The order is what covers the gap between the two: a tab already in the window is what
388
+ * the scan finds, and one that lands after the scan has looked carries a nonce nobody is waiting for, which is exactly what the reaper closes.
389
+ */
390
+ const abandonOpen = async () => {
391
+ waitingOpens.delete(nonce);
392
+ await closeOpenedTab();
393
+ };
394
+ /* Creates the page the plain way, which is where every degradation ends: no carrier, an open Chrome refused, a spent retry, a lapsed turn, or an extension this
395
+ * module could not reach at all. That last one is why the fallback exists rather than a throw - extension trouble must not become a new way for an
396
+ * establishment to fail, because the page still has to exist either way. Giving the guarantee up after the retry was spent is the one case an operator wants to
397
+ * see, so it is the one case reported above debug.
398
+ */
399
+ const fallback = async (reason, retriesSpent) => {
400
+ if (retriesSpent) {
401
+ LOG.warn("A capture tab could not be opened in PrismCast's own browser window, so Chrome chose the window for it.", { reason });
402
+ }
403
+ else {
404
+ LOG.debug("browser:lifecycle", "A capture tab was created without the shared window's opener anchor: %s.", reason);
405
+ }
406
+ return browser.newPage({ background: true });
407
+ };
408
+ try {
409
+ const extension = await bounded(lookup(browser));
410
+ /* Why the anchor was given up, when it was given up before both passes were spent. A reason set inside the loop is a degradation with nothing left to try, so
411
+ * it reports at debug; falling out of the loop with none set means the carrier was resolved twice and the tab still did not land in the shared window, which
412
+ * is the one abandonment an operator wants to see.
413
+ */
414
+ let declined = null;
415
+ for (let attempt = 1; attempt <= OPEN_ATTEMPTS; attempt++) {
416
+ // One counter read per pass, spent on both halves of the pair, so the URL Chrome is asked for and the nonce this module reasons in can never disagree.
417
+ const serial = String(++nextOpenNonce);
418
+ nonce = OPEN_NONCE_PREFIX + serial;
419
+ nonceUrl = OPEN_NONCE_URL_PREFIX + serial;
420
+ // eslint-disable-next-line no-await-in-loop -- Each pass is a fresh resolve and open, and the second only runs because the first told us the carrier was wrong.
421
+ const carrier = await bounded(resolveCarrier(browser));
422
+ if (!carrier) {
423
+ declined = "no page of the shared window was available to open from";
424
+ break;
425
+ }
426
+ let previousId;
427
+ try {
428
+ /* The window's own selected tab, read exactly the way a hold reads it: the carrier names its tab, the tab names its window, and the window names the tab
429
+ * that will want the selection back. Every id in this block is the capture extension's, which is the only table this module is ever allowed to reason in.
430
+ */
431
+ // eslint-disable-next-line no-await-in-loop -- The carrier read belongs to the pass that resolved it.
432
+ const carrierTab = await bounded(readTab(extension, await bounded(identifyTab(carrier, extension))));
433
+ if (carrierTab.windowId === undefined) {
434
+ throw new Error(TAB_NOT_FOUND_MESSAGE);
435
+ }
436
+ // eslint-disable-next-line no-await-in-loop -- The previous selection has to be read before this pass's open, not before the loop.
437
+ const [previous] = await bounded(extension.evaluate((target) => chrome.tabs.query({ active: true, windowId: target }), carrierTab.windowId));
438
+ previousId = previous?.id;
439
+ // The pass is waiting from the moment Chrome is asked until it has a tab of its own, and a tab somebody is waiting for is one the reaper leaves alone.
440
+ waitingOpens.add(nonce);
441
+ // A blocked open answers with a null window rather than throwing, so the return value is read rather than assumed. Chrome runs with popup blocking off,
442
+ // which leaves a null answer as evidence about the carrier's own state.
443
+ // eslint-disable-next-line no-await-in-loop -- The open is the pass.
444
+ if (!(await bounded(evaluateWithAbort(carrier, (target) => window.open(target, "_blank") !== null, [nonceUrl])))) {
445
+ declined = "the page the open was evaluated on refused it";
446
+ break;
447
+ }
448
+ }
449
+ catch (error) {
450
+ if (error === lapse) {
451
+ throw error;
452
+ }
453
+ // A carrier can close between the moment it was resolved and the moment the open is evaluated on it, which is the one failure another resolve can answer.
454
+ LOG.debug("browser:lifecycle", "The page an open was to be evaluated on could not carry it: %s.", formatError(error));
455
+ /* Chrome can have run the open before the failure reached us, so this pass gives its own marker up and looks for a tab before the next pass opens under
456
+ * a new one. A tab already in the window is closed here, and one still on its way is the reaper's.
457
+ */
458
+ // eslint-disable-next-line no-await-in-loop -- The pass that failed clears up before the pass that follows opens.
459
+ await abandonOpen();
460
+ continue;
461
+ }
462
+ // eslint-disable-next-line no-await-in-loop -- The tab this pass opened is what this pass then confirms.
463
+ const target = await browser.waitForTarget((candidate) => candidate.url() === nonceUrl, { signal: ceiling.signal, timeout: OPEN_TARGET_WAIT_MS });
464
+ // eslint-disable-next-line no-await-in-loop -- Same pass, same tab.
465
+ const page = await bounded(target.page());
466
+ if (!page) {
467
+ throw new Error("The capture extension's window produced a tab with no page behind it.");
468
+ }
469
+ opened = page;
470
+ // The pass has its tab: the wait is over, and the page itself is exempt from the reaper for as long as it lives, whatever its URL goes on to say.
471
+ waitingOpens.delete(nonce);
472
+ claimedOpens.add(page);
473
+ // eslint-disable-next-line no-await-in-loop -- The confirmation is what decides whether this pass was the last one.
474
+ if (!(await bounded(confirmPlacement(page)))) {
475
+ // eslint-disable-next-line no-await-in-loop -- A tab in the wrong window is closed before the next pass opens another.
476
+ await closeOpenedTab();
477
+ continue;
478
+ }
479
+ /* The tab arrived selected, so the selection goes back inside this same turn rather than being left for the capture start that follows. Identifying the tab
480
+ * first is what makes the give-back's three readings exact, and it is work the capture start would otherwise do moments later against this same page.
481
+ */
482
+ // eslint-disable-next-line no-await-in-loop -- The give-back closes the pass that took the selection.
483
+ await bounded(returnSelection(extension, await bounded(identifyTab(page, extension)), previousId));
484
+ opened = null;
485
+ return page;
486
+ }
487
+ await abandonOpen();
488
+ return await fallback(declined ?? "the tab did not open in PrismCast's own browser window", declined === null);
489
+ }
490
+ catch (error) {
491
+ await abandonOpen();
492
+ return await fallback((error === lapse) ? lapse.message : formatError(error), false);
493
+ }
494
+ finally {
495
+ ceiling.cancel();
496
+ released.resolve();
497
+ }
498
+ }
499
+ /**
500
+ * Installs the listener that closes the tabs abandoned opens leave behind, for the life of the browser it is given.
501
+ *
502
+ * A turn's evaluate keeps running inside Chrome after the turn's own wait has ended, so a carrier that was merely slow can land its tab long after the turn
503
+ * scanned for one and created its page the plain way. Nothing registered that tab, so nothing judges it and nothing closes it. The browser's own target events
504
+ * are what make it findable: a page target whose URL carries the open marker, and whose nonce no pass is waiting for, is one nobody asked for. Both target
505
+ * events are read because a window.open target is created at about:blank and takes its URL on the change that follows, which leaves the judgment a function of
506
+ * the target's URL and this module's own state and nothing else.
507
+ * @param browser - The browser whose targets to watch.
508
+ */
509
+ export function installStrayOpenTabReaper(browser) {
510
+ /* The closing itself, entered only for a target the judgment below has already accepted. It resolves the target's page rather than being handed one, because
511
+ * a target event carries no page and the page behind a target that has just been created may not exist yet.
512
+ */
513
+ const reapTab = async (target, nonce) => {
514
+ try {
515
+ const page = await target.page();
516
+ // A page the browser has already dropped, or one a pass claimed and handed to its caller, is not this listener's to close.
517
+ if (!page || page.isClosed() || claimedOpens.has(page)) {
518
+ return;
519
+ }
520
+ await page.close();
521
+ LOG.debug("browser:lifecycle", "Closed a stray tab from an abandoned open: %s.", nonce);
522
+ }
523
+ catch (error) {
524
+ // A stray tab the browser has already dropped is not an error - there is nothing left to close and nothing anyone would do about it - so the whole chain
525
+ // ends here at debug.
526
+ LOG.debug("browser:lifecycle", "A stray tab from an abandoned open could not be closed: %s.", formatError(error));
527
+ }
528
+ };
529
+ /* The judgment every target event in the browser passes through. It is a synchronous read of the target's own type and URL against this module's state, so
530
+ * the events that have nothing to do with an open - which is nearly all of them - cost a type check and a prefix test and nothing more.
531
+ */
532
+ const onTarget = (target) => {
533
+ const url = target.url();
534
+ if ((target.type() !== TargetType.PAGE) || !url.startsWith(OPEN_NONCE_URL_PREFIX)) {
535
+ return;
536
+ }
537
+ const nonce = OPEN_NONCE_PREFIX + url.slice(OPEN_NONCE_URL_PREFIX.length);
538
+ // A pass is still waiting for this tab, so it is that pass's to claim rather than this listener's to close.
539
+ if (waitingOpens.has(nonce)) {
540
+ return;
541
+ }
542
+ void reapTab(target, nonce);
543
+ };
544
+ browser.on("targetcreated", onTarget);
545
+ browser.on("targetchanged", onTarget);
546
+ }
547
+ //# sourceMappingURL=tabSelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabSelection.js","sourceRoot":"","sources":["../../src/browser/tabSelection.ts"],"names":[],"mappings":"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"}
@@ -58,4 +58,3 @@ export interface ProviderChannelCache<Entry> {
58
58
  * @returns A cache instance holding this provider's entries.
59
59
  */
60
60
  export declare function createProviderChannelCache<Entry>(toDiscovered: (entry: Entry) => DiscoveredChannel): ProviderChannelCache<Entry>;
61
- //# sourceMappingURL=cache.d.ts.map
@@ -21,4 +21,3 @@ export interface ComcastPolymerProviderConfig {
21
21
  * @returns A fully configured ProviderModule ready for registration in the coordinator.
22
22
  */
23
23
  export declare function createComcastPolymerProvider(config: ComcastPolymerProviderConfig): ProviderModule;
24
- //# sourceMappingURL=comcastPolymer.d.ts.map