diff --git a/crates/matrix-sdk-crypto-js/src/machine.rs b/crates/matrix-sdk-crypto-js/src/machine.rs index ba1e59cf7..e1a4eaa36 100644 --- a/crates/matrix-sdk-crypto-js/src/machine.rs +++ b/crates/matrix-sdk-crypto-js/src/machine.rs @@ -83,6 +83,31 @@ impl OlmMachine { set } + /// Update the tracked users. + /// + /// `users` is an iterator over user IDs that should be marked for + /// tracking. + /// + /// This will mark users that weren't seen before for a key query + /// and tracking. + /// + /// If the user is already known to the Olm machine, it will not + /// be considered for a key query. + #[wasm_bindgen(js_name = "updateTrackedUsers")] + pub fn update_tracked_users(&self, users: &Array) -> Result { + let users = users + .iter() + .map(|user| Ok(downcast::(&user, "UserId")?.inner.clone())) + .collect::, JsError>>()?; + + let me = self.inner.clone(); + + Ok(future_to_promise(async move { + me.update_tracked_users(users.iter().map(AsRef::as_ref)).await; + Ok(JsValue::UNDEFINED) + })) + } + #[wasm_bindgen(js_name = "receiveSyncChanges")] pub fn receive_sync_changes( &self, diff --git a/crates/matrix-sdk-crypto-js/tests/js/machine.js b/crates/matrix-sdk-crypto-js/tests/js/machine.js index 4c9c7b6a2..d887a3ba4 100644 --- a/crates/matrix-sdk-crypto-js/tests/js/machine.js +++ b/crates/matrix-sdk-crypto-js/tests/js/machine.js @@ -65,6 +65,13 @@ test('OlmMachine', async (t) => { assert.equal(tracked_users.size, 0, 'No tracked users by default'); }); + await t.test('Update tracked users', async (t) => { + const machine = await new OlmMachine(user_id, device_id); + const update_tracked_users = await machine.updateTrackedUsers([new UserId('@foo:matrix.org'), new UserId('@bar:matrix.org')]); + + assert.equal(update_tracked_users, undefined, 'Updating tracked users returns nothing'); + }); + await t.test('Receive sync changes', async (t) => { const machine = await new OlmMachine(user_id, device_id); const to_device_events = JSON.stringify({});