@@ -4,14 +4,14 @@ import {
4
4
removePrivateAddresses ,
5
5
removePublicAddresses
6
6
} from '../../utils.js'
7
- import { pipe } from 'it-pipe'
7
+ import { equals as uint8ArrayEquals } from 'uint8arrays'
8
+ import { Components } from '@libp2p/interfaces/components'
9
+ import { protocols } from '@multiformats/multiaddr'
10
+ import type { Initializable } from '@libp2p/interfaces/components'
11
+ import type { PeerInfo } from '@libp2p/interfaces/peer-info'
8
12
import type { DHTMessageHandler } from '../index.js'
9
13
import type { PeerRouting } from '../../peer-routing/index.js'
10
14
import type { PeerId } from '@libp2p/interfaces/peer-id'
11
- import map from 'it-map'
12
- import filter from 'it-filter'
13
- import all from 'it-all'
14
- import type { Initializable } from '@libp2p/interfaces/components'
15
15
16
16
const log = logger ( 'libp2p:kad-dht:rpc:handlers:find-node' )
17
17
@@ -23,15 +23,16 @@ export interface FindNodeHandlerInit {
23
23
export class FindNodeHandler implements DHTMessageHandler , Initializable {
24
24
private readonly peerRouting : PeerRouting
25
25
private readonly lan : boolean
26
+ private components = new Components ( )
26
27
27
28
constructor ( init : FindNodeHandlerInit ) {
28
29
const { peerRouting, lan } = init
29
30
this . peerRouting = peerRouting
30
31
this . lan = Boolean ( lan )
31
32
}
32
33
33
- init ( ) : void {
34
-
34
+ init ( components : Components ) : void {
35
+ this . components = components
35
36
}
36
37
37
38
/**
@@ -40,14 +41,21 @@ export class FindNodeHandler implements DHTMessageHandler, Initializable {
40
41
async handle ( peerId : PeerId , msg : Message ) {
41
42
log ( 'incoming request from %p for peers closer to %b' , peerId , msg . key )
42
43
43
- const mapper = this . lan ? removePublicAddresses : removePrivateAddresses
44
+ let closer : PeerInfo [ ] = [ ]
45
+
46
+ if ( uint8ArrayEquals ( this . components . getPeerId ( ) . toBytes ( ) , msg . key ) ) {
47
+ closer = [ {
48
+ id : this . components . getPeerId ( ) ,
49
+ multiaddrs : this . components . getAddressManager ( ) . getAddresses ( ) . map ( ma => ma . decapsulateCode ( protocols ( 'p2p' ) . code ) ) ,
50
+ protocols : [ ]
51
+ } ]
52
+ } else {
53
+ closer = await this . peerRouting . getCloserPeersOffline ( msg . key , peerId )
54
+ }
44
55
45
- const closer = await pipe (
46
- await this . peerRouting . getCloserPeersOffline ( msg . key , peerId ) ,
47
- ( source ) => map ( source , mapper ) ,
48
- ( source ) => filter ( source , ( { multiaddrs } ) => multiaddrs . length > 0 ) ,
49
- async ( source ) => await all ( source )
50
- )
56
+ closer = closer
57
+ . map ( this . lan ? removePublicAddresses : removePrivateAddresses )
58
+ . filter ( ( { multiaddrs } ) => multiaddrs . length )
51
59
52
60
const response = new Message ( msg . type , new Uint8Array ( 0 ) , msg . clusterLevel )
53
61
0 commit comments