@bnhf/prismcast 1.3.4-2026.2.19
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/LICENSE.md +7 -0
- package/README.md +347 -0
- package/bin/prismcast +6 -0
- package/dist/app.d.ts +6 -0
- package/dist/app.js +315 -0
- package/dist/app.js.map +1 -0
- package/dist/browser/cdp.d.ts +38 -0
- package/dist/browser/cdp.js +155 -0
- package/dist/browser/cdp.js.map +1 -0
- package/dist/browser/channelSelection.d.ts +65 -0
- package/dist/browser/channelSelection.js +202 -0
- package/dist/browser/channelSelection.js.map +1 -0
- package/dist/browser/display.d.ts +34 -0
- package/dist/browser/display.js +54 -0
- package/dist/browser/display.js.map +1 -0
- package/dist/browser/index.d.ts +205 -0
- package/dist/browser/index.js +1205 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/tuning/fox.d.ts +2 -0
- package/dist/browser/tuning/fox.js +83 -0
- package/dist/browser/tuning/fox.js.map +1 -0
- package/dist/browser/tuning/hbo.d.ts +2 -0
- package/dist/browser/tuning/hbo.js +237 -0
- package/dist/browser/tuning/hbo.js.map +1 -0
- package/dist/browser/tuning/hulu.d.ts +2 -0
- package/dist/browser/tuning/hulu.js +550 -0
- package/dist/browser/tuning/hulu.js.map +1 -0
- package/dist/browser/tuning/sling.d.ts +2 -0
- package/dist/browser/tuning/sling.js +518 -0
- package/dist/browser/tuning/sling.js.map +1 -0
- package/dist/browser/tuning/thumbnailRow.d.ts +2 -0
- package/dist/browser/tuning/thumbnailRow.js +108 -0
- package/dist/browser/tuning/thumbnailRow.js.map +1 -0
- package/dist/browser/tuning/tileClick.d.ts +2 -0
- package/dist/browser/tuning/tileClick.js +103 -0
- package/dist/browser/tuning/tileClick.js.map +1 -0
- package/dist/browser/tuning/youtubeTv.d.ts +2 -0
- package/dist/browser/tuning/youtubeTv.js +182 -0
- package/dist/browser/tuning/youtubeTv.js.map +1 -0
- package/dist/browser/video.d.ts +289 -0
- package/dist/browser/video.js +996 -0
- package/dist/browser/video.js.map +1 -0
- package/dist/channels/index.d.ts +3 -0
- package/dist/channels/index.js +392 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/config/index.d.ts +53 -0
- package/dist/config/index.js +233 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/presets.d.ts +98 -0
- package/dist/config/presets.js +241 -0
- package/dist/config/presets.js.map +1 -0
- package/dist/config/profiles.d.ts +79 -0
- package/dist/config/profiles.js +245 -0
- package/dist/config/profiles.js.map +1 -0
- package/dist/config/providers.d.ts +120 -0
- package/dist/config/providers.js +450 -0
- package/dist/config/providers.js.map +1 -0
- package/dist/config/sites.d.ts +22 -0
- package/dist/config/sites.js +377 -0
- package/dist/config/sites.js.map +1 -0
- package/dist/config/userChannels.d.ts +178 -0
- package/dist/config/userChannels.js +543 -0
- package/dist/config/userChannels.js.map +1 -0
- package/dist/config/userConfig.d.ts +235 -0
- package/dist/config/userConfig.js +913 -0
- package/dist/config/userConfig.js.map +1 -0
- package/dist/hdhr/channelMap.d.ts +21 -0
- package/dist/hdhr/channelMap.js +82 -0
- package/dist/hdhr/channelMap.js.map +1 -0
- package/dist/hdhr/deviceId.d.ts +11 -0
- package/dist/hdhr/deviceId.js +84 -0
- package/dist/hdhr/deviceId.js.map +1 -0
- package/dist/hdhr/discover.d.ts +6 -0
- package/dist/hdhr/discover.js +155 -0
- package/dist/hdhr/discover.js.map +1 -0
- package/dist/hdhr/index.d.ts +9 -0
- package/dist/hdhr/index.js +87 -0
- package/dist/hdhr/index.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +144 -0
- package/dist/index.js.map +1 -0
- package/dist/routes/assets.d.ts +6 -0
- package/dist/routes/assets.js +79 -0
- package/dist/routes/assets.js.map +1 -0
- package/dist/routes/auth.d.ts +6 -0
- package/dist/routes/auth.js +77 -0
- package/dist/routes/auth.js.map +1 -0
- package/dist/routes/channels.d.ts +6 -0
- package/dist/routes/channels.js +40 -0
- package/dist/routes/channels.js.map +1 -0
- package/dist/routes/components.d.ts +138 -0
- package/dist/routes/components.js +210 -0
- package/dist/routes/components.js.map +1 -0
- package/dist/routes/config.d.ts +72 -0
- package/dist/routes/config.js +1977 -0
- package/dist/routes/config.js.map +1 -0
- package/dist/routes/debug.d.ts +6 -0
- package/dist/routes/debug.js +274 -0
- package/dist/routes/debug.js.map +1 -0
- package/dist/routes/health.d.ts +6 -0
- package/dist/routes/health.js +85 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/hls.d.ts +6 -0
- package/dist/routes/hls.js +25 -0
- package/dist/routes/hls.js.map +1 -0
- package/dist/routes/index.d.ts +19 -0
- package/dist/routes/index.js +49 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/logs.d.ts +6 -0
- package/dist/routes/logs.js +164 -0
- package/dist/routes/logs.js.map +1 -0
- package/dist/routes/mpegts.d.ts +6 -0
- package/dist/routes/mpegts.js +19 -0
- package/dist/routes/mpegts.js.map +1 -0
- package/dist/routes/play.d.ts +6 -0
- package/dist/routes/play.js +18 -0
- package/dist/routes/play.js.map +1 -0
- package/dist/routes/playlist.d.ts +36 -0
- package/dist/routes/playlist.js +134 -0
- package/dist/routes/playlist.js.map +1 -0
- package/dist/routes/root.d.ts +6 -0
- package/dist/routes/root.js +2920 -0
- package/dist/routes/root.js.map +1 -0
- package/dist/routes/streams.d.ts +6 -0
- package/dist/routes/streams.js +88 -0
- package/dist/routes/streams.js.map +1 -0
- package/dist/routes/theme.d.ts +15 -0
- package/dist/routes/theme.js +275 -0
- package/dist/routes/theme.js.map +1 -0
- package/dist/routes/ui.d.ts +56 -0
- package/dist/routes/ui.js +354 -0
- package/dist/routes/ui.js.map +1 -0
- package/dist/service/commands.d.ts +41 -0
- package/dist/service/commands.js +391 -0
- package/dist/service/commands.js.map +1 -0
- package/dist/service/generators.d.ts +33 -0
- package/dist/service/generators.js +432 -0
- package/dist/service/generators.js.map +1 -0
- package/dist/service/index.d.ts +2 -0
- package/dist/service/index.js +7 -0
- package/dist/service/index.js.map +1 -0
- package/dist/streaming/clients.d.ts +48 -0
- package/dist/streaming/clients.js +114 -0
- package/dist/streaming/clients.js.map +1 -0
- package/dist/streaming/fmp4Segmenter.d.ts +61 -0
- package/dist/streaming/fmp4Segmenter.js +461 -0
- package/dist/streaming/fmp4Segmenter.js.map +1 -0
- package/dist/streaming/hls.d.ts +120 -0
- package/dist/streaming/hls.js +722 -0
- package/dist/streaming/hls.js.map +1 -0
- package/dist/streaming/hlsSegments.d.ts +54 -0
- package/dist/streaming/hlsSegments.js +162 -0
- package/dist/streaming/hlsSegments.js.map +1 -0
- package/dist/streaming/lifecycle.d.ts +33 -0
- package/dist/streaming/lifecycle.js +185 -0
- package/dist/streaming/lifecycle.js.map +1 -0
- package/dist/streaming/monitor.d.ts +74 -0
- package/dist/streaming/monitor.js +1310 -0
- package/dist/streaming/monitor.js.map +1 -0
- package/dist/streaming/mp4Parser.d.ts +74 -0
- package/dist/streaming/mp4Parser.js +566 -0
- package/dist/streaming/mp4Parser.js.map +1 -0
- package/dist/streaming/mpegts.d.ts +14 -0
- package/dist/streaming/mpegts.js +248 -0
- package/dist/streaming/mpegts.js.map +1 -0
- package/dist/streaming/registry.d.ts +119 -0
- package/dist/streaming/registry.js +127 -0
- package/dist/streaming/registry.js.map +1 -0
- package/dist/streaming/setup.d.ts +135 -0
- package/dist/streaming/setup.js +670 -0
- package/dist/streaming/setup.js.map +1 -0
- package/dist/streaming/showInfo.d.ts +30 -0
- package/dist/streaming/showInfo.js +362 -0
- package/dist/streaming/showInfo.js.map +1 -0
- package/dist/streaming/statusEmitter.d.ts +125 -0
- package/dist/streaming/statusEmitter.js +139 -0
- package/dist/streaming/statusEmitter.js.map +1 -0
- package/dist/types/index.d.ts +403 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/debugFilter.d.ts +38 -0
- package/dist/utils/debugFilter.js +157 -0
- package/dist/utils/debugFilter.js.map +1 -0
- package/dist/utils/delay.d.ts +6 -0
- package/dist/utils/delay.js +15 -0
- package/dist/utils/delay.js.map +1 -0
- package/dist/utils/errors.d.ts +15 -0
- package/dist/utils/errors.js +40 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/evaluate.d.ts +51 -0
- package/dist/utils/evaluate.js +124 -0
- package/dist/utils/evaluate.js.map +1 -0
- package/dist/utils/ffmpeg.d.ts +65 -0
- package/dist/utils/ffmpeg.js +317 -0
- package/dist/utils/ffmpeg.js.map +1 -0
- package/dist/utils/fileLogger.d.ts +25 -0
- package/dist/utils/fileLogger.js +248 -0
- package/dist/utils/fileLogger.js.map +1 -0
- package/dist/utils/format.d.ts +16 -0
- package/dist/utils/format.js +46 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/html.d.ts +6 -0
- package/dist/utils/html.js +24 -0
- package/dist/utils/html.js.map +1 -0
- package/dist/utils/index.d.ts +15 -0
- package/dist/utils/index.js +20 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logEmitter.d.ts +17 -0
- package/dist/utils/logEmitter.js +30 -0
- package/dist/utils/logEmitter.js.map +1 -0
- package/dist/utils/logger.d.ts +82 -0
- package/dist/utils/logger.js +219 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/m3u.d.ts +32 -0
- package/dist/utils/m3u.js +148 -0
- package/dist/utils/m3u.js.map +1 -0
- package/dist/utils/morganStream.d.ts +7 -0
- package/dist/utils/morganStream.js +33 -0
- package/dist/utils/morganStream.js.map +1 -0
- package/dist/utils/platform.d.ts +64 -0
- package/dist/utils/platform.js +157 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/retry.d.ts +15 -0
- package/dist/utils/retry.js +82 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/streamContext.d.ts +28 -0
- package/dist/utils/streamContext.js +33 -0
- package/dist/utils/streamContext.js.map +1 -0
- package/dist/utils/version.d.ts +37 -0
- package/dist/utils/version.js +228 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +92 -0
- package/prismcast.png +0 -0
- package/prismcast.svg +74 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, HJD (https://github.com/hjdhjd). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* version.ts: Version checking and update notification utilities.
|
|
4
|
+
*/
|
|
5
|
+
import { LOG } from "./logger.js";
|
|
6
|
+
import { fileURLToPath } from "url";
|
|
7
|
+
import { formatError } from "./errors.js";
|
|
8
|
+
import { readFileSync } from "fs";
|
|
9
|
+
import { resolve } from "path";
|
|
10
|
+
// Package name for npm registry lookups.
|
|
11
|
+
const NPM_PACKAGE_NAME = "prismcast";
|
|
12
|
+
// Cached package version.
|
|
13
|
+
let cachedPackageVersion = null;
|
|
14
|
+
/**
|
|
15
|
+
* Gets the current package version from package.json.
|
|
16
|
+
* @returns The current version string (e.g., "1.0.7").
|
|
17
|
+
*/
|
|
18
|
+
export function getPackageVersion() {
|
|
19
|
+
if (cachedPackageVersion) {
|
|
20
|
+
return cachedPackageVersion;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
// Resolve the path to package.json relative to this file. This file is in src/utils/ or dist/utils/, and package.json is in the project root.
|
|
24
|
+
const currentDir = fileURLToPath(new URL(".", import.meta.url));
|
|
25
|
+
const packagePath = resolve(currentDir, "../../package.json");
|
|
26
|
+
const packageJson = JSON.parse(readFileSync(packagePath, "utf-8"));
|
|
27
|
+
cachedPackageVersion = packageJson.version;
|
|
28
|
+
return cachedPackageVersion;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return "0.0.0";
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// GitHub raw URL for fetching changelog.
|
|
35
|
+
const CHANGELOG_URL = "https://raw.githubusercontent.com/hjdhjd/prismcast/main/Changelog.md";
|
|
36
|
+
// How often to check for updates (2 hours in milliseconds).
|
|
37
|
+
const UPDATE_CHECK_INTERVAL = 2 * 60 * 60 * 1000;
|
|
38
|
+
// Cached version information.
|
|
39
|
+
let cachedLatestVersion = null;
|
|
40
|
+
let cachedChangelog = null;
|
|
41
|
+
let lastCheckTime = 0;
|
|
42
|
+
let updateCheckInterval = null;
|
|
43
|
+
/**
|
|
44
|
+
* Normalizes a version string by stripping the leading 'v' prefix if present.
|
|
45
|
+
* @param version - Version string (e.g., "v1.0.7" or "1.0.7").
|
|
46
|
+
* @returns Normalized version without 'v' prefix (e.g., "1.0.7").
|
|
47
|
+
*/
|
|
48
|
+
function normalizeVersion(version) {
|
|
49
|
+
return version.replace(/^v/, "");
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Compares two semver version strings. Returns true if version a is less than version b. Assumes versions are already normalized (no 'v' prefix).
|
|
53
|
+
* @param a - First version string (e.g., "1.0.7").
|
|
54
|
+
* @param b - Second version string (e.g., "1.0.8").
|
|
55
|
+
* @returns True if a < b.
|
|
56
|
+
*/
|
|
57
|
+
function isVersionLessThan(a, b) {
|
|
58
|
+
const partsA = a.split(".").map(Number);
|
|
59
|
+
const partsB = b.split(".").map(Number);
|
|
60
|
+
for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
|
|
61
|
+
const numA = partsA[i] ?? 0;
|
|
62
|
+
const numB = partsB[i] ?? 0;
|
|
63
|
+
if (numA < numB) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
if (numA > numB) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Fetches the latest version from the npm registry.
|
|
74
|
+
* @returns The latest version string, or null if the fetch failed.
|
|
75
|
+
*/
|
|
76
|
+
async function fetchLatestVersion() {
|
|
77
|
+
try {
|
|
78
|
+
const response = await fetch("https://registry.npmjs.org/" + NPM_PACKAGE_NAME);
|
|
79
|
+
if (!response.ok) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
const data = await response.json();
|
|
83
|
+
const latest = data["dist-tags"]?.latest;
|
|
84
|
+
return latest ? normalizeVersion(latest) : null;
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
LOG.debug("config", "Failed to fetch latest version from npm: %s.", formatError(error));
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Fetches the changelog from GitHub.
|
|
93
|
+
* @returns The full changelog content, or null if the fetch failed.
|
|
94
|
+
*/
|
|
95
|
+
async function fetchChangelogContent() {
|
|
96
|
+
try {
|
|
97
|
+
const response = await fetch(CHANGELOG_URL);
|
|
98
|
+
if (!response.ok) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
return await response.text();
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
LOG.debug("config", "Failed to fetch changelog from GitHub: %s.", formatError(error));
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Extracts the changelog entry for a specific version. Assumes version is already normalized (no 'v' prefix).
|
|
110
|
+
* @param changelog - The full changelog content.
|
|
111
|
+
* @param version - The version to extract (e.g., "1.0.8").
|
|
112
|
+
* @returns The changelog entry for the version, or null if not found.
|
|
113
|
+
*/
|
|
114
|
+
function extractVersionChangelog(changelog, version) {
|
|
115
|
+
// Match the version header and capture everything until the next version header or end of file. The changelog format is: ## 1.0.8 (date)
|
|
116
|
+
// Note: We use (?![^]) instead of $ for end-of-string because the m flag makes $ match end-of-line, which would stop the non-greedy *? at the first line.
|
|
117
|
+
const pattern = new RegExp("^## " + version.replace(/\./g, "\\.") + "\\s+\\([^)]+\\)\\s*\\n([\\s\\S]*?)(?=^## \\d|(?![^]))", "m");
|
|
118
|
+
const match = changelog.match(pattern);
|
|
119
|
+
if (!match) {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
// Clean up the entry: trim whitespace and remove leading/trailing blank lines.
|
|
123
|
+
return match[1].trim();
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Checks for updates and caches the results.
|
|
127
|
+
* @param currentVersion - The currently running version.
|
|
128
|
+
* @param force - If true, bypasses the debounce check.
|
|
129
|
+
*/
|
|
130
|
+
export async function checkForUpdates(currentVersion, force = false) {
|
|
131
|
+
const now = Date.now();
|
|
132
|
+
// Skip if we checked recently (within 1 minute) to avoid duplicate checks on startup, unless forced.
|
|
133
|
+
if (!force && ((now - lastCheckTime) < 60000)) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
lastCheckTime = now;
|
|
137
|
+
const current = normalizeVersion(currentVersion);
|
|
138
|
+
const latest = await fetchLatestVersion();
|
|
139
|
+
if (!latest) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const previousLatest = cachedLatestVersion;
|
|
143
|
+
cachedLatestVersion = latest;
|
|
144
|
+
// Determine if this is a newly detected update (version changed since last check).
|
|
145
|
+
const isNewUpdate = (previousLatest !== latest) && isVersionLessThan(current, latest);
|
|
146
|
+
// Log if there's a newer version available.
|
|
147
|
+
if (isNewUpdate) {
|
|
148
|
+
LOG.info("Update available: v%s (current: v%s).", latest, current);
|
|
149
|
+
}
|
|
150
|
+
// Fetch changelog if we haven't yet, or refresh it when a new update is detected to ensure the new version's changelog is available.
|
|
151
|
+
if (!cachedChangelog || isNewUpdate) {
|
|
152
|
+
const changelog = await fetchChangelogContent();
|
|
153
|
+
if (changelog) {
|
|
154
|
+
cachedChangelog = changelog;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Gets the cached latest version information.
|
|
160
|
+
* @param currentVersion - The currently running version.
|
|
161
|
+
* @returns Object with latest version and whether an update is available.
|
|
162
|
+
*/
|
|
163
|
+
export function getVersionInfo(currentVersion) {
|
|
164
|
+
const current = normalizeVersion(currentVersion);
|
|
165
|
+
const latest = cachedLatestVersion;
|
|
166
|
+
return {
|
|
167
|
+
latestVersion: latest,
|
|
168
|
+
updateAvailable: (latest !== null) && isVersionLessThan(current, latest)
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Parses a changelog entry into an array of items.
|
|
173
|
+
* @param entry - The raw changelog entry text.
|
|
174
|
+
* @returns Array of changelog items (bullet points), or null if no items found.
|
|
175
|
+
*/
|
|
176
|
+
function parseChangelogItems(entry) {
|
|
177
|
+
const lines = entry.split("\n").filter((line) => line.trim().startsWith("*"));
|
|
178
|
+
const items = lines.map((line) => line.replace(/^\s*\*\s*/, ""));
|
|
179
|
+
return items.length > 0 ? items : null;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Gets the changelog items for a specific version as an array of strings. Uses a two-phase lookup: first checks the cache, then fetches fresh data if the
|
|
183
|
+
* version isn't found. This handles both cold cache (no data yet) and stale cache (new version not in cached data) scenarios.
|
|
184
|
+
* @param version - The version to get changelog items for.
|
|
185
|
+
* @returns Array of changelog items (bullet points), or null if unavailable.
|
|
186
|
+
*/
|
|
187
|
+
export async function getChangelogItems(version) {
|
|
188
|
+
const normalized = normalizeVersion(version);
|
|
189
|
+
// Phase 1: Try to find version in cached changelog (fast path).
|
|
190
|
+
if (cachedChangelog) {
|
|
191
|
+
const entry = extractVersionChangelog(cachedChangelog, normalized);
|
|
192
|
+
if (entry) {
|
|
193
|
+
return parseChangelogItems(entry);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Phase 2: Version not in cache (or no cache). Fetch fresh changelog and try again.
|
|
197
|
+
const changelog = await fetchChangelogContent();
|
|
198
|
+
if (!changelog) {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
cachedChangelog = changelog;
|
|
202
|
+
const entry = extractVersionChangelog(cachedChangelog, normalized);
|
|
203
|
+
if (!entry) {
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
return parseChangelogItems(entry);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Starts periodic update checking.
|
|
210
|
+
* @param currentVersion - The currently running version.
|
|
211
|
+
*/
|
|
212
|
+
export function startUpdateChecking(currentVersion) {
|
|
213
|
+
const current = normalizeVersion(currentVersion);
|
|
214
|
+
// Do an initial check.
|
|
215
|
+
void checkForUpdates(current);
|
|
216
|
+
// Set up periodic checking.
|
|
217
|
+
updateCheckInterval ??= setInterval(() => void checkForUpdates(current), UPDATE_CHECK_INTERVAL);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Stops periodic update checking.
|
|
221
|
+
*/
|
|
222
|
+
export function stopUpdateChecking() {
|
|
223
|
+
if (updateCheckInterval) {
|
|
224
|
+
clearInterval(updateCheckInterval);
|
|
225
|
+
updateCheckInterval = null;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bnhf/prismcast",
|
|
3
|
+
"displayName": "PrismCast",
|
|
4
|
+
"version": "1.3.4-2026.02.19",
|
|
5
|
+
"description": "Browser-based live TV capture server for Channels DVR, Plex, and other streaming clients.",
|
|
6
|
+
"author": {
|
|
7
|
+
"name": "HJD",
|
|
8
|
+
"url": "https://github.com/hjdhjd"
|
|
9
|
+
},
|
|
10
|
+
"contributors": [
|
|
11
|
+
{
|
|
12
|
+
"name": "bnhf",
|
|
13
|
+
"url": "https://github.com/bnhf"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"homepage": "https://github.com/hjdhjd/prismcast",
|
|
17
|
+
"license": "ISC",
|
|
18
|
+
"bugs": {
|
|
19
|
+
"url": "https://github.com/hjdhjd/prismcast/issues"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"browser-capture",
|
|
23
|
+
"channels",
|
|
24
|
+
"channels-dvr",
|
|
25
|
+
"chrome",
|
|
26
|
+
"chrome-capture",
|
|
27
|
+
"cord-cutting",
|
|
28
|
+
"dvr",
|
|
29
|
+
"ffmpeg",
|
|
30
|
+
"fmp4",
|
|
31
|
+
"hls",
|
|
32
|
+
"iptv",
|
|
33
|
+
"live-streaming",
|
|
34
|
+
"live-tv",
|
|
35
|
+
"mpeg-ts",
|
|
36
|
+
"mpegts",
|
|
37
|
+
"m3u",
|
|
38
|
+
"m3u8",
|
|
39
|
+
"media-server",
|
|
40
|
+
"ott",
|
|
41
|
+
"plex",
|
|
42
|
+
"puppeteer",
|
|
43
|
+
"screen-capture",
|
|
44
|
+
"streaming",
|
|
45
|
+
"streaming-server",
|
|
46
|
+
"tv",
|
|
47
|
+
"video",
|
|
48
|
+
"video-capture",
|
|
49
|
+
"video-streaming"
|
|
50
|
+
],
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=22"
|
|
53
|
+
},
|
|
54
|
+
"repository": {
|
|
55
|
+
"type": "git",
|
|
56
|
+
"url": "git://github.com/hjdhjd/prismcast.git"
|
|
57
|
+
},
|
|
58
|
+
"type": "module",
|
|
59
|
+
"bin": {
|
|
60
|
+
"prismcast": "./bin/prismcast"
|
|
61
|
+
},
|
|
62
|
+
"main": "./dist/index.js",
|
|
63
|
+
"scripts": {
|
|
64
|
+
"build": "shx rm -rf dist && tsc",
|
|
65
|
+
"clean": "shx rm -rf dist",
|
|
66
|
+
"lint": "ESLINT_MAX_WARNINGS=${ESLINT_MAX_WARNINGS:--1} eslint src eslint.config.mjs",
|
|
67
|
+
"prepublishOnly": "npm run build",
|
|
68
|
+
"start": "node dist/index.js",
|
|
69
|
+
"watch": "npm run build && nodemon"
|
|
70
|
+
},
|
|
71
|
+
"dependencies": {
|
|
72
|
+
"console-stamp": "3.1.2",
|
|
73
|
+
"express": "5.2.1",
|
|
74
|
+
"ffmpeg-for-homebridge": "2.2.1",
|
|
75
|
+
"morgan": "1.10.1",
|
|
76
|
+
"puppeteer-core": "24.37.3",
|
|
77
|
+
"puppeteer-stream": "3.0.21"
|
|
78
|
+
},
|
|
79
|
+
"devDependencies": {
|
|
80
|
+
"@stylistic/eslint-plugin": "5.8.0",
|
|
81
|
+
"@types/dateformat": "5.0.3",
|
|
82
|
+
"@types/express": "5.0.6",
|
|
83
|
+
"@types/morgan": "1.9.10",
|
|
84
|
+
"@types/node": "25.2.3",
|
|
85
|
+
"eslint": "9.39.2",
|
|
86
|
+
"homebridge-plugin-utils": "1.32.0",
|
|
87
|
+
"nodemon": "3.1.11",
|
|
88
|
+
"shx": "0.4.0",
|
|
89
|
+
"typescript": "5.9.3",
|
|
90
|
+
"typescript-eslint": "8.55.0"
|
|
91
|
+
}
|
|
92
|
+
}
|
package/prismcast.png
ADDED
|
Binary file
|
package/prismcast.svg
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<?xml version="1.0" standalone="no"?>
|
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
|
3
|
+
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
|
4
|
+
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="1000" height="1000" viewBox="0 0 1000.000000 1000.000000"
|
|
6
|
+
preserveAspectRatio="xMidYMid meet">
|
|
7
|
+
<metadata>
|
|
8
|
+
Created by potrace 1.16, written by Peter Selinger 2001-2019
|
|
9
|
+
</metadata>
|
|
10
|
+
<g transform="translate(0.000000,1000.000000) scale(0.100000,-0.100000)"
|
|
11
|
+
fill="#636382" stroke="none">
|
|
12
|
+
<path d="M3860 7796 c-179 -53 -221 -102 -460 -541 -18 -33 -68 -121 -110
|
|
13
|
+
-195 -42 -74 -121 -216 -175 -315 -54 -99 -112 -205 -130 -235 -18 -30 -49
|
|
14
|
+
-84 -67 -120 -40 -76 -124 -227 -178 -320 -53 -91 -70 -122 -178 -320 -52 -96
|
|
15
|
+
-98 -179 -102 -185 -4 -5 -29 -50 -55 -100 -26 -49 -76 -139 -110 -200 -34
|
|
16
|
+
-60 -100 -180 -145 -265 -46 -85 -86 -159 -90 -165 -5 -5 -26 -45 -49 -88 -68
|
|
17
|
+
-130 -122 -227 -177 -322 -28 -49 -98 -175 -154 -280 -103 -191 -119 -220
|
|
18
|
+
-204 -374 -25 -46 -46 -86 -46 -88 0 -3 -8 -17 -19 -31 -10 -15 -44 -76 -76
|
|
19
|
+
-137 -85 -161 -111 -208 -184 -330 -36 -60 -74 -130 -85 -155 -10 -25 -21 -52
|
|
20
|
+
-25 -60 -44 -89 -44 -286 -1 -369 4 -9 21 -43 36 -76 64 -136 246 -271 414
|
|
21
|
+
-306 98 -21 5318 -21 5400 0 393 99 531 467 323 861 -87 164 -304 551 -323
|
|
22
|
+
575 -4 6 -18 30 -32 55 -243 440 -263 471 -330 504 -47 23 -94 34 -313 76 -27
|
|
23
|
+
5 -104 16 -170 25 -66 9 -178 26 -250 37 -138 21 -199 30 -360 53 -55 8 -129
|
|
24
|
+
19 -165 24 -36 5 -101 14 -145 20 -44 6 -107 15 -140 21 -33 5 -96 14 -140 19
|
|
25
|
+
-44 6 -136 18 -204 27 -370 49 -481 -102 -151 -205 58 -18 116 -37 130 -42 14
|
|
26
|
+
-4 61 -17 105 -28 72 -18 153 -40 325 -87 242 -67 243 -67 410 -98 47 -9 103
|
|
27
|
+
-20 125 -25 22 -5 76 -17 120 -26 228 -48 523 -120 567 -137 31 -11 40 -24
|
|
28
|
+
107 -146 79 -142 306 -534 333 -574 169 -248 206 -437 96 -494 -54 -28 -2787
|
|
29
|
+
-48 -2815 -21 -30 31 -9 4751 21 4773 30 21 44 17 62 -18 9 -18 26 -44 38 -58
|
|
30
|
+
26 -29 225 -338 251 -390 10 -19 44 -79 76 -133 33 -54 59 -100 59 -102 0 -4
|
|
31
|
+
106 -187 178 -305 25 -41 76 -131 114 -199 158 -283 218 -321 391 -243 121 55
|
|
32
|
+
154 119 109 209 -27 53 -324 553 -417 703 -12 19 -39 64 -59 100 -20 36 -47
|
|
33
|
+
83 -61 105 -13 22 -32 54 -41 70 -9 17 -33 55 -53 85 -21 30 -54 87 -76 125
|
|
34
|
+
-195 355 -465 520 -725 441z m-263 -2616 c-3 -1386 -3 -1400 -41 -1400 -12 0
|
|
35
|
+
-26 -4 -31 -9 -11 -9 -611 -291 -621 -291 -3 0 -76 -33 -162 -74 -87 -41 -182
|
|
36
|
+
-85 -212 -99 -30 -13 -138 -63 -240 -109 -102 -47 -214 -98 -250 -113 -36 -15
|
|
37
|
+
-104 -47 -151 -71 -104 -52 -345 -154 -364 -154 -41 0 13 122 207 465 30 55
|
|
38
|
+
87 159 126 230 38 72 83 155 99 185 17 30 70 129 118 220 48 91 107 199 130
|
|
39
|
+
240 23 41 59 109 80 150 21 41 61 116 90 165 29 50 86 153 127 230 111 206
|
|
40
|
+
140 259 148 270 4 6 29 53 55 105 27 52 54 102 60 110 7 8 32 51 55 95 24 44
|
|
41
|
+
51 94 61 112 10 17 43 78 74 135 31 57 60 110 65 118 5 8 34 60 63 115 30 55
|
|
42
|
+
81 150 115 210 95 173 250 461 305 565 85 163 81 160 89 50 5 -52 7 -705 5
|
|
43
|
+
-1450z m1 -2145 c4 -445 21 -401 -156 -408 -331 -14 -1527 -13 -1527 1 0 7 23
|
|
44
|
+
21 50 31 28 10 88 35 135 56 47 21 121 52 165 70 111 45 213 90 400 175 88 40
|
|
45
|
+
174 78 190 85 17 7 111 50 210 95 99 46 209 95 245 110 36 15 103 46 150 68
|
|
46
|
+
145 69 135 90 138 -283z"/>
|
|
47
|
+
<path d="M7966 7380 c-153 -60 -179 -182 -72 -333 193 -270 370 -597 440 -811
|
|
48
|
+
13 -39 29 -84 36 -101 23 -55 28 -70 33 -90 3 -11 13 -45 22 -75 9 -30 20 -71
|
|
49
|
+
25 -90 5 -19 16 -64 25 -100 9 -36 20 -85 25 -110 4 -25 15 -83 24 -130 102
|
|
50
|
+
-532 44 -1184 -146 -1660 -65 -161 -46 -255 60 -309 243 -124 399 132 522 854
|
|
51
|
+
50 297 50 771 0 1067 -45 264 -52 299 -98 479 -122 472 -347 969 -577 1276
|
|
52
|
+
-104 137 -202 178 -319 133z"/>
|
|
53
|
+
<path d="M7189 6753 c-133 -68 -125 -182 33 -423 163 -249 257 -464 345 -790
|
|
54
|
+
101 -377 86 -1015 -33 -1333 -45 -121 55 -250 205 -265 172 -16 269 199 321
|
|
55
|
+
716 19 196 7 565 -26 737 -85 454 -202 776 -407 1123 -143 241 -280 314 -438
|
|
56
|
+
235z"/>
|
|
57
|
+
<path d="M6540 6330 c-30 -10 -140 -59 -245 -110 -104 -50 -215 -103 -245
|
|
58
|
+
-117 -30 -14 -137 -65 -238 -114 -101 -49 -185 -89 -187 -89 -2 0 -83 -38
|
|
59
|
+
-180 -85 -98 -47 -179 -85 -181 -85 -5 0 -52 -22 -259 -120 -60 -29 -137 -65
|
|
60
|
+
-170 -80 -33 -15 -91 -42 -130 -60 -101 -46 -264 -129 -307 -156 -159 -101
|
|
61
|
+
-18 -310 162 -239 19 7 71 26 115 42 44 17 141 55 215 85 74 30 180 72 235 93
|
|
62
|
+
55 21 156 60 225 88 69 27 148 58 177 68 29 10 67 24 85 32 18 9 110 45 203
|
|
63
|
+
82 94 36 184 72 200 79 17 7 46 19 65 26 31 11 56 21 125 50 11 4 52 20 90 35
|
|
64
|
+
39 15 95 37 125 50 30 13 113 47 185 77 213 87 260 161 199 313 -54 135 -136
|
|
65
|
+
177 -264 135z"/>
|
|
66
|
+
<path d="M6900 5263 c-37 -3 -194 -29 -270 -43 -25 -5 -85 -16 -135 -25 -49
|
|
67
|
+
-9 -110 -20 -135 -25 -25 -5 -85 -16 -135 -25 -49 -9 -135 -26 -190 -36 -55
|
|
68
|
+
-11 -129 -24 -165 -29 -36 -5 -105 -16 -155 -25 -49 -9 -115 -20 -145 -25 -30
|
|
69
|
+
-5 -98 -18 -150 -28 -52 -11 -129 -25 -170 -32 -75 -12 -216 -40 -340 -66 -36
|
|
70
|
+
-8 -88 -18 -116 -23 -132 -24 -186 -96 -110 -146 37 -25 245 -38 383 -25 63 6
|
|
71
|
+
207 15 321 20 774 36 1394 74 1502 91 36 5 78 12 94 14 203 33 184 445 -20
|
|
72
|
+
433 -16 0 -45 -3 -64 -5z"/>
|
|
73
|
+
</g>
|
|
74
|
+
</svg>
|