prismcast 1.9.0 → 1.10.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/dist/app.d.ts +1 -1
- package/dist/app.js +27 -9
- package/dist/app.js.map +1 -1
- package/dist/browser/cdp.js +7 -7
- package/dist/browser/cdp.js.map +1 -1
- package/dist/browser/channelSelection.d.ts +41 -11
- package/dist/browser/channelSelection.js +75 -24
- package/dist/browser/channelSelection.js.map +1 -1
- package/dist/browser/display.d.ts +1 -1
- package/dist/browser/index.d.ts +8 -8
- package/dist/browser/index.js +42 -43
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/login.d.ts +2 -2
- package/dist/browser/login.js +1 -1
- package/dist/browser/manifestInterceptor.d.ts +77 -0
- package/dist/browser/manifestInterceptor.js +323 -0
- package/dist/browser/manifestInterceptor.js.map +1 -0
- package/dist/browser/precaching.js +4 -4
- package/dist/browser/tuning/comcastPolymer.d.ts +1 -1
- package/dist/browser/tuning/cox.d.ts +1 -1
- package/dist/browser/tuning/directv.d.ts +1 -1
- package/dist/browser/tuning/directv.js +61 -62
- package/dist/browser/tuning/directv.js.map +1 -1
- package/dist/browser/tuning/fox.d.ts +1 -1
- package/dist/browser/tuning/fox.js +171 -14
- package/dist/browser/tuning/fox.js.map +1 -1
- package/dist/browser/tuning/hbo.d.ts +1 -1
- package/dist/browser/tuning/hbo.js +6 -6
- package/dist/browser/tuning/hbo.js.map +1 -1
- package/dist/browser/tuning/hulu.d.ts +1 -1
- package/dist/browser/tuning/hulu.js +117 -110
- package/dist/browser/tuning/hulu.js.map +1 -1
- package/dist/browser/tuning/shared.d.ts +3 -3
- package/dist/browser/tuning/shared.js +5 -5
- package/dist/browser/tuning/sling.d.ts +1 -1
- package/dist/browser/tuning/sling.js +28 -28
- package/dist/browser/tuning/sling.js.map +1 -1
- package/dist/browser/tuning/spectrum.d.ts +1 -1
- package/dist/browser/tuning/spectrum.js +21 -22
- package/dist/browser/tuning/spectrum.js.map +1 -1
- package/dist/browser/tuning/thumbnailRow.d.ts +1 -1
- package/dist/browser/tuning/thumbnailRow.js +1 -1
- package/dist/browser/tuning/tileClick.d.ts +1 -1
- package/dist/browser/tuning/tileClick.js +5 -5
- package/dist/browser/tuning/xfinity.d.ts +1 -1
- package/dist/browser/tuning/youtubeTv.d.ts +1 -1
- package/dist/browser/tuning/youtubeTv.js +17 -18
- package/dist/browser/tuning/youtubeTv.js.map +1 -1
- package/dist/browser/video.d.ts +20 -6
- package/dist/browser/video.js +30 -38
- package/dist/browser/video.js.map +1 -1
- package/dist/channels/index.d.ts +1 -2
- package/dist/channels/index.js +73 -40
- package/dist/channels/index.js.map +1 -1
- package/dist/config/channelForm.d.ts +58 -0
- package/dist/config/channelForm.js +129 -0
- package/dist/config/channelForm.js.map +1 -0
- package/dist/config/consistencyProbe.d.ts +7 -0
- package/dist/config/consistencyProbe.js +143 -0
- package/dist/config/consistencyProbe.js.map +1 -0
- package/dist/config/health.d.ts +4 -3
- package/dist/config/health.js +75 -62
- package/dist/config/health.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.js +19 -12
- package/dist/config/index.js.map +1 -1
- package/dist/config/paths.d.ts +9 -3
- package/dist/config/paths.js +12 -4
- package/dist/config/paths.js.map +1 -1
- package/dist/config/persistence.context.d.ts +8 -0
- package/dist/config/persistence.context.js +30 -0
- package/dist/config/persistence.context.js.map +1 -0
- package/dist/config/persistence.d.ts +110 -12
- package/dist/config/persistence.js +351 -32
- package/dist/config/persistence.js.map +1 -1
- package/dist/config/presets.d.ts +14 -4
- package/dist/config/presets.js +84 -75
- package/dist/config/presets.js.map +1 -1
- package/dist/config/profiles.d.ts +2 -2
- package/dist/config/profiles.js +7 -9
- package/dist/config/profiles.js.map +1 -1
- package/dist/config/servicePacks.d.ts +2 -2
- package/dist/config/servicePacks.js +28 -28
- package/dist/config/servicePacks.js.map +1 -1
- package/dist/config/services.d.ts +62 -36
- package/dist/config/services.js +150 -136
- package/dist/config/services.js.map +1 -1
- package/dist/config/sites.d.ts +3 -3
- package/dist/config/sites.js +16 -16
- package/dist/config/sites.js.map +1 -1
- package/dist/config/userChannels.d.ts +500 -41
- package/dist/config/userChannels.js +1201 -312
- package/dist/config/userChannels.js.map +1 -1
- package/dist/config/userConfig.d.ts +103 -10
- package/dist/config/userConfig.js +277 -117
- package/dist/config/userConfig.js.map +1 -1
- package/dist/config/userProfiles.d.ts +4 -2
- package/dist/config/userProfiles.js +72 -26
- package/dist/config/userProfiles.js.map +1 -1
- package/dist/hdhr/channelMap.js +8 -11
- package/dist/hdhr/channelMap.js.map +1 -1
- package/dist/hdhr/deviceId.js +10 -9
- package/dist/hdhr/deviceId.js.map +1 -1
- package/dist/hdhr/discover.js +4 -5
- package/dist/hdhr/discover.js.map +1 -1
- package/dist/hdhr/index.js +6 -10
- package/dist/hdhr/index.js.map +1 -1
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/dist/native/codecInference.d.ts +44 -0
- package/dist/native/codecInference.js +327 -0
- package/dist/native/codecInference.js.map +1 -0
- package/dist/native/decrypt.d.ts +1 -1
- package/dist/native/index.d.ts +5 -5
- package/dist/native/index.js +42 -64
- package/dist/native/index.js.map +1 -1
- package/dist/native/probe.d.ts +27 -9
- package/dist/native/probe.js +158 -67
- package/dist/native/probe.js.map +1 -1
- package/dist/native/proxy.d.ts +4 -2
- package/dist/native/proxy.js +52 -49
- package/dist/native/proxy.js.map +1 -1
- package/dist/native/tokenExpiry.d.ts +22 -0
- package/dist/native/tokenExpiry.js +153 -0
- package/dist/native/tokenExpiry.js.map +1 -0
- package/dist/routes/auth.js +6 -10
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/components.js +2 -2
- package/dist/routes/components.js.map +1 -1
- package/dist/routes/config/channels/endpoints/browse.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/browse.js +195 -0
- package/dist/routes/config/channels/endpoints/browse.js.map +1 -0
- package/dist/routes/config/channels/endpoints/bulk.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/bulk.js +128 -0
- package/dist/routes/config/channels/endpoints/bulk.js.map +1 -0
- package/dist/routes/config/channels/endpoints/crud.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/crud.js +504 -0
- package/dist/routes/config/channels/endpoints/crud.js.map +1 -0
- package/dist/routes/config/channels/endpoints/importExport.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/importExport.js +131 -0
- package/dist/routes/config/channels/endpoints/importExport.js.map +1 -0
- package/dist/routes/config/channels/endpoints/predefined.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/predefined.js +78 -0
- package/dist/routes/config/channels/endpoints/predefined.js.map +1 -0
- package/dist/routes/config/channels/endpoints/prefs.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/prefs.js +58 -0
- package/dist/routes/config/channels/endpoints/prefs.js.map +1 -0
- package/dist/routes/config/channels/endpoints/service.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/service.js +149 -0
- package/dist/routes/config/channels/endpoints/service.js.map +1 -0
- package/dist/routes/config/channels/endpoints/tags.d.ts +6 -0
- package/dist/routes/config/channels/endpoints/tags.js +185 -0
- package/dist/routes/config/channels/endpoints/tags.js.map +1 -0
- package/dist/routes/config/channels/http/handler.d.ts +10 -0
- package/dist/routes/config/channels/http/handler.js +20 -0
- package/dist/routes/config/channels/http/handler.js.map +1 -0
- package/dist/routes/config/channels/http/playlistHint.d.ts +25 -0
- package/dist/routes/config/channels/http/playlistHint.js +40 -0
- package/dist/routes/config/channels/http/playlistHint.js.map +1 -0
- package/dist/routes/config/channels/http/serviceWarning.d.ts +10 -0
- package/dist/routes/config/channels/http/serviceWarning.js +28 -0
- package/dist/routes/config/channels/http/serviceWarning.js.map +1 -0
- package/dist/routes/config/channels/index.d.ts +3 -3
- 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.d.ts → setup.d.ts} +1 -1
- package/dist/routes/config/channels/setup.js +23 -0
- package/dist/routes/config/channels/setup.js.map +1 -0
- package/dist/routes/config/channels/table.d.ts +9 -9
- package/dist/routes/config/channels/table.js +124 -76
- package/dist/routes/config/channels/table.js.map +1 -1
- package/dist/routes/config/http/envelope.d.ts +111 -0
- package/dist/routes/config/http/envelope.js +103 -0
- package/dist/routes/config/http/envelope.js.map +1 -0
- package/dist/routes/config/index.d.ts +9 -9
- package/dist/routes/config/index.js +2 -2
- package/dist/routes/config/index.js.map +1 -1
- package/dist/routes/config/services.js +69 -68
- package/dist/routes/config/services.js.map +1 -1
- package/dist/routes/config/settings.d.ts +1 -1
- package/dist/routes/config/settings.js +45 -38
- package/dist/routes/config/settings.js.map +1 -1
- package/dist/routes/debug.js +12 -11
- package/dist/routes/debug.js.map +1 -1
- package/dist/routes/icons.js +2 -2
- package/dist/routes/icons.js.map +1 -1
- package/dist/routes/logs.js +19 -30
- package/dist/routes/logs.js.map +1 -1
- package/dist/routes/mpegts.js +1 -1
- package/dist/routes/playlist.d.ts +1 -1
- package/dist/routes/playlist.js +37 -26
- package/dist/routes/playlist.js.map +1 -1
- package/dist/routes/root/content.js +27 -6
- package/dist/routes/root/content.js.map +1 -1
- package/dist/routes/root/index.js +2 -5
- package/dist/routes/root/index.js.map +1 -1
- package/dist/routes/root/scripts/channels.js +16 -16
- package/dist/routes/root/scripts/channels.js.map +1 -1
- package/dist/routes/root/scripts/config.js +59 -59
- package/dist/routes/root/scripts/config.js.map +1 -1
- package/dist/routes/root/scripts/index.d.ts +4 -4
- package/dist/routes/root/scripts/shared.js +24 -10
- package/dist/routes/root/scripts/shared.js.map +1 -1
- package/dist/routes/root/scripts/status.d.ts +4 -0
- package/dist/routes/root/scripts/status.handlers.d.ts +182 -0
- package/dist/routes/root/scripts/status.handlers.js +713 -0
- package/dist/routes/root/scripts/status.handlers.js.map +1 -0
- package/dist/routes/root/scripts/status.js +86 -488
- package/dist/routes/root/scripts/status.js.map +1 -1
- package/dist/routes/root/styles.js +5 -5
- package/dist/routes/services.js +18 -15
- package/dist/routes/services.js.map +1 -1
- package/dist/routes/sse.d.ts +16 -0
- package/dist/routes/sse.js +29 -0
- package/dist/routes/sse.js.map +1 -0
- package/dist/routes/streams.js +10 -23
- package/dist/routes/streams.js.map +1 -1
- package/dist/routes/ui.d.ts +2 -2
- package/dist/routes/upgrade.js +6 -7
- package/dist/routes/upgrade.js.map +1 -1
- package/dist/service/commands.context.d.ts +6 -0
- package/dist/service/commands.context.js +47 -0
- package/dist/service/commands.context.js.map +1 -0
- package/dist/service/commands.d.ts +53 -8
- package/dist/service/commands.js +171 -188
- package/dist/service/commands.js.map +1 -1
- package/dist/service/generators.context.d.ts +6 -0
- package/dist/service/generators.context.js +45 -0
- package/dist/service/generators.context.js.map +1 -0
- package/dist/service/generators.d.ts +56 -16
- package/dist/service/generators.js +499 -383
- package/dist/service/generators.js.map +1 -1
- package/dist/service/index.d.ts +2 -2
- package/dist/streaming/clients.d.ts +2 -2
- package/dist/streaming/clients.js +2 -2
- package/dist/streaming/codec.d.ts +2 -2
- package/dist/streaming/codec.js +0 -1
- package/dist/streaming/codec.js.map +1 -1
- package/dist/streaming/fmp4Segmenter.d.ts +2 -2
- package/dist/streaming/fmp4Segmenter.js +12 -12
- package/dist/streaming/hls.d.ts +3 -3
- package/dist/streaming/hls.js +81 -70
- package/dist/streaming/hls.js.map +1 -1
- package/dist/streaming/hlsResume.d.ts +3 -3
- package/dist/streaming/hlsResume.js +5 -5
- package/dist/streaming/hlsSegments.d.ts +5 -2
- package/dist/streaming/hlsSegments.js +14 -9
- package/dist/streaming/hlsSegments.js.map +1 -1
- package/dist/streaming/monitor.d.ts +12 -12
- package/dist/streaming/monitor.js +80 -54
- package/dist/streaming/monitor.js.map +1 -1
- package/dist/streaming/mp4Parser.d.ts +34 -4
- package/dist/streaming/mp4Parser.js +111 -29
- package/dist/streaming/mp4Parser.js.map +1 -1
- package/dist/streaming/mpegts.d.ts +1 -1
- package/dist/streaming/mpegts.js +13 -10
- package/dist/streaming/mpegts.js.map +1 -1
- package/dist/streaming/playlistBuilder.d.ts +1 -1
- package/dist/streaming/playlistBuilder.js +2 -2
- package/dist/streaming/preroll.d.ts +9 -9
- package/dist/streaming/preroll.js +39 -41
- package/dist/streaming/preroll.js.map +1 -1
- package/dist/streaming/pretune.js +4 -4
- package/dist/streaming/pretune.js.map +1 -1
- package/dist/streaming/recovery.d.ts +3 -3
- package/dist/streaming/recovery.js +4 -4
- package/dist/streaming/registry.d.ts +6 -6
- package/dist/streaming/setup.d.ts +9 -8
- package/dist/streaming/setup.js +97 -49
- package/dist/streaming/setup.js.map +1 -1
- package/dist/streaming/showInfo.d.ts +9 -3
- package/dist/streaming/showInfo.js +26 -18
- package/dist/streaming/showInfo.js.map +1 -1
- package/dist/streaming/statusEmitter.d.ts +4 -4
- package/dist/streaming/statusEmitter.js +2 -2
- package/dist/types/channels.d.ts +133 -34
- package/dist/types/channels.js +39 -1
- package/dist/types/channels.js.map +1 -1
- package/dist/types/config.d.ts +20 -1
- package/dist/types/index.d.ts +9 -8
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/profiles.d.ts +5 -4
- package/dist/types/selection.d.ts +48 -4
- package/dist/types/streaming.d.ts +1 -1
- package/dist/upgrade/commands.context.d.ts +6 -0
- package/dist/upgrade/commands.context.js +29 -0
- package/dist/upgrade/commands.context.js.map +1 -0
- package/dist/upgrade/commands.d.ts +29 -2
- package/dist/upgrade/commands.js +87 -134
- package/dist/upgrade/commands.js.map +1 -1
- package/dist/upgrade/detection.context.d.ts +6 -0
- package/dist/upgrade/detection.context.js +24 -0
- package/dist/upgrade/detection.context.js.map +1 -0
- package/dist/upgrade/detection.d.ts +140 -10
- package/dist/upgrade/detection.js +153 -66
- package/dist/upgrade/detection.js.map +1 -1
- package/dist/upgrade/index.d.ts +2 -2
- package/dist/utils/chromeFetch.d.ts +1 -1
- package/dist/utils/chromeFetch.js +1 -1
- package/dist/utils/clock.d.ts +14 -0
- package/dist/utils/clock.js +28 -0
- package/dist/utils/clock.js.map +1 -0
- package/dist/utils/debugFilter.d.ts +1 -1
- package/dist/utils/debugFilter.js +6 -4
- package/dist/utils/debugFilter.js.map +1 -1
- package/dist/utils/delay.d.ts +2 -3
- package/dist/utils/delay.js +10 -16
- package/dist/utils/delay.js.map +1 -1
- package/dist/utils/evaluate.js +12 -14
- package/dist/utils/evaluate.js.map +1 -1
- package/dist/utils/ffmpeg.context.d.ts +6 -0
- package/dist/utils/ffmpeg.context.js +31 -0
- package/dist/utils/ffmpeg.context.js.map +1 -0
- package/dist/utils/ffmpeg.d.ts +85 -29
- package/dist/utils/ffmpeg.js +126 -129
- package/dist/utils/ffmpeg.js.map +1 -1
- package/dist/utils/fileLogger.d.ts +18 -2
- package/dist/utils/fileLogger.js +58 -30
- package/dist/utils/fileLogger.js.map +1 -1
- package/dist/utils/format.d.ts +1 -1
- package/dist/utils/format.js +2 -2
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/html.js +1 -3
- package/dist/utils/html.js.map +1 -1
- package/dist/utils/index.d.ts +21 -20
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.js +16 -20
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/m3u.d.ts +18 -3
- package/dist/utils/m3u.js +28 -14
- package/dist/utils/m3u.js.map +1 -1
- package/dist/utils/memo.d.ts +19 -0
- package/dist/utils/memo.js +53 -0
- package/dist/utils/memo.js.map +1 -0
- package/dist/utils/morganStream.js +2 -2
- package/dist/utils/morganStream.js.map +1 -1
- package/dist/utils/pid.d.ts +2 -2
- package/dist/utils/pid.js +2 -2
- package/dist/utils/platform.d.ts +1 -1
- package/dist/utils/platform.js +3 -3
- package/dist/utils/platform.js.map +1 -1
- package/dist/utils/retry.d.ts +2 -0
- package/dist/utils/retry.js +9 -7
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/sanitize.d.ts +2 -2
- package/dist/utils/sanitize.js +4 -4
- package/dist/utils/timing.d.ts +6 -3
- package/dist/utils/timing.js +10 -6
- package/dist/utils/timing.js.map +1 -1
- package/dist/utils/version.d.ts +3 -2
- package/dist/utils/version.js +14 -27
- package/dist/utils/version.js.map +1 -1
- package/package.json +13 -7
- package/dist/native/intercept.d.ts +0 -35
- package/dist/native/intercept.js +0 -181
- package/dist/native/intercept.js.map +0 -1
- package/dist/routes/config/channels/routes.js +0 -1505
- package/dist/routes/config/channels/routes.js.map +0 -1
package/dist/routes/playlist.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { VALID_SORT_FIELDS, compareChannelSort, getAllServiceTags, getServiceTagForChannel, resolveServiceKey } from "../config/services.js";
|
|
2
2
|
import { getActiveTagVocabulary, getAllChannels, getChannelEffectiveTags, tagsMatch } from "../config/userChannels.js";
|
|
3
3
|
import { CONFIG } from "../config/index.js";
|
|
4
|
+
import { escapeM3uAttribute } from "../utils/m3u.js";
|
|
4
5
|
import { getProfileForChannel } from "../config/profiles.js";
|
|
6
|
+
import { sendValidationError } from "./config/http/envelope.js";
|
|
5
7
|
/**
|
|
6
8
|
* Parses and validates an include/exclude filter query parameter. The parameter is a comma-separated list of values with optional `-` prefix for exclusion mode.
|
|
7
|
-
* All values must be either include (no prefix) or exclude (`-` prefix)
|
|
9
|
+
* All values must be either include (no prefix) or exclude (`-` prefix) - mixing is not allowed. Values are case-insensitive and validated against a known set.
|
|
8
10
|
* @param param - The raw query parameter string (e.g., "sports,news" or "-kids").
|
|
9
11
|
* @param entityName - Human-readable name for error messages (e.g., "service tag", "tag").
|
|
10
12
|
* @param knownValues - Array of valid values to validate against.
|
|
@@ -26,7 +28,7 @@ function parseIncludeExcludeFilter(param, entityName, knownValues) {
|
|
|
26
28
|
includeTokens.push(token);
|
|
27
29
|
}
|
|
28
30
|
}
|
|
29
|
-
// Reject mixed mode
|
|
31
|
+
// Reject mixed mode - all tokens must be either include or exclude.
|
|
30
32
|
if ((excludeTokens.length > 0) && (includeTokens.length > 0)) {
|
|
31
33
|
return { error: "Cannot mix include and exclude " + entityName + " filters. Use either \"a,b\" (include) or \"-a,-b\" (exclude).", validTags: [] };
|
|
32
34
|
}
|
|
@@ -34,9 +36,10 @@ function parseIncludeExcludeFilter(param, entityName, knownValues) {
|
|
|
34
36
|
const filterTags = isExclude ? excludeTokens : includeTokens;
|
|
35
37
|
// Validate all values against the known set. Tokens are already lowercased, so normalize known values for case-insensitive comparison.
|
|
36
38
|
const knownSet = new Set(knownValues.map((v) => v.toLowerCase()));
|
|
37
|
-
const
|
|
39
|
+
const filterSet = new Set(filterTags);
|
|
40
|
+
const unknownTags = [...filterSet.difference(knownSet)];
|
|
38
41
|
if (unknownTags.length > 0) {
|
|
39
|
-
return { error: "Unknown " + entityName + "(s): " + unknownTags.join(", ") + ".", validTags: knownValues.
|
|
42
|
+
return { error: "Unknown " + entityName + "(s): " + unknownTags.join(", ") + ".", validTags: knownValues.toSorted() };
|
|
40
43
|
}
|
|
41
44
|
return { filter: { exclude: isExclude, tags: filterTags } };
|
|
42
45
|
}
|
|
@@ -75,7 +78,7 @@ export function resolveBaseUrl(req) {
|
|
|
75
78
|
// Check X-Forwarded-Host first (may contain multiple hosts if proxied through multiple layers, take the first one). Then fall back to the standard Host header,
|
|
76
79
|
// and finally to the configured server settings.
|
|
77
80
|
const forwardedHost = req.get("x-forwarded-host");
|
|
78
|
-
const host = forwardedHost ? forwardedHost.split(",")[0].trim() : req.get("host");
|
|
81
|
+
const host = forwardedHost ? (forwardedHost.split(",")[0] ?? "").trim() : req.get("host");
|
|
79
82
|
const fallbackHost = CONFIG.server.host + ":" + String(CONFIG.server.port);
|
|
80
83
|
const resolvedHost = host ?? fallbackHost;
|
|
81
84
|
return protocol + "://" + resolvedHost;
|
|
@@ -98,10 +101,11 @@ export function generatePlaylistContent(baseUrl, serviceFilter, tagFilter, sort,
|
|
|
98
101
|
const lines = ["#EXTM3U", ""];
|
|
99
102
|
const sortField = sort ?? CONFIG.channels.channelSortField;
|
|
100
103
|
const sortDir = direction ?? CONFIG.channels.channelSortDirection;
|
|
101
|
-
// Sort channel
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
104
|
+
// Sort channel entries using the specified (or saved) sort field and direction. Default is name ascending. Iterating entries rather than keys keeps channel
|
|
105
|
+
// references fully typed throughout the loop, avoiding repeated Record lookups that noUncheckedIndexedAccess flags as possibly-undefined.
|
|
106
|
+
const channelEntries = Object.entries(channels)
|
|
107
|
+
.sort(([keyA, channelA], [keyB, channelB]) => compareChannelSort(channelA, keyA, channelB, keyB, sortField, sortDir));
|
|
108
|
+
for (const [name, channel] of channelEntries) {
|
|
105
109
|
// Apply the service filter if specified.
|
|
106
110
|
if (serviceFilter) {
|
|
107
111
|
const selectedKey = resolveServiceKey(name);
|
|
@@ -112,7 +116,7 @@ export function generatePlaylistContent(baseUrl, serviceFilter, tagFilter, sort,
|
|
|
112
116
|
continue;
|
|
113
117
|
}
|
|
114
118
|
}
|
|
115
|
-
// Compute effective tags once per channel
|
|
119
|
+
// Compute effective tags once per channel - used for both the tag filter check and M3U attribute generation. Tags are intersected with the active vocabulary
|
|
116
120
|
// so deleted tags are invisible.
|
|
117
121
|
const effectiveTags = getChannelEffectiveTags(channel);
|
|
118
122
|
// Apply the tag filter if specified. Filter tags are lowercase (normalized by parseIncludeExcludeFilter), so compare case-insensitively.
|
|
@@ -128,11 +132,14 @@ export function generatePlaylistContent(baseUrl, serviceFilter, tagFilter, sort,
|
|
|
128
132
|
const streamUrl = baseUrl + "/hls/" + name + "/stream.m3u8";
|
|
129
133
|
// Build the EXTINF line with required channel-id attribute and tvg-name for the friendly display name. Include channel-number when the user has specified one,
|
|
130
134
|
// tvc-guide-stationid for Gracenote guide data when a stationId is defined, tvg-shift for EPG time offset, tvg-logo for custom channel logos, and group-title
|
|
131
|
-
// for organizational tags (semicolon-delimited for IPTV middleware compatibility).
|
|
135
|
+
// for organizational tags (semicolon-delimited for IPTV middleware compatibility). Every user-controlled attribute value flows through escapeM3uAttribute so
|
|
136
|
+
// an embedded double-quote, backslash, or line break cannot terminate the attribute early or break the EXTINF line. Structurally server-controlled values
|
|
137
|
+
// (the channel key, numeric channelNumber and tvgShift, and the fixed placeholders constant) skip the helper because validation guarantees they cannot carry
|
|
138
|
+
// those characters.
|
|
132
139
|
const channelNumberAttr = channel.channelNumber ? " channel-number=\"" + String(channel.channelNumber) + "\"" : "";
|
|
133
|
-
const groupTitleAttr = (effectiveTags.length > 0) ? " group-title=\"" + effectiveTags.join(";") + "\"" : "";
|
|
134
|
-
const logoAttr = channel.logoUrl ? " tvg-logo=\"" + channel.logoUrl + "\"" : "";
|
|
135
|
-
const stationIdAttr = channel.stationId ? " tvc-guide-stationid=\"" + channel.stationId + "\"" : "";
|
|
140
|
+
const groupTitleAttr = (effectiveTags.length > 0) ? " group-title=\"" + escapeM3uAttribute(effectiveTags.join(";")) + "\"" : "";
|
|
141
|
+
const logoAttr = channel.logoUrl ? " tvg-logo=\"" + escapeM3uAttribute(channel.logoUrl) + "\"" : "";
|
|
142
|
+
const stationIdAttr = channel.stationId ? " tvc-guide-stationid=\"" + escapeM3uAttribute(channel.stationId) + "\"" : "";
|
|
136
143
|
const tvgShiftAttr = (channel.tvgShift !== undefined) ? " tvg-shift=\"" + String(channel.tvgShift) + "\"" : "";
|
|
137
144
|
// For channels without EPG data, emit tvc-guide-tags so Channels DVR's Automatic Channels can filter on them. Static page channels also get
|
|
138
145
|
// tvc-guide-placeholders to provide a 24-hour guide block since they display persistent content without time-based programming.
|
|
@@ -140,16 +147,20 @@ export function generatePlaylistContent(baseUrl, serviceFilter, tagFilter, sort,
|
|
|
140
147
|
let tvcPlaceholdersAttr = "";
|
|
141
148
|
if (!channel.stationId) {
|
|
142
149
|
if (effectiveTags.length > 0) {
|
|
143
|
-
tvcTagsAttr = " tvc-guide-tags=\"" + effectiveTags.join(", ") + "\"";
|
|
150
|
+
tvcTagsAttr = " tvc-guide-tags=\"" + escapeM3uAttribute(effectiveTags.join(", ")) + "\"";
|
|
144
151
|
}
|
|
145
152
|
const { profile } = getProfileForChannel(channel);
|
|
146
153
|
if (profile.staticCapture) {
|
|
147
154
|
tvcPlaceholdersAttr = " tvc-guide-placeholders=\"86400\"";
|
|
148
155
|
}
|
|
149
156
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
157
|
+
// The channel-id value is the iteration key (validated to /^[a-z0-9-]+$/ at the input boundary), so it cannot carry the structural characters that
|
|
158
|
+
// escapeM3uAttribute exists to neutralize. We embed it directly. The comma-suffix display name is M3U's terminator-by-end-of-line position rather than a
|
|
159
|
+
// quoted attribute, so backslash and double-quote are legal there and pass through verbatim - users see the original characters in their guide; only literal
|
|
160
|
+
// CR/LF (which would split the EXTINF across multiple lines) gets collapsed to a single space.
|
|
161
|
+
const attrs = "#EXTINF:-1 channel-id=\"" + name + "\"" + channelNumberAttr + groupTitleAttr + logoAttr + " tvg-name=\"" + escapeM3uAttribute(displayName) +
|
|
162
|
+
"\"" + stationIdAttr + tvcPlaceholdersAttr + tvcTagsAttr + tvgShiftAttr;
|
|
163
|
+
const extinfLine = attrs + "," + displayName.replace(/[\r\n]+/g, " ");
|
|
153
164
|
lines.push(extinfLine);
|
|
154
165
|
lines.push(streamUrl);
|
|
155
166
|
lines.push("");
|
|
@@ -169,17 +180,17 @@ export function setupPlaylistEndpoint(app) {
|
|
|
169
180
|
// organizational tags, ?sort= for sort field override, and ?direction= for sort direction override.
|
|
170
181
|
app.get("/playlist", (req, res) => {
|
|
171
182
|
const baseUrl = resolveBaseUrl(req);
|
|
172
|
-
const serviceParam = typeof req.query
|
|
173
|
-
const tagParam = typeof req.query
|
|
174
|
-
const sortParam = typeof req.query
|
|
175
|
-
const directionParam = typeof req.query
|
|
183
|
+
const serviceParam = typeof req.query["service"] === "string" ? req.query["service"].trim() : undefined;
|
|
184
|
+
const tagParam = typeof req.query["tag"] === "string" ? req.query["tag"].trim() : undefined;
|
|
185
|
+
const sortParam = typeof req.query["sort"] === "string" ? req.query["sort"].trim() || undefined : undefined;
|
|
186
|
+
const directionParam = typeof req.query["direction"] === "string" ? req.query["direction"].trim().toLowerCase() || undefined : undefined;
|
|
176
187
|
let serviceFilter;
|
|
177
188
|
let tagFilter;
|
|
178
189
|
// Parse and validate the service filter if specified.
|
|
179
190
|
if (serviceParam) {
|
|
180
191
|
const result = parseServiceFilter(serviceParam);
|
|
181
192
|
if ("error" in result) {
|
|
182
|
-
res
|
|
193
|
+
sendValidationError(res, { error: result.error, validTags: result.validTags });
|
|
183
194
|
return;
|
|
184
195
|
}
|
|
185
196
|
serviceFilter = result.filter;
|
|
@@ -188,19 +199,19 @@ export function setupPlaylistEndpoint(app) {
|
|
|
188
199
|
if (tagParam) {
|
|
189
200
|
const result = parseTagFilter(tagParam);
|
|
190
201
|
if ("error" in result) {
|
|
191
|
-
res
|
|
202
|
+
sendValidationError(res, { error: result.error, validTags: result.validTags });
|
|
192
203
|
return;
|
|
193
204
|
}
|
|
194
205
|
tagFilter = result.filter;
|
|
195
206
|
}
|
|
196
207
|
// Validate the sort field if specified.
|
|
197
208
|
if (sortParam && !VALID_SORT_FIELDS.has(sortParam)) {
|
|
198
|
-
res
|
|
209
|
+
sendValidationError(res, { error: "Invalid sort field: " + sortParam + ".", validFields: [...VALID_SORT_FIELDS].toSorted() });
|
|
199
210
|
return;
|
|
200
211
|
}
|
|
201
212
|
// Validate the sort direction if specified.
|
|
202
213
|
if (directionParam && !VALID_SORT_DIRECTIONS.has(directionParam)) {
|
|
203
|
-
res
|
|
214
|
+
sendValidationError(res, { error: "Invalid sort direction: " + directionParam + ".", validDirections: [...VALID_SORT_DIRECTIONS] });
|
|
204
215
|
return;
|
|
205
216
|
}
|
|
206
217
|
const sort = sortParam;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playlist.js","sourceRoot":"","sources":["../../src/routes/playlist.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC7I,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACvH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"playlist.js","sourceRoot":"","sources":["../../src/routes/playlist.ts"],"names":[],"mappings":"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"}
|
|
@@ -81,7 +81,7 @@ export function generateOverviewContent(baseUrl) {
|
|
|
81
81
|
return [
|
|
82
82
|
// Active streams table at the top.
|
|
83
83
|
generateActiveStreamsSection(),
|
|
84
|
-
// What
|
|
84
|
+
// What is PrismCast.
|
|
85
85
|
"<div class=\"section\">",
|
|
86
86
|
"<h3>What Is PrismCast?</h3>",
|
|
87
87
|
"<p>PrismCast captures live video from web-based TV players by driving a real Chrome browser. It navigates to streaming sites, captures the ",
|
|
@@ -399,6 +399,8 @@ export function generateApiReferenceContent() {
|
|
|
399
399
|
"<a href=\"#api-channels\" class=\"api-index-heading\">Channels</a>",
|
|
400
400
|
"<span class=\"api-index-desc\">Add, edit, import, and toggle channel definitions.</span>",
|
|
401
401
|
"<a href=\"#api-channels\"><code>POST /config/channels</code></a>",
|
|
402
|
+
"<a href=\"#api-channels\"><code>PUT /config/channels/:key</code></a>",
|
|
403
|
+
"<a href=\"#api-channels\"><code>DELETE /config/channels/:key</code></a>",
|
|
402
404
|
"<a href=\"#api-channels\"><code>GET /config/channels/export</code></a>",
|
|
403
405
|
"<a href=\"#api-channels\"><code>POST /config/channels/import</code></a>",
|
|
404
406
|
"</div>",
|
|
@@ -406,7 +408,7 @@ export function generateApiReferenceContent() {
|
|
|
406
408
|
"<a href=\"#api-services\" class=\"api-index-heading\">Services</a>",
|
|
407
409
|
"<span class=\"api-index-desc\">Channel discovery, service selection, and playlist filtering.</span>",
|
|
408
410
|
"<a href=\"#api-services\"><code>GET /services/:slug/channels</code></a>",
|
|
409
|
-
"<a href=\"#api-services\"><code>
|
|
411
|
+
"<a href=\"#api-services\"><code>PUT /config/channels/:key/service</code></a>",
|
|
410
412
|
"<a href=\"#api-services\"><code>POST /config/service-filter</code></a>",
|
|
411
413
|
"</div>",
|
|
412
414
|
"<div class=\"api-index-group\">",
|
|
@@ -503,8 +505,27 @@ export function generateApiReferenceContent() {
|
|
|
503
505
|
"<tr><th style=\"width: 35%;\">Endpoint</th><th>Description</th></tr>",
|
|
504
506
|
"<tr>",
|
|
505
507
|
"<td class=\"endpoint\"><code>POST /config/channels</code></td>",
|
|
506
|
-
"<td>
|
|
507
|
-
"
|
|
508
|
+
"<td>Create a new user channel. Body is the channel object (<code>key</code>, <code>name</code>, <code>url</code>, and optional fields). " +
|
|
509
|
+
"Returns a channel table patch and a <code>serviceWarning</code> when the new channel's service isn't in the active filter.</td>",
|
|
510
|
+
"</tr>",
|
|
511
|
+
"<tr>",
|
|
512
|
+
"<td class=\"endpoint\"><code>PUT /config/channels/:key</code></td>",
|
|
513
|
+
"<td>Replace an existing channel. Body is the full channel object. For predefined channels, the handler computes a delta against the canonical " +
|
|
514
|
+
"definition; submitting values matching the canonical or a sibling variant implicitly reverts the override.</td>",
|
|
515
|
+
"</tr>",
|
|
516
|
+
"<tr>",
|
|
517
|
+
"<td class=\"endpoint\"><code>PATCH /config/channels/:key</code></td>",
|
|
518
|
+
"<td>Partial update from inline cell edits. Body contains exactly one of <code>channelNumber</code>, <code>hdhrEnabled</code>, <code>stationId</code>, " +
|
|
519
|
+
"or <code>tags</code>. A typed value sets the field; <code>null</code> clears it.</td>",
|
|
520
|
+
"</tr>",
|
|
521
|
+
"<tr>",
|
|
522
|
+
"<td class=\"endpoint\"><code>DELETE /config/channels/:key</code></td>",
|
|
523
|
+
"<td>Delete a user channel. Fails if the key is not a user-defined channel. If a predefined version exists with the same key, the returned patch " +
|
|
524
|
+
"replaces the row with the predefined original.</td>",
|
|
525
|
+
"</tr>",
|
|
526
|
+
"<tr>",
|
|
527
|
+
"<td class=\"endpoint\"><code>POST /config/channels/:key/revert</code></td>",
|
|
528
|
+
"<td>Remove a predefined channel override, restoring the predefined defaults.</td>",
|
|
508
529
|
"</tr>",
|
|
509
530
|
"<tr>",
|
|
510
531
|
"<td class=\"endpoint\"><a href=\"/config/channels/export\"><code>GET /config/channels/export</code></a></td>",
|
|
@@ -552,8 +573,8 @@ export function generateApiReferenceContent() {
|
|
|
552
573
|
"Add <code>?refresh=true</code> to clear caches and force a fresh discovery walk.</td>",
|
|
553
574
|
"</tr>",
|
|
554
575
|
"<tr>",
|
|
555
|
-
"<td class=\"endpoint\"><code>
|
|
556
|
-
"<td>Update service selection for a multi-service channel. Body: <code>{ \"
|
|
576
|
+
"<td class=\"endpoint\"><code>PUT /config/channels/:key/service</code></td>",
|
|
577
|
+
"<td>Update service selection for a multi-service channel. Body: <code>{ \"service\": \"nbc-hulu\" }</code></td>",
|
|
557
578
|
"</tr>",
|
|
558
579
|
"<tr>",
|
|
559
580
|
"<td class=\"endpoint\"><code>POST /config/service-filter</code></td>",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/routes/root/content.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/routes/root/content.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,0BAA0B,EAC7I,0BAA0B,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD;;;GAGG;AACH,SAAS,4BAA4B;IAEnC,OAAO;QACL,gCAAgC;QAChC,sDAAsD;QACtD,8BAA8B;QAC9B,uEAAuE;QACvE,UAAU;QACV,UAAU;QACV,QAAQ;KACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB;IAE1B,yEAAyE;IACzE,MAAM,kBAAkB,GAAG,kBAAkB,EAAE,CAAC,CAAC;QAC/C,uEAAuE,CAAC,CAAC;QACzE,iFAAiF,CAAC;IAEpF,OAAO;QAEL,qBAAqB;QACrB,oGAAoG;QACpG,yIAAyI;QACzI,oBAAoB;QAEpB,2BAA2B;QAC3B,8BAA8B;QAC9B,yDAAyD;QACzD,gCAAgC;QAChC,4BAA4B;QAC5B,wIAAwI;QACxI,+CAA+C;QAC/C,wGAAwG;QACxG,QAAQ;QACR,gCAAgC;QAChC,0BAA0B;QAC1B,8CAA8C,GAAG,kBAAkB,GAAG,MAAM;QAC5E,+IAA+I;QAC/I,oGAAoG;QACpG,QAAQ;QACR,QAAQ;QAER,2BAA2B;QAC3B,8BAA8B;QAC9B,yDAAyD;QACzD,gCAAgC;QAChC,4BAA4B;QAC5B,oIAAoI;QACpI,2BAA2B;QAC3B,0GAA0G;QAC1G,QAAQ;QACR,gCAAgC;QAChC,0BAA0B;QAC1B,gIAAgI;QAChI,+IAA+I;QAC/I,sGAAsG;QACtG,QAAQ;QACR,QAAQ;KACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAe;IAErD,MAAM,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAC7C,MAAM,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEzH,OAAO;QAEL,mCAAmC;QACnC,4BAA4B,EAAE;QAE9B,qBAAqB;QACrB,yBAAyB;QACzB,6BAA6B;QAC7B,6IAA6I;QAC7I,sJAAsJ;QACtJ,8IAA8I;QAC9I,8IAA8I;QAC9I,0DAA0D;QAC1D,8DAA8D;QAC9D,MAAM;QACN,+IAA+I;QAC/I,sCAAsC;QACtC,4IAA4I;QAC5I,4CAA4C;QAC5C,qIAAqI;QACrI,OAAO;QACP,uGAAuG;QACvG,QAAQ;QAER,iBAAiB;QACjB,yBAAyB;QACzB,wBAAwB;QACxB,uIAAuI;QACvI,+FAA+F;QAC/F,4IAA4I;QAC5I,kJAAkJ;QAClJ,mJAAmJ;QACnJ,8IAA8I;QAC9I,kJAAkJ;QAClJ,mDAAmD;QACnD,QAAQ;QAER,8BAA8B;QAC9B,yBAAyB;QACzB,sBAAsB;QACtB,mDAAmD;QACnD,MAAM;QACN,8FAA8F;QAC9F,sFAAsF;QACtF,iEAAiE,GAAG,OAAO,GAAG,mBAAmB;QACjG,+GAA+G;QAC/G,sEAAsE;QACtE,sJAAsJ;QACtJ,oFAAoF;QACpF,mEAAmE;QACnE,OAAO;QACP,iFAAiF,GAAG,OAAO,GAAG,kCAAkC;QAChI,QAAQ;QAER,oBAAoB;QACpB,yBAAyB;QACzB,2BAA2B;QAC3B,kIAAkI;QAClI,MAAM;QACN,oGAAoG;QACpG,sGAAsG;QACtG,0FAA0F;QAC1F,OAAO;QACP,4EAA4E;QAC5E,0EAA0E;QAC1E,QAAQ;QAER,gBAAgB;QAChB,yBAAyB;QACzB,uBAAuB;QACvB,kJAAkJ;QAClJ,yEAAyE;QAEzE,mDAAmD;QACnD,+FAA+F;QAC/F,kDAAkD;QAElD,wEAAwE;QACxE,8IAA8I;QAC9I,yCAAyC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO;QACpH,GAAG,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAClC,sCAAsC,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;gBACzE,0FAA0F;gBAC1F,4DAA4D;SAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAErE,6EAA6E;QAC7E,qEAAqE;YACrE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YACzG,wGAAwG;YACxG,uFAAuF;YACvF,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;gBACvE,mGAAmG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM;QAElH,sBAAsB;QACtB,+GAA+G;QAC/G,kJAAkJ;QAClJ,wGAAwG;QACxG,QAAQ;QAER,0BAA0B;QAC1B,yBAAyB;QACzB,iCAAiC;QACjC,oHAAoH;QACpH,MAAM;QACN,4DAA4D;QAC5D,gGAAgG;QAChG,wEAAwE;QACxE,mEAAmE;QACnE,uEAAuE;QACvE,OAAO;QACP,8IAA8I;QAC9I,mJAAmJ;QACnJ,qIAAqI;QACrI,8IAA8I;QAC9I,sBAAsB;QACtB,sJAAsJ;QACtJ,QAAQ;QAER,yBAAyB;QACzB,yBAAyB;QACzB,gCAAgC;QAEhC,8BAA8B;QAC9B,8IAA8I;QAC9I,kJAAkJ;QAClJ,2HAA2H;QAC3H,0DAA0D;QAE1D,2BAA2B;QAC3B,kJAAkJ;QAClJ,+HAA+H;QAE/H,yBAAyB;QACzB,yGAAyG;QACzG,iJAAiJ;QACjJ,+IAA+I;QAC/I,4FAA4F;QAE5F,0BAA0B;QAC1B,kJAAkJ;QAClJ,8IAA8I;QAC9I,iGAAiG;QAEjG,gCAAgC;QAChC,6IAA6I;QAC7I,gJAAgJ;QAChJ,8IAA8I;QAC9I,0GAA0G;QAE1G,wCAAwC;QACxC,iKAAiK;QACjK,kJAAkJ;QAClJ,6IAA6I;QAC7I,4CAA4C;QAE5C,yCAAyC;QACzC,yIAAyI;QACzI,qIAAqI;QACrI,8JAA8J;QAC9J,QAAQ;QAER,gBAAgB;QAChB,yBAAyB;QACzB,uBAAuB;QACvB,MAAM;QACN,2CAA2C;QAC3C,uEAAuE;QACvE,6CAA6C;QAC7C,OAAO;QACP,kIAAkI;QAClI,QAAQ;KACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IAEjC,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEpI,OAAO;QAEL,sBAAsB;QACtB,yBAAyB;QACzB,6BAA6B;QAC7B,0EAA0E;QAC1E,2BAA2B;QAC3B,8DAA8D;QAC9D,cAAc;QACd,gEAAgE;QAChE,iBAAiB;QACjB,kHAAkH;QAClH,8EAA8E;QAC9E,QAAQ;QAER,wBAAwB;QACxB,yBAAyB;QACzB,+BAA+B;QAC/B,yIAAyI;QACzI,MAAM;QACN,mHAAmH;QACnH,oHAAoH;QACpH,2FAA2F;QAC3F,OAAO;QACP,2BAA2B;QAC3B,kIAAkI;QAClI,0FAA0F;QAC1F,wBAAwB;QACxB,uIAAuI;QACvI,0IAA0I;QAC1I,+BAA+B;QAC/B,2IAA2I;QAC3I,yIAAyI;QACzI,wHAAwH;QACxH,QAAQ;QAER,0BAA0B;QAC1B,yBAAyB;QACzB,iCAAiC;QACjC,yJAAyJ;QACzJ,0JAA0J;QAC1J,wCAAwC;QACxC,8JAA8J;QAC9J,yEAAyE;QACzE,2BAA2B;QAC3B,uIAAuI;QACvI,yGAAyG;QACzG,wBAAwB;QACxB,oJAAoJ;QACpJ,yHAAyH;QACzH,QAAQ;QAER,kBAAkB;QAClB,yBAAyB;QACzB,yBAAyB;QACzB,gBAAgB;QAChB,gJAAgJ;QAChJ,sJAAsJ;QACtJ,+BAA+B;QAC/B,kBAAkB;QAClB,8IAA8I;QAC9I,yBAAyB;QACzB,kJAAkJ;QAClJ,+IAA+I;QAC/I,+IAA+I;QAC/I,6EAA6E;QAC7E,QAAQ;QAER,mBAAmB;QACnB,yBAAyB;QACzB,0BAA0B;QAC1B,SAAS;QACT,0DAA0D;QAC1D,MAAM;QACN,8DAA8D;QAC9D,iDAAiD;QACjD,6DAA6D;QAC7D,OAAO;QACP,MAAM;QACN,0DAA0D;QAC1D,8BAA8B;QAC9B,qCAAqC;QACrC,OAAO;QACP,MAAM;QACN,sCAAsC;QACtC,4CAA4C;QAC5C,6FAA6F;QAC7F,OAAO;QACP,MAAM;QACN,6CAA6C;QAC7C,wCAAwC;QACxC,oGAAoG;QACpG,OAAO;QACP,MAAM;QACN,yCAAyC;QACzC,2CAA2C;QAC3C,8GAA8G;QAC9G,OAAO;QACP,MAAM;QACN,gDAAgD;QAChD,oFAAoF;QACpF,mHAAmH;QACnH,6EAA6E;QAC7E,OAAO;QACP,MAAM;QACN,uDAAuD;QACvD,+EAA+E;QAC/E,uHAAuH;QACvH,iCAAiC;QACjC,OAAO;QACP,MAAM;QACN,sDAAsD;QACtD,uCAAuC;QACvC,mIAAmI;QACnI,OAAO;QACP,MAAM;QACN,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,sCAAsC;QAChF,2DAA2D;QAC3D,oHAAoH;QACpH,OAAO;QACP,UAAU;QACV,QAAQ;QAER,qBAAqB;QACrB,yBAAyB;QACzB,4BAA4B;QAC5B,MAAM;QACN,mIAAmI;QACnI,2DAA2D;QAC3D,+IAA+I;QAC/I,0BAA0B;QAC1B,qJAAqJ;QACrJ,uJAAuJ;QACvJ,4IAA4I;QAC5I,oJAAoJ;QACpJ,uFAAuF;QACvF,qJAAqJ;QACrJ,0EAA0E;QAC1E,OAAO;QACP,QAAQ;KACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B;IAEzC,OAAO;QACL,yBAAyB;QACzB,0FAA0F;QAC1F,2BAA2B;QAE3B,iCAAiC;QACjC,sEAAsE;QACtE,sEAAsE;QACtE,wEAAwE;QACxE,+DAA+D;QAC/D,uDAAuD;QACvD,QAAQ;QAER,iCAAiC;QACjC,oEAAoE;QACpE,sEAAsE;QACtE,0DAA0D;QAC1D,QAAQ;QAER,iCAAiC;QACjC,oEAAoE;QACpE,0FAA0F;QAC1F,kEAAkE;QAClE,sEAAsE;QACtE,yEAAyE;QACzE,wEAAwE;QACxE,yEAAyE;QACzE,QAAQ;QAER,iCAAiC;QACjC,oEAAoE;QACpE,qGAAqG;QACrG,yEAAyE;QACzE,8EAA8E;QAC9E,wEAAwE;QACxE,QAAQ;QAER,iCAAiC;QACjC,oEAAoE;QACpE,+EAA+E;QAC/E,iEAAiE;QACjE,kEAAkE;QAClE,yEAAyE;QACzE,wEAAwE;QACxE,QAAQ;QAER,iCAAiC;QACjC,sEAAsE;QACtE,mEAAmE;QACnE,yDAAyD;QACzD,wDAAwD;QACxD,QAAQ;QAER,iCAAiC;QACjC,wEAAwE;QACxE,uFAAuF;QACvF,4DAA4D;QAC5D,2DAA2D;QAC3D,kEAAkE;QAClE,QAAQ;QAER,iCAAiC;QACjC,oEAAoE;QACpE,sFAAsF;QACtF,yDAAyD;QACzD,+DAA+D;QAC/D,gEAAgE;QAChE,QAAQ;QAER,iCAAiC;QACjC,0EAA0E;QAC1E,sFAAsF;QACtF,2DAA2D;QAC3D,yDAAyD;QACzD,gEAAgE;QAChE,QAAQ;QAER,QAAQ;QACR,QAAQ;QAER,uBAAuB;QACvB,yBAAyB;QACzB,yCAAyC;QACzC,SAAS;QACT,sEAAsE;QACtE,MAAM;QACN,qEAAqE;QACrE,uFAAuF;QACvF,OAAO;QACP,MAAM;QACN,kEAAkE;QAClE,sEAAsE;QACtE,OAAO;QACP,MAAM;QACN,sEAAsE;QACtE,0DAA0D;QAC1D,OAAO;QACP,MAAM;QACN,oDAAoD;QACpD,2GAA2G;YAC3G,qIAAqI;YACrI,mJAAmJ;YACnJ,6BAA6B;QAC7B,OAAO;QACP,MAAM;QACN,4DAA4D;QAC5D,iHAAiH;QACjH,OAAO;QACP,UAAU;QACV,QAAQ;QAER,sBAAsB;QACtB,yBAAyB;QACzB,uCAAuC;QACvC,SAAS;QACT,sEAAsE;QACtE,MAAM;QACN,kFAAkF;QAClF,0HAA0H;YAC1H,6BAA6B;YAC7B,qHAAqH;YACrH,gCAAgC;YAChC,kIAAkI;YAClI,+EAA+E;YAC/E,6FAA6F;YAC7F,mDAAmD;YACnD,iIAAiI;QACjI,OAAO;QACP,UAAU;QACV,QAAQ;QAER,qBAAqB;QACrB,yBAAyB;QACzB,uCAAuC;QACvC,+EAA+E;QAC/E,SAAS;QACT,sEAAsE;QACtE,MAAM;QACN,gEAAgE;QAChE,0IAA0I;YAC1I,iIAAiI;QACjI,OAAO;QACP,MAAM;QACN,oEAAoE;QACpE,gJAAgJ;YAChJ,iHAAiH;QACjH,OAAO;QACP,MAAM;QACN,sEAAsE;QACtE,wJAAwJ;YACxJ,uFAAuF;QACvF,OAAO;QACP,MAAM;QACN,uEAAuE;QACvE,kJAAkJ;YAClJ,qDAAqD;QACrD,OAAO;QACP,MAAM;QACN,4EAA4E;QAC5E,mFAAmF;QACnF,OAAO;QACP,MAAM;QACN,8GAA8G;QAC9G,gEAAgE;QAChE,OAAO;QACP,MAAM;QACN,uEAAuE;QACvE,2EAA2E;QAC3E,OAAO;QACP,MAAM;QACN,2EAA2E;QAC3E,mIAAmI;QACnI,OAAO;QACP,MAAM;QACN,kFAAkF;QAClF,iHAAiH;YACjH,kGAAkG;QAClG,OAAO;QACP,MAAM;QACN,uFAAuF;QACvF,6IAA6I;YAC7I,kGAAkG;QAClG,OAAO;QACP,MAAM;QACN,8EAA8E;QAC9E,0GAA0G;YAC1G,sIAAsI;YACtI,wDAAwD;QACxD,OAAO;QACP,UAAU;QACV,QAAQ;QAER,qBAAqB;QACrB,yBAAyB;QACzB,uCAAuC;QACvC,wFAAwF;QACxF,SAAS;QACT,sEAAsE;QACtE,MAAM;QACN,uEAAuE;QACvE,mJAAmJ;YACnJ,mFAAmF;YACnF,qBAAqB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/F,qFAAqF;YACrF,yBAAyB;YACzB,uFAAuF;QACvF,OAAO;QACP,MAAM;QACN,4EAA4E;QAC5E,iHAAiH;QACjH,OAAO;QACP,MAAM;QACN,sEAAsE;QACtE,mIAAmI;QACnI,OAAO;QACP,MAAM;QACN,2EAA2E;QAC3E,oGAAoG;YACpG,wEAAwE;QACxE,OAAO;QACP,MAAM;QACN,4EAA4E;QAC5E,+IAA+I;YAC/I,6EAA6E;QAC7E,OAAO;QACP,UAAU;QACV,QAAQ;QAER,qBAAqB;QACrB,yBAAyB;QACzB,uCAAuC;QACvC,wHAAwH;YACxH,yGAAyG;QACzG,SAAS;QACT,sEAAsE;QACtE,MAAM;QACN,+DAA+D;QAC/D,6FAA6F;QAC7F,OAAO;QACP,MAAM;QACN,gEAAgE;QAChE,mHAAmH;YACnH,uIAAuI;QACvI,OAAO;QACP,MAAM;QACN,uEAAuE;QACvE,4EAA4E;QAC5E,OAAO;QACP,MAAM;QACN,uEAAuE;QACvE,2FAA2F;YAC3F,wEAAwE;QACxE,OAAO;QACP,MAAM;QACN,sEAAsE;QACtE,6HAA6H;YAC7H,mJAAmJ;QACnJ,OAAO;QACP,UAAU;QACV,QAAQ;QAER,4BAA4B;QAC5B,yBAAyB;QACzB,yCAAyC;QACzC,SAAS;QACT,sEAAsE;QACtE,MAAM;QACN,2DAA2D;QAC3D,4HAA4H;QAC5H,OAAO;QACP,MAAM;QACN,0DAA0D;QAC1D,0DAA0D;QAC1D,OAAO;QACP,MAAM;QACN,wFAAwF;QACxF,6FAA6F;QAC7F,OAAO;QACP,UAAU;QACV,QAAQ;QAER,wBAAwB;QACxB,yBAAyB;QACzB,2CAA2C;QAC3C,SAAS;QACT,sEAAsE;QACtE,MAAM;QACN,kFAAkF;QAClF,2GAA2G;QAC3G,OAAO;QACP,MAAM;QACN,gFAAgF;QAChF,+FAA+F;QAC/F,OAAO;QACP,MAAM;QACN,8DAA8D;QAC9D,oFAAoF;QACpF,OAAO;QACP,MAAM;QACN,8DAA8D;QAC9D,mGAAmG;QACnG,OAAO;QACP,UAAU;QACV,QAAQ;QAER,sBAAsB;QACtB,yBAAyB;QACzB,uCAAuC;QACvC,yCAAyC;QACzC,SAAS;QACT,sEAAsE;QACtE,MAAM;QACN,uDAAuD;QACvD,uHAAuH;QACvH,OAAO;QACP,MAAM;QACN,4FAA4F;QAC5F,gEAAgE;QAChE,OAAO;QACP,MAAM;QACN,8DAA8D;QAC9D,oGAAoG;QACpG,OAAO;QACP,MAAM;QACN,mEAAmE;QACnE,6GAA6G;QAC7G,OAAO;QACP,UAAU;QACV,QAAQ;QAER,yBAAyB;QACzB,yBAAyB;QACzB,6CAA6C;QAC7C,SAAS;QACT,sEAAsE;QACtE,MAAM;QACN,8EAA8E;QAC9E,2GAA2G;QAC3G,OAAO;QACP,MAAM;QACN,0EAA0E;QAC1E,uIAAuI;QACvI,OAAO;QACP,MAAM;QACN,2DAA2D;QAC3D,gHAAgH;QAChH,OAAO;QACP,UAAU;QACV,QAAQ;QAER,qBAAqB;QACrB,yBAAyB;QACzB,yCAAyC;QACzC,QAAQ;QACR,2DAA2D;QAC3D,gCAAgC;QAChC,0CAA0C;QAC1C,qFAAqF;QACrF,8BAA8B;QAC9B,uHAAuH;QACvH,4BAA4B;QAC5B,kDAAkD;QAClD,gDAAgD;QAChD,uBAAuB;QACvB,2BAA2B;QAC3B,SAAS;QACT,QAAQ;KACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B;IAExC,OAAO;QAEL,kGAAkG;QAClG,sDAAsD;QACtD,sJAAsJ;QACtJ,8JAA8J;QAC9J,QAAQ;QAER,0CAA0C;QAC1C,8EAA8E;QAC9E,yBAAyB;QACzB,qBAAqB,EAAE;QACvB,QAAQ;QACR,QAAQ;QAER,gCAAgC;QAChC,8EAA8E;QAC9E,yBAAyB;QACzB,2BAA2B,EAAE;QAC7B,QAAQ;QACR,QAAQ;QAER,gCAAgC;QAChC,0BAA0B,EAAE;QAE5B,sGAAsG;QACtG,wEAAwE;QACxE,qCAAqC;QACrC,uBAAuB;QACvB,mJAAmJ;QACnJ,mEAAmE;QACnE,yDAAyD;QACzD,iIAAiI;QACjI,8FAA8F;QAC9F,QAAQ;QACR,QAAQ;QACR,QAAQ;QAER,0GAA0G;QAC1G,yEAAyE;QACzE,qCAAqC;QACrC,iCAAiC;QACjC,0HAA0H;QAC1H,kGAAkG;QAClG,4FAA4F;QAC5F,sGAAsG;QACtG,mEAAmE;QACnE,qCAAqC;QACrC,wFAAwF;QACxF,QAAQ;QACR,QAAQ;QACR,QAAQ;KACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IAEjC,OAAO;QACL,yBAAyB;QACzB,6HAA6H;QAC7H,OAAO;QACP,sEAAsE;QACtE,wDAAwD;QACxD,iCAAiC;QACjC,yCAAyC;QACzC,0CAA0C;QAC1C,sCAAsC;QACtC,WAAW;QACX,QAAQ;QACR,yFAAyF;QACzF,+EAA+E;QAC/E,QAAQ;QACR,QAAQ;QACR,iDAAiD;QACjD,mDAAmD;QACnD,QAAQ;QAER,0CAA0C;QAC1C,UAAU;QACV,8DAA8D;QAC9D,wDAAwD;QACxD,yBAAyB;QACzB,4BAA4B;QAC5B,wBAAwB;QAExB,gDAAgD;QAChD,6BAA6B;QAC7B,2DAA2D;QAC3D,gCAAgC;QAChC,2CAA2C;QAC3C,SAAS;QACT,iCAAiC;QACjC,kCAAkC;QAClC,mCAAmC;QACnC,6BAA6B;QAC7B,kIAAkI;QAClI,eAAe;QACf,OAAO;QACP,4BAA4B;QAC5B,qCAAqC;QACrC,wFAAwF;QACxF,cAAc;QACd,2CAA2C;QAC3C,OAAO;QACP,kBAAkB;QAClB,wGAAwG;QACxG,KAAK;QACL,GAAG;QAEH,8DAA8D;QAC9D,0CAA0C;QAC1C,kBAAkB;QAClB,8CAA8C;QAC9C,yCAAyC;QACzC,KAAK;QACL,kCAAkC;QAClC,uDAAuD;QACvD,GAAG;QAEH,8EAA8E;QAC9E,kCAAkC;QAClC,0BAA0B;QAC1B,wDAAwD;QACxD,2DAA2D;QAC3D,6DAA6D;QAC7D,wBAAwB;QACxB,gCAAgC;QAChC,oHAAoH;QACpH,gDAAgD;QAChD,KAAK;QACL,mIAAmI;QACnI,GAAG;QAEH,iDAAiD;QACjD,kCAAkC;QAClC,kCAAkC;QAClC,2DAA2D;QAC3D,qDAAqD;QACrD,4GAA4G;QAC5G,0CAA0C;QAC1C,4DAA4D;QAC5D,4EAA4E;QAC5E,GAAG;QAEH,6BAA6B;QAC7B,4CAA4C;QAC5C,2BAA2B;QAC3B,yBAAyB;QACzB,GAAG;QAEH,4GAA4G;QAC5G,4BAA4B;QAC5B,mCAAmC;QAEnC,6BAA6B;QAC7B,yBAAyB;QACzB,4CAA4C;QAC5C,uEAAuE;QACvE,kDAAkD;QAClD,mCAAmC;QACnC,8HAA8H;QAE9H,qIAAqI;QACrI,uIAAuI;QACvI,iCAAiC;QACjC,uDAAuD;QACvD,uCAAuC;QACvC,mCAAmC;QACnC,SAAS;QACT,KAAK;QACL,oBAAoB;QACpB,+BAA+B;QAC/B,WAAW;QACX,uCAAuC;QACvC,8BAA8B;QAC9B,iDAAiD;QACjD,OAAO;QACP,qCAAqC;QACrC,qCAAqC;QACrC,qHAAqH;QACrH,iBAAiB;QACjB,MAAM;QACN,sCAAsC;QACtC,2HAA2H;QAC3H,MAAM;QACN,oDAAoD;QACpD,oEAAoE;QACpE,cAAc;QACd,GAAG;QAEH,kCAAkC;QAClC,4BAA4B;QAC5B,qGAAqG;QACrG,sBAAsB;QACtB,0BAA0B;QAC1B,yBAAyB;QACzB,KAAK;QACL,6BAA6B;QAC7B,GAAG;QAEH,wFAAwF;QACxF,4BAA4B;QAC5B,eAAe;QACf,GAAG;QAEH,iIAAiI;QACjI,8BAA8B;QAC9B,uDAAuD;QACvD,kDAAkD;QAClD,yEAAyE;QACzE,GAAG;QACH,qDAAqD;QAErD,wIAAwI;QACxI,kDAAkD;QAClD,yDAAyD;QACzD,uCAAuC;QACvC,mBAAmB;QACnB,wBAAwB;QACxB,YAAY;QACZ,sBAAsB;QACtB,KAAK;QACL,KAAK;QAEL,WAAW;KACZ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IAEnC,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,8CAA8C;IAC9C,IAAG,eAAe,EAAE,EAAE,CAAC;QAErB,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,sGAAsG,CAAC,CAAC;QACnH,KAAK,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;QAClG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAE1D,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,KAAI,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QAEtB,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAEhD,KAAK,CAAC,IAAI,CAAC,4CAA4C,GAAG,WAAW,GAAG,mBAAmB,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kCAAkC;YACnJ,YAAY,GAAG,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,CAAC;QACpE,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,0HAA0H,CAAC,CAAC;IACvI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,yFAAyF;IACzF,KAAK,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;IAExF,sFAAsF;IACtF,KAAK,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;IAC3F,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,mDAAmD;IACnD,KAAK,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;IACpF,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,gHAAgH;IAChH,MAAM,cAAc,GAAG,kBAAkB,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,eAAe,CAAC;IAErF,KAAK,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;IAC1F,KAAK,CAAC,IAAI,CAAC,oEAAoE,GAAG,cAAc,GAAG,WAAW,CAAC,CAAC;IAChH,KAAK,CAAC,IAAI,CAAC,kHAAkH,CAAC,CAAC;IAC/H,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEtB,+EAA+E;IAC/E,KAAK,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IAClF,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,uBAAuB;IACvB,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAEzC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -4,6 +4,7 @@ import { generateBaseStyles, generatePageWrapper, generateTabButton, generateTab
|
|
|
4
4
|
import { generateChannelsSubtabScript, generateConfigSubtabScript, generateSharedUtilitiesScript, generateStatusScript } from "./scripts/index.js";
|
|
5
5
|
import { generateLandingPageStyles } from "./styles.js";
|
|
6
6
|
import { resolveBaseUrl } from "../playlist.js";
|
|
7
|
+
import { sendSuccess } from "../config/http/envelope.js";
|
|
7
8
|
/* The landing page provides operators with all the information they need to integrate with Channels DVR. It features a tabbed interface with six sections:
|
|
8
9
|
*
|
|
9
10
|
* 1. Overview - Introduction to PrismCast and Quick Start instructions
|
|
@@ -91,11 +92,7 @@ export function setupRootEndpoint(app) {
|
|
|
91
92
|
const currentVersion = getPackageVersion();
|
|
92
93
|
await checkForUpdates(currentVersion, true);
|
|
93
94
|
const versionInfo = getVersionInfo(currentVersion);
|
|
94
|
-
res.
|
|
95
|
-
currentVersion,
|
|
96
|
-
latestVersion: versionInfo.latestVersion,
|
|
97
|
-
updateAvailable: versionInfo.updateAvailable
|
|
98
|
-
});
|
|
95
|
+
sendSuccess(res, { data: { currentVersion, latestVersion: versionInfo.latestVersion, updateAvailable: versionInfo.updateAvailable } });
|
|
99
96
|
});
|
|
100
97
|
// Changelog fetch endpoint. Returns changelog items for the appropriate version (latest if update available, otherwise current). Falls back to current version's
|
|
101
98
|
// changelog if the latest version's changelog isn't available.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/root/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC7G,OAAO,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,mBAAmB,EAC/H,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC9I,OAAO,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACnJ,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/root/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ export function generateChannelsSubtabScript() {
|
|
|
34
34
|
" if(data.success) {",
|
|
35
35
|
" showToast(data.message || 'Profile deleted.', 'success');",
|
|
36
36
|
" if(data.panelHtml) { applyProfilePanel(data.panelHtml); }",
|
|
37
|
-
" } else { showToast('Failed to delete profile: ' + (data
|
|
37
|
+
" } else { showToast('Failed to delete profile: ' + extractErrorMessage(data, 'Unknown error.'), 'error'); }",
|
|
38
38
|
" } catch(err) { console.error('Profile delete request failed.', err); showToast('Failed to delete profile.', 'error'); }",
|
|
39
39
|
" };",
|
|
40
40
|
// Edit an existing user profile by pre-populating the wizard.
|
|
@@ -74,7 +74,7 @@ export function generateChannelsSubtabScript() {
|
|
|
74
74
|
" };",
|
|
75
75
|
// Pending import data stored while the import preview modal is open.
|
|
76
76
|
" let pendingImportData = null;",
|
|
77
|
-
// Import a service pack via file picker
|
|
77
|
+
// Import a service pack via file picker - shows a preview modal before importing.
|
|
78
78
|
" window.startServiceImport = () => {",
|
|
79
79
|
" const input = document.createElement('input');",
|
|
80
80
|
" input.type = 'file';",
|
|
@@ -144,7 +144,7 @@ export function generateChannelsSubtabScript() {
|
|
|
144
144
|
" showToast(msg, 'success');",
|
|
145
145
|
" if(result.panelHtml) { applyProfilePanel(result.panelHtml); }",
|
|
146
146
|
" } else {",
|
|
147
|
-
" showToast('Import failed: ' + (result
|
|
147
|
+
" showToast('Import failed: ' + extractErrorMessage(result, 'Unknown error.'), 'error');",
|
|
148
148
|
" }",
|
|
149
149
|
" } catch(err) { console.error('Service pack import request failed.', err); closeImportModal(); showToast('Import request failed.', 'error'); }",
|
|
150
150
|
" };",
|
|
@@ -439,7 +439,7 @@ export function generateChannelsSubtabScript() {
|
|
|
439
439
|
" const hideInput = document.getElementById('wizard-hide-selector');",
|
|
440
440
|
" if(hideInput) hideInput.addEventListener('input', function() { s.hideSelector = this.value; });",
|
|
441
441
|
// Step 4: add-domain button and domain inputs with auto-fill for service tag. Per-iteration let bindings from for...of.entries() capture the correct index
|
|
442
|
-
// in each closure
|
|
442
|
+
// in each closure - no IIFE wrapper needed.
|
|
443
443
|
" const addDomainBtn = document.getElementById('wizard-add-domain-btn');",
|
|
444
444
|
" if(addDomainBtn) addDomainBtn.addEventListener('click', addWizardDomain);",
|
|
445
445
|
" for(const [ idx, row ] of document.querySelectorAll('.wizard-domain-row').entries()) {",
|
|
@@ -544,7 +544,7 @@ export function generateChannelsSubtabScript() {
|
|
|
544
544
|
" startProfileTest(s.domains[0].domain);",
|
|
545
545
|
" }",
|
|
546
546
|
" } else {",
|
|
547
|
-
" profileWizard.setError(data
|
|
547
|
+
" profileWizard.setError(extractErrorMessage(data, 'Failed to save profile.'));",
|
|
548
548
|
" }",
|
|
549
549
|
" } catch(err) {",
|
|
550
550
|
" console.error('Profile save request failed.', err);",
|
|
@@ -574,7 +574,7 @@ export function generateChannelsSubtabScript() {
|
|
|
574
574
|
" document.getElementById('test-check-btn').style.display = ",
|
|
575
575
|
" Object.keys(testSelectors).length > 0 ? '' : 'none';",
|
|
576
576
|
" } else {",
|
|
577
|
-
" showToast('Failed to start test: ' + (data
|
|
577
|
+
" showToast('Failed to start test: ' + extractErrorMessage(data, 'Unknown error.'), 'error');",
|
|
578
578
|
" }",
|
|
579
579
|
" } catch(e) { console.error('Profile test failed to start.', e); showToast('Failed to start test.', 'error'); }",
|
|
580
580
|
" };",
|
|
@@ -716,7 +716,7 @@ export function generateChannelsSubtabScript() {
|
|
|
716
716
|
" (async () => {",
|
|
717
717
|
" try {",
|
|
718
718
|
" const r = await fetch('/services/' + encodeURIComponent(slug) + '/channels?lineup=true');",
|
|
719
|
-
" if(!r.ok) { const d = await r.json(); throw new Error(d
|
|
719
|
+
" if(!r.ok) { const d = await r.json(); throw new Error(extractErrorMessage(d, 'Discovery failed.')); }",
|
|
720
720
|
" const channels = await r.json();",
|
|
721
721
|
" if(browseWizard.state.slug !== slug) return;",
|
|
722
722
|
" renderBrowseChannelList(channels, slug, label);",
|
|
@@ -800,7 +800,7 @@ export function generateChannelsSubtabScript() {
|
|
|
800
800
|
" html += '</div>';",
|
|
801
801
|
" document.getElementById('browse-content').innerHTML = html;",
|
|
802
802
|
" browseWizard.setTitle('Browse Channels <span class=\"browse-header-count\">(' + esc(label) + ' \\u2014 ' + channels.length + ' channels)</span>');",
|
|
803
|
-
// Set indeterminate state on checkboxes for channels that exist via a different service. The indeterminate property cannot be set via HTML attributes
|
|
803
|
+
// Set indeterminate state on checkboxes for channels that exist via a different service. The indeterminate property cannot be set via HTML attributes -
|
|
804
804
|
// it must be set via JavaScript after the elements are in the DOM.
|
|
805
805
|
" const switchCbs = document.querySelectorAll('.browse-channel-cb[data-original=\"switch\"]');",
|
|
806
806
|
" for(const sc of switchCbs) sc.indeterminate = true;",
|
|
@@ -945,7 +945,7 @@ export function generateChannelsSubtabScript() {
|
|
|
945
945
|
" } else {",
|
|
946
946
|
" btn.disabled = false;",
|
|
947
947
|
" updateBrowseCount();",
|
|
948
|
-
" showToast('Failed to add channels: ' + (data
|
|
948
|
+
" showToast('Failed to add channels: ' + extractErrorMessage(data, 'Unknown error.'), 'error');",
|
|
949
949
|
" }",
|
|
950
950
|
" } catch(err) {",
|
|
951
951
|
" console.error('Browse channels request failed.', err);",
|
|
@@ -1024,7 +1024,7 @@ export function generateChannelsSubtabScript() {
|
|
|
1024
1024
|
" });",
|
|
1025
1025
|
" const data = await res.json();",
|
|
1026
1026
|
" if(data.success) renderSetupAuthWaiting();",
|
|
1027
|
-
" else showToast('Failed to start login: ' + (data
|
|
1027
|
+
" else showToast('Failed to start login: ' + extractErrorMessage(data, 'Unknown error.'), 'error');",
|
|
1028
1028
|
" } catch(e) { console.error('Login start request failed.', e); showToast('Failed to start login.', 'error'); }",
|
|
1029
1029
|
" }",
|
|
1030
1030
|
// Mark the current service auth as done and advance to the next.
|
|
@@ -1166,7 +1166,7 @@ export function generateChannelsSubtabScript() {
|
|
|
1166
1166
|
" });",
|
|
1167
1167
|
" const data = await res.json();",
|
|
1168
1168
|
" if(!data.success) {",
|
|
1169
|
-
" errorDiv.textContent = data
|
|
1169
|
+
" errorDiv.textContent = extractErrorMessage(data, 'Failed to create tag.');",
|
|
1170
1170
|
" errorDiv.style.display = '';",
|
|
1171
1171
|
" return;",
|
|
1172
1172
|
" }",
|
|
@@ -1183,7 +1183,7 @@ export function generateChannelsSubtabScript() {
|
|
|
1183
1183
|
" const res = await fetch('/config/tags/' + encodeURIComponent(tag), { method: 'DELETE' });",
|
|
1184
1184
|
" const data = await res.json();",
|
|
1185
1185
|
" if(!data.success) {",
|
|
1186
|
-
" showToast(data
|
|
1186
|
+
" showToast(extractErrorMessage(data, 'Failed to delete tag.'), 'error');",
|
|
1187
1187
|
" return;",
|
|
1188
1188
|
" }",
|
|
1189
1189
|
" applyTagResponse(data, 'Tag deleted: ' + tag);",
|
|
@@ -1202,7 +1202,7 @@ export function generateChannelsSubtabScript() {
|
|
|
1202
1202
|
" });",
|
|
1203
1203
|
" const data = await res.json();",
|
|
1204
1204
|
" if(!data.success) {",
|
|
1205
|
-
" showToast(data
|
|
1205
|
+
" showToast(extractErrorMessage(data, 'Failed to restore tag.'), 'error');",
|
|
1206
1206
|
" return;",
|
|
1207
1207
|
" }",
|
|
1208
1208
|
" applyTagResponse(data, 'Tag restored: ' + tag);",
|
|
@@ -1211,7 +1211,7 @@ export function generateChannelsSubtabScript() {
|
|
|
1211
1211
|
" showToast('Failed to restore tag.', 'error');",
|
|
1212
1212
|
" }",
|
|
1213
1213
|
" };",
|
|
1214
|
-
// Tag Column Filter
|
|
1214
|
+
// Tag Column Filter - client-side view filter that shows/hides rows based on their data-channel-tags attribute. Transient (not persisted, resets on page load).
|
|
1215
1215
|
// All tag checkboxes start checked (show all). Unchecking a tag hides rows that don't have ANY of the remaining checked tags.
|
|
1216
1216
|
" window.applyTagColumnFilter = () => {",
|
|
1217
1217
|
" const checkboxes = document.querySelectorAll('.tag-filter-checkbox');",
|
|
@@ -1280,7 +1280,7 @@ export function generateChannelsSubtabScript() {
|
|
|
1280
1280
|
" const code = document.querySelector('.playlist-hint-content code');",
|
|
1281
1281
|
" if(code) { copyToClipboard(code.textContent, 'Playlist URL copied to clipboard.'); }",
|
|
1282
1282
|
" };",
|
|
1283
|
-
// Inline tag rename
|
|
1283
|
+
// Inline tag rename - replaces the tag pill with an input field. The original span is saved so it can be restored on cancel or error without a page reload.
|
|
1284
1284
|
" window.startTagRename = (span, oldTag) => {",
|
|
1285
1285
|
" const originalSpan = span;",
|
|
1286
1286
|
" const input = document.createElement('input');",
|
|
@@ -1304,7 +1304,7 @@ export function generateChannelsSubtabScript() {
|
|
|
1304
1304
|
" const data = await res.json();",
|
|
1305
1305
|
" if(!data.success) {",
|
|
1306
1306
|
" restore();",
|
|
1307
|
-
" showToast(data
|
|
1307
|
+
" showToast(extractErrorMessage(data, 'Failed to rename tag.'), 'error');",
|
|
1308
1308
|
" return;",
|
|
1309
1309
|
" }",
|
|
1310
1310
|
" applyTagResponse(data, 'Tag renamed: ' + oldTag + ' \\u2192 ' + newTag);",
|