Skip to content

Commit e2b0d0f

Browse files
committed
pool: remove Relay constructors
The `Relay` can be constructed only inside the `nostr-relay-pool` crate. External libs must use `RelayPool`, which provides all the stuff for easy interaction with relays. Except for tests, interaction with only a single relay doesn't make sense in nostr, so it should never happen. Signed-off-by: Yuki Kishimoto <[email protected]>
1 parent 16287ca commit e2b0d0f

File tree

5 files changed

+28
-89
lines changed

5 files changed

+28
-89
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@
4848
* nostr: remove `EventIdOrCoordinate` enum ([Yuki Kishimoto])
4949
* nostr: change `EventBuilder::delete` arguments ([Yuki Kishimoto])
5050
* pool: drop `RelayFiltering` ([Yuki Kishimoto])
51-
* sdk: change `Client::fetch_metadata` output ([Yuki Kishimoto])
51+
* pool: remove `Relay` constructors ([Yuki Kishimoto])
52+
* sdk: change `Client::fetch_metadata` output ([Yuki Kishimoto])
5253

5354
### Changed
5455

bindings/nostr-sdk-ffi/src/relay/mod.rs

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use std::ops::Deref;
77
use std::sync::Arc;
88
use std::time::Duration;
99

10-
use nostr_sdk::{pool, RelayUrl, SubscriptionId};
10+
use nostr_sdk::{pool, SubscriptionId};
1111
use uniffi::{Object, Record};
1212

