@waku/core 0.0.18 → 0.0.20
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 +40 -0
- package/bundle/index.js +548 -109
- package/bundle/lib/message/version_0.js +1 -1
- package/bundle/{version_0-c6b47311.js → version_0-9c941081.js} +402 -23
- package/dist/index.d.ts +4 -2
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/connection_manager.d.ts +8 -0
- package/dist/lib/connection_manager.js +74 -6
- package/dist/lib/connection_manager.js.map +1 -1
- package/dist/lib/filter/{filter_rpc.d.ts → v1/filter_rpc.d.ts} +1 -3
- package/dist/lib/filter/v1/filter_rpc.js.map +1 -0
- package/dist/lib/filter/{index.d.ts → v1/index.d.ts} +0 -2
- package/dist/lib/filter/{index.js → v1/index.js} +3 -3
- package/dist/lib/filter/v1/index.js.map +1 -0
- package/dist/lib/filter/v2/filter_rpc.d.ts +40 -0
- package/dist/lib/filter/v2/filter_rpc.js +109 -0
- package/dist/lib/filter/v2/filter_rpc.js.map +1 -0
- package/dist/lib/filter/v2/index.d.ts +3 -0
- package/dist/lib/filter/v2/index.js +235 -0
- package/dist/lib/filter/v2/index.js.map +1 -0
- package/dist/lib/wait_for_remote_peer.d.ts +1 -1
- package/dist/lib/wait_for_remote_peer.js +1 -1
- package/dist/lib/waku.d.ts +5 -5
- package/dist/lib/waku.js.map +1 -1
- package/package.json +9 -10
- package/src/index.ts +5 -2
- package/src/lib/connection_manager.ts +96 -8
- package/src/lib/filter/{filter_rpc.ts → v1/filter_rpc.ts} +1 -4
- package/src/lib/filter/{index.ts → v1/index.ts} +5 -6
- package/src/lib/filter/v2/filter_rpc.ts +131 -0
- package/src/lib/filter/v2/index.ts +413 -0
- package/src/lib/wait_for_remote_peer.ts +1 -1
- package/src/lib/waku.ts +5 -7
- package/dist/lib/filter/filter_rpc.js.map +0 -1
- package/dist/lib/filter/index.js.map +0 -1
- /package/dist/lib/filter/{filter_rpc.js → v1/filter_rpc.js} +0 -0
@@ -4,6 +4,7 @@ import { KeepAliveManager } from "./keep_alive_manager.js";
|
|
4
4
|
const log = debug("waku:connection-manager");
|
5
5
|
export const DEFAULT_MAX_BOOTSTRAP_PEERS_ALLOWED = 1;
|
6
6
|
export const DEFAULT_MAX_DIAL_ATTEMPTS_FOR_PEER = 3;
|
7
|
+
export const DEFAULT_MAX_PARALLEL_DIALS = 3;
|
7
8
|
class ConnectionManager {
|
8
9
|
static instances = new Map();
|
9
10
|
keepAliveManager;
|
@@ -11,6 +12,8 @@ class ConnectionManager {
|
|
11
12
|
libp2pComponents;
|
12
13
|
dialAttemptsForPeer = new Map();
|
13
14
|
dialErrorsForPeer = new Map();
|
15
|
+
currentActiveDialCount = 0;
|
16
|
+
pendingPeerDialQueue = [];
|
14
17
|
static create(peerId, libp2p, keepAliveOptions, relay, options) {
|
15
18
|
let instance = ConnectionManager.instances.get(peerId);
|
16
19
|
if (!instance) {
|
@@ -24,12 +27,34 @@ class ConnectionManager {
|
|
24
27
|
this.options = {
|
25
28
|
maxDialAttemptsForPeer: DEFAULT_MAX_DIAL_ATTEMPTS_FOR_PEER,
|
26
29
|
maxBootstrapPeersAllowed: DEFAULT_MAX_BOOTSTRAP_PEERS_ALLOWED,
|
30
|
+
maxParallelDials: DEFAULT_MAX_PARALLEL_DIALS,
|
27
31
|
...options,
|
28
32
|
};
|
29
33
|
this.keepAliveManager = new KeepAliveManager(keepAliveOptions, relay);
|
30
34
|
this.run()
|
31
35
|
.then(() => log(`Connection Manager is now running`))
|
32
36
|
.catch((error) => log(`Unexpected error while running service`, error));
|
37
|
+
// libp2p emits `peer:discovery` events during its initialization
|
38
|
+
// which means that before the ConnectionManager is initialized, some peers may have been discovered
|
39
|
+
// we will dial the peers in peerStore ONCE before we start to listen to the `peer:discovery` events within the ConnectionManager
|
40
|
+
this.dialPeerStorePeers();
|
41
|
+
}
|
42
|
+
async dialPeerStorePeers() {
|
43
|
+
const peerInfos = await this.libp2pComponents.peerStore.all();
|
44
|
+
const dialPromises = [];
|
45
|
+
for (const peerInfo of peerInfos) {
|
46
|
+
if (this.libp2pComponents
|
47
|
+
.getConnections()
|
48
|
+
.find((c) => c.remotePeer === peerInfo.id))
|
49
|
+
continue;
|
50
|
+
dialPromises.push(this.attemptDial(peerInfo.id));
|
51
|
+
}
|
52
|
+
try {
|
53
|
+
await Promise.all(dialPromises);
|
54
|
+
}
|
55
|
+
catch (error) {
|
56
|
+
log(`Unexpected error while dialing peer store peers`, error);
|
57
|
+
}
|
33
58
|
}
|
34
59
|
async run() {
|
35
60
|
// start event listeners
|
@@ -44,6 +69,7 @@ class ConnectionManager {
|
|
44
69
|
this.libp2pComponents.removeEventListener("peer:discovery", this.onEventHandlers["peer:discovery"]);
|
45
70
|
}
|
46
71
|
async dialPeer(peerId) {
|
72
|
+
this.currentActiveDialCount += 1;
|
47
73
|
let dialAttempt = 0;
|
48
74
|
while (dialAttempt <= this.options.maxDialAttemptsForPeer) {
|
49
75
|
try {
|
@@ -78,6 +104,30 @@ class ConnectionManager {
|
|
78
104
|
catch (error) {
|
79
105
|
throw `Error deleting undialable peer ${peerId.toString()} from peer store - ${error}`;
|
80
106
|
}
|
107
|
+
finally {
|
108
|
+
this.currentActiveDialCount -= 1;
|
109
|
+
this.processDialQueue();
|
110
|
+
}
|
111
|
+
}
|
112
|
+
async dropConnection(peerId) {
|
113
|
+
try {
|
114
|
+
await this.libp2pComponents.hangUp(peerId);
|
115
|
+
log(`Dropped connection with peer ${peerId.toString()}`);
|
116
|
+
}
|
117
|
+
catch (error) {
|
118
|
+
log(`Error dropping connection with peer ${peerId.toString()} - ${error}`);
|
119
|
+
}
|
120
|
+
}
|
121
|
+
async processDialQueue() {
|
122
|
+
if (this.pendingPeerDialQueue.length > 0 &&
|
123
|
+
this.currentActiveDialCount < this.options.maxParallelDials) {
|
124
|
+
const peerId = this.pendingPeerDialQueue.shift();
|
125
|
+
if (!peerId)
|
126
|
+
return;
|
127
|
+
this.attemptDial(peerId).catch((error) => {
|
128
|
+
log(error);
|
129
|
+
});
|
130
|
+
}
|
81
131
|
}
|
82
132
|
startPeerDiscoveryListener() {
|
83
133
|
this.libp2pComponents.peerStore.addEventListener("peer", this.onEventHandlers["peer:discovery"]);
|
@@ -100,16 +150,34 @@ class ConnectionManager {
|
|
100
150
|
*/
|
101
151
|
this.libp2pComponents.addEventListener("peer:disconnect", this.onEventHandlers["peer:disconnect"]);
|
102
152
|
}
|
153
|
+
async attemptDial(peerId) {
|
154
|
+
if (this.currentActiveDialCount >= this.options.maxParallelDials) {
|
155
|
+
this.pendingPeerDialQueue.push(peerId);
|
156
|
+
return;
|
157
|
+
}
|
158
|
+
if (!(await this.shouldDialPeer(peerId)))
|
159
|
+
return;
|
160
|
+
this.dialPeer(peerId).catch((err) => {
|
161
|
+
throw `Error dialing peer ${peerId.toString()} : ${err}`;
|
162
|
+
});
|
163
|
+
}
|
103
164
|
onEventHandlers = {
|
104
165
|
"peer:discovery": async (evt) => {
|
105
166
|
const { id: peerId } = evt.detail;
|
106
|
-
|
107
|
-
return;
|
108
|
-
this.dialPeer(peerId).catch((err) => log(`Error dialing peer ${peerId.toString()} : ${err}`));
|
167
|
+
this.attemptDial(peerId).catch((err) => log(`Error dialing peer ${peerId.toString()} : ${err}`));
|
109
168
|
},
|
110
|
-
"peer:connect": (evt) => {
|
111
|
-
{
|
112
|
-
|
169
|
+
"peer:connect": async (evt) => {
|
170
|
+
const { remotePeer: peerId } = evt.detail;
|
171
|
+
this.keepAliveManager.start(peerId, this.libp2pComponents.ping.bind(this));
|
172
|
+
const isBootstrap = (await this.getTagNamesForPeer(peerId)).includes(Tags.BOOTSTRAP);
|
173
|
+
if (isBootstrap) {
|
174
|
+
const bootstrapConnections = this.libp2pComponents
|
175
|
+
.getConnections()
|
176
|
+
.filter((conn) => conn.tags.includes(Tags.BOOTSTRAP));
|
177
|
+
// If we have too many bootstrap connections, drop one
|
178
|
+
if (bootstrapConnections.length > this.options.maxBootstrapPeersAllowed) {
|
179
|
+
await this.dropConnection(peerId);
|
180
|
+
}
|
113
181
|
}
|
114
182
|
},
|
115
183
|
"peer:disconnect": () => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"connection_manager.js","sourceRoot":"","sources":["../../src/lib/connection_manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAoB,MAAM,yBAAyB,CAAC;AAE7E,MAAM,GAAG,GAAG,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAE7C,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC;
|
1
|
+
{"version":3,"file":"connection_manager.js","sourceRoot":"","sources":["../../src/lib/connection_manager.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"filter_rpc.js","sourceRoot":"","sources":["../../../../src/lib/filter/v1/filter_rpc.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,IAAI,KAAK,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC;;GAEG;AACH,MAAM,OAAO,SAAS;IACM;IAA1B,YAA0B,KAAsB;QAAtB,UAAK,GAAL,KAAK,CAAiB;IAAG,CAAC;IAEpD,MAAM,CAAC,aAAa,CAClB,KAAa,EACb,cAA+B,EAC/B,SAAkB,EAClB,SAAS,GAAG,IAAI;QAEhB,OAAO,IAAI,SAAS,CAAC;YACnB,SAAS,EAAE,SAAS,IAAI,IAAI,EAAE;YAC9B,OAAO,EAAE;gBACP,SAAS;gBACT,KAAK;gBACL,cAAc;aACf;YACD,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,KAAiB;QAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,MAAM;QACJ,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;IAC9B,CAAC;CACF"}
|
@@ -1,7 +1,5 @@
|
|
1
1
|
import type { Libp2p } from "@libp2p/interface-libp2p";
|
2
2
|
import type { IFilter, ProtocolCreateOptions } from "@waku/interfaces";
|
3
|
-
import { ContentFilter } from "./filter_rpc.js";
|
4
|
-
export { ContentFilter };
|
5
3
|
export declare const FilterCodec = "/vac/waku/filter/2.0.0-beta1";
|
6
4
|
export type UnsubscribeFunction = () => Promise<void>;
|
7
5
|
export type RequestID = string;
|
@@ -4,9 +4,9 @@ import debug from "debug";
|
|
4
4
|
import all from "it-all";
|
5
5
|
import * as lp from "it-length-prefixed";
|
6
6
|
import { pipe } from "it-pipe";
|
7
|
-
import { BaseProtocol } from "
|
8
|
-
import { DefaultPubSubTopic } from "
|
9
|
-
import { toProtoMessage } from "
|
7
|
+
import { BaseProtocol } from "../../base_protocol.js";
|
8
|
+
import { DefaultPubSubTopic } from "../../constants.js";
|
9
|
+
import { toProtoMessage } from "../../to_proto_message.js";
|
10
10
|
import { FilterRpc } from "./filter_rpc.js";
|
11
11
|
export const FilterCodec = "/vac/waku/filter/2.0.0-beta1";
|
12
12
|
const log = debug("waku:filter");
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/filter/v1/index.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import { proto_filter_v2 as proto, WakuMessage } from "@waku/proto";
|
2
|
+
/**
|
3
|
+
* FilterPushRPC represents a message conforming to the Waku FilterPush protocol.
|
4
|
+
* Protocol documentation: https://rfc.vac.dev/spec/12/
|
5
|
+
*/
|
6
|
+
export declare class FilterPushRpc {
|
7
|
+
proto: proto.MessagePush;
|
8
|
+
constructor(proto: proto.MessagePush);
|
9
|
+
static decode(bytes: Uint8Array): FilterPushRpc;
|
10
|
+
encode(): Uint8Array;
|
11
|
+
get wakuMessage(): WakuMessage | undefined;
|
12
|
+
/**
|
13
|
+
* Get the pubsub topic from the FilterPushRpc object.
|
14
|
+
* @returns string
|
15
|
+
*/
|
16
|
+
get pubsubTopic(): string | undefined;
|
17
|
+
}
|
18
|
+
export declare class FilterSubscribeRpc {
|
19
|
+
proto: proto.FilterSubscribeRequest;
|
20
|
+
constructor(proto: proto.FilterSubscribeRequest);
|
21
|
+
static createSubscribeRequest(pubsubTopic: string, contentTopics: string[]): FilterSubscribeRpc;
|
22
|
+
static createUnsubscribeRequest(pubsubTopic: string, contentTopics: string[]): FilterSubscribeRpc;
|
23
|
+
static createUnsubscribeAllRequest(pubsubTopic: string): FilterSubscribeRpc;
|
24
|
+
static createSubscriberPingRequest(): FilterSubscribeRpc;
|
25
|
+
static decode(bytes: Uint8Array): FilterSubscribeRpc;
|
26
|
+
encode(): Uint8Array;
|
27
|
+
get filterSubscribeType(): proto.FilterSubscribeRequest.FilterSubscribeType;
|
28
|
+
get requestId(): string;
|
29
|
+
get pubsubTopic(): string | undefined;
|
30
|
+
get contentTopics(): string[];
|
31
|
+
}
|
32
|
+
export declare class FilterSubscribeResponse {
|
33
|
+
proto: proto.FilterSubscribeResponse;
|
34
|
+
constructor(proto: proto.FilterSubscribeResponse);
|
35
|
+
static decode(bytes: Uint8Array): FilterSubscribeResponse;
|
36
|
+
encode(): Uint8Array;
|
37
|
+
get statusCode(): number;
|
38
|
+
get statusDesc(): string | undefined;
|
39
|
+
get requestId(): string;
|
40
|
+
}
|
@@ -0,0 +1,109 @@
|
|
1
|
+
import { proto_filter_v2 as proto } from "@waku/proto";
|
2
|
+
import { v4 as uuid } from "uuid";
|
3
|
+
/**
|
4
|
+
* FilterPushRPC represents a message conforming to the Waku FilterPush protocol.
|
5
|
+
* Protocol documentation: https://rfc.vac.dev/spec/12/
|
6
|
+
*/
|
7
|
+
export class FilterPushRpc {
|
8
|
+
proto;
|
9
|
+
constructor(proto) {
|
10
|
+
this.proto = proto;
|
11
|
+
}
|
12
|
+
static decode(bytes) {
|
13
|
+
const res = proto.MessagePush.decode(bytes);
|
14
|
+
return new FilterPushRpc(res);
|
15
|
+
}
|
16
|
+
encode() {
|
17
|
+
return proto.MessagePush.encode(this.proto);
|
18
|
+
}
|
19
|
+
get wakuMessage() {
|
20
|
+
return this.proto.wakuMessage;
|
21
|
+
}
|
22
|
+
/**
|
23
|
+
* Get the pubsub topic from the FilterPushRpc object.
|
24
|
+
* @returns string
|
25
|
+
*/
|
26
|
+
get pubsubTopic() {
|
27
|
+
return this.proto.pubsubTopic;
|
28
|
+
}
|
29
|
+
}
|
30
|
+
export class FilterSubscribeRpc {
|
31
|
+
proto;
|
32
|
+
constructor(proto) {
|
33
|
+
this.proto = proto;
|
34
|
+
}
|
35
|
+
static createSubscribeRequest(pubsubTopic, contentTopics) {
|
36
|
+
return new FilterSubscribeRpc({
|
37
|
+
requestId: uuid(),
|
38
|
+
filterSubscribeType: proto.FilterSubscribeRequest.FilterSubscribeType.SUBSCRIBE,
|
39
|
+
pubsubTopic,
|
40
|
+
contentTopics,
|
41
|
+
});
|
42
|
+
}
|
43
|
+
static createUnsubscribeRequest(pubsubTopic, contentTopics) {
|
44
|
+
return new FilterSubscribeRpc({
|
45
|
+
requestId: uuid(),
|
46
|
+
filterSubscribeType: proto.FilterSubscribeRequest.FilterSubscribeType.UNSUBSCRIBE,
|
47
|
+
pubsubTopic,
|
48
|
+
contentTopics,
|
49
|
+
});
|
50
|
+
}
|
51
|
+
static createUnsubscribeAllRequest(pubsubTopic) {
|
52
|
+
return new FilterSubscribeRpc({
|
53
|
+
requestId: uuid(),
|
54
|
+
filterSubscribeType: proto.FilterSubscribeRequest.FilterSubscribeType.UNSUBSCRIBE_ALL,
|
55
|
+
pubsubTopic,
|
56
|
+
contentTopics: [],
|
57
|
+
});
|
58
|
+
}
|
59
|
+
static createSubscriberPingRequest() {
|
60
|
+
return new FilterSubscribeRpc({
|
61
|
+
requestId: uuid(),
|
62
|
+
filterSubscribeType: proto.FilterSubscribeRequest.FilterSubscribeType.SUBSCRIBER_PING,
|
63
|
+
pubsubTopic: "",
|
64
|
+
contentTopics: [],
|
65
|
+
});
|
66
|
+
}
|
67
|
+
static decode(bytes) {
|
68
|
+
const res = proto.FilterSubscribeRequest.decode(bytes);
|
69
|
+
return new FilterSubscribeRpc(res);
|
70
|
+
}
|
71
|
+
encode() {
|
72
|
+
return proto.FilterSubscribeRequest.encode(this.proto);
|
73
|
+
}
|
74
|
+
get filterSubscribeType() {
|
75
|
+
return this.proto.filterSubscribeType;
|
76
|
+
}
|
77
|
+
get requestId() {
|
78
|
+
return this.proto.requestId;
|
79
|
+
}
|
80
|
+
get pubsubTopic() {
|
81
|
+
return this.proto.pubsubTopic;
|
82
|
+
}
|
83
|
+
get contentTopics() {
|
84
|
+
return this.proto.contentTopics;
|
85
|
+
}
|
86
|
+
}
|
87
|
+
export class FilterSubscribeResponse {
|
88
|
+
proto;
|
89
|
+
constructor(proto) {
|
90
|
+
this.proto = proto;
|
91
|
+
}
|
92
|
+
static decode(bytes) {
|
93
|
+
const res = proto.FilterSubscribeResponse.decode(bytes);
|
94
|
+
return new FilterSubscribeResponse(res);
|
95
|
+
}
|
96
|
+
encode() {
|
97
|
+
return proto.FilterSubscribeResponse.encode(this.proto);
|
98
|
+
}
|
99
|
+
get statusCode() {
|
100
|
+
return this.proto.statusCode;
|
101
|
+
}
|
102
|
+
get statusDesc() {
|
103
|
+
return this.proto.statusDesc;
|
104
|
+
}
|
105
|
+
get requestId() {
|
106
|
+
return this.proto.requestId;
|
107
|
+
}
|
108
|
+
}
|
109
|
+
//# sourceMappingURL=filter_rpc.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"filter_rpc.js","sourceRoot":"","sources":["../../../../src/lib/filter/v2/filter_rpc.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,235 @@
|
|
1
|
+
import { groupByContentTopic, toAsyncIterator } from "@waku/utils";
|
2
|
+
import debug from "debug";
|
3
|
+
import all from "it-all";
|
4
|
+
import * as lp from "it-length-prefixed";
|
5
|
+
import { pipe } from "it-pipe";
|
6
|
+
import { BaseProtocol } from "../../base_protocol.js";
|
7
|
+
import { DefaultPubSubTopic } from "../../constants.js";
|
8
|
+
import { FilterPushRpc, FilterSubscribeResponse, FilterSubscribeRpc, } from "./filter_rpc.js";
|
9
|
+
const log = debug("waku:filter:v2");
|
10
|
+
const FilterV2Codecs = {
|
11
|
+
SUBSCRIBE: "/vac/waku/filter-subscribe/2.0.0-beta1",
|
12
|
+
PUSH: "/vac/waku/filter-push/2.0.0-beta1",
|
13
|
+
};
|
14
|
+
class Subscription {
|
15
|
+
peer;
|
16
|
+
pubSubTopic;
|
17
|
+
newStream;
|
18
|
+
subscriptionCallbacks;
|
19
|
+
constructor(pubSubTopic, remotePeer, newStream) {
|
20
|
+
this.peer = remotePeer;
|
21
|
+
this.pubSubTopic = pubSubTopic;
|
22
|
+
this.newStream = newStream;
|
23
|
+
this.subscriptionCallbacks = new Map();
|
24
|
+
}
|
25
|
+
async subscribe(decoders, callback) {
|
26
|
+
const decodersArray = Array.isArray(decoders) ? decoders : [decoders];
|
27
|
+
const decodersGroupedByCT = groupByContentTopic(decodersArray);
|
28
|
+
const contentTopics = Array.from(decodersGroupedByCT.keys());
|
29
|
+
const stream = await this.newStream(this.peer);
|
30
|
+
const request = FilterSubscribeRpc.createSubscribeRequest(this.pubSubTopic, contentTopics);
|
31
|
+
try {
|
32
|
+
const res = await pipe([request.encode()], lp.encode, stream, lp.decode, async (source) => await all(source));
|
33
|
+
const { statusCode, requestId, statusDesc } = FilterSubscribeResponse.decode(res[0].slice());
|
34
|
+
if (statusCode < 200 || statusCode >= 300) {
|
35
|
+
throw new Error(`Filter subscribe request ${requestId} failed with status code ${statusCode}: ${statusDesc}`);
|
36
|
+
}
|
37
|
+
log("Subscribed to peer ", this.peer.id.toString(), "for content topics", contentTopics);
|
38
|
+
}
|
39
|
+
catch (e) {
|
40
|
+
throw new Error("Error subscribing to peer: " +
|
41
|
+
this.peer.id.toString() +
|
42
|
+
" for content topics: " +
|
43
|
+
contentTopics +
|
44
|
+
": " +
|
45
|
+
e);
|
46
|
+
}
|
47
|
+
// Save the callback functions by content topics so they
|
48
|
+
// can easily be removed (reciprocally replaced) if `unsubscribe` (reciprocally `subscribe`)
|
49
|
+
// is called for those content topics
|
50
|
+
decodersGroupedByCT.forEach((decoders, contentTopic) => {
|
51
|
+
// Cast the type because a given `subscriptionCallbacks` map may hold
|
52
|
+
// Decoder that decode to different implementations of `IDecodedMessage`
|
53
|
+
const subscriptionCallback = {
|
54
|
+
decoders,
|
55
|
+
callback,
|
56
|
+
};
|
57
|
+
// The callback and decoder may override previous values, this is on
|
58
|
+
// purpose as the user may call `subscribe` to refresh the subscription
|
59
|
+
this.subscriptionCallbacks.set(contentTopic, subscriptionCallback);
|
60
|
+
});
|
61
|
+
}
|
62
|
+
async unsubscribe(contentTopics) {
|
63
|
+
const stream = await this.newStream(this.peer);
|
64
|
+
const unsubscribeRequest = FilterSubscribeRpc.createUnsubscribeRequest(this.pubSubTopic, contentTopics);
|
65
|
+
try {
|
66
|
+
await pipe([unsubscribeRequest.encode()], lp.encode, stream.sink);
|
67
|
+
}
|
68
|
+
catch (error) {
|
69
|
+
throw new Error("Error subscribing: " + error);
|
70
|
+
}
|
71
|
+
contentTopics.forEach((contentTopic) => {
|
72
|
+
this.subscriptionCallbacks.delete(contentTopic);
|
73
|
+
});
|
74
|
+
}
|
75
|
+
async ping() {
|
76
|
+
const stream = await this.newStream(this.peer);
|
77
|
+
const request = FilterSubscribeRpc.createSubscriberPingRequest();
|
78
|
+
try {
|
79
|
+
const res = await pipe([request.encode()], lp.encode, stream, lp.decode, async (source) => await all(source));
|
80
|
+
const { statusCode, requestId, statusDesc } = FilterSubscribeResponse.decode(res[0].slice());
|
81
|
+
if (statusCode < 200 || statusCode >= 300) {
|
82
|
+
throw new Error(`Filter ping request ${requestId} failed with status code ${statusCode}: ${statusDesc}`);
|
83
|
+
}
|
84
|
+
log("Ping successful");
|
85
|
+
}
|
86
|
+
catch (error) {
|
87
|
+
log("Error pinging: ", error);
|
88
|
+
throw new Error("Error pinging: " + error);
|
89
|
+
}
|
90
|
+
}
|
91
|
+
async unsubscribeAll() {
|
92
|
+
const stream = await this.newStream(this.peer);
|
93
|
+
const request = FilterSubscribeRpc.createUnsubscribeAllRequest(this.pubSubTopic);
|
94
|
+
try {
|
95
|
+
const res = await pipe([request.encode()], lp.encode, stream, lp.decode, async (source) => await all(source));
|
96
|
+
const { statusCode, requestId, statusDesc } = FilterSubscribeResponse.decode(res[0].slice());
|
97
|
+
if (statusCode < 200 || statusCode >= 300) {
|
98
|
+
throw new Error(`Filter unsubscribe all request ${requestId} failed with status code ${statusCode}: ${statusDesc}`);
|
99
|
+
}
|
100
|
+
this.subscriptionCallbacks.clear();
|
101
|
+
log("Unsubscribed from all content topics");
|
102
|
+
}
|
103
|
+
catch (error) {
|
104
|
+
throw new Error("Error unsubscribing from all content topics: " + error);
|
105
|
+
}
|
106
|
+
}
|
107
|
+
async processMessage(message) {
|
108
|
+
const contentTopic = message.contentTopic;
|
109
|
+
const subscriptionCallback = this.subscriptionCallbacks.get(contentTopic);
|
110
|
+
if (!subscriptionCallback) {
|
111
|
+
log("No subscription callback available for ", contentTopic);
|
112
|
+
return;
|
113
|
+
}
|
114
|
+
await pushMessage(subscriptionCallback, this.pubSubTopic, message);
|
115
|
+
}
|
116
|
+
}
|
117
|
+
class FilterV2 extends BaseProtocol {
|
118
|
+
libp2p;
|
119
|
+
options;
|
120
|
+
activeSubscriptions = new Map();
|
121
|
+
getActiveSubscription(pubSubTopic, peerIdStr) {
|
122
|
+
return this.activeSubscriptions.get(`${pubSubTopic}_${peerIdStr}`);
|
123
|
+
}
|
124
|
+
setActiveSubscription(pubSubTopic, peerIdStr, subscription) {
|
125
|
+
this.activeSubscriptions.set(`${pubSubTopic}_${peerIdStr}`, subscription);
|
126
|
+
return subscription;
|
127
|
+
}
|
128
|
+
constructor(libp2p, options) {
|
129
|
+
super(FilterV2Codecs.SUBSCRIBE, libp2p.peerStore, libp2p.getConnections.bind(libp2p));
|
130
|
+
this.libp2p = libp2p;
|
131
|
+
this.libp2p
|
132
|
+
.handle(FilterV2Codecs.PUSH, this.onRequest.bind(this))
|
133
|
+
.catch((e) => {
|
134
|
+
log("Failed to register ", FilterV2Codecs.PUSH, e);
|
135
|
+
});
|
136
|
+
this.activeSubscriptions = new Map();
|
137
|
+
this.options = options ?? {};
|
138
|
+
}
|
139
|
+
async createSubscription(pubSubTopic, peerId) {
|
140
|
+
const _pubSubTopic = pubSubTopic ?? this.options.pubSubTopic ?? DefaultPubSubTopic;
|
141
|
+
const peer = await this.getPeer(peerId);
|
142
|
+
const subscription = this.getActiveSubscription(_pubSubTopic, peer.id.toString()) ??
|
143
|
+
this.setActiveSubscription(_pubSubTopic, peer.id.toString(), new Subscription(_pubSubTopic, peer, this.newStream.bind(this, peer)));
|
144
|
+
return subscription;
|
145
|
+
}
|
146
|
+
toSubscriptionIterator(decoders, opts) {
|
147
|
+
return toAsyncIterator(this, decoders, opts);
|
148
|
+
}
|
149
|
+
/**
|
150
|
+
* This method is used to satisfy the `IReceiver` interface.
|
151
|
+
*
|
152
|
+
* @hidden
|
153
|
+
*
|
154
|
+
* @param decoders The decoders to use for the subscription.
|
155
|
+
* @param callback The callback function to use for the subscription.
|
156
|
+
* @param opts Optional protocol options for the subscription.
|
157
|
+
*
|
158
|
+
* @returns A Promise that resolves to a function that unsubscribes from the subscription.
|
159
|
+
*
|
160
|
+
* @remarks
|
161
|
+
* This method should not be used directly.
|
162
|
+
* Instead, use `createSubscription` to create a new subscription.
|
163
|
+
*/
|
164
|
+
async subscribe(decoders, callback, opts) {
|
165
|
+
const subscription = await this.createSubscription(undefined, opts?.peerId);
|
166
|
+
subscription.subscribe(decoders, callback);
|
167
|
+
const contentTopics = Array.from(groupByContentTopic(Array.isArray(decoders) ? decoders : [decoders]).keys());
|
168
|
+
return async () => {
|
169
|
+
await subscription.unsubscribe(contentTopics);
|
170
|
+
};
|
171
|
+
}
|
172
|
+
onRequest(streamData) {
|
173
|
+
log("Receiving message push");
|
174
|
+
try {
|
175
|
+
pipe(streamData.stream, lp.decode, async (source) => {
|
176
|
+
for await (const bytes of source) {
|
177
|
+
const response = FilterPushRpc.decode(bytes.slice());
|
178
|
+
const { pubsubTopic, wakuMessage } = response;
|
179
|
+
if (!wakuMessage) {
|
180
|
+
log("Received empty message");
|
181
|
+
return;
|
182
|
+
}
|
183
|
+
if (!pubsubTopic) {
|
184
|
+
log("PubSub topic missing from push message");
|
185
|
+
return;
|
186
|
+
}
|
187
|
+
const peerIdStr = streamData.connection.remotePeer.toString();
|
188
|
+
const subscription = this.getActiveSubscription(pubsubTopic, peerIdStr);
|
189
|
+
if (!subscription) {
|
190
|
+
log(`No subscription locally registered for topic ${pubsubTopic}`);
|
191
|
+
return;
|
192
|
+
}
|
193
|
+
await subscription.processMessage(wakuMessage);
|
194
|
+
}
|
195
|
+
}).then(() => {
|
196
|
+
log("Receiving pipe closed.");
|
197
|
+
}, (e) => {
|
198
|
+
log("Error with receiving pipe", e);
|
199
|
+
});
|
200
|
+
}
|
201
|
+
catch (e) {
|
202
|
+
log("Error decoding message", e);
|
203
|
+
}
|
204
|
+
}
|
205
|
+
}
|
206
|
+
export function wakuFilterV2(init = {}) {
|
207
|
+
return (libp2p) => new FilterV2(libp2p, init);
|
208
|
+
}
|
209
|
+
async function pushMessage(subscriptionCallback, pubSubTopic, message) {
|
210
|
+
const { decoders, callback } = subscriptionCallback;
|
211
|
+
const { contentTopic } = message;
|
212
|
+
if (!contentTopic) {
|
213
|
+
log("Message has no content topic, skipping");
|
214
|
+
return;
|
215
|
+
}
|
216
|
+
let didDecodeMsg = false;
|
217
|
+
// We don't want to wait for decoding failure, just attempt to decode
|
218
|
+
// all messages and do the call back on the one that works
|
219
|
+
// noinspection ES6MissingAwait
|
220
|
+
decoders.forEach(async (dec) => {
|
221
|
+
if (didDecodeMsg)
|
222
|
+
return;
|
223
|
+
const decoded = await dec.fromProtoObj(pubSubTopic, message);
|
224
|
+
// const decoded = await dec.fromProtoObj(pubSubTopic, message);
|
225
|
+
if (!decoded) {
|
226
|
+
log("Not able to decode message");
|
227
|
+
return;
|
228
|
+
}
|
229
|
+
// This is just to prevent more decoding attempt
|
230
|
+
// TODO: Could be better if we were to abort promises
|
231
|
+
didDecodeMsg = Boolean(decoded);
|
232
|
+
await callback(decoded);
|
233
|
+
});
|
234
|
+
}
|
235
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/filter/v2/index.ts"],"names":[],"mappings":"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"}
|
@@ -4,7 +4,7 @@ import { Protocols } from "@waku/interfaces";
|
|
4
4
|
* Wait for a remote peer to be ready given the passed protocols.
|
5
5
|
* Must be used after attempting to connect to nodes, using
|
6
6
|
* {@link @waku/core.WakuNode.dial} or a bootstrap method with
|
7
|
-
* {@link @waku/
|
7
|
+
* {@link @waku/sdk.createLightNode}.
|
8
8
|
*
|
9
9
|
* If the passed protocols is a GossipSub protocol, then it resolves only once
|
10
10
|
* a peer is in a mesh, to help ensure that other peers will send and receive
|
@@ -6,7 +6,7 @@ const log = debug("waku:wait-for-remote-peer");
|
|
6
6
|
* Wait for a remote peer to be ready given the passed protocols.
|
7
7
|
* Must be used after attempting to connect to nodes, using
|
8
8
|
* {@link @waku/core.WakuNode.dial} or a bootstrap method with
|
9
|
-
* {@link @waku/
|
9
|
+
* {@link @waku/sdk.createLightNode}.
|
10
10
|
*
|
11
11
|
* If the passed protocols is a GossipSub protocol, then it resolves only once
|
12
12
|
* a peer is in a mesh, to help ensure that other peers will send and receive
|