feat(diagnostic): Liste, wer gerade mit dem RVS-Raum verbunden ist

Einstellungen, zwischen Runtime-Konfiguration und App-Onboarding: alle
Verbindungen im Raum des konfigurierten Tokens — Art, Name, Details,
Adresse, verbunden seit, zuletzt aktiv.

RVS merkt sich pro Verbindung, wer sie ist: aus Nachrichten, die ohnehin
fliessen (sat_hello, host_hello, worker_hello, update_check der App,
llm_cluster_*), oder aus dem neuen client_hello (Bridge, Diagnostic, App
mit Geraetename). Adresse aus X-Forwarded-For hinter einem Reverse-Proxy.
room_clients_query liefert NUR den eigenen Raum; room_clients von Clients
wird nicht weitergereicht. Typen in der Allow-List ergaenzt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-25 12:34:14 +01:00
co-authored by Claude Opus 5.5
parent 2267f0a726
commit 7b4a1f4429
5 changed files with 188 additions and 1 deletions
+14 -1
View File
@@ -7,7 +7,7 @@
*/
import AsyncStorage from '@react-native-async-storage/async-storage';
import { NativeModules } from 'react-native';
import { NativeModules, Platform } from 'react-native';
const TlsTrust: any = NativeModules.TlsTrust;
@@ -247,6 +247,7 @@ class RVSConnection {
this.log('info', `Verbunden${tlsInfo}`);
this.setState('connected');
this.updateSecurityOnOpen(useTLS);
this.sendClientHello();
this.reconnectDelay = INITIAL_RECONNECT_DELAY_MS;
this.startHeartbeat();
};
@@ -323,6 +324,18 @@ class RVSConnection {
}
}
/** Beim RVS vorstellen — Diagnostic zeigt so, welches Handy im Raum ist. */
private sendClientHello(): void {
try {
const c: any = (Platform as any).constants || {};
const device = [c.Manufacturer, c.Model].filter(Boolean).join(' ') || Platform.OS;
let version = '';
try { version = require('../../package.json').version || ''; } catch (_) {}
this.send('client_hello', { kind: 'App', name: device,
detail: `Android ${c.Release || Platform.Version}`, version });
} catch (_) {}
}
// --- Verbindungs-Sicherheit (Schloss-Symbol) ---
getSecurity(): SecurityState {