prismcast 1.4.2 → 1.5.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 (178) hide show
  1. package/dist/app.js +18 -1
  2. package/dist/app.js.map +1 -1
  3. package/dist/browser/cdp.d.ts +2 -1
  4. package/dist/browser/cdp.js +44 -23
  5. package/dist/browser/cdp.js.map +1 -1
  6. package/dist/browser/channelSelection.d.ts +45 -1
  7. package/dist/browser/channelSelection.js +164 -27
  8. package/dist/browser/channelSelection.js.map +1 -1
  9. package/dist/browser/display.d.ts +0 -4
  10. package/dist/browser/display.js +0 -7
  11. package/dist/browser/display.js.map +1 -1
  12. package/dist/browser/index.d.ts +5 -0
  13. package/dist/browser/index.js +14 -0
  14. package/dist/browser/index.js.map +1 -1
  15. package/dist/browser/precaching.d.ts +5 -0
  16. package/dist/browser/precaching.js +112 -0
  17. package/dist/browser/precaching.js.map +1 -0
  18. package/dist/browser/tuning/directv.d.ts +2 -0
  19. package/dist/browser/tuning/directv.js +723 -0
  20. package/dist/browser/tuning/directv.js.map +1 -0
  21. package/dist/browser/tuning/fox.d.ts +2 -2
  22. package/dist/browser/tuning/fox.js +141 -22
  23. package/dist/browser/tuning/fox.js.map +1 -1
  24. package/dist/browser/tuning/hbo.d.ts +2 -2
  25. package/dist/browser/tuning/hbo.js +110 -41
  26. package/dist/browser/tuning/hbo.js.map +1 -1
  27. package/dist/browser/tuning/hulu.d.ts +2 -2
  28. package/dist/browser/tuning/hulu.js +442 -168
  29. package/dist/browser/tuning/hulu.js.map +1 -1
  30. package/dist/browser/tuning/sling.d.ts +2 -2
  31. package/dist/browser/tuning/sling.js +200 -56
  32. package/dist/browser/tuning/sling.js.map +1 -1
  33. package/dist/browser/tuning/youtubeTv.d.ts +2 -2
  34. package/dist/browser/tuning/youtubeTv.js +243 -57
  35. package/dist/browser/tuning/youtubeTv.js.map +1 -1
  36. package/dist/browser/video.d.ts +1 -1
  37. package/dist/browser/video.js +4 -2
  38. package/dist/browser/video.js.map +1 -1
  39. package/dist/channels/index.js +280 -34
  40. package/dist/channels/index.js.map +1 -1
  41. package/dist/config/health.d.ts +78 -0
  42. package/dist/config/health.js +202 -0
  43. package/dist/config/health.js.map +1 -0
  44. package/dist/config/paths.d.ts +10 -0
  45. package/dist/config/paths.js +14 -0
  46. package/dist/config/paths.js.map +1 -1
  47. package/dist/config/profiles.d.ts +6 -4
  48. package/dist/config/profiles.js +65 -14
  49. package/dist/config/profiles.js.map +1 -1
  50. package/dist/config/providerPacks.d.ts +46 -0
  51. package/dist/config/providerPacks.js +200 -0
  52. package/dist/config/providerPacks.js.map +1 -0
  53. package/dist/config/providers.d.ts +36 -3
  54. package/dist/config/providers.js +168 -8
  55. package/dist/config/providers.js.map +1 -1
  56. package/dist/config/sites.d.ts +1 -12
  57. package/dist/config/sites.js +38 -5
  58. package/dist/config/sites.js.map +1 -1
  59. package/dist/config/userChannels.d.ts +12 -0
  60. package/dist/config/userChannels.js +81 -14
  61. package/dist/config/userChannels.js.map +1 -1
  62. package/dist/config/userConfig.d.ts +5 -1
  63. package/dist/config/userConfig.js +58 -6
  64. package/dist/config/userConfig.js.map +1 -1
  65. package/dist/config/userProfiles.d.ts +81 -0
  66. package/dist/config/userProfiles.js +424 -0
  67. package/dist/config/userProfiles.js.map +1 -0
  68. package/dist/routes/config/channels/index.d.ts +3 -0
  69. package/dist/routes/config/channels/index.js +3 -0
  70. package/dist/routes/config/channels/index.js.map +1 -0
  71. package/dist/routes/config/channels/routes.d.ts +6 -0
  72. package/dist/routes/config/channels/routes.js +797 -0
  73. package/dist/routes/config/channels/routes.js.map +1 -0
  74. package/dist/routes/config/channels/table.d.ts +46 -0
  75. package/dist/routes/config/channels/table.js +811 -0
  76. package/dist/routes/config/channels/table.js.map +1 -0
  77. package/dist/routes/config/index.d.ts +37 -0
  78. package/dist/routes/config/index.js +81 -0
  79. package/dist/routes/config/index.js.map +1 -0
  80. package/dist/routes/config/providers.d.ts +18 -0
  81. package/dist/routes/config/providers.js +573 -0
  82. package/dist/routes/config/providers.js.map +1 -0
  83. package/dist/routes/config/settings.d.ts +39 -0
  84. package/dist/routes/config/settings.js +820 -0
  85. package/dist/routes/config/settings.js.map +1 -0
  86. package/dist/routes/index.d.ts +3 -2
  87. package/dist/routes/index.js +7 -4
  88. package/dist/routes/index.js.map +1 -1
  89. package/dist/routes/playlist.d.ts +5 -1
  90. package/dist/routes/playlist.js +32 -7
  91. package/dist/routes/playlist.js.map +1 -1
  92. package/dist/routes/providers.d.ts +6 -0
  93. package/dist/routes/providers.js +166 -0
  94. package/dist/routes/providers.js.map +1 -0
  95. package/dist/routes/root/content.d.ts +32 -0
  96. package/dist/routes/root/content.js +857 -0
  97. package/dist/routes/root/content.js.map +1 -0
  98. package/dist/routes/root/index.js +197 -0
  99. package/dist/routes/root/index.js.map +1 -0
  100. package/dist/routes/root/scripts/channels.d.ts +1 -0
  101. package/dist/routes/root/scripts/channels.js +745 -0
  102. package/dist/routes/root/scripts/channels.js.map +1 -0
  103. package/dist/routes/root/scripts/config.d.ts +1 -0
  104. package/dist/routes/root/scripts/config.js +1662 -0
  105. package/dist/routes/root/scripts/config.js.map +1 -0
  106. package/dist/routes/root/scripts/index.d.ts +3 -0
  107. package/dist/routes/root/scripts/index.js +8 -0
  108. package/dist/routes/root/scripts/index.js.map +1 -0
  109. package/dist/routes/root/scripts/status.d.ts +1 -0
  110. package/dist/routes/root/scripts/status.js +436 -0
  111. package/dist/routes/root/scripts/status.js.map +1 -0
  112. package/dist/routes/root/styles.d.ts +5 -0
  113. package/dist/routes/root/styles.js +447 -0
  114. package/dist/routes/root/styles.js.map +1 -0
  115. package/dist/routes/ui.js +8 -3
  116. package/dist/routes/ui.js.map +1 -1
  117. package/dist/service/commands.d.ts +5 -3
  118. package/dist/service/commands.js +117 -33
  119. package/dist/service/commands.js.map +1 -1
  120. package/dist/service/generators.d.ts +27 -0
  121. package/dist/service/generators.js +97 -6
  122. package/dist/service/generators.js.map +1 -1
  123. package/dist/streaming/hls.js +18 -1
  124. package/dist/streaming/hls.js.map +1 -1
  125. package/dist/streaming/lifecycle.js +1 -1
  126. package/dist/streaming/lifecycle.js.map +1 -1
  127. package/dist/streaming/monitor.d.ts +1 -38
  128. package/dist/streaming/monitor.js +2 -289
  129. package/dist/streaming/monitor.js.map +1 -1
  130. package/dist/streaming/recovery.d.ts +143 -0
  131. package/dist/streaming/recovery.js +286 -0
  132. package/dist/streaming/recovery.js.map +1 -0
  133. package/dist/streaming/registry.d.ts +1 -1
  134. package/dist/streaming/setup.d.ts +1 -1
  135. package/dist/streaming/setup.js +3 -1
  136. package/dist/streaming/setup.js.map +1 -1
  137. package/dist/streaming/statusEmitter.d.ts +4 -2
  138. package/dist/streaming/statusEmitter.js +5 -0
  139. package/dist/streaming/statusEmitter.js.map +1 -1
  140. package/dist/types/channels.d.ts +68 -0
  141. package/dist/types/channels.js +2 -0
  142. package/dist/types/channels.js.map +1 -0
  143. package/dist/types/config.d.ts +127 -0
  144. package/dist/types/config.js +2 -0
  145. package/dist/types/config.js.map +1 -0
  146. package/dist/types/index.d.ts +7 -429
  147. package/dist/types/index.js +1 -5
  148. package/dist/types/index.js.map +1 -1
  149. package/dist/types/profiles.d.ts +141 -0
  150. package/dist/types/profiles.js +2 -0
  151. package/dist/types/profiles.js.map +1 -0
  152. package/dist/types/selection.d.ts +101 -0
  153. package/dist/types/selection.js +6 -0
  154. package/dist/types/selection.js.map +1 -0
  155. package/dist/types/shared.d.ts +7 -0
  156. package/dist/types/shared.js +6 -0
  157. package/dist/types/shared.js.map +1 -0
  158. package/dist/types/streaming.d.ts +96 -0
  159. package/dist/types/streaming.js +2 -0
  160. package/dist/types/streaming.js.map +1 -0
  161. package/dist/utils/debugFilter.js +3 -1
  162. package/dist/utils/debugFilter.js.map +1 -1
  163. package/dist/utils/format.d.ts +7 -0
  164. package/dist/utils/format.js +22 -0
  165. package/dist/utils/format.js.map +1 -1
  166. package/dist/utils/index.d.ts +1 -0
  167. package/dist/utils/index.js +1 -0
  168. package/dist/utils/index.js.map +1 -1
  169. package/dist/utils/sanitize.d.ts +14 -0
  170. package/dist/utils/sanitize.js +37 -0
  171. package/dist/utils/sanitize.js.map +1 -0
  172. package/package.json +5 -3
  173. package/dist/routes/config.d.ts +0 -76
  174. package/dist/routes/config.js +0 -2187
  175. package/dist/routes/config.js.map +0 -1
  176. package/dist/routes/root.js +0 -3158
  177. package/dist/routes/root.js.map +0 -1
  178. /package/dist/routes/{root.d.ts → root/index.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/routes/config/settings.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ export declare function setupRoutes(app: Express): void;
7
7
  export { setupAssetEndpoints } from "./assets.js";
8
8
  export { setupAuthEndpoint } from "./auth.js";
9
9
  export { setupChannelsEndpoint } from "./channels.js";
10
- export { setupConfigEndpoint } from "./config.js";
10
+ export { setupConfigEndpoint } from "./config/index.js";
11
11
  export { setupDebugEndpoint } from "./debug.js";
12
12
  export { setupHealthEndpoint } from "./health.js";
13
13
  export { setupHLSRoutes } from "./hls.js";
@@ -15,6 +15,7 @@ export { setupLogsEndpoint } from "./logs.js";
15
15
  export { setupMpegTsRoutes } from "./mpegts.js";
16
16
  export { setupPlayEndpoint } from "./play.js";
17
17
  export { generatePlaylistContent, resolveBaseUrl, setupPlaylistEndpoint } from "./playlist.js";
18
- export { setupRootEndpoint } from "./root.js";
18
+ export { setupProvidersEndpoint } from "./providers.js";
19
+ export { setupRootEndpoint } from "./root/index.js";
19
20
  export { setupStreamsEndpoint } from "./streams.js";
20
21
  export { setupUpgradeEndpoint } from "./upgrade.js";
@@ -1,7 +1,7 @@
1
1
  import { setupAssetEndpoints } from "./assets.js";
2
2
  import { setupAuthEndpoint } from "./auth.js";
3
3
  import { setupChannelsEndpoint } from "./channels.js";
4
- import { setupConfigEndpoint } from "./config.js";
4
+ import { setupConfigEndpoint } from "./config/index.js";
5
5
  import { setupDebugEndpoint } from "./debug.js";
6
6
  import { setupHLSRoutes } from "./hls.js";
7
7
  import { setupHealthEndpoint } from "./health.js";
@@ -9,7 +9,8 @@ import { setupLogsEndpoint } from "./logs.js";
9
9
  import { setupMpegTsRoutes } from "./mpegts.js";
10
10
  import { setupPlayEndpoint } from "./play.js";
11
11
  import { setupPlaylistEndpoint } from "./playlist.js";
12
- import { setupRootEndpoint } from "./root.js";
12
+ import { setupProvidersEndpoint } from "./providers.js";
13
+ import { setupRootEndpoint } from "./root/index.js";
13
14
  import { setupStreamsEndpoint } from "./streams.js";
14
15
  import { setupUpgradeEndpoint } from "./upgrade.js";
15
16
  /* This module aggregates all route setup functions and provides a single function to configure all HTTP endpoints on the Express application.
@@ -30,6 +31,7 @@ export function setupRoutes(app) {
30
31
  setupMpegTsRoutes(app);
31
32
  setupPlayEndpoint(app);
32
33
  setupPlaylistEndpoint(app);
34
+ setupProvidersEndpoint(app);
33
35
  setupRootEndpoint(app);
34
36
  setupStreamsEndpoint(app);
35
37
  setupUpgradeEndpoint(app);
@@ -38,7 +40,7 @@ export function setupRoutes(app) {
38
40
  export { setupAssetEndpoints } from "./assets.js";
39
41
  export { setupAuthEndpoint } from "./auth.js";
40
42
  export { setupChannelsEndpoint } from "./channels.js";
41
- export { setupConfigEndpoint } from "./config.js";
43
+ export { setupConfigEndpoint } from "./config/index.js";
42
44
  export { setupDebugEndpoint } from "./debug.js";
43
45
  export { setupHealthEndpoint } from "./health.js";
44
46
  export { setupHLSRoutes } from "./hls.js";
@@ -46,7 +48,8 @@ export { setupLogsEndpoint } from "./logs.js";
46
48
  export { setupMpegTsRoutes } from "./mpegts.js";
47
49
  export { setupPlayEndpoint } from "./play.js";
48
50
  export { generatePlaylistContent, resolveBaseUrl, setupPlaylistEndpoint } from "./playlist.js";
49
- export { setupRootEndpoint } from "./root.js";
51
+ export { setupProvidersEndpoint } from "./providers.js";
52
+ export { setupRootEndpoint } from "./root/index.js";
50
53
  export { setupStreamsEndpoint } from "./streams.js";
51
54
  export { setupUpgradeEndpoint } from "./upgrade.js";
52
55
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD;GACG;AAEH;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IAEtC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxB,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,cAAc,CAAC,GAAG,CAAC,CAAC;IACpB,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD;GACG;AAEH;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IAEtC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxB,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,cAAc,CAAC,GAAG,CAAC,CAAC;IACpB,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC5B,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
@@ -1,3 +1,4 @@
1
+ import type { ChannelSortField, SortDirection } from "../types/index.js";
1
2
  import type { Express, Request } from "express";
2
3
  interface ProviderFilter {
3
4
  readonly exclude: boolean;
@@ -23,9 +24,12 @@ export declare function resolveBaseUrl(req: Request): string;
23
24
  * @param baseUrl - The base URL to use for stream URLs (e.g., "http://localhost:5589").
24
25
  * @param filter - Optional provider filter based on the currently selected provider for each channel. In include mode, only channels whose selected provider matches
25
26
  * a filter tag are included. In exclude mode, channels whose selected provider matches any filter tag are excluded. When omitted, all channels are included.
27
+ * @param sort - Optional sort field override. When provided, channels are sorted by this field instead of the user's saved preference. Validated against
28
+ * VALID_SORT_FIELDS before calling.
29
+ * @param direction - Optional sort direction override ("asc" or "desc"). When provided, overrides the user's saved sort direction.
26
30
  * @returns The M3U playlist content.
27
31
  */
28
- export declare function generatePlaylistContent(baseUrl: string, filter?: ProviderFilter): string;
32
+ export declare function generatePlaylistContent(baseUrl: string, filter?: ProviderFilter, sort?: ChannelSortField, direction?: SortDirection): string;
29
33
  /**
30
34
  * Creates the playlist endpoint that serves an M3U playlist in Channels DVR format. The playlist lists all configured channels with their stream URLs, allowing
31
35
  * Channels DVR to import them as custom channels. The endpoint dynamically constructs URLs using the request host header so the playlist works regardless of how
@@ -1,4 +1,4 @@
1
- import { getAllProviderTags, getProviderTagForChannel, resolveProviderKey } from "../config/providers.js";
1
+ import { VALID_SORT_FIELDS, compareChannelSort, getAllProviderTags, getProviderTagForChannel, resolveProviderKey } from "../config/providers.js";
2
2
  import { CONFIG } from "../config/index.js";
3
3
  import { getAllChannels } from "../config/userChannels.js";
4
4
  import { resolveProfile } from "../config/profiles.js";
@@ -69,12 +69,18 @@ export function resolveBaseUrl(req) {
69
69
  * @param baseUrl - The base URL to use for stream URLs (e.g., "http://localhost:5589").
70
70
  * @param filter - Optional provider filter based on the currently selected provider for each channel. In include mode, only channels whose selected provider matches
71
71
  * a filter tag are included. In exclude mode, channels whose selected provider matches any filter tag are excluded. When omitted, all channels are included.
72
+ * @param sort - Optional sort field override. When provided, channels are sorted by this field instead of the user's saved preference. Validated against
73
+ * VALID_SORT_FIELDS before calling.
74
+ * @param direction - Optional sort direction override ("asc" or "desc"). When provided, overrides the user's saved sort direction.
72
75
  * @returns The M3U playlist content.
73
76
  */
74
- export function generatePlaylistContent(baseUrl, filter) {
77
+ export function generatePlaylistContent(baseUrl, filter, sort, direction) {
75
78
  const channels = getAllChannels();
76
79
  const lines = ["#EXTM3U", ""];
77
- const channelNames = Object.keys(channels).sort();
80
+ const sortField = sort ?? CONFIG.channels.channelSortField;
81
+ const sortDir = direction ?? CONFIG.channels.channelSortDirection;
82
+ // Sort channel keys using the specified (or saved) sort field and direction. Default is name ascending.
83
+ const channelNames = Object.keys(channels).sort((a, b) => compareChannelSort(channels[a], a, channels[b], b, sortField, sortDir));
78
84
  for (const name of channelNames) {
79
85
  // Apply the provider filter if specified.
80
86
  if (filter) {
@@ -96,16 +102,20 @@ export function generatePlaylistContent(baseUrl, filter) {
96
102
  const displayName = channel.name ?? name;
97
103
  const streamUrl = baseUrl + "/hls/" + name + "/stream.m3u8";
98
104
  // Build the EXTINF line with required channel-id attribute and tvg-name for the friendly display name. Include channel-number when the user has specified one,
99
- // and tvc-guide-stationid for Gracenote guide data when a stationId is defined.
105
+ // tvc-guide-stationid for Gracenote guide data when a stationId is defined, and tvg-shift for EPG time offset.
100
106
  const channelNumberAttr = channel.channelNumber ? " channel-number=\"" + String(channel.channelNumber) + "\"" : "";
101
107
  const stationIdAttr = channel.stationId ? " tvc-guide-stationid=\"" + channel.stationId + "\"" : "";
102
- const extinfLine = "#EXTINF:-1 channel-id=\"" + name + "\"" + channelNumberAttr + " tvg-name=\"" + displayName + "\"" + stationIdAttr + "," + displayName;
108
+ const tvgShiftAttr = (channel.tvgShift !== undefined) ? " tvg-shift=\"" + String(channel.tvgShift) + "\"" : "";
109
+ const attrs = "#EXTINF:-1 channel-id=\"" + name + "\"" + channelNumberAttr + " tvg-name=\"" + displayName + "\"" + stationIdAttr + tvgShiftAttr;
110
+ const extinfLine = attrs + "," + displayName;
103
111
  lines.push(extinfLine);
104
112
  lines.push(streamUrl);
105
113
  lines.push("");
106
114
  }
107
115
  return lines.join("\n");
108
116
  }
117
+ // Valid sort direction values for query parameter validation.
118
+ const VALID_SORT_DIRECTIONS = new Set(["asc", "desc"]);
109
119
  /**
110
120
  * Creates the playlist endpoint that serves an M3U playlist in Channels DVR format. The playlist lists all configured channels with their stream URLs, allowing
111
121
  * Channels DVR to import them as custom channels. The endpoint dynamically constructs URLs using the request host header so the playlist works regardless of how
@@ -113,10 +123,13 @@ export function generatePlaylistContent(baseUrl, filter) {
113
123
  * @param app - The Express application.
114
124
  */
115
125
  export function setupPlaylistEndpoint(app) {
116
- // GET /playlist - Returns the M3U playlist file. Supports optional ?provider= query parameter for filtering channels by streaming provider.
126
+ // GET /playlist - Returns the M3U playlist file. Supports optional query parameters: ?provider= for filtering by streaming provider, ?sort= for sort field
127
+ // override, and ?direction= for sort direction override.
117
128
  app.get("/playlist", (req, res) => {
118
129
  const baseUrl = resolveBaseUrl(req);
119
130
  const providerParam = typeof req.query.provider === "string" ? req.query.provider.trim() : undefined;
131
+ const sortParam = typeof req.query.sort === "string" ? req.query.sort.trim() || undefined : undefined;
132
+ const directionParam = typeof req.query.direction === "string" ? req.query.direction.trim().toLowerCase() || undefined : undefined;
120
133
  let filter;
121
134
  // Parse and validate the provider filter if specified.
122
135
  if (providerParam) {
@@ -127,7 +140,19 @@ export function setupPlaylistEndpoint(app) {
127
140
  }
128
141
  filter = result.filter;
129
142
  }
130
- const playlist = generatePlaylistContent(baseUrl, filter);
143
+ // Validate the sort field if specified.
144
+ if (sortParam && !VALID_SORT_FIELDS.has(sortParam)) {
145
+ res.status(400).json({ error: "Invalid sort field: " + sortParam + ".", validFields: [...VALID_SORT_FIELDS].sort() });
146
+ return;
147
+ }
148
+ // Validate the sort direction if specified.
149
+ if (directionParam && !VALID_SORT_DIRECTIONS.has(directionParam)) {
150
+ res.status(400).json({ error: "Invalid sort direction: " + directionParam + ".", validDirections: [...VALID_SORT_DIRECTIONS] });
151
+ return;
152
+ }
153
+ const sort = sortParam;
154
+ const direction = directionParam;
155
+ const playlist = generatePlaylistContent(baseUrl, filter, sort, direction);
131
156
  res.set("Content-Type", "audio/x-mpegurl");
132
157
  res.send(playlist);
133
158
  });
@@ -1 +1 @@
1
- {"version":3,"file":"playlist.js","sourceRoot":"","sources":["../../src/routes/playlist.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC1G,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAiBvD;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,KAAa;IAExC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE/F,IAAG,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAEvB,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC5D,CAAC;IAED,iEAAiE;IACjE,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,aAAa,GAAa,EAAE,CAAC;IAEnC,KAAI,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAE1B,IAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAEzB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YAEN,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,IAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QAE5D,OAAO,EAAE,KAAK,EAAE,0GAA0G,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC9I,CAAC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;IAEvD,iDAAiD;IACjD,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9D,IAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAE1B,OAAO,EAAE,KAAK,EAAE,2BAA2B,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IAC5H,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;AAClD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,GAAY;IAEzC,mHAAmH;IACnH,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAE9B,gKAAgK;IAChK,iDAAiD;IACjD,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAClD,MAAM,IAAI,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;IAClF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,IAAI,IAAI,YAAY,CAAC;IAE1C,OAAO,QAAQ,GAAG,KAAK,GAAG,YAAY,CAAC;AACzC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAE,MAAuB;IAE9E,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,CAAE,SAAS,EAAE,EAAE,CAAE,CAAC;IAChC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IAElD,KAAI,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAE/B,0CAA0C;QAC1C,IAAG,MAAM,EAAE,CAAC;YAEV,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,WAAW,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAEnD,oKAAoK;YACpK,IAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAEzC,SAAS;YACX,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE/B,kFAAkF;QAClF,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEhD,IAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YAEnB,SAAS;QACX,CAAC;QAED,gIAAgI;QAChI,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;QACzC,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,GAAG,cAAc,CAAC;QAE5D,+JAA+J;QAC/J,gFAAgF;QAChF,MAAM,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,oBAAoB,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACnH,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACpG,MAAM,UAAU,GAAG,0BAA0B,GAAG,IAAI,GAAG,IAAI,GAAG,iBAAiB,GAAG,cAAc,GAAG,WAAW,GAAG,IAAI,GAAG,aAAa,GAAG,GAAG,GAAG,WAAW,CAAC;QAE1J,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAEhD,4IAA4I;IAC5I,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;QAEzD,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,aAAa,GAAG,OAAO,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrG,IAAI,MAAkC,CAAC;QAEvC,uDAAuD;QACvD,IAAG,aAAa,EAAE,CAAC;YAEjB,MAAM,MAAM,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;YAElD,IAAG,OAAO,IAAI,MAAM,EAAE,CAAC;gBAErB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;gBAE3E,OAAO;YACT,CAAC;YAED,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACzB,CAAC;QAED,MAAM,QAAQ,GAAG,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE1D,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;QAC3C,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"playlist.js","sourceRoot":"","sources":["../../src/routes/playlist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Express } from "express";
2
+ /**
3
+ * Creates the provider channel discovery endpoint.
4
+ * @param app - The Express application.
5
+ */
6
+ export declare function setupProvidersEndpoint(app: Express): void;
@@ -0,0 +1,166 @@
1
+ import { getCurrentBrowser, minimizeBrowserWindow, registerManagedPage, unregisterManagedPage } from "../browser/index.js";
2
+ import { CONFIG } from "../config/index.js";
3
+ import { LOG } from "../utils/index.js";
4
+ import { getProviderBySlug } from "../browser/channelSelection.js";
5
+ /* The providers endpoint exposes channel discovery for each registered provider. A GET request to /providers/:slug/channels creates a temporary browser page,
6
+ * navigates to the provider's guide, runs the provider's discoverChannels implementation, and returns a sorted JSON array of discovered channels. The temporary
7
+ * page is always closed in a finally block to prevent resource leaks. Concurrent requests for the same provider are coalesced — only one discovery walk runs at a
8
+ * time, and subsequent requests piggyback on the in-flight result. A refresh=true request aborts any in-flight discovery and starts fresh.
9
+ */
10
+ // Sentinel error used to identify aborted discoveries in the retry loop. Distinguishes abort rejections from genuine discovery failures so the loop only retries
11
+ // when the failure was caused by a refresh=true cancellation, not an unrelated error.
12
+ class DiscoveryAbortError extends Error {
13
+ constructor() {
14
+ super("Discovery aborted.");
15
+ this.name = "DiscoveryAbortError";
16
+ }
17
+ }
18
+ const inflight = new Map();
19
+ /**
20
+ * Logs a discovery failure and sends a 500 error response.
21
+ * @param res - The Express response object.
22
+ * @param label - The provider's display label for log messages.
23
+ * @param error - The error that caused the failure.
24
+ */
25
+ function sendDiscoveryError(res, label, error) {
26
+ const message = (error instanceof Error) ? error.message : String(error);
27
+ LOG.warn("Channel discovery failed for %s: %s.", label, message);
28
+ res.status(500).json({ error: "Channel discovery failed: " + message + "." });
29
+ }
30
+ /**
31
+ * Runs provider channel discovery in a temporary browser page. Opens a new page, navigates to the provider's guide URL, runs the discovery function, and returns
32
+ * the sorted results. The page is always closed in a finally block. If the abort signal fires (from a refresh=true request), the page is closed mid-discovery,
33
+ * causing Puppeteer operations to throw and the promise to reject with a DiscoveryAbortError.
34
+ * @param provider - The provider module to discover channels for.
35
+ * @param signal - Abort signal for cancellation by refresh requests.
36
+ * @returns Sorted array of discovered channels.
37
+ */
38
+ async function runDiscovery(provider, signal) {
39
+ let page = null;
40
+ // Close the page when the abort signal fires. This causes any in-progress Puppeteer operations to throw, propagating the cancellation through the discovery
41
+ // function without requiring explicit signal checking in each provider's implementation. The finally block also closes the page unconditionally — the
42
+ // redundant close is idempotent (caught by try/catch).
43
+ const onAbort = () => {
44
+ if (page) {
45
+ void page.close().catch(() => {
46
+ // Page may already be closed.
47
+ });
48
+ }
49
+ };
50
+ signal.addEventListener("abort", onAbort, { once: true });
51
+ try {
52
+ const browser = await getCurrentBrowser();
53
+ page = await browser.newPage();
54
+ registerManagedPage(page);
55
+ // Check if we were aborted between entering runDiscovery and creating the page. The onAbort handler would have fired when page was still null, so the page
56
+ // we just opened would never be interrupted. Bail out now and let the finally block close it.
57
+ if (signal.aborted) {
58
+ throw new DiscoveryAbortError();
59
+ }
60
+ // Navigate to the provider's guide URL unless the provider handles its own navigation (e.g., Hulu and Sling set up response interception before navigating).
61
+ // We use networkidle2 rather than load because SPA-based providers (e.g., Hulu) have heavy async initialization that can prevent the load event from firing
62
+ // reliably. Network idle ensures all initial API data has arrived before the discovery function reads the DOM.
63
+ if (!provider.handlesOwnNavigation) {
64
+ await page.goto(provider.guideUrl, { timeout: CONFIG.streaming.navigationTimeout, waitUntil: "networkidle2" });
65
+ }
66
+ const channels = await provider.discoverChannels(page);
67
+ // Sort by name for consistent output. Discovery functions sort at cache time, but fresh (uncached) results from the first call may not be sorted yet.
68
+ channels.sort((a, b) => a.name.localeCompare(b.name));
69
+ return channels;
70
+ }
71
+ catch (error) {
72
+ // Wrap Puppeteer errors caused by page closure during abort into a DiscoveryAbortError so the retry loop can distinguish aborts from genuine failures.
73
+ // signal.aborted is the single source of truth for whether an abort occurred.
74
+ if (signal.aborted) {
75
+ throw new DiscoveryAbortError();
76
+ }
77
+ throw error;
78
+ }
79
+ finally {
80
+ signal.removeEventListener("abort", onAbort);
81
+ if (page) {
82
+ unregisterManagedPage(page);
83
+ try {
84
+ await page.close();
85
+ }
86
+ catch {
87
+ // Page may already be closed if the browser disconnected or the abort handler already closed it.
88
+ }
89
+ // Re-minimize the browser window. Opening the temporary discovery page may have restored the window on macOS, and we want it minimized to reduce GPU usage.
90
+ await minimizeBrowserWindow();
91
+ }
92
+ }
93
+ }
94
+ /**
95
+ * Creates the provider channel discovery endpoint.
96
+ * @param app - The Express application.
97
+ */
98
+ export function setupProvidersEndpoint(app) {
99
+ app.get("/providers/:slug/channels", async (req, res) => {
100
+ const slug = req.params.slug;
101
+ const provider = getProviderBySlug(slug);
102
+ if (!provider) {
103
+ res.status(404).json({ error: "Unknown provider: " + slug + "." });
104
+ return;
105
+ }
106
+ // When refresh=true is requested, clear the provider's caches (unified channel cache, row caches, fully-enumerated flags, etc.) so the discovery walk runs
107
+ // against fresh data. This also resets warm tuning state (watch URLs, GUIDs), but the discovery walk repopulates the unified cache before returning — any
108
+ // subsequent tune resolves from the freshly populated cache as normal. If a discovery is already in flight, abort it first — clearing the cache while a
109
+ // discovery is progressively populating it would corrupt its state.
110
+ const refresh = req.query.refresh === "true";
111
+ if (refresh) {
112
+ const existing = inflight.get(slug);
113
+ if (existing) {
114
+ existing.controller.abort();
115
+ inflight.delete(slug);
116
+ }
117
+ provider.strategy.clearCache?.();
118
+ }
119
+ // Check for cached discovery results before creating a browser page. When a prior tune or discovery call has already enumerated the provider's lineup, the
120
+ // cache is warm and we can return immediately without any browser interaction. Skipped when refresh=true since we just cleared the caches above.
121
+ if (!refresh) {
122
+ const cached = provider.getCachedChannels();
123
+ if (cached) {
124
+ res.json(cached);
125
+ return;
126
+ }
127
+ }
128
+ // Coalesce concurrent requests. If a discovery is already in flight for this provider, piggyback on the existing promise instead of spawning a redundant
129
+ // browser page. If the in-flight discovery was aborted (by a refresh=true request that arrived after we checked above), the promise rejects with a
130
+ // DiscoveryAbortError and we retry against whatever new entry replaced it in the map.
131
+ let entry = inflight.get(slug);
132
+ if (!entry) {
133
+ const controller = new AbortController();
134
+ const promise = runDiscovery(provider, controller.signal).finally(() => {
135
+ // Only remove our own entry. A refresh=true request may have already replaced it with a new one.
136
+ if (inflight.get(slug)?.controller === controller) {
137
+ inflight.delete(slug);
138
+ }
139
+ });
140
+ entry = { controller, promise };
141
+ inflight.set(slug, entry);
142
+ }
143
+ // Await the in-flight discovery. If it was aborted by a refresh=true request, a new discovery should now be in the map — retry against that one. The caller
144
+ // doesn't know or care about the abort; they just want channels. Only DiscoveryAbortError triggers a retry; genuine failures are reported immediately.
145
+ for (;;) {
146
+ try {
147
+ // eslint-disable-next-line no-await-in-loop -- Intentional: each iteration awaits a different promise (the replacement after an abort).
148
+ const channels = await entry.promise;
149
+ res.json(channels);
150
+ return;
151
+ }
152
+ catch (error) {
153
+ // Only retry if this was an abort and a new discovery has replaced the aborted one.
154
+ const retryEntry = inflight.get(slug);
155
+ if ((error instanceof DiscoveryAbortError) && retryEntry && (retryEntry !== entry)) {
156
+ entry = retryEntry;
157
+ continue;
158
+ }
159
+ // Genuine failure or no replacement entry after abort.
160
+ sendDiscoveryError(res, provider.label, error);
161
+ return;
162
+ }
163
+ }
164
+ });
165
+ }
166
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/routes/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Generates the Overview tab content with a comprehensive user guide covering what PrismCast is, video quality expectations, quick start instructions, tuning speed,
3
+ * channel authentication, working with channels, and system requirements.
4
+ * @param baseUrl - The base URL for the server.
5
+ * @returns HTML content for the Overview tab.
6
+ */
7
+ export declare function generateOverviewContent(baseUrl: string): string;
8
+ /**
9
+ * Generates the Help tab content with updating instructions, platform notes, troubleshooting, and known limitations.
10
+ * @returns HTML content for the Help tab.
11
+ */
12
+ export declare function generateHelpContent(): string;
13
+ /**
14
+ * Generates the API Reference tab content with endpoint documentation.
15
+ * @returns HTML content for the API Reference tab.
16
+ */
17
+ export declare function generateApiReferenceContent(): string;
18
+ /**
19
+ * Generates the Channels tab content. This wraps the channels panel from config.ts and includes the login modal for channel authentication.
20
+ * @returns HTML content for the Channels tab.
21
+ */
22
+ export declare function generateChannelsTabContent(): string;
23
+ /**
24
+ * Generates the Logs tab content with the log viewer controls and display area. Uses Server-Sent Events for real-time log streaming instead of polling.
25
+ * @returns HTML content for the Logs tab.
26
+ */
27
+ export declare function generateLogsContent(): string;
28
+ /**
29
+ * Generates the Configuration tab content with subtabs for channels, settings, advanced, and backup.
30
+ * @returns HTML content for the Configuration tab.
31
+ */
32
+ export declare function generateConfigContent(): string;