prismcast 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/app.js +9 -8
  2. package/dist/app.js.map +1 -1
  3. package/dist/browser/login.js +11 -8
  4. package/dist/browser/login.js.map +1 -1
  5. package/dist/channels/index.d.ts +2 -0
  6. package/dist/channels/index.js +208 -22
  7. package/dist/channels/index.js.map +1 -1
  8. package/dist/config/health.js +10 -15
  9. package/dist/config/health.js.map +1 -1
  10. package/dist/config/index.js +9 -0
  11. package/dist/config/index.js.map +1 -1
  12. package/dist/config/profiles.js +10 -10
  13. package/dist/config/profiles.js.map +1 -1
  14. package/dist/config/providers.js +30 -17
  15. package/dist/config/providers.js.map +1 -1
  16. package/dist/config/userChannels.d.ts +62 -9
  17. package/dist/config/userChannels.js +172 -44
  18. package/dist/config/userChannels.js.map +1 -1
  19. package/dist/config/userConfig.d.ts +2 -0
  20. package/dist/config/userConfig.js +29 -4
  21. package/dist/config/userConfig.js.map +1 -1
  22. package/dist/config/userProfiles.js +27 -39
  23. package/dist/config/userProfiles.js.map +1 -1
  24. package/dist/hdhr/discover.js +7 -15
  25. package/dist/hdhr/discover.js.map +1 -1
  26. package/dist/native/index.d.ts +2 -2
  27. package/dist/native/index.js +14 -24
  28. package/dist/native/index.js.map +1 -1
  29. package/dist/native/proxy.d.ts +2 -2
  30. package/dist/native/proxy.js.map +1 -1
  31. package/dist/routes/assets.js +26 -48
  32. package/dist/routes/assets.js.map +1 -1
  33. package/dist/routes/channels.js +5 -11
  34. package/dist/routes/channels.js.map +1 -1
  35. package/dist/routes/components.d.ts +0 -8
  36. package/dist/routes/components.js +0 -19
  37. package/dist/routes/components.js.map +1 -1
  38. package/dist/routes/config/channels/index.d.ts +1 -1
  39. package/dist/routes/config/channels/index.js +1 -1
  40. package/dist/routes/config/channels/index.js.map +1 -1
  41. package/dist/routes/config/channels/routes.js +335 -35
  42. package/dist/routes/config/channels/routes.js.map +1 -1
  43. package/dist/routes/config/channels/table.d.ts +17 -2
  44. package/dist/routes/config/channels/table.js +270 -66
  45. package/dist/routes/config/channels/table.js.map +1 -1
  46. package/dist/routes/config/providers.js +7 -7
  47. package/dist/routes/config/providers.js.map +1 -1
  48. package/dist/routes/config/settings.js +57 -36
  49. package/dist/routes/config/settings.js.map +1 -1
  50. package/dist/routes/icons.d.ts +16 -0
  51. package/dist/routes/icons.js +44 -0
  52. package/dist/routes/icons.js.map +1 -0
  53. package/dist/routes/playlist.d.ts +6 -4
  54. package/dist/routes/playlist.js +68 -27
  55. package/dist/routes/playlist.js.map +1 -1
  56. package/dist/routes/root/content.js +41 -2
  57. package/dist/routes/root/content.js.map +1 -1
  58. package/dist/routes/root/scripts/channels.js +185 -0
  59. package/dist/routes/root/scripts/channels.js.map +1 -1
  60. package/dist/routes/root/scripts/config.js +115 -41
  61. package/dist/routes/root/scripts/config.js.map +1 -1
  62. package/dist/routes/root/scripts/shared.js +69 -23
  63. package/dist/routes/root/scripts/shared.js.map +1 -1
  64. package/dist/routes/root/scripts/status.js +6 -12
  65. package/dist/routes/root/scripts/status.js.map +1 -1
  66. package/dist/routes/root/styles.js +45 -4
  67. package/dist/routes/root/styles.js.map +1 -1
  68. package/dist/routes/ui.d.ts +1 -1
  69. package/dist/routes/ui.js +1 -1
  70. package/dist/routes/ui.js.map +1 -1
  71. package/dist/service/commands.js +3 -35
  72. package/dist/service/commands.js.map +1 -1
  73. package/dist/streaming/codec.d.ts +20 -0
  74. package/dist/streaming/codec.js +68 -0
  75. package/dist/streaming/codec.js.map +1 -0
  76. package/dist/streaming/fmp4Segmenter.d.ts +2 -2
  77. package/dist/streaming/fmp4Segmenter.js.map +1 -1
  78. package/dist/streaming/hls.js +11 -6
  79. package/dist/streaming/hls.js.map +1 -1
  80. package/dist/streaming/hlsResume.js +2 -2
  81. package/dist/streaming/hlsResume.js.map +1 -1
  82. package/dist/streaming/preroll.d.ts +15 -14
  83. package/dist/streaming/preroll.js +31 -11
  84. package/dist/streaming/preroll.js.map +1 -1
  85. package/dist/streaming/registry.d.ts +2 -2
  86. package/dist/streaming/registry.js.map +1 -1
  87. package/dist/streaming/setup.d.ts +2 -2
  88. package/dist/streaming/setup.js +5 -12
  89. package/dist/streaming/setup.js.map +1 -1
  90. package/dist/types/channels.d.ts +3 -0
  91. package/dist/types/config.d.ts +1 -0
  92. package/dist/types/index.d.ts +2 -1
  93. package/dist/types/index.js +1 -0
  94. package/dist/types/index.js.map +1 -1
  95. package/dist/types/shared.d.ts +1 -1
  96. package/dist/types/streaming.d.ts +7 -15
  97. package/dist/types/streaming.js +5 -1
  98. package/dist/types/streaming.js.map +1 -1
  99. package/dist/upgrade/commands.js +1 -16
  100. package/dist/upgrade/commands.js.map +1 -1
  101. package/dist/utils/cliOutput.d.ts +10 -0
  102. package/dist/utils/cliOutput.js +17 -0
  103. package/dist/utils/cliOutput.js.map +1 -0
  104. package/dist/utils/format.d.ts +14 -3
  105. package/dist/utils/format.js +24 -6
  106. package/dist/utils/format.js.map +1 -1
  107. package/dist/utils/index.d.ts +1 -0
  108. package/dist/utils/index.js +1 -0
  109. package/dist/utils/index.js.map +1 -1
  110. package/dist/utils/retry.js +2 -4
  111. package/dist/utils/retry.js.map +1 -1
  112. package/package.json +2 -2
