@@ -4,15 +4,15 @@ use std::time::Duration;
4
4
5
5
use js_sys:: Array ;
6
6
use serde:: { Deserialize , Serialize } ;
7
- use serde_wasm_bindgen:: to_value;
8
7
use tracing:: { debug, error} ;
9
8
use wasm_bindgen:: prelude:: * ;
10
9
use web_sys:: BroadcastChannel ;
11
10
11
+ use celestia_types:: ExtendedHeader ;
12
12
use lumina_node:: blockstore:: IndexedDbBlockstore ;
13
13
use lumina_node:: network;
14
14
use lumina_node:: node:: NodeBuilder ;
15
- use lumina_node:: store:: IndexedDbStore ;
15
+ use lumina_node:: store:: { IndexedDbStore , SamplingMetadata } ;
16
16
17
17
use crate :: commands:: { CheckableResponseExt , NodeCommand , SingleHeaderQuery } ;
18
18
use crate :: error:: { Context , Result } ;
@@ -200,38 +200,32 @@ impl NodeClient {
200
200
/// Returns a javascript object with given structure:
201
201
/// https://docs.rs/celestia-types/latest/celestia_types/struct.ExtendedHeader.html
202
202
#[ wasm_bindgen( js_name = requestHeadHeader) ]
203
- pub async fn request_head_header ( & self ) -> Result < JsValue > {
203
+ pub async fn request_head_header ( & self ) -> Result < ExtendedHeader > {
204
204
let command = NodeCommand :: RequestHeader ( SingleHeaderQuery :: Head ) ;
205
205
let response = self . worker . exec ( command) . await ?;
206
- let header = response. into_header ( ) . check_variant ( ) ?;
207
-
208
- header. into ( )
206
+ response. into_header ( ) . check_variant ( ) ?
209
207
}
210
208
211
209
/// Request a header for the block with a given hash from the network.
212
210
///
213
211
/// Returns a javascript object with given structure:
214
212
/// https://docs.rs/celestia-types/latest/celestia_types/struct.ExtendedHeader.html
215
213
#[ wasm_bindgen( js_name = requestHeaderByHash) ]
216
- pub async fn request_header_by_hash ( & self , hash : & str ) -> Result < JsValue > {
214
+ pub async fn request_header_by_hash ( & self , hash : & str ) -> Result < ExtendedHeader > {
217
215
let command = NodeCommand :: RequestHeader ( SingleHeaderQuery :: ByHash ( hash. parse ( ) ?) ) ;
218
216
let response = self . worker . exec ( command) . await ?;
219
- let header = response. into_header ( ) . check_variant ( ) ?;
220
-
221
- header. into ( )
217
+ response. into_header ( ) . check_variant ( ) ?
222
218
}
223
219
224
220
/// Request a header for the block with a given height from the network.
225
221
///
226
222
/// Returns a javascript object with given structure:
227
223
/// https://docs.rs/celestia-types/latest/celestia_types/struct.ExtendedHeader.html
228
224
#[ wasm_bindgen( js_name = requestHeaderByHeight) ]
229
- pub async fn request_header_by_height ( & self , height : u64 ) -> Result < JsValue > {
225
+ pub async fn request_header_by_height ( & self , height : u64 ) -> Result < ExtendedHeader > {
230
226
let command = NodeCommand :: RequestHeader ( SingleHeaderQuery :: ByHeight ( height) ) ;
231
227
let response = self . worker . exec ( command) . await ?;
232
- let header = response. into_header ( ) . check_variant ( ) ?;
233
-
234
- header. into ( )
228
+ response. into_header ( ) . check_variant ( ) ?
235
229
}
236
230
237
231
/// Request headers in range (from, from + amount] from the network.
@@ -243,17 +237,12 @@ impl NodeClient {
243
237
#[ wasm_bindgen( js_name = requestVerifiedHeaders) ]
244
238
pub async fn request_verified_headers (
245
239
& self ,
246
- from_header : JsValue ,
240
+ from : ExtendedHeader ,
247
241
amount : u64 ,
248
- ) -> Result < Array > {
249
- let command = NodeCommand :: GetVerifiedHeaders {
250
- from : from_header,
251
- amount,
252
- } ;
242
+ ) -> Result < Vec < ExtendedHeader > > {
243
+ let command = NodeCommand :: GetVerifiedHeaders { from, amount } ;
253
244
let response = self . worker . exec ( command) . await ?;
254
- let headers = response. into_headers ( ) . check_variant ( ) ?;
255
-
256
- headers. into ( )
245
+ response. into_headers ( ) . check_variant ( ) ?
257
246
}
258
247
259
248
/// Get current header syncing info.
@@ -271,51 +260,43 @@ impl NodeClient {
271
260
/// Returns a javascript object with given structure:
272
261
/// https://docs.rs/celestia-types/latest/celestia_types/struct.ExtendedHeader.html
273
262
#[ wasm_bindgen( js_name = getNetworkHeadHeader) ]
274
- pub async fn get_network_head_header ( & self ) -> Result < JsValue > {
263
+ pub async fn get_network_head_header ( & self ) -> Result < Option < ExtendedHeader > > {
275
264
let command = NodeCommand :: LastSeenNetworkHead ;
276
265
let response = self . worker . exec ( command) . await ?;
277
- let header = response. into_last_seen_network_head ( ) . check_variant ( ) ?;
278
-
279
- header. into ( )
266
+ response. into_last_seen_network_head ( ) . check_variant ( ) ?
280
267
}
281
268
282
269
/// Get the latest locally synced header.
283
270
///
284
271
/// Returns a javascript object with given structure:
285
272
/// https://docs.rs/celestia-types/latest/celestia_types/struct.ExtendedHeader.html
286
273
#[ wasm_bindgen( js_name = getLocalHeadHeader) ]
287
- pub async fn get_local_head_header ( & self ) -> Result < JsValue > {
274
+ pub async fn get_local_head_header ( & self ) -> Result < ExtendedHeader > {
288
275
let command = NodeCommand :: GetHeader ( SingleHeaderQuery :: Head ) ;
289
276
let response = self . worker . exec ( command) . await ?;
290
- let header = response. into_header ( ) . check_variant ( ) ?;
291
-
292
- header. into ( )
277
+ response. into_header ( ) . check_variant ( ) ?
293
278
}
294
279
295
280
/// Get a synced header for the block with a given hash.
296
281
///
297
282
/// Returns a javascript object with given structure:
298
283
/// https://docs.rs/celestia-types/latest/celestia_types/struct.ExtendedHeader.html
299
284
#[ wasm_bindgen( js_name = getHeaderByHash) ]
300
- pub async fn get_header_by_hash ( & self , hash : & str ) -> Result < JsValue > {
285
+ pub async fn get_header_by_hash ( & self , hash : & str ) -> Result < ExtendedHeader > {
301
286
let command = NodeCommand :: GetHeader ( SingleHeaderQuery :: ByHash ( hash. parse ( ) ?) ) ;
302
287
let response = self . worker . exec ( command) . await ?;
303
- let header = response. into_header ( ) . check_variant ( ) ?;
304
-
305
- header. into ( )
288
+ response. into_header ( ) . check_variant ( ) ?
306
289
}
307
290
308
291
/// Get a synced header for the block with a given height.
309
292
///
310
293
/// Returns a javascript object with given structure:
311
294
/// https://docs.rs/celestia-types/latest/celestia_types/struct.ExtendedHeader.html
312
295
#[ wasm_bindgen( js_name = getHeaderByHeight) ]
313
- pub async fn get_header_by_height ( & self , height : u64 ) -> Result < JsValue > {
296
+ pub async fn get_header_by_height ( & self , height : u64 ) -> Result < ExtendedHeader > {
314
297
let command = NodeCommand :: GetHeader ( SingleHeaderQuery :: ByHeight ( height) ) ;
315
298
let response = self . worker . exec ( command) . await ?;
316
- let header = response. into_header ( ) . check_variant ( ) ?;
317
-
318
- header. into ( )
299
+ response. into_header ( ) . check_variant ( ) ?
319
300
}
320
301
321
302
/// Get synced headers from the given heights range.
@@ -335,28 +316,24 @@ impl NodeClient {
335
316
& self ,
336
317
start_height : Option < u64 > ,
337
318
end_height : Option < u64 > ,
338
- ) -> Result < Array > {
319
+ ) -> Result < Vec < ExtendedHeader > > {
339
320
let command = NodeCommand :: GetHeadersRange {
340
321
start_height,
341
322
end_height,
342
323
} ;
343
324
let response = self . worker . exec ( command) . await ?;
344
- let headers = response. into_headers ( ) . check_variant ( ) ?;
345
-
346
- headers. into ( )
325
+ response. into_headers ( ) . check_variant ( ) ?
347
326
}
348
327
349
328
/// Get data sampling metadata of an already sampled height.
350
329
///
351
330
/// Returns a javascript object with given structure:
352
331
/// https://docs.rs/lumina-node/latest/lumina_node/store/struct.SamplingMetadata.html
353
332
#[ wasm_bindgen( js_name = getSamplingMetadata) ]
354
- pub async fn get_sampling_metadata ( & self , height : u64 ) -> Result < JsValue > {
333
+ pub async fn get_sampling_metadata ( & self , height : u64 ) -> Result < Option < SamplingMetadata > > {
355
334
let command = NodeCommand :: GetSamplingMetadata { height } ;
356
335
let response = self . worker . exec ( command) . await ?;
357
- let metadata = response. into_sampling_metadata ( ) . check_variant ( ) ?;
358
-
359
- Ok ( to_value ( & metadata?) ?)
336
+ response. into_sampling_metadata ( ) . check_variant ( ) ?
360
337
}
361
338
362
339
/// Returns a [`BroadcastChannel`] for events generated by [`Node`].
@@ -438,7 +415,6 @@ mod tests {
438
415
use gloo_timers:: future:: sleep;
439
416
use libp2p:: { multiaddr:: Protocol , Multiaddr } ;
440
417
use rexie:: Rexie ;
441
- use serde_wasm_bindgen:: from_value;
442
418
use wasm_bindgen_futures:: spawn_local;
443
419
use wasm_bindgen_test:: wasm_bindgen_test;
444
420
use web_sys:: MessageChannel ;
@@ -460,8 +436,7 @@ mod tests {
460
436
assert_eq ! ( info. num_peers, 1 ) ;
461
437
462
438
let bridge_head_header = rpc_client. header_network_head ( ) . await . unwrap ( ) ;
463
- let head_header: ExtendedHeader =
464
- from_value ( client. request_head_header ( ) . await . unwrap ( ) ) . unwrap ( ) ;
439
+ let head_header: ExtendedHeader = client. request_head_header ( ) . await . unwrap ( ) ;
465
440
assert_eq ! ( head_header, bridge_head_header) ;
466
441
rpc_client
467
442
. p2p_close_peer ( & PeerId (
0 commit comments