Skip to content

Commit 99f8d7d

Browse files
committed
pool: add whitelist support
Closes #571 Signed-off-by: Yuki Kishimoto <[email protected]>
1 parent 622bf1c commit 99f8d7d

File tree

32 files changed

+737
-550
lines changed

32 files changed

+737
-550
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@
102102
* pool: add `RelayPool::disconnect_relay` method ([Yuki Kishimoto])
103103
* pool: add `RelayPool::relays_with_flag` and `RelayPool::all_relays` ([Yuki Kishimoto])
104104
* pool: add support to negentropy v1 ([Yuki Kishimoto])
105+
* pool: add whitelist support
105106
* sdk: add `Client::add_discovery_relay` ([Yuki Kishimoto])
106107
* sdk: add `Client::add_read_relay` and `Client::add_write_relay` ([Yuki Kishimoto])
107108
* sdk: add `Client::stream_events_targeted` ([Yuki Kishimoto])

bindings/nostr-sdk-ffi/bindings-python/examples/blacklist.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ async def main():
1717
other_public_key = PublicKey.parse("npub1xtscya34g58tk0z605fvr788k263gsu6cy9x0mhnm87echrgufzsevkk5s")
1818

1919
# Mute public key
20-
await client.mute_public_keys([muted_public_key])
20+
filtering = client.filtering()
21+
await filtering.add_public_keys([muted_public_key])
2122

2223
# Get events
2324
f = Filter().authors([muted_public_key, other_public_key]).kind(Kind(0))
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import asyncio
2+
from nostr_sdk import PublicKey, Client, Filter, Kind, init_logger, LogLevel, EventSource, Options, RelayFilteringMode
3+
from datetime import timedelta
4+
5+
6+
async def main():
7+
# Init logger
8+
init_logger(LogLevel.INFO)
9+
10+
# Init client
11+
opts = Options().filtering_mode(RelayFilteringMode.WHITELIST)
12+
client = Client.with_opts(None, opts)
13+
await client.add_relay("wss://relay.damus.io")
14+
await client.add_relay("wss://nos.lol")
15+
await client.connect()
16+
17+
whitelisted_public_key = PublicKey.parse("npub1l2vyh47mk2p0qlsku7hg0vn29faehy9hy34ygaclpn66ukqp3afqutajft")
18+
not_whitelisted_public_key = PublicKey.parse("npub1xtscya34g58tk0z605fvr788k263gsu6cy9x0mhnm87echrgufzsevkk5s")
19+
20+
# Mute public key
21+
filtering = client.filtering()
22+
await filtering.add_public_keys([whitelisted_public_key])
23+
24+
# Get events
25+
f = Filter().authors([whitelisted_public_key, not_whitelisted_public_key]).kind(Kind(0))
26+
source = EventSource.relays(timedelta(seconds=10))
27+
events = await client.get_events_of([f], source)
28+
print(f"Received {events.__len__()} events")
29+
30+
31+
if __name__ == '__main__':
32+
asyncio.run(main())

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

Lines changed: 4 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use crate::error::Result;
3030
use crate::pool::result::{Output, ReconciliationOutput, SendEventOutput, SubscribeOutput};
3131
use crate::pool::RelayPool;
3232
use crate::relay::options::{NegentropyOptions, SubscribeAutoCloseOptions};
33-
use crate::relay::RelayBlacklist;
33+
use crate::relay::RelayFiltering;
3434
use crate::{HandleNotification, NostrDatabase, Relay};
3535

3636
#[derive(Object)]
@@ -101,51 +101,9 @@ impl Client {
101101
Arc::new(self.inner.database().into())
102102
}
103103

104-
/// Get blacklist
105-
pub fn blacklist(&self) -> RelayBlacklist {
106-
self.inner.blacklist().into()
107-
}
108-
109-
/// Mute event IDs
110-
///
111-
/// Add event IDs to blacklist
112-
///
113-
/// <div class="warning">Mute list event is not currently created/updated!</div>
114-
pub async fn mute_ids(&self, ids: Vec<Arc<EventId>>) {
115-
self.inner.mute_ids(ids.into_iter().map(|id| **id)).await
116-
}
117-
118-
/// Unmute event IDs
119-
///
120-
/// Remove event IDs from blacklist
121-
///
122-
/// <div class="warning">Mute list event is not currently created/updated!</div>
123-
pub async fn unmute_ids(&self, ids: &[Arc<EventId>]) {
124-
self.inner
125-
.unmute_ids(ids.iter().map(|id| id.as_ref().deref()))
126-
.await
127-
}
128-
129-
/// Mute public keys
130-
///
131-
/// Add public keys to blacklist
132-
///
133-
/// <div class="warning">Mute list event is not currently created/updated!</div>
134-
pub async fn mute_public_keys(&self, public_keys: Vec<Arc<PublicKey>>) {
135-
self.inner
136-
.mute_public_keys(public_keys.into_iter().map(|p| **p))
137-
.await
138-
}
139-
140-
/// Unmute public keys
141-
///
142-
/// Remove public keys from blacklist
143-
///
144-
/// <div class="warning">Mute list event is not currently created/updated!</div>
145-
pub async fn unmute_public_keys(&self, public_keys: &[Arc<PublicKey>]) {
146-
self.inner
147-
.unmute_public_keys(public_keys.iter().map(|p| p.as_ref().deref()))
148-
.await
104+
/// Get filtering
105+
pub fn filtering(&self) -> RelayFiltering {
106+
self.inner.filtering().into()
149107
}
150108

151109
pub async fn shutdown(&self) -> Result<()> {

bindings/nostr-sdk-ffi/src/client/options.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use nostr_sdk::pool;
1313
use uniffi::{Enum, Object};
1414

1515
use crate::error::Result;
16-
use crate::relay::{ConnectionMode, RelayLimits};
16+
use crate::relay::{ConnectionMode, RelayFilteringMode, RelayLimits};
1717

1818
#[derive(Clone, Object)]
1919
pub struct Options {
@@ -148,6 +148,13 @@ impl Options {
148148
builder.inner = builder.inner.max_avg_latency(max);
149149
builder
150150
}
151+
152+
/// Set filtering mode (default: blacklist)
153+
pub fn filtering_mode(self: Arc<Self>, mode: RelayFilteringMode) -> Self {
154+
let mut builder = unwrap_or_clone_arc(self);
155+
builder.inner = builder.inner.filtering_mode(mode.into());
156+
builder
157+
}
151158
}
152159

153160
/// Connection target

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use crate::error::Result;
1919
use crate::negentropy::NegentropyItem;
2020
use crate::pool::result::ReconciliationOutput;
2121
use crate::relay::options::{FilterOptions, NegentropyOptions};
22-
use crate::relay::{RelayBlacklist, RelayOptions, RelaySendOptions, SubscribeOptions};
22+
use crate::relay::{RelayFiltering, RelayOptions, RelaySendOptions, SubscribeOptions};
2323
use crate::{HandleNotification, NostrDatabase, Relay};
2424

2525
#[derive(Object)]
@@ -62,9 +62,9 @@ impl RelayPool {
6262
Arc::new(self.inner.database().into())
6363
}
6464

65-
/// Get blacklist
66-
pub fn blacklist(&self) -> RelayBlacklist {
67-
self.inner.blacklist().into()
65+
/// Get relay filtering
66+
pub fn filtering(&self) -> RelayFiltering {
67+
self.inner.filtering().into()
6868
}
6969

7070
/// Get relays with `READ` or `WRITE` flags

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

Lines changed: 0 additions & 101 deletions
This file was deleted.

0 commit comments

Comments
 (0)