@streamr/dht 100.0.0-testnet-one.0 → 100.0.0-testnet-one.2

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 (113) hide show
  1. package/dist/src/connection/ConnectionLockRpcRemote.js +1 -25
  2. package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
  3. package/dist/src/connection/ConnectionManager.d.ts +0 -1
  4. package/dist/src/connection/ConnectionManager.js +7 -6
  5. package/dist/src/connection/ConnectionManager.js.map +1 -1
  6. package/dist/src/connection/ConnectorFacade.d.ts +2 -2
  7. package/dist/src/connection/ConnectorFacade.js +2 -3
  8. package/dist/src/connection/ConnectorFacade.js.map +1 -1
  9. package/dist/src/connection/ManagedConnection.d.ts +1 -0
  10. package/dist/src/connection/ManagedConnection.js +11 -1
  11. package/dist/src/connection/ManagedConnection.js.map +1 -1
  12. package/dist/src/connection/connectivityChecker.js +3 -2
  13. package/dist/src/connection/connectivityChecker.js.map +1 -1
  14. package/dist/src/connection/websocket/ClientWebsocket.d.ts +1 -0
  15. package/dist/src/connection/websocket/ClientWebsocket.js +6 -3
  16. package/dist/src/connection/websocket/ClientWebsocket.js.map +1 -1
  17. package/dist/src/connection/websocket/ServerWebsocket.d.ts +4 -0
  18. package/dist/src/connection/websocket/ServerWebsocket.js +32 -21
  19. package/dist/src/connection/websocket/ServerWebsocket.js.map +1 -1
  20. package/dist/src/connection/websocket/WebsocketConnector.d.ts +0 -1
  21. package/dist/src/connection/websocket/WebsocketConnector.js +21 -10
  22. package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -1
  23. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.d.ts +1 -1
  24. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js +8 -11
  25. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js.map +1 -1
  26. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.d.ts +2 -2
  27. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js +3 -37
  28. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js.map +1 -1
  29. package/dist/src/connection/websocket/WebsocketServer.js +21 -4
  30. package/dist/src/connection/websocket/WebsocketServer.js.map +1 -1
  31. package/dist/src/dht/DhtNode.d.ts +4 -4
  32. package/dist/src/dht/DhtNode.js +31 -20
  33. package/dist/src/dht/DhtNode.js.map +1 -1
  34. package/dist/src/dht/DhtNodeRpcLocal.d.ts +1 -4
  35. package/dist/src/dht/DhtNodeRpcLocal.js +1 -5
  36. package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -1
  37. package/dist/src/dht/PeerManager.d.ts +10 -6
  38. package/dist/src/dht/PeerManager.js +95 -30
  39. package/dist/src/dht/PeerManager.js.map +1 -1
  40. package/dist/src/dht/contact/SortedContactList.d.ts +20 -6
  41. package/dist/src/dht/contact/SortedContactList.js +55 -24
  42. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  43. package/dist/src/dht/discovery/DiscoverySession.d.ts +3 -5
  44. package/dist/src/dht/discovery/DiscoverySession.js +11 -9
  45. package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
  46. package/dist/src/dht/discovery/PeerDiscovery.d.ts +4 -2
  47. package/dist/src/dht/discovery/PeerDiscovery.js +17 -16
  48. package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
  49. package/dist/src/dht/find/FindSession.js +6 -1
  50. package/dist/src/dht/find/FindSession.js.map +1 -1
  51. package/dist/src/dht/find/Finder.js +6 -1
  52. package/dist/src/dht/find/Finder.js.map +1 -1
  53. package/dist/src/dht/routing/Router.d.ts +1 -1
  54. package/dist/src/dht/routing/Router.js +8 -4
  55. package/dist/src/dht/routing/Router.js.map +1 -1
  56. package/dist/src/dht/routing/RoutingSession.js +8 -1
  57. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  58. package/dist/src/dht/store/StoreRpcLocal.js +19 -5
  59. package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
  60. package/dist/src/helpers/PeerID.d.ts +1 -0
  61. package/dist/src/helpers/PeerID.js +7 -2
  62. package/dist/src/helpers/PeerID.js.map +1 -1
  63. package/dist/src/helpers/peerIdFromPeerDescriptor.js +2 -2
  64. package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
  65. package/package.json +5 -5
  66. package/src/connection/ConnectionLockRpcRemote.ts +1 -2
  67. package/src/connection/ConnectionManager.ts +16 -17
  68. package/src/connection/ConnectorFacade.ts +1 -4
  69. package/src/connection/ManagedConnection.ts +12 -1
  70. package/src/connection/connectivityChecker.ts +3 -2
  71. package/src/connection/websocket/ClientWebsocket.ts +5 -2
  72. package/src/connection/websocket/ServerWebsocket.ts +40 -25
  73. package/src/connection/websocket/WebsocketConnector.ts +23 -12
  74. package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +9 -11
  75. package/src/connection/websocket/WebsocketConnectorRpcRemote.ts +5 -14
  76. package/src/connection/websocket/WebsocketServer.ts +20 -5
  77. package/src/dht/DhtNode.ts +32 -24
  78. package/src/dht/DhtNodeRpcLocal.ts +2 -9
  79. package/src/dht/PeerManager.ts +110 -36
  80. package/src/dht/contact/SortedContactList.ts +87 -44
  81. package/src/dht/discovery/DiscoverySession.ts +15 -14
  82. package/src/dht/discovery/PeerDiscovery.ts +37 -22
  83. package/src/dht/find/FindSession.ts +6 -1
  84. package/src/dht/find/Finder.ts +6 -7
  85. package/src/dht/routing/Router.ts +8 -4
  86. package/src/dht/routing/RoutingSession.ts +8 -8
  87. package/src/dht/store/StoreRpcLocal.ts +19 -7
  88. package/src/helpers/PeerID.ts +6 -2
  89. package/src/helpers/peerIdFromPeerDescriptor.ts +4 -4
  90. package/test/benchmark/Find.test.ts +1 -1
  91. package/test/benchmark/KademliaCorrectness.test.ts +1 -1
  92. package/test/benchmark/SortedContactListBenchmark.test.ts +150 -0
  93. package/test/benchmark/WebsocketServerMemoryLeak.test.ts +41 -0
  94. package/test/benchmark/kademlia-simulation/SimulationNode.ts +6 -1
  95. package/test/end-to-end/Layer0.test.ts +4 -4
  96. package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +10 -10
  97. package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +4 -4
  98. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +2 -2
  99. package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +2 -2
  100. package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +1 -1
  101. package/test/end-to-end/memory-leak.test.ts +1 -0
  102. package/test/integration/DhtJoinPeerDiscovery.test.ts +2 -2
  103. package/test/integration/Layer1-scale.test.ts +1 -1
  104. package/test/integration/Mock-Layer1-Layer0.test.ts +15 -15
  105. package/test/integration/MultipleEntryPointJoining.test.ts +7 -7
  106. package/test/integration/ReplicateData.test.ts +6 -1
  107. package/test/integration/SimultaneousConnections.test.ts +81 -49
  108. package/test/integration/Store.test.ts +1 -1
  109. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +1 -1
  110. package/test/integration/WebrtcConnectionManagement.test.ts +29 -0
  111. package/test/integration/WebsocketConnectionManagement.test.ts +65 -4
  112. package/test/integration/WebsocketConnectorRpc.test.ts +3 -5
  113. package/test/unit/SortedContactList.test.ts +15 -10
