diff --git a/src/NodeConnections.tsx b/src/NodeConnections.tsx index 6f15c68..e7ad90b 100644 --- a/src/NodeConnections.tsx +++ b/src/NodeConnections.tsx @@ -44,6 +44,11 @@ export default function NodeConnections({ nodeId }: { nodeId: string }) { if (!baseUrl) throw new Error('VITE_WS_BASE_URL is not configured.') const token = localStorage.getItem('access_token') + if (!token) { + throw new Error( + 'Authentication required. Please log in again.' + ) + } const response = await fetch( `${apiBaseUrl.replace(/\/$/, '')}/spock/node-interfaces/${encodeURIComponent(nodeId)}`, { @@ -69,8 +74,10 @@ export default function NodeConnections({ nodeId }: { nodeId: string }) { } if (!active) return + const wstoken = token + if (!wstoken) throw new Error('Authentication required. Get a token from the Nodes page, then reconnect.') setStatus('Connecting to replication health…') - const connection = new WebSocket(`${baseUrl.replace(/\/$/, '')}/ws/node/replication-health`) + const connection = new WebSocket(`${baseUrl.replace(/\/$/, '')}/ws/node/replication-health?token=${encodeURIComponent(wstoken)}`) socket = connection connection.onopen = () => { if (!active) return diff --git a/src/useDatabaseStatus.ts b/src/useDatabaseStatus.ts index c61fbbb..763a142 100644 --- a/src/useDatabaseStatus.ts +++ b/src/useDatabaseStatus.ts @@ -61,7 +61,12 @@ export default function useDatabaseStatus(nodeId: string, nodeName: string) { } if (!active) return setConnection('Connecting…') - const current = new WebSocket(`${wsBaseUrl.replace(/\/$/, '')}/ws/database/status`) + const wstoken = token + if (!wstoken?.trim()) { + setConnection('Connection skipped: JWT URL parameter required') + return + } + const current = new WebSocket(`${wsBaseUrl.replace(/\/$/, '')}/ws/database/status?token=${encodeURIComponent(wstoken)}`) socket = current current.onopen = () => { if (!active) return diff --git a/src/useNodeDatabaseMetric.ts b/src/useNodeDatabaseMetric.ts index 7edc013..39819e2 100644 --- a/src/useNodeDatabaseMetric.ts +++ b/src/useNodeDatabaseMetric.ts @@ -51,7 +51,12 @@ export default function useNodeDatabaseMetric( } if (!active) return setConnection('Connecting…') - const current = new WebSocket(`${wsBaseUrl.replace(/\/$/, '')}/ws/database/${endpoint}`) + const wstoken = token + if (!wstoken?.trim()) { + setConnection('Connection skipped: JWT URL parameter required') + return + } + const current = new WebSocket(`${wsBaseUrl.replace(/\/$/, '')}/ws/database/${endpoint}?token=${encodeURIComponent(wstoken)}`) socket = current current.onopen = () => { if (!active) return