diff --git a/bindings/cashu-sdk-ffi/src/cashu_sdk.udl b/bindings/cashu-sdk-ffi/src/cashu_sdk.udl index 4e2e8f1a..5d5e36c4 100644 --- a/bindings/cashu-sdk-ffi/src/cashu_sdk.udl +++ b/bindings/cashu-sdk-ffi/src/cashu_sdk.udl @@ -31,6 +31,11 @@ interface Secret { sequence as_bytes(); }; +interface Id { + [Throws=CashuError] + constructor(string id); +}; + interface PublicKey { [Throws=CashuError, Name=from_hex] constructor(string hex); @@ -51,26 +56,26 @@ interface BlindedMessage { }; interface Proof { - constructor(Amount amount, Secret secret, PublicKey c, string? id); + constructor(Amount amount, Secret secret, PublicKey c, Id? id); Amount amount(); Secret secret(); PublicKey c(); - string? id(); + Id? id(); }; interface BlindedSignature { - constructor(string id, Amount amount, PublicKey c); - string id(); + constructor(Id id, Amount amount, PublicKey c); + Id id(); Amount amount(); PublicKey c(); }; interface MintProof { - constructor(Amount? amount, Secret secret, PublicKey? c, string? id); + constructor(Amount? amount, Secret secret, PublicKey? c, Id? id); Amount? amount(); Secret secret(); PublicKey? c(); - string? id(); + Id? id(); }; @@ -119,8 +124,8 @@ interface Keys { }; interface KeySet { - constructor(string id, Keys keys); - string id(); + constructor(Id id, Keys keys); + Id id(); Keys keys(); }; @@ -131,8 +136,8 @@ interface MintKeySet { }; interface KeySetResponse { - constructor(sequence keyset_ids); - sequence keyset_ids(); + constructor(sequence keyset_ids); + sequence keyset_ids(); }; interface RequestMintResponse { @@ -319,11 +324,12 @@ interface Wallet { interface Mint { + [Throws=CashuSdkError] constructor(string secret, string derivation_path, record inactive_keysets, sequence spent_secrets, u8 max_order); KeySet active_keyset_pubkeys(); KeySetResponse keysets(); MintKeySet active_keyset(); - KeySet? keyset(string id); + KeySet? keyset(Id id); [Throws=CashuSdkError] PostMintResponse process_mint_request(MintRequest mint_request); [Throws=CashuSdkError] diff --git a/bindings/cashu-sdk-ffi/src/lib.rs b/bindings/cashu-sdk-ffi/src/lib.rs index 0692df2d..792cac22 100644 --- a/bindings/cashu-sdk-ffi/src/lib.rs +++ b/bindings/cashu-sdk-ffi/src/lib.rs @@ -7,7 +7,7 @@ mod wallet; mod ffi { pub use cashu_ffi::{ Amount, BlindedMessage, BlindedMessages, BlindedSignature, Bolt11Invoice, CashuError, - CheckFeesRequest, CheckFeesResponse, CheckSpendableRequest, CheckSpendableResponse, + CheckFeesRequest, CheckFeesResponse, CheckSpendableRequest, CheckSpendableResponse, Id, InvoiceStatus, KeyPair, KeySet, KeySetResponse, Keys, MeltRequest, MeltResponse, MintInfo, MintKeySet, MintProof, MintProofs, MintRequest, MintVersion, Nut05MeltRequest, Nut05MeltResponse, PostMintResponse, Proof, PublicKey, RequestMintResponse, Secret, diff --git a/bindings/cashu-sdk-ffi/src/mint.rs b/bindings/cashu-sdk-ffi/src/mint.rs index 9d73a563..81e157b1 100644 --- a/bindings/cashu-sdk-ffi/src/mint.rs +++ b/bindings/cashu-sdk-ffi/src/mint.rs @@ -6,9 +6,11 @@ use std::{ use cashu_sdk::mint::Mint as MintSdk; +use cashu_sdk::nuts::nut02::Id as IdSdk; + use crate::error::Result; use cashu_ffi::{ - Amount, CheckSpendableRequest, CheckSpendableResponse, KeySet, KeySetResponse, MeltRequest, + Amount, CheckSpendableRequest, CheckSpendableResponse, Id, KeySet, KeySetResponse, MeltRequest, MeltResponse, MintKeySet, MintRequest, PostMintResponse, Proof, Secret, SplitRequest, SplitResponse, }; @@ -24,7 +26,7 @@ impl Mint { inactive_keysets: HashMap>, spent_secrets: Vec>, max_order: u8, - ) -> Self { + ) -> Result { let spent_secrets = spent_secrets .into_iter() .map(|s| s.as_ref().deref().clone()) @@ -32,10 +34,13 @@ impl Mint { let inactive_keysets = inactive_keysets .into_iter() - .map(|(k, v)| (k, v.as_ref().deref().clone())) + .flat_map(|(k, v)| { + let id = IdSdk::try_from_base64(&k); + id.map(|id| (id, v.as_ref().deref().clone())) + }) .collect(); - Self { + Ok(Self { inner: MintSdk::new( &secret, &derivation_path, @@ -44,7 +49,7 @@ impl Mint { max_order, ) .into(), - } + }) } pub fn active_keyset_pubkeys(&self) -> Arc { @@ -59,7 +64,7 @@ impl Mint { Arc::new(self.inner.read().unwrap().active_keyset.clone().into()) } - pub fn keyset(&self, id: String) -> Option> { + pub fn keyset(&self, id: Arc) -> Option> { self.inner .read() .unwrap()