@@ -1,9 +1,13 @@
1
- import { LOG, containsNonPrintable, sanitizeString } from "../utils/index.js";
1
+ /* Copyright(C) 2024-2026, HJD (https://github.com/hjdhjd). All rights reserved.
2
+ *
3
+ * userChannels.ts: User channel file management for PrismCast.
4
+ */
5
+ import { CHANNEL_IDENTITY_FIELDS, PREDEFINED_CHANNELS, PREDEFINED_TAGS } from "../channels/index.js";
6
+ import { LOG, containsNonPrintable, sanitizeString, stringifySorted } from "../utils/index.js";
2
7
  import { buildProviderGroups, getAllProviderTags, getProviderSelections, getResolvedChannel, isChannelAvailableByProvider, isProviderVariant, resolveProviderKey, setEnabledProviders, setProviderSelections } from "./providers.js";
3
8
  import { getChannelsFilePath, getDataDir } from "./paths.js";
4
9
  import { loadUserConfig, saveUserConfig } from "./userConfig.js";
5
10
  import { CONFIG } from "./index.js";
6
- import { PREDEFINED_CHANNELS } from "../channels/index.js";
7
11
  import fs from "node:fs";
8
12
  const { promises: fsPromises } = fs;
9
13
  /* The channels file path is resolved via the centralized paths module (config/paths.ts). The data directory is initialized at startup before channel loading.
@@ -22,6 +26,8 @@ export function getUserChannelsFilePath() {
22
26
  let loadedUserChannels = {};
23
27
  let userChannelsParseError = false;
24
28
  let userChannelsParseErrorMessage;
29
+ // Module-level tag registry state. Tracks user-created tags and user-deleted predefined tags. The runtime vocabulary is computed by getActiveTagVocabulary().
30
+ let loadedTagRegistry = { deletedTags: [], tags: [] };
25
31
  /**
26
32
  * Returns whether the user channels file had a parse error.
27
33
  * @returns True if the channels file exists but contains invalid JSON.
@@ -38,16 +44,17 @@ export function getChannelsParseErrorMessage() {
38
44
  }
39
45
  /**
40
46
  * Loads user channels from the channels file. Returns an empty map if the file doesn't exist, and sets parseError if the file exists but contains invalid JSON.
41
- * The file can contain a special `providerSelections` key with user's provider preferences, which is extracted separately from channels.
42
- * @returns The loaded channels with parse status and provider selections.
47
+ * The file can contain metadata keys (`providerSelections`, `tagRegistry`) which are extracted separately from channel data.
48
+ * @returns The loaded channels with parse status, provider selections, and tag registry.
43
49
  */
