mirror of
https://github.com/purrgrammer/grimoire.git
synced 2026-04-09 23:16:50 +02:00
c60abe6df49ccccf86ed76eb6a083a7ac2641710
Core Infrastructure: - Add ReqRelayState and ReqOverallState types for granular state tracking - Implement deriveOverallState() state machine with 8 query states - Create useReqTimelineEnhanced hook combining RelayStateManager + event tracking - Add comprehensive unit tests (27 tests, all passing) State Machine Logic: - DISCOVERING: NIP-65 relay selection in progress - CONNECTING: Waiting for first relay connection - LOADING: Initial events loading - LIVE: Streaming with active relays (only when actually connected!) - PARTIAL: Some relays ok, some failed/disconnected - OFFLINE: All relays disconnected after being live - CLOSED: Query completed, all relays closed - FAILED: All relays failed to connect UI Updates: - Single-word status indicators with detailed tooltips - Condensed relay status into NIP-65 section (no duplicate lists) - Per-relay subscription state badges (RECEIVING, EOSE, ERROR, OFFLINE) - Event counts per relay - Connection + Auth status integrated into single dropdown Fixes Critical Bug: - Solves "LIVE with 0 relays" issue (Scenario 5 from analysis) - Distinguishes real EOSE from relay disconnections - Accurate status for all 7 edge cases documented in analysis Technical Approach: - Hybrid: RelayStateManager for connections + event._relay for tracking - Works around applesauce-relay catchError bug without forking - No duplicate subscriptions - Production-quality error handling Tests: 27/27 passing including edge case scenarios
Languages
TypeScript
98.9%
CSS
0.8%
JavaScript
0.3%