Die feste Adresse 192.168.180.135 der SwyxTray-App wird überall durch 127.0.0.1 ersetzt: Die App läuft auf dem Arbeitsplatz des Anwenders, die Verbindung bleibt damit auf dem Rechner und braucht keine Firewall-Freigabe. Scheitert der Verbindungsaufbau, weil eine über HTTPS ausgelieferte Seite kein unverschlüsseltes ws:// öffnen darf, meldet der Browser nur "The operation is insecure." – describeConnectFailure() benennt stattdessen den Grund und den Ausweg (wss:// oder Loopback). node_modules/ wird nun auf jeder Ebene ignoriert, nicht nur unter frontend/. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
31 lines
1.0 KiB
TypeScript
31 lines
1.0 KiB
TypeScript
/** Fallback-Adresse des WebSocket-Servers, falls weder .env noch /api/config etwas liefern. */
|
|
export const DEFAULT_WS_HOST = '127.0.0.1'
|
|
export const DEFAULT_WS_PORT = 17654
|
|
export const DEFAULT_WS_PATH = '/ws'
|
|
|
|
export const DEFAULT_WS_URL =
|
|
import.meta.env.VITE_WS_URL ?? `ws://${DEFAULT_WS_HOST}:${DEFAULT_WS_PORT}${DEFAULT_WS_PATH}`
|
|
|
|
export interface ClientConfig {
|
|
websocketUrl: string
|
|
host: string
|
|
port: number
|
|
path: string
|
|
}
|
|
|
|
/**
|
|
* Holt die WebSocket-Adresse vom Backend. Schlägt der Aufruf fehl (Backend nicht
|
|
* erreichbar, rein statisches Hosting), bleibt es beim Default aus der .env.
|
|
*/
|
|
export async function fetchClientConfig(signal?: AbortSignal): Promise<string> {
|
|
const response = await fetch('/api/config', { signal })
|
|
if (!response.ok) {
|
|
throw new Error(`/api/config antwortete mit HTTP ${response.status}`)
|
|
}
|
|
const config = (await response.json()) as Partial<ClientConfig>
|
|
if (!config.websocketUrl) {
|
|
throw new Error('/api/config lieferte keine websocketUrl')
|
|
}
|
|
return config.websocketUrl
|
|
}
|