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