44
50
  export async function loadUserChannels() {
45
51
  try {
46
52
  const content = await fsPromises.readFile(getChannelsFilePath(), "utf-8");
47
53
  try {
48
54
  const parsed = JSON.parse(content);
49
- // Extract providerSelections if present — it's not a channel, it's metadata.
55
+ // Extract metadata keys (providerSelections, tagRegistry) — these are not channels, they're organizational state stored alongside channel data.
50
56
  const providerSelections = {};
57
+ const tagRegistry = { deletedTags: [], tags: [] };
51
58
  const channels = {};
52
59
  for (const [key, value] of Object.entries(parsed)) {
53
60
  if (key === "providerSelections") {
@@ -60,35 +67,47 @@ export async function loadUserChannels() {
60
67
  }
61
68
  }
62
69
  }
70
+ else if (key === "tagRegistry") {
71
+ // Extract tag registry with defensive validation. Each field must be a string array — non-string elements are silently dropped.
72
+ if ((typeof value === "object") && (value !== null) && !Array.isArray(value)) {
73
+ const raw = value;
74
+ if (Array.isArray(raw.tags)) {
75
+ tagRegistry.tags = raw.tags.filter((t) => typeof t === "string").sort();
76
+ }
77
+ if (Array.isArray(raw.deletedTags)) {
78
+ tagRegistry.deletedTags = raw.deletedTags.filter((t) => typeof t === "string").sort();
79
+ }
80
+ }
81
+ }
63
82
  else if ((typeof value === "object") && (value !== null) && !Array.isArray(value)) {
64
83
  // It's a channel definition or delta override.
65
84
  channels[key] = value;
66
85
  }
67
86
  }
68
- return { channels, parseError: false, providerSelections };
87
+ return { channels, parseError: false, providerSelections, tagRegistry };
69
88
  }
70
89
  catch (parseError) {
71
90
  const message = (parseError instanceof Error) ? parseError.message : String(parseError);
72
91
  LOG.warn("Invalid JSON in channels file %s: %s. Using predefined channels only.", getChannelsFilePath(), message);
73
- return { channels: {}, parseError: true, parseErrorMessage: message, providerSelections: {} };
92
+ return { channels: {}, parseError: true, parseErrorMessage: message, providerSelections: {}, tagRegistry: { deletedTags: [], tags: [] } };
74
93
  }
75
94
  }
76
95
  catch (error) {
77
96
  // File doesn't exist - this is normal, use predefined channels only.
78
97
  if (error.code === "ENOENT") {
79
- return { channels: {}, parseError: false, providerSelections: {} };
98
+ return { channels: {}, parseError: false, providerSelections: {}, tagRegistry: { deletedTags: [], tags: [] } };
80
99
  }
81
100
  // Other read errors - log and use predefined channels.
82
101
  LOG.warn("Failed to read channels file %s: %s. Using predefined channels only.", getChannelsFilePath(), (error instanceof Error) ? error.message : String(error));
83
- return { channels: {}, parseError: false, providerSelections: {} };
102
+ return { channels: {}, parseError: false, providerSelections: {}, tagRegistry: { deletedTags: [], tags: [] } };
84
103
  }
85
104
  }
86
105
  /**
87
106
  * Saves user channels to the channels file and updates the in-memory cache. Changes take effect immediately for new stream requests without requiring a server
88
- * restart. Creates the data directory if it doesn't exist. Provider selections are also saved if any exist. No-op deltas for predefined channel keys are
89
- * normalized before saving: fields that match the predefined value or null-clear a field the predefined doesn't have are stripped. If the delta becomes empty
90
- * after normalization, the entry is removed entirely. This ensures that any code path that writes deltas (inline edit, auto-number, browse modal, full edit)
91
- * produces clean channels.json output without each handler needing to optimize its own delta.
107
+ * restart. Creates the data directory if it doesn't exist. Metadata keys (provider selections, tag registry) are also saved if they have content. No-op deltas
108
+ * for predefined channel keys are normalized before saving: fields that match the predefined value or null-clear a field the predefined doesn't have are
109
+ * stripped. If the delta becomes empty after normalization, the entry is removed entirely. This ensures that any code path that writes deltas (inline edit,
110
+ * auto-number, browse modal, full edit) produces clean channels.json output without each handler needing to optimize its own delta.
92
111
  * @param channels - The channels to save (full definitions or delta overrides).
93
112
  * @throws If the file cannot be written.
94
113
  */
