Skip to main content

hashtree_network/
relay_bridge.rs

1use anyhow::Result;
2use async_trait::async_trait;
3use nostr_sdk::nostr::{ClientMessage, Event, Filter, SubscriptionId};
4use std::sync::Arc;
5use tokio::sync::mpsc;
6
7#[async_trait]
8pub trait MeshEventStore: Send + Sync {
9    async fn ingest_trusted_event(&self, event: Event) -> Result<()>;
10
11    async fn query_events(&self, filter: &Filter, limit: usize) -> Vec<Event>;
12}
13
14pub type SharedMeshEventStore = Arc<dyn MeshEventStore>;
15
16#[async_trait]
17pub trait MeshRelayClient: MeshEventStore {
18    fn next_client_id(&self) -> u64;
19
20    async fn register_client(
21        &self,
22        client_id: u64,
23        sender: mpsc::UnboundedSender<String>,
24        pubkey: Option<String>,
25    );
26
27    async fn unregister_client(&self, client_id: u64);
28
29    async fn handle_client_message(&self, client_id: u64, msg: ClientMessage);
30
31    async fn register_subscription_query(
32        &self,
33        client_id: u64,
34        subscription_id: SubscriptionId,
35        filters: Vec<Filter>,
36    ) -> std::result::Result<Vec<Event>, &'static str>;
37
38    async fn ingest_trusted_event_from_peer(
39        &self,
40        event: Event,
41        _peer_id: Option<String>,
42    ) -> Result<()> {
43        self.ingest_trusted_event(event).await
44    }
45}
46
47pub type SharedMeshRelayClient = Arc<dyn MeshRelayClient>;