@libp2p/kad-dht 0.28.6

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 (166) hide show
  1. package/LICENSE +4 -0
  2. package/README.md +105 -0
  3. package/dist/src/constants.d.ts +20 -0
  4. package/dist/src/constants.d.ts.map +1 -0
  5. package/dist/src/constants.js +34 -0
  6. package/dist/src/constants.js.map +1 -0
  7. package/dist/src/content-fetching/index.d.ts +55 -0
  8. package/dist/src/content-fetching/index.d.ts.map +1 -0
  9. package/dist/src/content-fetching/index.js +190 -0
  10. package/dist/src/content-fetching/index.js.map +1 -0
  11. package/dist/src/content-routing/index.d.ts +42 -0
  12. package/dist/src/content-routing/index.d.ts.map +1 -0
  13. package/dist/src/content-routing/index.js +129 -0
  14. package/dist/src/content-routing/index.js.map +1 -0
  15. package/dist/src/dual-kad-dht.d.ts +65 -0
  16. package/dist/src/dual-kad-dht.d.ts.map +1 -0
  17. package/dist/src/dual-kad-dht.js +191 -0
  18. package/dist/src/dual-kad-dht.js.map +1 -0
  19. package/dist/src/index.d.ts +4 -0
  20. package/dist/src/index.d.ts.map +1 -0
  21. package/dist/src/index.js +15 -0
  22. package/dist/src/index.js.map +1 -0
  23. package/dist/src/kad-dht.d.ts +131 -0
  24. package/dist/src/kad-dht.d.ts.map +1 -0
  25. package/dist/src/kad-dht.js +268 -0
  26. package/dist/src/kad-dht.js.map +1 -0
  27. package/dist/src/message/dht.d.ts +297 -0
  28. package/dist/src/message/dht.js +921 -0
  29. package/dist/src/message/index.d.ts +32 -0
  30. package/dist/src/message/index.d.ts.map +1 -0
  31. package/dist/src/message/index.js +81 -0
  32. package/dist/src/message/index.js.map +1 -0
  33. package/dist/src/network.d.ts +60 -0
  34. package/dist/src/network.d.ts.map +1 -0
  35. package/dist/src/network.js +124 -0
  36. package/dist/src/network.js.map +1 -0
  37. package/dist/src/peer-list/index.d.ts +29 -0
  38. package/dist/src/peer-list/index.d.ts.map +1 -0
  39. package/dist/src/peer-list/index.js +44 -0
  40. package/dist/src/peer-list/index.js.map +1 -0
  41. package/dist/src/peer-list/peer-distance-list.d.ts +34 -0
  42. package/dist/src/peer-list/peer-distance-list.d.ts.map +1 -0
  43. package/dist/src/peer-list/peer-distance-list.js +64 -0
  44. package/dist/src/peer-list/peer-distance-list.js.map +1 -0
  45. package/dist/src/peer-routing/index.d.ts +71 -0
  46. package/dist/src/peer-routing/index.d.ts.map +1 -0
  47. package/dist/src/peer-routing/index.js +256 -0
  48. package/dist/src/peer-routing/index.js.map +1 -0
  49. package/dist/src/providers.d.ts +64 -0
  50. package/dist/src/providers.d.ts.map +1 -0
  51. package/dist/src/providers.js +208 -0
  52. package/dist/src/providers.js.map +1 -0
  53. package/dist/src/query/events.d.ts +46 -0
  54. package/dist/src/query/events.d.ts.map +1 -0
  55. package/dist/src/query/events.js +73 -0
  56. package/dist/src/query/events.js.map +1 -0
  57. package/dist/src/query/manager.d.ts +40 -0
  58. package/dist/src/query/manager.d.ts.map +1 -0
  59. package/dist/src/query/manager.js +140 -0
  60. package/dist/src/query/manager.js.map +1 -0
  61. package/dist/src/query/query-path.d.ts +58 -0
  62. package/dist/src/query/query-path.d.ts.map +1 -0
  63. package/dist/src/query/query-path.js +171 -0
  64. package/dist/src/query/query-path.js.map +1 -0
  65. package/dist/src/query/types.d.ts +16 -0
  66. package/dist/src/query/types.d.ts.map +1 -0
  67. package/dist/src/query/types.js +2 -0
  68. package/dist/src/query/types.js.map +1 -0
  69. package/dist/src/query-self.d.ts +31 -0
  70. package/dist/src/query-self.d.ts.map +1 -0
  71. package/dist/src/query-self.js +73 -0
  72. package/dist/src/query-self.js.map +1 -0
  73. package/dist/src/routing-table/generated-prefix-list-browser.d.ts +3 -0
  74. package/dist/src/routing-table/generated-prefix-list-browser.d.ts.map +1 -0
  75. package/dist/src/routing-table/generated-prefix-list-browser.js +1027 -0
  76. package/dist/src/routing-table/generated-prefix-list-browser.js.map +1 -0
  77. package/dist/src/routing-table/generated-prefix-list.d.ts +3 -0
  78. package/dist/src/routing-table/generated-prefix-list.d.ts.map +1 -0
  79. package/dist/src/routing-table/generated-prefix-list.js +4099 -0
  80. package/dist/src/routing-table/generated-prefix-list.js.map +1 -0
  81. package/dist/src/routing-table/index.d.ts +91 -0
  82. package/dist/src/routing-table/index.d.ts.map +1 -0
  83. package/dist/src/routing-table/index.js +183 -0
  84. package/dist/src/routing-table/index.js.map +1 -0
  85. package/dist/src/routing-table/refresh.d.ts +50 -0
  86. package/dist/src/routing-table/refresh.d.ts.map +1 -0
  87. package/dist/src/routing-table/refresh.js +204 -0
  88. package/dist/src/routing-table/refresh.js.map +1 -0
  89. package/dist/src/routing-table/types.d.ts +24 -0
  90. package/dist/src/routing-table/types.d.ts.map +1 -0
  91. package/dist/src/rpc/handlers/add-provider.d.ts +13 -0
  92. package/dist/src/rpc/handlers/add-provider.d.ts.map +1 -0
  93. package/dist/src/rpc/handlers/add-provider.js +42 -0
  94. package/dist/src/rpc/handlers/add-provider.js.map +1 -0
  95. package/dist/src/rpc/handlers/find-node.d.ts +18 -0
  96. package/dist/src/rpc/handlers/find-node.d.ts.map +1 -0
  97. package/dist/src/rpc/handlers/find-node.js +32 -0
  98. package/dist/src/rpc/handlers/find-node.js.map +1 -0
  99. package/dist/src/rpc/handlers/get-providers.d.ts +24 -0
  100. package/dist/src/rpc/handlers/get-providers.d.ts.map +1 -0
  101. package/dist/src/rpc/handlers/get-providers.js +60 -0
  102. package/dist/src/rpc/handlers/get-providers.js.map +1 -0
  103. package/dist/src/rpc/handlers/get-value.d.ts +27 -0
  104. package/dist/src/rpc/handlers/get-value.d.ts.map +1 -0
  105. package/dist/src/rpc/handlers/get-value.js +94 -0
  106. package/dist/src/rpc/handlers/get-value.js.map +1 -0
  107. package/dist/src/rpc/handlers/index.d.ts +13 -0
  108. package/dist/src/rpc/handlers/index.d.ts.map +1 -0
  109. package/dist/src/rpc/handlers/ping.d.ts +7 -0
  110. package/dist/src/rpc/handlers/ping.d.ts.map +1 -0
  111. package/dist/src/rpc/handlers/ping.js +9 -0
  112. package/dist/src/rpc/handlers/ping.js.map +1 -0
  113. package/dist/src/rpc/handlers/put-value.d.ts +18 -0
  114. package/dist/src/rpc/handlers/put-value.d.ts.map +1 -0
  115. package/dist/src/rpc/handlers/put-value.js +35 -0
  116. package/dist/src/rpc/handlers/put-value.js.map +1 -0
  117. package/dist/src/rpc/index.d.ts +38 -0
  118. package/dist/src/rpc/index.d.ts.map +1 -0
  119. package/dist/src/rpc/index.js +75 -0
  120. package/dist/src/rpc/index.js.map +1 -0
  121. package/dist/src/rpc/types.d.ts +6 -0
  122. package/dist/src/rpc/types.d.ts.map +1 -0
  123. package/dist/src/topology-listener.d.ts +33 -0
  124. package/dist/src/topology-listener.d.ts.map +1 -0
  125. package/dist/src/topology-listener.js +50 -0
  126. package/dist/src/topology-listener.js.map +1 -0
  127. package/dist/src/types.d.ts +143 -0
  128. package/dist/src/types.d.ts.map +1 -0
  129. package/dist/src/utils.d.ts +33 -0
  130. package/dist/src/utils.d.ts.map +1 -0
  131. package/dist/src/utils.js +89 -0
  132. package/dist/src/utils.js.map +1 -0
  133. package/package.json +200 -0
  134. package/src/constants.ts +50 -0
  135. package/src/content-fetching/index.ts +276 -0
  136. package/src/content-routing/index.ts +202 -0
  137. package/src/dual-kad-dht.ts +257 -0
  138. package/src/index.ts +21 -0
  139. package/src/kad-dht.ts +396 -0
  140. package/src/message/dht.d.ts +297 -0
  141. package/src/message/dht.js +921 -0
  142. package/src/message/dht.proto +75 -0
  143. package/src/message/index.ts +111 -0
  144. package/src/network.ts +185 -0
  145. package/src/peer-list/index.ts +54 -0
  146. package/src/peer-list/peer-distance-list.ts +93 -0
  147. package/src/peer-routing/index.ts +332 -0
  148. package/src/providers.ts +278 -0
  149. package/src/query/events.ts +126 -0
  150. package/src/query/manager.ts +188 -0
  151. package/src/query/query-path.ts +263 -0
  152. package/src/query/types.ts +22 -0
  153. package/src/query-self.ts +106 -0
  154. package/src/routing-table/generated-prefix-list-browser.ts +1026 -0
  155. package/src/routing-table/generated-prefix-list.ts +4098 -0
  156. package/src/routing-table/index.ts +265 -0
  157. package/src/routing-table/refresh.ts +263 -0
  158. package/src/rpc/handlers/add-provider.ts +63 -0
  159. package/src/rpc/handlers/find-node.ts +57 -0
  160. package/src/rpc/handlers/get-providers.ts +95 -0
  161. package/src/rpc/handlers/get-value.ts +130 -0
  162. package/src/rpc/handlers/ping.ts +13 -0
  163. package/src/rpc/handlers/put-value.ts +58 -0
  164. package/src/rpc/index.ts +118 -0
  165. package/src/topology-listener.ts +78 -0
  166. package/src/utils.ts +108 -0
