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":"directv.js","sourceRoot":"","sources":["../../../src/browser/tuning/directv.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import type { ChannelStrategyEntry } from "../../types/index.js";
2
- export declare const foxStrategy: ChannelStrategyEntry;
1
+ import type { ProviderModule } from "../../types/index.js";
2
+ export declare const foxProvider: ProviderModule;
@@ -1,44 +1,71 @@
1
1
  import { CONFIG } from "../../config/index.js";
2
2
  import { evaluateWithAbort } from "../../utils/index.js";
3
3
  import { logAvailableChannels } from "../channelSelection.js";
4
+ // Cached discovery results. Populated by the first discoverFoxChannels call (discovery endpoint). Fox tuning is stateless (no tuning cache exists), so only
5
+ // the discovery endpoint populates this cache. Cleared on browser disconnect via clearFoxCache().
6
+ let cachedDiscoveredChannels = null;
7
+ /**
8
+ * Clears the Fox discovery cache. Called by clearChannelSelectionCaches() in the coordinator when the browser restarts.
9
+ */
10
+ function clearFoxCache() {
11
+ cachedDiscoveredChannels = null;
12
+ }
4
13
  /**
5
14
  * Fox.com grid strategy: finds a channel in the non-virtualized guide grid at fox.com/live/channels by matching the station code (button title attribute) on
6
- * GuideChannelLogo buttons. All ~15 channels are present in the DOM simultaneously once the grid renders dynamically (~4.5s after page load). Clicking the
7
- * logo button is an SPA state transition — the Bitmovin player at the top of the page switches channels without navigation, destroying and recreating its
8
- * video element with a new blob src.
15
+ * GuideChannelLogo buttons, with fallback to internal station codes from data-content-impression-id attributes. All ~15 channels are present in the DOM
16
+ * simultaneously once the grid renders dynamically (~4.5s after page load). Clicking the logo button is an SPA state transition — the Bitmovin player at the
17
+ * top of the page switches channels without navigation, destroying and recreating its video element with a new blob src.
9
18
  *
10
19
  * The selection process:
11
- * 1. Poll via waitForFunction until the target station code's GuideChannelContainer appears (handles progressive grid rendering).
12
- * 2. Scan all channel rows, reading the button title attribute from each GuideChannelLogo element.
13
- * 3. Case-insensitive match against the channelSelector station code (e.g., FOXD2C, FNC, FS1).
20
+ * 1. Poll via waitForFunction until the target appears as either a button title (e.g., FOXD2C, FNC) or an impression ID prefix (local affiliate call sign).
21
+ * 2. Scan all channel rows, checking button title first, then impression ID prefix for fallback matching.
22
+ * 3. Case-insensitive match against the channelSelector.
14
23
  * 4. On match, call logoButton.click() directly via DOM — coordinate-based clicking is not possible because the GuideProgramHero (sticky, z-40) overlays the
15
24
  * guide grid and intercepts all mouse events at the element's coordinates.
16
25
  * @param page - The Puppeteer page object.
17
- * @param profile - The resolved site profile with a non-null channelSelector (station code, e.g., "FOXD2C", "FNC", "FS1").
26
+ * @param profile - The resolved site profile with a non-null channelSelector (station code like "FOXD2C" or a local affiliate call sign).
18
27
  * @returns Result object with success status and optional failure reason.
19
28
  */
