Skip to content

Commit 2e63f8f

Browse files
committed
Expose Client::fetch_events
1 parent c50a411 commit 2e63f8f

File tree

9 files changed

+719
-291
lines changed

9 files changed

+719
-291
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
* Expose `EventId` ([Yuki Kishimoto])
3535
* Expose `Alphabet`, `SingleLetterTag` and `Filter` ([Yuki Kishimoto])
36+
* Expose `Client::fetch_events` ([Yuki Kishimoto])
3637

3738
### Fixed
3839

lib/src/rust/api/client.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
1010
import 'protocol/event.dart';
1111
import 'protocol/event/builder.dart';
1212
import 'protocol/signer.dart';
13+
import 'protocol/types/filter.dart';
1314

1415
// These function are ignored because they are on traits that is not defined in current crate (put an empty `#[frb]` on it to unignore): `from`
1516

@@ -67,6 +68,13 @@ abstract class Client implements RustOpaqueInterface {
6768
/// Disconnect relay
6869
Future<void> disconnectRelay({required String url});
6970

71+
/// Fetch events from relays
72+
///
73+
/// If `gossip` is enabled (see [`Options::gossip`]) the events will be requested also to
74+
/// NIP65 relays (automatically discovered) of public keys included in filters (if any).
75+
Future<List<Event>> fetchEvents(
76+
{required List<Filter> filters, required Duration timeout});
77+
7078
/// Disconnect and force remove all relays
7179
Future<void> forceRemoveAllRelays();
7280

lib/src/rust/frb_generated.dart

Lines changed: 307 additions & 145 deletions
Large diffs are not rendered by default.

lib/src/rust/frb_generated.io.dart

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,9 @@ abstract class NostrSdkApiImplPlatform extends BaseApiImpl<NostrSdkWire> {
234234
dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_UnsignedEvent(
235235
dynamic raw);
236236

237+
@protected
238+
Duration dco_decode_Chrono_Duration(dynamic raw);
239+
237240
@protected
238241
Map<String, String> dco_decode_Map_String_String(dynamic raw);
239242

@@ -340,11 +343,24 @@ abstract class NostrSdkApiImplPlatform extends BaseApiImpl<NostrSdkWire> {
340343
@protected
341344
int dco_decode_i_32(dynamic raw);
342345

346+
@protected
347+
PlatformInt64 dco_decode_i_64(dynamic raw);
348+
349+
@protected
350+
List<Event>
351+
dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_Event(
352+
dynamic raw);
353+
343354
@protected
344355
List<EventId>
345356
dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_EventId(
346357
dynamic raw);
347358

359+
@protected
360+
List<Filter>
361+
dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_Filter(
362+
dynamic raw);
363+
348364
@protected
349365
List<PublicKey>
350366
dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_PublicKey(
@@ -556,6 +572,9 @@ abstract class NostrSdkApiImplPlatform extends BaseApiImpl<NostrSdkWire> {
556572
sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_UnsignedEvent(
557573
SseDeserializer deserializer);
558574

575+
@protected
576+
Duration sse_decode_Chrono_Duration(SseDeserializer deserializer);
577+
559578
@protected
560579
Map<String, String> sse_decode_Map_String_String(
561580
SseDeserializer deserializer);
@@ -664,11 +683,24 @@ abstract class NostrSdkApiImplPlatform extends BaseApiImpl<NostrSdkWire> {
664683
@protected
665684
int sse_decode_i_32(SseDeserializer deserializer);
666685

686+
@protected
687+
PlatformInt64 sse_decode_i_64(SseDeserializer deserializer);
688+
689+
@protected
690+
List<Event>
691+
sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_Event(
692+
SseDeserializer deserializer);
693+
667694
@protected
668695
List<EventId>
669696
sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_EventId(
670697
SseDeserializer deserializer);
671698

699+
@protected
700+
List<Filter>
701+
sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_Filter(
702+
SseDeserializer deserializer);
703+
672704
@protected
673705
List<PublicKey>
674706
sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_PublicKey(
@@ -885,6 +917,9 @@ abstract class NostrSdkApiImplPlatform extends BaseApiImpl<NostrSdkWire> {
885917
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_UnsignedEvent(
886918
UnsignedEvent self, SseSerializer serializer);
887919

920+
@protected
921+
void sse_encode_Chrono_Duration(Duration self, SseSerializer serializer);
922+
888923
@protected
889924
void sse_encode_Map_String_String(
890925
Map<String, String> self, SseSerializer serializer);
@@ -996,11 +1031,24 @@ abstract class NostrSdkApiImplPlatform extends BaseApiImpl<NostrSdkWire> {
9961031
@protected
9971032
void sse_encode_i_32(int self, SseSerializer serializer);
9981033

1034+
@protected
1035+
void sse_encode_i_64(PlatformInt64 self, SseSerializer serializer);
1036+
1037+
@protected
1038+
void
1039+
sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_Event(
1040+
List<Event> self, SseSerializer serializer);
1041+
9991042
@protected
10001043
void
10011044
sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_EventId(
10021045
List<EventId> self, SseSerializer serializer);
10031046

1047+
@protected
1048+
void
1049+
sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_Filter(
1050+
List<Filter> self, SseSerializer serializer);
1051+
10041052
@protected
10051053
void
10061054
sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_PublicKey(

lib/src/rust/frb_generated.web.dart

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,9 @@ abstract class NostrSdkApiImplPlatform extends BaseApiImpl<NostrSdkWire> {
236236
dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_UnsignedEvent(
237237
dynamic raw);
238238

239+
@protected
240+
Duration dco_decode_Chrono_Duration(dynamic raw);
241+
239242
@protected
240243
Map<String, String> dco_decode_Map_String_String(dynamic raw);
241244

@@ -342,11 +345,24 @@ abstract class NostrSdkApiImplPlatform extends BaseApiImpl<NostrSdkWire> {
342345
@protected
343346
int dco_decode_i_32(dynamic raw);
344347

348+
@protected
349+
PlatformInt64 dco_decode_i_64(dynamic raw);
350+
351+
@protected
352+
List<Event>
353+
dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_Event(
354+
dynamic raw);
355+
345356
@protected
346357
List<EventId>
347358
dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_EventId(
348359
dynamic raw);
349360

361+
@protected
362+
List<Filter>
363+
dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_Filter(
364+
dynamic raw);
365+
350366
@protected
351367
List<PublicKey>
352368
dco_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_PublicKey(
@@ -558,6 +574,9 @@ abstract class NostrSdkApiImplPlatform extends BaseApiImpl<NostrSdkWire> {
558574
sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_UnsignedEvent(
559575
SseDeserializer deserializer);
560576

577+
@protected
578+
Duration sse_decode_Chrono_Duration(SseDeserializer deserializer);
579+
561580
@protected
562581
Map<String, String> sse_decode_Map_String_String(
563582
SseDeserializer deserializer);
@@ -666,11 +685,24 @@ abstract class NostrSdkApiImplPlatform extends BaseApiImpl<NostrSdkWire> {
666685
@protected
667686
int sse_decode_i_32(SseDeserializer deserializer);
668687

688+
@protected
689+
PlatformInt64 sse_decode_i_64(SseDeserializer deserializer);
690+
691+
@protected
692+
List<Event>
693+
sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_Event(
694+
SseDeserializer deserializer);
695+
669696
@protected
670697
List<EventId>
671698
sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_EventId(
672699
SseDeserializer deserializer);
673700

701+
@protected
702+
List<Filter>
703+
sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_Filter(
704+
SseDeserializer deserializer);
705+
674706
@protected
675707
List<PublicKey>
676708
sse_decode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_PublicKey(
@@ -887,6 +919,9 @@ abstract class NostrSdkApiImplPlatform extends BaseApiImpl<NostrSdkWire> {
887919
sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_UnsignedEvent(
888920
UnsignedEvent self, SseSerializer serializer);
889921

922+
@protected
923+
void sse_encode_Chrono_Duration(Duration self, SseSerializer serializer);
924+
890925
@protected
891926
void sse_encode_Map_String_String(
892927
Map<String, String> self, SseSerializer serializer);
@@ -998,11 +1033,24 @@ abstract class NostrSdkApiImplPlatform extends BaseApiImpl<NostrSdkWire> {
9981033
@protected
9991034
void sse_encode_i_32(int self, SseSerializer serializer);
10001035

1036+
@protected
1037+
void sse_encode_i_64(PlatformInt64 self, SseSerializer serializer);
1038+
1039+
@protected
1040+
void
1041+
sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_Event(
1042+
List<Event> self, SseSerializer serializer);
1043+
10011044
@protected
10021045
void
10031046
sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_EventId(
10041047
List<EventId> self, SseSerializer serializer);
10051048

1049+
@protected
1050+
void
1051+
sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_Filter(
1052+
List<Filter> self, SseSerializer serializer);
1053+
10061054
@protected
10071055
void
10081056
sse_encode_list_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInner_PublicKey(

rust/Cargo.lock

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ codegen = ["dep:flutter_rust_bridge_codegen"]
1818

1919
[dependencies]
2020
anyhow = "1.0"
21-
flutter_rust_bridge = "=2.0.0"
21+
chrono = "0.4"
22+
flutter_rust_bridge = { version = "=2.0.0", features = ["anyhow", "chrono"] }
2223
flutter_rust_bridge_codegen = { version = "=2.0.0", optional = true }
2324
nostr-sdk = { git = "https://github.com/rust-nostr/nostr", rev = "c54427849014e8451af54a56664e633e4dc0fac1", default-features = false, features = ["all-nips", "tor"] }
2425

rust/src/api/client/mod.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// Distributed under the MIT software license
44

55
use anyhow::Result;
6+
use chrono::Duration;
67
use flutter_rust_bridge::frb;
78
use nostr_sdk::prelude::*;
89

@@ -15,6 +16,7 @@ use self::output::SendEventOutput;
1516
use super::protocol::event::_Event;
1617
use super::protocol::event::builder::_EventBuilder;
1718
use super::protocol::signer::_NostrSigner;
19+
use super::protocol::types::filter::_Filter;
1820

1921
#[frb(name = "Client")]
2022
pub struct _Client {
@@ -182,6 +184,21 @@ impl _Client {
182184
Ok(self.inner.disconnect().await?)
183185
}
184186

187+
/// Fetch events from relays
188+
///
189+
/// If `gossip` is enabled (see [`Options::gossip`]) the events will be requested also to
190+
/// NIP65 relays (automatically discovered) of public keys included in filters (if any).
191+
// TODO: return `Events` struct
192+
pub async fn fetch_events(
193+
&self,
194+
filters: Vec<_Filter>,
195+
timeout: Duration,
196+
) -> Result<Vec<_Event>> {
197+
let filters = filters.into_iter().map(|f| f.inner).collect();
198+
let events = self.inner.fetch_events(filters, timeout.to_std()?).await?;
199+
Ok(events.into_iter().map(|e| e.into()).collect())
200+
}
201+
185202
/// Send event
186203
///
187204
/// Send `Event` to all relays with `WRITE` flag.

0 commit comments

Comments
 (0)