mint.rs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. use std::ops::Deref;
  2. use cashu_js::{
  3. nuts::{
  4. nut02::{JsId, JsKeySet, JsKeySetsResponse, JsKeysResponse, JsMintKeySet},
  5. nut04::{JsMintRequest, JsPostMintResponse},
  6. },
  7. types::JsAmount,
  8. };
  9. use cashu_sdk::{mint::Mint, nuts::nut01, nuts::nut02::KeySet};
  10. use wasm_bindgen::prelude::*;
  11. use crate::error::{into_err, Result};
  12. #[wasm_bindgen(js_name = Mint)]
  13. pub struct JsMint {
  14. inner: Mint,
  15. }
  16. impl Deref for JsMint {
  17. type Target = Mint;
  18. fn deref(&self) -> &Self::Target {
  19. &self.inner
  20. }
  21. }
  22. impl From<Mint> for JsMint {
  23. fn from(inner: Mint) -> JsMint {
  24. JsMint { inner }
  25. }
  26. }
  27. #[wasm_bindgen(js_class = Mint)]
  28. impl JsMint {
  29. #[wasm_bindgen(constructor)]
  30. pub fn new(
  31. secret: String,
  32. derivation_path: String,
  33. inactive_keyset: JsValue,
  34. spent_secrets: JsValue,
  35. max_order: u8,
  36. min_fee_reserve: JsAmount,
  37. percent_fee_reserve: f32,
  38. ) -> Result<JsMint> {
  39. let inactive_keyset = serde_wasm_bindgen::from_value(inactive_keyset).map_err(into_err)?;
  40. let spent_secrets = serde_wasm_bindgen::from_value(spent_secrets).map_err(into_err)?;
  41. Ok(JsMint {
  42. inner: Mint::new(
  43. &secret,
  44. &derivation_path,
  45. inactive_keyset,
  46. spent_secrets,
  47. max_order,
  48. *min_fee_reserve.deref(),
  49. percent_fee_reserve,
  50. ),
  51. })
  52. }
  53. /// Get Active Keyset Pubkeys
  54. #[wasm_bindgen(getter)]
  55. pub fn active_keyset_pubkeys(&self) -> Result<JsKeysResponse> {
  56. let keyset: KeySet = self.inner.active_keyset.clone().into();
  57. Ok(nut01::Response { keys: keyset.keys }.into())
  58. }
  59. /// Get Keysets
  60. #[wasm_bindgen(js_name = KeySets)]
  61. pub fn keysets(&self) -> JsKeySetsResponse {
  62. self.inner.keysets().into()
  63. }
  64. /// Get Active Keyset
  65. #[wasm_bindgen(getter)]
  66. pub fn active_keyset(&self) -> JsMintKeySet {
  67. self.inner.active_keyset.clone().into()
  68. }
  69. /// Keyset
  70. #[wasm_bindgen(js_name = KeySet)]
  71. pub fn keyset(&self, id: JsId) -> Option<JsKeySet> {
  72. self.inner.keyset(id.deref()).map(|ks| ks.into())
  73. }
  74. /// Process Mint Request
  75. #[wasm_bindgen(js_name = ProcessMintRequest)]
  76. pub fn process_mint_request(
  77. &mut self,
  78. mint_request: JsMintRequest,
  79. ) -> Result<JsPostMintResponse> {
  80. Ok(self
  81. .inner
  82. .process_mint_request(mint_request.deref().clone())
  83. .map_err(into_err)?
  84. .into())
  85. }
  86. }