bitwarden_shared_unlock/wasm/
leader.rs1use bitwarden_threading::cancellation_token::wasm::{AbortController, AbortControllerExt};
2use wasm_bindgen::prelude::wasm_bindgen;
3
4use super::drivers::{JsSharedUnlockDriver, RawJsSharedUnlockDriver};
5use crate::{DeviceEvent, Leader, LeaderStartError};
6
7#[wasm_bindgen]
9pub struct SharedUnlockLeader {
10 leader: Leader<JsSharedUnlockDriver>,
11}
12
13#[wasm_bindgen]
14impl SharedUnlockLeader {
15 #[wasm_bindgen]
17 pub fn try_new(
18 ipc_client: &bitwarden_ipc::wasm::JsIpcClient,
19 driver: RawJsSharedUnlockDriver,
20 ) -> Result<Self, bitwarden_ipc::SubscribeError> {
21 let driver = JsSharedUnlockDriver::new(driver);
22 let leader = Leader::create(driver, ipc_client.client.clone());
23
24 Ok(Self { leader })
25 }
26
27 #[wasm_bindgen]
29 pub async fn start(
30 &self,
31 abort_controller: Option<AbortController>,
32 ) -> Result<(), LeaderStartError> {
33 self.leader
34 .start(abort_controller.map(|abort| abort.to_cancellation_token()))
35 .await
36 }
37
38 #[wasm_bindgen]
40 pub async fn handle_device_event(&self, event: DeviceEvent) {
41 if let Err(error) = self.leader.handle_device_event(event).await {
42 tracing::error!(?error, "Failed to handle shared unlock leader device event");
43 }
44 }
45}