@libp2p/kad-dht 15.0.2 → 15.1.0-aa25d38ab

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 (101) hide show
  1. package/dist/index.min.js +2 -15
  2. package/dist/index.min.js.map +7 -0
  3. package/dist/src/constants.d.ts +1 -1
  4. package/dist/src/constants.d.ts.map +1 -1
  5. package/dist/src/constants.js +1 -1
  6. package/dist/src/constants.js.map +1 -1
  7. package/dist/src/content-fetching/index.d.ts +4 -4
  8. package/dist/src/content-fetching/index.d.ts.map +1 -1
  9. package/dist/src/content-fetching/index.js +40 -13
  10. package/dist/src/content-fetching/index.js.map +1 -1
  11. package/dist/src/content-routing/index.d.ts.map +1 -1
  12. package/dist/src/content-routing/index.js +88 -38
  13. package/dist/src/content-routing/index.js.map +1 -1
  14. package/dist/src/index.d.ts +58 -6
  15. package/dist/src/index.d.ts.map +1 -1
  16. package/dist/src/index.js +1 -0
  17. package/dist/src/index.js.map +1 -1
  18. package/dist/src/kad-dht.d.ts +3 -1
  19. package/dist/src/kad-dht.d.ts.map +1 -1
  20. package/dist/src/kad-dht.js +14 -10
  21. package/dist/src/kad-dht.js.map +1 -1
  22. package/dist/src/message/dht.d.ts +1 -1
  23. package/dist/src/message/dht.d.ts.map +1 -1
  24. package/dist/src/message/dht.js +0 -5
  25. package/dist/src/message/dht.js.map +1 -1
  26. package/dist/src/network.d.ts +14 -8
  27. package/dist/src/network.d.ts.map +1 -1
  28. package/dist/src/network.js +17 -16
  29. package/dist/src/network.js.map +1 -1
  30. package/dist/src/peer-distance-list.d.ts +10 -3
  31. package/dist/src/peer-distance-list.d.ts.map +1 -1
  32. package/dist/src/peer-distance-list.js +13 -5
  33. package/dist/src/peer-distance-list.js.map +1 -1
  34. package/dist/src/peer-routing/index.d.ts +10 -8
  35. package/dist/src/peer-routing/index.d.ts.map +1 -1
  36. package/dist/src/peer-routing/index.js +79 -49
  37. package/dist/src/peer-routing/index.js.map +1 -1
  38. package/dist/src/providers.d.ts +4 -4
  39. package/dist/src/providers.d.ts.map +1 -1
  40. package/dist/src/providers.js +12 -12
  41. package/dist/src/providers.js.map +1 -1
  42. package/dist/src/query/events.d.ts +15 -3
  43. package/dist/src/query/events.d.ts.map +1 -1
  44. package/dist/src/query/events.js +9 -0
  45. package/dist/src/query/events.js.map +1 -1
  46. package/dist/src/query/manager.d.ts +3 -5
  47. package/dist/src/query/manager.d.ts.map +1 -1
  48. package/dist/src/query/manager.js +41 -16
  49. package/dist/src/query/manager.js.map +1 -1
  50. package/dist/src/query/query-path.d.ts +10 -14
  51. package/dist/src/query/query-path.d.ts.map +1 -1
  52. package/dist/src/query/query-path.js +67 -53
  53. package/dist/src/query/query-path.js.map +1 -1
  54. package/dist/src/query/types.d.ts +6 -5
  55. package/dist/src/query/types.d.ts.map +1 -1
  56. package/dist/src/query-self.d.ts +2 -3
  57. package/dist/src/query-self.d.ts.map +1 -1
  58. package/dist/src/query-self.js +11 -14
  59. package/dist/src/query-self.js.map +1 -1
  60. package/dist/src/routing-table/closest-peers.js +1 -1
  61. package/dist/src/routing-table/closest-peers.js.map +1 -1
  62. package/dist/src/routing-table/k-bucket.js +1 -1
  63. package/dist/src/routing-table/k-bucket.js.map +1 -1
  64. package/dist/src/rpc/handlers/add-provider.d.ts +1 -1
  65. package/dist/src/rpc/handlers/add-provider.d.ts.map +1 -1
  66. package/dist/src/rpc/handlers/get-providers.js +1 -1
  67. package/dist/src/rpc/handlers/get-providers.js.map +1 -1
  68. package/dist/src/rpc/index.d.ts +7 -7
  69. package/dist/src/rpc/index.d.ts.map +1 -1
  70. package/dist/src/rpc/index.js +1 -1
  71. package/dist/src/rpc/index.js.map +1 -1
  72. package/dist/src/topology-listener.d.ts +2 -2
  73. package/dist/src/topology-listener.d.ts.map +1 -1
  74. package/dist/src/utils.d.ts +1 -0
  75. package/dist/src/utils.d.ts.map +1 -1
  76. package/dist/src/utils.js +4 -0
  77. package/dist/src/utils.js.map +1 -1
  78. package/package.json +30 -39
  79. package/src/constants.ts +1 -1
  80. package/src/content-fetching/index.ts +41 -14
  81. package/src/content-routing/index.ts +93 -45
  82. package/src/index.ts +65 -6
  83. package/src/kad-dht.ts +14 -10
  84. package/src/message/dht.ts +2 -7
  85. package/src/network.ts +36 -22
  86. package/src/peer-distance-list.ts +19 -7
  87. package/src/peer-routing/index.ts +84 -53
  88. package/src/providers.ts +13 -13
  89. package/src/query/events.ts +27 -3
  90. package/src/query/manager.ts +48 -22
  91. package/src/query/query-path.ts +86 -76
  92. package/src/query/types.ts +7 -5
  93. package/src/query-self.ts +15 -17
  94. package/src/routing-table/closest-peers.ts +1 -1
  95. package/src/routing-table/k-bucket.ts +1 -1
  96. package/src/rpc/handlers/add-provider.ts +1 -1
  97. package/src/rpc/handlers/get-providers.ts +1 -1
  98. package/src/rpc/index.ts +12 -8
  99. package/src/topology-listener.ts +2 -2
  100. package/src/utils.ts +9 -0
  101. package/dist/typedoc-urls.json +0 -59
