From 01b9a52636ced58c6c87e64e6ed450dc2a27cd6b Mon Sep 17 00:00:00 2001 From: Kukks Date: Thu, 4 Jan 2024 09:31:35 +0100 Subject: [PATCH] add more logging to blink --- .../BTCPayServer.Plugins.Blink.csproj | 2 +- .../BlinkLightningClient.cs | 23 ++++++++++++------- .../BlinkLightningConnectionStringHandler.cs | 8 +++++-- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/Plugins/BTCPayServer.Plugins.Blink/BTCPayServer.Plugins.Blink.csproj b/Plugins/BTCPayServer.Plugins.Blink/BTCPayServer.Plugins.Blink.csproj index 5f2e00c..3b02b78 100644 --- a/Plugins/BTCPayServer.Plugins.Blink/BTCPayServer.Plugins.Blink.csproj +++ b/Plugins/BTCPayServer.Plugins.Blink/BTCPayServer.Plugins.Blink.csproj @@ -9,7 +9,7 @@ Blink Blink Lightning support - 1.0.4 + 1.0.5 true BTCPayServer.Plugins.Blink diff --git a/Plugins/BTCPayServer.Plugins.Blink/BlinkLightningClient.cs b/Plugins/BTCPayServer.Plugins.Blink/BlinkLightningClient.cs index e066f0f..9709dc1 100644 --- a/Plugins/BTCPayServer.Plugins.Blink/BlinkLightningClient.cs +++ b/Plugins/BTCPayServer.Plugins.Blink/BlinkLightningClient.cs @@ -13,6 +13,7 @@ using GraphQL.Client.Http; using GraphQL.Client.Http.Websocket; using GraphQL.Client.Serializer.Newtonsoft; using Microsoft.AspNetCore.OutputCaching; +using Microsoft.Extensions.Logging; using NBitcoin; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -30,18 +31,20 @@ public class BlinkLightningClient : ILightningClient public string? WalletCurrency { get; set; } private readonly Network _network; + public ILogger Logger; private readonly GraphQLHttpClient _client; public class BlinkConnectionInit { [JsonProperty("X-API-KEY")] public string ApiKey { get; set; } } - public BlinkLightningClient(string apiKey, Uri apiEndpoint, string walletId, Network network, HttpClient httpClient) + public BlinkLightningClient(string apiKey, Uri apiEndpoint, string walletId, Network network, HttpClient httpClient, ILogger logger) { _apiKey = apiKey; _apiEndpoint = apiEndpoint; WalletId = walletId; _network = network; + Logger = logger; _client = new GraphQLHttpClient(new GraphQLHttpClientOptions() {EndPoint = _apiEndpoint, WebSocketEndPoint = new Uri("wss://" + _apiEndpoint.Host.Replace("api.", "ws.") + _apiEndpoint.PathAndQuery), @@ -226,11 +229,11 @@ query TransactionsByPaymentHash($paymentHash: PaymentHash!, $walletId: WalletId! return null; var initiationVia = transaction["initiationVia"]; - if (initiationVia["paymentHash"] == null) + if (initiationVia?["paymentHash"] == null) return null; var bolt11 = BOLT11PaymentRequest.Parse((string)initiationVia["paymentRequest"], _network); - + var preimage = transaction["settlementVia"]?["preImage"]?.Value(); return new LightningPayment() { Amount = bolt11.MinimumAmount, @@ -246,6 +249,8 @@ query TransactionsByPaymentHash($paymentHash: PaymentHash!, $walletId: WalletId! PaymentHash = (string)initiationVia["paymentHash"], CreatedAt = DateTimeOffset.FromUnixTimeSeconds(transaction["createdAt"].Value()), AmountSent = bolt11.MinimumAmount, + Preimage = preimage + }; } @@ -388,7 +393,7 @@ expiresIn = (int)createInvoiceRequest.Expiry.TotalMinutes public async Task Listen(CancellationToken cancellation = new CancellationToken()) { - return new BlinkListener(_client, this); + return new BlinkListener(_client, this, Logger); } public class BlinkListener : ILightningInvoiceListener @@ -397,7 +402,7 @@ expiresIn = (int)createInvoiceRequest.Expiry.TotalMinutes private readonly Channel _invoices = Channel.CreateUnbounded(); private readonly IDisposable _subscription; - public BlinkListener(GraphQLHttpClient httpClient, BlinkLightningClient lightningClient) + public BlinkListener(GraphQLHttpClient httpClient, BlinkLightningClient lightningClient, ILogger logger) { try { @@ -443,14 +448,14 @@ expiresIn = (int)createInvoiceRequest.Expiry.TotalMinutes } catch (Exception e) { - Console.WriteLine(e); + logger.LogError(e, "Error while processing detecting lightning invoice payment"); } }); } catch (Exception e) { - Console.WriteLine(e); + logger.LogError(e, "Error while creating lightning invoice listener"); } } public void Dispose() @@ -594,6 +599,8 @@ mutation LnInvoicePaymentSend($input: LnInvoicePaymentInput!) { } } }; + var bolt11Parsed = BOLT11PaymentRequest.Parse(bolt11, _network); + CancellationTokenSource cts = CancellationTokenSource.CreateLinkedTokenSource(cancellation, new CancellationTokenSource(payParams?.SendTimeout ?? PayInvoiceParams.DefaultSendTimeout).Token); var response =(JObject) (await _client.SendQueryAsync(request, cts.Token)).Data.lnInvoicePaymentSend; @@ -612,7 +619,7 @@ mutation LnInvoicePaymentSend($input: LnInvoicePaymentInput!) { { result.Details = new PayDetails() { - PaymentHash = new uint256(response["transaction"]["initiationVia"]["paymentHash"].Value()), + PaymentHash = bolt11Parsed.PaymentHash ?? new uint256(response["transaction"]["initiationVia"]["paymentHash"].Value()), Status = response["status"].Value() switch { "ALREADY_PAID" => LightningPaymentStatus.Complete, diff --git a/Plugins/BTCPayServer.Plugins.Blink/BlinkLightningConnectionStringHandler.cs b/Plugins/BTCPayServer.Plugins.Blink/BlinkLightningConnectionStringHandler.cs index be5074a..352ae32 100644 --- a/Plugins/BTCPayServer.Plugins.Blink/BlinkLightningConnectionStringHandler.cs +++ b/Plugins/BTCPayServer.Plugins.Blink/BlinkLightningConnectionStringHandler.cs @@ -3,6 +3,7 @@ using System; using System.Linq; using System.Net.Http; using BTCPayServer.Lightning; +using Microsoft.Extensions.Logging; using Network = NBitcoin.Network; namespace BTCPayServer.Plugins.Blink; @@ -10,10 +11,12 @@ namespace BTCPayServer.Plugins.Blink; public class BlinkLightningConnectionStringHandler : ILightningConnectionStringHandler { private readonly IHttpClientFactory _httpClientFactory; + private readonly ILoggerFactory _loggerFactory; - public BlinkLightningConnectionStringHandler(IHttpClientFactory httpClientFactory) + public BlinkLightningConnectionStringHandler(IHttpClientFactory httpClientFactory, ILoggerFactory loggerFactory) { _httpClientFactory = httpClientFactory; + _loggerFactory = loggerFactory; } @@ -74,7 +77,7 @@ public class BlinkLightningConnectionStringHandler : ILightningConnectionStringH client.BaseAddress = uri; kv.TryGetValue("wallet-id", out var walletId); - var bclient = new BlinkLightningClient(apiKey, uri, walletId, network, client); + var bclient = new BlinkLightningClient(apiKey, uri, walletId, network, client, _loggerFactory.CreateLogger($"{nameof(BlinkLightningClient)}:{walletId}")); (Network Network, string DefaultWalletId, string DefaultWalletCurrency) res; try { @@ -101,6 +104,7 @@ public class BlinkLightningConnectionStringHandler : ILightningConnectionStringH { bclient.WalletId = res.DefaultWalletId; bclient.WalletCurrency = res.DefaultWalletCurrency; + bclient.Logger = _loggerFactory.CreateLogger($"{nameof(BlinkLightningClient)}:{walletId}"); } else {