upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src/lib/client.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/client.rs')
-rw-r--r--src/lib/client.rs43
1 files changed, 36 insertions, 7 deletions
diff --git a/src/lib/client.rs b/src/lib/client.rs
index 6f28cff..b27f9b1 100644
--- a/src/lib/client.rs
+++ b/src/lib/client.rs
@@ -32,17 +32,22 @@ use mockall::*;
32use nostr::{ 32use nostr::{
33 Event, 33 Event,
34 event::{TagKind, TagStandard, UnsignedEvent}, 34 event::{TagKind, TagStandard, UnsignedEvent},
35 filter::Alphabet, 35 filter::{Alphabet, MatchEventOptions},
36 nips::{nip01::Coordinate, nip19::Nip19Coordinate}, 36 nips::{
37 nip01::Coordinate,
38 nip05::{Nip05Address, Nip05Profile},
39 nip19::Nip19Coordinate,
40 },
37 signer::SignerBackend, 41 signer::SignerBackend,
38}; 42};
39use nostr_database::{NostrEventsDatabase, SaveEventStatus}; 43use nostr_database::{NostrDatabase, SaveEventStatus};
40use nostr_lmdb::NostrLMDB; 44use nostr_lmdb::NostrLMDB;
41use nostr_relay_pool::relay::ReqExitPolicy; 45use nostr_relay_pool::relay::ReqExitPolicy;
42use nostr_sdk::{ 46use nostr_sdk::{
43 EventBuilder, EventId, Kind, NostrSigner, Options, PublicKey, RelayUrl, SingleLetterTag, 47 ClientOptions, EventBuilder, EventId, Kind, NostrSigner, PublicKey, RelayUrl, SingleLetterTag,
44 Timestamp, Url, prelude::RelayLimits, 48 Timestamp, Url, prelude::RelayLimits,
45}; 49};
50use serde_json::Value;
46 51
47use crate::{ 52use crate::{
48 get_dirs, 53 get_dirs,
@@ -144,12 +149,12 @@ impl Connect for Client {
144 Client { 149 Client {
145 client: if let Some(keys) = opts.keys { 150 client: if let Some(keys) = opts.keys {
146 nostr_sdk::ClientBuilder::new() 151 nostr_sdk::ClientBuilder::new()
147 .opts(Options::new().relay_limits(RelayLimits::disable())) 152 .opts(ClientOptions::new().relay_limits(RelayLimits::disable()))
148 .signer(keys) 153 .signer(keys)
149 .build() 154 .build()
150 } else { 155 } else {
151 nostr_sdk::ClientBuilder::new() 156 nostr_sdk::ClientBuilder::new()
152 .opts(Options::new().relay_limits(RelayLimits::disable())) 157 .opts(ClientOptions::new().relay_limits(RelayLimits::disable()))
153 .build() 158 .build()
154 }, 159 },
155 relay_default_set: opts.relay_default_set, 160 relay_default_set: opts.relay_default_set,
@@ -605,7 +610,11 @@ impl Connect for Client {
605 .await? 610 .await?
606 .iter() 611 .iter()
607 // don't process events that don't match filters 612 // don't process events that don't match filters
608 .filter(|e| filters.iter().any(|f| f.match_event(e))) 613 .filter(|e| {
614 filters
615 .iter()
616 .any(|f| f.match_event(e, MatchEventOptions::default()))
617 })
609 .cloned() 618 .cloned()
610 .collect(); 619 .collect();
611 // TODO: try reconcile 620 // TODO: try reconcile
@@ -880,6 +889,26 @@ pub async fn fetch_public_key(signer: &Arc<dyn NostrSigner>) -> Result<nostr::Pu
880 } 889 }
881} 890}
882 891
892pub async fn nip05_query(nip05_addr: &str) -> Result<Nip05Profile> {
893 let addr_deconstructed = Nip05Address::parse(nip05_addr)
894 .context(format!("cannot parse nip05 address: {nip05_addr}"))?;
895 let json_res: Value = reqwest::Client::new()
896 .get(addr_deconstructed.url().to_string())
897 .send()
898 .await
899 .context(format!(
900 "nip05 server is not responding for address: {nip05_addr}"
901 ))?
902 .json()
903 .await
904 .context(format!(
905 "nip05 server response did not respond with json when querying address: {nip05_addr}"
906 ))?;
907 Nip05Profile::from_json(&addr_deconstructed, &json_res).context(format!(
908 "cannot get public key for nip05 address: {nip05_addr}"
909 ))
910}
911
883fn pb_style() -> Result<ProgressStyle> { 912fn pb_style() -> Result<ProgressStyle> {
884 Ok( 913 Ok(
885 ProgressStyle::with_template(" {spinner} {prefix} {msg} {timeout_in}")?.with_key( 914 ProgressStyle::with_template(" {spinner} {prefix} {msg} {timeout_in}")?.with_key(