Browse Source

improve: export nut structs, add nut08

thesimplekid 1 year ago
parent
commit
3f6e7bfdd5

+ 1 - 1
bindings/cashu-ffi/src/nuts/nut00/blinded_message.rs

@@ -1,7 +1,7 @@
 use std::ops::Deref;
 use std::sync::Arc;
 
-use cashu::nuts::nut00::BlindedMessage as BlindedMessageSdk;
+use cashu::nuts::BlindedMessage as BlindedMessageSdk;
 
 use crate::nuts::nut01::public_key::PublicKey;
 use crate::Amount;

+ 1 - 1
bindings/cashu-ffi/src/nuts/nut01/keys.rs

@@ -2,7 +2,7 @@ use std::collections::HashMap;
 use std::ops::Deref;
 use std::sync::Arc;
 
-use cashu::nuts::nut01::{Keys as KeysSdk, Response as KeysResponseSdk};
+use cashu::nuts::nut01::{Keys as KeysSdk, KeysResponse as KeysResponseSdk};
 use cashu::Amount as AmountSdk;
 
 use crate::{Amount, PublicKey};

+ 5 - 5
bindings/cashu-ffi/src/nuts/nut02/key_set.rs

@@ -1,7 +1,7 @@
 use std::ops::Deref;
 use std::sync::Arc;
 
-use cashu::nuts::nut02::{Id as IdSdk, KeySet as KeySetSdk, Response};
+use cashu::nuts::nut02::{Id as IdSdk, KeySet as KeySetSdk, KeysetResponse as KeysetResponseSdk};
 
 use crate::error::Result;
 use crate::nuts::nut01::keys::Keys;
@@ -73,14 +73,14 @@ impl From<cashu::nuts::nut02::KeySet> for KeySet {
 }
 
 pub struct KeySetResponse {
-    inner: Response,
+    inner: KeysetResponseSdk,
 }
 
 impl KeySetResponse {
     pub fn new(keyset_ids: Vec<Arc<Id>>) -> Self {
         let keysets = keyset_ids.into_iter().map(|id| id.inner).collect();
         Self {
-            inner: Response { keysets },
+            inner: KeysetResponseSdk { keysets },
         }
     }
 
@@ -94,8 +94,8 @@ impl KeySetResponse {
     }
 }
 