@@ -0,0 +1,268 @@
1
+ import { RoutingTable } from './routing-table/index.js';
2
+ import { RoutingTableRefresh } from './routing-table/refresh.js';
3
+ import { Network } from './network.js';
4
+ import { ContentFetching } from './content-fetching/index.js';
5
+ import { ContentRouting } from './content-routing/index.js';
6
+ import { PeerRouting } from './peer-routing/index.js';
7
+ import { Providers } from './providers.js';
8
+ import { QueryManager } from './query/manager.js';
9
+ import { RPC } from './rpc/index.js';
10
+ import { TopologyListener } from './topology-listener.js';
11
+ import { QuerySelf } from './query-self.js';
12
+ import { removePrivateAddresses, removePublicAddresses } from './utils.js';
13
+ import { logger } from '@libp2p/logger';
14
+ import { CustomEvent, EventEmitter } from '@libp2p/interfaces';
15
+ /**
16
+ * A DHT implementation modelled after Kademlia with S/Kademlia modifications.
17
+ * Original implementation in go: https://github.com/libp2p/go-libp2p-kad-dht.
18
+ */
19
+ export class KadDHT extends EventEmitter {
20
+ /**
21
+ * Create a new KadDHT
22
+ */
23
+ constructor(options) {
24
+ super();
25
+ const { kBucketSize, clientMode, validators, selectors, querySelfInterval, lan, protocol, bootstrapPeers, dialer, addressable, peerId, peerStore, metrics, datastore, registrar } = options;
26
+ this.running = false;
27
+ this.log = logger(`libp2p:kad-dht:${lan ? 'lan' : 'wan'}`);
28
+ this.protocol = protocol ?? '/ipfs/kad/1.0.0';
29
+ this.kBucketSize = kBucketSize ?? 20;
30
+ this.clientMode = clientMode ?? true;
31
+ this.bootstrapPeers = bootstrapPeers ?? [];
32
+ this.addressable = addressable;
33
+ this.registrar = registrar;
34
+ this.routingTable = new RoutingTable({
35
+ peerId,
36
+ dialer,
37
+ kBucketSize,
38
+ metrics,
39
+ lan
40
+ });
41
+ this.providers = new Providers({
42
+ datastore
43
+ });
44
+ this.lan = lan;
45
+ this.validators = validators ?? {};
46
+ this.selectors = selectors ?? {};
47
+ this.network = new Network({
48
+ dialer,
49
+ protocol: this.protocol,
50
+ lan,
51
+ peerId
52
+ });
53
+ this.queryManager = new QueryManager({
54
+ peerId: peerId,
55
+ // Number of disjoint query paths to use - This is set to `kBucketSize/2` per the S/Kademlia paper
56
+ disjointPaths: Math.ceil(this.kBucketSize / 2),
57
+ metrics,
58
+ lan
59
+ });
60
+ // DHT components
61
+ this.peerRouting = new PeerRouting({
62
+ peerId,
63
+ routingTable: this.routingTable,
64
+ peerStore,
65
+ network: this.network,
66
+ validators: this.validators,
67
+ queryManager: this.queryManager,
68
+ lan
69
+ });
70
+ this.contentFetching = new ContentFetching({
71
+ peerId,
72
+ datastore,
73
+ validators: this.validators,
74
+ selectors: this.selectors,
75
+ peerRouting: this.peerRouting,
76
+ queryManager: this.queryManager,
77
+ routingTable: this.routingTable,
78
+ network: this.network,
79
+ lan
80
+ });
81
+ this.contentRouting = new ContentRouting({
82
+ peerId,
83
+ network: this.network,
84
+ peerRouting: this.peerRouting,
85
+ queryManager: this.queryManager,
86
+ routingTable: this.routingTable,
87
+ providers: this.providers,
88
+ peerStore,
89
+ lan
90
+ });
91
+ this.routingTableRefresh = new RoutingTableRefresh({
92
+ peerRouting: this.peerRouting,
93
+ routingTable: this.routingTable,
94
+ lan
95
+ });
96
+ this.rpc = new RPC({
97
+ peerId,
98
+ routingTable: this.routingTable,
99
+ providers: this.providers,
100
+ peerRouting: this.peerRouting,
101
+ datastore,
102
+ validators: this.validators,
103
+ keyBook: peerStore.keyBook,
104
+ addressBook: peerStore.addressBook,
105
+ lan
106
+ });
107
+ this.topologyListener = new TopologyListener({
108
+ registrar,
109
+ protocol: this.protocol,
110
+ lan
111
+ });
112
+ this.querySelf = new QuerySelf({
113
+ peerId,
114
+ peerRouting: this.peerRouting,
115
+ interval: querySelfInterval,
116
+ lan
117
+ });
118
+ // handle peers being discovered during processing of DHT messages
119
+ this.network.addEventListener('peer', (evt) => {
120
+ const peerData = evt.detail;
121
+ this.onPeerConnect(peerData).catch(err => {
122
+ this.log.error('could not add %p to routing table', peerData.id, err);
123
+ });
124
+ this.dispatchEvent(new CustomEvent('peer', {
125
+ detail: peerData
126
+ }));
127
+ });
128
+ // handle peers being discovered via other peer discovery mechanisms
129
+ this.topologyListener.addEventListener('peer', (evt) => {
130
+ const peerId = evt.detail;
131
+ Promise.resolve().then(async () => {
132
+ const multiaddrs = await peerStore.addressBook.get(peerId);
133
+ const peerData = {
134
+ id: peerId,
135
+ multiaddrs: multiaddrs.map(addr => addr.multiaddr),
136
+ protocols: []
137
+ };
138
+ await this.onPeerConnect(peerData);
139
+ }).catch(err => {
140
+ this.log.error('could not add %p to routing table', peerId, err);
141
+ });
142
+ });
143
+ }
144
+ async onPeerConnect(peerData) {
145
+ this.log('peer %p connected', peerData.id);
146
+ if (this.lan) {
147
+ peerData = removePublicAddresses(peerData);
148
+ }
149
+ else {
150
+ peerData = removePrivateAddresses(peerData);
151
+ }
152
+ if (peerData.multiaddrs.length === 0) {
153
+ this.log('ignoring %p as they do not have any %s addresses in %s', peerData.id, this.lan ? 'private' : 'public', peerData.multiaddrs.map(addr => addr.toString()));
154
+ return;
155
+ }
156
+ try {
157
+ await this.routingTable.add(peerData.id);
158
+ }
159
+ catch (err) {
160
+ this.log.error('could not add %p to routing table', peerData.id, err);
161
+ }
162
+ }
163
+ /**
164
+ * Is this DHT running.
165
+ */
166
+ isStarted() {
167
+ return this.running;
168
+ }
169
+ /**
170
+ * If 'server' this node will respond to DHT queries, if 'client' this node will not
171
+ */
172
+ async getMode() {
173
+ return this.clientMode ? 'client' : 'server';
174
+ }
175
+ /**
176
+ * If 'server' this node will respond to DHT queries, if 'client' this node will not
177
+ */
178
+ async setMode(mode) {
179
+ if (this.registrarHandleId != null) {
180
+ await this.registrar.unhandle(this.registrarHandleId);
181
+ }
182
+ if (mode === 'client') {
183
+ this.log('enabling client mode');
184
+ this.clientMode = true;
185
+ }
186
+ else {
187
+ this.log('enabling server mode');
188
+ this.clientMode = false;
189
+ this.registrarHandleId = await this.registrar.handle(this.protocol, this.rpc.onIncomingStream.bind(this.rpc));
190
+ }
191
+ }
192
+ /**
193
+ * Start listening to incoming connections.
194
+ */
195
+ async start() {
196
+ this.running = true;
197
+ // Only respond to queries when not in client mode
198
+ await this.setMode(this.clientMode ? 'client' : 'server');
199
+ await Promise.all([
200
+ this.providers.start(),
201
+ this.queryManager.start(),
202
+ this.network.start(),
203
+ this.routingTable.start(),
204
+ this.topologyListener.start(),
205
+ this.querySelf.start()
206
+ ]);
207
+ await Promise.all(this.bootstrapPeers.map(async (peerData) => await this.routingTable.add(peerData.id)));
208
+ await this.routingTableRefresh.start();
209
+ }
210
+ /**
211
+ * Stop accepting incoming connections and sending outgoing
212
+ * messages.
213
+ */
214
+ async stop() {
215
+ this.running = false;
216
+ await Promise.all([
217
+ this.providers.stop(),
218
+ this.queryManager.stop(),
219
+ this.network.stop(),
220
+ this.routingTable.stop(),
221
+ this.routingTableRefresh.stop(),
222
+ this.topologyListener.stop(),
223
+ this.querySelf.stop()
224
+ ]);
225
+ }
226
+ /**
227
+ * Store the given key/value pair in the DHT
228
+ */
229
+ async *put(key, value, options = {}) {
230
+ yield* this.contentFetching.put(key, value, options);
231
+ }
232
+ /**
233
+ * Get the value that corresponds to the passed key
234
+ */
235
+ async *get(key, options = {}) {
236
+ yield* this.contentFetching.get(key, options);
237
+ }
238
+ // ----------- Content Routing
239
+ /**
240
+ * Announce to the network that we can provide given key's value
241
+ */
242
+ async *provide(key, options = {}) {
243
+ yield* this.contentRouting.provide(key, this.addressable.multiaddrs, options);
244
+ }
245
+ /**
246
+ * Search the dht for providers of the given CID
247
+ */
248
+ async *findProviders(key, options = {}) {
249
+ yield* this.contentRouting.findProviders(key, options);
250
+ }
251
+ // ----------- Peer Routing -----------
252
+ /**
253
+ * Search for a peer with the given ID
254
+ */
255
+ async *findPeer(id, options = {}) {
256
+ yield* this.peerRouting.findPeer(id, options);
257
+ }
258
+ /**
259
+ * Kademlia 'node lookup' operation
260
+ */
261
+ async *getClosestPeers(key, options = {}) {
262
+ yield* this.peerRouting.getClosestPeers(key, options);
263
+ }
264
+ async refreshRoutingTable() {
265
+ await this.routingTableRefresh.refreshTable(true);
266
+ }
267
+ }
268
+ //# sourceMappingURL=kad-dht.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kad-dht.js","sourceRoot":"","sources":["../../src/kad-dht.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,297 @@
1
+ import * as $protobuf from "protobufjs";
2
+ /** Properties of a Record. */
3
+ export interface IRecord {
4
+
5
+ /** Record key */
6
+ key?: (Uint8Array|null);
7
+
8
+ /** Record value */
9
+ value?: (Uint8Array|null);
10
+
11
+ /** Record author */
12
+ author?: (Uint8Array|null);
13
+
14
+ /** Record signature */
15
+ signature?: (Uint8Array|null);
16
+
17
+ /** Record timeReceived */
18
+ timeReceived?: (string|null);
19
+ }
20
+
21
+ /** Represents a Record. */
22
+ export class Record implements IRecord {
23
+
24
+ /**
25
+ * Constructs a new Record.
26
+ * @param [p] Properties to set
27
+ */
28
+ constructor(p?: IRecord);
29
+
30
+ /** Record key. */
31
+ public key?: (Uint8Array|null);
32
+
33
+ /** Record value. */
34
+ public value?: (Uint8Array|null);
35
+
36
+ /** Record author. */
37
+ public author?: (Uint8Array|null);
38
+
39
+ /** Record signature. */
40
+ public signature?: (Uint8Array|null);
41
+
42
+ /** Record timeReceived. */
43
+ public timeReceived?: (string|null);
44
+
45
+ /** Record _key. */
46
+ public _key?: "key";
47
+
48
+ /** Record _value. */
49
+ public _value?: "value";
50
+
51
+ /** Record _author. */
52
+ public _author?: "author";
53
+
54
+ /** Record _signature. */
55
+ public _signature?: "signature";
56
+
57
+ /** Record _timeReceived. */
58
+ public _timeReceived?: "timeReceived";
59
+
60
+ /**
61
+ * Encodes the specified Record message. Does not implicitly {@link Record.verify|verify} messages.
62
+ * @param m Record message or plain object to encode
63
+ * @param [w] Writer to encode to
64
+ * @returns Writer
65
+ */
66
+ public static encode(m: IRecord, w?: $protobuf.Writer): $protobuf.Writer;
67
+
68
+ /**
69
+ * Decodes a Record message from the specified reader or buffer.
70
+ * @param r Reader or buffer to decode from
71
+ * @param [l] Message length if known beforehand
72
+ * @returns Record
73
+ * @throws {Error} If the payload is not a reader or valid buffer
74
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
75
+ */
76
+ public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): Record;
77
+
78
+ /**
79
+ * Creates a Record message from a plain object. Also converts values to their respective internal types.
80
+ * @param d Plain object
81
+ * @returns Record
82
+ */
83
+ public static fromObject(d: { [k: string]: any }): Record;
84
+
85
+ /**
86
+ * Creates a plain object from a Record message. Also converts values to other types if specified.
87
+ * @param m Record
88
+ * @param [o] Conversion options
89
+ * @returns Plain object
90
+ */
91
+ public static toObject(m: Record, o?: $protobuf.IConversionOptions): { [k: string]: any };
92
+
93
+ /**
94
+ * Converts this Record to JSON.
95
+ * @returns JSON object
96
+ */
97
+ public toJSON(): { [k: string]: any };
98
+ }
99
+
100
+ /** Properties of a Message. */
101
+ export interface IMessage {
102
+
103
+ /** Message type */
104
+ type?: (Message.MessageType|null);
105
+
106
+ /** Message clusterLevelRaw */
107
+ clusterLevelRaw?: (number|null);
108
+
109
+ /** Message key */
110
+ key?: (Uint8Array|null);
111
+
112
+ /** Message record */
113
+ record?: (Uint8Array|null);
114
+
115
+ /** Message closerPeers */
116
+ closerPeers?: (Message.IPeer[]|null);
117
+
118
+ /** Message providerPeers */
119
+ providerPeers?: (Message.IPeer[]|null);
120
+ }
121
+
122
+ /** Represents a Message. */
123
+ export class Message implements IMessage {
124
+
125
+ /**
126
+ * Constructs a new Message.
127
+ * @param [p] Properties to set
128
+ */
129
+ constructor(p?: IMessage);
130
+
131
+ /** Message type. */
132
+ public type?: (Message.MessageType|null);
133
+
134
+ /** Message clusterLevelRaw. */
135
+ public clusterLevelRaw?: (number|null);
136
+
137
+ /** Message key. */
138
+ public key?: (Uint8Array|null);
139
+
140
+ /** Message record. */
141
+ public record?: (Uint8Array|null);
142
+
143
+ /** Message closerPeers. */
144
+ public closerPeers: Message.IPeer[];
145
+
146
+ /** Message providerPeers. */
147
+ public providerPeers: Message.IPeer[];
148
+
149
+ /** Message _type. */
150
+ public _type?: "type";
151
+
152
+ /** Message _clusterLevelRaw. */
153
+ public _clusterLevelRaw?: "clusterLevelRaw";
154
+
155
+ /** Message _key. */
156
+ public _key?: "key";
157
+
158
+ /** Message _record. */
159
+ public _record?: "record";
160
+
161
+ /**
162
+ * Encodes the specified Message message. Does not implicitly {@link Message.verify|verify} messages.
163
+ * @param m Message message or plain object to encode
164
+ * @param [w] Writer to encode to
165
+ * @returns Writer
166
+ */
167
+ public static encode(m: IMessage, w?: $protobuf.Writer): $protobuf.Writer;
168
+
169
+ /**
170
+ * Decodes a Message message from the specified reader or buffer.
171
+ * @param r Reader or buffer to decode from
172
+ * @param [l] Message length if known beforehand
173
+ * @returns Message
174
+ * @throws {Error} If the payload is not a reader or valid buffer
175
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
176
+ */
177
+ public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): Message;
178
+
179
+ /**
180
+ * Creates a Message message from a plain object. Also converts values to their respective internal types.
181
+ * @param d Plain object
182
+ * @returns Message
183
+ */
184
+ public static fromObject(d: { [k: string]: any }): Message;
185
+
186
+ /**
187
+ * Creates a plain object from a Message message. Also converts values to other types if specified.
188
+ * @param m Message
189
+ * @param [o] Conversion options
190
+ * @returns Plain object
191
+ */
192
+ public static toObject(m: Message, o?: $protobuf.IConversionOptions): { [k: string]: any };
193
+
194
+ /**
195
+ * Converts this Message to JSON.
196
+ * @returns JSON object
197
+ */
198
+ public toJSON(): { [k: string]: any };
199
+ }
200
+
201
+ export namespace Message {
202
+
203
+ /** MessageType enum. */
204
+ enum MessageType {
205
+ PUT_VALUE = 0,
206
+ GET_VALUE = 1,
207
+ ADD_PROVIDER = 2,
208
+ GET_PROVIDERS = 3,
209
+ FIND_NODE = 4,
210
+ PING = 5
211
+ }
212
+
213
+ /** ConnectionType enum. */
214
+ enum ConnectionType {
215
+ NOT_CONNECTED = 0,
216
+ CONNECTED = 1,
217
+ CAN_CONNECT = 2,
218
+ CANNOT_CONNECT = 3
219
+ }
220
+
221
+ /** Properties of a Peer. */
222
+ interface IPeer {
223
+
224
+ /** Peer id */
225
+ id?: (Uint8Array|null);
226
+
227
+ /** Peer addrs */
228
+ addrs?: (Uint8Array[]|null);
229
+
230
+ /** Peer connection */
231
+ connection?: (Message.ConnectionType|null);
232
+ }
233
+
234
+ /** Represents a Peer. */
235
+ class Peer implements IPeer {
236
+
237
+ /**
238
+ * Constructs a new Peer.
239
+ * @param [p] Properties to set
240
+ */
241
+ constructor(p?: Message.IPeer);
242
+
243
+ /** Peer id. */
244
+ public id?: (Uint8Array|null);
245
+
246
+ /** Peer addrs. */
247
+ public addrs: Uint8Array[];
248
+
249
+ /** Peer connection. */
250
+ public connection?: (Message.ConnectionType|null);
251
+
252
+ /** Peer _id. */
253
+ public _id?: "id";
254
+
255
+ /** Peer _connection. */
256
+ public _connection?: "connection";
257
+
258
+ /**
259
+ * Encodes the specified Peer message. Does not implicitly {@link Message.Peer.verify|verify} messages.
260
+ * @param m Peer message or plain object to encode
261
+ * @param [w] Writer to encode to
262
+ * @returns Writer
263
+ */
264
+ public static encode(m: Message.IPeer, w?: $protobuf.Writer): $protobuf.Writer;
265
+
266
+ /**
267
+ * Decodes a Peer message from the specified reader or buffer.
268
+ * @param r Reader or buffer to decode from
269
+ * @param [l] Message length if known beforehand
270
+ * @returns Peer
271
+ * @throws {Error} If the payload is not a reader or valid buffer
272
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
273
+ */
274
+ public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): Message.Peer;
275
+
276
+ /**
277
+ * Creates a Peer message from a plain object. Also converts values to their respective internal types.
278
+ * @param d Plain object
279
+ * @returns Peer
280
+ */
281
+ public static fromObject(d: { [k: string]: any }): Message.Peer;
282
+
283
+ /**
284
+ * Creates a plain object from a Peer message. Also converts values to other types if specified.
285
+ * @param m Peer
286
+ * @param [o] Conversion options
287
+ * @returns Plain object
288
+ */
289
+ public static toObject(m: Message.Peer, o?: $protobuf.IConversionOptions): { [k: string]: any };
290
+
291
+ /**
292
+ * Converts this Peer to JSON.
293
+ * @returns JSON object
294
+ */
295
+ public toJSON(): { [k: string]: any };
296
+ }
297
+ }