prismcast 1.9.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.d.ts +1 -1
- package/dist/app.js +27 -9
- package/dist/app.js.map +1 -1
- package/dist/browser/cdp.js +7 -7
- package/dist/browser/cdp.js.map +1 -1
- package/dist/browser/channelSelection.d.ts +41 -11
- package/dist/browser/channelSelection.js +75 -24
- package/dist/browser/channelSelection.js.map +1 -1
- package/dist/browser/display.d.ts +1 -1
- package/dist/browser/index.d.ts +8 -8
- package/dist/browser/index.js +42 -43
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/login.d.ts +2 -2
- package/dist/browser/login.js +1 -1
- package/dist/browser/manifestInterceptor.d.ts +77 -0
- package/dist/browser/manifestInterceptor.js +323 -0
- package/dist/browser/manifestInterceptor.js.map +1 -0
- package/dist/browser/precaching.js +4 -4
- package/dist/browser/tuning/comcastPolymer.d.ts +1 -1
- package/dist/browser/tuning/cox.d.ts +1 -1
- package/dist/browser/tuning/directv.d.ts +1 -1
- package/dist/browser/tuning/directv.js +61 -62
- package/dist/browser/tuning/directv.js.map +1 -1
- package/dist/browser/tuning/fox.d.ts +1 -1
- package/dist/browser/tuning/fox.js +171 -14
- package/dist/browser/tuning/fox.js.map +1 -1
- package/dist/browser/tuning/hbo.d.ts +1 -1
- package/dist/browser/tuning/hbo.js +6 -6
- package/dist/browser/tuning/hbo.js.map +1 -1
- package/dist/browser/tuning/hulu.d.ts +1 -1
- package/dist/browser/tuning/hulu.js +117 -110
- package/dist/browser/tuning/hulu.js.map +1 -1
- package/dist/browser/tuning/shared.d.ts +3 -3
- package/dist/browser/tuning/shared.js +5 -5
- package/dist/browser/tuning/sling.d.ts +1 -1
- package/dist/browser/tuning/sling.js +28 -28
- package/dist/browser/tuning/sling.js.map +1 -1
- package/dist/browser/tuning/spectrum.d.ts +1 -1
- package/dist/browser/tuning/spectrum.js +21 -22
- package/dist/browser/tuning/spectrum.js.map +1 -1
- package/dist/browser/tuning/thumbnailRow.d.ts +1 -1
- package/dist/browser/tuning/thumbnailRow.js +1 -1
- package/dist/browser/tuning/tileClick.d.ts +1 -1
- package/dist/browser/tuning/tileClick.js +5 -5
- package/dist/browser/tuning/xfinity.d.ts +1 -1
- package/dist/browser/tuning/youtubeTv.d.ts +1 -1
- package/dist/browser/tuning/youtubeTv.js +17 -18
- package/dist/browser/tuning/youtubeTv.js.map +1 -1
- package/dist/browser/video.d.ts +20 -6
- package/dist/browser/video.js +30 -38
- package/dist/browser/video.js.map +1 -1
- package/dist/channels/index.d.ts +1 -2
- package/dist/channels/index.js +73 -40
- package/dist/channels/index.js.map +1 -1
- package/dist/config/channelForm.d.ts +58 -0
- package/dist/config/channelForm.js +129 -0
- package/dist/config/channelForm.js.map +1 -0
- package/dist/config/consistencyProbe.d.ts +7 -0
- package/dist/config/consistencyProbe.js +143 -0
- package/dist/config/consistencyProbe.js.map +1 -0
- package/dist/config/health.d.ts +4 -3
- package/dist/config/health.js +75 -62
- package/dist/config/health.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.js +19 -12
- package/dist/config/index.js.map +1 -1
- package/dist/config/paths.d.ts +9 -3
- package/dist/config/paths.js +12 -4
- package/dist/config/paths.js.map +1 -1
- package/dist/config/persistence.context.d.ts +8 -0
- package/dist/config/persistence.context.js +30 -0
- package/dist/config/persistence.context.js.map +1 -0
- package/dist/config/persistence.d.ts +110 -12
- package/dist/config/persistence.js +351 -32
- package/dist/config/persistence.js.map +1 -1
- package/dist/config/presets.d.ts +14 -4
- package/dist/config/presets.js +84 -75
- package/dist/config/presets.js.map +1 -1
- package/dist/config/profiles.d.ts +2 -2
- package/dist/config/profiles.js +7 -9
- package/dist/config/profiles.js.map +1 -1
- package/dist/config/servicePacks.d.ts +2 -2
- package/dist/config/servicePacks.js +28 -28
- package/dist/config/servicePacks.js.map +1 -1
- package/dist/config/services.d.ts +62 -36
- package/dist/config/services.js +150 -136
- package/dist/config/services.js.map +1 -1
- package/dist/config/sites.d.ts +3 -3
- package/dist/config/sites.js +16 -16
- package/dist/config/sites.js.map +1 -1
- package/dist/config/userChannels.d.ts +500 -41
- package/dist/config/userChannels.js +1201 -312
- package/dist/config/userChannels.js.map +1 -1
- package/dist/config/userConfig.d.ts +103 -10
- package/dist/config/userConfig.js +277 -117
- package/dist/config/userConfig.js.map +1 -1
- package/dist/config/userProfiles.d.ts +4 -2
- package/dist/config/userProfiles.js +72 -26
- package/dist/config/userProfiles.js.map +1 -1
- package/dist/hdhr/channelMap.js +8 -11
- package/dist/hdhr/channelMap.js.map +1 -1
- package/dist/hdhr/deviceId.js +10 -9
- package/dist/hdhr/deviceId.js.map +1 -1
- package/dist/hdhr/discover.js +4 -5
- package/dist/hdhr/discover.js.map +1 -1
- package/dist/hdhr/index.js +6 -10
- package/dist/hdhr/index.js.map +1 -1
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/dist/native/codecInference.d.ts +44 -0
- package/dist/native/codecInference.js +327 -0
- package/dist/native/codecInference.js.map +1 -0
- package/dist/native/decrypt.d.ts +1 -1
- package/dist/native/index.d.ts +5 -5
- package/dist/native/index.js +42 -64
- package/dist/native/index.js.map +1 -1
- package/dist/native/probe.d.ts +27 -9
- package/dist/native/probe.js +158 -67
- package/dist/native/probe.js.map +1 -1
- package/dist/native/proxy.d.ts +4 -2
- package/dist/native/proxy.js +52 -49
- package/dist/native/proxy.js.map +1 -1
- package/dist/native/tokenExpiry.d.ts +22 -0
- package/dist/native/tokenExpiry.js +153 -0
- package/dist/native/tokenExpiry.js.map +1 -0
- package/dist/routes/auth.js +6 -10
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/components.js +2 -2
- package/dist/routes/components.js.map +1 -1
- package/dist/routes/config/channels/endpoints/browse.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/browse.js +195 -0
- package/dist/routes/config/channels/endpoints/browse.js.map +1 -0
- package/dist/routes/config/channels/endpoints/bulk.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/bulk.js +128 -0
- package/dist/routes/config/channels/endpoints/bulk.js.map +1 -0
- package/dist/routes/config/channels/endpoints/crud.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/crud.js +504 -0
- package/dist/routes/config/channels/endpoints/crud.js.map +1 -0
- package/dist/routes/config/channels/endpoints/importExport.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/importExport.js +131 -0
- package/dist/routes/config/channels/endpoints/importExport.js.map +1 -0
- package/dist/routes/config/channels/endpoints/predefined.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/predefined.js +78 -0
- package/dist/routes/config/channels/endpoints/predefined.js.map +1 -0
- package/dist/routes/config/channels/endpoints/prefs.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/prefs.js +58 -0
- package/dist/routes/config/channels/endpoints/prefs.js.map +1 -0
- package/dist/routes/config/channels/endpoints/service.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/service.js +149 -0
- package/dist/routes/config/channels/endpoints/service.js.map +1 -0
- package/dist/routes/config/channels/endpoints/tags.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/tags.js +185 -0
- package/dist/routes/config/channels/endpoints/tags.js.map +1 -0
- package/dist/routes/config/channels/http/handler.d.ts +10 -0
- package/dist/routes/config/channels/http/handler.js +20 -0
- package/dist/routes/config/channels/http/handler.js.map +1 -0
- package/dist/routes/config/channels/http/playlistHint.d.ts +25 -0
- package/dist/routes/config/channels/http/playlistHint.js +40 -0
- package/dist/routes/config/channels/http/playlistHint.js.map +1 -0
- package/dist/routes/config/channels/http/serviceWarning.d.ts +10 -0
- package/dist/routes/config/channels/http/serviceWarning.js +28 -0
- package/dist/routes/config/channels/http/serviceWarning.js.map +1 -0
- package/dist/routes/config/channels/index.d.ts +3 -3
- package/dist/routes/config/channels/index.js +1 -1
- package/dist/routes/config/channels/index.js.map +1 -1
- package/dist/routes/config/channels/{routes.d.ts → setup.d.ts} +1 -1
- package/dist/routes/config/channels/setup.js +23 -0
- package/dist/routes/config/channels/setup.js.map +1 -0
- package/dist/routes/config/channels/table.d.ts +9 -9
- package/dist/routes/config/channels/table.js +124 -76
- package/dist/routes/config/channels/table.js.map +1 -1
- package/dist/routes/config/http/envelope.d.ts +111 -0
- package/dist/routes/config/http/envelope.js +103 -0
- package/dist/routes/config/http/envelope.js.map +1 -0
- package/dist/routes/config/index.d.ts +9 -9
- package/dist/routes/config/index.js +2 -2
- package/dist/routes/config/index.js.map +1 -1
- package/dist/routes/config/services.js +69 -68
- package/dist/routes/config/services.js.map +1 -1
- package/dist/routes/config/settings.d.ts +1 -1
- package/dist/routes/config/settings.js +45 -38
- package/dist/routes/config/settings.js.map +1 -1
- package/dist/routes/debug.js +12 -11
- package/dist/routes/debug.js.map +1 -1
- package/dist/routes/icons.js +2 -2
- package/dist/routes/icons.js.map +1 -1
- package/dist/routes/logs.js +19 -30
- package/dist/routes/logs.js.map +1 -1
- package/dist/routes/mpegts.js +1 -1
- package/dist/routes/playlist.d.ts +1 -1
- package/dist/routes/playlist.js +37 -26
- package/dist/routes/playlist.js.map +1 -1
- package/dist/routes/root/content.js +27 -6
- package/dist/routes/root/content.js.map +1 -1
- package/dist/routes/root/index.js +2 -5
- package/dist/routes/root/index.js.map +1 -1
- package/dist/routes/root/scripts/channels.js +16 -16
- package/dist/routes/root/scripts/channels.js.map +1 -1
- package/dist/routes/root/scripts/config.js +59 -59
- package/dist/routes/root/scripts/config.js.map +1 -1
- package/dist/routes/root/scripts/index.d.ts +4 -4
- package/dist/routes/root/scripts/shared.js +24 -10
- package/dist/routes/root/scripts/shared.js.map +1 -1
- package/dist/routes/root/scripts/status.d.ts +4 -0
- package/dist/routes/root/scripts/status.handlers.d.ts +182 -0
- package/dist/routes/root/scripts/status.handlers.js +713 -0
- package/dist/routes/root/scripts/status.handlers.js.map +1 -0
- package/dist/routes/root/scripts/status.js +86 -488
- package/dist/routes/root/scripts/status.js.map +1 -1
- package/dist/routes/root/styles.js +5 -5
- package/dist/routes/services.js +18 -15
- package/dist/routes/services.js.map +1 -1
- package/dist/routes/sse.d.ts +16 -0
- package/dist/routes/sse.js +29 -0
- package/dist/routes/sse.js.map +1 -0
- package/dist/routes/streams.js +10 -23
- package/dist/routes/streams.js.map +1 -1
- package/dist/routes/ui.d.ts +2 -2
- package/dist/routes/upgrade.js +6 -7
- package/dist/routes/upgrade.js.map +1 -1
- package/dist/service/commands.context.d.ts +6 -0
- package/dist/service/commands.context.js +47 -0
- package/dist/service/commands.context.js.map +1 -0
- package/dist/service/commands.d.ts +53 -8
- package/dist/service/commands.js +171 -188
- package/dist/service/commands.js.map +1 -1
- package/dist/service/generators.context.d.ts +6 -0
- package/dist/service/generators.context.js +45 -0
- package/dist/service/generators.context.js.map +1 -0
- package/dist/service/generators.d.ts +56 -16
- package/dist/service/generators.js +499 -383
- package/dist/service/generators.js.map +1 -1
- package/dist/service/index.d.ts +2 -2
- package/dist/streaming/clients.d.ts +2 -2
- package/dist/streaming/clients.js +2 -2
- package/dist/streaming/codec.d.ts +2 -2
- package/dist/streaming/codec.js +0 -1
- package/dist/streaming/codec.js.map +1 -1
- package/dist/streaming/fmp4Segmenter.d.ts +2 -2
- package/dist/streaming/fmp4Segmenter.js +12 -12
- package/dist/streaming/hls.d.ts +3 -3
- package/dist/streaming/hls.js +81 -70
- package/dist/streaming/hls.js.map +1 -1
- package/dist/streaming/hlsResume.d.ts +3 -3
- package/dist/streaming/hlsResume.js +5 -5
- package/dist/streaming/hlsSegments.d.ts +5 -2
- package/dist/streaming/hlsSegments.js +14 -9
- package/dist/streaming/hlsSegments.js.map +1 -1
- package/dist/streaming/monitor.d.ts +12 -12
- package/dist/streaming/monitor.js +80 -54
- package/dist/streaming/monitor.js.map +1 -1
- package/dist/streaming/mp4Parser.d.ts +34 -4
- package/dist/streaming/mp4Parser.js +111 -29
- package/dist/streaming/mp4Parser.js.map +1 -1
- package/dist/streaming/mpegts.d.ts +1 -1
- package/dist/streaming/mpegts.js +13 -10
- package/dist/streaming/mpegts.js.map +1 -1
- package/dist/streaming/playlistBuilder.d.ts +1 -1
- package/dist/streaming/playlistBuilder.js +2 -2
- package/dist/streaming/preroll.d.ts +9 -9
- package/dist/streaming/preroll.js +39 -41
- package/dist/streaming/preroll.js.map +1 -1
- package/dist/streaming/pretune.js +4 -4
- package/dist/streaming/pretune.js.map +1 -1
- package/dist/streaming/recovery.d.ts +3 -3
- package/dist/streaming/recovery.js +4 -4
- package/dist/streaming/registry.d.ts +6 -6
- package/dist/streaming/setup.d.ts +9 -8
- package/dist/streaming/setup.js +97 -49
- package/dist/streaming/setup.js.map +1 -1
- package/dist/streaming/showInfo.d.ts +9 -3
- package/dist/streaming/showInfo.js +26 -18
- package/dist/streaming/showInfo.js.map +1 -1
- package/dist/streaming/statusEmitter.d.ts +4 -4
- package/dist/streaming/statusEmitter.js +2 -2
- package/dist/types/channels.d.ts +133 -34
- package/dist/types/channels.js +39 -1
- package/dist/types/channels.js.map +1 -1
- package/dist/types/config.d.ts +20 -1
- package/dist/types/index.d.ts +9 -8
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/profiles.d.ts +5 -4
- package/dist/types/selection.d.ts +48 -4
- package/dist/types/streaming.d.ts +1 -1
- package/dist/upgrade/commands.context.d.ts +6 -0
- package/dist/upgrade/commands.context.js +29 -0
- package/dist/upgrade/commands.context.js.map +1 -0
- package/dist/upgrade/commands.d.ts +29 -2
- package/dist/upgrade/commands.js +87 -134
- package/dist/upgrade/commands.js.map +1 -1
- package/dist/upgrade/detection.context.d.ts +6 -0
- package/dist/upgrade/detection.context.js +24 -0
- package/dist/upgrade/detection.context.js.map +1 -0
- package/dist/upgrade/detection.d.ts +140 -10
- package/dist/upgrade/detection.js +153 -66
- package/dist/upgrade/detection.js.map +1 -1
- package/dist/upgrade/index.d.ts +2 -2
- package/dist/utils/chromeFetch.d.ts +1 -1
- package/dist/utils/chromeFetch.js +1 -1
- package/dist/utils/clock.d.ts +14 -0
- package/dist/utils/clock.js +28 -0
- package/dist/utils/clock.js.map +1 -0
- package/dist/utils/debugFilter.d.ts +1 -1
- package/dist/utils/debugFilter.js +6 -4
- package/dist/utils/debugFilter.js.map +1 -1
- package/dist/utils/delay.d.ts +2 -3
- package/dist/utils/delay.js +10 -16
- package/dist/utils/delay.js.map +1 -1
- package/dist/utils/evaluate.js +12 -14
- package/dist/utils/evaluate.js.map +1 -1
- package/dist/utils/ffmpeg.context.d.ts +6 -0
- package/dist/utils/ffmpeg.context.js +31 -0
- package/dist/utils/ffmpeg.context.js.map +1 -0
- package/dist/utils/ffmpeg.d.ts +85 -29
- package/dist/utils/ffmpeg.js +126 -129
- package/dist/utils/ffmpeg.js.map +1 -1
- package/dist/utils/fileLogger.d.ts +18 -2
- package/dist/utils/fileLogger.js +58 -30
- package/dist/utils/fileLogger.js.map +1 -1
- package/dist/utils/format.d.ts +1 -1
- package/dist/utils/format.js +2 -2
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/html.js +1 -3
- package/dist/utils/html.js.map +1 -1
- package/dist/utils/index.d.ts +21 -20
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.js +16 -20
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/m3u.d.ts +18 -3
- package/dist/utils/m3u.js +28 -14
- package/dist/utils/m3u.js.map +1 -1
- package/dist/utils/memo.d.ts +19 -0
- package/dist/utils/memo.js +53 -0
- package/dist/utils/memo.js.map +1 -0
- package/dist/utils/morganStream.js +2 -2
- package/dist/utils/morganStream.js.map +1 -1
- package/dist/utils/pid.d.ts +2 -2
- package/dist/utils/pid.js +2 -2
- package/dist/utils/platform.d.ts +1 -1
- package/dist/utils/platform.js +3 -3
- package/dist/utils/platform.js.map +1 -1
- package/dist/utils/retry.d.ts +2 -0
- package/dist/utils/retry.js +9 -7
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/sanitize.d.ts +2 -2
- package/dist/utils/sanitize.js +4 -4
- package/dist/utils/timing.d.ts +6 -3
- package/dist/utils/timing.js +10 -6
- package/dist/utils/timing.js.map +1 -1
- package/dist/utils/version.d.ts +3 -2
- package/dist/utils/version.js +14 -27
- package/dist/utils/version.js.map +1 -1
- package/package.json +13 -7
- package/dist/native/intercept.d.ts +0 -35
- package/dist/native/intercept.js +0 -181
- package/dist/native/intercept.js.map +0 -1
- package/dist/routes/config/channels/routes.js +0 -1505
- package/dist/routes/config/channels/routes.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DomainConfig, ProfilesValidationResult, SiteProfile, UserProfilesLoadResult } from "../types/index.
|
|
1
|
+
import type { DomainConfig, ProfilesValidationResult, SiteProfile, UserProfilesLoadResult } from "../types/index.ts";
|
|
2
2
|
/**
|
|
3
3
|
* Normalizes legacy field names in a set of profiles. Renames any fields listed in LEGACY_PROFILE_FLAGS to their current names in-place. When a profile already
|
|
4
4
|
* contains the current field name, the current value is preserved and the legacy field is deleted without overwriting.
|
|
@@ -27,11 +27,13 @@ export declare function getUserProfiles(): Record<string, SiteProfile>;
|
|
|
27
27
|
*/
|
|
28
28
|
export declare function getUserDomains(): Record<string, DomainConfig>;
|
|
29
29
|
/**
|
|
30
|
-
* Compound data type for the profiles file store. Carries
|
|
30
|
+
* Compound data type for the profiles file store. Carries profile definitions, domain mappings, and the framework-managed schema metadata.
|
|
31
31
|
*/
|
|
32
32
|
interface ProfilesFileData {
|
|
33
33
|
domains: Record<string, DomainConfig>;
|
|
34
|
+
migrationsApplied: string[];
|
|
34
35
|
profiles: Record<string, SiteProfile>;
|
|
36
|
+
schemaVersion: number;
|
|
35
37
|
}
|
|
36
38
|
/**
|
|
37
39
|
* Reads the current profiles from disk without acquiring the serialization lock. Returns the parsed profiles and domains with parse status. Use this for
|
|
@@ -15,7 +15,7 @@ import { getProfilesFilePath } from "./paths.js";
|
|
|
15
15
|
* - "profiles": Custom site profile definitions (each must extend a built-in profile)
|
|
16
16
|
* - "domains": Domain-to-profile mappings (can reference built-in or user profiles)
|
|
17
17
|
*
|
|
18
|
-
* User profiles cannot extend other user profiles
|
|
18
|
+
* User profiles cannot extend other user profiles - only built-in profiles. This prevents cascading breakage when a referenced user profile is deleted.
|
|
19
19
|
*/
|
|
20
20
|
// Legacy profile flag names that have been renamed. Keys are the old names, values are the current names. Used by initializeUserProfiles() and service pack import to
|
|
21
21
|
// silently normalize persisted and imported profiles at the boundary where external data enters the system.
|
|
@@ -103,25 +103,56 @@ export function getUserProfiles() {
|
|
|
103
103
|
export function getUserDomains() {
|
|
104
104
|
return { ...loadedUserDomains };
|
|
105
105
|
}
|
|
106
|
+
/* Transactional store for profiles.json. The store uses a compound type that carries both profiles and domain mappings, plus schema metadata managed by the
|
|
107
|
+
* file store framework. The parse function uses extractObjectMap() to validate sub-objects. The beforeWrite hook conditionally includes/excludes top-level
|
|
108
|
+
* keys based on emptiness, and always emits the framework's schema metadata.
|
|
109
|
+
*/
|
|
110
|
+
/* Current schema version for profiles.json. Migrations are declared in profilesMigrations below; the framework runs them in order from the file's stored
|
|
111
|
+
* version up to this constant, stamps the new version after each, and records the audit trail in migrationsApplied.
|
|
112
|
+
*
|
|
113
|
+
* Version history:
|
|
114
|
+
* 1 - Original. Profile flag "noVideo" still present on user profiles.
|
|
115
|
+
* 2 - Renames profile flag "noVideo" -> "staticCapture" via normalizeLegacyProfileFlags.
|
|
116
|
+
*/
|
|
117
|
+
const CURRENT_PROFILES_SCHEMA_VERSION = 2;
|
|
106
118
|
/**
|
|
107
|
-
* Parses raw profiles.json content into the compound data type.
|
|
119
|
+
* Parses raw profiles.json content into the compound data type. Extracts profiles, domains, and framework metadata (schemaVersion, migrationsApplied).
|
|
108
120
|
* @param raw - The raw JSON string from the file.
|
|
109
121
|
* @returns The parsed compound data.
|
|
110
122
|
*/
|
|
111
123
|
function parseProfilesFile(raw) {
|
|
112
124
|
const parsed = JSON.parse(raw);
|
|
125
|
+
// Files predating the schemaVersion field are treated as version 1. The migration runner upgrades them to the current version.
|
|
126
|
+
let schemaVersion = 1;
|
|
127
|
+
if ((typeof parsed["schemaVersion"] === "number") && Number.isFinite(parsed["schemaVersion"]) && (parsed["schemaVersion"] >= 1)) {
|
|
128
|
+
schemaVersion = Math.floor(parsed["schemaVersion"]);
|
|
129
|
+
}
|
|
130
|
+
const migrationsApplied = [];
|
|
131
|
+
if (Array.isArray(parsed["migrationsApplied"])) {
|
|
132
|
+
for (const entry of parsed["migrationsApplied"]) {
|
|
133
|
+
if (typeof entry === "string") {
|
|
134
|
+
migrationsApplied.push(entry);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
113
138
|
return {
|
|
114
|
-
domains: extractObjectMap(parsed
|
|
115
|
-
|
|
139
|
+
domains: extractObjectMap(parsed["domains"]),
|
|
140
|
+
migrationsApplied,
|
|
141
|
+
profiles: extractObjectMap(parsed["profiles"]),
|
|
142
|
+
schemaVersion
|
|
116
143
|
};
|
|
117
144
|
}
|
|
118
145
|
/**
|
|
119
|
-
* Prepares profiles data for writing to disk.
|
|
146
|
+
* Prepares profiles data for writing to disk. Always emits the framework's schema metadata; conditionally includes profile and domain top-level keys only
|
|
147
|
+
* when they have entries.
|
|
120
148
|
* @param data - The compound profiles data.
|
|
121
149
|
* @returns The serializable output.
|
|
122
150
|
*/
|
|
123
151
|
function prepareProfilesForWrite(data) {
|
|
124
|
-
const file = {};
|
|
152
|
+
const file = { schemaVersion: data.schemaVersion };
|
|
153
|
+
if (data.migrationsApplied.length > 0) {
|
|
154
|
+
file.migrationsApplied = data.migrationsApplied;
|
|
155
|
+
}
|
|
125
156
|
if (Object.keys(data.domains).length > 0) {
|
|
126
157
|
file.domains = data.domains;
|
|
127
158
|
}
|
|
@@ -130,13 +161,36 @@ function prepareProfilesForWrite(data) {
|
|
|
130
161
|
}
|
|
131
162
|
return file;
|
|
132
163
|
}
|
|
164
|
+
/* Declarative schema migrations. The file store framework runs these in order from the file's stored schemaVersion up to CURRENT_PROFILES_SCHEMA_VERSION,
|
|
165
|
+
* stamping the new version and recording the description in migrationsApplied after each application. Apply functions mutate the data in place.
|
|
166
|
+
*/
|
|
167
|
+
const profilesMigrations = {
|
|
168
|
+
2: {
|
|
169
|
+
apply: (data) => {
|
|
170
|
+
// Rename legacy noVideo flag to staticCapture across all stored profiles. Service pack import has its own normalization at the import boundary; this
|
|
171
|
+
// migration handles the persisted file.
|
|
172
|
+
normalizeLegacyProfileFlags(data.profiles);
|
|
173
|
+
},
|
|
174
|
+
description: "Rename legacy noVideo profile flag to staticCapture"
|
|
175
|
+
}
|
|
176
|
+
};
|
|
133
177
|
// Transactional store instance for profiles.json.
|
|
134
178
|
const profilesStore = createFileStore({
|
|
135
179
|
beforeWrite: prepareProfilesForWrite,
|
|
136
|
-
|
|
180
|
+
currentSchemaVersion: CURRENT_PROFILES_SCHEMA_VERSION,
|
|
181
|
+
defaultValue: () => ({
|
|
182
|
+
domains: {},
|
|
183
|
+
migrationsApplied: [],
|
|
184
|
+
profiles: {},
|
|
185
|
+
schemaVersion: CURRENT_PROFILES_SCHEMA_VERSION
|
|
186
|
+
}),
|
|
187
|
+
getSchemaVersion: (data) => data.schemaVersion,
|
|
137
188
|
label: "profiles",
|
|
189
|
+
migrations: profilesMigrations,
|
|
138
190
|
parse: parseProfilesFile,
|
|
139
|
-
path: getProfilesFilePath
|
|
191
|
+
path: getProfilesFilePath,
|
|
192
|
+
recordMigration: (data, description) => { data.migrationsApplied.push(description); },
|
|
193
|
+
setSchemaVersion: (data, version) => { data.schemaVersion = version; }
|
|
140
194
|
});
|
|
141
195
|
/**
|
|
142
196
|
* Reads the current profiles from disk without acquiring the serialization lock. Returns the parsed profiles and domains with parse status. Use this for
|
|
@@ -149,7 +203,8 @@ export async function readProfiles() {
|
|
|
149
203
|
domains: result.data.domains,
|
|
150
204
|
parseError: result.parseError,
|
|
151
205
|
parseErrorMessage: result.parseErrorMessage,
|
|
152
|
-
profiles: result.data.profiles
|
|
206
|
+
profiles: result.data.profiles,
|
|
207
|
+
recoveredFromBackup: result.recoveredFromBackup
|
|
153
208
|
};
|
|
154
209
|
}
|
|
155
210
|
/**
|
|
@@ -206,26 +261,17 @@ export async function deleteUserDomain(domain) {
|
|
|
206
261
|
* Initializes user profiles by loading them from the file. Called once at server startup before profile validation and channel loading.
|
|
207
262
|
*/
|
|
208
263
|
export async function initializeUserProfiles() {
|
|
264
|
+
// Read the file. Schema migrations (noVideo -> staticCapture rename) run automatically inside the file store framework via the declarative
|
|
265
|
+
// profilesMigrations registry; ensureMigrated (called by the release boot coordinator at startup) persists any upgrades to disk before this function runs.
|
|
209
266
|
const result = await readProfiles();
|
|
210
267
|
loadedUserProfiles = result.profiles;
|
|
211
268
|
loadedUserDomains = result.domains;
|
|
212
269
|
userProfilesParseError = result.parseError;
|
|
213
270
|
userProfilesParseErrorMessage = result.parseErrorMessage;
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
// propagated to startup. The normalized in-memory profiles are used regardless...the migration is best-effort persistence.
|
|
217
|
-
if (normalizeLegacyProfileFlags(loadedUserProfiles)) {
|
|
218
|
-
try {
|
|
219
|
-
await mutateProfiles((data) => {
|
|
220
|
-
normalizeLegacyProfileFlags(data.profiles);
|
|
221
|
-
});
|
|
222
|
-
LOG.info("Migrated legacy profile flags in user profiles file.");
|
|
223
|
-
}
|
|
224
|
-
catch (saveError) {
|
|
225
|
-
LOG.warn("Failed to persist migrated profile flags: %s. Migration will retry on next startup.", (saveError instanceof Error) ? saveError.message : String(saveError));
|
|
226
|
-
}
|
|
271
|
+
if (result.recoveredFromBackup) {
|
|
272
|
+
LOG.info("User profiles were recovered from backup after a corrupt main file.");
|
|
227
273
|
}
|
|
228
|
-
// Check for non-printable characters in loaded profile and domain string values. These warnings are informational
|
|
274
|
+
// Check for non-printable characters in loaded profile and domain string values. These warnings are informational - loaded data is not modified.
|
|
229
275
|
for (const [profileKey, profile] of Object.entries(loadedUserProfiles)) {
|
|
230
276
|
for (const [field, value] of Object.entries(profile)) {
|
|
231
277
|
if ((typeof value === "string") && containsNonPrintable(value)) {
|
|
@@ -243,7 +289,7 @@ export async function initializeUserProfiles() {
|
|
|
243
289
|
const profileCount = Object.keys(loadedUserProfiles).length;
|
|
244
290
|
const domainCount = Object.keys(loadedUserDomains).length;
|
|
245
291
|
if ((profileCount > 0) || (domainCount > 0)) {
|
|
246
|
-
LOG.info("Loaded %d user
|
|
292
|
+
LOG.info("Loaded %d user profiles and %d domain mappings.", profileCount, domainCount);
|
|
247
293
|
}
|
|
248
294
|
}
|
|
249
295
|
// Validation Functions.
|
|
@@ -284,7 +330,7 @@ export function validateProfileKey(key, isNew) {
|
|
|
284
330
|
*/
|
|
285
331
|
export function validateProfile(key, profile) {
|
|
286
332
|
const errors = [];
|
|
287
|
-
// The extends field is required for user profiles
|
|
333
|
+
// The extends field is required for user profiles - they must build on a built-in profile.
|
|
288
334
|
if (!profile.extends) {
|
|
289
335
|
errors.push("Profile '" + key + "': extends is required. User profiles must extend a built-in profile.");
|
|
290
336
|
return errors;
|
|
@@ -344,7 +390,7 @@ export function validateDomain(domain, config, availableProfiles) {
|
|
|
344
390
|
// Reject domains that collide with built-in domain mappings. User domains that shadow built-in domains cause the built-in service to disappear from the system,
|
|
345
391
|
// affecting all channels on that domain. Users should set the profile field on individual channels to use a custom profile on a built-in domain instead.
|
|
346
392
|
const conciseDomain = extractDomain("https://" + domain);
|
|
347
|
-
const collidesWithBuiltin = DOMAIN_CONFIG[domain] ?? DOMAIN_CONFIG[conciseDomain];
|
|
393
|
+
const collidesWithBuiltin = (DOMAIN_CONFIG[domain]) ?? (DOMAIN_CONFIG[conciseDomain]);
|
|
348
394
|
if (collidesWithBuiltin) {
|
|
349
395
|
const builtinService = collidesWithBuiltin.service ?? conciseDomain;
|
|
350
396
|
errors.push("Domain '" + domain + "' is already mapped to built-in service '" + builtinService +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userProfiles.js","sourceRoot":"","sources":["../../src/config/userProfiles.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"userProfiles.js","sourceRoot":"","sources":["../../src/config/userProfiles.ts"],"names":[],"mappings":"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"}
|
package/dist/hdhr/channelMap.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
*
|
|
3
3
|
* channelMap.ts: Channel key to channel number mapping for HDHomeRun emulation.
|
|
4
4
|
*/
|
|
5
|
-
import { getAllChannels } from "../config/userChannels.js";
|
|
5
|
+
import { getAllChannels, getEffectiveHdhrEnabled } from "../config/userChannels.js";
|
|
6
6
|
/* HDHomeRun devices use numeric channel numbers (GuideNumber) for each channel. Plex requires these for EPG (electronic program guide) matching. PrismCast uses
|
|
7
7
|
* string keys (e.g., "cnn", "nbc") for channels, so we need a mapping layer.
|
|
8
8
|
*
|
|
@@ -27,7 +27,7 @@ export function buildChannelMap() {
|
|
|
27
27
|
const explicitNumbers = new Set();
|
|
28
28
|
for (const [key, channel] of Object.entries(channels)) {
|
|
29
29
|
// Skip channels excluded from the HDHR lineup.
|
|
30
|
-
if (channel
|
|
30
|
+
if (!getEffectiveHdhrEnabled(channel)) {
|
|
31
31
|
continue;
|
|
32
32
|
}
|
|
33
33
|
if ((channel.channelNumber !== undefined) && (channel.channelNumber > 0)) {
|
|
@@ -40,16 +40,13 @@ export function buildChannelMap() {
|
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
// Auto-assign numbers to channels without explicit channelNumber.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
})
|
|
49
|
-
.sort();
|
|
43
|
+
// Auto-assign numbers to channels without explicit channelNumber. Iterate entries (not just keys) so the channel reference stays narrowed; sort by key
|
|
44
|
+
// alphabetically for deterministic assignment.
|
|
45
|
+
const unassignedEntries = Object.entries(channels)
|
|
46
|
+
.filter(([, channel]) => getEffectiveHdhrEnabled(channel) && ((channel.channelNumber === undefined) || (channel.channelNumber <= 0)))
|
|
47
|
+
.sort(([a], [b]) => a.localeCompare(b));
|
|
50
48
|
let nextNumber = AUTO_ASSIGN_START;
|
|
51
|
-
for (const key of
|
|
52
|
-
const channel = channels[key];
|
|
49
|
+
for (const [key, channel] of unassignedEntries) {
|
|
53
50
|
// Skip numbers already claimed by explicit assignments.
|
|
54
51
|
while (explicitNumbers.has(nextNumber)) {
|
|
55
52
|
nextNumber++;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channelMap.js","sourceRoot":"","sources":["../../src/hdhr/channelMap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"channelMap.js","sourceRoot":"","sources":["../../src/hdhr/channelMap.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpF;;;;;;;;;GASG;AAEH,iGAAiG;AACjG,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAoB/B;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAE7B,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,+EAA+E;IAC/E,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAE1C,KAAI,MAAM,CAAE,GAAG,EAAE,OAAO,CAAE,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAEvD,+CAA+C;QAC/C,IAAG,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;YAErC,SAAS;QACX,CAAC;QAED,IAAG,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC;YAExE,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAE3C,OAAO,CAAC,IAAI,CAAC;gBAEX,GAAG;gBACH,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,GAAG;gBACzB,MAAM,EAAE,OAAO,CAAC,aAAa;gBAC7B,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,uJAAuJ;IACvJ,+CAA+C;IAC/C,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC/C,MAAM,CAAC,CAAC,CAAE,AAAD,EAAG,OAAO,CAAE,EAAE,EAAE,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;SACtI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1C,IAAI,UAAU,GAAG,iBAAiB,CAAC;IAEnC,KAAI,MAAM,CAAE,GAAG,EAAE,OAAO,CAAE,IAAI,iBAAiB,EAAE,CAAC;QAEhD,wDAAwD;QACxD,OAAM,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAEtC,UAAU,EAAE,CAAC;QACf,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YAEX,GAAG;YACH,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,GAAG;YACzB,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;QAEH,UAAU,EAAE,CAAC;IACf,CAAC;IAED,sDAAsD;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAE5C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,aAAqB;IAEzD,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;IAE1D,OAAO,KAAK,EAAE,GAAG,CAAC;AACpB,CAAC"}
|
package/dist/hdhr/deviceId.js
CHANGED
|
@@ -25,13 +25,14 @@ const DEVICEID_LOOKUP = [
|
|
|
25
25
|
*/
|
|
26
26
|
function computeChecksum(nibbles) {
|
|
27
27
|
let checksum = 0;
|
|
28
|
-
for (
|
|
29
|
-
// Even positions use the lookup table, odd positions use the raw nibble value.
|
|
28
|
+
for (const [i, nibble] of nibbles.entries()) {
|
|
29
|
+
// Even positions use the lookup table, odd positions use the raw nibble value. Both lookups stay within-bounds by construction (nibble in [0, 15] and the
|
|
30
|
+
// lookup table has 16 entries); ?? 0 satisfies TypeScript without changing behavior.
|
|
30
31
|
if ((i % 2) === 0) {
|
|
31
|
-
checksum ^= DEVICEID_LOOKUP[
|
|
32
|
+
checksum ^= DEVICEID_LOOKUP[nibble] ?? 0;
|
|
32
33
|
}
|
|
33
34
|
else {
|
|
34
|
-
checksum ^=
|
|
35
|
+
checksum ^= nibble;
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
return checksum;
|
|
@@ -60,12 +61,12 @@ export function generateDeviceId() {
|
|
|
60
61
|
// using computeChecksum(), because padding with zeros would include LOOKUP[0] for position 6 and skew the result.
|
|
61
62
|
const nibbles = Array.from(prefix, (ch) => parseInt(ch, 16));
|
|
62
63
|
let partialChecksum = 0;
|
|
63
|
-
for (
|
|
64
|
+
for (const [i, nibble] of nibbles.entries()) {
|
|
64
65
|
if ((i % 2) === 0) {
|
|
65
|
-
partialChecksum ^= DEVICEID_LOOKUP[
|
|
66
|
+
partialChecksum ^= DEVICEID_LOOKUP[nibble] ?? 0;
|
|
66
67
|
}
|
|
67
68
|
else {
|
|
68
|
-
partialChecksum ^=
|
|
69
|
+
partialChecksum ^= nibble;
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
72
|
// Find the final byte (2 nibbles) that makes the total checksum zero. Position 6 is even (lookup table), position 7 is odd (raw). We try all 256 values. A
|
|
@@ -73,12 +74,12 @@ export function generateDeviceId() {
|
|
|
73
74
|
for (let finalByte = 0; finalByte < 256; finalByte++) {
|
|
74
75
|
const highNibble = (finalByte >> 4) & 0xF;
|
|
75
76
|
const lowNibble = finalByte & 0xF;
|
|
76
|
-
const finalChecksum = partialChecksum ^ DEVICEID_LOOKUP[highNibble] ^ lowNibble;
|
|
77
|
+
const finalChecksum = partialChecksum ^ (DEVICEID_LOOKUP[highNibble] ?? 0) ^ lowNibble;
|
|
77
78
|
if (finalChecksum === 0) {
|
|
78
79
|
return prefix + finalByte.toString(16).padStart(2, "0");
|
|
79
80
|
}
|
|
80
81
|
}
|
|
81
|
-
// This is unreachable
|
|
82
|
+
// This is unreachable - a solution always exists within the 256 candidates. Fall back to a known-valid ID as a safety net.
|
|
82
83
|
return "1000000f";
|
|
83
84
|
}
|
|
84
85
|
//# sourceMappingURL=deviceId.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviceId.js","sourceRoot":"","sources":["../../src/hdhr/deviceId.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC;;;;;;;;GAQG;AAEH,8GAA8G;AAC9G,MAAM,eAAe,GAAG;IAEtB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;IACtC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;CACvC,CAAC;AAEF;;;;;GAKG;AACH,SAAS,eAAe,CAAC,OAAiB;IAExC,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAI,
|
|
1
|
+
{"version":3,"file":"deviceId.js","sourceRoot":"","sources":["../../src/hdhr/deviceId.ts"],"names":[],"mappings":"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"}
|
package/dist/hdhr/discover.js
CHANGED
|
@@ -11,7 +11,7 @@ import { getPackageVersion } from "../utils/index.js";
|
|
|
11
11
|
function resolveHostname(req) {
|
|
12
12
|
// Check X-Forwarded-Host first (reverse proxy scenarios), then fall back to the Host header.
|
|
13
13
|
const forwardedHost = req.get("x-forwarded-host");
|
|
14
|
-
const hostHeader = forwardedHost ? forwardedHost.split(",")[0].trim() : req.get("host");
|
|
14
|
+
const hostHeader = forwardedHost ? (forwardedHost.split(",")[0] ?? "").trim() : req.get("host");
|
|
15
15
|
if (hostHeader) {
|
|
16
16
|
// Strip port from host header if present (e.g., "192.168.1.100:5004" -> "192.168.1.100").
|
|
17
17
|
const bracketIndex = hostHeader.indexOf("]");
|
|
@@ -118,13 +118,12 @@ export function setupHdhrEndpoints(app) {
|
|
|
118
118
|
const tunerCount = CONFIG.streaming.maxConcurrentStreams;
|
|
119
119
|
const tuners = [];
|
|
120
120
|
// Build active tuner entries from currently running streams.
|
|
121
|
-
for (
|
|
122
|
-
const stream = streams[i];
|
|
121
|
+
for (const [i, stream] of streams.entries()) {
|
|
123
122
|
const channelEntry = channelByKey.get(stream.info.storeKey);
|
|
124
123
|
// Build the tuner entry. Active tuners include channel info and signal stats. Signal values are hardcoded at 100 since PrismCast streams are network-based and
|
|
125
|
-
// either working or not
|
|
124
|
+
// either working or not - there is no analog signal quality to report. Channel info is merged conditionally: prefer the channel map for VctNumber (numeric
|
|
126
125
|
// channel) and VctName (display name), fall back to stream.channelName for VctName if the channel was removed from the map after the stream started. Client
|
|
127
|
-
// address is normalized to strip IPv6-mapped IPv4 prefixes (::ffff:192.168.1.1
|
|
126
|
+
// address is normalized to strip IPv6-mapped IPv4 prefixes (::ffff:192.168.1.1 -> 192.168.1.1).
|
|
128
127
|
const tuner = {
|
|
129
128
|
Frequency: 0,
|
|
130
129
|
Resource: "tuner" + String(i),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/hdhr/discover.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAyCtD;;;;;GAKG;AACH,SAAS,eAAe,CAAC,GAAY;IAEnC,6FAA6F;IAC7F,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/hdhr/discover.ts"],"names":[],"mappings":"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"}
|
package/dist/hdhr/index.js
CHANGED
|
@@ -10,11 +10,11 @@ import { formatError } from "../utils/errors.js";
|
|
|
10
10
|
import { mutateConfig } from "../config/userConfig.js";
|
|
11
11
|
import { setupHdhrEndpoints } from "./discover.js";
|
|
12
12
|
/* When HDHomeRun emulation is enabled, PrismCast runs a separate Express server that responds to HDHomeRun API requests from Plex. This server is intentionally
|
|
13
|
-
* lightweight
|
|
13
|
+
* lightweight - it only serves device discovery and lineup metadata. All actual video streaming flows through PrismCast's main HTTP server via the HLS URLs in
|
|
14
14
|
* the lineup response.
|
|
15
15
|
*
|
|
16
16
|
* The HDHR server runs on a configurable port (default 5004) independently of the main server. If the port is unavailable, the HDHR feature is disabled
|
|
17
|
-
* gracefully without affecting the main server. Plex does not auto-detect emulated tuners
|
|
17
|
+
* gracefully without affecting the main server. Plex does not auto-detect emulated tuners - users must manually enter the address (IP:port) in Plex's DVR setup.
|
|
18
18
|
*/
|
|
19
19
|
// The HDHR HTTP server instance, used for graceful shutdown.
|
|
20
20
|
let hdhrServer = null;
|
|
@@ -51,14 +51,10 @@ export async function startHdhrServer() {
|
|
|
51
51
|
setupHdhrEndpoints(app);
|
|
52
52
|
// Start listening on the configured port. Handle EADDRINUSE gracefully.
|
|
53
53
|
try {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
server.on("error", (error) => {
|
|
59
|
-
reject(error);
|
|
60
|
-
});
|
|
61
|
-
});
|
|
54
|
+
const { promise, resolve, reject } = Promise.withResolvers();
|
|
55
|
+
const server = app.listen(CONFIG.hdhr.port, CONFIG.server.host, () => { resolve(server); });
|
|
56
|
+
server.on("error", (error) => { reject(error); });
|
|
57
|
+
hdhrServer = await promise;
|
|
62
58
|
LOG.info("HDHomeRun emulation is now listening on %s:%s (DeviceID: %s).", CONFIG.server.host, CONFIG.hdhr.port, CONFIG.hdhr.deviceId.toUpperCase());
|
|
63
59
|
}
|
|
64
60
|
catch (error) {
|
package/dist/hdhr/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hdhr/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAGxC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;;;;;GAMG;AAEH,6DAA6D;AAC7D,IAAI,UAAU,GAAqB,IAAI,CAAC;AAExC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IAEnC,IAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAExB,OAAO;IACT,CAAC;IAED,2JAA2J;IAC3J,0EAA0E;IAC1E,IAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAEpE,IAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAExB,GAAG,CAAC,IAAI,CAAC,wEAAwE,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACzH,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,gBAAgB,EAAE,CAAC;QAE1C,GAAG,CAAC,IAAI,CAAC,mCAAmC,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAElF,2EAA2E;QAC3E,IAAI,CAAC;YAEH,MAAM,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;gBAE5B,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC9C,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAM,KAAK,EAAE,CAAC;YAEd,GAAG,CAAC,IAAI,CAAC,uFAAuF,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACxH,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IAEtB,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAE7B,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAExB,wEAAwE;IACxE,IAAI,CAAC;QAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hdhr/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,10 +6,10 @@ import { CONFIG_METADATA, DEFAULTS, getNestedValue } from "./config/userConfig.j
|
|
|
6
6
|
import { LOG, formatError, getPackageVersion, initDebugFilter, setDebugLogging } from "./utils/index.js";
|
|
7
7
|
import { canCleanupChrome, isGracefulShutdown, killStaleChrome } from "./browser/index.js";
|
|
8
8
|
import { clearServerPid, startServer } from "./app.js";
|
|
9
|
+
import { getDebugEnv, initializeDataDir } from "./config/paths.js";
|
|
9
10
|
import { flushLogBufferSync } from "./utils/fileLogger.js";
|
|
10
11
|
import { handleServiceCommand } from "./service/index.js";
|
|
11
12
|
import { handleUpgradeCommand } from "./upgrade/index.js";
|
|
12
|
-
import { initializeDataDir } from "./config/paths.js";
|
|
13
13
|
import path from "node:path";
|
|
14
14
|
/* These handlers catch unhandled promise rejections and uncaught exceptions to prevent the process from crashing. For a livestreaming server, process stability is
|
|
15
15
|
* critical - a single unhandled error should not terminate all active streams. The handlers log the error and allow the process to continue. Individual stream
|
|
@@ -99,7 +99,7 @@ function printEnvironmentVariables() {
|
|
|
99
99
|
console.log("All settings can also be configured via the web UI at /config or config.json.");
|
|
100
100
|
console.log("Priority: CLI flags > environment variables > config.json > defaults.");
|
|
101
101
|
for (const category of categoryOrder) {
|
|
102
|
-
const settings = CONFIG_METADATA[category.key];
|
|
102
|
+
const settings = CONFIG_METADATA[category.key] ?? [];
|
|
103
103
|
// Filter to settings that have an environment variable.
|
|
104
104
|
const envSettings = settings.filter((s) => s.envVar !== null);
|
|
105
105
|
if (envSettings.length === 0) {
|
|
@@ -198,21 +198,21 @@ function parseArgs() {
|
|
|
198
198
|
process.exit(0);
|
|
199
199
|
}
|
|
200
200
|
if ((arg === "-p") || (arg === "--port")) {
|
|
201
|
-
const parsed = parseInt(args[++i]);
|
|
201
|
+
const parsed = parseInt(args[++i] ?? "");
|
|
202
202
|
if (!isNaN(parsed)) {
|
|
203
203
|
port = parsed;
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
if (arg === "--data-dir") {
|
|
207
|
-
dataDir = args[++i];
|
|
207
|
+
dataDir = args[++i] ?? "";
|
|
208
208
|
requireAbsolutePath("--data-dir", dataDir);
|
|
209
209
|
}
|
|
210
210
|
if (arg === "--chrome-data-dir") {
|
|
211
|
-
chromeDataDir = args[++i];
|
|
211
|
+
chromeDataDir = args[++i] ?? "";
|
|
212
212
|
requireAbsolutePath("--chrome-data-dir", chromeDataDir);
|
|
213
213
|
}
|
|
214
214
|
if (arg === "--log-file") {
|
|
215
|
-
logFile = args[++i];
|
|
215
|
+
logFile = args[++i] ?? "";
|
|
216
216
|
requireAbsolutePath("--log-file", logFile);
|
|
217
217
|
}
|
|
218
218
|
if ((arg === "-v") || (arg === "--version")) {
|
|
@@ -267,26 +267,26 @@ else {
|
|
|
267
267
|
}
|
|
268
268
|
// Enable debug logging before starting the server so debug messages during startup are captured. The PRISMCAST_DEBUG environment variable takes precedence over
|
|
269
269
|
// the --debug CLI flag, allowing fine-grained category selection.
|
|
270
|
-
const debugEnv =
|
|
270
|
+
const debugEnv = getDebugEnv();
|
|
271
271
|
if (debugEnv) {
|
|
272
272
|
initDebugFilter(debugEnv);
|
|
273
273
|
}
|
|
274
274
|
else if (parsedArgs.debugLogging) {
|
|
275
275
|
setDebugLogging(true);
|
|
276
276
|
}
|
|
277
|
-
/* Safety net for server exit paths. When the process exits
|
|
278
|
-
* termination
|
|
277
|
+
/* Safety net for server exit paths. When the process exits - whether via process.exit(1) from a fatal startup error, an unrecoverable exception, or any other
|
|
278
|
+
* termination - we ensure Chrome processes are cleaned up and buffered log entries are flushed to disk. Without this, fatal exits during startup (e.g., capture
|
|
279
279
|
* probe timeout) silently orphan Chrome processes and lose diagnostic messages that are still in the file logger's write buffer.
|
|
280
280
|
*
|
|
281
281
|
* The 'exit' event runs synchronously, so only synchronous operations are safe here. killStaleChrome() uses process.kill() for signaling and Atomics.wait()
|
|
282
282
|
* for polling, and flushLogBufferSync() writes directly to the filesystem. The graceful shutdown path (SIGTERM/SIGINT) handles cleanup via async closeBrowser()
|
|
283
|
-
* and shutdownFileLogger()
|
|
283
|
+
* and shutdownFileLogger() - this handler is a fallback for paths that bypass graceful shutdown.
|
|
284
284
|
*
|
|
285
|
-
* This is registered only in the server branch
|
|
285
|
+
* This is registered only in the server branch - not for service subcommands like `prismcast service status`. Running killStaleChrome() from a service
|
|
286
286
|
* subcommand would kill Chrome belonging to the running PrismCast server instance.
|
|
287
287
|
*/
|
|
288
288
|
process.on("exit", () => {
|
|
289
|
-
// Flush logs first
|
|
289
|
+
// Flush logs first - this is the critical operation. The error messages from a failed startup are sitting in the write buffer and must reach disk before the
|
|
290
290
|
// process terminates. Chrome will die when its pipes break since the parent is exiting; killing it explicitly is belt-and-suspenders.
|
|
291
291
|
flushLogBufferSync();
|
|
292
292
|
try {
|