@@ -1,13 +1,11 @@
1
- import KBucket from 'k-bucket';
2
1
  import { PeerID, PeerIDKey } from '../helpers/PeerID';
3
2
  import { PeerDescriptor } from '../proto/packages/dht/protos/DhtRpc';
4
3
  import { DhtNodeRpcRemote } from './DhtNodeRpcRemote';
5
- import { SortedContactList } from './contact/SortedContactList';
6
4
  import { ConnectionManager } from '../connection/ConnectionManager';
7
5
  import EventEmitter from 'eventemitter3';
8
6
  interface PeerManagerConfig {
9
7
  numberOfNodesPerKBucket: number;
10
- maxNeighborListSize: number;
8
+ maxContactListSize: number;
11
9
  peerDiscoveryQueryBatchSize: number;
12
10
  ownPeerId: PeerID;
13
11
  connectionManager: ConnectionManager;
@@ -21,10 +19,11 @@ export interface PeerManagerEvents {
21
19
  randomContactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void;
22
20
  kBucketEmpty: () => void;
23
21
  }
22
+ export declare const getDistance: (peerId1: Uint8Array, peerId2: Uint8Array) => number;
24
23
  export declare class PeerManager extends EventEmitter<PeerManagerEvents> {
25
- bucket?: KBucket<DhtNodeRpcRemote>;
24
+ private bucket?;
26
25
  readonly connections: Map<PeerIDKey, DhtNodeRpcRemote>;
27
- neighborList?: SortedContactList<DhtNodeRpcRemote>;
26
+ private contacts?;
28
27
  private randomPeers?;
29
28
  private readonly config;
30
29
  private stopped;
@@ -40,9 +39,14 @@ export declare class PeerManager extends EventEmitter<PeerManagerEvents> {
40
39
  handlePeerLeaving(peerDescriptor: PeerDescriptor): void;
41
40
  private removeContact;
42
41
  stop(): void;
42
+ getClosestNeighborsTo(kademliaId: Uint8Array, limit?: number, excludeSet?: Set<PeerIDKey>): DhtNodeRpcRemote[];
43
+ getClosestContactsTo(kademliaId: Uint8Array, limit?: number, excludeSet?: Set<PeerIDKey>): DhtNodeRpcRemote[];
44
+ getNumberOfContacts(excludeSet?: Set<PeerIDKey>): number;
43
45
  getNumberOfConnections(): number;
46
+ getNumberOfNeighbors(): number;
47
+ getNeighbors(): PeerDescriptor[];
44
48
  handlePeerActive(peerId: PeerID): void;
45
49
  handlePeerUnresponsive(peerId: PeerID): void;
46
- handleNewPeers(contacts: PeerDescriptor[], setActive?: boolean): void;
50
+ handleNewPeers(peerDescriptors: PeerDescriptor[], setActive?: boolean): void;
47
51
  }
48
52
  export {};
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.PeerManager = void 0;
6
+ exports.PeerManager = exports.getDistance = void 0;
7
7
  const utils_1 = require("@streamr/utils");
8
8
  const k_bucket_1 = __importDefault(require("k-bucket"));
9
9
  const PeerID_1 = require("../helpers/PeerID");
@@ -12,10 +12,14 @@ const RandomContactList_1 = require("./contact/RandomContactList");
12
12
  const SortedContactList_1 = require("./contact/SortedContactList");
13
13
  const eventemitter3_1 = __importDefault(require("eventemitter3"));
14
14
  const logger = new utils_1.Logger(module);
15
+ const getDistance = (peerId1, peerId2) => {
16
+ return k_bucket_1.default.distance(peerId1, peerId2);
17
+ };
18
+ exports.getDistance = getDistance;
15
19
  class PeerManager extends eventemitter3_1.default {
16
20
  constructor(config) {
17
21
  super();
18
- // TODO make private
22
+ // Nodes that are connected to this node on Layer0
19
23
  this.connections = new Map();
20
24
  this.stopped = false;
21
25
  this.config = config;
@@ -33,16 +37,21 @@ class PeerManager extends eventemitter3_1.default {
33
37
  this.bucket.on('updated', () => {
34
38
  // TODO: Update contact info to the connection manager and reconnect
35
39
  });
36
- this.neighborList = new SortedContactList_1.SortedContactList(this.config.ownPeerId, this.config.maxNeighborListSize);
37
- this.neighborList.on('contactRemoved', (removedContact, activeContacts) => {
40
+ this.contacts = new SortedContactList_1.SortedContactList({
41
+ referenceId: this.config.ownPeerId,
42
+ maxSize: this.config.maxContactListSize,
43
+ allowToContainReferenceId: false,
44
+ emitEvents: true
45
+ });
46
+ this.contacts.on('contactRemoved', (removedContact, activeContacts) => {
38
47
  if (this.stopped) {
39
48
  return;
40
49
  }
41
50
  this.emit('contactRemoved', removedContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()));
42
51
  this.randomPeers.addContact(this.config.createDhtNodeRpcRemote(removedContact.getPeerDescriptor()));
43
52
  });
44
- this.neighborList.on('newContact', (newContact, activeContacts) => this.emit('newContact', newContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor())));
45
- this.randomPeers = new RandomContactList_1.RandomContactList(this.config.ownPeerId, this.config.maxNeighborListSize);
53
+ this.contacts.on('newContact', (newContact, activeContacts) => this.emit('newContact', newContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor())));
54
+ this.randomPeers = new RandomContactList_1.RandomContactList(this.config.ownPeerId, this.config.maxContactListSize);
46
55
  this.randomPeers.on('contactRemoved', (removedContact, activeContacts) => this.emit('randomContactRemoved', removedContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor())));
47
56
  this.randomPeers.on('newContact', (newContact, activeContacts) => this.emit('newRandomContact', newContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor())));
48
57
  }
@@ -50,7 +59,12 @@ class PeerManager extends eventemitter3_1.default {
50
59
  if (this.stopped) {
51
60
  return;
52
61
  }
53
- const sortingList = new SortedContactList_1.SortedContactList(this.config.ownPeerId, 100);
62
+ const sortingList = new SortedContactList_1.SortedContactList({
63
+ referenceId: this.config.ownPeerId,
64
+ maxSize: 100,
65
+ allowToContainReferenceId: false,
66
+ emitEvents: false
67
+ });
54
68
  sortingList.addContacts(oldContacts);
55
69
  const sortedContacts = sortingList.getAllContacts();
56
70
  this.config.connectionManager?.weakUnlockConnection(sortedContacts[sortedContacts.length - 1].getPeerDescriptor());
@@ -108,9 +122,9 @@ class PeerManager extends eventemitter3_1.default {
108
122
  }
109
123
  }
110
124
  getClosestActiveContactNotInBucket() {
111
- for (const contactId of this.neighborList.getContactIds()) {
112
- if (!this.bucket.get(contactId.value) && this.neighborList.isActive(contactId)) {
113
- return this.neighborList.getContact(contactId).contact;
125
+ for (const contactId of this.contacts.getContactIds()) {
126
+ if (!this.bucket.get(contactId.value) && this.contacts.isActive(contactId)) {
127
+ return this.contacts.getContact(contactId).contact;
114
128
  }
115
129
  }
116
130
  return undefined;
@@ -153,7 +167,7 @@ class PeerManager extends eventemitter3_1.default {
153
167
  logger.trace(`Removing contact ${(0, peerIdFromPeerDescriptor_1.getNodeIdFromPeerDescriptor)(contact)}`);
154
168
  const peerId = (0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(contact);
155
169
  this.bucket.remove(peerId.value);
156
- this.neighborList.removeContact(peerId);
170
+ this.contacts.removeContact(peerId);
157
171
  this.randomPeers.removeContact(peerId);
158
172
  }
159
173
  stop() {
@@ -163,42 +177,93 @@ class PeerManager extends eventemitter3_1.default {
163
177
  this.bucket.remove(rpcRemote.id);
164
178
  });
165
179
  this.bucket.removeAllListeners();
166
- this.neighborList.stop();
180
+ this.contacts.stop();
167
181
  this.randomPeers.stop();
168
182
  this.connections.clear();
169
183
  }
184
+ getClosestNeighborsTo(kademliaId, limit, excludeSet) {
185
+ const closest = new SortedContactList_1.SortedContactList({
186
+ referenceId: PeerID_1.PeerID.fromValue(kademliaId),
187
+ allowToContainReferenceId: true,
188
+ emitEvents: false
189
+ });
190
+ this.bucket.toArray().map((contact) => closest.addContact(contact));
191
+ // TODO should set the excludeSet and limit to SortedContactList constructor and remove these line
192
+ return closest.getClosestContacts(limit).filter((contact) => {
193
+ if (!excludeSet) {
194
+ return true;
195
+ }
196
+ else {
197
+ return !excludeSet.has(contact.getPeerId().toKey());
198
+ }
199
+ });
200
+ }
201
+ // TODO reduce copy-paste?
202
+ getClosestContactsTo(kademliaId, limit, excludeSet) {
203
+ const closest = new SortedContactList_1.SortedContactList({
204
+ referenceId: PeerID_1.PeerID.fromValue(kademliaId),
205
+ allowToContainReferenceId: true,
206
+ emitEvents: false
207
+ });
208
+ this.contacts.getAllContacts().map((contact) => closest.addContact(contact));
209
+ // TODO should set the excludeSet and limit to SortedContactList constructor and remove these line
210
+ return closest.getClosestContacts(limit).filter((contact) => {
211
+ if (!excludeSet) {
212
+ return true;
213
+ }
214
+ else {
215
+ return !excludeSet.has(contact.getPeerId().toKey());
216
+ }
217
+ });
218
+ }
219
+ getNumberOfContacts(excludeSet) {
220
+ return this.contacts.getAllContacts().filter((contact) => {
221
+ if (!excludeSet) {
222
+ return true;
223
+ }
224
+ else {
225
+ return !excludeSet.has(contact.getPeerId().toKey());
226
+ }
227
+ }).length;
228
+ }
170
229
  getNumberOfConnections() {
171
230
  return this.connections.size;
172
231
  }
232
+ getNumberOfNeighbors() {
233
+ return this.bucket.count();
234
+ }
235
+ getNeighbors() {
236
+ return this.bucket.toArray().map((rpcRemote) => rpcRemote.getPeerDescriptor());
237
+ }
173
238
  handlePeerActive(peerId) {
174
- this.neighborList.setActive(peerId);
239
+ this.contacts.setActive(peerId);
175
240
  }
176
241
  handlePeerUnresponsive(peerId) {
177
242
  this.bucket.remove(peerId.value);
178
- this.neighborList.removeContact(peerId);
243
+ this.contacts.removeContact(peerId);
179
244
  }
180
- handleNewPeers(contacts, setActive = false) {
245
+ handleNewPeers(peerDescriptors, setActive) {
181
246
  if (this.stopped) {
182
247
  return;
183
248
  }
184
- contacts.forEach((contact) => {
185
- if (!PeerID_1.PeerID.fromValue(contact.nodeId).equals(this.config.ownPeerId)) {
249
+ peerDescriptors.forEach((contact) => {
250
+ const peerId = (0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(contact);
251
+ if (!peerId.equals(this.config.ownPeerId)) {
186
252
  logger.trace(`Adding new contact ${(0, peerIdFromPeerDescriptor_1.getNodeIdFromPeerDescriptor)(contact)}`);
187
- const rpcRemote = this.config.createDhtNodeRpcRemote(contact);
188
- if ((this.bucket.get(contact.nodeId) === null)
189
- && (this.neighborList.getContact((0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(contact)) === undefined)) {
190
- this.neighborList.addContact(rpcRemote);
191
- if (setActive) {
192
- const peerId = (0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(contact);
193
- this.neighborList.setActive(peerId);
194
- }
195
- this.bucket.add(rpcRemote);
253
+ const remote = this.config.createDhtNodeRpcRemote(contact);
254
+ const isInBucket = (this.bucket.get(contact.nodeId) !== null);
255
+ const isInNeighborList = (this.contacts.getContact(peerId) !== undefined);
256
+ if (isInBucket || isInNeighborList) {
257
+ this.randomPeers.addContact(remote);
258
+ }
259
+ if (!isInBucket) {
260
+ this.bucket.add(remote);
196
261
  }
197
- else {
198
- this.randomPeers.addContact(rpcRemote);
262
+ if (!isInNeighborList) {
263
+ this.contacts.addContact(remote);
199
264
  }
200
- if (this.neighborList.getContact(rpcRemote.getPeerId()) !== undefined) {
201
- this.neighborList.addContact(rpcRemote);
265
+ if (setActive) {
266
+ this.contacts.setActive(peerId);
202
267
  }
203
268
  }
204
269
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PeerManager.js","sourceRoot":"","sources":["../../../src/dht/PeerManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PeerManager.js","sourceRoot":"","sources":["../../../src/dht/PeerManager.ts"],"names":[],"mappings":";;;;;;AAAA,0CAEuB;AACvB,wDAA8B;AAC9B,8CAAqD;AACrD,kFAI4C;AAK5C,mEAA+D;AAC/D,mEAA+D;AAE/D,kEAAwC;AAExC,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAoB1B,MAAM,WAAW,GAAG,CAAC,OAAmB,EAAE,OAAmB,EAAU,EAAE;IAC5E,OAAO,kBAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AAC7C,CAAC,CAAA;AAFY,QAAA,WAAW,eAEvB;AAED,MAAa,WAAY,SAAQ,uBAA+B;IAkB5D,YAAY,MAAyB;QACjC,KAAK,EAAE,CAAA;QATX,kDAAkD;QAClC,gBAAW,GAAqC,IAAI,GAAG,EAAE,CAAA;QAKjE,YAAO,GAAY,KAAK,CAAA;QAI5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,YAAY,EAAE,CAAA;IACvB,CAAC;IAEO,YAAY;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,kBAAO,CAAmB;YACxC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK;YACxC,uBAAuB,EAAE,IAAI,CAAC,MAAM,CAAC,uBAAuB;YAC5D,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,uBAAuB;SAC3D,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,WAA+B,EAAE,UAA4B,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAA;QACtI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAyB,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;QACxF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,OAAyB,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;QACpF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC3B,oEAAoE;QACxE,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,qCAAiB,CAAC;YAClC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAClC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB;YACvC,yBAAyB,EAAE,KAAK;YAChC,UAAU,EAAE,IAAI;SACnB,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,cAAgC,EAAE,cAAkC,EAAE,EAAE;YACxG,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,OAAM;aACT;YACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,iBAAiB,EAAE,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;YACjH,IAAI,CAAC,WAAY,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;QACxG,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,UAA4B,EAAE,cAAkC,EAAE,EAAE,CAChG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,iBAAiB,EAAE,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAC5G,CAAA;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAA;QAC/F,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,cAAgC,EAAE,cAAkC,EAAE,EAAE,CAC3G,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,cAAc,CAAC,iBAAiB,EAAE,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAC1H,CAAA;QACD,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,UAA4B,EAAE,cAAkC,EAAE,EAAE,CACnG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,iBAAiB,EAAE,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAClH,CAAA;IACL,CAAC;IAEO,aAAa,CAAC,WAA+B,EAAE,UAA4B;QAC/E,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAM;SACT;QACD,MAAM,WAAW,GAAwC,IAAI,qCAAiB,CAAC;YAC3E,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAClC,OAAO,EAAE,GAAG;YACZ,yBAAyB,EAAE,KAAK;YAChC,UAAU,EAAE,KAAK;SACpB,CAAC,CAAA;QACF,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QACpC,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,EAAE,CAAA;QACnD,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAA;QAClH,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAA;QAChF,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAChC,CAAC;IAEO,gBAAgB,CAAC,OAAyB;QAC9C,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAM;SACT;QACD,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAA;QAChF,MAAM,CAAC,KAAK,CAAC,mBAAmB,IAAA,sDAA2B,EAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAA;QAC3F,IAAI,IAAI,CAAC,MAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;SAC5B;IACL,CAAC;IAEO,cAAc,CAAC,OAAyB;QAC5C,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAM;SACT;QACD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;YACpD,0DAA0D;YAC1D,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAA;YAC9E,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE;gBACnD,MAAM,CAAC,KAAK,CAAC,qBAAqB,IAAA,sDAA2B,EAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAA;aAChG;iBAAM,EAAK,6BAA6B;gBACrC,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAA,sDAA2B,EAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;gBACzF,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC3B,IAAI,MAAM,EAAE;wBACR,MAAM,CAAC,KAAK,CAAC,qBAAqB,IAAA,sDAA2B,EAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAA;qBAChG;yBAAM;wBACH,MAAM,CAAC,KAAK,CAAC,cAAc,GAAG,IAAA,sDAA2B,EAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;wBACvF,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAA;wBAChF,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAA;wBAC/C,IAAI,CAAC,yBAAyB,EAAE,CAAA;qBACnC;oBACD,OAAM;gBACV,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE;oBACZ,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAA;oBAChF,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAA;oBAC/C,IAAI,CAAC,yBAAyB,EAAE,CAAA;gBACpC,CAAC,CAAC,CAAA;aACL;SACJ;IACL,CAAC;IAEO,yBAAyB;QAC7B,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAM;SACT;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,kCAAkC,EAAE,CAAA;QACzD,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;SACrD;IACL,CAAC;IAEO,kCAAkC;QACtC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,QAAS,CAAC,aAAa,EAAE,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;gBAC1E,OAAO,IAAI,CAAC,QAAS,CAAC,UAAU,CAAC,SAAS,CAAE,CAAC,OAAO,CAAA;aACvD;SACJ;QACD,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,eAAe,CAAC,cAA8B;QAC1C,IAAI,eAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;YACvE,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;SAC5C;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAA;QACpE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAM,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;YAC/D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAM,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAA;YACvE,MAAM,CAAC,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;SACjE;aAAM;YACH,MAAM,CAAC,KAAK,CAAC,uFAAuF,CAAC,CAAA;SACxG;QACD,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,IAAA,sDAA2B,EAAC,cAAc,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IAC3G,CAAC;IAED,kBAAkB,CAAC,cAA8B,EAAE,aAAsB;QACrE,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAA,sDAA2B,EAAC,cAAc,CAAC,CAAC,CAAA;QAC5E,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAA,gDAAqB,EAAC,cAAc,CAAC,CAAC,CAAA;QAC9D,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACtB,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;YAC1C,IAAI,aAAa,KAAK,IAAI,EAAE;gBACxB,MAAM,CAAC,KAAK,CAAC,IAAA,sDAA2B,EAAC,cAAc,CAAC,GAAG,GAAG,GAAG,6CAA6C,GAAG,aAAa,CAAC,CAAA;gBAC/H,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAA;aACrC;iBAAM;gBACH,MAAM,CAAC,KAAK,CAAC,IAAA,sDAA2B,EAAC,cAAc,CAAC,GAAG,GAAG,GAAG,6CAA6C,GAAG,aAAa,CAAC,CAAA;aAClI;SACJ;IACL,CAAC;IAED,iBAAiB,CAAC,cAA8B;QAC5C,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAA;IACtC,CAAC;IAEO,aAAa,CAAC,OAAuB;QACzC,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAM;SACT;QACD,MAAM,CAAC,KAAK,CAAC,oBAAoB,IAAA,sDAA2B,EAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACxE,MAAM,MAAM,GAAG,IAAA,mDAAwB,EAAC,OAAO,CAAC,CAAA;QAChD,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACjC,IAAI,CAAC,QAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACpC,IAAI,CAAC,WAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IAC3C,CAAC;IAED,IAAI;QACA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC,MAAO,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,SAA2B,EAAE,EAAE;YAC3D,SAAS,CAAC,WAAW,EAAE,CAAA;YACvB,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QACrC,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,MAAO,CAAC,kBAAkB,EAAE,CAAA;QACjC,IAAI,CAAC,QAAS,CAAC,IAAI,EAAE,CAAA;QACrB,IAAI,CAAC,WAAY,CAAC,IAAI,EAAE,CAAA;QACxB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;IAED,qBAAqB,CAAC,UAAsB,EAAE,KAAc,EAAE,UAA2B;QACrF,MAAM,OAAO,GAAG,IAAI,qCAAiB,CAAmB;YACpD,WAAW,EAAE,eAAM,CAAC,SAAS,CAAC,UAAU,CAAC;YACzC,yBAAyB,EAAE,IAAI;YAC/B,UAAU,EAAE,KAAK;SACpB,CAAC,CAAA;QACF,IAAI,CAAC,MAAO,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAA;QACpE,kGAAkG;QAClG,OAAO,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;YACxD,IAAI,CAAC,UAAU,EAAE;gBACb,OAAO,IAAI,CAAA;aACd;iBAAM;gBACH,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;aACtD;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAED,0BAA0B;IAC1B,oBAAoB,CAAC,UAAsB,EAAE,KAAc,EAAE,UAA2B;QACpF,MAAM,OAAO,GAAG,IAAI,qCAAiB,CAAmB;YACpD,WAAW,EAAE,eAAM,CAAC,SAAS,CAAC,UAAU,CAAC;YACzC,yBAAyB,EAAE,IAAI;YAC/B,UAAU,EAAE,KAAK;SACpB,CAAC,CAAA;QACF,IAAI,CAAC,QAAS,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAA;QAC7E,kGAAkG;QAClG,OAAO,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;YACxD,IAAI,CAAC,UAAU,EAAE;gBACb,OAAO,IAAI,CAAA;aACd;iBAAM;gBACH,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;aACtD;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAED,mBAAmB,CAAC,UAA2B;QAC3C,OAAO,IAAI,CAAC,QAAS,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;YACtD,IAAI,CAAC,UAAU,EAAE;gBACb,OAAO,IAAI,CAAA;aACd;iBAAM;gBACH,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;aACtD;QACL,CAAC,CAAC,CAAC,MAAM,CAAA;IACb,CAAC;IAED,sBAAsB;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAChC,CAAC;IAED,oBAAoB;QAChB,OAAO,IAAI,CAAC,MAAO,CAAC,KAAK,EAAE,CAAA;IAC/B,CAAC;IAED,YAAY;QACR,OAAO,IAAI,CAAC,MAAO,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,SAA2B,EAAE,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAA;IACrG,CAAC;IAED,gBAAgB,CAAC,MAAc;QAC3B,IAAI,CAAC,QAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC;IAED,sBAAsB,CAAC,MAAc;QACjC,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACjC,IAAI,CAAC,QAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IACxC,CAAC;IAED,cAAc,CAAC,eAAiC,EAAE,SAAmB;QACjE,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,OAAM;SACT;QACD,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,IAAA,mDAAwB,EAAC,OAAO,CAAC,CAAA;YAChD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;gBACvC,MAAM,CAAC,KAAK,CAAC,sBAAsB,IAAA,sDAA2B,EAAC,OAAO,CAAC,EAAE,CAAC,CAAA;gBAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAA;gBAC1D,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAA;gBAC9D,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,QAAS,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAA;gBAC1E,IAAI,UAAU,IAAI,gBAAgB,EAAE;oBAChC,IAAI,CAAC,WAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;iBACvC;gBACD,IAAI,CAAC,UAAU,EAAE;oBACb,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;iBAC3B;gBACD,IAAI,CAAC,gBAAgB,EAAE;oBACnB,IAAI,CAAC,QAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;iBACpC;gBACD,IAAI,SAAS,EAAE;oBACX,IAAI,CAAC,QAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;iBACnC;aACJ;QACL,CAAC,CAAC,CAAA;IACN,CAAC;CACJ;AA9RD,kCA8RC"}
@@ -1,23 +1,37 @@
1
1
  import { PeerID } from '../../helpers/PeerID';
2
- import { ContactList } from './ContactList';
2
+ import { ContactState, Events } from './ContactList';
3
+ import EventEmitter from 'eventemitter3';
4
+ export interface SortedContactListConfig {
5
+ referenceId: PeerID;
6
+ allowToContainReferenceId: boolean;
7
+ emitEvents: boolean;
8
+ maxSize?: number;
9
+ peerIdDistanceLimit?: PeerID;
10
+ excludedPeerIDs?: PeerID[];
11
+ }
3
12
  export declare class SortedContactList<C extends {
4
13
  getPeerId: () => PeerID;
5
- }> extends ContactList<C> {
6
- private allowLocalPeerId;
7
- private peerIdDistanceLimit?;
8
- private excludedPeerIDs?;
9
- constructor(ownId: PeerID, maxSize: number, defaultContactQueryLimit?: number, allowLocalPeerId?: boolean, peerIdDistanceLimit?: PeerID, excludedPeerIDs?: PeerID[]);
14
+ }> extends EventEmitter<Events<C>> {
15
+ private config;
16
+ private contactsById;
17
+ private contactIds;
18
+ constructor(config: SortedContactListConfig);
10
19
  getClosestContactId(): PeerID;
11
20
  getContactIds(): PeerID[];
12
21
  addContact(contact: C): void;
13
22
  addContacts(contacts: C[]): void;
23
+ getContact(id: PeerID): ContactState<C> | undefined;
14
24
  setContacted(contactId: PeerID): void;
15
25
  setActive(contactId: PeerID): void;
16
26
  getClosestContacts(limit?: number): C[];
17
27
  getUncontactedContacts(num: number): C[];
18
28
  getActiveContacts(limit?: number): C[];
19
29
  compareIds(id1: PeerID, id2: PeerID): number;
30
+ private distanceToReferenceId;
20
31
  removeContact(id: PeerID): boolean;
21
32
  isActive(id: PeerID): boolean;
22
33
  getAllContacts(): C[];
34
+ getSize(): number;
35
+ clear(): void;
36
+ stop(): void;
23
37
  }
@@ -4,15 +4,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.SortedContactList = void 0;
7
- const k_bucket_1 = __importDefault(require("k-bucket"));
8
7
  const ContactList_1 = require("./ContactList");
9
- class SortedContactList extends ContactList_1.ContactList {
10
- constructor(ownId, maxSize, defaultContactQueryLimit, allowLocalPeerId = false, peerIdDistanceLimit, excludedPeerIDs) {
11
- super(ownId, maxSize, defaultContactQueryLimit);
8
+ const lodash_1 = require("lodash");
9
+ const eventemitter3_1 = __importDefault(require("eventemitter3"));
10
+ const PeerManager_1 = require("../PeerManager");
11
+ class SortedContactList extends eventemitter3_1.default {
12
+ constructor(config) {
13
+ super();
14
+ this.contactsById = new Map();
15
+ this.contactIds = [];
16
+ this.config = config;
12
17
  this.compareIds = this.compareIds.bind(this);
13
- this.allowLocalPeerId = allowLocalPeerId;
14
- this.peerIdDistanceLimit = peerIdDistanceLimit;
15
- this.excludedPeerIDs = excludedPeerIDs;
16
18
  }
17
19
  getClosestContactId() {
18
20
  return this.contactIds[0];
@@ -21,35 +23,42 @@ class SortedContactList extends ContactList_1.ContactList {
21
23
  return this.contactIds;
22
24
  }
23
25
  addContact(contact) {
24
- if (this.excludedPeerIDs
25
- && this.excludedPeerIDs.some((peerId) => contact.getPeerId().equals(peerId))) {
26
+ if (this.config.excludedPeerIDs !== undefined
27
+ && this.config.excludedPeerIDs.some((peerId) => contact.getPeerId().equals(peerId))) {
26
28
  return;
27
29
  }
28
- if ((!this.allowLocalPeerId && this.ownId.equals(contact.getPeerId())) ||
29
- (this.peerIdDistanceLimit !== undefined && this.compareIds(this.peerIdDistanceLimit, contact.getPeerId()) < 0)) {
30
+ if ((!this.config.allowToContainReferenceId && this.config.referenceId.equals(contact.getPeerId())) ||
31
+ (this.config.peerIdDistanceLimit !== undefined && this.compareIds(this.config.peerIdDistanceLimit, contact.getPeerId()) < 0)) {
30
32
  return;
31
33
  }
32
34
  if (!this.contactsById.has(contact.getPeerId().toKey())) {
33
- if (this.contactIds.length < this.maxSize) {
35
+ if ((this.config.maxSize === undefined) || (this.contactIds.length < this.config.maxSize)) {
34
36
  this.contactsById.set(contact.getPeerId().toKey(), new ContactList_1.ContactState(contact));
35
- this.contactIds.push(contact.getPeerId());
36
- this.contactIds.sort(this.compareIds);
37
+ const index = (0, lodash_1.sortedIndexBy)(this.contactIds, contact.getPeerId(), (id) => { return this.distanceToReferenceId(id); });
38
+ this.contactIds.splice(index, 0, contact.getPeerId());
37
39
  }
38
- else if (this.compareIds(this.contactIds[this.maxSize - 1], contact.getPeerId()) > 0) {
40
+ else if (this.compareIds(this.contactIds[this.config.maxSize - 1], contact.getPeerId()) > 0) {
39
41
  const removedId = this.contactIds.pop();
40
42
  const removedContact = this.contactsById.get(removedId.toKey()).contact;
41
43
  this.contactsById.delete(removedId.toKey());
42
44
  this.contactsById.set(contact.getPeerId().toKey(), new ContactList_1.ContactState(contact));
43
- this.contactIds.push(contact.getPeerId());
44
- this.contactIds.sort(this.compareIds);
45
- this.emit('contactRemoved', removedContact, this.getClosestContacts());
45
+ const index = (0, lodash_1.sortedIndexBy)(this.contactIds, contact.getPeerId(), (id) => { return this.distanceToReferenceId(id); });
46
+ this.contactIds.splice(index, 0, contact.getPeerId());
47
+ if (this.config.emitEvents) {
48
+ this.emit('contactRemoved', removedContact, this.getClosestContacts());
49
+ }
50
+ }
51
+ if (this.config.emitEvents) {
52
+ this.emit('newContact', contact, this.getClosestContacts());
46
53
  }
47
- this.emit('newContact', contact, this.getClosestContacts());
48
54
  }
49
55
  }
50
56
  addContacts(contacts) {
51
57
  contacts.forEach((contact) => this.addContact(contact));
52
58
  }
59
+ getContact(id) {
60
+ return this.contactsById.get(id.toKey());
61
+ }
53
62
  setContacted(contactId) {
54
63
  if (this.contactsById.has(contactId.toKey())) {
55
64
  this.contactsById.get(contactId.toKey()).contacted = true;
@@ -60,7 +69,7 @@ class SortedContactList extends ContactList_1.ContactList {
60
69
  this.contactsById.get(contactId.toKey()).active = true;
61
70
  }
62
71
  }
63
- getClosestContacts(limit = this.defaultContactQueryLimit) {
72
+ getClosestContacts(limit) {
64
73
  const ret = [];
65
74
  this.contactIds.forEach((contactId) => {
66
75
  const contact = this.contactsById.get(contactId.toKey());
@@ -68,7 +77,12 @@ class SortedContactList extends ContactList_1.ContactList {
68
77
  ret.push(contact.contact);
69
78
  }
70
79
  });
71
- return ret.slice(0, limit);
80
+ if (limit === undefined) {
81
+ return ret;
82
+ }
83
+ else {
84
+ return ret.slice(0, limit);
85
+ }
72
86
  }
73
87
  getUncontactedContacts(num) {
74
88
  const ret = [];
@@ -99,17 +113,23 @@ class SortedContactList extends ContactList_1.ContactList {
99
113
  }
100
114
  }
101
115
  compareIds(id1, id2) {
102
- const distance1 = k_bucket_1.default.distance(this.ownId.value, id1.value);
103
- const distance2 = k_bucket_1.default.distance(this.ownId.value, id2.value);
116
+ const distance1 = this.distanceToReferenceId(id1);
117
+ const distance2 = this.distanceToReferenceId(id2);
104
118
  return distance1 - distance2;
105
119
  }
120
+ // TODO inline this method?
121
+ distanceToReferenceId(id) {
122
+ return (0, PeerManager_1.getDistance)(this.config.referenceId.value, id.value);
123
+ }
106
124
  removeContact(id) {
107
125
  if (this.contactsById.has(id.toKey())) {
108
126
  const removed = this.contactsById.get(id.toKey()).contact;
109
127
  const index = this.contactIds.findIndex((element) => element.equals(id));
110
128
  this.contactIds.splice(index, 1);
111
129
  this.contactsById.delete(id.toKey());
112
- this.emit('contactRemoved', removed, this.getClosestContacts());
130
+ if (this.config.emitEvents) {
131
+ this.emit('contactRemoved', removed, this.getClosestContacts());
132
+ }
113
133
  return true;
114
134
  }
115
135
  return false;
@@ -120,6 +140,17 @@ class SortedContactList extends ContactList_1.ContactList {
120
140
  getAllContacts() {
121
141
  return this.contactIds.map((peerId) => this.contactsById.get(peerId.toKey()).contact);
122
142
  }
143
+ getSize() {
144
+ return this.contactIds.length;
145
+ }
146
+ clear() {
147
+ this.contactsById.clear();
148
+ this.contactIds = [];
149
+ }
150
+ stop() {
151
+ this.removeAllListeners();
152
+ this.clear();
153
+ }
123
154
  }
124
155
  exports.SortedContactList = SortedContactList;
125
156
  //# sourceMappingURL=SortedContactList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SortedContactList.js","sourceRoot":"","sources":["../../../../src/dht/contact/SortedContactList.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA8B;AAE9B,+CAAyD;AAEzD,MAAa,iBAAyD,SAAQ,yBAAc;IAMxF,YACI,KAAa,EACb,OAAe,EACf,wBAAiC,EACjC,gBAAgB,GAAG,KAAK,EACxB,mBAA4B,EAC5B,eAA0B;QAE1B,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,wBAAwB,CAAC,CAAA;QAC/C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC5C,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QACxC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAA;QAC9C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;IAC1C,CAAC;IAEM,mBAAmB;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IAC7B,CAAC;IAEM,aAAa;QAChB,OAAO,IAAI,CAAC,UAAU,CAAA;IAC1B,CAAC;IAEM,UAAU,CAAC,OAAU;QACxB,IAAI,IAAI,CAAC,eAAe;eACjB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE;YAC9E,OAAM;SACT;QAED,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAClE,CAAC,IAAI,CAAC,mBAAmB,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;YAChH,OAAM;SACT;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE;YACrD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE;gBACvC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,0BAAY,CAAC,OAAO,CAAC,CAAC,CAAA;gBAC7E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;gBACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;aACxC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE;gBACpF,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAA;gBACvC,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAU,CAAC,KAAK,EAAE,CAAE,CAAC,OAAO,CAAA;gBACzE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAU,CAAC,KAAK,EAAE,CAAC,CAAA;gBAC5C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,0BAAY,CAAC,OAAO,CAAC,CAAC,CAAA;gBAC7E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;gBACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBACrC,IAAI,CAAC,IAAI,CACL,gBAAgB,EAChB,cAAc,EACd,IAAI,CAAC,kBAAkB,EAAE,CAC5B,CAAA;aACJ;YACD,IAAI,CAAC,IAAI,CACL,YAAY,EACZ,OAAO,EACP,IAAI,CAAC,kBAAkB,EAAE,CAC5B,CAAA;SACJ;IACL,CAAC;IAEM,WAAW,CAAC,QAAa;QAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3D,CAAC;IAEM,YAAY,CAAC,SAAiB;QACjC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE;YAC1C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAE,CAAC,SAAS,GAAG,IAAI,CAAA;SAC7D;IACL,CAAC;IAEM,SAAS,CAAC,SAAiB;QAC9B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE;YAC1C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAE,CAAC,MAAM,GAAG,IAAI,CAAA;SAC1D;IACL,CAAC;IAEM,kBAAkB,CAAC,KAAK,GAAG,IAAI,CAAC,wBAAwB;QAC3D,MAAM,GAAG,GAAQ,EAAE,CAAA;QACnB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAA;YACxD,IAAI,OAAO,EAAE;gBACT,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;aAC5B;QACL,CAAC,CAAC,CAAA;QACF,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IAC9B,CAAC;IAEM,sBAAsB,CAAC,GAAW;QACrC,MAAM,GAAG,GAAQ,EAAE,CAAA;QACnB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAA;YACxD,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBAC/B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBACzB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE;oBACnB,OAAO,GAAG,CAAA;iBACb;aACJ;SACJ;QACD,OAAO,GAAG,CAAA;IACd,CAAC;IAEM,iBAAiB,CAAC,KAAc;QACnC,MAAM,GAAG,GAAQ,EAAE,CAAA;QACnB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAA;YACxD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;gBAC3B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;aAC5B;QACL,CAAC,CAAC,CAAA;QACF,IAAI,KAAK,KAAK,SAAS,EAAE;YACrB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;SAC7B;aAAM;YACH,OAAO,GAAG,CAAA;SACb;IACL,CAAC;IAEM,UAAU,CAAC,GAAW,EAAE,GAAW;QACtC,MAAM,SAAS,GAAG,kBAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;QAC/D,MAAM,SAAS,GAAG,kBAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;QAC/D,OAAO,SAAS,GAAG,SAAS,CAAA;IAChC,CAAC;IAEM,aAAa,CAAC,EAAU;QAC3B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAE,CAAC,OAAO,CAAA;YAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;YACxE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAChC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;YACpC,IAAI,CAAC,IAAI,CACL,gBAAgB,EAChB,OAAO,EACP,IAAI,CAAC,kBAAkB,EAAE,CAC5B,CAAA;YACD,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;IAChB,CAAC;IAEM,QAAQ,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA;IAChG,CAAC;IAEM,cAAc;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAE,CAAC,OAAO,CAAC,CAAA;IAC1F,CAAC;CACJ;AAtJD,8CAsJC"}
1
+ {"version":3,"file":"SortedContactList.js","sourceRoot":"","sources":["../../../../src/dht/contact/SortedContactList.ts"],"names":[],"mappings":";;;;;;AACA,+CAAoD;AACpD,mCAAsC;AACtC,kEAAwC;AACxC,gDAA4C;AAe5C,MAAa,iBAAyD,SAAQ,uBAAuB;IAMjG,YACI,MAA+B;QAE/B,KAAK,EAAE,CAAA;QANH,iBAAY,GAAoC,IAAI,GAAG,EAAE,CAAA;QACzD,eAAU,GAAa,EAAE,CAAA;QAM7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChD,CAAC;IAEM,mBAAmB;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IAC7B,CAAC;IAEM,aAAa;QAChB,OAAO,IAAI,CAAC,UAAU,CAAA;IAC1B,CAAC;IAEM,UAAU,CAAC,OAAU;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,SAAS;eACtC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE;YACrF,OAAM;SACT;QAED,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,yBAAyB,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/F,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;YAC9H,OAAM;SACT;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE;YACrD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;gBACvF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,0BAAY,CAAC,OAAO,CAAC,CAAC,CAAA;gBAE7E,MAAM,KAAK,GAAG,IAAA,sBAAa,EAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAU,EAAE,EAAE,GAAG,OAAO,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;gBAC5H,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;aACxD;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE;gBAC3F,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAA;gBACvC,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAU,CAAC,KAAK,EAAE,CAAE,CAAC,OAAO,CAAA;gBACzE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAU,CAAC,KAAK,EAAE,CAAC,CAAA;gBAC5C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,0BAAY,CAAC,OAAO,CAAC,CAAC,CAAA;gBAE7E,MAAM,KAAK,GAAG,IAAA,sBAAa,EAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAU,EAAE,EAAE,GAAG,OAAO,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;gBAC5H,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;gBACrD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;oBACxB,IAAI,CAAC,IAAI,CACL,gBAAgB,EAChB,cAAc,EACd,IAAI,CAAC,kBAAkB,EAAE,CAC5B,CAAA;iBACJ;aACJ;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;gBACxB,IAAI,CAAC,IAAI,CACL,YAAY,EACZ,OAAO,EACP,IAAI,CAAC,kBAAkB,EAAE,CAC5B,CAAA;aACJ;SACJ;IACL,CAAC;IAEM,WAAW,CAAC,QAAa;QAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3D,CAAC;IAEM,UAAU,CAAC,EAAU;QACxB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;IAC5C,CAAC;IAEM,YAAY,CAAC,SAAiB;QACjC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE;YAC1C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAE,CAAC,SAAS,GAAG,IAAI,CAAA;SAC7D;IACL,CAAC;IAEM,SAAS,CAAC,SAAiB;QAC9B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE;YAC1C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAE,CAAC,MAAM,GAAG,IAAI,CAAA;SAC1D;IACL,CAAC;IAEM,kBAAkB,CAAC,KAAc;QACpC,MAAM,GAAG,GAAQ,EAAE,CAAA;QACnB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAA;YACxD,IAAI,OAAO,EAAE;gBACT,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;aAC5B;QACL,CAAC,CAAC,CAAA;QACF,IAAI,KAAK,KAAK,SAAS,EAAE;YACrB,OAAO,GAAG,CAAA;SACb;aAAM;YACH,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;SAC7B;IACL,CAAC;IAEM,sBAAsB,CAAC,GAAW;QACrC,MAAM,GAAG,GAAQ,EAAE,CAAA;QACnB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAA;YACxD,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBAC/B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBACzB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE;oBACnB,OAAO,GAAG,CAAA;iBACb;aACJ;SACJ;QACD,OAAO,GAAG,CAAA;IACd,CAAC;IAEM,iBAAiB,CAAC,KAAc;QACnC,MAAM,GAAG,GAAQ,EAAE,CAAA;QACnB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAA;YACxD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;gBAC3B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;aAC5B;QACL,CAAC,CAAC,CAAA;QACF,IAAI,KAAK,KAAK,SAAS,EAAE;YACrB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;SAC7B;aAAM;YACH,OAAO,GAAG,CAAA;SACb;IACL,CAAC;IAEM,UAAU,CAAC,GAAW,EAAE,GAAW;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;QACjD,OAAO,SAAS,GAAG,SAAS,CAAA;IAChC,CAAC;IAED,2BAA2B;IACnB,qBAAqB,CAAC,EAAU;QACpC,OAAO,IAAA,yBAAW,EAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;IAC/D,CAAC;IAEM,aAAa,CAAC,EAAU;QAC3B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAE,CAAC,OAAO,CAAA;YAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;YACxE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAChC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;YACpC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;gBACxB,IAAI,CAAC,IAAI,CACL,gBAAgB,EAChB,OAAO,EACP,IAAI,CAAC,kBAAkB,EAAE,CAC5B,CAAA;aACJ;YACD,OAAO,IAAI,CAAA;SACd;QACD,OAAO,KAAK,CAAA;IAChB,CAAC;IAEM,QAAQ,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA;IAChG,CAAC;IAEM,cAAc;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAE,CAAC,OAAO,CAAC,CAAA;IAC1F,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAA;IACjC,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;QACzB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;IACxB,CAAC;IAEM,IAAI;QACP,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACzB,IAAI,CAAC,KAAK,EAAE,CAAA;IAChB,CAAC;CACJ;AAlLD,8CAkLC"}
@@ -1,13 +1,11 @@
1
- import { PeerDescriptor } from '../../proto/packages/dht/protos/DhtRpc';
2
- import { SortedContactList } from '../contact/SortedContactList';
3
- import { DhtNodeRpcRemote } from '../DhtNodeRpcRemote';
1
+ import { PeerIDKey } from '../../helpers/PeerID';
4
2
  import { PeerManager } from '../PeerManager';
5
3
  interface DiscoverySessionConfig {
6
4
  targetId: Uint8Array;
7
- localPeerDescriptor: PeerDescriptor;
8
5
  parallelism: number;
9
6
  noProgressLimit: number;
10
7
  peerManager: PeerManager;
8
+ contactedPeers: Set<PeerIDKey>;
11
9
  }
12
10
  export declare class DiscoverySession {
13
11
  readonly sessionId: string;
@@ -23,7 +21,7 @@ export declare class DiscoverySession {
23
21
  private onClosestPeersRequestSucceeded;
24
22
  private onClosestPeersRequestFailed;
25
23
  private findMoreContacts;
26
- findClosestNodes(timeout: number): Promise<SortedContactList<DhtNodeRpcRemote>>;
24
+ findClosestNodes(timeout: number): Promise<void>;
27
25
  stop(): void;
28
26
  }
29
27
  export {};
@@ -7,6 +7,7 @@ exports.DiscoverySession = void 0;
7
7
  const utils_1 = require("@streamr/utils");
8
8
  const eventemitter3_1 = __importDefault(require("eventemitter3"));
9
9
  const uuid_1 = require("uuid");
10
+ const PeerManager_1 = require("../PeerManager");
10
11
  const peerIdFromPeerDescriptor_1 = require("../../helpers/peerIdFromPeerDescriptor");
11
12
  const logger = new utils_1.Logger(module);
12
13
  class DiscoverySession {
@@ -31,7 +32,7 @@ class DiscoverySession {
31
32
  }
32
33
  logger.trace(`Getting closest peers from contact: ${(0, peerIdFromPeerDescriptor_1.getNodeIdFromPeerDescriptor)(contact.getPeerDescriptor())}`);
33
34
  this.outgoingClosestPeersRequestsCounter++;
34
- this.config.peerManager.neighborList.setContacted(contact.getPeerId());
35
+ this.config.contactedPeers.add(contact.getPeerId().toKey());
35
36
  const returnedContacts = await contact.getClosestPeers(this.config.targetId);
36
37
  this.config.peerManager.handlePeerActive(contact.getPeerId());
37
38
  return returnedContacts;
@@ -41,9 +42,12 @@ class DiscoverySession {
41
42
  return;
42
43
  }
43
44
  this.ongoingClosestPeersRequests.delete(peerId.toKey());
44
- const oldClosestContact = this.config.peerManager.neighborList.getClosestContactId();
45
+ const oldClosestNeighbor = this.config.peerManager.getClosestNeighborsTo(this.config.targetId, 1)[0];
46
+ const oldClosestDistance = (0, PeerManager_1.getDistance)(this.config.targetId, oldClosestNeighbor.getPeerId().value);
45
47
  this.addNewContacts(contacts);
46
- if (this.config.peerManager.neighborList.getClosestContactId().equals(oldClosestContact)) {
48
+ const newClosestNeighbor = this.config.peerManager.getClosestNeighborsTo(this.config.targetId, 1)[0];
49
+ const newClosestDistance = (0, PeerManager_1.getDistance)(this.config.targetId, newClosestNeighbor.getPeerId().value);
50
+ if (newClosestDistance >= oldClosestDistance) {
47
51
  this.noProgressCounter++;
48
52
  }
49
53
  else {
@@ -61,7 +65,7 @@ class DiscoverySession {
61
65
  if (this.stopped) {
62
66
  return;
63
67
  }
64
- const uncontacted = this.config.peerManager.neighborList.getUncontactedContacts(this.config.parallelism);
68
+ const uncontacted = this.config.peerManager.getClosestContactsTo(this.config.targetId, this.config.parallelism, this.config.contactedPeers);
65
69
  if (uncontacted.length === 0 || this.noProgressCounter >= this.config.noProgressLimit) {
66
70
  this.emitter.emit('discoveryCompleted');
67
71
  this.stopped = true;
@@ -83,13 +87,11 @@ class DiscoverySession {
83
87
  }
84
88
  }
85
89
  async findClosestNodes(timeout) {
86
- if (this.config.peerManager.neighborList.getUncontactedContacts(this.config.parallelism).length === 0) {
87
- logger.trace('getUncontactedContacts length was 0 in beginning of discovery, neighborList.size: '
88
- + this.config.peerManager.neighborList.getSize());
89
- return this.config.peerManager.neighborList;
90
+ if (this.config.peerManager.getNumberOfContacts(this.config.contactedPeers) === 0) {
91
+ return;
90
92
  }
93
+ // TODO add abortController and signal it in stop()
91
94
  await (0, utils_1.runAndWaitForEvents3)([this.findMoreContacts.bind(this)], [[this.emitter, 'discoveryCompleted']], timeout);
92
- return this.config.peerManager.neighborList;
93
95
  }
94
96
  stop() {
95
97
  this.stopped = true;
@@ -1 +1 @@
1
- {"version":3,"file":"DiscoverySession.js","sourceRoot":"","sources":["../../../../src/dht/discovery/DiscoverySession.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DiscoverySession.js","sourceRoot":"","sources":["../../../../src/dht/discovery/DiscoverySession.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { PeerDescriptor } from '../../proto/packages/dht/protos/DhtRpc';
2
2
  import { ConnectionManager } from '../../connection/ConnectionManager';
3
- import { ServiceID } from '../../types/ServiceID';
4
3
  import { PeerManager } from '../PeerManager';
4
+ import { ServiceID } from '../../types/ServiceID';
5
+ import { PeerIDKey } from '../../helpers/PeerID';
5
6
  interface PeerDiscoveryConfig {
6
7
  localPeerDescriptor: PeerDescriptor;
7
8
  joinNoProgressLimit: number;
@@ -21,7 +22,8 @@ export declare class PeerDiscovery {
21
22
  private readonly abortController;
22
23
  private recoveryIntervalStarted;
23
24
  constructor(config: PeerDiscoveryConfig);
24
- joinDht(entryPointDescriptor: PeerDescriptor, doAdditionalRandomPeerDiscovery?: boolean, retry?: boolean): Promise<void>;
25
+ joinDht(entryPoints: PeerDescriptor[], doAdditionalRandomPeerDiscovery?: boolean, retry?: boolean): Promise<void>;
26
+ joinThroughEntryPoint(entryPointDescriptor: PeerDescriptor, contactedPeers: Set<PeerIDKey>, doAdditionalRandomPeerDiscovery?: boolean, retry?: boolean): Promise<void>;
25
27
  private createSession;
26
28
  private runSessions;
27
29
  rejoinDht(entryPoint: PeerDescriptor): Promise<void>;