git » sdk » commit 483dcaf

Add the full member to user state listener

author Eric Roberts
2026-08-19 15:00:39 UTC
committer Stephen Paul Weber
2026-08-19 15:07:06 UTC
parent 47acfe229a790fe8d5d0a6c2a84d1ada30a177b7

Add the full member to user state listener

In cheogram-www we were previously looking up the member details, which ends up
calling back into borogove anyway. Because it was asynchronous it was causing
race conditions. Since we already have the member here anyway, we may as well
pass it through and then clients don't need to lookup the member themselves.

borogove/Client.hx +4 -4
test/TestClient.hx +2 -2

diff --git a/borogove/Client.hx b/borogove/Client.hx
index 089cb40..b062fc6 100644
--- a/borogove/Client.hx
+++ b/borogove/Client.hx
@@ -649,7 +649,7 @@ class Client extends EventEmitter {
 			chat.getMemberDetails([message.senderId]).then(members -> {
 				if (members.length > 0 && members[0].isSelf) return;
 
-				this.trigger("chat-state/update", { message: message, userState: userState });
+				this.trigger("chat-state/update", { message: message, userState: userState, member: members[0] });
 			});
 		}
 
@@ -1607,13 +1607,13 @@ class Client extends EventEmitter {
 	/**
 		Event fired when another participant changes state (such as typing/not typing)
 
-		@param handler takes sender ID, Chat ID, thread ID, and the new user state
+		@param handler takes sender, Chat ID, thread ID, and the new user state
 		@returns token for use with removeEventListener
 	**/
 	@:HaxeSwiftBridge.contextLifetime(handler, EventEmitter)
-	public function addUserStateListener(handler: (String,String,Null<String>,UserState)->Void):EventHandlerToken {
+	public function addUserStateListener(handler: (Member,String,Null<String>,UserState)->Void):EventHandlerToken {
 		return this.on("chat-state/update", (data) -> {
-			handler(data.message.senderId, data.message.chatId, data.message.threadId, data.userState);
+			handler(data.member, data.message.chatId, data.message.threadId, data.userState);
 			return EventHandled;
 		});
 	}
diff --git a/test/TestClient.hx b/test/TestClient.hx
index 3065ac2..ec56090 100644
--- a/test/TestClient.hx
+++ b/test/TestClient.hx
@@ -445,8 +445,8 @@ class TestClient extends utest.Test {
 		final client = new Client("test@example.com", persistence);
 		client.getDirectChat("friend@example.com");
 
-		client.addUserStateListener((senderId, chatId, threadId, userState) -> {
-			Assert.equals("friend@example.com", senderId);
+		client.addUserStateListener((member, chatId, threadId, userState) -> {
+			Assert.equals("friend@example.com", member.id);
 			Assert.equals("friend@example.com", chatId);
 			Assert.isNull(threadId);
 			Assert.equals(UserState.Composing, userState);