@waku/core 0.0.23 → 0.0.25-a42b7be.0
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.
- package/CHANGELOG.md +34 -0
- package/bundle/{base_protocol-84d9b670.js → base_protocol-4bcf7514.js} +194 -134
- package/bundle/{browser-bde977a3.js → browser-90197c87.js} +26 -1
- package/bundle/index-27b91e3b.js +31 -0
- package/bundle/index.js +19384 -2421
- package/bundle/lib/base_protocol.js +3 -2
- package/bundle/lib/message/version_0.js +3 -2
- package/bundle/lib/predefined_bootstrap_nodes.js +2 -0
- package/bundle/{version_0-74b4b9db.js → version_0-2f1176e3.js} +36 -24
- package/dist/.tsbuildinfo +1 -1
- package/dist/lib/connection_manager.d.ts +17 -4
- package/dist/lib/connection_manager.js +111 -45
- package/dist/lib/connection_manager.js.map +1 -1
- package/dist/lib/filter/index.js +53 -37
- package/dist/lib/filter/index.js.map +1 -1
- package/dist/lib/keep_alive_manager.d.ts +1 -0
- package/dist/lib/keep_alive_manager.js +42 -18
- package/dist/lib/keep_alive_manager.js.map +1 -1
- package/dist/lib/light_push/index.js +60 -38
- package/dist/lib/light_push/index.js.map +1 -1
- package/dist/lib/light_push/push_rpc.d.ts +1 -1
- package/dist/lib/light_push/push_rpc.js +2 -2
- package/dist/lib/message/version_0.d.ts +13 -13
- package/dist/lib/message/version_0.js +22 -20
- package/dist/lib/message/version_0.js.map +1 -1
- package/dist/lib/store/history_rpc.d.ts +1 -1
- package/dist/lib/store/history_rpc.js +1 -1
- package/dist/lib/store/index.d.ts +1 -1
- package/dist/lib/store/index.js +43 -17
- package/dist/lib/store/index.js.map +1 -1
- package/dist/lib/stream_manager.d.ts +1 -1
- package/dist/lib/stream_manager.js +8 -5
- package/dist/lib/stream_manager.js.map +1 -1
- package/dist/lib/wait_for_remote_peer.d.ts +2 -2
- package/dist/lib/wait_for_remote_peer.js +13 -11
- package/dist/lib/wait_for_remote_peer.js.map +1 -1
- package/dist/lib/waku.d.ts +4 -3
- package/dist/lib/waku.js +13 -11
- package/dist/lib/waku.js.map +1 -1
- package/package.json +1 -137
- package/src/lib/connection_manager.ts +156 -51
- package/src/lib/filter/index.ts +76 -40
- package/src/lib/keep_alive_manager.ts +53 -20
- package/src/lib/light_push/index.ts +74 -38
- package/src/lib/light_push/push_rpc.ts +2 -2
- package/src/lib/message/version_0.ts +25 -17
- package/src/lib/store/history_rpc.ts +2 -2
- package/src/lib/store/index.ts +60 -23
- package/src/lib/stream_manager.ts +12 -7
- package/src/lib/wait_for_remote_peer.ts +13 -11
- package/src/lib/waku.ts +12 -9
- package/dist/lib/push_or_init_map.d.ts +0 -1
- package/dist/lib/push_or_init_map.js +0 -9
- package/dist/lib/push_or_init_map.js.map +0 -1
- package/src/lib/push_or_init_map.ts +0 -13
@@ -1,25 +1,28 @@
|
|
1
1
|
import { CustomEvent, EventEmitter } from "@libp2p/interfaces/events";
|
2
|
+
import { decodeRelayShard } from "@waku/enr";
|
2
3
|
import { EPeersByDiscoveryEvents } from "@waku/interfaces";
|
3
4
|
import { Tags } from "@waku/interfaces";
|
4
|
-
import
|
5
|
+
import { shardInfoToPubSubTopics } from "@waku/utils";
|
6
|
+
import { Logger } from "@waku/utils";
|
5
7
|
import { KeepAliveManager } from "./keep_alive_manager.js";
|
6
|
-
const log =
|
8
|
+
const log = new Logger("connection-manager");
|
7
9
|
export const DEFAULT_MAX_BOOTSTRAP_PEERS_ALLOWED = 1;
|
8
10
|
export const DEFAULT_MAX_DIAL_ATTEMPTS_FOR_PEER = 3;
|
9
11
|
export const DEFAULT_MAX_PARALLEL_DIALS = 3;
|
10
|
-
class ConnectionManager extends EventEmitter {
|
12
|
+
export class ConnectionManager extends EventEmitter {
|
13
|
+
configuredPubSubTopics;
|
11
14
|
static instances = new Map();
|
12
15
|
keepAliveManager;
|
13
16
|
options;
|
14
17
|
libp2p;
|
15
18
|
dialAttemptsForPeer = new Map();
|
16
19
|
dialErrorsForPeer = new Map();
|
17
|
-
|
20
|
+
currentActiveParallelDialCount = 0;
|
18
21
|
pendingPeerDialQueue = [];
|
19
|
-
static create(peerId, libp2p, keepAliveOptions, relay, options) {
|
22
|
+
static create(peerId, libp2p, keepAliveOptions, pubsubTopics, relay, options) {
|
20
23
|
let instance = ConnectionManager.instances.get(peerId);
|
21
24
|
if (!instance) {
|
22
|
-
instance = new ConnectionManager(libp2p, keepAliveOptions, relay, options);
|
25
|
+
instance = new ConnectionManager(libp2p, keepAliveOptions, pubsubTopics, relay, options);
|
23
26
|
ConnectionManager.instances.set(peerId, instance);
|
24
27
|
}
|
25
28
|
return instance;
|
@@ -63,9 +66,11 @@ class ConnectionManager extends EventEmitter {
|
|
63
66
|
}
|
64
67
|
};
|
65
68
|
}
|
66
|
-
constructor(libp2p, keepAliveOptions, relay, options) {
|
69
|
+
constructor(libp2p, keepAliveOptions, configuredPubSubTopics, relay, options) {
|
67
70
|
super();
|
71
|
+
this.configuredPubSubTopics = configuredPubSubTopics;
|
68
72
|
this.libp2p = libp2p;
|
73
|
+
this.configuredPubSubTopics = configuredPubSubTopics;
|
69
74
|
this.options = {
|
70
75
|
maxDialAttemptsForPeer: DEFAULT_MAX_DIAL_ATTEMPTS_FOR_PEER,
|
71
76
|
maxBootstrapPeersAllowed: DEFAULT_MAX_BOOTSTRAP_PEERS_ALLOWED,
|
@@ -74,12 +79,12 @@ class ConnectionManager extends EventEmitter {
|
|
74
79
|
};
|
75
80
|
this.keepAliveManager = new KeepAliveManager(keepAliveOptions, relay);
|
76
81
|
this.run()
|
77
|
-
.then(() => log(`Connection Manager is now running`))
|
78
|
-
.catch((error) => log(`Unexpected error while running service`, error));
|
82
|
+
.then(() => log.info(`Connection Manager is now running`))
|
83
|
+
.catch((error) => log.error(`Unexpected error while running service`, error));
|
79
84
|
// libp2p emits `peer:discovery` events during its initialization
|
80
85
|
// which means that before the ConnectionManager is initialized, some peers may have been discovered
|
81
86
|
// we will dial the peers in peerStore ONCE before we start to listen to the `peer:discovery` events within the ConnectionManager
|
82
|
-
this.dialPeerStorePeers().catch((error) => log(`Unexpected error while dialing peer store peers`, error));
|
87
|
+
this.dialPeerStorePeers().catch((error) => log.error(`Unexpected error while dialing peer store peers`, error));
|
83
88
|
}
|
84
89
|
async dialPeerStorePeers() {
|
85
90
|
const peerInfos = await this.libp2p.peerStore.all();
|
@@ -93,7 +98,7 @@ class ConnectionManager extends EventEmitter {
|
|
93
98
|
await Promise.all(dialPromises);
|
94
99
|
}
|
95
100
|
catch (error) {
|
96
|
-
log(`Unexpected error while dialing peer store peers`, error);
|
101
|
+
log.error(`Unexpected error while dialing peer store peers`, error);
|
97
102
|
}
|
98
103
|
}
|
99
104
|
async run() {
|
@@ -109,11 +114,11 @@ class ConnectionManager extends EventEmitter {
|
|
109
114
|
this.libp2p.removeEventListener("peer:discovery", this.onEventHandlers["peer:discovery"]);
|
110
115
|
}
|
111
116
|
async dialPeer(peerId) {
|
112
|
-
this.
|
117
|
+
this.currentActiveParallelDialCount += 1;
|
113
118
|
let dialAttempt = 0;
|
114
119
|
while (dialAttempt < this.options.maxDialAttemptsForPeer) {
|
115
120
|
try {
|
116
|
-
log(`Dialing peer ${peerId.toString()} on attempt ${dialAttempt + 1}`);
|
121
|
+
log.info(`Dialing peer ${peerId.toString()} on attempt ${dialAttempt + 1}`);
|
117
122
|
await this.libp2p.dial(peerId);
|
118
123
|
const tags = await this.getTagNamesForPeer(peerId);
|
119
124
|
// add tag to connection describing discovery mechanism
|
@@ -121,18 +126,20 @@ class ConnectionManager extends EventEmitter {
|
|
121
126
|
this.libp2p.getConnections(peerId).forEach((conn) => {
|
122
127
|
conn.tags = Array.from(new Set([...conn.tags, ...tags]));
|
123
128
|
});
|
124
|
-
|
129
|
+
// instead of deleting the peer from the peer store, we set the dial attempt to -1
|
130
|
+
// this helps us keep track of peers that have been dialed before
|
131
|
+
this.dialAttemptsForPeer.set(peerId.toString(), -1);
|
125
132
|
// Dialing succeeded, break the loop
|
126
133
|
break;
|
127
134
|
}
|
128
135
|
catch (error) {
|
129
136
|
if (error instanceof AggregateError) {
|
130
137
|
// Handle AggregateError
|
131
|
-
log(`Error dialing peer ${peerId.toString()} - ${error.errors}`);
|
138
|
+
log.error(`Error dialing peer ${peerId.toString()} - ${error.errors}`);
|
132
139
|
}
|
133
140
|
else {
|
134
141
|
// Handle generic error
|
135
|
-
log(`Error dialing peer ${peerId.toString()} - ${error.message}`);
|
142
|
+
log.error(`Error dialing peer ${peerId.toString()} - ${error.message}`);
|
136
143
|
}
|
137
144
|
this.dialErrorsForPeer.set(peerId.toString(), error);
|
138
145
|
dialAttempt++;
|
@@ -140,20 +147,30 @@ class ConnectionManager extends EventEmitter {
|
|
140
147
|
}
|
141
148
|
}
|
142
149
|
// Always decrease the active dial count and process the dial queue
|
143
|
-
this.
|
150
|
+
this.currentActiveParallelDialCount--;
|
144
151
|
this.processDialQueue();
|
145
152
|
// If max dial attempts reached and dialing failed, delete the peer
|
146
153
|
if (dialAttempt === this.options.maxDialAttemptsForPeer) {
|
147
154
|
try {
|
148
155
|
const error = this.dialErrorsForPeer.get(peerId.toString());
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
156
|
+
if (error) {
|
157
|
+
let errorMessage;
|
158
|
+
if (error instanceof AggregateError) {
|
159
|
+
if (!error.errors) {
|
160
|
+
log.warn(`No errors array found for AggregateError`);
|
161
|
+
}
|
162
|
+
else if (error.errors.length === 0) {
|
163
|
+
log.warn(`Errors array is empty for AggregateError`);
|
164
|
+
}
|
165
|
+
else {
|
166
|
+
errorMessage = JSON.stringify(error.errors[0]);
|
167
|
+
}
|
168
|
+
}
|
169
|
+
else {
|
170
|
+
errorMessage = error.message;
|
171
|
+
}
|
172
|
+
log.info(`Deleting undialable peer ${peerId.toString()} from peer store. Reason: ${errorMessage}`);
|
155
173
|
}
|
156
|
-
log(`Deleting undialable peer ${peerId.toString()} from peer store. Error: ${errorMessage}`);
|
157
174
|
this.dialErrorsForPeer.delete(peerId.toString());
|
158
175
|
await this.libp2p.peerStore.delete(peerId);
|
159
176
|
}
|
@@ -166,20 +183,20 @@ class ConnectionManager extends EventEmitter {
|
|
166
183
|
try {
|
167
184
|
this.keepAliveManager.stop(peerId);
|
168
185
|
await this.libp2p.hangUp(peerId);
|
169
|
-
log(`Dropped connection with peer ${peerId.toString()}`);
|
186
|
+
log.info(`Dropped connection with peer ${peerId.toString()}`);
|
170
187
|
}
|
171
188
|
catch (error) {
|
172
|
-
log(`Error dropping connection with peer ${peerId.toString()} - ${error}`);
|
189
|
+
log.error(`Error dropping connection with peer ${peerId.toString()} - ${error}`);
|
173
190
|
}
|
174
191
|
}
|
175
192
|
processDialQueue() {
|
176
193
|
if (this.pendingPeerDialQueue.length > 0 &&
|
177
|
-
this.
|
194
|
+
this.currentActiveParallelDialCount < this.options.maxParallelDials) {
|
178
195
|
const peerId = this.pendingPeerDialQueue.shift();
|
179
196
|
if (!peerId)
|
180
197
|
return;
|
181
198
|
this.attemptDial(peerId).catch((error) => {
|
182
|
-
log(error);
|
199
|
+
log.error(error);
|
183
200
|
});
|
184
201
|
}
|
185
202
|
}
|
@@ -205,31 +222,26 @@ class ConnectionManager extends EventEmitter {
|
|
205
222
|
this.libp2p.addEventListener("peer:disconnect", this.onEventHandlers["peer:disconnect"]);
|
206
223
|
}
|
207
224
|
async attemptDial(peerId) {
|
208
|
-
if (
|
225
|
+
if (!(await this.shouldDialPeer(peerId)))
|
226
|
+
return;
|
227
|
+
if (this.currentActiveParallelDialCount >= this.options.maxParallelDials) {
|
209
228
|
this.pendingPeerDialQueue.push(peerId);
|
210
229
|
return;
|
211
230
|
}
|
212
|
-
if (!(await this.shouldDialPeer(peerId)))
|
213
|
-
return;
|
214
231
|
this.dialPeer(peerId).catch((err) => {
|
215
|
-
|
232
|
+
log.error(`Error dialing peer ${peerId.toString()} : ${err}`);
|
216
233
|
});
|
217
234
|
}
|
218
235
|
onEventHandlers = {
|
219
236
|
"peer:discovery": (evt) => {
|
220
237
|
void (async () => {
|
221
238
|
const { id: peerId } = evt.detail;
|
222
|
-
|
223
|
-
this.dispatchEvent(new CustomEvent(isBootstrap
|
224
|
-
? EPeersByDiscoveryEvents.PEER_DISCOVERY_BOOTSTRAP
|
225
|
-
: EPeersByDiscoveryEvents.PEER_DISCOVERY_PEER_EXCHANGE, {
|
226
|
-
detail: peerId
|
227
|
-
}));
|
239
|
+
await this.dispatchDiscoveryEvent(peerId);
|
228
240
|
try {
|
229
241
|
await this.attemptDial(peerId);
|
230
242
|
}
|
231
243
|
catch (error) {
|
232
|
-
log(`Error dialing peer ${peerId.toString()} : ${error}`);
|
244
|
+
log.error(`Error dialing peer ${peerId.toString()} : ${error}`);
|
233
245
|
}
|
234
246
|
})();
|
235
247
|
},
|
@@ -266,14 +278,45 @@ class ConnectionManager extends EventEmitter {
|
|
266
278
|
}
|
267
279
|
};
|
268
280
|
/**
|
269
|
-
* Checks if the peer
|
270
|
-
* 1. If the peer is
|
271
|
-
* 2. If the peer is not
|
281
|
+
* Checks if the peer should be dialed based on the following conditions:
|
282
|
+
* 1. If the peer is already connected, don't dial
|
283
|
+
* 2. If the peer is not part of any of the configured pubsub topics, don't dial
|
284
|
+
* 3. If the peer is not dialable based on bootstrap status, don't dial
|
285
|
+
* 4. If the peer is already has an active dial attempt, or has been dialed before, don't dial it
|
286
|
+
* @returns true if the peer should be dialed, false otherwise
|
272
287
|
*/
|
273
288
|
async shouldDialPeer(peerId) {
|
289
|
+
// if we're already connected to the peer, don't dial
|
274
290
|
const isConnected = this.libp2p.getConnections(peerId).length > 0;
|
275
|
-
if (isConnected)
|
291
|
+
if (isConnected) {
|
292
|
+
log.warn(`Already connected to peer ${peerId.toString()}. Not dialing.`);
|
293
|
+
return false;
|
294
|
+
}
|
295
|
+
// if the peer is not part of any of the configured pubsub topics, don't dial
|
296
|
+
if (!(await this.isPeerTopicConfigured(peerId))) {
|
297
|
+
const shardInfo = await this.getPeerShardInfo(peerId, this.libp2p.peerStore);
|
298
|
+
log.warn(`Discovered peer ${peerId.toString()} with ShardInfo ${shardInfo} is not part of any of the configured pubsub topics (${this.configuredPubSubTopics}).
|
299
|
+
Not dialing.`);
|
276
300
|
return false;
|
301
|
+
}
|
302
|
+
// if the peer is not dialable based on bootstrap status, don't dial
|
303
|
+
if (!(await this.isPeerDialableBasedOnBootstrapStatus(peerId))) {
|
304
|
+
log.warn(`Peer ${peerId.toString()} is not dialable based on bootstrap status. Not dialing.`);
|
305
|
+
return false;
|
306
|
+
}
|
307
|
+
// If the peer is already already has an active dial attempt, or has been dialed before, don't dial it
|
308
|
+
if (this.dialAttemptsForPeer.has(peerId.toString())) {
|
309
|
+
log.warn(`Peer ${peerId.toString()} has already been attempted dial before, or already has a dial attempt in progress, skipping dial`);
|
310
|
+
return false;
|
311
|
+
}
|
312
|
+
return true;
|
313
|
+
}
|
314
|
+
/**
|
315
|
+
* Checks if the peer is dialable based on the following conditions:
|
316
|
+
* 1. If the peer is a bootstrap peer, it is only dialable if the number of current bootstrap connections is less than the max allowed.
|
317
|
+
* 2. If the peer is not a bootstrap peer
|
318
|
+
*/
|
319
|
+
async isPeerDialableBasedOnBootstrapStatus(peerId) {
|
277
320
|
const tagNames = await this.getTagNamesForPeer(peerId);
|
278
321
|
const isBootstrap = tagNames.some((tagName) => tagName === Tags.BOOTSTRAP);
|
279
322
|
if (isBootstrap) {
|
@@ -290,6 +333,14 @@ class ConnectionManager extends EventEmitter {
|
|
290
333
|
}
|
291
334
|
return false;
|
292
335
|
}
|
336
|
+
async dispatchDiscoveryEvent(peerId) {
|
337
|
+
const isBootstrap = (await this.getTagNamesForPeer(peerId)).includes(Tags.BOOTSTRAP);
|
338
|
+
this.dispatchEvent(new CustomEvent(isBootstrap
|
339
|
+
? EPeersByDiscoveryEvents.PEER_DISCOVERY_BOOTSTRAP
|
340
|
+
: EPeersByDiscoveryEvents.PEER_DISCOVERY_PEER_EXCHANGE, {
|
341
|
+
detail: peerId
|
342
|
+
}));
|
343
|
+
}
|
293
344
|
/**
|
294
345
|
* Fetches the tag names for a given peer
|
295
346
|
*/
|
@@ -299,10 +350,25 @@ class ConnectionManager extends EventEmitter {
|
|
299
350
|
return Array.from(peer.tags.keys());
|
300
351
|
}
|
301
352
|
catch (error) {
|
302
|
-
log(`Failed to get peer ${peerId}, error: ${error}`);
|
353
|
+
log.error(`Failed to get peer ${peerId}, error: ${error}`);
|
303
354
|
return [];
|
304
355
|
}
|
305
356
|
}
|
357
|
+
async isPeerTopicConfigured(peerId) {
|
358
|
+
const shardInfo = await this.getPeerShardInfo(peerId, this.libp2p.peerStore);
|
359
|
+
// If there's no shard information, simply return true
|
360
|
+
if (!shardInfo)
|
361
|
+
return true;
|
362
|
+
const pubsubTopics = shardInfoToPubSubTopics(shardInfo);
|
363
|
+
const isTopicConfigured = pubsubTopics.some((topic) => this.configuredPubSubTopics.includes(topic));
|
364
|
+
return isTopicConfigured;
|
365
|
+
}
|
366
|
+
async getPeerShardInfo(peerId, peerStore) {
|
367
|
+
const peer = await peerStore.get(peerId);
|
368
|
+
const shardInfoBytes = peer.metadata.get("shardInfo");
|
369
|
+
if (!shardInfoBytes)
|
370
|
+
return undefined;
|
371
|
+
return decodeRelayShard(shardInfoBytes);
|
372
|
+
}
|
306
373
|
}
|
307
|
-
export { ConnectionManager };
|
308
374
|
//# sourceMappingURL=connection_manager.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"connection_manager.js","sourceRoot":"","sources":["../../src/lib/connection_manager.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"connection_manager.js","sourceRoot":"","sources":["../../src/lib/connection_manager.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/filter/index.js
CHANGED
@@ -1,40 +1,49 @@
|
|
1
|
-
import { groupByContentTopic, toAsyncIterator } from "@waku/utils";
|
2
|
-
import
|
1
|
+
import { ensurePubsubTopicIsConfigured, groupByContentTopic, toAsyncIterator } from "@waku/utils";
|
2
|
+
import { Logger } from "@waku/utils";
|
3
3
|
import all from "it-all";
|
4
4
|
import * as lp from "it-length-prefixed";
|
5
5
|
import { pipe } from "it-pipe";
|
6
6
|
import { BaseProtocol } from "../base_protocol.js";
|
7
7
|
import { DefaultPubSubTopic } from "../constants.js";
|
8
8
|
import { FilterPushRpc, FilterSubscribeResponse, FilterSubscribeRpc } from "./filter_rpc.js";
|
9
|
-
const log =
|
9
|
+
const log = new Logger("filter:v2");
|
10
10
|
export const FilterCodecs = {
|
11
11
|
SUBSCRIBE: "/vac/waku/filter-subscribe/2.0.0-beta1",
|
12
12
|
PUSH: "/vac/waku/filter-push/2.0.0-beta1"
|
13
13
|
};
|
14
14
|
class Subscription {
|
15
15
|
peer;
|
16
|
-
|
16
|
+
pubsubTopic;
|
17
17
|
newStream;
|
18
18
|
subscriptionCallbacks;
|
19
|
-
constructor(
|
19
|
+
constructor(pubsubTopic, remotePeer, newStream) {
|
20
20
|
this.peer = remotePeer;
|
21
|
-
this.
|
21
|
+
this.pubsubTopic = pubsubTopic;
|
22
22
|
this.newStream = newStream;
|
23
23
|
this.subscriptionCallbacks = new Map();
|
24
24
|
}
|
25
25
|
async subscribe(decoders, callback) {
|
26
26
|
const decodersArray = Array.isArray(decoders) ? decoders : [decoders];
|
27
|
+
// check that all decoders are configured for the same pubsub topic as this subscription
|
28
|
+
decodersArray.forEach((decoder) => {
|
29
|
+
if (decoder.pubsubTopic !== this.pubsubTopic) {
|
30
|
+
throw new Error(`Pubsub topic not configured: decoder is configured for pubsub topic ${decoder.pubsubTopic} but this subscription is for pubsub topic ${this.pubsubTopic}. Please create a new Subscription for the different pubsub topic.`);
|
31
|
+
}
|
32
|
+
});
|
27
33
|
const decodersGroupedByCT = groupByContentTopic(decodersArray);
|
28
34
|
const contentTopics = Array.from(decodersGroupedByCT.keys());
|
29
35
|
const stream = await this.newStream(this.peer);
|
30
|
-
const request = FilterSubscribeRpc.createSubscribeRequest(this.
|
36
|
+
const request = FilterSubscribeRpc.createSubscribeRequest(this.pubsubTopic, contentTopics);
|
31
37
|
try {
|
32
38
|
const res = await pipe([request.encode()], lp.encode, stream, lp.decode, async (source) => await all(source));
|
39
|
+
if (!res || !res.length) {
|
40
|
+
throw Error(`No response received for request ${request.requestId}: ${res}`);
|
41
|
+
}
|
33
42
|
const { statusCode, requestId, statusDesc } = FilterSubscribeResponse.decode(res[0].slice());
|
34
43
|
if (statusCode < 200 || statusCode >= 300) {
|
35
44
|
throw new Error(`Filter subscribe request ${requestId} failed with status code ${statusCode}: ${statusDesc}`);
|
36
45
|
}
|
37
|
-
log("Subscribed to peer ", this.peer.id.toString(), "for content topics", contentTopics);
|
46
|
+
log.info("Subscribed to peer ", this.peer.id.toString(), "for content topics", contentTopics);
|
38
47
|
}
|
39
48
|
catch (e) {
|
40
49
|
throw new Error("Error subscribing to peer: " +
|
@@ -61,7 +70,7 @@ class Subscription {
|
|
61
70
|
}
|
62
71
|
async unsubscribe(contentTopics) {
|
63
72
|
const stream = await this.newStream(this.peer);
|
64
|
-
const unsubscribeRequest = FilterSubscribeRpc.createUnsubscribeRequest(this.
|
73
|
+
const unsubscribeRequest = FilterSubscribeRpc.createUnsubscribeRequest(this.pubsubTopic, contentTopics);
|
65
74
|
try {
|
66
75
|
await pipe([unsubscribeRequest.encode()], lp.encode, stream.sink);
|
67
76
|
}
|
@@ -77,28 +86,34 @@ class Subscription {
|
|
77
86
|
const request = FilterSubscribeRpc.createSubscriberPingRequest();
|
78
87
|
try {
|
79
88
|
const res = await pipe([request.encode()], lp.encode, stream, lp.decode, async (source) => await all(source));
|
89
|
+
if (!res || !res.length) {
|
90
|
+
throw Error(`No response received for request ${request.requestId}: ${res}`);
|
91
|
+
}
|
80
92
|
const { statusCode, requestId, statusDesc } = FilterSubscribeResponse.decode(res[0].slice());
|
81
93
|
if (statusCode < 200 || statusCode >= 300) {
|
82
94
|
throw new Error(`Filter ping request ${requestId} failed with status code ${statusCode}: ${statusDesc}`);
|
83
95
|
}
|
84
|
-
log("Ping successful");
|
96
|
+
log.info("Ping successful");
|
85
97
|
}
|
86
98
|
catch (error) {
|
87
|
-
log("Error pinging: ", error);
|
99
|
+
log.error("Error pinging: ", error);
|
88
100
|
throw new Error("Error pinging: " + error);
|
89
101
|
}
|
90
102
|
}
|
91
103
|
async unsubscribeAll() {
|
92
104
|
const stream = await this.newStream(this.peer);
|
93
|
-
const request = FilterSubscribeRpc.createUnsubscribeAllRequest(this.
|
105
|
+
const request = FilterSubscribeRpc.createUnsubscribeAllRequest(this.pubsubTopic);
|
94
106
|
try {
|
95
107
|
const res = await pipe([request.encode()], lp.encode, stream, lp.decode, async (source) => await all(source));
|
108
|
+
if (!res || !res.length) {
|
109
|
+
throw Error(`No response received for request ${request.requestId}: ${res}`);
|
110
|
+
}
|
96
111
|
const { statusCode, requestId, statusDesc } = FilterSubscribeResponse.decode(res[0].slice());
|
97
112
|
if (statusCode < 200 || statusCode >= 300) {
|
98
113
|
throw new Error(`Filter unsubscribe all request ${requestId} failed with status code ${statusCode}: ${statusDesc}`);
|
99
114
|
}
|
100
115
|
this.subscriptionCallbacks.clear();
|
101
|
-
log("Unsubscribed from all content topics");
|
116
|
+
log.info("Unsubscribed from all content topics");
|
102
117
|
}
|
103
118
|
catch (error) {
|
104
119
|
throw new Error("Error unsubscribing from all content topics: " + error);
|
@@ -108,39 +123,41 @@ class Subscription {
|
|
108
123
|
const contentTopic = message.contentTopic;
|
109
124
|
const subscriptionCallback = this.subscriptionCallbacks.get(contentTopic);
|
110
125
|
if (!subscriptionCallback) {
|
111
|
-
log("No subscription callback available for ", contentTopic);
|
126
|
+
log.error("No subscription callback available for ", contentTopic);
|
112
127
|
return;
|
113
128
|
}
|
114
|
-
await pushMessage(subscriptionCallback, this.
|
129
|
+
await pushMessage(subscriptionCallback, this.pubsubTopic, message);
|
115
130
|
}
|
116
131
|
}
|
117
132
|
class Filter extends BaseProtocol {
|
118
|
-
|
133
|
+
pubsubTopics = [];
|
119
134
|
activeSubscriptions = new Map();
|
120
135
|
NUM_PEERS_PROTOCOL = 1;
|
121
|
-
getActiveSubscription(
|
122
|
-
return this.activeSubscriptions.get(`${
|
136
|
+
getActiveSubscription(pubsubTopic, peerIdStr) {
|
137
|
+
return this.activeSubscriptions.get(`${pubsubTopic}_${peerIdStr}`);
|
123
138
|
}
|
124
|
-
setActiveSubscription(
|
125
|
-
this.activeSubscriptions.set(`${
|
139
|
+
setActiveSubscription(pubsubTopic, peerIdStr, subscription) {
|
140
|
+
this.activeSubscriptions.set(`${pubsubTopic}_${peerIdStr}`, subscription);
|
126
141
|
return subscription;
|
127
142
|
}
|
128
143
|
constructor(libp2p, options) {
|
129
144
|
super(FilterCodecs.SUBSCRIBE, libp2p.components);
|
145
|
+
this.pubsubTopics = options?.pubsubTopics || [DefaultPubSubTopic];
|
130
146
|
libp2p.handle(FilterCodecs.PUSH, this.onRequest.bind(this)).catch((e) => {
|
131
|
-
log("Failed to register ", FilterCodecs.PUSH, e);
|
147
|
+
log.error("Failed to register ", FilterCodecs.PUSH, e);
|
132
148
|
});
|
133
149
|
this.activeSubscriptions = new Map();
|
134
|
-
this.options = options ?? {};
|
135
150
|
}
|
136
|
-
async createSubscription(
|
137
|
-
|
151
|
+
async createSubscription(pubsubTopic = DefaultPubSubTopic) {
|
152
|
+
ensurePubsubTopicIsConfigured(pubsubTopic, this.pubsubTopics);
|
153
|
+
//TODO: get a relevant peer for the topic/shard
|
154
|
+
// https://github.com/waku-org/js-waku/pull/1586#discussion_r1336428230
|
138
155
|
const peer = (await this.getPeers({
|
139
156
|
maxBootstrapPeers: 1,
|
140
157
|
numPeers: this.NUM_PEERS_PROTOCOL
|
141
158
|
}))[0];
|
142
|
-
const subscription = this.getActiveSubscription(
|
143
|
-
this.setActiveSubscription(
|
159
|
+
const subscription = this.getActiveSubscription(pubsubTopic, peer.id.toString()) ??
|
160
|
+
this.setActiveSubscription(pubsubTopic, peer.id.toString(), new Subscription(pubsubTopic, peer, this.getStream.bind(this, peer)));
|
144
161
|
return subscription;
|
145
162
|
}
|
146
163
|
toSubscriptionIterator(decoders) {
|
@@ -170,58 +187,57 @@ class Filter extends BaseProtocol {
|
|
170
187
|
};
|
171
188
|
}
|
172
189
|
onRequest(streamData) {
|
173
|
-
log("Receiving message push");
|
174
190
|
try {
|
175
191
|
pipe(streamData.stream, lp.decode, async (source) => {
|
176
192
|
for await (const bytes of source) {
|
177
193
|
const response = FilterPushRpc.decode(bytes.slice());
|
178
194
|
const { pubsubTopic, wakuMessage } = response;
|
179
195
|
if (!wakuMessage) {
|
180
|
-
log("Received empty message");
|
196
|
+
log.error("Received empty message");
|
181
197
|
return;
|
182
198
|
}
|
183
199
|
if (!pubsubTopic) {
|
184
|
-
log("PubSub topic missing from push message");
|
200
|
+
log.error("PubSub topic missing from push message");
|
185
201
|
return;
|
186
202
|
}
|
187
203
|
const peerIdStr = streamData.connection.remotePeer.toString();
|
188
204
|
const subscription = this.getActiveSubscription(pubsubTopic, peerIdStr);
|
189
205
|
if (!subscription) {
|
190
|
-
log(`No subscription locally registered for topic ${pubsubTopic}`);
|
206
|
+
log.error(`No subscription locally registered for topic ${pubsubTopic}`);
|
191
207
|
return;
|
192
208
|
}
|
193
209
|
await subscription.processMessage(wakuMessage);
|
194
210
|
}
|
195
211
|
}).then(() => {
|
196
|
-
log("Receiving pipe closed.");
|
212
|
+
log.info("Receiving pipe closed.");
|
197
213
|
}, (e) => {
|
198
|
-
log("Error with receiving pipe", e);
|
214
|
+
log.error("Error with receiving pipe", e);
|
199
215
|
});
|
200
216
|
}
|
201
217
|
catch (e) {
|
202
|
-
log("Error decoding message", e);
|
218
|
+
log.error("Error decoding message", e);
|
203
219
|
}
|
204
220
|
}
|
205
221
|
}
|
206
222
|
export function wakuFilter(init = {}) {
|
207
223
|
return (libp2p) => new Filter(libp2p, init);
|
208
224
|
}
|
209
|
-
async function pushMessage(subscriptionCallback,
|
225
|
+
async function pushMessage(subscriptionCallback, pubsubTopic, message) {
|
210
226
|
const { decoders, callback } = subscriptionCallback;
|
211
227
|
const { contentTopic } = message;
|
212
228
|
if (!contentTopic) {
|
213
|
-
log("Message has no content topic, skipping");
|
229
|
+
log.warn("Message has no content topic, skipping");
|
214
230
|
return;
|
215
231
|
}
|
216
232
|
try {
|
217
233
|
const decodePromises = decoders.map((dec) => dec
|
218
|
-
.fromProtoObj(
|
234
|
+
.fromProtoObj(pubsubTopic, message)
|
219
235
|
.then((decoded) => decoded || Promise.reject("Decoding failed")));
|
220
236
|
const decodedMessage = await Promise.any(decodePromises);
|
221
237
|
await callback(decodedMessage);
|
222
238
|
}
|
223
239
|
catch (e) {
|
224
|
-
log("Error decoding message", e);
|
240
|
+
log.error("Error decoding message", e);
|
225
241
|
}
|
226
242
|
}
|
227
243
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/filter/index.ts"],"names":[],"mappings":"AAmBA,OAAO,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/filter/index.ts"],"names":[],"mappings":"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"}
|