mirror of
https://github.com/aljazceru/cdk.git
synced 2026-02-04 04:36:21 +01:00
refactor: check mint request (#1079)
This commit is contained in:
@@ -44,6 +44,46 @@ impl From<MintQuoteBolt12Request> for MintQuoteRequest {
|
||||
}
|
||||
}
|
||||
|
||||
impl MintQuoteRequest {
|
||||
/// Get the amount from the mint quote request
|
||||
///
|
||||
/// For Bolt11 requests, this returns `Some(amount)` as the amount is required.
|
||||
/// For Bolt12 requests, this returns the optional amount.
|
||||
pub fn amount(&self) -> Option<Amount> {
|
||||
match self {
|
||||
MintQuoteRequest::Bolt11(request) => Some(request.amount),
|
||||
MintQuoteRequest::Bolt12(request) => request.amount,
|
||||
}
|
||||
}
|
||||
|
||||
/// Get the currency unit from the mint quote request
|
||||
pub fn unit(&self) -> CurrencyUnit {
|
||||
match self {
|
||||
MintQuoteRequest::Bolt11(request) => request.unit.clone(),
|
||||
MintQuoteRequest::Bolt12(request) => request.unit.clone(),
|
||||
}
|
||||
}
|
||||
|
||||
/// Get the payment method for the mint quote request
|
||||
pub fn payment_method(&self) -> PaymentMethod {
|
||||
match self {
|
||||
MintQuoteRequest::Bolt11(_) => PaymentMethod::Bolt11,
|
||||
MintQuoteRequest::Bolt12(_) => PaymentMethod::Bolt12,
|
||||
}
|
||||
}
|
||||
|
||||
/// Get the pubkey from the mint quote request
|
||||
///
|
||||
/// For Bolt11 requests, this returns the optional pubkey.
|
||||
/// For Bolt12 requests, this returns `Some(pubkey)` as the pubkey is required.
|
||||
pub fn pubkey(&self) -> Option<PublicKey> {
|
||||
match self {
|
||||
MintQuoteRequest::Bolt11(request) => request.pubkey,
|
||||
MintQuoteRequest::Bolt12(request) => Some(request.pubkey),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Response for a mint quote request
|
||||
///
|
||||
/// This enum represents the different types of payment responses that can be returned
|
||||
@@ -121,22 +161,19 @@ impl Mint {
|
||||
/// - The currency unit is supported
|
||||
/// - The amount (if provided) is within the allowed range for the payment method
|
||||
///
|
||||
/// # Arguments
|
||||
/// * `amount` - Optional amount to validate
|
||||
/// * `unit` - Currency unit for the request
|
||||
/// * `payment_method` - Payment method (Bolt11, Bolt12, etc.)
|
||||
///
|
||||
/// # Returns
|
||||
/// * `Ok(())` if the request is acceptable
|
||||
/// * `Error` if any validation fails
|
||||
pub async fn check_mint_request_acceptable(
|
||||
&self,
|
||||
amount: Option<Amount>,
|
||||
unit: &CurrencyUnit,
|
||||
payment_method: &PaymentMethod,
|
||||
mint_quote_request: &MintQuoteRequest,
|
||||
) -> Result<(), Error> {
|
||||
let mint_info = self.localstore.get_mint_info().await?;
|
||||
|
||||
let unit = mint_quote_request.unit();
|
||||
let amount = mint_quote_request.amount();
|
||||
let payment_method = mint_quote_request.payment_method();
|
||||
|
||||
let nut04 = &mint_info.nuts.nut04;
|
||||
ensure_cdk!(!nut04.disabled, Error::MintingDisabled);
|
||||
|
||||
@@ -145,7 +182,7 @@ impl Mint {
|
||||
ensure_cdk!(!disabled, Error::MintingDisabled);
|
||||
|
||||
let settings = nut04
|
||||
.get_settings(unit, payment_method)
|
||||
.get_settings(&unit, &payment_method)
|
||||
.ok_or(Error::UnsupportedUnit)?;
|
||||
|
||||
let min_amount = settings.min_amount;
|
||||
@@ -193,27 +230,22 @@ impl Mint {
|
||||
METRICS.inc_in_flight_requests("get_mint_quote");
|
||||
|
||||
let result = async {
|
||||
let unit: CurrencyUnit;
|
||||
let amount;
|
||||
let pubkey;
|
||||
let payment_method;
|
||||
// Use the new getters for cleaner code
|
||||
let unit = mint_quote_request.unit();
|
||||
let amount = mint_quote_request.amount();
|
||||
let payment_method = mint_quote_request.payment_method();
|
||||
|
||||
let create_invoice_response = match mint_quote_request {
|
||||
// Validate the request before processing
|
||||
self.check_mint_request_acceptable(&mint_quote_request)
|
||||
.await?;
|
||||
|
||||
// Extract pubkey using the getter
|
||||
let pubkey = mint_quote_request.pubkey();
|
||||
|
||||
let ln = self.get_payment_processor(unit.clone(), payment_method.clone())?;
|
||||
|
||||
let payment_options = match mint_quote_request {
|
||||
MintQuoteRequest::Bolt11(bolt11_request) => {
|
||||
unit = bolt11_request.unit;
|
||||
amount = Some(bolt11_request.amount);
|
||||
pubkey = bolt11_request.pubkey;
|
||||
payment_method = PaymentMethod::Bolt11;
|
||||
|
||||
self.check_mint_request_acceptable(
|
||||
Some(bolt11_request.amount),
|
||||
&unit,
|
||||
&payment_method,
|
||||
)
|
||||
.await?;
|
||||
|
||||
let ln = self.get_payment_processor(unit.clone(), PaymentMethod::Bolt11)?;
|
||||
|
||||
let mint_ttl = self.localstore.get_quote_ttl().await?.mint_ttl;
|
||||
|
||||
let quote_expiry = unix_time() + mint_ttl;
|
||||
@@ -234,26 +266,9 @@ impl Mint {
|
||||
unix_expiry: Some(quote_expiry),
|
||||
};
|
||||
|
||||
let incoming_options = IncomingPaymentOptions::Bolt11(bolt11_options);
|
||||
|
||||
ln.create_incoming_payment_request(&unit, incoming_options)
|
||||
.await
|
||||
.map_err(|err| {
|
||||
tracing::error!("Could not create invoice: {}", err);
|
||||
Error::InvalidPaymentRequest
|
||||
})?
|
||||
IncomingPaymentOptions::Bolt11(bolt11_options)
|
||||
}
|
||||
MintQuoteRequest::Bolt12(bolt12_request) => {
|
||||
unit = bolt12_request.unit;
|
||||
amount = bolt12_request.amount;
|
||||
pubkey = Some(bolt12_request.pubkey);
|
||||
payment_method = PaymentMethod::Bolt12;
|
||||
|
||||
self.check_mint_request_acceptable(amount, &unit, &payment_method)
|
||||
.await?;
|
||||
|
||||
let ln = self.get_payment_processor(unit.clone(), payment_method.clone())?;
|
||||
|
||||
let description = bolt12_request.description;
|
||||
|
||||
let bolt12_options = Bolt12IncomingPaymentOptions {
|
||||
@@ -262,17 +277,18 @@ impl Mint {
|
||||
unix_expiry: None,
|
||||
};
|
||||
|
||||
let incoming_options = IncomingPaymentOptions::Bolt12(Box::new(bolt12_options));
|
||||
|
||||
ln.create_incoming_payment_request(&unit, incoming_options)
|
||||
.await
|
||||
.map_err(|err| {
|
||||
tracing::error!("Could not create invoice: {}", err);
|
||||
Error::InvalidPaymentRequest
|
||||
})?
|
||||
IncomingPaymentOptions::Bolt12(Box::new(bolt12_options))
|
||||
}
|
||||
};
|
||||
|
||||
let create_invoice_response = ln
|
||||
.create_incoming_payment_request(&unit, payment_options)
|
||||
.await
|
||||
.map_err(|err| {
|
||||
tracing::error!("Could not create invoice: {}", err);
|
||||
Error::InvalidPaymentRequest
|
||||
})?;
|
||||
|
||||
let quote = MintQuote::new(
|
||||
None,
|
||||
create_invoice_response.request.to_string(),
|
||||
|
||||
Reference in New Issue
Block a user