@streamr/trackerless-network 102.0.0-beta.1 → 102.0.0-beta.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 (103) hide show
  1. package/dist/package.json +5 -5
  2. package/package.json +5 -5
  3. package/src/NetworkNode.ts +0 -142
  4. package/src/NetworkStack.ts +0 -197
  5. package/src/exports.ts +0 -18
  6. package/src/logic/ContentDeliveryLayerNode.ts +0 -424
  7. package/src/logic/ContentDeliveryManager.ts +0 -401
  8. package/src/logic/ContentDeliveryRpcLocal.ts +0 -48
  9. package/src/logic/ContentDeliveryRpcRemote.ts +0 -44
  10. package/src/logic/ControlLayerNode.ts +0 -17
  11. package/src/logic/DiscoveryLayerNode.ts +0 -30
  12. package/src/logic/DuplicateMessageDetector.ts +0 -167
  13. package/src/logic/ExternalNetworkRpc.ts +0 -42
  14. package/src/logic/NodeList.ts +0 -114
  15. package/src/logic/PeerDescriptorStoreManager.ts +0 -96
  16. package/src/logic/StreamPartNetworkSplitAvoidance.ts +0 -90
  17. package/src/logic/StreamPartReconnect.ts +0 -38
  18. package/src/logic/createContentDeliveryLayerNode.ts +0 -130
  19. package/src/logic/formStreamPartDeliveryServiceId.ts +0 -7
  20. package/src/logic/inspect/InspectSession.ts +0 -55
  21. package/src/logic/inspect/Inspector.ts +0 -100
  22. package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +0 -138
  23. package/src/logic/neighbor-discovery/HandshakeRpcRemote.ts +0 -66
  24. package/src/logic/neighbor-discovery/Handshaker.ts +0 -215
  25. package/src/logic/neighbor-discovery/NeighborFinder.ts +0 -77
  26. package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +0 -69
  27. package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +0 -75
  28. package/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts +0 -35
  29. package/src/logic/node-info/NodeInfoClient.ts +0 -23
  30. package/src/logic/node-info/NodeInfoRpcLocal.ts +0 -28
  31. package/src/logic/node-info/NodeInfoRpcRemote.ts +0 -11
  32. package/src/logic/propagation/FifoMapWithTTL.ts +0 -116
  33. package/src/logic/propagation/Propagation.ts +0 -84
  34. package/src/logic/propagation/PropagationTaskStore.ts +0 -41
  35. package/src/logic/proxy/ProxyClient.ts +0 -286
  36. package/src/logic/proxy/ProxyConnectionRpcLocal.ts +0 -106
  37. package/src/logic/proxy/ProxyConnectionRpcRemote.ts +0 -26
  38. package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +0 -73
  39. package/src/logic/temporary-connection/TemporaryConnectionRpcRemote.ts +0 -29
  40. package/src/logic/utils.ts +0 -18
  41. package/src/types.ts +0 -13
  42. package/test/benchmark/StreamPartIdDataKeyDistribution.test.ts +0 -60
  43. package/test/benchmark/first-message.ts +0 -171
  44. package/test/end-to-end/content-delivery-layer-node-with-real-connections.test.ts +0 -165
  45. package/test/end-to-end/external-network-rpc.test.ts +0 -67
  46. package/test/end-to-end/inspect.test.ts +0 -124
  47. package/test/end-to-end/proxy-and-full-node.test.ts +0 -143
  48. package/test/end-to-end/proxy-connections.test.ts +0 -226
  49. package/test/end-to-end/proxy-key-exchange.test.ts +0 -126
  50. package/test/end-to-end/webrtc-full-node-network.test.ts +0 -83
  51. package/test/end-to-end/websocket-full-node-network.test.ts +0 -82
  52. package/test/integration/ContentDeliveryLayerNode-Layer1Node-Latencies.test.ts +0 -139
  53. package/test/integration/ContentDeliveryLayerNode-Layer1Node.test.ts +0 -162
  54. package/test/integration/ContentDeliveryManager.test.ts +0 -160
  55. package/test/integration/ContentDeliveryRpcRemote.test.ts +0 -100
  56. package/test/integration/HandshakeRpcRemote.test.ts +0 -79
  57. package/test/integration/Handshakes.test.ts +0 -141
  58. package/test/integration/Inspect.test.ts +0 -89
  59. package/test/integration/NeighborUpdateRpcRemote.test.ts +0 -82
  60. package/test/integration/NetworkNode.test.ts +0 -115
  61. package/test/integration/NetworkRpc.test.ts +0 -52
  62. package/test/integration/NetworkStack.test.ts +0 -72
  63. package/test/integration/NodeInfoRpc.test.ts +0 -109
  64. package/test/integration/Propagation.test.ts +0 -76
  65. package/test/integration/joining-streams-on-offline-peers.test.ts +0 -82
  66. package/test/integration/stream-without-default-entrypoints.test.ts +0 -128
  67. package/test/integration/streamEntryPointReplacing.test.ts +0 -97
  68. package/test/types/global.d.ts +0 -1
  69. package/test/unit/ContentDeliveryLayerNode.test.ts +0 -112
  70. package/test/unit/ContentDeliveryManager.test.ts +0 -96
  71. package/test/unit/ContentDeliveryRpcLocal.test.ts +0 -60
  72. package/test/unit/DuplicateMessageDetector.test.ts +0 -192
  73. package/test/unit/ExternalNetworkRpc.test.ts +0 -48
  74. package/test/unit/FifoMapWithTtl.test.ts +0 -253
  75. package/test/unit/HandshakeRpcLocal.test.ts +0 -155
  76. package/test/unit/Handshaker.test.ts +0 -69
  77. package/test/unit/InspectSession.test.ts +0 -83
  78. package/test/unit/Inspector.test.ts +0 -51
  79. package/test/unit/NeighborFinder.test.ts +0 -51
  80. package/test/unit/NeighborUpdateRpcLocal.test.ts +0 -139
  81. package/test/unit/NetworkNode.test.ts +0 -42
  82. package/test/unit/NodeList.test.ts +0 -164
  83. package/test/unit/NumberPair.test.ts +0 -22
  84. package/test/unit/PeerDescriptorStoreManager.test.ts +0 -103
  85. package/test/unit/Propagation.test.ts +0 -151
  86. package/test/unit/ProxyConnectionRpcRemote.test.ts +0 -39
  87. package/test/unit/StreamPartIDDataKey.test.ts +0 -12
  88. package/test/unit/StreamPartNetworkSplitAvoidance.test.ts +0 -31
  89. package/test/unit/StreamPartReconnect.test.ts +0 -30
  90. package/test/unit/TemporaryConnectionRpcLocal.test.ts +0 -38
  91. package/test/utils/fake/FakePeerDescriptorStoreManager.ts +0 -29
  92. package/test/utils/mock/MockConnectionsView.ts +0 -18
  93. package/test/utils/mock/MockControlLayerNode.ts +0 -78
  94. package/test/utils/mock/MockDiscoveryLayerNode.ts +0 -60
  95. package/test/utils/mock/MockHandshaker.ts +0 -17
  96. package/test/utils/mock/MockNeighborFinder.ts +0 -20
  97. package/test/utils/mock/MockNeighborUpdateManager.ts +0 -21
  98. package/test/utils/mock/MockTransport.ts +0 -30
  99. package/test/utils/utils.ts +0 -144
  100. package/tsconfig.browser.json +0 -13
  101. package/tsconfig.jest.json +0 -17
  102. package/tsconfig.json +0 -3
  103. package/tsconfig.node.json +0 -17
