prismcast 1.7.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/README.md +6 -6
  2. package/dist/app.js +24 -13
  3. package/dist/app.js.map +1 -1
  4. package/dist/browser/cdp.d.ts +4 -6
  5. package/dist/browser/cdp.js +13 -17
  6. package/dist/browser/cdp.js.map +1 -1
  7. package/dist/browser/index.js +3 -3
  8. package/dist/browser/index.js.map +1 -1
  9. package/dist/browser/login.js +11 -8
  10. package/dist/browser/login.js.map +1 -1
  11. package/dist/browser/precaching.d.ts +1 -1
  12. package/dist/browser/precaching.js +23 -23
  13. package/dist/browser/precaching.js.map +1 -1
  14. package/dist/browser/tuning/directv.js +4 -7
  15. package/dist/browser/tuning/directv.js.map +1 -1
  16. package/dist/browser/tuning/fox.js +1 -1
  17. package/dist/browser/tuning/fox.js.map +1 -1
  18. package/dist/browser/tuning/hbo.js +1 -1
  19. package/dist/browser/tuning/hbo.js.map +1 -1
  20. package/dist/browser/tuning/hulu.js +3 -3
  21. package/dist/browser/tuning/hulu.js.map +1 -1
  22. package/dist/browser/tuning/sling.js +2 -2
  23. package/dist/browser/tuning/sling.js.map +1 -1
  24. package/dist/channels/index.d.ts +2 -0
  25. package/dist/channels/index.js +438 -252
  26. package/dist/channels/index.js.map +1 -1
  27. package/dist/config/health.d.ts +3 -3
  28. package/dist/config/health.js +13 -18
  29. package/dist/config/health.js.map +1 -1
  30. package/dist/config/index.js +11 -2
  31. package/dist/config/index.js.map +1 -1
  32. package/dist/config/persistence.d.ts +59 -0
  33. package/dist/config/persistence.js +127 -0
  34. package/dist/config/persistence.js.map +1 -0
  35. package/dist/config/profiles.js +10 -10
  36. package/dist/config/profiles.js.map +1 -1
  37. package/dist/config/servicePacks.d.ts +46 -0
  38. package/dist/config/{providerPacks.js → servicePacks.js} +28 -31
  39. package/dist/config/servicePacks.js.map +1 -0
  40. package/dist/config/services.d.ts +202 -0
  41. package/dist/config/services.js +758 -0
  42. package/dist/config/services.js.map +1 -0
  43. package/dist/config/sites.js +61 -61
  44. package/dist/config/sites.js.map +1 -1
  45. package/dist/config/userChannels.d.ts +89 -27
  46. package/dist/config/userChannels.js +400 -184
  47. package/dist/config/userChannels.js.map +1 -1
  48. package/dist/config/userConfig.d.ts +13 -9
  49. package/dist/config/userConfig.js +78 -60
  50. package/dist/config/userConfig.js.map +1 -1
  51. package/dist/config/userProfiles.d.ts +31 -15
  52. package/dist/config/userProfiles.js +154 -123
  53. package/dist/config/userProfiles.js.map +1 -1
  54. package/dist/hdhr/channelMap.d.ts +1 -1
  55. package/dist/hdhr/channelMap.js +4 -7
  56. package/dist/hdhr/channelMap.js.map +1 -1
  57. package/dist/hdhr/discover.js +7 -15
  58. package/dist/hdhr/discover.js.map +1 -1
  59. package/dist/hdhr/index.js +6 -9
  60. package/dist/hdhr/index.js.map +1 -1
  61. package/dist/native/index.d.ts +2 -2
  62. package/dist/native/index.js +17 -27
  63. package/dist/native/index.js.map +1 -1
  64. package/dist/native/intercept.js +86 -89
  65. package/dist/native/intercept.js.map +1 -1
  66. package/dist/native/probe.js +2 -2
  67. package/dist/native/probe.js.map +1 -1
  68. package/dist/native/proxy.d.ts +2 -2
  69. package/dist/native/proxy.js +4 -4
  70. package/dist/native/proxy.js.map +1 -1
  71. package/dist/routes/assets.js +29 -51
  72. package/dist/routes/assets.js.map +1 -1
  73. package/dist/routes/auth.js +3 -3
  74. package/dist/routes/auth.js.map +1 -1
  75. package/dist/routes/channels.js +5 -11
  76. package/dist/routes/channels.js.map +1 -1
  77. package/dist/routes/components.d.ts +0 -8
  78. package/dist/routes/components.js +0 -19
  79. package/dist/routes/components.js.map +1 -1
  80. package/dist/routes/config/channels/index.d.ts +1 -1
  81. package/dist/routes/config/channels/index.js +1 -1
  82. package/dist/routes/config/channels/index.js.map +1 -1
  83. package/dist/routes/config/channels/routes.js +748 -420
  84. package/dist/routes/config/channels/routes.js.map +1 -1
  85. package/dist/routes/config/channels/table.d.ts +21 -6
  86. package/dist/routes/config/channels/table.js +456 -193
  87. package/dist/routes/config/channels/table.js.map +1 -1
  88. package/dist/routes/config/index.d.ts +2 -2
  89. package/dist/routes/config/index.js +3 -3
  90. package/dist/routes/config/index.js.map +1 -1
  91. package/dist/routes/config/{providers.js → services.js} +47 -42
  92. package/dist/routes/config/services.js.map +1 -0
  93. package/dist/routes/config/settings.js +88 -49
  94. package/dist/routes/config/settings.js.map +1 -1
  95. package/dist/routes/debug.js +5 -7
  96. package/dist/routes/debug.js.map +1 -1
  97. package/dist/routes/health.js +1 -1
  98. package/dist/routes/health.js.map +1 -1
  99. package/dist/routes/icons.d.ts +16 -0
  100. package/dist/routes/icons.js +44 -0
  101. package/dist/routes/icons.js.map +1 -0
  102. package/dist/routes/index.js +2 -2
  103. package/dist/routes/index.js.map +1 -1
  104. package/dist/routes/logs.js +4 -4
  105. package/dist/routes/logs.js.map +1 -1
  106. package/dist/routes/playlist.d.ts +6 -4
  107. package/dist/routes/playlist.js +98 -45
  108. package/dist/routes/playlist.js.map +1 -1
  109. package/dist/routes/root/content.js +94 -55
  110. package/dist/routes/root/content.js.map +1 -1
  111. package/dist/routes/root/scripts/channels.js +620 -478
  112. package/dist/routes/root/scripts/channels.js.map +1 -1
  113. package/dist/routes/root/scripts/config.js +884 -964
  114. package/dist/routes/root/scripts/config.js.map +1 -1
  115. package/dist/routes/root/scripts/shared.js +468 -188
  116. package/dist/routes/root/scripts/shared.js.map +1 -1
  117. package/dist/routes/root/scripts/status.js +252 -207
  118. package/dist/routes/root/scripts/status.js.map +1 -1
  119. package/dist/routes/root/styles.js +57 -8
  120. package/dist/routes/root/styles.js.map +1 -1
  121. package/dist/routes/services.d.ts +6 -0
  122. package/dist/routes/{providers.js → services.js} +43 -43
  123. package/dist/routes/services.js.map +1 -0
  124. package/dist/routes/ui.d.ts +1 -1
  125. package/dist/routes/ui.js +3 -1
  126. package/dist/routes/ui.js.map +1 -1
  127. package/dist/service/commands.js +8 -43
  128. package/dist/service/commands.js.map +1 -1
  129. package/dist/service/generators.d.ts +1 -1
  130. package/dist/service/generators.js +143 -41
  131. package/dist/service/generators.js.map +1 -1
  132. package/dist/streaming/codec.d.ts +20 -0
  133. package/dist/streaming/codec.js +68 -0
  134. package/dist/streaming/codec.js.map +1 -0
  135. package/dist/streaming/fmp4Segmenter.d.ts +2 -2
  136. package/dist/streaming/fmp4Segmenter.js.map +1 -1
  137. package/dist/streaming/hls.d.ts +4 -4
  138. package/dist/streaming/hls.js +35 -29
  139. package/dist/streaming/hls.js.map +1 -1
  140. package/dist/streaming/hlsResume.js +3 -3
  141. package/dist/streaming/hlsResume.js.map +1 -1
  142. package/dist/streaming/monitor.d.ts +2 -2
  143. package/dist/streaming/monitor.js +19 -13
  144. package/dist/streaming/monitor.js.map +1 -1
  145. package/dist/streaming/preroll.d.ts +15 -14
  146. package/dist/streaming/preroll.js +32 -12
  147. package/dist/streaming/preroll.js.map +1 -1
  148. package/dist/streaming/registry.d.ts +2 -2
  149. package/dist/streaming/registry.js +4 -8
  150. package/dist/streaming/registry.js.map +1 -1
  151. package/dist/streaming/setup.d.ts +4 -4
  152. package/dist/streaming/setup.js +28 -34
  153. package/dist/streaming/setup.js.map +1 -1
  154. package/dist/streaming/showInfo.js +8 -10
  155. package/dist/streaming/showInfo.js.map +1 -1
  156. package/dist/streaming/statusEmitter.d.ts +4 -3
  157. package/dist/streaming/statusEmitter.js +3 -3
  158. package/dist/streaming/statusEmitter.js.map +1 -1
  159. package/dist/types/channels.d.ts +18 -11
  160. package/dist/types/config.d.ts +3 -2
  161. package/dist/types/index.d.ts +4 -3
  162. package/dist/types/index.js +1 -0
  163. package/dist/types/index.js.map +1 -1
  164. package/dist/types/profiles.d.ts +9 -9
  165. package/dist/types/selection.d.ts +1 -1
  166. package/dist/types/shared.d.ts +1 -1
  167. package/dist/types/streaming.d.ts +8 -16
  168. package/dist/types/streaming.js +5 -1
  169. package/dist/types/streaming.js.map +1 -1
  170. package/dist/upgrade/commands.js +1 -16
  171. package/dist/upgrade/commands.js.map +1 -1
  172. package/dist/utils/chromeFetch.js +1 -1
  173. package/dist/utils/cliOutput.d.ts +10 -0
  174. package/dist/utils/cliOutput.js +17 -0
  175. package/dist/utils/cliOutput.js.map +1 -0
  176. package/dist/utils/debugFilter.js +3 -3
  177. package/dist/utils/debugFilter.js.map +1 -1
  178. package/dist/utils/fileLogger.js +4 -3
  179. package/dist/utils/fileLogger.js.map +1 -1
  180. package/dist/utils/format.d.ts +21 -4
  181. package/dist/utils/format.js +45 -7
  182. package/dist/utils/format.js.map +1 -1
  183. package/dist/utils/index.d.ts +1 -0
  184. package/dist/utils/index.js +1 -0
  185. package/dist/utils/index.js.map +1 -1
  186. package/dist/utils/logger.js +17 -27
  187. package/dist/utils/logger.js.map +1 -1
  188. package/dist/utils/morganStream.js +2 -2
  189. package/dist/utils/morganStream.js.map +1 -1
  190. package/dist/utils/platform.js +3 -2
  191. package/dist/utils/platform.js.map +1 -1
  192. package/dist/utils/retry.js +2 -4
  193. package/dist/utils/retry.js.map +1 -1
  194. package/dist/utils/streamContext.d.ts +7 -0
  195. package/dist/utils/streamContext.js +10 -1
  196. package/dist/utils/streamContext.js.map +1 -1
  197. package/dist/utils/version.js +4 -4
  198. package/dist/utils/version.js.map +1 -1
  199. package/package.json +5 -7
  200. package/dist/config/providerPacks.d.ts +0 -46
  201. package/dist/config/providerPacks.js.map +0 -1
  202. package/dist/config/providers.d.ts +0 -175
  203. package/dist/config/providers.js +0 -678
  204. package/dist/config/providers.js.map +0 -1
  205. package/dist/routes/config/providers.js.map +0 -1
  206. package/dist/routes/providers.d.ts +0 -6
  207. package/dist/routes/providers.js.map +0 -1
  208. /package/dist/routes/config/{providers.d.ts → services.d.ts} +0 -0
