@libp2p/kad-dht 14.1.3-d866eb5bb → 14.1.3-f8da60e73

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. package/README.md +1 -1
  2. package/dist/index.min.js +6 -3
  3. package/dist/src/content-fetching/index.d.ts +1 -0
  4. package/dist/src/content-fetching/index.d.ts.map +1 -1
  5. package/dist/src/content-fetching/index.js +1 -1
  6. package/dist/src/content-fetching/index.js.map +1 -1
  7. package/dist/src/kad-dht.d.ts.map +1 -1
  8. package/dist/src/kad-dht.js +4 -2
  9. package/dist/src/kad-dht.js.map +1 -1
  10. package/dist/src/peer-routing/index.d.ts +9 -5
  11. package/dist/src/peer-routing/index.d.ts.map +1 -1
  12. package/dist/src/peer-routing/index.js +25 -7
  13. package/dist/src/peer-routing/index.js.map +1 -1
  14. package/dist/src/providers.d.ts.map +1 -1
  15. package/dist/src/providers.js +5 -3
  16. package/dist/src/providers.js.map +1 -1
  17. package/dist/src/reprovider.js +1 -1
  18. package/dist/src/reprovider.js.map +1 -1
  19. package/dist/src/rpc/handlers/add-provider.d.ts +5 -1
  20. package/dist/src/rpc/handlers/add-provider.d.ts.map +1 -1
  21. package/dist/src/rpc/handlers/add-provider.js +14 -5
  22. package/dist/src/rpc/handlers/add-provider.js.map +1 -1
  23. package/dist/src/rpc/handlers/get-providers.d.ts +3 -2
  24. package/dist/src/rpc/handlers/get-providers.d.ts.map +1 -1
  25. package/dist/src/rpc/handlers/get-providers.js +16 -28
  26. package/dist/src/rpc/handlers/get-providers.js.map +1 -1
  27. package/dist/src/rpc/handlers/get-value.d.ts +1 -0
  28. package/dist/src/rpc/handlers/get-value.d.ts.map +1 -1
  29. package/dist/src/rpc/handlers/get-value.js +1 -1
  30. package/dist/src/rpc/handlers/get-value.js.map +1 -1
  31. package/dist/src/rpc/handlers/put-value.d.ts +1 -0
  32. package/dist/src/rpc/handlers/put-value.d.ts.map +1 -1
  33. package/dist/src/rpc/handlers/put-value.js +1 -1
  34. package/dist/src/rpc/handlers/put-value.js.map +1 -1
  35. package/dist/src/rpc/index.d.ts +1 -0
  36. package/dist/src/rpc/index.d.ts.map +1 -1
  37. package/dist/src/rpc/index.js.map +1 -1
  38. package/package.json +34 -34
  39. package/src/content-fetching/index.ts +2 -1
  40. package/src/kad-dht.ts +4 -2
  41. package/src/peer-routing/index.ts +38 -10
  42. package/src/providers.ts +5 -3
  43. package/src/reprovider.ts +1 -1
  44. package/src/rpc/handlers/add-provider.ts +18 -7
  45. package/src/rpc/handlers/get-providers.ts +18 -32
  46. package/src/rpc/handlers/get-value.ts +2 -1
  47. package/src/rpc/handlers/put-value.ts +2 -1
  48. package/src/rpc/index.ts +1 -0
  49. package/LICENSE +0 -4
@@ -1,4 +1,6 @@
1
1
  import { InvalidMessageError } from '@libp2p/interface'
2
+ import all from 'it-all'
3
+ import map from 'it-map'
2
4
  import { CID } from 'multiformats/cid'
3
5
  import { MessageType } from '../../message/dht.js'
4
6
  import type { PeerInfoMapper } from '../../index.js'
@@ -17,11 +19,13 @@ export interface GetProvidersHandlerInit {
17
19
  }
18
20
 
19
21
  export interface GetProvidersHandlerComponents {
22
+ peerId: PeerId
20
23
  peerStore: PeerStore
21
24
  logger: ComponentLogger
22
25
  }
23
26
 
