iop_sdk_wasm/hydra/
plugin.rs

1use super::*;
2
3/// Represents a Hydra account in a given vault.
4#[wasm_bindgen(js_name = HydraPlugin)]
5pub struct JsHydraPlugin {
6    inner: HydraBoundPlugin,
7}
8
9#[wasm_bindgen(js_class = HydraPlugin)]
10impl JsHydraPlugin {
11    /// Creates a new Hydra account with the given parameters in the vault. If the same account already exists, an error will be
12    /// thrown. An existing account has to be retrieved from the vault using {@link get}.
13    pub fn init(
14        vault: &mut JsVault, unlock_password: &str, parameters: &JsHydraParameters,
15    ) -> Result<(), JsValue> {
16        hd_hydra::Plugin::init(vault.inner_mut(), unlock_password, parameters.inner())
17            .map_err_to_js()?;
18        Ok(())
19    }
20
21    /// Retrieves an existing Hydra account from the vault. If the account is missing, an error will be thrown. A new account can be
22    /// created with {@link init}.
23    pub fn get(vault: &JsVault, parameters: &JsHydraParameters) -> Result<JsHydraPlugin, JsValue> {
24        let inner = hd_hydra::Plugin::get(vault.inner(), parameters.inner()).map_err_to_js()?;
25        Ok(Self { inner })
26    }
27
28    /// Accessor for the public keys in the Hydra account
29    #[wasm_bindgen(getter = pub)]
30    pub fn public(&self) -> Result<JsHydraPublic, JsValue> {
31        let inner = self.inner.public().map_err_to_js()?;
32        Ok(JsHydraPublic::from(inner))
33    }
34
35    /// Accessor for the private keys in the Hydra account. Needs the unlock password.
36    ///
37    /// @see Vault.unlock
38    #[wasm_bindgen(js_name = priv)]
39    pub fn private(&self, unlock_password: &str) -> Result<JsHydraPrivate, JsValue> {
40        let inner = self.inner.private(unlock_password).map_err_to_js()?;
41        Ok(JsHydraPrivate::from(inner))
42    }
43}
44
45impl From<HydraBoundPlugin> for JsHydraPlugin {
46    fn from(inner: HydraBoundPlugin) -> Self {
47        Self { inner }
48    }
49}
50
51impl Wraps<HydraBoundPlugin> for JsHydraPlugin {
52    fn inner(&self) -> &HydraBoundPlugin {
53        &self.inner
54    }
55}