@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,391 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, HJD (https://github.com/hjdhjd). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* commands.ts: Service command handlers for PrismCast CLI.
|
|
4
|
+
*/
|
|
5
|
+
import { DEFAULTS, loadUserConfig } from "../config/userConfig.js";
|
|
6
|
+
import { SERVICE_NAME, getPlatform, getServiceFilePath } from "../utils/platform.js";
|
|
7
|
+
import { collectServiceEnvironment, getServiceGenerator } from "./generators.js";
|
|
8
|
+
/* These handlers implement the `prismcast service` subcommands for installing, uninstalling, and checking the status of PrismCast as a system service. Each handler
|
|
9
|
+
* prints its output directly to the console and exits with an appropriate status code.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Prints a message to stdout.
|
|
13
|
+
* @param message - The message to print.
|
|
14
|
+
*/
|
|
15
|
+
function print(message) {
|
|
16
|
+
// eslint-disable-next-line no-console
|
|
17
|
+
console.log(message);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Prints an error message to stderr.
|
|
21
|
+
* @param message - The error message to print.
|
|
22
|
+
*/
|
|
23
|
+
function printError(message) {
|
|
24
|
+
// eslint-disable-next-line no-console
|
|
25
|
+
console.error(message);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Formats a duration in seconds to a human-readable string.
|
|
29
|
+
* @param seconds - The duration in seconds.
|
|
30
|
+
* @returns Formatted duration (e.g., "45s", "2m 15s", "1h 23m").
|
|
31
|
+
*/
|
|
32
|
+
function formatDuration(seconds) {
|
|
33
|
+
if (seconds < 60) {
|
|
34
|
+
return String(seconds) + "s";
|
|
35
|
+
}
|
|
36
|
+
if (seconds < 3600) {
|
|
37
|
+
const minutes = Math.floor(seconds / 60);
|
|
38
|
+
const secs = seconds % 60;
|
|
39
|
+
return secs > 0 ? String(minutes) + "m " + String(secs) + "s" : String(minutes) + "m";
|
|
40
|
+
}
|
|
41
|
+
const hours = Math.floor(seconds / 3600);
|
|
42
|
+
const minutes = Math.floor((seconds % 3600) / 60);
|
|
43
|
+
return minutes > 0 ? String(hours) + "h " + String(minutes) + "m" : String(hours) + "h";
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Fetches active stream information from the running server.
|
|
47
|
+
* @param port - The server port to connect to.
|
|
48
|
+
* @returns Stream data on success, null if the server is unreachable.
|
|
49
|
+
*/
|
|
50
|
+
async function fetchActiveStreams(port) {
|
|
51
|
+
try {
|
|
52
|
+
const controller = new AbortController();
|
|
53
|
+
const timeoutId = setTimeout(() => { controller.abort(); }, 3000);
|
|
54
|
+
const response = await fetch("http://127.0.0.1:" + String(port) + "/streams", { signal: controller.signal });
|
|
55
|
+
clearTimeout(timeoutId);
|
|
56
|
+
if (!response.ok) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
return await response.json();
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Gets the configured server port from user config or defaults.
|
|
67
|
+
* @returns The server port.
|
|
68
|
+
*/
|
|
69
|
+
async function getServerPort() {
|
|
70
|
+
const result = await loadUserConfig();
|
|
71
|
+
return result.config.server?.port ?? DEFAULTS.server.port;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Prints usage information for the service subcommand.
|
|
75
|
+
*/
|
|
76
|
+
export function printServiceUsage() {
|
|
77
|
+
print("Usage: prismcast service <command> [options]");
|
|
78
|
+
print("");
|
|
79
|
+
print("Commands:");
|
|
80
|
+
print(" install [--force] Install " + SERVICE_NAME + " as a user service");
|
|
81
|
+
print(" uninstall Remove " + SERVICE_NAME + " service");
|
|
82
|
+
print(" start Start the " + SERVICE_NAME + " service");
|
|
83
|
+
print(" stop Stop the " + SERVICE_NAME + " service");
|
|
84
|
+
print(" restart Restart the " + SERVICE_NAME + " service");
|
|
85
|
+
print(" status Show service installation and running status");
|
|
86
|
+
print("");
|
|
87
|
+
print("Options:");
|
|
88
|
+
print(" --force Force reinstall even if already installed");
|
|
89
|
+
print("");
|
|
90
|
+
print("The service runs as the current user and starts automatically at login.");
|
|
91
|
+
print("Configuration is read from ~/.prismcast/config.json.");
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Handles the `service install` command. Generates and installs a service file for the current platform, then starts the service.
|
|
95
|
+
* @param force - If true, reinstall even if already installed.
|
|
96
|
+
* @returns Exit code (0 for success, 1 for error).
|
|
97
|
+
*/
|
|
98
|
+
export async function handleInstall(force) {
|
|
99
|
+
const generator = getServiceGenerator();
|
|
100
|
+
if (!generator) {
|
|
101
|
+
printError("Error: Service installation is not supported on this platform (" + getPlatform() + ").");
|
|
102
|
+
return 1;
|
|
103
|
+
}
|
|
104
|
+
// Check if already installed.
|
|
105
|
+
const isInstalled = await generator.isInstalled();
|
|
106
|
+
if (isInstalled && !force) {
|
|
107
|
+
printError("Error: " + SERVICE_NAME + " service is already installed.");
|
|
108
|
+
printError("Use --force to reinstall, or run 'prismcast service uninstall' first.");
|
|
109
|
+
return 1;
|
|
110
|
+
}
|
|
111
|
+
print("Installing " + SERVICE_NAME + " service...");
|
|
112
|
+
print("");
|
|
113
|
+
// Collect environment variables to persist in the service file.
|
|
114
|
+
const envVars = collectServiceEnvironment();
|
|
115
|
+
// Generate and install the service.
|
|
116
|
+
try {
|
|
117
|
+
const content = generator.generate({ envVars });
|
|
118
|
+
await generator.install(content);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
printError("Error: Failed to install service.");
|
|
122
|
+
if (error instanceof Error) {
|
|
123
|
+
printError(error.message);
|
|
124
|
+
}
|
|
125
|
+
return 1;
|
|
126
|
+
}
|
|
127
|
+
print("Service installed successfully.");
|
|
128
|
+
print("");
|
|
129
|
+
print("Service file: " + getServiceFilePath());
|
|
130
|
+
print("Service manager: " + generator.serviceManager);
|
|
131
|
+
print("");
|
|
132
|
+
// Print platform-specific instructions.
|
|
133
|
+
switch (generator.serviceManager) {
|
|
134
|
+
case "launchd": {
|
|
135
|
+
print("The service is now running and will start automatically at login.");
|
|
136
|
+
print("");
|
|
137
|
+
print("Useful commands:");
|
|
138
|
+
print(" View logs: tail -f ~/.prismcast/prismcast.log");
|
|
139
|
+
print(" View service log: tail -f ~/.prismcast/service-stdout.log");
|
|
140
|
+
print(" Stop service: prismcast service stop");
|
|
141
|
+
print(" Start service: prismcast service start");
|
|
142
|
+
print(" Status: prismcast service status");
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
case "systemd": {
|
|
146
|
+
print("The service is now running and will start automatically at login.");
|
|
147
|
+
print("");
|
|
148
|
+
print("Useful commands:");
|
|
149
|
+
print(" View logs: tail -f ~/.prismcast/prismcast.log");
|
|
150
|
+
print(" View journal: journalctl --user -u prismcast -f");
|
|
151
|
+
print(" Stop service: prismcast service stop");
|
|
152
|
+
print(" Start service: prismcast service start");
|
|
153
|
+
print(" Status: prismcast service status");
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
case "windows-scheduler": {
|
|
157
|
+
print("The service is now running and will start automatically at login.");
|
|
158
|
+
print("");
|
|
159
|
+
print("Useful commands:");
|
|
160
|
+
print(" View logs: type %USERPROFILE%\\.prismcast\\prismcast.log");
|
|
161
|
+
print(" Stop service: prismcast service stop");
|
|
162
|
+
print(" Start service: prismcast service start");
|
|
163
|
+
print(" Status: prismcast service status");
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return 0;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Handles the `service uninstall` command. Stops and removes the service.
|
|
171
|
+
* @returns Exit code (0 for success, 1 for error).
|
|
172
|
+
*/
|
|
173
|
+
export async function handleUninstall() {
|
|
174
|
+
const generator = getServiceGenerator();
|
|
175
|
+
if (!generator) {
|
|
176
|
+
printError("Error: Service management is not supported on this platform (" + getPlatform() + ").");
|
|
177
|
+
return 1;
|
|
178
|
+
}
|
|
179
|
+
// Check if installed.
|
|
180
|
+
const isInstalled = await generator.isInstalled();
|
|
181
|
+
if (!isInstalled) {
|
|
182
|
+
printError("Error: " + SERVICE_NAME + " service is not installed.");
|
|
183
|
+
return 1;
|
|
184
|
+
}
|
|
185
|
+
print("Uninstalling " + SERVICE_NAME + " service...");
|
|
186
|
+
try {
|
|
187
|
+
await generator.uninstall();
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
printError("Error: Failed to uninstall service.");
|
|
191
|
+
if (error instanceof Error) {
|
|
192
|
+
printError(error.message);
|
|
193
|
+
}
|
|
194
|
+
return 1;
|
|
195
|
+
}
|
|
196
|
+
print("Service uninstalled successfully.");
|
|
197
|
+
print("");
|
|
198
|
+
print("Note: Configuration and data files in ~/.prismcast/ have been preserved.");
|
|
199
|
+
print("To remove all data, delete the ~/.prismcast directory manually.");
|
|
200
|
+
return 0;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Handles the `service start` command. Starts the service if it is installed but not running.
|
|
204
|
+
* @returns Exit code (0 for success, 1 for error).
|
|
205
|
+
*/
|
|
206
|
+
export async function handleStart() {
|
|
207
|
+
const generator = getServiceGenerator();
|
|
208
|
+
if (!generator) {
|
|
209
|
+
printError("Error: Service management is not supported on this platform (" + getPlatform() + ").");
|
|
210
|
+
return 1;
|
|
211
|
+
}
|
|
212
|
+
// Check if installed.
|
|
213
|
+
const isInstalled = await generator.isInstalled();
|
|
214
|
+
if (!isInstalled) {
|
|
215
|
+
printError("Error: " + SERVICE_NAME + " service is not installed.");
|
|
216
|
+
printError("Run 'prismcast service install' first.");
|
|
217
|
+
return 1;
|
|
218
|
+
}
|
|
219
|
+
// Check if already running.
|
|
220
|
+
const isRunning = await generator.isRunning();
|
|
221
|
+
if (isRunning) {
|
|
222
|
+
print(SERVICE_NAME + " service is already running.");
|
|
223
|
+
return 0;
|
|
224
|
+
}
|
|
225
|
+
print("Starting " + SERVICE_NAME + " service...");
|
|
226
|
+
try {
|
|
227
|
+
await generator.start();
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
printError("Error: Failed to start service.");
|
|
231
|
+
if (error instanceof Error) {
|
|
232
|
+
printError(error.message);
|
|
233
|
+
}
|
|
234
|
+
return 1;
|
|
235
|
+
}
|
|
236
|
+
print("Service started successfully.");
|
|
237
|
+
return 0;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Handles the `service stop` command. Stops the service if it is running.
|
|
241
|
+
* @returns Exit code (0 for success, 1 for error).
|
|
242
|
+
*/
|
|
243
|
+
export async function handleStop() {
|
|
244
|
+
const generator = getServiceGenerator();
|
|
245
|
+
if (!generator) {
|
|
246
|
+
printError("Error: Service management is not supported on this platform (" + getPlatform() + ").");
|
|
247
|
+
return 1;
|
|
248
|
+
}
|
|
249
|
+
// Check if installed.
|
|
250
|
+
const isInstalled = await generator.isInstalled();
|
|
251
|
+
if (!isInstalled) {
|
|
252
|
+
printError("Error: " + SERVICE_NAME + " service is not installed.");
|
|
253
|
+
return 1;
|
|
254
|
+
}
|
|
255
|
+
// Check if running.
|
|
256
|
+
const isRunning = await generator.isRunning();
|
|
257
|
+
if (!isRunning) {
|
|
258
|
+
print(SERVICE_NAME + " service is not running.");
|
|
259
|
+
return 0;
|
|
260
|
+
}
|
|
261
|
+
print("Stopping " + SERVICE_NAME + " service...");
|
|
262
|
+
try {
|
|
263
|
+
await generator.stop();
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
printError("Error: Failed to stop service.");
|
|
267
|
+
if (error instanceof Error) {
|
|
268
|
+
printError(error.message);
|
|
269
|
+
}
|
|
270
|
+
return 1;
|
|
271
|
+
}
|
|
272
|
+
print("Service stopped successfully.");
|
|
273
|
+
return 0;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Handles the `service restart` command. Stops the service if running, then starts it.
|
|
277
|
+
* @returns Exit code (0 for success, 1 for error).
|
|
278
|
+
*/
|
|
279
|
+
export async function handleRestart() {
|
|
280
|
+
// Stop the service (ignores "not running" state).
|
|
281
|
+
const stopResult = await handleStop();
|
|
282
|
+
if (stopResult !== 0) {
|
|
283
|
+
return stopResult;
|
|
284
|
+
}
|
|
285
|
+
// Start the service.
|
|
286
|
+
return handleStart();
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Handles the `service status` command. Shows the current service installation and running status.
|
|
290
|
+
* @returns Exit code (0 for success).
|
|
291
|
+
*/
|
|
292
|
+
export async function handleStatus() {
|
|
293
|
+
const generator = getServiceGenerator();
|
|
294
|
+
if (!generator) {
|
|
295
|
+
print(SERVICE_NAME + " Service Status");
|
|
296
|
+
print("─".repeat(40));
|
|
297
|
+
print("Platform: " + getPlatform());
|
|
298
|
+
print("Service support: Not available");
|
|
299
|
+
print("");
|
|
300
|
+
print("Service installation is not supported on this platform.");
|
|
301
|
+
return 0;
|
|
302
|
+
}
|
|
303
|
+
const isInstalled = await generator.isInstalled();
|
|
304
|
+
const isRunning = isInstalled ? await generator.isRunning() : false;
|
|
305
|
+
print(SERVICE_NAME + " Service Status");
|
|
306
|
+
print("─".repeat(40));
|
|
307
|
+
print("Platform: " + getPlatform());
|
|
308
|
+
print("Service manager: " + generator.serviceManager);
|
|
309
|
+
print("Service file: " + getServiceFilePath());
|
|
310
|
+
print("Installed: " + (isInstalled ? "Yes" : "No"));
|
|
311
|
+
print("Running: " + (isRunning ? "Yes" : "No"));
|
|
312
|
+
// If the service is running, fetch and display active streams.
|
|
313
|
+
if (isRunning) {
|
|
314
|
+
const port = await getServerPort();
|
|
315
|
+
const streamsData = await fetchActiveStreams(port);
|
|
316
|
+
if (streamsData === null) {
|
|
317
|
+
print("Active streams: (server not responding)");
|
|
318
|
+
}
|
|
319
|
+
else if (streamsData.count === 0) {
|
|
320
|
+
print("Active streams: 0/" + String(streamsData.limit));
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
print("Active streams: " + String(streamsData.count) + "/" + String(streamsData.limit));
|
|
324
|
+
for (const stream of streamsData.streams) {
|
|
325
|
+
// Use channel name if available, otherwise extract hostname from URL.
|
|
326
|
+
let name = stream.channel;
|
|
327
|
+
if (!name) {
|
|
328
|
+
try {
|
|
329
|
+
name = new URL(stream.url).hostname.replace(/^www\./, "");
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
name = "Stream " + String(stream.id);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
print(" • " + name + " (" + formatDuration(stream.duration) + ")");
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
if (!isInstalled) {
|
|
340
|
+
print("");
|
|
341
|
+
print("Run 'prismcast service install' to install the service.");
|
|
342
|
+
}
|
|
343
|
+
return 0;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Main handler for the `service` subcommand. Parses arguments and delegates to the appropriate handler.
|
|
347
|
+
* @param args - Arguments after 'service' (e.g., ['install', '--force']).
|
|
348
|
+
* @returns Exit code (0 for success, 1 for error).
|
|
349
|
+
*/
|
|
350
|
+
export async function handleServiceCommand(args) {
|
|
351
|
+
const command = args[0];
|
|
352
|
+
// Handle empty args (show help).
|
|
353
|
+
if (command === undefined) {
|
|
354
|
+
printServiceUsage();
|
|
355
|
+
return 0;
|
|
356
|
+
}
|
|
357
|
+
switch (command) {
|
|
358
|
+
case "install": {
|
|
359
|
+
const force = args.includes("--force") || args.includes("-f");
|
|
360
|
+
return handleInstall(force);
|
|
361
|
+
}
|
|
362
|
+
case "uninstall": {
|
|
363
|
+
return handleUninstall();
|
|
364
|
+
}
|
|
365
|
+
case "start": {
|
|
366
|
+
return handleStart();
|
|
367
|
+
}
|
|
368
|
+
case "stop": {
|
|
369
|
+
return handleStop();
|
|
370
|
+
}
|
|
371
|
+
case "restart": {
|
|
372
|
+
return handleRestart();
|
|
373
|
+
}
|
|
374
|
+
case "status": {
|
|
375
|
+
return handleStatus();
|
|
376
|
+
}
|
|
377
|
+
case "help":
|
|
378
|
+
case "--help":
|
|
379
|
+
case "-h": {
|
|
380
|
+
printServiceUsage();
|
|
381
|
+
return 0;
|
|
382
|
+
}
|
|
383
|
+
default: {
|
|
384
|
+
printError("Error: Unknown service command '" + command + "'.");
|
|
385
|
+
printError("");
|
|
386
|
+
printServiceUsage();
|
|
387
|
+
return 1;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/service/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Platform, ServiceManager } from "../utils/platform.js";
|
|
2
|
+
import type { Nullable } from "../types/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Options for generating a service file.
|
|
5
|
+
*/
|
|
6
|
+
export interface ServiceOptions {
|
|
7
|
+
envVars?: Record<string, string>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Interface for platform-specific service generators.
|
|
11
|
+
*/
|
|
12
|
+
export interface ServiceGenerator {
|
|
13
|
+
generate(options: ServiceOptions): string;
|
|
14
|
+
getInstallPath(): string;
|
|
15
|
+
install(content: string): Promise<void>;
|
|
16
|
+
isInstalled(): Promise<boolean>;
|
|
17
|
+
isRunning(): Promise<boolean>;
|
|
18
|
+
platform: Platform;
|
|
19
|
+
serviceManager: ServiceManager;
|
|
20
|
+
start(): Promise<void>;
|
|
21
|
+
stop(): Promise<void>;
|
|
22
|
+
uninstall(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Returns the service generator for the current platform.
|
|
26
|
+
* @returns The appropriate ServiceGenerator, or null if the platform is not supported.
|
|
27
|
+
*/
|
|
28
|
+
export declare function getServiceGenerator(): Nullable<ServiceGenerator>;
|
|
29
|
+
/**
|
|
30
|
+
* Collects environment variables that should be persisted in the service file. This includes settings that differ from defaults or have been explicitly configured.
|
|
31
|
+
* @returns A record of environment variable names to values.
|
|
32
|
+
*/
|
|
33
|
+
export declare function collectServiceEnvironment(): Record<string, string>;
|