@@ -75,4 +75,13 @@ export function dialPeerEvent(fields, options = {}) {
75
75
  options.onProgress?.(new CustomEvent('kad-dht:query:dial-peer', { detail: event }));
76
76
  return event;
77
77
  }
78
+ export function pathEndedEvent(fields, options = {}) {
79
+ const event = {
80
+ ...fields,
81
+ name: 'PATH_ENDED',
82
+ type: 8
83
+ };
84
+ options.onProgress?.(new CustomEvent('kad-dht:query:path-ended', { detail: event }));
85
+ return event;
86
+ }
78
87
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/query/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/query/events.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import type { ComponentLogger, Metrics, PeerId, RoutingOptions, Startable } from
5
5
  import type { ConnectionManager } from '@libp2p/interface-internal';
6
6
  import type { DeferredPromise } from 'p-defer';
7
7
  export interface CleanUpEvents {
8
- 'cleanup': CustomEvent;
8
+ cleanup: CustomEvent;
9
9
  }
10
10
  export interface QueryManagerInit {
11
11
  logPrefix: string;
@@ -13,6 +13,7 @@ export interface QueryManagerInit {
13
13
  disjointPaths?: number;
14
14
  alpha?: number;
15
15
  initialQuerySelfHasRun: DeferredPromise<void>;
16
+ allowQueryWithZeroPeers?: boolean;
16
17
  routingTable: RoutingTable;
17
18
  }
18
19
  export interface QueryManagerComponents {
@@ -22,10 +23,6 @@ export interface QueryManagerComponents {
22
23
  connectionManager: ConnectionManager;
23
24
  }
24
25
  export interface QueryOptions extends RoutingOptions {
25
- /**
26
- * A timeout for subqueries executed as part of the main query
27
- */
28
- queryFuncTimeout?: number;
29
26
  isSelfQuery?: boolean;
30
27
  }
31
28
  /**
@@ -42,6 +39,7 @@ export declare class QueryManager implements Startable {
42
39
  private readonly routingTable;
43
40
  private initialQuerySelfHasRun?;
44
41
  private readonly logPrefix;
42
+ private readonly allowQueryWithZeroPeers;
45
43
  constructor(components: QueryManagerComponents, init: QueryManagerInit);
46
44
  isStarted(): boolean;
47
45
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/query/manager.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,WAAW,CAAA;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sBAAsB,EAAE,eAAe,CAAC,IAAI,CAAC,CAAA;IAC7C,YAAY,EAAE,YAAY,CAAA;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,eAAe,CAAA;IACvB,iBAAiB,EAAE,iBAAiB,CAAA;CACrC;AAED,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,SAAS;IACrC,aAAa,EAAE,MAAM,CAAA;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,kBAAkB,CAAiB;IAC3C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,sBAAsB,CAAC,CAAuB;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;gBAErB,UAAU,EAAE,sBAAsB,EAAE,IAAI,EAAE,gBAAgB;IAkBvE,SAAS,IAAK,OAAO;IAIrB;;OAEG;IACG,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAa7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAMpB,GAAG,CAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAE,YAAiB,GAAG,cAAc,CAAC,UAAU,CAAC;CAuH5G"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/query/manager.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACpG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sBAAsB,EAAE,eAAe,CAAC,IAAI,CAAC,CAAA;IAC7C,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,YAAY,EAAE,YAAY,CAAA;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,eAAe,CAAA;IACvB,iBAAiB,EAAE,iBAAiB,CAAA;CACrC;AAED,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,SAAS;IACrC,aAAa,EAAE,MAAM,CAAA;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,kBAAkB,CAAiB;IAC3C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,sBAAsB,CAAC,CAAuB;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAS;gBAEpC,UAAU,EAAE,sBAAsB,EAAE,IAAI,EAAE,gBAAgB;IAmBvE,SAAS,IAAK,OAAO;IAIrB;;OAEG;IACG,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAa7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAMpB,GAAG,CAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAE,YAAiB,GAAG,cAAc,CAAC,UAAU,CAAC;CAkJ5G"}
@@ -1,7 +1,8 @@
1
1
  import { setMaxListeners } from '@libp2p/interface';
2
- import { PeerSet } from '@libp2p/peer-collections';
2
+ import { createScalableCuckooFilter } from '@libp2p/utils/filters';
3
3
  import { anySignal } from 'any-signal';
4
4
  import merge from 'it-merge';
5
+ import { pEvent } from 'p-event';
5
6
  import { raceSignal } from 'race-signal';
6
7
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
7
8
  import { ALPHA, K, DEFAULT_QUERY_TIMEOUT } from '../constants.js';
@@ -21,6 +22,7 @@ export class QueryManager {
21
22
  routingTable;
22
23
  initialQuerySelfHasRun;
23
24
  logPrefix;
25
+ allowQueryWithZeroPeers;
24
26
  constructor(components, init) {
25
27
  this.logPrefix = init.logPrefix;
26
28
  this.disjointPaths = init.disjointPaths ?? K;
@@ -30,6 +32,7 @@ export class QueryManager {
30
32
  this.logger = components.logger;
31
33
  this.peerId = components.peerId;
32
34
  this.connectionManager = components.connectionManager;
35
+ this.allowQueryWithZeroPeers = init.allowQueryWithZeroPeers ?? false;
33
36
  // allow us to stop queries on shut down
34
37
  this.shutDownController = new AbortController();
35
38
  // make sure we don't make a lot of noise in the logs
@@ -89,34 +92,53 @@ export class QueryManager {
89
92
  // query a subset of peers up to `kBucketSize / 2` in length
90
93
  let queryFinished = false;
91
94
  try {
95
+ if (this.routingTable.size === 0 && !this.allowQueryWithZeroPeers) {
96
+ log('routing table was empty, waiting for some peers before running%s query', options.isSelfQuery === true ? ' self' : '');
97
+ // wait to discover at least one DHT peer that isn't us
98
+ await pEvent(this.routingTable, 'peer:add', {
99
+ signal,
100
+ filter: (event) => !this.peerId.equals(event.detail)
101
+ });
102
+ log('routing table has peers, continuing with%s query', options.isSelfQuery === true ? ' self' : '');
103
+ }
92
104
  if (options.isSelfQuery !== true && this.initialQuerySelfHasRun != null) {
93
- log('waiting for initial query-self query before continuing');
105
+ log('waiting for initial self query before continuing');
94
106
  await raceSignal(this.initialQuerySelfHasRun.promise, signal);
95
107
  this.initialQuerySelfHasRun = undefined;
96
108
  }
97
109
  log('query:start');
98
110
  const id = await convertBuffer(key);
99
- const peers = this.routingTable.closestPeers(id);
100
- const peersToQuery = peers.slice(0, Math.min(this.disjointPaths, peers.length));
111
+ const peers = this.routingTable.closestPeers(id, this.routingTable.kBucketSize);
112
+ // split peers into d buckets evenly(ish)
113
+ const peersToQuery = peers.sort(() => {
114
+ if (Math.random() > 0.5) {
115
+ return 1;
116
+ }
117
+ return -1;
118
+ })
119
+ .reduce((acc, curr, index) => {
120
+ acc[index % this.disjointPaths].push(curr);
121
+ return acc;
122
+ }, new Array(this.disjointPaths).fill(0).map(() => []))
123
+ .filter(peers => peers.length > 0);
101
124
  if (peers.length === 0) {
102
- log.error('Running query with no peers');
125
+ log.error('running query with no peers');
103
126
  return;
104
127
  }
105
128
  // make sure we don't get trapped in a loop
106
- const peersSeen = new PeerSet();
129
+ const peersSeen = createScalableCuckooFilter(1024);
107
130
  // Create query paths from the starting peers
108
131
  const paths = peersToQuery.map((peer, index) => {
109
132
  return queryPath({
110
133
  ...options,
111
134
  key,
112
- startingPeer: peer,
135
+ startingPeers: peer,
113
136
  ourPeerId: this.peerId,
114
137
  signal,
115
138
  query: queryFunc,
116
- pathIndex: index,
139
+ path: index,
117
140
  numPaths: peersToQuery.length,
118
141
  alpha: this.alpha,
119
- queryFuncTimeout: options.queryFuncTimeout,
120
142
  log,
121
143
  peersSeen,
122
144
  onProgress: options.onProgress,
@@ -131,21 +153,24 @@ export class QueryManager {
131
153
  if (event.name === 'PEER_RESPONSE') {
132
154
  for (const peer of [...event.closer, ...event.providers]) {
133
155
  // eslint-disable-next-line max-depth
134
- if (!(await this.connectionManager.isDialable(peer.multiaddrs))) {
156
+ if (!(await this.connectionManager.isDialable(peer.multiaddrs, {
157
+ signal
158
+ }))) {
135
159
  continue;
136
160
  }
137
- await this.routingTable.add(peer.id);
161
+ await this.routingTable.add(peer.id, {
162
+ signal
163
+ });
138
164
  }
139
165
  }
166
+ signal.throwIfAborted();
140
167
  yield event;
141
168
  }
142
169
  queryFinished = true;
143
170
  }
144
171
  catch (err) {
145
- if (!this.running && err.name === 'QueryAbortedError') {
146
- // ignore query aborted errors that were thrown during query manager shutdown
147
- }
148
- else {
172
+ if (this.running) {
173
+ // ignore errors thrown during shut down
149
174
  throw err;
150
175
  }
151
176
  }
@@ -155,7 +180,7 @@ export class QueryManager {
155
180
  queryEarlyExitController.abort();
156
181
  }
157
182
  signal.clear();
158
- log('query:done');
183
+ log('query finished');
159
184
  }
160
185
  }
161
186
  }
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/query/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/query/manager.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import type { QueryEvent } from '../index.js';
2
2
  import type { QueryFunc } from '../query/types.js';
3
3
  import type { Logger, PeerId, RoutingOptions } from '@libp2p/interface';
4
4
  import type { ConnectionManager } from '@libp2p/interface-internal';
5
- import type { PeerSet } from '@libp2p/peer-collections';
5
+ import type { Filter } from '@libp2p/utils/filters';
6
6
  export interface QueryPathOptions extends RoutingOptions {
7
7
  /**
8
8
  * What are we trying to find
@@ -11,15 +11,11 @@ export interface QueryPathOptions extends RoutingOptions {
11
11
  /**
12
12
  * Where we start our query
13
13
  */
14
- startingPeer: PeerId;
14
+ startingPeers: PeerId[];
15
15
  /**
16
16
  * Who we are
17
17
  */
18
18
  ourPeerId: PeerId;
19
- /**
20
- * When to stop querying
21
- */
22
- signal: AbortSignal;
23
19
  /**
24
20
  * The query function to run with each peer
25
21
  */
@@ -29,17 +25,13 @@ export interface QueryPathOptions extends RoutingOptions {
29
25
  */
30
26
  alpha: number;
31
27
  /**
32
- * How many concurrent node/value lookups to run
28
+ * The index within `k` this path represents
33
29
  */
34
- pathIndex: number;
30
+ path: number;
35
31
  /**
36
- * How many concurrent node/value lookups to run
32
+ * How many disjoint paths are in this query
37
33
  */
38
34
  numPaths: number;
39
- /**
40
- * A timeout for queryFunc in ms
41
- */
42
- queryFuncTimeout?: number;
43
35
  /**
44
36
  * Query log
45
37
  */
@@ -47,11 +39,15 @@ export interface QueryPathOptions extends RoutingOptions {
47
39
  /**
48
40
  * Set of peers seen by this and other paths
49
41
  */
50
- peersSeen: PeerSet;
42
+ peersSeen: Filter;
51
43
  /**
52
44
  * The libp2p connection manager
53
45
  */
54
46
  connectionManager: ConnectionManager;
47
+ /**
48
+ * The overall query abort signal
49
+ */
50
+ signal: AbortSignal;
55
51
  }
56
52
  /**
57
53
  * Walks a path through the DHT, calling the passed query function for
@@ -1 +1 @@
1
- {"version":3,"file":"query-path.d.ts","sourceRoot":"","sources":["../../../src/query/query-path.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAgB,MAAM,mBAAmB,CAAA;AACrF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AACnE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAEvD,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD;;OAEG;IACH,GAAG,EAAE,UAAU,CAAA;IAEf;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,MAAM,EAAE,WAAW,CAAA;IAEnB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAA;IAEhB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IAEX;;OAEG;IACH,SAAS,EAAE,OAAO,CAAA;IAElB;;OAEG;IACH,iBAAiB,EAAE,iBAAiB,CAAA;CACrC;AAMD;;;GAGG;AACH,wBAAwB,SAAS,CAAE,OAAO,EAAE,gBAAgB,GAAG,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,CAwHzG"}
1
+ {"version":3,"file":"query-path.d.ts","sourceRoot":"","sources":["../../../src/query/query-path.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAA0B,MAAM,mBAAmB,CAAA;AAC/F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD;;OAEG;IACH,GAAG,EAAE,UAAU,CAAA;IAEf;;OAEG;IACH,aAAa,EAAE,MAAM,EAAE,CAAA;IAEvB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAA;IAEhB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IAEX;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,iBAAiB,EAAE,iBAAiB,CAAA;IAEpC;;OAEG;IACH,MAAM,EAAE,WAAW,CAAA;CACpB;AAMD;;;GAGG;AACH,wBAAwB,SAAS,CAAE,OAAO,EAAE,gBAAgB,GAAG,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,CAwIzG"}
@@ -1,60 +1,76 @@
1
- import { setMaxListeners } from '@libp2p/interface';
2
1
  import { Queue } from '@libp2p/utils/queue';
3
- import { anySignal } from 'any-signal';
2
+ import { pushable } from 'it-pushable';
4
3
  import { xor as uint8ArrayXor } from 'uint8arrays/xor';
5
4
  import { xorCompare as uint8ArrayXorCompare } from 'uint8arrays/xor-compare';
6
5
  import { QueryAbortedError } from '../errors.js';
7
6
  import { convertPeerId, convertBuffer } from '../utils.js';
8
- import { queryErrorEvent } from './events.js';
7
+ import { pathEndedEvent, queryErrorEvent } from './events.js';
9
8
  /**
10
9
  * Walks a path through the DHT, calling the passed query function for
11
10
  * every peer encountered that we have not seen before
12
11
  */
13
12
  export async function* queryPath(options) {
14
- const { key, startingPeer, ourPeerId, signal, query, alpha, pathIndex, numPaths, queryFuncTimeout, log, peersSeen, connectionManager } = options;
13
+ const { key, startingPeers, ourPeerId, query, alpha, path, numPaths, log, peersSeen, connectionManager, signal } = options;
14
+ const events = pushable({
15
+ objectMode: true
16
+ });
15
17
  // Only ALPHA node/value lookups are allowed at any given time for each process
16
18
  // https://github.com/libp2p/specs/tree/master/kad-dht#alpha-concurrency-parameter-%CE%B1
17
19
  const queue = new Queue({
18
20
  concurrency: alpha,
19
21
  sort: (a, b) => uint8ArrayXorCompare(a.options.distance, b.options.distance)
20
22
  });
23
+ queue.addEventListener('idle', () => {
24
+ events.push(pathEndedEvent({
25
+ path: {
26
+ index: path,
27
+ queued: queue.queued,
28
+ running: queue.running,
29
+ total: queue.size
30
+ }
31
+ }, options));
32
+ events.end();
33
+ });
34
+ queue.addEventListener('error', (evt) => {
35
+ log.error('error during query - %e', evt.detail);
36
+ });
37
+ signal.addEventListener('abort', () => {
38
+ queue.abort();
39
+ events.end(new QueryAbortedError());
40
+ });
21
41
  // perform lookups on kadId, not the actual value
22
42
  const kadId = await convertBuffer(key);
23
43
  /**
24
- * Adds the passed peer to the query queue if it's not us and no
25
- * other path has passed through this peer
44
+ * Adds the passed peer to the query queue if it's not us and no other path
45
+ * has passed through this peer
26
46
  */
27
47
  function queryPeer(peer, peerKadId) {
28
48
  if (peer == null) {
29
49
  return;
30
50
  }
31
- peersSeen.add(peer);
51
+ peersSeen.add(peer.id.toMultihash().bytes);
32
52
  const peerXor = uint8ArrayXor(peerKadId, kadId);
33
53
  queue.add(async () => {
34
- const signals = [signal];
35
- if (queryFuncTimeout != null) {
36
- signals.push(AbortSignal.timeout(queryFuncTimeout));
37
- }
38
- const compoundSignal = anySignal(signals);
39
- // this signal can get listened to a lot
40
- setMaxListeners(Infinity, compoundSignal);
41
54
  try {
42
55
  for await (const event of query({
43
56
  ...options,
44
57
  key,
45
58
  peer,
46
- signal: compoundSignal,
47
- pathIndex,
48
- numPaths
59
+ path: {
60
+ index: path,
61
+ queued: queue.queued,
62
+ running: queue.running,
63
+ total: queue.size
64
+ },
65
+ numPaths,
66
+ peerKadId,
67
+ signal
49
68
  })) {
50
- if (compoundSignal.aborted) {
51
- return;
52
- }
53
69
  // if there are closer peers and the query has not completed, continue the query
54
70
  if (event.name === 'PEER_RESPONSE') {
55
71
  for (const closerPeer of event.closer) {
56
- if (peersSeen.has(closerPeer.id)) { // eslint-disable-line max-depth
57
- log.trace('already seen %p in query', closerPeer.id);
72
+ if (peersSeen.has(closerPeer.id.toMultihash().bytes)) { // eslint-disable-line max-depth
73
+ log('already seen %p in query', closerPeer.id);
58
74
  continue;
59
75
  }
60
76
  if (ourPeerId.equals(closerPeer.id)) { // eslint-disable-line max-depth
@@ -69,50 +85,48 @@ export async function* queryPath(options) {
69
85
  const closerPeerXor = uint8ArrayXor(closerPeerKadId, kadId);
70
86
  // only continue query if closer peer is actually closer
71
87
  if (uint8ArrayXorCompare(closerPeerXor, peerXor) !== -1) { // eslint-disable-line max-depth
72
- log.trace('skipping %p as they are not closer to %b than %p', closerPeer.id, key, peer);
88
+ log('skipping %p as they are not closer to %b than %p', closerPeer.id, key, peer);
73
89
  continue;
74
90
  }
75
- log.trace('querying closer peer %p', closerPeer.id);
76
- queryPeer(closerPeer.id, closerPeerKadId);
91
+ log('querying closer peer %p', closerPeer.id);
92
+ queryPeer(closerPeer, closerPeerKadId);
77
93
  }
78
94
  }
79
- queue.safeDispatchEvent('completed', {
80
- detail: event
95
+ events.push({
96
+ ...event,
97
+ path: {
98
+ index: path,
99
+ queued: queue.queued,
100
+ running: queue.running,
101
+ total: queue.size
102
+ }
81
103
  });
82
104
  }
83
105
  }
84
106
  catch (err) {
85
- if (!signal.aborted) {
86
- return queryErrorEvent({
87
- from: peer,
88
- error: err
89
- }, options);
90
- }
91
- }
92
- finally {
93
- compoundSignal.clear();
107
+ // yield error event if query is continuing
108
+ events.push(queryErrorEvent({
109
+ from: peer.id,
110
+ error: err,
111
+ path: {
112
+ index: path,
113
+ queued: queue.queued,
114
+ running: queue.running - 1,
115
+ total: queue.size - 1
116
+ }
117
+ }, options));
94
118
  }
95
119
  }, {
96
120
  distance: peerXor
97
121
  }).catch(err => {
98
- log.error(err);
122
+ log.error('error during query - %e', err);
99
123
  });
100
124
  }
101
- // begin the query with the starting peer
102
- queryPeer(startingPeer, await convertPeerId(startingPeer));
103
- try {
104
- // yield results as they come in
105
- for await (const event of queue.toGenerator({ signal })) {
106
- if (event != null) {
107
- yield event;
108
- }
109
- }
110
- }
111
- catch (err) {
112
- if (signal.aborted) {
113
- throw new QueryAbortedError('Query aborted');
114
- }
115
- throw err;
116
- }
125
+ // begin the query with the starting peers
126
+ await Promise.all(startingPeers.map(async (startingPeer) => {
127
+ queryPeer({ id: startingPeer, multiaddrs: [] }, await convertPeerId(startingPeer));
128
+ }));
129
+ // yield results as they come in
130
+ yield* events;
117
131
  }
118
132
  //# sourceMappingURL=query-path.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-path.js","sourceRoot":"","sources":["../../../src/query/query-path.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-path.js","sourceRoot":"","sources":["../../../src/query/query-path.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
- import type { QueryEvent } from '../index.js';
2
- import type { PeerId } from '@libp2p/interface';
1
+ import type { DisjointPath, QueryEvent } from '../index.js';
2
+ import type { PeerInfo } from '@libp2p/interface';
3
3
  export interface QueryContext {
4
4
  key: Uint8Array;
5
- peer: PeerId;
6
- signal: AbortSignal;
7
- pathIndex: number;
5
+ peer: PeerInfo;
6
+ peerKadId: Uint8Array;
7
+ signal?: AbortSignal;
8
+ path: DisjointPath;
8
9
  numPaths: number;
9
10
  }
10
11
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/query/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C,MAAM,WAAW,YAAY;IAE3B,GAAG,EAAE,UAAU,CAAA;IAEf,IAAI,EAAE,MAAM,CAAA;IAEZ,MAAM,EAAE,WAAW,CAAA;IAEnB,SAAS,EAAE,MAAM,CAAA;IAEjB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;CACnD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/query/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,MAAM,WAAW,YAAY;IAE3B,GAAG,EAAE,UAAU,CAAA;IAEf,IAAI,EAAE,QAAQ,CAAA;IAEd,SAAS,EAAE,UAAU,CAAA;IAErB,MAAM,CAAC,EAAE,WAAW,CAAA;IAEpB,IAAI,EAAE,YAAY,CAAA;IAElB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;CACnD"}
@@ -1,12 +1,10 @@
1
1
  import type { OperationMetrics } from './kad-dht.js';
2
2
  import type { PeerRouting } from './peer-routing/index.js';
3
- import type { RoutingTable } from './routing-table/index.js';
4
3
  import type { ComponentLogger, Metrics, PeerId, Startable } from '@libp2p/interface';
5
4
  import type { DeferredPromise } from 'p-defer';
6
5
  export interface QuerySelfInit {
7
6
  logPrefix: string;
8
7
  peerRouting: PeerRouting;
9
- routingTable: RoutingTable;
10
8
  count?: number;
11
9
  interval?: number;
12
10
  initialInterval?: number;
@@ -18,6 +16,7 @@ export interface QuerySelfComponents {
18
16
  peerId: PeerId;
19
17
  logger: ComponentLogger;
20
18
  metrics?: Metrics;
19
+ events: EventTarget;
21
20
  }
22
21
  /**
23
22
  * Receives notifications of new peers joining the network that support the DHT protocol
@@ -26,7 +25,7 @@ export declare class QuerySelf implements Startable {
26
25
  private readonly log;
27
26
  private readonly peerId;
28
27
  private readonly peerRouting;
29
- private readonly routingTable;
28
+ private readonly events;
30
29
  private readonly count;
31
30
  private readonly interval;
32
31
  private readonly initialInterval;
@@ -1 +1 @@
1
- {"version":3,"file":"query-self.d.ts","sourceRoot":"","sources":["../../src/query-self.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAU,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC5F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC9C,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,WAAW,CAAA;IACxB,YAAY,EAAE,YAAY,CAAA;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sBAAsB,EAAE,eAAe,CAAC,IAAI,CAAC,CAAA;IAC7C,gBAAgB,EAAE,gBAAgB,CAAA;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,qBAAa,SAAU,YAAW,SAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAC,CAA+B;IACjD,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,sBAAsB,CAAC,CAAuB;IACtD,OAAO,CAAC,gBAAgB,CAAC,CAAuB;gBAEnC,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE,aAAa;IAejE,SAAS,IAAK,OAAO;IAIrB,KAAK,IAAK,IAAI;IAed,IAAI,IAAK,IAAI;IAYP,SAAS,IAAK,OAAO,CAAC,IAAI,CAAC;CA6ElC"}
1
+ {"version":3,"file":"query-self.d.ts","sourceRoot":"","sources":["../../src/query-self.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAU,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC5F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sBAAsB,EAAE,eAAe,CAAC,IAAI,CAAC,CAAA;IAC7C,gBAAgB,EAAE,gBAAgB,CAAA;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,WAAW,CAAA;CACpB;AAED;;GAEG;AACH,qBAAa,SAAU,YAAW,SAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAC,CAA+B;IACjD,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,sBAAsB,CAAC,CAAuB;IACtD,OAAO,CAAC,gBAAgB,CAAC,CAAuB;gBAEnC,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE,aAAa;IAejE,SAAS,IAAK,OAAO;IAIrB,KAAK,IAAK,IAAI;IAed,IAAI,IAAK,IAAI;IAYP,SAAS,IAAK,OAAO,CAAC,IAAI,CAAC;CA4ElC"}
@@ -4,7 +4,6 @@ import length from 'it-length';
4
4
  import { pipe } from 'it-pipe';
5
5
  import take from 'it-take';
6
6
  import pDefer from 'p-defer';
7
- import { pEvent } from 'p-event';
8
7
  import { QUERY_SELF_INTERVAL, QUERY_SELF_TIMEOUT, K, QUERY_SELF_INITIAL_INTERVAL } from './constants.js';
9
8
  import { timeOperationMethod } from './utils.js';
10
9
  /**
@@ -14,7 +13,7 @@ export class QuerySelf {
14
13
  log;
15
14
  peerId;
16
15
  peerRouting;
17
- routingTable;
16
+ events;
18
17
  count;
19
18
  interval;
20
19
  initialInterval;
@@ -27,9 +26,9 @@ export class QuerySelf {
27
26
  constructor(components, init) {
28
27
  this.peerId = components.peerId;
29
28
  this.log = components.logger.forComponent(`${init.logPrefix}:query-self`);
29
+ this.events = components.events;
30
30
  this.running = false;
31
31
  this.peerRouting = init.peerRouting;
32
- this.routingTable = init.routingTable;
33
32
  this.count = init.count ?? K;
34
33
  this.interval = init.interval ?? QUERY_SELF_INTERVAL;
35
34
  this.initialInterval = init.initialInterval ?? QUERY_SELF_INITIAL_INTERVAL;
@@ -84,22 +83,20 @@ export class QuerySelf {
84
83
  const signal = anySignal(signals);
85
84
  setMaxListeners(Infinity, signal, this.controller.signal);
86
85
  try {
87
- if (this.routingTable.size === 0) {
88
- this.log('routing table was empty, waiting for some peers before running query');
89
- // wait to discover at least one DHT peer that isn't us
90
- await pEvent(this.routingTable, 'peer:add', {
91
- signal,
92
- filter: (event) => !this.peerId.equals(event.detail)
93
- });
94
- this.log('routing table has peers, continuing with query');
95
- }
96
86
  this.log('run self-query, look for %d peers timing out after %dms', this.count, this.queryTimeout);
97
87
  const start = Date.now();
98
- const found = await pipe(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes, {
88
+ const peers = await pipe(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes, {
99
89
  signal,
100
90
  isSelfQuery: true
101
91
  }), (source) => take(source, this.count), async (source) => length(source));
102
- this.log('self-query found %d peers in %dms', found, Date.now() - start);
92
+ const duration = Date.now() - start;
93
+ this.log('self-query found %d peers in %dms', peers, duration);
94
+ this.events.dispatchEvent(new CustomEvent('kad-dht:query:self', {
95
+ detail: {
96
+ peers,
97
+ duration
98
+ }
99
+ }));
103
100
  }
104
101
  catch (err) {
105
102
  this.log.error('self-query error', err);