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.
- package/dist/app.d.ts +41 -1
- package/dist/app.js +164 -76
- package/dist/app.js.map +1 -1
- package/dist/browser/blockedPage.d.ts +0 -1
- package/dist/browser/browserSupervisor.d.ts +34 -5
- package/dist/browser/browserSupervisor.js +39 -12
- package/dist/browser/browserSupervisor.js.map +1 -1
- package/dist/browser/cdp.d.ts +58 -6
- package/dist/browser/cdp.js +147 -9
- package/dist/browser/cdp.js.map +1 -1
- package/dist/browser/channelSelection.d.ts +18 -6
- package/dist/browser/channelSelection.js +47 -36
- package/dist/browser/channelSelection.js.map +1 -1
- package/dist/browser/consent.d.ts +33 -4
- package/dist/browser/consent.js +87 -50
- package/dist/browser/consent.js.map +1 -1
- package/dist/browser/display.d.ts +0 -1
- package/dist/browser/hlsPlaylistObserver.d.ts +3 -2
- package/dist/browser/hlsPlaylistObserver.js +11 -6
- package/dist/browser/hlsPlaylistObserver.js.map +1 -1
- package/dist/browser/index.d.ts +273 -59
- package/dist/browser/index.js +768 -255
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/launchGovernor.d.ts +0 -1
- package/dist/browser/login.d.ts +11 -10
- package/dist/browser/login.js +42 -33
- package/dist/browser/login.js.map +1 -1
- package/dist/browser/manifestInterceptor.d.ts +14 -5
- package/dist/browser/manifestInterceptor.js +26 -13
- package/dist/browser/manifestInterceptor.js.map +1 -1
- package/dist/browser/navigation.d.ts +28 -0
- package/dist/browser/navigation.js +57 -0
- package/dist/browser/navigation.js.map +1 -0
- package/dist/browser/pageStaleness.d.ts +1 -2
- package/dist/browser/pageStaleness.js +9 -9
- package/dist/browser/pageStaleness.js.map +1 -1
- package/dist/browser/precaching.d.ts +27 -13
- package/dist/browser/precaching.js +219 -73
- package/dist/browser/precaching.js.map +1 -1
- package/dist/browser/tabCapture.d.ts +97 -0
- package/dist/browser/tabCapture.js +314 -0
- package/dist/browser/tabCapture.js.map +1 -0
- package/dist/browser/tabNetworkObserver.d.ts +0 -1
- package/dist/browser/tabSelection.d.ts +117 -0
- package/dist/browser/tabSelection.js +547 -0
- package/dist/browser/tabSelection.js.map +1 -0
- package/dist/browser/tuning/cache.d.ts +0 -1
- package/dist/browser/tuning/comcastPolymer.d.ts +0 -1
- package/dist/browser/tuning/comcastPolymer.js +18 -19
- package/dist/browser/tuning/comcastPolymer.js.map +1 -1
- package/dist/browser/tuning/cox.d.ts +0 -1
- package/dist/browser/tuning/directv.d.ts +0 -1
- package/dist/browser/tuning/directv.js +12 -13
- package/dist/browser/tuning/directv.js.map +1 -1
- package/dist/browser/tuning/fox.d.ts +0 -1
- package/dist/browser/tuning/fox.js +2 -2
- package/dist/browser/tuning/fox.js.map +1 -1
- package/dist/browser/tuning/gridSearch.d.ts +0 -1
- package/dist/browser/tuning/hbo.d.ts +0 -1
- package/dist/browser/tuning/hbo.js +2 -2
- package/dist/browser/tuning/hbo.js.map +1 -1
- package/dist/browser/tuning/hulu.d.ts +14 -2
- package/dist/browser/tuning/hulu.js +150 -24
- package/dist/browser/tuning/hulu.js.map +1 -1
- package/dist/browser/tuning/shared.d.ts +1 -2
- package/dist/browser/tuning/shared.js +1 -1
- package/dist/browser/tuning/sling.d.ts +0 -1
- package/dist/browser/tuning/sling.js +17 -22
- package/dist/browser/tuning/sling.js.map +1 -1
- package/dist/browser/tuning/spectrum.d.ts +0 -1
- package/dist/browser/tuning/thumbnailRow.d.ts +0 -1
- package/dist/browser/tuning/tileClick.d.ts +0 -1
- package/dist/browser/tuning/xfinity.d.ts +0 -1
- package/dist/browser/tuning/youtubeTv.d.ts +0 -1
- package/dist/browser/tuning/youtubeTv.js +1 -2
- package/dist/browser/tuning/youtubeTv.js.map +1 -1
- package/dist/browser/video.d.ts +55 -33
- package/dist/browser/video.js +213 -169
- package/dist/browser/video.js.map +1 -1
- package/dist/browser/windowSync.d.ts +45 -0
- package/dist/browser/windowSync.js +153 -0
- package/dist/browser/windowSync.js.map +1 -0
- package/dist/channels/index.d.ts +7 -1
- package/dist/channels/index.js +24 -8
- package/dist/channels/index.js.map +1 -1
- package/dist/config/channelForm.d.ts +0 -1
- package/dist/config/channelIdentity.d.ts +27 -0
- package/dist/config/channelIdentity.js +72 -0
- package/dist/config/channelIdentity.js.map +1 -0
- package/dist/config/channelSort.d.ts +25 -0
- package/dist/config/channelSort.js +101 -0
- package/dist/config/channelSort.js.map +1 -0
- package/dist/config/consistencyProbe.d.ts +0 -1
- package/dist/config/consistencyProbe.js +1 -1
- package/dist/config/consistencyProbe.js.map +1 -1
- package/dist/config/health.d.ts +3 -2
- package/dist/config/health.js +41 -31
- package/dist/config/health.js.map +1 -1
- package/dist/config/index.d.ts +12 -1
- package/dist/config/index.js +77 -31
- package/dist/config/index.js.map +1 -1
- package/dist/config/paths.d.ts +17 -2
- package/dist/config/paths.js +21 -1
- package/dist/config/paths.js.map +1 -1
- package/dist/config/persistence.context.d.ts +0 -1
- package/dist/config/persistence.d.ts +8 -4
- package/dist/config/persistence.js +143 -82
- package/dist/config/persistence.js.map +1 -1
- package/dist/config/presets.d.ts +0 -1
- package/dist/config/profiles.d.ts +9 -4
- package/dist/config/profiles.js +39 -6
- package/dist/config/profiles.js.map +1 -1
- package/dist/config/providerLineups.d.ts +0 -1
- package/dist/config/providerLineups.js +0 -3
- package/dist/config/providerLineups.js.map +1 -1
- package/dist/config/reactivity.d.ts +0 -1
- package/dist/config/servicePacks.d.ts +0 -1
- package/dist/config/services.d.ts +1 -47
- package/dist/config/services.js +4 -135
- package/dist/config/services.js.map +1 -1
- package/dist/config/sites.d.ts +0 -9
- package/dist/config/sites.js +82 -98
- package/dist/config/sites.js.map +1 -1
- package/dist/config/userChannels.d.ts +22 -29
- package/dist/config/userChannels.js +47 -65
- package/dist/config/userChannels.js.map +1 -1
- package/dist/config/userConfig.d.ts +19 -4
- package/dist/config/userConfig.js +123 -25
- package/dist/config/userConfig.js.map +1 -1
- package/dist/config/userProfiles.d.ts +2 -3
- package/dist/config/userProfiles.js +16 -13
- package/dist/config/userProfiles.js.map +1 -1
- package/dist/hdhr/channelMap.d.ts +0 -1
- package/dist/hdhr/deviceId.d.ts +0 -1
- package/dist/hdhr/discover.d.ts +0 -1
- package/dist/hdhr/getHandlers.d.ts +0 -1
- package/dist/hdhr/identity.d.ts +0 -1
- package/dist/hdhr/index.d.ts +0 -1
- package/dist/hdhr/protocol.d.ts +1 -2
- package/dist/hdhr/protocol.js +1 -1
- package/dist/hdhr/tunerState.d.ts +0 -1
- package/dist/hdhr/udp.d.ts +0 -1
- package/dist/hdhr/udp.js +16 -4
- package/dist/hdhr/udp.js.map +1 -1
- package/dist/identity.d.ts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/native/codecInference.d.ts +5 -4
- package/dist/native/codecInference.js +12 -7
- package/dist/native/codecInference.js.map +1 -1
- package/dist/native/decrypt.d.ts +10 -3
- package/dist/native/decrypt.js +9 -5
- package/dist/native/decrypt.js.map +1 -1
- package/dist/native/index.d.ts +26 -24
- package/dist/native/index.js +26 -20
- package/dist/native/index.js.map +1 -1
- package/dist/native/probe.d.ts +7 -10
- package/dist/native/probe.js +41 -37
- package/dist/native/probe.js.map +1 -1
- package/dist/native/proxy.d.ts +3 -4
- package/dist/native/proxy.js +91 -69
- package/dist/native/proxy.js.map +1 -1
- package/dist/native/tokenExpiry.d.ts +0 -1
- package/dist/routes/assets.d.ts +0 -1
- package/dist/routes/auth.d.ts +0 -1
- package/dist/routes/auth.js +1 -1
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/cdp.d.ts +11 -5
- package/dist/routes/cdp.js +91 -63
- package/dist/routes/cdp.js.map +1 -1
- package/dist/routes/channels.d.ts +0 -1
- package/dist/routes/clientActions.d.ts +0 -1
- package/dist/routes/components.d.ts +0 -1
- package/dist/routes/config/channels/endpoints/browse.d.ts +0 -1
- package/dist/routes/config/channels/endpoints/bulk.d.ts +0 -1
- package/dist/routes/config/channels/endpoints/bulk.js +3 -3
- package/dist/routes/config/channels/endpoints/bulk.js.map +1 -1
- package/dist/routes/config/channels/endpoints/crud.d.ts +0 -1
- package/dist/routes/config/channels/endpoints/crud.js +4 -3
- package/dist/routes/config/channels/endpoints/crud.js.map +1 -1
- package/dist/routes/config/channels/endpoints/importExport.d.ts +0 -1
- package/dist/routes/config/channels/endpoints/importExport.js +7 -3
- package/dist/routes/config/channels/endpoints/importExport.js.map +1 -1
- package/dist/routes/config/channels/endpoints/predefined.d.ts +0 -1
- package/dist/routes/config/channels/endpoints/prefs.d.ts +0 -1
- package/dist/routes/config/channels/endpoints/prefs.js +1 -1
- package/dist/routes/config/channels/endpoints/prefs.js.map +1 -1
- package/dist/routes/config/channels/endpoints/service.d.ts +0 -1
- package/dist/routes/config/channels/endpoints/service.js +8 -5
- package/dist/routes/config/channels/endpoints/service.js.map +1 -1
- package/dist/routes/config/channels/endpoints/tags.d.ts +0 -1
- package/dist/routes/config/channels/endpoints/tags.js +3 -3
- package/dist/routes/config/channels/endpoints/tags.js.map +1 -1
- package/dist/routes/config/channels/healthBridge.d.ts +4 -1
- package/dist/routes/config/channels/healthBridge.js +9 -5
- package/dist/routes/config/channels/healthBridge.js.map +1 -1
- package/dist/routes/config/channels/http/handler.d.ts +0 -1
- package/dist/routes/config/channels/http/playlistHint.d.ts +0 -1
- package/dist/routes/config/channels/http/serviceWarning.d.ts +0 -1
- package/dist/routes/config/channels/http/serviceWarning.js +1 -1
- package/dist/routes/config/channels/http/serviceWarning.js.map +1 -1
- package/dist/routes/config/channels/index.d.ts +0 -1
- package/dist/routes/config/channels/setup.d.ts +0 -1
- package/dist/routes/config/channels/table.d.ts +0 -1
- package/dist/routes/config/channels/table.js +66 -134
- package/dist/routes/config/channels/table.js.map +1 -1
- package/dist/routes/config/http/envelope.d.ts +1 -2
- package/dist/routes/config/index.d.ts +5 -5
- package/dist/routes/config/index.js +7 -5
- package/dist/routes/config/index.js.map +1 -1
- package/dist/routes/config/services.d.ts +0 -1
- package/dist/routes/config/services.js +17 -19
- package/dist/routes/config/services.js.map +1 -1
- package/dist/routes/config/settings.d.ts +6 -15
- package/dist/routes/config/settings.js +16 -35
- package/dist/routes/config/settings.js.map +1 -1
- package/dist/routes/debug.d.ts +0 -1
- package/dist/routes/debug.js +1 -1
- package/dist/routes/debug.js.map +1 -1
- package/dist/routes/health.d.ts +16 -8
- package/dist/routes/health.js +27 -12
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/hls.d.ts +0 -1
- package/dist/routes/icons.d.ts +0 -1
- package/dist/routes/index.d.ts +0 -1
- package/dist/routes/logs.d.ts +3 -2
- package/dist/routes/logs.js +54 -14
- package/dist/routes/logs.js.map +1 -1
- package/dist/routes/mpegts.d.ts +0 -1
- package/dist/routes/play.d.ts +0 -1
- package/dist/routes/playlist.d.ts +0 -1
- package/dist/routes/playlist.js +2 -1
- package/dist/routes/playlist.js.map +1 -1
- package/dist/routes/root/content.d.ts +0 -1
- package/dist/routes/root/content.js +32 -11
- package/dist/routes/root/content.js.map +1 -1
- package/dist/routes/root/index.d.ts +10 -1
- package/dist/routes/root/index.js +17 -7
- package/dist/routes/root/index.js.map +1 -1
- package/dist/routes/root/scripts/channels.d.ts +0 -1
- package/dist/routes/root/scripts/channels.js +10 -20
- package/dist/routes/root/scripts/channels.js.map +1 -1
- package/dist/routes/root/scripts/clientEscape.d.ts +0 -1
- package/dist/routes/root/scripts/clientEscape.js +1 -1
- package/dist/routes/root/scripts/clientUrl.d.ts +0 -1
- package/dist/routes/root/scripts/config.d.ts +0 -1
- package/dist/routes/root/scripts/config.js +8 -29
- package/dist/routes/root/scripts/config.js.map +1 -1
- package/dist/routes/root/scripts/index.d.ts +0 -1
- package/dist/routes/root/scripts/shared.d.ts +0 -1
- package/dist/routes/root/scripts/shared.js +16 -13
- package/dist/routes/root/scripts/shared.js.map +1 -1
- package/dist/routes/root/scripts/status.d.ts +0 -1
- package/dist/routes/root/scripts/status.handlers.d.ts +3 -1
- package/dist/routes/root/scripts/status.handlers.js +52 -26
- package/dist/routes/root/scripts/status.handlers.js.map +1 -1
- package/dist/routes/root/styles.d.ts +0 -1
- package/dist/routes/root/styles.js +10 -18
- package/dist/routes/root/styles.js.map +1 -1
- package/dist/routes/services.d.ts +0 -1
- package/dist/routes/services.js +1 -1
- package/dist/routes/services.js.map +1 -1
- package/dist/routes/sse.d.ts +3 -2
- package/dist/routes/sse.js +7 -3
- package/dist/routes/sse.js.map +1 -1
- package/dist/routes/streams.d.ts +4 -2
- package/dist/routes/streams.js +8 -5
- package/dist/routes/streams.js.map +1 -1
- package/dist/routes/theme.d.ts +0 -1
- package/dist/routes/theme.js +3 -3
- package/dist/routes/theme.js.map +1 -1
- package/dist/routes/ui.d.ts +0 -1
- package/dist/routes/ui.js +5 -5
- package/dist/routes/ui.js.map +1 -1
- package/dist/routes/upgrade.d.ts +0 -1
- package/dist/routes/upgrade.js +2 -1
- package/dist/routes/upgrade.js.map +1 -1
- package/dist/service/commands.context.d.ts +0 -1
- package/dist/service/commands.context.js +7 -1
- package/dist/service/commands.context.js.map +1 -1
- package/dist/service/commands.d.ts +0 -1
- package/dist/service/generators.context.d.ts +0 -1
- package/dist/service/generators.d.ts +0 -1
- package/dist/service/index.d.ts +0 -1
- package/dist/streaming/captureLock.d.ts +1 -2
- package/dist/streaming/captureLock.js +8 -7
- package/dist/streaming/captureLock.js.map +1 -1
- package/dist/streaming/captureSession.d.ts +0 -1
- package/dist/streaming/clients.d.ts +4 -3
- package/dist/streaming/clients.js +5 -4
- package/dist/streaming/clients.js.map +1 -1
- package/dist/streaming/codec.d.ts +0 -1
- package/dist/streaming/fmp4Segmenter.d.ts +11 -6
- package/dist/streaming/fmp4Segmenter.js +39 -17
- package/dist/streaming/fmp4Segmenter.js.map +1 -1
- package/dist/streaming/hls.d.ts +96 -3
- package/dist/streaming/hls.js +282 -171
- package/dist/streaming/hls.js.map +1 -1
- package/dist/streaming/hlsResume.d.ts +8 -5
- package/dist/streaming/hlsResume.js +10 -8
- package/dist/streaming/hlsResume.js.map +1 -1
- package/dist/streaming/hlsSegments.d.ts +11 -8
- package/dist/streaming/hlsSegments.js +38 -18
- package/dist/streaming/hlsSegments.js.map +1 -1
- package/dist/streaming/lifecycle.d.ts +5 -4
- package/dist/streaming/lifecycle.js +43 -13
- package/dist/streaming/lifecycle.js.map +1 -1
- package/dist/streaming/monitor.d.ts +14 -3
- package/dist/streaming/monitor.js +447 -234
- package/dist/streaming/monitor.js.map +1 -1
- package/dist/streaming/mp4Parser.d.ts +0 -1
- package/dist/streaming/mpegts.d.ts +11 -1
- package/dist/streaming/mpegts.js +92 -28
- package/dist/streaming/mpegts.js.map +1 -1
- package/dist/streaming/playlistBuilder.d.ts +0 -1
- package/dist/streaming/preroll.d.ts +34 -15
- package/dist/streaming/preroll.js +32 -30
- package/dist/streaming/preroll.js.map +1 -1
- package/dist/streaming/pretune.d.ts +2 -3
- package/dist/streaming/pretune.js +45 -45
- package/dist/streaming/pretune.js.map +1 -1
- package/dist/streaming/pretuneTimers.d.ts +16 -12
- package/dist/streaming/pretuneTimers.js +27 -37
- package/dist/streaming/pretuneTimers.js.map +1 -1
- package/dist/streaming/recovery.d.ts +97 -9
- package/dist/streaming/recovery.js +96 -18
- package/dist/streaming/recovery.js.map +1 -1
- package/dist/streaming/registry.d.ts +102 -15
- package/dist/streaming/registry.js +90 -5
- package/dist/streaming/registry.js.map +1 -1
- package/dist/streaming/setup.d.ts +90 -32
- package/dist/streaming/setup.js +379 -248
- package/dist/streaming/setup.js.map +1 -1
- package/dist/streaming/showInfo.d.ts +8 -4
- package/dist/streaming/showInfo.js +54 -45
- package/dist/streaming/showInfo.js.map +1 -1
- package/dist/streaming/statusEmitter.d.ts +5 -3
- package/dist/streaming/statusEmitter.js +20 -8
- package/dist/streaming/statusEmitter.js.map +1 -1
- package/dist/types/channels.d.ts +0 -1
- package/dist/types/channels.js +0 -4
- package/dist/types/channels.js.map +1 -1
- package/dist/types/config.d.ts +0 -1
- package/dist/types/index.d.ts +4 -4
- package/dist/types/index.js +2 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/profiles.d.ts +51 -9
- package/dist/types/profiles.js +35 -1
- package/dist/types/profiles.js.map +1 -1
- package/dist/types/selection.d.ts +10 -1
- package/dist/types/shared.d.ts +0 -1
- package/dist/types/streaming.d.ts +8 -1
- package/dist/types/streaming.js +7 -0
- package/dist/types/streaming.js.map +1 -1
- package/dist/upgrade/commands.context.d.ts +0 -1
- package/dist/upgrade/commands.d.ts +0 -1
- package/dist/upgrade/commands.js +1 -1
- package/dist/upgrade/commands.js.map +1 -1
- package/dist/upgrade/detection.context.d.ts +0 -1
- package/dist/upgrade/detection.d.ts +1 -2
- package/dist/upgrade/index.d.ts +0 -1
- package/dist/upgrade/lifecycle.context.d.ts +2 -1
- package/dist/upgrade/lifecycle.context.js +9 -4
- package/dist/upgrade/lifecycle.context.js.map +1 -1
- package/dist/upgrade/lifecycle.d.ts +0 -1
- package/dist/upgrade/pathHandle.d.ts +0 -1
- package/dist/utils/bootSession.context.d.ts +0 -1
- package/dist/utils/bootSession.context.js +3 -2
- package/dist/utils/bootSession.context.js.map +1 -1
- package/dist/utils/bootSession.d.ts +0 -1
- package/dist/utils/chromeFetch.d.ts +0 -1
- package/dist/utils/cliOutput.d.ts +0 -1
- package/dist/utils/debugFilter.d.ts +0 -1
- package/dist/utils/debugFilter.js +5 -3
- package/dist/utils/debugFilter.js.map +1 -1
- package/dist/utils/delay.d.ts +65 -13
- package/dist/utils/delay.js +96 -23
- package/dist/utils/delay.js.map +1 -1
- package/dist/utils/errors.d.ts +0 -11
- package/dist/utils/errors.js +3 -14
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/evaluate.d.ts +11 -3
- package/dist/utils/evaluate.js +4 -3
- package/dist/utils/evaluate.js.map +1 -1
- package/dist/utils/ffmpeg.context.d.ts +0 -1
- package/dist/utils/ffmpeg.d.ts +1 -1
- package/dist/utils/ffmpeg.js +2 -1
- package/dist/utils/ffmpeg.js.map +1 -1
- package/dist/utils/fileLogger.d.ts +26 -7
- package/dist/utils/fileLogger.js +241 -102
- package/dist/utils/fileLogger.js.map +1 -1
- package/dist/utils/format.d.ts +36 -4
- package/dist/utils/format.js +66 -12
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/index.d.ts +1 -2
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logEmitter.d.ts +0 -1
- package/dist/utils/logger.d.ts +0 -1
- package/dist/utils/m3u.d.ts +0 -1
- package/dist/utils/markup.d.ts +0 -1
- package/dist/utils/memo.d.ts +0 -1
- package/dist/utils/morganStream.d.ts +2 -3
- package/dist/utils/morganStream.js +6 -8
- package/dist/utils/morganStream.js.map +1 -1
- package/dist/utils/network.d.ts +0 -1
- package/dist/utils/never.d.ts +8 -0
- package/dist/utils/never.js +20 -0
- package/dist/utils/never.js.map +1 -0
- package/dist/utils/pid.d.ts +0 -1
- package/dist/utils/platform.d.ts +0 -1
- package/dist/utils/processInspector.context.d.ts +32 -2
- package/dist/utils/processInspector.context.js +117 -1
- package/dist/utils/processInspector.context.js.map +1 -1
- package/dist/utils/processInspector.d.ts +0 -32
- package/dist/utils/processInspector.js +10 -117
- package/dist/utils/processInspector.js.map +1 -1
- package/dist/utils/retry.d.ts +5 -4
- package/dist/utils/retry.js +43 -33
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/runtimeIdentity.context.d.ts +0 -1
- package/dist/utils/runtimeIdentity.context.js +3 -1
- package/dist/utils/runtimeIdentity.context.js.map +1 -1
- package/dist/utils/runtimeIdentity.d.ts +1 -1
- package/dist/utils/runtimeIdentity.js +1 -1
- package/dist/utils/runtimeIdentity.js.map +1 -1
- package/dist/utils/sanitize.d.ts +8 -1
- package/dist/utils/sanitize.js +19 -0
- package/dist/utils/sanitize.js.map +1 -1
- package/dist/utils/streamContext.d.ts +0 -1
- package/dist/utils/timing.d.ts +3 -4
- package/dist/utils/timing.js +4 -4
- package/dist/utils/timing.js.map +1 -1
- package/dist/utils/version.d.ts +14 -8
- package/dist/utils/version.js +35 -24
- package/dist/utils/version.js.map +1 -1
- package/package.json +7 -7
- package/dist/app.d.ts.map +0 -1
- package/dist/browser/blockedPage.d.ts.map +0 -1
- package/dist/browser/browserSupervisor.d.ts.map +0 -1
- package/dist/browser/cdp.d.ts.map +0 -1
- package/dist/browser/channelSelection.d.ts.map +0 -1
- package/dist/browser/consent.d.ts.map +0 -1
- package/dist/browser/display.d.ts.map +0 -1
- package/dist/browser/hlsPlaylistObserver.d.ts.map +0 -1
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/launchGovernor.d.ts.map +0 -1
- package/dist/browser/login.d.ts.map +0 -1
- package/dist/browser/manifestInterceptor.d.ts.map +0 -1
- package/dist/browser/pageStaleness.d.ts.map +0 -1
- package/dist/browser/precaching.d.ts.map +0 -1
- package/dist/browser/tabNetworkObserver.d.ts.map +0 -1
- package/dist/browser/tuning/cache.d.ts.map +0 -1
- package/dist/browser/tuning/comcastPolymer.d.ts.map +0 -1
- package/dist/browser/tuning/cox.d.ts.map +0 -1
- package/dist/browser/tuning/directv.d.ts.map +0 -1
- package/dist/browser/tuning/fox.d.ts.map +0 -1
- package/dist/browser/tuning/gridSearch.d.ts.map +0 -1
- package/dist/browser/tuning/hbo.d.ts.map +0 -1
- package/dist/browser/tuning/hulu.d.ts.map +0 -1
- package/dist/browser/tuning/shared.d.ts.map +0 -1
- package/dist/browser/tuning/sling.d.ts.map +0 -1
- package/dist/browser/tuning/spectrum.d.ts.map +0 -1
- package/dist/browser/tuning/thumbnailRow.d.ts.map +0 -1
- package/dist/browser/tuning/tileClick.d.ts.map +0 -1
- package/dist/browser/tuning/xfinity.d.ts.map +0 -1
- package/dist/browser/tuning/youtubeTv.d.ts.map +0 -1
- package/dist/browser/video.d.ts.map +0 -1
- package/dist/channels/index.d.ts.map +0 -1
- package/dist/config/channelForm.d.ts.map +0 -1
- package/dist/config/consistencyProbe.d.ts.map +0 -1
- package/dist/config/health.d.ts.map +0 -1
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/paths.d.ts.map +0 -1
- package/dist/config/persistence.context.d.ts.map +0 -1
- package/dist/config/persistence.d.ts.map +0 -1
- package/dist/config/presets.d.ts.map +0 -1
- package/dist/config/profiles.d.ts.map +0 -1
- package/dist/config/providerLineups.d.ts.map +0 -1
- package/dist/config/reactivity.d.ts.map +0 -1
- package/dist/config/servicePacks.d.ts.map +0 -1
- package/dist/config/services.d.ts.map +0 -1
- package/dist/config/sites.d.ts.map +0 -1
- package/dist/config/userChannels.d.ts.map +0 -1
- package/dist/config/userConfig.d.ts.map +0 -1
- package/dist/config/userProfiles.d.ts.map +0 -1
- package/dist/hdhr/channelMap.d.ts.map +0 -1
- package/dist/hdhr/deviceId.d.ts.map +0 -1
- package/dist/hdhr/discover.d.ts.map +0 -1
- package/dist/hdhr/getHandlers.d.ts.map +0 -1
- package/dist/hdhr/identity.d.ts.map +0 -1
- package/dist/hdhr/index.d.ts.map +0 -1
- package/dist/hdhr/protocol.d.ts.map +0 -1
- package/dist/hdhr/tunerState.d.ts.map +0 -1
- package/dist/hdhr/udp.d.ts.map +0 -1
- package/dist/identity.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/native/codecInference.d.ts.map +0 -1
- package/dist/native/decrypt.d.ts.map +0 -1
- package/dist/native/index.d.ts.map +0 -1
- package/dist/native/probe.d.ts.map +0 -1
- package/dist/native/proxy.d.ts.map +0 -1
- package/dist/native/tokenExpiry.d.ts.map +0 -1
- package/dist/routes/assets.d.ts.map +0 -1
- package/dist/routes/auth.d.ts.map +0 -1
- package/dist/routes/cdp.d.ts.map +0 -1
- package/dist/routes/channels.d.ts.map +0 -1
- package/dist/routes/clientActions.d.ts.map +0 -1
- package/dist/routes/components.d.ts.map +0 -1
- package/dist/routes/config/channels/endpoints/browse.d.ts.map +0 -1
- package/dist/routes/config/channels/endpoints/bulk.d.ts.map +0 -1
- package/dist/routes/config/channels/endpoints/crud.d.ts.map +0 -1
- package/dist/routes/config/channels/endpoints/importExport.d.ts.map +0 -1
- package/dist/routes/config/channels/endpoints/predefined.d.ts.map +0 -1
- package/dist/routes/config/channels/endpoints/prefs.d.ts.map +0 -1
- package/dist/routes/config/channels/endpoints/service.d.ts.map +0 -1
- package/dist/routes/config/channels/endpoints/tags.d.ts.map +0 -1
- package/dist/routes/config/channels/healthBridge.d.ts.map +0 -1
- package/dist/routes/config/channels/http/handler.d.ts.map +0 -1
- package/dist/routes/config/channels/http/playlistHint.d.ts.map +0 -1
- package/dist/routes/config/channels/http/serviceWarning.d.ts.map +0 -1
- package/dist/routes/config/channels/index.d.ts.map +0 -1
- package/dist/routes/config/channels/setup.d.ts.map +0 -1
- package/dist/routes/config/channels/table.d.ts.map +0 -1
- package/dist/routes/config/http/envelope.d.ts.map +0 -1
- package/dist/routes/config/index.d.ts.map +0 -1
- package/dist/routes/config/services.d.ts.map +0 -1
- package/dist/routes/config/settings.d.ts.map +0 -1
- package/dist/routes/debug.d.ts.map +0 -1
- package/dist/routes/health.d.ts.map +0 -1
- package/dist/routes/hls.d.ts.map +0 -1
- package/dist/routes/icons.d.ts.map +0 -1
- package/dist/routes/index.d.ts.map +0 -1
- package/dist/routes/logs.d.ts.map +0 -1
- package/dist/routes/mpegts.d.ts.map +0 -1
- package/dist/routes/play.d.ts.map +0 -1
- package/dist/routes/playlist.d.ts.map +0 -1
- package/dist/routes/root/content.d.ts.map +0 -1
- package/dist/routes/root/index.d.ts.map +0 -1
- package/dist/routes/root/scripts/channels.d.ts.map +0 -1
- package/dist/routes/root/scripts/clientEscape.d.ts.map +0 -1
- package/dist/routes/root/scripts/clientUrl.d.ts.map +0 -1
- package/dist/routes/root/scripts/config.d.ts.map +0 -1
- package/dist/routes/root/scripts/index.d.ts.map +0 -1
- package/dist/routes/root/scripts/shared.d.ts.map +0 -1
- package/dist/routes/root/scripts/status.d.ts.map +0 -1
- package/dist/routes/root/scripts/status.handlers.d.ts.map +0 -1
- package/dist/routes/root/styles.d.ts.map +0 -1
- package/dist/routes/services.d.ts.map +0 -1
- package/dist/routes/sse.d.ts.map +0 -1
- package/dist/routes/streams.d.ts.map +0 -1
- package/dist/routes/theme.d.ts.map +0 -1
- package/dist/routes/ui.d.ts.map +0 -1
- package/dist/routes/upgrade.d.ts.map +0 -1
- package/dist/service/commands.context.d.ts.map +0 -1
- package/dist/service/commands.d.ts.map +0 -1
- package/dist/service/generators.context.d.ts.map +0 -1
- package/dist/service/generators.d.ts.map +0 -1
- package/dist/service/index.d.ts.map +0 -1
- package/dist/streaming/captureLock.d.ts.map +0 -1
- package/dist/streaming/captureSession.d.ts.map +0 -1
- package/dist/streaming/clients.d.ts.map +0 -1
- package/dist/streaming/codec.d.ts.map +0 -1
- package/dist/streaming/fmp4Segmenter.d.ts.map +0 -1
- package/dist/streaming/hls.d.ts.map +0 -1
- package/dist/streaming/hlsResume.d.ts.map +0 -1
- package/dist/streaming/hlsSegments.d.ts.map +0 -1
- package/dist/streaming/lifecycle.d.ts.map +0 -1
- package/dist/streaming/monitor.d.ts.map +0 -1
- package/dist/streaming/mp4Parser.d.ts.map +0 -1
- package/dist/streaming/mpegts.d.ts.map +0 -1
- package/dist/streaming/playlistBuilder.d.ts.map +0 -1
- package/dist/streaming/preroll.d.ts.map +0 -1
- package/dist/streaming/pretune.d.ts.map +0 -1
- package/dist/streaming/pretuneTimers.d.ts.map +0 -1
- package/dist/streaming/recovery.d.ts.map +0 -1
- package/dist/streaming/registry.d.ts.map +0 -1
- package/dist/streaming/setup.d.ts.map +0 -1
- package/dist/streaming/showInfo.d.ts.map +0 -1
- package/dist/streaming/statusEmitter.d.ts.map +0 -1
- package/dist/types/channels.d.ts.map +0 -1
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/profiles.d.ts.map +0 -1
- package/dist/types/selection.d.ts.map +0 -1
- package/dist/types/shared.d.ts.map +0 -1
- package/dist/types/streaming.d.ts.map +0 -1
- package/dist/upgrade/commands.context.d.ts.map +0 -1
- package/dist/upgrade/commands.d.ts.map +0 -1
- package/dist/upgrade/detection.context.d.ts.map +0 -1
- package/dist/upgrade/detection.d.ts.map +0 -1
- package/dist/upgrade/index.d.ts.map +0 -1
- package/dist/upgrade/lifecycle.context.d.ts.map +0 -1
- package/dist/upgrade/lifecycle.d.ts.map +0 -1
- package/dist/upgrade/pathHandle.d.ts.map +0 -1
- package/dist/utils/bootSession.context.d.ts.map +0 -1
- package/dist/utils/bootSession.d.ts.map +0 -1
- package/dist/utils/chromeFetch.d.ts.map +0 -1
- package/dist/utils/cliOutput.d.ts.map +0 -1
- package/dist/utils/clock.d.ts +0 -15
- package/dist/utils/clock.d.ts.map +0 -1
- package/dist/utils/clock.js +0 -31
- package/dist/utils/clock.js.map +0 -1
- package/dist/utils/debugFilter.d.ts.map +0 -1
- package/dist/utils/delay.d.ts.map +0 -1
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/evaluate.d.ts.map +0 -1
- package/dist/utils/ffmpeg.context.d.ts.map +0 -1
- package/dist/utils/ffmpeg.d.ts.map +0 -1
- package/dist/utils/fileLogger.d.ts.map +0 -1
- package/dist/utils/format.d.ts.map +0 -1
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/logEmitter.d.ts.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/m3u.d.ts.map +0 -1
- package/dist/utils/markup.d.ts.map +0 -1
- package/dist/utils/memo.d.ts.map +0 -1
- package/dist/utils/morganStream.d.ts.map +0 -1
- package/dist/utils/network.d.ts.map +0 -1
- package/dist/utils/pid.d.ts.map +0 -1
- package/dist/utils/platform.d.ts.map +0 -1
- package/dist/utils/processInspector.context.d.ts.map +0 -1
- package/dist/utils/processInspector.d.ts.map +0 -1
- package/dist/utils/retry.d.ts.map +0 -1
- package/dist/utils/runtimeIdentity.context.d.ts.map +0 -1
- package/dist/utils/runtimeIdentity.d.ts.map +0 -1
- package/dist/utils/sanitize.d.ts.map +0 -1
- package/dist/utils/streamContext.d.ts.map +0 -1
- package/dist/utils/timing.d.ts.map +0 -1
- package/dist/utils/version.d.ts.map +0 -1
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import { LOG, extractDomain, formatError, startTimer } from "../utils/index.js";
|
|
1
|
+
import { LOG, extractDomain, formatError, startTimer, timeoutSignal } from "../utils/index.js";
|
|
2
2
|
import { clearDomainAuthRequirement, getDomainAuthState, markDomainAuth, markDomainAuthRequired } from "../config/health.js";
|
|
3
|
-
import { getCurrentBrowser, isGracefulShutdown,
|
|
3
|
+
import { createDiscoveryPage, emulateLayoutSurface, getCurrentBrowser, isGracefulShutdown, registerManagedPage, syncWindowVisibility, unregisterManagedPage } from "./index.js";
|
|
4
|
+
import { getPersistedLineup, persistProviderLineup } from "../config/providerLineups.js";
|
|
4
5
|
import { getProviderBySlug, getProvidersForDomain } from "./channelSelection.js";
|
|
6
|
+
import { systemClock, waitWithSignal } from "homebridge-plugin-utils";
|
|
5
7
|
import { CONFIG } from "../config/index.js";
|
|
6
8
|
import { classifyBlockedPage } from "./blockedPage.js";
|
|
7
9
|
import { getProfileForUrl } from "../config/profiles.js";
|
|
8
10
|
import { isLoginModeActive } from "./login.js";
|
|
9
|
-
import { persistProviderLineup } from "../config/providerLineups.js";
|
|
10
11
|
import { startOverlayHandling } from "./consent.js";
|
|
11
12
|
/* Precaching discovers channel lineups for selected services at startup so that even the first tune benefits from cached lineup data. Each service is precached
|
|
12
|
-
* sequentially - discovery opens a browser page and navigates to a heavy SPA, so running all services concurrently would stress CPU and
|
|
13
|
-
* systems. The HTTP server starts immediately; precaching begins in the background after a brief delay.
|
|
13
|
+
* sequentially - discovery opens a browser page in a window of its own and navigates to a heavy SPA, so running all services concurrently would stress CPU and
|
|
14
|
+
* GPU on resource-constrained systems. The HTTP server starts immediately; precaching begins in the background after a brief delay.
|
|
14
15
|
*
|
|
15
16
|
* Precaching is triggered from launchBrowser() in browser/index.ts. This covers both initial server startup and browser crash recovery (where all caches are cleared).
|
|
16
17
|
* Each service has its own try/catch - one failure does not stop the rest. The browser reference is obtained per-service via getCurrentBrowser() so that a browser
|
|
@@ -21,35 +22,67 @@ import { startOverlayHandling } from "./consent.js";
|
|
|
21
22
|
* mutator or the lineup store directly - it calls the recorder, which does. The page session itself is owned by withProviderGuidePage: the single guarded-page
|
|
22
23
|
* primitive both the precache cycle and that endpoint walk their guides through, and the one place the empty-walk retry policy lives, so no provider carries a
|
|
23
24
|
* retry of its own.
|
|
25
|
+
*
|
|
26
|
+
* Every timer and deadline this module arms - the startup cycle's delay, the deferred re-attempt, and each walk's ceiling - runs on the clock its dependencies
|
|
27
|
+
* carry, so one injected clock drives the whole schedule.
|
|
24
28
|
*/
|
|
25
29
|
// Delay in milliseconds before precaching begins after browser launch. This gives the browser time to settle after initialization.
|
|
26
30
|
const PRECACHE_DELAY = 5000;
|
|
27
|
-
/* Delay in milliseconds before the services
|
|
28
|
-
* the browser launch, the first tunes, the DVR's own channel scan - which is the likeliest reason a provider's lazy content never appeared inside its walk.
|
|
29
|
-
*
|
|
30
|
-
* waking the browser for it indefinitely.
|
|
31
|
+
/* Delay in milliseconds before the services a cycle could not settle are re-attempted. Five minutes puts the second pass well past the contention a boot creates -
|
|
32
|
+
* the browser launch, the first tunes, the DVR's own channel scan - which is the likeliest reason a provider's lazy content never appeared inside its walk. A
|
|
33
|
+
* service whose walk did not settle - it came back empty, or it was stopped at its budget - gets exactly one such pass: unsettled again on a quiet system, it has
|
|
34
|
+
* a standing problem that another walk will not solve, and a repeating attempt would keep waking the browser for it indefinitely. A service deferred because a
|
|
35
|
+
* login session was on screen is the separate case: its walk never ran, so the pass re-arms itself for it until the session ends rather than spending its one
|
|
36
|
+
* attempt on a window the user is working in.
|
|
31
37
|
*/
|
|
32
38
|
const PRECACHE_RETRY_DELAY = 300000;
|
|
39
|
+
/* The fraction of the saved lineup a walk has to reach before the store is allowed to replace that lineup with it. A non-empty walk returning fewer channels
|
|
40
|
+
* than this fraction of what is already on file is treated as an incomplete read of the guide: a slice is replaced wholesale, so one screenful read off a
|
|
41
|
+
* virtualized guide - twelve rows where the guide carries a hundred and twenty-nine - would otherwise become the whole saved lineup. A quarter sits well below
|
|
42
|
+
* any plausible change a provider makes to its own channel list and well above what that truncation produces, so a count alone tells the two apart without a
|
|
43
|
+
* provider-declared completeness signal.
|
|
44
|
+
*
|
|
45
|
+
* Below the threshold the walk is never accepted automatically, and the reason is what a count can and cannot say: it cannot tell a truncated read from a
|
|
46
|
+
* provider that genuinely shrank, and a second walk agreeing with the first settles nothing either, because a one-screenful truncation reads the same twelve
|
|
47
|
+
* rows every time. So a provider that really did cut its lineup by more than this keeps its extra channel rows until a walk lands at or above the threshold, an
|
|
48
|
+
* on-demand discovery from the channel table refreshes it, or the saved file is corrected by hand. The warn line the guard emits carries both counts and names
|
|
49
|
+
* that outcome.
|
|
50
|
+
*/
|
|
51
|
+
const SUSPECT_WALK_RATIO = 0.25;
|
|
52
|
+
/* The ceiling on a single discovery walk, in milliseconds. Measured walks finish in a few seconds to about seventeen, and an empty walk's reload-and-retry gets a
|
|
53
|
+
* budget of its own, so a minute is far past anything a healthy walk needs: a walk still running at that point is wedged on a page that is not going to answer.
|
|
54
|
+
* The ceiling is a failure to report rather than a delay anyone pays, and it sits deliberately low because the alternative is worse - the stale-page sweep is a
|
|
55
|
+
* safety net for pages nothing owns, not this walk's timer, so a walk without a ceiling of its own has none at all. Failing fast hands the service to the
|
|
56
|
+
* deferred re-attempt, which tries again on a settled system.
|
|
57
|
+
*/
|
|
58
|
+
const DISCOVERY_WALK_TIMEOUT = 60000;
|
|
59
|
+
/**
|
|
60
|
+
* A discovery walk stopped at its budget. The precache cycle and the deferred re-attempt each treat a wedged walk differently from every other discovery failure,
|
|
61
|
+
* so the lapse carries its own type rather than making either of them read a message.
|
|
62
|
+
*/
|
|
63
|
+
export class DiscoveryWalkTimeoutError extends Error {
|
|
64
|
+
constructor(label, timeoutMs) {
|
|
65
|
+
super("The channel discovery walk for " + label + " did not finish within " + String(timeoutMs / 1000) + " seconds.");
|
|
66
|
+
this.name = "DiscoveryWalkTimeoutError";
|
|
67
|
+
}
|
|
68
|
+
}
|
|
33
69
|
// Guard flag preventing overlapping precache cycles. Set to true before the cycle starts, cleared through releasePrecacheGuard in a finally block.
|
|
34
70
|
let precacheInProgress = false;
|
|
35
|
-
//
|
|
36
|
-
let
|
|
37
|
-
/* The pending deferred re-attempt: the services still to re-walk and the timer that will do it. One value rather than two fields, so arming, cancelling, and
|
|
38
|
-
* firing each move the whole thing at once - a slug list with no timer behind it, or a timer whose slugs were cleared, is not a state this can reach.
|
|
39
|
-
*/
|
|
40
|
-
let deferredRetry = null;
|
|
71
|
+
// The scheduler's pending work, or null when it has none.
|
|
72
|
+
let scheduled = null;
|
|
41
73
|
/* Whether a full precache cycle was requested while the single-flight guard was held. The request always comes from a browser relaunch, which cleared every
|
|
42
74
|
* provider cache, so the run holding the guard is walking guides for a browser that no longer exists and its result is worth nothing - dropping the request would
|
|
43
75
|
* leave the new browser with no lineups at all. Whoever releases the guard runs it; releasePrecacheGuard is where that happens, and it is the only place.
|
|
44
76
|
*/
|
|
45
77
|
let fullCycleRequested = false;
|
|
46
78
|
/**
|
|
47
|
-
* Cancels a pending deferred re-attempt and drops its state as one unit. A no-op when nothing is pending
|
|
79
|
+
* Cancels a pending deferred re-attempt and drops its state as one unit. A no-op when nothing is pending, and equally a no-op when what is pending is a cycle -
|
|
80
|
+
* only the re-attempt arm is cancelled here.
|
|
48
81
|
*/
|
|
49
82
|
function clearDeferredRetry() {
|
|
50
|
-
if (
|
|
51
|
-
|
|
52
|
-
|
|
83
|
+
if (scheduled?.kind === "deferred") {
|
|
84
|
+
scheduled.timer[Symbol.dispose]();
|
|
85
|
+
scheduled = null;
|
|
53
86
|
}
|
|
54
87
|
}
|
|
55
88
|
/**
|
|
@@ -70,19 +103,24 @@ function releasePrecacheGuard(deps) {
|
|
|
70
103
|
startPrecaching(deps);
|
|
71
104
|
}
|
|
72
105
|
export const defaultPrecachingDeps = {
|
|
106
|
+
clock: systemClock,
|
|
107
|
+
createDiscoveryPage,
|
|
108
|
+
emulateLayoutSurface,
|
|
73
109
|
getCurrentBrowser,
|
|
110
|
+
getPersistedLineup,
|
|
74
111
|
getProviderBySlug,
|
|
75
112
|
getProvidersForDomain,
|
|
76
113
|
isGracefulShutdown,
|
|
77
|
-
minimizeBrowserWindow,
|
|
78
114
|
persistProviderLineup,
|
|
79
115
|
registerManagedPage,
|
|
80
116
|
startOverlayHandling,
|
|
117
|
+
syncWindowVisibility,
|
|
81
118
|
unregisterManagedPage
|
|
82
119
|
};
|
|
83
120
|
/**
|
|
84
121
|
* Starts the precaching cycle if services are configured. Called from launchBrowser() after the browser is ready. If no services are selected, a shutdown is in
|
|
85
|
-
* progress, or a precache cycle is already in progress, returns immediately. The actual work is scheduled
|
|
122
|
+
* progress, or a precache cycle is already in progress, returns immediately. The actual work is scheduled on the dependencies' clock to avoid blocking browser
|
|
123
|
+
* launch.
|
|
86
124
|
* @param deps - The injected browser and provider-registry dependencies; defaults to defaultPrecachingDeps.
|
|
87
125
|
*/
|
|
88
126
|
export function startPrecaching(deps = defaultPrecachingDeps) {
|
|
@@ -108,10 +146,10 @@ export function startPrecaching(deps = defaultPrecachingDeps) {
|
|
|
108
146
|
clearDeferredRetry();
|
|
109
147
|
// Schedule the precache cycle after a brief delay to let the browser settle. The handle is tracked so stopPrecaching() can cancel it if shutdown begins during the
|
|
110
148
|
// delay window; the ref is cleared when the timer fires since it is then spent.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
149
|
+
scheduled = { kind: "cycle", timer: deps.clock.schedule(() => {
|
|
150
|
+
scheduled = null;
|
|
151
|
+
void runPrecacheCycle(deps);
|
|
152
|
+
}, PRECACHE_DELAY) };
|
|
115
153
|
}
|
|
116
154
|
/**
|
|
117
155
|
* Cancels every scheduled precache - the startup cycle and the deferred re-attempt alike - and clears the in-progress guard. Called during graceful shutdown so
|
|
@@ -121,9 +159,9 @@ export function startPrecaching(deps = defaultPrecachingDeps) {
|
|
|
121
159
|
* which is exactly what releasing through the hand-off would do.
|
|
122
160
|
*/
|
|
123
161
|
export function stopPrecaching() {
|
|
124
|
-
if (
|
|
125
|
-
|
|
126
|
-
|
|
162
|
+
if (scheduled) {
|
|
163
|
+
scheduled.timer[Symbol.dispose]();
|
|
164
|
+
scheduled = null;
|
|
127
165
|
}
|
|
128
166
|
clearDeferredRetry();
|
|
129
167
|
fullCycleRequested = false;
|
|
@@ -137,13 +175,14 @@ export function stopPrecaching() {
|
|
|
137
175
|
*
|
|
138
176
|
* An empty result classifies the still-open page: a confirmed authentication wall marks the provider's domain needs-sign-in; a consent overlay and the unknown
|
|
139
177
|
* classification change no state (an unexplained empty walk is not evidence of anything). A non-empty result that the provider's validatePrecache accepts (or that
|
|
140
|
-
* needs no validation) marks the domain verified and persists the lineup
|
|
141
|
-
*
|
|
142
|
-
*
|
|
178
|
+
* needs no validation) marks the domain verified and persists the lineup, unless it holds too small a fraction of the lineup already on file to be a complete read
|
|
179
|
+
* of the guide, in which case the mark still lands and the saved lineup stands; a non-empty result the validator rejects proves the wall is gone but not that paid
|
|
180
|
+
* access exists, so it clears a standing needs-sign-in entry back to unknown, changes nothing else, and persists nothing - a rejected walk is not a lineup the
|
|
181
|
+
* store can safely replace a slice with.
|
|
143
182
|
* @param provider - The provider whose discovery completed.
|
|
144
183
|
* @param channels - The discovered channels (possibly empty).
|
|
145
184
|
* @param page - The still-open discovery page, inspected only when the result is empty.
|
|
146
|
-
* @param deps - The injected dependencies; the lineup write
|
|
185
|
+
* @param deps - The injected dependencies; the saved-lineup read and the lineup write both run through this port.
|
|
147
186
|
* @param classification - A classification the caller already performed against the page state it wants recorded. When omitted, the still-open page is classified
|
|
148
187
|
* here, which is what every caller that has not already looked does.
|
|
149
188
|
* @returns A promise that resolves once any classification and state recording completes.
|
|
@@ -175,13 +214,25 @@ export async function recordDiscoveryOutcome(provider, channels, page, deps, cla
|
|
|
175
214
|
// authentication, so a non-empty result alone does not prove paid access.
|
|
176
215
|
if (!provider.validatePrecache || provider.validatePrecache(channels)) {
|
|
177
216
|
markDomainAuth(domain);
|
|
217
|
+
/* A walk far smaller than the lineup already on file reads as an incomplete pass over the guide rather than as a statement that the provider cut its channel
|
|
218
|
+
* list, so the durable write is withheld and what is on file stands. The order here is the contract: the domain is marked above regardless, because channels
|
|
219
|
+
* came back and that proves access whatever the count says, and the live cache this walk already filled is untouched, so the session still tunes from what
|
|
220
|
+
* the walk did reach. Only the write to the store is given up.
|
|
221
|
+
*/
|
|
222
|
+
const saved = deps.getPersistedLineup(provider.slug);
|
|
223
|
+
if ((saved !== null) && (channels.length < (saved.length * SUSPECT_WALK_RATIO))) {
|
|
224
|
+
LOG.warn("%s returned %d channels where its saved lineup holds %d, so the walk is treated as incomplete and the saved lineup is kept.", provider.label, channels.length, saved.length);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
178
227
|
/* Persist what the walk found so the lineup outlives this browser session. The provider states its own durable shape through exportDurableLineup - which
|
|
179
228
|
* fields survive a session is provider knowledge, not the recorder's - and a provider with nothing durable to add contributes the channel identities the walk
|
|
180
229
|
* returned.
|
|
181
230
|
*
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
*
|
|
231
|
+
* Every condition a write has to pass exists because of the store's replace semantics: a slice is replaced wholesale, so anything short of a trustworthy full
|
|
232
|
+
* statement of the lineup could shrink a fuller slice written earlier, dropping channels out of the cold-listing fallback and taking their durable watch URLs
|
|
233
|
+
* with them. The provider's own validator is the first, and a walk it judges untrustworthy never reaches this block at all; the plausibility guard above is
|
|
234
|
+
* the second, and it withholds a walk too small to be a complete read of the guide. Verify-on-use covers staleness, not a lineup the provider has already
|
|
235
|
+
* rejected or a read that plainly did not finish.
|
|
185
236
|
*
|
|
186
237
|
* The write is fire-and-forget by design: it never throws, and making the discovery endpoint's response wait on a file write would charge the user for a
|
|
187
238
|
* durability guarantee they did not ask for.
|
|
@@ -199,6 +250,32 @@ export async function recordDiscoveryOutcome(provider, channels, page, deps, cla
|
|
|
199
250
|
// state never outlives the wall it reported - clearDomainAuthRequirement is a no-op unless the domain is currently flagged, so verified state is never touched.
|
|
200
251
|
clearDomainAuthRequirement(domain);
|
|
201
252
|
}
|
|
253
|
+
/**
|
|
254
|
+
* Runs a provider's discovery walk under a deadline, and cancels the walk when that deadline lapses rather than merely giving up on waiting for it.
|
|
255
|
+
*
|
|
256
|
+
* The cancellation is the whole point. A lapse closes the page, which throws whatever Puppeteer operation the walk is sitting on and unwinds the walk itself -
|
|
257
|
+
* the same mechanism the guarded session uses for a caller's abort. A bound that only stopped the wait would leave the walk driving a page the session has moved
|
|
258
|
+
* on from. The lapse is held in a local and handed to the timeout as its abort reason, so the rejection carries that exact error object; every other rejection
|
|
259
|
+
* travels through untouched. Each call gets its own budget, which is what lets an empty walk's retry be bounded exactly like the first attempt.
|
|
260
|
+
* @param provider - The provider whose walk to run.
|
|
261
|
+
* @param page - The guide page the walk runs against, closed if the deadline lapses.
|
|
262
|
+
* @param clock - The clock the deadline arms on.
|
|
263
|
+
* @returns The discovered channels (possibly empty).
|
|
264
|
+
* @throws DiscoveryWalkTimeoutError when the walk outlives its budget, and whatever the walk itself rejected with otherwise.
|
|
265
|
+
*/
|
|
266
|
+
async function walkWithDeadline(provider, page, clock) {
|
|
267
|
+
const lapse = new DiscoveryWalkTimeoutError(provider.label, DISCOVERY_WALK_TIMEOUT);
|
|
268
|
+
const deadline = timeoutSignal(DISCOVERY_WALK_TIMEOUT, { clock, reason: lapse });
|
|
269
|
+
deadline.signal.addEventListener("abort", () => {
|
|
270
|
+
void page.close().catch(() => { });
|
|
271
|
+
}, { once: true });
|
|
272
|
+
try {
|
|
273
|
+
return await waitWithSignal(provider.discoverChannels(page), deadline.signal);
|
|
274
|
+
}
|
|
275
|
+
finally {
|
|
276
|
+
deadline.cancel();
|
|
277
|
+
}
|
|
278
|
+
}
|
|
202
279
|
/**
|
|
203
280
|
* Gives an empty discovery walk one more chance, when the page it left behind says the emptiness is unexplained.
|
|
204
281
|
*
|
|
@@ -236,8 +313,8 @@ async function retryAfterEmptyWalk(options) {
|
|
|
236
313
|
// reusing it would silently leave the retry unprotected against a banner that reappears after the reload.
|
|
237
314
|
const retryController = new AbortController();
|
|
238
315
|
try {
|
|
239
|
-
void deps.startOverlayHandling(page, profile, { phase: "discovery", signal: retryController.signal });
|
|
240
|
-
return { channels: await provider.
|
|
316
|
+
void deps.startOverlayHandling(page, profile, { clock: deps.clock, phase: "discovery", signal: retryController.signal });
|
|
317
|
+
return { channels: await walkWithDeadline(provider, page, deps.clock) };
|
|
241
318
|
}
|
|
242
319
|
finally {
|
|
243
320
|
retryController.abort();
|
|
@@ -245,10 +322,11 @@ async function retryAfterEmptyWalk(options) {
|
|
|
245
322
|
}
|
|
246
323
|
/**
|
|
247
324
|
* Opens a guarded browser page for a provider's guide, runs its discovery walk under a consent-overlay poll, and cleans the page up. This is the single owner of the
|
|
248
|
-
* discovery page session shared by the precache cycle and the /services/:slug/channels endpoint: it
|
|
249
|
-
*
|
|
250
|
-
* cookie banners and per-site modals during the walk. The overlay poll is aborted the
|
|
251
|
-
* afterWalk hook inspects it - a poll still clicking could dismiss the very overlay
|
|
325
|
+
* discovery page session shared by the precache cycle and the /services/:slug/channels endpoint: it asks the browser layer's creator for the page and holds
|
|
326
|
+
* everything that happens to it afterwards - managed-page registration, the abort mechanics (close-on-abort plus the pre-navigation early-abort), the audio-mute
|
|
327
|
+
* override, the discovery-phase overlay poll that dismisses cookie banners and per-site modals during the walk, and the close. The overlay poll is aborted the
|
|
328
|
+
* instant the walk completes, so the page is quiet by construction before the afterWalk hook inspects it - a poll still clicking could dismiss the very overlay
|
|
329
|
+
* a classification is about to report.
|
|
252
330
|
*
|
|
253
331
|
* A walk that comes back empty gets one reload-and-retry, on the terms retryAfterEmptyWalk sets out. The hook still runs exactly once, against whichever result
|
|
254
332
|
* stands.
|
|
@@ -259,8 +337,13 @@ async function retryAfterEmptyWalk(options) {
|
|
|
259
337
|
*/
|
|
260
338
|
export async function withProviderGuidePage(provider, options = {}, deps = defaultPrecachingDeps) {
|
|
261
339
|
const { afterWalk, signal } = options;
|
|
262
|
-
const browser = await deps.getCurrentBrowser();
|
|
263
|
-
|
|
340
|
+
const browser = await deps.getCurrentBrowser("page");
|
|
341
|
+
/* The guide page is the active tab of a browser window of its own, opened in the background at the shared window's placement and presented by the creator for
|
|
342
|
+
* the page's whole life. A guide renders only while Chrome presents its document, and a walk is never captured, so the page gets a window that never disturbs
|
|
343
|
+
* the shared window's own state or the tab the user has selected there, and a presentation that does not depend on that window being shown. The window closes
|
|
344
|
+
* with the page.
|
|
345
|
+
*/
|
|
346
|
+
const page = await deps.createDiscoveryPage(browser);
|
|
264
347
|
// Close the page the moment the caller aborts, so any in-progress Puppeteer operation throws and propagates the cancellation through discoverChannels without each
|
|
265
348
|
// provider having to poll the signal. The helper owns this mechanism because it owns page creation - no caller ever holds the page reference, so close-on-abort
|
|
266
349
|
// must live beside the lifecycle it cancels. The listener is registered the instant the page exists and removed in the finally.
|
|
@@ -289,18 +372,25 @@ export async function withProviderGuidePage(provider, options = {}, deps = defau
|
|
|
289
372
|
return originalPlay.call(this);
|
|
290
373
|
};
|
|
291
374
|
});
|
|
292
|
-
|
|
375
|
+
/* Hold the page against the stale-page sweep for as long as the walk runs. A discovery page is owned by this walk rather than by any stream the registry
|
|
376
|
+
* records, so without the mark the sweep starts a staleness clock on it at first sight and closes it partway through a long walk. The finally below
|
|
377
|
+
* unregisters the page, which drops the mark, so the sweep stays a safety net for a leaked page while the deadline above is what bounds the walk.
|
|
378
|
+
*/
|
|
379
|
+
deps.registerManagedPage(page, { inFlight: true });
|
|
380
|
+
// Declare the layout the walk runs against, before the first navigation so the guide loads once at the surface it will be read on. A page carries no
|
|
381
|
+
// emulation of its own, and every guide strategy was written against the preset's dimensions.
|
|
382
|
+
await deps.emulateLayoutSurface(page);
|
|
293
383
|
// Launch the discovery-phase overlay poll before navigation: a handlesOwnNavigation provider navigates inside discoverChannels, and the tick-error taxonomy lets
|
|
294
384
|
// the poll survive that navigation. The phase's window is the backstop; the abort after the walk is the terminator. The guide page is not a tune, so the phase
|
|
295
385
|
// forbids the embed-gate accept - only cookie rejection and per-site modal dismissal run here.
|
|
296
386
|
const { profile } = getProfileForUrl(provider.guideUrl);
|
|
297
|
-
void deps.startOverlayHandling(page, profile, { phase: "discovery", signal: overlayController.signal });
|
|
387
|
+
void deps.startOverlayHandling(page, profile, { clock: deps.clock, phase: "discovery", signal: overlayController.signal });
|
|
298
388
|
// Navigate to the service's guide URL unless the provider module handles its own navigation (e.g., sets up response interception before navigating). We use
|
|
299
389
|
// networkidle2 rather than load because SPA-based services (e.g., Hulu) have heavy async initialization that can prevent the load event from firing reliably.
|
|
300
390
|
if (!provider.handlesOwnNavigation) {
|
|
301
391
|
await page.goto(provider.guideUrl, { timeout: CONFIG.streaming.navigationTimeout, waitUntil: "networkidle2" });
|
|
302
392
|
}
|
|
303
|
-
let channels = await provider.
|
|
393
|
+
let channels = await walkWithDeadline(provider, page, deps.clock);
|
|
304
394
|
// The walk is complete. Abort the overlay poll so the page is quiet by construction before anything classifies it.
|
|
305
395
|
overlayController.abort();
|
|
306
396
|
let classification;
|
|
@@ -326,11 +416,10 @@ export async function withProviderGuidePage(provider, options = {}, deps = defau
|
|
|
326
416
|
catch {
|
|
327
417
|
// Page may already be closed if the browser disconnected during discovery or the abort handler already closed it.
|
|
328
418
|
}
|
|
329
|
-
//
|
|
330
|
-
//
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
}
|
|
419
|
+
// Settle the shared browser window against the policy now that the walk is done. The walk's browser acquisition may have relaunched Chrome, which leaves
|
|
420
|
+
// that window as the launch left it, and a walk runs long enough to span a stream state change; the pass is unconditional because the policy already
|
|
421
|
+
// accounts for a login session or a running capture.
|
|
422
|
+
await deps.syncWindowVisibility();
|
|
334
423
|
}
|
|
335
424
|
}
|
|
336
425
|
/**
|
|
@@ -380,7 +469,7 @@ export async function revalidateDomainAuth(url, deps = defaultPrecachingDeps) {
|
|
|
380
469
|
if (deps.isGracefulShutdown()) {
|
|
381
470
|
return;
|
|
382
471
|
}
|
|
383
|
-
// Defer to an in-flight precache cycle rather than overlapping it.
|
|
472
|
+
// Defer to an in-flight precache cycle rather than overlapping it. Limitation: if the flagged provider is not in that cycle's configured service set,
|
|
384
473
|
// the flag persists until the next successful discovery or tune for the domain - an in-flight cycle cannot be retargeted.
|
|
385
474
|
if (precacheInProgress) {
|
|
386
475
|
LOG.info("Deferring the post-login revalidation for %s to the precache cycle already in progress.", domain);
|
|
@@ -417,9 +506,10 @@ export async function revalidateDomainAuth(url, deps = defaultPrecachingDeps) {
|
|
|
417
506
|
}
|
|
418
507
|
}
|
|
419
508
|
/**
|
|
420
|
-
* Schedules the
|
|
421
|
-
*
|
|
422
|
-
*
|
|
509
|
+
* Schedules the deferred re-attempt for the services a pass could not settle. Does nothing when every service came back with a lineup, and nothing during a
|
|
510
|
+
* shutdown, where scheduling work against the browser is precisely what teardown is closing down. This is the one place a re-attempt is scheduled, so every
|
|
511
|
+
* reason a service is still owed a walk - it ran and found nothing, it was stopped at its budget, or it never ran at all - arrives on the same schedule.
|
|
512
|
+
* @param slugs - The services a pass could not settle: walked without settling, or deferred because a login session was on screen.
|
|
423
513
|
* @param deps - The injected dependencies, handed to the pass this schedules.
|
|
424
514
|
*/
|
|
425
515
|
function armDeferredRetry(slugs, deps) {
|
|
@@ -427,23 +517,27 @@ function armDeferredRetry(slugs, deps) {
|
|
|
427
517
|
return;
|
|
428
518
|
}
|
|
429
519
|
LOG.debug("precache", "Scheduling one deferred discovery re-attempt for %d service%s in %d minutes.", slugs.length, (slugs.length === 1) ? "" : "s", PRECACHE_RETRY_DELAY / 60000);
|
|
430
|
-
|
|
520
|
+
scheduled = { kind: "deferred", slugs, timer: deps.clock.schedule(() => void runDeferredRetry(deps), PRECACHE_RETRY_DELAY) };
|
|
431
521
|
}
|
|
432
522
|
/**
|
|
433
|
-
* Runs the
|
|
523
|
+
* Runs the deferred re-attempt for the services a cycle could not settle. Never rejects - it is driven by a timer with nobody to hand a rejection to, so every
|
|
434
524
|
* per-service failure is contained the same way the cycle contains its own.
|
|
435
525
|
*
|
|
436
526
|
* A service whose lineup arrived in the interval - from a later full cycle, or from an on-demand discovery a user triggered - is skipped rather than re-walked,
|
|
437
|
-
* because the walk it would run is the expensive part and the answer is already in hand.
|
|
527
|
+
* because the walk it would run is the expensive part and the answer is already in hand. A login session that begins before the pass fires stops it where it
|
|
528
|
+
* stands and re-arms everything still owed, so the walks resume once the user is done rather than opening a window over the one they are signing in through.
|
|
438
529
|
* @param deps - The injected browser and provider-registry dependencies.
|
|
439
530
|
* @returns A promise that resolves once the pass completes or is skipped.
|
|
440
531
|
*/
|
|
441
532
|
async function runDeferredRetry(deps) {
|
|
442
|
-
|
|
533
|
+
if (scheduled?.kind !== "deferred") {
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
const pending = scheduled;
|
|
443
537
|
// Drop the state before acting on it. This is the only pass there will be, so a handle left standing would tell a later cancellation that something is still
|
|
444
538
|
// scheduled when nothing is.
|
|
445
|
-
|
|
446
|
-
if (
|
|
539
|
+
scheduled = null;
|
|
540
|
+
if (deps.isGracefulShutdown()) {
|
|
447
541
|
return;
|
|
448
542
|
}
|
|
449
543
|
/* A cycle or a post-login revalidation holding the guard is already walking guides, quite possibly these same ones. This pass exists to try again on a settled
|
|
@@ -456,8 +550,10 @@ async function runDeferredRetry(deps) {
|
|
|
456
550
|
precacheInProgress = true;
|
|
457
551
|
let attempted = 0;
|
|
458
552
|
let succeeded = 0;
|
|
553
|
+
// The services this pass leaves unwalked because a login session came up, named rather than counted: they are re-armed below on the same schedule.
|
|
554
|
+
let remaining = [];
|
|
459
555
|
try {
|
|
460
|
-
for (const slug of pending.slugs) {
|
|
556
|
+
for (const [index, slug] of pending.slugs.entries()) {
|
|
461
557
|
// Re-checked every iteration, exactly as the cycle's own loop does: a shutdown that begins mid-pass must stop opening discovery pages, or the next
|
|
462
558
|
// getCurrentBrowser relaunches the Chrome that teardown just closed.
|
|
463
559
|
if (deps.isGracefulShutdown()) {
|
|
@@ -471,6 +567,14 @@ async function runDeferredRetry(deps) {
|
|
|
471
567
|
LOG.debug("precache", "Skipping the deferred re-attempt for %s: its lineup was discovered in the meantime.", provider.label);
|
|
472
568
|
continue;
|
|
473
569
|
}
|
|
570
|
+
/* Stop where the login session found us, and take everything from here with us. A walk opens its window at the shared window's placement, which during a
|
|
571
|
+
* login session is the window the user is signing in through. The check reads live state, so the pass that re-arms below runs to the end once the
|
|
572
|
+
* session is over; the slugs already walked are behind us and the one skipped above is settled, so what remains is exactly what is still owed.
|
|
573
|
+
*/
|
|
574
|
+
if (isLoginModeActive()) {
|
|
575
|
+
remaining = pending.slugs.slice(index);
|
|
576
|
+
break;
|
|
577
|
+
}
|
|
474
578
|
attempted++;
|
|
475
579
|
try {
|
|
476
580
|
// eslint-disable-next-line no-await-in-loop
|
|
@@ -480,12 +584,27 @@ async function runDeferredRetry(deps) {
|
|
|
480
584
|
}
|
|
481
585
|
}
|
|
482
586
|
catch (error) {
|
|
483
|
-
|
|
587
|
+
/* This is the one pass a service gets, so a lapse here is reported and left there. Queuing it again would put a wedged walk on an unbounded loop, waking
|
|
588
|
+
* the browser for it every few minutes for the life of the process.
|
|
589
|
+
*/
|
|
590
|
+
if (error instanceof DiscoveryWalkTimeoutError) {
|
|
591
|
+
LOG.warn("%s's discovery walk exceeded its %d second budget and was stopped.", provider.label, DISCOVERY_WALK_TIMEOUT / 1000);
|
|
592
|
+
}
|
|
593
|
+
else {
|
|
594
|
+
LOG.warn("The deferred channel discovery re-attempt failed for %s: %s.", provider.label, formatError(error));
|
|
595
|
+
}
|
|
484
596
|
}
|
|
485
597
|
}
|
|
486
598
|
if (attempted > 0) {
|
|
487
599
|
LOG.info("Deferred channel discovery re-attempt complete: %d of %d service%s now have a lineup.", succeeded, attempted, (attempted === 1) ? "" : "s");
|
|
488
600
|
}
|
|
601
|
+
/* Re-arm what the login session interrupted. This function drops the pending state at entry, so arming here schedules exactly one fresh pass rather than
|
|
602
|
+
* stacking on a handle that is still standing.
|
|
603
|
+
*/
|
|
604
|
+
if (remaining.length > 0) {
|
|
605
|
+
LOG.debug("precache", "Deferring %d service%s from the discovery re-attempt: a login session is on screen.", remaining.length, (remaining.length === 1) ? "" : "s");
|
|
606
|
+
armDeferredRetry(remaining, deps);
|
|
607
|
+
}
|
|
489
608
|
}
|
|
490
609
|
finally {
|
|
491
610
|
releasePrecacheGuard(deps);
|
|
@@ -493,8 +612,9 @@ async function runDeferredRetry(deps) {
|
|
|
493
612
|
}
|
|
494
613
|
/**
|
|
495
614
|
* Executes the sequential precaching cycle. Discovers channel lineups for each configured service, clearing the service's cache first to ensure a complete walk.
|
|
496
|
-
* Services not in the active service filter are silently skipped when the filter is non-empty. Services
|
|
497
|
-
*
|
|
615
|
+
* Services not in the active service filter are silently skipped when the filter is non-empty. Services the cycle could not settle - they walked and found
|
|
616
|
+
* nothing, their walk ran past its budget, or a login session on screen kept them from walking at all - are handed to the deferred re-attempt, minutes later,
|
|
617
|
+
* once whatever startup contention or user session may have starved them has passed.
|
|
498
618
|
*/
|
|
499
619
|
async function runPrecacheCycle(deps) {
|
|
500
620
|
/* Bail if a graceful shutdown began while this cycle was queued. Discovery opens browser pages via getCurrentBrowser(), which would relaunch Chrome after shutdown
|
|
@@ -510,8 +630,13 @@ async function runPrecacheCycle(deps) {
|
|
|
510
630
|
const enabledFilter = CONFIG.channels.enabledServices;
|
|
511
631
|
const hasFilter = enabledFilter.length > 0;
|
|
512
632
|
const cycleElapsed = startTimer();
|
|
513
|
-
|
|
514
|
-
|
|
633
|
+
/* The services that walked without settling - they came back with nothing, or the walk ran past its budget and was stopped - named rather than counted, because
|
|
634
|
+
* the deferred re-attempt below needs to know which ones to come back to. Both readings say the same thing about the service: the guide did not answer this
|
|
635
|
+
* time, and a second pass on a settled system is worth trying.
|
|
636
|
+
*/
|
|
637
|
+
const unsettledSlugs = [];
|
|
638
|
+
// The services this cycle stood aside from because a login session was on screen. They travel to the same re-attempt, for the same reason: a walk is still owed.
|
|
639
|
+
const deferredSlugs = [];
|
|
515
640
|
let skipped = 0;
|
|
516
641
|
let succeeded = 0;
|
|
517
642
|
LOG.info("Starting channel lineup precaching for %d service%s.", slugs.length, (slugs.length === 1) ? "" : "s");
|
|
@@ -534,26 +659,47 @@ async function runPrecacheCycle(deps) {
|
|
|
534
659
|
skipped++;
|
|
535
660
|
continue;
|
|
536
661
|
}
|
|
662
|
+
/* Stand aside while a login session is on screen. A walk opens its window at the shared window's placement, which during a login session is the window
|
|
663
|
+
* the user is signing in through, and a second window over it would take their clicks. The service is collected for the deferred re-attempt below, which
|
|
664
|
+
* is the machinery that already exists for a service this cycle could not settle. The check sits after the filter skip so a filtered-out service is
|
|
665
|
+
* still counted as filtered rather than queued for a walk it would never get.
|
|
666
|
+
*/
|
|
667
|
+
if (isLoginModeActive()) {
|
|
668
|
+
LOG.debug("precache", "Deferring the precache for %s: a login session is on screen.", provider.label);
|
|
669
|
+
deferredSlugs.push(slug);
|
|
670
|
+
continue;
|
|
671
|
+
}
|
|
537
672
|
try {
|
|
538
673
|
// eslint-disable-next-line no-await-in-loop
|
|
539
674
|
const channels = await precacheService(provider, deps);
|
|
540
|
-
// An empty walk cached nothing, so it is counted
|
|
675
|
+
// An empty walk cached nothing, so it is counted as unsettled rather than folded into the success count.
|
|
541
676
|
if (channels.length > 0) {
|
|
542
677
|
succeeded++;
|
|
543
678
|
}
|
|
544
679
|
else {
|
|
545
|
-
|
|
680
|
+
unsettledSlugs.push(slug);
|
|
546
681
|
}
|
|
547
682
|
}
|
|
548
683
|
catch (error) {
|
|
549
|
-
|
|
684
|
+
/* A walk stopped at its budget is its own outcome rather than a general failure: the ceiling ended a walk that was still going, which says nothing about
|
|
685
|
+
* whether the guide would answer on a settled system, so the service joins the deferred re-attempt exactly as an empty walk does. Every other failure
|
|
686
|
+
* keeps the general warn and is not queued - a provider that threw has a standing problem another walk will not solve.
|
|
687
|
+
*/
|
|
688
|
+
if (error instanceof DiscoveryWalkTimeoutError) {
|
|
689
|
+
LOG.warn("%s's discovery walk exceeded its %d second budget and was stopped; the service will be re-attempted.", provider.label, DISCOVERY_WALK_TIMEOUT / 1000);
|
|
690
|
+
unsettledSlugs.push(slug);
|
|
691
|
+
}
|
|
692
|
+
else {
|
|
693
|
+
LOG.warn("Failed to precache %s: %s.", provider.label, formatError(error));
|
|
694
|
+
}
|
|
550
695
|
}
|
|
551
696
|
}
|
|
552
697
|
const elapsed = (cycleElapsed() / 1000).toFixed(1).replace(/\.0$/, "");
|
|
553
|
-
const
|
|
698
|
+
const unsettledSuffix = (unsettledSlugs.length > 0) ? ", " + String(unsettledSlugs.length) + " returned no channels or timed out" : "";
|
|
699
|
+
const deferredSuffix = (deferredSlugs.length > 0) ? ", " + String(deferredSlugs.length) + " deferred for a login session" : "";
|
|
554
700
|
const skippedSuffix = (skipped > 0) ? ", " + String(skipped) + " skipped (filtered)" : "";
|
|
555
|
-
LOG.info("Channel lineup precaching complete: %d service%s cached%s%s in %ss.", succeeded, (succeeded === 1) ? "" : "s",
|
|
556
|
-
armDeferredRetry(
|
|
701
|
+
LOG.info("Channel lineup precaching complete: %d service%s cached%s%s%s in %ss.", succeeded, (succeeded === 1) ? "" : "s", unsettledSuffix, deferredSuffix, skippedSuffix, elapsed);
|
|
702
|
+
armDeferredRetry([...unsettledSlugs, ...deferredSlugs], deps);
|
|
557
703
|
}
|
|
558
704
|
finally {
|
|
559
705
|
releasePrecacheGuard(deps);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"precaching.js","sourceRoot":"","sources":["../../src/browser/precaching.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"precaching.js","sourceRoot":"","sources":["../../src/browser/precaching.ts"],"names":[],"mappings":"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"}
|