diff --git a/src/api.rs b/src/api.rs index b9aa2d3..20fb8c8 100644 --- a/src/api.rs +++ b/src/api.rs @@ -442,6 +442,28 @@ pub fn dump_device() -> ApiResult { Ok(serde_json::to_string(&local_device.clone())?) } +#[wasm_bindgen] +pub fn dump_neutered_device() -> ApiResult { + let local_device = lock_local_device()?; + + if local_device.get_pairing_commitment().is_none() { + return Err(ApiError::new("Device must be paired".to_owned())); + } + + let client = local_device.get_wallet().get_client(); + let scan_key = client.get_scan_key(); + let spend_pubkey: PublicKey = client.get_spend_key().into(); + + let neutered_client = SpClient::new("default".to_owned(), scan_key, SpendKey::Public(spend_pubkey), None, Network::Signet)?; + + let new_wallet = SpWallet::new(neutered_client, None, vec![])?; + let mut neutered_device = Device::new(new_wallet); + + neutered_device.pair(local_device.get_pairing_commitment().unwrap(), local_device.to_member()); + + Ok(neutered_device) +} + #[wasm_bindgen] pub fn reset_device() -> ApiResult<()> { let mut device = lock_local_device()?;