robopark 3.3.45 → 3.3.47

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.
@@ -7,7 +7,8 @@
7
7
  */
8
8
  import chalk from 'chalk';
9
9
  import { spawn } from 'node:child_process';
10
- import { existsSync } from 'node:fs';
10
+ import { existsSync, mkdirSync, openSync } from 'node:fs';
11
+ import { homedir } from 'node:os';
11
12
  import { dirname, join } from 'node:path';
12
13
  import { fileURLToPath } from 'node:url';
13
14
  function packageRoot() {
@@ -25,6 +26,23 @@ export function findFrontendServer() {
25
26
  }
26
27
  return null;
27
28
  }
29
+ /**
30
+ * Where a detached control center writes its output.
31
+ *
32
+ * Returns null if the path cannot be created, in which case the caller falls
33
+ * back to discarding output — a missing log is worth far less than a UI that
34
+ * refuses to start.
35
+ */
36
+ export function controlCenterLogPath() {
37
+ try {
38
+ const dir = join(homedir(), '.robopark', 'logs');
39
+ mkdirSync(dir, { recursive: true });
40
+ return join(dir, 'control-center.log');
41
+ }
42
+ catch {
43
+ return null;
44
+ }
45
+ }
28
46
  export function startFrontendService(opts) {
29
47
  const server = findFrontendServer();
30
48
  if (!server) {
@@ -33,6 +51,26 @@ export function startFrontendService(opts) {
33
51
  return null;
34
52
  }
35
53
  const scheduler = `http://127.0.0.1:${opts.schedulerPort}`;
54
+ // A detached child must NOT hold pipes back to this process. `robopark serve`
55
+ // exits as soon as it has launched everything, which closes the read end;
56
+ // Next then dies with EPIPE the first time it logs a request or a warning.
57
+ // That is why the control center served fine on launch and was gone minutes
58
+ // later, leaving `tailscale serve` proxying to nothing -- which browsers
59
+ // report as an SSL failure rather than a dead backend. Detached output goes
60
+ // to a file so it survives the parent and leaves evidence behind.
61
+ let logFd = null;
62
+ const logPath = opts.foreground ? null : controlCenterLogPath();
63
+ if (logPath) {
64
+ try {
65
+ logFd = openSync(logPath, 'a');
66
+ }
67
+ catch {
68
+ logFd = null;
69
+ }
70
+ }
71
+ const stdio = opts.foreground
72
+ ? ['ignore', 'pipe', 'pipe']
73
+ : ['ignore', logFd ?? 'ignore', logFd ?? 'ignore'];
36
74
  const child = spawn(process.execPath, [server], {
37
75
  // Next resolves .next/static and public relative to the bundle root.
38
76
  cwd: dirname(server),
@@ -47,9 +85,10 @@ export function startFrontendService(opts) {
47
85
  SCHEDULER_URL: scheduler,
48
86
  V2_SCHEDULER_URL: scheduler,
49
87
  },
50
- stdio: 'pipe',
88
+ stdio,
51
89
  detached: !opts.foreground,
52
90
  });
91
+ // Only wired in foreground, where this process stays alive to read them.
53
92
  child.stdout?.on('data', (d) => {
54
93
  const line = d.toString().trim();
55
94
  if (line)
@@ -63,8 +102,13 @@ export function startFrontendService(opts) {
63
102
  child.on('error', (err) => {
64
103
  console.log(chalk.yellow(` ⚠ control center failed to start: ${err.message}`));
65
104
  });
66
- if (!opts.foreground)
105
+ if (!opts.foreground) {
67
106
  child.unref();
107
+ if (logPath && logFd !== null)
108
+ console.log(chalk.dim(` [ui] logging to ${logPath}`));
109
+ else
110
+ console.log(chalk.yellow(' ⚠ control center output could not be logged to a file — it is being discarded'));
111
+ }
68
112
  return child;
69
113
  }
70
114
  //# sourceMappingURL=frontend-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"frontend-service.js","sourceRoot":"","sources":["../../src/robopark/frontend-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frontend-service.js","sourceRoot":"","sources":["../../src/robopark/frontend-service.ts"],"names":[],"mappings":"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"}
@@ -338,14 +338,14 @@ export async function roboparkServe(opts) {
338
338
  });
339
339
  proc.on('exit', () => process.exit(0));
340
340
  if (opts.open !== false) {
341
- await openDashboard(host, uiPort, port, publicHost);
341
+ await openDashboard(host, uiPort, port, publicHost, httpsOrigin);
342
342
  }
343
343
  }
344
344
  else {
345
345
  // Detached mode: let the user walk away. The process keeps running.
346
346
  proc.unref();
347
347
  if (opts.open !== false) {
348
- await openDashboard(host, uiPort, port, publicHost);
348
+ await openDashboard(host, uiPort, port, publicHost, httpsOrigin);
349
349
  }
350
350
  printUrl(uiPort, port, publicHost, httpsOrigin);
351
351
  console.log(chalk.dim(' running in background. Use Task Manager / systemctl / launchctl to stop.'));
@@ -412,7 +412,7 @@ function openBrowser(url) {
412
412
  console.log(chalk.yellow(` ⚠ could not open browser: ${err instanceof Error ? err.message : String(err)}`));
413
413
  }
414
414
  }
415
- async function openDashboard(host, uiPort, schedulerPort, publicHost) {
415
+ async function openDashboard(host, uiPort, schedulerPort, publicHost, httpsOrigin) {
416
416
  // Health-check over loopback (always reachable), but open the advertised
417
417
  // host so the address bar holds a link that can be shared to a phone.
418
418
  const url = dashboardUrl(host, schedulerPort);
@@ -429,20 +429,26 @@ async function openDashboard(host, uiPort, schedulerPort, publicHost) {
429
429
  console.log(chalk.yellow(' ⚠ scheduler did not answer within 10s; opening the control center anyway.'));
430
430
  }
431
431
  // Wait for the Next server to bind before opening, or the browser lands on a
432
- // connection error and the user has to reload by hand.
433
- const uiUrl = publicHost && publicHost !== 'localhost'
432
+ // connection error and the user has to reload by hand. Probe over plain http
433
+ // on the port itself: the TLS front door proxies to this same server, so
434
+ // waiting on it would only add a dependency without proving anything extra.
435
+ const probeUrl = publicHost && publicHost !== 'localhost'
434
436
  ? `http://${publicHost}:${uiPort}/robopark`
435
437
  : dashboardUrl(host, uiPort) + 'robopark';
436
438
  const uiDeadline = Date.now() + 20_000;
437
439
  while (Date.now() < uiDeadline) {
438
440
  try {
439
- const res = await fetch(uiUrl, { signal: AbortSignal.timeout(700) });
441
+ const res = await fetch(probeUrl, { signal: AbortSignal.timeout(700) });
440
442
  if (res.ok || res.status === 404)
441
443
  break;
442
444
  }
443
445
  catch { /* not listening yet */ }
444
446
  await new Promise((resolve) => setTimeout(resolve, 400));
445
447
  }
446
- openBrowser(uiUrl);
448
+ // Open the https origin whenever --tailscale brought TLS up. A browser blocks
449
+ // getUserMedia on an http:// page that is not loopback, so opening the plain
450
+ // link handed the operator a control center whose camera and microphone could
451
+ // never work -- while the correct URL was being printed directly underneath.
452
+ openBrowser(httpsOrigin ? `${httpsOrigin}/robopark` : probeUrl);
447
453
  }
448
454
  //# sourceMappingURL=serve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/robopark/serve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/robopark/serve.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "robopark",
3
- "version": "3.3.45",
3
+ "version": "3.3.47",
4
4
  "description": "RoboPark fleet control CLI — scheduler, control UI, and character voice calls. Standalone: no infinicode runtime.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +1 @@
1
- GwsTXhcc2wWhmMKp14ZmG
1
+ mtTQYq_JDemq2Dpv_ITj0
@@ -7,6 +7,13 @@
7
7
  "static/chunks/main-app-a1f59168303c7f84.js",
8
8
  "static/chunks/app/_not-found/page-cfd7daa82d71540c.js"
9
9
  ],
10
+ "/api/device-character/route": [
11
+ "static/chunks/webpack-5252e5254da079b5.js",
12
+ "static/chunks/4bd1b696-f785427dddbba9fb.js",
13
+ "static/chunks/1255-404bb8de49c90395.js",
14
+ "static/chunks/main-app-a1f59168303c7f84.js",
15
+ "static/chunks/app/api/device-character/route-0952b44bda5bfb6d.js"
16
+ ],
10
17
  "/layout": [
11
18
  "static/chunks/webpack-5252e5254da079b5.js",
12
19
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
@@ -18,19 +25,19 @@
18
25
  "static/chunks/9880-53262785284464cc.js",
19
26
  "static/chunks/app/layout-fcce963da1d8220f.js"
20
27
  ],
21
- "/api/device-character/route": [
28
+ "/api/download-piper-model/route": [
22
29
  "static/chunks/webpack-5252e5254da079b5.js",
23
30
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
24
31
  "static/chunks/1255-404bb8de49c90395.js",
25
32
  "static/chunks/main-app-a1f59168303c7f84.js",
26
- "static/chunks/app/api/device-character/route-0952b44bda5bfb6d.js"
33
+ "static/chunks/app/api/download-piper-model/route-0952b44bda5bfb6d.js"
27
34
  ],
28
- "/api/download-piper-model/route": [
35
+ "/api/prewarm/route": [
29
36
  "static/chunks/webpack-5252e5254da079b5.js",
30
37
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
31
38
  "static/chunks/1255-404bb8de49c90395.js",
32
39
  "static/chunks/main-app-a1f59168303c7f84.js",
33
- "static/chunks/app/api/download-piper-model/route-0952b44bda5bfb6d.js"
40
+ "static/chunks/app/api/prewarm/route-0952b44bda5bfb6d.js"
34
41
  ],
35
42
  "/api/models/route": [
36
43
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -46,12 +53,12 @@
46
53
  "static/chunks/main-app-a1f59168303c7f84.js",
47
54
  "static/chunks/app/api/prompt/route-0952b44bda5bfb6d.js"
48
55
  ],
49
- "/api/prewarm/route": [
56
+ "/api/reload-tools/route": [
50
57
  "static/chunks/webpack-5252e5254da079b5.js",
51
58
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
52
59
  "static/chunks/1255-404bb8de49c90395.js",
53
60
  "static/chunks/main-app-a1f59168303c7f84.js",
54
- "static/chunks/app/api/prewarm/route-0952b44bda5bfb6d.js"
61
+ "static/chunks/app/api/reload-tools/route-0952b44bda5bfb6d.js"
55
62
  ],
56
63
  "/api/robopark/devices/[deviceId]/control/route": [
57
64
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -67,13 +74,6 @@
67
74
  "static/chunks/main-app-a1f59168303c7f84.js",
68
75
  "static/chunks/app/api/robopark/robots/[robotId]/operations/route-0952b44bda5bfb6d.js"
69
76
  ],
70
- "/api/reload-tools/route": [
71
- "static/chunks/webpack-5252e5254da079b5.js",
72
- "static/chunks/4bd1b696-f785427dddbba9fb.js",
73
- "static/chunks/1255-404bb8de49c90395.js",
74
- "static/chunks/main-app-a1f59168303c7f84.js",
75
- "static/chunks/app/api/reload-tools/route-0952b44bda5bfb6d.js"
76
- ],
77
77
  "/api/robopark/sessions/[sessionId]/end/route": [
78
78
  "static/chunks/webpack-5252e5254da079b5.js",
79
79
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
@@ -95,12 +95,12 @@
95
95
  "static/chunks/main-app-a1f59168303c7f84.js",
96
96
  "static/chunks/app/api/setup/complete/route-0952b44bda5bfb6d.js"
97
97
  ],
98
- "/api/setup/test-groq/route": [
98
+ "/api/setup/status/route": [
99
99
  "static/chunks/webpack-5252e5254da079b5.js",
100
100
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
101
101
  "static/chunks/1255-404bb8de49c90395.js",
102
102
  "static/chunks/main-app-a1f59168303c7f84.js",
103
- "static/chunks/app/api/setup/test-groq/route-0952b44bda5bfb6d.js"
103
+ "static/chunks/app/api/setup/status/route-0952b44bda5bfb6d.js"
104
104
  ],
105
105
  "/api/setup/test-hass/route": [
106
106
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -109,12 +109,12 @@
109
109
  "static/chunks/main-app-a1f59168303c7f84.js",
110
110
  "static/chunks/app/api/setup/test-hass/route-0952b44bda5bfb6d.js"
111
111
  ],
112
- "/api/setup/status/route": [
112
+ "/api/setup/test-groq/route": [
113
113
  "static/chunks/webpack-5252e5254da079b5.js",
114
114
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
115
115
  "static/chunks/1255-404bb8de49c90395.js",
116
116
  "static/chunks/main-app-a1f59168303c7f84.js",
117
- "static/chunks/app/api/setup/status/route-0952b44bda5bfb6d.js"
117
+ "static/chunks/app/api/setup/test-groq/route-0952b44bda5bfb6d.js"
118
118
  ],
119
119
  "/api/setup/test-n8n/route": [
120
120
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -172,13 +172,6 @@
172
172
  "static/chunks/main-app-a1f59168303c7f84.js",
173
173
  "static/chunks/app/api/kiosk-hardware/route-0952b44bda5bfb6d.js"
174
174
  ],
175
- "/api/connection-details/route": [
176
- "static/chunks/webpack-5252e5254da079b5.js",
177
- "static/chunks/4bd1b696-f785427dddbba9fb.js",
178
- "static/chunks/1255-404bb8de49c90395.js",
179
- "static/chunks/main-app-a1f59168303c7f84.js",
180
- "static/chunks/app/api/connection-details/route-0952b44bda5bfb6d.js"
181
- ],
182
175
  "/api/model-status/route": [
183
176
  "static/chunks/webpack-5252e5254da079b5.js",
184
177
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
@@ -186,12 +179,12 @@
186
179
  "static/chunks/main-app-a1f59168303c7f84.js",
187
180
  "static/chunks/app/api/model-status/route-0952b44bda5bfb6d.js"
188
181
  ],
189
- "/api/robopark/device-access/route": [
182
+ "/api/connection-details/route": [
190
183
  "static/chunks/webpack-5252e5254da079b5.js",
191
184
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
192
185
  "static/chunks/1255-404bb8de49c90395.js",
193
186
  "static/chunks/main-app-a1f59168303c7f84.js",
194
- "static/chunks/app/api/robopark/device-access/route-0952b44bda5bfb6d.js"
187
+ "static/chunks/app/api/connection-details/route-0952b44bda5bfb6d.js"
195
188
  ],
196
189
  "/api/robopark/camera-token/route": [
197
190
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -214,12 +207,12 @@
214
207
  "static/chunks/main-app-a1f59168303c7f84.js",
215
208
  "static/chunks/app/api/robopark/monitor-token/route-0952b44bda5bfb6d.js"
216
209
  ],
217
- "/api/robopark/character-ai/route": [
210
+ "/api/robopark/device-access/route": [
218
211
  "static/chunks/webpack-5252e5254da079b5.js",
219
212
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
220
213
  "static/chunks/1255-404bb8de49c90395.js",
221
214
  "static/chunks/main-app-a1f59168303c7f84.js",
222
- "static/chunks/app/api/robopark/character-ai/route-0952b44bda5bfb6d.js"
215
+ "static/chunks/app/api/robopark/device-access/route-0952b44bda5bfb6d.js"
223
216
  ],
224
217
  "/api/robopark/robots/route": [
225
218
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -228,6 +221,13 @@
228
221
  "static/chunks/main-app-a1f59168303c7f84.js",
229
222
  "static/chunks/app/api/robopark/robots/route-0952b44bda5bfb6d.js"
230
223
  ],
224
+ "/api/robopark/character-ai/route": [
225
+ "static/chunks/webpack-5252e5254da079b5.js",
226
+ "static/chunks/4bd1b696-f785427dddbba9fb.js",
227
+ "static/chunks/1255-404bb8de49c90395.js",
228
+ "static/chunks/main-app-a1f59168303c7f84.js",
229
+ "static/chunks/app/api/robopark/character-ai/route-0952b44bda5bfb6d.js"
230
+ ],
231
231
  "/api/robopark/servers/[serverId]/metrics/route": [
232
232
  "static/chunks/webpack-5252e5254da079b5.js",
233
233
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
@@ -249,26 +249,26 @@
249
249
  "static/chunks/main-app-a1f59168303c7f84.js",
250
250
  "static/chunks/app/api/robopark/servers/route-0952b44bda5bfb6d.js"
251
251
  ],
252
- "/api/robopark/sessions/route": [
252
+ "/api/robopark/vision-caption/route": [
253
253
  "static/chunks/webpack-5252e5254da079b5.js",
254
254
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
255
255
  "static/chunks/1255-404bb8de49c90395.js",
256
256
  "static/chunks/main-app-a1f59168303c7f84.js",
257
- "static/chunks/app/api/robopark/sessions/route-0952b44bda5bfb6d.js"
257
+ "static/chunks/app/api/robopark/vision-caption/route-0952b44bda5bfb6d.js"
258
258
  ],
259
- "/api/robovoice/robots/[robotId]/media-health/route": [
259
+ "/api/robopark/sessions/route": [
260
260
  "static/chunks/webpack-5252e5254da079b5.js",
261
261
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
262
262
  "static/chunks/1255-404bb8de49c90395.js",
263
263
  "static/chunks/main-app-a1f59168303c7f84.js",
264
- "static/chunks/app/api/robovoice/robots/[robotId]/media-health/route-0952b44bda5bfb6d.js"
264
+ "static/chunks/app/api/robopark/sessions/route-0952b44bda5bfb6d.js"
265
265
  ],
266
- "/api/robopark/vision-caption/route": [
266
+ "/api/robopark/robots/[robotId]/voice-engine/route": [
267
267
  "static/chunks/webpack-5252e5254da079b5.js",
268
268
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
269
269
  "static/chunks/1255-404bb8de49c90395.js",
270
270
  "static/chunks/main-app-a1f59168303c7f84.js",
271
- "static/chunks/app/api/robopark/vision-caption/route-0952b44bda5bfb6d.js"
271
+ "static/chunks/app/api/robopark/robots/[robotId]/voice-engine/route-0952b44bda5bfb6d.js"
272
272
  ],
273
273
  "/api/settings/route": [
274
274
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -277,12 +277,12 @@
277
277
  "static/chunks/main-app-a1f59168303c7f84.js",
278
278
  "static/chunks/app/api/settings/route-0952b44bda5bfb6d.js"
279
279
  ],
280
- "/api/robopark/robots/[robotId]/voice-engine/route": [
280
+ "/api/robovoice/robots/[robotId]/media-health/route": [
281
281
  "static/chunks/webpack-5252e5254da079b5.js",
282
282
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
283
283
  "static/chunks/1255-404bb8de49c90395.js",
284
284
  "static/chunks/main-app-a1f59168303c7f84.js",
285
- "static/chunks/app/api/robopark/robots/[robotId]/voice-engine/route-0952b44bda5bfb6d.js"
285
+ "static/chunks/app/api/robovoice/robots/[robotId]/media-health/route-0952b44bda5bfb6d.js"
286
286
  ],
287
287
  "/api/turn-credentials/route": [
288
288
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -298,61 +298,61 @@
298
298
  "static/chunks/main-app-a1f59168303c7f84.js",
299
299
  "static/chunks/app/api/robopark/transcripts/route-0952b44bda5bfb6d.js"
300
300
  ],
301
- "/camera-grid/route": [
301
+ "/fed/media/robots/[robotId]/video_feed/route": [
302
302
  "static/chunks/webpack-5252e5254da079b5.js",
303
303
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
304
304
  "static/chunks/1255-404bb8de49c90395.js",
305
305
  "static/chunks/main-app-a1f59168303c7f84.js",
306
- "static/chunks/app/camera-grid/route-0952b44bda5bfb6d.js"
306
+ "static/chunks/app/fed/media/robots/[robotId]/video_feed/route-0952b44bda5bfb6d.js"
307
307
  ],
308
- "/api/wake/route": [
308
+ "/fed/[...path]/route": [
309
309
  "static/chunks/webpack-5252e5254da079b5.js",
310
310
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
311
311
  "static/chunks/1255-404bb8de49c90395.js",
312
312
  "static/chunks/main-app-a1f59168303c7f84.js",
313
- "static/chunks/app/api/wake/route-0952b44bda5bfb6d.js"
313
+ "static/chunks/app/fed/[...path]/route-0952b44bda5bfb6d.js"
314
314
  ],
315
- "/fed/media/robots/[robotId]/video_feed/route": [
315
+ "/robopark/api/robots/[robotId]/stream/route": [
316
316
  "static/chunks/webpack-5252e5254da079b5.js",
317
317
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
318
318
  "static/chunks/1255-404bb8de49c90395.js",
319
319
  "static/chunks/main-app-a1f59168303c7f84.js",
320
- "static/chunks/app/fed/media/robots/[robotId]/video_feed/route-0952b44bda5bfb6d.js"
320
+ "static/chunks/app/robopark/api/robots/[robotId]/stream/route-0952b44bda5bfb6d.js"
321
321
  ],
322
- "/robopark/[...path]/route": [
322
+ "/camera-grid/route": [
323
323
  "static/chunks/webpack-5252e5254da079b5.js",
324
324
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
325
325
  "static/chunks/1255-404bb8de49c90395.js",
326
326
  "static/chunks/main-app-a1f59168303c7f84.js",
327
- "static/chunks/app/robopark/[...path]/route-0952b44bda5bfb6d.js"
327
+ "static/chunks/app/camera-grid/route-0952b44bda5bfb6d.js"
328
328
  ],
329
- "/vendor/livekit-client.umd.js/route": [
329
+ "/robopark/[...path]/route": [
330
330
  "static/chunks/webpack-5252e5254da079b5.js",
331
331
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
332
332
  "static/chunks/1255-404bb8de49c90395.js",
333
333
  "static/chunks/main-app-a1f59168303c7f84.js",
334
- "static/chunks/app/vendor/livekit-client.umd.js/route-0952b44bda5bfb6d.js"
334
+ "static/chunks/app/robopark/[...path]/route-0952b44bda5bfb6d.js"
335
335
  ],
336
- "/fed/[...path]/route": [
336
+ "/api/wake/route": [
337
337
  "static/chunks/webpack-5252e5254da079b5.js",
338
338
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
339
339
  "static/chunks/1255-404bb8de49c90395.js",
340
340
  "static/chunks/main-app-a1f59168303c7f84.js",
341
- "static/chunks/app/fed/[...path]/route-0952b44bda5bfb6d.js"
341
+ "static/chunks/app/api/wake/route-0952b44bda5bfb6d.js"
342
342
  ],
343
- "/robopark/api/robots/[robotId]/stream/route": [
343
+ "/(app)/opengraph-image-xg4ifa/route": [
344
344
  "static/chunks/webpack-5252e5254da079b5.js",
345
345
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
346
346
  "static/chunks/1255-404bb8de49c90395.js",
347
347
  "static/chunks/main-app-a1f59168303c7f84.js",
348
- "static/chunks/app/robopark/api/robots/[robotId]/stream/route-0952b44bda5bfb6d.js"
348
+ "static/chunks/app/(app)/opengraph-image-xg4ifa/route-0952b44bda5bfb6d.js"
349
349
  ],
350
- "/(app)/opengraph-image-xg4ifa/route": [
350
+ "/vendor/livekit-client.umd.js/route": [
351
351
  "static/chunks/webpack-5252e5254da079b5.js",
352
352
  "static/chunks/4bd1b696-f785427dddbba9fb.js",
353
353
  "static/chunks/1255-404bb8de49c90395.js",
354
354
  "static/chunks/main-app-a1f59168303c7f84.js",
355
- "static/chunks/app/(app)/opengraph-image-xg4ifa/route-0952b44bda5bfb6d.js"
355
+ "static/chunks/app/vendor/livekit-client.umd.js/route-0952b44bda5bfb6d.js"
356
356
  ],
357
357
  "/tailnet/route": [
358
358
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -1,19 +1,19 @@
1
1
  {
2
- "/_not-found/page": "/_not-found",
3
2
  "/api/device-character/route": "/api/device-character",
3
+ "/_not-found/page": "/_not-found",
4
4
  "/api/download-piper-model/route": "/api/download-piper-model",
5
+ "/api/prewarm/route": "/api/prewarm",
5
6
  "/api/models/route": "/api/models",
6
7
  "/api/prompt/route": "/api/prompt",
7
- "/api/prewarm/route": "/api/prewarm",
8
+ "/api/reload-tools/route": "/api/reload-tools",
8
9
  "/api/robopark/devices/[deviceId]/control/route": "/api/robopark/devices/[deviceId]/control",
9
10
  "/api/robopark/robots/[robotId]/operations/route": "/api/robopark/robots/[robotId]/operations",
10
- "/api/reload-tools/route": "/api/reload-tools",
11
11
  "/api/robopark/sessions/[sessionId]/end/route": "/api/robopark/sessions/[sessionId]/end",
12
12
  "/api/robopark/transcripts/[sessionId]/route": "/api/robopark/transcripts/[sessionId]",
13
13
  "/api/setup/complete/route": "/api/setup/complete",
14
- "/api/setup/test-groq/route": "/api/setup/test-groq",
15
- "/api/setup/test-hass/route": "/api/setup/test-hass",
16
14
  "/api/setup/status/route": "/api/setup/status",
15
+ "/api/setup/test-hass/route": "/api/setup/test-hass",
16
+ "/api/setup/test-groq/route": "/api/setup/test-groq",
17
17
  "/api/setup/test-n8n/route": "/api/setup/test-n8n",
18
18
  "/api/setup/test-ollama/route": "/api/setup/test-ollama",
19
19
  "/api/test-tts/route": "/api/test-tts",
@@ -23,32 +23,32 @@
23
23
  "/api/wake-word/upload/route": "/api/wake-word/upload",
24
24
  "/favicon.ico/route": "/favicon.ico",
25
25
  "/api/kiosk-hardware/route": "/api/kiosk-hardware",
26
- "/api/connection-details/route": "/api/connection-details",
27
26
  "/api/model-status/route": "/api/model-status",
28
- "/api/robopark/device-access/route": "/api/robopark/device-access",
27
+ "/api/connection-details/route": "/api/connection-details",
29
28
  "/api/robopark/camera-token/route": "/api/robopark/camera-token",
30
29
  "/api/robopark/live-rooms/route": "/api/robopark/live-rooms",
31
30
  "/api/robopark/monitor-token/route": "/api/robopark/monitor-token",
32
- "/api/robopark/character-ai/route": "/api/robopark/character-ai",
31
+ "/api/robopark/device-access/route": "/api/robopark/device-access",
33
32
  "/api/robopark/robots/route": "/api/robopark/robots",
33
+ "/api/robopark/character-ai/route": "/api/robopark/character-ai",
34
34
  "/api/robopark/servers/[serverId]/metrics/route": "/api/robopark/servers/[serverId]/metrics",
35
35
  "/api/robopark/servers/[serverId]/route": "/api/robopark/servers/[serverId]",
36
36
  "/api/robopark/servers/route": "/api/robopark/servers",
37
- "/api/robopark/sessions/route": "/api/robopark/sessions",
38
- "/api/robovoice/robots/[robotId]/media-health/route": "/api/robovoice/robots/[robotId]/media-health",
39
37
  "/api/robopark/vision-caption/route": "/api/robopark/vision-caption",
40
- "/api/settings/route": "/api/settings",
38
+ "/api/robopark/sessions/route": "/api/robopark/sessions",
41
39
  "/api/robopark/robots/[robotId]/voice-engine/route": "/api/robopark/robots/[robotId]/voice-engine",
40
+ "/api/settings/route": "/api/settings",
41
+ "/api/robovoice/robots/[robotId]/media-health/route": "/api/robovoice/robots/[robotId]/media-health",
42
42
  "/api/turn-credentials/route": "/api/turn-credentials",
43
43
  "/api/robopark/transcripts/route": "/api/robopark/transcripts",
44
- "/camera-grid/route": "/camera-grid",
45
- "/api/wake/route": "/api/wake",
46
44
  "/fed/media/robots/[robotId]/video_feed/route": "/fed/media/robots/[robotId]/video_feed",
47
- "/robopark/[...path]/route": "/robopark/[...path]",
48
- "/vendor/livekit-client.umd.js/route": "/vendor/livekit-client.umd.js",
49
45
  "/fed/[...path]/route": "/fed/[...path]",
50
46
  "/robopark/api/robots/[robotId]/stream/route": "/robopark/api/robots/[robotId]/stream",
47
+ "/camera-grid/route": "/camera-grid",
48
+ "/robopark/[...path]/route": "/robopark/[...path]",
49
+ "/api/wake/route": "/api/wake",
51
50
  "/(app)/opengraph-image-xg4ifa/route": "/opengraph-image-xg4ifa",
51
+ "/vendor/livekit-client.umd.js/route": "/vendor/livekit-client.umd.js",
52
52
  "/tailnet/route": "/tailnet",
53
53
  "/robopark/api/[...path]/route": "/robopark/api/[...path]",
54
54
  "/robopark/page": "/robopark",
@@ -5,8 +5,8 @@
5
5
  "devFiles": [],
6
6
  "ampDevFiles": [],
7
7
  "lowPriorityFiles": [
8
- "static/GwsTXhcc2wWhmMKp14ZmG/_buildManifest.js",
9
- "static/GwsTXhcc2wWhmMKp14ZmG/_ssgManifest.js"
8
+ "static/mtTQYq_JDemq2Dpv_ITj0/_buildManifest.js",
9
+ "static/mtTQYq_JDemq2Dpv_ITj0/_ssgManifest.js"
10
10
  ],
11
11
  "rootMainFiles": [
12
12
  "static/chunks/webpack-5252e5254da079b5.js",
@@ -1 +1 @@
1
- (()=>{var a={};a.id=7142,a.ids=[7142],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},25011:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>E,patchFetch:()=>D,routeModule:()=>z,serverHooks:()=>C,workAsyncStorage:()=>A,workUnitAsyncStorage:()=>B});var d={};c.r(d),c.d(d,{GET:()=>y,dynamic:()=>v,runtime:()=>w});var e=c(95736),f=c(9117),g=c(4044),h=c(39326),i=c(32324),j=c(261),k=c(54290),l=c(85328),m=c(38928),n=c(46595),o=c(3421),p=c(17679),q=c(41681),r=c(63446),s=c(86439),t=c(51356),u=c(82680);let v="force-dynamic",w="nodejs";async function x(a){let b=Date.now();try{let c=await fetch(a,{cache:"no-store",signal:AbortSignal.timeout(2500)});return{ok:c.ok,status:c.status,latency_ms:Date.now()-b}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a),latency_ms:Date.now()-b}}}async function y(a,b){let{robotId:c}=await b.params,d=(0,u.bR)(c);if(!d)return Response.json({ok:!1,error:"robot not registered"},{status:404});let[e,f]=await Promise.all([x("http://"+d.host+":"+d.visionPort+"/api/media/inventory"),x("http://"+d.host+":"+d.audioPort+"/devices")]);return Response.json({ok:e.ok&&f.ok,robot:d,vision:e,audio:f,room:"robopark-"+d.deviceId},{status:e.ok&&f.ok?200:503})}let z=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/robovoice/robots/[robotId]/media-health/route",pathname:"/api/robovoice/robots/[robotId]/media-health",filename:"route",bundlePath:"app/api/robovoice/robots/[robotId]/media-health/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\yunge\\OneDrive\\Desktop\\ROBOVOICE-main\\frontend\\app\\api\\robovoice\\robots\\[robotId]\\media-health\\route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:A,workUnitAsyncStorage:B,serverHooks:C}=z;function D(){return(0,g.patchFetch)({workAsyncStorage:A,workUnitAsyncStorage:B})}async function E(a,b,c){var d;let e="/api/robovoice/robots/[robotId]/media-health/route";"/index"===e&&(e="/");let g=await z.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:v,nextConfig:w,isDraftMode:x,prerenderManifest:y,routerServerContext:A,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,resolvedPathname:D}=g,E=(0,j.normalizeAppPath)(e),F=!!(y.dynamicRoutes[E]||y.routes[D]);if(F&&!x){let a=!!y.routes[D],b=y.dynamicRoutes[E];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!F||z.isDev||x||(G="/index"===(G=D)?"/":G);let H=!0===z.isDev||!F,I=F&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:y,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>z.onRequestError(a,b,d,A)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>z.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&B&&C&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!F)return await (0,o.I)(N,O,e,M.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await z.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})},A),b}},l=await z.handleResponse({req:a,nextConfig:w,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:y,isRoutePPREnabled:!1,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,responseGenerator:k,waitUntil:c.waitUntil});if(!F)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",B?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&F||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await z.onRequestError(a,b,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})}),F)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},36228:(a,b,c)=>{"use strict";c.d(b,{n_:()=>i,wn:()=>k,z4:()=>h});var d=c(73024);let e=process.env.ROBOPARK_CONTROL_URL||"http://host.docker.internal:47913",f=process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080",g=function(){if(process.env.ROBOPARK_CONTROL_TOKEN)return process.env.ROBOPARK_CONTROL_TOKEN.trim();let a=process.env.ROBOPARK_CONTROL_TOKEN_FILE;if(!a)return"";try{return(0,d.readFileSync)(a,"utf8").trim()}catch{return""}}();function h(){return f.replace(/\/+$/,"")}function i(){return g}let j=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailers","transfer-encoding","upgrade","content-length"]);async function k(a,b){let c,d=new URL(a.url),h=d.searchParams.get("token");d.searchParams.delete("token");let i=b.startsWith("/robopark/"),k=new URL((i?b.slice(9):b)+d.search,i?f:e);!g&&h&&k.searchParams.set("token",h);let l=new Headers;for(let b of["accept","content-type","if-match","if-none-match"]){let c=a.headers.get(b);c&&l.set(b,c)}let m=a.headers.get("authorization");m&&l.set("authorization",m),g&&l.set("authorization","Bearer "+g);let n=a.method.toUpperCase(),o="GET"===n||"HEAD"===n?void 0:await a.arrayBuffer(),p=new AbortController,q=setTimeout(()=>p.abort(),7e3);try{c=await fetch(k,{method:n,headers:l,body:o&&o.byteLength?o:void 0,cache:"no-store",redirect:"manual",signal:p.signal})}catch(b){clearTimeout(q);let a=b instanceof Error?b.message:String(b);return Response.json({ok:!1,error:"RoboPark control upstream unavailable",detail:a,upstream:k.origin},{status:502,headers:{"cache-control":"no-store"}})}clearTimeout(q);let r=new Headers;return c.headers.forEach((a,b)=>{j.has(b.toLowerCase())||r.set(b,a)}),r.set("cache-control","no-store"),r.set("x-robopark-control-source",k.origin),new Response(c.body,{status:c.status,statusText:c.statusText,headers:r})}},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{"use strict";a.exports=require("node:fs")},78335:()=>{},82680:(a,b,c)=>{"use strict";c.d(b,{QX:()=>i,bR:()=>f});var d=c(36228);let e=[{id:"bmw",name:"BMW",deviceId:"dev_0422e545",host:process.env.ROBOVOICE_BMW_HOST||"192.168.0.178",visionPort:5e3,audioPort:8e3,aliases:["bmw","dev_0422e545"]}];function f(a){let b=decodeURIComponent(a).trim().toLowerCase();return(function(){let a=process.env.ROBOVOICE_ROBOTS_JSON;if(!a)return e;try{let b=JSON.parse(a);if(!Array.isArray(b))throw Error("expected a JSON array");return b.map(a=>({id:String(a.id||a.name).toLowerCase(),name:String(a.name||a.id),deviceId:String(a.deviceId||a.device_id||a.id),host:String(a.host||a.ip),visionPort:Number(a.visionPort||a.vision_port||5e3),audioPort:Number(a.audioPort||a.audio_port||8e3),aliases:Array.from(new Set([a.id,a.name,a.deviceId,a.device_id,...a.aliases||[]].filter(Boolean).map(String)))}))}catch(a){return console.error("Invalid ROBOVOICE_ROBOTS_JSON:",a),e}})().find(a=>[a.id,a.name,a.deviceId,...a.aliases].some(a=>String(a).toLowerCase()===b))}async function g(a){let b=(0,d.n_)();try{let c=await fetch((0,d.z4)()+a,{cache:"no-store",headers:b?{authorization:"Bearer "+b}:{},signal:AbortSignal.timeout(2500)});if(!c.ok)return null;return await c.json()}catch{return null}}function h(a){let b=String(a.lan_ip||a.tailscale_ip||a.last_seen_ip||"").trim();return b?{id:String(a.id),name:String(a.name||a.id),deviceId:String(a.id),host:b,visionPort:5e3,audioPort:8e3,aliases:[String(a.id),String(a.name||a.id)]}:null}async function i(a){let b=decodeURIComponent(a).trim();if(!b)return null;let c=await g("/api/devices/"+encodeURIComponent(b));if(c?.id)return h(c);let d=await g("/api/devices");if(!Array.isArray(d))return null;let e=b.toLowerCase(),f=d.find(a=>String(a.id)===b||String(a.name||"").toLowerCase()===e);return f?h(f):null}},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},95736:(a,b,c)=>{"use strict";a.exports=c(44870)},96487:()=>{}};var b=require("../../../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873],()=>b(b.s=25011));module.exports=c})();
1
+ (()=>{var a={};a.id=7142,a.ids=[7142],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},25011:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>E,patchFetch:()=>D,routeModule:()=>z,serverHooks:()=>C,workAsyncStorage:()=>A,workUnitAsyncStorage:()=>B});var d={};c.r(d),c.d(d,{GET:()=>y,dynamic:()=>v,runtime:()=>w});var e=c(95736),f=c(9117),g=c(4044),h=c(39326),i=c(32324),j=c(261),k=c(54290),l=c(85328),m=c(38928),n=c(46595),o=c(3421),p=c(17679),q=c(41681),r=c(63446),s=c(86439),t=c(51356),u=c(82680);let v="force-dynamic",w="nodejs";async function x(a){let b=Date.now();try{let c=await fetch(a,{cache:"no-store",signal:AbortSignal.timeout(2500)});return{ok:c.ok,status:c.status,latency_ms:Date.now()-b}}catch(a){return{ok:!1,error:a instanceof Error?a.message:String(a),latency_ms:Date.now()-b}}}async function y(a,b){let{robotId:c}=await b.params,d=(0,u.bR)(c);if(!d)return Response.json({ok:!1,error:"robot not registered"},{status:404});let[e,f]=await Promise.all([x("http://"+d.host+":"+d.visionPort+"/api/media/inventory"),x("http://"+d.host+":"+d.audioPort+"/devices")]);return Response.json({ok:e.ok&&f.ok,robot:d,vision:e,audio:f,room:"robopark-"+d.deviceId},{status:e.ok&&f.ok?200:503})}let z=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/robovoice/robots/[robotId]/media-health/route",pathname:"/api/robovoice/robots/[robotId]/media-health",filename:"route",bundlePath:"app/api/robovoice/robots/[robotId]/media-health/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\yunge\\OneDrive\\Desktop\\ROBOVOICE-main\\frontend\\app\\api\\robovoice\\robots\\[robotId]\\media-health\\route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:A,workUnitAsyncStorage:B,serverHooks:C}=z;function D(){return(0,g.patchFetch)({workAsyncStorage:A,workUnitAsyncStorage:B})}async function E(a,b,c){var d;let e="/api/robovoice/robots/[robotId]/media-health/route";"/index"===e&&(e="/");let g=await z.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:v,nextConfig:w,isDraftMode:x,prerenderManifest:y,routerServerContext:A,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,resolvedPathname:D}=g,E=(0,j.normalizeAppPath)(e),F=!!(y.dynamicRoutes[E]||y.routes[D]);if(F&&!x){let a=!!y.routes[D],b=y.dynamicRoutes[E];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!F||z.isDev||x||(G="/index"===(G=D)?"/":G);let H=!0===z.isDev||!F,I=F&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:y,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>z.onRequestError(a,b,d,A)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>z.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&B&&C&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!F)return await (0,o.I)(N,O,e,M.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await z.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})},A),b}},l=await z.handleResponse({req:a,nextConfig:w,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:y,isRoutePPREnabled:!1,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,responseGenerator:k,waitUntil:c.waitUntil});if(!F)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",B?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&F||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await z.onRequestError(a,b,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})}),F)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},36228:(a,b,c)=>{"use strict";c.d(b,{n_:()=>i,wn:()=>k,z4:()=>h});var d=c(73024);let e=process.env.ROBOPARK_CONTROL_URL||"http://host.docker.internal:47913",f=process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080",g=function(){if(process.env.ROBOPARK_CONTROL_TOKEN)return process.env.ROBOPARK_CONTROL_TOKEN.trim();let a=process.env.ROBOPARK_CONTROL_TOKEN_FILE;if(!a)return"";try{return(0,d.readFileSync)(a,"utf8").trim()}catch{return""}}();function h(){return f.replace(/\/+$/,"")}function i(){return g}let j=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailers","transfer-encoding","upgrade","content-length"]);async function k(a,b){let c,d=new URL(a.url),h=d.searchParams.get("token");d.searchParams.delete("token");let i=b.startsWith("/robopark/"),k=new URL((i?b.slice(9):b)+d.search,i?f:e);!g&&h&&k.searchParams.set("token",h);let l=new Headers;for(let b of["accept","content-type","if-match","if-none-match"]){let c=a.headers.get(b);c&&l.set(b,c)}let m=a.headers.get("authorization");m&&l.set("authorization",m),g&&l.set("authorization","Bearer "+g);let n=a.method.toUpperCase(),o="GET"===n||"HEAD"===n?void 0:await a.arrayBuffer(),p=new AbortController,q=()=>p.abort();if(a.signal.aborted)return Response.json({ok:!1,error:"client disconnected"},{status:499,headers:{"cache-control":"no-store"}});a.signal.addEventListener("abort",q,{once:!0});let r=setTimeout(q,7e3);try{c=await fetch(k,{method:n,headers:l,body:o&&o.byteLength?o:void 0,cache:"no-store",redirect:"manual",signal:p.signal})}catch(c){clearTimeout(r),a.signal.removeEventListener("abort",q);let b=c instanceof Error?c.message:String(c);return Response.json({ok:!1,error:"RoboPark control upstream unavailable",detail:b,upstream:k.origin},{status:502,headers:{"cache-control":"no-store"}})}clearTimeout(r);let s=new Headers;return c.headers.forEach((a,b)=>{j.has(b.toLowerCase())||s.set(b,a)}),s.set("cache-control","no-store"),s.set("x-robopark-control-source",k.origin),new Response(c.body,{status:c.status,statusText:c.statusText,headers:s})}},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{"use strict";a.exports=require("node:fs")},78335:()=>{},82680:(a,b,c)=>{"use strict";c.d(b,{QX:()=>i,bR:()=>f});var d=c(36228);let e=[{id:"bmw",name:"BMW",deviceId:"dev_0422e545",host:process.env.ROBOVOICE_BMW_HOST||"192.168.0.178",visionPort:5e3,audioPort:8e3,aliases:["bmw","dev_0422e545"]}];function f(a){let b=decodeURIComponent(a).trim().toLowerCase();return(function(){let a=process.env.ROBOVOICE_ROBOTS_JSON;if(!a)return e;try{let b=JSON.parse(a);if(!Array.isArray(b))throw Error("expected a JSON array");return b.map(a=>({id:String(a.id||a.name).toLowerCase(),name:String(a.name||a.id),deviceId:String(a.deviceId||a.device_id||a.id),host:String(a.host||a.ip),visionPort:Number(a.visionPort||a.vision_port||5e3),audioPort:Number(a.audioPort||a.audio_port||8e3),aliases:Array.from(new Set([a.id,a.name,a.deviceId,a.device_id,...a.aliases||[]].filter(Boolean).map(String)))}))}catch(a){return console.error("Invalid ROBOVOICE_ROBOTS_JSON:",a),e}})().find(a=>[a.id,a.name,a.deviceId,...a.aliases].some(a=>String(a).toLowerCase()===b))}async function g(a){let b=(0,d.n_)();try{let c=await fetch((0,d.z4)()+a,{cache:"no-store",headers:b?{authorization:"Bearer "+b}:{},signal:AbortSignal.timeout(2500)});if(!c.ok)return null;return await c.json()}catch{return null}}function h(a){let b=String(a.lan_ip||a.tailscale_ip||a.last_seen_ip||"").trim();return b?{id:String(a.id),name:String(a.name||a.id),deviceId:String(a.id),host:b,visionPort:5e3,audioPort:8e3,aliases:[String(a.id),String(a.name||a.id)]}:null}async function i(a){let b=decodeURIComponent(a).trim();if(!b)return null;let c=await g("/api/devices/"+encodeURIComponent(b));if(c?.id)return h(c);let d=await g("/api/devices");if(!Array.isArray(d))return null;let e=b.toLowerCase(),f=d.find(a=>String(a.id)===b||String(a.name||"").toLowerCase()===e);return f?h(f):null}},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},95736:(a,b,c)=>{"use strict";a.exports=c(44870)},96487:()=>{}};var b=require("../../../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873],()=>b(b.s=25011));module.exports=c})();
@@ -1,4 +1,4 @@
1
- (()=>{var a={};a.id=7204,a.ids=[7204],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},36228:(a,b,c)=>{"use strict";c.d(b,{n_:()=>i,wn:()=>k,z4:()=>h});var d=c(73024);let e=process.env.ROBOPARK_CONTROL_URL||"http://host.docker.internal:47913",f=process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080",g=function(){if(process.env.ROBOPARK_CONTROL_TOKEN)return process.env.ROBOPARK_CONTROL_TOKEN.trim();let a=process.env.ROBOPARK_CONTROL_TOKEN_FILE;if(!a)return"";try{return(0,d.readFileSync)(a,"utf8").trim()}catch{return""}}();function h(){return f.replace(/\/+$/,"")}function i(){return g}let j=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailers","transfer-encoding","upgrade","content-length"]);async function k(a,b){let c,d=new URL(a.url),h=d.searchParams.get("token");d.searchParams.delete("token");let i=b.startsWith("/robopark/"),k=new URL((i?b.slice(9):b)+d.search,i?f:e);!g&&h&&k.searchParams.set("token",h);let l=new Headers;for(let b of["accept","content-type","if-match","if-none-match"]){let c=a.headers.get(b);c&&l.set(b,c)}let m=a.headers.get("authorization");m&&l.set("authorization",m),g&&l.set("authorization","Bearer "+g);let n=a.method.toUpperCase(),o="GET"===n||"HEAD"===n?void 0:await a.arrayBuffer(),p=new AbortController,q=setTimeout(()=>p.abort(),7e3);try{c=await fetch(k,{method:n,headers:l,body:o&&o.byteLength?o:void 0,cache:"no-store",redirect:"manual",signal:p.signal})}catch(b){clearTimeout(q);let a=b instanceof Error?b.message:String(b);return Response.json({ok:!1,error:"RoboPark control upstream unavailable",detail:a,upstream:k.origin},{status:502,headers:{"cache-control":"no-store"}})}clearTimeout(q);let r=new Headers;return c.headers.forEach((a,b)=>{j.has(b.toLowerCase())||r.set(b,a)}),r.set("cache-control","no-store"),r.set("x-robopark-control-source",k.origin),new Response(c.body,{status:c.status,statusText:c.statusText,headers:r})}},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},51455:a=>{"use strict";a.exports=require("node:fs/promises")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{"use strict";a.exports=require("node:fs")},76760:a=>{"use strict";a.exports=require("node:path")},78335:()=>{},81510:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>M,patchFetch:()=>L,routeModule:()=>H,serverHooks:()=>K,workAsyncStorage:()=>I,workUnitAsyncStorage:()=>J});var d={};c.r(d),c.d(d,{GET:()=>F,POST:()=>G,dynamic:()=>z});var e=c(95736),f=c(9117),g=c(4044),h=c(39326),i=c(32324),j=c(261),k=c(54290),l=c(85328),m=c(38928),n=c(46595),o=c(3421),p=c(17679),q=c(41681),r=c(63446),s=c(86439),t=c(51356),u=c(51455),v=c(76760),w=c(10641),x=c(99435),y=c(36228);let z="force-dynamic",A=(process.env.INFINICODE_MESH_URL||process.env.ROBOPARK_HUB_URL||process.env.FEDERATION_URL||"").replace(/\/+$/,""),B=(process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080").replace(/\/+$/,"");async function C(){try{return(await fetch(`${B}/api/settings`,{cache:"no-store",signal:AbortSignal.timeout(4e3)})).ok}catch{return!1}}async function D(a,b){let c=function(a,b){if(!A)return null;let c=new URL(`/fed/${b}${a.nextUrl.search}`,`${A}/`);return c.origin===a.nextUrl.origin?null:c}(a,b);if(!c)return null;try{let b,d=new Headers,e=a.headers.get("authorization");e&&d.set("authorization",e);let f=a.headers.get("content-type");f&&d.set("content-type",f);let g=new AbortController,h=setTimeout(()=>g.abort(),12e3);try{b=await fetch(c,{method:a.method,headers:d,body:"GET"===a.method||"HEAD"===a.method?void 0:await a.arrayBuffer(),cache:"no-store",signal:g.signal})}finally{clearTimeout(h)}let i=new Headers;return i.set("Content-Type",b.headers.get("content-type")||"application/json"),i.set("Cache-Control","no-store"),new Response(b.body,{status:b.status,headers:i})}catch{return null}}async function E(){try{let a=await (0,u.readFile)((0,v.join)(process.cwd(),"public","robopark-control.html"),"utf8");return a.match(/<meta name="robopark-ui-build" content="([^"]+)">/)?.[1]||"robovoice-control"}catch{return"robovoice-control"}}async function F(a,b){let c=(await b.params).path.join("/");if("ui-build"===c)return w.NextResponse.json({build:await E(),source:"robovoice-control"});if("network-info"===c){let b=a.headers.get("x-forwarded-proto")?.split(",")[0].trim(),c=a.headers.get("x-forwarded-host")?.split(",")[0].trim(),d=b||a.nextUrl.protocol.replace(":","")||"https",e=c?`${d}://${c}`:a.nextUrl.origin,f=process.env.ROBOPARK_LAN_URL||"",g=!f||/:\/\/0\.0\.0\.0(?::|\/|$)/.test(f)?e:f,h=c?.endsWith(".ts.net")?e:process.env.ROBOPARK_TAILSCALE_URL||"";return w.NextResponse.json({lan:g,tail:h,tail_dns:h||process.env.ROBOPARK_TAILSCALE_DNS||"",control_url:e,source:"robovoice-control"})}let d=await D(a,c);if(d)return d;let e=await (0,y.wn)(a,`/fed/${c}`);if(502!==e.status)return e;if("stream"===c){let a,b=new TextEncoder;return new Response(new ReadableStream({start(c){c.enqueue(b.encode(": robovoice standalone stream ready\n\n")),a=setInterval(()=>{try{c.enqueue(b.encode(`event: heartbeat
1
+ (()=>{var a={};a.id=7204,a.ids=[7204],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},36228:(a,b,c)=>{"use strict";c.d(b,{n_:()=>i,wn:()=>k,z4:()=>h});var d=c(73024);let e=process.env.ROBOPARK_CONTROL_URL||"http://host.docker.internal:47913",f=process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080",g=function(){if(process.env.ROBOPARK_CONTROL_TOKEN)return process.env.ROBOPARK_CONTROL_TOKEN.trim();let a=process.env.ROBOPARK_CONTROL_TOKEN_FILE;if(!a)return"";try{return(0,d.readFileSync)(a,"utf8").trim()}catch{return""}}();function h(){return f.replace(/\/+$/,"")}function i(){return g}let j=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailers","transfer-encoding","upgrade","content-length"]);async function k(a,b){let c,d=new URL(a.url),h=d.searchParams.get("token");d.searchParams.delete("token");let i=b.startsWith("/robopark/"),k=new URL((i?b.slice(9):b)+d.search,i?f:e);!g&&h&&k.searchParams.set("token",h);let l=new Headers;for(let b of["accept","content-type","if-match","if-none-match"]){let c=a.headers.get(b);c&&l.set(b,c)}let m=a.headers.get("authorization");m&&l.set("authorization",m),g&&l.set("authorization","Bearer "+g);let n=a.method.toUpperCase(),o="GET"===n||"HEAD"===n?void 0:await a.arrayBuffer(),p=new AbortController,q=()=>p.abort();if(a.signal.aborted)return Response.json({ok:!1,error:"client disconnected"},{status:499,headers:{"cache-control":"no-store"}});a.signal.addEventListener("abort",q,{once:!0});let r=setTimeout(q,7e3);try{c=await fetch(k,{method:n,headers:l,body:o&&o.byteLength?o:void 0,cache:"no-store",redirect:"manual",signal:p.signal})}catch(c){clearTimeout(r),a.signal.removeEventListener("abort",q);let b=c instanceof Error?c.message:String(c);return Response.json({ok:!1,error:"RoboPark control upstream unavailable",detail:b,upstream:k.origin},{status:502,headers:{"cache-control":"no-store"}})}clearTimeout(r);let s=new Headers;return c.headers.forEach((a,b)=>{j.has(b.toLowerCase())||s.set(b,a)}),s.set("cache-control","no-store"),s.set("x-robopark-control-source",k.origin),new Response(c.body,{status:c.status,statusText:c.statusText,headers:s})}},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},51455:a=>{"use strict";a.exports=require("node:fs/promises")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{"use strict";a.exports=require("node:fs")},76760:a=>{"use strict";a.exports=require("node:path")},78335:()=>{},81510:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>M,patchFetch:()=>L,routeModule:()=>H,serverHooks:()=>K,workAsyncStorage:()=>I,workUnitAsyncStorage:()=>J});var d={};c.r(d),c.d(d,{GET:()=>F,POST:()=>G,dynamic:()=>z});var e=c(95736),f=c(9117),g=c(4044),h=c(39326),i=c(32324),j=c(261),k=c(54290),l=c(85328),m=c(38928),n=c(46595),o=c(3421),p=c(17679),q=c(41681),r=c(63446),s=c(86439),t=c(51356),u=c(51455),v=c(76760),w=c(10641),x=c(99435),y=c(36228);let z="force-dynamic",A=(process.env.INFINICODE_MESH_URL||process.env.ROBOPARK_HUB_URL||process.env.FEDERATION_URL||"").replace(/\/+$/,""),B=(process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080").replace(/\/+$/,"");async function C(){try{return(await fetch(`${B}/api/settings`,{cache:"no-store",signal:AbortSignal.timeout(4e3)})).ok}catch{return!1}}async function D(a,b){let c=function(a,b){if(!A)return null;let c=new URL(`/fed/${b}${a.nextUrl.search}`,`${A}/`);return c.origin===a.nextUrl.origin?null:c}(a,b);if(!c)return null;try{let b,d=new Headers,e=a.headers.get("authorization");e&&d.set("authorization",e);let f=a.headers.get("content-type");f&&d.set("content-type",f);let g=new AbortController,h=setTimeout(()=>g.abort(),12e3);try{b=await fetch(c,{method:a.method,headers:d,body:"GET"===a.method||"HEAD"===a.method?void 0:await a.arrayBuffer(),cache:"no-store",signal:g.signal})}finally{clearTimeout(h)}let i=new Headers;return i.set("Content-Type",b.headers.get("content-type")||"application/json"),i.set("Cache-Control","no-store"),new Response(b.body,{status:b.status,headers:i})}catch{return null}}async function E(){try{let a=await (0,u.readFile)((0,v.join)(process.cwd(),"public","robopark-control.html"),"utf8");return a.match(/<meta name="robopark-ui-build" content="([^"]+)">/)?.[1]||"robovoice-control"}catch{return"robovoice-control"}}async function F(a,b){let c=(await b.params).path.join("/");if("ui-build"===c)return w.NextResponse.json({build:await E(),source:"robovoice-control"});if("network-info"===c){let b=a.headers.get("x-forwarded-proto")?.split(",")[0].trim(),c=a.headers.get("x-forwarded-host")?.split(",")[0].trim(),d=b||a.nextUrl.protocol.replace(":","")||"https",e=c?`${d}://${c}`:a.nextUrl.origin,f=process.env.ROBOPARK_LAN_URL||"",g=!f||/:\/\/0\.0\.0\.0(?::|\/|$)/.test(f)?e:f,h=c?.endsWith(".ts.net")?e:process.env.ROBOPARK_TAILSCALE_URL||"";return w.NextResponse.json({lan:g,tail:h,tail_dns:h||process.env.ROBOPARK_TAILSCALE_DNS||"",control_url:e,source:"robovoice-control"})}let d=await D(a,c);if(d)return d;let e=await (0,y.wn)(a,`/fed/${c}`);if(502!==e.status)return e;if("stream"===c){let a,b=new TextEncoder;return new Response(new ReadableStream({start(c){c.enqueue(b.encode(": robovoice standalone stream ready\n\n")),a=setInterval(()=>{try{c.enqueue(b.encode(`event: heartbeat
2
2
  data: ${JSON.stringify({t:"heartbeat",n:"robovoice-control",ts:Date.now(),d:{standalone:!0}})}
3
3
 
4
4
  `))}catch{a&&clearInterval(a)}},15e3)},cancel(){a&&clearInterval(a)}}),{headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-cache, no-transform",Connection:"keep-alive"}})}if("status"===c){let a=await (0,x.U)(),b=Date.now(),c=await C();return w.NextResponse.json({self:{nodeId:"robovoice-control",displayName:"RoboVoice Control Center",role:"hub",version:process.env.npm_package_version||"development",platform:process.platform,arch:process.arch,capabilities:["voice","dashboard"],workers:[],commands:[],providers:["robovoice","elevenlabs"],startedAt:b},role:{role:"hub",site:process.env.ROBOPARK_SITE||"Local control"},nodes:[],hardware:null,runs:[],agents:[],activity:[],control:{readonly:!c,schedulerLinked:c,registrySource:a.registry_source},ts:b})}return w.NextResponse.json({ok:!1,disabled:!0,error:`Mesh endpoint /fed/${c} requires INFINICODE_MESH_URL`},{status:503})}async function G(a,b){let c=(await b.params).path.join("/"),d=await D(a,c);if(d)return d;let e=await (0,y.wn)(a,`/fed/${c}`);return 502!==e.status?e:w.NextResponse.json({ok:!1,readonly:!0,error:"No Infinicode mesh upstream is configured"},{status:503})}let H=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/fed/[...path]/route",pathname:"/fed/[...path]",filename:"route",bundlePath:"app/fed/[...path]/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\yunge\\OneDrive\\Desktop\\ROBOVOICE-main\\frontend\\app\\fed\\[...path]\\route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:I,workUnitAsyncStorage:J,serverHooks:K}=H;function L(){return(0,g.patchFetch)({workAsyncStorage:I,workUnitAsyncStorage:J})}async function M(a,b,c){var d;let e="/fed/[...path]/route";"/index"===e&&(e="/");let g=await H.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:v,nextConfig:w,isDraftMode:x,prerenderManifest:y,routerServerContext:z,isOnDemandRevalidate:A,revalidateOnlyGenerated:B,resolvedPathname:C}=g,D=(0,j.normalizeAppPath)(e),E=!!(y.dynamicRoutes[D]||y.routes[C]);if(E&&!x){let a=!!y.routes[C],b=y.dynamicRoutes[D];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let F=null;!E||H.isDev||x||(F="/index"===(F=C)?"/":F);let G=!0===H.isDev||!E,I=E&&!G,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:y,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:G,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>H.onRequestError(a,b,d,z)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>H.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&A&&B&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!E)return await (0,o.I)(N,O,e,M.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await H.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:A})},z),b}},l=await H.handleResponse({req:a,nextConfig:w,cacheKey:F,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:y,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:B,responseGenerator:k,waitUntil:c.waitUntil});if(!E)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",A?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&E||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await H.onRequestError(a,b,{routerKind:"App Router",routePath:D,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:A})}),E)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},96487:()=>{},99435:(a,b,c)=>{"use strict";c.d(b,{U:()=>l});var d=c(51455),e=c(76760);let f=(process.env.WEBHOOK_URL||"http://agent:8889").replace(/\/+$/,""),g=null,h=0,i=null;function j(a,b){return{...a,characters:Array.isArray(a.characters)?a.characters:[],device_registry:a.device_registry&&"object"==typeof a.device_registry?a.device_registry:{},registry_source:b}}async function k(){for(let a of[process.env.CAAL_SETTINGS_PATH,process.env.ROBOVOICE_SETTINGS_PATH,(0,e.resolve)(process.cwd(),"..","settings.json"),(0,e.resolve)(process.cwd(),"settings.json")].filter(a=>!!a))try{let b=JSON.parse(await (0,d.readFile)(a,"utf8"));return j(b,"persisted-snapshot")}catch{}return j({},"empty")}async function l(){if(g&&Date.now()<h)return g;if(i)return i;i=(async()=>{try{let a=await fetch(`${f}/settings`,{cache:"no-store",signal:AbortSignal.timeout(1500)});if(!a.ok)throw Error(`Settings registry returned ${a.status}`);let b=await a.json();return g=null,h=0,j(b.settings||b,"live-agent")}catch{return g=await k(),h=Date.now()+15e3,g}})();try{return await i}finally{i=null}}}};var b=require("../../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873,1428,1692],()=>b(b.s=81510));module.exports=c})();
@@ -1 +1 @@
1
- (()=>{var a={};a.id=7982,a.ids=[7982],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},36228:(a,b,c)=>{"use strict";c.d(b,{n_:()=>i,wn:()=>k,z4:()=>h});var d=c(73024);let e=process.env.ROBOPARK_CONTROL_URL||"http://host.docker.internal:47913",f=process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080",g=function(){if(process.env.ROBOPARK_CONTROL_TOKEN)return process.env.ROBOPARK_CONTROL_TOKEN.trim();let a=process.env.ROBOPARK_CONTROL_TOKEN_FILE;if(!a)return"";try{return(0,d.readFileSync)(a,"utf8").trim()}catch{return""}}();function h(){return f.replace(/\/+$/,"")}function i(){return g}let j=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailers","transfer-encoding","upgrade","content-length"]);async function k(a,b){let c,d=new URL(a.url),h=d.searchParams.get("token");d.searchParams.delete("token");let i=b.startsWith("/robopark/"),k=new URL((i?b.slice(9):b)+d.search,i?f:e);!g&&h&&k.searchParams.set("token",h);let l=new Headers;for(let b of["accept","content-type","if-match","if-none-match"]){let c=a.headers.get(b);c&&l.set(b,c)}let m=a.headers.get("authorization");m&&l.set("authorization",m),g&&l.set("authorization","Bearer "+g);let n=a.method.toUpperCase(),o="GET"===n||"HEAD"===n?void 0:await a.arrayBuffer(),p=new AbortController,q=setTimeout(()=>p.abort(),7e3);try{c=await fetch(k,{method:n,headers:l,body:o&&o.byteLength?o:void 0,cache:"no-store",redirect:"manual",signal:p.signal})}catch(b){clearTimeout(q);let a=b instanceof Error?b.message:String(b);return Response.json({ok:!1,error:"RoboPark control upstream unavailable",detail:a,upstream:k.origin},{status:502,headers:{"cache-control":"no-store"}})}clearTimeout(q);let r=new Headers;return c.headers.forEach((a,b)=>{j.has(b.toLowerCase())||r.set(b,a)}),r.set("cache-control","no-store"),r.set("x-robopark-control-source",k.origin),new Response(c.body,{status:c.status,statusText:c.statusText,headers:r})}},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},49212:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>F,patchFetch:()=>E,routeModule:()=>A,serverHooks:()=>D,workAsyncStorage:()=>B,workUnitAsyncStorage:()=>C});var d={};c.r(d),c.d(d,{GET:()=>z,dynamic:()=>w,runtime:()=>x});var e=c(95736),f=c(9117),g=c(4044),h=c(39326),i=c(32324),j=c(261),k=c(54290),l=c(85328),m=c(38928),n=c(46595),o=c(3421),p=c(17679),q=c(41681),r=c(63446),s=c(86439),t=c(51356),u=c(36228),v=c(82680);let w="force-dynamic",x="nodejs";async function y(a){let b=new AbortController,c=setTimeout(()=>b.abort(),3500);try{let d="http://"+a.host+":"+a.visionPort+"/video_feed",e=await fetch(d,{cache:"no-store",signal:b.signal});if(clearTimeout(c),!e.ok||!e.body)throw Error("RoboVision returned "+e.status);let f=new Headers;return f.set("content-type",e.headers.get("content-type")||"multipart/x-mixed-replace; boundary=frame"),f.set("cache-control","no-store, no-cache, must-revalidate"),f.set("x-robovoice-media-source","direct-robovision"),f.set("x-robovoice-robot",a.id),new Response(e.body,{status:200,headers:f})}catch(b){return clearTimeout(c),console.warn("Direct RoboVision relay failed for "+a.id+":",b),null}}async function z(a,b){let{robotId:c}=await b.params;for(let a of[()=>(0,v.bR)(c),()=>(0,v.QX)(c)]){let b=await a();if(!b)continue;let c=await y(b);if(c)return c}return(0,u.wn)(a,"/fed/media/robots/"+encodeURIComponent(c)+"/video_feed")}let A=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/fed/media/robots/[robotId]/video_feed/route",pathname:"/fed/media/robots/[robotId]/video_feed",filename:"route",bundlePath:"app/fed/media/robots/[robotId]/video_feed/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\yunge\\OneDrive\\Desktop\\ROBOVOICE-main\\frontend\\app\\fed\\media\\robots\\[robotId]\\video_feed\\route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:B,workUnitAsyncStorage:C,serverHooks:D}=A;function E(){return(0,g.patchFetch)({workAsyncStorage:B,workUnitAsyncStorage:C})}async function F(a,b,c){var d;let e="/fed/media/robots/[robotId]/video_feed/route";"/index"===e&&(e="/");let g=await A.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:v,nextConfig:w,isDraftMode:x,prerenderManifest:y,routerServerContext:z,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,resolvedPathname:D}=g,E=(0,j.normalizeAppPath)(e),F=!!(y.dynamicRoutes[E]||y.routes[D]);if(F&&!x){let a=!!y.routes[D],b=y.dynamicRoutes[E];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!F||A.isDev||x||(G="/index"===(G=D)?"/":G);let H=!0===A.isDev||!F,I=F&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:y,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>A.onRequestError(a,b,d,z)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>A.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&B&&C&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!F)return await (0,o.I)(N,O,e,M.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await A.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})},z),b}},l=await A.handleResponse({req:a,nextConfig:w,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:y,isRoutePPREnabled:!1,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,responseGenerator:k,waitUntil:c.waitUntil});if(!F)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",B?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&F||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await A.onRequestError(a,b,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})}),F)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{"use strict";a.exports=require("node:fs")},78335:()=>{},82680:(a,b,c)=>{"use strict";c.d(b,{QX:()=>i,bR:()=>f});var d=c(36228);let e=[{id:"bmw",name:"BMW",deviceId:"dev_0422e545",host:process.env.ROBOVOICE_BMW_HOST||"192.168.0.178",visionPort:5e3,audioPort:8e3,aliases:["bmw","dev_0422e545"]}];function f(a){let b=decodeURIComponent(a).trim().toLowerCase();return(function(){let a=process.env.ROBOVOICE_ROBOTS_JSON;if(!a)return e;try{let b=JSON.parse(a);if(!Array.isArray(b))throw Error("expected a JSON array");return b.map(a=>({id:String(a.id||a.name).toLowerCase(),name:String(a.name||a.id),deviceId:String(a.deviceId||a.device_id||a.id),host:String(a.host||a.ip),visionPort:Number(a.visionPort||a.vision_port||5e3),audioPort:Number(a.audioPort||a.audio_port||8e3),aliases:Array.from(new Set([a.id,a.name,a.deviceId,a.device_id,...a.aliases||[]].filter(Boolean).map(String)))}))}catch(a){return console.error("Invalid ROBOVOICE_ROBOTS_JSON:",a),e}})().find(a=>[a.id,a.name,a.deviceId,...a.aliases].some(a=>String(a).toLowerCase()===b))}async function g(a){let b=(0,d.n_)();try{let c=await fetch((0,d.z4)()+a,{cache:"no-store",headers:b?{authorization:"Bearer "+b}:{},signal:AbortSignal.timeout(2500)});if(!c.ok)return null;return await c.json()}catch{return null}}function h(a){let b=String(a.lan_ip||a.tailscale_ip||a.last_seen_ip||"").trim();return b?{id:String(a.id),name:String(a.name||a.id),deviceId:String(a.id),host:b,visionPort:5e3,audioPort:8e3,aliases:[String(a.id),String(a.name||a.id)]}:null}async function i(a){let b=decodeURIComponent(a).trim();if(!b)return null;let c=await g("/api/devices/"+encodeURIComponent(b));if(c?.id)return h(c);let d=await g("/api/devices");if(!Array.isArray(d))return null;let e=b.toLowerCase(),f=d.find(a=>String(a.id)===b||String(a.name||"").toLowerCase()===e);return f?h(f):null}},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},95736:(a,b,c)=>{"use strict";a.exports=c(44870)},96487:()=>{}};var b=require("../../../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873],()=>b(b.s=49212));module.exports=c})();
1
+ (()=>{var a={};a.id=7982,a.ids=[7982],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},36228:(a,b,c)=>{"use strict";c.d(b,{n_:()=>i,wn:()=>k,z4:()=>h});var d=c(73024);let e=process.env.ROBOPARK_CONTROL_URL||"http://host.docker.internal:47913",f=process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080",g=function(){if(process.env.ROBOPARK_CONTROL_TOKEN)return process.env.ROBOPARK_CONTROL_TOKEN.trim();let a=process.env.ROBOPARK_CONTROL_TOKEN_FILE;if(!a)return"";try{return(0,d.readFileSync)(a,"utf8").trim()}catch{return""}}();function h(){return f.replace(/\/+$/,"")}function i(){return g}let j=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailers","transfer-encoding","upgrade","content-length"]);async function k(a,b){let c,d=new URL(a.url),h=d.searchParams.get("token");d.searchParams.delete("token");let i=b.startsWith("/robopark/"),k=new URL((i?b.slice(9):b)+d.search,i?f:e);!g&&h&&k.searchParams.set("token",h);let l=new Headers;for(let b of["accept","content-type","if-match","if-none-match"]){let c=a.headers.get(b);c&&l.set(b,c)}let m=a.headers.get("authorization");m&&l.set("authorization",m),g&&l.set("authorization","Bearer "+g);let n=a.method.toUpperCase(),o="GET"===n||"HEAD"===n?void 0:await a.arrayBuffer(),p=new AbortController,q=()=>p.abort();if(a.signal.aborted)return Response.json({ok:!1,error:"client disconnected"},{status:499,headers:{"cache-control":"no-store"}});a.signal.addEventListener("abort",q,{once:!0});let r=setTimeout(q,7e3);try{c=await fetch(k,{method:n,headers:l,body:o&&o.byteLength?o:void 0,cache:"no-store",redirect:"manual",signal:p.signal})}catch(c){clearTimeout(r),a.signal.removeEventListener("abort",q);let b=c instanceof Error?c.message:String(c);return Response.json({ok:!1,error:"RoboPark control upstream unavailable",detail:b,upstream:k.origin},{status:502,headers:{"cache-control":"no-store"}})}clearTimeout(r);let s=new Headers;return c.headers.forEach((a,b)=>{j.has(b.toLowerCase())||s.set(b,a)}),s.set("cache-control","no-store"),s.set("x-robopark-control-source",k.origin),new Response(c.body,{status:c.status,statusText:c.statusText,headers:s})}},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},49212:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>F,patchFetch:()=>E,routeModule:()=>A,serverHooks:()=>D,workAsyncStorage:()=>B,workUnitAsyncStorage:()=>C});var d={};c.r(d),c.d(d,{GET:()=>z,dynamic:()=>w,runtime:()=>x});var e=c(95736),f=c(9117),g=c(4044),h=c(39326),i=c(32324),j=c(261),k=c(54290),l=c(85328),m=c(38928),n=c(46595),o=c(3421),p=c(17679),q=c(41681),r=c(63446),s=c(86439),t=c(51356),u=c(36228),v=c(82680);let w="force-dynamic",x="nodejs";async function y(a,b){let c=new AbortController,d=()=>c.abort();if(b.aborted)return null;b.addEventListener("abort",d,{once:!0});let e=setTimeout(d,3500);try{let b="http://"+a.host+":"+a.visionPort+"/video_feed",d=await fetch(b,{cache:"no-store",signal:c.signal});if(clearTimeout(e),!d.ok||!d.body)throw Error("RoboVision returned "+d.status);let f=new Headers;return f.set("content-type",d.headers.get("content-type")||"multipart/x-mixed-replace; boundary=frame"),f.set("cache-control","no-store, no-cache, must-revalidate"),f.set("x-robovoice-media-source","direct-robovision"),f.set("x-robovoice-robot",a.id),new Response(d.body,{status:200,headers:f})}catch(c){return clearTimeout(e),b.removeEventListener("abort",d),console.warn("Direct RoboVision relay failed for "+a.id+":",c),null}}async function z(a,b){let{robotId:c}=await b.params;for(let b of[()=>(0,v.bR)(c),()=>(0,v.QX)(c)]){let c=await b();if(!c)continue;let d=await y(c,a.signal);if(d)return d}return(0,u.wn)(a,"/fed/media/robots/"+encodeURIComponent(c)+"/video_feed")}let A=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/fed/media/robots/[robotId]/video_feed/route",pathname:"/fed/media/robots/[robotId]/video_feed",filename:"route",bundlePath:"app/fed/media/robots/[robotId]/video_feed/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\yunge\\OneDrive\\Desktop\\ROBOVOICE-main\\frontend\\app\\fed\\media\\robots\\[robotId]\\video_feed\\route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:B,workUnitAsyncStorage:C,serverHooks:D}=A;function E(){return(0,g.patchFetch)({workAsyncStorage:B,workUnitAsyncStorage:C})}async function F(a,b,c){var d;let e="/fed/media/robots/[robotId]/video_feed/route";"/index"===e&&(e="/");let g=await A.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:v,nextConfig:w,isDraftMode:x,prerenderManifest:y,routerServerContext:z,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,resolvedPathname:D}=g,E=(0,j.normalizeAppPath)(e),F=!!(y.dynamicRoutes[E]||y.routes[D]);if(F&&!x){let a=!!y.routes[D],b=y.dynamicRoutes[E];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!F||A.isDev||x||(G="/index"===(G=D)?"/":G);let H=!0===A.isDev||!F,I=F&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:y,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>A.onRequestError(a,b,d,z)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>A.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&B&&C&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!F)return await (0,o.I)(N,O,e,M.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await A.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})},z),b}},l=await A.handleResponse({req:a,nextConfig:w,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:y,isRoutePPREnabled:!1,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,responseGenerator:k,waitUntil:c.waitUntil});if(!F)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",B?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&F||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await A.onRequestError(a,b,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})}),F)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{"use strict";a.exports=require("node:fs")},78335:()=>{},82680:(a,b,c)=>{"use strict";c.d(b,{QX:()=>i,bR:()=>f});var d=c(36228);let e=[{id:"bmw",name:"BMW",deviceId:"dev_0422e545",host:process.env.ROBOVOICE_BMW_HOST||"192.168.0.178",visionPort:5e3,audioPort:8e3,aliases:["bmw","dev_0422e545"]}];function f(a){let b=decodeURIComponent(a).trim().toLowerCase();return(function(){let a=process.env.ROBOVOICE_ROBOTS_JSON;if(!a)return e;try{let b=JSON.parse(a);if(!Array.isArray(b))throw Error("expected a JSON array");return b.map(a=>({id:String(a.id||a.name).toLowerCase(),name:String(a.name||a.id),deviceId:String(a.deviceId||a.device_id||a.id),host:String(a.host||a.ip),visionPort:Number(a.visionPort||a.vision_port||5e3),audioPort:Number(a.audioPort||a.audio_port||8e3),aliases:Array.from(new Set([a.id,a.name,a.deviceId,a.device_id,...a.aliases||[]].filter(Boolean).map(String)))}))}catch(a){return console.error("Invalid ROBOVOICE_ROBOTS_JSON:",a),e}})().find(a=>[a.id,a.name,a.deviceId,...a.aliases].some(a=>String(a).toLowerCase()===b))}async function g(a){let b=(0,d.n_)();try{let c=await fetch((0,d.z4)()+a,{cache:"no-store",headers:b?{authorization:"Bearer "+b}:{},signal:AbortSignal.timeout(2500)});if(!c.ok)return null;return await c.json()}catch{return null}}function h(a){let b=String(a.lan_ip||a.tailscale_ip||a.last_seen_ip||"").trim();return b?{id:String(a.id),name:String(a.name||a.id),deviceId:String(a.id),host:b,visionPort:5e3,audioPort:8e3,aliases:[String(a.id),String(a.name||a.id)]}:null}async function i(a){let b=decodeURIComponent(a).trim();if(!b)return null;let c=await g("/api/devices/"+encodeURIComponent(b));if(c?.id)return h(c);let d=await g("/api/devices");if(!Array.isArray(d))return null;let e=b.toLowerCase(),f=d.find(a=>String(a.id)===b||String(a.name||"").toLowerCase()===e);return f?h(f):null}},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},95736:(a,b,c)=>{"use strict";a.exports=c(44870)},96487:()=>{}};var b=require("../../../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873],()=>b(b.s=49212));module.exports=c})();
@@ -1 +1 @@
1
- (()=>{var a={};a.id=1711,a.ids=[1711],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},36228:(a,b,c)=>{"use strict";c.d(b,{n_:()=>i,wn:()=>k,z4:()=>h});var d=c(73024);let e=process.env.ROBOPARK_CONTROL_URL||"http://host.docker.internal:47913",f=process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080",g=function(){if(process.env.ROBOPARK_CONTROL_TOKEN)return process.env.ROBOPARK_CONTROL_TOKEN.trim();let a=process.env.ROBOPARK_CONTROL_TOKEN_FILE;if(!a)return"";try{return(0,d.readFileSync)(a,"utf8").trim()}catch{return""}}();function h(){return f.replace(/\/+$/,"")}function i(){return g}let j=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailers","transfer-encoding","upgrade","content-length"]);async function k(a,b){let c,d=new URL(a.url),h=d.searchParams.get("token");d.searchParams.delete("token");let i=b.startsWith("/robopark/"),k=new URL((i?b.slice(9):b)+d.search,i?f:e);!g&&h&&k.searchParams.set("token",h);let l=new Headers;for(let b of["accept","content-type","if-match","if-none-match"]){let c=a.headers.get(b);c&&l.set(b,c)}let m=a.headers.get("authorization");m&&l.set("authorization",m),g&&l.set("authorization","Bearer "+g);let n=a.method.toUpperCase(),o="GET"===n||"HEAD"===n?void 0:await a.arrayBuffer(),p=new AbortController,q=setTimeout(()=>p.abort(),7e3);try{c=await fetch(k,{method:n,headers:l,body:o&&o.byteLength?o:void 0,cache:"no-store",redirect:"manual",signal:p.signal})}catch(b){clearTimeout(q);let a=b instanceof Error?b.message:String(b);return Response.json({ok:!1,error:"RoboPark control upstream unavailable",detail:a,upstream:k.origin},{status:502,headers:{"cache-control":"no-store"}})}clearTimeout(q);let r=new Headers;return c.headers.forEach((a,b)=>{j.has(b.toLowerCase())||r.set(b,a)}),r.set("cache-control","no-store"),r.set("x-robopark-control-source",k.origin),new Response(c.body,{status:c.status,statusText:c.statusText,headers:r})}},43414:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>D,patchFetch:()=>C,routeModule:()=>y,serverHooks:()=>B,workAsyncStorage:()=>z,workUnitAsyncStorage:()=>A});var d={};c.r(d),c.d(d,{DELETE:()=>x,GET:()=>x,PATCH:()=>x,POST:()=>x,PUT:()=>x,dynamic:()=>v,runtime:()=>w});var e=c(95736),f=c(9117),g=c(4044),h=c(39326),i=c(32324),j=c(261),k=c(54290),l=c(85328),m=c(38928),n=c(46595),o=c(3421),p=c(17679),q=c(41681),r=c(63446),s=c(86439),t=c(51356),u=c(36228);let v="force-dynamic",w="nodejs";async function x(a,b){let{path:c}=await b.params;return(0,u.wn)(a,"/robopark/"+c.map(encodeURIComponent).join("/"))}let y=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/robopark/[...path]/route",pathname:"/robopark/[...path]",filename:"route",bundlePath:"app/robopark/[...path]/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\yunge\\OneDrive\\Desktop\\ROBOVOICE-main\\frontend\\app\\robopark\\[...path]\\route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:z,workUnitAsyncStorage:A,serverHooks:B}=y;function C(){return(0,g.patchFetch)({workAsyncStorage:z,workUnitAsyncStorage:A})}async function D(a,b,c){var d;let e="/robopark/[...path]/route";"/index"===e&&(e="/");let g=await y.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:v,nextConfig:w,isDraftMode:x,prerenderManifest:z,routerServerContext:A,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,resolvedPathname:D}=g,E=(0,j.normalizeAppPath)(e),F=!!(z.dynamicRoutes[E]||z.routes[D]);if(F&&!x){let a=!!z.routes[D],b=z.dynamicRoutes[E];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!F||y.isDev||x||(G="/index"===(G=D)?"/":G);let H=!0===y.isDev||!F,I=F&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:z,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>y.onRequestError(a,b,d,A)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>y.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&B&&C&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!F)return await (0,o.I)(N,O,e,M.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await y.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})},A),b}},l=await y.handleResponse({req:a,nextConfig:w,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:z,isRoutePPREnabled:!1,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,responseGenerator:k,waitUntil:c.waitUntil});if(!F)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",B?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&F||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await y.onRequestError(a,b,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})}),F)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{"use strict";a.exports=require("node:fs")},78335:()=>{},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},95736:(a,b,c)=>{"use strict";a.exports=c(44870)},96487:()=>{}};var b=require("../../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873],()=>b(b.s=43414));module.exports=c})();
1
+ (()=>{var a={};a.id=1711,a.ids=[1711],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},36228:(a,b,c)=>{"use strict";c.d(b,{n_:()=>i,wn:()=>k,z4:()=>h});var d=c(73024);let e=process.env.ROBOPARK_CONTROL_URL||"http://host.docker.internal:47913",f=process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080",g=function(){if(process.env.ROBOPARK_CONTROL_TOKEN)return process.env.ROBOPARK_CONTROL_TOKEN.trim();let a=process.env.ROBOPARK_CONTROL_TOKEN_FILE;if(!a)return"";try{return(0,d.readFileSync)(a,"utf8").trim()}catch{return""}}();function h(){return f.replace(/\/+$/,"")}function i(){return g}let j=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailers","transfer-encoding","upgrade","content-length"]);async function k(a,b){let c,d=new URL(a.url),h=d.searchParams.get("token");d.searchParams.delete("token");let i=b.startsWith("/robopark/"),k=new URL((i?b.slice(9):b)+d.search,i?f:e);!g&&h&&k.searchParams.set("token",h);let l=new Headers;for(let b of["accept","content-type","if-match","if-none-match"]){let c=a.headers.get(b);c&&l.set(b,c)}let m=a.headers.get("authorization");m&&l.set("authorization",m),g&&l.set("authorization","Bearer "+g);let n=a.method.toUpperCase(),o="GET"===n||"HEAD"===n?void 0:await a.arrayBuffer(),p=new AbortController,q=()=>p.abort();if(a.signal.aborted)return Response.json({ok:!1,error:"client disconnected"},{status:499,headers:{"cache-control":"no-store"}});a.signal.addEventListener("abort",q,{once:!0});let r=setTimeout(q,7e3);try{c=await fetch(k,{method:n,headers:l,body:o&&o.byteLength?o:void 0,cache:"no-store",redirect:"manual",signal:p.signal})}catch(c){clearTimeout(r),a.signal.removeEventListener("abort",q);let b=c instanceof Error?c.message:String(c);return Response.json({ok:!1,error:"RoboPark control upstream unavailable",detail:b,upstream:k.origin},{status:502,headers:{"cache-control":"no-store"}})}clearTimeout(r);let s=new Headers;return c.headers.forEach((a,b)=>{j.has(b.toLowerCase())||s.set(b,a)}),s.set("cache-control","no-store"),s.set("x-robopark-control-source",k.origin),new Response(c.body,{status:c.status,statusText:c.statusText,headers:s})}},43414:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>D,patchFetch:()=>C,routeModule:()=>y,serverHooks:()=>B,workAsyncStorage:()=>z,workUnitAsyncStorage:()=>A});var d={};c.r(d),c.d(d,{DELETE:()=>x,GET:()=>x,PATCH:()=>x,POST:()=>x,PUT:()=>x,dynamic:()=>v,runtime:()=>w});var e=c(95736),f=c(9117),g=c(4044),h=c(39326),i=c(32324),j=c(261),k=c(54290),l=c(85328),m=c(38928),n=c(46595),o=c(3421),p=c(17679),q=c(41681),r=c(63446),s=c(86439),t=c(51356),u=c(36228);let v="force-dynamic",w="nodejs";async function x(a,b){let{path:c}=await b.params;return(0,u.wn)(a,"/robopark/"+c.map(encodeURIComponent).join("/"))}let y=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/robopark/[...path]/route",pathname:"/robopark/[...path]",filename:"route",bundlePath:"app/robopark/[...path]/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\yunge\\OneDrive\\Desktop\\ROBOVOICE-main\\frontend\\app\\robopark\\[...path]\\route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:z,workUnitAsyncStorage:A,serverHooks:B}=y;function C(){return(0,g.patchFetch)({workAsyncStorage:z,workUnitAsyncStorage:A})}async function D(a,b,c){var d;let e="/robopark/[...path]/route";"/index"===e&&(e="/");let g=await y.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:v,nextConfig:w,isDraftMode:x,prerenderManifest:z,routerServerContext:A,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,resolvedPathname:D}=g,E=(0,j.normalizeAppPath)(e),F=!!(z.dynamicRoutes[E]||z.routes[D]);if(F&&!x){let a=!!z.routes[D],b=z.dynamicRoutes[E];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!F||y.isDev||x||(G="/index"===(G=D)?"/":G);let H=!0===y.isDev||!F,I=F&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:z,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>y.onRequestError(a,b,d,A)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>y.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&B&&C&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!F)return await (0,o.I)(N,O,e,M.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await y.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})},A),b}},l=await y.handleResponse({req:a,nextConfig:w,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:z,isRoutePPREnabled:!1,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,responseGenerator:k,waitUntil:c.waitUntil});if(!F)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",B?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&F||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await y.onRequestError(a,b,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})}),F)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{"use strict";a.exports=require("node:fs")},78335:()=>{},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},95736:(a,b,c)=>{"use strict";a.exports=c(44870)},96487:()=>{}};var b=require("../../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873],()=>b(b.s=43414));module.exports=c})();
@@ -1 +1 @@
1
- (()=>{var a={};a.id=9557,a.ids=[9557],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},4573:a=>{"use strict";a.exports=require("node:buffer")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},35437:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>G,patchFetch:()=>F,routeModule:()=>B,serverHooks:()=>E,workAsyncStorage:()=>C,workUnitAsyncStorage:()=>D});var d={};c.r(d),c.d(d,{GET:()=>A,dynamic:()=>w,runtime:()=>x});var e=c(95736),f=c(9117),g=c(4044),h=c(39326),i=c(32324),j=c(261),k=c(54290),l=c(85328),m=c(38928),n=c(46595),o=c(3421),p=c(17679),q=c(41681),r=c(63446),s=c(86439),t=c(51356),u=c(58755),v=c(82680);let w="force-dynamic",x="nodejs",y=(process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080").replace(/\/+$/,"");async function z(a){let b=`${y}/api/robots/${encodeURIComponent(a)}/stream`;try{let a=await fetch(b,{cache:"no-store",signal:AbortSignal.timeout(8e3)}),c=await a.text();return new Response(c,{status:a.status,headers:{"content-type":a.headers.get("content-type")||"application/json","cache-control":"no-store"}})}catch(b){let a=b instanceof Error?b.message:"unknown error";return Response.json({active:!1,reason:"scheduler_unreachable",detail:`${y}: ${a}`},{status:503,headers:{"cache-control":"no-store"}})}}async function A(a,b){let{robotId:c}=await b.params,d=(0,v.bR)(c),e=process.env.LIVEKIT_API_KEY,f=process.env.LIVEKIT_API_SECRET;if(!d||!e||!f)return z(c);let g="robopark-"+d.deviceId,h=g,i=!1;try{let a=(process.env.LIVEKIT_URL||"http://livekit:7880").replace(/^ws:/,"http:").replace(/^wss:/,"https:"),b=new u.iz(a,e,f),c=(await b.listRooms()).filter(a=>a.name===g||a.name.startsWith(g+"-"));c.sort((a,b)=>Number(b.creationTime||0)-Number(a.creationTime||0));let d=c.find(a=>a.name===g&&a.numParticipants>0)||c.find(a=>a.numParticipants>0)||c[0];d&&(h=d.name,i=!0)}catch(a){console.warn("LiveKit room discovery unavailable; using stable robot room:",a)}let j=new u.mk(e,f,{identity:"viewer:"+d.deviceId+":"+crypto.randomUUID().slice(0,8),name:"RoboPark Control monitor",ttl:"15m"}),k={room:h,roomJoin:!0,canSubscribe:!0,canPublish:!1,canPublishData:!1};return j.addGrant(k),Response.json({active:!0,url:function(a){let b=(a.headers.get("x-forwarded-host")||a.headers.get("host")||"").split(",")[0].trim().split(":")[0];if(b.endsWith(".ts.net"))return"wss://"+b;let c=process.env.LIVEKIT_PUBLIC_URL||process.env.NEXT_PUBLIC_LIVEKIT_URL;if(c&&"auto"!==c)return c;let d=a.headers.get("x-forwarded-proto"),e=a.headers.get("host")||"localhost",f=e.split(":")[0];return f.endsWith(".ts.net")?"wss://"+f:"https"===d||a.url.startsWith("https://")?"wss://"+e:"ws://"+f+":7880"}(a),token:await j.toJwt(),room:h,robot_id:d.deviceId,source:"robovoice-native",room_discovered:i},{headers:{"cache-control":"no-store"}})}let B=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/robopark/api/robots/[robotId]/stream/route",pathname:"/robopark/api/robots/[robotId]/stream",filename:"route",bundlePath:"app/robopark/api/robots/[robotId]/stream/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\yunge\\OneDrive\\Desktop\\ROBOVOICE-main\\frontend\\app\\robopark\\api\\robots\\[robotId]\\stream\\route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:C,workUnitAsyncStorage:D,serverHooks:E}=B;function F(){return(0,g.patchFetch)({workAsyncStorage:C,workUnitAsyncStorage:D})}async function G(a,b,c){var d;let e="/robopark/api/robots/[robotId]/stream/route";"/index"===e&&(e="/");let g=await B.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:v,nextConfig:w,isDraftMode:x,prerenderManifest:y,routerServerContext:z,isOnDemandRevalidate:A,revalidateOnlyGenerated:C,resolvedPathname:D}=g,E=(0,j.normalizeAppPath)(e),F=!!(y.dynamicRoutes[E]||y.routes[D]);if(F&&!x){let a=!!y.routes[D],b=y.dynamicRoutes[E];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!F||B.isDev||x||(G="/index"===(G=D)?"/":G);let H=!0===B.isDev||!F,I=F&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:y,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>B.onRequestError(a,b,d,z)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>B.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&A&&C&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!F)return await (0,o.I)(N,O,e,M.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await B.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:A})},z),b}},l=await B.handleResponse({req:a,nextConfig:w,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:y,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:C,responseGenerator:k,waitUntil:c.waitUntil});if(!F)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",A?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&F||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await B.onRequestError(a,b,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:A})}),F)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}},36228:(a,b,c)=>{"use strict";c.d(b,{n_:()=>i,wn:()=>k,z4:()=>h});var d=c(73024);let e=process.env.ROBOPARK_CONTROL_URL||"http://host.docker.internal:47913",f=process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080",g=function(){if(process.env.ROBOPARK_CONTROL_TOKEN)return process.env.ROBOPARK_CONTROL_TOKEN.trim();let a=process.env.ROBOPARK_CONTROL_TOKEN_FILE;if(!a)return"";try{return(0,d.readFileSync)(a,"utf8").trim()}catch{return""}}();function h(){return f.replace(/\/+$/,"")}function i(){return g}let j=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailers","transfer-encoding","upgrade","content-length"]);async function k(a,b){let c,d=new URL(a.url),h=d.searchParams.get("token");d.searchParams.delete("token");let i=b.startsWith("/robopark/"),k=new URL((i?b.slice(9):b)+d.search,i?f:e);!g&&h&&k.searchParams.set("token",h);let l=new Headers;for(let b of["accept","content-type","if-match","if-none-match"]){let c=a.headers.get(b);c&&l.set(b,c)}let m=a.headers.get("authorization");m&&l.set("authorization",m),g&&l.set("authorization","Bearer "+g);let n=a.method.toUpperCase(),o="GET"===n||"HEAD"===n?void 0:await a.arrayBuffer(),p=new AbortController,q=setTimeout(()=>p.abort(),7e3);try{c=await fetch(k,{method:n,headers:l,body:o&&o.byteLength?o:void 0,cache:"no-store",redirect:"manual",signal:p.signal})}catch(b){clearTimeout(q);let a=b instanceof Error?b.message:String(b);return Response.json({ok:!1,error:"RoboPark control upstream unavailable",detail:a,upstream:k.origin},{status:502,headers:{"cache-control":"no-store"}})}clearTimeout(q);let r=new Headers;return c.headers.forEach((a,b)=>{j.has(b.toLowerCase())||r.set(b,a)}),r.set("cache-control","no-store"),r.set("x-robopark-control-source",k.origin),new Response(c.body,{status:c.status,statusText:c.statusText,headers:r})}},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},57975:a=>{"use strict";a.exports=require("node:util")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{"use strict";a.exports=require("node:fs")},77598:a=>{"use strict";a.exports=require("node:crypto")},78335:()=>{},82680:(a,b,c)=>{"use strict";c.d(b,{QX:()=>i,bR:()=>f});var d=c(36228);let e=[{id:"bmw",name:"BMW",deviceId:"dev_0422e545",host:process.env.ROBOVOICE_BMW_HOST||"192.168.0.178",visionPort:5e3,audioPort:8e3,aliases:["bmw","dev_0422e545"]}];function f(a){let b=decodeURIComponent(a).trim().toLowerCase();return(function(){let a=process.env.ROBOVOICE_ROBOTS_JSON;if(!a)return e;try{let b=JSON.parse(a);if(!Array.isArray(b))throw Error("expected a JSON array");return b.map(a=>({id:String(a.id||a.name).toLowerCase(),name:String(a.name||a.id),deviceId:String(a.deviceId||a.device_id||a.id),host:String(a.host||a.ip),visionPort:Number(a.visionPort||a.vision_port||5e3),audioPort:Number(a.audioPort||a.audio_port||8e3),aliases:Array.from(new Set([a.id,a.name,a.deviceId,a.device_id,...a.aliases||[]].filter(Boolean).map(String)))}))}catch(a){return console.error("Invalid ROBOVOICE_ROBOTS_JSON:",a),e}})().find(a=>[a.id,a.name,a.deviceId,...a.aliases].some(a=>String(a).toLowerCase()===b))}async function g(a){let b=(0,d.n_)();try{let c=await fetch((0,d.z4)()+a,{cache:"no-store",headers:b?{authorization:"Bearer "+b}:{},signal:AbortSignal.timeout(2500)});if(!c.ok)return null;return await c.json()}catch{return null}}function h(a){let b=String(a.lan_ip||a.tailscale_ip||a.last_seen_ip||"").trim();return b?{id:String(a.id),name:String(a.name||a.id),deviceId:String(a.id),host:b,visionPort:5e3,audioPort:8e3,aliases:[String(a.id),String(a.name||a.id)]}:null}async function i(a){let b=decodeURIComponent(a).trim();if(!b)return null;let c=await g("/api/devices/"+encodeURIComponent(b));if(c?.id)return h(c);let d=await g("/api/devices");if(!Array.isArray(d))return null;let e=b.toLowerCase(),f=d.find(a=>String(a.id)===b||String(a.name||"").toLowerCase()===e);return f?h(f):null}},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},95736:(a,b,c)=>{"use strict";a.exports=c(44870)},96487:()=>{}};var b=require("../../../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873,8755],()=>b(b.s=35437));module.exports=c})();
1
+ (()=>{var a={};a.id=9557,a.ids=[9557],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},4573:a=>{"use strict";a.exports=require("node:buffer")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},35437:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>G,patchFetch:()=>F,routeModule:()=>B,serverHooks:()=>E,workAsyncStorage:()=>C,workUnitAsyncStorage:()=>D});var d={};c.r(d),c.d(d,{GET:()=>A,dynamic:()=>w,runtime:()=>x});var e=c(95736),f=c(9117),g=c(4044),h=c(39326),i=c(32324),j=c(261),k=c(54290),l=c(85328),m=c(38928),n=c(46595),o=c(3421),p=c(17679),q=c(41681),r=c(63446),s=c(86439),t=c(51356),u=c(58755),v=c(82680);let w="force-dynamic",x="nodejs",y=(process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080").replace(/\/+$/,"");async function z(a){let b=`${y}/api/robots/${encodeURIComponent(a)}/stream`;try{let a=await fetch(b,{cache:"no-store",signal:AbortSignal.timeout(8e3)}),c=await a.text();return new Response(c,{status:a.status,headers:{"content-type":a.headers.get("content-type")||"application/json","cache-control":"no-store"}})}catch(b){let a=b instanceof Error?b.message:"unknown error";return Response.json({active:!1,reason:"scheduler_unreachable",detail:`${y}: ${a}`},{status:503,headers:{"cache-control":"no-store"}})}}async function A(a,b){let{robotId:c}=await b.params,d=(0,v.bR)(c),e=process.env.LIVEKIT_API_KEY,f=process.env.LIVEKIT_API_SECRET;if(!d||!e||!f)return z(c);let g="robopark-"+d.deviceId,h=g,i=!1;try{let a=(process.env.LIVEKIT_URL||"http://livekit:7880").replace(/^ws:/,"http:").replace(/^wss:/,"https:"),b=new u.iz(a,e,f),c=(await b.listRooms()).filter(a=>a.name===g||a.name.startsWith(g+"-"));c.sort((a,b)=>Number(b.creationTime||0)-Number(a.creationTime||0));let d=c.find(a=>a.name===g&&a.numParticipants>0)||c.find(a=>a.numParticipants>0)||c[0];d&&(h=d.name,i=!0)}catch(a){console.warn("LiveKit room discovery unavailable; using stable robot room:",a)}let j=new u.mk(e,f,{identity:"viewer:"+d.deviceId+":"+crypto.randomUUID().slice(0,8),name:"RoboPark Control monitor",ttl:"15m"}),k={room:h,roomJoin:!0,canSubscribe:!0,canPublish:!1,canPublishData:!1};return j.addGrant(k),Response.json({active:!0,url:function(a){let b=(a.headers.get("x-forwarded-host")||a.headers.get("host")||"").split(",")[0].trim().split(":")[0];if(b.endsWith(".ts.net"))return"wss://"+b;let c=process.env.LIVEKIT_PUBLIC_URL||process.env.NEXT_PUBLIC_LIVEKIT_URL;if(c&&"auto"!==c)return c;let d=a.headers.get("x-forwarded-proto"),e=a.headers.get("host")||"localhost",f=e.split(":")[0];return f.endsWith(".ts.net")?"wss://"+f:"https"===d||a.url.startsWith("https://")?"wss://"+e:"ws://"+f+":7880"}(a),token:await j.toJwt(),room:h,robot_id:d.deviceId,source:"robovoice-native",room_discovered:i},{headers:{"cache-control":"no-store"}})}let B=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/robopark/api/robots/[robotId]/stream/route",pathname:"/robopark/api/robots/[robotId]/stream",filename:"route",bundlePath:"app/robopark/api/robots/[robotId]/stream/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"C:\\Users\\yunge\\OneDrive\\Desktop\\ROBOVOICE-main\\frontend\\app\\robopark\\api\\robots\\[robotId]\\stream\\route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:C,workUnitAsyncStorage:D,serverHooks:E}=B;function F(){return(0,g.patchFetch)({workAsyncStorage:C,workUnitAsyncStorage:D})}async function G(a,b,c){var d;let e="/robopark/api/robots/[robotId]/stream/route";"/index"===e&&(e="/");let g=await B.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:v,nextConfig:w,isDraftMode:x,prerenderManifest:y,routerServerContext:z,isOnDemandRevalidate:A,revalidateOnlyGenerated:C,resolvedPathname:D}=g,E=(0,j.normalizeAppPath)(e),F=!!(y.dynamicRoutes[E]||y.routes[D]);if(F&&!x){let a=!!y.routes[D],b=y.dynamicRoutes[E];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!F||B.isDev||x||(G="/index"===(G=D)?"/":G);let H=!0===B.isDev||!F,I=F&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:y,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>B.onRequestError(a,b,d,z)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>B.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&A&&C&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!F)return await (0,o.I)(N,O,e,M.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await B.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:A})},z),b}},l=await B.handleResponse({req:a,nextConfig:w,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:y,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:C,responseGenerator:k,waitUntil:c.waitUntil});if(!F)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",A?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&F||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await B.onRequestError(a,b,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:A})}),F)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}},36228:(a,b,c)=>{"use strict";c.d(b,{n_:()=>i,wn:()=>k,z4:()=>h});var d=c(73024);let e=process.env.ROBOPARK_CONTROL_URL||"http://host.docker.internal:47913",f=process.env.ROBOPARK_SCHEDULER_URL||"http://host.docker.internal:8080",g=function(){if(process.env.ROBOPARK_CONTROL_TOKEN)return process.env.ROBOPARK_CONTROL_TOKEN.trim();let a=process.env.ROBOPARK_CONTROL_TOKEN_FILE;if(!a)return"";try{return(0,d.readFileSync)(a,"utf8").trim()}catch{return""}}();function h(){return f.replace(/\/+$/,"")}function i(){return g}let j=new Set(["connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailers","transfer-encoding","upgrade","content-length"]);async function k(a,b){let c,d=new URL(a.url),h=d.searchParams.get("token");d.searchParams.delete("token");let i=b.startsWith("/robopark/"),k=new URL((i?b.slice(9):b)+d.search,i?f:e);!g&&h&&k.searchParams.set("token",h);let l=new Headers;for(let b of["accept","content-type","if-match","if-none-match"]){let c=a.headers.get(b);c&&l.set(b,c)}let m=a.headers.get("authorization");m&&l.set("authorization",m),g&&l.set("authorization","Bearer "+g);let n=a.method.toUpperCase(),o="GET"===n||"HEAD"===n?void 0:await a.arrayBuffer(),p=new AbortController,q=()=>p.abort();if(a.signal.aborted)return Response.json({ok:!1,error:"client disconnected"},{status:499,headers:{"cache-control":"no-store"}});a.signal.addEventListener("abort",q,{once:!0});let r=setTimeout(q,7e3);try{c=await fetch(k,{method:n,headers:l,body:o&&o.byteLength?o:void 0,cache:"no-store",redirect:"manual",signal:p.signal})}catch(c){clearTimeout(r),a.signal.removeEventListener("abort",q);let b=c instanceof Error?c.message:String(c);return Response.json({ok:!1,error:"RoboPark control upstream unavailable",detail:b,upstream:k.origin},{status:502,headers:{"cache-control":"no-store"}})}clearTimeout(r);let s=new Headers;return c.headers.forEach((a,b)=>{j.has(b.toLowerCase())||s.set(b,a)}),s.set("cache-control","no-store"),s.set("x-robopark-control-source",k.origin),new Response(c.body,{status:c.status,statusText:c.statusText,headers:s})}},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},57975:a=>{"use strict";a.exports=require("node:util")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{"use strict";a.exports=require("node:fs")},77598:a=>{"use strict";a.exports=require("node:crypto")},78335:()=>{},82680:(a,b,c)=>{"use strict";c.d(b,{QX:()=>i,bR:()=>f});var d=c(36228);let e=[{id:"bmw",name:"BMW",deviceId:"dev_0422e545",host:process.env.ROBOVOICE_BMW_HOST||"192.168.0.178",visionPort:5e3,audioPort:8e3,aliases:["bmw","dev_0422e545"]}];function f(a){let b=decodeURIComponent(a).trim().toLowerCase();return(function(){let a=process.env.ROBOVOICE_ROBOTS_JSON;if(!a)return e;try{let b=JSON.parse(a);if(!Array.isArray(b))throw Error("expected a JSON array");return b.map(a=>({id:String(a.id||a.name).toLowerCase(),name:String(a.name||a.id),deviceId:String(a.deviceId||a.device_id||a.id),host:String(a.host||a.ip),visionPort:Number(a.visionPort||a.vision_port||5e3),audioPort:Number(a.audioPort||a.audio_port||8e3),aliases:Array.from(new Set([a.id,a.name,a.deviceId,a.device_id,...a.aliases||[]].filter(Boolean).map(String)))}))}catch(a){return console.error("Invalid ROBOVOICE_ROBOTS_JSON:",a),e}})().find(a=>[a.id,a.name,a.deviceId,...a.aliases].some(a=>String(a).toLowerCase()===b))}async function g(a){let b=(0,d.n_)();try{let c=await fetch((0,d.z4)()+a,{cache:"no-store",headers:b?{authorization:"Bearer "+b}:{},signal:AbortSignal.timeout(2500)});if(!c.ok)return null;return await c.json()}catch{return null}}function h(a){let b=String(a.lan_ip||a.tailscale_ip||a.last_seen_ip||"").trim();return b?{id:String(a.id),name:String(a.name||a.id),deviceId:String(a.id),host:b,visionPort:5e3,audioPort:8e3,aliases:[String(a.id),String(a.name||a.id)]}:null}async function i(a){let b=decodeURIComponent(a).trim();if(!b)return null;let c=await g("/api/devices/"+encodeURIComponent(b));if(c?.id)return h(c);let d=await g("/api/devices");if(!Array.isArray(d))return null;let e=b.toLowerCase(),f=d.find(a=>String(a.id)===b||String(a.name||"").toLowerCase()===e);return f?h(f):null}},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},95736:(a,b,c)=>{"use strict";a.exports=c(44870)},96487:()=>{}};var b=require("../../../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873,8755],()=>b(b.s=35437));module.exports=c})();
@@ -1,19 +1,19 @@
1
1
  {
2
- "/_not-found/page": "app/_not-found/page.js",
3
2
  "/api/device-character/route": "app/api/device-character/route.js",
3
+ "/_not-found/page": "app/_not-found/page.js",
4
4
  "/api/download-piper-model/route": "app/api/download-piper-model/route.js",
5
+ "/api/prewarm/route": "app/api/prewarm/route.js",
5
6
  "/api/models/route": "app/api/models/route.js",
6
7
  "/api/prompt/route": "app/api/prompt/route.js",
7
- "/api/prewarm/route": "app/api/prewarm/route.js",
8
+ "/api/reload-tools/route": "app/api/reload-tools/route.js",
8
9
  "/api/robopark/devices/[deviceId]/control/route": "app/api/robopark/devices/[deviceId]/control/route.js",
9
10
  "/api/robopark/robots/[robotId]/operations/route": "app/api/robopark/robots/[robotId]/operations/route.js",
10
- "/api/reload-tools/route": "app/api/reload-tools/route.js",
11
11
  "/api/robopark/sessions/[sessionId]/end/route": "app/api/robopark/sessions/[sessionId]/end/route.js",
12
12
  "/api/robopark/transcripts/[sessionId]/route": "app/api/robopark/transcripts/[sessionId]/route.js",
13
13
  "/api/setup/complete/route": "app/api/setup/complete/route.js",
14
- "/api/setup/test-groq/route": "app/api/setup/test-groq/route.js",
15
- "/api/setup/test-hass/route": "app/api/setup/test-hass/route.js",
16
14
  "/api/setup/status/route": "app/api/setup/status/route.js",
15
+ "/api/setup/test-hass/route": "app/api/setup/test-hass/route.js",
16
+ "/api/setup/test-groq/route": "app/api/setup/test-groq/route.js",
17
17
  "/api/setup/test-n8n/route": "app/api/setup/test-n8n/route.js",
18
18
  "/api/setup/test-ollama/route": "app/api/setup/test-ollama/route.js",
19
19
  "/api/test-tts/route": "app/api/test-tts/route.js",
@@ -23,32 +23,32 @@
23
23
  "/api/wake-word/upload/route": "app/api/wake-word/upload/route.js",
24
24
  "/favicon.ico/route": "app/favicon.ico/route.js",
25
25
  "/api/kiosk-hardware/route": "app/api/kiosk-hardware/route.js",
26
- "/api/connection-details/route": "app/api/connection-details/route.js",
27
26
  "/api/model-status/route": "app/api/model-status/route.js",
28
- "/api/robopark/device-access/route": "app/api/robopark/device-access/route.js",
27
+ "/api/connection-details/route": "app/api/connection-details/route.js",
29
28
  "/api/robopark/camera-token/route": "app/api/robopark/camera-token/route.js",
30
29
  "/api/robopark/live-rooms/route": "app/api/robopark/live-rooms/route.js",
31
30
  "/api/robopark/monitor-token/route": "app/api/robopark/monitor-token/route.js",
32
- "/api/robopark/character-ai/route": "app/api/robopark/character-ai/route.js",
31
+ "/api/robopark/device-access/route": "app/api/robopark/device-access/route.js",
33
32
  "/api/robopark/robots/route": "app/api/robopark/robots/route.js",
33
+ "/api/robopark/character-ai/route": "app/api/robopark/character-ai/route.js",
34
34
  "/api/robopark/servers/[serverId]/metrics/route": "app/api/robopark/servers/[serverId]/metrics/route.js",
35
35
  "/api/robopark/servers/[serverId]/route": "app/api/robopark/servers/[serverId]/route.js",
36
36
  "/api/robopark/servers/route": "app/api/robopark/servers/route.js",
37
- "/api/robopark/sessions/route": "app/api/robopark/sessions/route.js",
38
- "/api/robovoice/robots/[robotId]/media-health/route": "app/api/robovoice/robots/[robotId]/media-health/route.js",
39
37
  "/api/robopark/vision-caption/route": "app/api/robopark/vision-caption/route.js",
40
- "/api/settings/route": "app/api/settings/route.js",
38
+ "/api/robopark/sessions/route": "app/api/robopark/sessions/route.js",
41
39
  "/api/robopark/robots/[robotId]/voice-engine/route": "app/api/robopark/robots/[robotId]/voice-engine/route.js",
40
+ "/api/settings/route": "app/api/settings/route.js",
41
+ "/api/robovoice/robots/[robotId]/media-health/route": "app/api/robovoice/robots/[robotId]/media-health/route.js",
42
42
  "/api/turn-credentials/route": "app/api/turn-credentials/route.js",
43
43
  "/api/robopark/transcripts/route": "app/api/robopark/transcripts/route.js",
44
- "/camera-grid/route": "app/camera-grid/route.js",
45
- "/api/wake/route": "app/api/wake/route.js",
46
44
  "/fed/media/robots/[robotId]/video_feed/route": "app/fed/media/robots/[robotId]/video_feed/route.js",
47
- "/robopark/[...path]/route": "app/robopark/[...path]/route.js",
48
- "/vendor/livekit-client.umd.js/route": "app/vendor/livekit-client.umd.js/route.js",
49
45
  "/fed/[...path]/route": "app/fed/[...path]/route.js",
50
46
  "/robopark/api/robots/[robotId]/stream/route": "app/robopark/api/robots/[robotId]/stream/route.js",
47
+ "/camera-grid/route": "app/camera-grid/route.js",
48
+ "/robopark/[...path]/route": "app/robopark/[...path]/route.js",
49
+ "/api/wake/route": "app/api/wake/route.js",
51
50
  "/(app)/opengraph-image-xg4ifa/route": "app/(app)/opengraph-image-xg4ifa/route.js",
51
+ "/vendor/livekit-client.umd.js/route": "app/vendor/livekit-client.umd.js/route.js",
52
52
  "/tailnet/route": "app/tailnet/route.js",
53
53
  "/robopark/api/[...path]/route": "app/robopark/api/[...path]/route.js",
54
54
  "/robopark/page": "app/robopark/page.js",
@@ -3,8 +3,8 @@
3
3
  "functions": {
4
4
  "/api/kiosk-hardware": {},
5
5
  "/api/robovoice/robots/[robotId]/media-health": {},
6
- "/robopark/[...path]": {},
7
6
  "/fed/media/robots/[robotId]/video_feed": {},
7
+ "/robopark/[...path]": {},
8
8
  "/robopark/api/robots/[robotId]/stream": {}
9
9
  }
10
10
  }
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-5252e5254da079b5.js" defer=""></script><script src="/_next/static/chunks/framework-e60c938074ff7136.js" defer=""></script><script src="/_next/static/chunks/main-9e24e8708ff075fc.js" defer=""></script><script src="/_next/static/chunks/pages/_app-131c90850aef965b.js" defer=""></script><script src="/_next/static/chunks/pages/_error-e4ba546eb376bdf4.js" defer=""></script><script src="/_next/static/GwsTXhcc2wWhmMKp14ZmG/_buildManifest.js" defer=""></script><script src="/_next/static/GwsTXhcc2wWhmMKp14ZmG/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"GwsTXhcc2wWhmMKp14ZmG","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-5252e5254da079b5.js" defer=""></script><script src="/_next/static/chunks/framework-e60c938074ff7136.js" defer=""></script><script src="/_next/static/chunks/main-9e24e8708ff075fc.js" defer=""></script><script src="/_next/static/chunks/pages/_app-131c90850aef965b.js" defer=""></script><script src="/_next/static/chunks/pages/_error-e4ba546eb376bdf4.js" defer=""></script><script src="/_next/static/mtTQYq_JDemq2Dpv_ITj0/_buildManifest.js" defer=""></script><script src="/_next/static/mtTQYq_JDemq2Dpv_ITj0/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"mtTQYq_JDemq2Dpv_ITj0","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>