atagen

macltok

public
Star0
Watch0
7cf3485212044ecdd5da3a45cd090c6e00b92597
3
ssh://brewery@pls.lobotomise.me:33/atagen/macltok.git

Blame: harness/web/src/lib.rs

55a1b8252814atagen2026-09-26 09:08 UTC1
//! a browser-side slice of macltok, login through to a live sync, exported for
55a1b8252814atagen2026-09-26 09:08 UTC2
//! wasm-bindgen so both the worker test and the size measurement reach the same code
55a1b8252814atagen2026-09-26 09:08 UTC3
55a1b8252814atagen2026-09-26 09:08 UTC4
use futures_channel::oneshot;
55a1b8252814atagen2026-09-26 09:08 UTC5
use macltok::{
55a1b8252814atagen2026-09-26 09:08 UTC6
    ConnectionState, EncryptedSessionStore, EngineConfig, Event, PasswordLogin, Session, StoreConfig,
55a1b8252814atagen2026-09-26 09:08 UTC7
};
55a1b8252814atagen2026-09-26 09:08 UTC8
use wasm_bindgen::prelude::*;
55a1b8252814atagen2026-09-26 09:08 UTC9
55a1b8252814atagen2026-09-26 09:08 UTC10
#[wasm_bindgen]
55a1b8252814atagen2026-09-26 09:08 UTC11
pub async fn smoke(
55a1b8252814atagen2026-09-26 09:08 UTC12
    homeserver: String,
55a1b8252814atagen2026-09-26 09:08 UTC13
    username: String,
55a1b8252814atagen2026-09-26 09:08 UTC14
    password: String,
55a1b8252814atagen2026-09-26 09:08 UTC15
    store_name: String,
55a1b8252814atagen2026-09-26 09:08 UTC16
) -> Result<(), JsError> {
55a1b8252814atagen2026-09-26 09:08 UTC17
    let sessions = EncryptedSessionStore::indexeddb(
55a1b8252814atagen2026-09-26 09:08 UTC18
        StoreConfig::indexeddb(store_name, "macltok-web").with_lock_holder("macltok-web-worker"),
55a1b8252814atagen2026-09-26 09:08 UTC19
    );
55a1b8252814atagen2026-09-26 09:08 UTC20
    let login = PasswordLogin::new(homeserver, username, password);
55a1b8252814atagen2026-09-26 09:08 UTC21
    let session = Session::login_password(login, &sessions).await?;
55a1b8252814atagen2026-09-26 09:08 UTC22
    let (engine, handle, mut events) = session.build(EngineConfig::default()).await?;
55a1b8252814atagen2026-09-26 09:08 UTC23
    let (done, running) = oneshot::channel();
55a1b8252814atagen2026-09-26 09:08 UTC24
    wasm_bindgen_futures::spawn_local(async move {
55a1b8252814atagen2026-09-26 09:08 UTC25
        let _ = done.send(engine.run().await);
55a1b8252814atagen2026-09-26 09:08 UTC26
    });
55a1b8252814atagen2026-09-26 09:08 UTC27
55a1b8252814atagen2026-09-26 09:08 UTC28
    let mut online = false;
55a1b8252814atagen2026-09-26 09:08 UTC29
    let mut rooms = false;
55a1b8252814atagen2026-09-26 09:08 UTC30
    while !(online && rooms) {
55a1b8252814atagen2026-09-26 09:08 UTC31
        match events.recv().await {
55a1b8252814atagen2026-09-26 09:08 UTC32
            Some(Event::ConnectionChanged(ConnectionState::Online)) => online = true,
55a1b8252814atagen2026-09-26 09:08 UTC33
            Some(Event::RoomsChanged) => rooms = true,
55a1b8252814atagen2026-09-26 09:08 UTC34
            Some(Event::Stopped) | None => {
55a1b8252814atagen2026-09-26 09:08 UTC35
                return Err(JsError::new("engine stopped before it came online"));
55a1b8252814atagen2026-09-26 09:08 UTC36
            }
55a1b8252814atagen2026-09-26 09:08 UTC37
            Some(_) => {}
55a1b8252814atagen2026-09-26 09:08 UTC38
        }
55a1b8252814atagen2026-09-26 09:08 UTC39
    }
55a1b8252814atagen2026-09-26 09:08 UTC40
55a1b8252814atagen2026-09-26 09:08 UTC41
    handle.shutdown().await?;
55a1b8252814atagen2026-09-26 09:08 UTC42
    while events.recv().await.is_some() {}
55a1b8252814atagen2026-09-26 09:08 UTC43
    running
55a1b8252814atagen2026-09-26 09:08 UTC44
        .await
55a1b8252814atagen2026-09-26 09:08 UTC45
        .map_err(|_| JsError::new("engine task vanished"))??;
55a1b8252814atagen2026-09-26 09:08 UTC46
    Ok(())
55a1b8252814atagen2026-09-26 09:08 UTC47
}