@libp2p/kad-dht 10.0.14 → 10.0.15-0b4a2ee79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -5
- package/dist/index.min.js +20 -20
- package/dist/src/content-fetching/index.d.ts.map +1 -1
- package/dist/src/content-fetching/index.js +1 -2
- package/dist/src/content-fetching/index.js.map +1 -1
- package/dist/src/content-routing/index.d.ts.map +1 -1
- package/dist/src/content-routing/index.js +3 -6
- package/dist/src/content-routing/index.js.map +1 -1
- package/dist/src/dual-kad-dht.d.ts +1 -0
- package/dist/src/dual-kad-dht.d.ts.map +1 -1
- package/dist/src/dual-kad-dht.js +5 -5
- package/dist/src/dual-kad-dht.js.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/kad-dht.d.ts.map +1 -1
- package/dist/src/kad-dht.js +3 -4
- package/dist/src/kad-dht.js.map +1 -1
- package/dist/src/message/index.d.ts +2 -0
- package/dist/src/message/index.d.ts.map +1 -1
- package/dist/src/message/index.js +7 -2
- package/dist/src/message/index.js.map +1 -1
- package/dist/src/network.d.ts +3 -4
- package/dist/src/network.d.ts.map +1 -1
- package/dist/src/network.js +11 -25
- package/dist/src/network.js.map +1 -1
- package/dist/src/peer-routing/index.d.ts +2 -1
- package/dist/src/peer-routing/index.d.ts.map +1 -1
- package/dist/src/peer-routing/index.js +15 -17
- package/dist/src/peer-routing/index.js.map +1 -1
- package/dist/src/providers.d.ts +4 -1
- package/dist/src/providers.d.ts.map +1 -1
- package/dist/src/providers.js +17 -17
- package/dist/src/providers.js.map +1 -1
- package/dist/src/query/manager.d.ts +5 -2
- package/dist/src/query/manager.d.ts.map +1 -1
- package/dist/src/query/manager.js +13 -12
- package/dist/src/query/manager.js.map +1 -1
- package/dist/src/query/query-path.d.ts +1 -1
- package/dist/src/query/query-path.d.ts.map +1 -1
- package/dist/src/query/query-path.js +2 -59
- package/dist/src/query/query-path.js.map +1 -1
- package/dist/src/query/utils.d.ts +7 -0
- package/dist/src/query/utils.d.ts.map +1 -0
- package/dist/src/query/utils.js +53 -0
- package/dist/src/query/utils.js.map +1 -0
- package/dist/src/query-self.d.ts +3 -1
- package/dist/src/query-self.d.ts.map +1 -1
- package/dist/src/query-self.js +4 -5
- package/dist/src/query-self.js.map +1 -1
- package/dist/src/routing-table/index.d.ts +2 -0
- package/dist/src/routing-table/index.d.ts.map +1 -1
- package/dist/src/routing-table/index.js +1 -2
- package/dist/src/routing-table/index.js.map +1 -1
- package/dist/src/routing-table/refresh.d.ts +5 -1
- package/dist/src/routing-table/refresh.d.ts.map +1 -1
- package/dist/src/routing-table/refresh.js +2 -3
- package/dist/src/routing-table/refresh.js.map +1 -1
- package/dist/src/rpc/handlers/add-provider.d.ts +6 -1
- package/dist/src/rpc/handlers/add-provider.d.ts.map +1 -1
- package/dist/src/rpc/handlers/add-provider.js +9 -10
- package/dist/src/rpc/handlers/add-provider.js.map +1 -1
- package/dist/src/rpc/handlers/find-node.d.ts +5 -1
- package/dist/src/rpc/handlers/find-node.d.ts.map +1 -1
- package/dist/src/rpc/handlers/find-node.js +11 -10
- package/dist/src/rpc/handlers/find-node.js.map +1 -1
- package/dist/src/rpc/handlers/get-providers.d.ts +4 -1
- package/dist/src/rpc/handlers/get-providers.d.ts.map +1 -1
- package/dist/src/rpc/handlers/get-providers.js +8 -9
- package/dist/src/rpc/handlers/get-providers.js.map +1 -1
- package/dist/src/rpc/handlers/get-value.d.ts +5 -1
- package/dist/src/rpc/handlers/get-value.d.ts.map +1 -1
- package/dist/src/rpc/handlers/get-value.js +16 -15
- package/dist/src/rpc/handlers/get-value.js.map +1 -1
- package/dist/src/rpc/handlers/ping.d.ts +6 -0
- package/dist/src/rpc/handlers/ping.d.ts.map +1 -1
- package/dist/src/rpc/handlers/ping.js +5 -3
- package/dist/src/rpc/handlers/ping.js.map +1 -1
- package/dist/src/rpc/handlers/put-value.d.ts +3 -1
- package/dist/src/rpc/handlers/put-value.d.ts.map +1 -1
- package/dist/src/rpc/handlers/put-value.js +2 -3
- package/dist/src/rpc/handlers/put-value.js.map +1 -1
- package/dist/src/rpc/index.d.ts.map +1 -1
- package/dist/src/rpc/index.js +3 -4
- package/dist/src/rpc/index.js.map +1 -1
- package/dist/src/topology-listener.d.ts.map +1 -1
- package/dist/src/topology-listener.js +1 -2
- package/dist/src/topology-listener.js.map +1 -1
- package/package.json +23 -22
- package/src/content-fetching/index.ts +2 -4
- package/src/content-routing/index.ts +4 -7
- package/src/dual-kad-dht.ts +6 -6
- package/src/index.ts +2 -1
- package/src/kad-dht.ts +4 -4
- package/src/message/index.ts +9 -2
- package/src/network.ts +14 -44
- package/src/peer-routing/index.ts +17 -19
- package/src/providers.ts +19 -18
- package/src/query/manager.ts +18 -16
- package/src/query/query-path.ts +3 -72
- package/src/query/utils.ts +65 -0
- package/src/query-self.ts +6 -5
- package/src/routing-table/index.ts +3 -3
- package/src/routing-table/refresh.ts +7 -4
- package/src/rpc/handlers/add-provider.ts +13 -10
- package/src/rpc/handlers/find-node.ts +13 -11
- package/src/rpc/handlers/get-providers.ts +10 -10
- package/src/rpc/handlers/get-value.ts +18 -17
- package/src/rpc/handlers/ping.ts +11 -3
- package/src/rpc/handlers/put-value.ts +4 -3
- package/src/rpc/index.ts +4 -4
- package/src/topology-listener.ts +2 -3
- package/dist/typedoc-urls.json +0 -55
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { TypedEventEmitter } from '@libp2p/interface/events'
|
|
2
|
-
import { logger } from '@libp2p/logger'
|
|
3
2
|
import { PeerSet } from '@libp2p/peer-collections'
|
|
4
3
|
import Queue from 'p-queue'
|
|
5
4
|
import * as utils from '../utils.js'
|
|
6
5
|
import { KBucket, type PingEventDetails } from './k-bucket.js'
|
|
6
|
+
import type { ComponentLogger, Logger } from '@libp2p/interface'
|
|
7
7
|
import type { Metric, Metrics } from '@libp2p/interface/metrics'
|
|
8
8
|
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
9
9
|
import type { PeerStore } from '@libp2p/interface/peer-store'
|
|
10
10
|
import type { Startable } from '@libp2p/interface/startable'
|
|
11
11
|
import type { ConnectionManager } from '@libp2p/interface-internal/connection-manager'
|
|
12
|
-
import type { Logger } from '@libp2p/logger'
|
|
13
12
|
|
|
14
13
|
export const KAD_CLOSE_TAG_NAME = 'kad-close'
|
|
15
14
|
export const KAD_CLOSE_TAG_VALUE = 50
|
|
@@ -32,6 +31,7 @@ export interface RoutingTableComponents {
|
|
|
32
31
|
peerStore: PeerStore
|
|
33
32
|
connectionManager: ConnectionManager
|
|
34
33
|
metrics?: Metrics
|
|
34
|
+
logger: ComponentLogger
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
export interface RoutingTableEvents {
|
|
@@ -69,7 +69,7 @@ export class RoutingTable extends TypedEventEmitter<RoutingTableEvents> implemen
|
|
|
69
69
|
const { kBucketSize, pingTimeout, lan, pingConcurrency, protocol, tagName, tagValue } = init
|
|
70
70
|
|
|
71
71
|
this.components = components
|
|
72
|
-
this.log = logger(`libp2p:kad-dht:${lan ? 'lan' : 'wan'}:routing-table`)
|
|
72
|
+
this.log = components.logger.forComponent(`libp2p:kad-dht:${lan ? 'lan' : 'wan'}:routing-table`)
|
|
73
73
|
this.kBucketSize = kBucketSize ?? KBUCKET_SIZE
|
|
74
74
|
this.pingTimeout = pingTimeout ?? PING_TIMEOUT
|
|
75
75
|
this.pingConcurrency = pingConcurrency ?? PING_CONCURRENCY
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { randomBytes } from '@libp2p/crypto'
|
|
2
|
-
import { logger } from '@libp2p/logger'
|
|
3
2
|
import { peerIdFromBytes } from '@libp2p/peer-id'
|
|
4
3
|
import length from 'it-length'
|
|
5
4
|
import { sha256 } from 'multiformats/hashes/sha2'
|
|
@@ -8,14 +7,18 @@ import { TABLE_REFRESH_INTERVAL, TABLE_REFRESH_QUERY_TIMEOUT } from '../constant
|
|
|
8
7
|
import GENERATED_PREFIXES from './generated-prefix-list.js'
|
|
9
8
|
import type { RoutingTable } from './index.js'
|
|
10
9
|
import type { PeerRouting } from '../peer-routing/index.js'
|
|
10
|
+
import type { ComponentLogger, Logger } from '@libp2p/interface'
|
|
11
11
|
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
12
|
-
import type { Logger } from '@libp2p/logger'
|
|
13
12
|
|
|
14
13
|
/**
|
|
15
14
|
* Cannot generate random KadIds longer than this + 1
|
|
16
15
|
*/
|
|
17
16
|
const MAX_COMMON_PREFIX_LENGTH = 15
|
|
18
17
|
|
|
18
|
+
export interface RoutingTableRefreshComponents {
|
|
19
|
+
logger: ComponentLogger
|
|
20
|
+
}
|
|
21
|
+
|
|
19
22
|
export interface RoutingTableRefreshInit {
|
|
20
23
|
peerRouting: PeerRouting
|
|
21
24
|
routingTable: RoutingTable
|
|
@@ -37,9 +40,9 @@ export class RoutingTableRefresh {
|
|
|
37
40
|
private readonly commonPrefixLengthRefreshedAt: Date[]
|
|
38
41
|
private refreshTimeoutId?: ReturnType<typeof setTimeout>
|
|
39
42
|
|
|
40
|
-
constructor (init: RoutingTableRefreshInit) {
|
|
43
|
+
constructor (components: RoutingTableRefreshComponents, init: RoutingTableRefreshInit) {
|
|
41
44
|
const { peerRouting, routingTable, refreshInterval, refreshQueryTimeout, lan } = init
|
|
42
|
-
this.log = logger(`libp2p:kad-dht:${lan ? 'lan' : 'wan'}:routing-table:refresh`)
|
|
45
|
+
this.log = components.logger.forComponent(`libp2p:kad-dht:${lan ? 'lan' : 'wan'}:routing-table:refresh`)
|
|
43
46
|
this.peerRouting = peerRouting
|
|
44
47
|
this.routingTable = routingTable
|
|
45
48
|
this.refreshInterval = refreshInterval ?? TABLE_REFRESH_INTERVAL
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { CodeError } from '@libp2p/interface/errors'
|
|
2
|
-
import { logger } from '@libp2p/logger'
|
|
3
2
|
import { CID } from 'multiformats/cid'
|
|
4
3
|
import type { Message } from '../../message/index.js'
|
|
5
4
|
import type { Providers } from '../../providers'
|
|
6
5
|
import type { DHTMessageHandler } from '../index.js'
|
|
6
|
+
import type { ComponentLogger, Logger } from '@libp2p/interface'
|
|
7
7
|
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
export interface AddProviderComponents {
|
|
10
|
+
logger: ComponentLogger
|
|
11
|
+
}
|
|
10
12
|
|
|
11
13
|
export interface AddProviderHandlerInit {
|
|
12
14
|
providers: Providers
|
|
@@ -14,14 +16,15 @@ export interface AddProviderHandlerInit {
|
|
|
14
16
|
|
|
15
17
|
export class AddProviderHandler implements DHTMessageHandler {
|
|
16
18
|
private readonly providers: Providers
|
|
19
|
+
private readonly log: Logger
|
|
17
20
|
|
|
18
|
-
constructor (init: AddProviderHandlerInit) {
|
|
19
|
-
|
|
20
|
-
this.providers = providers
|
|
21
|
+
constructor (components: AddProviderComponents, init: AddProviderHandlerInit) {
|
|
22
|
+
this.log = components.logger.forComponent('libp2p:kad-dht:rpc:handlers:add-provider')
|
|
23
|
+
this.providers = init.providers
|
|
21
24
|
}
|
|
22
25
|
|
|
23
26
|
async handle (peerId: PeerId, msg: Message): Promise<Message | undefined> {
|
|
24
|
-
log('start')
|
|
27
|
+
this.log('start')
|
|
25
28
|
|
|
26
29
|
if (msg.key == null || msg.key.length === 0) {
|
|
27
30
|
throw new CodeError('Missing key', 'ERR_MISSING_KEY')
|
|
@@ -36,23 +39,23 @@ export class AddProviderHandler implements DHTMessageHandler {
|
|
|
36
39
|
}
|
|
37
40
|
|
|
38
41
|
if (msg.providerPeers == null || msg.providerPeers.length === 0) {
|
|
39
|
-
log.error('no providers found in message')
|
|
42
|
+
this.log.error('no providers found in message')
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
await Promise.all(
|
|
43
46
|
msg.providerPeers.map(async (pi) => {
|
|
44
47
|
// Ignore providers not from the originator
|
|
45
48
|
if (!pi.id.equals(peerId)) {
|
|
46
|
-
log('invalid provider peer %p from %p', pi.id, peerId)
|
|
49
|
+
this.log('invalid provider peer %p from %p', pi.id, peerId)
|
|
47
50
|
return
|
|
48
51
|
}
|
|
49
52
|
|
|
50
53
|
if (pi.multiaddrs.length < 1) {
|
|
51
|
-
log('no valid addresses for provider %p. Ignore', peerId)
|
|
54
|
+
this.log('no valid addresses for provider %p. Ignore', peerId)
|
|
52
55
|
return
|
|
53
56
|
}
|
|
54
57
|
|
|
55
|
-
log('received provider %p for %s (addrs %s)', peerId, cid, pi.multiaddrs.map((m) => m.toString()))
|
|
58
|
+
this.log('received provider %p for %s (addrs %s)', peerId, cid, pi.multiaddrs.map((m) => m.toString()))
|
|
56
59
|
|
|
57
60
|
await this.providers.addProvider(cid, pi.id)
|
|
58
61
|
})
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { logger } from '@libp2p/logger'
|
|
2
1
|
import { protocols } from '@multiformats/multiaddr'
|
|
3
2
|
import { equals as uint8ArrayEquals } from 'uint8arrays'
|
|
4
3
|
import { Message } from '../../message/index.js'
|
|
@@ -8,12 +7,11 @@ import {
|
|
|
8
7
|
} from '../../utils.js'
|
|
9
8
|
import type { PeerRouting } from '../../peer-routing/index.js'
|
|
10
9
|
import type { DHTMessageHandler } from '../index.js'
|
|
10
|
+
import type { ComponentLogger, Logger } from '@libp2p/interface'
|
|
11
11
|
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
12
12
|
import type { PeerInfo } from '@libp2p/interface/peer-info'
|
|
13
13
|
import type { AddressManager } from '@libp2p/interface-internal/address-manager'
|
|
14
14
|
|
|
15
|
-
const log = logger('libp2p:kad-dht:rpc:handlers:find-node')
|
|
16
|
-
|
|
17
15
|
export interface FindNodeHandlerInit {
|
|
18
16
|
peerRouting: PeerRouting
|
|
19
17
|
lan: boolean
|
|
@@ -22,17 +20,22 @@ export interface FindNodeHandlerInit {
|
|
|
22
20
|
export interface FindNodeHandlerComponents {
|
|
23
21
|
peerId: PeerId
|
|
24
22
|
addressManager: AddressManager
|
|
23
|
+
logger: ComponentLogger
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
export class FindNodeHandler implements DHTMessageHandler {
|
|
28
27
|
private readonly peerRouting: PeerRouting
|
|
29
28
|
private readonly lan: boolean
|
|
30
|
-
private readonly
|
|
29
|
+
private readonly peerId: PeerId
|
|
30
|
+
private readonly addressManager: AddressManager
|
|
31
|
+
private readonly log: Logger
|
|
31
32
|
|
|
32
33
|
constructor (components: FindNodeHandlerComponents, init: FindNodeHandlerInit) {
|
|
33
34
|
const { peerRouting, lan } = init
|
|
34
35
|
|
|
35
|
-
this.
|
|
36
|
+
this.log = components.logger.forComponent('libp2p:kad-dht:rpc:handlers:find-node')
|
|
37
|
+
this.peerId = components.peerId
|
|
38
|
+
this.addressManager = components.addressManager
|
|
36
39
|
this.peerRouting = peerRouting
|
|
37
40
|
this.lan = Boolean(lan)
|
|
38
41
|
}
|
|
@@ -41,15 +44,14 @@ export class FindNodeHandler implements DHTMessageHandler {
|
|
|
41
44
|
* Process `FindNode` DHT messages
|
|
42
45
|
*/
|
|
43
46
|
async handle (peerId: PeerId, msg: Message): Promise<Message> {
|
|
44
|
-
log('incoming request from %p for peers closer to %b', peerId, msg.key)
|
|
47
|
+
this.log('incoming request from %p for peers closer to %b', peerId, msg.key)
|
|
45
48
|
|
|
46
49
|
let closer: PeerInfo[] = []
|
|
47
50
|
|
|
48
|
-
if (uint8ArrayEquals(this.
|
|
51
|
+
if (uint8ArrayEquals(this.peerId.toBytes(), msg.key)) {
|
|
49
52
|
closer = [{
|
|
50
|
-
id: this.
|
|
51
|
-
multiaddrs: this.
|
|
52
|
-
protocols: []
|
|
53
|
+
id: this.peerId,
|
|
54
|
+
multiaddrs: this.addressManager.getAddresses().map(ma => ma.decapsulateCode(protocols('p2p').code))
|
|
53
55
|
}]
|
|
54
56
|
} else {
|
|
55
57
|
closer = await this.peerRouting.getCloserPeersOffline(msg.key, peerId)
|
|
@@ -64,7 +66,7 @@ export class FindNodeHandler implements DHTMessageHandler {
|
|
|
64
66
|
if (closer.length > 0) {
|
|
65
67
|
response.closerPeers = closer
|
|
66
68
|
} else {
|
|
67
|
-
log('could not find any peers closer to %b than %p', msg.key, peerId)
|
|
69
|
+
this.log('could not find any peers closer to %b than %p', msg.key, peerId)
|
|
68
70
|
}
|
|
69
71
|
|
|
70
72
|
return response
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { CodeError } from '@libp2p/interface/errors'
|
|
2
|
-
import { logger } from '@libp2p/logger'
|
|
3
2
|
import { CID } from 'multiformats/cid'
|
|
4
3
|
import { Message } from '../../message/index.js'
|
|
5
4
|
import {
|
|
@@ -9,13 +8,12 @@ import {
|
|
|
9
8
|
import type { PeerRouting } from '../../peer-routing/index.js'
|
|
10
9
|
import type { Providers } from '../../providers.js'
|
|
11
10
|
import type { DHTMessageHandler } from '../index.js'
|
|
11
|
+
import type { ComponentLogger, Logger } from '@libp2p/interface'
|
|
12
12
|
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
13
13
|
import type { PeerInfo } from '@libp2p/interface/peer-info'
|
|
14
14
|
import type { PeerStore } from '@libp2p/interface/peer-store'
|
|
15
15
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
16
16
|
|
|
17
|
-
const log = logger('libp2p:kad-dht:rpc:handlers:get-providers')
|
|
18
|
-
|
|
19
17
|
export interface GetProvidersHandlerInit {
|
|
20
18
|
peerRouting: PeerRouting
|
|
21
19
|
providers: Providers
|
|
@@ -24,18 +22,21 @@ export interface GetProvidersHandlerInit {
|
|
|
24
22
|
|
|
25
23
|
export interface GetProvidersHandlerComponents {
|
|
26
24
|
peerStore: PeerStore
|
|
25
|
+
logger: ComponentLogger
|
|
27
26
|
}
|
|
28
27
|
|
|
29
28
|
export class GetProvidersHandler implements DHTMessageHandler {
|
|
30
|
-
private readonly components: GetProvidersHandlerComponents
|
|
31
29
|
private readonly peerRouting: PeerRouting
|
|
32
30
|
private readonly providers: Providers
|
|
33
31
|
private readonly lan: boolean
|
|
32
|
+
private readonly peerStore: PeerStore
|
|
33
|
+
private readonly log: Logger
|
|
34
34
|
|
|
35
35
|
constructor (components: GetProvidersHandlerComponents, init: GetProvidersHandlerInit) {
|
|
36
36
|
const { peerRouting, providers, lan } = init
|
|
37
37
|
|
|
38
|
-
this.
|
|
38
|
+
this.log = components.logger.forComponent('libp2p:kad-dht:rpc:handlers:get-providers')
|
|
39
|
+
this.peerStore = components.peerStore
|
|
39
40
|
this.peerRouting = peerRouting
|
|
40
41
|
this.providers = providers
|
|
41
42
|
this.lan = Boolean(lan)
|
|
@@ -49,7 +50,7 @@ export class GetProvidersHandler implements DHTMessageHandler {
|
|
|
49
50
|
throw new CodeError('Invalid CID', 'ERR_INVALID_CID')
|
|
50
51
|
}
|
|
51
52
|
|
|
52
|
-
log('%p asking for providers for %s', peerId, cid)
|
|
53
|
+
this.log('%p asking for providers for %s', peerId, cid)
|
|
53
54
|
|
|
54
55
|
const [peers, closer] = await Promise.all([
|
|
55
56
|
this.providers.getProviders(cid),
|
|
@@ -68,7 +69,7 @@ export class GetProvidersHandler implements DHTMessageHandler {
|
|
|
68
69
|
response.closerPeers = closerPeers
|
|
69
70
|
}
|
|
70
71
|
|
|
71
|
-
log('got %s providers %s closerPeers', providerPeers.length, closerPeers.length)
|
|
72
|
+
this.log('got %s providers %s closerPeers', providerPeers.length, closerPeers.length)
|
|
72
73
|
return response
|
|
73
74
|
}
|
|
74
75
|
|
|
@@ -82,12 +83,11 @@ export class GetProvidersHandler implements DHTMessageHandler {
|
|
|
82
83
|
|
|
83
84
|
for (const peerId of peerIds) {
|
|
84
85
|
try {
|
|
85
|
-
const peer = await this.
|
|
86
|
+
const peer = await this.peerStore.get(peerId)
|
|
86
87
|
|
|
87
88
|
const peerAfterFilter = addrFilter({
|
|
88
89
|
id: peerId,
|
|
89
|
-
multiaddrs: peer.addresses.map(({ multiaddr }) => multiaddr)
|
|
90
|
-
protocols: peer.protocols
|
|
90
|
+
multiaddrs: peer.addresses.map(({ multiaddr }) => multiaddr)
|
|
91
91
|
})
|
|
92
92
|
|
|
93
93
|
if (peerAfterFilter.multiaddrs.length > 0) {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { CodeError } from '@libp2p/interface/errors'
|
|
2
|
-
import { logger } from '@libp2p/logger'
|
|
3
2
|
import {
|
|
4
3
|
MAX_RECORD_AGE
|
|
5
4
|
} from '../../constants.js'
|
|
@@ -8,12 +7,11 @@ import { Libp2pRecord } from '../../record/index.js'
|
|
|
8
7
|
import { bufferToRecordKey, isPublicKeyKey, fromPublicKeyKey } from '../../utils.js'
|
|
9
8
|
import type { PeerRouting } from '../../peer-routing/index.js'
|
|
10
9
|
import type { DHTMessageHandler } from '../index.js'
|
|
10
|
+
import type { ComponentLogger, Logger } from '@libp2p/interface'
|
|
11
11
|
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
12
12
|
import type { PeerStore } from '@libp2p/interface/peer-store'
|
|
13
13
|
import type { Datastore } from 'interface-datastore'
|
|
14
14
|
|
|
15
|
-
const log = logger('libp2p:kad-dht:rpc:handlers:get-value')
|
|
16
|
-
|
|
17
15
|
export interface GetValueHandlerInit {
|
|
18
16
|
peerRouting: PeerRouting
|
|
19
17
|
}
|
|
@@ -21,23 +19,26 @@ export interface GetValueHandlerInit {
|
|
|
21
19
|
export interface GetValueHandlerComponents {
|
|
22
20
|
peerStore: PeerStore
|
|
23
21
|
datastore: Datastore
|
|
22
|
+
logger: ComponentLogger
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
export class GetValueHandler implements DHTMessageHandler {
|
|
27
|
-
private readonly
|
|
26
|
+
private readonly peerStore: PeerStore
|
|
27
|
+
private readonly datastore: Datastore
|
|
28
28
|
private readonly peerRouting: PeerRouting
|
|
29
|
+
private readonly log: Logger
|
|
29
30
|
|
|
30
31
|
constructor (components: GetValueHandlerComponents, init: GetValueHandlerInit) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
this.
|
|
34
|
-
this.peerRouting = peerRouting
|
|
32
|
+
this.log = components.logger.forComponent('libp2p:kad-dht:rpc:handlers:get-value')
|
|
33
|
+
this.peerStore = components.peerStore
|
|
34
|
+
this.datastore = components.datastore
|
|
35
|
+
this.peerRouting = init.peerRouting
|
|
35
36
|
}
|
|
36
37
|
|
|
37
38
|
async handle (peerId: PeerId, msg: Message): Promise<Message> {
|
|
38
39
|
const key = msg.key
|
|
39
40
|
|
|
40
|
-
log('%p asked for key %b', peerId, key)
|
|
41
|
+
this.log('%p asked for key %b', peerId, key)
|
|
41
42
|
|
|
42
43
|
if (key == null || key.length === 0) {
|
|
43
44
|
throw new CodeError('Invalid key', 'ERR_INVALID_KEY')
|
|
@@ -46,12 +47,12 @@ export class GetValueHandler implements DHTMessageHandler {
|
|
|
46
47
|
const response = new Message(MESSAGE_TYPE.GET_VALUE, key, msg.clusterLevel)
|
|
47
48
|
|
|
48
49
|
if (isPublicKeyKey(key)) {
|
|
49
|
-
log('is public key')
|
|
50
|
+
this.log('is public key')
|
|
50
51
|
const idFromKey = fromPublicKeyKey(key)
|
|
51
52
|
let pubKey: Uint8Array | undefined
|
|
52
53
|
|
|
53
54
|
try {
|
|
54
|
-
const peer = await this.
|
|
55
|
+
const peer = await this.peerStore.get(idFromKey)
|
|
55
56
|
|
|
56
57
|
if (peer.id.publicKey == null) {
|
|
57
58
|
throw new CodeError('No public key found in key book', 'ERR_NOT_FOUND')
|
|
@@ -65,7 +66,7 @@ export class GetValueHandler implements DHTMessageHandler {
|
|
|
65
66
|
}
|
|
66
67
|
|
|
67
68
|
if (pubKey != null) {
|
|
68
|
-
log('returning found public key')
|
|
69
|
+
this.log('returning found public key')
|
|
69
70
|
response.record = new Libp2pRecord(key, pubKey, new Date())
|
|
70
71
|
return response
|
|
71
72
|
}
|
|
@@ -77,12 +78,12 @@ export class GetValueHandler implements DHTMessageHandler {
|
|
|
77
78
|
])
|
|
78
79
|
|
|
79
80
|
if (record != null) {
|
|
80
|
-
log('had record for %b in local datastore', key)
|
|
81
|
+
this.log('had record for %b in local datastore', key)
|
|
81
82
|
response.record = record
|
|
82
83
|
}
|
|
83
84
|
|
|
84
85
|
if (closer.length > 0) {
|
|
85
|
-
log('had %s closer peers in routing table', closer.length)
|
|
86
|
+
this.log('had %s closer peers in routing table', closer.length)
|
|
86
87
|
response.closerPeers = closer
|
|
87
88
|
}
|
|
88
89
|
|
|
@@ -96,13 +97,13 @@ export class GetValueHandler implements DHTMessageHandler {
|
|
|
96
97
|
* - it was received less than `MAX_RECORD_AGE` ago.
|
|
97
98
|
*/
|
|
98
99
|
async _checkLocalDatastore (key: Uint8Array): Promise<Libp2pRecord | undefined> {
|
|
99
|
-
log('checkLocalDatastore looking for %b', key)
|
|
100
|
+
this.log('checkLocalDatastore looking for %b', key)
|
|
100
101
|
const dsKey = bufferToRecordKey(key)
|
|
101
102
|
|
|
102
103
|
// Fetch value from ds
|
|
103
104
|
let rawRecord
|
|
104
105
|
try {
|
|
105
|
-
rawRecord = await this.
|
|
106
|
+
rawRecord = await this.datastore.get(dsKey)
|
|
106
107
|
} catch (err: any) {
|
|
107
108
|
if (err.code === 'ERR_NOT_FOUND') {
|
|
108
109
|
return undefined
|
|
@@ -121,7 +122,7 @@ export class GetValueHandler implements DHTMessageHandler {
|
|
|
121
122
|
if (record.timeReceived == null ||
|
|
122
123
|
Date.now() - record.timeReceived.getTime() > MAX_RECORD_AGE) {
|
|
123
124
|
// If record is bad delete it and return
|
|
124
|
-
await this.
|
|
125
|
+
await this.datastore.delete(dsKey)
|
|
125
126
|
return undefined
|
|
126
127
|
}
|
|
127
128
|
|
package/src/rpc/handlers/ping.ts
CHANGED
|
@@ -1,13 +1,21 @@
|
|
|
1
|
-
import { logger } from '@libp2p/logger'
|
|
2
1
|
import type { Message } from '../../message/index.js'
|
|
3
2
|
import type { DHTMessageHandler } from '../index.js'
|
|
3
|
+
import type { ComponentLogger, Logger } from '@libp2p/interface'
|
|
4
4
|
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
export interface PingComponents {
|
|
7
|
+
logger: ComponentLogger
|
|
8
|
+
}
|
|
7
9
|
|
|
8
10
|
export class PingHandler implements DHTMessageHandler {
|
|
11
|
+
private readonly log: Logger
|
|
12
|
+
|
|
13
|
+
constructor (components: PingComponents) {
|
|
14
|
+
this.log = components.logger.forComponent('libp2p:kad-dht:rpc:handlers:ping')
|
|
15
|
+
}
|
|
16
|
+
|
|
9
17
|
async handle (peerId: PeerId, msg: Message): Promise<Message> {
|
|
10
|
-
log('ping from %p', peerId)
|
|
18
|
+
this.log('ping from %p', peerId)
|
|
11
19
|
return msg
|
|
12
20
|
}
|
|
13
21
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { CodeError } from '@libp2p/interface/errors'
|
|
2
|
-
import { type Logger, logger } from '@libp2p/logger'
|
|
3
2
|
import { verifyRecord } from '../../record/validators.js'
|
|
4
3
|
import { bufferToRecordKey } from '../../utils.js'
|
|
5
4
|
import type { Validators } from '../../index.js'
|
|
6
5
|
import type { Message } from '../../message/index.js'
|
|
7
6
|
import type { DHTMessageHandler } from '../index.js'
|
|
7
|
+
import type { ComponentLogger, Logger } from '@libp2p/interface'
|
|
8
8
|
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
9
9
|
import type { Datastore } from 'interface-datastore'
|
|
10
10
|
|
|
@@ -14,18 +14,19 @@ export interface PutValueHandlerInit {
|
|
|
14
14
|
|
|
15
15
|
export interface PutValueHandlerComponents {
|
|
16
16
|
datastore: Datastore
|
|
17
|
+
logger: ComponentLogger
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
export class PutValueHandler implements DHTMessageHandler {
|
|
20
|
-
private readonly log: Logger
|
|
21
21
|
private readonly components: PutValueHandlerComponents
|
|
22
22
|
private readonly validators: Validators
|
|
23
|
+
private readonly log: Logger
|
|
23
24
|
|
|
24
25
|
constructor (components: PutValueHandlerComponents, init: PutValueHandlerInit) {
|
|
25
26
|
const { validators } = init
|
|
26
27
|
|
|
27
28
|
this.components = components
|
|
28
|
-
this.log = logger('libp2p:kad-dht:rpc:handlers:put-value')
|
|
29
|
+
this.log = components.logger.forComponent('libp2p:kad-dht:rpc:handlers:put-value')
|
|
29
30
|
this.validators = validators
|
|
30
31
|
}
|
|
31
32
|
|
package/src/rpc/index.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { type Logger, logger } from '@libp2p/logger'
|
|
2
1
|
import * as lp from 'it-length-prefixed'
|
|
3
2
|
import { pipe } from 'it-pipe'
|
|
4
3
|
import { Message, MESSAGE_TYPE } from '../message/index.js'
|
|
@@ -12,6 +11,7 @@ import type { Validators } from '../index.js'
|
|
|
12
11
|
import type { PeerRouting } from '../peer-routing'
|
|
13
12
|
import type { Providers } from '../providers'
|
|
14
13
|
import type { RoutingTable } from '../routing-table'
|
|
14
|
+
import type { Logger } from '@libp2p/interface'
|
|
15
15
|
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
16
16
|
import type { IncomingStreamData } from '@libp2p/interface-internal/registrar'
|
|
17
17
|
|
|
@@ -39,15 +39,15 @@ export class RPC {
|
|
|
39
39
|
constructor (components: RPCComponents, init: RPCInit) {
|
|
40
40
|
const { providers, peerRouting, validators, lan } = init
|
|
41
41
|
|
|
42
|
-
this.log = logger('libp2p:kad-dht:rpc')
|
|
42
|
+
this.log = components.logger.forComponent('libp2p:kad-dht:rpc')
|
|
43
43
|
this.routingTable = init.routingTable
|
|
44
44
|
this.handlers = {
|
|
45
45
|
[MESSAGE_TYPE.GET_VALUE]: new GetValueHandler(components, { peerRouting }),
|
|
46
46
|
[MESSAGE_TYPE.PUT_VALUE]: new PutValueHandler(components, { validators }),
|
|
47
47
|
[MESSAGE_TYPE.FIND_NODE]: new FindNodeHandler(components, { peerRouting, lan }),
|
|
48
|
-
[MESSAGE_TYPE.ADD_PROVIDER]: new AddProviderHandler({ providers }),
|
|
48
|
+
[MESSAGE_TYPE.ADD_PROVIDER]: new AddProviderHandler(components, { providers }),
|
|
49
49
|
[MESSAGE_TYPE.GET_PROVIDERS]: new GetProvidersHandler(components, { peerRouting, providers, lan }),
|
|
50
|
-
[MESSAGE_TYPE.PING]: new PingHandler()
|
|
50
|
+
[MESSAGE_TYPE.PING]: new PingHandler(components)
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
|
package/src/topology-listener.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { CustomEvent, TypedEventEmitter } from '@libp2p/interface/events'
|
|
2
|
-
import { logger } from '@libp2p/logger'
|
|
3
2
|
import type { KadDHTComponents } from '.'
|
|
3
|
+
import type { Logger } from '@libp2p/interface'
|
|
4
4
|
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
5
5
|
import type { Startable } from '@libp2p/interface/startable'
|
|
6
|
-
import type { Logger } from '@libp2p/logger'
|
|
7
6
|
|
|
8
7
|
export interface TopologyListenerInit {
|
|
9
8
|
protocol: string
|
|
@@ -30,7 +29,7 @@ export class TopologyListener extends TypedEventEmitter<TopologyListenerEvents>
|
|
|
30
29
|
const { protocol, lan } = init
|
|
31
30
|
|
|
32
31
|
this.components = components
|
|
33
|
-
this.log = logger(`libp2p:kad-dht:topology-listener:${lan ? 'lan' : 'wan'}`)
|
|
32
|
+
this.log = components.logger.forComponent(`libp2p:kad-dht:topology-listener:${lan ? 'lan' : 'wan'}`)
|
|
34
33
|
this.running = false
|
|
35
34
|
this.protocol = protocol
|
|
36
35
|
}
|
package/dist/typedoc-urls.json
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"EventTypes": "https://libp2p.github.io/js-libp2p/enums/_libp2p_kad_dht.EventTypes.html",
|
|
3
|
-
".:EventTypes": "https://libp2p.github.io/js-libp2p/enums/_libp2p_kad_dht.EventTypes.html",
|
|
4
|
-
"MessageType": "https://libp2p.github.io/js-libp2p/enums/_libp2p_kad_dht.MessageType.html",
|
|
5
|
-
".:MessageType": "https://libp2p.github.io/js-libp2p/enums/_libp2p_kad_dht.MessageType.html",
|
|
6
|
-
"Record": "https://libp2p.github.io/js-libp2p/classes/_libp2p_kad_dht.Record.html",
|
|
7
|
-
"AddPeerEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.AddPeerEvent.html",
|
|
8
|
-
".:AddPeerEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.AddPeerEvent.html",
|
|
9
|
-
"DHTRecord": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.DHTRecord.html",
|
|
10
|
-
".:DHTRecord": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.DHTRecord.html",
|
|
11
|
-
"DialPeerEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.DialPeerEvent.html",
|
|
12
|
-
".:DialPeerEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.DialPeerEvent.html",
|
|
13
|
-
"DualKadDHT": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.DualKadDHT.html",
|
|
14
|
-
".:DualKadDHT": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.DualKadDHT.html",
|
|
15
|
-
"FinalPeerEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.FinalPeerEvent.html",
|
|
16
|
-
".:FinalPeerEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.FinalPeerEvent.html",
|
|
17
|
-
"KadDHT": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.KadDHT.html",
|
|
18
|
-
".:KadDHT": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.KadDHT.html",
|
|
19
|
-
"KadDHTComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.KadDHTComponents.html",
|
|
20
|
-
".:KadDHTComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.KadDHTComponents.html",
|
|
21
|
-
"KadDHTInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.KadDHTInit.html",
|
|
22
|
-
".:KadDHTInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.KadDHTInit.html",
|
|
23
|
-
"PeerResponseEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.PeerResponseEvent.html",
|
|
24
|
-
".:PeerResponseEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.PeerResponseEvent.html",
|
|
25
|
-
"ProviderEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.ProviderEvent.html",
|
|
26
|
-
".:ProviderEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.ProviderEvent.html",
|
|
27
|
-
"QueryErrorEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.QueryErrorEvent.html",
|
|
28
|
-
".:QueryErrorEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.QueryErrorEvent.html",
|
|
29
|
-
"QueryOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.QueryOptions.html",
|
|
30
|
-
".:QueryOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.QueryOptions.html",
|
|
31
|
-
"RoutingTable": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.RoutingTable.html",
|
|
32
|
-
".:RoutingTable": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.RoutingTable.html",
|
|
33
|
-
"SelectFn": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.SelectFn.html",
|
|
34
|
-
".:SelectFn": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.SelectFn.html",
|
|
35
|
-
"SendQueryEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.SendQueryEvent.html",
|
|
36
|
-
".:SendQueryEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.SendQueryEvent.html",
|
|
37
|
-
"SingleKadDHT": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.SingleKadDHT.html",
|
|
38
|
-
".:SingleKadDHT": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.SingleKadDHT.html",
|
|
39
|
-
"ValidateFn": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.ValidateFn.html",
|
|
40
|
-
".:ValidateFn": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.ValidateFn.html",
|
|
41
|
-
"ValueEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.ValueEvent.html",
|
|
42
|
-
".:ValueEvent": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_kad_dht.ValueEvent.html",
|
|
43
|
-
"DHTProgressEvents": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad_dht.DHTProgressEvents.html",
|
|
44
|
-
".:DHTProgressEvents": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad_dht.DHTProgressEvents.html",
|
|
45
|
-
"MessageName": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad_dht.MessageName.html",
|
|
46
|
-
".:MessageName": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad_dht.MessageName.html",
|
|
47
|
-
"QueryEvent": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad_dht.QueryEvent.html",
|
|
48
|
-
".:QueryEvent": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad_dht.QueryEvent.html",
|
|
49
|
-
"Selectors": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad_dht.Selectors.html",
|
|
50
|
-
".:Selectors": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad_dht.Selectors.html",
|
|
51
|
-
"Validators": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad_dht.Validators.html",
|
|
52
|
-
".:Validators": "https://libp2p.github.io/js-libp2p/types/_libp2p_kad_dht.Validators.html",
|
|
53
|
-
"kadDHT": "https://libp2p.github.io/js-libp2p/functions/_libp2p_kad_dht.kadDHT-1.html",
|
|
54
|
-
".:kadDHT": "https://libp2p.github.io/js-libp2p/functions/_libp2p_kad_dht.kadDHT-1.html"
|
|
55
|
-
}
|