@livepeer-frameworks/player-react 0.1.0 → 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.
Files changed (187) hide show
  1. package/README.md +7 -9
  2. package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js +359 -0
  3. package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  4. package/dist/cjs/assets/logomark.svg.js +8 -0
  5. package/dist/cjs/assets/logomark.svg.js.map +1 -0
  6. package/dist/cjs/components/DevModePanel.js +826 -0
  7. package/dist/cjs/components/DevModePanel.js.map +1 -0
  8. package/dist/cjs/components/DvdLogo.js +200 -0
  9. package/dist/cjs/components/DvdLogo.js.map +1 -0
  10. package/dist/cjs/components/Icons.js +439 -0
  11. package/dist/cjs/components/Icons.js.map +1 -0
  12. package/dist/cjs/components/IdleScreen.js +587 -0
  13. package/dist/cjs/components/IdleScreen.js.map +1 -0
  14. package/dist/cjs/components/LoadingScreen.js +523 -0
  15. package/dist/cjs/components/LoadingScreen.js.map +1 -0
  16. package/dist/cjs/components/Player.js +420 -0
  17. package/dist/cjs/components/Player.js.map +1 -0
  18. package/dist/cjs/components/PlayerControls.js +798 -0
  19. package/dist/cjs/components/PlayerControls.js.map +1 -0
  20. package/dist/cjs/components/PlayerErrorBoundary.js +80 -0
  21. package/dist/cjs/components/PlayerErrorBoundary.js.map +1 -0
  22. package/dist/cjs/components/SeekBar.js +253 -0
  23. package/dist/cjs/components/SeekBar.js.map +1 -0
  24. package/dist/cjs/components/SkipIndicator.js +92 -0
  25. package/dist/cjs/components/SkipIndicator.js.map +1 -0
  26. package/dist/cjs/components/SpeedIndicator.js +43 -0
  27. package/dist/cjs/components/SpeedIndicator.js.map +1 -0
  28. package/dist/cjs/components/StatsPanel.js +202 -0
  29. package/dist/cjs/components/StatsPanel.js.map +1 -0
  30. package/dist/cjs/components/StreamStateOverlay.js +229 -0
  31. package/dist/cjs/components/StreamStateOverlay.js.map +1 -0
  32. package/dist/cjs/components/ThumbnailOverlay.js +86 -0
  33. package/dist/cjs/components/ThumbnailOverlay.js.map +1 -0
  34. package/dist/cjs/components/TitleOverlay.js +32 -0
  35. package/dist/cjs/components/TitleOverlay.js.map +1 -0
  36. package/dist/cjs/context/PlayerContext.js +46 -0
  37. package/dist/cjs/context/PlayerContext.js.map +1 -0
  38. package/dist/cjs/hooks/useMetaTrack.js +165 -0
  39. package/dist/cjs/hooks/useMetaTrack.js.map +1 -0
  40. package/dist/cjs/hooks/usePlaybackQuality.js +131 -0
  41. package/dist/cjs/hooks/usePlaybackQuality.js.map +1 -0
  42. package/dist/cjs/hooks/usePlayerController.js +518 -0
  43. package/dist/cjs/hooks/usePlayerController.js.map +1 -0
  44. package/dist/cjs/hooks/usePlayerSelection.js +90 -0
  45. package/dist/cjs/hooks/usePlayerSelection.js.map +1 -0
  46. package/dist/cjs/hooks/useStreamState.js +360 -0
  47. package/dist/cjs/hooks/useStreamState.js.map +1 -0
  48. package/dist/cjs/hooks/useTelemetry.js +120 -0
  49. package/dist/cjs/hooks/useTelemetry.js.map +1 -0
  50. package/dist/cjs/hooks/useViewerEndpoints.js +222 -0
  51. package/dist/cjs/hooks/useViewerEndpoints.js.map +1 -0
  52. package/dist/cjs/index.js +97 -1
  53. package/dist/cjs/index.js.map +1 -1
  54. package/dist/cjs/ui/badge.js +34 -0
  55. package/dist/cjs/ui/badge.js.map +1 -0
  56. package/dist/cjs/ui/button.js +74 -0
  57. package/dist/cjs/ui/button.js.map +1 -0
  58. package/dist/cjs/ui/context-menu.js +163 -0
  59. package/dist/cjs/ui/context-menu.js.map +1 -0
  60. package/dist/cjs/ui/slider.js +60 -0
  61. package/dist/cjs/ui/slider.js.map +1 -0
  62. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +329 -0
  63. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  64. package/dist/esm/assets/logomark.svg.js +4 -0
  65. package/dist/esm/assets/logomark.svg.js.map +1 -0
  66. package/dist/esm/components/DevModePanel.js +822 -0
  67. package/dist/esm/components/DevModePanel.js.map +1 -0
  68. package/dist/esm/components/DvdLogo.js +196 -0
  69. package/dist/esm/components/DvdLogo.js.map +1 -0
  70. package/dist/esm/components/Icons.js +421 -0
  71. package/dist/esm/components/Icons.js.map +1 -0
  72. package/dist/esm/components/IdleScreen.js +582 -0
  73. package/dist/esm/components/IdleScreen.js.map +1 -0
  74. package/dist/esm/components/LoadingScreen.js +519 -0
  75. package/dist/esm/components/LoadingScreen.js.map +1 -0
  76. package/dist/esm/components/Player.js +416 -0
  77. package/dist/esm/components/Player.js.map +1 -0
  78. package/dist/esm/components/PlayerControls.js +794 -0
  79. package/dist/esm/components/PlayerControls.js.map +1 -0
  80. package/dist/esm/components/PlayerErrorBoundary.js +76 -0
  81. package/dist/esm/components/PlayerErrorBoundary.js.map +1 -0
  82. package/dist/esm/components/SeekBar.js +249 -0
  83. package/dist/esm/components/SeekBar.js.map +1 -0
  84. package/dist/esm/components/SkipIndicator.js +88 -0
  85. package/dist/esm/components/SkipIndicator.js.map +1 -0
  86. package/dist/esm/components/SpeedIndicator.js +39 -0
  87. package/dist/esm/components/SpeedIndicator.js.map +1 -0
  88. package/dist/esm/components/StatsPanel.js +198 -0
  89. package/dist/esm/components/StatsPanel.js.map +1 -0
  90. package/dist/esm/components/StreamStateOverlay.js +224 -0
  91. package/dist/esm/components/StreamStateOverlay.js.map +1 -0
  92. package/dist/esm/components/ThumbnailOverlay.js +82 -0
  93. package/dist/esm/components/ThumbnailOverlay.js.map +1 -0
  94. package/dist/esm/components/TitleOverlay.js +28 -0
  95. package/dist/esm/components/TitleOverlay.js.map +1 -0
  96. package/dist/esm/context/PlayerContext.js +41 -0
  97. package/dist/esm/context/PlayerContext.js.map +1 -0
  98. package/dist/esm/hooks/useMetaTrack.js +163 -0
  99. package/dist/esm/hooks/useMetaTrack.js.map +1 -0
  100. package/dist/esm/hooks/usePlaybackQuality.js +129 -0
  101. package/dist/esm/hooks/usePlaybackQuality.js.map +1 -0
  102. package/dist/esm/hooks/usePlayerController.js +516 -0
  103. package/dist/esm/hooks/usePlayerController.js.map +1 -0
  104. package/dist/esm/hooks/usePlayerSelection.js +88 -0
  105. package/dist/esm/hooks/usePlayerSelection.js.map +1 -0
  106. package/dist/esm/hooks/useStreamState.js +358 -0
  107. package/dist/esm/hooks/useStreamState.js.map +1 -0
  108. package/dist/esm/hooks/useTelemetry.js +118 -0
  109. package/dist/esm/hooks/useTelemetry.js.map +1 -0
  110. package/dist/esm/hooks/useViewerEndpoints.js +220 -0
  111. package/dist/esm/hooks/useViewerEndpoints.js.map +1 -0
  112. package/dist/esm/index.js +23 -1
  113. package/dist/esm/index.js.map +1 -1
  114. package/dist/esm/ui/badge.js +31 -0
  115. package/dist/esm/ui/badge.js.map +1 -0
  116. package/dist/esm/ui/button.js +52 -0
  117. package/dist/esm/ui/button.js.map +1 -0
  118. package/dist/esm/ui/context-menu.js +132 -0
  119. package/dist/esm/ui/context-menu.js.map +1 -0
  120. package/dist/esm/ui/slider.js +38 -0
  121. package/dist/esm/ui/slider.js.map +1 -0
  122. package/dist/types/components/DvdLogo.d.ts +1 -1
  123. package/dist/types/components/Icons.d.ts +1 -1
  124. package/dist/types/components/Player.d.ts +1 -1
  125. package/dist/types/components/PlayerErrorBoundary.d.ts +2 -1
  126. package/dist/types/components/StreamStateOverlay.d.ts +2 -2
  127. package/dist/types/components/SubtitleRenderer.d.ts +2 -2
  128. package/dist/types/context/PlayerContext.d.ts +2 -2
  129. package/dist/types/context/index.d.ts +2 -2
  130. package/dist/types/hooks/useMetaTrack.d.ts +3 -3
  131. package/dist/types/hooks/usePlaybackQuality.d.ts +2 -2
  132. package/dist/types/hooks/usePlayerController.d.ts +26 -3
  133. package/dist/types/hooks/usePlayerSelection.d.ts +1 -1
  134. package/dist/types/hooks/useStreamState.d.ts +1 -1
  135. package/dist/types/hooks/useTelemetry.d.ts +1 -1
  136. package/dist/types/hooks/useViewerEndpoints.d.ts +3 -3
  137. package/dist/types/index.d.ts +28 -28
  138. package/dist/types/types.d.ts +3 -3
  139. package/dist/types/ui/select.d.ts +1 -1
  140. package/package.json +22 -14
  141. package/src/components/DevModePanel.tsx +244 -143
  142. package/src/components/DvdLogo.tsx +1 -1
  143. package/src/components/Icons.tsx +105 -25
  144. package/src/components/IdleScreen.tsx +262 -128
  145. package/src/components/LoadingScreen.tsx +169 -151
  146. package/src/components/LogoOverlay.tsx +3 -6
  147. package/src/components/Player.tsx +126 -59
  148. package/src/components/PlayerControls.tsx +384 -272
  149. package/src/components/PlayerErrorBoundary.tsx +7 -13
  150. package/src/components/SeekBar.tsx +96 -88
  151. package/src/components/SkipIndicator.tsx +2 -12
  152. package/src/components/SpeedIndicator.tsx +2 -11
  153. package/src/components/StatsPanel.tsx +31 -22
  154. package/src/components/StreamStateOverlay.tsx +105 -49
  155. package/src/components/SubtitleRenderer.tsx +29 -29
  156. package/src/components/ThumbnailOverlay.tsx +5 -6
  157. package/src/components/TitleOverlay.tsx +2 -8
  158. package/src/context/PlayerContext.tsx +4 -8
  159. package/src/context/index.ts +3 -3
  160. package/src/hooks/useMetaTrack.ts +27 -27
  161. package/src/hooks/usePlaybackQuality.ts +3 -3
  162. package/src/hooks/usePlayerController.ts +246 -138
  163. package/src/hooks/usePlayerSelection.ts +6 -6
  164. package/src/hooks/useStreamState.ts +51 -56
  165. package/src/hooks/useTelemetry.ts +18 -3
  166. package/src/hooks/useViewerEndpoints.ts +34 -23
  167. package/src/index.tsx +36 -28
  168. package/src/types.ts +8 -8
  169. package/src/ui/badge.tsx +6 -5
  170. package/src/ui/button.tsx +9 -8
  171. package/src/ui/context-menu.tsx +42 -61
  172. package/src/ui/select.tsx +13 -7
  173. package/src/ui/slider.tsx +18 -29
  174. package/dist/types/components/players/DashJsPlayer.d.ts +0 -18
  175. package/dist/types/components/players/HlsJsPlayer.d.ts +0 -18
  176. package/dist/types/components/players/MewsWsPlayer/index.d.ts +0 -18
  177. package/dist/types/components/players/MistPlayer.d.ts +0 -20
  178. package/dist/types/components/players/MistWebRTCPlayer/index.d.ts +0 -20
  179. package/dist/types/components/players/NativePlayer.d.ts +0 -19
  180. package/dist/types/components/players/VideoJsPlayer.d.ts +0 -18
  181. package/src/components/players/DashJsPlayer.tsx +0 -56
  182. package/src/components/players/HlsJsPlayer.tsx +0 -56
  183. package/src/components/players/MewsWsPlayer/index.tsx +0 -56
  184. package/src/components/players/MistPlayer.tsx +0 -60
  185. package/src/components/players/MistWebRTCPlayer/index.tsx +0 -59
  186. package/src/components/players/NativePlayer.tsx +0 -58
  187. package/src/components/players/VideoJsPlayer.tsx +0 -56
