mirror of https://github.com/usememos/memos.git
Implement real-time memo synchronization across all open browser instances using Server-Sent Events (SSE). When a memo is created, updated, or deleted on one device, all other connected clients receive the change notification and automatically refresh their data. Backend changes: - Add SSEHub (pub/sub) for broadcasting memo change events to connected clients - Add SSE HTTP endpoint at /api/v1/sse with Bearer token authentication (supports both Authorization header and query parameter for EventSource) - Broadcast memo.created, memo.updated, and memo.deleted events from the memo service after successful operations - Include SSEHub in APIV1Service and wire it into server initialization - Update test helper to include SSEHub to prevent nil pointer panics Frontend changes: - Add useLiveMemoRefresh hook that connects to SSE endpoint using fetch ReadableStream (supports custom auth headers unlike native EventSource) - Automatically invalidate React Query caches on received events: - memo.created: invalidate memo lists + user stats - memo.updated: invalidate specific memo detail + memo lists - memo.deleted: remove memo from cache + invalidate lists + user stats - Exponential backoff reconnection (1s to 30s) on connection failures - Integrate hook in AppInitializer for app-wide live refresh - Add SSE-specific Vite dev proxy config with no timeout for streaming Co-authored-by: milvasic <milvasic@users.noreply.github.com> |
||
|---|---|---|
| .. | ||
| attachment_service_test.go | ||
| auth_test.go | ||
| idp_service_test.go | ||
| instance_admin_cache_test.go | ||
| instance_service_test.go | ||
| memo_attachment_service_test.go | ||
| memo_relation_service_test.go | ||
| memo_service_test.go | ||
| reaction_service_test.go | ||
| shortcut_service_test.go | ||
| test_helper.go | ||
| user_service_registration_test.go | ||
| user_service_stats_test.go | ||