prismcast 1.10.2 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.d.ts +6 -3
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +140 -86
- package/dist/app.js.map +1 -1
- package/dist/browser/blockedPage.d.ts +80 -0
- package/dist/browser/blockedPage.d.ts.map +1 -0
- package/dist/browser/blockedPage.js +209 -0
- package/dist/browser/blockedPage.js.map +1 -0
- package/dist/browser/browserSupervisor.d.ts +80 -0
- package/dist/browser/browserSupervisor.d.ts.map +1 -0
- package/dist/browser/browserSupervisor.js +186 -0
- package/dist/browser/browserSupervisor.js.map +1 -0
- package/dist/browser/cdp.d.ts +1 -0
- package/dist/browser/cdp.d.ts.map +1 -0
- package/dist/browser/cdp.js +6 -5
- package/dist/browser/cdp.js.map +1 -1
- package/dist/browser/channelSelection.d.ts +45 -14
- package/dist/browser/channelSelection.d.ts.map +1 -0
- package/dist/browser/channelSelection.js +81 -18
- package/dist/browser/channelSelection.js.map +1 -1
- package/dist/browser/consent.d.ts +152 -0
- package/dist/browser/consent.d.ts.map +1 -0
- package/dist/browser/consent.js +418 -0
- package/dist/browser/consent.js.map +1 -0
- package/dist/browser/display.d.ts +1 -0
- package/dist/browser/display.d.ts.map +1 -0
- package/dist/browser/hlsPlaylistObserver.d.ts +55 -0
- package/dist/browser/hlsPlaylistObserver.d.ts.map +1 -0
- package/dist/browser/hlsPlaylistObserver.js +132 -0
- package/dist/browser/hlsPlaylistObserver.js.map +1 -0
- package/dist/browser/index.d.ts +67 -40
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +508 -300
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/launchGovernor.d.ts +89 -0
- package/dist/browser/launchGovernor.d.ts.map +1 -0
- package/dist/browser/launchGovernor.js +96 -0
- package/dist/browser/launchGovernor.js.map +1 -0
- package/dist/browser/login.d.ts +10 -2
- package/dist/browser/login.d.ts.map +1 -0
- package/dist/browser/login.js +36 -5
- package/dist/browser/login.js.map +1 -1
- package/dist/browser/manifestInterceptor.d.ts +102 -49
- package/dist/browser/manifestInterceptor.d.ts.map +1 -0
- package/dist/browser/manifestInterceptor.js +219 -237
- package/dist/browser/manifestInterceptor.js.map +1 -1
- package/dist/browser/pageStaleness.d.ts +30 -0
- package/dist/browser/pageStaleness.d.ts.map +1 -0
- package/dist/browser/pageStaleness.js +76 -0
- package/dist/browser/pageStaleness.js.map +1 -0
- package/dist/browser/precaching.d.ts +95 -3
- package/dist/browser/precaching.d.ts.map +1 -0
- package/dist/browser/precaching.js +499 -65
- package/dist/browser/precaching.js.map +1 -1
- package/dist/browser/tabNetworkObserver.d.ts +49 -0
- package/dist/browser/tabNetworkObserver.d.ts.map +1 -0
- package/dist/browser/tabNetworkObserver.js +144 -0
- package/dist/browser/tabNetworkObserver.js.map +1 -0
- package/dist/browser/tuning/cache.d.ts +61 -0
- package/dist/browser/tuning/cache.d.ts.map +1 -0
- package/dist/browser/tuning/cache.js +62 -0
- package/dist/browser/tuning/cache.js.map +1 -0
- package/dist/browser/tuning/comcastPolymer.d.ts +3 -2
- package/dist/browser/tuning/comcastPolymer.d.ts.map +1 -0
- package/dist/browser/tuning/comcastPolymer.js +79 -102
- package/dist/browser/tuning/comcastPolymer.js.map +1 -1
- package/dist/browser/tuning/cox.d.ts +1 -0
- package/dist/browser/tuning/cox.d.ts.map +1 -0
- package/dist/browser/tuning/directv.d.ts +1 -0
- package/dist/browser/tuning/directv.d.ts.map +1 -0
- package/dist/browser/tuning/directv.js +52 -46
- package/dist/browser/tuning/directv.js.map +1 -1
- package/dist/browser/tuning/fox.d.ts +1 -0
- package/dist/browser/tuning/fox.d.ts.map +1 -0
- package/dist/browser/tuning/fox.js +13 -12
- package/dist/browser/tuning/fox.js.map +1 -1
- package/dist/browser/tuning/gridSearch.d.ts +68 -0
- package/dist/browser/tuning/gridSearch.d.ts.map +1 -0
- package/dist/browser/tuning/gridSearch.js +85 -0
- package/dist/browser/tuning/gridSearch.js.map +1 -0
- package/dist/browser/tuning/hbo.d.ts +1 -0
- package/dist/browser/tuning/hbo.d.ts.map +1 -0
- package/dist/browser/tuning/hbo.js +73 -45
- package/dist/browser/tuning/hbo.js.map +1 -1
- package/dist/browser/tuning/hulu.d.ts +1 -0
- package/dist/browser/tuning/hulu.d.ts.map +1 -0
- package/dist/browser/tuning/hulu.js +128 -173
- package/dist/browser/tuning/hulu.js.map +1 -1
- package/dist/browser/tuning/shared.d.ts +75 -5
- package/dist/browser/tuning/shared.d.ts.map +1 -0
- package/dist/browser/tuning/shared.js +216 -6
- package/dist/browser/tuning/shared.js.map +1 -1
- package/dist/browser/tuning/sling.d.ts +1 -0
- package/dist/browser/tuning/sling.d.ts.map +1 -0
- package/dist/browser/tuning/sling.js +105 -126
- package/dist/browser/tuning/sling.js.map +1 -1
- package/dist/browser/tuning/spectrum.d.ts +1 -0
- package/dist/browser/tuning/spectrum.d.ts.map +1 -0
- package/dist/browser/tuning/spectrum.js +80 -125
- package/dist/browser/tuning/spectrum.js.map +1 -1
- package/dist/browser/tuning/thumbnailRow.d.ts +1 -0
- package/dist/browser/tuning/thumbnailRow.d.ts.map +1 -0
- package/dist/browser/tuning/thumbnailRow.js +8 -2
- package/dist/browser/tuning/thumbnailRow.js.map +1 -1
- package/dist/browser/tuning/tileClick.d.ts +1 -0
- package/dist/browser/tuning/tileClick.d.ts.map +1 -0
- package/dist/browser/tuning/tileClick.js +3 -2
- package/dist/browser/tuning/tileClick.js.map +1 -1
- package/dist/browser/tuning/xfinity.d.ts +1 -0
- package/dist/browser/tuning/xfinity.d.ts.map +1 -0
- package/dist/browser/tuning/youtubeTv.d.ts +1 -0
- package/dist/browser/tuning/youtubeTv.d.ts.map +1 -0
- package/dist/browser/tuning/youtubeTv.js +74 -127
- package/dist/browser/tuning/youtubeTv.js.map +1 -1
- package/dist/browser/video.d.ts +54 -14
- package/dist/browser/video.d.ts.map +1 -0
- package/dist/browser/video.js +296 -138
- package/dist/browser/video.js.map +1 -1
- package/dist/channels/index.d.ts +1 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/index.js +12 -9
- package/dist/channels/index.js.map +1 -1
- package/dist/config/channelForm.d.ts +15 -1
- package/dist/config/channelForm.d.ts.map +1 -0
- package/dist/config/channelForm.js +28 -12
- package/dist/config/channelForm.js.map +1 -1
- package/dist/config/consistencyProbe.d.ts +1 -0
- package/dist/config/consistencyProbe.d.ts.map +1 -0
- package/dist/config/consistencyProbe.js +27 -21
- package/dist/config/consistencyProbe.js.map +1 -1
- package/dist/config/health.d.ts +41 -8
- package/dist/config/health.d.ts.map +1 -0
- package/dist/config/health.js +189 -38
- package/dist/config/health.js.map +1 -1
- package/dist/config/index.d.ts +55 -3
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +320 -69
- package/dist/config/index.js.map +1 -1
- package/dist/config/paths.d.ts +10 -9
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +11 -11
- package/dist/config/paths.js.map +1 -1
- package/dist/config/persistence.context.d.ts +1 -0
- package/dist/config/persistence.context.d.ts.map +1 -0
- package/dist/config/persistence.d.ts +13 -10
- package/dist/config/persistence.d.ts.map +1 -0
- package/dist/config/persistence.js +40 -21
- package/dist/config/persistence.js.map +1 -1
- package/dist/config/presets.d.ts +1 -0
- package/dist/config/presets.d.ts.map +1 -0
- package/dist/config/profiles.d.ts +22 -15
- package/dist/config/profiles.d.ts.map +1 -0
- package/dist/config/profiles.js +81 -47
- package/dist/config/profiles.js.map +1 -1
- package/dist/config/providerLineups.d.ts +47 -0
- package/dist/config/providerLineups.d.ts.map +1 -0
- package/dist/config/providerLineups.js +137 -0
- package/dist/config/providerLineups.js.map +1 -0
- package/dist/config/reactivity.d.ts +84 -0
- package/dist/config/reactivity.d.ts.map +1 -0
- package/dist/config/reactivity.js +226 -0
- package/dist/config/reactivity.js.map +1 -0
- package/dist/config/servicePacks.d.ts +18 -2
- package/dist/config/servicePacks.d.ts.map +1 -0
- package/dist/config/servicePacks.js +53 -11
- package/dist/config/servicePacks.js.map +1 -1
- package/dist/config/services.d.ts +21 -15
- package/dist/config/services.d.ts.map +1 -0
- package/dist/config/services.js +35 -24
- package/dist/config/services.js.map +1 -1
- package/dist/config/sites.d.ts +6 -4
- package/dist/config/sites.d.ts.map +1 -0
- package/dist/config/sites.js +15 -11
- package/dist/config/sites.js.map +1 -1
- package/dist/config/userChannels.d.ts +129 -30
- package/dist/config/userChannels.d.ts.map +1 -0
- package/dist/config/userChannels.js +333 -68
- package/dist/config/userChannels.js.map +1 -1
- package/dist/config/userConfig.d.ts +14 -9
- package/dist/config/userConfig.d.ts.map +1 -0
- package/dist/config/userConfig.js +87 -25
- package/dist/config/userConfig.js.map +1 -1
- package/dist/config/userProfiles.d.ts +10 -6
- package/dist/config/userProfiles.d.ts.map +1 -0
- package/dist/config/userProfiles.js +64 -39
- package/dist/config/userProfiles.js.map +1 -1
- package/dist/hdhr/channelMap.d.ts +1 -0
- package/dist/hdhr/channelMap.d.ts.map +1 -0
- package/dist/hdhr/deviceId.d.ts +1 -0
- package/dist/hdhr/deviceId.d.ts.map +1 -0
- package/dist/hdhr/discover.d.ts +1 -0
- package/dist/hdhr/discover.d.ts.map +1 -0
- package/dist/hdhr/discover.js +48 -47
- package/dist/hdhr/discover.js.map +1 -1
- package/dist/hdhr/getHandlers.d.ts +29 -0
- package/dist/hdhr/getHandlers.d.ts.map +1 -0
- package/dist/hdhr/getHandlers.js +196 -0
- package/dist/hdhr/getHandlers.js.map +1 -0
- package/dist/hdhr/identity.d.ts +36 -0
- package/dist/hdhr/identity.d.ts.map +1 -0
- package/dist/hdhr/identity.js +51 -0
- package/dist/hdhr/identity.js.map +1 -0
- package/dist/hdhr/index.d.ts +22 -4
- package/dist/hdhr/index.d.ts.map +1 -0
- package/dist/hdhr/index.js +229 -54
- package/dist/hdhr/index.js.map +1 -1
- package/dist/hdhr/protocol.d.ts +75 -0
- package/dist/hdhr/protocol.d.ts.map +1 -0
- package/dist/hdhr/protocol.js +264 -0
- package/dist/hdhr/protocol.js.map +1 -0
- package/dist/hdhr/tunerState.d.ts +24 -0
- package/dist/hdhr/tunerState.d.ts.map +1 -0
- package/dist/hdhr/tunerState.js +67 -0
- package/dist/hdhr/tunerState.js.map +1 -0
- package/dist/hdhr/udp.d.ts +43 -0
- package/dist/hdhr/udp.d.ts.map +1 -0
- package/dist/hdhr/udp.js +277 -0
- package/dist/hdhr/udp.js.map +1 -0
- package/dist/identity.d.ts +1 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +13 -11
- package/dist/identity.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -12
- package/dist/index.js.map +1 -1
- package/dist/native/codecInference.d.ts +1 -0
- package/dist/native/codecInference.d.ts.map +1 -0
- package/dist/native/codecInference.js +50 -5
- package/dist/native/codecInference.js.map +1 -1
- package/dist/native/decrypt.d.ts +6 -2
- package/dist/native/decrypt.d.ts.map +1 -0
- package/dist/native/decrypt.js +15 -8
- package/dist/native/decrypt.js.map +1 -1
- package/dist/native/index.d.ts +40 -17
- package/dist/native/index.d.ts.map +1 -0
- package/dist/native/index.js +281 -120
- package/dist/native/index.js.map +1 -1
- package/dist/native/probe.d.ts +114 -18
- package/dist/native/probe.d.ts.map +1 -0
- package/dist/native/probe.js +452 -115
- package/dist/native/probe.js.map +1 -1
- package/dist/native/proxy.d.ts +57 -5
- package/dist/native/proxy.d.ts.map +1 -0
- package/dist/native/proxy.js +604 -170
- package/dist/native/proxy.js.map +1 -1
- package/dist/native/tokenExpiry.d.ts +1 -0
- package/dist/native/tokenExpiry.d.ts.map +1 -0
- package/dist/native/tokenExpiry.js +1 -1
- package/dist/routes/assets.d.ts +1 -0
- package/dist/routes/assets.d.ts.map +1 -0
- package/dist/routes/assets.js +4 -2
- package/dist/routes/assets.js.map +1 -1
- package/dist/routes/auth.d.ts +1 -0
- package/dist/routes/auth.d.ts.map +1 -0
- package/dist/routes/auth.js +0 -1
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/cdp.d.ts +5 -5
- package/dist/routes/cdp.d.ts.map +1 -0
- package/dist/routes/cdp.js +59 -20
- package/dist/routes/cdp.js.map +1 -1
- package/dist/routes/channels.d.ts +1 -0
- package/dist/routes/channels.d.ts.map +1 -0
- package/dist/routes/channels.js +2 -1
- package/dist/routes/channels.js.map +1 -1
- package/dist/routes/clientActions.d.ts +98 -0
- package/dist/routes/clientActions.d.ts.map +1 -0
- package/dist/routes/clientActions.js +113 -0
- package/dist/routes/clientActions.js.map +1 -0
- package/dist/routes/components.d.ts +5 -3
- package/dist/routes/components.d.ts.map +1 -0
- package/dist/routes/components.js +36 -39
- package/dist/routes/components.js.map +1 -1
- package/dist/routes/config/channels/endpoints/browse.d.ts +1 -0
- package/dist/routes/config/channels/endpoints/browse.d.ts.map +1 -0
- package/dist/routes/config/channels/endpoints/browse.js +23 -10
- package/dist/routes/config/channels/endpoints/browse.js.map +1 -1
- package/dist/routes/config/channels/endpoints/bulk.d.ts +1 -0
- package/dist/routes/config/channels/endpoints/bulk.d.ts.map +1 -0
- package/dist/routes/config/channels/endpoints/bulk.js +5 -3
- package/dist/routes/config/channels/endpoints/bulk.js.map +1 -1
- package/dist/routes/config/channels/endpoints/crud.d.ts +1 -0
- package/dist/routes/config/channels/endpoints/crud.d.ts.map +1 -0
- package/dist/routes/config/channels/endpoints/crud.js +85 -93
- package/dist/routes/config/channels/endpoints/crud.js.map +1 -1
- package/dist/routes/config/channels/endpoints/importExport.d.ts +1 -0
- package/dist/routes/config/channels/endpoints/importExport.d.ts.map +1 -0
- package/dist/routes/config/channels/endpoints/importExport.js +6 -3
- package/dist/routes/config/channels/endpoints/importExport.js.map +1 -1
- package/dist/routes/config/channels/endpoints/predefined.d.ts +1 -0
- package/dist/routes/config/channels/endpoints/predefined.d.ts.map +1 -0
- package/dist/routes/config/channels/endpoints/prefs.d.ts +1 -0
- package/dist/routes/config/channels/endpoints/prefs.d.ts.map +1 -0
- package/dist/routes/config/channels/endpoints/prefs.js +2 -1
- package/dist/routes/config/channels/endpoints/prefs.js.map +1 -1
- package/dist/routes/config/channels/endpoints/service.d.ts +2 -1
- package/dist/routes/config/channels/endpoints/service.d.ts.map +1 -0
- package/dist/routes/config/channels/endpoints/service.js +3 -1
- package/dist/routes/config/channels/endpoints/service.js.map +1 -1
- package/dist/routes/config/channels/endpoints/tags.d.ts +1 -0
- package/dist/routes/config/channels/endpoints/tags.d.ts.map +1 -0
- package/dist/routes/config/channels/endpoints/tags.js +13 -7
- package/dist/routes/config/channels/endpoints/tags.js.map +1 -1
- package/dist/routes/config/channels/healthBridge.d.ts +24 -0
- package/dist/routes/config/channels/healthBridge.d.ts.map +1 -0
- package/dist/routes/config/channels/healthBridge.js +71 -0
- package/dist/routes/config/channels/healthBridge.js.map +1 -0
- package/dist/routes/config/channels/http/handler.d.ts +1 -0
- package/dist/routes/config/channels/http/handler.d.ts.map +1 -0
- package/dist/routes/config/channels/http/playlistHint.d.ts +2 -1
- package/dist/routes/config/channels/http/playlistHint.d.ts.map +1 -0
- package/dist/routes/config/channels/http/playlistHint.js +16 -2
- package/dist/routes/config/channels/http/playlistHint.js.map +1 -1
- package/dist/routes/config/channels/http/serviceWarning.d.ts +4 -2
- package/dist/routes/config/channels/http/serviceWarning.d.ts.map +1 -0
- package/dist/routes/config/channels/http/serviceWarning.js +3 -2
- package/dist/routes/config/channels/http/serviceWarning.js.map +1 -1
- package/dist/routes/config/channels/index.d.ts +1 -0
- package/dist/routes/config/channels/index.d.ts.map +1 -0
- package/dist/routes/config/channels/setup.d.ts +1 -0
- package/dist/routes/config/channels/setup.d.ts.map +1 -0
- package/dist/routes/config/channels/table.d.ts +3 -3
- package/dist/routes/config/channels/table.d.ts.map +1 -0
- package/dist/routes/config/channels/table.js +148 -107
- package/dist/routes/config/channels/table.js.map +1 -1
- package/dist/routes/config/http/envelope.d.ts +1 -0
- package/dist/routes/config/http/envelope.d.ts.map +1 -0
- package/dist/routes/config/index.d.ts +35 -3
- package/dist/routes/config/index.d.ts.map +1 -0
- package/dist/routes/config/index.js +51 -2
- package/dist/routes/config/index.js.map +1 -1
- package/dist/routes/config/services.d.ts +5 -4
- package/dist/routes/config/services.d.ts.map +1 -0
- package/dist/routes/config/services.js +57 -43
- package/dist/routes/config/services.js.map +1 -1
- package/dist/routes/config/settings.d.ts +1 -0
- package/dist/routes/config/settings.d.ts.map +1 -0
- package/dist/routes/config/settings.js +98 -49
- package/dist/routes/config/settings.js.map +1 -1
- package/dist/routes/debug.d.ts +1 -0
- package/dist/routes/debug.d.ts.map +1 -0
- package/dist/routes/debug.js +277 -139
- package/dist/routes/debug.js.map +1 -1
- package/dist/routes/health.d.ts +39 -1
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +33 -27
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/hls.d.ts +1 -0
- package/dist/routes/hls.d.ts.map +1 -0
- package/dist/routes/icons.d.ts +1 -0
- package/dist/routes/icons.d.ts.map +1 -0
- package/dist/routes/icons.js +1 -1
- package/dist/routes/index.d.ts +1 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/logs.d.ts +1 -0
- package/dist/routes/logs.d.ts.map +1 -0
- package/dist/routes/logs.js +14 -4
- package/dist/routes/logs.js.map +1 -1
- package/dist/routes/mpegts.d.ts +1 -0
- package/dist/routes/mpegts.d.ts.map +1 -0
- package/dist/routes/play.d.ts +1 -0
- package/dist/routes/play.d.ts.map +1 -0
- package/dist/routes/playlist.d.ts +1 -0
- package/dist/routes/playlist.d.ts.map +1 -0
- package/dist/routes/playlist.js +7 -2
- package/dist/routes/playlist.js.map +1 -1
- package/dist/routes/root/content.d.ts +8 -5
- package/dist/routes/root/content.d.ts.map +1 -0
- package/dist/routes/root/content.js +29 -26
- package/dist/routes/root/content.js.map +1 -1
- package/dist/routes/root/index.d.ts +2 -1
- package/dist/routes/root/index.d.ts.map +1 -0
- package/dist/routes/root/index.js +26 -21
- package/dist/routes/root/index.js.map +1 -1
- package/dist/routes/root/scripts/channels.d.ts +6 -0
- package/dist/routes/root/scripts/channels.d.ts.map +1 -0
- package/dist/routes/root/scripts/channels.js +197 -118
- package/dist/routes/root/scripts/channels.js.map +1 -1
- package/dist/routes/root/scripts/clientEscape.d.ts +22 -0
- package/dist/routes/root/scripts/clientEscape.d.ts.map +1 -0
- package/dist/routes/root/scripts/clientEscape.js +41 -0
- package/dist/routes/root/scripts/clientEscape.js.map +1 -0
- package/dist/routes/root/scripts/clientUrl.d.ts +23 -0
- package/dist/routes/root/scripts/clientUrl.d.ts.map +1 -0
- package/dist/routes/root/scripts/clientUrl.js +44 -0
- package/dist/routes/root/scripts/clientUrl.js.map +1 -0
- package/dist/routes/root/scripts/config.d.ts +6 -0
- package/dist/routes/root/scripts/config.d.ts.map +1 -0
- package/dist/routes/root/scripts/config.js +110 -24
- package/dist/routes/root/scripts/config.js.map +1 -1
- package/dist/routes/root/scripts/index.d.ts +1 -0
- package/dist/routes/root/scripts/index.d.ts.map +1 -0
- package/dist/routes/root/scripts/shared.d.ts +1 -0
- package/dist/routes/root/scripts/shared.d.ts.map +1 -0
- package/dist/routes/root/scripts/shared.js +112 -26
- package/dist/routes/root/scripts/shared.js.map +1 -1
- package/dist/routes/root/scripts/status.d.ts +1 -0
- package/dist/routes/root/scripts/status.d.ts.map +1 -0
- package/dist/routes/root/scripts/status.handlers.d.ts +23 -33
- package/dist/routes/root/scripts/status.handlers.d.ts.map +1 -0
- package/dist/routes/root/scripts/status.handlers.js +46 -92
- package/dist/routes/root/scripts/status.handlers.js.map +1 -1
- package/dist/routes/root/scripts/status.js +21 -8
- package/dist/routes/root/scripts/status.js.map +1 -1
- package/dist/routes/root/styles.d.ts +1 -0
- package/dist/routes/root/styles.d.ts.map +1 -0
- package/dist/routes/root/styles.js +7 -4
- package/dist/routes/root/styles.js.map +1 -1
- package/dist/routes/services.d.ts +13 -1
- package/dist/routes/services.d.ts.map +1 -0
- package/dist/routes/services.js +81 -68
- package/dist/routes/services.js.map +1 -1
- package/dist/routes/sse.d.ts +1 -0
- package/dist/routes/sse.d.ts.map +1 -0
- package/dist/routes/sse.js +1 -1
- package/dist/routes/sse.js.map +1 -1
- package/dist/routes/streams.d.ts +2 -1
- package/dist/routes/streams.d.ts.map +1 -0
- package/dist/routes/streams.js +6 -4
- package/dist/routes/streams.js.map +1 -1
- package/dist/routes/theme.d.ts +3 -2
- package/dist/routes/theme.d.ts.map +1 -0
- package/dist/routes/theme.js +6 -5
- package/dist/routes/theme.js.map +1 -1
- package/dist/routes/ui.d.ts +3 -1
- package/dist/routes/ui.d.ts.map +1 -0
- package/dist/routes/ui.js +16 -4
- package/dist/routes/ui.js.map +1 -1
- package/dist/routes/upgrade.d.ts +1 -0
- package/dist/routes/upgrade.d.ts.map +1 -0
- package/dist/routes/upgrade.js +6 -2
- package/dist/routes/upgrade.js.map +1 -1
- package/dist/service/commands.context.d.ts +1 -0
- package/dist/service/commands.context.d.ts.map +1 -0
- package/dist/service/commands.context.js +4 -3
- package/dist/service/commands.context.js.map +1 -1
- package/dist/service/commands.d.ts +1 -0
- package/dist/service/commands.d.ts.map +1 -0
- package/dist/service/commands.js +10 -13
- package/dist/service/commands.js.map +1 -1
- package/dist/service/generators.context.d.ts +1 -0
- package/dist/service/generators.context.d.ts.map +1 -0
- package/dist/service/generators.context.js +1 -1
- package/dist/service/generators.context.js.map +1 -1
- package/dist/service/generators.d.ts +4 -3
- package/dist/service/generators.d.ts.map +1 -0
- package/dist/service/generators.js +111 -31
- package/dist/service/generators.js.map +1 -1
- package/dist/service/index.d.ts +1 -0
- package/dist/service/index.d.ts.map +1 -0
- package/dist/streaming/captureLock.d.ts +44 -0
- package/dist/streaming/captureLock.d.ts.map +1 -0
- package/dist/streaming/captureLock.js +95 -0
- package/dist/streaming/captureLock.js.map +1 -0
- package/dist/streaming/captureSession.d.ts +31 -0
- package/dist/streaming/captureSession.d.ts.map +1 -0
- package/dist/streaming/captureSession.js +54 -0
- package/dist/streaming/captureSession.js.map +1 -0
- package/dist/streaming/clients.d.ts +1 -0
- package/dist/streaming/clients.d.ts.map +1 -0
- package/dist/streaming/codec.d.ts +1 -0
- package/dist/streaming/codec.d.ts.map +1 -0
- package/dist/streaming/fmp4Segmenter.d.ts +29 -2
- package/dist/streaming/fmp4Segmenter.d.ts.map +1 -0
- package/dist/streaming/fmp4Segmenter.js +79 -26
- package/dist/streaming/fmp4Segmenter.js.map +1 -1
- package/dist/streaming/hls.d.ts +18 -7
- package/dist/streaming/hls.d.ts.map +1 -0
- package/dist/streaming/hls.js +220 -120
- package/dist/streaming/hls.js.map +1 -1
- package/dist/streaming/hlsResume.d.ts +1 -0
- package/dist/streaming/hlsResume.d.ts.map +1 -0
- package/dist/streaming/hlsResume.js +1 -1
- package/dist/streaming/hlsResume.js.map +1 -1
- package/dist/streaming/hlsSegments.d.ts +59 -2
- package/dist/streaming/hlsSegments.d.ts.map +1 -0
- package/dist/streaming/hlsSegments.js +147 -17
- package/dist/streaming/hlsSegments.js.map +1 -1
- package/dist/streaming/lifecycle.d.ts +4 -1
- package/dist/streaming/lifecycle.d.ts.map +1 -0
- package/dist/streaming/lifecycle.js +65 -85
- package/dist/streaming/lifecycle.js.map +1 -1
- package/dist/streaming/monitor.d.ts +6 -4
- package/dist/streaming/monitor.d.ts.map +1 -0
- package/dist/streaming/monitor.js +343 -145
- package/dist/streaming/monitor.js.map +1 -1
- package/dist/streaming/mp4Parser.d.ts +5 -4
- package/dist/streaming/mp4Parser.d.ts.map +1 -0
- package/dist/streaming/mp4Parser.js +36 -13
- package/dist/streaming/mp4Parser.js.map +1 -1
- package/dist/streaming/mpegts.d.ts +16 -0
- package/dist/streaming/mpegts.d.ts.map +1 -0
- package/dist/streaming/mpegts.js +61 -17
- package/dist/streaming/mpegts.js.map +1 -1
- package/dist/streaming/playlistBuilder.d.ts +1 -0
- package/dist/streaming/playlistBuilder.d.ts.map +1 -0
- package/dist/streaming/preroll.d.ts +32 -5
- package/dist/streaming/preroll.d.ts.map +1 -0
- package/dist/streaming/preroll.js +70 -32
- package/dist/streaming/preroll.js.map +1 -1
- package/dist/streaming/pretune.d.ts +26 -1
- package/dist/streaming/pretune.d.ts.map +1 -0
- package/dist/streaming/pretune.js +22 -24
- package/dist/streaming/pretune.js.map +1 -1
- package/dist/streaming/pretuneTimers.d.ts +24 -0
- package/dist/streaming/pretuneTimers.d.ts.map +1 -0
- package/dist/streaming/pretuneTimers.js +56 -0
- package/dist/streaming/pretuneTimers.js.map +1 -0
- package/dist/streaming/recovery.d.ts +139 -5
- package/dist/streaming/recovery.d.ts.map +1 -0
- package/dist/streaming/recovery.js +160 -16
- package/dist/streaming/recovery.js.map +1 -1
- package/dist/streaming/registry.d.ts +27 -9
- package/dist/streaming/registry.d.ts.map +1 -0
- package/dist/streaming/registry.js +21 -3
- package/dist/streaming/registry.js.map +1 -1
- package/dist/streaming/setup.d.ts +157 -29
- package/dist/streaming/setup.d.ts.map +1 -0
- package/dist/streaming/setup.js +1034 -458
- package/dist/streaming/setup.js.map +1 -1
- package/dist/streaming/showInfo.d.ts +21 -1
- package/dist/streaming/showInfo.d.ts.map +1 -0
- package/dist/streaming/showInfo.js +31 -16
- package/dist/streaming/showInfo.js.map +1 -1
- package/dist/streaming/statusEmitter.d.ts +10 -10
- package/dist/streaming/statusEmitter.d.ts.map +1 -0
- package/dist/streaming/statusEmitter.js +5 -8
- package/dist/streaming/statusEmitter.js.map +1 -1
- package/dist/types/channels.d.ts +16 -4
- package/dist/types/channels.d.ts.map +1 -0
- package/dist/types/channels.js +4 -2
- package/dist/types/channels.js.map +1 -1
- package/dist/types/config.d.ts +16 -5
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/profiles.d.ts +6 -4
- package/dist/types/profiles.d.ts.map +1 -0
- package/dist/types/selection.d.ts +31 -3
- package/dist/types/selection.d.ts.map +1 -0
- package/dist/types/selection.js +4 -2
- package/dist/types/selection.js.map +1 -1
- package/dist/types/shared.d.ts +1 -0
- package/dist/types/shared.d.ts.map +1 -0
- package/dist/types/streaming.d.ts +8 -0
- package/dist/types/streaming.d.ts.map +1 -0
- package/dist/upgrade/commands.context.d.ts +1 -0
- package/dist/upgrade/commands.context.d.ts.map +1 -0
- package/dist/upgrade/commands.context.js +14 -10
- package/dist/upgrade/commands.context.js.map +1 -1
- package/dist/upgrade/commands.d.ts +8 -15
- package/dist/upgrade/commands.d.ts.map +1 -0
- package/dist/upgrade/commands.js +27 -28
- package/dist/upgrade/commands.js.map +1 -1
- package/dist/upgrade/detection.context.d.ts +1 -0
- package/dist/upgrade/detection.context.d.ts.map +1 -0
- package/dist/upgrade/detection.context.js +4 -1
- package/dist/upgrade/detection.context.js.map +1 -1
- package/dist/upgrade/detection.d.ts +9 -7
- package/dist/upgrade/detection.d.ts.map +1 -0
- package/dist/upgrade/detection.js +23 -54
- package/dist/upgrade/detection.js.map +1 -1
- package/dist/upgrade/index.d.ts +2 -0
- package/dist/upgrade/index.d.ts.map +1 -0
- package/dist/upgrade/index.js +1 -0
- package/dist/upgrade/index.js.map +1 -1
- package/dist/upgrade/lifecycle.context.d.ts +20 -0
- package/dist/upgrade/lifecycle.context.d.ts.map +1 -0
- package/dist/upgrade/lifecycle.context.js +47 -0
- package/dist/upgrade/lifecycle.context.js.map +1 -0
- package/dist/upgrade/lifecycle.d.ts +72 -0
- package/dist/upgrade/lifecycle.d.ts.map +1 -0
- package/dist/upgrade/lifecycle.js +175 -0
- package/dist/upgrade/lifecycle.js.map +1 -0
- package/dist/upgrade/pathHandle.d.ts +30 -0
- package/dist/upgrade/pathHandle.d.ts.map +1 -0
- package/dist/upgrade/pathHandle.js +102 -0
- package/dist/upgrade/pathHandle.js.map +1 -0
- package/dist/utils/bootSession.context.d.ts +16 -0
- package/dist/utils/bootSession.context.d.ts.map +1 -0
- package/dist/utils/bootSession.context.js +60 -0
- package/dist/utils/bootSession.context.js.map +1 -0
- package/dist/utils/bootSession.d.ts +17 -0
- package/dist/utils/bootSession.d.ts.map +1 -0
- package/dist/utils/bootSession.js +20 -0
- package/dist/utils/bootSession.js.map +1 -0
- package/dist/utils/chromeFetch.d.ts +1 -0
- package/dist/utils/chromeFetch.d.ts.map +1 -0
- package/dist/utils/cliOutput.d.ts +1 -0
- package/dist/utils/cliOutput.d.ts.map +1 -0
- package/dist/utils/clock.d.ts +5 -4
- package/dist/utils/clock.d.ts.map +1 -0
- package/dist/utils/clock.js +19 -16
- package/dist/utils/clock.js.map +1 -1
- package/dist/utils/debugFilter.d.ts +9 -1
- package/dist/utils/debugFilter.d.ts.map +1 -0
- package/dist/utils/debugFilter.js +60 -33
- package/dist/utils/debugFilter.js.map +1 -1
- package/dist/utils/delay.d.ts +48 -15
- package/dist/utils/delay.d.ts.map +1 -0
- package/dist/utils/delay.js +73 -20
- package/dist/utils/delay.js.map +1 -1
- package/dist/utils/errors.d.ts +32 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +45 -4
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/evaluate.d.ts +1 -0
- package/dist/utils/evaluate.d.ts.map +1 -0
- package/dist/utils/evaluate.js +29 -23
- package/dist/utils/evaluate.js.map +1 -1
- package/dist/utils/ffmpeg.context.d.ts +1 -0
- package/dist/utils/ffmpeg.context.d.ts.map +1 -0
- package/dist/utils/ffmpeg.context.js.map +1 -1
- package/dist/utils/ffmpeg.d.ts +29 -7
- package/dist/utils/ffmpeg.d.ts.map +1 -0
- package/dist/utils/ffmpeg.js +32 -14
- package/dist/utils/ffmpeg.js.map +1 -1
- package/dist/utils/fileLogger.d.ts +3 -1
- package/dist/utils/fileLogger.d.ts.map +1 -0
- package/dist/utils/fileLogger.js +64 -29
- package/dist/utils/fileLogger.js.map +1 -1
- package/dist/utils/format.d.ts +14 -1
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +19 -5
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logEmitter.d.ts +1 -0
- package/dist/utils/logEmitter.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +10 -6
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/m3u.d.ts +3 -2
- package/dist/utils/m3u.d.ts.map +1 -0
- package/dist/utils/m3u.js +4 -3
- package/dist/utils/m3u.js.map +1 -1
- package/dist/utils/markup.d.ts +13 -1
- package/dist/utils/markup.d.ts.map +1 -0
- package/dist/utils/markup.js +28 -4
- package/dist/utils/markup.js.map +1 -1
- package/dist/utils/memo.d.ts +3 -2
- package/dist/utils/memo.d.ts.map +1 -0
- package/dist/utils/memo.js +3 -3
- package/dist/utils/morganStream.d.ts +1 -0
- package/dist/utils/morganStream.d.ts.map +1 -0
- package/dist/utils/network.d.ts +1 -0
- package/dist/utils/network.d.ts.map +1 -0
- package/dist/utils/network.js +2 -2
- package/dist/utils/pid.d.ts +3 -25
- package/dist/utils/pid.d.ts.map +1 -0
- package/dist/utils/pid.js +10 -49
- package/dist/utils/pid.js.map +1 -1
- package/dist/utils/platform.d.ts +3 -1
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +2 -1
- package/dist/utils/platform.js.map +1 -1
- package/dist/utils/processInspector.context.d.ts +8 -0
- package/dist/utils/processInspector.context.d.ts.map +1 -0
- package/dist/utils/processInspector.context.js +106 -0
- package/dist/utils/processInspector.context.js.map +1 -0
- package/dist/utils/processInspector.d.ts +55 -0
- package/dist/utils/processInspector.d.ts.map +1 -0
- package/dist/utils/processInspector.js +127 -0
- package/dist/utils/processInspector.js.map +1 -0
- package/dist/utils/retry.d.ts +25 -2
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +33 -6
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/runtimeIdentity.context.d.ts +7 -0
- package/dist/utils/runtimeIdentity.context.d.ts.map +1 -0
- package/dist/utils/runtimeIdentity.context.js +43 -0
- package/dist/utils/runtimeIdentity.context.js.map +1 -0
- package/dist/utils/runtimeIdentity.d.ts +98 -0
- package/dist/utils/runtimeIdentity.d.ts.map +1 -0
- package/dist/utils/runtimeIdentity.js +181 -0
- package/dist/utils/runtimeIdentity.js.map +1 -0
- package/dist/utils/sanitize.d.ts +1 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/streamContext.d.ts +2 -1
- package/dist/utils/streamContext.d.ts.map +1 -0
- package/dist/utils/streamContext.js +1 -1
- package/dist/utils/timing.d.ts +2 -1
- package/dist/utils/timing.d.ts.map +1 -0
- package/dist/utils/timing.js +0 -5
- package/dist/utils/timing.js.map +1 -1
- package/dist/utils/version.d.ts +1 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +47 -13
- package/dist/utils/version.js.map +1 -1
- package/package.json +26 -20
package/dist/hdhr/udp.js
ADDED
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, HJD (https://github.com/hjdhjd). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* udp.ts: HDHomeRun UDP discovery and control transport for PrismCast.
|
|
4
|
+
*
|
|
5
|
+
* Plex locates HDHomeRun devices on the LAN by broadcasting a Discover request to UDP port 65001 and consuming the unicast replies. The same protocol surface
|
|
6
|
+
* can answer Get requests against this port for device and tuner state. This module owns the responder socket as a self-disposing UdpSurface node: the node
|
|
7
|
+
* binds the socket, dispatches incoming packets through the pure protocol codec and getHandlers dispatch table, and composes replies whose BaseURL field points
|
|
8
|
+
* at the correct LAN-reachable interface address for the requesting client. The pure logic lives in free functions below; the node owns the socket, the captured
|
|
9
|
+
* HTTP-port provider, and the bind/close lifecycle. Other HDHR-aware clients can speak the same protocol; their compatibility is incidental rather than supported
|
|
10
|
+
* (see hdhr/index.ts for the Channels DVR port-80 caveat in particular).
|
|
11
|
+
*
|
|
12
|
+
* Lifecycle is driven by the controller in hdhr/index.ts, which owns one UdpSurface alongside the HTTP surface. The controller calls ensureUp after the HTTP
|
|
13
|
+
* server is listening (so the BaseURL the reply advertises is actually live) and ensureDown during graceful shutdown and on a live toggle of hdhr.discoveryEnabled.
|
|
14
|
+
* ensureDown is also the node's [Symbol.asyncDispose], so the surface composes uniformly with the rest of the ownership tree. A bind collision on port 65001 (real
|
|
15
|
+
* HDHR or another emulator on the same host) is logged at warn level and treated as graceful "discovery not available" rather than a startup failure - the HTTP
|
|
16
|
+
* HDHR surface keeps working in that scenario, only LAN auto-detect is lost.
|
|
17
|
+
*/
|
|
18
|
+
import { LOG, isCategoryEnabled } from "../utils/index.js";
|
|
19
|
+
import { PACKET_UPGRADE_REQUEST, buildDiscoverReply, buildErrorReply, buildGetReply, parsePacket } from "./protocol.js";
|
|
20
|
+
import { CONFIG } from "../config/index.js";
|
|
21
|
+
import { HDHR_DEVICE_TYPE_TUNER } from "./identity.js";
|
|
22
|
+
import { createSocket } from "node:dgram";
|
|
23
|
+
import { formatError } from "../utils/errors.js";
|
|
24
|
+
import { getPackageVersion } from "../utils/index.js";
|
|
25
|
+
import { getTunerStates } from "./tunerState.js";
|
|
26
|
+
import { networkInterfaces } from "node:os";
|
|
27
|
+
import { resolveGet } from "./getHandlers.js";
|
|
28
|
+
// Standard HDHomeRun discovery port. All HDHR-aware clients hard-code this value, so it is not configurable.
|
|
29
|
+
export const HDHR_DISCOVERY_PORT = 65001;
|
|
30
|
+
/**
|
|
31
|
+
* Creates an HDHomeRun UDP discovery surface node. The returned object fully owns its socket; nothing outside the closure touches it. ensureUp/ensureDown are the
|
|
32
|
+
* cycling verbs the controller drives; [Symbol.asyncDispose] aliases ensureDown so the surface is a well-formed async-disposable resource.
|
|
33
|
+
* @returns A UdpSurface node.
|
|
34
|
+
*/
|
|
35
|
+
export function createUdpSurface() {
|
|
36
|
+
// The active responder socket, owned entirely by this node. Null when the surface is down.
|
|
37
|
+
let socket = null;
|
|
38
|
+
// Provider for the HTTP server's live bound port, captured at ensureUp time. The Discover reply advertises this (not CONFIG.hdhr.port) so the BaseURL always
|
|
39
|
+
// reflects where the HTTP server is actually listening - which matters in the rejected-port-change case, where HTTP stays on the prior port while CONFIG holds
|
|
40
|
+
// the new one. Null until ensureUp is called with a provider; falls back to CONFIG.hdhr.port when absent (e.g. in transport tests).
|
|
41
|
+
let httpPortProvider = null;
|
|
42
|
+
async function ensureUp(options) {
|
|
43
|
+
// Safe to call more than once: an already-bound surface is a no-op success. Safe to invoke from both initial startup and live config-change application.
|
|
44
|
+
if (socket !== null) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
// Capture the HTTP-port provider for the Discover reply's BaseURL. Set before the bind attempt; harmless if the bind then fails (no socket -> no packets).
|
|
48
|
+
httpPortProvider = options?.httpPortProvider ?? null;
|
|
49
|
+
const bindAddress = options?.bindAddress ?? "0.0.0.0";
|
|
50
|
+
const port = options?.port ?? HDHR_DISCOVERY_PORT;
|
|
51
|
+
// We keep reuseAddr false deliberately: a competing binder on the discovery port must surface as EADDRINUSE so the bind-failure handler below can treat it as
|
|
52
|
+
// graceful "discovery unavailable" fallback rather than silently double-binding. Flipping this to true (or dropping it as redundant) would defeat that
|
|
53
|
+
// collision detection.
|
|
54
|
+
const candidate = createSocket({ reuseAddr: false, type: "udp4" });
|
|
55
|
+
candidate.on("message", (msg, rinfo) => {
|
|
56
|
+
// Defensive: catch handler errors so a malformed packet from a buggy client cannot tear down the socket.
|
|
57
|
+
try {
|
|
58
|
+
handlePacket(candidate, msg, rinfo, httpPortProvider);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
LOG.debug("hdhr", "UDP responder swallowed handler error.", { error: formatError(error) });
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
const { promise, resolve } = Promise.withResolvers();
|
|
65
|
+
// Two error handlers, attached at different phases of the socket lifecycle. The bind-failure handler is short-lived: it runs once if bind fails (typically
|
|
66
|
+
// EADDRINUSE), resolves the bind promise with false, and is removed on bind success. The runtime-error handler is long-lived: it runs for any socket error
|
|
67
|
+
// that occurs after a successful bind, clears the node's socket reference so a subsequent ensureUp can rebind cleanly, and closes the socket. Splitting the
|
|
68
|
+
// two paths prevents the once-handler from misclassifying a post-bind error as a bind failure (with a misleading "port is already in use" log line) and keeps
|
|
69
|
+
// the node's socket reference from pointing at a closed socket.
|
|
70
|
+
const bindFailureHandler = (error) => {
|
|
71
|
+
if (error.code === "EADDRINUSE") {
|
|
72
|
+
LOG.warn("HDHomeRun LAN discovery port %d is already in use. Discovery is disabled; clients can still add PrismCast manually by IP.", port);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
LOG.warn("HDHomeRun LAN discovery failed to start: %s. Clients can still add PrismCast manually by IP.", formatError(error));
|
|
76
|
+
}
|
|
77
|
+
candidate.close();
|
|
78
|
+
resolve(false);
|
|
79
|
+
};
|
|
80
|
+
const runtimeErrorHandler = (error) => {
|
|
81
|
+
LOG.warn("HDHomeRun LAN discovery encountered a socket error and is now disabled: %s.", formatError(error));
|
|
82
|
+
if (socket === candidate) {
|
|
83
|
+
socket = null;
|
|
84
|
+
}
|
|
85
|
+
candidate.close();
|
|
86
|
+
};
|
|
87
|
+
candidate.once("error", bindFailureHandler);
|
|
88
|
+
candidate.bind(port, bindAddress, () => {
|
|
89
|
+
const address = candidate.address();
|
|
90
|
+
socket = candidate;
|
|
91
|
+
candidate.removeListener("error", bindFailureHandler);
|
|
92
|
+
candidate.on("error", runtimeErrorHandler);
|
|
93
|
+
LOG.info("HDHomeRun LAN discovery is now responding on UDP %s:%d.", bindAddress, address.port);
|
|
94
|
+
resolve(true);
|
|
95
|
+
});
|
|
96
|
+
return promise;
|
|
97
|
+
}
|
|
98
|
+
async function ensureDown() {
|
|
99
|
+
if (socket === null) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const current = socket;
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/no-invalid-void-type -- Standard pattern for signal promises.
|
|
104
|
+
const { promise, resolve } = Promise.withResolvers();
|
|
105
|
+
// Clear the reference before the asynchronous close so a concurrent ensureUp during teardown rebinds a fresh socket rather than racing the closing one.
|
|
106
|
+
socket = null;
|
|
107
|
+
current.close(() => {
|
|
108
|
+
LOG.info("HDHomeRun LAN discovery is now stopped.");
|
|
109
|
+
resolve();
|
|
110
|
+
});
|
|
111
|
+
return promise;
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
get boundPort() {
|
|
115
|
+
return socket ? socket.address().port : null;
|
|
116
|
+
},
|
|
117
|
+
ensureDown,
|
|
118
|
+
ensureUp,
|
|
119
|
+
[Symbol.asyncDispose]: ensureDown
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Handles a single incoming UDP packet. Parses it through the pure protocol codec, dispatches by packet type, and sends the appropriate reply (or drops the
|
|
124
|
+
* packet silently when it cannot or should not be answered). Pulled out of the socket.on("message", ...) inline body so the dispatch table reads cleanly.
|
|
125
|
+
* @param socket - The bound UDP socket, used to send replies.
|
|
126
|
+
* @param msg - The raw datagram bytes.
|
|
127
|
+
* @param rinfo - The sender's address info, used both to address the reply and to pick a LAN-reachable BaseURL.
|
|
128
|
+
* @param httpPortProvider - Accessor for the HTTP server's live bound port, used to build the Discover reply's BaseURL. Falls back to CONFIG.hdhr.port when null.
|
|
129
|
+
*/
|
|
130
|
+
function handlePacket(socket, msg, rinfo, httpPortProvider) {
|
|
131
|
+
const parsed = parsePacket(msg);
|
|
132
|
+
if (parsed === null) {
|
|
133
|
+
LOG.debug("hdhr", "UDP responder dropped a malformed or CRC-mismatched packet.", { from: rinfo.address });
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
switch (parsed.type) {
|
|
137
|
+
case "discover": {
|
|
138
|
+
// Advertise the HTTP server's live bound port when known, falling back to CONFIG.hdhr.port. The provider reflects reality even when a rejected port
|
|
139
|
+
// change has left HTTP on its prior port while CONFIG holds the new value.
|
|
140
|
+
const advertisedPort = httpPortProvider?.() ?? CONFIG.hdhr.port;
|
|
141
|
+
const baseUrl = "http://" + selectLanAddress(rinfo.address) + ":" + String(advertisedPort);
|
|
142
|
+
const reply = buildDiscoverReply({
|
|
143
|
+
baseUrl,
|
|
144
|
+
deviceId: parseDeviceId(CONFIG.hdhr.deviceId),
|
|
145
|
+
deviceType: HDHR_DEVICE_TYPE_TUNER,
|
|
146
|
+
tunerCount: CONFIG.streaming.maxConcurrentStreams
|
|
147
|
+
});
|
|
148
|
+
sendReply(socket, reply, rinfo);
|
|
149
|
+
logDispatch("discover", rinfo, { baseUrl });
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
case "get": {
|
|
153
|
+
const result = resolveGet(parsed.name, { runtimeVersion: getPackageVersion(), tuners: getTunerStates() });
|
|
154
|
+
const reply = (result.kind === "value") ? buildGetReply(parsed.name, result.value) : buildErrorReply(parsed.name, result.error);
|
|
155
|
+
sendReply(socket, reply, rinfo);
|
|
156
|
+
logDispatch("get", rinfo, { kind: result.kind, name: parsed.name });
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
case "set": {
|
|
160
|
+
// PrismCast's emulation model is HTTP-streaming; clients tune by fetching the lineup URL. UDP Set requests are a legacy RTP-streaming control surface we
|
|
161
|
+
// do not implement, but the wire convention is to reply with an explicit error rather than silently drop so the client does not block waiting for ACK.
|
|
162
|
+
// The wire packet type for Set is PACKET_GET_REQUEST (0x0004) - the protocol uses the same code for Get and Set, distinguished by the value TLV.
|
|
163
|
+
const reply = buildErrorReply(parsed.name, "ERROR: write protected");
|
|
164
|
+
sendReply(socket, reply, rinfo);
|
|
165
|
+
logDispatch("set", rinfo, { name: parsed.name });
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
case "unsupported": {
|
|
169
|
+
// Upgrade requests and unknown packet types are dropped silently. Real HDHomeRun firmware does the same for Upgrade traffic addressed to an HDTC-2US
|
|
170
|
+
// (which has no upgrade endpoint); mimicking the behavior avoids surfacing "unsupported" reply spam in client logs.
|
|
171
|
+
logDispatch("unsupported", rinfo, { packetType: parsed.packetType, upgradeRequest: (parsed.packetType === PACKET_UPGRADE_REQUEST) });
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Sends a pre-built reply packet back to the requester. Wrapped so the send error handling lives in one place; UDP send is fire-and-forget but we still want
|
|
178
|
+
* to surface failures at debug level for diagnostics.
|
|
179
|
+
* @param socket - The bound UDP socket.
|
|
180
|
+
* @param packet - The wire-formatted reply bytes.
|
|
181
|
+
* @param rinfo - The destination address.
|
|
182
|
+
*/
|
|
183
|
+
function sendReply(socket, packet, rinfo) {
|
|
184
|
+
socket.send(packet, rinfo.port, rinfo.address, (error) => {
|
|
185
|
+
if (error) {
|
|
186
|
+
LOG.debug("hdhr", "UDP responder failed to send a reply.", { error: formatError(error), to: rinfo.address });
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Selects the local IPv4 address that is reachable from the requester's subnet. Walks os.networkInterfaces, computes each interface's network address via its
|
|
192
|
+
* netmask, and returns the matching interface's address. Falls back to the first non-loopback IPv4 address when no subnet matches (typical on hosts whose
|
|
193
|
+
* routing crosses a layer-3 boundary). Returns "127.0.0.1" as the last resort - clients reaching us on loopback will use it; clients on the LAN that hit this
|
|
194
|
+
* branch will fail to reach back, but that scenario implies a misconfigured host where LAN advertising would not help anyway.
|
|
195
|
+
*
|
|
196
|
+
* Exposed (and parameterized over network interfaces) primarily for tests; the production call site uses os.networkInterfaces() directly via the default
|
|
197
|
+
* parameter.
|
|
198
|
+
* @param targetAddress - The requester's IPv4 address (from dgram rinfo).
|
|
199
|
+
* @param interfaces - Map of interface name to NetworkInterfaceInfo array (defaults to os.networkInterfaces()).
|
|
200
|
+
* @returns The selected local IPv4 address.
|
|
201
|
+
*/
|
|
202
|
+
export function selectLanAddress(targetAddress, interfaces = networkInterfaces()) {
|
|
203
|
+
const ipv4Interfaces = [];
|
|
204
|
+
for (const list of Object.values(interfaces)) {
|
|
205
|
+
if (!list) {
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
for (const iface of list) {
|
|
209
|
+
if ((iface.family === "IPv4") && !iface.internal) {
|
|
210
|
+
ipv4Interfaces.push(iface);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
const targetInt = ipv4ToInt(targetAddress);
|
|
215
|
+
if (targetInt !== null) {
|
|
216
|
+
for (const iface of ipv4Interfaces) {
|
|
217
|
+
const maskInt = ipv4ToInt(iface.netmask);
|
|
218
|
+
const ifaceInt = ipv4ToInt(iface.address);
|
|
219
|
+
if ((maskInt === null) || (ifaceInt === null)) {
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
// Subnet match: both addresses agree under the interface's netmask.
|
|
223
|
+
if ((targetInt & maskInt) === (ifaceInt & maskInt)) {
|
|
224
|
+
return iface.address;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// No subnet match. Fall back to the first non-loopback IPv4 address so the BaseURL is at least plausible.
|
|
229
|
+
if (ipv4Interfaces.length > 0) {
|
|
230
|
+
return ipv4Interfaces[0]?.address ?? "127.0.0.1";
|
|
231
|
+
}
|
|
232
|
+
return "127.0.0.1";
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Converts a dotted IPv4 string to a 32-bit unsigned integer. Returns null when the input is malformed (not four octets, octet out of range). Internal to this
|
|
236
|
+
* module so the bounds checking does not leak into callers.
|
|
237
|
+
* @param ip - The IPv4 address.
|
|
238
|
+
* @returns The 32-bit value or null.
|
|
239
|
+
*/
|
|
240
|
+
function ipv4ToInt(ip) {
|
|
241
|
+
const parts = ip.split(".");
|
|
242
|
+
if (parts.length !== 4) {
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
let result = 0;
|
|
246
|
+
for (const part of parts) {
|
|
247
|
+
const n = Number(part);
|
|
248
|
+
if (!Number.isInteger(n) || (n < 0) || (n > 255)) {
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
result = ((result << 8) | n) >>> 0;
|
|
252
|
+
}
|
|
253
|
+
return result;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Converts the 8-hex-character device id string from CONFIG.hdhr.deviceId into the 32-bit unsigned integer the wire protocol expects. Falls back to zero for
|
|
257
|
+
* invalid input so a hand-edited config does not crash the responder; the integrity check at startup catches the underlying error separately.
|
|
258
|
+
* @param hex - The 8-character hex string from CONFIG.
|
|
259
|
+
* @returns The 32-bit value.
|
|
260
|
+
*/
|
|
261
|
+
function parseDeviceId(hex) {
|
|
262
|
+
const value = parseInt(hex, 16);
|
|
263
|
+
return Number.isNaN(value) ? 0 : (value >>> 0);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Logs a dispatch event at debug level. Skipped entirely when the "hdhr" debug category is disabled so the hot path stays branch-light.
|
|
267
|
+
* @param kind - Short label identifying the dispatched packet type.
|
|
268
|
+
* @param rinfo - Sender info.
|
|
269
|
+
* @param extra - Additional structured context.
|
|
270
|
+
*/
|
|
271
|
+
function logDispatch(kind, rinfo, extra) {
|
|
272
|
+
if (!isCategoryEnabled("hdhr")) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
LOG.debug("hdhr", "UDP responder dispatched packet.", { from: rinfo.address, kind, ...extra });
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=udp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"udp.js","sourceRoot":"","sources":["../../src/hdhr/udp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACxH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,6GAA6G;AAC7G,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAsCzC;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAE9B,2FAA2F;IAC3F,IAAI,MAAM,GAAqB,IAAI,CAAC;IAEpC,6JAA6J;IAC7J,+JAA+J;IAC/J,oIAAoI;IACpI,IAAI,gBAAgB,GAAqC,IAAI,CAAC;IAE9D,KAAK,UAAU,QAAQ,CAAC,OAA2B;QAEjD,yJAAyJ;QACzJ,IAAG,MAAM,KAAK,IAAI,EAAE,CAAC;YAEnB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2JAA2J;QAC3J,gBAAgB,GAAG,OAAO,EAAE,gBAAgB,IAAI,IAAI,CAAC;QAErD,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,SAAS,CAAC;QACtD,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,mBAAmB,CAAC;QAElD,8JAA8J;QAC9J,uJAAuJ;QACvJ,uBAAuB;QACvB,MAAM,SAAS,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAEnE,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YAErC,yGAAyG;YACzG,IAAI,CAAC;gBAEH,YAAY,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;YACxD,CAAC;YAAC,OAAM,KAAK,EAAE,CAAC;gBAEd,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,wCAAwC,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7F,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,EAAW,CAAC;QAE9D,2JAA2J;QAC3J,2JAA2J;QAC3J,4JAA4J;QAC5J,8JAA8J;QAC9J,gEAAgE;QAChE,MAAM,kBAAkB,GAAG,CAAC,KAA4B,EAAQ,EAAE;YAEhE,IAAG,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAE/B,GAAG,CAAC,IAAI,CAAC,2HAA2H,EAAE,IAAI,CAAC,CAAC;YAC9I,CAAC;iBAAM,CAAC;gBAEN,GAAG,CAAC,IAAI,CAAC,8FAA8F,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/H,CAAC;YAED,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC;QAEF,MAAM,mBAAmB,GAAG,CAAC,KAA4B,EAAQ,EAAE;YAEjE,GAAG,CAAC,IAAI,CAAC,6EAA6E,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAE5G,IAAG,MAAM,KAAK,SAAS,EAAE,CAAC;gBAExB,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;YAED,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC,CAAC;QAEF,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QAE5C,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;YAErC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;YAEpC,MAAM,GAAG,SAAS,CAAC;YACnB,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YACtD,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;YAC3C,GAAG,CAAC,IAAI,CAAC,yDAAyD,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/F,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,UAAU,UAAU;QAEvB,IAAG,MAAM,KAAK,IAAI,EAAE,CAAC;YAEnB,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC;QACvB,4GAA4G;QAC5G,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,EAAQ,CAAC;QAE3D,wJAAwJ;QACxJ,MAAM,GAAG,IAAI,CAAC;QAEd,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;YAEjB,GAAG,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACpD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO;QAEL,IAAI,SAAS;YAEX,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/C,CAAC;QACD,UAAU;QACV,QAAQ;QACR,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,UAAU;KAClC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,MAAc,EAAE,GAAW,EAAE,KAAwC,EAAE,gBAAkD;IAE7I,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAG,MAAM,KAAK,IAAI,EAAE,CAAC;QAEnB,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,6DAA6D,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAE1G,OAAO;IACT,CAAC;IAED,QAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QAEnB,KAAK,UAAU,CAAC,CAAC,CAAC;YAEhB,oJAAoJ;YACpJ,2EAA2E;YAC3E,MAAM,cAAc,GAAG,gBAAgB,EAAE,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YAChE,MAAM,OAAO,GAAG,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;YAC3F,MAAM,KAAK,GAAG,kBAAkB,CAAC;gBAE/B,OAAO;gBACP,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC7C,UAAU,EAAE,sBAAsB;gBAClC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,oBAAoB;aAClD,CAAC,CAAC;YAEH,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAChC,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAE5C,MAAM;QACR,CAAC;QAED,KAAK,KAAK,CAAC,CAAC,CAAC;YAEX,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;YAC1G,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAEhI,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAChC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAEpE,MAAM;QACR,CAAC;QAED,KAAK,KAAK,CAAC,CAAC,CAAC;YAEX,yJAAyJ;YACzJ,uJAAuJ;YACvJ,iJAAiJ;YACjJ,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;YAErE,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAChC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAEjD,MAAM;QACR,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YAEnB,qJAAqJ;YACrJ,oHAAoH;YACpH,WAAW,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,MAAM,CAAC,UAAU,KAAK,sBAAsB,CAAC,EAAE,CAAC,CAAC;YAErI,MAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,MAAc,EAAE,MAAc,EAAE,KAAwC;IAEzF,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAEvD,IAAG,KAAK,EAAE,CAAC;YAET,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,uCAAuC,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/G,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,aAAqB,EAAE,aAAkD,iBAAiB,EAAE;IAE3H,MAAM,cAAc,GAA+B,EAAE,CAAC;IAEtD,KAAI,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAE5C,IAAG,CAAC,IAAI,EAAE,CAAC;YAET,SAAS;QACX,CAAC;QAED,KAAI,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YAExB,IAAG,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAEhD,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;IAE3C,IAAG,SAAS,KAAK,IAAI,EAAE,CAAC;QAEtB,KAAI,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YAElC,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAE1C,IAAG,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;gBAE7C,SAAS;YACX,CAAC;YAED,oEAAoE;YACpE,IAAG,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC;gBAElD,OAAO,KAAK,CAAC,OAAO,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,0GAA0G;IAC1G,IAAG,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAE7B,OAAO,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,WAAW,CAAC;IACnD,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,EAAU;IAE3B,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE5B,IAAG,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAEtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAI,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAExB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAEvB,IAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YAEhD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,GAAW;IAEhC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAEhC,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,IAAY,EAAE,KAAwC,EAAE,KAA8B;IAEzG,IAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAE9B,OAAO;IACT,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,kCAAkC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;AACjG,CAAC"}
|
package/dist/identity.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,UAAU,gCAAgC,CAAC;AAKxD,eAAO,MAAM,YAAY,cAAc,CAAC"}
|
package/dist/identity.js
CHANGED
|
@@ -2,18 +2,20 @@
|
|
|
2
2
|
*
|
|
3
3
|
* identity.ts: Project-wide identity constants for PrismCast.
|
|
4
4
|
*/
|
|
5
|
-
/* This module is the single source of truth for the values other modules need to refer to PrismCast by name: the reverse-DNS service identifier
|
|
6
|
-
*
|
|
7
|
-
* subsystem - because both the path-resolution layer (config/paths.ts, which uses SERVICE_ID in
|
|
8
|
-
* (service/generators.ts, which embeds
|
|
9
|
-
*
|
|
10
|
-
* a
|
|
5
|
+
/* This module is the single source of truth for the values other modules need to refer to PrismCast by name: the reverse-DNS service identifier the macOS
|
|
6
|
+
* launchd plist carries, and the human-readable product name the Linux systemd unit, the Windows Task Scheduler task, and UI surfaces display. It sits at the
|
|
7
|
+
* root of src/ - below config, utils, service, and every other subsystem - because both the path-resolution layer (config/paths.ts, which uses SERVICE_ID in
|
|
8
|
+
* the macOS LaunchAgents path) and the service-generation layer (service/generators.ts, which embeds SERVICE_ID in the launchd plist and SERVICE_NAME in the
|
|
9
|
+
* systemd unit and the Task Scheduler task) consume it. Placing it inside either of those subsystems would force the other to import sideways across a
|
|
10
|
+
* boundary it otherwise respects; lifting it to a dedicated root-level identity module preserves the layering and gives the constants a home that names what
|
|
11
|
+
* they are rather than where they happened to first be used.
|
|
11
12
|
*/
|
|
12
|
-
// The reverse-DNS service identifier. macOS launchd uses this for the bundle name, the LaunchAgents plist file name, and the Label key inside the plist itself
|
|
13
|
-
//
|
|
14
|
-
//
|
|
13
|
+
// The reverse-DNS service identifier. macOS launchd uses this for the bundle name, the LaunchAgents plist file name, and the Label key inside the plist itself,
|
|
14
|
+
// and it is also the identifier passed to launchctl start/stop/remove commands. Linux systemd and Windows Task Scheduler do not consume this value at all -
|
|
15
|
+
// they identify the service by SERVICE_NAME instead, since neither service manager requires reverse-DNS form for its unit or task identifiers.
|
|
15
16
|
export const SERVICE_ID = "com.github.hjdhjd.prismcast";
|
|
16
|
-
// The human-readable product name. Surfaced in UI labels, in the service-install command output,
|
|
17
|
-
//
|
|
17
|
+
// The human-readable product name. Surfaced in UI labels, in the service-install command output, in the Linux systemd unit's Description line, and as the
|
|
18
|
+
// task name in the Windows Task Scheduler generator. macOS is the clearest example of a platform that separates "internal identifier" from "shown name": the
|
|
19
|
+
// launchd plist stores only SERVICE_ID and never SERVICE_NAME, so the human-readable name exists only in this module and the CLI output that references it.
|
|
18
20
|
export const SERVICE_NAME = "PrismCast";
|
|
19
21
|
//# sourceMappingURL=identity.js.map
|
package/dist/identity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;GAOG;AAEH,gKAAgK;AAChK,4JAA4J;AAC5J,+IAA+I;AAC/I,MAAM,CAAC,MAAM,UAAU,GAAG,6BAA6B,CAAC;AAExD,0JAA0J;AAC1J,6JAA6J;AAC7J,4JAA4J;AAC5J,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAuMA;;GAEG;AACH,MAAM,WAAW,UAAU;IAEzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
package/dist/index.js
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { CONFIG_METADATA, DEFAULTS, getNestedValue } from "./config/userConfig.js";
|
|
6
6
|
import { LOG, formatError, getPackageVersion, initDebugFilter, setDebugLogging } from "./utils/index.js";
|
|
7
|
-
import { canCleanupChrome, isGracefulShutdown, killStaleChrome } from "./browser/index.js";
|
|
8
|
-
import { clearServerPid, startServer } from "./app.js";
|
|
9
7
|
import { getDebugEnv, initializeDataDir } from "./config/paths.js";
|
|
8
|
+
import { isGracefulShutdown, killStaleChrome } from "./browser/index.js";
|
|
9
|
+
import { releaseInstanceSlot, startServer } from "./app.js";
|
|
10
10
|
import { flushLogBufferSync } from "./utils/fileLogger.js";
|
|
11
11
|
import { handleServiceCommand } from "./service/index.js";
|
|
12
12
|
import { handleUpgradeCommand } from "./upgrade/index.js";
|
|
@@ -72,7 +72,8 @@ function printUsage() {
|
|
|
72
72
|
/* eslint-enable no-console */
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
75
|
-
* Prints a complete listing of all environment variables organized by category. Generates
|
|
75
|
+
* Prints a complete listing of all environment variables organized by category. Generates the per-category listing dynamically from CONFIG_METADATA; the
|
|
76
|
+
* Special section below is hand-maintained since PRISMCAST_DATA_DIR and PRISMCAST_DEBUG are resolved outside config.json.
|
|
76
77
|
*/
|
|
77
78
|
function printEnvironmentVariables() {
|
|
78
79
|
/* eslint-disable no-console */
|
|
@@ -159,8 +160,8 @@ function printEnvironmentVariables() {
|
|
|
159
160
|
* @param value - The path value to validate.
|
|
160
161
|
*/
|
|
161
162
|
function requireAbsolutePath(flag, value) {
|
|
162
|
-
// Guard against missing
|
|
163
|
-
//
|
|
163
|
+
// Guard against a missing value when the flag is the last argument. The caller defaults a missing `args[++i]` to an empty string via `?? ""` before calling
|
|
164
|
+
// this function, so checking for falsy here catches that empty-string case.
|
|
164
165
|
if (!value) {
|
|
165
166
|
// eslint-disable-next-line no-console
|
|
166
167
|
console.error("Error: " + flag + " requires a path argument.");
|
|
@@ -199,7 +200,7 @@ function parseArgs() {
|
|
|
199
200
|
}
|
|
200
201
|
if ((arg === "-p") || (arg === "--port")) {
|
|
201
202
|
const parsed = parseInt(args[++i] ?? "");
|
|
202
|
-
if (!isNaN(parsed)) {
|
|
203
|
+
if (!Number.isNaN(parsed)) {
|
|
203
204
|
port = parsed;
|
|
204
205
|
}
|
|
205
206
|
}
|
|
@@ -290,12 +291,10 @@ else {
|
|
|
290
291
|
// process terminates. Chrome will die when its pipes break since the parent is exiting; killing it explicitly is belt-and-suspenders.
|
|
291
292
|
flushLogBufferSync();
|
|
292
293
|
try {
|
|
293
|
-
|
|
294
|
-
//
|
|
295
|
-
// instance
|
|
296
|
-
|
|
297
|
-
killStaleChrome();
|
|
298
|
-
}
|
|
294
|
+
releaseInstanceSlot();
|
|
295
|
+
// killStaleChrome is safe to call unconditionally now: the ownership filter inside it (parent-pid match or parent-pid dead) excludes Chrome belonging to
|
|
296
|
+
// another live PrismCast instance, so a rejected-duplicate startup's exit handler will not signal the legitimate holder's Chrome.
|
|
297
|
+
killStaleChrome();
|
|
299
298
|
}
|
|
300
299
|
catch {
|
|
301
300
|
// Best-effort process cleanup. If signaling fails for any reason, the process is exiting anyway.
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACzG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,3 +42,4 @@ export declare function inferCodecFromTsBuffer(buffer: Buffer): Nullable<string>
|
|
|
42
42
|
* @returns The inferred codec metadata.
|
|
43
43
|
*/
|
|
44
44
|
export declare function inferMediaCodec(options: InferMediaCodecOptions): Promise<InferredCodec>;
|
|
45
|
+
//# sourceMappingURL=codecInference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codecInference.d.ts","sourceRoot":"","sources":["../../src/native/codecInference.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAiDlD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IAGrC,OAAO,EAAE,MAAM,CAAC;IAGhB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAG5B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CA2B3F;AAuMD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CA6DvE;AAiGD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,aAAa,CAAC,CAwC7F"}
|
|
@@ -6,14 +6,14 @@ import { LOG, chromeFetch } from "../utils/index.js";
|
|
|
6
6
|
import { resolveUrl } from "./probe.js";
|
|
7
7
|
/* Media-only HLS playlists do not declare codec information - that lives in the master playlist's #EXT-X-STREAM-INF CODECS attribute, which the master-playlist
|
|
8
8
|
* resolver consumes today. For media-only feeds (no master playlist exists), the codec must be inferred from the segments themselves so the MediaFeed surfaces
|
|
9
|
-
* the same codec/resolution metadata regardless of which playlist kind arrived. This module provides the inference
|
|
9
|
+
* the same codec/resolution metadata regardless of which playlist kind arrived. This module provides the inference path for media-only playlists.
|
|
10
10
|
*
|
|
11
11
|
* The inference path supported in this module is the MPEG-TS Program Map Table (PMT). HLS streams using TS segments expose the elementary stream's stream_type
|
|
12
12
|
* directly in the PMT, which is small enough to reach within the first ~2 KB of every segment. PMT-based inference is bounded, deterministic, and avoids the
|
|
13
13
|
* complexity of full codec-config parsing (SPS NALU walking) because the stream_type byte alone is sufficient to label the codec for status display.
|
|
14
14
|
*
|
|
15
15
|
* fMP4 segments declare codec information in the moov box of an init segment referenced by #EXT-X-MAP. That path is intentionally out of scope for this module
|
|
16
|
-
* and lives behind a clean extension
|
|
16
|
+
* and lives behind a clean extension point: future work can dispatch on the segment's file extension or content type and call parseMoovCodecConfig() from
|
|
17
17
|
* src/streaming/mp4Parser.ts. Resolution is not inferred from TS segments because TS PMT does not carry resolution; recovering it would require parsing the SPS
|
|
18
18
|
* NALU inside a video access unit, which is significantly heavier than the PMT-only walk this module performs.
|
|
19
19
|
*
|
|
@@ -264,10 +264,51 @@ export function inferCodecFromTsBuffer(buffer) {
|
|
|
264
264
|
}
|
|
265
265
|
return TS_STREAM_TYPE_TO_CODEC[streamType] ?? null;
|
|
266
266
|
}
|
|
267
|
+
/**
|
|
268
|
+
* Drains a fetch Response body and returns at most limit bytes. The reader is cancelled as soon as the limit is reached, so a CDN that ignored the Range header
|
|
269
|
+
* and is streaming a multi-megabyte segment is stopped after the prefix rather than fully buffered. When the body is not a readable stream (some runtimes and test
|
|
270
|
+
* doubles expose only arrayBuffer()), we fall back to reading the whole body and truncating, which still honors the byte cap on the returned Buffer.
|
|
271
|
+
*
|
|
272
|
+
* @param response - The fetch Response whose body holds the segment bytes.
|
|
273
|
+
* @param limit - The maximum number of bytes to retain.
|
|
274
|
+
* @returns A Buffer of at most limit bytes.
|
|
275
|
+
*/
|
|
276
|
+
async function readStreamPrefix(response, limit) {
|
|
277
|
+
const body = response.body;
|
|
278
|
+
// Fall back to arrayBuffer() when there is no readable stream to iterate. We still enforce the cap by truncating the result, so the returned Buffer never exceeds
|
|
279
|
+
// the documented bound even though the full body was buffered.
|
|
280
|
+
if (!body) {
|
|
281
|
+
return Buffer.from(await response.arrayBuffer()).subarray(0, limit);
|
|
282
|
+
}
|
|
283
|
+
const reader = body.getReader();
|
|
284
|
+
const chunks = [];
|
|
285
|
+
let total = 0;
|
|
286
|
+
try {
|
|
287
|
+
while (total < limit) {
|
|
288
|
+
// The body is consumed sequentially from a single reader: each read resolves the next chunk in order and depends on the prior one, so it cannot be parallelized.
|
|
289
|
+
// eslint-disable-next-line no-await-in-loop -- sequential single-reader stream consumption.
|
|
290
|
+
const { done, value } = await reader.read();
|
|
291
|
+
if (done) {
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
// Append only as many bytes as remain under the cap. A single chunk can overshoot the limit, so we slice it to the exact remaining budget and stop reading.
|
|
295
|
+
const remaining = limit - total;
|
|
296
|
+
const slice = value.byteLength > remaining ? Buffer.from(value.subarray(0, remaining)) : Buffer.from(value);
|
|
297
|
+
chunks.push(slice);
|
|
298
|
+
total += slice.length;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
finally {
|
|
302
|
+
// Cancel the stream so the underlying connection is released once we have the prefix. We await the cancellation so the source's cancel callback runs before we
|
|
303
|
+
// return - both to release the connection deterministically and to stop any further pulls. Cancellation is best-effort; ignore any rejection.
|
|
304
|
+
await reader.cancel().catch(() => undefined);
|
|
305
|
+
}
|
|
306
|
+
return Buffer.concat(chunks, total);
|
|
307
|
+
}
|
|
267
308
|
/**
|
|
268
309
|
* Fetches the prefix of a TS segment so the caller can parse its PAT/PMT. Sends a Range header asking the CDN for the first MAX_SEGMENT_PROBE_BYTES; CDNs that
|
|
269
|
-
* ignore Range
|
|
270
|
-
* so the inference can fail gracefully back to a null codec label.
|
|
310
|
+
* ignore Range and return the full segment are still bounded because readStreamPrefix() drains only the prefix and cancels the rest. Returns null on any HTTP or
|
|
311
|
+
* fetch error so the inference can fail gracefully back to a null codec label.
|
|
271
312
|
*
|
|
272
313
|
* @param url - The absolute segment URL.
|
|
273
314
|
* @returns The fetched prefix, or null on failure.
|
|
@@ -283,7 +324,11 @@ async function fetchSegmentPrefix(url) {
|
|
|
283
324
|
LOG.debug("native:codec", "Segment prefix fetch returned HTTP %s.", response.status);
|
|
284
325
|
return null;
|
|
285
326
|
}
|
|
286
|
-
|
|
327
|
+
// Read at most MAX_SEGMENT_PROBE_BYTES regardless of what the server sent. A 206 honors the Range header and returns just the prefix, but a 200 means the CDN
|
|
328
|
+
// ignored Range and is streaming the entire segment (often several megabytes). Buffering the whole body via arrayBuffer() would contradict the documented bound
|
|
329
|
+
// and waste memory and bandwidth, so we drain the response stream chunk by chunk, stop once we have the prefix the parser needs, and cancel the rest.
|
|
330
|
+
const prefix = await readStreamPrefix(response, MAX_SEGMENT_PROBE_BYTES);
|
|
331
|
+
return prefix;
|
|
287
332
|
}
|
|
288
333
|
catch (error) {
|
|
289
334
|
LOG.debug("native:codec", "Segment prefix fetch error: %s.", String(error));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codecInference.js","sourceRoot":"","sources":["../../src/native/codecInference.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"codecInference.js","sourceRoot":"","sources":["../../src/native/codecInference.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;;;;;;;;;;;GAeG;AAEH,sGAAsG;AACtG,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,2IAA2I;AAC3I,MAAM,OAAO,GAAG,CAAC,CAAC;AAElB;;;;GAIG;AACH,MAAM,uBAAuB,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1C,6JAA6J;AAC7J,4FAA4F;AAC5F,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAEtC;;GAEG;AACH,MAAM,uBAAuB,GAAqC;IAEhE,oFAAoF;IACpF,IAAI,EAAE,MAAM;IACZ,gGAAgG;IAChG,IAAI,EAAE,MAAM;CACb,CAAC;AAuBF;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,YAAoB,EAAE,OAAe;IAEvE,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,KAAI,MAAM,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAE9C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAE9B,aAAa,GAAG,IAAI,CAAC;YAErB,SAAS;QACX,CAAC;QAED,IAAG,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAEjC,SAAS;QACX,CAAC;QAED,IAAG,aAAa,EAAE,CAAC;YAEjB,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,gBAAgB,CAAC,MAAc,EAAE,SAAiB;IAEzD,KAAI,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,cAAc,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,cAAc,EAAE,CAAC;QAEzF,IAAG,MAAM,CAAC,MAAM,CAAC,KAAK,YAAY,EAAE,CAAC;YAEnC,4EAA4E;YAC5E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;QAE1C,IAAG,GAAG,KAAK,SAAS,EAAE,CAAC;YAErB,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAAC,MAAc,EAAE,YAAoB;IAElE,yJAAyJ;IACzJ,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAExE,IAAG,CAAC,iBAAiB,KAAK,CAAC,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,CAAC,EAAE,CAAC;QAE1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2EAA2E;IAC3E,IAAG,iBAAiB,KAAK,CAAC,EAAE,CAAC;QAE3B,OAAO,YAAY,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,2JAA2J;IAC3J,kEAAkE;IAClE,MAAM,gBAAgB,GAAG,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAEvD,OAAO,YAAY,GAAG,CAAC,GAAG,gBAAgB,CAAC;AAC7C,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,sBAAsB,CAAC,MAAc,EAAE,YAAoB,EAAE,aAAqB;IAEzF,6JAA6J;IAC7J,8DAA8D;IAC9D,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAE3D,IAAG,IAAI,KAAK,CAAC,EAAE,CAAC;QAEd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAEhD,2EAA2E;IAC3E,OAAO,aAAa,GAAG,CAAC,GAAG,YAAY,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,iBAAiB,CAAC,MAAc,EAAE,aAAqB;IAE9D,4BAA4B;IAC5B,IAAG,MAAM,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC;QAElC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,iBAAiB,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAClE,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,gBAAgB,CAAC;IAClE,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC,GAAG,aAAa,CAAC;IAErD,IAAG,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAE9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uJAAuJ;IACvJ,2EAA2E;IAC3E,IAAI,MAAM,GAAG,aAAa,GAAG,CAAC,CAAC;IAC/B,MAAM,WAAW,GAAG,UAAU,GAAG,CAAC,CAAC;IAEnC,OAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC;QAElC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;QAE1C,IAAG,aAAa,KAAK,CAAC,EAAE,CAAC;YAEvB,OAAO,GAAG,CAAC;QACb,CAAC;QAED,MAAM,IAAI,CAAC,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,0BAA0B,CAAC,MAAc,EAAE,aAAqB;IAEvE,4BAA4B;IAC5B,IAAG,MAAM,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC;QAElC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,iBAAiB,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAClE,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,gBAAgB,CAAC;IAClE,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC,GAAG,aAAa,CAAC;IAErD,IAAG,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAE9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uJAAuJ;IACvJ,2FAA2F;IAC3F,MAAM,qBAAqB,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACvE,MAAM,oBAAoB,GAAG,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,iBAAiB,GAAG,CAAC,qBAAqB,IAAI,CAAC,CAAC,GAAG,oBAAoB,CAAC;IAE9E,uFAAuF;IACvF,IAAI,MAAM,GAAG,aAAa,GAAG,EAAE,GAAG,iBAAiB,CAAC;IACpD,MAAM,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC;IAElC,OAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC;QAEjC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,gBAAgB,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAC1D,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,CAAC,gBAAgB,IAAI,CAAC,CAAC,GAAG,eAAe,CAAC;QAE/D,IAAG,uBAAuB,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;YAErD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,IAAI,CAAC,GAAG,YAAY,CAAC;IAC7B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc;IAEnD,kBAAkB;IAClB,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEpD,IAAG,SAAS,KAAK,IAAI,EAAE,CAAC;QAEtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAE7D,IAAG,UAAU,KAAK,IAAI,EAAE,CAAC;QAEvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAEzE,IAAG,UAAU,KAAK,IAAI,EAAE,CAAC;QAEvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAErD,IAAG,MAAM,KAAK,IAAI,EAAE,CAAC;QAEnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sDAAsD;IACtD,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEnD,IAAG,SAAS,KAAK,IAAI,EAAE,CAAC;QAEtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAE7D,IAAG,UAAU,KAAK,IAAI,EAAE,CAAC;QAEvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAEzE,IAAG,UAAU,KAAK,IAAI,EAAE,CAAC;QAEvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,0BAA0B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAElE,IAAG,UAAU,KAAK,IAAI,EAAE,CAAC;QAEvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,uBAAuB,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;AACrD,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,gBAAgB,CAAC,QAAkB,EAAE,KAAa;IAE/D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAE3B,kKAAkK;IAClK,+DAA+D;IAC/D,IAAG,CAAC,IAAI,EAAE,CAAC;QAET,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,CAAC;QAEH,OAAM,KAAK,GAAG,KAAK,EAAE,CAAC;YAEpB,iKAAiK;YACjK,4FAA4F;YAC5F,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAE5C,IAAG,IAAI,EAAE,CAAC;gBAER,MAAM;YACR,CAAC;YAED,4JAA4J;YAC5J,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;YAChC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAE5G,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;QACxB,CAAC;IACH,CAAC;YAAS,CAAC;QAET,+JAA+J;QAC/J,8IAA8I;QAC9I,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAE3C,IAAI,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE;YAEtC,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAAC,uBAAuB,GAAG,CAAC,CAAC,EAAE;YACpE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,wBAAwB,CAAC;SACtD,CAAC,CAAC;QAEH,oIAAoI;QACpI,IAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC;YAE7C,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,wCAAwC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAErF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,8JAA8J;QAC9J,gKAAgK;QAChK,sJAAsJ;QACtJ,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;QAEzE,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAM,KAAK,EAAE,CAAC;QAEd,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,iCAAiC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAE5E,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA+B;IAEnE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAE1C,MAAM,MAAM,GAAG,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAE1D,IAAG,CAAC,MAAM,EAAE,CAAC;QAEX,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,4JAA4J;IAC5J,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE3C,iHAAiH;IACjH,IAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAE5B,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,kDAAkD,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAErG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAEhD,IAAG,CAAC,MAAM,EAAE,CAAC;QAEX,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,KAAK,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE7C,IAAG,KAAK,EAAE,CAAC;QAET,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,0CAA0C,EAAE,KAAK,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QAEN,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,oDAAoD,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC"}
|