From 66f16d4a2dfaf76461801419fffcc13cc2d1c9b8 Mon Sep 17 00:00:00 2001 From: Smittix Date: Wed, 21 Jan 2026 15:57:44 +0000 Subject: [PATCH] Fix SSE event names for frontend compatibility The SSE stream was sending events without proper event names. Frontend uses addEventListener('device_update', ...) which only works with named events. Now maps internal event types to proper SSE event names: - device -> device_update - status/started -> scan_started - status/stopped -> scan_stopped Co-Authored-By: Claude Opus 4.5 --- routes/bluetooth_v2.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/routes/bluetooth_v2.py b/routes/bluetooth_v2.py index f4585c3..be0a7f2 100644 --- a/routes/bluetooth_v2.py +++ b/routes/bluetooth_v2.py @@ -503,10 +503,34 @@ def stream_events(): """ scanner = get_bluetooth_scanner() + def map_event_type(event: dict) -> tuple[str, dict]: + """Map internal event types to SSE event names.""" + event_type = event.get('type', 'unknown') + + if event_type == 'device': + # Device update - send the device data + return 'device_update', event.get('device', event) + elif event_type == 'status': + status = event.get('status', '') + if status == 'started': + return 'scan_started', event + elif status == 'stopped': + return 'scan_stopped', event + return 'status', event + elif event_type == 'error': + return 'error', event + elif event_type == 'baseline': + return 'baseline', event + elif event_type == 'ping': + return 'ping', {} + else: + return event_type, event + def event_generator() -> Generator[str, None, None]: """Generate SSE events from scanner.""" for event in scanner.stream_events(timeout=1.0): - yield format_sse(event) + event_name, event_data = map_event_type(event) + yield format_sse(event_data, event=event_name) return Response( event_generator(),