diff --git a/Plugins/BTCPayServer.Plugins.Wabisabi/BTCPayServer.Plugins.Wabisabi.csproj b/Plugins/BTCPayServer.Plugins.Wabisabi/BTCPayServer.Plugins.Wabisabi.csproj index a202854..50a3acd 100644 --- a/Plugins/BTCPayServer.Plugins.Wabisabi/BTCPayServer.Plugins.Wabisabi.csproj +++ b/Plugins/BTCPayServer.Plugins.Wabisabi/BTCPayServer.Plugins.Wabisabi.csproj @@ -13,7 +13,7 @@ Coinjoin Allows you to integrate your btcpayserver store with coinjoins. - 1.0.80 + 1.0.81 true diff --git a/Plugins/BTCPayServer.Plugins.Wabisabi/Coordinator/WabisabiCoordinatorService.cs b/Plugins/BTCPayServer.Plugins.Wabisabi/Coordinator/WabisabiCoordinatorService.cs index 3ba2bb7..e1eed77 100644 --- a/Plugins/BTCPayServer.Plugins.Wabisabi/Coordinator/WabisabiCoordinatorService.cs +++ b/Plugins/BTCPayServer.Plugins.Wabisabi/Coordinator/WabisabiCoordinatorService.cs @@ -14,6 +14,7 @@ using BTCPayServer.Services; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using NBitcoin; @@ -22,14 +23,18 @@ using NBitcoin.Secp256k1; using NBXplorer; using Newtonsoft.Json.Linq; using NNostr.Client; +using NNostr.Client.Protocols; using WalletWasabi.Bases; using WalletWasabi.BitcoinCore.Rpc; using WalletWasabi.Cache; using WalletWasabi.Services; +using WalletWasabi.Tor.Socks5.Pool.Circuits; using WalletWasabi.WabiSabi; using WalletWasabi.WabiSabi.Backend; using WalletWasabi.WabiSabi.Backend.Rounds.CoinJoinStorage; using WalletWasabi.WabiSabi.Backend.Statistics; +using WalletWasabi.WabiSabi.Models; +using WalletWasabi.WebClients.Wasabi; namespace WalletWasabi.Backend.Controllers; @@ -267,6 +272,46 @@ public class WabisabiCoordinatorService : PeriodicRunner s.UriToAdvertise is not null) { var k = s.GetKey(); + + if(s.UriToAdvertise.Scheme.StartsWith("http", StringComparison.InvariantCultureIgnoreCase)) + { + //make sure the end is with plugins/wabisabi-coordinator/ + var uri = new UriBuilder(s.UriToAdvertise); + + uri.Path = uri.Path.Replace("plugins/wabisabi-coordinator/", "").TrimEnd('/') + "/plugins/wabisabi-coordinator/"; + + } + //verify the url + IWasabiHttpClientFactory factory = null; + if (s.UriToAdvertise.Scheme == "nostr" && + s.UriToAdvertise.Host.FromNIP19Note() is NIP19.NosteProfileNote nostrProfileNote) + { + factory = new NostrWabisabiClientFactory(null, nostrProfileNote); + + } + else + { + factory = new WasabiHttpClientFactory(null, () => s.UriToAdvertise); + } + + try + { + + var handler = factory.NewWabiSabiApiRequestHandler(Mode.SingleCircuitPerLifetime); + var resp = await handler.GetStatusAsync(RoundStateRequest.Empty, cancel); + } + finally + { + if (factory is IHostedService hs) + { + await hs.StopAsync(cancel); + } + } + + + _logger.LogInformation("Publishing coordinator discovery event with url {0}", s.UriToAdvertise); + + await Nostr.Publish(s.NostrRelay, new[] { diff --git a/Plugins/BTCPayServer.Plugins.Wabisabi/Nostr.cs b/Plugins/BTCPayServer.Plugins.Wabisabi/Nostr.cs index 3070d5a..fd03b40 100644 --- a/Plugins/BTCPayServer.Plugins.Wabisabi/Nostr.cs +++ b/Plugins/BTCPayServer.Plugins.Wabisabi/Nostr.cs @@ -28,6 +28,7 @@ public class Nostr Socks5HttpClientHandler? httpClientHandler, CancellationToken cancellationToken ) { + if (!evts.Any()) return; var ct = CancellationTokenSource @@ -57,7 +58,7 @@ public class Nostr Content = description??string.Empty, Tags = new List() { - new() {TagIdentifier = EndpointTagIdentifier, Data = new List() {new Uri(coordinatorUri, "plugins/wabisabi-coordinator/").ToString()}}, + new() {TagIdentifier = EndpointTagIdentifier, Data = new List() {coordinatorUri.ToString()}}, new() {TagIdentifier = TypeTagIdentifier, Data = new List() { TypeTagValue}}, new() {TagIdentifier = NetworkTagIdentifier, Data = new List() {currentNetwork.ChainName.ToString().ToLower()}} }