Skip to content

Commit b2ebad0

Browse files
authored
fix: session methods analytics (#92)
1 parent c07fc31 commit b2ebad0

File tree

4 files changed

+85
-13
lines changed

4 files changed

+85
-13
lines changed

relay_client/src/http.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ impl Client {
114114
pairing_topic,
115115
session_proposal: session_proposal.into(),
116116
attestation: attestation.into(),
117+
analytics: None,
117118
})
118119
.await
119120
}
@@ -122,14 +123,15 @@ impl Client {
122123
&self,
123124
pairing_topic: Topic,
124125
session_topic: Topic,
125-
pairing_response: impl Into<Arc<str>>,
126+
session_proposal_response: impl Into<Arc<str>>,
126127
session_settlement_request: impl Into<Arc<str>>,
127128
) -> Response<rpc::ApproveSession> {
128129
self.request(rpc::ApproveSession {
129130
pairing_topic,
130131
session_topic,
131-
pairing_response: pairing_response.into(),
132+
session_proposal_response: session_proposal_response.into(),
132133
session_settlement_request: session_settlement_request.into(),
134+
analytics: None,
133135
})
134136
.await
135137
}

relay_client/src/websocket.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ impl Client {
173173
pairing_topic,
174174
session_proposal: session_proposal.into(),
175175
attestation: attestation.into(),
176+
analytics: None,
176177
});
177178

