Skip to content

Commit 03dda5e

Browse files
committed
fix connection bug
1 parent af6d41a commit 03dda5e

File tree

4 files changed

+60
-6
lines changed

4 files changed

+60
-6
lines changed

NNostr.Client/IsExternalInit.cs

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
#if !NET5_0_OR_GREATER
3+
namespace System.Runtime.CompilerServices
4+
{
5+
internal static class IsExternalInit {}
6+
}
7+
8+
#endif

NNostr.Client/NNostr.Client.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<Nullable>enable</Nullable>
77
<LangVersion>11</LangVersion>
88
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
9-
<PackageVersion>0.0.44</PackageVersion>
9+
<PackageVersion>0.0.45</PackageVersion>
1010
<Title>Nostr Client</Title>
1111
<Description>A client for Nostr</Description>
1212
<Copyright>MIT</Copyright>

NNostr.Client/NostrClient.cs

-5
Original file line numberDiff line numberDiff line change
@@ -226,11 +226,6 @@ public void Dispose()
226226
}
227227

228228

229-
public async Task ConnectAndWaitUntilConnected(CancellationToken token = default)
230-
{
231-
232-
}
233-
234229
public async Task ConnectAndWaitUntilConnected(CancellationToken connectionCancellationToken = default,
235230
CancellationToken lifetimeCancellationToken = default)
236231
{

NNostr.Client/Protocols/NIP67.cs

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System.Web;
2+
using NBitcoin.Secp256k1;
3+
4+
namespace NNostr.Client.Protocols;
5+
6+
public static class NIP67
7+
{
8+
public static int EventKind = 33194;
9+
public record NIP67UriPayload(
10+
ECXOnlyPubKey Pubkey,
11+
ECPrivKey Secret,
12+
string[] Relays,
13+
string[] RequiredCommands,
14+
string[] OptionalCommands,
15+
string? Budget,
16+
string? Identity)
17+
{
18+
public override string ToString()
19+
{
20+
var result =
21+
$"nostr+walletauth://{Pubkey.ToHex()}?relay={string.Join("&relay=", Relays)}&secret={Secret.CreateXOnlyPubKey().ToHex()}&required_commands={string.Join(" ", RequiredCommands)}";
22+
23+
if(OptionalCommands.Length > 0)
24+
result += $"&optional_commands={string.Join(" ", OptionalCommands)}";
25+
if(Budget is not null)
26+
result += $"&budget={Budget}";
27+
if(Identity is not null)
28+
result += $"&identity={Identity}";
29+
return result;
30+
}
31+
}
32+
33+
34+
public const string UriScheme = "nostr+walletconnect";
35+
36+
//nostr+walletauth://b889ff5b1513b641e2a139f661a661364979c5beee91842f8f0ef42ab558e9d4?relay=wss%3A%2F%2Frelay.damus.io&secret=b8a30fafa48d4795b6c0eec169a383de&required_commands=pay_invoice%20pay_keysend%20make_invoice%20lookup_invoice&optional_commands=list_transactions&budget=10000%2Fdaily
37+
38+
public static NIP67UriPayload ParseUri(Uri uri)
39+
{
40+
var query = HttpUtility.ParseQueryString(uri.Query);
41+
42+
var relays = query.GetValues("relay") ?? Array.Empty<string>();
43+
var secret = NostrExtensions.ParseKey(query["secret"]);
44+
var requiredCommands = query.GetValues("required_commands")?.SelectMany(s => s.Split(" ")).Distinct().ToArray() ?? Array.Empty<string>();
45+
var optionalCommands = query.GetValues("optional_commands")?.SelectMany(s => s.Split(" ")).Distinct().ToArray() ?? Array.Empty<string>();
46+
var budget = query.GetValues("budget")?.FirstOrDefault();
47+
var identity = query.GetValues("identity")?.FirstOrDefault();
48+
49+
return new NIP67UriPayload(NostrExtensions.ParsePubKey(uri.Host), secret, relays, requiredCommands, optionalCommands, budget, identity);
50+
}
51+
}

0 commit comments

Comments
 (0)