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,7 +1,8 @@
1
1
  export type { BrowserConfig, CaptureMode, ChannelsConfig, Config, HdhrConfig, HLSConfig, LoggingConfig, PathsConfig, PlaybackConfig, RecoveryConfig, ServerConfig, StreamingConfig } from "./config.js";
2
- export type { Channel, ChannelDefinition, ChannelDelta, ChannelListingEntry, ChannelMap, ProviderGroup, ProviderVariant, StoredChannel, StoredChannelMap } from "./channels.js";
3
- export type { ChannelSelectionConfig, ChannelSelectionStrategy, DomainConfig, ProfileCategory, ProfileResolutionResult, ProfilesValidationResult, ProviderPack, ResolvedSiteProfile, SiteProfile, UserProfilesFile, UserProfilesLoadResult } from "./profiles.js";
2
+ export type { Channel, ChannelDefinition, ChannelDelta, ChannelListingEntry, ChannelMap, ServiceGroup, ServiceVariant, StoredChannel, StoredChannelMap } from "./channels.js";
3
+ export type { ChannelSelectionConfig, ChannelSelectionStrategy, DomainConfig, ProfileCategory, ProfileResolutionResult, ProfilesValidationResult, ResolvedSiteProfile, ServicePack, SiteProfile, UserProfilesFile, UserProfilesLoadResult } from "./profiles.js";
4
4
  export type { ChannelSelectionProfile, ChannelSelectorResult, ChannelStrategyEntry, ChannelStrategyHandler, ClickTarget, DiscoveredChannel, ProviderModule, TuneResult, UiSize } from "./selection.js";
5
5
  export type { ChannelSortField, Nullable, SortDirection } from "./shared.js";
6
- export type { HealthStatus, StreamInfo, StreamListItem, StreamListResponse, StreamingMode, UrlValidation, UrlValidationResult, VideoSelectorType, VideoState } from "./streaming.js";
6
+ export type { CaptureCodec, HealthStatus, StreamListItem, StreamListResponse, StreamingMode, UrlValidationResult, VideoSelectorType, VideoState } from "./streaming.js";
7
+ export { RECOGNIZED_CODECS } from "./streaming.js";
7
8
  export { isChannelSelectionProfile } from "./selection.js";