20
29
  async function foxGridStrategy(page, profile) {
21
30
  const stationCode = profile.channelSelector;
22
- // Wait for the target station code to appear in the guide grid. The grid loads dynamically after the initial page load and renders progressively the first
23
- // GuideChannelContainer may appear before all ~15 rows are in the DOM. We poll for the specific station code rather than waiting for any container, ensuring the
24
- // target channel's row is actually present before attempting the click.
31
+ // Wait for the target to appear in the guide grid. Checks both button title (primary) and data-content-impression-id prefix (fallback for call-sign-based
32
+ // selectors that target a specific local affiliate by call sign).
25
33
  try {
26
34
  await page.waitForFunction((code) => {
35
+ const codeLower = code.toLowerCase();
27
36
  const containers = document.querySelectorAll("[data-testid=\"GuideChannelContainer\"]");
28
37
  return Array.from(containers).some((c) => {
29
38
  const btn = c.querySelector("[data-testid=\"GuideChannelLogo\"] button");
30
- return (btn?.getAttribute("title") ?? "").toLowerCase() === code.toLowerCase();
39
+ if ((btn?.getAttribute("title") ?? "").toLowerCase() === codeLower) {
40
+ return true;
41
+ }
42
+ // Fallback: check the first data-content-impression-id prefix. The format is "{PREFIX}-program-..." where PREFIX is the internal station code.
43
+ const impressionDiv = c.querySelector("[data-content-impression-id]");
44
+ const impressionId = impressionDiv?.getAttribute("data-content-impression-id") ?? "";
45
+ const prefix = impressionId.split("-program-")[0].toLowerCase();
46
+ return (prefix.length > 0) && (prefix === codeLower);
31
47
  });
32
48
  }, { timeout: CONFIG.streaming.videoTimeout }, stationCode);
33
49
  }
34
50
  catch {
35
- // Best-effort diagnostic: collect all available station codes from the guide grid so the user can see what values are valid for channelSelector.
51
+ // Best-effort diagnostic: collect all available station codes and internal codes from the guide grid.
36
52
  try {
37
53
  const availableChannels = await evaluateWithAbort(page, () => {
38
- return Array.from(document.querySelectorAll("[data-testid=\"GuideChannelLogo\"] button"))
39
- .map((btn) => btn.getAttribute("title") ?? "")
40
- .filter((t) => t.length > 0)
41
- .sort();
54
+ const codes = new Set();
55
+ for (const container of Array.from(document.querySelectorAll("[data-testid=\"GuideChannelContainer\"]"))) {
56
+ const btn = container.querySelector("[data-testid=\"GuideChannelLogo\"] button");
57
+ const title = (btn?.getAttribute("title") ?? "").trim();
58
+ if (title.length > 0) {
59
+ codes.add(title);
60
+ }
61
+ const impressionDiv = container.querySelector("[data-content-impression-id]");
62
+ const impressionId = (impressionDiv?.getAttribute("data-content-impression-id") ?? "");
63
+ const prefix = impressionId.split("-program-")[0].trim();
64
+ if ((prefix.length > 0) && (prefix !== title)) {
65
+ codes.add(prefix);
66
+ }
67
+ }
68
+ return Array.from(codes).sort();
42
69
  }, []);
43
70
  if (availableChannels.length > 0) {
44
71
  logAvailableChannels({
@@ -56,8 +83,10 @@ async function foxGridStrategy(page, profile) {
56
83
  }
57
84
  // Click the channel logo button to tune the player. We use DOM element.click() rather than coordinate-based page.mouse.click() because the GuideProgramHero
58
85
  // section (sticky top-[64px], z-40) overlays the guide grid and intercepts all coordinate-based mouse events. DOM .click() dispatches the event directly to the
59
- // element, bypassing the sticky hero's hit-testing. The logo button click is the SPA state change that tunes the Bitmovin player — it destroys and recreates
60
- // its video element with a new blob src for the selected channel.
86
+ // element, bypassing the sticky hero's hit-testing.
87
+ //
88
+ // Matching order: button title first (handles "FOXD2C", "FNC", etc.), then impression ID prefix (handles local affiliate call signs for specific affiliate
89
+ // selection).
61
90
  const clicked = await evaluateWithAbort(page, (code) => {
62
91
  const codeLower = code.toLowerCase();
63
92
  const containers = document.querySelectorAll("[data-testid=\"GuideChannelContainer\"]");
@@ -66,11 +95,25 @@ async function foxGridStrategy(page, profile) {
66
95
  if (!logoButton) {
67
96
  continue;
68
97
  }
69
- if ((logoButton.getAttribute("title") ?? "").toLowerCase() !== codeLower) {
98
+ // Primary match: button title (e.g., "FOXD2C", "FNC").
99
+ if ((logoButton.getAttribute("title") ?? "").toLowerCase() === codeLower) {
100
+ logoButton.click();
101
+ return true;
102
+ }
103
+ }
104
+ // Fallback pass: match against impression ID prefix for call-sign-based selectors.
105
+ for (const container of Array.from(containers)) {
106
+ const logoButton = container.querySelector("[data-testid=\"GuideChannelLogo\"] button");
107
+ if (!logoButton) {
70
108
  continue;
71
109
  }
72
- logoButton.click();
73
- return true;
110
+ const impressionDiv = container.querySelector("[data-content-impression-id]");
111
+ const impressionId = impressionDiv?.getAttribute("data-content-impression-id") ?? "";
112
+ const prefix = impressionId.split("-program-")[0].toLowerCase();
113
+ if ((prefix.length > 0) && (prefix === codeLower)) {
114
+ logoButton.click();
115
+ return true;
116
+ }
74
117
  }
75
118
  return false;
76
119
  }, [stationCode]);
@@ -79,5 +122,81 @@ async function foxGridStrategy(page, profile) {
79
122
  }
80
123
  return { success: true };
81
124
  }
82
- export const foxStrategy = { execute: foxGridStrategy };
125
+ /**
126
+ * Reads all channel info from the Fox guide grid. For each GuideChannelContainer, extracts the display station code (button title), the internal station code
127
+ * (from the first data-content-impression-id prefix), and whether the channel is locked (lock-icon present on the first program thumbnail).
128
+ * @param page - The Puppeteer page object, expected to be on the Fox live channels page with at least one GuideChannelContainer rendered.
129
+ * @returns Array of channel info objects in DOM order.
130
+ */
131
+ async function readFoxChannels(page) {
132
+ return await evaluateWithAbort(page, () => {
133
+ const results = [];
134
+ for (const container of Array.from(document.querySelectorAll("[data-testid=\"GuideChannelContainer\"]"))) {
135
+ const logoButton = container.querySelector("[data-testid=\"GuideChannelLogo\"] button");
136
+ const stationCode = (logoButton?.getAttribute("title") ?? "").trim();
137
+ if (stationCode.length === 0) {
138
+ continue;
139
+ }
140
+ // Extract the internal station code from the first data-content-impression-id. Format: "{PREFIX}-program-..." where PREFIX is the internal code.
141
+ const impressionDiv = container.querySelector("[data-content-impression-id]");
142
+ const impressionId = (impressionDiv?.getAttribute("data-content-impression-id") ?? "");
143
+ const internalCode = impressionId.split("-program-")[0].trim();
144
+ // Locked channels have a lock-icon SVG overlaid on the first program thumbnail. These require TV provider authentication (add-on tier).
145
+ const locked = container.querySelector("[data-testid=\"lock-icon\"]") !== null;
146
+ results.push({ internalCode: internalCode.length > 0 ? internalCode : stationCode, locked, stationCode });
147
+ }
148
+ return results;
149
+ }, []);
150
+ }
151
+ /**
152
+ * Discovers all channels from the Fox guide grid. Waits for the first grid container to confirm the guide has rendered (the route handler's networkidle2
153
+ * navigation ensures all API data has arrived before this function is called), then reads station codes, internal codes, and lock status from each
154
+ * GuideChannelContainer. For FOXD2C entries (local affiliates), the channelSelector and affiliate are set to the internal call sign to enable precise affiliate
155
+ * selection. For all other channels, the channelSelector and name are the display station code. Locked channels (requiring TV provider authentication) are
156
+ * tagged with tier "addon".
157
+ * @param page - The Puppeteer page object, expected to be on the Fox live channels page.
158
+ * @returns Array of discovered channels with station codes, affiliate tagging, and tier information.
159
+ */
160
+ async function discoverFoxChannels(page) {
161
+ if (cachedDiscoveredChannels) {
162
+ return cachedDiscoveredChannels;
163
+ }
164
+ // Wait for at least one GuideChannelContainer to confirm the guide grid has rendered. The route handler navigates with networkidle2, which ensures all API data
165
+ // has arrived before this function is called — no additional network idle wait is needed here.
166
+ try {
167
+ await page.waitForSelector("[data-testid=\"GuideChannelContainer\"]", { timeout: CONFIG.streaming.videoTimeout });
168
+ }
169
+ catch {
170
+ return [];
171
+ }
172
+ const foxChannels = await readFoxChannels(page);
173
+ // Do not cache empty results — leave null so subsequent calls retry the full walk. Empty results can indicate no TV provider login.
174
+ if (foxChannels.length === 0) {
175
+ return [];
176
+ }
177
+ cachedDiscoveredChannels = foxChannels.map((ch) => {
178
+ const entry = { channelSelector: ch.stationCode, name: ch.stationCode };
179
+ // FOXD2C entries are local affiliates distinguished by their internal call sign. Use the call sign as channelSelector for unambiguous
180
+ // tuning and tag the affiliate field so the relationship is visible in discovery output.
181
+ if (ch.stationCode === "FOXD2C") {
182
+ entry.affiliate = ch.internalCode;
183
+ entry.channelSelector = ch.internalCode;
184
+ }
185
+ if (ch.locked) {
186
+ entry.tier = "addon";
187
+ }
188
+ return entry;
189
+ });
190
+ cachedDiscoveredChannels.sort((a, b) => a.name.localeCompare(b.name));
191
+ return cachedDiscoveredChannels;
192
+ }
193
+ export const foxProvider = {
194
+ discoverChannels: discoverFoxChannels,
195
+ getCachedChannels: () => cachedDiscoveredChannels,
196
+ guideUrl: "https://www.fox.com/live/channels",
197
+ label: "Fox",
198
+ slug: "foxcom",
199
+ strategy: { clearCache: clearFoxCache, execute: foxGridStrategy },
200
+ strategyName: "foxGrid"
201
+ };
83
202
  //# sourceMappingURL=fox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fox.js","sourceRoot":"","sources":["../../../src/browser/tuning/fox.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;;;;;;;;;;;;;;GAeG;AACH,KAAK,UAAU,eAAe,CAAC,IAAU,EAAE,OAAgC;IAEzE,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAE5C,6JAA6J;IAC7J,iKAAiK;IACjK,wEAAwE;IACxE,IAAI,CAAC;QAEH,MAAM,IAAI,CAAC,eAAe,CACxB,CAAC,IAAY,EAAW,EAAE;YAExB,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,yCAAyC,CAAC,CAAC;YAExF,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBAEvC,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,2CAA2C,CAAC,CAAC;gBAEzE,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YACjF,CAAC,CAAC,CAAC;QACL,CAAC,EACD,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,EAC1C,WAAW,CACZ,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QAEP,iJAAiJ;QACjJ,IAAI,CAAC;YAEH,MAAM,iBAAiB,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,GAAa,EAAE;gBAErE,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,2CAA2C,CAAC,CAAC;qBACtF,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;qBAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;qBAC3B,IAAI,EAAE,CAAC;YACZ,CAAC,EAAE,EAAE,CAAC,CAAC;YAEP,IAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAEhC,oBAAoB,CAAC;oBAEnB,iBAAiB;oBACjB,WAAW,EAAE,WAAW;oBACxB,QAAQ,EAAE,mCAAmC;oBAC7C,YAAY,EAAE,KAAK;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YAEP,kCAAkC;QACpC,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,eAAe,GAAG,WAAW,GAAG,mCAAmC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzG,CAAC;IAED,4JAA4J;IAC5J,gKAAgK;IAChK,6JAA6J;IAC7J,kEAAkE;IAClE,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,CAAC,IAAY,EAAW,EAAE;QAEtE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,yCAAyC,CAAC,CAAC;QAExF,KAAI,MAAM,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAE9C,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,CAAC,2CAA2C,CAA0B,CAAC;YAEjH,IAAG,CAAC,UAAU,EAAE,CAAC;gBAEf,SAAS;YACX,CAAC;YAED,IAAG,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,SAAS,EAAE,CAAC;gBAExE,SAAS;YACX,CAAC;YAED,UAAU,CAAC,KAAK,EAAE,CAAC;YAEnB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,IAAG,CAAC,OAAO,EAAE,CAAC;QAEZ,OAAO,EAAE,MAAM,EAAE,eAAe,GAAG,WAAW,GAAG,mCAAmC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzG,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAyB,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"fox.js","sourceRoot":"","sources":["../../../src/browser/tuning/fox.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import type { ChannelStrategyEntry } from "../../types/index.js";
2
- export declare const hboStrategy: ChannelStrategyEntry;
1
+ import type { ProviderModule } from "../../types/index.js";
2
+ export declare const hboProvider: ProviderModule;
@@ -3,46 +3,69 @@ import { CONFIG } from "../../config/index.js";
3
3
  import { logAvailableChannels } from "../channelSelection.js";
4
4
  // Base URL for HBO Max watch page navigation and tab URL construction.
5
5
  const HBO_MAX_BASE_URL = "https://play.hbomax.com";
6
+ // Unified channel cache for HBO Max. Maps lowercased channel names (e.g., "hbo", "hbo hits") to their combined discovery and tuning data. Populated during the
7
+ // first tune (when the strategy reads all channels from the channel rail) or the first discovery call. Both tuning (via resolveHboDirectUrl) and discovery (via
8
+ // getCachedChannels / discoverHboChannels) read from this single cache. Cleared on browser disconnect via clearHboCache().
9
+ const hboChannelCache = new Map();
6
10
  // Module-level cache for the HBO tab page URL discovered from the homepage menu bar. Cleared on browser disconnect (via clearHboCache) and inline when the
7
- // cached URL turns out to be stale (the channel rail is not found at the cached URL).
11
+ // cached URL turns out to be stale (the channel rail is not found at the cached URL). Separate from the channel cache because it's a navigation target, not
12
+ // channel data.
8
13
  let hboTabUrl = null;
9
- // Module-level cache for HBO watch URLs discovered during channel rail scraping. On the first tune to any HBO channel, the strategy performs a bulk scrape of all
10
- // channels from the HBO Channels tile rail, populating this cache with every channel's watch URL keyed by its lowercased name (e.g., "hbo", "hbo 2", "hbo hits").
11
- // Subsequent tunes resolve via resolveHboDirectUrl without loading the tab page. Cleared on browser disconnect via clearHboCache().
12
- const hboWatchUrlCache = new Map();
13
14
  /**
14
15
  * Returns a cached HBO Max watch URL for the given channel selector, or null if no cached URL exists.
15
16
  * @param channelSelector - The channel selector string (e.g., "HBO", "HBO Hits").
16
17
  * @returns The cached watch URL or null.
17
18
  */
18
19
  function resolveHboDirectUrl(channelSelector) {
19
- const url = hboWatchUrlCache.get(channelSelector.toLowerCase()) ?? null;
20
- if (url) {
21
- LOG.debug("tuning:hbo", "HBO cache hit for %s: %s.", channelSelector, url);
20
+ const entry = hboChannelCache.get(channelSelector.toLowerCase());
21
+ if (entry) {
22
+ LOG.debug("tuning:hbo", "HBO cache hit for %s: %s.", channelSelector, entry.watchUrl);
23
+ return entry.watchUrl;
22
24
  }
23
- return url;
25
+ return null;
24
26
  }
25
27
  /**
26
- * Invalidates the cached HBO Max watch URL for the given channel selector. Called when a cached URL fails to produce a working stream.
28
+ * Invalidates the cached HBO Max entry for the given channel selector. Called when a cached URL fails to produce a working stream.
27
29
  * @param channelSelector - The channel selector string to invalidate.
28
30
  */
29
31
  function invalidateHboDirectUrl(channelSelector) {
30
- hboWatchUrlCache.delete(channelSelector.toLowerCase());
32
+ hboChannelCache.delete(channelSelector.toLowerCase());
31
33
  }
32
34
  /**
33
- * Clears the HBO tab URL and watch URL caches. Called by clearChannelSelectionCaches() in the coordinator when the browser restarts.
35
+ * Clears all HBO caches: the unified channel cache and the tab URL. Called by clearChannelSelectionCaches() in the coordinator when the browser restarts, since
36
+ * cached state may be stale in a new browser session.
34
37
  */
35
38
  function clearHboCache() {
39
+ hboChannelCache.clear();
36
40
  hboTabUrl = null;
37
- hboWatchUrlCache.clear();
38
41
  }
39
42
  /**
40
- * Scrapes the HBO tab URL from the homepage menu bar. The HBO brand page is linked via an `a[aria-label="H B O"]` element in the top navigation. The href attribute
43
+ * Derives a DiscoveredChannel array from the unified channel cache. HBO does not create alias entries (resolveHboDirectUrl does exact-match only, no
44
+ * prefix/alternate fallback), so deduplication is not needed — every cache value is unique. Sorts by name before returning.
45
+ * @returns Sorted array of discovered channels.
46
+ */
47
+ function buildHboDiscoveredChannels() {
48
+ return Array.from(hboChannelCache.values()).map((entry) => entry.discovered).sort((a, b) => a.name.localeCompare(b.name));
49
+ }
50
+ /**
51
+ * Populates the unified channel cache from raw channel rail data. For each channel, builds a DiscoveredChannel and pairs it with the full watch URL.
52
+ * Shared by hboGridStrategy (tuning-time population) and discoverHboChannels (discovery endpoint).
53
+ * @param rawChannels - Array of channel names and watch paths from readHboChannelRail().
54
+ */
55
+ function populateHboChannelCache(rawChannels) {
56
+ for (const ch of rawChannels) {
57
+ const watchUrl = HBO_MAX_BASE_URL + ch.watchPath;
58
+ hboChannelCache.set(ch.name.toLowerCase(), { discovered: { channelSelector: ch.name, name: ch.name }, watchUrl });
59
+ LOG.debug("tuning:hbo", "Cached HBO Max watch URL for %s: %s.", ch.name, watchUrl);
60
+ }
61
+ }
62
+ /**
63
+ * Reads the HBO tab URL from the homepage menu bar. The HBO brand page is linked via an `a[aria-label="H B O"]` element in the top navigation. The href attribute
41
64
  * contains a relative path like `/channel/c0d1f27a-...` which we combine with the base URL to form the full page URL.
42
65
  * @param page - The Puppeteer page object, expected to be on the HBO Max homepage.
43
66
  * @returns The full HBO tab page URL, or null if the tab link was not found.
44
67
  */
45
- async function scrapeHboTabUrl(page) {
68
+ async function readHboTabUrl(page) {
46
69
  // Wait for the HBO tab link to appear in the menu bar. The homepage is a single-page application that renders the navigation dynamically after the initial HTML
47
70
  // shell loads. Without this wait, the evaluate call below would run against an incomplete DOM and fail to find the tab link.
48
71
  const HBO_TAB_SELECTOR = "a[aria-label=\"H B O\"]";
@@ -65,13 +88,13 @@ async function scrapeHboTabUrl(page) {
65
88
  return HBO_MAX_BASE_URL + href;
66
89
  }
67
90
  /**
68
- * Scrapes all channels from the HBO Channels tile rail on the HBO tab page. The rail section contains tiles for each live channel, each with a backup text
91
+ * Reads all channels from the HBO Channels tile rail on the HBO tab page. The rail section contains tiles for each live channel, each with a backup text
69
92
  * `<p aria-hidden="true">` element containing the channel name and an `<a>` with href pointing to the watch page. Returns all discovered channels so the caller
70
93
  * can populate the cache in bulk.
71
94
  * @param page - The Puppeteer page object, expected to be on the HBO tab page.
72
95
  * @returns Object with `railFound` indicating whether the rail section was present, and `channels` containing all discovered channel names and watch paths.
73
96
  */
74
- async function scrapeHboChannelRail(page) {
97
+ async function readHboChannelRail(page) {
75
98
  const HBO_RAIL_SELECTOR = "section[data-testid=\"hbo-page-rail-distribution-channels-us_rail\"]";
76
99
  // Wait for the distribution channels rail section to appear. If it doesn't appear, the tab URL may be stale or the page structure changed.
77
100
  try {
@@ -92,7 +115,7 @@ async function scrapeHboChannelRail(page) {
92
115
  catch {
93
116
  return { channels: [], railFound: false };
94
117
  }
95
- // Bulk scrape all channels from the rail. Each tile contains an anchor with the watch URL and a backup text paragraph with the channel name.
118
+ // Read all channels from the rail. Each tile contains an anchor with the watch URL and a backup text paragraph with the channel name.
96
119
  const channels = await evaluateWithAbort(page, (selector) => {
97
120
  const rail = document.querySelector(selector);
98
121
  if (!rail) {
@@ -119,13 +142,13 @@ async function scrapeHboChannelRail(page) {
119
142
  return { channels, railFound: true };
120
143
  }
121
144
  /**
122
- * HBO grid strategy: discovers the HBO channels tab URL from the homepage menu bar, navigates to the tab page, bulk scrapes the live channel rail for all channel
145
+ * HBO grid strategy: discovers the HBO channels tab URL from the homepage menu bar, navigates to the tab page, reads the live channel rail for all channel
123
146
  * watch URLs, and navigates to the target channel's URL. All discovered channels are cached so that subsequent tunes to any HBO channel resolve via resolveDirectUrl
124
147
  * without loading the tab page.
125
148
  *
126
149
  * The strategy handles three navigations per tune:
127
- * 1. Homepage (already loaded by navigateToPage) → scrape menu bar for tab URL (or use cache)
128
- * 2. Tab page → bulk scrape channel rail for all watch URLs
150
+ * 1. Homepage (already loaded by navigateToPage) → read menu bar for tab URL (or use cache)
151
+ * 2. Tab page → read channel rail for all watch URLs
129
152
  * 3. Watch page → video playback begins
130
153
  *
131
154
  * When the cached tab URL is stale (rail section not found), the strategy clears the cache, navigates back to the homepage, rediscovers the tab URL, and retries.
@@ -143,7 +166,7 @@ async function hboGridStrategy(page, profile) {
143
166
  LOG.debug("tuning:hbo", "Using cached HBO tab URL: %s.", hboTabUrl);
144
167
  }
145
168
  else {
146
- const discovered = await scrapeHboTabUrl(page);
169
+ const discovered = await readHboTabUrl(page);
147
170
  if (!discovered) {
148
171
  return { reason: "HBO tab not found in homepage menu bar. HBO Max subscription may not be active.", success: false };
149
172
  }
@@ -156,8 +179,8 @@ async function hboGridStrategy(page, profile) {
156
179
  catch (error) {
157
180
  return { reason: "Failed to navigate to HBO tab page: " + formatError(error) + ".", success: false };
158
181
  }
159
- // Phase 2: Bulk scrape the channel rail for all channel watch URLs.
160
- let railResult = await scrapeHboChannelRail(page);
182
+ // Phase 2: Read the channel rail for all channel watch URLs.
183
+ let railResult = await readHboChannelRail(page);
161
184
  // Fallback: if the rail was not found and we used a cached URL, the cache may be stale. Clear it, navigate back to the homepage, rediscover the tab URL, and retry.
162
185
  if (!railResult.railFound && usedCache) {
163
186
  LOG.debug("tuning:hbo", "HBO channel rail not found at cached URL. Rediscovering tab URL from homepage.");
@@ -168,7 +191,7 @@ async function hboGridStrategy(page, profile) {
168
191
  catch (error) {
169
192
  return { reason: "Failed to navigate back to HBO Max homepage: " + formatError(error) + ".", success: false };
170
193
  }
171
- const rediscovered = await scrapeHboTabUrl(page);
194
+ const rediscovered = await readHboTabUrl(page);
172
195
  if (!rediscovered) {
173
196
  return { reason: "HBO tab not found in homepage menu bar after cache invalidation.", success: false };
174
197
  }
@@ -180,7 +203,7 @@ async function hboGridStrategy(page, profile) {
180
203
  catch (error) {
181
204
  return { reason: "Failed to navigate to rediscovered HBO tab page: " + formatError(error) + ".", success: false };
182
205
  }
183
- railResult = await scrapeHboChannelRail(page);
206
+ railResult = await readHboChannelRail(page);
184
207
  if (!railResult.railFound) {
185
208
  return { reason: "HBO channel rail not found at rediscovered URL. Site structure may have changed.", success: false };
186
209
  }
@@ -188,17 +211,13 @@ async function hboGridStrategy(page, profile) {
188
211
  if (!railResult.railFound) {
189
212
  return { reason: "HBO channel rail not found on tab page.", success: false };
190
213
  }
191
- // Populate the watch URL cache with all discovered channels. This makes every subsequent HBO tune a cache hit via resolveDirectUrl, skipping tab page navigation
192
- // entirely.
193
- for (const ch of railResult.channels) {
194
- const watchUrl = HBO_MAX_BASE_URL + ch.watchPath;
195
- hboWatchUrlCache.set(ch.name.toLowerCase(), watchUrl);
196
- LOG.debug("tuning:hbo", "Cached HBO Max watch URL for %s: %s.", ch.name, watchUrl);
197
- }
214
+ // Populate the unified channel cache with all discovered channels. Always repopulate rather than skipping when the cache has entries, because invalidated
215
+ // entries (deleted by invalidateHboDirectUrl) need to be restored with fresh watch URLs from the rail.
216
+ populateHboChannelCache(railResult.channels);
198
217
  // Look up the target channel from the populated cache.
199
- const watchUrl = hboWatchUrlCache.get(channelName.toLowerCase());
218
+ const watchUrl = resolveHboDirectUrl(channelName);
200
219
  if (!watchUrl) {
201
- // Channel not found. Log available channels from the scraped rail data to help users identify valid channelSelector values.
220
+ // Channel not found. Log available channels from the rail data to help users identify valid channelSelector values.
202
221
  logAvailableChannels({
203
222
  availableChannels: railResult.channels.map((ch) => ch.name).sort(),
204
223
  channelName,
@@ -219,7 +238,7 @@ async function hboGridStrategy(page, profile) {
219
238
  }
220
239
  /**
221
240
  * Async wrapper around resolveHboDirectUrl for the ChannelStrategyEntry.resolveDirectUrl contract. The page parameter is unused because HBO watch URLs are
222
- * resolved purely from the in-memory cache populated during the first channel rail scrape.
241
+ * resolved purely from the in-memory cache populated during the first channel rail read.
223
242
  * @param channelSelector - The channel selector string (e.g., "HBO", "HBO Hits").
224
243
  * @param _page - Unused. Present to satisfy the async resolveDirectUrl signature.
225
244
  * @returns The cached watch URL or null.
@@ -228,10 +247,60 @@ async function hboGridStrategy(page, profile) {
228
247
  async function resolveHboDirectUrlAsync(channelSelector, _page) {
229
248
  return resolveHboDirectUrl(channelSelector);
230
249
  }
231
- export const hboStrategy = {
232
- clearCache: clearHboCache,
233
- execute: hboGridStrategy,
234
- invalidateDirectUrl: invalidateHboDirectUrl,
235
- resolveDirectUrl: resolveHboDirectUrlAsync
250
+ /**
251
+ * Discovers all channels from the HBO Max channel rail. Returns cached results if the unified channel cache is populated from a prior tune or discovery call.
252
+ * Otherwise, extracts the HBO tab URL from the homepage menu bar, navigates to the tab page, reads all channels from the distribution channels rail, and
253
+ * populates the cache (unless empty, to allow retries on transient failures or missing HBO subscription).
254
+ * @param page - The Puppeteer page object, already on the HBO Max homepage (navigated by the route handler).
255
+ * @returns Array of discovered channels.
256
+ */
257
+ async function discoverHboChannels(page) {
258
+ // Return from the unified cache if already populated.
259
+ if (hboChannelCache.size > 0) {
260
+ return buildHboDiscoveredChannels();
261
+ }
262
+ // Discover the HBO tab URL from the homepage menu bar.
263
+ const tabUrl = await readHboTabUrl(page);
264
+ if (!tabUrl) {
265
+ return [];
266
+ }
267
+ // Navigate to the HBO tab page.
268
+ try {
269
+ await page.goto(tabUrl, { timeout: CONFIG.streaming.navigationTimeout, waitUntil: "load" });
270
+ }
271
+ catch {
272
+ return [];
273
+ }
274
+ // Read the channel rail.
275
+ const railResult = await readHboChannelRail(page);
276
+ if (!railResult.railFound || (railResult.channels.length === 0)) {
277
+ return [];
278
+ }
279
+ populateHboChannelCache(railResult.channels);
280
+ return buildHboDiscoveredChannels();
281
+ }
282
+ /**
283
+ * Returns cached discovered channels from the unified channel cache, or null if the cache is empty (no prior tune or discovery call has read the channel rail).
284
+ * @returns Sorted array of discovered channels or null.
285
+ */
286
+ function getHboCachedChannels() {
287
+ if (hboChannelCache.size === 0) {
288
+ return null;
289
+ }
290
+ return buildHboDiscoveredChannels();
291
+ }
292
+ export const hboProvider = {
293
+ discoverChannels: discoverHboChannels,
294
+ getCachedChannels: getHboCachedChannels,
295
+ guideUrl: "https://play.hbomax.com",
296
+ label: "HBO Max",
297
+ slug: "hbomax",
298
+ strategy: {
299
+ clearCache: clearHboCache,
300
+ execute: hboGridStrategy,
301
+ invalidateDirectUrl: invalidateHboDirectUrl,
302
+ resolveDirectUrl: resolveHboDirectUrlAsync
303
+ },
304
+ strategyName: "hboGrid"
236
305
  };
237
306
  //# sourceMappingURL=hbo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hbo.js","sourceRoot":"","sources":["../../../src/browser/tuning/hbo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hbo.js","sourceRoot":"","sources":["../../../src/browser/tuning/hbo.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import type { ChannelStrategyEntry } from "../../types/index.js";
2
- export declare const huluStrategy: ChannelStrategyEntry;
1
+ import type { ProviderModule } from "../../types/index.js";
2
+ export declare const huluProvider: ProviderModule;