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.
Files changed (360) hide show
  1. package/dist/app.d.ts +1 -1
  2. package/dist/app.js +27 -9
  3. package/dist/app.js.map +1 -1
  4. package/dist/browser/cdp.js +7 -7
  5. package/dist/browser/cdp.js.map +1 -1
  6. package/dist/browser/channelSelection.d.ts +41 -11
  7. package/dist/browser/channelSelection.js +75 -24
  8. package/dist/browser/channelSelection.js.map +1 -1
  9. package/dist/browser/display.d.ts +1 -1
  10. package/dist/browser/index.d.ts +8 -8
  11. package/dist/browser/index.js +42 -43
  12. package/dist/browser/index.js.map +1 -1
  13. package/dist/browser/login.d.ts +2 -2
  14. package/dist/browser/login.js +1 -1
  15. package/dist/browser/manifestInterceptor.d.ts +77 -0
  16. package/dist/browser/manifestInterceptor.js +323 -0
  17. package/dist/browser/manifestInterceptor.js.map +1 -0
  18. package/dist/browser/precaching.js +4 -4
  19. package/dist/browser/tuning/comcastPolymer.d.ts +1 -1
  20. package/dist/browser/tuning/cox.d.ts +1 -1
  21. package/dist/browser/tuning/directv.d.ts +1 -1
  22. package/dist/browser/tuning/directv.js +61 -62
  23. package/dist/browser/tuning/directv.js.map +1 -1
  24. package/dist/browser/tuning/fox.d.ts +1 -1
  25. package/dist/browser/tuning/fox.js +171 -14
  26. package/dist/browser/tuning/fox.js.map +1 -1
  27. package/dist/browser/tuning/hbo.d.ts +1 -1
  28. package/dist/browser/tuning/hbo.js +6 -6
  29. package/dist/browser/tuning/hbo.js.map +1 -1
  30. package/dist/browser/tuning/hulu.d.ts +1 -1
  31. package/dist/browser/tuning/hulu.js +117 -110
  32. package/dist/browser/tuning/hulu.js.map +1 -1
  33. package/dist/browser/tuning/shared.d.ts +3 -3
  34. package/dist/browser/tuning/shared.js +5 -5
  35. package/dist/browser/tuning/sling.d.ts +1 -1
  36. package/dist/browser/tuning/sling.js +28 -28
  37. package/dist/browser/tuning/sling.js.map +1 -1
  38. package/dist/browser/tuning/spectrum.d.ts +1 -1
  39. package/dist/browser/tuning/spectrum.js +21 -22
  40. package/dist/browser/tuning/spectrum.js.map +1 -1
  41. package/dist/browser/tuning/thumbnailRow.d.ts +1 -1
  42. package/dist/browser/tuning/thumbnailRow.js +1 -1
  43. package/dist/browser/tuning/tileClick.d.ts +1 -1
  44. package/dist/browser/tuning/tileClick.js +5 -5
  45. package/dist/browser/tuning/xfinity.d.ts +1 -1
  46. package/dist/browser/tuning/youtubeTv.d.ts +1 -1
  47. package/dist/browser/tuning/youtubeTv.js +17 -18
  48. package/dist/browser/tuning/youtubeTv.js.map +1 -1
  49. package/dist/browser/video.d.ts +20 -6
  50. package/dist/browser/video.js +30 -38
  51. package/dist/browser/video.js.map +1 -1
  52. package/dist/channels/index.d.ts +1 -2
  53. package/dist/channels/index.js +73 -40
  54. package/dist/channels/index.js.map +1 -1
  55. package/dist/config/channelForm.d.ts +58 -0
  56. package/dist/config/channelForm.js +129 -0
  57. package/dist/config/channelForm.js.map +1 -0
  58. package/dist/config/consistencyProbe.d.ts +7 -0
  59. package/dist/config/consistencyProbe.js +143 -0
  60. package/dist/config/consistencyProbe.js.map +1 -0
  61. package/dist/config/health.d.ts +4 -3
  62. package/dist/config/health.js +75 -62
  63. package/dist/config/health.js.map +1 -1
  64. package/dist/config/index.d.ts +1 -1
  65. package/dist/config/index.js +19 -12
  66. package/dist/config/index.js.map +1 -1
  67. package/dist/config/paths.d.ts +9 -3
  68. package/dist/config/paths.js +12 -4
  69. package/dist/config/paths.js.map +1 -1
  70. package/dist/config/persistence.context.d.ts +8 -0
  71. package/dist/config/persistence.context.js +30 -0
  72. package/dist/config/persistence.context.js.map +1 -0
  73. package/dist/config/persistence.d.ts +110 -12
  74. package/dist/config/persistence.js +351 -32
  75. package/dist/config/persistence.js.map +1 -1
  76. package/dist/config/presets.d.ts +14 -4
  77. package/dist/config/presets.js +84 -75
  78. package/dist/config/presets.js.map +1 -1
  79. package/dist/config/profiles.d.ts +2 -2
  80. package/dist/config/profiles.js +7 -9
  81. package/dist/config/profiles.js.map +1 -1
  82. package/dist/config/servicePacks.d.ts +2 -2
  83. package/dist/config/servicePacks.js +28 -28
  84. package/dist/config/servicePacks.js.map +1 -1
  85. package/dist/config/services.d.ts +62 -36
  86. package/dist/config/services.js +150 -136
  87. package/dist/config/services.js.map +1 -1
  88. package/dist/config/sites.d.ts +3 -3
  89. package/dist/config/sites.js +16 -16
  90. package/dist/config/sites.js.map +1 -1
  91. package/dist/config/userChannels.d.ts +500 -41
  92. package/dist/config/userChannels.js +1201 -312
  93. package/dist/config/userChannels.js.map +1 -1
  94. package/dist/config/userConfig.d.ts +103 -10
  95. package/dist/config/userConfig.js +277 -117
  96. package/dist/config/userConfig.js.map +1 -1
  97. package/dist/config/userProfiles.d.ts +4 -2
  98. package/dist/config/userProfiles.js +72 -26
  99. package/dist/config/userProfiles.js.map +1 -1
  100. package/dist/hdhr/channelMap.js +8 -11
  101. package/dist/hdhr/channelMap.js.map +1 -1
  102. package/dist/hdhr/deviceId.js +10 -9
  103. package/dist/hdhr/deviceId.js.map +1 -1
  104. package/dist/hdhr/discover.js +4 -5
  105. package/dist/hdhr/discover.js.map +1 -1
  106. package/dist/hdhr/index.js +6 -10
  107. package/dist/hdhr/index.js.map +1 -1
  108. package/dist/index.js +12 -12
  109. package/dist/index.js.map +1 -1
  110. package/dist/native/codecInference.d.ts +44 -0
  111. package/dist/native/codecInference.js +327 -0
  112. package/dist/native/codecInference.js.map +1 -0
  113. package/dist/native/decrypt.d.ts +1 -1
  114. package/dist/native/index.d.ts +5 -5
  115. package/dist/native/index.js +42 -64
  116. package/dist/native/index.js.map +1 -1
  117. package/dist/native/probe.d.ts +27 -9
  118. package/dist/native/probe.js +158 -67
  119. package/dist/native/probe.js.map +1 -1
  120. package/dist/native/proxy.d.ts +4 -2
  121. package/dist/native/proxy.js +52 -49
  122. package/dist/native/proxy.js.map +1 -1
  123. package/dist/native/tokenExpiry.d.ts +22 -0
  124. package/dist/native/tokenExpiry.js +153 -0
  125. package/dist/native/tokenExpiry.js.map +1 -0
  126. package/dist/routes/auth.js +6 -10
  127. package/dist/routes/auth.js.map +1 -1
  128. package/dist/routes/components.js +2 -2
  129. package/dist/routes/components.js.map +1 -1
  130. package/dist/routes/config/channels/endpoints/browse.d.ts +6 -0
  131. package/dist/routes/config/channels/endpoints/browse.js +195 -0
  132. package/dist/routes/config/channels/endpoints/browse.js.map +1 -0
  133. package/dist/routes/config/channels/endpoints/bulk.d.ts +6 -0
  134. package/dist/routes/config/channels/endpoints/bulk.js +128 -0
  135. package/dist/routes/config/channels/endpoints/bulk.js.map +1 -0
  136. package/dist/routes/config/channels/endpoints/crud.d.ts +6 -0
  137. package/dist/routes/config/channels/endpoints/crud.js +504 -0
  138. package/dist/routes/config/channels/endpoints/crud.js.map +1 -0
  139. package/dist/routes/config/channels/endpoints/importExport.d.ts +6 -0
  140. package/dist/routes/config/channels/endpoints/importExport.js +131 -0
  141. package/dist/routes/config/channels/endpoints/importExport.js.map +1 -0
  142. package/dist/routes/config/channels/endpoints/predefined.d.ts +6 -0
  143. package/dist/routes/config/channels/endpoints/predefined.js +78 -0
  144. package/dist/routes/config/channels/endpoints/predefined.js.map +1 -0
  145. package/dist/routes/config/channels/endpoints/prefs.d.ts +6 -0
  146. package/dist/routes/config/channels/endpoints/prefs.js +58 -0
  147. package/dist/routes/config/channels/endpoints/prefs.js.map +1 -0
  148. package/dist/routes/config/channels/endpoints/service.d.ts +6 -0
  149. package/dist/routes/config/channels/endpoints/service.js +149 -0
  150. package/dist/routes/config/channels/endpoints/service.js.map +1 -0
  151. package/dist/routes/config/channels/endpoints/tags.d.ts +6 -0
  152. package/dist/routes/config/channels/endpoints/tags.js +185 -0
  153. package/dist/routes/config/channels/endpoints/tags.js.map +1 -0
  154. package/dist/routes/config/channels/http/handler.d.ts +10 -0
  155. package/dist/routes/config/channels/http/handler.js +20 -0
  156. package/dist/routes/config/channels/http/handler.js.map +1 -0
  157. package/dist/routes/config/channels/http/playlistHint.d.ts +25 -0
  158. package/dist/routes/config/channels/http/playlistHint.js +40 -0
  159. package/dist/routes/config/channels/http/playlistHint.js.map +1 -0
  160. package/dist/routes/config/channels/http/serviceWarning.d.ts +10 -0
  161. package/dist/routes/config/channels/http/serviceWarning.js +28 -0
  162. package/dist/routes/config/channels/http/serviceWarning.js.map +1 -0
  163. package/dist/routes/config/channels/index.d.ts +3 -3
  164. package/dist/routes/config/channels/index.js +1 -1
  165. package/dist/routes/config/channels/index.js.map +1 -1
  166. package/dist/routes/config/channels/{routes.d.ts → setup.d.ts} +1 -1
  167. package/dist/routes/config/channels/setup.js +23 -0
  168. package/dist/routes/config/channels/setup.js.map +1 -0
  169. package/dist/routes/config/channels/table.d.ts +9 -9
  170. package/dist/routes/config/channels/table.js +124 -76
  171. package/dist/routes/config/channels/table.js.map +1 -1
  172. package/dist/routes/config/http/envelope.d.ts +111 -0
  173. package/dist/routes/config/http/envelope.js +103 -0
  174. package/dist/routes/config/http/envelope.js.map +1 -0
  175. package/dist/routes/config/index.d.ts +9 -9
  176. package/dist/routes/config/index.js +2 -2
  177. package/dist/routes/config/index.js.map +1 -1
  178. package/dist/routes/config/services.js +69 -68
  179. package/dist/routes/config/services.js.map +1 -1
  180. package/dist/routes/config/settings.d.ts +1 -1
  181. package/dist/routes/config/settings.js +45 -38
  182. package/dist/routes/config/settings.js.map +1 -1
  183. package/dist/routes/debug.js +12 -11
  184. package/dist/routes/debug.js.map +1 -1
  185. package/dist/routes/icons.js +2 -2
  186. package/dist/routes/icons.js.map +1 -1
  187. package/dist/routes/logs.js +19 -30
  188. package/dist/routes/logs.js.map +1 -1
  189. package/dist/routes/mpegts.js +1 -1
  190. package/dist/routes/playlist.d.ts +1 -1
  191. package/dist/routes/playlist.js +37 -26
  192. package/dist/routes/playlist.js.map +1 -1
  193. package/dist/routes/root/content.js +27 -6
  194. package/dist/routes/root/content.js.map +1 -1
  195. package/dist/routes/root/index.js +2 -5
  196. package/dist/routes/root/index.js.map +1 -1
  197. package/dist/routes/root/scripts/channels.js +16 -16
  198. package/dist/routes/root/scripts/channels.js.map +1 -1
  199. package/dist/routes/root/scripts/config.js +59 -59
  200. package/dist/routes/root/scripts/config.js.map +1 -1
  201. package/dist/routes/root/scripts/index.d.ts +4 -4
  202. package/dist/routes/root/scripts/shared.js +24 -10
  203. package/dist/routes/root/scripts/shared.js.map +1 -1
  204. package/dist/routes/root/scripts/status.d.ts +4 -0
  205. package/dist/routes/root/scripts/status.handlers.d.ts +182 -0
  206. package/dist/routes/root/scripts/status.handlers.js +713 -0
  207. package/dist/routes/root/scripts/status.handlers.js.map +1 -0
  208. package/dist/routes/root/scripts/status.js +86 -488
  209. package/dist/routes/root/scripts/status.js.map +1 -1
  210. package/dist/routes/root/styles.js +5 -5
  211. package/dist/routes/services.js +18 -15
  212. package/dist/routes/services.js.map +1 -1
  213. package/dist/routes/sse.d.ts +16 -0
  214. package/dist/routes/sse.js +29 -0
  215. package/dist/routes/sse.js.map +1 -0
  216. package/dist/routes/streams.js +10 -23
  217. package/dist/routes/streams.js.map +1 -1
  218. package/dist/routes/ui.d.ts +2 -2
  219. package/dist/routes/upgrade.js +6 -7
  220. package/dist/routes/upgrade.js.map +1 -1
  221. package/dist/service/commands.context.d.ts +6 -0
  222. package/dist/service/commands.context.js +47 -0
  223. package/dist/service/commands.context.js.map +1 -0
  224. package/dist/service/commands.d.ts +53 -8
  225. package/dist/service/commands.js +171 -188
  226. package/dist/service/commands.js.map +1 -1
  227. package/dist/service/generators.context.d.ts +6 -0
  228. package/dist/service/generators.context.js +45 -0
  229. package/dist/service/generators.context.js.map +1 -0
  230. package/dist/service/generators.d.ts +56 -16
  231. package/dist/service/generators.js +499 -383
  232. package/dist/service/generators.js.map +1 -1
  233. package/dist/service/index.d.ts +2 -2
  234. package/dist/streaming/clients.d.ts +2 -2
  235. package/dist/streaming/clients.js +2 -2
  236. package/dist/streaming/codec.d.ts +2 -2
  237. package/dist/streaming/codec.js +0 -1
  238. package/dist/streaming/codec.js.map +1 -1
  239. package/dist/streaming/fmp4Segmenter.d.ts +2 -2
  240. package/dist/streaming/fmp4Segmenter.js +12 -12
  241. package/dist/streaming/hls.d.ts +3 -3
  242. package/dist/streaming/hls.js +81 -70
  243. package/dist/streaming/hls.js.map +1 -1
  244. package/dist/streaming/hlsResume.d.ts +3 -3
  245. package/dist/streaming/hlsResume.js +5 -5
  246. package/dist/streaming/hlsSegments.d.ts +5 -2
  247. package/dist/streaming/hlsSegments.js +14 -9
  248. package/dist/streaming/hlsSegments.js.map +1 -1
  249. package/dist/streaming/monitor.d.ts +12 -12
  250. package/dist/streaming/monitor.js +80 -54
  251. package/dist/streaming/monitor.js.map +1 -1
  252. package/dist/streaming/mp4Parser.d.ts +34 -4
  253. package/dist/streaming/mp4Parser.js +111 -29
  254. package/dist/streaming/mp4Parser.js.map +1 -1
  255. package/dist/streaming/mpegts.d.ts +1 -1
  256. package/dist/streaming/mpegts.js +13 -10
  257. package/dist/streaming/mpegts.js.map +1 -1
  258. package/dist/streaming/playlistBuilder.d.ts +1 -1
  259. package/dist/streaming/playlistBuilder.js +2 -2
  260. package/dist/streaming/preroll.d.ts +9 -9
  261. package/dist/streaming/preroll.js +39 -41
  262. package/dist/streaming/preroll.js.map +1 -1
  263. package/dist/streaming/pretune.js +4 -4
  264. package/dist/streaming/pretune.js.map +1 -1
  265. package/dist/streaming/recovery.d.ts +3 -3
  266. package/dist/streaming/recovery.js +4 -4
  267. package/dist/streaming/registry.d.ts +6 -6
  268. package/dist/streaming/setup.d.ts +9 -8
  269. package/dist/streaming/setup.js +97 -49
  270. package/dist/streaming/setup.js.map +1 -1
  271. package/dist/streaming/showInfo.d.ts +9 -3
  272. package/dist/streaming/showInfo.js +26 -18
  273. package/dist/streaming/showInfo.js.map +1 -1
  274. package/dist/streaming/statusEmitter.d.ts +4 -4
  275. package/dist/streaming/statusEmitter.js +2 -2
  276. package/dist/types/channels.d.ts +133 -34
  277. package/dist/types/channels.js +39 -1
  278. package/dist/types/channels.js.map +1 -1
  279. package/dist/types/config.d.ts +20 -1
  280. package/dist/types/index.d.ts +9 -8
  281. package/dist/types/index.js +1 -0
  282. package/dist/types/index.js.map +1 -1
  283. package/dist/types/profiles.d.ts +5 -4
  284. package/dist/types/selection.d.ts +48 -4
  285. package/dist/types/streaming.d.ts +1 -1
  286. package/dist/upgrade/commands.context.d.ts +6 -0
  287. package/dist/upgrade/commands.context.js +29 -0
  288. package/dist/upgrade/commands.context.js.map +1 -0
  289. package/dist/upgrade/commands.d.ts +29 -2
  290. package/dist/upgrade/commands.js +87 -134
  291. package/dist/upgrade/commands.js.map +1 -1
  292. package/dist/upgrade/detection.context.d.ts +6 -0
  293. package/dist/upgrade/detection.context.js +24 -0
  294. package/dist/upgrade/detection.context.js.map +1 -0
  295. package/dist/upgrade/detection.d.ts +140 -10
  296. package/dist/upgrade/detection.js +153 -66
  297. package/dist/upgrade/detection.js.map +1 -1
  298. package/dist/upgrade/index.d.ts +2 -2
  299. package/dist/utils/chromeFetch.d.ts +1 -1
  300. package/dist/utils/chromeFetch.js +1 -1
  301. package/dist/utils/clock.d.ts +14 -0
  302. package/dist/utils/clock.js +28 -0
  303. package/dist/utils/clock.js.map +1 -0
  304. package/dist/utils/debugFilter.d.ts +1 -1
  305. package/dist/utils/debugFilter.js +6 -4
  306. package/dist/utils/debugFilter.js.map +1 -1
  307. package/dist/utils/delay.d.ts +2 -3
  308. package/dist/utils/delay.js +10 -16
  309. package/dist/utils/delay.js.map +1 -1
  310. package/dist/utils/evaluate.js +12 -14
  311. package/dist/utils/evaluate.js.map +1 -1
  312. package/dist/utils/ffmpeg.context.d.ts +6 -0
  313. package/dist/utils/ffmpeg.context.js +31 -0
  314. package/dist/utils/ffmpeg.context.js.map +1 -0
  315. package/dist/utils/ffmpeg.d.ts +85 -29
  316. package/dist/utils/ffmpeg.js +126 -129
  317. package/dist/utils/ffmpeg.js.map +1 -1
  318. package/dist/utils/fileLogger.d.ts +18 -2
  319. package/dist/utils/fileLogger.js +58 -30
  320. package/dist/utils/fileLogger.js.map +1 -1
  321. package/dist/utils/format.d.ts +1 -1
  322. package/dist/utils/format.js +2 -2
  323. package/dist/utils/format.js.map +1 -1
  324. package/dist/utils/html.js +1 -3
  325. package/dist/utils/html.js.map +1 -1
  326. package/dist/utils/index.d.ts +21 -20
  327. package/dist/utils/index.js +1 -0
  328. package/dist/utils/index.js.map +1 -1
  329. package/dist/utils/logger.js +16 -20
  330. package/dist/utils/logger.js.map +1 -1
  331. package/dist/utils/m3u.d.ts +18 -3
  332. package/dist/utils/m3u.js +28 -14
  333. package/dist/utils/m3u.js.map +1 -1
  334. package/dist/utils/memo.d.ts +19 -0
  335. package/dist/utils/memo.js +53 -0
  336. package/dist/utils/memo.js.map +1 -0
  337. package/dist/utils/morganStream.js +2 -2
  338. package/dist/utils/morganStream.js.map +1 -1
  339. package/dist/utils/pid.d.ts +2 -2
  340. package/dist/utils/pid.js +2 -2
  341. package/dist/utils/platform.d.ts +1 -1
  342. package/dist/utils/platform.js +3 -3
  343. package/dist/utils/platform.js.map +1 -1
  344. package/dist/utils/retry.d.ts +2 -0
  345. package/dist/utils/retry.js +9 -7
  346. package/dist/utils/retry.js.map +1 -1
  347. package/dist/utils/sanitize.d.ts +2 -2
  348. package/dist/utils/sanitize.js +4 -4
  349. package/dist/utils/timing.d.ts +6 -3
  350. package/dist/utils/timing.js +10 -6
  351. package/dist/utils/timing.js.map +1 -1
  352. package/dist/utils/version.d.ts +3 -2
  353. package/dist/utils/version.js +14 -27
  354. package/dist/utils/version.js.map +1 -1
  355. package/package.json +13 -7
  356. package/dist/native/intercept.d.ts +0 -35
  357. package/dist/native/intercept.js +0 -181
  358. package/dist/native/intercept.js.map +0 -1
  359. package/dist/routes/config/channels/routes.js +0 -1505
  360. package/dist/routes/config/channels/routes.js.map +0 -1
