@@ -58,6 +58,10 @@ type LightningClient interface {
58
58
ForwardingHistory (ctx context.Context ,
59
59
req ForwardingHistoryRequest ) (* ForwardingHistoryResponse , error )
60
60
61
+ // ListInvoices makes a paginated call to our list invoices endpoint.
62
+ ListInvoices (ctx context.Context , req ListInvoicesRequest ) (
63
+ * ListInvoicesResponse , error )
64
+
61
65
// ChannelBackup retrieves the backup for a particular channel. The
62
66
// backup is returned as an encrypted chanbackup.Single payload.
63
67
ChannelBackup (context.Context , wire.OutPoint ) ([]byte , error )
@@ -606,6 +610,21 @@ func (s *lightningClient) LookupInvoice(ctx context.Context,
606
610
return nil , err
607
611
}
608
612
613
+ invoice , err := unmarshalInvoice (resp )
614
+ if err != nil {
615
+ return nil , err
616
+ }
617
+
618
+ return invoice , nil
619
+ }
620
+
621
+ // unmarshalInvoice creates an invoice from the rpc response provided.
622
+ func unmarshalInvoice (resp * lnrpc.Invoice ) (* Invoice , error ) {
623
+ hash , err := lntypes .MakeHash (resp .RHash )
624
+ if err != nil {
625
+ return nil , err
626
+ }
627
+
609
628
invoice := & Invoice {
610
629
Preimage : nil ,
611
630
Hash : hash ,
@@ -638,7 +657,8 @@ func (s *lightningClient) LookupInvoice(ctx context.Context,
638
657
invoice .State = channeldb .ContractCanceled
639
658
640
659
default :
641
- return nil , fmt .Errorf ("unknown invoice state: %v" , resp .State )
660
+ return nil , fmt .Errorf ("unknown invoice state: %v" ,
661
+ resp .State )
642
662
}
643
663
644
664
// Only set settle date if it is non-zero, because 0 unix time is
@@ -936,6 +956,72 @@ func (s *lightningClient) ForwardingHistory(ctx context.Context,
936
956
}, nil
937
957
}
938
958
959
+ // ListInvoicesRequest contains the request parameters for a paginated
960
+ // list invoices call.
961
+ type ListInvoicesRequest struct {
962
+ // MaxInvoices is the maximum number of invoices to return.
963
+ MaxInvoices uint64
964
+
965
+ // Offset is the index from which to start querying.
966
+ Offset uint64
967
+
968
+ // Reversed is set to query our invoices backwards.
969
+ Reversed bool
970
+
971
+ // PendingOnly is set if we only want pending invoices.
972
+ PendingOnly bool
973
+ }
974
+
975
+ // ListInvoicesResponse contains the response to a list invoices query,
976
+ // including the index offsets required for paginated queries.
977
+ type ListInvoicesResponse struct {
978
+ // FirstIndexOffset is the index offset of the first item in our set.
979
+ FirstIndexOffset uint64
980
+
981
+ // LastIndexOffset is the index offset of the last item in our set.
982
+ LastIndexOffset uint64
983
+
984
+ // Invoices is the set of invoices that were returned.
985
+ Invoices []Invoice
986
+ }
987
+
988
+ // ListInvoices returns a list of invoices from our node.
989
+ func (s * lightningClient ) ListInvoices (ctx context.Context ,
990
+ req ListInvoicesRequest ) (* ListInvoicesResponse , error ) {
991
+
992
+ rpcCtx , cancel := context .WithTimeout (ctx , rpcTimeout )
993
+ defer cancel ()
994
+
995
+ resp , err := s .client .ListInvoices (
996
+ s .adminMac .WithMacaroonAuth (rpcCtx ),
997
+ & lnrpc.ListInvoiceRequest {
998
+ PendingOnly : false ,
999
+ IndexOffset : req .Offset ,
1000
+ NumMaxInvoices : req .MaxInvoices ,
1001
+ Reversed : req .Reversed ,
1002
+ },
1003
+ )
1004
+ if err != nil {
1005
+ return nil , err
1006
+ }
1007
+
1008
+ invoices := make ([]Invoice , len (resp .Invoices ))
1009
+ for i , invoice := range resp .Invoices {
1010
+ inv , err := unmarshalInvoice (invoice )
1011
+ if err != nil {
1012
+ return nil , err
1013
+ }
1014
+
1015
+ invoices [i ] = * inv
1016
+ }
1017
+
1018
+ return & ListInvoicesResponse {
1019
+ FirstIndexOffset : resp .FirstIndexOffset ,
1020
+ LastIndexOffset : resp .LastIndexOffset ,
1021
+ Invoices : invoices ,
1022
+ }, nil
1023
+ }
1024
+
939
1025
// ChannelBackup retrieves the backup for a particular channel. The backup is
940
1026
// returned as an encrypted chanbackup.Single payload.
941
1027
func (s * lightningClient ) ChannelBackup (ctx context.Context ,
0 commit comments