@@ -117,9 +136,13 @@ export async function saveUserChannels(channels) {
117
136
  if ((value === null) && !(field in predefined)) {
118
137
  continue;
119
138
  }
120
- // Skip values that match the predefined exactly — redundant copies.
121
- if ((value !== null) && (predefined[field] === value)) {
122
- continue;
139
+ // Skip values that match the predefined exactly — redundant copies. Array fields (like tags) use JSON.stringify for comparison since reference equality
140
+ // always fails for arrays. Tags arrays are always sorted and lowercase, making JSON.stringify deterministic.
141
+ if (value !== null) {
142
+ const predefinedValue = predefined[field];
143
+ if (Array.isArray(value) ? (JSON.stringify(value) === JSON.stringify(predefinedValue)) : (predefinedValue === value)) {
144
+ continue;
145
+ }
123
146
  }
124
147
  cleaned[field] = value;
125
148
  hasFields = true;
@@ -136,28 +159,22 @@ export async function saveUserChannels(channels) {
136
159
  }
137
160
  }
138
161
  else {
139
- filtered[key] = stored;
162
+ // User channels: strip null fields. Null is a delta convention for predefined channels ("clear this field") and has no meaning on full Channel definitions —
163
+ // the Channel type uses T | undefined, never T | null. This allows callers to uniformly use null for "empty/clear" without needing to know the storage convention.
164
+ filtered[key] = Object.fromEntries(Object.entries(stored).filter(([, v]) => v !== null));
140
165
  }
141
166
  }
142
- // Sort channels by key for consistent output.
143
- const sortedChannels = {};
144
- const sortedKeys = Object.keys(filtered).sort();
145
- for (const key of sortedKeys) {
146
- sortedChannels[key] = filtered[key];
147
- }
148
- // Include provider selections if any exist.
167
+ // Include metadata keys (provider selections, tag registry) if they have content.
149
168
  const selections = getProviderSelections();
169
+ const output = { ...filtered };
150
170
  if (Object.keys(selections).length > 0) {
151
- // Sort provider selections for consistent output.
152
- const sortedSelections = {};
153
- const selectionKeys = Object.keys(selections).sort();
154
- for (const key of selectionKeys) {
155
- sortedSelections[key] = selections[key];
156
- }
157
- sortedChannels.providerSelections = sortedSelections;
171
+ output.providerSelections = selections;
158
172
  }
159
- // Write channels with pretty formatting for readability.
160
- const content = JSON.stringify(sortedChannels, null, 2);
173
+ if ((loadedTagRegistry.tags.length > 0) || (loadedTagRegistry.deletedTags.length > 0)) {
174
+ output.tagRegistry = loadedTagRegistry;
175
+ }
176
+ // Write channels with pretty formatting and sorted keys for consistent, diff-friendly output.
177
+ const content = stringifySorted(output);
161
178
  await fsPromises.writeFile(getChannelsFilePath(), content + "\n", "utf-8");
162
179
  // Update in-memory cache so changes take effect immediately for new stream requests.
163
180
  loadedUserChannels = { ...filtered };
@@ -232,6 +249,7 @@ export async function initializeUserChannels() {
232
249
  LOG.info("Migrated Fox provider references from foxcom to foxone.");
233
250
  }
234
251
  loadedUserChannels = result.channels;
252
+ loadedTagRegistry = result.tagRegistry;
235
253
  userChannelsParseError = result.parseError;
236
254
  userChannelsParseErrorMessage = result.parseErrorMessage;
237
255
  // Load enabled providers from the configuration, validating that each tag is recognized. Invalid tags (e.g., from hand-edited config.json typos) are stripped
@@ -259,7 +277,6 @@ export async function initializeUserChannels() {
259
277
  configResult.config.channels ??= {};
260
278
  configResult.config.channels.setupCompleted = true;
261
279
  await saveUserConfig(configResult.config);
262
- LOG.info("Inferred Provider Setup as completed from existing configuration.");
263
280
  }
264
281
  }
265
282
  // One-time migration: stamp canonicalKey on existing user channel variant entries that were created before explicit variant relationships were introduced.
@@ -286,6 +303,25 @@ export async function initializeUserChannels() {
286
303
  await saveUserChannels(result.channels);
287
304
  LOG.info("Migrated user channel variant entries with explicit canonical key declarations.");
288
305
  }