178179
self.request(request);
@@ -184,14 +185,15 @@ impl Client {
184185
&self,
185186
pairing_topic: Topic,
186187
session_topic: Topic,
187-
pairing_response: impl Into<Arc<str>>,
188+
session_proposal_response: impl Into<Arc<str>>,
188189
session_settlement_request: impl Into<Arc<str>>,
189190
) -> ResponseFuture<ApproveSession> {
190191
let (request, response) = create_request(ApproveSession {
191192
pairing_topic,
192193
session_topic,
193-
pairing_response: pairing_response.into(),
194+
session_proposal_response: session_proposal_response.into(),
194195
session_settlement_request: session_settlement_request.into(),
196+
analytics: None,
195197
});
196198

197199
self.request(request);

relay_rpc/src/rpc.rs

Lines changed: 66 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,23 @@ pub struct ProposeSession {
270270
pub pairing_topic: Topic,
271271
pub session_proposal: Arc<str>,
272272
pub attestation: Option<Arc<str>>,
273+
274+
#[serde(default, flatten, skip_serializing_if = "is_default")]
275+
pub analytics: Option<AnalyticsData>,
276+
}
277+
278+
impl ProposeSession {
279+
pub fn to_session_proposal(&self) -> Publish {
280+
Publish {
281+
topic: self.pairing_topic.clone(),
282+
message: self.session_proposal.clone(),
283+
attestation: self.attestation.clone(),
284+
prompt: true,
285+
tag: 1100,
286+
ttl_secs: 300,
287+
analytics: self.analytics.clone(),
288+
}
289+
}
273290
}
274291

275292
impl ServiceRequest for ProposeSession {
@@ -311,8 +328,39 @@ pub enum ApproveSessionError {
311328
pub struct ApproveSession {
312329
pub pairing_topic: Topic,
313330
pub session_topic: Topic,
314-
pub pairing_response: Arc<str>,
331+
332+
#[serde(alias = "pairing_response")]
333+
pub session_proposal_response: Arc<str>,
315334
pub session_settlement_request: Arc<str>,
335+
336+
#[serde(default, flatten, skip_serializing_if = "is_default")]
337+
pub analytics: Option<AnalyticsData>,
338+
}
339+
340+
impl ApproveSession {
341+
pub fn to_session_proposal_response(&self) -> Publish {
342+
Publish {
343+
topic: self.pairing_topic.clone(),
344+
message: self.session_proposal_response.clone(),
345+
attestation: None,
346+
prompt: false,
347+
tag: 1101,
348+
ttl_secs: 300,
349+
analytics: self.analytics.clone(),
350+
}
351+
}
352+
353+
pub fn to_session_settlement_request(&self) -> Publish {
354+
Publish {
355+
topic: self.session_topic.clone(),
356+
message: self.session_settlement_request.clone(),
357+
attestation: None,
358+
prompt: false,
359+
tag: 1102,
360+
ttl_secs: 300,
361+
analytics: self.analytics.clone(),
362+
}
363+
}
316364
}
317365

318366
impl ServiceRequest for ApproveSession {
@@ -328,7 +376,7 @@ impl ServiceRequest for ApproveSession {
328376
.decode()
329377
.map_err(|_| PayloadError::InvalidTopic)?;
330378

331-
if self.pairing_response.is_empty() || self.session_settlement_request.is_empty() {
379+
if self.session_proposal_response.is_empty() || self.session_settlement_request.is_empty() {
332380
Err(PayloadError::InvalidParams)
333381
} else {
334382
Ok(())
@@ -645,13 +693,22 @@ impl ServiceRequest for BatchReceiveMessages {
645693
}
646694
}
647695

648-
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
696+
#[derive(Debug, Default, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
649697
#[serde(rename_all = "camelCase")]
650698
pub struct AnalyticsData {
699+
#[serde(default, skip_serializing_if = "is_default")]
651700
pub correlation_id: Option<i64>,
701+
702+
#[serde(default, skip_serializing_if = "is_default")]
652703
pub chain_id: Option<Arc<str>>,
704+
705+
#[serde(default, skip_serializing_if = "is_default")]
653706
pub rpc_methods: Option<Vec<Arc<str>>>,
707+
708+
#[serde(default, skip_serializing_if = "is_default")]
654709
pub tx_hashes: Option<Vec<Arc<str>>>,
710+
711+
#[serde(default, skip_serializing_if = "is_default")]
655712
pub contract_addresses: Option<Vec<Arc<str>>>,
656713
}
657714

@@ -1014,9 +1071,12 @@ impl Request {
10141071
}
10151072
}
10161073

1017-
pub fn strip_analytics(&mut self) {
1018-
if let Params::Publish(params) = &mut self.params {
1019-
params.analytics = None;
1074+
pub fn strip_analytics(&mut self) -> Option<AnalyticsData> {
1075+
match &mut self.params {
1076+
Params::Publish(params) => params.analytics.take(),
1077+
Params::ProposeSession(params) => params.analytics.take(),
1078+
Params::ApproveSession(params) => params.analytics.take(),
1079+
_ => None,
10201080
}
10211081
}
10221082
}

relay_rpc/src/rpc/tests.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,18 @@ fn propose_session() {
6363
.into(),
6464
session_proposal: "proposal".into(),
6565
attestation: Some("attestation".into()),
66+
analytics: Some(AnalyticsData {
67+
correlation_id: Some(42),
68+
..Default::default()
69+
}),
6670
}),
6771
));
6872

6973
let serialized = serde_json::to_string(&payload).unwrap();
7074

7175
assert_eq!(
7276
&serialized,
73-
r#"{"id":1,"jsonrpc":"2.0","method":"wc_proposeSession","params":{"pairingTopic":"c4163cf65859106b3f5435fc296e7765411178ed452d1c30337a6230138c9840","sessionProposal":"proposal","attestation":"attestation"}}"#
77+
r#"{"id":1,"jsonrpc":"2.0","method":"wc_proposeSession","params":{"pairingTopic":"c4163cf65859106b3f5435fc296e7765411178ed452d1c30337a6230138c9840","sessionProposal":"proposal","attestation":"attestation","correlationId":42}}"#
7478
);
7579

7680
let deserialized: Payload = serde_json::from_str(&serialized).unwrap();
@@ -87,16 +91,20 @@ fn approve_session() {
8791
.into(),
8892
session_topic: "c4163cf65859106b3f5435fc296e7765411178ed452d1c30337a6230138c9841"
8993
.into(),
90-
pairing_response: "pairing_response".into(),
94+
session_proposal_response: "pairing_response".into(),
9195
session_settlement_request: "session_settlement_request".into(),
96+
analytics: Some(AnalyticsData {
97+
correlation_id: Some(42),
98+
..Default::default()
99+
}),
92100
}),
93101
));
94102

95103
let serialized = serde_json::to_string(&payload).unwrap();
96104

97105
assert_eq!(
98106
&serialized,
99-
r#"{"id":1,"jsonrpc":"2.0","method":"wc_approveSession","params":{"pairingTopic":"c4163cf65859106b3f5435fc296e7765411178ed452d1c30337a6230138c9840","sessionTopic":"c4163cf65859106b3f5435fc296e7765411178ed452d1c30337a6230138c9841","pairingResponse":"pairing_response","sessionSettlementRequest":"session_settlement_request"}}"#
107+
r#"{"id":1,"jsonrpc":"2.0","method":"wc_approveSession","params":{"pairingTopic":"c4163cf65859106b3f5435fc296e7765411178ed452d1c30337a6230138c9840","sessionTopic":"c4163cf65859106b3f5435fc296e7765411178ed452d1c30337a6230138c9841","sessionProposalResponse":"pairing_response","sessionSettlementRequest":"session_settlement_request","correlationId":42}}"#
100108
);
101109

102110
let deserialized: Payload = serde_json::from_str(&serialized).unwrap();

0 commit comments

Comments
 (0)