Skip to main content

fedimint_wasm_tests/
lib.rs

1#![deny(clippy::pedantic)]
2#![allow(clippy::large_futures)]
3#![allow(dead_code)]
4#![allow(clippy::literal_string_with_formatting_args)]
5
6use std::sync::Arc;
7
8use anyhow::Result;
9use fedimint_client::secret::{PlainRootSecretStrategy, RootSecretStrategy};
10use fedimint_client::{Client, RootSecret};
11use fedimint_connectors::ConnectorRegistry;
12use fedimint_core::db::Database;
13use fedimint_core::db::mem_impl::MemDatabase;
14use fedimint_core::invite_code::InviteCode;
15use fedimint_ln_client::{LightningClientInit, LightningClientModule};
16use fedimint_mint_client::MintClientInit;
17use fedimint_wallet_client::WalletClientInit;
18use rand::thread_rng;
19
20async fn load_or_generate_mnemonic(db: &Database) -> anyhow::Result<[u8; 64]> {
21    Ok(
22        if let Ok(s) = Client::load_decodable_client_secret(db).await {
23            s
24        } else {
25            let secret = PlainRootSecretStrategy::random(&mut thread_rng());
26            Client::store_encodable_client_secret(db, secret).await?;
27            secret
28        },
29    )
30}
31
32async fn make_client_builder() -> Result<(fedimint_client::ClientBuilder, Database)> {
33    let mem_database = MemDatabase::default();
34    let mut builder = fedimint_client::Client::builder().await;
35    builder.with_module(LightningClientInit::default());
36    builder.with_module(MintClientInit);
37    builder.with_module(WalletClientInit::default());
38
39    Ok((builder, mem_database.into()))
40}
41
42async fn client(invite_code: &InviteCode) -> Result<fedimint_client::ClientHandleArc> {
43    let (mut builder, db) = make_client_builder().await?;
44    let client_secret = load_or_generate_mnemonic(&db).await?;
45    let connectors = ConnectorRegistry::build_from_testing_defaults()
46        .bind()
47        .await;
48    builder.stopped();
49    let client = builder
50        .preview(connectors, invite_code)
51        .await?
52        .join(
53            db,
54            RootSecret::StandardDoubleDerive(PlainRootSecretStrategy::to_root_secret(
55                &client_secret,
56            )),
57        )
58        .await
59        .map(Arc::new)?;
60    if let Ok(ln_client) = client.get_first_module::<LightningClientModule>() {
61        let _ = ln_client.update_gateway_cache().await;
62    }
63    Ok(client)
64}
65
66mod faucet;
67
68wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser);
69mod tests;