575fe952c6
Previously, when a relay closed the WebSocket (or the connection dropped), NostrClient.onDisconnected only updated state and notified listeners — it never tried to reconnect. The relay then stayed disconnected until the next subscribe/count/publish call (which triggers reconnect()) or an explicit reconnect() from the caller. Now, if the client is still active and the relay is still in the desired set (i.e. some sub/count/outbox still wants it), onDisconnected schedules a debounced reconnect via reconnectIfNeedsTo, which respects per-relay exponential backoff so we don't hammer dead relays.