@sleep2agi/agent-network-dashboard 0.1.0-preview.5 → 0.1.0-preview.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/diagnostics/route-bundle-stats.json +2 -2
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/admin.html +1 -1
- package/.next/server/app/admin.rsc +1 -1
- package/.next/server/app/admin.segments/_full.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_index.segment.rsc +1 -1
- package/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/admin.segments/admin/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/admin.segments/admin.segment.rsc +1 -1
- package/.next/server/app/docs.html +1 -1
- package/.next/server/app/docs.rsc +1 -1
- package/.next/server/app/docs.segments/_full.segment.rsc +1 -1
- package/.next/server/app/docs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/docs.segments/_index.segment.rsc +1 -1
- package/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/docs.segments/docs.segment.rsc +1 -1
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +2 -2
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +1 -1
- package/.next/server/app/login.segments/_full.segment.rsc +1 -1
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +1 -1
- package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/.next/server/app/logs.html +1 -1
- package/.next/server/app/logs.rsc +1 -1
- package/.next/server/app/logs.segments/_full.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_index.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/logs.segments/logs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/logs.segments/logs.segment.rsc +1 -1
- package/.next/server/app/messages.html +1 -1
- package/.next/server/app/messages.rsc +1 -1
- package/.next/server/app/messages.segments/_full.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_head.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_index.segment.rsc +1 -1
- package/.next/server/app/messages.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/messages.segments/messages/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/messages.segments/messages.segment.rsc +1 -1
- package/.next/server/app/node.html +1 -1
- package/.next/server/app/node.rsc +1 -1
- package/.next/server/app/node.segments/_full.segment.rsc +1 -1
- package/.next/server/app/node.segments/_head.segment.rsc +1 -1
- package/.next/server/app/node.segments/_index.segment.rsc +1 -1
- package/.next/server/app/node.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/node.segments/node/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/node.segments/node.segment.rsc +1 -1
- package/.next/server/app/nodes.html +1 -1
- package/.next/server/app/nodes.rsc +1 -1
- package/.next/server/app/nodes.segments/_full.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_head.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_index.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/nodes/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/nodes.segments/nodes.segment.rsc +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/networks.html +1 -1
- package/.next/server/app/settings/networks.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_full.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings/networks/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings/networks.segment.rsc +1 -1
- package/.next/server/app/settings/networks.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.html +1 -1
- package/.next/server/app/settings/tokens.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_full.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings/tokens/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings/tokens.segment.rsc +1 -1
- package/.next/server/app/settings/tokens.segments/settings.segment.rsc +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +1 -1
- package/.next/server/app/settings.segments/_full.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/server/app/tasks.html +1 -1
- package/.next/server/app/tasks.rsc +1 -1
- package/.next/server/app/tasks.segments/_full.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_head.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_index.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/tasks/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/tasks.segments/tasks.segment.rsc +1 -1
- package/.next/server/chunks/[root-of-the-server]__0344fys._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0344fys._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0uf_olq._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0uf_olq._.js.map +1 -1
- package/.next/server/chunks/ssr/app_page_tsx_0es_sk2._.js +1 -1
- package/.next/server/chunks/ssr/app_page_tsx_0es_sk2._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/{0o~g2gtcm3~v5.js → 02w9ytw8eey3r.js} +1 -1
- package/.next/trace +2 -2
- package/.next/trace-build +1 -1
- package/app/api/hub/nodes/route.ts +7 -5
- package/app/api/hub/tasks/route.ts +8 -6
- package/app/lib/useSSE.ts +23 -8
- package/package.json +1 -1
- /package/.next/static/{oE1CQfUPxWRF4qxM7LJ_r → 2rqnf6RwG7ululyvXyiP5}/_buildManifest.js +0 -0
- /package/.next/static/{oE1CQfUPxWRF4qxM7LJ_r → 2rqnf6RwG7ululyvXyiP5}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{oE1CQfUPxWRF4qxM7LJ_r → 2rqnf6RwG7ululyvXyiP5}/_ssgManifest.js +0 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { requireDashboardAuth } from '@/app/lib/dashboard-auth';
|
|
1
|
+
import { requireDashboardAuth, getV3UserToken } from '@/app/lib/dashboard-auth';
|
|
2
2
|
|
|
3
3
|
const HUB_URL = process.env.COMMHUB_URL || 'http://47.77.216.1:9200';
|
|
4
4
|
const AUTH_TOKEN = process.env.COMMHUB_AUTH_TOKEN || '';
|
|
5
5
|
|
|
6
|
-
function hubHeaders(): Record<string, string
|
|
6
|
+
async function hubHeaders(): Promise<Record<string, string>> {
|
|
7
|
+
const userToken = await getV3UserToken();
|
|
8
|
+
const bearer = userToken || AUTH_TOKEN;
|
|
7
9
|
const h: Record<string, string> = {};
|
|
8
|
-
if (
|
|
10
|
+
if (bearer) h['Authorization'] = `Bearer ${bearer}`;
|
|
9
11
|
return h;
|
|
10
12
|
}
|
|
11
13
|
|
|
@@ -23,7 +25,7 @@ export async function GET(req: Request) {
|
|
|
23
25
|
try {
|
|
24
26
|
const url = `${HUB_URL}/api/nodes${params.toString() ? '?' + params.toString() : ''}`;
|
|
25
27
|
const res = await fetch(url, {
|
|
26
|
-
headers: hubHeaders(),
|
|
28
|
+
headers: await hubHeaders(),
|
|
27
29
|
next: { revalidate: 0 },
|
|
28
30
|
});
|
|
29
31
|
const contentType = res.headers.get('content-type') || '';
|
|
@@ -31,7 +33,7 @@ export async function GET(req: Request) {
|
|
|
31
33
|
const data = await res.json();
|
|
32
34
|
if (data.nodes && data.nodes.length > 0) return Response.json(data);
|
|
33
35
|
// nodes table empty — fall back to sessions, map to node shape
|
|
34
|
-
const statusRes = await fetch(`${HUB_URL}/api/status`, { headers: hubHeaders(), next: { revalidate: 0 } });
|
|
36
|
+
const statusRes = await fetch(`${HUB_URL}/api/status`, { headers: await hubHeaders(), next: { revalidate: 0 } });
|
|
35
37
|
if (statusRes.ok) {
|
|
36
38
|
const statusData = await statusRes.json();
|
|
37
39
|
const nodes = (statusData.sessions || []).map((s: Record<string, unknown>) => ({
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { requireDashboardAuth } from '@/app/lib/dashboard-auth';
|
|
1
|
+
import { requireDashboardAuth, getV3UserToken } from '@/app/lib/dashboard-auth';
|
|
2
2
|
|
|
3
3
|
const HUB_URL = process.env.COMMHUB_URL || 'http://47.77.216.1:9200';
|
|
4
4
|
const AUTH_TOKEN = process.env.COMMHUB_AUTH_TOKEN || '';
|
|
5
5
|
|
|
6
|
-
function hubHeaders(): Record<string, string
|
|
6
|
+
async function hubHeaders(): Promise<Record<string, string>> {
|
|
7
|
+
const userToken = await getV3UserToken();
|
|
8
|
+
const bearer = userToken || AUTH_TOKEN;
|
|
7
9
|
const h: Record<string, string> = {};
|
|
8
|
-
if (
|
|
10
|
+
if (bearer) h['Authorization'] = `Bearer ${bearer}`;
|
|
9
11
|
return h;
|
|
10
12
|
}
|
|
11
13
|
|
|
@@ -46,7 +48,7 @@ export async function GET(req: Request) {
|
|
|
46
48
|
|
|
47
49
|
const tasksRes = await fetch(
|
|
48
50
|
`${HUB_URL}/api/tasks?${params.toString()}`,
|
|
49
|
-
{ headers: hubHeaders(), next: { revalidate: 0 } },
|
|
51
|
+
{ headers: await hubHeaders(), next: { revalidate: 0 } },
|
|
50
52
|
);
|
|
51
53
|
const contentType = tasksRes.headers.get('content-type') || '';
|
|
52
54
|
if (tasksRes.ok && contentType.includes('application/json')) {
|
|
@@ -61,7 +63,7 @@ export async function GET(req: Request) {
|
|
|
61
63
|
if (filterFrom) fallbackParams.set('from_name', filterFrom);
|
|
62
64
|
if (filterTo) fallbackParams.set('to_name', filterTo);
|
|
63
65
|
fallbackParams.set('limit', String(limit));
|
|
64
|
-
const fbRes = await fetch(`${HUB_URL}/api/tasks?${fallbackParams.toString()}`, { headers: hubHeaders(), next: { revalidate: 0 } });
|
|
66
|
+
const fbRes = await fetch(`${HUB_URL}/api/tasks?${fallbackParams.toString()}`, { headers: await hubHeaders(), next: { revalidate: 0 } });
|
|
65
67
|
if (fbRes.ok) {
|
|
66
68
|
const fbData = await fbRes.json();
|
|
67
69
|
if (fbData.ok && fbData.tasks?.length > 0) {
|
|
@@ -75,7 +77,7 @@ export async function GET(req: Request) {
|
|
|
75
77
|
// Fallback: map /api/completions to tasks shape
|
|
76
78
|
const compRes = await fetch(
|
|
77
79
|
`${HUB_URL}/api/completions?limit=${limit}`,
|
|
78
|
-
{ headers: hubHeaders(), next: { revalidate: 0 } },
|
|
80
|
+
{ headers: await hubHeaders(), next: { revalidate: 0 } },
|
|
79
81
|
);
|
|
80
82
|
const compData = await compRes.json();
|
|
81
83
|
const completions: Completion[] = compData.completions || [];
|
package/app/lib/useSSE.ts
CHANGED
|
@@ -30,22 +30,31 @@ export function useSSE({ url, onEvent, reconnectDelay = 3000, enabled = true }:
|
|
|
30
30
|
const reconnectTimerRef = useRef<ReturnType<typeof setTimeout>>(undefined);
|
|
31
31
|
const unsupportedRef = useRef(false);
|
|
32
32
|
|
|
33
|
+
// Track the active probe + cancel flag so cleanup can abort the in-flight
|
|
34
|
+
// HEAD and prevent the EventSource from being created after unmount. Without
|
|
35
|
+
// this, every navigation leaks one SSE — six leaks saturate the browser's
|
|
36
|
+
// HTTP/1.1 pool and lock up further fetches (including RSC payloads).
|
|
37
|
+
const probeAbortRef = useRef<AbortController | null>(null);
|
|
38
|
+
const cancelledRef = useRef(false);
|
|
39
|
+
|
|
33
40
|
const connect = useCallback(() => {
|
|
34
|
-
if (!enabled || !url || unsupportedRef.current) return;
|
|
41
|
+
if (!enabled || !url || unsupportedRef.current || cancelledRef.current) return;
|
|
35
42
|
|
|
36
|
-
// Clean up existing connection
|
|
37
43
|
if (eventSourceRef.current) {
|
|
38
44
|
eventSourceRef.current.close();
|
|
45
|
+
eventSourceRef.current = null;
|
|
39
46
|
}
|
|
47
|
+
if (probeAbortRef.current) probeAbortRef.current.abort();
|
|
40
48
|
|
|
41
49
|
const probeUrl = url.includes('?') ? `${url}&probe=1` : `${url}?probe=1`;
|
|
42
|
-
|
|
43
50
|
const probeController = new AbortController();
|
|
51
|
+
probeAbortRef.current = probeController;
|
|
44
52
|
const probeTimeout = setTimeout(() => probeController.abort(), 5000);
|
|
45
53
|
|
|
46
54
|
fetch(probeUrl, { method: 'HEAD', cache: 'no-store', signal: probeController.signal })
|
|
47
55
|
.finally(() => clearTimeout(probeTimeout))
|
|
48
56
|
.then((res) => {
|
|
57
|
+
if (cancelledRef.current) return;
|
|
49
58
|
if (res.headers.get('x-anet-sse-available') !== 'true') {
|
|
50
59
|
unsupportedRef.current = true;
|
|
51
60
|
setConnected(false);
|
|
@@ -57,9 +66,7 @@ export function useSSE({ url, onEvent, reconnectDelay = 3000, enabled = true }:
|
|
|
57
66
|
const es = new EventSource(url);
|
|
58
67
|
eventSourceRef.current = es;
|
|
59
68
|
|
|
60
|
-
es.onopen = () =>
|
|
61
|
-
setConnected(true);
|
|
62
|
-
};
|
|
69
|
+
es.onopen = () => setConnected(true);
|
|
63
70
|
|
|
64
71
|
es.onmessage = (e) => {
|
|
65
72
|
try {
|
|
@@ -73,11 +80,13 @@ export function useSSE({ url, onEvent, reconnectDelay = 3000, enabled = true }:
|
|
|
73
80
|
setConnected(false);
|
|
74
81
|
es.close();
|
|
75
82
|
eventSourceRef.current = null;
|
|
76
|
-
|
|
77
|
-
|
|
83
|
+
if (!cancelledRef.current) {
|
|
84
|
+
reconnectTimerRef.current = setTimeout(connect, reconnectDelay);
|
|
85
|
+
}
|
|
78
86
|
};
|
|
79
87
|
})
|
|
80
88
|
.catch(() => {
|
|
89
|
+
if (cancelledRef.current) return;
|
|
81
90
|
setConnected(false);
|
|
82
91
|
setSupported(false);
|
|
83
92
|
});
|
|
@@ -85,9 +94,15 @@ export function useSSE({ url, onEvent, reconnectDelay = 3000, enabled = true }:
|
|
|
85
94
|
|
|
86
95
|
useEffect(() => {
|
|
87
96
|
unsupportedRef.current = false;
|
|
97
|
+
cancelledRef.current = false;
|
|
88
98
|
setSupported(enabled ? null : false);
|
|
89
99
|
connect();
|
|
90
100
|
return () => {
|
|
101
|
+
cancelledRef.current = true;
|
|
102
|
+
if (probeAbortRef.current) {
|
|
103
|
+
probeAbortRef.current.abort();
|
|
104
|
+
probeAbortRef.current = null;
|
|
105
|
+
}
|
|
91
106
|
if (eventSourceRef.current) {
|
|
92
107
|
eventSourceRef.current.close();
|
|
93
108
|
eventSourceRef.current = null;
|
package/package.json
CHANGED
|
File without changes
|
/package/.next/static/{oE1CQfUPxWRF4qxM7LJ_r → 2rqnf6RwG7ululyvXyiP5}/_clientMiddlewareManifest.js
RENAMED
|
File without changes
|
|
File without changes
|