306
+ // One-time migration: strip identity fields from user channel variant entries. Identity fields (name, stationId, tags, etc.) are resolved from the canonical
307
+ // at runtime via applyVariantInheritance, so storing them on variants is redundant. Older versions wrote these fields on variant creation. This migration
308
+ // cleans them up so channels.json only contains provider-specific fields on variant entries.
309
+ let variantFieldsMigrated = false;
310
+ for (const channel of Object.values(result.channels)) {
311
+ if (!channel.canonicalKey) {
312
+ continue;
313
+ }
314
+ for (const field of CHANNEL_IDENTITY_FIELDS) {
315
+ if (field in channel) {
316
+ Reflect.deleteProperty(channel, field);
317
+ variantFieldsMigrated = true;
318
+ }
319
+ }
320
+ }
321
+ if (variantFieldsMigrated) {
322
+ await saveUserChannels(result.channels);
323
+ LOG.info("Stripped redundant identity fields from user channel variant entries.");
324
+ }
289
325
  // Build the merged channels map and then build provider groups.
290
326
  const mergedChannels = getMergedChannelMap();
291
327
  buildProviderGroups(mergedChannels);
@@ -323,7 +359,11 @@ export async function initializeUserChannels() {
323
359
  }
324
360
  // Fields that users are allowed to override via delta. This allowlist prevents hand-edited channels.json from overriding fields like provider that are
325
361
  // intentionally not user-editable. Matches the fields in the ChannelDelta interface.
326
- const DELTA_ALLOWED_FIELDS = new Set(["channelNumber", "channelSelector", "hdhrEnabled", "name", "profile", "stationId", "tvgShift", "url"]);
362
+ // User-editable fields for predefined channel delta overrides. Derived from CHANNEL_IDENTITY_FIELDS (identity fields like name, stationId, tags) plus the
363
+ // provider-specific fields exposed in the edit form (channelSelector, profile, url). This derivation ensures that adding a new identity field to
364
+ // CHANNEL_IDENTITY_FIELDS automatically includes it in the delta allowlist.
365
+ const PROVIDER_SPECIFIC_EDITABLE_FIELDS = ["channelSelector", "profile", "url"];
366
+ const DELTA_ALLOWED_FIELDS = new Set([...CHANNEL_IDENTITY_FIELDS, ...PROVIDER_SPECIFIC_EDITABLE_FIELDS]);
327
367
  /**
328
368
  * Resolves a stored channel entry (full definition or delta) into a fully resolved Channel. For user-defined channels with no predefined equivalent, the stored
329
369
  * entry is returned as-is (it must be a full Channel). For overrides of predefined channels, the predefined definition is used as a base and only allowlisted
@@ -340,7 +380,9 @@ export function resolveStoredChannel(key, stored) {
340
380
  if (!predefined) {
341
381
  return stored;
342
382
  }
343
- // Start with a copy of the predefined definition, then overlay allowlisted non-null delta fields.
383
+ // Start with a copy of the predefined definition, then overlay allowlisted non-null delta fields. The spread creates a shallow copy — reference-type fields
384
+ // (like tags) share the same array instance as PREDEFINED_CHANNELS. The defensive copy below ensures the returned Channel is fully independent so callers can
385
+ // safely modify it without corrupting the predefined source of truth.
344
386
  const resolved = { ...predefined };
345
387
  for (const [field, value] of Object.entries(stored)) {
346
388
  if (!DELTA_ALLOWED_FIELDS.has(field)) {
@@ -355,6 +397,9 @@ export function resolveStoredChannel(key, stored) {
355
397
  resolved[field] = value;
356
398
  }
357
399
  }
400
+ // Defensive copy of reference-type fields to break shared references with PREDEFINED_CHANNELS. The delta overlay above may have replaced tags entirely (if
401
+ // the delta included a tags array), but when no delta is present for tags, the spread leaves the predefined's array reference on the resolved object.
402
+ resolved.tags &&= resolved.tags.slice();
358
403
  return resolved;
359
404
  }
360
405
  /**
@@ -434,8 +479,8 @@ export function getChannelListing() {
434
479
  return listing;
435
480
  }
436
481
  /**
437
- * Returns all available channels (predefined + user), with user channels taking precedence on key conflicts. Disabled predefined channels are excluded unless they
438
- * have a user override. Built on top of getChannelListing() to ensure a single merging code path.
482
+ * Returns all available channels (predefined + user), with user channels taking precedence on key conflicts. Disabled predefined channels are excluded. Built on
483
+ * top of getChannelListing() to ensure a single merging code path.
439
484
  * @returns The merged channel map with disabled predefined channels filtered out.
440
485
  */