24
27
  export class GetProvidersHandler implements DHTMessageHandler {
28
+ private readonly peerId: PeerId
25
29
  private readonly peerRouting: PeerRouting
26
30
  private readonly providers: Providers
27
31
  private readonly peerStore: PeerStore
@@ -32,6 +36,7 @@ export class GetProvidersHandler implements DHTMessageHandler {
32
36
  const { peerRouting, providers, logPrefix } = init
33
37
 
34
38
  this.log = components.logger.forComponent(`${logPrefix}:rpc:handlers:get-providers`)
39
+ this.peerId = components.peerId
35
40
  this.peerStore = components.peerStore
36
41
  this.peerRouting = peerRouting
37
42
  this.providers = providers
@@ -52,27 +57,33 @@ export class GetProvidersHandler implements DHTMessageHandler {
52
57
 
53
58
  this.log('%p asking for providers for %s', peerId, cid)
54
59
 
55
- const [peers, closer] = await Promise.all([
56
- this.providers.getProviders(cid),
57
- this.peerRouting.getCloserPeersOffline(msg.key, peerId)
60
+ const [providerPeers, closerPeers] = await Promise.all([
61
+ all(map(await this.providers.getProviders(cid), async (peerId) => {
62
+ const peer = await this.peerStore.get(peerId)
63
+ const info: PeerInfo = {
64
+ id: peer.id,
65
+ multiaddrs: peer.addresses.map(({ multiaddr }) => multiaddr)
66
+ }
67
+
68
+ return info
69
+ })),
70
+ this.peerRouting.getCloserPeersOffline(msg.key, this.peerId)
58
71
  ])
59
72
 
60
- const providerPeers = await this._getPeers(peers)
61
- const closerPeers = await this._getPeers(closer.map(({ id }) => id))
62
73
  const response: Message = {
63
74
  type: MessageType.GET_PROVIDERS,
64
75
  key: msg.key,
65
76
  clusterLevel: msg.clusterLevel,
66
77
  closer: closerPeers
67
78
  .map(this.peerInfoMapper)
68
- .filter(({ multiaddrs }) => multiaddrs.length)
79
+ .filter(({ id, multiaddrs }) => multiaddrs.length > 0)
69
80
  .map(peerInfo => ({
70
81
  id: peerInfo.id.toMultihash().bytes,
71
82
  multiaddrs: peerInfo.multiaddrs.map(ma => ma.bytes)
72
83
  })),
73
84
  providers: providerPeers
74
85
  .map(this.peerInfoMapper)
75
- .filter(({ multiaddrs }) => multiaddrs.length)
86
+ .filter(({ id, multiaddrs }) => multiaddrs.length > 0)
76
87
  .map(peerInfo => ({
77
88
  id: peerInfo.id.toMultihash().bytes,
78
89
  multiaddrs: peerInfo.multiaddrs.map(ma => ma.bytes)
@@ -87,29 +98,4 @@ export class GetProvidersHandler implements DHTMessageHandler {
87
98
  async _getAddresses (peerId: PeerId): Promise<Multiaddr[]> {
88
99
  return []
89
100
  }
90
-
91
- async _getPeers (peerIds: PeerId[]): Promise<PeerInfo[]> {
92
- const output: PeerInfo[] = []
93
-
94
- for (const peerId of peerIds) {
95
- try {
96
- const peer = await this.peerStore.get(peerId)
97
-
98
- const peerAfterFilter = this.peerInfoMapper({
99
- id: peerId,
100
- multiaddrs: peer.addresses.map(({ multiaddr }) => multiaddr)
101
- })
102
-
103
- if (peerAfterFilter.multiaddrs.length > 0) {
104
- output.push(peerAfterFilter)
105
- }
106
- } catch (err: any) {
107
- if (err.name !== 'NotFoundError') {
108
- throw err
109
- }
110
- }
111
- }
112
-
113
- return output
114
- }
115
101
  }
@@ -15,6 +15,7 @@ import type { Datastore } from 'interface-datastore'
15
15
  export interface GetValueHandlerInit {
16
16
  peerRouting: PeerRouting
17
17
  logPrefix: string
18
+ datastorePrefix: string
18
19
  }
19
20
 
20
21
  export interface GetValueHandlerComponents {
@@ -32,7 +33,7 @@ export class GetValueHandler implements DHTMessageHandler {
32
33
 
33
34
  constructor (components: GetValueHandlerComponents, init: GetValueHandlerInit) {
34
35
  this.log = components.logger.forComponent(`${init.logPrefix}:rpc:handlers:get-value`)
35
- this.datastorePrefix = `/${init.logPrefix.replaceAll(':', '/')}/record`
36
+ this.datastorePrefix = `${init.datastorePrefix}/record`
36
37
  this.peerStore = components.peerStore
37
38
  this.datastore = components.datastore
38
39
  this.peerRouting = init.peerRouting
@@ -11,6 +11,7 @@ import type { Datastore } from 'interface-datastore'
11
11
  export interface PutValueHandlerInit {
12
12
  validators: Validators
13
13
  logPrefix: string
14
+ datastorePrefix: string
14
15
  }
15
16
 
16
17
  export interface PutValueHandlerComponents {
@@ -29,7 +30,7 @@ export class PutValueHandler implements DHTMessageHandler {
29
30
 
30
31
  this.components = components
31
32
  this.log = components.logger.forComponent(`${init.logPrefix}:rpc:handlers:put-value`)
32
- this.datastorePrefix = `/${init.logPrefix.replaceAll(':', '/')}/record`
33
+ this.datastorePrefix = `${init.datastorePrefix}/record`
33
34
  this.validators = validators
34
35
  }
35
36
 
package/src/rpc/index.ts CHANGED
@@ -25,6 +25,7 @@ export interface RPCInit {
25
25
  validators: Validators
26
26
  logPrefix: string
27
27
  metricsPrefix: string
28
+ datastorePrefix: string
28
29
  peerInfoMapper: PeerInfoMapper
29
30
  }
30
31
 
package/LICENSE DELETED
@@ -1,4 +0,0 @@
1
- This project is dual licensed under MIT and Apache-2.0.
2
-
3
- MIT: https://www.opensource.org/licenses/mit
4
- Apache-2.0: https://www.apache.org/licenses/license-2.0