@@ -29,13 +29,14 @@ use ldk_server_client::ldk_server_grpc::api::{
2929 Bolt11ReceiveRequest , Bolt11ReceiveResponse , Bolt11ReceiveVariableAmountViaJitChannelRequest ,
3030 Bolt11ReceiveVariableAmountViaJitChannelResponse , Bolt11ReceiveViaJitChannelRequest ,
3131 Bolt11ReceiveViaJitChannelResponse , Bolt11SendRequest , Bolt11SendResponse ,
32- Bolt11SendUnderpayingRequest , Bolt11SendUnderpayingResponse , Bolt12ReceiveRequest ,
33- Bolt12ReceiveResponse , Bolt12SendRequest , Bolt12SendResponse , CloseChannelRequest ,
34- CloseChannelResponse , ConnectPeerRequest , ConnectPeerResponse , DecodeInvoiceRequest ,
35- DecodeInvoiceResponse , DecodeOfferRequest , DecodeOfferResponse , DisconnectPeerRequest ,
36- DisconnectPeerResponse , ExportPathfindingScoresRequest , ForceCloseChannelRequest ,
37- ForceCloseChannelResponse , GetBalancesRequest , GetBalancesResponse , GetNodeInfoRequest ,
38- GetNodeInfoResponse , GetPaymentDetailsRequest , GetPaymentDetailsResponse ,
32+ Bolt11SendUnderpayingRequest , Bolt11SendUnderpayingResponse , Bolt12ReceiveRefundRequest ,
33+ Bolt12ReceiveRefundResponse , Bolt12ReceiveRequest , Bolt12ReceiveResponse ,
34+ Bolt12SendRefundRequest , Bolt12SendRefundResponse , Bolt12SendRequest , Bolt12SendResponse ,
35+ CloseChannelRequest , CloseChannelResponse , ConnectPeerRequest , ConnectPeerResponse ,
36+ DecodeInvoiceRequest , DecodeInvoiceResponse , DecodeOfferRequest , DecodeOfferResponse ,
37+ DisconnectPeerRequest , DisconnectPeerResponse , ExportPathfindingScoresRequest ,
38+ ForceCloseChannelRequest , ForceCloseChannelResponse , GetBalancesRequest , GetBalancesResponse ,
39+ GetNodeInfoRequest , GetNodeInfoResponse , GetPaymentDetailsRequest , GetPaymentDetailsResponse ,
3940 GraphGetChannelRequest , GraphGetChannelResponse , GraphGetNodeRequest , GraphGetNodeResponse ,
4041 GraphListChannelsRequest , GraphListChannelsResponse , GraphListNodesRequest ,
4142 GraphListNodesResponse , ListChannelsRequest , ListChannelsResponse ,
@@ -319,6 +320,43 @@ enum Commands {
319320 ) ]
320321 max_channel_saturation_power_of_half : Option < u32 > ,
321322 } ,
323+ #[ command( about = "Create a BOLT12 refund" ) ]
324+ Bolt12SendRefund {
325+ #[ arg( help = "Amount to refund, e.g. 50sat or 50000msat" ) ]
326+ amount : Amount ,
327+ #[ arg( long, default_value_t = DEFAULT_EXPIRY_SECS , help = "Refund expiry time in seconds" ) ]
328+ expiry_secs : u32 ,
329+ #[ arg( short, long, help = "Number of items being refunded" ) ]
330+ quantity : Option < u64 > ,
331+ #[ arg(
332+ short,
333+ long,
334+ help = "Note to include for the recipient. Will be reflected back in the invoice"
335+ ) ]
336+ payer_note : Option < String > ,
337+ #[ arg(
338+ long,
339+ help = "Maximum total routing fee, e.g. 50sat or 50000msat. Defaults to 1% of the payment amount + 50 sats"
340+ ) ]
341+ max_total_routing_fee : Option < Amount > ,
342+ #[ arg( long, help = "Maximum total CLTV delta we accept for the route (default: 1008)" ) ]
343+ max_total_cltv_expiry_delta : Option < u32 > ,
344+ #[ arg(
345+ long,
346+ help = "Maximum number of paths that may be used by MPP payments (default: 10)"
347+ ) ]
348+ max_path_count : Option < u32 > ,
349+ #[ arg(
350+ long,
351+ help = "Maximum share of a channel's total capacity to send over a channel, as a power of 1/2 (default: 2)"
352+ ) ]
353+ max_channel_saturation_power_of_half : Option < u32 > ,
354+ } ,
355+ #[ command( about = "Request payment for a BOLT12 refund" ) ]
356+ Bolt12ReceiveRefund {
357+ #[ arg( help = "A BOLT12 refund from the node that will send the payment" ) ]
358+ refund : String ,
359+ } ,
322360 #[ command( about = "Send a spontaneous payment (keysend) to a node" ) ]
323361 SpontaneousSend {
324362 #[ arg( help = "The hex-encoded public key of the node to send the payment to" ) ]
@@ -872,6 +910,43 @@ async fn main() {
872910 . await ,
873911 ) ;
874912 } ,
913+ Commands :: Bolt12SendRefund {
914+ amount,
915+ expiry_secs,
916+ quantity,
917+ payer_note,
918+ max_total_routing_fee,
919+ max_total_cltv_expiry_delta,
920+ max_path_count,
921+ max_channel_saturation_power_of_half,
922+ } => {
923+ let max_total_routing_fee_msat = max_total_routing_fee. map ( |a| a. to_msat ( ) ) ;
924+ let route_parameters = RouteParametersConfig {
925+ max_total_routing_fee_msat,
926+ max_total_cltv_expiry_delta : max_total_cltv_expiry_delta
927+ . unwrap_or ( DEFAULT_MAX_TOTAL_CLTV_EXPIRY_DELTA ) ,
928+ max_path_count : max_path_count. unwrap_or ( DEFAULT_MAX_PATH_COUNT ) ,
929+ max_channel_saturation_power_of_half : max_channel_saturation_power_of_half
930+ . unwrap_or ( DEFAULT_MAX_CHANNEL_SATURATION_POWER_OF_HALF ) ,
931+ } ;
932+
933+ handle_response_result :: < _ , Bolt12SendRefundResponse > (
934+ client
935+ . bolt12_send_refund ( Bolt12SendRefundRequest {
936+ amount_msat : amount. to_msat ( ) ,
937+ expiry_secs,
938+ quantity,
939+ payer_note,
940+ route_parameters : Some ( route_parameters) ,
941+ } )
942+ . await ,
943+ ) ;
944+ } ,
945+ Commands :: Bolt12ReceiveRefund { refund } => {
946+ handle_response_result :: < _ , Bolt12ReceiveRefundResponse > (
947+ client. bolt12_receive_refund ( Bolt12ReceiveRefundRequest { refund } ) . await ,
948+ ) ;
949+ } ,
875950 Commands :: SpontaneousSend {
876951 node_id,
877952 amount,
0 commit comments