@@ -1,6 +1,8 @@
1
1
  import { createFileStore } from "./persistence.js";
2
+ import { LOG } from "../utils/index.js";
2
3
  import { getConfigFilePath } from "./paths.js";
3
4
  import { getValidPresetIds } from "./presets.js";
5
+ import { isDeepStrictEqual } from "node:util";
4
6
  /**
5
7
  * Metadata for all configurable settings, organized by category.
6
8
  */
@@ -39,6 +41,18 @@ export const CONFIG_METADATA = {
39
41
  type: "checkboxList"
40
42
  }
41
43
  ],
44
+ channelsDvr: [
45
+ {
46
+ description: "TCP port for the user's Channels DVR API. PrismCast polls Channels DVR over HTTP for show-info, device-mapping discovery, and pretune " +
47
+ "scheduling. Defaults to 8089, which is the canonical Channels DVR port. Override only when the user has changed the DVR's listen port from its default.",
48
+ envVar: "CHANNELS_DVR_PORT",
49
+ label: "Channels DVR Port",
50
+ max: 65535,
51
+ min: 1,
52
+ path: "channelsDvr.port",
53
+ type: "port"
54
+ }
55
+ ],
42
56
  hdhr: [
43
57
  {
44
58
  description: "Enable HDHomeRun emulation for Plex integration. When enabled, PrismCast runs a second HTTP server that emulates an HDHomeRun tuner, " +
@@ -468,30 +482,158 @@ export const CONFIG_METADATA = {
468
482
  * Configuration persistence uses a transactional file store that provides atomic writes, serialized mutations, corruption protection, and backup rotation.
469
483
  * All config modifications go through mutateConfig(), which prevents the class of bugs where a corrupt file gets silently overwritten with nearly-empty data.
470
484
  */
471
- // Transactional store instance for config.json. The beforeWrite hook applies filterDefaults() universally so that every save produces a minimal config file
472
- // containing only non-default values. This was previously inconsistent...some callers applied filterDefaults and some didn't.
485
+ /* Current schema version for config.json. Migrations are declared in configMigrations below; the framework runs them in order from the file's stored version
486
+ * up to this constant, stamps the new version after each, and records the audit trail in migrationsApplied.
487
+ *
488
+ * Version history:
489
+ * 1 - Original. Provider-themed channel field names ("enabledProviders", "precacheProviders") and "foxcom" service tag still present.
490
+ * 2 - Service-themed naming. Renames "enabledProviders" -> "enabledServices", "precacheProviders" -> "precacheServices", and "foxcom" -> "foxone" inside
491
+ * the channels.enabledServices array. Companion to channels.json v3 which renames foxcom in channel keys and selections.
492
+ * 3 - DVR connection namespace. Moves the top-level `dvrHost` field into `channelsDvr.host`, splitting any legacy `host:port` value so the host portion
493
+ * lands at `channelsDvr.host` (host-only) and the port portion lands at `channelsDvr.port` only when the user has not already customized the port.
494
+ */
495
+ const CURRENT_CONFIG_SCHEMA_VERSION = 3;
496
+ /* Declarative schema migrations. The file store framework runs these in order from the file's stored schemaVersion up to CURRENT_CONFIG_SCHEMA_VERSION,
497
+ * stamping the new version and recording the description in migrationsApplied after each application. Apply functions mutate the data in place.
498
+ */
499
+ const configMigrations = {
500
+ 2: {
501
+ apply: applyChannelsProviderRenameMigration,
502
+ description: "Rename legacy provider-themed channel field names and foxcom service tag to foxone"
503
+ },
504
+ 3: {
505
+ apply: applyDvrHostNamespaceMigration,
506
+ description: "Move dvrHost into channelsDvr.host (split legacy host:port format)"
507
+ }
508
+ };
509
+ /**
510
+ * Renames the legacy provider-themed channel fields to their current service-themed names: `enabledProviders` -> `enabledServices`,
511
+ * `precacheProviders` -> `precacheServices`, and the `"foxcom"` tag -> `"foxone"` inside `enabledServices`. When both legacy and current names coexist on disk
512
+ * (a rare hand-edited collision), the current name wins and the legacy key is deleted - operator intent on the new name takes precedence over the auto-rename.
513
+ *
514
+ * Behavioral contract: this is a pure transformation on the on-disk shape. Configs without a `channels` block are left untouched (early return); configs that
515
+ * already have the v2 shape (no legacy keys present) are unchanged at the field level (idempotent), though the foxcom-to-foxone map runs unconditionally over
516
+ * the present `enabledServices` array because that operation is itself a no-op for already-migrated tags.
517
+ *
518
+ * Exported for unit-test coverage of the rename cases (each rename, collision wins, foxcom remap, no-channels early return). Production callers reach this
519
+ * only through the schema migration runner, never directly.
520
+ *
521
+ * @param data - The pre-migration UserConfig data, mutated in place.
522
+ */
523
+ export function applyChannelsProviderRenameMigration(data) {
524
+ // Cast to a permissive shape because the legacy provider-themed keys are not declared on UserChannelsConfig - they only exist on older on-disk files.
525
+ const channels = data.channels;
526
+ if (!channels) {
527
+ return;
528
+ }
529
+ // Rename enabledProviders -> enabledServices. If both are present (rare hand-edited case) the current name wins.
530
+ if (Array.isArray(channels["enabledProviders"])) {
531
+ if (!Array.isArray(channels["enabledServices"])) {
532
+ channels["enabledServices"] = channels["enabledProviders"];
533
+ }
534
+ delete channels["enabledProviders"];
535
+ }
536
+ // Rename precacheProviders -> precacheServices.
537
+ if (Array.isArray(channels["precacheProviders"])) {
538
+ if (!Array.isArray(channels["precacheServices"])) {
539
+ channels["precacheServices"] = channels["precacheProviders"];
540
+ }
541
+ delete channels["precacheProviders"];
542
+ }
543
+ // Rename "foxcom" -> "foxone" inside the enabledServices service-tag filter.
544
+ if (Array.isArray(channels["enabledServices"])) {
545
+ channels["enabledServices"] = channels["enabledServices"].map((tag) => (tag === "foxcom") ? "foxone" : tag);
546
+ }
547
+ }
548
+ /**
549
+ * Splits a legacy `dvrHost` value into the new `channelsDvr.host` / `channelsDvr.port` namespace. The host portion is host-only by invariant; legacy values
550
+ * carrying an embedded port (e.g., `192.168.1.5:8089`) are split so the host lands at `channelsDvr.host` and the port lands at `channelsDvr.port` IFF the
551
+ * user has not already customized the port. When both an embedded port and an explicit user-set port exist, the explicit port wins (a warning is logged) and
552
+ * the embedded port is discarded - the user's deliberate choice takes precedence over implicit legacy data.
553
+ *
554
+ * Splits at the LAST colon so bracket-wrapped IPv6 forms like `[::1]:8089` survive (the production setDvrHost invariant rejects bare-colon values, but disk
555
+ * files may carry hand-edited content the framework cannot vet). When the trailing portion does not parse as a valid port number (1..65535), the entire input
556
+ * is treated as a host-only value rather than fabricating a bogus port.
557
+ *
558
+ * Exported for unit-test coverage of the splitting cases (host-only, host+default-port, host+non-default-port collision). Production callers reach this only
559
+ * through the schema migration runner, never directly.
560
+ *
561
+ * @param data - The pre-migration UserConfig data, mutated in place.
562
+ */
563
+ export function applyDvrHostNamespaceMigration(data) {
564
+ // The legacy field is not declared on the current UserConfig; we read it through a permissive cast to access the on-disk pre-migration shape. After migration
565
+ // the field is deleted so it cannot leak into the post-migration write path.
566
+ const legacy = data;
567
+ const dvrHost = legacy.dvrHost;
568
+ if (typeof dvrHost !== "string") {
569
+ return;
570
+ }
571
+ let host = dvrHost;
572
+ let embeddedPort;
573
+ // Split at the last colon so bracket-wrapped IPv6 (e.g., [::1]:8089) survives. If the trailing portion does not parse as a valid TCP port, treat the whole
574
+ // input as host-only - avoid fabricating a port from a malformed string.
575
+ const colonIdx = dvrHost.lastIndexOf(":");
576
+ if (colonIdx >= 0) {
577
+ const tail = dvrHost.slice(colonIdx + 1);
578
+ const parsed = Number(tail);
579
+ if (Number.isInteger(parsed) && (parsed >= 1) && (parsed <= 65535)) {
580
+ host = dvrHost.slice(0, colonIdx);
581
+ embeddedPort = parsed;
582
+ }
583
+ }
584
+ data.channelsDvr ??= {};
585
+ data.channelsDvr.host = host;
586
+ // Migrate the embedded port only when the user has not customized the port already. A user-set port reflects an explicit choice that overrides whatever the
587
+ // legacy host:port string encoded - prefer the explicit value and log the conflict so it is auditable.
588
+ if (embeddedPort !== undefined) {
589
+ const userPort = data.channelsDvr.port;
590
+ if (userPort === undefined) {
591
+ data.channelsDvr.port = embeddedPort;
592
+ }
593
+ else if (userPort !== embeddedPort) {
594
+ LOG.warn("Schema migration v3: legacy dvrHost \"%s\" carried embedded port %d but channelsDvr.port is already set to %d. " +
595
+ "Keeping the explicit port; embedded port discarded.", dvrHost, embeddedPort, userPort);
596
+ }
597
+ }
598
+ delete legacy.dvrHost;
599
+ }
600
+ // Transactional store instance for config.json. The beforeWrite hook is the single chokepoint where the persisted shape is normalized: filterDefaults() runs on
601
+ // every save so the file on disk contains only non-default values, regardless of which call site initiated the write. Schema migrations run automatically via
602
+ // the file store framework's migration runner before the data reaches mergeConfiguration.
473
603
  const configStore = createFileStore({
474
604
  beforeWrite: (data) => filterDefaults(data),
475
- defaultValue: () => ({}),
605
+ currentSchemaVersion: CURRENT_CONFIG_SCHEMA_VERSION,
606
+ defaultValue: () => ({ schemaVersion: CURRENT_CONFIG_SCHEMA_VERSION }),
607
+ getSchemaVersion: (data) => data.schemaVersion ?? 1,
476
608
  label: "configuration",
609
+ migrations: configMigrations,
477
610
  parse: (raw) => JSON.parse(raw),
478
- path: getConfigFilePath
611
+ path: getConfigFilePath,
612
+ recordMigration: (data, description) => {
613
+ data.migrationsApplied ??= [];
614
+ data.migrationsApplied.push(description);
615
+ },
616
+ setSchemaVersion: (data, version) => { data.schemaVersion = version; }
479
617
  });
480
618
  /**
481
- * Reads the current configuration from disk without acquiring the serialization lock. Returns the parsed config with parse status. Use this for read-only
482
- * access (export endpoints, startup initialization). For modifications, use mutateConfig() instead.
619
+ * Reads the current configuration from disk without acquiring the serialization lock. Returns the parsed (and migrated) config with parse status. Use this for
620
+ * read-only access (export endpoints, startup initialization). For modifications, use mutateConfig() instead.
483
621
  * @returns The loaded configuration with parse status.
484
622
  */
485
623
  export async function readConfig() {
486
624
  const result = await configStore.read();
487
- return { config: result.data, parseError: result.parseError, parseErrorMessage: result.parseErrorMessage };
625
+ return {
626
+ config: result.data,
627
+ parseError: result.parseError,
628
+ parseErrorMessage: result.parseErrorMessage,
629
+ recoveredFromBackup: result.recoveredFromBackup
630
+ };
488
631
  }
489
632
  /**
490
- * Serialized read-modify-write operation on config.json. The mutation function receives the current config and modifies it in place. The store handles
491
- * atomicity (temp file + rename), serialization (promise chain), corruption guard (throws on parse error), backup (.bak rotation), and filterDefaults
492
- * (beforeWrite hook).
633
+ * Serialized read-modify-write operation on config.json. The mutation function receives the current config (already migrated to the latest schema version) and
634
+ * modifies it in place. The store handles atomicity, serialization, corruption guard, backup, schema migration, and filterDefaults via the framework.
493
635
  * @param fn - Mutation function. Receives current config. Modify in place; return value is ignored.
494
- * @throws FileStoreParseError if config.json contains invalid JSON.
636
+ * @throws FileStoreParseError if config.json contains invalid JSON and no usable backup exists.
495
637
  */
496
638
  export async function mutateConfig(fn) {
497
639
  await configStore.mutate(fn);
@@ -533,6 +675,10 @@ export const DEFAULTS = {
533
675
  setupCompleted: false,
534
676
  visibleColumns: []
535
677
  },
678
+ channelsDvr: {
679
+ host: "",
680
+ port: 8089
681
+ },
536
682
  hdhr: {
537
683
  deviceId: "",
538
684
  enabled: true,
@@ -623,7 +769,7 @@ function parseEnvValue(value, type) {
623
769
  return value.split(",").map((v) => v.trim()).filter((v) => v.length > 0);
624
770
  }
625
771
  case "path": {
626
- // An empty path env var means "use default" — return null so the downstream code sees the same sentinel as an unset config field.
772
+ // An empty path env var means "use default" - return null so the downstream code sees the same sentinel as an unset config field.
627
773
  return (value.trim() === "") ? null : value;
628
774
  }
629
775
  default: {
@@ -657,11 +803,8 @@ export function getNestedValue(obj, settingPath) {
657
803
  export function setNestedValue(obj, settingPath, value) {
658
804
  const parts = settingPath.split(".");
659
805
  let current = obj;
660
- for (let i = 0; i < (parts.length - 1); i++) {
661
- const part = parts[i];
662
- if (current[part] === undefined) {
663
- current[part] = {};
664
- }
806
+ for (const part of parts.slice(0, -1)) {
807
+ current[part] ??= {};
665
808
  current = current[part];
666
809
  }
667
810
  current[parts.at(-1) ?? ""] = value;
@@ -685,47 +828,18 @@ export function mergeConfiguration(userConfig, cliOverrides) {
685
828
  }
686
829
  }
687
830
  }
688
- /* Array and auto-generated string fields require explicit handling here because the standard CONFIG_METADATA loop above assigns by reference. These blocks
689
- * apply defensive spread copies to prevent shared references between the user config and runtime config. Fields not in CONFIG_METADATA (disabledPredefined,
690
- * enabledServices) also need their own POST /config carry-forward logic since they are managed by separate endpoints. The precacheServices field is in
691
- * CONFIG_METADATA (as a checkboxList) so the standard loop handles it, but the spread copy here still provides the defensive guarantee.
692
- *
693
- * When adding a new field here, also add corresponding preservation logic in filterDefaults() below.
831
+ /* Hydrate fields that live outside CONFIG_METADATA (auto-discovery results like channelsDvr.host, separately-managed lists like channels.disabledPredefined,
832
+ * the persisted debug filter pattern) and array fields whose CONFIG_METADATA hydration would alias the parsed UserConfig blob into runtime CONFIG. The
833
+ * registry pairs each path with a predicate (ignored when undefined) and an optional defensive-copy hook. Adding a new field here is one HYDRATED_FIELDS
834
+ * entry; the drift-check test in userConfig.merge.test.ts asserts that PRESERVED_FIELDS partitions exactly into HYDRATED_FIELDS plus PERSISTENCE_ONLY_FIELDS,
835
+ * so a future preservation entry cannot be added without an explicit hydration classification. See the section comment above HYDRATED_FIELDS for the full
836
+ * design intent.
694
837
  */
695
- if (Array.isArray(userConfig.channels?.disabledPredefined)) {
696
- config.channels.disabledPredefined = [...userConfig.channels.disabledPredefined];
697
- }
698
- // Accept both new field names and legacy field names for backward compatibility with existing config.json files.
699
- const channelsRaw = userConfig.channels;
700
- if (Array.isArray(userConfig.channels?.enabledServices)) {
701
- config.channels.enabledServices = [...userConfig.channels.enabledServices];
702
- }
703
- else if (Array.isArray(channelsRaw?.enabledProviders)) {
704
- config.channels.enabledServices = [...channelsRaw.enabledProviders];
705
- }
706
- if (Array.isArray(userConfig.channels?.precacheServices)) {
707
- config.channels.precacheServices = [...userConfig.channels.precacheServices];
708
- }
709
- else if (Array.isArray(channelsRaw?.precacheProviders)) {
710
- config.channels.precacheServices = [...channelsRaw.precacheProviders];
711
- }
712
- if (Array.isArray(userConfig.channels?.visibleColumns)) {
713
- config.channels.visibleColumns = [...userConfig.channels.visibleColumns];
714
- }
715
- if (Array.isArray(userConfig.streaming?.captureCodecs)) {
716
- config.streaming.captureCodecs = [...userConfig.streaming.captureCodecs];
717
- }
718
- if ((typeof userConfig.channels?.channelSortField === "string") && (userConfig.channels.channelSortField.length > 0)) {
719
- config.channels.channelSortField = userConfig.channels.channelSortField;
720
- }
721
- if ((typeof userConfig.channels?.channelSortDirection === "string") && (userConfig.channels.channelSortDirection.length > 0)) {
722
- config.channels.channelSortDirection = userConfig.channels.channelSortDirection;
723
- }
724
- if ((typeof userConfig.hdhr?.deviceId === "string") && (userConfig.hdhr.deviceId.length > 0)) {
725
- config.hdhr.deviceId = userConfig.hdhr.deviceId;
726
- }
727
- if ((typeof userConfig.logging?.debugFilter === "string") && (userConfig.logging.debugFilter.length > 0)) {
728
- config.logging.debugFilter = userConfig.logging.debugFilter;
838
+ for (const field of HYDRATED_FIELDS) {
839
+ const userValue = getNestedValue(userConfig, field.path);
840
+ if (field.shouldHydrate(userValue, undefined)) {
841
+ setNestedValue(config, field.path, field.copy ? field.copy(userValue) : userValue);
842
+ }
729
843
  }
730
844
  // Apply environment variable overrides.
731
845
  for (const settings of Object.values(CONFIG_METADATA)) {
@@ -783,6 +897,7 @@ const SETTINGS_TAB_SECTIONS = [
783
897
  /* Display metadata for Advanced tab sections. The category field must match a key in CONFIG_METADATA. Entries are sorted alphabetically by category.
784
898
  */
785
899
  const ADVANCED_SECTION_META = [
900
+ { category: "channelsDvr", displayName: "Channels DVR" },
786
901
  { category: "hls", displayName: "HLS" },
787
902
  { category: "logging", displayName: "Logging" },
788
903
  { category: "paths", displayName: "Paths" },
@@ -858,25 +973,20 @@ export function getAdvancedSections() {
858
973
  const settingsTabPaths = SETTINGS_TAB_SECTIONS.flatMap((s) => s.paths);
859
974
  // Get all paths that belong in Advanced (not in Settings).
860
975
  const advancedPaths = getAllSettingPaths().filter((p) => !settingsTabPaths.includes(p));
861
- // Group by category (first path segment).
862
- const byCategory = new Map();
863
- for (const path of advancedPaths) {
864
- const category = path.split(".")[0];
865
- const setting = getSettingByPath(path);
866
- if (setting) {
867
- if (!byCategory.has(category)) {
868
- byCategory.set(category, []);
869
- }
870
- byCategory.get(category)?.push(setting);
871
- }
872
- }
976
+ // Pair every advanced path with its resolved setting and category prefix, then drop entries whose category is empty or whose setting lookup failed. The
977
+ // surviving pairs feed Map.groupBy below for the actual grouping.
978
+ const settingsByPath = advancedPaths
979
+ .map((path) => ({ category: path.split(".")[0] ?? "", setting: getSettingByPath(path) }))
980
+ .filter((entry) => Boolean(entry.category && entry.setting));
981
+ // Group by category (first path segment) using the standard ESNext.Collection grouper.
982
+ const byCategory = Map.groupBy(settingsByPath, (entry) => entry.category);
873
983
  // Return sections in the defined order with display names.
874
984
  return ADVANCED_SECTION_META
875
985
  .filter((meta) => byCategory.has(meta.category))
876
986
  .map((meta) => ({
877
987
  displayName: meta.displayName,
878
988
  id: meta.category,
879
- settings: byCategory.get(meta.category) ?? []
989
+ settings: byCategory.get(meta.category)?.map((entry) => entry.setting) ?? []
880
990
  }));
881
991
  }
882
992
  /* When saving user configuration, we only want to persist values that differ from defaults. This keeps the config file clean and makes it easy to see what the user has
@@ -922,8 +1032,84 @@ export function isEqualToDefault(value, defaultValue) {
922
1032
  return false;
923
1033
  }
924
1034
  // Compare as strings for consistent comparison across types (handles number/string coercion). Config values are always primitives.
925
- return String(value) === String(defaultValue);
1035
+ const primitive = value;
1036
+ const defaultPrimitive = defaultValue;
1037
+ return String(primitive) === String(defaultPrimitive);
926
1038
  }
1039
+ // Predicate: any array, including empty. Used by HYDRATED_FIELDS to mirror the historical mergeConfiguration() inline-block behavior of unconditionally
1040
+ // hydrating any array-typed value present on disk; downstream validateConfiguration() normalizes empty-array edge cases (e.g., captureCodecs forces h264).
1041
+ const isArrayValue = (value) => Array.isArray(value);
1042
+ // Predicate: any non-empty array. Used for fields where the user's empty-array state coincides with the default-empty-array state (disabledPredefined,
1043
+ // enabledServices, precacheServices, visibleColumns, migrationsApplied). The defaultValue argument is intentionally unused.
1044
+ const isNonEmptyArray = (value) => Array.isArray(value) && (value.length > 0);
1045
+ // Predicate: any non-empty string. Used for fields whose default is the empty string and whose presence-on-disk should follow the same rule (hdhr.deviceId,
1046
+ // logging.debugFilter, channelsDvr.host).
1047
+ const isNonEmptyString = (value) => (typeof value === "string") && (value.length > 0);
1048
+ // Predicate: any number. Used for schemaVersion - the framework-managed integer that any non-undefined value must round-trip through filterDefaults.
1049
+ // Predicate: any number including NaN. Number.isFinite() would tighten the contract if NaN must be rejected.
1050
+ const isNumber = (value) => typeof value === "number";
1051
+ // Predicate: a string that differs from the default by simple equality. Used for channelSortField / channelSortDirection - both have meaningful default
1052
+ // values ("name", "asc") that should be stripped on save while any other valid string is preserved.
1053
+ const differsFromStringDefault = (value, defaultValue) => (typeof value === "string") && (value !== defaultValue);
1054
+ // Predicate: an array whose contents differ from the default by SORTED-element comparison. Used for streaming.captureCodecs - the default ["h264", "hevc"]
1055
+ // reordered by the user (["hevc", "h264"]) is semantically the same configuration and should not write to disk; only a different SET of codecs counts as a
1056
+ // customization worth preserving.
1057
+ const differsFromSortedArrayDefault = (value, defaultValue) => {
1058
+ return Array.isArray(value) && Array.isArray(defaultValue) && !isDeepStrictEqual(value.toSorted(), defaultValue.toSorted());
1059
+ };
1060
+ /**
1061
+ * Allowlist of config paths that filterDefaults() preserves outside the CONFIG_METADATA-driven loop. See the section comment above for the two distinct
1062
+ * reasons a path lives here rather than in CONFIG_METADATA. The list is alphabetized by path so a future maintainer can locate any entry by paging through
1063
+ * the registry; ordering does not affect runtime semantics because each entry's preserve check is independent.
1064
+ */
1065
+ export const PRESERVED_FIELDS = [
1066
+ { path: "channels.channelSortDirection", shouldPreserve: differsFromStringDefault },
1067
+ { path: "channels.channelSortField", shouldPreserve: differsFromStringDefault },
1068
+ { path: "channels.disabledPredefined", shouldPreserve: isNonEmptyArray },
1069
+ { path: "channels.enabledServices", shouldPreserve: isNonEmptyArray },
1070
+ { path: "channels.precacheServices", shouldPreserve: isNonEmptyArray },
1071
+ { path: "channels.visibleColumns", shouldPreserve: isNonEmptyArray },
1072
+ { path: "channelsDvr.host", shouldPreserve: isNonEmptyString },
1073
+ { path: "hdhr.deviceId", shouldPreserve: isNonEmptyString },
1074
+ { path: "logging.debugFilter", shouldPreserve: isNonEmptyString },
1075
+ { path: "migrationsApplied", shouldPreserve: isNonEmptyArray },
1076
+ { path: "schemaVersion", shouldPreserve: isNumber },
1077
+ { path: "streaming.captureCodecs", shouldPreserve: differsFromSortedArrayDefault }
1078
+ ];
1079
+ // Defensive spread copy for array fields. Pulled out as a const so the registry below reads as a declarative table.
1080
+ const spreadArray = (value) => [...value];
1081
+ /**
1082
+ * Allowlist of config paths that mergeConfiguration() hydrates from the persisted UserConfig into the runtime CONFIG outside the CONFIG_METADATA-driven loop.
1083
+ * Each entry corresponds to a PRESERVED_FIELDS entry that lives on the runtime Config type (the persistence-only entries schemaVersion / migrationsApplied are
1084
+ * declared in PERSISTENCE_ONLY_FIELDS instead). The list is alphabetized by path; ordering does not affect runtime semantics. A drift-check test in
1085
+ * userConfig.merge.test.ts asserts that PRESERVED_FIELDS partitions exactly into HYDRATED_FIELDS plus PERSISTENCE_ONLY_FIELDS, so a future preservation entry
1086
+ * cannot be added without explicitly classifying it as runtime-hydrated or persistence-only.
1087
+ */
1088
+ export const HYDRATED_FIELDS = [
1089
+ { path: "channels.channelSortDirection", shouldHydrate: isNonEmptyString },
1090
+ { path: "channels.channelSortField", shouldHydrate: isNonEmptyString },
1091
+ { copy: spreadArray, path: "channels.disabledPredefined", shouldHydrate: isArrayValue },
1092
+ { copy: spreadArray, path: "channels.enabledServices", shouldHydrate: isArrayValue },
1093
+ { copy: spreadArray, path: "channels.precacheServices", shouldHydrate: isArrayValue },
1094
+ { copy: spreadArray, path: "channels.visibleColumns", shouldHydrate: isArrayValue },
1095
+ { path: "channelsDvr.host", shouldHydrate: isNonEmptyString },
1096
+ { path: "hdhr.deviceId", shouldHydrate: isNonEmptyString },
1097
+ { path: "logging.debugFilter", shouldHydrate: isNonEmptyString },
1098
+ { copy: spreadArray, path: "streaming.captureCodecs", shouldHydrate: isArrayValue }
1099
+ ];
1100
+ /**
1101
+ * Allowlist of PRESERVED_FIELDS entries that exist only on the persisted UserConfig shape and have NO runtime CONFIG counterpart. These are framework-managed
1102
+ * file-store metadata - the schema-migration runner owns schemaVersion (so the file-store framework can decide whether migrations have run) and migrationsApplied
1103
+ * (the audit trail of which migrations have applied). Neither belongs in runtime CONFIG; both must round-trip through filterDefaults so saves do not strip them.
1104
+ *
1105
+ * The drift-check test consumes this constant to assert that every PRESERVED_FIELDS entry is classified as either runtime-hydrated (HYDRATED_FIELDS) or
1106
+ * persistence-only (here), and that the two sets are disjoint. Adding a new PRESERVED_FIELDS entry without classifying it here or in HYDRATED_FIELDS fails the
1107
+ * drift check at test time, surfacing the architectural intent that every preserved field has a declared destination.
1108
+ */
1109
+ export const PERSISTENCE_ONLY_FIELDS = [
1110
+ "migrationsApplied",
1111
+ "schemaVersion"
1112
+ ];
927
1113
  /**
928
1114
  * Filters a user configuration object to remove values that match the defaults. This produces a minimal config file containing only the settings the user has actually
929
1115
  * customized. Empty nested objects are also removed.
@@ -932,9 +1118,20 @@ export function isEqualToDefault(value, defaultValue) {
932
1118
  */
933
1119
  export function filterDefaults(config) {
934
1120
  const filtered = {};
935
- // Iterate over all known settings and check if the value differs from the default.
1121
+ // Build the set of paths owned by PRESERVED_FIELDS so the metadata-driven loop can skip them. The PRESERVED_FIELDS predicate is the sole arbiter for those
1122
+ // paths because String() coercion in isEqualToDefault produces false positives for array-shaped values (e.g., a reordered captureCodecs list coerces to a
1123
+ // different comma-joined string than the default and would survive the loop, even when the predicate would correctly classify it as default-equal).
1124
+ // Skipping the loop for those paths and letting the predicate decide is the only way to make the predicate authoritative without restructuring either
1125
+ // registry. Paths in PRESERVED_FIELDS that are NOT in CONFIG_METADATA (channelsDvr.host, hdhr.deviceId, etc.) are unaffected - the loop never visited them
1126
+ // before either.
1127
+ const preservedPaths = new Set(PRESERVED_FIELDS.map((field) => field.path));
1128
+ // Iterate over all known settings and check if the value differs from the default. Paths managed by PRESERVED_FIELDS are skipped here so the predicate below
1129
+ // has unilateral control over their inclusion.
936
1130
  for (const settings of Object.values(CONFIG_METADATA)) {
937
1131
  for (const setting of settings) {
1132
+ if (preservedPaths.has(setting.path)) {
1133
+ continue;
1134
+ }
938
1135
  const value = getNestedValue(config, setting.path);
939
1136
  // Skip undefined values (setting not present in config).
940
1137
  if (value === undefined) {
@@ -947,51 +1144,14 @@ export function filterDefaults(config) {
947
1144
  }
948
1145
  }
949
1146
  }
950
- /* Counterpart to the array handling in mergeConfiguration() above. Array fields need explicit preservation here because the standard loop's isEqualToDefault()
951
- * uses String() comparison, which works for inequality detection but can produce false positives for arrays with comma-containing strings. The explicit blocks
952
- * also ensure non-empty arrays survive the diff even when the standard loop would skip them.
953
- */
954
- const configChannelsDisabled = getNestedValue(config, "channels.disabledPredefined");
955
- if (Array.isArray(configChannelsDisabled) && (configChannelsDisabled.length > 0)) {
956
- setNestedValue(filtered, "channels.disabledPredefined", configChannelsDisabled);
957
- }
958
- const configEnabledServices = getNestedValue(config, "channels.enabledServices");
959
- if (Array.isArray(configEnabledServices) && (configEnabledServices.length > 0)) {
960
- setNestedValue(filtered, "channels.enabledServices", configEnabledServices);
961
- }
962
- const configPrecacheServices = getNestedValue(config, "channels.precacheServices");
963
- if (Array.isArray(configPrecacheServices) && (configPrecacheServices.length > 0)) {
964
- setNestedValue(filtered, "channels.precacheServices", configPrecacheServices);
965
- }
966
- const configVisibleColumns = getNestedValue(config, "channels.visibleColumns");
967
- if (Array.isArray(configVisibleColumns) && (configVisibleColumns.length > 0)) {
968
- setNestedValue(filtered, "channels.visibleColumns", configVisibleColumns);
969
- }
970
- // Preserve captureCodecs when it differs from the default. The default includes all recognized codecs, so a shorter list means the user has disabled one.
971
- const configCaptureCodecs = getNestedValue(config, "streaming.captureCodecs");
972
- const defaultCaptureCodecs = getNestedValue(DEFAULTS, "streaming.captureCodecs");
973
- if (Array.isArray(configCaptureCodecs) && (JSON.stringify(configCaptureCodecs.toSorted()) !== JSON.stringify(defaultCaptureCodecs.toSorted()))) {
974
- setNestedValue(filtered, "streaming.captureCodecs", configCaptureCodecs);
975
- }
976
- const configSortField = getNestedValue(config, "channels.channelSortField");
977
- if ((typeof configSortField === "string") && (configSortField !== "name")) {
978
- setNestedValue(filtered, "channels.channelSortField", configSortField);
979
- }
980
- const configSortDirection = getNestedValue(config, "channels.channelSortDirection");
981
- if ((typeof configSortDirection === "string") && (configSortDirection !== "asc")) {
982
- setNestedValue(filtered, "channels.channelSortDirection", configSortDirection);
983
- }
984
- const configDeviceId = getNestedValue(config, "hdhr.deviceId");
985
- if ((typeof configDeviceId === "string") && (configDeviceId.length > 0)) {
986
- setNestedValue(filtered, "hdhr.deviceId", configDeviceId);
987
- }
988
- const configDebugFilter = getNestedValue(config, "logging.debugFilter");
989
- if ((typeof configDebugFilter === "string") && (configDebugFilter.length > 0)) {
990
- setNestedValue(filtered, "logging.debugFilter", configDebugFilter);
991
- }
992
- // Preserve the auto-discovered DVR host across settings saves.
993
- if ((typeof config.dvrHost === "string") && (config.dvrHost.length > 0)) {
994
- filtered.dvrHost = config.dvrHost;
1147
+ // Apply the explicit preservation registry. Each entry is consulted with its current value plus the default-at-path; the predicate decides whether to
1148
+ // write through. See PRESERVED_FIELDS above for the entries and their rationale.
1149
+ for (const field of PRESERVED_FIELDS) {
1150
+ const value = getNestedValue(config, field.path);
1151
+ const defaultValue = getNestedValue(DEFAULTS, field.path);
1152
+ if (field.shouldPreserve(value, defaultValue)) {
1153
+ setNestedValue(filtered, field.path, value);
1154
+ }
995
1155
  }
996
1156
  // Remove any empty nested objects that resulted from filtering.
997
1157
  return removeEmptyObjects(filtered);
@@ -1 +1 @@
1
- {"version":3,"file":"userConfig.js","sourceRoot":"","sources":["../../src/config/userConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"userConfig.js","sourceRoot":"","sources":["../../src/config/userConfig.ts"],"names":[],"mappings":"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"}