prismcast 1.7.0 → 1.9.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 (208) hide show
  1. package/README.md +6 -6
  2. package/dist/app.js +24 -13
  3. package/dist/app.js.map +1 -1
  4. package/dist/browser/cdp.d.ts +4 -6
  5. package/dist/browser/cdp.js +13 -17
  6. package/dist/browser/cdp.js.map +1 -1
  7. package/dist/browser/index.js +3 -3
  8. package/dist/browser/index.js.map +1 -1
  9. package/dist/browser/login.js +11 -8
  10. package/dist/browser/login.js.map +1 -1
  11. package/dist/browser/precaching.d.ts +1 -1
  12. package/dist/browser/precaching.js +23 -23
  13. package/dist/browser/precaching.js.map +1 -1
  14. package/dist/browser/tuning/directv.js +4 -7
  15. package/dist/browser/tuning/directv.js.map +1 -1
  16. package/dist/browser/tuning/fox.js +1 -1
  17. package/dist/browser/tuning/fox.js.map +1 -1
  18. package/dist/browser/tuning/hbo.js +1 -1
  19. package/dist/browser/tuning/hbo.js.map +1 -1
  20. package/dist/browser/tuning/hulu.js +3 -3
  21. package/dist/browser/tuning/hulu.js.map +1 -1
  22. package/dist/browser/tuning/sling.js +2 -2
  23. package/dist/browser/tuning/sling.js.map +1 -1
  24. package/dist/channels/index.d.ts +2 -0
  25. package/dist/channels/index.js +438 -252
  26. package/dist/channels/index.js.map +1 -1
  27. package/dist/config/health.d.ts +3 -3
  28. package/dist/config/health.js +13 -18
  29. package/dist/config/health.js.map +1 -1
  30. package/dist/config/index.js +11 -2
  31. package/dist/config/index.js.map +1 -1
  32. package/dist/config/persistence.d.ts +59 -0
  33. package/dist/config/persistence.js +127 -0
  34. package/dist/config/persistence.js.map +1 -0
  35. package/dist/config/profiles.js +10 -10
  36. package/dist/config/profiles.js.map +1 -1
  37. package/dist/config/servicePacks.d.ts +46 -0
  38. package/dist/config/{providerPacks.js → servicePacks.js} +28 -31
  39. package/dist/config/servicePacks.js.map +1 -0
  40. package/dist/config/services.d.ts +202 -0
  41. package/dist/config/services.js +758 -0
  42. package/dist/config/services.js.map +1 -0
  43. package/dist/config/sites.js +61 -61
  44. package/dist/config/sites.js.map +1 -1
  45. package/dist/config/userChannels.d.ts +89 -27
  46. package/dist/config/userChannels.js +400 -184
  47. package/dist/config/userChannels.js.map +1 -1
  48. package/dist/config/userConfig.d.ts +13 -9
  49. package/dist/config/userConfig.js +78 -60
  50. package/dist/config/userConfig.js.map +1 -1
  51. package/dist/config/userProfiles.d.ts +31 -15
  52. package/dist/config/userProfiles.js +154 -123
  53. package/dist/config/userProfiles.js.map +1 -1
  54. package/dist/hdhr/channelMap.d.ts +1 -1
  55. package/dist/hdhr/channelMap.js +4 -7
  56. package/dist/hdhr/channelMap.js.map +1 -1
  57. package/dist/hdhr/discover.js +7 -15
  58. package/dist/hdhr/discover.js.map +1 -1
  59. package/dist/hdhr/index.js +6 -9
  60. package/dist/hdhr/index.js.map +1 -1
  61. package/dist/native/index.d.ts +2 -2
  62. package/dist/native/index.js +17 -27
  63. package/dist/native/index.js.map +1 -1
  64. package/dist/native/intercept.js +86 -89
  65. package/dist/native/intercept.js.map +1 -1
  66. package/dist/native/probe.js +2 -2
  67. package/dist/native/probe.js.map +1 -1
  68. package/dist/native/proxy.d.ts +2 -2
  69. package/dist/native/proxy.js +4 -4
  70. package/dist/native/proxy.js.map +1 -1
  71. package/dist/routes/assets.js +29 -51
  72. package/dist/routes/assets.js.map +1 -1
  73. package/dist/routes/auth.js +3 -3
  74. package/dist/routes/auth.js.map +1 -1
  75. package/dist/routes/channels.js +5 -11
  76. package/dist/routes/channels.js.map +1 -1
  77. package/dist/routes/components.d.ts +0 -8
  78. package/dist/routes/components.js +0 -19
  79. package/dist/routes/components.js.map +1 -1
  80. package/dist/routes/config/channels/index.d.ts +1 -1
  81. package/dist/routes/config/channels/index.js +1 -1
  82. package/dist/routes/config/channels/index.js.map +1 -1
  83. package/dist/routes/config/channels/routes.js +748 -420
  84. package/dist/routes/config/channels/routes.js.map +1 -1
  85. package/dist/routes/config/channels/table.d.ts +21 -6
  86. package/dist/routes/config/channels/table.js +456 -193
  87. package/dist/routes/config/channels/table.js.map +1 -1
  88. package/dist/routes/config/index.d.ts +2 -2
  89. package/dist/routes/config/index.js +3 -3
  90. package/dist/routes/config/index.js.map +1 -1
  91. package/dist/routes/config/{providers.js → services.js} +47 -42
  92. package/dist/routes/config/services.js.map +1 -0
  93. package/dist/routes/config/settings.js +88 -49
  94. package/dist/routes/config/settings.js.map +1 -1
  95. package/dist/routes/debug.js +5 -7
  96. package/dist/routes/debug.js.map +1 -1
  97. package/dist/routes/health.js +1 -1
  98. package/dist/routes/health.js.map +1 -1
  99. package/dist/routes/icons.d.ts +16 -0
  100. package/dist/routes/icons.js +44 -0
  101. package/dist/routes/icons.js.map +1 -0
  102. package/dist/routes/index.js +2 -2
  103. package/dist/routes/index.js.map +1 -1
  104. package/dist/routes/logs.js +4 -4
  105. package/dist/routes/logs.js.map +1 -1
  106. package/dist/routes/playlist.d.ts +6 -4
  107. package/dist/routes/playlist.js +98 -45
  108. package/dist/routes/playlist.js.map +1 -1
  109. package/dist/routes/root/content.js +94 -55
  110. package/dist/routes/root/content.js.map +1 -1
  111. package/dist/routes/root/scripts/channels.js +620 -478
  112. package/dist/routes/root/scripts/channels.js.map +1 -1
  113. package/dist/routes/root/scripts/config.js +884 -964
  114. package/dist/routes/root/scripts/config.js.map +1 -1
  115. package/dist/routes/root/scripts/shared.js +468 -188
  116. package/dist/routes/root/scripts/shared.js.map +1 -1
  117. package/dist/routes/root/scripts/status.js +252 -207
  118. package/dist/routes/root/scripts/status.js.map +1 -1
  119. package/dist/routes/root/styles.js +57 -8
  120. package/dist/routes/root/styles.js.map +1 -1
  121. package/dist/routes/services.d.ts +6 -0
  122. package/dist/routes/{providers.js → services.js} +43 -43
  123. package/dist/routes/services.js.map +1 -0
  124. package/dist/routes/ui.d.ts +1 -1
  125. package/dist/routes/ui.js +3 -1
  126. package/dist/routes/ui.js.map +1 -1
  127. package/dist/service/commands.js +8 -43
  128. package/dist/service/commands.js.map +1 -1
  129. package/dist/service/generators.d.ts +1 -1
  130. package/dist/service/generators.js +143 -41
  131. package/dist/service/generators.js.map +1 -1
  132. package/dist/streaming/codec.d.ts +20 -0
  133. package/dist/streaming/codec.js +68 -0
  134. package/dist/streaming/codec.js.map +1 -0
  135. package/dist/streaming/fmp4Segmenter.d.ts +2 -2
  136. package/dist/streaming/fmp4Segmenter.js.map +1 -1
  137. package/dist/streaming/hls.d.ts +4 -4
  138. package/dist/streaming/hls.js +35 -29
  139. package/dist/streaming/hls.js.map +1 -1
  140. package/dist/streaming/hlsResume.js +3 -3
  141. package/dist/streaming/hlsResume.js.map +1 -1
  142. package/dist/streaming/monitor.d.ts +2 -2
  143. package/dist/streaming/monitor.js +19 -13
  144. package/dist/streaming/monitor.js.map +1 -1
  145. package/dist/streaming/preroll.d.ts +15 -14
  146. package/dist/streaming/preroll.js +32 -12
  147. package/dist/streaming/preroll.js.map +1 -1
  148. package/dist/streaming/registry.d.ts +2 -2
  149. package/dist/streaming/registry.js +4 -8
  150. package/dist/streaming/registry.js.map +1 -1
  151. package/dist/streaming/setup.d.ts +4 -4
  152. package/dist/streaming/setup.js +28 -34
  153. package/dist/streaming/setup.js.map +1 -1
  154. package/dist/streaming/showInfo.js +8 -10
  155. package/dist/streaming/showInfo.js.map +1 -1
  156. package/dist/streaming/statusEmitter.d.ts +4 -3
  157. package/dist/streaming/statusEmitter.js +3 -3
  158. package/dist/streaming/statusEmitter.js.map +1 -1
  159. package/dist/types/channels.d.ts +18 -11
  160. package/dist/types/config.d.ts +3 -2
  161. package/dist/types/index.d.ts +4 -3
  162. package/dist/types/index.js +1 -0
  163. package/dist/types/index.js.map +1 -1
  164. package/dist/types/profiles.d.ts +9 -9
  165. package/dist/types/selection.d.ts +1 -1
  166. package/dist/types/shared.d.ts +1 -1
  167. package/dist/types/streaming.d.ts +8 -16
  168. package/dist/types/streaming.js +5 -1
  169. package/dist/types/streaming.js.map +1 -1
  170. package/dist/upgrade/commands.js +1 -16
  171. package/dist/upgrade/commands.js.map +1 -1
  172. package/dist/utils/chromeFetch.js +1 -1
  173. package/dist/utils/cliOutput.d.ts +10 -0
  174. package/dist/utils/cliOutput.js +17 -0
  175. package/dist/utils/cliOutput.js.map +1 -0
  176. package/dist/utils/debugFilter.js +3 -3
  177. package/dist/utils/debugFilter.js.map +1 -1
  178. package/dist/utils/fileLogger.js +4 -3
  179. package/dist/utils/fileLogger.js.map +1 -1
  180. package/dist/utils/format.d.ts +21 -4
  181. package/dist/utils/format.js +45 -7
  182. package/dist/utils/format.js.map +1 -1
  183. package/dist/utils/index.d.ts +1 -0
  184. package/dist/utils/index.js +1 -0
  185. package/dist/utils/index.js.map +1 -1
  186. package/dist/utils/logger.js +17 -27
  187. package/dist/utils/logger.js.map +1 -1
  188. package/dist/utils/morganStream.js +2 -2
  189. package/dist/utils/morganStream.js.map +1 -1
  190. package/dist/utils/platform.js +3 -2
  191. package/dist/utils/platform.js.map +1 -1
  192. package/dist/utils/retry.js +2 -4
  193. package/dist/utils/retry.js.map +1 -1
  194. package/dist/utils/streamContext.d.ts +7 -0
  195. package/dist/utils/streamContext.js +10 -1
  196. package/dist/utils/streamContext.js.map +1 -1
  197. package/dist/utils/version.js +4 -4
  198. package/dist/utils/version.js.map +1 -1
  199. package/package.json +5 -7
  200. package/dist/config/providerPacks.d.ts +0 -46
  201. package/dist/config/providerPacks.js.map +0 -1
  202. package/dist/config/providers.d.ts +0 -175
  203. package/dist/config/providers.js +0 -678
  204. package/dist/config/providers.js.map +0 -1
  205. package/dist/routes/config/providers.js.map +0 -1
  206. package/dist/routes/providers.d.ts +0 -6
  207. package/dist/routes/providers.js.map +0 -1
  208. /package/dist/routes/config/{providers.d.ts → services.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/routes/root/scripts/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/routes/root/scripts/status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,oBAAoB;IAElC,OAAO;QACL,UAAU;QACV,+BAA+B;QAC/B,sBAAsB;QACtB,wBAAwB;QACxB,6BAA6B;QAC7B,4IAA4I;QAC5I,qEAAqE;QAErE,+HAA+H;QAC/H,6DAA6D;QAE7D,sJAAsJ;QACtJ,gHAAgH;QAEhH,uJAAuJ;QACvJ,wJAAwJ;QACxJ,+HAA+H;YAC/H,mFAAmF;QAEnF,4CAA4C;QAC5C,oCAAoC;QACpC,0CAA0C;QAC1C,qFAAqF;QACrF,yCAAyC;QACzC,gDAAgD;QAChD,8BAA8B;QAC9B,GAAG;QAEH,yCAAyC;QACzC,+BAA+B;QAC/B,iCAAiC;QACjC,yCAAyC;QACzC,iEAAiE;QACjE,gDAAgD;QAChD,GAAG;QAEH,gFAAgF;QAChF,kCAAkC;QAClC,qCAAqC;QACrC,2BAA2B;QAC3B,gCAAgC;QAChC,sCAAsC;QACtC,2CAA2C;QAC3C,uBAAuB;QACvB,+BAA+B;QAC/B,iFAAiF;QACjF,oDAAoD;QACpD,0GAA0G;QAC1G,gFAAgF;QAChF,KAAK;QACL,mBAAmB;QACnB,GAAG;QAEH,qIAAqI;QACrI,2BAA2B;QAC3B,kCAAkC;QAClC,2BAA2B;QAC3B,6CAA6C;QAC7C,4EAA4E;QAC5E,GAAG;QAEH,0JAA0J;QAC1J,+HAA+H;QAC/H,iEAAiE;QACjE,sCAAsC;QACtC,mBAAmB;QACnB,yCAAyC;QACzC,uCAAuC;QACvC,wCAAwC;QACxC,qEAAqE;QACrE,KAAK;QACL,GAAG;QAEH,gJAAgJ;QAChJ,0GAA0G;QAE1G,oEAAoE;QACpE,0CAA0C;QAC1C,2GAA2G;QAC3G,oIAAoI;QACpI,2EAA2E;QAC3E,GAAG;QAEH,oIAAoI;QACpI,iCAAiC;QACjC,2BAA2B;QAC3B,8DAA8D;QAC9D,6DAA6D;QAC7D,sCAAsC;QACtC,+GAA+G;QAC/G,YAAY;QACZ,6HAA6H;QAC7H,KAAK;QACL,6CAA6C;QAC7C,2CAA2C;QAC3C,sBAAsB;QACtB,yCAAyC;QACzC,6CAA6C;QAC7C,qEAAqE;QACrE,mDAAmD;QACnD,YAAY;QACZ,+DAA+D;QAC/D,0CAA0C;QAC1C,KAAK;QACL,GAAG;QAEH,8GAA8G;QAC9G,4CAA4C;QAC5C,kBAAkB;QAClB,2BAA2B;QAC3B,+CAA+C;QAC/C,qEAAqE;QACrE,kEAAkE;QAClE,6EAA6E;QAC7E,0GAA0G;QAC1G,4GAA4G;QAC5G,mDAAmD;QACnD,0FAA0F;QAC1F,mGAAmG;QACnG,mCAAmC;QACnC,2FAA2F;QAC3F,uBAAuB;QACvB,KAAK;QACL,0BAA0B;QAC1B,GAAG;QAEH,+GAA+G;QAC/G,kCAAkC;QAClC,gEAAgE;QAChE,yDAAyD;QACzD,wCAAwC;QACxC,0BAA0B;QAC1B,oCAAoC;QACpC,aAAa;QACb,KAAK;QACL,oCAAoC;QACpC,GAAG;QAEH,4CAA4C;QAC5C,sCAAsC;QACtC,wCAAwC;QACxC,gCAAgC;QAChC,gEAAgE;QAChE,qBAAqB;QACrB,mDAAmD;QACnD,sBAAsB;QACtB,iBAAiB;QACjB,sCAAsC;QACtC,iCAAiC;QACjC,KAAK;QACL,IAAI;QAEJ,iCAAiC;QACjC,+BAA+B;QAC/B,+DAA+D;QAC/D,0FAA0F;QAC1F,wEAAwE;QACxE,+EAA+E;QAC/E,kDAAkD;QAClD,GAAG;QAEH,yCAAyC;QACzC,kCAAkC;QAClC,wCAAwC;QACxC,0CAA0C;QAC1C,wCAAwC;QACxC,qEAAqE;QACrE,mGAAmG;QACnG,eAAe;QACf,GAAG;QAEH,mDAAmD;QACnD,6BAA6B;QAC7B,8CAA8C;QAC9C,qBAAqB;QACrB,+BAA+B;QAC/B,uEAAuE;QACvE,KAAK;QACL,4BAA4B;QAC5B,GAAG;QAEH,2JAA2J;QAC3J,0JAA0J;QAC1J,iCAAiC;QACjC,mCAAmC;QAEnC,kCAAkC;QAClC,6BAA6B;QAC7B,gCAAgC;QAChC,yFAAyF;QACzF,KAAK;QACL,GAAG;QAEH,oCAAoC;QACpC,+BAA+B;QAC/B,kCAAkC;QAClC,4FAA4F;QAC5F,KAAK;QACL,GAAG;QAEH,2JAA2J;QAC3J,0JAA0J;QAE1J,oDAAoD;QACpD,uCAAuC;QACvC,6BAA6B;QAC7B,2BAA2B;QAC3B,mFAAmF;QACnF,qHAAqH;QACrH,KAAK;QACL,yEAAyE;QACzE,GAAG;QAEH,gEAAgE;QAChE,iCAAiC;QACjC,gHAAgH;QAChH,gEAAgE;QAChE,8EAA8E;QAC9E,2BAA2B;QAC3B,sCAAsC;QACtC,wBAAwB;QACxB,mGAAmG;QACnG,8BAA8B;QAC9B,mDAAmD;QACnD,qEAAqE;QACrE,OAAO;QACP,yEAAyE;QACzE,KAAK;QACL,4FAA4F;QAC5F,GAAG;QAEH,gEAAgE;QAChE,mCAAmC;QACnC,kFAAkF;QAClF,iFAAiF;QACjF,GAAG;QAEH,4BAA4B;QAC5B,iCAAiC;QACjC,2DAA2D;QAC3D,sBAAsB;QACtB,+CAA+C;QAC/C,8BAA8B;QAC9B,gGAAgG;QAChG,aAAa;QACb,KAAK;QACL,kBAAkB;QAClB,qCAAqC;QACrC,6CAA6C;QAC7C,yDAAyD;QACzD,0DAA0D;QAC1D,yEAAyE;QACzE,wGAAwG;QACxG,0JAA0J;QAC1J,2DAA2D;QAC3D,6DAA6D;QAC7D,2BAA2B;QAC3B,wCAAwC;QACxC,yFAAyF;QACzF,wCAAwC;QACxC,oIAAoI;QACpI,OAAO;QACP,0IAA0I;QAC1I,yGAAyG;QACzG,uDAAuD;QACvD,mEAAmE;QACnE,oFAAoF;QACpF,sBAAsB;QACtB,sBAAsB;QACtB,uEAAuE;QACvE,qCAAqC;QACrC,kDAAkD;QAClD,iDAAiD;QACjD,iEAAiE;QACjE,sFAAsF;QACtF,yBAAyB;QACzB,kDAAkD;QAClD,kFAAkF;QAClF,6GAA6G;QAC7G,iHAAiH;QACjH,kHAAkH;QAClH,yBAAyB;QACzB,yBAAyB;QACzB,6BAA6B;QAC7B,OAAO;QACP,KAAK;QACL,2BAA2B;QAC3B,GAAG;QAEH,yJAAyJ;QACzJ,uJAAuJ;QACvJ,sIAAsI;QACtI,+BAA+B;QAC/B,gFAAgF;QAChF,+CAA+C;QAE/C,YAAY;QACZ,oEAAoE;QAEpE,qBAAqB;QACrB,2DAA2D;QAC3D,yEAAyE;QAEzE,kBAAkB;QAClB,uDAAuD;QACvD,6DAA6D;QAE7D,sFAAsF;QACtF,+BAA+B;QAC/B,4FAA4F;QAC5F,qBAAqB;QACrB,kEAAkE;QAClE,iGAAiG;QACjG,wEAAwE;QACxE,wGAAwG;QACxG,oEAAoE;QACpE,uGAAuG;QACvG,kEAAkE;QAClE,iEAAiE;QACjE,sEAAsE;QACtE,uEAAuE;QACvE,OAAO;QACP,KAAK;QACL,GAAG;QAEH,yBAAyB;QACzB,oCAAoC;QACpC,+CAA+C;QAC/C,yBAAyB;QACzB,GAAG;QAEH,kKAAkK;QAClK,sEAAsE;QACtE,8BAA8B;QAC9B,2BAA2B;QAC3B,wDAAwD;QACxD,qFAAqF;QACrF,2DAA2D;QAC3D,uEAAuE;QACvE,KAAK;QACL,4BAA4B;QAC5B,GAAG;QAEH,4IAA4I;QAC5I,uCAAuC;QACvC,sBAAsB;QAEtB,uJAAuJ;QACvJ,8BAA8B;QAC9B,yDAAyD;QACzD,2CAA2C;QAC3C,6CAA6C;QAC7C,2FAA2F;QAC3F,2CAA2C;QAC3C,iFAAiF;QACjF,wCAAwC;QACxC,0DAA0D;QAC1D,GAAG;QACH,uEAAuE;QACvE,qEAAqE;QACrE,wBAAwB;QAExB,+JAA+J;QAC/J,mJAAmJ;QACnJ,gBAAgB;QAChB,4DAA4D;QAC5D,sFAAsF;QACtF,KAAK;QACL,uDAAuD;QACvD,yBAAyB;QACzB,6DAA6D;QAC7D,sEAAsE;QACtE,yEAAyE;QACzE,8FAA8F;QAC9F,GAAG;QACH,gDAAgD;QAChD,sGAAsG;QACtG,kCAAkC;QAClC,6CAA6C;QAC7C,4DAA4D;QAC5D,KAAK;QACL,GAAG;QACH,sCAAsC;QACtC,uEAAuE;QACvE,mFAAmF;QACnF,KAAK;QACL,sEAAsE;QACtE,0CAA0C;QAC1C,KAAK;QACL,GAAG;QAEH,4HAA4H;QAC5H,+BAA+B;QAC/B,wDAAwD;QACxD,2DAA2D;QAC3D,qCAAqC;QAErC,2IAA2I;QAC3I,0IAA0I;QAC1I,qFAAqF;QACrF,iCAAiC;QACjC,wDAAwD;QACxD,yCAAyC;QACzC,mCAAmC;QACnC,SAAS;QACT,KAAK;QACL,oBAAoB;QACpB,2BAA2B;QAC3B,sCAAsC;QACtC,+BAA+B;QAC/B,sBAAsB;QACtB,yCAAyC;QACzC,uCAAuC;QACvC,OAAO;QACP,2BAA2B;QAC3B,2BAA2B;QAC3B,4BAA4B;QAC5B,2DAA2D;QAC3D,OAAO;QACP,8BAA8B;QAC9B,mCAAmC;QACnC,2BAA2B;QAC3B,2BAA2B;QAC3B,4BAA4B;QAC5B,OAAO;QACP,gCAAgC;QAChC,sCAAsC;QACtC,iCAAiC;QACjC,sCAAsC;QACtC,2BAA2B;QAC3B,4BAA4B;QAC5B,2DAA2D;QAC3D,oCAAoC;QACpC,OAAO;QACP,OAAO;QACP,sCAAsC;QACtC,mCAAmC;QACnC,oCAAoC;QACpC,gBAAgB;QAChB,4GAA4G;QAC5G,yGAAyG;QACzG,6BAA6B;QAC7B,8BAA8B;QAC9B,gCAAgC;QAChC,gBAAgB;QAChB,6BAA6B;QAC7B,SAAS;QACT,gCAAgC;QAChC,OAAO;QACP,OAAO;QACP,sCAAsC;QACtC,sCAAsC;QACtC,2BAA2B;QAC3B,OAAO;QACP,gCAAgC;QAChC,uCAAuC;QACvC,yFAAyF;QACzF,yFAAyF;QACzF,OAAO;QAEP,wIAAwI;QACxI,gCAAgC;QAChC,kDAAkD;QAClD,OAAO;QACP,uCAAuC;QACvC,8JAA8J;QAC9J,MAAM;QACN,GAAG;QAEH,0CAA0C;QAC1C,qBAAqB;QACrB,qCAAqC;QAErC,wHAAwH;QACxH,qBAAqB;QACrB,0EAA0E;QAC1E,YAAY;QAEZ,6IAA6I;QAC7I,sGAAsG;QACtG,uDAAuD;QACvD,yBAAyB;QACzB,+BAA+B;QAC/B,0EAA0E;QAC1E,sBAAsB;QACtB,yBAAyB;QACzB,kEAAkE;QAClE,qBAAqB;QACrB,mIAAmI;QACnI,OAAO;QACP,YAAY;QACZ,sBAAsB;QACtB,KAAK;QACL,KAAK;QAEL,qJAAqJ;QACrJ,sFAAsF;QACtF,0CAA0C;QAC1C,mEAAmE;QACnE,0FAA0F;QAC1F,IAAI;QAEJ,6IAA6I;QAC7I,6IAA6I;QAC7I,uIAAuI;QACvI,eAAe;QACf,2DAA2D;QAC3D,8CAA8C;QAC9C,uCAAuC;QACvC,mCAAmC;QACnC,oDAAoD;QACpD,4DAA4D;QAC5D,sBAAsB;QACtB,gFAAgF;QAChF,wBAAwB;QACxB,+CAA+C;QAC/C,8BAA8B;QAC9B,mCAAmC;QACnC,uEAAuE;QACvE,mFAAmF;QACnF,+CAA+C;QAC/C,aAAa;QACb,oDAAoD;QACpD,4DAA4D;QAC5D,sBAAsB;QACtB,uEAAuE;QACvE,8BAA8B;QAC9B,sCAAsC;QACtC,aAAa;QACb,OAAO;QAEP,WAAW;KACZ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -252,9 +252,17 @@ export function generateLandingPageStyles() {
252
252
  // Responsive: hide Key and all optional columns on phones.
253
253
  "@media (max-width: 768px) { .channel-table .col-key, .channel-table td:nth-child(1), .channel-table th:nth-child(1) { display: none; } " +
254
254
  OPTIONAL_COLUMNS.map((col) => ".channel-table ." + col.cssClass).join(", ") + " { display: none; } }",
255
- // User channel row tinting to distinguish custom/override channels from predefined.
255
+ // User-created channel row tinting. Applies only to pure user-created channels (no predefined baseline). Overrides of predefined channels use the
256
+ // .channel-override treatment below instead, matching the settings form's "modified from defaults" visual language.
256
257
  ".channel-table tr.user-channel { background: var(--user-channel-tint); }",
257
258
  ".channel-table tr.user-channel:hover { background: var(--user-channel-tint-hover); }",
259
+ // Predefined channel override indicator. Left-border accent + blue dot on the first cell matches the settings form's .form-group.modified treatment
260
+ // (border + dot = "modified from defaults"). The border targets td:first-child because border-collapse: separate prevents borders on <tr> elements. The
261
+ // dot is a ::before pseudo-element on the same cell so it's always the first visual element in the row, right next to the border. No background tint — the
262
+ // border and dot are the sole differentiators, exactly like modified settings.
263
+ ".channel-table tr.channel-override td:first-child { border-left: 3px solid var(--interactive-primary); }",
264
+ ".channel-table tr.channel-override td:first-child::before { content: ''; display: inline-block; width: 8px; height: 8px; " +
265
+ "background: var(--interactive-primary); border-radius: 50%; margin-right: 6px; vertical-align: middle; }",
258
266
  // Disabled predefined channel row styling and hide-disabled toggle.
259
267
  ".channel-table tr.channel-disabled { opacity: 0.5; }",
260
268
  ".channel-table tr.channel-disabled td { color: var(--text-tertiary); }",
@@ -265,9 +273,52 @@ export function generateLandingPageStyles() {
265
273
  ".channel-table tr.channel-unavailable td { color: var(--text-tertiary); }",
266
274
  ".channel-table tr.channel-unavailable.channel-disabled { opacity: 0.5; }",
267
275
  ".channel-table.hide-disabled tr.channel-unavailable { display: none; }",
276
+ // Tag pills — rounded labels for tag display in the channel table, tag manager modal, and edit form. The pill shape provides clear visual identity and
277
+ // scannability across all surfaces where tags appear.
278
+ ".tag-badge { display: inline-block; padding: 1px 7px; margin: 1px 2px; font-size: 11px; border-radius: 10px; " +
279
+ "background: var(--surface-elevated); border: 1px solid var(--border-default); color: var(--text-secondary); font-weight: 500; }",
280
+ ".tag-badge-deleted { opacity: 0.5; text-decoration: line-through; }",
281
+ // Tag checkbox grid in the channel edit form. Each tag is a pill-styled checkbox label.
282
+ ".tag-checkbox-grid { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }",
283
+ ".tag-checkbox-label { cursor: pointer; display: inline-flex; align-items: center; gap: 3px; }",
284
+ ".tag-checkbox-label input { margin: 0; }",
285
+ ".tag-checkbox-label .tag-badge { cursor: pointer; }",
286
+ // Inline tag edit portal — shared dropdown portaled to <body> via JS. The td has the dropdown class so the document click handler recognizes it as a dropdown
287
+ // context. The display override preserves table-cell layout (the .dropdown class defaults to display: inline-block for div-based dropdowns).
288
+ "td.dropdown { display: table-cell; }",
289
+ ".inline-tag-menu { min-width: 140px; }",
290
+ ".tag-editable { cursor: pointer; }",
291
+ ".tag-editable:hover { background: var(--surface-hover); }",
292
+ ".tag-rename-input { font-size: 11px; padding: 1px 4px; border: 1px solid var(--interactive-primary); border-radius: 10px; " +
293
+ "outline: none; width: 120px; }",
294
+ // Tag manager modal — list of tags with add/delete/restore actions. Hint and error styling use shared wizard classes.
295
+ ".tag-manager-add { display: flex; gap: 8px; margin-bottom: 8px; }",
296
+ ".tag-manager-add input { flex: 1; padding: 4px 8px; font-size: 13px; border: 1px solid var(--form-input-border); border-radius: 4px; }",
297
+ ".tag-manager-list { display: flex; flex-direction: column; gap: 4px; }",
298
+ ".tag-manager-item { display: flex; align-items: center; gap: 8px; padding: 4px 0; }",
299
+ ".tag-manager-item .btn-icon { margin-left: auto; }",
300
+ ".tag-manager-section-label { font-size: 11px; text-transform: uppercase; color: var(--text-tertiary); margin-top: 12px; margin-bottom: 4px; " +
301
+ "letter-spacing: 0.5px; }",
302
+ ".tag-annotation { font-size: 10px; color: var(--text-tertiary); }",
303
+ // Tag column filter. Rows hidden by the tag filter are completely removed from view. This is a transient client-side filter, not a persistent setting.
304
+ ".channel-table tr.tag-filtered { display: none; }",
305
+ // Tag filter dropdown button in the column header. Sized to sit inline with the column label.
306
+ ".btn-tag-filter { padding: 0 3px; margin-left: 4px; vertical-align: middle; opacity: 0.6; }",
307
+ ".btn-tag-filter svg { width: 12px; height: 12px; }",
308
+ ".btn-tag-filter:hover { opacity: 1; }",
309
+ // Playlist hint icon. Appears next to the tag filter funnel when the filter is active, providing the corresponding playlist URL for Channels DVR.
310
+ ".btn-playlist-hint { padding: 0 3px; margin-left: 2px; vertical-align: middle; opacity: 0.6; color: var(--accent); }",
311
+ ".btn-playlist-hint svg { width: 12px; height: 12px; }",
312
+ ".btn-playlist-hint:hover { opacity: 1; }",
313
+ ".playlist-hint-content { padding: 10px 14px; max-width: 420px; }",
314
+ ".playlist-hint-content p { margin: 0 0 8px; font-size: 12px; color: var(--text-secondary); line-height: 1.4; }",
315
+ ".playlist-hint-url { display: flex; align-items: center; gap: 8px; }",
316
+ ".playlist-hint-url code { flex: 1; font-size: 12px; padding: 5px 8px; background: var(--surface-sunken); border: 1px solid var(--border-default); " +
317
+ "border-radius: var(--radius-sm); word-break: break-all; color: var(--text-primary); }",
318
+ // Quick Actions tag section label.
319
+ ".quick-action-section-label { font-size: 11px; text-transform: uppercase; color: var(--text-tertiary); padding: 4px 12px 2px; letter-spacing: 0.5px; }",
268
320
  // Inline editable cells. Cursor and hover indicate clickability. The inline input replaces the cell content during editing.
269
321
  ".editable-cell { cursor: pointer; }",
270
- ".editable-cell:hover { background: var(--surface-hover); }",
271
322
  ".editable-cell input.inline-edit { width: 100%; padding: 2px 4px; font-size: 13px; border: 1px solid var(--interactive-primary); " +
272
323
  "border-radius: 3px; outline: none; background: var(--form-input-bg); color: var(--text-primary); box-sizing: border-box; }",
273
324
  ".no-provider-label { color: var(--text-tertiary); font-size: 12px; }",
@@ -275,7 +326,6 @@ export function generateLandingPageStyles() {
275
326
  // Provider filter toolbar layout.
276
327
  ".provider-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 10px; }",
277
328
  ".provider-toolbar .toolbar-group { display: flex; align-items: center; gap: 6px; }",
278
- ".provider-toolbar .toolbar-label { font-size: 13px; color: var(--text-secondary); white-space: nowrap; }",
279
329
  // Provider dropdown multi-select.
280
330
  ".provider-dropdown-menu { min-width: 200px; max-height: 70vh; overflow-y: auto; }",
281
331
  ".provider-option { display: flex; align-items: center; gap: 6px; padding: 5px 12px; font-size: 13px; cursor: pointer; color: var(--text-primary); }",
@@ -325,15 +375,15 @@ export function generateLandingPageStyles() {
325
375
  // JS tooltip styling. The tooltip element is appended to <body> and positioned via getBoundingClientRect() so it's immune to overflow and stacking contexts.
326
376
  // Only activated when the primary input can't hover (hover: none), targeting iPadOS where Safari doesn't show native title tooltips. On pure-touch
327
377
  // devices without a trackpad, the JS loads but mouseenter never fires so the tooltip stays hidden. Desktop (hover: hover) skips initialization entirely.
328
- ".btn-icon-tooltip { position: fixed; padding: 4px 8px; border-radius: var(--radius-sm); background: var(--surface-overlay); color: var(--text-primary); ",
378
+ ".btn-icon-tooltip { position: absolute; padding: 4px 8px; border-radius: var(--radius-sm); background: var(--surface-overlay); color: var(--text-primary); ",
329
379
  "font-size: 12px; white-space: nowrap; pointer-events: none; opacity: 0; transition: opacity 0.5s; z-index: 10000; ",
330
380
  "box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15); }",
331
381
  ".btn-icon-tooltip.visible { opacity: 1; transition: opacity 0.1s; }",
332
382
  // Channel toolbar with dropdown menus. Each dropdown button has an inline SVG icon + label + chevron.
333
383
  ".channel-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 10px; margin-bottom: 10px; }",
334
384
  ".channel-toolbar .toolbar-group { display: flex; align-items: center; gap: 6px; }",
335
- ".toolbar-dropdown-btn { display: inline-flex; align-items: center; gap: 5px; }",
336
- ".toolbar-dropdown-btn svg { flex-shrink: 0; vertical-align: middle; }",
385
+ ".toolbar-icon-btn { display: inline-flex; align-items: center; gap: 5px; }",
386
+ ".toolbar-icon-btn svg { flex-shrink: 0; vertical-align: middle; }",
337
387
  ".channel-summary { text-align: center; font-size: 12px; color: var(--text-secondary); margin-bottom: 8px; }",
338
388
  // Dropdown menu used by the Import button in the channel toolbar.
339
389
  ".dropdown { position: relative; display: inline-block; }",
@@ -391,7 +441,7 @@ export function generateLandingPageStyles() {
391
441
  // Other landing page styles.
392
442
  ".endpoint code { font-size: 13px; }",
393
443
  // Modified value indicator styling.
394
- ".form-group.modified { border-left: 3px solid var(--interactive-primary); padding-left: 12px; }",
444
+ ".form-group.modified, .form-row.modified { border-left: 3px solid var(--interactive-primary); padding-left: 12px; }",
395
445
  ".modified-dot { display: inline-block; width: 8px; height: 8px; background: var(--interactive-primary); border-radius: 50%; margin-right: 6px; ",
396
446
  "vertical-align: middle; }",
397
447
  // Per-setting reset button styling.
@@ -466,7 +516,6 @@ export function generateLandingPageStyles() {
466
516
  ".btn-copy-inline { background: var(--surface-elevated); border: 1px solid var(--border-default); padding: 2px 8px; font-size: 12px; ",
467
517
  "border-radius: var(--radius-sm); cursor: pointer; color: var(--text-secondary); margin-left: 6px; vertical-align: middle; }",
468
518
  ".btn-copy-inline:hover { background: var(--surface-hover); color: var(--text-primary); }",
469
- ".copy-feedback-inline { color: var(--stream-healthy); font-size: 12px; margin-left: 8px; display: none; }",
470
519
  // Version display styles.
471
520
  ".version-container { display: inline-flex; align-items: center; gap: 6px; }",
472
521
  ".version { font-size: 13px; color: var(--text-muted); font-weight: 400; text-decoration: none; transition: color 0.2s; }",
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/routes/root/styles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/routes/root/styles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Express } from "express";
2
+ /**
3
+ * Creates the service channel discovery endpoint.
4
+ * @param app - The Express application.
5
+ */
6
+ export declare function setupServicesEndpoint(app: Express): void;
@@ -1,12 +1,12 @@
1
1
  import { getChannelListing, getChannelLogo, isPredefinedChannel } from "../config/userChannels.js";
2
- import { getChannelProviderLabel, getProviderGroup, getProviderTagForChannel, getResolvedChannel, isProviderTagEnabled, resolveProviderKey } from "../config/providers.js";
2
+ import { getChannelServiceLabel, getResolvedChannel, getServiceGroup, getServiceTagForChannel, isServiceTagEnabled, resolveServiceKey } from "../config/services.js";
3
3
  import { getCurrentBrowser, minimizeBrowserWindow, registerManagedPage, unregisterManagedPage } from "../browser/index.js";
4
4
  import { getProviderBySlug, normalizeChannelName } from "../browser/channelSelection.js";
5
5
  import { CONFIG } from "../config/index.js";
6
6
  import { LOG } from "../utils/index.js";
7
- /* The providers endpoint exposes channel discovery for each registered provider. A GET request to /providers/:slug/channels creates a temporary browser page,
8
- * navigates to the provider's guide, runs the provider's discoverChannels implementation, and returns a sorted JSON array of discovered channels. The temporary
9
- * 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
7
+ /* The services endpoint exposes channel discovery for each registered service. A GET request to /services/:slug/channels creates a temporary browser page,
8
+ * navigates to the service's guide, runs the service's discoverChannels implementation, and returns a sorted JSON array of discovered channels. The temporary
9
+ * page is always closed in a finally block to prevent resource leaks. Concurrent requests for the same service are coalesced — only one discovery walk runs at a
10
10
  * time, and subsequent requests piggyback on the in-flight result. A refresh=true request aborts any in-flight discovery and starts fresh.
11
11
  */
12
12
  // Sentinel error used to identify aborted discoveries in the retry loop. Distinguishes abort rejections from genuine discovery failures so the loop only retries
@@ -21,7 +21,7 @@ const inflight = new Map();
21
21
  /**
22
22
  * Logs a discovery failure and sends a 500 error response.
23
23
  * @param res - The Express response object.
24
- * @param label - The provider's display label for log messages.
24
+ * @param label - The service's display label for log messages.
25
25
  * @param error - The error that caused the failure.
26
26
  */
27
27
  function sendDiscoveryError(res, label, error) {
@@ -30,7 +30,7 @@ function sendDiscoveryError(res, label, error) {
30
30
  res.status(500).json({ error: "Channel discovery failed: " + message + "." });
31
31
  }
32
32
  /**
33
- * 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
33
+ * Runs service channel discovery in a temporary browser page. Opens a new page, navigates to the service's guide URL, runs the discovery function, and returns
34
34
  * 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,
35
35
  * causing Puppeteer operations to throw and the promise to reject with a DiscoveryAbortError.
36
36
  * @param provider - The provider module to discover channels for.
@@ -59,8 +59,8 @@ async function runDiscovery(provider, signal) {
59
59
  if (signal.aborted) {
60
60
  throw new DiscoveryAbortError();
61
61
  }
62
- // 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).
63
- // 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
+ // Navigate to the service's guide URL unless the provider handles its own navigation (e.g., Hulu and Sling set up response interception before navigating).
63
+ // We use networkidle2 rather than load because SPA-based services (e.g., Hulu) have heavy async initialization that can prevent the load event from firing
64
64
  // reliably. Network idle ensures all initial API data has arrived before the discovery function reads the DOM.
65
65
  if (!provider.handlesOwnNavigation) {
66
66
  await page.goto(provider.guideUrl, { timeout: CONFIG.streaming.navigationTimeout, waitUntil: "networkidle2" });
@@ -94,28 +94,28 @@ async function runDiscovery(provider, signal) {
94
94
  }
95
95
  }
96
96
  /**
97
- * Annotates discovered channels with lineup state by matching each channel's channelSelector against the provider variants for the browsed provider. This
98
- * uses the existing provider group system to find which canonical channel each discovered channel corresponds to, avoiding fragile name-to-key normalization
97
+ * Annotates discovered channels with lineup state by matching each channel's channelSelector against the service variants for the browsed service. This
98
+ * uses the existing service group system to find which canonical channel each discovered channel corresponds to, avoiding fragile name-to-key normalization
99
99
  * (predefined keys are hand-crafted and may not match generateChannelKey output).
100
100
  *
101
- * For each canonical in the listing, we check for a variant matching the browsed provider (via getProviderGroup) and extract its channelSelector via
101
+ * For each canonical in the listing, we check for a variant matching the browsed service (via getServiceGroup) and extract its channelSelector via
102
102
  * getResolvedChannel. This builds a channelSelector → lineup state map that the discovered channels are matched against.
103
103
  *
104
- * @param channels - The raw discovered channels from the provider.
105
- * @param providerSlug - The slug of the provider being browsed (e.g., "spectrum", "hulu").
104
+ * @param channels - The raw discovered channels from the service.
105
+ * @param serviceSlug - The slug of the service being browsed (e.g., "spectrum", "hulu").
106
106
  * @returns Annotated channels with lineup state where applicable.
107
107
  */
108
- function annotateWithLineupState(channels, providerSlug) {
109
- // Build a channelSelector → lineup state mapping for the browsed provider. For each canonical entry in the listing, we find the variant that corresponds
110
- // to this provider (if one exists) and index by that variant's channelSelector. This ensures matching works even when predefined keys don't match the
108
+ function annotateWithLineupState(channels, serviceSlug) {
109
+ // Build a channelSelector → lineup state mapping for the browsed service. For each canonical entry in the listing, we find the variant that corresponds
110
+ // to this service (if one exists) and index by that variant's channelSelector. This ensures matching works even when predefined keys don't match the
111
111
  // normalized channel name (e.g., "axstv" vs generateChannelKey("AXS TV") → "axs-tv").
112
112
  //
113
- // When two canonicals share the same channelSelector for a provider (East/Pacific pairs like "Disney Channel"), the map stores an array of states. The
113
+ // When two canonicals share the same channelSelector for a service (East/Pacific pairs like "Disney Channel"), the map stores an array of states. The
114
114
  // annotation step then uses the discovery entry's stationId to disambiguate which canonical to assign.
115
115
  const listing = getChannelListing();
116
116
  const bySelector = new Map();
117
117
  // Appends a lineup state to the map under the normalized key. Normalization (lowercase, collapsed whitespace) ensures matching is resilient to casing
118
- // differences between predefined channelSelectors and provider discovery output (e.g., "Cartoon Network (East)" vs "cartoon network (east)").
118
+ // differences between predefined channelSelectors and service discovery output (e.g., "Cartoon Network (East)" vs "cartoon network (east)").
119
119
  function indexState(key, state) {
120
120
  const normalized = normalizeChannelName(key);
121
121
  const existing = bySelector.get(normalized);
@@ -128,35 +128,35 @@ function annotateWithLineupState(channels, providerSlug) {
128
128
  }
129
129
  for (const entry of listing) {
130
130
  const canonicalKey = entry.key;
131
- const resolvedKey = resolveProviderKey(canonicalKey);
132
- const currentTag = getProviderTagForChannel(resolvedKey);
133
- const currentProvider = getChannelProviderLabel(entry.channel);
131
+ const resolvedKey = resolveServiceKey(canonicalKey);
132
+ const currentTag = getServiceTagForChannel(resolvedKey);
133
+ const currentService = getChannelServiceLabel(entry.channel);
134
134
  const displayName = entry.channel.name ?? canonicalKey;
135
135
  const source = isPredefinedChannel(canonicalKey) ? "predefined" : "user";
136
- // Check the provider group for variants. Used both for channelSelector matching and for computing hasAlternatives.
137
- const group = getProviderGroup(canonicalKey);
138
- // Determine whether the channel has at least one enabled provider besides the browsed provider. Check the canonical's own tag first, then iterate
139
- // the group's variants. This uses the existing provider tag and filter infrastructure.
140
- const canonicalTag = getProviderTagForChannel(canonicalKey);
141
- let hasAlternatives = (canonicalTag !== providerSlug) && isProviderTagEnabled(canonicalTag);
136
+ // Check the service group for variants. Used both for channelSelector matching and for computing hasAlternatives.
137
+ const group = getServiceGroup(canonicalKey);
138
+ // Determine whether the channel has at least one enabled service besides the browsed service. Check the canonical's own tag first, then iterate
139
+ // the group's variants. This uses the existing service tag and filter infrastructure.
140
+ const canonicalTag = getServiceTagForChannel(canonicalKey);
141
+ let hasAlternatives = (canonicalTag !== serviceSlug) && isServiceTagEnabled(canonicalTag);
142
142
  if (!hasAlternatives && group) {
143
143
  for (const variant of group.variants) {
144
- const variantTag = getProviderTagForChannel(variant.key);
145
- if ((variantTag !== providerSlug) && isProviderTagEnabled(variantTag)) {
144
+ const variantTag = getServiceTagForChannel(variant.key);
145
+ if ((variantTag !== serviceSlug) && isServiceTagEnabled(variantTag)) {
146
146
  hasAlternatives = true;
147
147
  break;
148
148
  }
149
149
  }
150
150
  }
151
151
  const state = {
152
- canonicalKey, currentProvider, currentTag, displayName, enabled: entry.enabled, hasAlternatives,
152
+ canonicalKey, currentService, currentTag, displayName, enabled: entry.enabled, hasAlternatives,
153
153
  logoUrl: getChannelLogo(canonicalKey),
154
154
  source, stationId: entry.channel.stationId
155
155
  };
156
- // Find the variant matching the browsed provider and store by its channelSelector.
156
+ // Find the variant matching the browsed service and store by its channelSelector.
157
157
  if (group) {
158
158
  for (const variant of group.variants) {
159
- if (getProviderTagForChannel(variant.key) === providerSlug) {
159
+ if (getServiceTagForChannel(variant.key) === serviceSlug) {
160
160
  const variantChannel = getResolvedChannel(variant.key);
161
161
  if (variantChannel?.channelSelector) {
162
162
  indexState(variantChannel.channelSelector, state);
@@ -165,8 +165,8 @@ function annotateWithLineupState(channels, providerSlug) {
165
165
  }
166
166
  }
167
167
  }
168
- // Also match the canonical itself if its provider tag matches (single-provider channels or canonicals that point directly to this provider).
169
- if ((currentTag === providerSlug) && entry.channel.channelSelector) {
168
+ // Also match the canonical itself if its service tag matches (single-service channels or canonicals that point directly to this service).
169
+ if ((currentTag === serviceSlug) && entry.channel.channelSelector) {
170
170
  indexState(entry.channel.channelSelector, state);
171
171
  }
172
172
  // Index by display name when it differs from the channelSelector, so discovered channels whose names don't match any predefined channelSelector can still
@@ -176,7 +176,7 @@ function annotateWithLineupState(channels, providerSlug) {
176
176
  indexState(displayName, state);
177
177
  }
178
178
  }
179
- // Annotate each discovered channel by matching its channelSelector against the provider-specific lookup. When the channelSelector doesn't match (e.g.,
179
+ // Annotate each discovered channel by matching its channelSelector against the service-specific lookup. When the channelSelector doesn't match (e.g.,
180
180
  // Xfinity uses callSigns like "ESPND" while predefined variants use display names like "ESPN"), the display name is tried as a fallback. When multiple
181
181
  // canonicals share the same key (East/Pacific pairs), the discovery entry's stationId disambiguates which canonical to assign.
182
182
  return channels.map((ch) => {
@@ -194,18 +194,18 @@ function annotateWithLineupState(channels, providerSlug) {
194
194
  });
195
195
  }
196
196
  /**
197
- * Creates the provider channel discovery endpoint.
197
+ * Creates the service channel discovery endpoint.
198
198
  * @param app - The Express application.
199
199
  */
200
- export function setupProvidersEndpoint(app) {
201
- app.get("/providers/:slug/channels", async (req, res) => {
200
+ export function setupServicesEndpoint(app) {
201
+ app.get("/services/:slug/channels", async (req, res) => {
202
202
  const slug = req.params.slug;
203
203
  const provider = getProviderBySlug(slug);
204
204
  if (!provider) {
205
- res.status(404).json({ error: "Unknown provider: " + slug + "." });
205
+ res.status(404).json({ error: "Unknown service: " + slug + "." });
206
206
  return;
207
207
  }
208
- // When refresh=true is requested, clear the provider's caches (unified channel cache, row caches, fully-enumerated flags, etc.) so the discovery walk runs
208
+ // When refresh=true is requested, clear the service's caches (unified channel cache, row caches, fully-enumerated flags, etc.) so the discovery walk runs
209
209
  // against fresh data. This also resets warm tuning state (watch URLs, GUIDs), but the discovery walk repopulates the unified cache before returning — any
210
210
  // 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
211
211
  // discovery is progressively populating it would corrupt its state.
@@ -219,7 +219,7 @@ export function setupProvidersEndpoint(app) {
219
219
  }
220
220
  provider.strategy.clearCache?.();
221
221
  }
222
- // 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
222
+ // Check for cached discovery results before creating a browser page. When a prior tune or discovery call has already enumerated the service's lineup, the
223
223
  // cache is warm and we can return immediately without any browser interaction. Skipped when refresh=true since we just cleared the caches above.
224
224
  if (!refresh) {
225
225
  const cached = provider.getCachedChannels();
@@ -228,7 +228,7 @@ export function setupProvidersEndpoint(app) {
228
228
  return;
229
229
  }
230
230
  }
231
- // Coalesce concurrent requests. If a discovery is already in flight for this provider, piggyback on the existing promise instead of spawning a redundant
231
+ // Coalesce concurrent requests. If a discovery is already in flight for this service, piggyback on the existing promise instead of spawning a redundant
232
232
  // 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
233
233
  // DiscoveryAbortError and we retry against whatever new entry replaced it in the map.
234
234
  let entry = inflight.get(slug);
@@ -266,4 +266,4 @@ export function setupProvidersEndpoint(app) {
266
266
  }
267
267
  });
268
268
  }
269
- //# sourceMappingURL=providers.js.map
269
+ //# sourceMappingURL=services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/routes/services.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export { generateAlert, generateBadge, generateButton, generateCodeBlock, generatePanelHeader, generateSection, generateSelect, generateSimpleAlert, generateStatusIndicator, generateTextInput } from "./components.js";
1
+ export { generateAlert, generateBadge, generateButton, generatePanelHeader, generateSection, generateSelect, generateSimpleAlert, generateStatusIndicator, generateTextInput } from "./components.js";
2
2
  export type { AlertType, BadgeVariant, ButtonOptions, ButtonSize, ButtonVariant, SelectOption, SelectOptions, TextInputOptions } from "./components.js";
3
3
  /**
4
4
  * Options for configuring the tab script behavior.
package/dist/routes/ui.js CHANGED
@@ -7,7 +7,7 @@ import { generateThemeStyles } from "./theme.js";
7
7
  * configuration page by extracting common CSS and JavaScript patterns. All styles use CSS custom properties from theme.ts for automatic dark mode support.
8
8
  */
9
9
  // Re-export components for convenience.
10
- export { generateAlert, generateBadge, generateButton, generateCodeBlock, generatePanelHeader, generateSection, generateSelect, generateSimpleAlert, generateStatusIndicator, generateTextInput } from "./components.js";
10
+ export { generateAlert, generateBadge, generateButton, generatePanelHeader, generateSection, generateSelect, generateSimpleAlert, generateStatusIndicator, generateTextInput } from "./components.js";
11
11
  /**
12
12
  * Generates the base CSS styles shared across PrismCast pages. These styles provide consistent typography, layout, and basic component styling using CSS custom
13
13
  * properties for theme support.
@@ -120,6 +120,8 @@ export function generateBaseStyles() {
120
120
  ".form-warning { color: var(--status-warning-text); font-size: 12px; margin-top: 5px; padding: 6px 10px; background: var(--status-warning-bg); ",
121
121
  "border-radius: var(--radius-sm); }",
122
122
  ".hint { color: var(--text-secondary); font-size: 12px; margin-top: 1px; margin-bottom: 15px; }",
123
+ ".predefined-hint { padding: 8px 12px; background: var(--bg-offset); border-radius: var(--radius-sm); border-left: 3px solid var(--accent); }",
124
+ ".predefined-hint a { color: var(--accent); }",
123
125
  // Env badge in form labels.
124
126
  ".env-badge { display: inline-block; background: var(--badge-env-bg); color: var(--badge-env-text); padding: 2px 8px; ",
125
127
  "border-radius: var(--radius-sm); font-size: 11px; font-weight: 600; margin-left: 10px; }",
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/routes/ui.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AAEH,wCAAwC;AACxC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EACjJ,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAmBtE;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAEhC,OAAO;QAEL,eAAe;QACf,gJAAgJ;QAChJ,kFAAkF;QAClF,+GAA+G;QAC/G,kFAAkF;QAClF,qFAAqF;QAErF,eAAe;QACf,iEAAiE;QACjE,yCAAyC;QAEzC,eAAe;QACf,yIAAyI;QACzI,mJAAmJ;QACnJ,oCAAoC;QAEpC,gBAAgB;QAChB,mEAAmE;QACnE,2FAA2F;QAC3F,8DAA8D;QAC9D,2DAA2D;QAE3D,iBAAiB;QACjB,4JAA4J;QAC5J,sCAAsC;QACtC,mEAAmE;QAEnE,kBAAkB;QAClB,mCAAmC;QAEnC,sDAAsD;QACtD,iFAAiF;QACjF,yDAAyD;QACzD,oHAAoH;QACpH,oFAAoF;QACpF,4GAA4G;QAC5G,8EAA8E;QAC9E,oHAAoH;QACpH,oFAAoF;QAEpF,iBAAiB;QACjB,gIAAgI;QAChI,sCAAsC;QACtC,sFAAsF;QACtF,sEAAsE;QACtE,0FAA0F;QAC1F,0EAA0E;QAC1E,oFAAoF;QACpF,oEAAoE;QACpE,sFAAsF;QACtF,sEAAsE;QACtE,gFAAgF;QAChF,gEAAgE;QAChE,oFAAoF;QACpF,oEAAoE;QACpE,yCAAyC;QACzC,sEAAsE;QACtE,sDAAsD;QAEtD,gBAAgB;QAChB,yHAAyH;QACzH,2FAA2F;QAC3F,wFAAwF;QACxF,8FAA8F;QAC9F,+EAA+E;QAC/E,kFAAkF;QAElF,2BAA2B;QAC3B,4CAA4C;QAC5C,oCAAoC;QACpC,+DAA+D;QAC/D,mEAAmE;QACnE,qEAAqE;QACrE,+DAA+D;QAC/D,2DAA2D;QAE3D,eAAe;QACf,kHAAkH;QAClH,+DAA+D;QAC/D,uEAAuE;QACvE,kFAAkF;QAClF,4FAA4F;QAC5F,qDAAqD;QAErD,8JAA8J;QAC9J,qCAAqC;QACrC,0IAA0I;QAC1I,iEAAiE;QACjE,iIAAiI;QACjI,mGAAmG;QACnG,sHAAsH;QACtH,0CAA0C;QAE1C,gBAAgB;QAChB,+IAA+I;QAE/I,mBAAmB;QACnB,wIAAwI;QACxI,gEAAgE;QAEhE,gBAAgB;QAChB,yHAAyH;QAEzH,6JAA6J;QAC7J,wGAAwG;QACxG,uDAAuD;QACvD,wDAAwD;QACxD,sDAAsD;QACtD,gEAAgE;QAChE,iEAAiE;QACjE,+DAA+D;QAE/D,wBAAwB;QACxB,gFAAgF;QAChF,uFAAuF;QACvF,+EAA+E;QAC/E,wGAAwG;QACxG,oFAAoF;QACpF,gJAAgJ;QAChJ,oCAAoC;QACpC,gGAAgG;QAEhG,4BAA4B;QAC5B,uHAAuH;QACvH,0FAA0F;QAE1F,cAAc;QACd,2HAA2H;QAC3H,+DAA+D;QAE/D,uBAAuB;QACvB,mJAAmJ;QAEnJ,gBAAgB;QAChB,iIAAiI;QACjI,iDAAiD;QACjD,mCAAmC;QAEnC,yCAAyC;QACzC,wIAAwI;QACxI,kIAAkI;QAClI,oDAAoD;QACpD,4DAA4D;QAC5D,qHAAqH;QACrH,yEAAyE;QACzE,mFAAmF;QACnF,uGAAuG;QACvG,kIAAkI;QAClI,+CAA+C;QAC/C,+DAA+D;QAE/D,6CAA6C;QAC7C,4CAA4C;QAC5C,oDAAoD;QACpD,gJAAgJ;QAChJ,2FAA2F;KAC5F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAE/B,OAAO;QAEL,qBAAqB;QACrB,sHAAsH;QAEtH,eAAe;QACf,sJAAsJ;QACtJ,6GAA6G;QAC7G,mFAAmF;QACnF,0HAA0H;QAC1H,kDAAkD;QAClD,iDAAiD;QACjD,wDAAwD;QAExD,cAAc;QACd,0JAA0J;QAC1J,oCAAoC;QACpC,uCAAuC;KACxC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAA4B,EAAE;IAE9D,MAAM,EAAE,gBAAgB,EAAE,eAAe,GAAG,eAAe,EAAE,GAAG,OAAO,CAAC;IAExE,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC;QAClC,0EAA0E,GAAG,gBAAgB,CAAC,OAAO,GAAG,8BAA8B,CAAC,CAAC;QACxI,EAAE,CAAC;IAEL,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,CAAC;QAC5C,+CAA+C,GAAG,gBAAgB,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC;QACxF,EAAE,CAAC;IAEL,OAAO;QACL,UAAU;QACV,eAAe;QAEf,sDAAsD;QACtD,0BAA0B;QAC1B,+CAA+C;QAC/C,mDAAmD;QACnD,kCAAkC;QAClC,iEAAiE;QACjE,KAAK;QAEL,yDAAyD;QACzD,6BAA6B;QAC7B,sCAAsC;QACtC,0BAA0B;QAC1B,6DAA6D;QAC7D,4CAA4C;QAC5C,uCAAuC;QACvC,OAAO;QACP,0DAA0D;QAC1D,KAAK;QAEL,0BAA0B;QAC1B,6CAA6C;QAC7C,uDAAuD;QACvD,2DAA2D;QAC3D,mBAAmB;QACnB,4CAA4C;QAC5C,2CAA2C;QAC3C,uDAAuD;QACvD,+CAA+C;QAC/C,gEAAgE;QAChE,0CAA0C;QAC1C,wDAAwD;QACxD,gDAAgD;QAChD,SAAS;QACT,OAAO;QACP,8CAA8C;QAC9C,6CAA6C;QAC7C,kDAAkD;QAClD,4CAA4C;QAC5C,SAAS;QACT,OAAO;QACP,SAAS;QACT,kCAAkC,GAAG,eAAe,GAAG,6BAA6B;QACpF,+BAA+B;QAC/B,iCAAiC;QACjC,mGAAmG;QACnG,qCAAqC;QACrC,OAAO;QACP,kGAAkG;QAClG,KAAK;QAEL,sDAAsD;QACtD,qCAAqC;QAErC,iCAAiC;QACjC,wDAAwD;QACxD,6CAA6C;QAC7C,uDAAuD;QACvD,sDAAsD;QACtD,SAAS;QACT,KAAK;QAEL,gCAAgC;QAChC,oDAAoD;QACpD,gBAAgB;QAChB,sDAAsD;QACtD,6DAA6D;QAC7D,uFAAuF;QACvF,kEAAkE;QAClE,0CAA0C;QAC1C,uEAAuE;QACvE,+DAA+D;QAC/D,4BAA4B;QAC5B,6DAA6D;QAC7D,SAAS;QACT,SAAS;QACT,KAAK;QAEL,0CAA0C;QAC1C,sDAAsD;QACtD,8BAA8B;QAC9B,+BAA+B;QAC/B,kGAAkG;QAClG,qCAAqC;QACrC,mFAAmF;QACnF,0DAA0D;QAC1D,SAAS;QACT,uFAAuF;QACvF,4DAA4D;QAC5D,SAAS;QACT,OAAO;QACP,OAAO;QAEP,wDAAwD;QACxD,6BAA6B;QAC7B,gCAAgC;QAChC,qBAAqB;QACrB,+CAA+C,GAAG,eAAe,GAAG,mBAAmB;QACvF,KAAK;QACL,gGAAgG;QAChG,yCAAyC;QACzC,YAAY;QACZ,gEAAgE;QAChE,qBAAqB;QACrB,+DAA+D;QAC/D,mDAAmD;QACnD,oGAAoG;QACpG,OAAO;QACP,KAAK;QAEL,sGAAsG;QACtG,gFAAgF;QAChF,0FAA0F;QAE1F,OAAO;QACP,WAAW;KACZ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,KAAa,EAAE,QAAiB,EAAE,QAAQ,GAAG,KAAK;IAEpG,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAEvC,OAAO,yCAAyC,GAAG,WAAW,GAAG,UAAU,GAAG,qBAAqB,GAAG,QAAQ;QAC5G,kCAAkC,GAAG,YAAY,GAAG,2BAA2B,GAAG,QAAQ,GAAG,gBAAgB,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,WAAW,CAAC;AAC3J,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,OAAe,EAAE,QAAiB;IAEnF,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9C,OAAO,kBAAkB,GAAG,QAAQ,GAAG,sBAAsB,GAAG,WAAW,GAAG,uBAAuB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC7H,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,MAAc,EAAE,WAAmB,EAAE,OAAO,GAAG,EAAE;IAElG,4EAA4E;IAC5E,MAAM,SAAS,GAAG,CAAE,mBAAmB,EAAE,EAAE,MAAM,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/D,OAAO;QACL,iBAAiB;QACjB,oBAAoB;QACpB,QAAQ;QACR,0BAA0B;QAC1B,4EAA4E;QAC5E,qDAAqD;QACrD,SAAS,GAAG,KAAK,GAAG,UAAU;QAC9B,kEAAkE;QAClE,8EAA8E;QAC9E,sEAAsE;QACtE,SAAS;QACT,SAAS;QACT,UAAU;QACV,SAAS;QACT,QAAQ;QACR,WAAW;QACX,OAAO;QACP,SAAS;QACT,SAAS;KACV,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/routes/ui.ts"],"names":[],"mappings":"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"}
@@ -2,30 +2,16 @@
2
2
  *
3
3
  * commands.ts: Service command handlers for PrismCast CLI.
4
4
  */
5
- import { DEFAULTS, loadUserConfig } from "../config/userConfig.js";
5
+ import { DEFAULTS, readConfig } from "../config/userConfig.js";
6
6
  import { SERVICE_NAME, getNodeExecutablePath, getPlatform, getPrismCastEntryPoint, getServiceFilePath } from "../utils/platform.js";
7
7
  import { collectServiceEnvironment, detectStalePaths, getServiceGenerator, getServicePaths } from "./generators.js";
8
+ import { print, printError } from "../utils/cliOutput.js";
9
+ import { formatDuration } from "../utils/format.js";
8
10
  import { getDataDir } from "../config/paths.js";
9
11
  import path from "node:path";
10
12
  /* These handlers implement the `prismcast service` subcommands for installing, uninstalling, and checking the status of PrismCast as a system service. Each handler
11
13
  * prints its output directly to the console and exits with an appropriate status code.
12
14
  */
13
- /**
14
- * Prints a message to stdout.
15
- * @param message - The message to print.
16
- */
17
- function print(message) {
18
- // eslint-disable-next-line no-console
19
- console.log(message);
20
- }
21
- /**
22
- * Prints an error message to stderr.
23
- * @param message - The error message to print.
24
- */
25
- function printError(message) {
26
- // eslint-disable-next-line no-console
27
- console.error(message);
28
- }
29
15
  /**
30
16
  * Prints a stale path warning block to stderr. Called by handleStatus() when the service file references paths that no longer exist on disk.
31
17
  */
@@ -44,24 +30,6 @@ function printStalePathWarning() {
44
30
  }
45
31
  printError("Run 'prismcast service restart' to update the service file.");
46
32
  }
47
- /**
48
- * Formats a duration in seconds to a human-readable string.
49
- * @param seconds - The duration in seconds.
50
- * @returns Formatted duration (e.g., "45s", "2m 15s", "1h 23m").
51
- */
52
- function formatDuration(seconds) {
53
- if (seconds < 60) {
54
- return String(seconds) + "s";
55
- }
56
- if (seconds < 3600) {
57
- const minutes = Math.floor(seconds / 60);
58
- const secs = seconds % 60;
59
- return secs > 0 ? String(minutes) + "m " + String(secs) + "s" : String(minutes) + "m";
60
- }
61
- const hours = Math.floor(seconds / 3600);
62
- const minutes = Math.floor((seconds % 3600) / 60);
63
- return minutes > 0 ? String(hours) + "h " + String(minutes) + "m" : String(hours) + "h";
64
- }
65
33
  /**
66
34
  * Fetches active stream information from the running server.
67
35
  * @param port - The server port to connect to.
@@ -69,10 +37,7 @@ function formatDuration(seconds) {
69
37
  */
70
38
  async function fetchActiveStreams(port) {
71
39
  try {
72
- const controller = new AbortController();
73
- const timeoutId = setTimeout(() => { controller.abort(); }, 3000);
74
- const response = await fetch("http://127.0.0.1:" + String(port) + "/streams", { signal: controller.signal });
75
- clearTimeout(timeoutId);
40
+ const response = await fetch("http://127.0.0.1:" + String(port) + "/streams", { signal: AbortSignal.timeout(3000) });
76
41
  if (!response.ok) {
77
42
  return null;
78
43
  }
@@ -87,7 +52,7 @@ async function fetchActiveStreams(port) {
87
52
  * @returns The server port.
88
53
  */
89
54
  async function getServerPort() {
90
- const result = await loadUserConfig();
55
+ const result = await readConfig();
91
56
  return result.config.server?.port ?? DEFAULTS.server.port;
92
57
  }
93
58
  /**
@@ -228,8 +193,8 @@ export async function handleUninstall() {
228
193
  * @returns Exit code (0 for success, 1 for error).
229
194
  */
230
195
  async function restartService(generator, action) {
231
- // Compare the paths in the existing service file against the current runtime paths to determine whether regeneration is needed. All supported platforms (launchd,
232
- // systemd, Windows) store paths in their service files, so getServicePaths() only returns null for corrupt or legacy marker files.
196
+ // Compare the paths in the existing service file against the current runtime paths to determine whether regeneration is needed. All supported platforms (launchd
197
+ // plist, systemd unit, Windows batch script) store paths in their service files, so getServicePaths() only returns null for corrupt or unparseable files.
233
198
  const existingPaths = getServicePaths();
234
199
  const currentNodePath = getNodeExecutablePath();
235
200
  const currentEntryPoint = getPrismCastEntryPoint();
@@ -419,7 +384,7 @@ export async function handleStatus() {
419
384
  }
420
385
  }
421
386
  const suffix = stream.showName ? " - " + stream.showName : "";
422
- print(" • " + name + " (" + formatDuration(stream.duration) + ")" + suffix);
387
+ print(" • " + name + " (" + formatDuration(stream.duration, "s") + ")" + suffix);
423
388
  }
424
389
  }
425
390
  }