@@ -1,2 +1,3 @@
1
+ export { RECOGNIZED_CODECS } from "./streaming.js";
1
2
  export { isChannelSelectionProfile } from "./selection.js";
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -43,7 +43,7 @@ export interface ChannelSelectionConfig {
43
43
  /**
44
44
  * UI category for profile grouping in dropdowns and reference documentation. Profiles are grouped by their fullscreen mechanism and special characteristics.
45
45
  * - "api": Profiles using the JavaScript fullscreen API (including embedded iframe and click-to-play variants).
46
- * - "custom": User-defined profiles created via the profile builder wizard or imported from provider packs.
46
+ * - "custom": User-defined profiles created via the profile builder wizard or imported from service packs.
47
47
  * - "keyboard": Profiles using keyboard shortcuts (typically the 'f' key) for fullscreen.
48
48
  * - "multiChannel": Multi-channel profiles requiring a channel selector for tile or thumbnail-based channel selection.
49
49
  * - "special": Special-purpose profiles like static page capture.
@@ -68,8 +68,8 @@ export interface SiteProfile {
68
68
  hideSelector?: Nullable<string>;
69
69
  lockVolumeProperties?: boolean;
70
70
  needsIframeHandling?: boolean;
71
- noVideo?: boolean;
72
71
  selectReadyVideo?: boolean;
72
+ staticCapture?: boolean;
73
73
  useRequestFullscreen?: boolean;
74
74
  waitForNetworkIdle?: boolean;
75
75
  }
@@ -89,8 +89,8 @@ export interface ResolvedSiteProfile {
89
89
  lockVolumeProperties: boolean;
90
90
  maxContinuousPlayback: Nullable<number>;
91
91
  needsIframeHandling: boolean;
92
- noVideo: boolean;
93
92
  selectReadyVideo: boolean;
93
+ staticCapture: boolean;
94
94
  useRequestFullscreen: boolean;
95
95
  videoTimeout: Nullable<number>;
96
96
  waitForNetworkIdle: boolean;
@@ -104,8 +104,8 @@ export interface ProfileResolutionResult {
104
104
  profileName: string;
105
105
  }
106
106
  /**
107
- * Domain-level configuration associating domain patterns with site profiles and provider display names. Each entry can specify a site profile for behavior
108
- * configuration and/or a provider display name for friendly UI labels. Used by both built-in domain mappings in sites.ts and user-defined mappings in profiles.json.
107
+ * Domain-level configuration associating domain patterns with site profiles and service display names. Each entry can specify a site profile for behavior
108
+ * configuration and/or a service display name for friendly UI labels. Used by both built-in domain mappings in sites.ts and user-defined mappings in profiles.json.
109
109
  */
110
110
  export interface DomainConfig {
111
111
  dismissSelector?: string;
@@ -113,8 +113,8 @@ export interface DomainConfig {
113
113
  loginUrl?: string;
114
114
  maxContinuousPlayback?: number;
115
115
  profile?: string;
116
- provider?: string;
117
- providerTag?: string;
116
+ service?: string;
117
+ serviceTag?: string;
118
118
  videoTimeout?: number;
119
119
  }
120
120
  /**
@@ -134,10 +134,10 @@ export interface UserProfilesLoadResult {
134
134
  profiles: Record<string, SiteProfile>;
135
135
  }
136
136
  /**
137
- * Provider pack distribution format. Bundles a profile, domain mapping(s), and optionally channels for a streaming provider into a single JSON file. On import,
137
+ * Service pack distribution format. Bundles a profile, domain mapping(s), and optionally channels for a streaming service into a single JSON file. On import,
138
138
  * its contents are split and written to profiles.json and channels.json.
139
139
  */
140
- export interface ProviderPack {
140
+ export interface ServicePack {
141
141
  channels?: ChannelMap;
142
142
  domains?: Record<string, DomainConfig>;
143
143
  name: string;
@@ -43,7 +43,7 @@ export interface ChannelStrategyEntry {
43
43
  }
44
44
  /**
45
45
  * Standardized output shape for a channel discovered from a provider's guide. Produced by each provider's discoverChannels implementation and returned as
46
- * a JSON array from the GET /providers/:slug/channels endpoint. Mirrors the shape of channel definitions in channels/index.ts so discovery output can be
46
+ * a JSON array from the GET /services/:slug/channels endpoint. Mirrors the shape of channel definitions in channels/index.ts so discovery output can be
47
47
  * used directly to populate new entries.
48
48
  */
49
49
  export interface DiscoveredChannel {
@@ -3,5 +3,5 @@
3
3
  * @typeParam T - The type that can be nullable.
4
4
  */
5
5
  export type Nullable<T> = T | null;
6
- export type ChannelSortField = "channelNumber" | "channelSelector" | "hdhrEnabled" | "key" | "name" | "profile" | "provider" | "stationId";
6
+ export type ChannelSortField = "channelNumber" | "channelSelector" | "hdhrEnabled" | "key" | "name" | "profile" | "service" | "stationId" | "tags";
7
7
  export type SortDirection = "asc" | "desc";
@@ -1,17 +1,13 @@
1
1
  import type { Nullable } from "./shared.js";
2
- import type { Page } from "puppeteer-core";
3
- import type { RecoveryMetrics } from "../streaming/recovery.js";
4
2
  /**
5
- * Information about an active streaming session. Created when a stream request is received and deleted when the stream ends.
3
+ * All recognized capture codec identifiers. H.264 is the universal baseline; additional codecs require GPU hardware encoding. This array is the single definition
4
+ * from which the CaptureCodec type, MIME type lookup, and config validation all derive.
6
5
  */
7
- export interface StreamInfo {
8
- channelName: Nullable<string>;
9
- id: number;
10
- page: Page;
11
- startTime: Date;
12
- stopMonitor: Nullable<() => RecoveryMetrics>;
13
- url: string;
14
- }
6
+ export declare const RECOGNIZED_CODECS: readonly ["h264", "hevc"];
7
+ /**
8
+ * Video codec identifier for browser capture, derived from RECOGNIZED_CODECS.
9
+ */
10
+ export type CaptureCodec = typeof RECOGNIZED_CODECS[number];
15
11
  /**
16
12
  * Snapshot of a video element's playback state. Collected by the playback health monitor to detect stalls, errors, and other problems.
17
13
  */
@@ -41,11 +37,7 @@ export interface UrlValidationResult {
41
37
  valid: boolean;
42
38
  }
43
39
  /**
44
- * Alias for UrlValidationResult maintained for backward compatibility with existing code.
45
- */
46
- export type UrlValidation = UrlValidationResult;
47
- /**
48
- * Streaming mode for an active stream. "capture" uses Chrome screen capture via puppeteer-stream. "native" intercepts the provider's HLS stream and consumes it
40
+ * Streaming mode for an active stream. "capture" uses Chrome screen capture via puppeteer-stream. "native" intercepts the service's HLS stream and consumes it
49
41
  * directly in Node, bypassing screen capture entirely.
50
42
  */
51
43
  export type StreamingMode = "capture" | "native";
@@ -1,2 +1,6 @@
1
- export {};
1
+ /**
2
+ * All recognized capture codec identifiers. H.264 is the universal baseline; additional codecs require GPU hardware encoding. This array is the single definition
3
+ * from which the CaptureCodec type, MIME type lookup, and config validation all derive.
4
+ */
5
+ export const RECOGNIZED_CODECS = ["h264", "hevc"];
2
6
  //# sourceMappingURL=streaming.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../src/types/streaming.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../src/types/streaming.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAE,MAAM,EAAE,MAAM,CAAW,CAAC"}
@@ -3,28 +3,13 @@
3
3
  * commands.ts: Upgrade command handlers for PrismCast CLI.
4
4
  */
5
5
  import { fetchLatestVersion, getPackageVersion, isVersionLessThan, normalizeVersion } from "../utils/version.js";
6
+ import { print, printError } from "../utils/cliOutput.js";
6
7
  import { detectInstallMethod } from "./detection.js";
7
8
  import { execSync } from "node:child_process";
8
9
  import { isRunningAsService } from "../utils/platform.js";
9
10
  /* These handlers implement the `prismcast upgrade` subcommand for detecting the installation method, checking for updates, and executing the appropriate upgrade
10
11
  * command. The pattern mirrors the service subcommand handlers in service/commands.ts.
11
12
  */
12
- /**
13
- * Prints a message to stdout.
14
- * @param message - The message to print.
15
- */
16
- function print(message) {
17
- // eslint-disable-next-line no-console
18
- console.log(message);
19
- }
20
- /**
21
- * Prints an error message to stderr.
22
- * @param message - The error message to print.
23
- */
24
- function printError(message) {
25
- // eslint-disable-next-line no-console
26
- console.error(message);
27
- }
28
13
  /**
29
14
  * Formats the display name for an installation method.
30
15
  * @param info - The installation info to format.
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/upgrade/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/upgrade/commands.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /* When PrismCast fetches manifests, segments, decryption keys, and other resources from provider CDNs, the requests should appear to originate from the same Chrome
1
+ /* When PrismCast fetches manifests, segments, decryption keys, and other resources from service CDNs, the requests should appear to originate from the same Chrome
2
2
  * browser that is rendering the page. This module stores the Chrome User-Agent string (captured at browser launch) and provides a drop-in fetch() wrapper that
3
3
  * injects it into outgoing requests. The setter/getter pattern avoids a circular dependency between utils/ and browser/ — browser/index.ts calls the setter at
4
4
  * launch and cleanup, while consumer modules import chromeFetch() without importing from browser/.
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Prints a message to stdout. Used by CLI subcommands (service, upgrade) that run before the logger is initialized.
3
+ * @param message - The message to print.
4
+ */
5
+ export declare const print: (message: string) => void;
6
+ /**
7
+ * Prints an error message to stderr. Used by CLI subcommands (service, upgrade) that run before the logger is initialized.
8
+ * @param message - The error message to print.
9
+ */
10
+ export declare const printError: (message: string) => void;
@@ -0,0 +1,17 @@
1
+ /* Copyright(C) 2024-2026, HJD (https://github.com/hjdhjd). All rights reserved.
2
+ *
3
+ * cliOutput.ts: CLI output helpers for PrismCast service and upgrade commands.
4
+ */
5
+ /**
6
+ * Prints a message to stdout. Used by CLI subcommands (service, upgrade) that run before the logger is initialized.
7
+ * @param message - The message to print.
8
+ */
9
+ // eslint-disable-next-line no-console
10
+ export const print = (message) => { console.log(message); };
11
+ /**
12
+ * Prints an error message to stderr. Used by CLI subcommands (service, upgrade) that run before the logger is initialized.
13
+ * @param message - The error message to print.
14
+ */
15
+ // eslint-disable-next-line no-console
16
+ export const printError = (message) => { console.error(message); };
17
+ //# sourceMappingURL=cliOutput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cliOutput.js","sourceRoot":"","sources":["../../src/utils/cliOutput.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,OAAe,EAAQ,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1E;;;GAGG;AACH,sCAAsC;AACtC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAe,EAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -122,16 +122,16 @@ export function getCurrentPattern() {
122
122
  export const DEBUG_CATEGORIES = [
123
123
  { category: "browser:lifecycle", description: "Browser lifecycle: launch, close, stale page cleanup, restart." },
124
124
  { category: "browser:video", description: "Video context, fullscreen, volume locking, playback." },
125
- { category: "config:general", description: "Provider groups, version checking." },
125
+ { category: "config:general", description: "Service groups, version checking." },
126
126
  { category: "native:coordinator", description: "Native streaming decisions: interception result, probe result, capture teardown, proxy start." },
127
127
  { category: "native:decrypt", description: "AES-128 decryption: key fetch, IV source (explicit vs. sequence), segment sizes." },
128
128
  { category: "native:intercept", description: "CDP manifest interception: listener installed, .m3u8 URLs observed, master identified, timeout." },
129
- { category: "native:manifest", description: "Raw variant manifest body from provider — verbose, use for diagnosing DAI/ad stitching issues." },
129
+ { category: "native:manifest", description: "Raw variant manifest body from service — verbose, use for diagnosing DAI/ad stitching issues." },
130
130
  { category: "native:monitor", description: "Native health: segment staleness, error counts, L2/L3 recovery actions, capture fallback." },
131
131
  { category: "native:probe", description: "DRM probe: variant count, bandwidths, encryption classification, key accessibility, cache hit/miss." },
132
132
  { category: "native:proxy", description: "Manifest polling, segment fetch/store, playlist generation, segment rotation, key rotation." },
133
133
  { category: "native:token", description: "Token refresh: expiry parsed, timer scheduled, refresh triggered, manifest acquired." },
134
- { category: "precache", description: "Channel lineup precaching: deferred runs, provider filter skips." },
134
+ { category: "precache", description: "Channel lineup precaching: deferred runs, service filter skips." },
135
135
  { category: "recovery:general", description: "General recovery: browser re-minimize, monitor abort." },
136
136
  { category: "recovery:context", description: "Video context: frame detachment, re-search." },
137
137
  { category: "recovery:nav", description: "Page navigation recovery: new tab detection, URL validation." },
@@ -1 +1 @@
1
- {"version":3,"file":"debugFilter.js","sourceRoot":"","sources":["../../src/utils/debugFilter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"debugFilter.js","sourceRoot":"","sources":["../../src/utils/debugFilter.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import df from "dateformat";
1
+ import { formatTimestamp } from "./format.js";
2
2
  import fs from "node:fs";
3
3
  import { isAnyDebugEnabled } from "./debugFilter.js";
4
4
  import path from "node:path";
@@ -12,7 +12,8 @@ const { promises: fsPromises } = fs;
12
12
  * 1. Asynchronous buffered writes - Logs are collected in a buffer and flushed periodically to avoid blocking the event loop during high-frequency logging.
13
13
  * 2. Periodic size checking - File size is checked every N writes rather than on each write to minimize syscall overhead.
14
14
  * 3. Atomic trim operations - Trimming writes to a temp file then renames, preventing data loss if the process crashes during trim.
15
- * 4. Timestamps - Uses the same format as console-stamp for consistency: yyyy/mm/dd HH:MM:ss.l
15
+ * 4. Timestamps - Uses the format yyyy/mm/dd HH:MM:ss.l. The same format is used by the console method wrappers in app.ts so file and console logs share
16
+ * identical timestamps.
16
17
  */
17
18
  /* The file logger maintains state for the log file path, write buffer, and size tracking. State is initialized when initializeFileLogger() is called during server
18
19
  * startup.
@@ -106,7 +107,7 @@ export function writeLogEntry(level, message, color, categoryTag) {
106
107
  isDisabled = false;
107
108
  }
108
109
  // Format the log entry with timestamp and level. Apply ANSI color if provided.
109
- const timestamp = df(new Date(), "yyyy/mm/dd HH:MM:ss.l");
110
+ const timestamp = formatTimestamp();
110
111
  const levelTag = categoryTag ? [level.toUpperCase(), ":", categoryTag].join("") : level.toUpperCase();
111
112
  const levelPrefix = (level === "info") ? "" : ["[", levelTag, "] "].join("");
112
113
  const colorStart = color ?? "";
@@ -1 +1 @@
1
- {"version":3,"file":"fileLogger.js","sourceRoot":"","sources":["../../src/utils/fileLogger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fileLogger.js","sourceRoot":"","sources":["../../src/utils/fileLogger.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,21 @@
1
1
  /**
2
- * Formats a duration in milliseconds as a human-readable string. The format varies based on duration length:
2
+ * Formats the current date and time as a log timestamp string: `yyyy/mm/dd hh:mm:ss.mmm AM/PM`. Uses 12-hour time with decimalized seconds and AM/PM.
3
+ * Single source of truth for all log timestamp formatting — used by the console wrapper in app.ts, the file logger, and the Morgan HTTP request logger.
4
+ * @returns Formatted timestamp string.
5
+ */
6
+ export declare function formatTimestamp(): string;
7
+ /**
8
+ * Formats a duration as a human-readable string. The format varies based on duration length:
3
9
  * - Less than 60 seconds: "17s"
4
10
  * - Less than 1 hour: "6m 39s"
5
11
  * - 1 hour or more: "1h 23m"
6
- * @param ms - Duration in milliseconds.
12
+ *
13
+ * Zero-value trailing components are omitted (e.g., exactly 2 minutes returns "2m", not "2m 0s").
14
+ * @param value - Duration value.
15
+ * @param unit - The unit of the value: "ms" (default) or "s".
7
16
  * @returns Formatted duration string.
8
17
  */
9
- export declare function formatDuration(ms: number): string;
18
+ export declare function formatDuration(value: number, unit?: "ms" | "s"): string;
10
19
  /**
11
20
  * Formats a Unix millisecond timestamp as a human-readable relative time string (e.g., "2 minutes ago", "3 hours ago", "5 days ago"). Used for health indicator
12
21
  * tooltips where absolute timestamps would be harder to interpret at a glance.
@@ -16,7 +25,7 @@ export declare function formatDuration(ms: number): string;
16
25
  export declare function formatTimeAgo(timestamp: number): string;
17
26
  /**
18
27
  * Extracts a concise domain from a URL by keeping only the last two portions of the hostname (e.g., "watch.foodnetwork.com" becomes "foodnetwork.com",
19
- * "www.hulu.com" becomes "hulu.com"). Used as a standard domain key for DOMAIN_CONFIG lookups and as a display fallback when no provider name is configured.
28
+ * "www.hulu.com" becomes "hulu.com"). Used as a standard domain key for DOMAIN_CONFIG lookups and as a display fallback when no service name is configured.
20
29
  * @param url - The URL to extract the domain from.
21
30
  * @returns The concise domain, or the original URL if parsing fails.
22
31
  */
@@ -27,3 +36,11 @@ export declare function extractDomain(url: string): string;
27
36
  * @returns The string with the first letter capitalized.
28
37
  */
29
38
  export declare function capitalize(str: string): string;
39
+ /**
40
+ * Serializes a value to JSON with all object keys sorted alphabetically at every depth. This ensures consistent, diff-friendly output for all persisted JSON
41
+ * files and exported JSON responses. Array element order is preserved.
42
+ * @param data - The value to serialize.
43
+ * @param indent - Number of spaces for indentation (default: 2). Pass 0 for compact output.
44
+ * @returns The JSON string.
45
+ */
46
+ export declare function stringifySorted(data: unknown, indent?: number): string;
@@ -3,23 +3,46 @@
3
3
  * format.ts: Formatting utilities for PrismCast.
4
4
  */
5
5
  /**
6
- * Formats a duration in milliseconds as a human-readable string. The format varies based on duration length:
6
+ * Formats the current date and time as a log timestamp string: `yyyy/mm/dd hh:mm:ss.mmm AM/PM`. Uses 12-hour time with decimalized seconds and AM/PM.
7
+ * Single source of truth for all log timestamp formatting — used by the console wrapper in app.ts, the file logger, and the Morgan HTTP request logger.
8
+ * @returns Formatted timestamp string.
9
+ */
10
+ export function formatTimestamp() {
11
+ const now = new Date();
12
+ const yyyy = String(now.getFullYear());
13
+ const mm = String(now.getMonth() + 1).padStart(2, "0");
14
+ const dd = String(now.getDate()).padStart(2, "0");
15
+ let hours = now.getHours();
16
+ const ampm = (hours >= 12) ? "PM" : "AM";
17
+ hours = hours % 12;
18
+ hours ||= 12;
19
+ const hh = String(hours).padStart(2, "0");
20
+ const min = String(now.getMinutes()).padStart(2, "0");
21
+ const ss = String(now.getSeconds()).padStart(2, "0");
22
+ const ms = String(now.getMilliseconds()).padStart(3, "0");
23
+ return yyyy + "/" + mm + "/" + dd + " " + hh + ":" + min + ":" + ss + "." + ms + " " + ampm;
24
+ }
25
+ /**
26
+ * Formats a duration as a human-readable string. The format varies based on duration length:
7
27
  * - Less than 60 seconds: "17s"
8
28
  * - Less than 1 hour: "6m 39s"
9
29
  * - 1 hour or more: "1h 23m"
10
- * @param ms - Duration in milliseconds.
30
+ *
31
+ * Zero-value trailing components are omitted (e.g., exactly 2 minutes returns "2m", not "2m 0s").
32
+ * @param value - Duration value.
33
+ * @param unit - The unit of the value: "ms" (default) or "s".
11
34
  * @returns Formatted duration string.
12
35
  */
13
- export function formatDuration(ms) {
14
- const totalSeconds = Math.round(ms / 1000);
36
+ export function formatDuration(value, unit = "ms") {
37
+ const totalSeconds = unit === "ms" ? Math.round(value / 1000) : value;
15
38
  const hours = Math.floor(totalSeconds / 3600);
16
39
  const minutes = Math.floor((totalSeconds % 3600) / 60);
17
40
  const seconds = totalSeconds % 60;
18
41
  if (hours > 0) {
19
- return [String(hours), "h ", String(minutes), "m"].join("");
42
+ return minutes > 0 ? [String(hours), "h ", String(minutes), "m"].join("") : [String(hours), "h"].join("");
20
43
  }
21
44
  if (minutes > 0) {
22
- return [String(minutes), "m ", String(seconds), "s"].join("");
45
+ return seconds > 0 ? [String(minutes), "m ", String(seconds), "s"].join("") : [String(minutes), "m"].join("");
23
46
  }
24
47
  return [String(seconds), "s"].join("");
25
48
  }
@@ -47,7 +70,7 @@ export function formatTimeAgo(timestamp) {
47
70
  }
48
71
  /**
49
72
  * Extracts a concise domain from a URL by keeping only the last two portions of the hostname (e.g., "watch.foodnetwork.com" becomes "foodnetwork.com",
50
- * "www.hulu.com" becomes "hulu.com"). Used as a standard domain key for DOMAIN_CONFIG lookups and as a display fallback when no provider name is configured.
73
+ * "www.hulu.com" becomes "hulu.com"). Used as a standard domain key for DOMAIN_CONFIG lookups and as a display fallback when no service name is configured.
51
74
  * @param url - The URL to extract the domain from.
52
75
  * @returns The concise domain, or the original URL if parsing fails.
53
76
  */
@@ -73,4 +96,19 @@ export function extractDomain(url) {
73
96
  export function capitalize(str) {
74
97
  return str.charAt(0).toUpperCase() + str.slice(1);
75
98
  }
99
+ /**
100
+ * Serializes a value to JSON with all object keys sorted alphabetically at every depth. This ensures consistent, diff-friendly output for all persisted JSON
101
+ * files and exported JSON responses. Array element order is preserved.
102
+ * @param data - The value to serialize.
103
+ * @param indent - Number of spaces for indentation (default: 2). Pass 0 for compact output.
104
+ * @returns The JSON string.
105
+ */
106
+ export function stringifySorted(data, indent = 2) {
107
+ return JSON.stringify(data, (_key, value) => {
108
+ if (value && (typeof value === "object") && !Array.isArray(value)) {
109
+ return Object.fromEntries(Object.entries(value).sort(([a], [b]) => a.localeCompare(b)));
110
+ }
111
+ return value;
112
+ }, indent);
113
+ }
76
114
  //# sourceMappingURL=format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,MAAM,UAAU,eAAe;IAE7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClD,IAAI,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAEzC,KAAK,GAAG,KAAK,GAAG,EAAE,CAAC;IACnB,KAAK,KAAK,EAAE,CAAC;IAEb,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE1D,OAAO,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC;AAC9F,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,OAAmB,IAAI;IAEnE,MAAM,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;IAElC,IAAG,KAAK,GAAG,CAAC,EAAE,CAAC;QAEb,OAAO,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChH,CAAC;IAED,IAAG,OAAO,GAAG,CAAC,EAAE,CAAC;QAEf,OAAO,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpH,CAAC;IAED,OAAO,CAAE,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB;IAE7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;IAE5D,IAAG,OAAO,GAAG,EAAE,EAAE,CAAC;QAEhB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IAEzC,IAAG,OAAO,GAAG,EAAE,EAAE,CAAC;QAEhB,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IAEvC,IAAG,KAAK,GAAG,EAAE,EAAE,CAAC;QAEd,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IAEpC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AAChE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IAEvC,IAAI,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAElC,uHAAuH;QACvH,IAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAEpB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QAEP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IAEpC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,IAAa,EAAE,MAAM,GAAG,CAAC;IAEvD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAY,EAAE,KAAc,EAAE,EAAE;QAE3D,IAAG,KAAK,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAEjE,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,MAAM,CAAC,CAAC;AACb,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from "./chromeFetch.js";
2
+ export * from "./cliOutput.js";
2
3
  export * from "./debugFilter.js";
3
4
  export * from "./delay.js";
4
5
  export * from "./errors.js";
@@ -3,6 +3,7 @@
3
3
  * index.ts: Utility module exports for PrismCast.
4
4
  */
5
5
  export * from "./chromeFetch.js";
6
+ export * from "./cliOutput.js";
6
7
  export * from "./debugFilter.js";
7
8
  export * from "./delay.js";
8
9
  export * from "./errors.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
@@ -2,10 +2,11 @@
2
2
  *
3
3
  * logger.ts: Logging utilities with color-coded output for PrismCast.
4
4
  */
5
+ import { getStreamId, resolveContextShowName } from "./streamContext.js";
5
6
  import { initDebugFilter, isAnyDebugEnabled, isCategoryEnabled } from "./debugFilter.js";
6
7
  import { emitLogEntry } from "./logEmitter.js";
7
- import { format } from "util";
8
- import { getStreamId } from "./streamContext.js";
8
+ import { format } from "node:util";
9
+ import { formatTimestamp } from "./format.js";
9
10
  import { writeLogEntry } from "./fileLogger.js";
10
11
  /* Terminal color codes for log output formatting. Warnings appear in yellow and errors in red, making it easy to spot issues when scanning log output. The reset
11
12
  * code restores the default color after each colored message to prevent color bleeding into subsequent output.
@@ -60,21 +61,6 @@ export function isDebugLogging() {
60
61
  *
61
62
  * For logging outside a stream context (e.g., iterating over streams in a disconnect handler), use LOG.withStreamId() to create a bound logger.
62
63
  */
63
- /**
64
- * Formats the current time as a timestamp string matching the log file format.
65
- * @returns A timestamp string in the format "YYYY/MM/DD HH:MM:ss.lll".
66
- */
67
- function formatTimestamp() {
68
- const now = new Date();
69
- const year = now.getFullYear();
70
- const month = String(now.getMonth() + 1).padStart(2, "0");
71
- const day = String(now.getDate()).padStart(2, "0");
72
- const hours = String(now.getHours()).padStart(2, "0");
73
- const minutes = String(now.getMinutes()).padStart(2, "0");
74
- const seconds = String(now.getSeconds()).padStart(2, "0");
75
- const ms = String(now.getMilliseconds()).padStart(3, "0");
76
- return [year, "/", month, "/", day, " ", hours, ":", minutes, ":", seconds, ".", ms].join("");
77
- }
78
64
  /**
79
65
  * Emits a log entry to SSE subscribers for real-time streaming.
80
66
  * @param level - The log level.
@@ -104,7 +90,17 @@ function emitToSubscribers(level, message, categoryTag) {
104
90
  function logWithLevel(level, color, message, args, explicitStreamId, categoryTag) {
105
91
  const streamId = explicitStreamId ?? getStreamId();
106
92
  const formatted = args.length > 0 ? format(message, ...args) : message;
107
- const logMessage = streamId ? ["[", streamId, "] ", formatted].join("") : formatted;
93
+ // Build the log prefix. Stream ID is always included when available. The show name (resolved lazily from the stream context) is appended when present,
94
+ // giving log readers immediate context for correlating issues with DVR recordings without cross-referencing timestamps against the guide.
95
+ let logMessage;
96
+ if (streamId) {
97
+ const showName = explicitStreamId ? "" : resolveContextShowName();
98
+ const showPrefix = showName ? " [" + showName + "]" : "";
99
+ logMessage = "[" + streamId + "]" + showPrefix + " " + formatted;
100
+ }
101
+ else {
102
+ logMessage = formatted;
103
+ }
108
104
  // Emit to SSE subscribers for real-time streaming.
109
105
  emitToSubscribers(level, logMessage, categoryTag);
110
106
  if (useConsoleLogging) {
@@ -125,17 +121,11 @@ function logWithLevel(level, color, message, args, explicitStreamId, categoryTag
125
121
  }
126
122
  }
127
123
  /* eslint-enable no-console */
128
- if (streamId && color) {
129
- consoleMethod("%s[%s] %s%s", color, streamId, formatted, ANSI_COLORS.reset);
130
- }
131
- else if (streamId) {
132
- consoleMethod("[%s] %s", streamId, formatted);
133
- }
134
- else if (color) {
135
- consoleMethod("%s%s%s", color, formatted, ANSI_COLORS.reset);
124
+ if (color) {
125
+ consoleMethod("%s%s%s", color, logMessage, ANSI_COLORS.reset);
136
126
  }
137
127
  else {
138
- consoleMethod(formatted);
128
+ consoleMethod(logMessage);
139
129
  }
140
130
  }
141
131
  else {