441
486
  export function getAllChannels() {
@@ -454,6 +499,85 @@ export function getAllChannels() {
454
499
  export function getUserChannels() {
455
500
  return { ...loadedUserChannels };
456
501
  }
502
+ // Tag Registry.
503
+ /**
504
+ * Returns the current tag registry state.
505
+ * @returns A copy of the tag registry with user-created tags and deleted predefined tags.
506
+ */
507
+ export function getTagRegistry() {
508
+ return { deletedTags: [...loadedTagRegistry.deletedTags], tags: [...loadedTagRegistry.tags] };
509
+ }
510
+ /**
511
+ * Updates the tag registry state in memory. Call saveUserChannels() after to persist the change.
512
+ * @param registry - The new tag registry state.
513
+ */
514
+ export function setTagRegistry(registry) {
515
+ loadedTagRegistry = { deletedTags: registry.deletedTags.sort(), tags: registry.tags.sort() };
516
+ }
517
+ /**
518
+ * Returns the active tag vocabulary: predefined tags minus user-deleted tags, plus user-created tags, sorted alphabetically. This is the single source of truth
519
+ * for which tags are visible, assignable, and queryable throughout the system. Tags not in this list are invisible to the UI and rejected by the ?tag= query
520
+ * parameter, even if they exist on channel definitions (vocabulary-as-lens model).
521
+ * @returns Sorted array of active tag strings.
522
+ */
523
+ export function getActiveTagVocabulary() {
524
+ const deleted = new Set(loadedTagRegistry.deletedTags);
525
+ const active = PREDEFINED_TAGS.filter((tag) => !deleted.has(tag));
526
+ // Merge user tags, deduplicate (in case a user tag matches a non-deleted predefined tag), and sort.
527
+ const combined = new Set([...active, ...loadedTagRegistry.tags]);
528
+ return [...combined].sort();
529
+ }
530
+ /**
531
+ * Returns a channel's effective tags — the intersection of the channel's assigned tags with the active vocabulary. Tags that exist on the channel but are not in
532
+ * the active vocabulary are filtered out, ensuring only assignable and queryable tags are visible in the UI and playlist responses.
533
+ * @param channel - The channel to get effective tags for.
534
+ * @returns Sorted array of effective tag strings, or empty array if the channel has no tags or none are in the active vocabulary.
535
+ */
536
+ export function getChannelEffectiveTags(channel) {
537
+ if (!channel.tags || (channel.tags.length === 0)) {
538
+ return [];
539
+ }
540
+ const vocabulary = new Set(getActiveTagVocabulary());
541
+ return channel.tags.filter((tag) => vocabulary.has(tag));
542
+ }
543
+ /**
544
+ * Applies a tag transformation across channels and persists the result. This is the single source of truth for batch tag mutations — delete, rename, and bulk
545
+ * toggle all route through this function. The caller provides a filter (which channels to transform) and a transform (how to modify each channel's tags). This
546
+ * function handles loading stored channel data, applying the transform, and saving. Delta normalization in saveUserChannels() handles predefined channel
547
+ * delta computation automatically — callers do not need to reason about deltas vs. full definitions.
548
+ * @param filter - Predicate selecting which listing entries to transform. Receives each ChannelListingEntry from getChannelListing().
549
+ * @param transform - Pure function mapping a channel's current resolved tags to its new tags. Receives the channel's current tags array (may be empty, ordering
550
+ * not guaranteed). Must return the desired tags array (may be empty to clear all tags). The returned array is sorted before storage.
551
+ * @returns Object with the affected channel keys and success status. On parse error, returns an error message and empty affected keys.
552
+ */
553
+ export async function transformChannelTags(filter, transform) {
554
+ const result = await loadUserChannels();
555
+ if (result.parseError) {
556
+ return { affectedKeys: [], error: "Cannot update tags: channels file contains invalid JSON." };
557
+ }
558
+ const affectedKeys = [];
559
+ for (const entry of getChannelListing()) {
560
+ if (!filter(entry)) {
561
+ continue;
562
+ }
563
+ const currentTags = entry.channel.tags ?? [];
564
+ const newTags = transform(currentTags).sort();
565
+ // Skip channels where the transform produced no change.
566
+ if (JSON.stringify(newTags) === JSON.stringify(currentTags.slice().sort())) {
567
+ continue;
568
+ }
569
+ // Set the new tags on the stored entry. Callers use null uniformly for "clear/empty" — saveUserChannels() handles the storage conventions: delta normalization
570
+ // for predefined channels (comparing against raw definitions), null-stripping for user channels (null has no meaning on full Channel definitions).
571
+ const existing = result.channels[entry.key] ?? {};
572
+ existing.tags = (newTags.length > 0) ? newTags : null;
573
+ result.channels[entry.key] = existing;
574
+ affectedKeys.push(entry.key);
575
+ }
576
+ if (affectedKeys.length > 0) {
577
+ await saveUserChannels(result.channels);
578
+ }
579
+ return { affectedKeys };
580
+ }
457
581
  /**
458
582
  * Returns the predefined channel definition for a key.
459
583
  * @param key - The channel key to look up.
@@ -554,19 +678,15 @@ export function isUserChannel(key) {
554
678
  * re-enable. This is useful for users who don't want certain predefined channels cluttering their channel list.
555
679
  */
556
680
  /**
557
- * Checks if a predefined channel is disabled.
681
+ * Checks if a predefined channel is disabled. The disabled state is determined solely by the disabledPredefined list in config — the user's explicit visibility
682
+ * intent. Property overrides (HDHR toggle, name change, tag edits) stored as deltas in channels.json are orthogonal and do not affect the enabled/disabled state.
558
683
  * @param key - The channel key to check.
559
684
  * @returns True if the channel is predefined and disabled.
560
685
  */
561
686
  export function isPredefinedChannelDisabled(key) {
562
- // Only predefined channels can be disabled via this mechanism.
563
687
  if (!isPredefinedChannel(key)) {
564
688
  return false;
565
689
  }
566
- // If a user channel overrides this predefined channel, the predefined channel's disabled state is irrelevant.
567
- if (isUserChannel(key)) {
568
- return false;
569
- }
570
690
  return CONFIG.channels.disabledPredefined.includes(key);
571
691
  }
572
692
  /**
@@ -888,4 +1008,12 @@ export async function saveProviderSelections() {
888
1008
  // Simply save the user channels — the saveUserChannels function includes provider selections automatically.
889
1009
  await saveUserChannels(loadedUserChannels);
890
1010
  }
1011
+ /**
1012
+ * Saves the current tag registry to the channels file. This triggers a full file save including all user channels.
1013
+ * @throws If the file cannot be written.
1014
+ */
1015
+ export async function saveTagRegistry() {
1016
+ // Simply save the user channels — the saveUserChannels function includes the tag registry automatically.
1017
+ await saveUserChannels(loadedUserChannels);
1018
+ }
891
1019
  //# sourceMappingURL=userChannels.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"userChannels.js","sourceRoot":"","sources":["../../src/config/userChannels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"userChannels.js","sourceRoot":"","sources":["../../src/config/userChannels.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ export interface SettingMetadata {
16
16
  max?: number;
17
17
  min?: number;
18
18
  path: string;
19
+ listItemsKey?: string;
19
20
  type: "boolean" | "checkboxList" | "float" | "host" | "integer" | "path" | "port" | "string";
20
21
  validValues?: string[];
21
22
  unit?: string;
@@ -85,6 +86,7 @@ export interface UserServerConfig {
85
86
  */
86
87
  export interface UserStreamingConfig {
87
88
  audioBitsPerSecond?: number;
89
+ captureCodecs?: string[];
88
90
  captureMode?: string;
89
91
  frameRate?: number;
90
92
  maxConcurrentStreams?: number;
@@ -1,5 +1,5 @@
1
+ import { LOG, stringifySorted } from "../utils/index.js";
1
2
  import { getConfigFilePath, getDataDir } from "./paths.js";
2
- import { LOG } from "../utils/index.js";
3
3
  import fs from "node:fs";
4
4
  import { getValidPresetIds } from "./presets.js";
5
5
  const { promises: fsPromises } = fs;
@@ -36,6 +36,7 @@ export const CONFIG_METADATA = {
36
36
  "enabled in the Channels tab provider filter are skipped at startup. Ensure you've logged into each provider before enabling.",
37
37
  envVar: null,
38
38
  label: "Channel Lineup Precaching",
39
+ listItemsKey: "providerModules",
39
40
  path: "channels.precacheProviders",
40
41
  type: "checkboxList"
41
42
  }
@@ -370,6 +371,15 @@ export const CONFIG_METADATA = {
370
371
  type: "string",
371
372
  validValues: ["ffmpeg", "native"]
372
373
  },
374
+ {
375
+ description: "Video codecs allowed for browser capture. H.264 is always available as the universal baseline. Additional codecs require GPU hardware " +
376
+ "encoding support - codecs without hardware support are shown as disabled.",
377
+ envVar: "CAPTURE_CODECS",
378
+ label: "Capture Codecs",
379
+ listItemsKey: "captureCodecs",
380
+ path: "streaming.captureCodecs",
381
+ type: "checkboxList"
382
+ },
373
383
  {
374
384
  description: "Video quality preset. Determines capture resolution. Bitrate and frame rate can be further customized.",
375
385
  envVar: "QUALITY_PRESET",
@@ -496,8 +506,8 @@ export async function loadUserConfig() {
496
506
  export async function saveUserConfig(config) {
497
507
  // Ensure data directory exists.
498
508
  await fsPromises.mkdir(getDataDir(), { recursive: true });
499
- // Write config with pretty formatting for readability.
500
- const content = JSON.stringify(config, null, 2);
509
+ // Write config with pretty formatting and sorted keys for consistent, diff-friendly output.
510
+ const content = stringifySorted(config);
501
511
  await fsPromises.writeFile(getConfigFilePath(), content + "\n", "utf-8");
502
512
  LOG.info("Configuration saved to %s.", getConfigFilePath());
503
513
  }
@@ -587,6 +597,7 @@ export const DEFAULTS = {
587
597
  },
588
598
  streaming: {
589
599
  audioBitsPerSecond: 256000,
600
+ captureCodecs: ["h264", "hevc"],
590
601
  captureMode: "ffmpeg",
591
602
  frameRate: 60,
592
603
  maxConcurrentStreams: 10,
@@ -622,6 +633,10 @@ function parseEnvValue(value, type) {
622
633
  case "host": {
623
634
  return value;
624
635
  }
636
+ case "checkboxList": {
637
+ // Accept comma-separated values (e.g., "h264,hevc").
638
+ return value.split(",").map((v) => v.trim()).filter((v) => v.length > 0);
639
+ }
625
640
  case "path": {
626
641
  // An empty path env var means "use default" — return null so the downstream code sees the same sentinel as an unset config field.
627
642
  return (value.trim() === "") ? null : value;
@@ -704,6 +719,9 @@ export function mergeConfiguration(userConfig, cliOverrides) {
704
719
  if (Array.isArray(userConfig.channels?.visibleColumns)) {
705
720
  config.channels.visibleColumns = [...userConfig.channels.visibleColumns];
706
721
  }
722
+ if (Array.isArray(userConfig.streaming?.captureCodecs)) {
723
+ config.streaming.captureCodecs = [...userConfig.streaming.captureCodecs];
724
+ }
707
725
  if ((typeof userConfig.channels?.channelSortField === "string") && (userConfig.channels.channelSortField.length > 0)) {
708
726
  config.channels.channelSortField = userConfig.channels.channelSortField;
709
727
  }
@@ -760,7 +778,8 @@ const SETTINGS_TAB_SECTIONS = [
760
778
  {
761
779
  displayName: "Capture",
762
780
  id: "capture",
763
- paths: ["streaming.captureMode", "streaming.qualityPreset", "streaming.videoBitsPerSecond", "streaming.audioBitsPerSecond", "streaming.frameRate"]
781
+ paths: ["streaming.captureMode", "streaming.captureCodecs", "streaming.qualityPreset", "streaming.videoBitsPerSecond", "streaming.audioBitsPerSecond",
782
+ "streaming.frameRate"]
764
783
  },
765
784
  {
766
785
  displayName: "HDHomeRun / Plex",
@@ -955,6 +974,12 @@ export function filterDefaults(config) {
955
974
  if (Array.isArray(configVisibleColumns) && (configVisibleColumns.length > 0)) {
956
975
  setNestedValue(filtered, "channels.visibleColumns", configVisibleColumns);
957
976
  }
977
+ // Preserve captureCodecs when it differs from the default. The default includes all recognized codecs, so a shorter list means the user has disabled one.
978
+ const configCaptureCodecs = getNestedValue(config, "streaming.captureCodecs");
979
+ const defaultCaptureCodecs = getNestedValue(DEFAULTS, "streaming.captureCodecs");
980
+ if (Array.isArray(configCaptureCodecs) && (JSON.stringify(configCaptureCodecs.slice().sort()) !== JSON.stringify(defaultCaptureCodecs.slice().sort()))) {
981
+ setNestedValue(filtered, "streaming.captureCodecs", configCaptureCodecs);
982
+ }
958
983
  const configSortField = getNestedValue(config, "channels.channelSortField");
959
984
  if ((typeof configSortField === "string") && (configSortField !== "name")) {
960
985
  setNestedValue(filtered, "channels.channelSortField", configSortField);