-impl From<cashu::nuts::nut02::Response> for KeySetResponse {
-    fn from(inner: Response) -> KeySetResponse {
+impl From<KeysetResponseSdk> for KeySetResponse {
+    fn from(inner: KeysetResponseSdk) -> KeySetResponse {
         KeySetResponse { inner }
     }
 }

+ 5 - 6
bindings/cashu-js/src/nuts/nut02/keyset.rs

@@ -1,7 +1,6 @@
 use std::ops::Deref;
 
-use cashu::nuts::nut01::Response as KeysResponse;
-use cashu::nuts::nut02::{Id, KeySet, Response as KeySetsResponse};
+use cashu::nuts::{Id, KeySet, KeysResponse, KeysetResponse};
 use wasm_bindgen::prelude::*;
 
 use crate::error::{into_err, Result};
@@ -86,18 +85,18 @@ impl JsKeySet {
 
 #[wasm_bindgen(js_name = KeySetsResponse)]
 pub struct JsKeySetsResponse {
-    inner: KeySetsResponse,
+    inner: KeysetResponse,
 }
 
 impl Deref for JsKeySetsResponse {
-    type Target = KeySetsResponse;
+    type Target = KeysetResponse;
     fn deref(&self) -> &Self::Target {
         &self.inner
     }
 }
 
-impl From<KeySetsResponse> for JsKeySetsResponse {
-    fn from(inner: KeySetsResponse) -> JsKeySetsResponse {
+impl From<KeysetResponse> for JsKeySetsResponse {
+    fn from(inner: KeysetResponse) -> JsKeySetsResponse {
         JsKeySetsResponse { inner }
     }
 }

+ 2 - 3
bindings/cashu-sdk-js/src/mint.rs

@@ -8,8 +8,7 @@ use cashu_js::nuts::nut07::{JsCheckSpendableRequest, JsCheckSpendableResponse};
 use cashu_js::nuts::nut08::{JsMeltRequest, JsMeltResponse};
 use cashu_js::JsAmount;
 use cashu_sdk::mint::Mint;
-use cashu_sdk::nuts::nut01;
-use cashu_sdk::nuts::nut02::KeySet;
+use cashu_sdk::nuts::{KeySet, KeysResponse};
 use wasm_bindgen::prelude::*;
 
 use crate::error::{into_err, Result};
@@ -64,7 +63,7 @@ impl JsMint {
     pub fn active_keyset_pubkeys(&self) -> Result<JsKeysResponse> {
         let keyset: KeySet = self.inner.active_keyset.clone().into();
 
-        Ok(nut01::Response { keys: keyset.keys }.into())
+        Ok(KeysResponse { keys: keyset.keys }.into())
     }
 
     /// Get Keysets

+ 5 - 5
crates/cashu-sdk/Cargo.toml

@@ -10,18 +10,18 @@ license.workspace = true
 
 
 [features]
-default = ["mint", "wallet"]
+default = ["mint", "wallet", "all-nuts"]
 mint = ["cashu/mint"]
 wallet = ["cashu/wallet", "dep:minreq", "dep:once_cell"]
 gloo = ["dep:gloo"]
-all-nuts = ["nut07", "nut09"]
+all-nuts = ["nut07", "nut08", "nut09"]
 nut07 = ["cashu/nut07"]
-# nut08 = ["cashu/nut08"]
+nut08 = ["cashu/nut08"]
 nut09 = ["cashu/nut09"]
 
 
 [dependencies]
-cashu = { path = "../cashu", features = ["nut08"] }
+cashu = { path = "../cashu" }
 serde = { workspace = true }
 serde_json = { workspace = true }
 url = { workspace = true }
@@ -30,7 +30,7 @@ futures-util = { version = "0.3", default-features = false, features = ["sink",
 once_cell = { version = "1.17", optional = true }
 thiserror = { workspace = true }
 async-trait = "0.1.74"
-gloo = { version = "0.10.0", optional = true, features = ["net"]}
+gloo = { version = "0.10.0", optional = true, features = ["net"] }
 
 [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
 tokio = { workspace = true, features = ["rt-multi-thread", "time", "macros", "sync"] }

+ 2 - 2
crates/cashu-sdk/src/client/gloo_client.rs

@@ -43,7 +43,7 @@ impl Client for HttpClient {
     }
 
     /// Get Keysets [NUT-02]
-    async fn get_mint_keysets(&self, mint_url: Url) -> Result<nut02::Response, Error> {
+    async fn get_mint_keysets(&self, mint_url: Url) -> Result<KeysetResponse, Error> {
         let url = join_url(mint_url, "keysets")?;
         let res = Request::get(url.as_str())
             .send()
@@ -53,7 +53,7 @@ impl Client for HttpClient {
             .await
             .map_err(|err| Error::Gloo(err.to_string()))?;
 
-        let response: Result<nut02::Response, serde_json::Error> =
+        let response: Result<KeysetResponse, serde_json::Error> =
             serde_json::from_value(res.clone());
 
         match response {

+ 2 - 2
crates/cashu-sdk/src/client/minreq_client.rs

@@ -36,11 +36,11 @@ impl Client for HttpClient {
     }
 
     /// Get Keysets [NUT-02]
-    async fn get_mint_keysets(&self, mint_url: Url) -> Result<nut02::Response, Error> {
+    async fn get_mint_keysets(&self, mint_url: Url) -> Result<KeysetResponse, Error> {
         let url = join_url(mint_url, "keysets")?;
         let res = minreq::get(url).send()?.json::<Value>()?;
 
-        let response: Result<nut02::Response, serde_json::Error> =
+        let response: Result<KeysetResponse, serde_json::Error> =
             serde_json::from_value(res.clone());
 
         match response {

+ 1 - 1
crates/cashu-sdk/src/client/mod.rs

@@ -86,7 +86,7 @@ pub struct MintErrorResponse {
 pub trait Client {
     async fn get_mint_keys(&self, mint_url: Url) -> Result<Keys, Error>;
 
-    async fn get_mint_keysets(&self, mint_url: Url) -> Result<nut02::Response, Error>;
+    async fn get_mint_keysets(&self, mint_url: Url) -> Result<KeysetResponse, Error>;
 
     async fn get_request_mint(
         &self,

+ 13 - 15
crates/cashu-sdk/src/mint.rs

@@ -2,14 +2,12 @@ use std::collections::{HashMap, HashSet};
 
 use cashu::dhke::{sign_message, verify_message};
 pub use cashu::error::mint::Error;
-use cashu::nuts::nut00::{BlindedMessage, BlindedSignature, Proof};
-use cashu::nuts::nut02::mint::KeySet;
-use cashu::nuts::nut02::Id;
-use cashu::nuts::nut06::{SplitRequest, SplitResponse};
+use cashu::nuts::{
+    BlindedMessage, BlindedSignature, MeltRequest, MeltResponse, Proof, SplitRequest,
+    SplitResponse, *,
+};
 #[cfg(feature = "nut07")]
-use cashu::nuts::nut07::{CheckSpendableRequest, CheckSpendableResponse};
-use cashu::nuts::nut08::{MeltRequest, MeltResponse};
-use cashu::nuts::*;
+use cashu::nuts::{CheckSpendableRequest, CheckSpendableResponse};
 use cashu::secret::Secret;
 use cashu::types::KeysetInfo;
 use cashu::Amount;
@@ -60,24 +58,24 @@ impl Mint {
 
     /// Retrieve the public keys of the active keyset for distribution to
     /// wallet clients
-    pub fn active_keyset_pubkeys(&self) -> nut01::Response {
-        nut01::Response {
-            keys: nut02::KeySet::from(self.active_keyset.clone()).keys,
+    pub fn active_keyset_pubkeys(&self) -> KeysResponse {
+        KeysResponse {
+            keys: KeySet::from(self.active_keyset.clone()).keys,
         }
     }
 
     /// Return a list of all supported keysets
-    pub fn keysets(&self) -> nut02::Response {
+    pub fn keysets(&self) -> KeysetResponse {
         let mut keysets: HashSet<_> = self.inactive_keysets.keys().cloned().collect();
         keysets.insert(self.active_keyset.id);
-        nut02::Response { keysets }
+        KeysetResponse { keysets }
     }
 
-    pub fn active_keyset(&self) -> nut02::mint::KeySet {
+    pub fn active_keyset(&self) -> MintKeySet {
         self.active_keyset.clone()
     }
 
-    pub fn keyset(&self, id: &Id) -> Option<nut02::KeySet> {
+    pub fn keyset(&self, id: &Id) -> Option<KeySet> {
         if self.active_keyset.id.eq(id) {
             return Some(self.active_keyset.clone().into());
         }
@@ -99,7 +97,7 @@ impl Mint {
         self.inactive_keysets
             .insert(self.active_keyset.id, self.active_keyset_info.clone());
 
-        self.active_keyset = KeySet::generate(secret, derivation_path, max_order);
+        self.active_keyset = MintKeySet::generate(secret, derivation_path, max_order);
     }
 
     pub fn process_mint_request(

+ 4 - 5
crates/cashu-sdk/src/wallet.rs

@@ -2,11 +2,10 @@
 use std::str::FromStr;
 
 use cashu::dhke::{construct_proofs, unblind_message};
-use cashu::nuts::nut00::wallet::{BlindedMessages, Token};
-use cashu::nuts::nut00::{BlindedSignature, Proof, Proofs};
-use cashu::nuts::nut01::Keys;
-use cashu::nuts::nut03::RequestMintResponse;
-use cashu::nuts::nut06::{SplitPayload, SplitRequest};
+use cashu::nuts::{
+    BlindedMessages, BlindedSignature, Keys, Proof, Proofs, RequestMintResponse, SplitPayload,
+    SplitRequest, Token,
+};
 #[cfg(feature = "nut07")]
 use cashu::types::ProofsStatus;
 use cashu::types::{Melted, SendProofs};

+ 1 - 1
crates/cashu/Cargo.toml

@@ -12,7 +12,7 @@ description = "Cashu rust wallet and mint library"
 
 
 [features]
-default = ["mint", "wallet"]
+default = ["mint", "wallet", "all-nuts"]
 mint = []
 wallet = []
 all-nuts = ["nut07", "nut08", "nut09"]

+ 20 - 0
crates/cashu/src/nuts/mod.rs

@@ -12,5 +12,25 @@ pub mod nut08;
 #[cfg(feature = "nut09")]
 pub mod nut09;
 
+#[cfg(feature = "wallet")]
+pub use nut00::wallet::{BlindedMessages, Token};
+#[cfg(feature = "mint")]
+pub use nut00::BlindedMessage;
+pub use nut00::{BlindedSignature, Proof, Proofs};
+pub use nut01::{Keys, KeysResponse, PublicKey, SecretKey};
+pub use nut02::mint::KeySet as MintKeySet;
+pub use nut02::{Id, KeySet, KeysetResponse};
+pub use nut03::RequestMintResponse;
+pub use nut04::{MintRequest, PostMintResponse};
+pub use nut05::{CheckFeesRequest, CheckFeesResponse};
+#[cfg(not(feature = "nut08"))]
+pub use nut05::{MeltRequest, MeltResponse};
+#[cfg(feature = "wallet")]
+pub use nut06::SplitPayload;
+pub use nut06::{SplitRequest, SplitResponse};
+#[cfg(feature = "nut07")]
+pub use nut07::{CheckSpendableRequest, CheckSpendableResponse};
+#[cfg(feature = "nut08")]
+pub use nut08::{MeltRequest, MeltResponse};
 #[cfg(feature = "nut09")]
 pub use nut09::MintInfo;

File diff suppressed because it is too large
+ 4 - 4
crates/cashu/src/nuts/nut01.rs


+ 1 - 1
crates/cashu/src/nuts/nut02.rs

@@ -139,7 +139,7 @@ impl From<&Keys> for Id {
 /// Mint Keysets [NUT-02]
 /// Ids of mints keyset ids
 #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
-pub struct Response {
+pub struct KeysetResponse {
     /// set of public key ids that the mint generates
     pub keysets: HashSet<Id>,
 }

Some files were not shown because too many files changed in this diff