using Newtonsoft.Json; using Nostr.Client.Json; using Nostr.Client.Messages; namespace NostrServices.Client; public class NostrServicesClient { private readonly HttpClient _client; public NostrServicesClient(HttpClient client) { _client = client; _client.BaseAddress = new Uri("https://nostr.api.v0l.io"); _client.Timeout = TimeSpan.FromSeconds(60); } public async Task Profile(string id) { var rsp = await _client.GetAsync($"/api/v1/export/profile/{id}"); if (rsp.IsSuccessStatusCode) { var json = await rsp.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject(json); } return default; } public async Task Event(string id) { var rsp = await _client.GetAsync($"/api/v1/export/{id}"); if (rsp.IsSuccessStatusCode) { var json = await rsp.Content.ReadAsStringAsync(); return NostrJson.Deserialize(json); } return default; } public class NostrProfile { [JsonProperty("pubkey")] public byte[] PubKey { get; init; } = null!; [JsonProperty("name")] public string? Name { get; init; } [JsonProperty("about")] public string? About { get; init; } [JsonProperty("picture")] public string? Picture { get; init; } [JsonProperty("nip05")] public string? Nip05 { get; init; } [JsonProperty("lud16")] public string? LightningAddress { get; init; } [JsonProperty("banner")] public string? Banner { get; init; } [JsonProperty("created")] public DateTime Created { get; init; } } }