@livepeer-frameworks/player-react 0.1.1 → 0.1.2
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/cjs/_virtual/_rollupPluginBabelHelpers.js +359 -0
- package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
- package/dist/cjs/assets/logomark.svg.js +8 -0
- package/dist/cjs/assets/logomark.svg.js.map +1 -0
- package/dist/cjs/components/DevModePanel.js +826 -0
- package/dist/cjs/components/DevModePanel.js.map +1 -0
- package/dist/cjs/components/DvdLogo.js +200 -0
- package/dist/cjs/components/DvdLogo.js.map +1 -0
- package/dist/cjs/components/Icons.js +439 -0
- package/dist/cjs/components/Icons.js.map +1 -0
- package/dist/cjs/components/IdleScreen.js +587 -0
- package/dist/cjs/components/IdleScreen.js.map +1 -0
- package/dist/cjs/components/LoadingScreen.js +523 -0
- package/dist/cjs/components/LoadingScreen.js.map +1 -0
- package/dist/cjs/components/Player.js +420 -0
- package/dist/cjs/components/Player.js.map +1 -0
- package/dist/cjs/components/PlayerControls.js +798 -0
- package/dist/cjs/components/PlayerControls.js.map +1 -0
- package/dist/cjs/components/PlayerErrorBoundary.js +80 -0
- package/dist/cjs/components/PlayerErrorBoundary.js.map +1 -0
- package/dist/cjs/components/SeekBar.js +253 -0
- package/dist/cjs/components/SeekBar.js.map +1 -0
- package/dist/cjs/components/SkipIndicator.js +92 -0
- package/dist/cjs/components/SkipIndicator.js.map +1 -0
- package/dist/cjs/components/SpeedIndicator.js +43 -0
- package/dist/cjs/components/SpeedIndicator.js.map +1 -0
- package/dist/cjs/components/StatsPanel.js +202 -0
- package/dist/cjs/components/StatsPanel.js.map +1 -0
- package/dist/cjs/components/StreamStateOverlay.js +229 -0
- package/dist/cjs/components/StreamStateOverlay.js.map +1 -0
- package/dist/cjs/components/ThumbnailOverlay.js +86 -0
- package/dist/cjs/components/ThumbnailOverlay.js.map +1 -0
- package/dist/cjs/components/TitleOverlay.js +32 -0
- package/dist/cjs/components/TitleOverlay.js.map +1 -0
- package/dist/cjs/context/PlayerContext.js +46 -0
- package/dist/cjs/context/PlayerContext.js.map +1 -0
- package/dist/cjs/hooks/useMetaTrack.js +165 -0
- package/dist/cjs/hooks/useMetaTrack.js.map +1 -0
- package/dist/cjs/hooks/usePlaybackQuality.js +131 -0
- package/dist/cjs/hooks/usePlaybackQuality.js.map +1 -0
- package/dist/cjs/hooks/usePlayerController.js +518 -0
- package/dist/cjs/hooks/usePlayerController.js.map +1 -0
- package/dist/cjs/hooks/usePlayerSelection.js +90 -0
- package/dist/cjs/hooks/usePlayerSelection.js.map +1 -0
- package/dist/cjs/hooks/useStreamState.js +360 -0
- package/dist/cjs/hooks/useStreamState.js.map +1 -0
- package/dist/cjs/hooks/useTelemetry.js +120 -0
- package/dist/cjs/hooks/useTelemetry.js.map +1 -0
- package/dist/cjs/hooks/useViewerEndpoints.js +222 -0
- package/dist/cjs/hooks/useViewerEndpoints.js.map +1 -0
- package/dist/cjs/index.js +97 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/ui/badge.js +34 -0
- package/dist/cjs/ui/badge.js.map +1 -0
- package/dist/cjs/ui/button.js +74 -0
- package/dist/cjs/ui/button.js.map +1 -0
- package/dist/cjs/ui/context-menu.js +163 -0
- package/dist/cjs/ui/context-menu.js.map +1 -0
- package/dist/cjs/ui/slider.js +60 -0
- package/dist/cjs/ui/slider.js.map +1 -0
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +329 -0
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
- package/dist/esm/assets/logomark.svg.js +4 -0
- package/dist/esm/assets/logomark.svg.js.map +1 -0
- package/dist/esm/components/DevModePanel.js +822 -0
- package/dist/esm/components/DevModePanel.js.map +1 -0
- package/dist/esm/components/DvdLogo.js +196 -0
- package/dist/esm/components/DvdLogo.js.map +1 -0
- package/dist/esm/components/Icons.js +421 -0
- package/dist/esm/components/Icons.js.map +1 -0
- package/dist/esm/components/IdleScreen.js +582 -0
- package/dist/esm/components/IdleScreen.js.map +1 -0
- package/dist/esm/components/LoadingScreen.js +519 -0
- package/dist/esm/components/LoadingScreen.js.map +1 -0
- package/dist/esm/components/Player.js +416 -0
- package/dist/esm/components/Player.js.map +1 -0
- package/dist/esm/components/PlayerControls.js +794 -0
- package/dist/esm/components/PlayerControls.js.map +1 -0
- package/dist/esm/components/PlayerErrorBoundary.js +76 -0
- package/dist/esm/components/PlayerErrorBoundary.js.map +1 -0
- package/dist/esm/components/SeekBar.js +249 -0
- package/dist/esm/components/SeekBar.js.map +1 -0
- package/dist/esm/components/SkipIndicator.js +88 -0
- package/dist/esm/components/SkipIndicator.js.map +1 -0
- package/dist/esm/components/SpeedIndicator.js +39 -0
- package/dist/esm/components/SpeedIndicator.js.map +1 -0
- package/dist/esm/components/StatsPanel.js +198 -0
- package/dist/esm/components/StatsPanel.js.map +1 -0
- package/dist/esm/components/StreamStateOverlay.js +224 -0
- package/dist/esm/components/StreamStateOverlay.js.map +1 -0
- package/dist/esm/components/ThumbnailOverlay.js +82 -0
- package/dist/esm/components/ThumbnailOverlay.js.map +1 -0
- package/dist/esm/components/TitleOverlay.js +28 -0
- package/dist/esm/components/TitleOverlay.js.map +1 -0
- package/dist/esm/context/PlayerContext.js +41 -0
- package/dist/esm/context/PlayerContext.js.map +1 -0
- package/dist/esm/hooks/useMetaTrack.js +163 -0
- package/dist/esm/hooks/useMetaTrack.js.map +1 -0
- package/dist/esm/hooks/usePlaybackQuality.js +129 -0
- package/dist/esm/hooks/usePlaybackQuality.js.map +1 -0
- package/dist/esm/hooks/usePlayerController.js +516 -0
- package/dist/esm/hooks/usePlayerController.js.map +1 -0
- package/dist/esm/hooks/usePlayerSelection.js +88 -0
- package/dist/esm/hooks/usePlayerSelection.js.map +1 -0
- package/dist/esm/hooks/useStreamState.js +358 -0
- package/dist/esm/hooks/useStreamState.js.map +1 -0
- package/dist/esm/hooks/useTelemetry.js +118 -0
- package/dist/esm/hooks/useTelemetry.js.map +1 -0
- package/dist/esm/hooks/useViewerEndpoints.js +220 -0
- package/dist/esm/hooks/useViewerEndpoints.js.map +1 -0
- package/dist/esm/index.js +23 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/ui/badge.js +31 -0
- package/dist/esm/ui/badge.js.map +1 -0
- package/dist/esm/ui/button.js +52 -0
- package/dist/esm/ui/button.js.map +1 -0
- package/dist/esm/ui/context-menu.js +132 -0
- package/dist/esm/ui/context-menu.js.map +1 -0
- package/dist/esm/ui/slider.js +38 -0
- package/dist/esm/ui/slider.js.map +1 -0
- package/dist/types/components/DvdLogo.d.ts +1 -1
- package/dist/types/components/Icons.d.ts +1 -1
- package/dist/types/components/Player.d.ts +1 -1
- package/dist/types/components/PlayerErrorBoundary.d.ts +2 -1
- package/dist/types/components/StreamStateOverlay.d.ts +2 -2
- package/dist/types/components/SubtitleRenderer.d.ts +2 -2
- package/dist/types/context/PlayerContext.d.ts +2 -2
- package/dist/types/context/index.d.ts +2 -2
- package/dist/types/hooks/useMetaTrack.d.ts +3 -3
- package/dist/types/hooks/usePlaybackQuality.d.ts +2 -2
- package/dist/types/hooks/usePlayerController.d.ts +26 -3
- package/dist/types/hooks/usePlayerSelection.d.ts +1 -1
- package/dist/types/hooks/useStreamState.d.ts +1 -1
- package/dist/types/hooks/useTelemetry.d.ts +1 -1
- package/dist/types/hooks/useViewerEndpoints.d.ts +3 -3
- package/dist/types/index.d.ts +28 -28
- package/dist/types/types.d.ts +3 -3
- package/dist/types/ui/select.d.ts +1 -1
- package/package.json +22 -14
- package/src/components/DvdLogo.tsx +1 -1
- package/src/components/Player.tsx +42 -3
- package/src/components/PlayerControls.tsx +36 -17
- package/src/components/PlayerErrorBoundary.tsx +2 -1
- package/src/hooks/usePlayerController.ts +61 -1
- package/dist/types/components/players/DashJsPlayer.d.ts +0 -18
- package/dist/types/components/players/HlsJsPlayer.d.ts +0 -18
- package/dist/types/components/players/MewsWsPlayer/index.d.ts +0 -18
- package/dist/types/components/players/MistPlayer.d.ts +0 -20
- package/dist/types/components/players/MistWebRTCPlayer/index.d.ts +0 -20
- package/dist/types/components/players/NativePlayer.d.ts +0 -19
- package/dist/types/components/players/VideoJsPlayer.d.ts +0 -18
- package/src/components/players/DashJsPlayer.tsx +0 -58
- package/src/components/players/HlsJsPlayer.tsx +0 -58
- package/src/components/players/MewsWsPlayer/index.tsx +0 -58
- package/src/components/players/MistPlayer.tsx +0 -62
- package/src/components/players/MistWebRTCPlayer/index.tsx +0 -68
- package/src/components/players/NativePlayer.tsx +0 -56
- package/src/components/players/VideoJsPlayer.tsx +0 -58
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { slicedToArray as _slicedToArray, asyncToGenerator as _asyncToGenerator, regenerator as _regenerator, objectSpread2 as _objectSpread2, regeneratorValues as _regeneratorValues } from '../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import { useState, useRef, useEffect } from 'react';
|
|
3
|
+
|
|
4
|
+
var MAX_RETRIES = 3;
|
|
5
|
+
var INITIAL_DELAY_MS = 500;
|
|
6
|
+
function fetchWithRetry(_x, _x2) {
|
|
7
|
+
return _fetchWithRetry.apply(this, arguments);
|
|
8
|
+
}
|
|
9
|
+
function _fetchWithRetry() {
|
|
10
|
+
_fetchWithRetry = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(url, options) {
|
|
11
|
+
var maxRetries,
|
|
12
|
+
initialDelay,
|
|
13
|
+
lastError,
|
|
14
|
+
_loop,
|
|
15
|
+
_ret,
|
|
16
|
+
attempt,
|
|
17
|
+
_args3 = arguments;
|
|
18
|
+
return _regenerator().w(function (_context3) {
|
|
19
|
+
while (1) switch (_context3.n) {
|
|
20
|
+
case 0:
|
|
21
|
+
maxRetries = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : MAX_RETRIES;
|
|
22
|
+
initialDelay = _args3.length > 3 && _args3[3] !== undefined ? _args3[3] : INITIAL_DELAY_MS;
|
|
23
|
+
lastError = null;
|
|
24
|
+
_loop = /*#__PURE__*/_regenerator().m(function _loop() {
|
|
25
|
+
var response, _options$signal, delay, _t2;
|
|
26
|
+
return _regenerator().w(function (_context2) {
|
|
27
|
+
while (1) switch (_context2.p = _context2.n) {
|
|
28
|
+
case 0:
|
|
29
|
+
_context2.p = 0;
|
|
30
|
+
_context2.n = 1;
|
|
31
|
+
return fetch(url, options);
|
|
32
|
+
case 1:
|
|
33
|
+
response = _context2.v;
|
|
34
|
+
return _context2.a(2, {
|
|
35
|
+
v: response
|
|
36
|
+
});
|
|
37
|
+
case 2:
|
|
38
|
+
_context2.p = 2;
|
|
39
|
+
_t2 = _context2.v;
|
|
40
|
+
lastError = _t2 instanceof Error ? _t2 : new Error("Fetch failed");
|
|
41
|
+
// Don't retry on abort
|
|
42
|
+
if (!((_options$signal = options.signal) !== null && _options$signal !== void 0 && _options$signal.aborted)) {
|
|
43
|
+
_context2.n = 3;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
throw lastError;
|
|
47
|
+
case 3:
|
|
48
|
+
if (!(attempt < maxRetries - 1)) {
|
|
49
|
+
_context2.n = 4;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
delay = initialDelay * Math.pow(2, attempt);
|
|
53
|
+
console.warn("[useViewerEndpoints] Retry ".concat(attempt + 1, "/").concat(maxRetries - 1, " after ").concat(delay, "ms"));
|
|
54
|
+
_context2.n = 4;
|
|
55
|
+
return new Promise(function (resolve) {
|
|
56
|
+
return setTimeout(resolve, delay);
|
|
57
|
+
});
|
|
58
|
+
case 4:
|
|
59
|
+
return _context2.a(2);
|
|
60
|
+
}
|
|
61
|
+
}, _loop, null, [[0, 2]]);
|
|
62
|
+
});
|
|
63
|
+
attempt = 0;
|
|
64
|
+
case 1:
|
|
65
|
+
if (!(attempt < maxRetries)) {
|
|
66
|
+
_context3.n = 4;
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
return _context3.d(_regeneratorValues(_loop()), 2);
|
|
70
|
+
case 2:
|
|
71
|
+
_ret = _context3.v;
|
|
72
|
+
if (!_ret) {
|
|
73
|
+
_context3.n = 3;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
return _context3.a(2, _ret.v);
|
|
77
|
+
case 3:
|
|
78
|
+
attempt++;
|
|
79
|
+
_context3.n = 1;
|
|
80
|
+
break;
|
|
81
|
+
case 4:
|
|
82
|
+
throw lastError !== null && lastError !== void 0 ? lastError : new Error("Gateway unreachable after retries");
|
|
83
|
+
case 5:
|
|
84
|
+
return _context3.a(2);
|
|
85
|
+
}
|
|
86
|
+
}, _callee2);
|
|
87
|
+
}));
|
|
88
|
+
return _fetchWithRetry.apply(this, arguments);
|
|
89
|
+
}
|
|
90
|
+
function useViewerEndpoints(_ref) {
|
|
91
|
+
var gatewayUrl = _ref.gatewayUrl;
|
|
92
|
+
_ref.contentType;
|
|
93
|
+
var contentId = _ref.contentId,
|
|
94
|
+
authToken = _ref.authToken;
|
|
95
|
+
var _useState = useState(null),
|
|
96
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
97
|
+
endpoints = _useState2[0],
|
|
98
|
+
setEndpoints = _useState2[1];
|
|
99
|
+
var _useState3 = useState("idle"),
|
|
100
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
101
|
+
status = _useState4[0],
|
|
102
|
+
setStatus = _useState4[1];
|
|
103
|
+
var _useState5 = useState(null),
|
|
104
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
105
|
+
error = _useState6[0],
|
|
106
|
+
setError = _useState6[1];
|
|
107
|
+
var abortRef = useRef(null);
|
|
108
|
+
useEffect(function () {
|
|
109
|
+
var _abortRef$current;
|
|
110
|
+
if (!gatewayUrl || !contentId) return;
|
|
111
|
+
setStatus("loading");
|
|
112
|
+
setError(null);
|
|
113
|
+
(_abortRef$current = abortRef.current) === null || _abortRef$current === void 0 || _abortRef$current.abort();
|
|
114
|
+
var ac = new AbortController();
|
|
115
|
+
abortRef.current = ac;
|
|
116
|
+
_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
117
|
+
var _payload$errors, _payload$errors$, _payload$data, graphqlEndpoint, query, res, payload, resp, primary, fallbacks, message, _t;
|
|
118
|
+
return _regenerator().w(function (_context) {
|
|
119
|
+
while (1) switch (_context.p = _context.n) {
|
|
120
|
+
case 0:
|
|
121
|
+
_context.p = 0;
|
|
122
|
+
graphqlEndpoint = gatewayUrl.replace(/\/$/, "");
|
|
123
|
+
query = "\n query ResolveViewer($contentId: String!) {\n resolveViewerEndpoint(contentId: $contentId) {\n primary { nodeId baseUrl protocol url geoDistance loadScore outputs }\n fallbacks { nodeId baseUrl protocol url geoDistance loadScore outputs }\n metadata { contentType contentId title description durationSeconds status isLive viewers recordingSizeBytes clipSource createdAt }\n }\n }\n ";
|
|
124
|
+
_context.n = 1;
|
|
125
|
+
return fetchWithRetry(graphqlEndpoint, {
|
|
126
|
+
method: "POST",
|
|
127
|
+
headers: _objectSpread2({
|
|
128
|
+
"Content-Type": "application/json"
|
|
129
|
+
}, authToken ? {
|
|
130
|
+
Authorization: "Bearer ".concat(authToken)
|
|
131
|
+
} : {}),
|
|
132
|
+
body: JSON.stringify({
|
|
133
|
+
query: query,
|
|
134
|
+
variables: {
|
|
135
|
+
contentId: contentId
|
|
136
|
+
}
|
|
137
|
+
}),
|
|
138
|
+
signal: ac.signal
|
|
139
|
+
});
|
|
140
|
+
case 1:
|
|
141
|
+
res = _context.v;
|
|
142
|
+
if (res.ok) {
|
|
143
|
+
_context.n = 2;
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
throw new Error("Gateway GQL error ".concat(res.status));
|
|
147
|
+
case 2:
|
|
148
|
+
_context.n = 3;
|
|
149
|
+
return res.json();
|
|
150
|
+
case 3:
|
|
151
|
+
payload = _context.v;
|
|
152
|
+
if (!((_payload$errors = payload.errors) !== null && _payload$errors !== void 0 && _payload$errors.length)) {
|
|
153
|
+
_context.n = 4;
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
throw new Error(((_payload$errors$ = payload.errors[0]) === null || _payload$errors$ === void 0 ? void 0 : _payload$errors$.message) || "GraphQL error");
|
|
157
|
+
case 4:
|
|
158
|
+
resp = (_payload$data = payload.data) === null || _payload$data === void 0 ? void 0 : _payload$data.resolveViewerEndpoint;
|
|
159
|
+
primary = resp === null || resp === void 0 ? void 0 : resp.primary;
|
|
160
|
+
fallbacks = Array.isArray(resp === null || resp === void 0 ? void 0 : resp.fallbacks) ? resp.fallbacks : [];
|
|
161
|
+
if (primary) {
|
|
162
|
+
_context.n = 5;
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
throw new Error("No endpoints");
|
|
166
|
+
case 5:
|
|
167
|
+
// Parse outputs JSON string (GraphQL returns JSON scalar as string)
|
|
168
|
+
if (primary.outputs && typeof primary.outputs === "string") {
|
|
169
|
+
try {
|
|
170
|
+
primary.outputs = JSON.parse(primary.outputs);
|
|
171
|
+
} catch (_unused) {}
|
|
172
|
+
}
|
|
173
|
+
if (fallbacks) {
|
|
174
|
+
fallbacks.forEach(function (fb) {
|
|
175
|
+
if (fb.outputs && typeof fb.outputs === "string") {
|
|
176
|
+
try {
|
|
177
|
+
fb.outputs = JSON.parse(fb.outputs);
|
|
178
|
+
} catch (_unused2) {}
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
setEndpoints({
|
|
183
|
+
primary: primary,
|
|
184
|
+
fallbacks: fallbacks,
|
|
185
|
+
metadata: resp === null || resp === void 0 ? void 0 : resp.metadata
|
|
186
|
+
});
|
|
187
|
+
setStatus("ready");
|
|
188
|
+
_context.n = 8;
|
|
189
|
+
break;
|
|
190
|
+
case 6:
|
|
191
|
+
_context.p = 6;
|
|
192
|
+
_t = _context.v;
|
|
193
|
+
if (!ac.signal.aborted) {
|
|
194
|
+
_context.n = 7;
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
return _context.a(2);
|
|
198
|
+
case 7:
|
|
199
|
+
message = _t instanceof Error ? _t.message : "Unknown gateway error";
|
|
200
|
+
console.error("[useViewerEndpoints] Gateway resolution failed:", message);
|
|
201
|
+
setError(message);
|
|
202
|
+
setStatus("error");
|
|
203
|
+
case 8:
|
|
204
|
+
return _context.a(2);
|
|
205
|
+
}
|
|
206
|
+
}, _callee, null, [[0, 6]]);
|
|
207
|
+
}))();
|
|
208
|
+
return function () {
|
|
209
|
+
return ac.abort();
|
|
210
|
+
};
|
|
211
|
+
}, [gatewayUrl, contentId, authToken]);
|
|
212
|
+
return {
|
|
213
|
+
endpoints: endpoints,
|
|
214
|
+
status: status,
|
|
215
|
+
error: error
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export { useViewerEndpoints };
|
|
220
|
+
//# sourceMappingURL=useViewerEndpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useViewerEndpoints.js","sources":["../../../../src/hooks/useViewerEndpoints.ts"],"sourcesContent":["import { useEffect, useState, useRef } from \"react\";\nimport type { ContentType } from \"@livepeer-frameworks/player-core\";\nimport type { ContentEndpoints } from \"../types\";\n\nconst MAX_RETRIES = 3;\nconst INITIAL_DELAY_MS = 500;\n\ninterface Params {\n gatewayUrl: string;\n contentId: string;\n contentType?: ContentType;\n authToken?: string;\n}\n\nasync function fetchWithRetry(\n url: string,\n options: RequestInit,\n maxRetries: number = MAX_RETRIES,\n initialDelay: number = INITIAL_DELAY_MS\n): Promise<Response> {\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n const response = await fetch(url, options);\n return response;\n } catch (e) {\n lastError = e instanceof Error ? e : new Error(\"Fetch failed\");\n\n // Don't retry on abort\n if (options.signal?.aborted) {\n throw lastError;\n }\n\n // Wait before retrying (exponential backoff)\n if (attempt < maxRetries - 1) {\n const delay = initialDelay * Math.pow(2, attempt);\n console.warn(\n `[useViewerEndpoints] Retry ${attempt + 1}/${maxRetries - 1} after ${delay}ms`\n );\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n }\n\n throw lastError ?? new Error(\"Gateway unreachable after retries\");\n}\n\nexport function useViewerEndpoints({\n gatewayUrl,\n contentType: _contentType,\n contentId,\n authToken,\n}: Params) {\n const [endpoints, setEndpoints] = useState<ContentEndpoints | null>(null);\n const [status, setStatus] = useState<\"idle\" | \"loading\" | \"ready\" | \"error\">(\"idle\");\n const [error, setError] = useState<string | null>(null);\n const abortRef = useRef<AbortController | null>(null);\n\n useEffect(() => {\n if (!gatewayUrl || !contentId) return;\n setStatus(\"loading\");\n setError(null);\n abortRef.current?.abort();\n const ac = new AbortController();\n abortRef.current = ac;\n\n (async () => {\n try {\n const graphqlEndpoint = gatewayUrl.replace(/\\/$/, \"\");\n const query = `\n query ResolveViewer($contentId: String!) {\n resolveViewerEndpoint(contentId: $contentId) {\n primary { nodeId baseUrl protocol url geoDistance loadScore outputs }\n fallbacks { nodeId baseUrl protocol url geoDistance loadScore outputs }\n metadata { contentType contentId title description durationSeconds status isLive viewers recordingSizeBytes clipSource createdAt }\n }\n }\n `;\n const res = await fetchWithRetry(graphqlEndpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),\n },\n body: JSON.stringify({ query, variables: { contentId } }),\n signal: ac.signal,\n });\n if (!res.ok) throw new Error(`Gateway GQL error ${res.status}`);\n const payload = await res.json();\n if (payload.errors?.length) throw new Error(payload.errors[0]?.message || \"GraphQL error\");\n const resp = payload.data?.resolveViewerEndpoint;\n const primary = resp?.primary;\n const fallbacks = Array.isArray(resp?.fallbacks) ? resp.fallbacks : [];\n if (!primary) throw new Error(\"No endpoints\");\n\n // Parse outputs JSON string (GraphQL returns JSON scalar as string)\n if (primary.outputs && typeof primary.outputs === \"string\") {\n try {\n primary.outputs = JSON.parse(primary.outputs);\n } catch {}\n }\n if (fallbacks) {\n fallbacks.forEach((fb: any) => {\n if (fb.outputs && typeof fb.outputs === \"string\") {\n try {\n fb.outputs = JSON.parse(fb.outputs);\n } catch {}\n }\n });\n }\n\n setEndpoints({ primary, fallbacks, metadata: resp?.metadata });\n setStatus(\"ready\");\n } catch (e) {\n if (ac.signal.aborted) return;\n const message = e instanceof Error ? e.message : \"Unknown gateway error\";\n console.error(\"[useViewerEndpoints] Gateway resolution failed:\", message);\n setError(message);\n setStatus(\"error\");\n }\n })();\n\n return () => ac.abort();\n }, [gatewayUrl, contentId, authToken]);\n\n return { endpoints, status, error };\n}\n\nexport default useViewerEndpoints;\n"],"names":["MAX_RETRIES","INITIAL_DELAY_MS","fetchWithRetry","_x","_x2","_fetchWithRetry","apply","arguments","_asyncToGenerator","_regenerator","m","_callee2","url","options","maxRetries","initialDelay","lastError","_loop","_ret","attempt","_args3","w","_context3","n","length","undefined","response","_options$signal","delay","_t2","_context2","p","fetch","v","a","Error","signal","aborted","Math","pow","console","warn","concat","Promise","resolve","setTimeout","d","_regeneratorValues","useViewerEndpoints","_ref","gatewayUrl","contentType","contentId","authToken","_useState","useState","_useState2","_slicedToArray","endpoints","setEndpoints","_useState3","_useState4","status","setStatus","_useState5","_useState6","error","setError","abortRef","useRef","useEffect","_abortRef$current","current","abort","ac","AbortController","_callee","_payload$errors","_payload$errors$","_payload$data","graphqlEndpoint","query","res","payload","resp","primary","fallbacks","message","_t","_context","replace","method","headers","_objectSpread","Authorization","body","JSON","stringify","variables","ok","json","errors","data","resolveViewerEndpoint","Array","isArray","outputs","parse","_unused","forEach","fb","_unused2","metadata"],"mappings":"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"}
|