@@ -1,424 +0,0 @@
1
- import {
2
- ConnectionLocker,
3
- DhtAddress,
4
- ITransport,
5
- ListeningRpcCommunicator,
6
- PeerDescriptor,
7
- toNodeId,
8
- } from '@streamr/dht'
9
- import { Logger, StreamPartID, addManagedEventListener } from '@streamr/utils'
10
- import { EventEmitter } from 'eventemitter3'
11
- import {
12
- CloseTemporaryConnection,
13
- LeaveStreamPartNotice,
14
- MessageID,
15
- MessageRef,
16
- StreamMessage,
17
- TemporaryConnectionRequest,
18
- TemporaryConnectionResponse,
19
- } from '../../generated/packages/trackerless-network/protos/NetworkRpc'
20
- import { ContentDeliveryRpcClient } from '../../generated/packages/trackerless-network/protos/NetworkRpc.client'
21
- import { ContentDeliveryRpcLocal } from './ContentDeliveryRpcLocal'
22
- import { ContentDeliveryRpcRemote } from './ContentDeliveryRpcRemote'
23
- import { DiscoveryLayerNode } from './DiscoveryLayerNode'
24
- import { DuplicateMessageDetector } from './DuplicateMessageDetector'
25
- import { NodeList } from './NodeList'
26
- import { Inspector } from './inspect/Inspector'
27
- import { Handshaker } from './neighbor-discovery/Handshaker'
28
- import { NeighborFinder } from './neighbor-discovery/NeighborFinder'
29
- import { NeighborUpdateManager } from './neighbor-discovery/NeighborUpdateManager'
30
- import { Propagation } from './propagation/Propagation'
31
- import { ProxyConnectionRpcLocal } from './proxy/ProxyConnectionRpcLocal'
32
- import { TemporaryConnectionRpcLocal } from './temporary-connection/TemporaryConnectionRpcLocal'
33
- import { markAndCheckDuplicate } from './utils'
34
- import { ContentDeliveryLayerNeighborInfo } from '../types'
35
-
36
- export interface Events {
37
- message: (message: StreamMessage) => void
38
- neighborConnected: (nodeId: DhtAddress) => void
39
- entryPointLeaveDetected: () => void
40
- }
41
-
42
- export interface StrictContentDeliveryLayerNodeOptions {
43
- streamPartId: StreamPartID
44
- discoveryLayerNode: DiscoveryLayerNode
45
- transport: ITransport
46
- connectionLocker: ConnectionLocker
47
- localPeerDescriptor: PeerDescriptor
48
- nodeViewSize: number
49
- nearbyNodeView: NodeList
50
- randomNodeView: NodeList
51
- leftNodeView: NodeList
52
- rightNodeView: NodeList
53
- neighbors: NodeList
54
- handshaker: Handshaker
55
- neighborFinder: NeighborFinder
56
- neighborUpdateManager: NeighborUpdateManager
57
- propagation: Propagation
58
- rpcCommunicator: ListeningRpcCommunicator
59
- neighborTargetCount: number
60
- inspector: Inspector
61
- temporaryConnectionRpcLocal: TemporaryConnectionRpcLocal
62
- isLocalNodeEntryPoint: () => boolean
63
-
64
- proxyConnectionRpcLocal?: ProxyConnectionRpcLocal
65
- rpcRequestTimeout?: number
66
- }
67
-
68
- const RANDOM_NODE_VIEW_SIZE = 20
69
-
70
- const logger = new Logger(module)
71
-
72
- export class ContentDeliveryLayerNode extends EventEmitter<Events> {
73
-
74
- private started = false
75
- private readonly duplicateDetectors: Map<string, DuplicateMessageDetector>
76
- private options: StrictContentDeliveryLayerNodeOptions
77
- private readonly contentDeliveryRpcLocal: ContentDeliveryRpcLocal
78
- private abortController: AbortController = new AbortController()
79
- private messagesPropagated = 0
80
-
81
- constructor(options: StrictContentDeliveryLayerNodeOptions) {
82
- super()
83
- this.options = options
84
- this.duplicateDetectors = new Map()
85
- this.contentDeliveryRpcLocal = new ContentDeliveryRpcLocal({
86
- localPeerDescriptor: this.options.localPeerDescriptor,
87
- streamPartId: this.options.streamPartId,
88
- rpcCommunicator: this.options.rpcCommunicator,
89
- markAndCheckDuplicate: (msg: MessageID, prev?: MessageRef) => markAndCheckDuplicate(this.duplicateDetectors, msg, prev),
90
- broadcast: (message: StreamMessage, previousNode?: DhtAddress) => this.broadcast(message, previousNode),
91
- onLeaveNotice: (remoteNodeId: DhtAddress, sourceIsStreamEntryPoint: boolean) => {
92
- if (this.abortController.signal.aborted) {
93
- return
94
- }
95
- const contact = this.options.nearbyNodeView.get(remoteNodeId)
96
- ?? this.options.randomNodeView.get(remoteNodeId)
97
- ?? this.options.neighbors.get(remoteNodeId)
98
- ?? this.options.proxyConnectionRpcLocal?.getConnection(remoteNodeId)?.remote
99
- // TODO: check integrity of notifier?
100
- if (contact) {
101
- this.options.discoveryLayerNode.removeContact(remoteNodeId)
102
- this.options.neighbors.remove(remoteNodeId)
103
- this.options.nearbyNodeView.remove(remoteNodeId)
104
- this.options.randomNodeView.remove(remoteNodeId)
105
- this.options.leftNodeView.remove(remoteNodeId)
106
- this.options.rightNodeView.remove(remoteNodeId)
107
- this.options.neighborFinder.start([remoteNodeId])
108
- this.options.proxyConnectionRpcLocal?.removeConnection(remoteNodeId)
109
- }
110
- if (sourceIsStreamEntryPoint) {
111
- this.emit('entryPointLeaveDetected')
112
- }
113
- },
114
- markForInspection: (remoteNodeId: DhtAddress, messageId: MessageID) => this.options.inspector.markMessage(remoteNodeId, messageId)
115
- })
116
- }
117
-
118
- async start(): Promise<void> {
119
- this.started = true
120
- this.registerDefaultServerMethods()
121
- addManagedEventListener(
122
- this.options.discoveryLayerNode,
123
- 'nearbyContactAdded',
124
- () => this.onNearbyContactAdded(),
125
- this.abortController.signal
126
- )
127
- addManagedEventListener(
128
- this.options.discoveryLayerNode,
129
- 'nearbyContactRemoved',
130
- () => this.onNearbyContactRemoved(),
131
- this.abortController.signal
132
- )
133
- addManagedEventListener(
134
- this.options.discoveryLayerNode,
135
- 'randomContactAdded',
136
- () => this.onRandomContactAdded(),
137
- this.abortController.signal
138
- )
139
- addManagedEventListener(
140
- this.options.discoveryLayerNode,
141
- 'randomContactRemoved',
142
- () => this.onRandomContactRemoved(),
143
- this.abortController.signal
144
- )
145
- addManagedEventListener(
146
- this.options.discoveryLayerNode,
147
- 'ringContactAdded',
148
- () => this.onRingContactsUpdated(),
149
- this.abortController.signal
150
- )
151
- addManagedEventListener(
152
- this.options.discoveryLayerNode,
153
- 'ringContactRemoved',
154
- () => this.onRingContactsUpdated(),
155
- this.abortController.signal
156
- )
157
- addManagedEventListener(
158
- this.options.transport,
159
- 'disconnected',
160
- (peerDescriptor: PeerDescriptor) => this.onNodeDisconnected(peerDescriptor),
161
- this.abortController.signal
162
- )
163
- addManagedEventListener(
164
- this.options.neighbors,
165
- 'nodeAdded',
166
- (id, remote) => {
167
- this.options.propagation.onNeighborJoined(id)
168
- this.options.connectionLocker.weakLockConnection(
169
- toNodeId(remote.getPeerDescriptor()),
170
- this.options.streamPartId
171
- )
172
- this.emit('neighborConnected', id)
173
- },
174
- this.abortController.signal
175
- )
176
- addManagedEventListener(
177
- this.options.neighbors,
178
- 'nodeRemoved',
179
- (_id, remote) => {
180
- this.options.connectionLocker.weakUnlockConnection(
181
- toNodeId(remote.getPeerDescriptor()),
182
- this.options.streamPartId
183
- )
184
- },
185
- this.abortController.signal
186
- )
187
- if (this.options.proxyConnectionRpcLocal !== undefined) {
188
- addManagedEventListener(
189
- this.options.proxyConnectionRpcLocal,
190
- 'newConnection',
191
- (id: DhtAddress) => this.options.propagation.onNeighborJoined(id),
192
- this.abortController.signal
193
- )
194
- }
195
- this.options.neighborFinder.start()
196
- await this.options.neighborUpdateManager.start()
197
- }
198
-
199
- private registerDefaultServerMethods(): void {
200
- this.options.rpcCommunicator.registerRpcNotification(StreamMessage, 'sendStreamMessage',
201
- (msg: StreamMessage, context) => this.contentDeliveryRpcLocal.sendStreamMessage(msg, context))
202
- this.options.rpcCommunicator.registerRpcNotification(LeaveStreamPartNotice, 'leaveStreamPartNotice',
203
- (req: LeaveStreamPartNotice, context) => this.contentDeliveryRpcLocal.leaveStreamPartNotice(req, context))
204
- this.options.rpcCommunicator.registerRpcMethod(TemporaryConnectionRequest, TemporaryConnectionResponse, 'openConnection',
205
- (req: TemporaryConnectionRequest, context) => this.options.temporaryConnectionRpcLocal.openConnection(req, context))
206
- this.options.rpcCommunicator.registerRpcNotification(CloseTemporaryConnection, 'closeConnection',
207
- (req: TemporaryConnectionRequest, context) => this.options.temporaryConnectionRpcLocal.closeConnection(req, context))
208
- }
209
-
210
- private onRingContactsUpdated(): void {
211
- logger.trace('onRingContactsUpdated')
212
- if (this.isStopped()) {
213
- return
214
- }
215
- const contacts = this.options.discoveryLayerNode.getRingContacts()
216
- this.options.leftNodeView.replaceAll(contacts.left.map((peer) =>
217
- new ContentDeliveryRpcRemote(
218
- this.options.localPeerDescriptor,
219
- peer,
220
- this.options.rpcCommunicator,
221
- ContentDeliveryRpcClient,
222
- this.options.rpcRequestTimeout
223
- )
224
- ))
225
- this.options.rightNodeView.replaceAll(contacts.right.map((peer) =>
226
- new ContentDeliveryRpcRemote(
227
- this.options.localPeerDescriptor,
228
- peer,
229
- this.options.rpcCommunicator,
230
- ContentDeliveryRpcClient,
231
- this.options.rpcRequestTimeout
232
- )
233
- ))
234
- }
235
-
236
- private onNearbyContactAdded(): void {
237
- logger.trace(`New nearby contact found`)
238
- if (this.isStopped()) {
239
- return
240
- }
241
- const closestContacts = this.options.discoveryLayerNode.getClosestContacts()
242
- this.updateNearbyNodeView(closestContacts)
243
- if (this.options.neighbors.size() < this.options.neighborTargetCount) {
244
- this.options.neighborFinder.start()
245
- }
246
- }
247
-
248
- private onNearbyContactRemoved(): void {
249
- logger.trace(`Nearby contact removed`)
250
- if (this.isStopped()) {
251
- return
252
- }
253
- const closestContacts = this.options.discoveryLayerNode.getClosestContacts()
254
- this.updateNearbyNodeView(closestContacts)
255
- }
256
-
257
- private updateNearbyNodeView(nodes: PeerDescriptor[]) {
258
- this.options.nearbyNodeView.replaceAll(Array.from(nodes).map((descriptor) =>
259
- new ContentDeliveryRpcRemote(
260
- this.options.localPeerDescriptor,
261
- descriptor,
262
- this.options.rpcCommunicator,
263
- ContentDeliveryRpcClient,
264
- this.options.rpcRequestTimeout
265
- )
266
- ))
267
- for (const descriptor of this.options.discoveryLayerNode.getNeighbors()) {
268
- if (this.options.nearbyNodeView.size() >= this.options.nodeViewSize) {
269
- break
270
- }
271
- this.options.nearbyNodeView.add(
272
- new ContentDeliveryRpcRemote(
273
- this.options.localPeerDescriptor,
274
- descriptor,
275
- this.options.rpcCommunicator,
276
- ContentDeliveryRpcClient,
277
- this.options.rpcRequestTimeout
278
- )
279
- )
280
- }
281
- }
282
-
283
- private onRandomContactAdded(): void {
284
- if (this.isStopped()) {
285
- return
286
- }
287
- const randomContacts = this.options.discoveryLayerNode.getRandomContacts(RANDOM_NODE_VIEW_SIZE)
288
- this.options.randomNodeView.replaceAll(randomContacts.map((descriptor) =>
289
- new ContentDeliveryRpcRemote(
290
- this.options.localPeerDescriptor,
291
- descriptor,
292
- this.options.rpcCommunicator,
293
- ContentDeliveryRpcClient,
294
- this.options.rpcRequestTimeout
295
- )
296
- ))
297
- if (this.options.neighbors.size() < this.options.neighborTargetCount) {
298
- this.options.neighborFinder.start()
299
- }
300
- }
301
-
302
- private onRandomContactRemoved(): void {
303
- logger.trace(`New random contact removed`)
304
- if (this.isStopped()) {
305
- return
306
- }
307
- const randomContacts = this.options.discoveryLayerNode.getRandomContacts(RANDOM_NODE_VIEW_SIZE)
308
- this.options.randomNodeView.replaceAll(randomContacts.map((descriptor) =>
309
- new ContentDeliveryRpcRemote(
310
- this.options.localPeerDescriptor,
311
- descriptor,
312
- this.options.rpcCommunicator,
313
- ContentDeliveryRpcClient,
314
- this.options.rpcRequestTimeout
315
- )
316
- ))
317
- }
318
-
319
- private onNodeDisconnected(peerDescriptor: PeerDescriptor): void {
320
- const nodeId = toNodeId(peerDescriptor)
321
- if (this.options.neighbors.has(nodeId)) {
322
- this.options.neighbors.remove(nodeId)
323
- this.options.neighborFinder.start([nodeId])
324
- this.options.temporaryConnectionRpcLocal.removeNode(nodeId)
325
- }
326
- }
327
-
328
- hasProxyConnection(nodeId: DhtAddress): boolean {
329
- if (this.options.proxyConnectionRpcLocal) {
330
- return this.options.proxyConnectionRpcLocal.hasConnection(nodeId)
331
- }
332
- return false
333
- }
334
-
335
- stop(): void {
336
- if (!this.started) {
337
- return
338
- }
339
- this.abortController.abort()
340
- this.options.proxyConnectionRpcLocal?.stop()
341
- this.options.neighbors.getAll().map((remote) => {
342
- remote.leaveStreamPartNotice(this.options.streamPartId, this.options.isLocalNodeEntryPoint())
343
- this.options.connectionLocker.weakUnlockConnection(
344
- toNodeId(remote.getPeerDescriptor()),
345
- this.options.streamPartId
346
- )
347
- })
348
- this.options.rpcCommunicator.destroy()
349
- this.removeAllListeners()
350
- this.options.nearbyNodeView.stop()
351
- this.options.neighbors.stop()
352
- this.options.randomNodeView.stop()
353
- this.options.neighborFinder.stop()
354
- this.options.neighborUpdateManager.stop()
355
- this.options.inspector.stop()
356
- }
357
-
358
- broadcast(msg: StreamMessage, previousNode?: DhtAddress): void {
359
- if (!previousNode) {
360
- markAndCheckDuplicate(this.duplicateDetectors, msg.messageId!, msg.previousMessageRef)
361
- }
362
- this.emit('message', msg)
363
- const skipBackPropagation = previousNode !== undefined && !this.options.temporaryConnectionRpcLocal.hasNode(previousNode)
364
- this.options.propagation.feedUnseenMessage(msg, this.getPropagationTargets(msg), skipBackPropagation ? previousNode : null)
365
- this.messagesPropagated += 1
366
- }
367
-
368
- inspect(peerDescriptor: PeerDescriptor): Promise<boolean> {
369
- return this.options.inspector.inspect(peerDescriptor)
370
- }
371
-
372
- private getPropagationTargets(msg: StreamMessage): DhtAddress[] {
373
- let propagationTargets = this.options.neighbors.getIds()
374
- if (this.options.proxyConnectionRpcLocal) {
375
- propagationTargets = propagationTargets.concat(this.options.proxyConnectionRpcLocal.getPropagationTargets(msg))
376
- }
377
- propagationTargets = propagationTargets.concat(this.options.temporaryConnectionRpcLocal.getNodes().getIds())
378
- return propagationTargets
379
- }
380
-
381
- getOwnNodeId(): DhtAddress {
382
- return toNodeId(this.options.localPeerDescriptor)
383
- }
384
-
385
- getOutgoingHandshakeCount(): number {
386
- return this.options.handshaker.getOngoingHandshakes().size
387
- }
388
-
389
- getNeighbors(): PeerDescriptor[] {
390
- if (!this.started && this.isStopped()) {
391
- return []
392
- }
393
- return this.options.neighbors.getAll().map((n) => n.getPeerDescriptor())
394
- }
395
-
396
- getInfos(): ContentDeliveryLayerNeighborInfo[] {
397
- return this.options.neighbors.getAll().map((n) => {
398
- return {
399
- peerDescriptor: n.getPeerDescriptor(),
400
- rtt: n.getRtt()
401
- }
402
- })
403
- }
404
-
405
- getNearbyNodeView(): NodeList {
406
- return this.options.nearbyNodeView
407
- }
408
-
409
- public getDiagnosticInfo(): Record<string, unknown> {
410
- return {
411
- neighborCount: this.options.neighbors.size(),
412
- nearbyNodeViewCount: this.options.nearbyNodeView.size(),
413
- randomNodeViewCount: this.options.randomNodeView.size(),
414
- leftNodeViewCount: this.options.leftNodeView.size(),
415
- rightNodeViewCount: this.options.rightNodeView.size(),
416
- messagesPropagated: this.messagesPropagated
417
- }
418
- }
419
-
420
- private isStopped() {
421
- return this.abortController.signal.aborted
422
- }
423
-
424
- }