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.
- package/README.md +6 -6
- package/dist/app.js +24 -13
- package/dist/app.js.map +1 -1
- package/dist/browser/cdp.d.ts +4 -6
- package/dist/browser/cdp.js +13 -17
- package/dist/browser/cdp.js.map +1 -1
- package/dist/browser/index.js +3 -3
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/login.js +11 -8
- package/dist/browser/login.js.map +1 -1
- package/dist/browser/precaching.d.ts +1 -1
- package/dist/browser/precaching.js +23 -23
- package/dist/browser/precaching.js.map +1 -1
- package/dist/browser/tuning/directv.js +4 -7
- package/dist/browser/tuning/directv.js.map +1 -1
- package/dist/browser/tuning/fox.js +1 -1
- package/dist/browser/tuning/fox.js.map +1 -1
- package/dist/browser/tuning/hbo.js +1 -1
- package/dist/browser/tuning/hbo.js.map +1 -1
- package/dist/browser/tuning/hulu.js +3 -3
- package/dist/browser/tuning/hulu.js.map +1 -1
- package/dist/browser/tuning/sling.js +2 -2
- package/dist/browser/tuning/sling.js.map +1 -1
- package/dist/channels/index.d.ts +2 -0
- package/dist/channels/index.js +438 -252
- package/dist/channels/index.js.map +1 -1
- package/dist/config/health.d.ts +3 -3
- package/dist/config/health.js +13 -18
- package/dist/config/health.js.map +1 -1
- package/dist/config/index.js +11 -2
- package/dist/config/index.js.map +1 -1
- package/dist/config/persistence.d.ts +59 -0
- package/dist/config/persistence.js +127 -0
- package/dist/config/persistence.js.map +1 -0
- package/dist/config/profiles.js +10 -10
- package/dist/config/profiles.js.map +1 -1
- package/dist/config/servicePacks.d.ts +46 -0
- package/dist/config/{providerPacks.js → servicePacks.js} +28 -31
- package/dist/config/servicePacks.js.map +1 -0
- package/dist/config/services.d.ts +202 -0
- package/dist/config/services.js +758 -0
- package/dist/config/services.js.map +1 -0
- package/dist/config/sites.js +61 -61
- package/dist/config/sites.js.map +1 -1
- package/dist/config/userChannels.d.ts +89 -27
- package/dist/config/userChannels.js +400 -184
- package/dist/config/userChannels.js.map +1 -1
- package/dist/config/userConfig.d.ts +13 -9
- package/dist/config/userConfig.js +78 -60
- package/dist/config/userConfig.js.map +1 -1
- package/dist/config/userProfiles.d.ts +31 -15
- package/dist/config/userProfiles.js +154 -123
- package/dist/config/userProfiles.js.map +1 -1
- package/dist/hdhr/channelMap.d.ts +1 -1
- package/dist/hdhr/channelMap.js +4 -7
- package/dist/hdhr/channelMap.js.map +1 -1
- package/dist/hdhr/discover.js +7 -15
- package/dist/hdhr/discover.js.map +1 -1
- package/dist/hdhr/index.js +6 -9
- package/dist/hdhr/index.js.map +1 -1
- package/dist/native/index.d.ts +2 -2
- package/dist/native/index.js +17 -27
- package/dist/native/index.js.map +1 -1
- package/dist/native/intercept.js +86 -89
- package/dist/native/intercept.js.map +1 -1
- package/dist/native/probe.js +2 -2
- package/dist/native/probe.js.map +1 -1
- package/dist/native/proxy.d.ts +2 -2
- package/dist/native/proxy.js +4 -4
- package/dist/native/proxy.js.map +1 -1
- package/dist/routes/assets.js +29 -51
- package/dist/routes/assets.js.map +1 -1
- package/dist/routes/auth.js +3 -3
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/channels.js +5 -11
- package/dist/routes/channels.js.map +1 -1
- package/dist/routes/components.d.ts +0 -8
- package/dist/routes/components.js +0 -19
- package/dist/routes/components.js.map +1 -1
- package/dist/routes/config/channels/index.d.ts +1 -1
- package/dist/routes/config/channels/index.js +1 -1
- package/dist/routes/config/channels/index.js.map +1 -1
- package/dist/routes/config/channels/routes.js +748 -420
- package/dist/routes/config/channels/routes.js.map +1 -1
- package/dist/routes/config/channels/table.d.ts +21 -6
- package/dist/routes/config/channels/table.js +456 -193
- package/dist/routes/config/channels/table.js.map +1 -1
- package/dist/routes/config/index.d.ts +2 -2
- package/dist/routes/config/index.js +3 -3
- package/dist/routes/config/index.js.map +1 -1
- package/dist/routes/config/{providers.js → services.js} +47 -42
- package/dist/routes/config/services.js.map +1 -0
- package/dist/routes/config/settings.js +88 -49
- package/dist/routes/config/settings.js.map +1 -1
- package/dist/routes/debug.js +5 -7
- package/dist/routes/debug.js.map +1 -1
- package/dist/routes/health.js +1 -1
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/icons.d.ts +16 -0
- package/dist/routes/icons.js +44 -0
- package/dist/routes/icons.js.map +1 -0
- package/dist/routes/index.js +2 -2
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/logs.js +4 -4
- package/dist/routes/logs.js.map +1 -1
- package/dist/routes/playlist.d.ts +6 -4
- package/dist/routes/playlist.js +98 -45
- package/dist/routes/playlist.js.map +1 -1
- package/dist/routes/root/content.js +94 -55
- package/dist/routes/root/content.js.map +1 -1
- package/dist/routes/root/scripts/channels.js +620 -478
- package/dist/routes/root/scripts/channels.js.map +1 -1
- package/dist/routes/root/scripts/config.js +884 -964
- package/dist/routes/root/scripts/config.js.map +1 -1
- package/dist/routes/root/scripts/shared.js +468 -188
- package/dist/routes/root/scripts/shared.js.map +1 -1
- package/dist/routes/root/scripts/status.js +252 -207
- package/dist/routes/root/scripts/status.js.map +1 -1
- package/dist/routes/root/styles.js +57 -8
- package/dist/routes/root/styles.js.map +1 -1
- package/dist/routes/services.d.ts +6 -0
- package/dist/routes/{providers.js → services.js} +43 -43
- package/dist/routes/services.js.map +1 -0
- package/dist/routes/ui.d.ts +1 -1
- package/dist/routes/ui.js +3 -1
- package/dist/routes/ui.js.map +1 -1
- package/dist/service/commands.js +8 -43
- package/dist/service/commands.js.map +1 -1
- package/dist/service/generators.d.ts +1 -1
- package/dist/service/generators.js +143 -41
- package/dist/service/generators.js.map +1 -1
- package/dist/streaming/codec.d.ts +20 -0
- package/dist/streaming/codec.js +68 -0
- package/dist/streaming/codec.js.map +1 -0
- package/dist/streaming/fmp4Segmenter.d.ts +2 -2
- package/dist/streaming/fmp4Segmenter.js.map +1 -1
- package/dist/streaming/hls.d.ts +4 -4
- package/dist/streaming/hls.js +35 -29
- package/dist/streaming/hls.js.map +1 -1
- package/dist/streaming/hlsResume.js +3 -3
- package/dist/streaming/hlsResume.js.map +1 -1
- package/dist/streaming/monitor.d.ts +2 -2
- package/dist/streaming/monitor.js +19 -13
- package/dist/streaming/monitor.js.map +1 -1
- package/dist/streaming/preroll.d.ts +15 -14
- package/dist/streaming/preroll.js +32 -12
- package/dist/streaming/preroll.js.map +1 -1
- package/dist/streaming/registry.d.ts +2 -2
- package/dist/streaming/registry.js +4 -8
- package/dist/streaming/registry.js.map +1 -1
- package/dist/streaming/setup.d.ts +4 -4
- package/dist/streaming/setup.js +28 -34
- package/dist/streaming/setup.js.map +1 -1
- package/dist/streaming/showInfo.js +8 -10
- package/dist/streaming/showInfo.js.map +1 -1
- package/dist/streaming/statusEmitter.d.ts +4 -3
- package/dist/streaming/statusEmitter.js +3 -3
- package/dist/streaming/statusEmitter.js.map +1 -1
- package/dist/types/channels.d.ts +18 -11
- package/dist/types/config.d.ts +3 -2
- package/dist/types/index.d.ts +4 -3
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/profiles.d.ts +9 -9
- package/dist/types/selection.d.ts +1 -1
- package/dist/types/shared.d.ts +1 -1
- package/dist/types/streaming.d.ts +8 -16
- package/dist/types/streaming.js +5 -1
- package/dist/types/streaming.js.map +1 -1
- package/dist/upgrade/commands.js +1 -16
- package/dist/upgrade/commands.js.map +1 -1
- package/dist/utils/chromeFetch.js +1 -1
- package/dist/utils/cliOutput.d.ts +10 -0
- package/dist/utils/cliOutput.js +17 -0
- package/dist/utils/cliOutput.js.map +1 -0
- package/dist/utils/debugFilter.js +3 -3
- package/dist/utils/debugFilter.js.map +1 -1
- package/dist/utils/fileLogger.js +4 -3
- package/dist/utils/fileLogger.js.map +1 -1
- package/dist/utils/format.d.ts +21 -4
- package/dist/utils/format.js +45 -7
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.js +17 -27
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/morganStream.js +2 -2
- package/dist/utils/morganStream.js.map +1 -1
- package/dist/utils/platform.js +3 -2
- package/dist/utils/platform.js.map +1 -1
- package/dist/utils/retry.js +2 -4
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/streamContext.d.ts +7 -0
- package/dist/utils/streamContext.js +10 -1
- package/dist/utils/streamContext.js.map +1 -1
- package/dist/utils/version.js +4 -4
- package/dist/utils/version.js.map +1 -1
- package/package.json +5 -7
- package/dist/config/providerPacks.d.ts +0 -46
- package/dist/config/providerPacks.js.map +0 -1
- package/dist/config/providers.d.ts +0 -175
- package/dist/config/providers.js +0 -678
- package/dist/config/providers.js.map +0 -1
- package/dist/routes/config/providers.js.map +0 -1
- package/dist/routes/providers.d.ts +0 -6
- package/dist/routes/providers.js.map +0 -1
- /package/dist/routes/config/{providers.d.ts → services.d.ts} +0 -0
package/dist/types/index.d.ts
CHANGED
|
@@ -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,
|
|
3
|
-
export type { ChannelSelectionConfig, ChannelSelectionStrategy, DomainConfig, ProfileCategory, ProfileResolutionResult, ProfilesValidationResult,
|
|
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 {
|
|
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";
|
package/dist/types/index.js
CHANGED
package/dist/types/index.js.map
CHANGED
|
@@ -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"}
|
package/dist/types/profiles.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
108
|
-
* configuration and/or a
|
|
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
|
-
|
|
117
|
-
|
|
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
|
-
*
|
|
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
|
|
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 /
|
|
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 {
|
package/dist/types/shared.d.ts
CHANGED
|
@@ -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" | "
|
|
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
|
-
*
|
|
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
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
*
|
|
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";
|
package/dist/types/streaming.js
CHANGED
|
@@ -1,2 +1,6 @@
|
|
|
1
|
-
|
|
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"}
|
package/dist/upgrade/commands.js
CHANGED
|
@@ -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":"AAAA;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
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
|
|
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: "
|
|
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
|
|
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,
|
|
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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"}
|
package/dist/utils/fileLogger.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
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
|
|
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 =
|
|
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":"AAKA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"fileLogger.js","sourceRoot":"","sources":["../../src/utils/fileLogger.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/format.d.ts
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Formats
|
|
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
|
-
*
|
|
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(
|
|
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
|
|
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;
|
package/dist/utils/format.js
CHANGED
|
@@ -3,23 +3,46 @@
|
|
|
3
3
|
* format.ts: Formatting utilities for PrismCast.
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
|
-
* Formats
|
|
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
|
-
*
|
|
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(
|
|
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
|
|
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
|
package/dist/utils/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.d.ts
CHANGED
package/dist/utils/index.js
CHANGED
package/dist/utils/index.js.map
CHANGED
|
@@ -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"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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 (
|
|
129
|
-
consoleMethod("%s
|
|
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(
|
|
128
|
+
consoleMethod(logMessage);
|
|
139
129
|
}
|
|
140
130
|
}
|
|
141
131
|
else {
|