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
package/dist/config/sites.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { extractDomain } from "../utils/index.js";
|
|
2
|
-
import { getUserDomains } from "./userProfiles.js";
|
|
3
1
|
/* Streaming sites implement their video players in wildly different ways. Some use standard HTML5 video with keyboard shortcuts, others embed players in iframes,
|
|
4
2
|
* and many have unique quirks like auto-muting or requiring specific fullscreen methods. Rather than scattering site-specific conditionals throughout the streaming
|
|
5
3
|
* code, we define "site profiles" that describe each site's behavior in a declarative way.
|
|
@@ -21,13 +19,23 @@ import { getUserDomains } from "./userProfiles.js";
|
|
|
21
19
|
* channel's URL doesn't match the expected domain pattern, or when the same domain serves multiple channel types that need different handling.
|
|
22
20
|
*
|
|
23
21
|
* Profile resolution happens at stream startup and the resolved profile is passed through the entire streaming pipeline. The profile flags control:
|
|
24
|
-
* -
|
|
22
|
+
* - Which native fullscreen mechanism a profile may invoke (a keyboard shortcut, the player's own control, or the JavaScript API)
|
|
25
23
|
* - Whether to search for video elements in iframes
|
|
26
24
|
* - Which video element to select when multiple exist
|
|
27
25
|
* - Whether to wait for network activity to settle before playback
|
|
28
26
|
* - Whether to lock volume properties to prevent auto-muting
|
|
29
27
|
* - Whether the page is static content (no video element expected)
|
|
30
28
|
*
|
|
29
|
+
* Fullscreen is a family name here rather than an action. Each family names the native mechanism the site's player supports, and whether a profile actually
|
|
30
|
+
* invokes that mechanism depends on whose layout owns the player's box. Wherever the video sits in a page we can style, PrismCast fills the capture by styling
|
|
31
|
+
* the video to the viewport (applyVideoStyles in browser/video.ts), which works from a background tab and leaves whatever application the user has in front of
|
|
32
|
+
* them where it is. The recording's dimensions come from the quality preset's emulated capture surface, not from the browser window, so the styling costs the
|
|
33
|
+
* picture nothing there. The iframe families are the exception: styling applied inside the frame fills the frame, but the iframe element's box on the top page
|
|
34
|
+
* belongs to the site's own layout and nothing done from within reaches it, so those profiles invoke the native mechanism their players expose. A provider
|
|
35
|
+
* profile opts into the native path where its player requires one, and a custom profile turns a native trigger on for a single site; every one of them does it
|
|
36
|
+
* through the option that carries the mechanism - fullscreenKey for the keypress, fullscreenSelector for the player's own control, useRequestFullscreen for the
|
|
37
|
+
* JavaScript API.
|
|
38
|
+
*
|
|
31
39
|
* When adding support for a new streaming site, first check if an existing profile matches its behavior. Only create a new profile if the site requires unique
|
|
32
40
|
* handling not covered by existing profiles.
|
|
33
41
|
*/
|
|
@@ -35,20 +43,20 @@ import { getUserDomains } from "./userProfiles.js";
|
|
|
35
43
|
* behavior patterns rather than site ownership. This makes it easier to identify the right profile when adding new channels.
|
|
36
44
|
*
|
|
37
45
|
* Base profiles (no extends):
|
|
38
|
-
* - keyboardFullscreen: Sites
|
|
39
|
-
* - fullscreenApi: Sites
|
|
46
|
+
* - keyboardFullscreen: Sites whose player toggles fullscreen on the f key
|
|
47
|
+
* - fullscreenApi: Sites whose player exposes the JavaScript requestFullscreen() API
|
|
40
48
|
* - staticPage: Non-video pages captured as static visual content
|
|
41
49
|
*
|
|
42
50
|
* General derived profiles (extends a base, user-selectable):
|
|
43
|
-
* - keyboardDynamic: Keyboard
|
|
44
|
-
* - keyboardMultiVideo: Keyboard
|
|
45
|
-
* - keyboardIframe: Keyboard
|
|
51
|
+
* - keyboardDynamic: Keyboard-fullscreen players + network idle wait (extends keyboardFullscreen)
|
|
52
|
+
* - keyboardMultiVideo: Keyboard-fullscreen players + multi-video selection (extends keyboardFullscreen)
|
|
53
|
+
* - keyboardIframe: Keyboard-fullscreen players + iframe handling (extends keyboardFullscreen)
|
|
46
54
|
* - keyboardDynamicMultiVideo: Keyboard + network idle + multi-video selection via matchSelector (extends keyboardDynamic)
|
|
47
|
-
* - clickToPlayKeyboard: Click to start playback
|
|
48
|
-
* - brightcove: Brightcove players
|
|
49
|
-
* - clickToPlayApi: Click to start playback
|
|
50
|
-
* - embeddedPlayer: Iframe-based
|
|
51
|
-
* - apiMultiVideo: API
|
|
55
|
+
* - clickToPlayKeyboard: Click to start playback, keyboard-fullscreen player (extends keyboardFullscreen)
|
|
56
|
+
* - brightcove: Brightcove players + network idle wait (extends fullscreenApi)
|
|
57
|
+
* - clickToPlayApi: Click to start playback, API-fullscreen player (extends fullscreenApi)
|
|
58
|
+
* - embeddedPlayer: Iframe-based API-fullscreen players (extends fullscreenApi)
|
|
59
|
+
* - apiMultiVideo: API-fullscreen player + multi-video + auto-play tile channel selection via matchSelector (extends fullscreenApi)
|
|
52
60
|
* - embeddedDynamicMultiVideo: Embedded + network idle + multi-video selection (extends embeddedPlayer)
|
|
53
61
|
* - embeddedVolumeLock: Embedded + volume property locking (extends embeddedPlayer)
|
|
54
62
|
*
|
|
@@ -59,9 +67,9 @@ import { getUserDomains } from "./userProfiles.js";
|
|
|
59
67
|
* documentation.
|
|
60
68
|
*/
|
|
61
69
|
export const SITE_PROFILES = {
|
|
62
|
-
// Profile for multi-channel live TV pages that present a shelf of live channel tiles where clicking a tile auto-plays the selected channel.
|
|
63
|
-
//
|
|
64
|
-
//
|
|
70
|
+
// Profile for multi-channel live TV pages that present a shelf of live channel tiles where clicking a tile auto-plays the selected channel. Multi-video
|
|
71
|
+
// selection finds the actively playing stream after channel selection. Does not use iframe handling or network idle wait because these sites serve video
|
|
72
|
+
// directly in the main page and have persistent connections that prevent network idle. No playSelector - tile click is the final action.
|
|
65
73
|
apiMultiVideo: {
|
|
66
74
|
category: "multiChannel",
|
|
67
75
|
channelSelection: { matchSelector: "img[src*=\"{channel}\" i]", strategy: "tileClick" },
|
|
@@ -72,36 +80,37 @@ export const SITE_PROFILES = {
|
|
|
72
80
|
},
|
|
73
81
|
// Profile for sites using the Brightcove player platform. Brightcove players require waiting for network activity to settle before the video player is fully
|
|
74
82
|
// initialized. The player dynamically loads its configuration and stream manifest, so waitForNetworkIdle ensures we don't try to interact with the player before
|
|
75
|
-
// it's ready.
|
|
83
|
+
// it's ready. The player intercepts keyboard events for its own controls, so its native fullscreen is the JavaScript API. Uses selectReadyVideo because
|
|
76
84
|
// pages may have multiple video elements (preroll ads alongside the main player), and the ad video reaches readyState >= 3 before the main player.
|
|
77
85
|
brightcove: {
|
|
78
86
|
category: "api",
|
|
79
|
-
description: "Brightcove player sites requiring network idle wait
|
|
87
|
+
description: "Brightcove player sites requiring a network idle wait before the player is ready.",
|
|
80
88
|
extends: "fullscreenApi",
|
|
81
89
|
selectReadyVideo: true,
|
|
82
90
|
summary: "Brightcove players (network wait)",
|
|
83
91
|
waitForNetworkIdle: true
|
|
84
92
|
},
|
|
85
|
-
// Profile for sites that require clicking to start playback
|
|
86
|
-
// Set clickSelector in the profile or channel definition to specify a play button element; otherwise clicks the video element
|
|
93
|
+
// Profile for sites that require clicking to start playback, on players whose native fullscreen is the JavaScript API. Some players don't autoplay and need
|
|
94
|
+
// user interaction to begin. Set clickSelector in the profile or channel definition to specify a play button element; otherwise clicks the video element
|
|
95
|
+
// directly.
|
|
87
96
|
clickToPlayApi: {
|
|
88
97
|
category: "api",
|
|
89
98
|
clickToPlay: true,
|
|
90
|
-
description: "Sites requiring a click to start playback,
|
|
99
|
+
description: "Sites requiring a click to start playback, on players that expose the JavaScript fullscreen API. Use clickSelector for play button overlays.",
|
|
91
100
|
extends: "fullscreenApi",
|
|
92
|
-
summary: "Click-to-play (API
|
|
101
|
+
summary: "Click-to-play (fullscreen API player)"
|
|
93
102
|
},
|
|
94
|
-
// Profile for sites that require clicking to start playback,
|
|
95
|
-
// site
|
|
103
|
+
// Profile for sites that require clicking to start playback, on players that toggle fullscreen with the 'f' key. Use this rather than clickToPlayApi when the
|
|
104
|
+
// site's player offers no requestFullscreen() support. Set clickSelector in the profile or channel definition to specify a play button element.
|
|
96
105
|
clickToPlayKeyboard: {
|
|
97
106
|
category: "keyboard",
|
|
98
107
|
clickToPlay: true,
|
|
99
|
-
description: "Sites requiring a click to start playback,
|
|
108
|
+
description: "Sites requiring a click to start playback, on players that toggle fullscreen with the 'f' key. Use clickSelector for play button overlays.",
|
|
100
109
|
extends: "keyboardFullscreen",
|
|
101
|
-
summary: "Click-to-play ('f' key
|
|
110
|
+
summary: "Click-to-play ('f' key player)"
|
|
102
111
|
},
|
|
103
112
|
// Profile for iframe-embedded players that also have multiple video elements (ads, placeholders, main content) and need network activity to settle. The
|
|
104
|
-
// selectReadyVideo flag ensures we find the video with actual content rather than an ad placeholder.
|
|
113
|
+
// selectReadyVideo flag ensures we find the video with actual content rather than an ad placeholder. Extends embeddedPlayer, so it sits in the API family.
|
|
105
114
|
embeddedDynamicMultiVideo: {
|
|
106
115
|
category: "api",
|
|
107
116
|
description: "Iframe-embedded players with multiple video elements requiring network idle wait.",
|
|
@@ -110,14 +119,20 @@ export const SITE_PROFILES = {
|
|
|
110
119
|
summary: "Embedded multi-video (network wait)",
|
|
111
120
|
waitForNetworkIdle: true
|
|
112
121
|
},
|
|
113
|
-
|
|
114
|
-
|
|
122
|
+
/* Intermediate profile for sites that embed their player in an iframe and whose player exposes the JavaScript fullscreen API. Many modern players use this
|
|
123
|
+
* architecture to isolate ad content, and they answer to programmatic fullscreen rather than to keyboard shortcuts.
|
|
124
|
+
*
|
|
125
|
+
* This family calls the API rather than relying on the capture styling alone. The styling reaches the video inside the frame and fills it, but the iframe
|
|
126
|
+
* element's own box on the top page is whatever the site sized it to - a centered player a fraction of the capture surface on many of these sites - and no
|
|
127
|
+
* styling applied from inside the frame can grow it. The API call is what takes the picture past that box, and every profile extending this one inherits it.
|
|
128
|
+
*/
|
|
115
129
|
embeddedPlayer: {
|
|
116
130
|
category: "api",
|
|
117
|
-
description: "Intermediate base profile for iframe-embedded players
|
|
131
|
+
description: "Intermediate base profile for iframe-embedded players that expose the fullscreen API.",
|
|
118
132
|
extends: "fullscreenApi",
|
|
119
133
|
needsIframeHandling: true,
|
|
120
|
-
summary: "Embedded iframe players"
|
|
134
|
+
summary: "Embedded iframe players",
|
|
135
|
+
useRequestFullscreen: true
|
|
121
136
|
},
|
|
122
137
|
// Profile for iframe-embedded players that aggressively mute audio after page load - likely to comply with autoplay policies or for accessibility reasons. Some
|
|
123
138
|
// sites set video.muted = true even after we unmute it. The lockVolumeProperties flag uses Object.defineProperty to override the muted and volume getters/setters,
|
|
@@ -129,22 +144,20 @@ export const SITE_PROFILES = {
|
|
|
129
144
|
lockVolumeProperties: true,
|
|
130
145
|
summary: "Embedded players that auto-mute"
|
|
131
146
|
},
|
|
132
|
-
// Base profile for sites
|
|
133
|
-
// keyboard events for their own controls,
|
|
134
|
-
// handling and reliably enters fullscreen mode.
|
|
147
|
+
// Base profile for sites whose player exposes the JavaScript fullscreen API (element.requestFullscreen()) rather than a keyboard shortcut. Many modern players
|
|
148
|
+
// intercept keyboard events for their own controls, so the f key does nothing on them and the API is the mechanism a custom profile would reach for here.
|
|
135
149
|
fullscreenApi: {
|
|
136
150
|
category: "api",
|
|
137
|
-
description: "Base profile for sites
|
|
138
|
-
summary: "
|
|
139
|
-
useRequestFullscreen: true
|
|
151
|
+
description: "Base profile for sites whose player exposes the JavaScript fullscreen API.",
|
|
152
|
+
summary: "Player exposes the fullscreen API"
|
|
140
153
|
},
|
|
141
154
|
// Profile for sites that use keyboard fullscreen and also need time for network activity to settle before the player is fully initialized. These sites dynamically
|
|
142
155
|
// load their player and content. The waitForNetworkIdle flag ensures we don't try to interact with the player until all initial network requests have completed.
|
|
143
156
|
keyboardDynamic: {
|
|
144
157
|
category: "keyboard",
|
|
145
|
-
description: "
|
|
158
|
+
description: "Sites whose player toggles fullscreen with the 'f' key, requiring a network idle wait for dynamic content loading.",
|
|
146
159
|
extends: "keyboardFullscreen",
|
|
147
|
-
summary: "Dynamic sites ('f' key
|
|
160
|
+
summary: "Dynamic sites ('f' key player)",
|
|
148
161
|
waitForNetworkIdle: true
|
|
149
162
|
},
|
|
150
163
|
// Profile for multi-channel player pages that use keyboard fullscreen and need both network idle wait and multi-video selection. These pages present multiple
|
|
@@ -158,31 +171,36 @@ export const SITE_PROFILES = {
|
|
|
158
171
|
selectReadyVideo: true,
|
|
159
172
|
summary: "Multi-channel (thumbnail row, needs selector)"
|
|
160
173
|
},
|
|
161
|
-
// Base profile for sites
|
|
162
|
-
//
|
|
174
|
+
// Base profile for sites whose player toggles fullscreen on the f key, following YouTube-style keyboard shortcuts. This is the most common native mechanism
|
|
175
|
+
// and covers most standard video players, so it is the family a site lands in when its player offers no other fullscreen affordance.
|
|
163
176
|
keyboardFullscreen: {
|
|
164
177
|
category: "keyboard",
|
|
165
|
-
description: "Base profile for sites
|
|
166
|
-
|
|
167
|
-
summary: "Standard 'f' key fullscreen"
|
|
178
|
+
description: "Base profile for sites whose player toggles fullscreen on the f key.",
|
|
179
|
+
summary: "Player toggles fullscreen on 'f'"
|
|
168
180
|
},
|
|
169
|
-
|
|
170
|
-
|
|
181
|
+
/* Profile for iframe-embedded video players whose native fullscreen is the f key. The video element is not directly in the main page DOM, so we need to search
|
|
182
|
+
* through all frames to find it.
|
|
183
|
+
*
|
|
184
|
+
* The keypress is this family's answer to the same geometry the API answers for embeddedPlayer: the capture styling fills the frame with the video, but the
|
|
185
|
+
* iframe element's box on the top page is the site's to size and no styling from within the frame reaches it. Sending the key to the player is what takes the
|
|
186
|
+
* picture past that box and onto the full capture surface.
|
|
187
|
+
*/
|
|
171
188
|
keyboardIframe: {
|
|
172
189
|
category: "keyboard",
|
|
173
|
-
description: "
|
|
190
|
+
description: "Sites with video embedded in iframes, on players that toggle fullscreen with the 'f' key.",
|
|
174
191
|
extends: "keyboardFullscreen",
|
|
192
|
+
fullscreenKey: "f",
|
|
175
193
|
needsIframeHandling: true,
|
|
176
|
-
summary: "Iframe
|
|
194
|
+
summary: "Iframe sites ('f' key player)"
|
|
177
195
|
},
|
|
178
196
|
// Profile for sites using keyboard fullscreen that load multiple video elements simultaneously - placeholder videos, ad videos, and the main content. We must find
|
|
179
197
|
// the video element that has actually loaded playable data (readyState >= 3) rather than just taking the first video element.
|
|
180
198
|
keyboardMultiVideo: {
|
|
181
199
|
category: "keyboard",
|
|
182
|
-
description: "
|
|
200
|
+
description: "Sites with multiple video elements requiring ready-state selection, on players that toggle fullscreen with the 'f' key.",
|
|
183
201
|
extends: "keyboardFullscreen",
|
|
184
202
|
selectReadyVideo: true,
|
|
185
|
-
summary: "Multi-video sites ('f' key
|
|
203
|
+
summary: "Multi-video sites ('f' key player)"
|
|
186
204
|
},
|
|
187
205
|
// Profile for non-video pages captured as static visual content. Examples include weather displays (weatherscan.net), maps (windy.com), and diagnostic pages.
|
|
188
206
|
// The staticCapture flag tells the streaming code to navigate directly and skip video element detection, playback initialization, and health monitoring.
|
|
@@ -209,10 +227,10 @@ export const PROVIDER_PROFILES = {
|
|
|
209
227
|
summary: "DisneyNOW player"
|
|
210
228
|
},
|
|
211
229
|
// Profile for Disney+ live channels. The live channel shelf displays tiles with network logos. Clicking a tile opens an entity modal with a "WATCH LIVE" button
|
|
212
|
-
// (playSelector) that must be clicked to start the stream.
|
|
213
|
-
//
|
|
214
|
-
//
|
|
215
|
-
//
|
|
230
|
+
// (playSelector) that must be clicked to start the stream. The player uses Web Components with Shadow DOM for its controls, and its native <toggle-fullscreen>
|
|
231
|
+
// button sits behind that Shadow DOM boundary where Puppeteer cannot click it, which is why the profile carries no fullscreenSelector. The controls toolbar is
|
|
232
|
+
// hidden via hideSelector to prevent it from appearing in the captured stream. Uses selectReadyVideo because the page has multiple video elements (previews,
|
|
233
|
+
// ads, main content).
|
|
216
234
|
disneyPlus: {
|
|
217
235
|
category: "multiChannel",
|
|
218
236
|
channelSelection: {
|
|
@@ -228,8 +246,8 @@ export const PROVIDER_PROFILES = {
|
|
|
228
246
|
};
|
|
229
247
|
/* This mapping associates domain keys with site profiles, service display names, and service filter tags. Most keys are concise second-level domains
|
|
230
248
|
* (e.g., "nbc.com", "foodnetwork.com") matching the output of extractDomain(). Keys can also be full hostnames (e.g., "tv.youtube.com") for subdomain-specific
|
|
231
|
-
* overrides -
|
|
232
|
-
* when the URL matches.
|
|
249
|
+
* overrides - domain resolution in profiles.ts tries the full hostname first, then falls back to the concise domain, so "tv.youtube.com" takes precedence over
|
|
250
|
+
* "youtube.com" when the URL matches.
|
|
233
251
|
*
|
|
234
252
|
* Domains without a profile entry will use DEFAULT_SITE_PROFILE, which works for most standard video players. Domains with no service field configured, or with
|
|
235
253
|
* no entry in this map at all, will display the concise domain string (e.g., a hypothetical "example.com") in the UI. Entries with a serviceTag participate in
|
|
@@ -239,11 +257,12 @@ export const PROVIDER_PROFILES = {
|
|
|
239
257
|
export const DOMAIN_CONFIG = {
|
|
240
258
|
"abc.com": { profile: "keyboardMultiVideo", service: "ABC.com" },
|
|
241
259
|
"aetv.com": { profile: "fullscreenApi", service: "A&E" },
|
|
242
|
-
"bet.com": { profile: "fullscreenApi", service: "BET.com" },
|
|
243
260
|
"c-span.org": { dismissSelector: ".videoAdUiSkipButtonExperimentalText", profile: "brightcove", service: "C-SPAN.org" },
|
|
244
261
|
"cbs.com": { dismissSelector: "#mvpd__getstarted", profile: "keyboardIframe", service: "CBS.com" },
|
|
245
262
|
"cnbc.com": { profile: "fullscreenApi", service: "CNBC.com" },
|
|
246
|
-
|
|
263
|
+
// CNN.com renders a Piano subscription offer into a fixed bar at the bottom of the page that stacks above the fullscreened video, so hideSelector keeps it out
|
|
264
|
+
// of the capture. The bar's close control sits inside a cross-origin checkout iframe, which a synthetic dismissal click cannot reach.
|
|
265
|
+
"cnn.com": { hideSelector: "#piano-bottom-bar", profile: "fullscreenApi", service: "CNN.com" },
|
|
247
266
|
"disneynow.com": { profile: "disneyNow", service: "DisneyNOW" },
|
|
248
267
|
"disneyplus.com": { iconUrl: "https://static-assets.bamgrid.com/product/disneyplus/favicons/apple-touch-icon-aurora.d3af81fe0571b495a3c80ff8c3d0c8e7.png",
|
|
249
268
|
profile: "disneyPlus", service: "Disney+", serviceTag: "disneyplus" },
|
|
@@ -292,41 +311,6 @@ export const DOMAIN_CONFIG = {
|
|
|
292
311
|
"xfinity.com": { profile: "xfinityStream", service: "Xfinity Stream", serviceTag: "xfinity" },
|
|
293
312
|
"youtube.com": { profile: "keyboardDynamic", service: "YouTube" }
|
|
294
313
|
};
|
|
295
|
-
/**
|
|
296
|
-
* Resolves a URL to its domain configuration entry by precedence: user full hostname, then builtin full hostname (for subdomain-specific overrides), then user
|
|
297
|
-
* concise domain, then builtin concise domain (last two hostname parts). User mappings override builtins, and full-hostname entries like "tv.youtube.com" override
|
|
298
|
-
* the base "youtube.com" entry.
|
|
299
|
-
* @param url - The URL to resolve a domain configuration for.
|
|
300
|
-
* @returns The matching DomainConfig entry, or undefined if no match is found.
|
|
301
|
-
*/
|
|
302
|
-
export function getDomainConfig(url) {
|
|
303
|
-
// User domain mappings take precedence over builtin mappings. The lookup order is: user full hostname -> builtin full hostname -> user concise domain ->
|
|
304
|
-
// builtin concise domain. This allows users to override specific subdomain mappings or base domain mappings independently.
|
|
305
|
-
const userDomains = getUserDomains();
|
|
306
|
-
try {
|
|
307
|
-
const hostname = new URL(url).hostname;
|
|
308
|
-
// Try user domains for the full hostname first.
|
|
309
|
-
const userHostnameMatch = userDomains[hostname];
|
|
310
|
-
if (userHostnameMatch) {
|
|
311
|
-
return userHostnameMatch;
|
|
312
|
-
}
|
|
313
|
-
// Try the builtin full hostname for subdomain-specific overrides (e.g., "tv.youtube.com" before "youtube.com").
|
|
314
|
-
const hostnameMatch = DOMAIN_CONFIG[hostname];
|
|
315
|
-
if (hostnameMatch) {
|
|
316
|
-
return hostnameMatch;
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
catch {
|
|
320
|
-
// Invalid URL - fall through to concise domain lookup.
|
|
321
|
-
}
|
|
322
|
-
const conciseDomain = extractDomain(url);
|
|
323
|
-
// Try user domains for the concise domain.
|
|
324
|
-
const userConciseMatch = userDomains[conciseDomain];
|
|
325
|
-
if (userConciseMatch) {
|
|
326
|
-
return userConciseMatch;
|
|
327
|
-
}
|
|
328
|
-
return DOMAIN_CONFIG[conciseDomain];
|
|
329
|
-
}
|
|
330
314
|
// Provider module profiles registered at import time via registerProviderModuleProfile(). Provider modules define their profiles alongside their tuning code and
|
|
331
315
|
// register them here so the profile resolution system can find them without importing from browser/channelSelection.ts (which would create circular dependencies).
|
|
332
316
|
const providerModuleProfiles = new Map();
|
|
@@ -380,8 +364,8 @@ export function getRegisteredProviderModuleProfiles() {
|
|
|
380
364
|
* - Don't require waiting for network activity
|
|
381
365
|
* - Have video content (not static pages)
|
|
382
366
|
*
|
|
383
|
-
*
|
|
384
|
-
*
|
|
367
|
+
* All three native fullscreen triggers are off here, and that is the default every builtin profile inherits: the capture is filled by CSS styling, and a custom
|
|
368
|
+
* profile is where a single site turns a trigger on. The module walkthrough above states the rule in full.
|
|
385
369
|
*/
|
|
386
370
|
export const DEFAULT_SITE_PROFILE = {
|
|
387
371
|
// No channel selection - single-channel sites don't need it.
|
|
@@ -394,9 +378,9 @@ export const DEFAULT_SITE_PROFILE = {
|
|
|
394
378
|
clickToPlay: false,
|
|
395
379
|
// No dismiss selector - most sites don't show intermittent modals.
|
|
396
380
|
dismissSelector: null,
|
|
397
|
-
// No fullscreen key -
|
|
381
|
+
// No fullscreen key - CSS styling fills the capture, so no keypress is sent.
|
|
398
382
|
fullscreenKey: null,
|
|
399
|
-
// No fullscreen button selector -
|
|
383
|
+
// No fullscreen button selector - a player's own fullscreen control is clicked only where a profile names one.
|
|
400
384
|
fullscreenSelector: null,
|
|
401
385
|
// No overlay hiding - most sites don't have persistent overlays during fullscreen.
|
|
402
386
|
hideSelector: null,
|
|
@@ -410,7 +394,7 @@ export const DEFAULT_SITE_PROFILE = {
|
|
|
410
394
|
selectReadyVideo: false,
|
|
411
395
|
// Not a static page capture - wait for video element and monitor playback.
|
|
412
396
|
staticCapture: false,
|
|
413
|
-
//
|
|
397
|
+
// No requestFullscreen() call - CSS styling fills the capture.
|
|
414
398
|
useRequestFullscreen: false,
|
|
415
399
|
// No per-domain video timeout override - use the global default.
|
|
416
400
|
videoTimeout: null,
|
package/dist/config/sites.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sites.js","sourceRoot":"","sources":["../../src/config/sites.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sites.js","sourceRoot":"","sources":["../../src/config/sites.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Channel, ChannelDelta,
|
|
1
|
+
import type { Channel, ChannelDelta, ChannelListingEntry, ChannelMap, ChannelSortField, CustomizableField, ResolvedChannel, ResolvedChannelMap, SortDirection, StoredChannel, StoredChannelMap } from "../types/index.ts";
|
|
2
2
|
import type { Migration, ValidationIssue } from "./persistence.ts";
|
|
3
3
|
/**
|
|
4
4
|
* User-defined channel with all channel properties.
|
|
@@ -23,7 +23,6 @@ export interface UserChannelsLoadResult {
|
|
|
23
23
|
channels: StoredChannelMap;
|
|
24
24
|
parseError: boolean;
|
|
25
25
|
parseErrorMessage?: string;
|
|
26
|
-
recoveredFromBackup: boolean;
|
|
27
26
|
serviceSelections: Record<string, string>;
|
|
28
27
|
tagRegistry: TagRegistry;
|
|
29
28
|
}
|
|
@@ -174,20 +173,6 @@ declare function buildResolvedCanonicals(stored: StoredChannelMap): ResolvedChan
|
|
|
174
173
|
* @returns The entry with null-valued fields removed.
|
|
175
174
|
*/
|
|
176
175
|
declare function stripNulls(stored: StoredChannel): StoredChannel;
|
|
177
|
-
/**
|
|
178
|
-
* Returns the identity-only subset of a ChannelDelta - the fields enumerated by CHANNEL_IDENTITY_KEYS. Used by the per-field write router (PUT handler) and
|
|
179
|
-
* the storage normalizer's heal path to split a full delta into identity-only and binding-only halves so each half is routed to the correct stored entry.
|
|
180
|
-
* @param delta - The delta to project.
|
|
181
|
-
* @returns A new delta with only identity fields retained.
|
|
182
|
-
*/
|
|
183
|
-
export declare function pickIdentityFields(delta: ChannelDelta): ChannelDelta;
|
|
184
|
-
/**
|
|
185
|
-
* Returns the binding-only subset of a ChannelDelta - the fields enumerated by CHANNEL_BINDING_KEYS. Peer to pickIdentityFields; together they cover the
|
|
186
|
-
* delta surface and partition it cleanly.
|
|
187
|
-
* @param delta - The delta to project.
|
|
188
|
-
* @returns A new delta with only binding fields retained.
|
|
189
|
-
*/
|
|
190
|
-
export declare function pickBindingFields(delta: ChannelDelta): ChannelDelta;
|
|
191
176
|
/**
|
|
192
177
|
* Applies a binding delta to an existing variant entry with replace semantics: any prior binding fields on the existing entry are stripped first, then the
|
|
193
178
|
* new delta's binding fields are applied. Non-binding fields (notably canonicalKey) on the existing entry are preserved. Returns null when the resulting
|
|
@@ -348,6 +333,27 @@ export declare function mutateChannels(fn: (data: ChannelsFileData) => void): Pr
|
|
|
348
333
|
* @throws FileStoreParseError if the channels file contains invalid JSON.
|
|
349
334
|
*/
|
|
350
335
|
export declare function runStartupChannelsCleanup(staleSelections: readonly string[]): Promise<void>;
|
|
336
|
+
/**
|
|
337
|
+
* Persists a single service selection through the file store. Goes through mutateChannels so the file write, integrity validation, and post-mutate cache
|
|
338
|
+
* hydration all run uniformly - after the call returns, both disk and the service-selection cache reflect the new value. Selecting the canonical key itself (the
|
|
339
|
+
* default service) deletes the selection rather than storing a redundant entry.
|
|
340
|
+
*
|
|
341
|
+
* For bulk updates, prefer mutateServiceSelections to coalesce multiple changes into a single atomic write.
|
|
342
|
+
* @param canonicalKey - The canonical channel key.
|
|
343
|
+
* @param serviceKey - The selected service key. When equal to canonicalKey, the selection is removed.
|
|
344
|
+
* @throws FileStoreParseError if channels.json contains invalid JSON and the .bak rotation is also unparseable.
|
|
345
|
+
*/
|
|
346
|
+
export declare function setServiceSelection(canonicalKey: string, serviceKey: string): Promise<void>;
|
|
347
|
+
/**
|
|
348
|
+
* Bulk variant of setServiceSelection. Applies multiple selection changes inside a single mutate transaction so all changes land atomically with one disk
|
|
349
|
+
* write. Use this whenever a single user action (e.g., browse-modal submit, bulk service assignment) updates more than one selection - serial awaits over
|
|
350
|
+
* setServiceSelection would produce N writes and N intermediate disk states.
|
|
351
|
+
*
|
|
352
|
+
* Each entry follows the same canonical-key-equals-service-key convention as setServiceSelection: when the value matches the key, the selection is removed.
|
|
353
|
+
* @param updates - Object mapping canonical channel keys to their new service keys.
|
|
354
|
+
* @throws FileStoreParseError if channels.json contains invalid JSON and the .bak rotation is also unparseable.
|
|
355
|
+
*/
|
|
356
|
+
export declare function mutateServiceSelections(updates: Record<string, string>): Promise<void>;
|
|
351
357
|
/**
|
|
352
358
|
* Deletes a user channel by key.
|
|
353
359
|
* @param key - The channel key to delete.
|
|
@@ -399,18 +405,6 @@ declare function collectLegacyVariantStamps(channels: StoredChannelMap): string[
|
|
|
399
405
|
* Initializes user channels by loading them from the file. This should be called once at server startup. Also builds service groups and loads service selections.
|
|
400
406
|
*/
|
|
401
407
|
export declare function initializeUserChannels(): Promise<void>;
|
|
402
|
-
/**
|
|
403
|
-
* Extracts the identity-only subset of a channel. Used by resolveVariant and normalizeChannelDeltas to compute the inheritance base for variants: a variant
|
|
404
|
-
* inherits identity from its canonical but must contribute its own service binding (URL, channelSelector, profile, etc.) - the canonical's binding is for the
|
|
405
|
-
* canonical service and is structurally wrong for any other service.
|
|
406
|
-
*
|
|
407
|
-
* The fields copied are exactly those listed in CHANNEL_IDENTITY_KEYS, the single source of truth for the identity partition. Array-valued fields are shallow-
|
|
408
|
-
* copied so downstream mutation cannot leak back into the source.
|
|
409
|
-
* @param channel - The channel to extract identity from. Typed as ResolvedChannel because that is the shape after canonical resolution; CanonicalChannel is
|
|
410
|
-
* structurally compatible.
|
|
411
|
-
* @returns A new ChannelIdentity object with just the identity fields populated.
|
|
412
|
-
*/
|
|
413
|
-
export declare function pickIdentity(channel: ResolvedChannel): ChannelIdentity;
|
|
414
408
|
/**
|
|
415
409
|
* Overlays a stored channel (full definition or delta) onto a base. Allowlisted delta fields in the stored entry override the base: a null value clears the
|
|
416
410
|
* field from the resolved object, a defined value replaces it, and missing fields inherit from the base. Non-delta fields on the stored entry (e.g.,
|
|
@@ -889,4 +883,3 @@ export declare const __internalForTests: {
|
|
|
889
883
|
warnDanglingCanonical: typeof warnDanglingCanonical;
|
|
890
884
|
};
|
|
891
885
|
export {};
|
|
892
|
-
//# sourceMappingURL=userChannels.d.ts.map
|