@@ -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":";;;AAIA,IAAMA,WAAW,GAAG,CAAC;AACrB,IAAMC,gBAAgB,GAAG,GAAG;AAAC,SASdC,cAAcA,CAAAC,EAAA,EAAAC,GAAA,EAAA;AAAA,EAAA,OAAAC,eAAA,CAAAC,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA;AAAA;AAAA,SAAAF,eAAAA,GAAA;EAAAA,eAAA,GAAAG,iBAAA,cAAAC,YAAA,EAAA,CAAAC,CAAA,CAA7B,SAAAC,QAAAA,CACEC,GAAW,EACXC,OAAoB,EAAA;AAAA,IAAA,IAAAC,UAAA;MAAAC,YAAA;MAAAC,SAAA;MAAAC,KAAA;MAAAC,IAAA;MAAAC,OAAA;AAAAC,MAAAA,MAAA,GAAAb,SAAA;AAAA,IAAA,OAAAE,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAAC,SAAA,EAAA;MAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAC,CAAA;AAAA,QAAA,KAAA,CAAA;UACpBT,UAAA,GAAAM,MAAA,CAAAI,MAAA,GAAA,CAAA,IAAAJ,MAAA,CAAA,CAAA,CAAA,KAAAK,SAAA,GAAAL,MAAA,CAAA,CAAA,CAAA,GAAqBpB,WAAW;UAChCe,YAAA,GAAAK,MAAA,CAAAI,MAAA,GAAA,CAAA,IAAAJ,MAAA,CAAA,CAAA,CAAA,KAAAK,SAAA,GAAAL,MAAA,CAAA,CAAA,CAAA,GAAuBnB,gBAAgB;AAEnCe,UAAAA,SAAS,GAAiB,IAAI;AAAAC,UAAAA,KAAA,gBAAAR,YAAA,EAAA,CAAAC,CAAA,UAAAO,KAAAA,GAAA;AAAA,YAAA,IAAAS,QAAA,EAAAC,eAAA,EAAAC,KAAA,EAAAC,GAAA;AAAA,YAAA,OAAApB,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAAS,SAAA,EAAA;AAAA,cAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAC,CAAA,GAAAD,SAAA,CAAAP,CAAA;AAAA,gBAAA,KAAA,CAAA;AAAAO,kBAAAA,SAAA,CAAAC,CAAA,GAAA,CAAA;AAAAD,kBAAAA,SAAA,CAAAP,CAAA,GAAA,CAAA;AAAA,kBAAA,OAIPS,KAAK,CAACpB,GAAG,EAAEC,OAAO,CAAC;AAAA,gBAAA,KAAA,CAAA;kBAApCa,QAAQ,GAAAI,SAAA,CAAAG,CAAA;kBAAA,OAAAH,SAAA,CAAAI,CAAA,CAAA,CAAA,EAAA;AAAAD,oBAAAA,CAAA,EACPP;AAAQ,mBAAA,CAAA;AAAA,gBAAA,KAAA,CAAA;AAAAI,kBAAAA,SAAA,CAAAC,CAAA,GAAA,CAAA;kBAAAF,GAAA,GAAAC,SAAA,CAAAG,CAAA;kBAEfjB,SAAS,GAAGa,GAAA,YAAaM,KAAK,GAAAN,GAAA,GAAO,IAAIM,KAAK,CAAC,cAAc,CAAC;AAE9D;kBAAA,IAAA,EAAA,CAAAR,eAAA,GACId,OAAO,CAACuB,MAAM,cAAAT,eAAA,KAAA,MAAA,IAAdA,eAAA,CAAgBU,OAAO,CAAA,EAAA;AAAAP,oBAAAA,SAAA,CAAAP,CAAA,GAAA,CAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAAA,MACnBP,SAAS;AAAA,gBAAA,KAAA,CAAA;AAAA,kBAAA,IAAA,EAIbG,OAAO,GAAGL,UAAU,GAAG,CAAC,CAAA,EAAA;AAAAgB,oBAAAA,SAAA,CAAAP,CAAA,GAAA,CAAA;AAAA,oBAAA;AAAA,kBAAA;kBACpBK,KAAK,GAAGb,YAAY,GAAGuB,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEpB,OAAO,CAAC;AACjDqB,kBAAAA,OAAO,CAACC,IAAI,CAAA,6BAAA,CAAAC,MAAA,CACoBvB,OAAO,GAAG,CAAC,EAAA,GAAA,CAAA,CAAAuB,MAAA,CAAI5B,UAAU,GAAG,CAAC,EAAA,SAAA,CAAA,CAAA4B,MAAA,CAAUd,KAAK,OAAI,CAC/E;AAACE,kBAAAA,SAAA,CAAAP,CAAA,GAAA,CAAA;AAAA,kBAAA,OACI,IAAIoB,OAAO,CAAC,UAACC,OAAO,EAAA;AAAA,oBAAA,OAAKC,UAAU,CAACD,OAAO,EAAEhB,KAAK,CAAC;kBAAA,CAAA,CAAC;AAAA,gBAAA,KAAA,CAAA;kBAAA,OAAAE,SAAA,CAAAI,CAAA,CAAA,CAAA,CAAA;AAAA;AAAA,YAAA,CAAA,EAAAjB,KAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAAA,UAAA,CAAA,CAAA;AAlBvDE,UAAAA,OAAO,GAAG,CAAC;AAAA,QAAA,KAAA,CAAA;UAAA,IAAA,EAAEA,OAAO,GAAGL,UAAU,CAAA,EAAA;AAAAQ,YAAAA,SAAA,CAAAC,CAAA,GAAA,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAAA,OAAAD,SAAA,CAAAwB,CAAA,CAAAC,kBAAA,CAAA9B,KAAA,EAAA,CAAA,EAAA,CAAA,CAAA;AAAA,QAAA,KAAA,CAAA;UAAAC,IAAA,GAAAI,SAAA,CAAAW,CAAA;AAAA,UAAA,IAAA,CAAAf,IAAA,EAAA;AAAAI,YAAAA,SAAA,CAAAC,CAAA,GAAA,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAAA,OAAAD,SAAA,CAAAY,CAAA,CAAA,CAAA,EAAAhB,IAAA,CAAAe,CAAA,CAAA;AAAA,QAAA,KAAA,CAAA;AAAEd,UAAAA,OAAO,EAAE;AAAAG,UAAAA,SAAA,CAAAC,CAAA,GAAA,CAAA;AAAA,UAAA;AAAA,QAAA,KAAA,CAAA;UAAA,MAuB/CP,SAAS,KAAA,IAAA,IAATA,SAAS,KAAA,MAAA,GAATA,SAAS,GAAI,IAAImB,KAAK,CAAC,mCAAmC,CAAC;AAAA,QAAA,KAAA,CAAA;UAAA,OAAAb,SAAA,CAAAY,CAAA,CAAA,CAAA,CAAA;AAAA;AAAA,IAAA,CAAA,EAAAvB,QAAA,CAAA;EAAA,CAClE,CAAA,CAAA;AAAA,EAAA,OAAAN,eAAA,CAAAC,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA;AAAA;AAEK,SAAUyC,kBAAkBA,CAAAC,IAAA,EAKzB;AAAA,EAAA,IAJPC,UAAU,GAAAD,IAAA,CAAVC,UAAU;IACeD,IAAA,CAAzBE,WAAW;QACXC,SAAS,GAAAH,IAAA,CAATG,SAAS;IACTC,SAAS,GAAAJ,IAAA,CAATI;AAEA,EAAA,IAAAC,SAAA,GAAkCC,QAAQ,CAA0B,IAAI,CAAC;IAAAC,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAAlEI,IAAAA,SAAS,GAAAF,UAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,YAAY,GAAAH,UAAA,CAAA,CAAA,CAAA;AAC9B,EAAA,IAAAI,UAAA,GAA4BL,QAAQ,CAAyC,MAAM,CAAC;IAAAM,UAAA,GAAAJ,cAAA,CAAAG,UAAA,EAAA,CAAA,CAAA;AAA7EE,IAAAA,MAAM,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,SAAS,GAAAF,UAAA,CAAA,CAAA,CAAA;AACxB,EAAA,IAAAG,UAAA,GAA0BT,QAAQ,CAAgB,IAAI,CAAC;IAAAU,UAAA,GAAAR,cAAA,CAAAO,UAAA,EAAA,CAAA,CAAA;AAAhDE,IAAAA,KAAK,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,QAAQ,GAAAF,UAAA,CAAA,CAAA,CAAA;AACtB,EAAA,IAAMG,QAAQ,GAAGC,MAAM,CAAyB,IAAI,CAAC;AAErDC,EAAAA,SAAS,CAAC,YAAK;AAAA,IAAA,IAAAC,iBAAA;AACb,IAAA,IAAI,CAACrB,UAAU,IAAI,CAACE,SAAS,EAAE;IAC/BW,SAAS,CAAC,SAAS,CAAC;IACpBI,QAAQ,CAAC,IAAI,CAAC;AACd,IAAA,CAAAI,iBAAA,GAAAH,QAAQ,CAACI,OAAO,MAAA,IAAA,IAAAD,iBAAA,KAAA,MAAA,IAAhBA,iBAAA,CAAkBE,KAAK,EAAE;AACzB,IAAA,IAAMC,EAAE,GAAG,IAAIC,eAAe,EAAE;IAChCP,QAAQ,CAACI,OAAO,GAAGE,EAAE;AAErBlE,IAAAA,iBAAA,cAAAC,YAAA,EAAA,CAAAC,CAAA,CAAC,SAAAkE,OAAAA,GAAA;MAAA,IAAAC,eAAA,EAAAC,gBAAA,EAAAC,aAAA,EAAAC,eAAA,EAAAC,KAAA,EAAAC,GAAA,EAAAC,OAAA,EAAAC,IAAA,EAAAC,OAAA,EAAAC,SAAA,EAAAC,OAAA,EAAAC,EAAA;AAAA,MAAA,OAAA/E,YAAA,EAAA,CAAAY,CAAA,CAAA,UAAAoE,QAAA,EAAA;AAAA,QAAA,OAAA,CAAA,EAAA,QAAAA,QAAA,CAAA1D,CAAA,GAAA0D,QAAA,CAAAlE,CAAA;AAAA,UAAA,KAAA,CAAA;AAAAkE,YAAAA,QAAA,CAAA1D,CAAA,GAAA,CAAA;YAESiD,eAAe,GAAG9B,UAAU,CAACwC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YAC/CT,KAAK,GAAA,wdAAA;AAAAQ,YAAAA,QAAA,CAAAlE,CAAA,GAAA,CAAA;YAAA,OASOrB,cAAc,CAAC8E,eAAe,EAAE;AAChDW,cAAAA,MAAM,EAAE,MAAM;AACdC,cAAAA,OAAO,EAAAC,cAAA,CAAA;AACL,gBAAA,cAAc,EAAE;AAAkB,eAAA,EAC9BxC,SAAS,GAAG;gBAAEyC,aAAa,EAAA,SAAA,CAAApD,MAAA,CAAYW,SAAS;eAAI,GAAG,EAAE,CAC9D;AACD0C,cAAAA,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;AAAEhB,gBAAAA,KAAK,EAALA,KAAK;AAAEiB,gBAAAA,SAAS,EAAE;AAAE9C,kBAAAA,SAAS,EAATA;AAAS;eAAI,CAAC;cACzDhB,MAAM,EAAEsC,EAAE,CAACtC;AACZ,aAAA,CAAC;AAAA,UAAA,KAAA,CAAA;YARI8C,GAAG,GAAAO,QAAA,CAAAxD,CAAA;YAAA,IASJiD,GAAG,CAACiB,EAAE,EAAA;AAAAV,cAAAA,QAAA,CAAAlE,CAAA,GAAA,CAAA;AAAA,cAAA;AAAA,YAAA;YAAA,MAAQ,IAAIY,KAAK,CAAA,oBAAA,CAAAO,MAAA,CAAsBwC,GAAG,CAACpB,MAAM,CAAE,CAAC;AAAA,UAAA,KAAA,CAAA;AAAA2B,YAAAA,QAAA,CAAAlE,CAAA,GAAA,CAAA;AAAA,YAAA,OACzC2D,GAAG,CAACkB,IAAI,EAAE;AAAA,UAAA,KAAA,CAAA;YAA1BjB,OAAO,GAAAM,QAAA,CAAAxD,CAAA;YAAA,IAAA,EAAA,CAAA4C,eAAA,GACTM,OAAO,CAACkB,MAAM,cAAAxB,eAAA,KAAA,MAAA,IAAdA,eAAA,CAAgBrD,MAAM,CAAA,EAAA;AAAAiE,cAAAA,QAAA,CAAAlE,CAAA,GAAA,CAAA;AAAA,cAAA;AAAA,YAAA;YAAA,MAAQ,IAAIY,KAAK,CAAC,CAAA,CAAA2C,gBAAA,GAAAK,OAAO,CAACkB,MAAM,CAAC,CAAC,CAAC,MAAA,IAAA,IAAAvB,gBAAA,KAAA,MAAA,GAAA,MAAA,GAAjBA,gBAAA,CAAmBS,OAAO,KAAI,eAAe,CAAC;AAAA,UAAA,KAAA,CAAA;YACpFH,IAAI,GAAA,CAAAL,aAAA,GAAGI,OAAO,CAACmB,IAAI,MAAA,IAAA,IAAAvB,aAAA,KAAA,MAAA,GAAA,MAAA,GAAZA,aAAA,CAAcwB,qBAAqB;AAC1ClB,YAAAA,OAAO,GAAGD,IAAI,KAAA,IAAA,IAAJA,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJA,IAAI,CAAEC,OAAO;AACvBC,YAAAA,SAAS,GAAGkB,KAAK,CAACC,OAAO,CAACrB,IAAI,aAAJA,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJA,IAAI,CAAEE,SAAS,CAAC,GAAGF,IAAI,CAACE,SAAS,GAAG,EAAE;AAAA,YAAA,IACjED,OAAO,EAAA;AAAAI,cAAAA,QAAA,CAAAlE,CAAA,GAAA,CAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAAA,MAAQ,IAAIY,KAAK,CAAC,cAAc,CAAC;AAAA,UAAA,KAAA,CAAA;AAE7C;YACA,IAAIkD,OAAO,CAACqB,OAAO,IAAI,OAAOrB,OAAO,CAACqB,OAAO,KAAK,QAAQ,EAAE;cAC1D,IAAI;gBACFrB,OAAO,CAACqB,OAAO,GAAGV,IAAI,CAACW,KAAK,CAACtB,OAAO,CAACqB,OAAO,CAAC;AAC/C,cAAA,CAAC,CAAC,OAAAE,OAAA,EAAM,CAAC;AACX,YAAA;AACA,YAAA,IAAItB,SAAS,EAAE;AACbA,cAAAA,SAAS,CAACuB,OAAO,CAAC,UAACC,EAAO,EAAI;gBAC5B,IAAIA,EAAE,CAACJ,OAAO,IAAI,OAAOI,EAAE,CAACJ,OAAO,KAAK,QAAQ,EAAE;kBAChD,IAAI;oBACFI,EAAE,CAACJ,OAAO,GAAGV,IAAI,CAACW,KAAK,CAACG,EAAE,CAACJ,OAAO,CAAC;AACrC,kBAAA,CAAC,CAAC,OAAAK,QAAA,EAAM,CAAC;AACX,gBAAA;AACF,cAAA,CAAC,CAAC;AACJ,YAAA;AAEApD,YAAAA,YAAY,CAAC;AAAE0B,cAAAA,OAAO,EAAPA,OAAO;AAAEC,cAAAA,SAAS,EAATA,SAAS;AAAE0B,cAAAA,QAAQ,EAAE5B,IAAI,KAAA,IAAA,IAAJA,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJA,IAAI,CAAE4B;AAAQ,aAAE,CAAC;YAC9DjD,SAAS,CAAC,OAAO,CAAC;AAAC0B,YAAAA,QAAA,CAAAlE,CAAA,GAAA,CAAA;AAAA,YAAA;AAAA,UAAA,KAAA,CAAA;AAAAkE,YAAAA,QAAA,CAAA1D,CAAA,GAAA,CAAA;YAAAyD,EAAA,GAAAC,QAAA,CAAAxD,CAAA;AAAA,YAAA,IAAA,CAEfyC,EAAE,CAACtC,MAAM,CAACC,OAAO,EAAA;AAAAoD,cAAAA,QAAA,CAAAlE,CAAA,GAAA,CAAA;AAAA,cAAA;AAAA,YAAA;YAAA,OAAAkE,QAAA,CAAAvD,CAAA,CAAA,CAAA,CAAA;AAAA,UAAA,KAAA,CAAA;YACfqD,OAAO,GAAGC,EAAA,YAAarD,KAAK,GAAGqD,EAAA,CAAED,OAAO,GAAG,uBAAuB;AACxE/C,YAAAA,OAAO,CAAC0B,KAAK,CAAC,iDAAiD,EAAEqB,OAAO,CAAC;YACzEpB,QAAQ,CAACoB,OAAO,CAAC;YACjBxB,SAAS,CAAC,OAAO,CAAC;AAAC,UAAA,KAAA,CAAA;YAAA,OAAA0B,QAAA,CAAAvD,CAAA,CAAA,CAAA,CAAA;AAAA;AAAA,MAAA,CAAA,EAAA0C,OAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAAA,IAAA,CAEtB,IAAG;IAEJ,OAAO,YAAA;AAAA,MAAA,OAAMF,EAAE,CAACD,KAAK,EAAE;AAAA,IAAA,CAAA;EACzB,CAAC,EAAE,CAACvB,UAAU,EAAEE,SAAS,EAAEC,SAAS,CAAC,CAAC;EAEtC,OAAO;AAAEK,IAAAA,SAAS,EAATA,SAAS;AAAEI,IAAAA,MAAM,EAANA,MAAM;AAAEI,IAAAA,KAAK,EAALA;GAAO;AACrC;;;;"}