1313
pub mod limits;
@@ -21,7 +21,6 @@ pub use self::options::{ConnectionMode, RelayOptions, ReqExitPolicy, SubscribeOp
2121
pub use self::stats::RelayConnectionStats;
2222
pub use self::status::RelayStatus;
2323
use crate::database::events::Events;
24-
use crate::database::NostrDatabase;
2524
use crate::error::Result;
2625
use crate::negentropy::NegentropyItem;
2726
use crate::protocol::event::{Event, EventId};
@@ -101,34 +100,6 @@ impl From<pool::Relay> for Relay {
101100

102101
#[uniffi::export(async_runtime = "tokio")]
103102
impl Relay {
104-
/// Create new `Relay` with **default** `options` and `in-memory database`
105-
#[uniffi::constructor]
106-
pub fn new(url: &str) -> Result<Self> {
107-
let url: RelayUrl = RelayUrl::parse(url)?;
108-
Ok(Self {
109-
inner: nostr_sdk::Relay::new(url),
110-
})
111-
}
112-
113-
/// Create new `Relay` with default `in-memory database` and custom `options`
114-
#[uniffi::constructor]
115-
pub fn with_opts(url: &str, opts: &RelayOptions) -> Result<Self> {
116-
let url: RelayUrl = RelayUrl::parse(url)?;
117-
let opts = opts.deref().clone();
118-
Ok(Self {
119-
inner: nostr_sdk::Relay::with_opts(url, opts),
120-
})
121-
}
122-
123-
/// Create new `Relay` with **custom** `database` and/or `options`
124-
#[uniffi::constructor]
125-
pub fn custom(url: &str, database: &NostrDatabase, opts: &RelayOptions) -> Result<Self> {
126-
let url: RelayUrl = RelayUrl::parse(url)?;
127-
Ok(Self {
128-
inner: nostr_sdk::Relay::custom(url, database.deref().clone(), opts.deref().clone()),
129-
})
130-
}
131-
132103
/// Get relay url
133104
pub fn url(&self) -> String {
134105
self.inner.url().to_string()

bindings/nostr-sdk-js/src/relay/mod.rs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -99,16 +99,6 @@ impl From<RelayStatus> for JsRelayStatus {
9999

100100
#[wasm_bindgen(js_class = Relay)]
101101
impl JsRelay {
102-
/// Create new `Relay` with `in-memory` database
103-
#[wasm_bindgen(constructor)]
104-
pub fn new(url: &str, opts: Option<JsRelayOptions>) -> Result<JsRelay> {
105-
let url: RelayUrl = RelayUrl::parse(url).map_err(into_err)?;
106-
let opts: RelayOptions = opts.map(|o| o.deref().clone()).unwrap_or_default();
107-
Ok(Self {
108-
inner: Relay::with_opts(url, opts),
109-
})
110-
}
111-
112102
/// Get relay url
113103
pub fn url(&self) -> String {
114104
self.inner.url().to_string()

crates/nostr-relay-pool/src/pool/inner.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ impl InnerRelayPool {
137137
}
138138

139139
// Compose new relay
140-
let relay: Relay = Relay::internal_custom(url, self.state.clone(), opts);
140+
let relay: Relay = Relay::new(url, self.state.clone(), opts);
141141

142142
// Set notification sender
143143
relay

crates/nostr-relay-pool/src/relay/mod.rs

Lines changed: 24 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
use std::borrow::Cow;
88
use std::cmp;
99
use std::collections::{HashMap, HashSet};
10-
use std::sync::Arc;
1110
use std::time::Duration;
1211

1312
use async_utility::time;
@@ -151,31 +150,8 @@ impl Ord for Relay {
151150
}
152151

153152
impl Relay {
154-
/// Create new relay with **default** options and in-memory database
155153
#[inline]
156-
pub fn new(url: RelayUrl) -> Self {
157-
Self::with_opts(url, RelayOptions::default())
158-
}
159-
160-
/// Create new relay with default in-memory database and custom options
161-
#[inline]
162-
pub fn with_opts(url: RelayUrl, opts: RelayOptions) -> Self {
163-
let database = Arc::new(MemoryDatabase::default());
164-
Self::custom(url, database, opts)
165-
}
166-
167-
/// Create new relay with **custom** database and/or options
168-
pub fn custom<T>(url: RelayUrl, database: T, opts: RelayOptions) -> Self
169-
where
170-
T: IntoNostrDatabase,
171-
{
172-
let mut state = SharedState::default();
173-
state.database = database.into_nostr_database();
174-
Self::internal_custom(url, state, opts)
175-
}
176-
177-
#[inline]
178-
pub(crate) fn internal_custom(url: RelayUrl, state: SharedState, opts: RelayOptions) -> Self {
154+
pub(crate) fn new(url: RelayUrl, state: SharedState, opts: RelayOptions) -> Self {
179155
Self {
180156
inner: AtomicDestructor::new(InnerRelay::new(url, state, opts)),
181157
}
@@ -742,6 +718,10 @@ mod tests {
742718

743719
use super::{Error, *};
744720

721+
fn new_relay(url: RelayUrl, opts: RelayOptions) -> Relay {
722+
Relay::new(url, SharedState::default(), opts)
723+
}
724+
745725
/// Setup public (without NIP42 auth) relay with N events to test event fetching
746726
///
747727
/// **Adds ONLY text notes**
@@ -750,7 +730,7 @@ mod tests {
750730
let mock = MockRelay::run().await.unwrap();
751731
let url = RelayUrl::parse(&mock.url()).unwrap();
752732

753-
let relay = Relay::new(url);
733+
let relay = new_relay(url, RelayOptions::default());
754734
relay.connect();
755735

756736
// Signer
@@ -773,7 +753,7 @@ mod tests {
773753
let mock = MockRelay::run().await.unwrap();
774754
let url = RelayUrl::parse(&mock.url()).unwrap();
775755

776-
let relay = Relay::new(url);
756+
let relay: Relay = new_relay(url, RelayOptions::default());
777757

778758
relay.try_connect(Duration::from_secs(3)).await.unwrap();
779759

@@ -790,7 +770,7 @@ mod tests {
790770
let mock = MockRelay::run().await.unwrap();
791771
let url = RelayUrl::parse(&mock.url()).unwrap();
792772

793-
let relay = Relay::new(url);
773+
let relay: Relay = new_relay(url, RelayOptions::default());
794774

795775
assert_eq!(relay.status(), RelayStatus::Initialized);
796776

@@ -813,7 +793,7 @@ mod tests {
813793
let mock = MockRelay::run().await.unwrap();
814794
let url = RelayUrl::parse(&mock.url()).unwrap();
815795

816-
let relay = Relay::with_opts(url, RelayOptions::default().reconnect(false));
796+
let relay: Relay = new_relay(url, RelayOptions::default().reconnect(false));
817797

818798
assert_eq!(relay.status(), RelayStatus::Initialized);
819799

@@ -836,7 +816,7 @@ mod tests {
836816
let mock = MockRelay::run().await.unwrap();
837817
let url = RelayUrl::parse(&mock.url()).unwrap();
838818

839-
let relay = Relay::new(url);
819+
let relay: Relay = new_relay(url, RelayOptions::default());
840820

841821
assert_eq!(relay.status(), RelayStatus::Initialized);
842822

@@ -860,7 +840,7 @@ mod tests {
860840
let opts = RelayOptions::default()
861841
.adjust_retry_interval(false)
862842
.retry_interval(Duration::from_secs(1));
863-
let relay = Relay::with_opts(url, opts);
843+
let relay: Relay = new_relay(url, opts);
864844

865845
assert_eq!(relay.status(), RelayStatus::Initialized);
866846

@@ -889,8 +869,7 @@ mod tests {
889869
let mock = MockRelay::run().await.unwrap();
890870
let url = RelayUrl::parse(&mock.url()).unwrap();
891871

892-
let opts = RelayOptions::default();
893-
let relay = Relay::with_opts(url, opts);
872+
let relay: Relay = new_relay(url, RelayOptions::default());
894873

895874
assert_eq!(relay.status(), RelayStatus::Initialized);
896875

@@ -906,8 +885,7 @@ mod tests {
906885
async fn test_connect_to_unreachable_relay() {
907886
let url = RelayUrl::parse("wss://127.0.0.1:666").unwrap();
908887

909-
let opts = RelayOptions::default();
910-
let relay = Relay::with_opts(url, opts);
888+
let relay: Relay = new_relay(url, RelayOptions::default());
911889

912890
assert_eq!(relay.status(), RelayStatus::Initialized);
913891

@@ -925,8 +903,7 @@ mod tests {
925903
let mock = MockRelay::run().await.unwrap();
926904
let url = RelayUrl::parse(&mock.url()).unwrap();
927905

928-
let opts = RelayOptions::default();
929-
let relay = Relay::with_opts(url, opts);
906+
let relay: Relay = new_relay(url, RelayOptions::default());
930907

931908
assert_eq!(relay.status(), RelayStatus::Initialized);
932909

@@ -943,8 +920,7 @@ mod tests {
943920
async fn test_try_connect_to_unreachable_relay() {
944921
let url = RelayUrl::parse("wss://127.0.0.1:666").unwrap();
945922

946-
let opts = RelayOptions::default();
947-
let relay = Relay::with_opts(url, opts);
923+
let relay: Relay = new_relay(url, RelayOptions::default());
948924

949925
assert_eq!(relay.status(), RelayStatus::Initialized);
950926

@@ -966,7 +942,7 @@ mod tests {
966942
let mock = MockRelay::run_with_opts(opts).await.unwrap();
967943
let url = RelayUrl::parse(&mock.url()).unwrap();
968944

969-
let relay = Relay::new(url);
945+
let relay: Relay = new_relay(url, RelayOptions::default());
970946

971947
assert_eq!(relay.status(), RelayStatus::Initialized);
972948

@@ -998,7 +974,7 @@ mod tests {
998974
let mock = MockRelay::run_with_opts(opts).await.unwrap();
999975
let url = RelayUrl::parse(&mock.url()).unwrap();
1000976

1001-
let relay = Relay::new(url);
977+
let relay: Relay = new_relay(url, RelayOptions::default());
1002978

1003979
assert_eq!(relay.status(), RelayStatus::Initialized);
1004980

@@ -1026,7 +1002,7 @@ mod tests {
10261002
let mock = MockRelay::run_with_opts(opts).await.unwrap();
10271003
let url = RelayUrl::parse(&mock.url()).unwrap();
10281004

1029-
let relay = Relay::new(url);
1005+
let relay: Relay = new_relay(url, RelayOptions::default());
10301006

10311007
assert_eq!(relay.status(), RelayStatus::Initialized);
10321008

@@ -1054,7 +1030,7 @@ mod tests {
10541030
let mock = MockRelay::run_with_opts(opts).await.unwrap();
10551031
let url = RelayUrl::parse(&mock.url()).unwrap();
10561032

1057-
let relay = Relay::new(url);
1033+
let relay: Relay = new_relay(url, RelayOptions::default());
10581034

10591035
assert_eq!(relay.status(), RelayStatus::Initialized);
10601036

@@ -1079,7 +1055,7 @@ mod tests {
10791055
let mock = LocalRelay::run(builder).await.unwrap();
10801056
let url = RelayUrl::parse(&mock.url()).unwrap();
10811057

1082-
let relay = Relay::new(url);
1058+
let relay: Relay = new_relay(url, RelayOptions::default());
10831059

10841060
relay.inner.state.automatic_authentication(true);
10851061

@@ -1122,7 +1098,7 @@ mod tests {
11221098
let mock = LocalRelay::run(builder).await.unwrap();
11231099
let url = RelayUrl::parse(&mock.url()).unwrap();
11241100

1125-
let relay = Relay::new(url);
1101+
let relay: Relay = new_relay(url, RelayOptions::default());
11261102

11271103
relay.connect();
11281104

@@ -1326,14 +1302,15 @@ mod tests {
13261302
let url = RelayUrl::parse(&mock.url()).unwrap();
13271303

13281304
// Sender
1329-
let relay1 = Relay::new(url.clone());
1305+
let relay1: Relay = new_relay(url.clone(), RelayOptions::default());
1306+
relay1.connect();
13301307
relay1
13311308
.try_connect(Duration::from_millis(500))
13321309
.await
13331310
.unwrap();
13341311

13351312
// Fetcher
1336-
let relay2 = Relay::new(url);
1313+
let relay2 = new_relay(url, RelayOptions::default());
13371314
relay2
13381315
.try_connect(Duration::from_millis(500))
13391316
.await

0 commit comments

Comments
 (0)