|
@@ -18,6 +18,7 @@ use cashu::{Amount, Bolt11Invoice};
|
|
use serde_json::Value;
|
|
use serde_json::Value;
|
|
use url::Url;
|
|
use url::Url;
|
|
|
|
|
|
|
|
+use super::join_url;
|
|
use crate::client::{Client, Error};
|
|
use crate::client::{Client, Error};
|
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
#[derive(Debug, Clone)]
|
|
@@ -26,8 +27,8 @@ pub struct HttpClient {}
|
|
#[async_trait(?Send)]
|
|
#[async_trait(?Send)]
|
|
impl Client for HttpClient {
|
|
impl Client for HttpClient {
|
|
/// Get Mint Keys [NUT-01]
|
|
/// Get Mint Keys [NUT-01]
|
|
- async fn get_mint_keys(&self, mint_url: &Url) -> Result<Keys, Error> {
|
|
|
|
- let url = mint_url.join("keys")?;
|
|
|
|
|
|
+ async fn get_mint_keys(&self, mint_url: Url) -> Result<Keys, Error> {
|
|
|
|
+ let url = join_url(mint_url, "keys")?;
|
|
let keys = minreq::get(url).send()?.json::<Value>()?;
|
|
let keys = minreq::get(url).send()?.json::<Value>()?;
|
|
|
|
|
|
let keys: Keys = serde_json::from_str(&keys.to_string())?;
|
|
let keys: Keys = serde_json::from_str(&keys.to_string())?;
|
|
@@ -35,8 +36,8 @@ impl Client for HttpClient {
|
|
}
|
|
}
|
|
|
|
|
|
/// Get Keysets [NUT-02]
|
|
/// Get Keysets [NUT-02]
|
|
- async fn get_mint_keysets(&self, mint_url: &Url) -> Result<nut02::Response, Error> {
|
|
|
|
- let url = mint_url.join("keysets")?;
|
|
|
|
|
|
+ async fn get_mint_keysets(&self, mint_url: Url) -> Result<nut02::Response, Error> {
|
|
|
|
+ let url = join_url(mint_url, "keysets")?;
|
|
let res = minreq::get(url).send()?.json::<Value>()?;
|
|
let res = minreq::get(url).send()?.json::<Value>()?;
|
|
|
|
|
|
let response: Result<nut02::Response, serde_json::Error> =
|
|
let response: Result<nut02::Response, serde_json::Error> =
|
|
@@ -51,10 +52,10 @@ impl Client for HttpClient {
|
|
/// Request Mint [NUT-03]
|
|
/// Request Mint [NUT-03]
|
|
async fn get_request_mint(
|
|
async fn get_request_mint(
|
|
&self,
|
|
&self,
|
|
- mint_url: &Url,
|
|
|
|
|
|
+ mint_url: Url,
|
|
amount: Amount,
|
|
amount: Amount,
|
|
) -> Result<RequestMintResponse, Error> {
|
|
) -> Result<RequestMintResponse, Error> {
|
|
- let mut url = mint_url.join("mint")?;
|
|
|
|
|
|
+ let mut url = join_url(mint_url, "mint")?;
|
|
url.query_pairs_mut()
|
|
url.query_pairs_mut()
|
|
.append_pair("amount", &amount.to_sat().to_string());
|
|
.append_pair("amount", &amount.to_sat().to_string());
|
|
|
|
|
|
@@ -72,11 +73,11 @@ impl Client for HttpClient {
|
|
/// Mint Tokens [NUT-04]
|
|
/// Mint Tokens [NUT-04]
|
|
async fn post_mint(
|
|
async fn post_mint(
|
|
&self,
|
|
&self,
|
|
- mint_url: &Url,
|
|
|
|
|
|
+ mint_url: Url,
|
|
blinded_messages: BlindedMessages,
|
|
blinded_messages: BlindedMessages,
|
|
hash: &str,
|
|
hash: &str,
|
|
) -> Result<PostMintResponse, Error> {
|
|
) -> Result<PostMintResponse, Error> {
|
|
- let mut url = mint_url.join("mint")?;
|
|
|
|
|
|
+ let mut url = join_url(mint_url, "mint")?;
|
|
url.query_pairs_mut().append_pair("hash", hash);
|
|
url.query_pairs_mut().append_pair("hash", hash);
|
|
|
|
|
|
let request = MintRequest {
|
|
let request = MintRequest {
|
|
@@ -100,10 +101,10 @@ impl Client for HttpClient {
|
|
/// Check Max expected fee [NUT-05]
|
|
/// Check Max expected fee [NUT-05]
|
|
async fn post_check_fees(
|
|
async fn post_check_fees(
|
|
&self,
|
|
&self,
|
|
- mint_url: &Url,
|
|
|
|
|
|
+ mint_url: Url,
|
|
invoice: Bolt11Invoice,
|
|
invoice: Bolt11Invoice,
|
|
) -> Result<CheckFeesResponse, Error> {
|
|
) -> Result<CheckFeesResponse, Error> {
|
|
- let url = mint_url.join("checkfees")?;
|
|
|
|
|
|
+ let url = join_url(mint_url, "checkfees")?;
|
|
|
|
|
|
let request = CheckFeesRequest { pr: invoice };
|
|
let request = CheckFeesRequest { pr: invoice };
|
|
|
|
|
|
@@ -125,12 +126,12 @@ impl Client for HttpClient {
|
|
/// [Nut-08] Lightning fee return if outputs defined
|
|
/// [Nut-08] Lightning fee return if outputs defined
|
|
async fn post_melt(
|
|
async fn post_melt(
|
|
&self,
|
|
&self,
|
|
- mint_url: &Url,
|
|
|
|
|
|
+ mint_url: Url,
|
|
proofs: Vec<Proof>,
|
|
proofs: Vec<Proof>,
|
|
invoice: Bolt11Invoice,
|
|
invoice: Bolt11Invoice,
|
|
outputs: Option<Vec<BlindedMessage>>,
|
|
outputs: Option<Vec<BlindedMessage>>,
|
|
) -> Result<MeltResponse, Error> {
|
|
) -> Result<MeltResponse, Error> {
|
|
- let url = mint_url.join("melt")?;
|
|
|
|
|
|
+ let url = join_url(mint_url, "melt")?;
|
|
|
|
|
|
let request = MeltRequest {
|
|
let request = MeltRequest {
|
|
proofs,
|
|
proofs,
|
|
@@ -155,10 +156,10 @@ impl Client for HttpClient {
|
|
/// Split Token [NUT-06]
|
|
/// Split Token [NUT-06]
|
|
async fn post_split(
|
|
async fn post_split(
|
|
&self,
|
|
&self,
|
|
- mint_url: &Url,
|
|
|
|
|
|
+ mint_url: Url,
|
|
split_request: SplitRequest,
|
|
split_request: SplitRequest,
|
|
) -> Result<SplitResponse, Error> {
|
|
) -> Result<SplitResponse, Error> {
|
|
- let url = mint_url.join("split")?;
|
|
|
|
|
|
+ let url = join_url(mint_url, "split")?;
|
|
|
|
|
|
let res = minreq::post(url)
|
|
let res = minreq::post(url)
|
|
.with_json(&split_request)?
|
|
.with_json(&split_request)?
|
|
@@ -178,10 +179,10 @@ impl Client for HttpClient {
|
|
#[cfg(feature = "nut07")]
|
|
#[cfg(feature = "nut07")]
|
|
async fn post_check_spendable(
|
|
async fn post_check_spendable(
|
|
&self,
|
|
&self,
|
|
- mint_url: &Url,
|
|
|
|
|
|
+ mint_url: Url,
|
|
proofs: Vec<nut00::mint::Proof>,
|
|
proofs: Vec<nut00::mint::Proof>,
|
|
) -> Result<CheckSpendableResponse, Error> {
|
|
) -> Result<CheckSpendableResponse, Error> {
|
|
- let url = mint_url.join("check")?;
|
|
|
|
|
|
+ let url = join_url(mint_url, "check")?;
|
|
let request = CheckSpendableRequest { proofs };
|
|
let request = CheckSpendableRequest { proofs };
|
|
|
|
|
|
let res = minreq::post(url)
|
|
let res = minreq::post(url)
|
|
@@ -200,8 +201,9 @@ impl Client for HttpClient {
|
|
|
|
|
|
/// Get Mint Info [NUT-09]
|
|
/// Get Mint Info [NUT-09]
|
|
#[cfg(feature = "nut09")]
|
|
#[cfg(feature = "nut09")]
|
|
- async fn get_mint_info(&self, mint_url: &Url) -> Result<MintInfo, Error> {
|
|
|
|
- let url = mint_url.join("info")?;
|
|
|
|
|
|
+ async fn get_mint_info(&self, mint_url: Url) -> Result<MintInfo, Error> {
|
|
|
|
+ let url = join_url(mint_url, "info")?;
|
|
|
|
+
|
|
let res = minreq::get(url).send()?.json::<Value>()?;
|
|
let res = minreq::get(url).send()?.json::<Value>()?;
|
|
|
|
|
|
let response: Result<MintInfo, serde_json::Error> = serde_json::from_value(res.clone());
|
|
let response: Result<MintInfo, serde_json::Error> = serde_json::from_value(res.clone());
|