diff --git a/Plugins/BTCPayServer.Plugins.Prism/Components/PrismEdit.razor b/Plugins/BTCPayServer.Plugins.Prism/Components/PrismEdit.razor index 872911c..aea9140 100644 --- a/Plugins/BTCPayServer.Plugins.Prism/Components/PrismEdit.razor +++ b/Plugins/BTCPayServer.Plugins.Prism/Components/PrismEdit.razor @@ -26,7 +26,7 @@ else @if (NoPayoutProcessors) { } @@ -133,6 +133,10 @@ else + @if (PrismEditButtonsFilter is not null) + { + @((MarkupString)PrismEditButtonsFilter) + } @@ -181,10 +185,12 @@ else public PaymentMethodId pmi { get; set; } = new("BTC", LightningPaymentType.Instance); public bool NoPayoutProcessors { get; set; } + private string PrismEditButtonsFilter { get; set; } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { + PrismEditButtonsFilter = (await PluginHookService.ApplyFilter("prism-edit-buttons", "")) as string; PayoutProcessorLink = LinkGenerator.GetUriByAction(HttpContextAccessor.HttpContext, "ConfigureStorePayoutProcessors", "UIPayoutProcessors", new {StoreId}); LNAddressLink = LinkGenerator.GetUriByAction(HttpContextAccessor.HttpContext, "EditLightningAddress", "UILNURL", new {StoreId}); PayoutsLink = LinkGenerator.GetUriByAction(HttpContextAccessor.HttpContext, "Payouts", "UIStorePullPayments", new {StoreId, payoutState = PayoutState.AwaitingPayment, paymentMethodId = pmi.ToString()}); diff --git a/Plugins/BTCPayServer.Plugins.Prism/SatBreaker.cs b/Plugins/BTCPayServer.Plugins.Prism/SatBreaker.cs index 0d4cbc2..bd90542 100644 --- a/Plugins/BTCPayServer.Plugins.Prism/SatBreaker.cs +++ b/Plugins/BTCPayServer.Plugins.Prism/SatBreaker.cs @@ -406,47 +406,44 @@ namespace BTCPayServer.Plugins.Prism { continue; } - IClaimDestination dest = null; - var dest2 = await _pluginHookService.ApplyFilter("prism-claim-destination", destinationSettings?.Destination??destination); - - dest = dest2 switch - { - IClaimDestination claimDestination => claimDestination, - string destStr when !string.IsNullOrEmpty(destStr) => new LNURLPayClaimDestinaton(destStr), - _ => null - }; - - if (dest is null) - { - continue; - } var pmi = string.IsNullOrEmpty(destinationSettings?.PaymentMethodId) || !PaymentMethodId.TryParse(destinationSettings?.PaymentMethodId, out var pmi2) ? new PaymentMethodId("BTC", LightningPaymentType.Instance) : pmi2; - var payout = await _pullPaymentHostedService.Claim(new ClaimRequest() + + var claimRequest = new ClaimRequest() { - Destination = dest, + Destination = new LNURLPayClaimDestinaton(destinationSettings?.Destination??destination), PreApprove = true, StoreId = storeId, PaymentMethodId = pmi, Value = Money.Satoshis(payoutAmount).ToDecimal(MoneyUnit.BTC), - }); - if (payout.Result == ClaimRequest.ClaimResult.Ok) - { - prismSettings.PendingPayouts ??= new(); - prismSettings.PendingPayouts.Add(payout.PayoutData.Id, - new PendingPayout(payoutAmount, reserveFee)); - var newAmount = amtMsats - (payoutAmount + reserveFee) * 1000; - if(newAmount == 0) - prismSettings.DestinationBalance.Remove(destination); - else + Metadata = JObject.FromObject(new { - prismSettings.DestinationBalance.AddOrReplace(destination,newAmount); - } - result = true; + Source = "Prism" + }) + }; + claimRequest = (await _pluginHookService.ApplyFilter("prism-claim-create", claimRequest)) as ClaimRequest; + + if (claimRequest is null) + { + continue; } + + var payout = await _pullPaymentHostedService.Claim(claimRequest); + if (payout.Result != ClaimRequest.ClaimResult.Ok) continue; + prismSettings.PendingPayouts ??= new Dictionary(); + prismSettings.PendingPayouts.Add(payout.PayoutData.Id, + new PendingPayout(payoutAmount, reserveFee)); + var newAmount = amtMsats - (payoutAmount + reserveFee) * 1000; + if(newAmount == 0) + prismSettings.DestinationBalance.Remove(destination); + else + { + prismSettings.DestinationBalance.AddOrReplace(destination,newAmount); + } + result = true; } }