Skip to content

Commit c04276a

Browse files
erskingardneryukibtc
authored andcommitted
mls: return values for welcomes and messages on processing
1 parent 74e9dbe commit c04276a

File tree

3 files changed

+33
-10
lines changed

3 files changed

+33
-10
lines changed

crates/nostr-mls/src/error.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ pub enum Error {
7575
SelfUpdate(String),
7676
/// Welcome error
7777
Welcome(String),
78+
/// We're missing a Welcome for an existing ProcessedWelcome
79+
MissingWelcomeForProcessedWelcome,
7880
/// Provider error
7981
Provider(String),
8082
/// Group not found
@@ -128,6 +130,9 @@ impl fmt::Display for Error {
128130
Self::Message(e) => write!(f, "{e}"),
129131
Self::CannotDecryptOwnMessage => write!(f, "cannot decrypt own message"),
130132
Self::Welcome(e) => write!(f, "{e}"),
133+
Self::MissingWelcomeForProcessedWelcome => {
134+
write!(f, "missing welcome for processed welcome")
135+
}
131136
Self::MergePendingCommit(e) => write!(f, "{e}"),
132137
Self::SelfUpdate(e) => write!(f, "{e}"),
133138
Self::Provider(e) => write!(f, "{e}"),

crates/nostr-mls/src/messages.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ where
300300
///
301301
/// * `Ok(())` - If message processing succeeds
302302
/// * `Err(Error)` - If message processing fails
303-
pub fn process_message(&self, event: &Event) -> Result<(), Error> {
303+
pub fn process_message(&self, event: &Event) -> Result<Option<message_types::Message>, Error> {
304304
if event.kind != Kind::MlsGroupMessage {
305305
return Err(Error::UnexpectedEvent {
306306
expected: Kind::MlsGroupMessage,
@@ -385,7 +385,7 @@ where
385385

386386
tracing::debug!(target: "nostr_mls::messages::process_message", "Processed message: {:?}", processed_message);
387387
tracing::debug!(target: "nostr_mls::messages::process_message", "Message: {:?}", message);
388-
Ok(())
388+
Ok(Some(message))
389389
}
390390
Ok(None) => {
391391
// This is what happens with proposals, commits, etc.
@@ -401,7 +401,7 @@ where
401401
.save_processed_message(processed_message)
402402
.map_err(|e| Error::Message(e.to_string()))?;
403403

404-
Ok(())
404+
Ok(None)
405405
}
406406
Err(e) => {
407407
match e {
@@ -429,7 +429,7 @@ where
429429
processed_message.state =
430430
message_types::ProcessedMessageState::Processed;
431431
self.storage()
432-
.save_processed_message(processed_message)
432+
.save_processed_message(processed_message.clone())
433433
.map_err(|e| Error::Message(e.to_string()))?;
434434

435435
tracing::debug!(target: "nostr_mls::messages::process_message", "Updated state of own cached message");
@@ -441,7 +441,9 @@ where
441441
tracing::debug!(target: "nostr_mls::messages::process_message", "Message previously failed to process");
442442
}
443443
}
444-
return Ok(());
444+
let message =
445+
self.get_message(&processed_message.message_event_id.unwrap())?;
446+
return Ok(message);
445447
}
446448
_ => {
447449
tracing::error!(target: "nostr_mls::messages::process_message", "Error processing message: {:?}", e);
@@ -457,7 +459,7 @@ where
457459
.map_err(|e| Error::Message(e.to_string()))?;
458460
}
459461
}
460-
Ok(())
462+
Ok(None)
461463
}
462464
}
463465
}

crates/nostr-mls/src/welcomes.rs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,25 @@ where
5858
&self,
5959
wrapper_event_id: &EventId,
6060
rumor_event: &UnsignedEvent,
61-
) -> Result<(), Error> {
61+
) -> Result<welcome_types::Welcome, Error> {
6262
if self.is_welcome_processed(wrapper_event_id)? {
63-
return Ok(());
63+
let processed_welcome = self
64+
.storage()
65+
.find_processed_welcome_by_event_id(wrapper_event_id)
66+
.map_err(|e| Error::Welcome(e.to_string()))?;
67+
return match processed_welcome {
68+
Some(processed_welcome) => {
69+
if let Some(welcome_event_id) = processed_welcome.welcome_event_id {
70+
self.storage()
71+
.find_welcome_by_event_id(&welcome_event_id)
72+
.map_err(|e| Error::Welcome(e.to_string()))?
73+
.ok_or(Error::MissingWelcomeForProcessedWelcome)
74+
} else {
75+
Err(Error::MissingWelcomeForProcessedWelcome)
76+
}
77+
}
78+
None => Err(Error::MissingWelcomeForProcessedWelcome),
79+
};
6480
}
6581

6682
let welcome_preview = self.preview_welcome(wrapper_event_id, rumor_event)?;
@@ -128,10 +144,10 @@ where
128144
.map_err(|e| Error::Welcome(e.to_string()))?;
129145

130146
self.storage()
131-
.save_welcome(welcome)
147+
.save_welcome(welcome.clone())
132148
.map_err(|e| Error::Welcome(e.to_string()))?;
133149

134-
Ok(())
150+
Ok(welcome)
135151
}
136152

137153
/// Accepts a welcome

0 commit comments

Comments
 (0)