@@ -57,8 +57,11 @@ use crate::ln::outbound_payment::{OutboundPayments, PaymentAttempts, PendingOutb
57
57
use crate::ln::wire::Encode;
58
58
use crate::offers::invoice::{Bolt12Invoice, DEFAULT_RELATIVE_EXPIRY, DerivedSigningPubkey, InvoiceBuilder};
59
59
use crate::offers::invoice_error::InvoiceError;
60
+ use crate::offers::invoice_request::{DerivedPayerId, InvoiceRequestBuilder};
60
61
use crate::offers::merkle::SignError;
62
+ use crate::offers::offer::{DerivedMetadata, Offer, OfferBuilder};
61
63
use crate::offers::parse::Bolt12SemanticError;
64
+ use crate::offers::refund::RefundBuilder;
62
65
use crate::onion_message::{OffersMessage, OffersMessageHandler};
63
66
use crate::sign::{EntropySource, KeysManager, NodeSigner, Recipient, SignerProvider, ChannelSigner, WriteableEcdsaChannelSigner};
64
67
use crate::util::config::{UserConfig, ChannelConfig, ChannelConfigUpdate};
@@ -6347,6 +6350,74 @@ where
6347
6350
}
6348
6351
}
6349
6352
6353
+ /// Creates an [`OfferBuilder`] such that the [`Offer`] it builds is recognized by the
6354
+ /// [`ChannelManager`] when handling [`InvoiceRequest`] messages for the offer.
6355
+ ///
6356
+ /// [`Offer`]: crate::offers::offer::Offer
6357
+ /// [`InvoiceRequest`]: crate::offers::invoice_request::InvoiceRequest
6358
+ pub fn create_offer_builder(
6359
+ &self, description: String
6360
+ ) -> OfferBuilder<DerivedMetadata, secp256k1::All> {
6361
+ let node_id = self.get_our_node_id();
6362
+ let expanded_key = &self.inbound_payment_key;
6363
+ let entropy = &*self.entropy_source;
6364
+ let secp_ctx = &self.secp_ctx;
6365
+
6366
+ // TODO: Set blinded paths
6367
+ OfferBuilder::deriving_signing_pubkey(description, node_id, expanded_key, entropy, secp_ctx)
6368
+ }
6369
+
6370
+ /// Creates a [`RefundBuilder`] such that the [`Refund`] it builds is recognized by the
6371
+ /// [`ChannelManager`] when handling [`Bolt12Invoice`] messages for the refund.
6372
+ ///
6373
+ /// The provided `payment_id` is used to ensure that only one invoice is paid for the refund.
6374
+ ///
6375
+ /// [`Refund`]: crate::offers::refund::Refund
6376
+ /// [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
6377
+ pub fn create_refund_builder(
6378
+ &self, description: String, amount_msats: u64, payment_id: PaymentId
6379
+ ) -> Result<RefundBuilder<secp256k1::All>, Bolt12SemanticError> {
6380
+ let node_id = self.get_our_node_id();
6381
+ let expanded_key = &self.inbound_payment_key;
6382
+ let entropy = &*self.entropy_source;
6383
+ let secp_ctx = &self.secp_ctx;
6384
+
6385
+ // TODO: Set blinded paths
6386
+ let builder = RefundBuilder::deriving_payer_id(
6387
+ description, node_id, expanded_key, entropy, secp_ctx, amount_msats, payment_id
6388
+ )?;
6389
+ self.pending_outbound_payments
6390
+ .add_new_awaiting_invoice(payment_id)
6391
+ .map_err(|_| Bolt12SemanticError::DuplicatePaymentId)?;
6392
+
6393
+ Ok(builder)
6394
+ }
6395
+
6396
+ /// Creates an [`InvoiceRequestBuilder`] such that the [`InvoiceRequest`] it builds is
6397
+ /// recognized by the [`ChannelManager`] when handling [`Bolt12Invoice`] messages for the
6398
+ /// request.
6399
+ ///
6400
+ /// The provided `payment_id` is used to ensure that only one invoice is paid for the request.
6401
+ ///
6402
+ /// [`InvoiceRequest`]: crate::offers::invoice_request::InvoiceRequest
6403
+ /// [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
6404
+ pub fn create_invoice_request_builder<'a, 'b>(
6405
+ &'b self, offer: &'a Offer, payment_id: PaymentId
6406
+ ) -> Result<InvoiceRequestBuilder<'a, 'b, DerivedPayerId, secp256k1::All>, Bolt12SemanticError> {
6407
+ let expanded_key = &self.inbound_payment_key;
6408
+ let entropy = &*self.entropy_source;
6409
+ let secp_ctx = &self.secp_ctx;
6410
+
6411
+ let builder = offer.request_invoice_deriving_payer_id(
6412
+ expanded_key, entropy, secp_ctx, payment_id
6413
+ )?;
6414
+ self.pending_outbound_payments
6415
+ .add_new_awaiting_invoice(payment_id)
6416
+ .map_err(|_| Bolt12SemanticError::DuplicatePaymentId)?;
6417
+
6418
+ Ok(builder)
6419
+ }
6420
+
6350
6421
/// Gets a payment secret and payment hash for use in an invoice given to a third party wishing
6351
6422
/// to pay us.
6352
6423
///
0 commit comments