@@ -40,11 +40,12 @@ use ldk_server_protos::endpoints::{
4040 BOLT11_RECEIVE_VIA_JIT_CHANNEL_PATH , BOLT11_SEND_PATH , BOLT12_RECEIVE_PATH , BOLT12_SEND_PATH ,
4141 CLOSE_CHANNEL_PATH , CONNECT_PEER_PATH , DECODE_INVOICE_PATH , DECODE_OFFER_PATH ,
4242 DISCONNECT_PEER_PATH , EXPORT_PATHFINDING_SCORES_PATH , FORCE_CLOSE_CHANNEL_PATH ,
43- GET_BALANCES_PATH , GET_METRICS_PATH , GET_NODE_INFO_PATH , GET_PAYMENT_DETAILS_PATH , GRAPH_GET_CHANNEL_PATH ,
44- GRAPH_GET_NODE_PATH , GRAPH_LIST_CHANNELS_PATH , GRAPH_LIST_NODES_PATH , LIST_CHANNELS_PATH ,
45- LIST_FORWARDED_PAYMENTS_PATH , LIST_PAYMENTS_PATH , LIST_PEERS_PATH , ONCHAIN_RECEIVE_PATH ,
46- ONCHAIN_SEND_PATH , OPEN_CHANNEL_PATH , SIGN_MESSAGE_PATH , SPLICE_IN_PATH , SPLICE_OUT_PATH ,
47- SPONTANEOUS_SEND_PATH , UNIFIED_SEND_PATH , UPDATE_CHANNEL_CONFIG_PATH , VERIFY_SIGNATURE_PATH ,
43+ GET_BALANCES_PATH , GET_METRICS_PATH , GET_NODE_INFO_PATH , GET_PAYMENT_DETAILS_PATH ,
44+ GRAPH_GET_CHANNEL_PATH , GRAPH_GET_NODE_PATH , GRAPH_LIST_CHANNELS_PATH , GRAPH_LIST_NODES_PATH ,
45+ LIST_CHANNELS_PATH , LIST_FORWARDED_PAYMENTS_PATH , LIST_PAYMENTS_PATH , LIST_PEERS_PATH ,
46+ ONCHAIN_RECEIVE_PATH , ONCHAIN_SEND_PATH , OPEN_CHANNEL_PATH , SIGN_MESSAGE_PATH , SPLICE_IN_PATH ,
47+ SPLICE_OUT_PATH , SPONTANEOUS_SEND_PATH , UNIFIED_SEND_PATH , UPDATE_CHANNEL_CONFIG_PATH ,
48+ VERIFY_SIGNATURE_PATH ,
4849} ;
4950use ldk_server_protos:: error:: { ErrorCode , ErrorResponse } ;
5051use prost:: bytes:: Bytes ;
@@ -123,8 +124,17 @@ impl LdkServerClient {
123124
124125 /// Retrieve the node metrics in Prometheus format.
125126 pub async fn get_metrics ( & self ) -> Result < String , LdkServerError > {
127+ self . get_metrics_with_auth ( None , None ) . await
128+ }
129+
130+ /// Retrieve the node metrics in Prometheus format using Basic Auth.
131+ pub async fn get_metrics_with_auth (
132+ & self , username : Option < & str > , password : Option < & str > ,
133+ ) -> Result < String , LdkServerError > {
126134 let url = format ! ( "https://{}/{GET_METRICS_PATH}" , self . base_url) ;
127- let payload = self . make_request ( & url, RequestType :: Get , None , false ) . await ?;
135+ let payload =
136+ self . make_request ( & url, RequestType :: Get , None , false , username, password) . await ?;
137+
128138 String :: from_utf8 ( payload. to_vec ( ) ) . map_err ( |e| {
129139 LdkServerError :: new (
130140 InternalError ,
@@ -468,21 +478,23 @@ impl LdkServerClient {
468478 & self , request : & Rq , url : & str ,
469479 ) -> Result < Rs , LdkServerError > {
470480 let request_body = request. encode_to_vec ( ) ;
471- let payload = self . make_request ( url, RequestType :: Post , Some ( request_body) , true ) . await ?;
481+ let payload =
482+ self . make_request ( url, RequestType :: Post , Some ( request_body) , true , None , None ) . await ?;
472483 Rs :: decode ( & payload[ ..] ) . map_err ( |e| {
473484 LdkServerError :: new ( InternalError , format ! ( "Failed to decode success response: {}" , e) )
474485 } )
475486 }
476487
477488 async fn make_request (
478- & self , url : & str , request_type : RequestType , body : Option < Vec < u8 > > , authenticated : bool ,
489+ & self , url : & str , request_type : RequestType , body : Option < Vec < u8 > > ,
490+ hmac_authenticated : bool , metrics_username : Option < & str > , metrics_password : Option < & str > ,
479491 ) -> Result < Bytes , LdkServerError > {
480492 let builder = match request_type {
481493 RequestType :: Get => self . client . get ( url) ,
482494 RequestType :: Post => self . client . post ( url) ,
483495 } ;
484496
485- let builder = if authenticated {
497+ let builder = if hmac_authenticated {
486498 let body_for_auth = body. as_deref ( ) . unwrap_or ( & [ ] ) ;
487499 let auth_header = self . compute_auth_header ( body_for_auth) ;
488500 builder. header ( "X-Auth" , auth_header)
@@ -496,10 +508,23 @@ impl LdkServerClient {
496508 builder
497509 } ;
498510
511+ let builder = if let ( Some ( username) , Some ( password) ) = ( metrics_username, metrics_password)
512+ {
513+ builder. basic_auth ( username, Some ( password) )
514+ } else {
515+ builder
516+ } ;
517+
499518 let response_raw = builder. send ( ) . await . map_err ( |e| {
500519 LdkServerError :: new ( InternalError , format ! ( "HTTP request failed: {}" , e) )
501520 } ) ?;
502521
522+ self . handle_response ( response_raw) . await
523+ }
524+
525+ async fn handle_response (
526+ & self , response_raw : reqwest:: Response ,
527+ ) -> Result < Bytes , LdkServerError > {
503528 let status = response_raw. status ( ) ;
504529 let payload = response_raw. bytes ( ) . await . map_err ( |e| {
505530 LdkServerError :: new ( InternalError , format ! ( "Failed to read response body: {}" , e) )
0 commit comments