diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2025-07-31 16:47:31 +0100 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2025-07-31 16:47:31 +0100 |
| commit | a7cabb96df30cd5d26f63affdb023b0706a387d1 (patch) | |
| tree | 53c086492fd710f9f289c756ec511f8b3d3819f3 /src/lib/client.rs | |
| parent | b1eabeb315dba8860f34c92e0e362559d3352ef7 (diff) | |
| parent | 436ff29135e3deade80a6e53e53d74dddb613481 (diff) | |
Merge branch 'rust-nostr-v0.43'
Diffstat (limited to 'src/lib/client.rs')
| -rw-r--r-- | src/lib/client.rs | 43 |
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::*; | |||
| 32 | use nostr::{ | 32 | use 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 | }; |
| 39 | use nostr_database::{NostrEventsDatabase, SaveEventStatus}; | 43 | use nostr_database::{NostrDatabase, SaveEventStatus}; |
| 40 | use nostr_lmdb::NostrLMDB; | 44 | use nostr_lmdb::NostrLMDB; |
| 41 | use nostr_relay_pool::relay::ReqExitPolicy; | 45 | use nostr_relay_pool::relay::ReqExitPolicy; |
| 42 | use nostr_sdk::{ | 46 | use 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 | }; |
| 50 | use serde_json::Value; | ||
| 46 | 51 | ||
| 47 | use crate::{ | 52 | use 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 | ||
| 892 | pub 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 | |||
| 883 | fn pb_style() -> Result<ProgressStyle> { | 912 | fn 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( |