fedimint_wasm_tests/
lib.rs1#![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;