@@ -4,14 +4,14 @@ import {
44 removePrivateAddresses ,
55 removePublicAddresses
66} 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'
812import type { DHTMessageHandler } from '../index.js'
913import type { PeerRouting } from '../../peer-routing/index.js'
1014import 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'
1515
1616const log = logger ( 'libp2p:kad-dht:rpc:handlers:find-node' )
1717
@@ -23,15 +23,16 @@ export interface FindNodeHandlerInit {
2323export class FindNodeHandler implements DHTMessageHandler , Initializable {
2424 private readonly peerRouting : PeerRouting
2525 private readonly lan : boolean
26+ private components = new Components ( )
2627
2728 constructor ( init : FindNodeHandlerInit ) {
2829 const { peerRouting, lan } = init
2930 this . peerRouting = peerRouting
3031 this . lan = Boolean ( lan )
3132 }
3233
33- init ( ) : void {
34-
34+ init ( components : Components ) : void {
35+ this . components = components
3536 }
3637
3738 /**
@@ -40,14 +41,21 @@ export class FindNodeHandler implements DHTMessageHandler, Initializable {
4041 async handle ( peerId : PeerId , msg : Message ) {
4142 log ( 'incoming request from %p for peers closer to %b' , peerId , msg . key )
4243
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+ }
4455
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 )
5159
5260 const response = new Message ( msg . type , new Uint8Array ( 0 ) , msg . clusterLevel )
5361
0 commit comments