prismcast 1.4.2 → 1.5.1
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.js +36 -1
- package/dist/app.js.map +1 -1
- package/dist/browser/cdp.d.ts +2 -1
- package/dist/browser/cdp.js +44 -23
- package/dist/browser/cdp.js.map +1 -1
- package/dist/browser/channelSelection.d.ts +45 -1
- package/dist/browser/channelSelection.js +165 -27
- package/dist/browser/channelSelection.js.map +1 -1
- package/dist/browser/display.d.ts +0 -4
- package/dist/browser/display.js +0 -7
- package/dist/browser/display.js.map +1 -1
- package/dist/browser/index.d.ts +5 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/precaching.d.ts +5 -0
- package/dist/browser/precaching.js +116 -0
- package/dist/browser/precaching.js.map +1 -0
- package/dist/browser/tuning/directv.d.ts +2 -0
- package/dist/browser/tuning/directv.js +773 -0
- package/dist/browser/tuning/directv.js.map +1 -0
- package/dist/browser/tuning/fox.d.ts +2 -2
- package/dist/browser/tuning/fox.js +141 -22
- package/dist/browser/tuning/fox.js.map +1 -1
- package/dist/browser/tuning/hbo.d.ts +2 -2
- package/dist/browser/tuning/hbo.js +110 -41
- package/dist/browser/tuning/hbo.js.map +1 -1
- package/dist/browser/tuning/hulu.d.ts +2 -2
- package/dist/browser/tuning/hulu.js +442 -168
- package/dist/browser/tuning/hulu.js.map +1 -1
- package/dist/browser/tuning/sling.d.ts +2 -2
- package/dist/browser/tuning/sling.js +200 -56
- package/dist/browser/tuning/sling.js.map +1 -1
- package/dist/browser/tuning/spectrum.d.ts +2 -0
- package/dist/browser/tuning/spectrum.js +410 -0
- package/dist/browser/tuning/spectrum.js.map +1 -0
- package/dist/browser/tuning/youtubeTv.d.ts +2 -2
- package/dist/browser/tuning/youtubeTv.js +243 -57
- package/dist/browser/tuning/youtubeTv.js.map +1 -1
- package/dist/browser/video.d.ts +1 -1
- package/dist/browser/video.js +4 -2
- package/dist/browser/video.js.map +1 -1
- package/dist/channels/index.js +425 -34
- package/dist/channels/index.js.map +1 -1
- package/dist/config/health.d.ts +78 -0
- package/dist/config/health.js +202 -0
- package/dist/config/health.js.map +1 -0
- package/dist/config/paths.d.ts +15 -0
- package/dist/config/paths.js +21 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/profiles.d.ts +6 -4
- package/dist/config/profiles.js +65 -14
- package/dist/config/profiles.js.map +1 -1
- package/dist/config/providerPacks.d.ts +46 -0
- package/dist/config/providerPacks.js +200 -0
- package/dist/config/providerPacks.js.map +1 -0
- package/dist/config/providers.d.ts +36 -3
- package/dist/config/providers.js +173 -9
- package/dist/config/providers.js.map +1 -1
- package/dist/config/sites.d.ts +1 -12
- package/dist/config/sites.js +50 -5
- package/dist/config/sites.js.map +1 -1
- package/dist/config/userChannels.d.ts +35 -2
- package/dist/config/userChannels.js +109 -17
- package/dist/config/userChannels.js.map +1 -1
- package/dist/config/userConfig.d.ts +5 -1
- package/dist/config/userConfig.js +58 -6
- package/dist/config/userConfig.js.map +1 -1
- package/dist/config/userProfiles.d.ts +81 -0
- package/dist/config/userProfiles.js +424 -0
- package/dist/config/userProfiles.js.map +1 -0
- package/dist/routes/config/channels/index.d.ts +3 -0
- package/dist/routes/config/channels/index.js +3 -0
- package/dist/routes/config/channels/index.js.map +1 -0
- package/dist/routes/config/channels/routes.d.ts +6 -0
- package/dist/routes/config/channels/routes.js +799 -0
- package/dist/routes/config/channels/routes.js.map +1 -0
- package/dist/routes/config/channels/table.d.ts +46 -0
- package/dist/routes/config/channels/table.js +821 -0
- package/dist/routes/config/channels/table.js.map +1 -0
- package/dist/routes/config/index.d.ts +37 -0
- package/dist/routes/config/index.js +81 -0
- package/dist/routes/config/index.js.map +1 -0
- package/dist/routes/config/providers.d.ts +18 -0
- package/dist/routes/config/providers.js +573 -0
- package/dist/routes/config/providers.js.map +1 -0
- package/dist/routes/config/settings.d.ts +39 -0
- package/dist/routes/config/settings.js +820 -0
- package/dist/routes/config/settings.js.map +1 -0
- package/dist/routes/index.d.ts +3 -2
- package/dist/routes/index.js +7 -4
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/playlist.d.ts +5 -1
- package/dist/routes/playlist.js +32 -7
- package/dist/routes/playlist.js.map +1 -1
- package/dist/routes/providers.d.ts +6 -0
- package/dist/routes/providers.js +166 -0
- package/dist/routes/providers.js.map +1 -0
- package/dist/routes/root/content.d.ts +32 -0
- package/dist/routes/root/content.js +860 -0
- package/dist/routes/root/content.js.map +1 -0
- package/dist/routes/root/index.js +197 -0
- package/dist/routes/root/index.js.map +1 -0
- package/dist/routes/root/scripts/channels.d.ts +1 -0
- package/dist/routes/root/scripts/channels.js +745 -0
- package/dist/routes/root/scripts/channels.js.map +1 -0
- package/dist/routes/root/scripts/config.d.ts +1 -0
- package/dist/routes/root/scripts/config.js +1686 -0
- package/dist/routes/root/scripts/config.js.map +1 -0
- package/dist/routes/root/scripts/index.d.ts +3 -0
- package/dist/routes/root/scripts/index.js +8 -0
- package/dist/routes/root/scripts/index.js.map +1 -0
- package/dist/routes/root/scripts/status.d.ts +1 -0
- package/dist/routes/root/scripts/status.js +436 -0
- package/dist/routes/root/scripts/status.js.map +1 -0
- package/dist/routes/root/styles.d.ts +5 -0
- package/dist/routes/root/styles.js +442 -0
- package/dist/routes/root/styles.js.map +1 -0
- package/dist/routes/ui.js +8 -3
- package/dist/routes/ui.js.map +1 -1
- package/dist/service/commands.d.ts +5 -3
- package/dist/service/commands.js +117 -33
- package/dist/service/commands.js.map +1 -1
- package/dist/service/generators.d.ts +27 -0
- package/dist/service/generators.js +97 -6
- package/dist/service/generators.js.map +1 -1
- package/dist/streaming/fmp4Segmenter.js +2 -2
- package/dist/streaming/fmp4Segmenter.js.map +1 -1
- package/dist/streaming/hls.js +29 -1
- package/dist/streaming/hls.js.map +1 -1
- package/dist/streaming/hlsResume.d.ts +41 -0
- package/dist/streaming/hlsResume.js +153 -0
- package/dist/streaming/hlsResume.js.map +1 -0
- package/dist/streaming/hlsSegments.d.ts +6 -0
- package/dist/streaming/hlsSegments.js +8 -0
- package/dist/streaming/hlsSegments.js.map +1 -1
- package/dist/streaming/lifecycle.js +1 -1
- package/dist/streaming/lifecycle.js.map +1 -1
- package/dist/streaming/monitor.d.ts +1 -38
- package/dist/streaming/monitor.js +20 -307
- package/dist/streaming/monitor.js.map +1 -1
- package/dist/streaming/recovery.d.ts +143 -0
- package/dist/streaming/recovery.js +286 -0
- package/dist/streaming/recovery.js.map +1 -0
- package/dist/streaming/registry.d.ts +1 -1
- package/dist/streaming/setup.d.ts +1 -1
- package/dist/streaming/setup.js +3 -1
- package/dist/streaming/setup.js.map +1 -1
- package/dist/streaming/statusEmitter.d.ts +4 -2
- package/dist/streaming/statusEmitter.js +5 -0
- package/dist/streaming/statusEmitter.js.map +1 -1
- package/dist/types/channels.d.ts +68 -0
- package/dist/types/channels.js +2 -0
- package/dist/types/channels.js.map +1 -0
- package/dist/types/config.d.ts +127 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +7 -429
- package/dist/types/index.js +1 -5
- package/dist/types/index.js.map +1 -1
- package/dist/types/profiles.d.ts +143 -0
- package/dist/types/profiles.js +2 -0
- package/dist/types/profiles.js.map +1 -0
- package/dist/types/selection.d.ts +102 -0
- package/dist/types/selection.js +6 -0
- package/dist/types/selection.js.map +1 -0
- package/dist/types/shared.d.ts +7 -0
- package/dist/types/shared.js +6 -0
- package/dist/types/shared.js.map +1 -0
- package/dist/types/streaming.d.ts +96 -0
- package/dist/types/streaming.js +2 -0
- package/dist/types/streaming.js.map +1 -0
- package/dist/utils/debugFilter.js +4 -1
- package/dist/utils/debugFilter.js.map +1 -1
- package/dist/utils/format.d.ts +7 -0
- package/dist/utils/format.js +22 -0
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/sanitize.d.ts +14 -0
- package/dist/utils/sanitize.js +37 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/package.json +5 -3
- package/dist/routes/config.d.ts +0 -76
- package/dist/routes/config.js +0 -2187
- package/dist/routes/config.js.map +0 -1
- package/dist/routes/root.js +0 -3158
- package/dist/routes/root.js.map +0 -1
- /package/dist/routes/{root.d.ts → root/index.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/routes/root/scripts/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, HJD (https://github.com/hjdhjd). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* index.ts: Barrel re-export for client-side JavaScript generators.
|
|
4
|
+
*/
|
|
5
|
+
export { generateChannelsSubtabScript } from "./channels.js";
|
|
6
|
+
export { generateConfigSubtabScript } from "./config.js";
|
|
7
|
+
export { generateStatusScript } from "./status.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/routes/root/scripts/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function generateStatusScript(): string;
|
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, HJD (https://github.com/hjdhjd). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* status.ts: Client-side JavaScript generator for the PrismCast status display.
|
|
4
|
+
*/
|
|
5
|
+
export function generateStatusScript() {
|
|
6
|
+
return [
|
|
7
|
+
"<script>",
|
|
8
|
+
"var statusEventSource = null;",
|
|
9
|
+
"var streamData = {};",
|
|
10
|
+
"var systemData = null;",
|
|
11
|
+
"var expandedStreams = {};",
|
|
12
|
+
"var healthColorVars = { healthy: 'var(--stream-healthy)', buffering: 'var(--stream-buffering)', recovering: 'var(--stream-recovering)', ",
|
|
13
|
+
" stalled: 'var(--stream-stalled)', error: 'var(--stream-error)' };",
|
|
14
|
+
// Format duration in human readable format.
|
|
15
|
+
"function formatDuration(seconds) {",
|
|
16
|
+
" if (seconds < 60) return seconds + 's';",
|
|
17
|
+
" if (seconds < 3600) return Math.floor(seconds / 60) + 'm ' + (seconds % 60) + 's';",
|
|
18
|
+
" var h = Math.floor(seconds / 3600);",
|
|
19
|
+
" var m = Math.floor((seconds % 3600) / 60);",
|
|
20
|
+
" return h + 'h ' + m + 'm';",
|
|
21
|
+
"}",
|
|
22
|
+
// Format bytes in human readable format.
|
|
23
|
+
"function formatBytes(bytes) {",
|
|
24
|
+
" if (bytes === 0) return '0 B';",
|
|
25
|
+
" if (bytes < 1024) return bytes + ' B';",
|
|
26
|
+
" if (bytes < 1048576) return (bytes / 1024).toFixed(1) + ' KB';",
|
|
27
|
+
" return (bytes / 1048576).toFixed(1) + ' MB';",
|
|
28
|
+
"}",
|
|
29
|
+
// Format absolute time (e.g., "6:54 AM" or "Jan 14, 6:54 AM" if different day).
|
|
30
|
+
"function formatTime(isoString) {",
|
|
31
|
+
" var date = new Date(isoString);",
|
|
32
|
+
" var now = new Date();",
|
|
33
|
+
" var hours = date.getHours();",
|
|
34
|
+
" var minutes = date.getMinutes();",
|
|
35
|
+
" var ampm = hours >= 12 ? 'PM' : 'AM';",
|
|
36
|
+
" hours = hours % 12;",
|
|
37
|
+
" hours = hours ? hours : 12;",
|
|
38
|
+
" var timeStr = hours + ':' + (minutes < 10 ? '0' : '') + minutes + ' ' + ampm;",
|
|
39
|
+
" if (date.toDateString() !== now.toDateString()) {",
|
|
40
|
+
" var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];",
|
|
41
|
+
" timeStr = months[date.getMonth()] + ' ' + date.getDate() + ', ' + timeStr;",
|
|
42
|
+
" }",
|
|
43
|
+
" return timeStr;",
|
|
44
|
+
"}",
|
|
45
|
+
// Extract concise domain from URL for display (last two hostname parts). Mirrors the server-side extractDomain() in utils/format.ts.
|
|
46
|
+
"function getDomain(url) {",
|
|
47
|
+
" try {",
|
|
48
|
+
" var parts = new URL(url).hostname.split('.');",
|
|
49
|
+
" return parts.length > 2 ? parts.slice(-2).join('.') : parts.join('.');",
|
|
50
|
+
" } catch (e) {",
|
|
51
|
+
" return url;",
|
|
52
|
+
" }",
|
|
53
|
+
"}",
|
|
54
|
+
// Build channel display HTML with an optional logo image. When a logo URL is available, renders an img element with an onerror fallback that hides the
|
|
55
|
+
// image and reveals a text span. The logoClass and textClass parameters allow callers to apply context-specific sizing.
|
|
56
|
+
"function channelDisplayHtml(logoUrl, name, logoClass, textClass) {",
|
|
57
|
+
" if(logoUrl) {",
|
|
58
|
+
" return '<img src=\"' + logoUrl + '\" class=\"' + logoClass + '\" alt=\"' + name + '\" title=\"' + name + '\" ' +",
|
|
59
|
+
" 'onerror=\"this.style.display=\\'none\\';this.nextElementSibling.style.display=\\'inline\\'\">' +",
|
|
60
|
+
" '<span class=\"' + textClass + '\" style=\"display:none\">' + name + '</span>';",
|
|
61
|
+
" }",
|
|
62
|
+
" return '<span class=\"' + textClass + '\">' + name + '</span>';",
|
|
63
|
+
"}",
|
|
64
|
+
// Get row background color based on health status. Uses CSS variables for theme support.
|
|
65
|
+
"function getRowTint(health) {",
|
|
66
|
+
" var tints = {",
|
|
67
|
+
" healthy: 'transparent',",
|
|
68
|
+
" buffering: 'var(--stream-tint-buffering)',",
|
|
69
|
+
" stalled: 'var(--stream-tint-stalled)',",
|
|
70
|
+
" recovering: 'var(--stream-tint-recovering)',",
|
|
71
|
+
" error: 'var(--stream-tint-error)'",
|
|
72
|
+
" };",
|
|
73
|
+
" return tints[health] || 'transparent';",
|
|
74
|
+
"}",
|
|
75
|
+
// Get health badge HTML using CSS variables for theme-aware colors. NOTE: Escalation level semantics defined in monitor.ts.
|
|
76
|
+
// L1=play/unmute, L2=seek, L3=source reload, L4=page navigation.
|
|
77
|
+
"function getHealthBadge(health, level) {",
|
|
78
|
+
" var label = '';",
|
|
79
|
+
" if (health === 'healthy') { label = 'Healthy'; }",
|
|
80
|
+
" else if (health === 'buffering') { label = 'Buffering'; }",
|
|
81
|
+
" else if (health === 'stalled') { label = 'Stalled'; }",
|
|
82
|
+
" else if (health === 'error') { label = 'Error'; }",
|
|
83
|
+
" else if (health === 'recovering') {",
|
|
84
|
+
" if (level === 1) { label = 'Resuming playback'; }",
|
|
85
|
+
" else if (level === 2) { label = 'Syncing to live'; }",
|
|
86
|
+
" else if (level === 3) { label = 'Reloading player'; }",
|
|
87
|
+
" else if (level >= 4) { label = 'Reloading page'; }",
|
|
88
|
+
" else { label = 'Recovering'; }",
|
|
89
|
+
" }",
|
|
90
|
+
" else { label = health; }",
|
|
91
|
+
" return '<span class=\"status-dot\" style=\"color: ' + (healthColorVars[health] || 'var(--text-muted)') + ';\">●</span> ' +",
|
|
92
|
+
" '<span style=\"color: var(--text-secondary);\">' + label + '</span>';",
|
|
93
|
+
"}",
|
|
94
|
+
// Update system status display in header. Shows system health (green dot when connected, red with label when not) and stream count.
|
|
95
|
+
"function updateSystemStatus() {",
|
|
96
|
+
" if(!systemData) return;",
|
|
97
|
+
" var healthEl = document.getElementById('system-health');",
|
|
98
|
+
" var streamEl = document.getElementById('stream-count');",
|
|
99
|
+
" if(systemData.browser.connected) {",
|
|
100
|
+
" healthEl.innerHTML = '<span class=\"status-dot\" style=\"color: var(--stream-healthy);\">●</span>';",
|
|
101
|
+
" } else {",
|
|
102
|
+
" healthEl.innerHTML = '<span class=\"status-dot\" style=\"color: var(--stream-error);\">●</span> Browser offline';",
|
|
103
|
+
" }",
|
|
104
|
+
" var active = systemData.streams.active;",
|
|
105
|
+
" var limit = systemData.streams.limit;",
|
|
106
|
+
" if(active === 0) {",
|
|
107
|
+
" streamEl.textContent = '0 streams';",
|
|
108
|
+
" streamEl.classList.remove('clickable');",
|
|
109
|
+
" var popMenu = document.getElementById('stream-popover-menu');",
|
|
110
|
+
" if(popMenu) popMenu.classList.remove('show');",
|
|
111
|
+
" } else {",
|
|
112
|
+
" streamEl.textContent = active + '/' + limit + ' streams';",
|
|
113
|
+
" streamEl.classList.add('clickable');",
|
|
114
|
+
" }",
|
|
115
|
+
"}",
|
|
116
|
+
// Build the popover content from streamData. Populates the given menu element with one row per active stream.
|
|
117
|
+
"function buildStreamPopoverContent(menu) {",
|
|
118
|
+
" var ids = Object.keys(streamData);",
|
|
119
|
+
" var html = '';",
|
|
120
|
+
" var now = Date.now();",
|
|
121
|
+
" for(var i = 0; i < ids.length; i++) {",
|
|
122
|
+
" var s = streamData[ids[i]];",
|
|
123
|
+
" var color = healthColorVars[s.health] || 'var(--text-muted)';",
|
|
124
|
+
" var name = s.channel || s.providerName || getDomain(s.url);",
|
|
125
|
+
" var dur = Math.floor((now - new Date(s.startTime).getTime()) / 1000);",
|
|
126
|
+
" var showSuffix = s.showName ? ' <span class=\"stream-popover-show\">' + s.showName + '</span>' : '';",
|
|
127
|
+
" html += '<div class=\"stream-popover-row\">';",
|
|
128
|
+
" html += '<span class=\"status-dot\" style=\"color: ' + color + ';\">●</span>';",
|
|
129
|
+
" html += channelDisplayHtml(s.logoUrl, name, 'stream-popover-logo', 'stream-popover-channel');",
|
|
130
|
+
" html += showSuffix;",
|
|
131
|
+
" html += '<span class=\"stream-popover-duration\">' + formatDuration(dur) + '</span>';",
|
|
132
|
+
" html += '</div>';",
|
|
133
|
+
" }",
|
|
134
|
+
" menu.innerHTML = html;",
|
|
135
|
+
"}",
|
|
136
|
+
// Update an already-open stream popover with current data. Called from SSE handlers and the duration interval.
|
|
137
|
+
"function updateStreamPopover() {",
|
|
138
|
+
" var menu = document.getElementById('stream-popover-menu');",
|
|
139
|
+
" if(!menu || !menu.classList.contains('show')) return;",
|
|
140
|
+
" var ids = Object.keys(streamData);",
|
|
141
|
+
" if(ids.length === 0) {",
|
|
142
|
+
" menu.classList.remove('show');",
|
|
143
|
+
" return;",
|
|
144
|
+
" }",
|
|
145
|
+
" buildStreamPopoverContent(menu);",
|
|
146
|
+
"}",
|
|
147
|
+
// Toggle the stream popover open or closed.
|
|
148
|
+
"window.toggleStreamPopover = function() {",
|
|
149
|
+
" var ids = Object.keys(streamData);",
|
|
150
|
+
" if(ids.length === 0) return;",
|
|
151
|
+
" var menu = document.getElementById('stream-popover-menu');",
|
|
152
|
+
" if(!menu) return;",
|
|
153
|
+
" var isOpen = menu.classList.contains('show');",
|
|
154
|
+
" closeDropdowns();",
|
|
155
|
+
" if(!isOpen) {",
|
|
156
|
+
" buildStreamPopoverContent(menu);",
|
|
157
|
+
" menu.classList.add('show');",
|
|
158
|
+
" }",
|
|
159
|
+
"};",
|
|
160
|
+
// Format last issue for display.
|
|
161
|
+
"function formatLastIssue(s) {",
|
|
162
|
+
" if (!s.lastIssueType || !s.lastIssueTime) { return 'None'; }",
|
|
163
|
+
" var issueLabel = s.lastIssueType.charAt(0).toUpperCase() + s.lastIssueType.slice(1);",
|
|
164
|
+
" var timeStr = formatTime(new Date(s.lastIssueTime).toISOString());",
|
|
165
|
+
" var status = (s.health === 'healthy') ? ' (recovered)' : ' (recovering)';",
|
|
166
|
+
" return issueLabel + ' at ' + timeStr + status;",
|
|
167
|
+
"}",
|
|
168
|
+
// Format auto-recovery info for display.
|
|
169
|
+
"function formatAutoRecovery(s) {",
|
|
170
|
+
" var attempts = s.recoveryAttempts;",
|
|
171
|
+
" var reloads = s.pageReloadsInWindow;",
|
|
172
|
+
" if (attempts === 0) { return 'N/A'; }",
|
|
173
|
+
" var str = attempts + (attempts === 1 ? ' attempt' : ' attempts');",
|
|
174
|
+
" if (reloads > 0) { str += ', ' + reloads + (reloads === 1 ? ' page reload' : ' page reloads'); }",
|
|
175
|
+
" return str;",
|
|
176
|
+
"}",
|
|
177
|
+
// Format client type breakdown for the detail row.
|
|
178
|
+
"function formatClients(s) {",
|
|
179
|
+
" if (s.clientCount === 0) { return 'None'; }",
|
|
180
|
+
" var labels = { 'hls': 'HLS', 'mpegts': 'MPEG-TS' };",
|
|
181
|
+
" var parts = [];",
|
|
182
|
+
" for (var i = 0; i < s.clients.length; i++) {",
|
|
183
|
+
" var c = s.clients[i];",
|
|
184
|
+
" parts.push(c.count + ' ' + (labels[c.type] || c.type));",
|
|
185
|
+
" }",
|
|
186
|
+
" return parts.join(', ');",
|
|
187
|
+
"}",
|
|
188
|
+
// Render the streams table.
|
|
189
|
+
"function renderStreamsTable() {",
|
|
190
|
+
" var tbody = document.getElementById('streams-tbody');",
|
|
191
|
+
" if (!tbody) return;",
|
|
192
|
+
" var streamIds = Object.keys(streamData);",
|
|
193
|
+
" if (streamIds.length === 0) {",
|
|
194
|
+
" tbody.innerHTML = '<tr class=\"empty-row\"><td colspan=\"4\">No active streams</td></tr>';",
|
|
195
|
+
" return;",
|
|
196
|
+
" }",
|
|
197
|
+
" var html = '';",
|
|
198
|
+
" for (var i = 0; i < streamIds.length; i++) {",
|
|
199
|
+
" var id = streamIds[i];",
|
|
200
|
+
" var s = streamData[id];",
|
|
201
|
+
" var isExpanded = expandedStreams[id];",
|
|
202
|
+
" var chevron = isExpanded ? '▼' : '▶';",
|
|
203
|
+
" var rowTint = getRowTint(s.health);",
|
|
204
|
+
" var channelText = s.channel || s.providerName || getDomain(s.url);",
|
|
205
|
+
" var channelDisplay = channelDisplayHtml(s.logoUrl, channelText, 'channel-logo', 'channel-text');",
|
|
206
|
+
" html += '<tr class=\"stream-row\" data-id=\"' + id + '\" onclick=\"toggleStreamDetails(' + id + ')\" style=\"background-color: ' + rowTint + ';\">';",
|
|
207
|
+
" html += '<td class=\"chevron\">' + chevron + '</td>';",
|
|
208
|
+
" var durationSpan = '<span class=\"stream-duration\" id=\"duration-' + id + '\">\\u00b7 ' + formatDuration(s.duration) + '</span>';",
|
|
209
|
+
" html += '<td class=\"stream-info\">' + channelDisplay + ' ' + durationSpan + '</td>';",
|
|
210
|
+
" var showDisplay = s.showName ? s.showName : '';",
|
|
211
|
+
" html += '<td class=\"stream-show\">' + showDisplay + '</td>';",
|
|
212
|
+
" var clientIndicator = '';",
|
|
213
|
+
" if (s.clientCount > 0) {",
|
|
214
|
+
" var title = s.clientCount + (s.clientCount !== 1 ? ' clients' : ' client');",
|
|
215
|
+
" clientIndicator = '<span class=\"client-count\" title=\"' + title + '\">◉ ' + s.clientCount + '</span> ';",
|
|
216
|
+
" }",
|
|
217
|
+
" html += '<td class=\"stream-health\">' + clientIndicator + getHealthBadge(s.health, s.escalationLevel) + '</td>';",
|
|
218
|
+
" html += '</tr>';",
|
|
219
|
+
" if (isExpanded) {",
|
|
220
|
+
" html += '<tr class=\"stream-details\" data-id=\"' + id + '\">';",
|
|
221
|
+
" html += '<td colspan=\"4\">';",
|
|
222
|
+
" html += '<div class=\"details-content\">';",
|
|
223
|
+
" html += '<div class=\"details-header\">';",
|
|
224
|
+
" html += '<div class=\"details-url\">' + s.url + '</div>';",
|
|
225
|
+
" var clientSuffix = s.clientCount > 0 ? ' · ' + formatClients(s) : '';",
|
|
226
|
+
" html += '<div class=\"details-started\"><strong>Started:</strong> ' + formatTime(s.startTime) + clientSuffix + '</div>';",
|
|
227
|
+
" html += '</div>';",
|
|
228
|
+
" html += '<div class=\"details-metrics\">';",
|
|
229
|
+
" html += '<div class=\"details-issue\"><strong>Last issue:</strong> ' + formatLastIssue(s) + '</div>';",
|
|
230
|
+
" html += '<div class=\"details-recovery\"><strong>Recovery:</strong> ' + formatAutoRecovery(s) + '</div>';",
|
|
231
|
+
" html += '<div class=\"details-memory\"><strong>Memory:</strong> ' + formatBytes(s.memoryBytes) + '</div>';",
|
|
232
|
+
" html += '</div>';",
|
|
233
|
+
" html += '</div>';",
|
|
234
|
+
" html += '</td></tr>';",
|
|
235
|
+
" }",
|
|
236
|
+
" }",
|
|
237
|
+
" tbody.innerHTML = html;",
|
|
238
|
+
"}",
|
|
239
|
+
// Toggle stream details.
|
|
240
|
+
"function toggleStreamDetails(id) {",
|
|
241
|
+
" expandedStreams[id] = !expandedStreams[id];",
|
|
242
|
+
" renderStreamsTable();",
|
|
243
|
+
"}",
|
|
244
|
+
// Update stream durations every second. We calculate duration from the immutable startTime rather than incrementing a counter, ensuring the displayed duration is
|
|
245
|
+
// always accurate regardless of any staleness in server-sent updates.
|
|
246
|
+
"function updateDurations() {",
|
|
247
|
+
" var now = Date.now();",
|
|
248
|
+
" var streamIds = Object.keys(streamData);",
|
|
249
|
+
" for (var i = 0; i < streamIds.length; i++) {",
|
|
250
|
+
" var id = streamIds[i];",
|
|
251
|
+
" var s = streamData[id];",
|
|
252
|
+
" var durationSec = Math.floor((now - new Date(s.startTime).getTime()) / 1000);",
|
|
253
|
+
" var el = document.getElementById('duration-' + id);",
|
|
254
|
+
" if (el) el.textContent = '\\u00b7 ' + formatDuration(durationSec);",
|
|
255
|
+
" }",
|
|
256
|
+
" updateStreamPopover();",
|
|
257
|
+
"}",
|
|
258
|
+
// Track the last time any SSE event was received from the status stream. Used by the staleness checker to detect silently dead connections.
|
|
259
|
+
"var lastStatusEventTime = Date.now();",
|
|
260
|
+
"var hiddenSince = 0;",
|
|
261
|
+
// Real-time health indicator updates. These functions update channel health icons and provider login icons in the Channels tab without a page refresh.
|
|
262
|
+
"function formatTimeAgo(ts) {",
|
|
263
|
+
" var seconds = Math.floor((Date.now() - ts) / 1000);",
|
|
264
|
+
" if(seconds < 60) { return 'just now'; }",
|
|
265
|
+
" var minutes = Math.floor(seconds / 60);",
|
|
266
|
+
" if(minutes < 60) { return minutes + (minutes === 1 ? ' minute ago' : ' minutes ago'); }",
|
|
267
|
+
" var hours = Math.floor(minutes / 60);",
|
|
268
|
+
" if(hours < 24) { return hours + (hours === 1 ? ' hour ago' : ' hours ago'); }",
|
|
269
|
+
" var days = Math.floor(hours / 24);",
|
|
270
|
+
" return days + (days === 1 ? ' day ago' : ' days ago');",
|
|
271
|
+
"}",
|
|
272
|
+
"function updateChannelHealth(channelKey, status, timestamp, providerTag) {",
|
|
273
|
+
" var row = document.getElementById('display-row-' + channelKey);",
|
|
274
|
+
" if(!row) { return; }",
|
|
275
|
+
// If a providerTag was supplied (snapshot and real-time events both include it), verify it matches the currently selected provider for this channel. The login
|
|
276
|
+
// button carries a data-provider-tag attribute with the selected provider. If the tags differ the health entry is from a previous provider and should be ignored.
|
|
277
|
+
" if(providerTag) {",
|
|
278
|
+
" var loginBtn = row.querySelector('.btn-icon-login');",
|
|
279
|
+
" if(loginBtn && loginBtn.getAttribute('data-provider-tag') !== providerTag) { return; }",
|
|
280
|
+
" }",
|
|
281
|
+
" var icon = row.querySelector('.btn-icon-health');",
|
|
282
|
+
" if(!icon) { return; }",
|
|
283
|
+
" icon.classList.remove('health-success', 'health-failed');",
|
|
284
|
+
" if(status === 'success') { icon.classList.add('health-success'); }",
|
|
285
|
+
" else if(status === 'failed') { icon.classList.add('health-failed'); }",
|
|
286
|
+
" icon.title = (status === 'success' ? 'Succeeded ' : 'Failed ') + formatTimeAgo(timestamp);",
|
|
287
|
+
"}",
|
|
288
|
+
"function updateProviderAuth(providerTag, timestamp) {",
|
|
289
|
+
" var buttons = document.querySelectorAll('.btn-icon-login[data-provider-tag=\"' + providerTag + '\"]');",
|
|
290
|
+
" for(var i = 0; i < buttons.length; i++) {",
|
|
291
|
+
" buttons[i].classList.add('health-success');",
|
|
292
|
+
" buttons[i].title = 'Verified ' + formatTimeAgo(timestamp);",
|
|
293
|
+
" }",
|
|
294
|
+
"}",
|
|
295
|
+
"function applyHealthSnapshot(data) {",
|
|
296
|
+
" var key;",
|
|
297
|
+
" for(key in data.channels) {",
|
|
298
|
+
" var entry = data.channels[key];",
|
|
299
|
+
" updateChannelHealth(key, entry.status, entry.timestamp, entry.providerTag);",
|
|
300
|
+
" }",
|
|
301
|
+
" for(key in data.providers) {",
|
|
302
|
+
" updateProviderAuth(key, data.providers[key]);",
|
|
303
|
+
" }",
|
|
304
|
+
"}",
|
|
305
|
+
// Connect (or reconnect) to the status SSE stream. Closes any existing connection first so this is safe to call repeatedly.
|
|
306
|
+
"function connectStatusSSE() {",
|
|
307
|
+
" if(statusEventSource) { statusEventSource.close(); }",
|
|
308
|
+
" statusEventSource = new EventSource('/streams/status');",
|
|
309
|
+
" lastStatusEventTime = Date.now();",
|
|
310
|
+
// Local helper that registers an event listener and updates the staleness timestamp on every event. Handlers are optional so heartbeat can
|
|
311
|
+
// be registered with just on('heartbeat') for pure keepalive tracking. The onerror handler stays outside this wrapper because errors must
|
|
312
|
+
// not reset the staleness timer — a connection that only fires errors is still dead.
|
|
313
|
+
" function on(event, handler) {",
|
|
314
|
+
" statusEventSource.addEventListener(event, function(e) {",
|
|
315
|
+
" lastStatusEventTime = Date.now();",
|
|
316
|
+
" if(handler) { handler(e); }",
|
|
317
|
+
" });",
|
|
318
|
+
" }",
|
|
319
|
+
" on('heartbeat');",
|
|
320
|
+
" on('snapshot', function(e) {",
|
|
321
|
+
" var data = JSON.parse(e.data);",
|
|
322
|
+
" systemData = data.system;",
|
|
323
|
+
" streamData = {};",
|
|
324
|
+
" for (var i = 0; i < data.streams.length; i++) {",
|
|
325
|
+
" streamData[data.streams[i].id] = data.streams[i];",
|
|
326
|
+
" }",
|
|
327
|
+
" updateSystemStatus();",
|
|
328
|
+
" renderStreamsTable();",
|
|
329
|
+
" updateStreamPopover();",
|
|
330
|
+
" if(data.health) { applyHealthSnapshot(data.health); }",
|
|
331
|
+
" });",
|
|
332
|
+
" on('streamAdded', function(e) {",
|
|
333
|
+
" var s = JSON.parse(e.data);",
|
|
334
|
+
" streamData[s.id] = s;",
|
|
335
|
+
" renderStreamsTable();",
|
|
336
|
+
" updateStreamPopover();",
|
|
337
|
+
" });",
|
|
338
|
+
" on('streamRemoved', function(e) {",
|
|
339
|
+
" var data = JSON.parse(e.data);",
|
|
340
|
+
" delete streamData[data.id];",
|
|
341
|
+
" delete expandedStreams[data.id];",
|
|
342
|
+
" renderStreamsTable();",
|
|
343
|
+
" updateStreamPopover();",
|
|
344
|
+
" if (typeof updateRestartDialogStatus === 'function') {",
|
|
345
|
+
" updateRestartDialogStatus();",
|
|
346
|
+
" }",
|
|
347
|
+
" });",
|
|
348
|
+
" on('streamHealthChanged', function(e) {",
|
|
349
|
+
" var s = JSON.parse(e.data);",
|
|
350
|
+
" if (streamData[s.id]) {",
|
|
351
|
+
" streamData[s.id] = s;",
|
|
352
|
+
" renderStreamsTable();",
|
|
353
|
+
" updateStreamPopover();",
|
|
354
|
+
" }",
|
|
355
|
+
" });",
|
|
356
|
+
" on('systemStatusChanged', function(e) {",
|
|
357
|
+
" systemData = JSON.parse(e.data);",
|
|
358
|
+
" updateSystemStatus();",
|
|
359
|
+
" });",
|
|
360
|
+
" on('healthChanged', function(e) {",
|
|
361
|
+
" var event = JSON.parse(e.data);",
|
|
362
|
+
" updateChannelHealth(event.channelKey, event.status, event.timestamp, event.providerTag);",
|
|
363
|
+
" if(event.status === 'success') { updateProviderAuth(event.providerTag, event.timestamp); }",
|
|
364
|
+
" });",
|
|
365
|
+
" statusEventSource.onerror = function() {",
|
|
366
|
+
" document.getElementById('system-health').innerHTML = '<span class=\"status-dot\" style=\"color: var(--stream-stalled);\">●</span> Updates paused';",
|
|
367
|
+
" };",
|
|
368
|
+
"}",
|
|
369
|
+
// Initial connection and periodic timers.
|
|
370
|
+
"connectStatusSSE();",
|
|
371
|
+
"setInterval(updateDurations, 1000);",
|
|
372
|
+
// Staleness detection: if no SSE event has arrived in 45 seconds, the connection is likely dead. Reconnect proactively.
|
|
373
|
+
"setInterval(function() {",
|
|
374
|
+
" if((Date.now() - lastStatusEventTime) > 45000) { connectStatusSSE(); }",
|
|
375
|
+
"}, 45000);",
|
|
376
|
+
// Visibility-driven reconnect. When the page returns from being hidden for more than 30 seconds, reconnect the status stream and re-activate
|
|
377
|
+
// the current tab so the logs stream reconnects naturally through its existing tabactivated listener.
|
|
378
|
+
"document.addEventListener('visibilitychange', function() {",
|
|
379
|
+
" if(document.hidden) {",
|
|
380
|
+
" hiddenSince = Date.now();",
|
|
381
|
+
" } else if((hiddenSince > 0) && ((Date.now() - hiddenSince) > 30000)) {",
|
|
382
|
+
" hiddenSince = 0;",
|
|
383
|
+
" connectStatusSSE();",
|
|
384
|
+
" var activeTab = document.querySelector('.tab-btn.active');",
|
|
385
|
+
" if(activeTab) {",
|
|
386
|
+
" document.dispatchEvent(new CustomEvent('tabactivated', { detail: { category: activeTab.getAttribute('data-category') } }));",
|
|
387
|
+
" }",
|
|
388
|
+
" } else {",
|
|
389
|
+
" hiddenSince = 0;",
|
|
390
|
+
" }",
|
|
391
|
+
"});",
|
|
392
|
+
// Copy playlist URL function for Overview tab Quick Start section.
|
|
393
|
+
"window.copyOverviewPlaylistUrl = function() {",
|
|
394
|
+
" var urlEl = document.getElementById('overview-playlist-url');",
|
|
395
|
+
" if (urlEl) {",
|
|
396
|
+
" navigator.clipboard.writeText(urlEl.textContent).then(function() {",
|
|
397
|
+
" var feedback = document.getElementById('overview-copy-feedback');",
|
|
398
|
+
" if (feedback) {",
|
|
399
|
+
" feedback.style.display = 'inline';",
|
|
400
|
+
" setTimeout(function() { feedback.style.display = 'none'; }, 2000);",
|
|
401
|
+
" }",
|
|
402
|
+
" });",
|
|
403
|
+
" }",
|
|
404
|
+
"};",
|
|
405
|
+
// JS-based tooltips for devices where the primary input can't hover (iPadOS). Safari on iPadOS doesn't show native title tooltips, so we use
|
|
406
|
+
// a single <div> appended to <body> and positioned via getBoundingClientRect(). This is immune to overflow containers and stacking contexts.
|
|
407
|
+
// On pure-touch devices without a trackpad, mouseenter never fires so the tooltip stays hidden. Desktop skips initialization entirely.
|
|
408
|
+
"(function() {",
|
|
409
|
+
" if(!window.matchMedia('(hover: none)').matches) return;",
|
|
410
|
+
" var tip = document.createElement('div');",
|
|
411
|
+
" tip.className = 'btn-icon-tooltip';",
|
|
412
|
+
" document.body.appendChild(tip);",
|
|
413
|
+
" document.addEventListener('mouseenter', function(e) {",
|
|
414
|
+
" var btn = e.target.closest('.btn-icon[aria-label]');",
|
|
415
|
+
" if(!btn) return;",
|
|
416
|
+
" var label = btn.getAttribute('title') || btn.getAttribute('aria-label');",
|
|
417
|
+
" if(!label) return;",
|
|
418
|
+
" var rect = btn.getBoundingClientRect();",
|
|
419
|
+
" tip.textContent = label;",
|
|
420
|
+
" tip.classList.add('visible');",
|
|
421
|
+
" tip.style.top = (rect.bottom + 6) + 'px';",
|
|
422
|
+
" tip.style.left = (rect.left + rect.width / 2) + 'px';",
|
|
423
|
+
" tip.style.transform = 'translateX(-50%)';",
|
|
424
|
+
" }, true);",
|
|
425
|
+
" document.addEventListener('mouseleave', function(e) {",
|
|
426
|
+
" var src = e.target.closest('.btn-icon[aria-label]');",
|
|
427
|
+
" if(!src) return;",
|
|
428
|
+
" var dest = e.relatedTarget && e.relatedTarget.closest && e.relatedTarget.closest('.btn-icon[aria-label]');",
|
|
429
|
+
" if(dest === src) return;",
|
|
430
|
+
" tip.classList.remove('visible');",
|
|
431
|
+
" }, true);",
|
|
432
|
+
"})();",
|
|
433
|
+
"</script>"
|
|
434
|
+
].join("\n");
|
|
435
|
+
}
|
|
436
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/routes/root/scripts/status.ts"],"names":[],"mappings":"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"}
|