@libp2p/kad-dht 1.0.0 → 1.0.3

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.
Files changed (114) hide show
  1. package/dist/src/content-fetching/index.d.ts +6 -9
  2. package/dist/src/content-fetching/index.d.ts.map +1 -1
  3. package/dist/src/content-fetching/index.js +14 -11
  4. package/dist/src/content-fetching/index.js.map +1 -1
  5. package/dist/src/content-routing/index.d.ts +6 -9
  6. package/dist/src/content-routing/index.d.ts.map +1 -1
  7. package/dist/src/content-routing/index.js +15 -13
  8. package/dist/src/content-routing/index.js.map +1 -1
  9. package/dist/src/dual-kad-dht.d.ts +6 -6
  10. package/dist/src/dual-kad-dht.d.ts.map +1 -1
  11. package/dist/src/dual-kad-dht.js +9 -4
  12. package/dist/src/dual-kad-dht.js.map +1 -1
  13. package/dist/src/index.d.ts +14 -3
  14. package/dist/src/index.d.ts.map +1 -1
  15. package/dist/src/index.js +14 -12
  16. package/dist/src/index.js.map +1 -1
  17. package/dist/src/kad-dht.d.ts +14 -54
  18. package/dist/src/kad-dht.d.ts.map +1 -1
  19. package/dist/src/kad-dht.js +45 -48
  20. package/dist/src/kad-dht.js.map +1 -1
  21. package/dist/src/message/index.d.ts +3 -3
  22. package/dist/src/network.d.ts +9 -9
  23. package/dist/src/network.d.ts.map +1 -1
  24. package/dist/src/network.js +10 -6
  25. package/dist/src/network.js.map +1 -1
  26. package/dist/src/peer-list/index.d.ts +1 -1
  27. package/dist/src/peer-list/index.js +1 -1
  28. package/dist/src/peer-routing/index.d.ts +8 -10
  29. package/dist/src/peer-routing/index.d.ts.map +1 -1
  30. package/dist/src/peer-routing/index.js +18 -16
  31. package/dist/src/peer-routing/index.js.map +1 -1
  32. package/dist/src/providers.d.ts +6 -6
  33. package/dist/src/providers.d.ts.map +1 -1
  34. package/dist/src/providers.js +11 -7
  35. package/dist/src/providers.js.map +1 -1
  36. package/dist/src/query/events.d.ts +5 -5
  37. package/dist/src/query/manager.d.ts +6 -8
  38. package/dist/src/query/manager.d.ts.map +1 -1
  39. package/dist/src/query/manager.js +10 -7
  40. package/dist/src/query/manager.js.map +1 -1
  41. package/dist/src/query/query-path.d.ts.map +1 -1
  42. package/dist/src/query/query-path.js +2 -3
  43. package/dist/src/query/query-path.js.map +1 -1
  44. package/dist/src/query-self.d.ts +6 -6
  45. package/dist/src/query-self.d.ts.map +1 -1
  46. package/dist/src/query-self.js +8 -4
  47. package/dist/src/query-self.js.map +1 -1
  48. package/dist/src/routing-table/index.d.ts +10 -14
  49. package/dist/src/routing-table/index.d.ts.map +1 -1
  50. package/dist/src/routing-table/index.js +12 -10
  51. package/dist/src/routing-table/index.js.map +1 -1
  52. package/dist/src/routing-table/refresh.d.ts +5 -3
  53. package/dist/src/routing-table/refresh.d.ts.map +1 -1
  54. package/dist/src/routing-table/refresh.js +4 -2
  55. package/dist/src/routing-table/refresh.js.map +1 -1
  56. package/dist/src/rpc/handlers/add-provider.d.ts +5 -3
  57. package/dist/src/rpc/handlers/add-provider.d.ts.map +1 -1
  58. package/dist/src/rpc/handlers/add-provider.js +4 -2
  59. package/dist/src/rpc/handlers/add-provider.js.map +1 -1
  60. package/dist/src/rpc/handlers/find-node.d.ts +5 -3
  61. package/dist/src/rpc/handlers/find-node.d.ts.map +1 -1
  62. package/dist/src/rpc/handlers/find-node.js +4 -2
  63. package/dist/src/rpc/handlers/find-node.js.map +1 -1
  64. package/dist/src/rpc/handlers/get-providers.d.ts +8 -8
  65. package/dist/src/rpc/handlers/get-providers.d.ts.map +1 -1
  66. package/dist/src/rpc/handlers/get-providers.js +8 -4
  67. package/dist/src/rpc/handlers/get-providers.js.map +1 -1
  68. package/dist/src/rpc/handlers/get-value.d.ts +6 -9
  69. package/dist/src/rpc/handlers/get-value.d.ts.map +1 -1
  70. package/dist/src/rpc/handlers/get-value.js +10 -7
  71. package/dist/src/rpc/handlers/get-value.js.map +1 -1
  72. package/dist/src/rpc/handlers/ping.d.ts +3 -1
  73. package/dist/src/rpc/handlers/ping.d.ts.map +1 -1
  74. package/dist/src/rpc/handlers/ping.js +2 -0
  75. package/dist/src/rpc/handlers/ping.js.map +1 -1
  76. package/dist/src/rpc/handlers/put-value.d.ts +7 -8
  77. package/dist/src/rpc/handlers/put-value.d.ts.map +1 -1
  78. package/dist/src/rpc/handlers/put-value.js +10 -7
  79. package/dist/src/rpc/handlers/put-value.js.map +1 -1
  80. package/dist/src/rpc/index.d.ts +6 -10
  81. package/dist/src/rpc/index.d.ts.map +1 -1
  82. package/dist/src/rpc/index.js +14 -9
  83. package/dist/src/rpc/index.js.map +1 -1
  84. package/dist/src/topology-listener.d.ts +6 -6
  85. package/dist/src/topology-listener.d.ts.map +1 -1
  86. package/dist/src/topology-listener.js +9 -5
  87. package/dist/src/topology-listener.js.map +1 -1
  88. package/dist/src/utils.d.ts +3 -3
  89. package/package.json +21 -21
  90. package/src/content-fetching/index.ts +17 -19
  91. package/src/content-routing/index.ts +20 -23
  92. package/src/dual-kad-dht.ts +12 -9
  93. package/src/index.ts +22 -14
  94. package/src/kad-dht.ts +61 -119
  95. package/src/message/index.ts +4 -4
  96. package/src/network.ts +16 -14
  97. package/src/peer-list/index.ts +1 -1
  98. package/src/peer-routing/index.ts +23 -25
  99. package/src/providers.ts +14 -11
  100. package/src/query/events.ts +5 -5
  101. package/src/query/manager.ts +13 -14
  102. package/src/query/query-path.ts +2 -3
  103. package/src/query-self.ts +11 -9
  104. package/src/routing-table/index.ts +20 -23
  105. package/src/routing-table/refresh.ts +9 -4
  106. package/src/rpc/handlers/add-provider.ts +9 -4
  107. package/src/rpc/handlers/find-node.ts +9 -4
  108. package/src/rpc/handlers/get-providers.ts +13 -11
  109. package/src/rpc/handlers/get-value.ts +13 -15
  110. package/src/rpc/handlers/ping.ts +6 -1
  111. package/src/rpc/handlers/put-value.ts +14 -15
  112. package/src/rpc/index.ts +19 -18
  113. package/src/topology-listener.ts +12 -10
  114. package/src/utils.ts +3 -3
