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
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error thrown by `mutate()` when the backing file contains invalid JSON. Route handlers can catch this specifically to return 400 instead of 500. Background code
|
|
3
|
+
* paths that swallow errors via try/catch will handle it like any other Error.
|
|
4
|
+
*/
|
|
5
|
+
export declare class FileStoreParseError extends Error {
|
|
6
|
+
name: string;
|
|
7
|
+
constructor(label: string, filePath: string, parseMessage: string);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Result from a read-only file store access. Callers that only need data (export endpoints, API responses) use this without risking a save-back.
|
|
11
|
+
*/
|
|
12
|
+
export interface FileStoreReadResult<T> {
|
|
13
|
+
data: T;
|
|
14
|
+
parseError: boolean;
|
|
15
|
+
parseErrorMessage?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Options for creating a file store instance.
|
|
19
|
+
* @template T - The in-memory data type that callers mutate.
|
|
20
|
+
*/
|
|
21
|
+
export interface FileStoreOptions<T> {
|
|
22
|
+
beforeWrite?: (data: T) => unknown;
|
|
23
|
+
defaultValue: () => T;
|
|
24
|
+
label: string;
|
|
25
|
+
parse: (raw: string) => T;
|
|
26
|
+
path: () => string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A transactional file store that provides atomic writes, serialized mutations, corruption protection, and backup rotation. Callers interact with data through
|
|
30
|
+
* `mutate()` (serialized read-modify-write) and `read()` (read-only access). Direct file I/O is never exposed.
|
|
31
|
+
* @template T - The in-memory data type that callers mutate.
|
|
32
|
+
*/
|
|
33
|
+
export interface FileStore<T> {
|
|
34
|
+
/**
|
|
35
|
+
* Serialized read-modify-write operation. The mutation function receives the current data and modifies it in place. The store handles atomicity,
|
|
36
|
+
* serialization, corruption guard, backup, and beforeWrite transforms.
|
|
37
|
+
* @param fn - Mutation function. Receives current data. Modify in place; return value is ignored.
|
|
38
|
+
* @throws FileStoreParseError if the file contains invalid JSON (corruption guard).
|
|
39
|
+
*/
|
|
40
|
+
mutate(fn: (current: T) => void): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Read-only access to the current file contents. Returns the parsed data with parse status. Does not acquire the serialization lock...safe to call concurrently.
|
|
43
|
+
*/
|
|
44
|
+
read(): Promise<FileStoreReadResult<T>>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Creates a transactional file store instance. Each instance owns a single JSON file and provides serialized, atomic access to it.
|
|
48
|
+
*
|
|
49
|
+
* Safety guarantees:
|
|
50
|
+
* - **Atomic writes:** data is written to a `.tmp` file and renamed over the original. `rename()` is atomic on POSIX and NTFS.
|
|
51
|
+
* - **Serialization:** a promise chain ensures only one `mutate()` runs at a time. Concurrent callers queue behind the active operation.
|
|
52
|
+
* - **Corruption guard:** `mutate()` throws `FileStoreParseError` if the file contains invalid JSON, preventing save-over-corrupt cascades.
|
|
53
|
+
* - **Backup rotation:** before each write, the current file is copied to `.bak`. One-deep rotation provides a recovery path.
|
|
54
|
+
*
|
|
55
|
+
* @template T - The in-memory data type that callers mutate.
|
|
56
|
+
* @param options - Store configuration.
|
|
57
|
+
* @returns A FileStore instance with `read()` and `mutate()` methods.
|
|
58
|
+
*/
|
|
59
|
+
export declare function createFileStore<T>(options: FileStoreOptions<T>): FileStore<T>;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, HJD (https://github.com/hjdhjd). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* persistence.ts: Transactional file store for PrismCast configuration persistence.
|
|
4
|
+
*/
|
|
5
|
+
import { LOG, stringifySorted } from "../utils/index.js";
|
|
6
|
+
import fs from "node:fs";
|
|
7
|
+
import { getDataDir } from "./paths.js";
|
|
8
|
+
const { promises: fsPromises } = fs;
|
|
9
|
+
/**
|
|
10
|
+
* Error thrown by `mutate()` when the backing file contains invalid JSON. Route handlers can catch this specifically to return 400 instead of 500. Background code
|
|
11
|
+
* paths that swallow errors via try/catch will handle it like any other Error.
|
|
12
|
+
*/
|
|
13
|
+
export class FileStoreParseError extends Error {
|
|
14
|
+
name = "FileStoreParseError";
|
|
15
|
+
constructor(label, filePath, parseMessage) {
|
|
16
|
+
super("Cannot modify " + label + " (" + filePath + "): file contains invalid JSON. " + parseMessage);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// Store factory.
|
|
20
|
+
/**
|
|
21
|
+
* Creates a transactional file store instance. Each instance owns a single JSON file and provides serialized, atomic access to it.
|
|
22
|
+
*
|
|
23
|
+
* Safety guarantees:
|
|
24
|
+
* - **Atomic writes:** data is written to a `.tmp` file and renamed over the original. `rename()` is atomic on POSIX and NTFS.
|
|
25
|
+
* - **Serialization:** a promise chain ensures only one `mutate()` runs at a time. Concurrent callers queue behind the active operation.
|
|
26
|
+
* - **Corruption guard:** `mutate()` throws `FileStoreParseError` if the file contains invalid JSON, preventing save-over-corrupt cascades.
|
|
27
|
+
* - **Backup rotation:** before each write, the current file is copied to `.bak`. One-deep rotation provides a recovery path.
|
|
28
|
+
*
|
|
29
|
+
* @template T - The in-memory data type that callers mutate.
|
|
30
|
+
* @param options - Store configuration.
|
|
31
|
+
* @returns A FileStore instance with `read()` and `mutate()` methods.
|
|
32
|
+
*/
|
|
33
|
+
export function createFileStore(options) {
|
|
34
|
+
// Serialization queue. Each mutate() call chains onto this promise so operations execute one at a time.
|
|
35
|
+
let queue = Promise.resolve();
|
|
36
|
+
// Lazy data directory creation. The directory is created once on the first write, then skipped for subsequent writes.
|
|
37
|
+
let dataDirEnsured = false;
|
|
38
|
+
/**
|
|
39
|
+
* Reads the file from disk and parses it. Handles missing files (normal on first run), parse errors, and other read failures.
|
|
40
|
+
*/
|
|
41
|
+
async function read() {
|
|
42
|
+
const filePath = options.path();
|
|
43
|
+
try {
|
|
44
|
+
const content = await fsPromises.readFile(filePath, "utf-8");
|
|
45
|
+
try {
|
|
46
|
+
const data = options.parse(content);
|
|
47
|
+
return { data, parseError: false };
|
|
48
|
+
}
|
|
49
|
+
catch (parseError) {
|
|
50
|
+
const message = (parseError instanceof Error) ? parseError.message : String(parseError);
|
|
51
|
+
LOG.warn("Invalid JSON in %s file %s: %s. Using defaults.", options.label, filePath, message);
|
|
52
|
+
return { data: options.defaultValue(), parseError: true, parseErrorMessage: message };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
// File doesn't exist...this is normal on first run, use defaults.
|
|
57
|
+
if (error.code === "ENOENT") {
|
|
58
|
+
return { data: options.defaultValue(), parseError: false };
|
|
59
|
+
}
|
|
60
|
+
// Other read errors...log and use defaults.
|
|
61
|
+
LOG.warn("Failed to read %s file %s: %s. Using defaults.", options.label, filePath, (error instanceof Error) ? error.message : String(error));
|
|
62
|
+
return { data: options.defaultValue(), parseError: false };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Executes a single mutation: read, guard, mutate, backup, atomic write. Called under the serialization queue.
|
|
67
|
+
*/
|
|
68
|
+
async function doMutate(fn) {
|
|
69
|
+
const filePath = options.path();
|
|
70
|
+
// Read the current file state.
|
|
71
|
+
const result = await read();
|
|
72
|
+
// Corruption guard: refuse to modify a file that can't be parsed. This prevents the cascade where a corrupt file gets overwritten with nearly-empty data.
|
|
73
|
+
if (result.parseError) {
|
|
74
|
+
throw new FileStoreParseError(options.label, filePath, result.parseErrorMessage ?? "Unknown parse error.");
|
|
75
|
+
}
|
|
76
|
+
// Apply the caller's mutation. Callbacks modify data in place.
|
|
77
|
+
fn(result.data);
|
|
78
|
+
// Apply the beforeWrite transform to produce the serializable form.
|
|
79
|
+
const serializable = options.beforeWrite ? options.beforeWrite(result.data) : result.data;
|
|
80
|
+
const content = stringifySorted(serializable) + "\n";
|
|
81
|
+
// Ensure the data directory exists on the first write.
|
|
82
|
+
if (!dataDirEnsured) {
|
|
83
|
+
await fsPromises.mkdir(getDataDir(), { recursive: true });
|
|
84
|
+
dataDirEnsured = true;
|
|
85
|
+
}
|
|
86
|
+
// Backup: copy the current file to .bak before overwriting. Swallow ENOENT (file doesn't exist yet on first write).
|
|
87
|
+
const bakPath = filePath + ".bak";
|
|
88
|
+
try {
|
|
89
|
+
await fsPromises.copyFile(filePath, bakPath);
|
|
90
|
+
}
|
|
91
|
+
catch (backupError) {
|
|
92
|
+
if (backupError.code !== "ENOENT") {
|
|
93
|
+
LOG.warn("Failed to back up %s: %s.", filePath, (backupError instanceof Error) ? backupError.message : String(backupError));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Atomic write: write to a temp file, then rename over the original. rename() is atomic on POSIX and NTFS filesystems.
|
|
97
|
+
const tmpPath = filePath + ".tmp";
|
|
98
|
+
try {
|
|
99
|
+
await fsPromises.writeFile(tmpPath, content, "utf-8");
|
|
100
|
+
await fsPromises.rename(tmpPath, filePath);
|
|
101
|
+
}
|
|
102
|
+
catch (writeError) {
|
|
103
|
+
// Attempt cleanup of the temp file on failure.
|
|
104
|
+
try {
|
|
105
|
+
await fsPromises.unlink(tmpPath);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Cleanup is best-effort.
|
|
109
|
+
}
|
|
110
|
+
throw writeError;
|
|
111
|
+
}
|
|
112
|
+
LOG.info("Saved %s to %s.", options.label, filePath);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Enqueues a mutation onto the serialization queue. The promise chain ensures only one mutation runs at a time. Errors propagate to the caller but do not
|
|
116
|
+
* break the chain for subsequent callers.
|
|
117
|
+
*/
|
|
118
|
+
async function mutate(fn) {
|
|
119
|
+
const operation = queue.then(async () => doMutate(fn));
|
|
120
|
+
// Swallow errors on the chain reference so future operations can proceed. The error still propagates to the caller via the returned promise.
|
|
121
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function -- Intentional no-op: errors are propagated to the caller via the returned promise.
|
|
122
|
+
queue = operation.catch(() => { });
|
|
123
|
+
return operation;
|
|
124
|
+
}
|
|
125
|
+
return { mutate, read };
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/config/persistence.ts"],"names":[],"mappings":"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"}
|
package/dist/config/profiles.js
CHANGED
|
@@ -170,16 +170,16 @@ export function getProfileForChannel(channel) {
|
|
|
170
170
|
if (channel.dismissSelector !== undefined) {
|
|
171
171
|
profile = { ...profile, dismissSelector: channel.dismissSelector };
|
|
172
172
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
};
|
|
173
|
+
// Merge scroll-related channel selection overrides into the profile's channelSelection object.
|
|
174
|
+
const scrollKeys = ["scrollSelector", "scrollTarget", "scrollToBottom"];
|
|
175
|
+
const scrollOverrides = {};
|
|
176
|
+
for (const key of scrollKeys) {
|
|
177
|
+
if (channel[key] !== undefined) {
|
|
178
|
+
scrollOverrides[key] = channel[key];
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (Object.keys(scrollOverrides).length > 0) {
|
|
182
|
+
profile = { ...profile, channelSelection: { ...profile.channelSelection, ...scrollOverrides } };
|
|
183
183
|
}
|
|
184
184
|
return { profile, profileName };
|
|
185
185
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/config/profiles.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/config/profiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ServicePack } from "../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Result of parsing a service pack.
|
|
4
|
+
*/
|
|
5
|
+
export interface ParseResult {
|
|
6
|
+
errors: string[];
|
|
7
|
+
pack?: ServicePack;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Summary of what was imported from a service pack. The primary import (profiles and domains) is tracked separately from the secondary channel import so that
|
|
11
|
+
* callers can report partial success accurately — profiles may save while channels fail.
|
|
12
|
+
*/
|
|
13
|
+
export interface ImportSummary {
|
|
14
|
+
channelsAdded: number;
|
|
15
|
+
domainsAdded: number;
|
|
16
|
+
errors: string[];
|
|
17
|
+
profilesAdded: number;
|
|
18
|
+
success: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parses and validates a raw service pack import. Checks the version field, validates profiles and domains via the userProfiles validation functions.
|
|
22
|
+
* @param data - The raw JSON data to parse.
|
|
23
|
+
* @returns Parse result with validated pack or errors.
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseServicePack(data: unknown): ParseResult;
|
|
26
|
+
/**
|
|
27
|
+
* Imports a validated service pack by writing its contents to profiles.json and optionally channels.json. Returns a summary of what was added.
|
|
28
|
+
* @param pack - The validated service pack to import.
|
|
29
|
+
* @param options - Import options. Set skipChannels to true to skip importing channels even if the pack contains them.
|
|
30
|
+
* @returns Summary of what was imported.
|
|
31
|
+
*/
|
|
32
|
+
export declare function importServicePack(pack: ServicePack, options?: {
|
|
33
|
+
skipChannels?: boolean;
|
|
34
|
+
}): Promise<ImportSummary>;
|
|
35
|
+
/**
|
|
36
|
+
* Exports one or more user profiles and their associated domain mappings as a service pack JSON object. Optionally includes channels that reference the
|
|
37
|
+
* selected profiles.
|
|
38
|
+
* @param profileKeys - Array of user profile keys to export.
|
|
39
|
+
* @param options - Export options controlling what to include.
|
|
40
|
+
* @returns The service pack object, or null if none of the requested profiles exist.
|
|
41
|
+
*/
|
|
42
|
+
export declare function exportServicePack(profileKeys: string[], options?: {
|
|
43
|
+
includeChannels?: boolean;
|
|
44
|
+
includeDomains?: boolean;
|
|
45
|
+
name?: string;
|
|
46
|
+
}): ServicePack | null;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { getChannelListing,
|
|
2
|
-
import { getUserDomains, getUserProfiles,
|
|
1
|
+
import { getChannelListing, mutateChannels } from "./userChannels.js";
|
|
2
|
+
import { getUserDomains, getUserProfiles, mutateProfiles, normalizeLegacyProfileFlags, validateImportedProfiles } from "./userProfiles.js";
|
|
3
3
|
import { sanitizeString } from "../utils/index.js";
|
|
4
|
-
/*
|
|
4
|
+
/* Service packs bundle a profile, domain mapping(s), and optionally channels into a single JSON file for distribution. On import, the contents are validated
|
|
5
5
|
* and split into profiles.json and channels.json. On export, a user profile and its associated domain mappings and channels are packaged for sharing.
|
|
6
6
|
*/
|
|
7
|
-
// Current
|
|
7
|
+
// Current service pack format version.
|
|
8
8
|
const CURRENT_VERSION = 1;
|
|
9
9
|
/**
|
|
10
|
-
* Parses and validates a raw
|
|
10
|
+
* Parses and validates a raw service pack import. Checks the version field, validates profiles and domains via the userProfiles validation functions.
|
|
11
11
|
* @param data - The raw JSON data to parse.
|
|
12
12
|
* @returns Parse result with validated pack or errors.
|
|
13
13
|
*/
|
|
14
|
-
export function
|
|
14
|
+
export function parseServicePack(data) {
|
|
15
15
|
const errors = [];
|
|
16
16
|
if ((typeof data !== "object") || (data === null) || Array.isArray(data)) {
|
|
17
17
|
return { errors: ["Invalid format: expected a JSON object."] };
|
|
@@ -37,10 +37,13 @@ export function parseProviderPack(data) {
|
|
|
37
37
|
if (errors.length > 0) {
|
|
38
38
|
return { errors };
|
|
39
39
|
}
|
|
40
|
+
// Normalize legacy profile field names before validation so that old service packs with renamed fields (e.g., noVideo → staticCapture) pass validation cleanly.
|
|
41
|
+
const rawProfiles = raw.profiles;
|
|
42
|
+
normalizeLegacyProfileFlags(rawProfiles);
|
|
40
43
|
// Validate the profiles and domains using the shared validation pipeline.
|
|
41
44
|
const validationResult = validateImportedProfiles({
|
|
42
45
|
domains: raw.domains,
|
|
43
|
-
profiles:
|
|
46
|
+
profiles: rawProfiles
|
|
44
47
|
});
|
|
45
48
|
if (!validationResult.valid) {
|
|
46
49
|
return { errors: validationResult.errors };
|
|
@@ -52,7 +55,7 @@ export function parseProviderPack(data) {
|
|
|
52
55
|
errors.push("Invalid 'channels' field: expected an object.");
|
|
53
56
|
}
|
|
54
57
|
else {
|
|
55
|
-
// Basic channel structure validation — detailed validation happens during
|
|
58
|
+
// Basic channel structure validation — detailed validation happens during importServicePack.
|
|
56
59
|
for (const [key, value] of Object.entries(raw.channels)) {
|
|
57
60
|
if ((typeof value === "object") && (value !== null) && !Array.isArray(value)) {
|
|
58
61
|
const ch = value;
|
|
@@ -95,22 +98,20 @@ export function parseProviderPack(data) {
|
|
|
95
98
|
return { errors: [], pack };
|
|
96
99
|
}
|
|
97
100
|
/**
|
|
98
|
-
* Imports a validated
|
|
99
|
-
* @param pack - The validated
|
|
101
|
+
* Imports a validated service pack by writing its contents to profiles.json and optionally channels.json. Returns a summary of what was added.
|
|
102
|
+
* @param pack - The validated service pack to import.
|
|
100
103
|
* @param options - Import options. Set skipChannels to true to skip importing channels even if the pack contains them.
|
|
101
104
|
* @returns Summary of what was imported.
|
|
102
105
|
*/
|
|
103
|
-
export async function
|
|
106
|
+
export async function importServicePack(pack, options = {}) {
|
|
104
107
|
const errors = [];
|
|
105
|
-
// Merge profiles: add pack profiles to existing user profiles.
|
|
106
|
-
const existingProfiles = getUserProfiles();
|
|
107
|
-
const existingDomains = getUserDomains();
|
|
108
|
-
const mergedProfiles = { ...existingProfiles, ...pack.profiles };
|
|
109
|
-
const mergedDomains = { ...existingDomains, ...(pack.domains ?? {}) };
|
|
110
108
|
const profilesAdded = Object.keys(pack.profiles).length;
|
|
111
109
|
const domainsAdded = Object.keys(pack.domains ?? {}).length;
|
|
112
110
|
try {
|
|
113
|
-
await
|
|
111
|
+
await mutateProfiles((data) => {
|
|
112
|
+
Object.assign(data.profiles, pack.profiles);
|
|
113
|
+
Object.assign(data.domains, pack.domains ?? {});
|
|
114
|
+
});
|
|
114
115
|
}
|
|
115
116
|
catch (error) {
|
|
116
117
|
errors.push("Failed to save profiles: " + ((error instanceof Error) ? error.message : String(error)));
|
|
@@ -120,16 +121,12 @@ export async function importProviderPack(pack, options = {}) {
|
|
|
120
121
|
// profiles and domains were already saved successfully above.
|
|
121
122
|
let channelsAdded = 0;
|
|
122
123
|
if (!options.skipChannels && pack.channels && (Object.keys(pack.channels).length > 0)) {
|
|
124
|
+
const packChannels = pack.channels;
|
|
123
125
|
try {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
else {
|
|
129
|
-
const mergedChannels = { ...result.channels, ...pack.channels };
|
|
130
|
-
await saveUserChannels(mergedChannels);
|
|
131
|
-
channelsAdded = Object.keys(pack.channels).length;
|
|
132
|
-
}
|
|
126
|
+
await mutateChannels((channels) => {
|
|
127
|
+
Object.assign(channels, packChannels);
|
|
128
|
+
});
|
|
129
|
+
channelsAdded = Object.keys(packChannels).length;
|
|
133
130
|
}
|
|
134
131
|
catch (error) {
|
|
135
132
|
errors.push("Failed to save channels: " + ((error instanceof Error) ? error.message : String(error)));
|
|
@@ -144,13 +141,13 @@ export async function importProviderPack(pack, options = {}) {
|
|
|
144
141
|
};
|
|
145
142
|
}
|
|
146
143
|
/**
|
|
147
|
-
* Exports one or more user profiles and their associated domain mappings as a
|
|
144
|
+
* Exports one or more user profiles and their associated domain mappings as a service pack JSON object. Optionally includes channels that reference the
|
|
148
145
|
* selected profiles.
|
|
149
146
|
* @param profileKeys - Array of user profile keys to export.
|
|
150
147
|
* @param options - Export options controlling what to include.
|
|
151
|
-
* @returns The
|
|
148
|
+
* @returns The service pack object, or null if none of the requested profiles exist.
|
|
152
149
|
*/
|
|
153
|
-
export function
|
|
150
|
+
export function exportServicePack(profileKeys, options = {}) {
|
|
154
151
|
const userProfiles = getUserProfiles();
|
|
155
152
|
const matchedProfiles = {};
|
|
156
153
|
for (const key of profileKeys) {
|
|
@@ -188,7 +185,7 @@ export function exportProviderPack(profileKeys, options = {}) {
|
|
|
188
185
|
const channels = {};
|
|
189
186
|
for (const entry of listing) {
|
|
190
187
|
if (entry.channel.profile && keySet.has(entry.channel.profile)) {
|
|
191
|
-
// Strip hdhrEnabled from exported channels — it's a local deployment preference, not a
|
|
188
|
+
// Strip hdhrEnabled from exported channels — it's a local deployment preference, not a service configuration property.
|
|
192
189
|
const exportChannel = { ...entry.channel };
|
|
193
190
|
Reflect.deleteProperty(exportChannel, "hdhrEnabled");
|
|
194
191
|
channels[entry.key] = exportChannel;
|
|
@@ -200,4 +197,4 @@ export function exportProviderPack(profileKeys, options = {}) {
|
|
|
200
197
|
}
|
|
201
198
|
return pack;
|
|
202
199
|
}
|
|
203
|
-
//# sourceMappingURL=
|
|
200
|
+
//# sourceMappingURL=servicePacks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"servicePacks.js","sourceRoot":"","sources":["../../src/config/servicePacks.ts"],"names":[],"mappings":"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"}
|