@waku/core 0.0.5 → 0.0.7
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 +51 -3
- package/bundle/index.js +31146 -26342
- package/bundle/lib/message/topic_only_message.js +33 -0
- package/bundle/lib/message/version_0.js +133 -0
- package/bundle/lib/predefined_bootstrap_nodes.js +24 -4
- package/bundle/{message-049c8b67.js → peer_exchange-53df2b11.js} +3579 -1007
- package/dist/index.d.ts +14 -13
- package/dist/index.js +11 -10
- package/dist/index.js.map +1 -1
- package/dist/lib/{waku_filter → filter}/filter_rpc.d.ts +1 -1
- package/dist/lib/{waku_filter → filter}/filter_rpc.js +1 -1
- package/dist/lib/filter/filter_rpc.js.map +1 -0
- package/dist/lib/filter/index.d.ts +25 -0
- package/dist/lib/{waku_filter → filter}/index.js +14 -9
- package/dist/lib/filter/index.js.map +1 -0
- package/dist/lib/light_push/index.d.ts +22 -0
- package/dist/lib/{waku_light_push → light_push}/index.js +14 -9
- package/dist/lib/light_push/index.js.map +1 -0
- package/dist/lib/{waku_light_push → light_push}/push_rpc.d.ts +1 -1
- package/dist/lib/{waku_light_push → light_push}/push_rpc.js +1 -1
- package/dist/lib/light_push/push_rpc.js.map +1 -0
- package/dist/lib/message/topic_only_message.d.ts +16 -0
- package/dist/lib/{waku_message → message}/topic_only_message.js +2 -1
- package/dist/lib/message/topic_only_message.js.map +1 -0
- package/dist/lib/message/version_0.d.ts +54 -0
- package/dist/lib/{waku_message → message}/version_0.js +41 -6
- package/dist/lib/message/version_0.js.map +1 -0
- package/dist/lib/predefined_bootstrap_nodes.d.ts +1 -2
- package/dist/lib/predefined_bootstrap_nodes.js +0 -2
- package/dist/lib/predefined_bootstrap_nodes.js.map +1 -1
- package/dist/lib/{waku_relay → relay}/constants.d.ts +0 -0
- package/dist/lib/{waku_relay → relay}/constants.js +0 -0
- package/dist/lib/relay/constants.js.map +1 -0
- package/dist/lib/relay/index.d.ts +24 -0
- package/dist/lib/{waku_relay → relay}/index.js +9 -6
- package/dist/lib/relay/index.js.map +1 -0
- package/dist/lib/{waku_store → store}/history_rpc.d.ts +1 -1
- package/dist/lib/{waku_store → store}/history_rpc.js +1 -1
- package/dist/lib/store/history_rpc.js.map +1 -0
- package/dist/lib/store/index.d.ts +68 -0
- package/dist/lib/{waku_store → store}/index.js +41 -16
- package/dist/lib/store/index.js.map +1 -0
- package/dist/lib/to_proto_message.d.ts +3 -3
- package/dist/lib/to_proto_message.js +1 -0
- package/dist/lib/to_proto_message.js.map +1 -1
- package/dist/lib/wait_for_remote_peer.js +14 -5
- package/dist/lib/wait_for_remote_peer.js.map +1 -1
- package/dist/lib/waku.d.ts +17 -15
- package/dist/lib/waku.js +49 -41
- package/dist/lib/waku.js.map +1 -1
- package/package.json +28 -31
- package/src/index.ts +25 -14
- package/src/lib/{waku_filter → filter}/filter_rpc.ts +1 -2
- package/src/lib/{waku_filter → filter}/index.ts +51 -30
- package/src/lib/{waku_light_push → light_push}/index.ts +38 -19
- package/src/lib/{waku_light_push → light_push}/push_rpc.ts +1 -2
- package/src/lib/{waku_message → message}/topic_only_message.ts +12 -7
- package/src/lib/{waku_message → message}/version_0.ts +59 -18
- package/src/lib/predefined_bootstrap_nodes.ts +2 -6
- package/src/lib/{waku_relay → relay}/constants.ts +0 -0
- package/src/lib/{waku_relay → relay}/index.ts +30 -26
- package/src/lib/{waku_store → store}/history_rpc.ts +1 -2
- package/src/lib/{waku_store → store}/index.ts +93 -28
- package/src/lib/to_proto_message.ts +5 -5
- package/src/lib/wait_for_remote_peer.ts +19 -7
- package/src/lib/waku.ts +78 -51
- package/bundle/browser-1e1a2f27.js +0 -722
- package/bundle/events-158407bb.js +0 -1929
- package/bundle/index-64ce43f0.js +0 -69
- package/bundle/index-8710041d.js +0 -2962
- package/bundle/index-a67d7136.js +0 -4059
- package/bundle/lib/peer_discovery_static_list.js +0 -89
- package/bundle/lib/wait_for_remote_peer.js +0 -326
- package/bundle/lib/waku_message/topic_only_message.js +0 -3
- package/bundle/lib/waku_message/version_0.js +0 -317
- package/bundle/random_subset-75d1c511.js +0 -26
- package/bundle/topic_only_message-5ad3a869.js +0 -82
- package/dist/lib/multiaddr_to_peer_info.d.ts +0 -3
- package/dist/lib/multiaddr_to_peer_info.js +0 -15
- package/dist/lib/multiaddr_to_peer_info.js.map +0 -1
- package/dist/lib/peer_discovery_static_list.d.ts +0 -44
- package/dist/lib/peer_discovery_static_list.js +0 -72
- package/dist/lib/peer_discovery_static_list.js.map +0 -1
- package/dist/lib/select_connection.d.ts +0 -2
- package/dist/lib/select_connection.js +0 -19
- package/dist/lib/select_connection.js.map +0 -1
- package/dist/lib/select_peer.d.ts +0 -15
- package/dist/lib/select_peer.js +0 -59
- package/dist/lib/select_peer.js.map +0 -1
- package/dist/lib/waku_filter/filter_rpc.js.map +0 -1
- package/dist/lib/waku_filter/index.d.ts +0 -50
- package/dist/lib/waku_filter/index.js.map +0 -1
- package/dist/lib/waku_light_push/index.d.ts +0 -38
- package/dist/lib/waku_light_push/index.js.map +0 -1
- package/dist/lib/waku_light_push/push_rpc.js.map +0 -1
- package/dist/lib/waku_message/topic_only_message.d.ts +0 -15
- package/dist/lib/waku_message/topic_only_message.js.map +0 -1
- package/dist/lib/waku_message/version_0.d.ts +0 -27
- package/dist/lib/waku_message/version_0.js.map +0 -1
- package/dist/lib/waku_relay/constants.js.map +0 -1
- package/dist/lib/waku_relay/index.d.ts +0 -66
- package/dist/lib/waku_relay/index.js.map +0 -1
- package/dist/lib/waku_store/history_rpc.js.map +0 -1
- package/dist/lib/waku_store/index.d.ts +0 -126
- package/dist/lib/waku_store/index.js.map +0 -1
- package/dist/proto/filter.d.ts +0 -65
- package/dist/proto/filter.js +0 -425
- package/dist/proto/filter.js.map +0 -1
- package/dist/proto/light_push.d.ts +0 -57
- package/dist/proto/light_push.js +0 -369
- package/dist/proto/light_push.js.map +0 -1
- package/dist/proto/message.d.ts +0 -29
- package/dist/proto/message.js +0 -215
- package/dist/proto/message.js.map +0 -1
- package/dist/proto/store.d.ts +0 -104
- package/dist/proto/store.js +0 -602
- package/dist/proto/store.js.map +0 -1
- package/dist/proto/topic_only_message.d.ts +0 -10
- package/dist/proto/topic_only_message.js +0 -46
- package/dist/proto/topic_only_message.js.map +0 -1
- package/src/lib/multiaddr_to_peer_info.ts +0 -17
- package/src/lib/peer_discovery_static_list.ts +0 -118
- package/src/lib/select_connection.ts +0 -24
- package/src/lib/select_peer.ts +0 -77
- package/src/proto/filter.ts +0 -602
- package/src/proto/light_push.ts +0 -526
- package/src/proto/message.ts +0 -304
- package/src/proto/store.ts +0 -844
- package/src/proto/topic_only_message.ts +0 -67
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"history_rpc.js","sourceRoot":"","sources":["../../../src/lib/store/history_rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,KAAK,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAS,CAAC,CAAC;AAErC,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,sCAAqB,CAAA;IACrB,oCAAmB,CAAA;AACrB,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AAYD,MAAM,OAAO,UAAU;IACrB,YAAoC,KAAuB;QAAvB,UAAK,GAAL,KAAK,CAAkB;IAAG,CAAC;IAE/D,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,MAAc;QAC/B,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE;YAC/D,OAAO,EAAE,YAAY,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAEzD,MAAM,UAAU,GAAG;YACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;YACjC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS;SACU,CAAC;QAEtB,IAAI,SAAS,EAAE,OAAO,CAAC;QACvB,IAAI,MAAM,CAAC,SAAS,EAAE;YACpB,0CAA0C;YAC1C,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC;SAC7D;QAED,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,0CAA0C;YAC1C,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC;SACzD;QACD,OAAO,IAAI,UAAU,CAAC;YACpB,SAAS,EAAE,IAAI,EAAE;YACjB,KAAK,EAAE;gBACL,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,cAAc;gBACd,UAAU;gBACV,SAAS;gBACT,OAAO;aACR;YACD,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAqB;QAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM;QACJ,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;CACF;AAED,SAAS,gBAAgB,CACvB,aAA4B;IAE5B,QAAQ,aAAa,EAAE;QACrB,KAAK,aAAa,CAAC,QAAQ;YACzB,OAAO,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,8BAA8B,CAAC;QACnE,KAAK,aAAa,CAAC,OAAO;YACxB,OAAO,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,iBAAiB,CAAC;QACtD;YACE,OAAO,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,8BAA8B,CAAC;KACpE;AACH,CAAC"}
|
@@ -0,0 +1,68 @@
|
|
1
|
+
import type { ConnectionManager } from "@libp2p/interface-connection-manager";
|
2
|
+
import type { PeerId } from "@libp2p/interface-peer-id";
|
3
|
+
import type { PeerStore } from "@libp2p/interface-peer-store";
|
4
|
+
import { Cursor, IDecodedMessage, Index, IStore } from "@waku/interfaces";
|
5
|
+
import { PageDirection } from "./history_rpc.js";
|
6
|
+
export declare const StoreCodec = "/vac/waku/store/2.0.0-beta4";
|
7
|
+
export declare const DefaultPageSize = 10;
|
8
|
+
export { PageDirection };
|
9
|
+
export interface StoreComponents {
|
10
|
+
peerStore: PeerStore;
|
11
|
+
connectionManager: ConnectionManager;
|
12
|
+
}
|
13
|
+
export interface CreateOptions {
|
14
|
+
/**
|
15
|
+
* The PubSub Topic to use. Defaults to {@link DefaultPubSubTopic}.
|
16
|
+
*
|
17
|
+
* The usage of the default pubsub topic is recommended.
|
18
|
+
* See [Waku v2 Topic Usage Recommendations](https://rfc.vac.dev/spec/23/) for details.
|
19
|
+
*
|
20
|
+
* @default {@link DefaultPubSubTopic}
|
21
|
+
*/
|
22
|
+
pubSubTopic?: string;
|
23
|
+
}
|
24
|
+
export interface TimeFilter {
|
25
|
+
startTime: Date;
|
26
|
+
endTime: Date;
|
27
|
+
}
|
28
|
+
export interface QueryOptions {
|
29
|
+
/**
|
30
|
+
* The peer to query. If undefined, a pseudo-random peer is selected from the connected Waku Store peers.
|
31
|
+
*/
|
32
|
+
peerId?: PeerId;
|
33
|
+
/**
|
34
|
+
* The pubsub topic to pass to the query.
|
35
|
+
* See [Waku v2 Topic Usage Recommendations](https://rfc.vac.dev/spec/23/).
|
36
|
+
*/
|
37
|
+
pubSubTopic?: string;
|
38
|
+
/**
|
39
|
+
* The direction in which pages are retrieved:
|
40
|
+
* - { @link PageDirection.BACKWARD }: Most recent page first.
|
41
|
+
* - { @link PageDirection.FORWARD }: Oldest page first.
|
42
|
+
*
|
43
|
+
* Note: This does not affect the ordering of messages with the page
|
44
|
+
* (the oldest message is always first).
|
45
|
+
*
|
46
|
+
* @default { @link PageDirection.BACKWARD }
|
47
|
+
*/
|
48
|
+
pageDirection?: PageDirection;
|
49
|
+
/**
|
50
|
+
* The number of message per page.
|
51
|
+
*
|
52
|
+
* @default { @link DefaultPageSize }
|
53
|
+
*/
|
54
|
+
pageSize?: number;
|
55
|
+
/**
|
56
|
+
* Retrieve messages with a timestamp within the provided values.
|
57
|
+
*/
|
58
|
+
timeFilter?: TimeFilter;
|
59
|
+
/**
|
60
|
+
* Cursor as an index to start a query from.
|
61
|
+
* The cursor index will be exclusive (i.e. the message at the cursor index will not be included in the result).
|
62
|
+
* If undefined, the query will start from the beginning or end of the history, depending on the page direction.
|
63
|
+
*/
|
64
|
+
cursor?: Cursor;
|
65
|
+
}
|
66
|
+
export declare function isDefined<T>(msg: T | undefined): msg is T;
|
67
|
+
export declare function createCursor(message: IDecodedMessage, pubsubTopic?: string): Promise<Index>;
|
68
|
+
export declare function wakuStore(init?: Partial<CreateOptions>): (components: StoreComponents) => IStore;
|
@@ -1,12 +1,13 @@
|
|
1
|
+
import { sha256 } from "@noble/hashes/sha256";
|
2
|
+
import { concat, utf8ToBytes } from "@waku/byte-utils";
|
3
|
+
import { getPeersForProtocol, selectConnection, selectPeerForProtocol, } from "@waku/libp2p-utils";
|
4
|
+
import { proto_store as proto } from "@waku/proto";
|
1
5
|
import debug from "debug";
|
2
6
|
import all from "it-all";
|
3
7
|
import * as lp from "it-length-prefixed";
|
4
8
|
import { pipe } from "it-pipe";
|
5
9
|
import { Uint8ArrayList } from "uint8arraylist";
|
6
|
-
import * as proto from "../../proto/store.js";
|
7
10
|
import { DefaultPubSubTopic } from "../constants.js";
|
8
|
-
import { selectConnection } from "../select_connection.js";
|
9
|
-
import { getPeersForProtocol, selectPeerForProtocol } from "../select_peer.js";
|
10
11
|
import { toProtoMessage } from "../to_proto_message.js";
|
11
12
|
import { HistoryRPC, PageDirection } from "./history_rpc.js";
|
12
13
|
var HistoryError = proto.HistoryResponse.HistoryError;
|
@@ -19,9 +20,9 @@ export { PageDirection };
|
|
19
20
|
*
|
20
21
|
* The Waku Store protocol can be used to retrieved historical messages.
|
21
22
|
*/
|
22
|
-
|
23
|
-
constructor(
|
24
|
-
this.
|
23
|
+
class Store {
|
24
|
+
constructor(components, options) {
|
25
|
+
this.components = components;
|
25
26
|
this.pubSubTopic = options?.pubSubTopic ?? DefaultPubSubTopic;
|
26
27
|
}
|
27
28
|
/**
|
@@ -129,19 +130,19 @@ export class WakuStore {
|
|
129
130
|
pageSize: DefaultPageSize,
|
130
131
|
}, options, { contentTopics, startTime, endTime });
|
131
132
|
log("Querying history with the following options", {
|
132
|
-
peerId: options?.peerId?.toString(),
|
133
133
|
...options,
|
134
|
+
peerId: options?.peerId?.toString(),
|
134
135
|
});
|
135
|
-
const res = await selectPeerForProtocol(this.
|
136
|
+
const res = await selectPeerForProtocol(this.components.peerStore, [StoreCodec], options?.peerId);
|
136
137
|
if (!res) {
|
137
138
|
throw new Error("Failed to get a peer");
|
138
139
|
}
|
139
140
|
const { peer, protocol } = res;
|
140
|
-
const connections = this.
|
141
|
+
const connections = this.components.connectionManager.getConnections(peer.id);
|
141
142
|
const connection = selectConnection(connections);
|
142
143
|
if (!connection)
|
143
144
|
throw "Failed to get a connection to the peer";
|
144
|
-
for await (const messages of paginate(connection, protocol, queryOpts, decodersAsMap)) {
|
145
|
+
for await (const messages of paginate(connection, protocol, queryOpts, decodersAsMap, options?.cursor)) {
|
145
146
|
yield messages;
|
146
147
|
}
|
147
148
|
}
|
@@ -150,17 +151,20 @@ export class WakuStore {
|
|
150
151
|
* store protocol. Waku may or may not be currently connected to these peers.
|
151
152
|
*/
|
152
153
|
async peers() {
|
153
|
-
return getPeersForProtocol(this.
|
154
|
+
return getPeersForProtocol(this.components.peerStore, [StoreCodec]);
|
155
|
+
}
|
156
|
+
get peerStore() {
|
157
|
+
return this.components.peerStore;
|
154
158
|
}
|
155
159
|
}
|
156
|
-
async function* paginate(connection, protocol, queryOpts, decoders) {
|
160
|
+
async function* paginate(connection, protocol, queryOpts, decoders, cursor) {
|
157
161
|
if (queryOpts.contentTopics.toString() !==
|
158
162
|
Array.from(decoders.keys()).toString()) {
|
159
163
|
throw new Error("Internal error, the decoders should match the query's content topics");
|
160
164
|
}
|
161
|
-
let
|
165
|
+
let currentCursor = cursor;
|
162
166
|
while (true) {
|
163
|
-
queryOpts =
|
167
|
+
queryOpts.cursor = currentCursor;
|
164
168
|
const stream = await connection.newStream(protocol);
|
165
169
|
const historyRpcQuery = HistoryRPC.createQuery(queryOpts);
|
166
170
|
log("Querying store peer", connection.remoteAddr.toString(), `for (${queryOpts.pubSubTopic})`, queryOpts.contentTopics);
|
@@ -194,13 +198,14 @@ async function* paginate(connection, protocol, queryOpts, decoders) {
|
|
194
198
|
}
|
195
199
|
return Promise.resolve(undefined);
|
196
200
|
});
|
197
|
-
|
198
|
-
if (typeof
|
201
|
+
const nextCursor = response.pagingInfo?.cursor;
|
202
|
+
if (typeof nextCursor === "undefined") {
|
199
203
|
// If the server does not return cursor then there is an issue,
|
200
204
|
// Need to abort, or we end up in an infinite loop
|
201
205
|
log("Stopping pagination due to `response.pagingInfo.cursor` missing from store response");
|
202
206
|
break;
|
203
207
|
}
|
208
|
+
currentCursor = nextCursor;
|
204
209
|
const responsePageSize = response.pagingInfo?.pageSize;
|
205
210
|
const queryPageSize = historyRpcQuery.query?.pagingInfo?.pageSize;
|
206
211
|
if (
|
@@ -215,4 +220,24 @@ async function* paginate(connection, protocol, queryOpts, decoders) {
|
|
215
220
|
export function isDefined(msg) {
|
216
221
|
return !!msg;
|
217
222
|
}
|
223
|
+
export async function createCursor(message, pubsubTopic = DefaultPubSubTopic) {
|
224
|
+
if (!message ||
|
225
|
+
!message.timestamp ||
|
226
|
+
!message.payload ||
|
227
|
+
!message.contentTopic) {
|
228
|
+
throw new Error("Message is missing required fields");
|
229
|
+
}
|
230
|
+
const contentTopicBytes = utf8ToBytes(message.contentTopic);
|
231
|
+
const digest = sha256(concat([contentTopicBytes, message.payload]));
|
232
|
+
const messageTime = BigInt(message.timestamp.getTime()) * BigInt(1000000);
|
233
|
+
return {
|
234
|
+
digest,
|
235
|
+
pubsubTopic,
|
236
|
+
senderTime: messageTime,
|
237
|
+
receivedTime: messageTime,
|
238
|
+
};
|
239
|
+
}
|
240
|
+
export function wakuStore(init = {}) {
|
241
|
+
return (components) => new Store(components, init);
|
242
|
+
}
|
218
243
|
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/store/index.ts"],"names":[],"mappings":"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"}
|
@@ -1,3 +1,3 @@
|
|
1
|
-
import {
|
2
|
-
import { WakuMessage as WakuMessageProto } from "
|
3
|
-
export declare function toProtoMessage(wire: WakuMessageProto):
|
1
|
+
import { IProtoMessage } from "@waku/interfaces";
|
2
|
+
import { WakuMessage as WakuMessageProto } from "@waku/proto";
|
3
|
+
export declare function toProtoMessage(wire: WakuMessageProto): IProtoMessage;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"to_proto_message.js","sourceRoot":"","sources":["../../src/lib/to_proto_message.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"to_proto_message.js","sourceRoot":"","sources":["../../src/lib/to_proto_message.ts"],"names":[],"mappings":"AAGA,MAAM,YAAY,GAAkB;IAClC,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,SAAS;IACvB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,cAAc,EAAE,SAAS;IACzB,SAAS,EAAE,SAAS;CACrB,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,IAAsB;IACnD,OAAO,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,EAAE,CAAC;AACtC,CAAC"}
|
@@ -1,9 +1,10 @@
|
|
1
1
|
import { Protocols } from "@waku/interfaces";
|
2
|
+
import { PeerExchangeCodec } from "@waku/peer-exchange";
|
2
3
|
import debug from "debug";
|
3
4
|
import { pEvent } from "p-event";
|
4
|
-
import { FilterCodec } from "./
|
5
|
-
import { LightPushCodec } from "./
|
6
|
-
import { StoreCodec } from "./
|
5
|
+
import { FilterCodec } from "./filter/index.js";
|
6
|
+
import { LightPushCodec } from "./light_push/index.js";
|
7
|
+
import { StoreCodec } from "./store/index.js";
|
7
8
|
const log = debug("waku:wait-for-remote-peer");
|
8
9
|
/**
|
9
10
|
* Wait for a remote peer to be ready given the passed protocols.
|
@@ -49,6 +50,11 @@ export async function waitForRemotePeer(waku, protocols, timeoutMs) {
|
|
49
50
|
throw new Error("Cannot wait for Filter peer: protocol not mounted");
|
50
51
|
promises.push(waitForConnectedPeer(waku.filter, [FilterCodec]));
|
51
52
|
}
|
53
|
+
if (protocols.includes(Protocols.PeerExchange)) {
|
54
|
+
if (!waku.peerExchange)
|
55
|
+
throw new Error("Cannot wait for Peer Exchange peer: protocol not mounted");
|
56
|
+
promises.push(waitForConnectedPeer(waku.peerExchange, [PeerExchangeCodec]));
|
57
|
+
}
|
52
58
|
if (timeoutMs) {
|
53
59
|
await rejectOnTimeout(Promise.all(promises), timeoutMs, "Timed out waiting for a remote peer.");
|
54
60
|
}
|
@@ -70,13 +76,13 @@ async function waitForConnectedPeer(waku, codecs) {
|
|
70
76
|
for (const codec of codecs) {
|
71
77
|
if (evt.detail.protocols.includes(codec)) {
|
72
78
|
log("Resolving for", codec, evt.detail.protocols);
|
73
|
-
waku.
|
79
|
+
waku.peerStore.removeEventListener("change:protocols", cb);
|
74
80
|
resolve();
|
75
81
|
break;
|
76
82
|
}
|
77
83
|
}
|
78
84
|
};
|
79
|
-
waku.
|
85
|
+
waku.peerStore.addEventListener("change:protocols", cb);
|
80
86
|
});
|
81
87
|
}
|
82
88
|
/**
|
@@ -108,6 +114,9 @@ function getEnabledProtocols(waku) {
|
|
108
114
|
if (waku.lightPush) {
|
109
115
|
protocols.push(Protocols.LightPush);
|
110
116
|
}
|
117
|
+
if (waku.peerExchange) {
|
118
|
+
protocols.push(Protocols.PeerExchange);
|
119
|
+
}
|
111
120
|
return protocols;
|
112
121
|
}
|
113
122
|
//# sourceMappingURL=wait_for_remote_peer.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"wait_for_remote_peer.js","sourceRoot":"","sources":["../../src/lib/wait_for_remote_peer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,
|
1
|
+
{"version":3,"file":"wait_for_remote_peer.js","sourceRoot":"","sources":["../../src/lib/wait_for_remote_peer.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/waku.d.ts
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
import type { Stream } from "@libp2p/interface-connection";
|
2
2
|
import type { PeerId } from "@libp2p/interface-peer-id";
|
3
3
|
import type { Multiaddr } from "@multiformats/multiaddr";
|
4
|
-
import type { Waku } from "@waku/interfaces";
|
4
|
+
import type { IFilter, ILightPush, IPeerExchange, IRelay, IStore, PeerExchangeComponents, Waku } from "@waku/interfaces";
|
5
5
|
import { Protocols } from "@waku/interfaces";
|
6
6
|
import type { Libp2p } from "libp2p";
|
7
|
-
import {
|
8
|
-
import {
|
9
|
-
import {
|
10
|
-
import { WakuStore } from "./waku_store";
|
7
|
+
import { FilterComponents } from "./filter/index.js";
|
8
|
+
import { LightPushComponents } from "./light_push/index.js";
|
9
|
+
import { StoreComponents } from "./store/index.js";
|
11
10
|
export declare const DefaultPingKeepAliveValueSecs = 0;
|
12
11
|
export declare const DefaultRelayKeepAliveValueSecs: number;
|
12
|
+
export declare const DefaultUserAgent = "js-waku";
|
13
13
|
export interface WakuOptions {
|
14
14
|
/**
|
15
15
|
* Set keep alive frequency in seconds: Waku will send a `/ipfs/ping/1.0.0`
|
@@ -25,27 +25,29 @@ export interface WakuOptions {
|
|
25
25
|
* @default {@link DefaultRelayKeepAliveValueSecs}
|
26
26
|
*/
|
27
27
|
relayKeepAlive?: number;
|
28
|
+
/**
|
29
|
+
* Set the user agent string to be used in identification of the node.
|
30
|
+
* @default {@link DefaultUserAgent}
|
31
|
+
*/
|
32
|
+
userAgent?: string;
|
28
33
|
}
|
29
34
|
export declare class WakuNode implements Waku {
|
30
35
|
libp2p: Libp2p;
|
31
|
-
relay?:
|
32
|
-
store?:
|
33
|
-
filter?:
|
34
|
-
lightPush?:
|
36
|
+
relay?: IRelay;
|
37
|
+
store?: IStore;
|
38
|
+
filter?: IFilter;
|
39
|
+
lightPush?: ILightPush;
|
40
|
+
peerExchange?: IPeerExchange;
|
35
41
|
private pingKeepAliveTimers;
|
36
42
|
private relayKeepAliveTimers;
|
37
|
-
constructor(options: WakuOptions, libp2p: Libp2p, store?:
|
43
|
+
constructor(options: WakuOptions, libp2p: Libp2p, store?: (components: StoreComponents) => IStore, lightPush?: (components: LightPushComponents) => ILightPush, filter?: (components: FilterComponents) => IFilter, peerExchange?: (components: PeerExchangeComponents) => IPeerExchange);
|
38
44
|
/**
|
39
45
|
* Dials to the provided peer.
|
40
46
|
*
|
41
47
|
* @param peer The peer to dial
|
42
|
-
* @param protocols Waku protocols we expect from the peer;
|
48
|
+
* @param protocols Waku protocols we expect from the peer; Defaults to mounted protocols
|
43
49
|
*/
|
44
50
|
dial(peer: PeerId | Multiaddr, protocols?: Protocols[]): Promise<Stream>;
|
45
|
-
/**
|
46
|
-
* Add peer to address book, it will be auto-dialed in the background.
|
47
|
-
*/
|
48
|
-
addPeerToAddressBook(peerId: PeerId | string, multiaddrs: Multiaddr[] | string[]): Promise<void>;
|
49
51
|
start(): Promise<void>;
|
50
52
|
stop(): Promise<void>;
|
51
53
|
isStarted(): boolean;
|
package/dist/lib/waku.js
CHANGED
@@ -1,27 +1,39 @@
|
|
1
|
-
import { peerIdFromString } from "@libp2p/peer-id";
|
2
|
-
import { multiaddr } from "@multiformats/multiaddr";
|
3
1
|
import { Protocols } from "@waku/interfaces";
|
2
|
+
import { PeerExchangeCodec } from "@waku/peer-exchange";
|
4
3
|
import debug from "debug";
|
5
|
-
import { FilterCodec } from "./
|
6
|
-
import { LightPushCodec } from "./
|
7
|
-
import {
|
8
|
-
import
|
9
|
-
import
|
10
|
-
import { StoreCodec } from "./
|
4
|
+
import { FilterCodec } from "./filter/index.js";
|
5
|
+
import { LightPushCodec } from "./light_push/index.js";
|
6
|
+
import { createEncoder } from "./message/version_0.js";
|
7
|
+
import * as relayConstants from "./relay/constants.js";
|
8
|
+
import { RelayCodecs, RelayPingContentTopic } from "./relay/constants.js";
|
9
|
+
import { StoreCodec } from "./store/index.js";
|
11
10
|
export const DefaultPingKeepAliveValueSecs = 0;
|
12
11
|
export const DefaultRelayKeepAliveValueSecs = 5 * 60;
|
12
|
+
export const DefaultUserAgent = "js-waku";
|
13
13
|
const log = debug("waku:waku");
|
14
14
|
export class WakuNode {
|
15
|
-
constructor(options, libp2p, store, lightPush, filter) {
|
15
|
+
constructor(options, libp2p, store, lightPush, filter, peerExchange) {
|
16
16
|
this.libp2p = libp2p;
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
const { peerStore, connectionManager, registrar } = libp2p;
|
18
|
+
const components = { peerStore, connectionManager, registrar };
|
19
|
+
if (store) {
|
20
|
+
this.store = store(components);
|
21
|
+
}
|
22
|
+
if (filter) {
|
23
|
+
this.filter = filter(components);
|
24
|
+
}
|
25
|
+
if (lightPush) {
|
26
|
+
this.lightPush = lightPush(components);
|
27
|
+
}
|
28
|
+
if (peerExchange) {
|
29
|
+
this.peerExchange = peerExchange(components);
|
30
|
+
}
|
31
|
+
if (isRelay(libp2p.pubsub)) {
|
21
32
|
this.relay = libp2p.pubsub;
|
22
33
|
}
|
23
34
|
log("Waku node created", this.libp2p.peerId.toString(), `relay: ${!!this.relay}, store: ${!!this.store}, light push: ${!!this
|
24
|
-
.lightPush}, filter: ${!!this.filter}
|
35
|
+
.lightPush}, filter: ${!!this.filter}, peer exchange: ${!!this
|
36
|
+
.peerExchange} `);
|
25
37
|
this.pingKeepAliveTimers = {};
|
26
38
|
this.relayKeepAliveTimers = {};
|
27
39
|
const pingKeepAlive = options.pingKeepAlive || DefaultPingKeepAliveValueSecs;
|
@@ -45,15 +57,30 @@ export class WakuNode {
|
|
45
57
|
libp2p.connectionManager.addEventListener("peer:disconnect", (evt) => {
|
46
58
|
this.stopKeepAlive(evt.detail.remotePeer);
|
47
59
|
});
|
60
|
+
// Trivial handling of discovered peers, to be refined.
|
61
|
+
libp2p.addEventListener("peer:discovery", (evt) => {
|
62
|
+
const peerId = evt.detail.id;
|
63
|
+
log(`Found peer ${peerId.toString()}, dialing.`);
|
64
|
+
libp2p.dial(peerId).catch((err) => {
|
65
|
+
log(`Fail to dial ${peerId}`, err);
|
66
|
+
});
|
67
|
+
});
|
48
68
|
}
|
49
69
|
/**
|
50
70
|
* Dials to the provided peer.
|
51
71
|
*
|
52
72
|
* @param peer The peer to dial
|
53
|
-
* @param protocols Waku protocols we expect from the peer;
|
73
|
+
* @param protocols Waku protocols we expect from the peer; Defaults to mounted protocols
|
54
74
|
*/
|
55
75
|
async dial(peer, protocols) {
|
56
|
-
const _protocols = protocols ?? [
|
76
|
+
const _protocols = protocols ?? [];
|
77
|
+
if (typeof protocols === "undefined") {
|
78
|
+
this.relay && _protocols.push(Protocols.Relay);
|
79
|
+
this.store && _protocols.push(Protocols.Store);
|
80
|
+
this.filter && _protocols.push(Protocols.Filter);
|
81
|
+
this.lightPush && _protocols.push(Protocols.LightPush);
|
82
|
+
this.peerExchange && _protocols.push(Protocols.PeerExchange);
|
83
|
+
}
|
57
84
|
const codecs = [];
|
58
85
|
if (_protocols.includes(Protocols.Relay)) {
|
59
86
|
RelayCodecs.forEach((codec) => codecs.push(codec));
|
@@ -67,31 +94,12 @@ export class WakuNode {
|
|
67
94
|
if (_protocols.includes(Protocols.Filter)) {
|
68
95
|
codecs.push(FilterCodec);
|
69
96
|
}
|
70
|
-
|
71
|
-
|
97
|
+
if (_protocols.includes(Protocols.PeerExchange)) {
|
98
|
+
codecs.push(PeerExchangeCodec);
|
99
|
+
}
|
100
|
+
log(`Dialing to ${peer.toString()} with protocols ${_protocols}`);
|
72
101
|
return this.libp2p.dialProtocol(peer, codecs);
|
73
102
|
}
|
74
|
-
/**
|
75
|
-
* Add peer to address book, it will be auto-dialed in the background.
|
76
|
-
*/
|
77
|
-
async addPeerToAddressBook(peerId, multiaddrs) {
|
78
|
-
let peer;
|
79
|
-
if (typeof peerId === "string") {
|
80
|
-
peer = peerIdFromString(peerId);
|
81
|
-
}
|
82
|
-
else {
|
83
|
-
peer = peerId;
|
84
|
-
}
|
85
|
-
const addresses = multiaddrs.map((addr) => {
|
86
|
-
if (typeof addr === "string") {
|
87
|
-
return multiaddr(addr);
|
88
|
-
}
|
89
|
-
else {
|
90
|
-
return addr;
|
91
|
-
}
|
92
|
-
});
|
93
|
-
await this.libp2p.peerStore.addressBook.set(peer, addresses);
|
94
|
-
}
|
95
103
|
async start() {
|
96
104
|
await this.libp2p.start();
|
97
105
|
}
|
@@ -129,7 +137,7 @@ export class WakuNode {
|
|
129
137
|
}
|
130
138
|
const relay = this.relay;
|
131
139
|
if (relay && relayPeriodSecs !== 0) {
|
132
|
-
const encoder =
|
140
|
+
const encoder = createEncoder(RelayPingContentTopic);
|
133
141
|
this.relayKeepAliveTimers[peerIdStr] = setInterval(() => {
|
134
142
|
log("Sending Waku Relay ping message");
|
135
143
|
relay
|
@@ -160,7 +168,7 @@ export class WakuNode {
|
|
160
168
|
this.relayKeepAliveTimers = {};
|
161
169
|
}
|
162
170
|
}
|
163
|
-
function
|
171
|
+
function isRelay(pubsub) {
|
164
172
|
if (pubsub) {
|
165
173
|
try {
|
166
174
|
return pubsub.multicodecs.includes(relayConstants.RelayCodecs[relayConstants.RelayCodecs.length - 1]);
|
package/dist/lib/waku.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"waku.js","sourceRoot":"","sources":["../../src/lib/waku.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"waku.js","sourceRoot":"","sources":["../../src/lib/waku.ts"],"names":[],"mappings":"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"}
|