package/src/rpc/index.ts CHANGED
@@ -11,49 +11,50 @@ import { GetValueHandler } from './handlers/get-value.js'
11
11
  import { PingHandler } from './handlers/ping.js'
12
12
  import { PutValueHandler } from './handlers/put-value.js'
13
13
  import type { IncomingStreamData } from '@libp2p/interfaces/registrar'
14
- import type { KeyBook, AddressBook } from '@libp2p/interfaces/peer-store'
15
14
  import type { Providers } from '../providers'
16
15
  import type { PeerRouting } from '../peer-routing'
17
- import type { Datastore } from 'interface-datastore'
18
16
  import type { Validators } from '@libp2p/interfaces/dht'
17
+ import type { Components, Initializable } from '@libp2p/interfaces/components'
19
18
 
20
19
  export interface DHTMessageHandler {
21
20
  handle: (peerId: PeerId, msg: Message) => Promise<Message | undefined>
22
21
  }
23
22
 
24
- export interface RPCOptions {
25
- peerId: PeerId
23
+ export interface RPCInit {
26
24
  routingTable: RoutingTable
27
- keyBook: KeyBook
28
- addressBook: AddressBook
29
25
  providers: Providers
30
26
  peerRouting: PeerRouting
31
- datastore: Datastore
32
27
  validators: Validators
33
28
  lan: boolean
34
29
  }
35
30
 
36
- export class RPC {
37
- private readonly handlers: Record<number, DHTMessageHandler>
31
+ export class RPC implements Initializable {
32
+ private readonly handlers: Record<number, DHTMessageHandler & Initializable>
38
33
  private readonly routingTable: RoutingTable
39
34
  private readonly log: Logger
40
35
 
41
- constructor (options: RPCOptions) {
42
- const { keyBook, addressBook, providers, peerRouting, datastore, validators, lan, peerId } = options
36
+ constructor (init: RPCInit) {
37
+ const { providers, peerRouting, validators, lan } = init
43
38
 
44
- this.log = logger('libp2p:kad-dht:rpc:' + peerId.toString())
39
+ this.log = logger('libp2p:kad-dht:rpc')
45
40
 
46
- this.routingTable = options.routingTable
41
+ this.routingTable = init.routingTable
47
42
  this.handlers = {
48
- [MESSAGE_TYPE.GET_VALUE]: new GetValueHandler({ keyBook, peerRouting, datastore }),
49
- [MESSAGE_TYPE.PUT_VALUE]: new PutValueHandler({ peerId, validators, datastore }),
43
+ [MESSAGE_TYPE.GET_VALUE]: new GetValueHandler({ peerRouting }),
44
+ [MESSAGE_TYPE.PUT_VALUE]: new PutValueHandler({ validators }),
50
45
  [MESSAGE_TYPE.FIND_NODE]: new FindNodeHandler({ peerRouting, lan }),
51
46
  [MESSAGE_TYPE.ADD_PROVIDER]: new AddProviderHandler({ providers }),
52
- [MESSAGE_TYPE.GET_PROVIDERS]: new GetProvidersHandler({ peerRouting, providers, addressBook, lan }),
47
+ [MESSAGE_TYPE.GET_PROVIDERS]: new GetProvidersHandler({ peerRouting, providers, lan }),
53
48
  [MESSAGE_TYPE.PING]: new PingHandler()
54
49
  }
55
50
  }
56
51
 
52
+ init (components: Components): void {
53
+ for (const handler of Object.values(this.handlers)) {
54
+ handler.init(components)
55
+ }
56
+ }
57
+
57
58
  /**
58
59
  * Process incoming DHT messages
59
60
  */
@@ -78,9 +79,9 @@ export class RPC {
78
79
  /**
79
80
  * Handle incoming streams on the dht protocol
80
81
  */
81
- onIncomingStream (evt: CustomEvent<IncomingStreamData>) {
82
+ onIncomingStream (data: IncomingStreamData) {
82
83
  Promise.resolve().then(async () => {
83
- const { stream, connection } = evt.detail
84
+ const { stream, connection } = data
84
85
  const peerId = connection.remotePeer
85
86
 
86
87
  try {
@@ -1,13 +1,12 @@
1
1
  import { createTopology } from '@libp2p/topology'
2
2
  import { CustomEvent, EventEmitter } from '@libp2p/interfaces'
3
3
  import { logger } from '@libp2p/logger'
4
- import type { Registrar } from '@libp2p/interfaces/registrar'
5
4
  import type { Logger } from '@libp2p/logger'
6
5
  import type { Startable } from '@libp2p/interfaces'
7
6
  import type { PeerId } from '@libp2p/interfaces/peer-id'
7
+ import { Components, Initializable } from '@libp2p/interfaces/components'
8
8
 
9
- export interface TopologyListenerOptions {
10
- registrar: Registrar
9
+ export interface TopologyListenerInit {
11
10
  protocol: string
12
11
  lan: boolean
13
12
  }
@@ -19,24 +18,27 @@ export interface TopologyListenerEvents {
19
18
  /**
20
19
  * Receives notifications of new peers joining the network that support the DHT protocol
21
20
  */
22
- export class TopologyListener extends EventEmitter<TopologyListenerEvents> implements Startable {
21
+ export class TopologyListener extends EventEmitter<TopologyListenerEvents> implements Startable, Initializable {
23
22
  private readonly log: Logger
24
- private readonly registrar: Registrar
23
+ private components: Components = new Components()
25
24
  private readonly protocol: string
26
25
  private running: boolean
27
26
  private registrarId?: string
28
27
 
29
- constructor (options: TopologyListenerOptions) {
28
+ constructor (init: TopologyListenerInit) {
30
29
  super()
31
30
 
32
- const { registrar, protocol, lan } = options
31
+ const { protocol, lan } = init
33
32
 
34
33
  this.log = logger(`libp2p:kad-dht:topology-listener:${lan ? 'lan' : 'wan'}`)
35
34
  this.running = false
36
- this.registrar = registrar
37
35
  this.protocol = protocol
38
36
  }
39
37
 
38
+ init (components: Components): void {
39
+ this.components = components
40
+ }
41
+
40
42
  isStarted () {
41
43
  return this.running
42
44
  }
@@ -60,7 +62,7 @@ export class TopologyListener extends EventEmitter<TopologyListenerEvents> imple
60
62
  }))
61
63
  }
62
64
  })
63
- this.registrarId = await this.registrar.register(this.protocol, topology)
65
+ this.registrarId = await this.components.getRegistrar().register(this.protocol, topology)
64
66
  }
65
67
 
66
68
  /**
@@ -71,7 +73,7 @@ export class TopologyListener extends EventEmitter<TopologyListenerEvents> imple
71
73
 
72
74
  // unregister protocol and handlers
73
75
  if (this.registrarId != null) {
74
- this.registrar.unregister(this.registrarId)
76
+ this.components.getRegistrar().unregister(this.registrarId)
75
77
  this.registrarId = undefined
76
78
  }
77
79
  }
package/src/utils.ts CHANGED
@@ -5,7 +5,7 @@ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
5
5
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
6
6
  import { concat as uint8ArrayConcat } from 'uint8arrays/concat'
7
7
  import isPrivateIp from 'private-ip'
8
- import type { PeerData } from '@libp2p/interfaces/peer-data'
8
+ import type { PeerInfo } from '@libp2p/interfaces/peer-info'
9
9
  import { peerIdFromBytes } from '@libp2p/peer-id'
10
10
  import type { PeerId } from '@libp2p/interfaces/peer-id'
11
11
  import { RECORD_KEY_PREFIX } from './constants.js'
@@ -13,7 +13,7 @@ import { RECORD_KEY_PREFIX } from './constants.js'
13
13
  // const IPNS_PREFIX = uint8ArrayFromString('/ipns/')
14
14
  const PK_PREFIX = uint8ArrayFromString('/pk/')
15
15
 
16
- export function removePrivateAddresses (peer: PeerData): PeerData {
16
+ export function removePrivateAddresses (peer: PeerInfo): PeerInfo {
17
17
  return {
18
18
  ...peer,
19
19
  multiaddrs: peer.multiaddrs.filter(multiaddr => {
@@ -29,7 +29,7 @@ export function removePrivateAddresses (peer: PeerData): PeerData {
29
29
  }
30
30
  }
31
31
 
32
- export function removePublicAddresses (peer: PeerData): PeerData {
32
+ export function removePublicAddresses (peer: PeerInfo): PeerInfo {
33
33
  return {
34
34
  ...peer,
35
35
  multiaddrs: peer.multiaddrs.filter(multiaddr => {