Skip to content
This repository was archived by the owner on Feb 3, 2025. It is now read-only.

Commit c73bf69

Browse files
authored
Properly handle init errors with singleton (#805)
1 parent 46afa7e commit c73bf69

1 file changed

Lines changed: 45 additions & 1 deletion

File tree

mutiny-wasm/src/lib.rs

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,58 @@ impl MutinyWallet {
9494
skip_device_lock: Option<bool>,
9595
safe_mode: Option<bool>,
9696
) -> Result<MutinyWallet, MutinyJsError> {
97+
utils::set_panic_hook();
9798
let mut init = INITIALIZED.lock().await;
9899
if *init {
99100
return Err(MutinyJsError::AlreadyRunning);
100101
} else {
101102
*init = true;
102103
}
103104

104-
utils::set_panic_hook();
105+
match Self::new_internal(
106+
password,
107+
mnemonic_str,
108+
websocket_proxy_addr,
109+
network_str,
110+
user_esplora_url,
111+
user_rgs_url,
112+
lsp_url,
113+
auth_url,
114+
subscription_url,
115+
storage_url,
116+
scorer_url,
117+
do_not_connect_peers,
118+
skip_device_lock,
119+
safe_mode,
120+
)
121+
.await
122+
{
123+
Ok(m) => Ok(m),
124+
Err(e) => {
125+
// mark uninitialized because we failed to startup
126+
*init = false;
127+
Err(e)
128+
}
129+
}
130+
}
131+
132+
#[allow(clippy::too_many_arguments)]
133+
async fn new_internal(
134+
password: Option<String>,
135+
mnemonic_str: Option<String>,
136+
websocket_proxy_addr: Option<String>,
137+
network_str: Option<String>,
138+
user_esplora_url: Option<String>,
139+
user_rgs_url: Option<String>,
140+
lsp_url: Option<String>,
141+
auth_url: Option<String>,
142+
subscription_url: Option<String>,
143+
storage_url: Option<String>,
144+
scorer_url: Option<String>,
145+
do_not_connect_peers: Option<bool>,
146+
skip_device_lock: Option<bool>,
147+
safe_mode: Option<bool>,
148+
) -> Result<MutinyWallet, MutinyJsError> {
105149
let safe_mode = safe_mode.unwrap_or(false);
106150
let logger = Arc::new(MutinyLogger::default());
107151

0 commit comments

Comments
 (0)