@@ -7,6 +7,7 @@ import type {
7
7
PeerExchangeQueryParams ,
8
8
PeerInfo ,
9
9
} from "@waku/interfaces" ;
10
+ import { isDefined } from "@waku/utils" ;
10
11
import debug from "debug" ;
11
12
import all from "it-all" ;
12
13
import * as lp from "it-length-prefixed" ;
@@ -47,7 +48,9 @@ export class WakuPeerExchange extends BaseProtocol implements IPeerExchange {
47
48
/**
48
49
* Make a peer exchange query to a peer
49
50
*/
50
- async query ( params : PeerExchangeQueryParams ) : Promise < PeerInfo [ ] > {
51
+ async query (
52
+ params : PeerExchangeQueryParams
53
+ ) : Promise < PeerInfo [ ] | undefined > {
51
54
const { numPeers } = params ;
52
55
53
56
const rpcQuery = PeerExchangeRPC . createRequest ( {
@@ -72,28 +75,24 @@ export class WakuPeerExchange extends BaseProtocol implements IPeerExchange {
72
75
bytes . append ( chunk ) ;
73
76
} ) ;
74
77
75
- const decoded = PeerExchangeRPC . decode ( bytes ) . response ;
78
+ const { response } = PeerExchangeRPC . decode ( bytes ) ;
76
79
77
- if ( ! decoded ) {
78
- throw new Error ( "Failed to decode response" ) ;
80
+ if ( ! response ) {
81
+ log ( "PeerExchangeRPC message did not contains a `response` field" ) ;
82
+ return ;
79
83
}
80
84
81
- const enrs = await Promise . all (
82
- decoded . peerInfos . map (
83
- ( peerInfo ) => peerInfo . enr && EnrDecoder . fromRLP ( peerInfo . enr )
84
- )
85
+ return Promise . all (
86
+ response . peerInfos
87
+ . map ( ( peerInfo ) => peerInfo . enr )
88
+ . filter ( isDefined )
89
+ . map ( async ( enr ) => {
90
+ return { ENR : await EnrDecoder . fromRLP ( enr ) } ;
91
+ } )
85
92
) ;
86
-
87
- const peerInfos = enrs . map ( ( enr ) => {
88
- return {
89
- ENR : enr ,
90
- } ;
91
- } ) ;
92
-
93
- return peerInfos ;
94
93
} catch ( err ) {
95
94
log ( "Failed to decode push reply" , err ) ;
96
- throw new Error ( "Failed to decode push reply" ) ;
95
+ return ;
97
96
}
98
97
}
99
98
}
0 commit comments