Skip to content

Commit d4dc02b

Browse files
authored
fix(websocket client): gracefully handle failure to parse websocket subscriptions response (#120)
1 parent b0f09aa commit d4dc02b

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "renegade-sdk"
3-
version = "2.0.2"
3+
version = "2.0.3"
44
edition = "2024"
55
description = "A Rust SDK for the Renegade protocol"
66
homepage = "https://renegade.fi/"

src/renegade_wallet_client/websocket/subscriptions.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use crate::auth::add_expiring_auth_to_headers;
88
use futures_util::{SinkExt, StreamExt};
99
use renegade_external_api::types::websocket::{
1010
ClientWebsocketMessage, ClientWebsocketMessageBody, ServerWebsocketMessage,
11-
ServerWebsocketMessageBody,
11+
ServerWebsocketMessageBody, SubscriptionsMessage,
1212
};
1313
use reqwest::header::HeaderMap;
1414
use tokio::sync::{
@@ -298,8 +298,16 @@ impl SubscriptionManager {
298298
/// Handle an incoming server message, routing it to the appropriate topic
299299
/// channel
300300
async fn handle_server_message(&self, txt: String) -> Result<(), RenegadeClientError> {
301-
let msg: ServerWebsocketMessage =
302-
serde_json::from_str(&txt).map_err(RenegadeClientError::serde)?;
301+
let msg: ServerWebsocketMessage = match serde_json::from_str(&txt) {
302+
Ok(msg) => msg,
303+
Err(e) => {
304+
// Subscription acks have no topic field and don't need routing
305+
if serde_json::from_str::<SubscriptionsMessage>(&txt).is_ok() {
306+
return Ok(());
307+
}
308+
return Err(RenegadeClientError::serde(e));
309+
},
310+
};
303311

304312
if let Some(tx) = self.try_get_subscription(&msg.topic).await {
305313
tx.send(msg.body).map_err(RenegadeClientError::subscription)?;

0 commit comments

Comments
 (0)