@@ -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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"}
@@ -170,16 +170,16 @@ export function getProfileForChannel(channel) {
170
170
  if (channel.dismissSelector !== undefined) {
171
171
  profile = { ...profile, dismissSelector: channel.dismissSelector };
172
172
  }
173
- if ((channel.scrollSelector !== undefined) || (channel.scrollTarget !== undefined) || (channel.scrollToBottom !== undefined)) {
174
- profile = {
175
- ...profile,
176
- channelSelection: {
177
- ...profile.channelSelection,
178
- ...(channel.scrollSelector !== undefined ? { scrollSelector: channel.scrollSelector } : {}),
179
- ...(channel.scrollTarget !== undefined ? { scrollTarget: channel.scrollTarget } : {}),
180
- ...(channel.scrollToBottom !== undefined ? { scrollToBottom: channel.scrollToBottom } : {})
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, loadUserChannels, saveUserChannels } from "./userChannels.js";
2
- import { getUserDomains, getUserProfiles, saveUserProfiles, validateImportedProfiles } from "./userProfiles.js";
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
- /* Provider packs bundle a profile, domain mapping(s), and optionally channels into a single JSON file for distribution. On import, the contents are validated
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 provider pack format version.
7
+ // Current service pack format version.
8
8
  const CURRENT_VERSION = 1;
9
9
  /**
10
- * Parses and validates a raw provider pack import. Checks the version field, validates profiles and domains via the userProfiles validation functions.
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 parseProviderPack(data) {
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: raw.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 importProviderPack.
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 provider pack by writing its contents to profiles.json and optionally channels.json. Returns a summary of what was added.
99
- * @param pack - The validated provider pack to import.
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 importProviderPack(pack, options = {}) {
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 saveUserProfiles(mergedProfiles, mergedDomains);
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
- const result = await loadUserChannels();
125
- if (result.parseError) {
126
- errors.push("Cannot import channels: channels file contains invalid JSON.");
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 provider pack JSON object. Optionally includes channels that reference the
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 provider pack object, or null if none of the requested profiles exist.
148
+ * @returns The service pack object, or null if none of the requested profiles exist.
152
149
  */
153
- export function exportProviderPack(profileKeys, options = {}) {
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 provider configuration property.
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=providerPacks.js.map
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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"}