From ec4897407e465310c20c3be645cc38145783109d Mon Sep 17 00:00:00 2001 From: Dakota Brink Date: Wed, 12 Mar 2025 14:12:22 -0400 Subject: [PATCH 1/6] group fix --- bindings_ffi/src/mls.rs | 13 +++++++++++++ xmtp_id/src/associations/state.rs | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/bindings_ffi/src/mls.rs b/bindings_ffi/src/mls.rs index 118dd931d..30bf1d561 100644 --- a/bindings_ffi/src/mls.rs +++ b/bindings_ffi/src/mls.rs @@ -3388,6 +3388,19 @@ mod tests { .unwrap(); client.register_identity(sig_request).await.unwrap(); + + let bob = new_test_client().await; + let fernando = new_test_client().await; + let group = client + .conversations() + .create_group_with_inbox_ids(vec![bob.inbox_id()], FfiCreateGroupOptions::default()) + .await + .unwrap(); + + let result = group + .add_members_by_inbox_id(vec![fernando.inbox_id()]) + .await + .unwrap(); } #[tokio::test(flavor = "multi_thread", worker_threads = 1)] diff --git a/xmtp_id/src/associations/state.rs b/xmtp_id/src/associations/state.rs index f80eef389..0a5ac408c 100644 --- a/xmtp_id/src/associations/state.rs +++ b/xmtp_id/src/associations/state.rs @@ -139,7 +139,9 @@ impl AssociationState { } pub fn identifiers(&self) -> Vec { - self.members_by_kind(MemberKind::Ethereum) + self.members + .values() + .cloned() .into_iter() .filter_map(|member| match member.identifier { MemberIdentifier::Ethereum(eth) => Some(Identifier::Ethereum(eth)), From efa4f4f91d77f68d0dbd951bdcea27843ae75eb5 Mon Sep 17 00:00:00 2001 From: Dakota Brink Date: Wed, 12 Mar 2025 14:31:40 -0400 Subject: [PATCH 2/6] wip --- bindings_ffi/src/identity.rs | 4 ++-- bindings_ffi/src/mls.rs | 15 +++++++++------ dev/docker/docker-compose.yml | 10 +++++----- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/bindings_ffi/src/identity.rs b/bindings_ffi/src/identity.rs index 4bd075cd1..c03a4f26c 100644 --- a/bindings_ffi/src/identity.rs +++ b/bindings_ffi/src/identity.rs @@ -4,13 +4,13 @@ use xmtp_id::associations::{ident, Identifier}; use crate::GenericError; -#[derive(uniffi::Record, Hash, PartialEq, Eq, Clone)] +#[derive(uniffi::Record, Hash, PartialEq, Eq, Clone, Debug)] pub struct FfiIdentifier { pub identifier: String, pub identifier_kind: FfiIdentifierKind, } -#[derive(uniffi::Enum, Hash, PartialEq, Eq, Clone)] +#[derive(uniffi::Enum, Hash, PartialEq, Eq, Clone, Debug)] pub enum FfiIdentifierKind { Ethereum, Passkey, diff --git a/bindings_ffi/src/mls.rs b/bindings_ffi/src/mls.rs index 30bf1d561..c7d8e5d38 100644 --- a/bindings_ffi/src/mls.rs +++ b/bindings_ffi/src/mls.rs @@ -1491,7 +1491,7 @@ impl FfiConversationListItem { } } -#[derive(uniffi::Record)] +#[derive(uniffi::Record, Debug)] pub struct FfiUpdateGroupMembershipResult { added_members: HashMap, removed_members: Vec, @@ -3336,7 +3336,7 @@ mod tests { identifier_kind: FfiIdentifierKind::Passkey, }; let inbox_id = ident.inbox_id(nonce).unwrap(); - let client = create_client( + let client2 = create_client( connect_to_backend(xmtp_api_grpc::LOCALHOST_ADDRESS.to_string(), false) .await .unwrap(), @@ -3351,7 +3351,7 @@ mod tests { .await .unwrap(); - let sig_request = client.signature_request().unwrap().clone(); + let sig_request = client2.signature_request().unwrap().clone(); let challenge = sig_request.signature_text().await.unwrap(); let challenge_bytes = challenge.as_bytes().to_vec(); @@ -3387,20 +3387,23 @@ mod tests { // should be good .unwrap(); - client.register_identity(sig_request).await.unwrap(); + client2.register_identity(sig_request).await.unwrap(); + tracing::error!("AAAAAA {:?}", client2.account_identifier.identifier_kind); let bob = new_test_client().await; let fernando = new_test_client().await; - let group = client + let group = client2 .conversations() .create_group_with_inbox_ids(vec![bob.inbox_id()], FfiCreateGroupOptions::default()) .await .unwrap(); let result = group - .add_members_by_inbox_id(vec![fernando.inbox_id()]) + .add_members_by_inbox_id(vec![fernando.inbox_id(), alex.inbox_id()]) .await .unwrap(); + + assert_eq!(result.added_members.len(), 2); } #[tokio::test(flavor = "multi_thread", worker_threads = 1)] diff --git a/dev/docker/docker-compose.yml b/dev/docker/docker-compose.yml index f8673772b..2a2827ff0 100644 --- a/dev/docker/docker-compose.yml +++ b/dev/docker/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3.8' +version: "3.8" services: node: @@ -27,7 +27,7 @@ services: platform: linux/amd64 build: context: ../.. - dockerfile: ./dev/validation_service/local.Dockerfile + dockerfile: ./dev/validation_service/Dockerfile environment: ANVIL_URL: "http://anvil:8545" @@ -59,7 +59,7 @@ services: environment: POSTGRES_PASSWORD: xmtp healthcheck: - test: [ "CMD-SHELL", "pg_isready -U postgres" ] + test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 5s timeout: 5s retries: 5 @@ -93,6 +93,6 @@ services: chain: condition: service_started replicationdb: - condition: service_healthy + condition: service_healthy ports: - - 5050:5050 \ No newline at end of file + - 5050:5050 From e96f066d44236276cd6e18b0ff5ffd98dc688098 Mon Sep 17 00:00:00 2001 From: Dakota Brink Date: Wed, 12 Mar 2025 14:42:45 -0400 Subject: [PATCH 3/6] report members --- bindings_ffi/src/mls.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/bindings_ffi/src/mls.rs b/bindings_ffi/src/mls.rs index c7d8e5d38..d0b53b2ce 100644 --- a/bindings_ffi/src/mls.rs +++ b/bindings_ffi/src/mls.rs @@ -3404,6 +3404,13 @@ mod tests { .unwrap(); assert_eq!(result.added_members.len(), 2); + + let members = group.list_members().await.unwrap(); + let passkey_ident = client2.account_identifier.identifier.clone(); + assert!(members.into_iter().any(|m| m + .account_identifiers + .into_iter() + .any(|i| i.identifier == passkey_ident))); } #[tokio::test(flavor = "multi_thread", worker_threads = 1)] From 952d3448f177b29935478cb48d05899a676070ef Mon Sep 17 00:00:00 2001 From: Dakota Brink Date: Wed, 12 Mar 2025 14:43:22 -0400 Subject: [PATCH 4/6] revert compose file --- dev/docker/docker-compose.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dev/docker/docker-compose.yml b/dev/docker/docker-compose.yml index 2a2827ff0..f8673772b 100644 --- a/dev/docker/docker-compose.yml +++ b/dev/docker/docker-compose.yml @@ -1,4 +1,4 @@ -version: "3.8" +version: '3.8' services: node: @@ -27,7 +27,7 @@ services: platform: linux/amd64 build: context: ../.. - dockerfile: ./dev/validation_service/Dockerfile + dockerfile: ./dev/validation_service/local.Dockerfile environment: ANVIL_URL: "http://anvil:8545" @@ -59,7 +59,7 @@ services: environment: POSTGRES_PASSWORD: xmtp healthcheck: - test: ["CMD-SHELL", "pg_isready -U postgres"] + test: [ "CMD-SHELL", "pg_isready -U postgres" ] interval: 5s timeout: 5s retries: 5 @@ -93,6 +93,6 @@ services: chain: condition: service_started replicationdb: - condition: service_healthy + condition: service_healthy ports: - - 5050:5050 + - 5050:5050 \ No newline at end of file From d27b0e10b81ebf700c0ec647a61b845bc1f3c34d Mon Sep 17 00:00:00 2001 From: Dakota Brink Date: Wed, 12 Mar 2025 14:43:47 -0400 Subject: [PATCH 5/6] cleanup --- bindings_ffi/src/mls.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/bindings_ffi/src/mls.rs b/bindings_ffi/src/mls.rs index d0b53b2ce..6b125525e 100644 --- a/bindings_ffi/src/mls.rs +++ b/bindings_ffi/src/mls.rs @@ -3388,7 +3388,6 @@ mod tests { .unwrap(); client2.register_identity(sig_request).await.unwrap(); - tracing::error!("AAAAAA {:?}", client2.account_identifier.identifier_kind); let bob = new_test_client().await; let fernando = new_test_client().await; From bdd932bbc6990b12e348a177c15e4d3f4c1d3737 Mon Sep 17 00:00:00 2001 From: Dakota Brink Date: Wed, 12 Mar 2025 14:47:43 -0400 Subject: [PATCH 6/6] lint --- xmtp_id/src/associations/state.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/xmtp_id/src/associations/state.rs b/xmtp_id/src/associations/state.rs index 0a5ac408c..09e12369c 100644 --- a/xmtp_id/src/associations/state.rs +++ b/xmtp_id/src/associations/state.rs @@ -142,7 +142,6 @@ impl AssociationState { self.members .values() .cloned() - .into_iter() .filter_map(|member| match member.identifier { MemberIdentifier::Ethereum(eth) => Some(Identifier::Ethereum(eth)), MemberIdentifier::Passkey(pk) => Some(Identifier::Passkey(pk)),