@waku/core 0.0.1

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 (235) hide show
  1. package/CHANGELOG.md +614 -0
  2. package/README.md +56 -0
  3. package/bundle/browser-1e1a2f27.js +722 -0
  4. package/bundle/crypto-8551d579.js +2585 -0
  5. package/bundle/crypto-b00764b7.js +1772 -0
  6. package/bundle/enr-564d4a51.js +20785 -0
  7. package/bundle/enr-9fc5eed8.js +20786 -0
  8. package/bundle/enr-f6e82a53.js +20785 -0
  9. package/bundle/events-158407bb.js +1929 -0
  10. package/bundle/events-fcbda4dc.js +76 -0
  11. package/bundle/index-02d21809.js +20 -0
  12. package/bundle/index-0a4bdddc.js +2976 -0
  13. package/bundle/index-2ae915be.js +1854 -0
  14. package/bundle/index-64ce43f0.js +69 -0
  15. package/bundle/index-691c0be6.js +4059 -0
  16. package/bundle/index-a013a259.js +20 -0
  17. package/bundle/index-ba42b4fc.js +862 -0
  18. package/bundle/index.js +13428 -0
  19. package/bundle/lib/enr.js +8 -0
  20. package/bundle/lib/peer_discovery_dns.js +5018 -0
  21. package/bundle/lib/peer_discovery_static_list.js +75 -0
  22. package/bundle/lib/predefined_bootstrap_nodes.js +59 -0
  23. package/bundle/lib/utils.js +1 -0
  24. package/bundle/lib/wait_for_remote_peer.js +327 -0
  25. package/bundle/lib/waku_message/topic_only_message.js +4 -0
  26. package/bundle/lib/waku_message/version_0.js +4 -0
  27. package/bundle/lib/waku_message/version_1.js +463 -0
  28. package/bundle/message-e2db79d7.js +8393 -0
  29. package/bundle/multiaddr_to_peer_info-c406b1e1.js +19 -0
  30. package/bundle/multiaddr_to_peer_info-fd1de516.js +19 -0
  31. package/bundle/random_subset-75d1c511.js +26 -0
  32. package/bundle/topic_only_message-34f36fa6.js +82 -0
  33. package/bundle/utils-9a3221f2.js +815 -0
  34. package/bundle/version_0-e6fe440c.js +317 -0
  35. package/dist/index.d.ts +16 -0
  36. package/dist/index.js +17 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/lib/constants.d.ts +4 -0
  39. package/dist/lib/constants.js +5 -0
  40. package/dist/lib/constants.js.map +1 -0
  41. package/dist/lib/crypto.d.ts +34 -0
  42. package/dist/lib/crypto.js +79 -0
  43. package/dist/lib/crypto.js.map +1 -0
  44. package/dist/lib/enr/constants.d.ts +4 -0
  45. package/dist/lib/enr/constants.js +8 -0
  46. package/dist/lib/enr/constants.js.map +1 -0
  47. package/dist/lib/enr/enr.d.ts +90 -0
  48. package/dist/lib/enr/enr.js +432 -0
  49. package/dist/lib/enr/enr.js.map +1 -0
  50. package/dist/lib/enr/index.d.ts +5 -0
  51. package/dist/lib/enr/index.js +6 -0
  52. package/dist/lib/enr/index.js.map +1 -0
  53. package/dist/lib/enr/keypair/index.d.ts +8 -0
  54. package/dist/lib/enr/keypair/index.js +53 -0
  55. package/dist/lib/enr/keypair/index.js.map +1 -0
  56. package/dist/lib/enr/keypair/secp256k1.d.ts +13 -0
  57. package/dist/lib/enr/keypair/secp256k1.js +57 -0
  58. package/dist/lib/enr/keypair/secp256k1.js.map +1 -0
  59. package/dist/lib/enr/keypair/types.d.ts +13 -0
  60. package/dist/lib/enr/keypair/types.js +7 -0
  61. package/dist/lib/enr/keypair/types.js.map +1 -0
  62. package/dist/lib/enr/multiaddr_from_fields.d.ts +2 -0
  63. package/dist/lib/enr/multiaddr_from_fields.js +8 -0
  64. package/dist/lib/enr/multiaddr_from_fields.js.map +1 -0
  65. package/dist/lib/enr/multiaddrs_codec.d.ts +3 -0
  66. package/dist/lib/enr/multiaddrs_codec.js +32 -0
  67. package/dist/lib/enr/multiaddrs_codec.js.map +1 -0
  68. package/dist/lib/enr/types.d.ts +8 -0
  69. package/dist/lib/enr/types.js +3 -0
  70. package/dist/lib/enr/types.js.map +1 -0
  71. package/dist/lib/enr/v4.d.ts +3 -0
  72. package/dist/lib/enr/v4.js +14 -0
  73. package/dist/lib/enr/v4.js.map +1 -0
  74. package/dist/lib/enr/waku2_codec.d.ts +8 -0
  75. package/dist/lib/enr/waku2_codec.js +36 -0
  76. package/dist/lib/enr/waku2_codec.js.map +1 -0
  77. package/dist/lib/group_by.d.ts +3 -0
  78. package/dist/lib/group_by.js +13 -0
  79. package/dist/lib/group_by.js.map +1 -0
  80. package/dist/lib/multiaddr_to_peer_info.d.ts +3 -0
  81. package/dist/lib/multiaddr_to_peer_info.js +15 -0
  82. package/dist/lib/multiaddr_to_peer_info.js.map +1 -0
  83. package/dist/lib/peer_discovery_dns/dns.d.ts +48 -0
  84. package/dist/lib/peer_discovery_dns/dns.js +158 -0
  85. package/dist/lib/peer_discovery_dns/dns.js.map +1 -0
  86. package/dist/lib/peer_discovery_dns/dns_over_https.d.ts +32 -0
  87. package/dist/lib/peer_discovery_dns/dns_over_https.js +87 -0
  88. package/dist/lib/peer_discovery_dns/dns_over_https.js.map +1 -0
  89. package/dist/lib/peer_discovery_dns/enrtree.d.ts +33 -0
  90. package/dist/lib/peer_discovery_dns/enrtree.js +76 -0
  91. package/dist/lib/peer_discovery_dns/enrtree.js.map +1 -0
  92. package/dist/lib/peer_discovery_dns/fetch_nodes.d.ts +14 -0
  93. package/dist/lib/peer_discovery_dns/fetch_nodes.js +133 -0
  94. package/dist/lib/peer_discovery_dns/fetch_nodes.js.map +1 -0
  95. package/dist/lib/peer_discovery_dns/index.d.ts +30 -0
  96. package/dist/lib/peer_discovery_dns/index.js +54 -0
  97. package/dist/lib/peer_discovery_dns/index.js.map +1 -0
  98. package/dist/lib/peer_discovery_static_list.d.ts +44 -0
  99. package/dist/lib/peer_discovery_static_list.js +72 -0
  100. package/dist/lib/peer_discovery_static_list.js.map +1 -0
  101. package/dist/lib/predefined_bootstrap_nodes.d.ts +35 -0
  102. package/dist/lib/predefined_bootstrap_nodes.js +56 -0
  103. package/dist/lib/predefined_bootstrap_nodes.js.map +1 -0
  104. package/dist/lib/push_or_init_map.d.ts +1 -0
  105. package/dist/lib/push_or_init_map.js +9 -0
  106. package/dist/lib/push_or_init_map.js.map +1 -0
  107. package/dist/lib/random_subset.d.ts +4 -0
  108. package/dist/lib/random_subset.js +25 -0
  109. package/dist/lib/random_subset.js.map +1 -0
  110. package/dist/lib/select_connection.d.ts +2 -0
  111. package/dist/lib/select_connection.js +19 -0
  112. package/dist/lib/select_connection.js.map +1 -0
  113. package/dist/lib/select_peer.d.ts +15 -0
  114. package/dist/lib/select_peer.js +59 -0
  115. package/dist/lib/select_peer.js.map +1 -0
  116. package/dist/lib/to_proto_message.d.ts +3 -0
  117. package/dist/lib/to_proto_message.js +11 -0
  118. package/dist/lib/to_proto_message.js.map +1 -0
  119. package/dist/lib/utils.d.ts +22 -0
  120. package/dist/lib/utils.js +40 -0
  121. package/dist/lib/utils.js.map +1 -0
  122. package/dist/lib/wait_for_remote_peer.d.ts +22 -0
  123. package/dist/lib/wait_for_remote_peer.js +113 -0
  124. package/dist/lib/wait_for_remote_peer.js.map +1 -0
  125. package/dist/lib/waku.d.ts +61 -0
  126. package/dist/lib/waku.js +174 -0
  127. package/dist/lib/waku.js.map +1 -0
  128. package/dist/lib/waku_filter/filter_rpc.d.ts +25 -0
  129. package/dist/lib/waku_filter/filter_rpc.js +44 -0
  130. package/dist/lib/waku_filter/filter_rpc.js.map +1 -0
  131. package/dist/lib/waku_filter/index.d.ts +50 -0
  132. package/dist/lib/waku_filter/index.js +181 -0
  133. package/dist/lib/waku_filter/index.js.map +1 -0
  134. package/dist/lib/waku_light_push/index.d.ts +38 -0
  135. package/dist/lib/waku_light_push/index.js +83 -0
  136. package/dist/lib/waku_light_push/index.js.map +1 -0
  137. package/dist/lib/waku_light_push/push_rpc.d.ts +11 -0
  138. package/dist/lib/waku_light_push/push_rpc.js +31 -0
  139. package/dist/lib/waku_light_push/push_rpc.js.map +1 -0
  140. package/dist/lib/waku_message/constants.d.ts +12 -0
  141. package/dist/lib/waku_message/constants.js +10 -0
  142. package/dist/lib/waku_message/constants.js.map +1 -0
  143. package/dist/lib/waku_message/ecies.d.ts +17 -0
  144. package/dist/lib/waku_message/ecies.js +126 -0
  145. package/dist/lib/waku_message/ecies.js.map +1 -0
  146. package/dist/lib/waku_message/symmetric.d.ts +3 -0
  147. package/dist/lib/waku_message/symmetric.js +18 -0
  148. package/dist/lib/waku_message/symmetric.js.map +1 -0
  149. package/dist/lib/waku_message/topic_only_message.d.ts +15 -0
  150. package/dist/lib/waku_message/topic_only_message.js +31 -0
  151. package/dist/lib/waku_message/topic_only_message.js.map +1 -0
  152. package/dist/lib/waku_message/version_0.d.ts +26 -0
  153. package/dist/lib/waku_message/version_0.js +96 -0
  154. package/dist/lib/waku_message/version_0.js.map +1 -0
  155. package/dist/lib/waku_message/version_1.d.ts +93 -0
  156. package/dist/lib/waku_message/version_1.js +325 -0
  157. package/dist/lib/waku_message/version_1.js.map +1 -0
  158. package/dist/lib/waku_relay/constants.d.ts +63 -0
  159. package/dist/lib/waku_relay/constants.js +67 -0
  160. package/dist/lib/waku_relay/constants.js.map +1 -0
  161. package/dist/lib/waku_relay/index.d.ts +65 -0
  162. package/dist/lib/waku_relay/index.js +111 -0
  163. package/dist/lib/waku_relay/index.js.map +1 -0
  164. package/dist/lib/waku_store/history_rpc.d.ts +27 -0
  165. package/dist/lib/waku_store/history_rpc.js +71 -0
  166. package/dist/lib/waku_store/history_rpc.js.map +1 -0
  167. package/dist/lib/waku_store/index.d.ts +126 -0
  168. package/dist/lib/waku_store/index.js +218 -0
  169. package/dist/lib/waku_store/index.js.map +1 -0
  170. package/dist/proto/filter.d.ts +65 -0
  171. package/dist/proto/filter.js +425 -0
  172. package/dist/proto/filter.js.map +1 -0
  173. package/dist/proto/light_push.d.ts +57 -0
  174. package/dist/proto/light_push.js +369 -0
  175. package/dist/proto/light_push.js.map +1 -0
  176. package/dist/proto/message.d.ts +29 -0
  177. package/dist/proto/message.js +215 -0
  178. package/dist/proto/message.js.map +1 -0
  179. package/dist/proto/store.d.ts +104 -0
  180. package/dist/proto/store.js +602 -0
  181. package/dist/proto/store.js.map +1 -0
  182. package/dist/proto/topic_only_message.d.ts +10 -0
  183. package/dist/proto/topic_only_message.js +46 -0
  184. package/dist/proto/topic_only_message.js.map +1 -0
  185. package/package.json +292 -0
  186. package/src/index.ts +33 -0
  187. package/src/lib/constants.ts +4 -0
  188. package/src/lib/crypto.ts +100 -0
  189. package/src/lib/enr/constants.ts +10 -0
  190. package/src/lib/enr/enr.ts +516 -0
  191. package/src/lib/enr/index.ts +5 -0
  192. package/src/lib/enr/keypair/index.ts +76 -0
  193. package/src/lib/enr/keypair/secp256k1.ts +69 -0
  194. package/src/lib/enr/keypair/types.ts +14 -0
  195. package/src/lib/enr/multiaddr_from_fields.ts +18 -0
  196. package/src/lib/enr/multiaddrs_codec.ts +50 -0
  197. package/src/lib/enr/types.ts +11 -0
  198. package/src/lib/enr/v4.ts +22 -0
  199. package/src/lib/enr/waku2_codec.ts +39 -0
  200. package/src/lib/group_by.ts +14 -0
  201. package/src/lib/multiaddr_to_peer_info.ts +17 -0
  202. package/src/lib/peer_discovery_dns/dns.ts +223 -0
  203. package/src/lib/peer_discovery_dns/dns_over_https.ts +98 -0
  204. package/src/lib/peer_discovery_dns/enrtree.ts +123 -0
  205. package/src/lib/peer_discovery_dns/fetch_nodes.ts +180 -0
  206. package/src/lib/peer_discovery_dns/index.ts +84 -0
  207. package/src/lib/peer_discovery_static_list.ts +118 -0
  208. package/src/lib/predefined_bootstrap_nodes.ts +72 -0
  209. package/src/lib/push_or_init_map.ts +13 -0
  210. package/src/lib/random_subset.ts +30 -0
  211. package/src/lib/select_connection.ts +24 -0
  212. package/src/lib/select_peer.ts +77 -0
  213. package/src/lib/to_proto_message.ts +15 -0
  214. package/src/lib/utils.ts +50 -0
  215. package/src/lib/wait_for_remote_peer.ts +151 -0
  216. package/src/lib/waku.ts +258 -0
  217. package/src/lib/waku_filter/filter_rpc.ts +57 -0
  218. package/src/lib/waku_filter/index.ts +291 -0
  219. package/src/lib/waku_light_push/index.ts +137 -0
  220. package/src/lib/waku_light_push/push_rpc.ts +39 -0
  221. package/src/lib/waku_message/constants.ts +10 -0
  222. package/src/lib/waku_message/ecies.ts +194 -0
  223. package/src/lib/waku_message/symmetric.ts +33 -0
  224. package/src/lib/waku_message/topic_only_message.ts +40 -0
  225. package/src/lib/waku_message/version_0.ts +121 -0
  226. package/src/lib/waku_message/version_1.ts +457 -0
  227. package/src/lib/waku_relay/constants.ts +77 -0
  228. package/src/lib/waku_relay/index.ts +189 -0
  229. package/src/lib/waku_store/history_rpc.ts +94 -0
  230. package/src/lib/waku_store/index.ts +372 -0
  231. package/src/proto/filter.ts +602 -0
  232. package/src/proto/light_push.ts +526 -0
  233. package/src/proto/message.ts +304 -0
  234. package/src/proto/store.ts +844 -0
  235. package/src/proto/topic_only_message.ts +67 -0
@@ -0,0 +1,14 @@
1
+ import { ENR } from "../enr";
2
+ import { NodeCapabilityCount } from "./dns";
3
+ /**
4
+ * Fetch nodes using passed [[getNode]] until all wanted capabilities are
5
+ * fulfilled or the number of [[getNode]] call exceeds the sum of
6
+ * [[wantedNodeCapabilityCount]] plus [[errorTolerance]].
7
+ */
8
+ export declare function fetchNodesUntilCapabilitiesFulfilled(wantedNodeCapabilityCount: Partial<NodeCapabilityCount>, errorTolerance: number, getNode: () => Promise<ENR | null>): Promise<ENR[]>;
9
+ /**
10
+ * Fetch nodes using passed [[getNode]] until all wanted capabilities are
11
+ * fulfilled or the number of [[getNode]] call exceeds the sum of
12
+ * [[wantedNodeCapabilityCount]] plus [[errorTolerance]].
13
+ */
14
+ export declare function yieldNodesUntilCapabilitiesFulfilled(wantedNodeCapabilityCount: Partial<NodeCapabilityCount>, errorTolerance: number, getNode: () => Promise<ENR | null>): AsyncGenerator<ENR>;
@@ -0,0 +1,133 @@
1
+ import debug from "debug";
2
+ const log = debug("waku:discovery:fetch_nodes");
3
+ /**
4
+ * Fetch nodes using passed [[getNode]] until all wanted capabilities are
5
+ * fulfilled or the number of [[getNode]] call exceeds the sum of
6
+ * [[wantedNodeCapabilityCount]] plus [[errorTolerance]].
7
+ */
8
+ export async function fetchNodesUntilCapabilitiesFulfilled(wantedNodeCapabilityCount, errorTolerance, getNode) {
9
+ const wanted = {
10
+ relay: wantedNodeCapabilityCount.relay ?? 0,
11
+ store: wantedNodeCapabilityCount.store ?? 0,
12
+ filter: wantedNodeCapabilityCount.filter ?? 0,
13
+ lightPush: wantedNodeCapabilityCount.lightPush ?? 0,
14
+ };
15
+ const maxSearches = wanted.relay + wanted.store + wanted.filter + wanted.lightPush;
16
+ const actual = {
17
+ relay: 0,
18
+ store: 0,
19
+ filter: 0,
20
+ lightPush: 0,
21
+ };
22
+ let totalSearches = 0;
23
+ const peers = [];
24
+ while (!isSatisfied(wanted, actual) &&
25
+ totalSearches < maxSearches + errorTolerance) {
26
+ const peer = await getNode();
27
+ if (peer && isNewPeer(peer, peers)) {
28
+ // ENRs without a waku2 key are ignored.
29
+ if (peer.waku2) {
30
+ if (helpsSatisfyCapabilities(peer.waku2, wanted, actual)) {
31
+ addCapabilities(peer.waku2, actual);
32
+ peers.push(peer);
33
+ }
34
+ }
35
+ log(`got new peer candidate from DNS address=${peer.nodeId}@${peer.ip}`);
36
+ }
37
+ totalSearches++;
38
+ }
39
+ return peers;
40
+ }
41
+ /**
42
+ * Fetch nodes using passed [[getNode]] until all wanted capabilities are
43
+ * fulfilled or the number of [[getNode]] call exceeds the sum of
44
+ * [[wantedNodeCapabilityCount]] plus [[errorTolerance]].
45
+ */
46
+ export async function* yieldNodesUntilCapabilitiesFulfilled(wantedNodeCapabilityCount, errorTolerance, getNode) {
47
+ const wanted = {
48
+ relay: wantedNodeCapabilityCount.relay ?? 0,
49
+ store: wantedNodeCapabilityCount.store ?? 0,
50
+ filter: wantedNodeCapabilityCount.filter ?? 0,
51
+ lightPush: wantedNodeCapabilityCount.lightPush ?? 0,
52
+ };
53
+ const maxSearches = wanted.relay + wanted.store + wanted.filter + wanted.lightPush;
54
+ const actual = {
55
+ relay: 0,
56
+ store: 0,
57
+ filter: 0,
58
+ lightPush: 0,
59
+ };
60
+ let totalSearches = 0;
61
+ const peerNodeIds = new Set();
62
+ while (!isSatisfied(wanted, actual) &&
63
+ totalSearches < maxSearches + errorTolerance) {
64
+ const peer = await getNode();
65
+ if (peer && peer.nodeId && !peerNodeIds.has(peer.nodeId)) {
66
+ peerNodeIds.add(peer.nodeId);
67
+ // ENRs without a waku2 key are ignored.
68
+ if (peer.waku2) {
69
+ if (helpsSatisfyCapabilities(peer.waku2, wanted, actual)) {
70
+ addCapabilities(peer.waku2, actual);
71
+ yield peer;
72
+ }
73
+ }
74
+ log(`got new peer candidate from DNS address=${peer.nodeId}@${peer.ip}`);
75
+ }
76
+ totalSearches++;
77
+ }
78
+ }
79
+ function isSatisfied(wanted, actual) {
80
+ return (actual.relay >= wanted.relay &&
81
+ actual.store >= wanted.store &&
82
+ actual.filter >= wanted.filter &&
83
+ actual.lightPush >= wanted.lightPush);
84
+ }
85
+ function isNewPeer(peer, peers) {
86
+ if (!peer.nodeId)
87
+ return false;
88
+ for (const existingPeer of peers) {
89
+ if (peer.nodeId === existingPeer.nodeId) {
90
+ return false;
91
+ }
92
+ }
93
+ return true;
94
+ }
95
+ function addCapabilities(node, total) {
96
+ if (node.relay)
97
+ total.relay += 1;
98
+ if (node.store)
99
+ total.store += 1;
100
+ if (node.filter)
101
+ total.filter += 1;
102
+ if (node.lightPush)
103
+ total.lightPush += 1;
104
+ }
105
+ /**
106
+ * Checks if the proposed ENR [[node]] helps satisfy the [[wanted]] capabilities,
107
+ * considering the [[actual]] capabilities of nodes retrieved so far..
108
+ *
109
+ * @throws If the function is called when the wanted capabilities are already fulfilled.
110
+ */
111
+ function helpsSatisfyCapabilities(node, wanted, actual) {
112
+ if (isSatisfied(wanted, actual)) {
113
+ throw "Internal Error: Waku2 wanted capabilities are already fulfilled";
114
+ }
115
+ const missing = missingCapabilities(wanted, actual);
116
+ return ((missing.relay && node.relay) ||
117
+ (missing.store && node.store) ||
118
+ (missing.filter && node.filter) ||
119
+ (missing.lightPush && node.lightPush));
120
+ }
121
+ /**
122
+ * Return a [[Waku2]] Object for which capabilities are set to true if they are
123
+ * [[wanted]] yet missing from [[actual]].
124
+ */
125
+ function missingCapabilities(wanted, actual) {
126
+ return {
127
+ relay: actual.relay < wanted.relay,
128
+ store: actual.store < wanted.store,
129
+ filter: actual.filter < wanted.filter,
130
+ lightPush: actual.lightPush < wanted.lightPush,
131
+ };
132
+ }
133
+ //# sourceMappingURL=fetch_nodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch_nodes.js","sourceRoot":"","sources":["../../../src/lib/peer_discovery_dns/fetch_nodes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { PeerDiscovery, PeerDiscoveryEvents } from "@libp2p/interface-peer-discovery";
2
+ import { symbol } from "@libp2p/interface-peer-discovery";
3
+ import { EventEmitter } from "@libp2p/interfaces/events";
4
+ import { NodeCapabilityCount } from "./dns";
5
+ /**
6
+ * Parse options and expose function to return bootstrap peer addresses.
7
+ *
8
+ * @throws if an invalid combination of options is passed, see [[BootstrapOptions]] for details.
9
+ */
10
+ export declare class PeerDiscoveryDns extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery {
11
+ private readonly nextPeer;
12
+ private _started;
13
+ /**
14
+ * @param enrUrl An EIP-1459 ENR Tree URL. For example:
15
+ * "enrtree://AOFTICU2XWDULNLZGRMQS4RIZPAZEHYMV4FYHAPW563HNRAOERP7C@test.nodes.vac.dev"
16
+ * @param wantedNodeCapabilityCount Specifies what node capabilities
17
+ * (protocol) must be returned.
18
+ */
19
+ constructor(enrUrl: string, wantedNodeCapabilityCount: Partial<NodeCapabilityCount>);
20
+ /**
21
+ * Start discovery process
22
+ */
23
+ start(): Promise<void>;
24
+ /**
25
+ * Stop emitting events
26
+ */
27
+ stop(): void;
28
+ get [symbol](): true;
29
+ get [Symbol.toStringTag](): string;
30
+ }
@@ -0,0 +1,54 @@
1
+ import { symbol } from "@libp2p/interface-peer-discovery";
2
+ import { CustomEvent, EventEmitter } from "@libp2p/interfaces/events";
3
+ import debug from "debug";
4
+ import { multiaddrsToPeerInfo } from "../multiaddr_to_peer_info.js";
5
+ import { DnsNodeDiscovery } from "./dns.js";
6
+ const log = debug("waku:peer-discovery-dns");
7
+ /**
8
+ * Parse options and expose function to return bootstrap peer addresses.
9
+ *
10
+ * @throws if an invalid combination of options is passed, see [[BootstrapOptions]] for details.
11
+ */
12
+ export class PeerDiscoveryDns extends EventEmitter {
13
+ /**
14
+ * @param enrUrl An EIP-1459 ENR Tree URL. For example:
15
+ * "enrtree://AOFTICU2XWDULNLZGRMQS4RIZPAZEHYMV4FYHAPW563HNRAOERP7C@test.nodes.vac.dev"
16
+ * @param wantedNodeCapabilityCount Specifies what node capabilities
17
+ * (protocol) must be returned.
18
+ */
19
+ constructor(enrUrl, wantedNodeCapabilityCount) {
20
+ super();
21
+ this._started = false;
22
+ log("Use following EIP-1459 ENR Tree URL: ", enrUrl);
23
+ const dns = DnsNodeDiscovery.dnsOverHttp();
24
+ this.nextPeer = dns.getNextPeer.bind({}, [enrUrl], wantedNodeCapabilityCount);
25
+ }
26
+ /**
27
+ * Start discovery process
28
+ */
29
+ async start() {
30
+ log("Starting peer discovery via dns");
31
+ this._started = true;
32
+ for await (const peer of this.nextPeer()) {
33
+ if (!this._started)
34
+ return;
35
+ const peerInfos = multiaddrsToPeerInfo(peer.getFullMultiaddrs());
36
+ peerInfos.forEach((peerInfo) => {
37
+ this.dispatchEvent(new CustomEvent("peer", { detail: peerInfo }));
38
+ });
39
+ }
40
+ }
41
+ /**
42
+ * Stop emitting events
43
+ */
44
+ stop() {
45
+ this._started = false;
46
+ }
47
+ get [symbol]() {
48
+ return true;
49
+ }
50
+ get [Symbol.toStringTag]() {
51
+ return "@waku/bootstrap";
52
+ }
53
+ }
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/peer_discovery_dns/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAuB,MAAM,OAAO,CAAC;AAE9D,MAAM,GAAG,GAAG,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAE7C;;;;GAIG;AACH,MAAM,OAAO,gBACX,SAAQ,YAAiC;IAMzC;;;;;OAKG;IACH,YACE,MAAc,EACd,yBAAuD;QAEvD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,GAAG,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC;QAErD,MAAM,GAAG,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC;QAE3C,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAClC,EAAE,EACF,CAAC,MAAM,CAAC,EACR,yBAAyB,CAC1B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAEvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACxC,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC3B,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;YACjE,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC7B,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAW,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CACxD,CAAC;YACJ,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;CACF"}
@@ -0,0 +1,44 @@
1
+ import type { PeerDiscovery, PeerDiscoveryEvents } from "@libp2p/interface-peer-discovery";
2
+ import { symbol } from "@libp2p/interface-peer-discovery";
3
+ import { EventEmitter } from "@libp2p/interfaces/events";
4
+ import type { Multiaddr } from "@multiformats/multiaddr";
5
+ export interface Options {
6
+ /**
7
+ * The maximum of peers to connect to as part of the bootstrap process.
8
+ *
9
+ * @default The length of the passed `peers` array.
10
+ */
11
+ maxPeers?: number;
12
+ /**
13
+ * The interval between emitting addresses in milliseconds.
14
+ *
15
+ * @default {@link PeerDiscoveryStaticPeers.DefaultInterval}
16
+ */
17
+ interval?: number;
18
+ }
19
+ /**
20
+ * Pass a list of multiaddr that will be used to bootstrap a node.
21
+ */
22
+ export declare class PeerDiscoveryStaticPeers extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery {
23
+ static DefaultInterval: number;
24
+ private readonly peers;
25
+ private timer?;
26
+ private readonly interval;
27
+ /**
28
+ * @param peers Multiaddrs of peers to connect to.
29
+ * @param opts
30
+ */
31
+ constructor(peers: string[] | Multiaddr[], opts?: Options);
32
+ /**
33
+ * Start emitting static peers.
34
+ */
35
+ start(): void;
36
+ private _startTimer;
37
+ _returnPeers(): void;
38
+ /**
39
+ * Stop emitting peers.
40
+ */
41
+ stop(): void;
42
+ get [symbol](): true;
43
+ get [Symbol.toStringTag](): string;
44
+ }
@@ -0,0 +1,72 @@
1
+ import { symbol } from "@libp2p/interface-peer-discovery";
2
+ import { CustomEvent, EventEmitter } from "@libp2p/interfaces/events";
3
+ import { multiaddr } from "@multiformats/multiaddr";
4
+ import debug from "debug";
5
+ import { multiaddrsToPeerInfo } from "./multiaddr_to_peer_info.js";
6
+ import { getPseudoRandomSubset } from "./random_subset.js";
7
+ const log = debug("waku:peer-discovery-static-list");
8
+ /**
9
+ * Pass a list of multiaddr that will be used to bootstrap a node.
10
+ */
11
+ export class PeerDiscoveryStaticPeers extends EventEmitter {
12
+ /**
13
+ * @param peers Multiaddrs of peers to connect to.
14
+ * @param opts
15
+ */
16
+ constructor(peers, opts) {
17
+ super();
18
+ this.interval = opts?.interval ?? PeerDiscoveryStaticPeers.DefaultInterval;
19
+ const maxPeers = opts?.maxPeers ?? peers?.length;
20
+ const peerMas = peers.map((peer) => {
21
+ if (typeof peer === "string") {
22
+ return multiaddr(peer);
23
+ }
24
+ else {
25
+ return peer;
26
+ }
27
+ });
28
+ this.peers = multiaddrsToPeerInfo(getPseudoRandomSubset(peerMas, maxPeers));
29
+ log("Use provided list of peers (reduced to maxPeers)", this.peers.map((ma) => ma.toString()));
30
+ }
31
+ /**
32
+ * Start emitting static peers.
33
+ */
34
+ start() {
35
+ this._startTimer();
36
+ }
37
+ _startTimer() {
38
+ if (this.peers) {
39
+ log("Starting to emit static peers.");
40
+ if (this.timer != null) {
41
+ return;
42
+ }
43
+ this.timer = setInterval(() => this._returnPeers(), this.interval);
44
+ this._returnPeers();
45
+ }
46
+ }
47
+ _returnPeers() {
48
+ if (this.timer == null) {
49
+ return;
50
+ }
51
+ this.peers.forEach((peerData) => {
52
+ this.dispatchEvent(new CustomEvent("peer", { detail: peerData }));
53
+ });
54
+ }
55
+ /**
56
+ * Stop emitting peers.
57
+ */
58
+ stop() {
59
+ if (this.timer != null) {
60
+ clearInterval(this.timer);
61
+ }
62
+ this.timer = undefined;
63
+ }
64
+ get [symbol]() {
65
+ return true;
66
+ }
67
+ get [Symbol.toStringTag]() {
68
+ return "@waku/peer-discovery-static-list";
69
+ }
70
+ }
71
+ PeerDiscoveryStaticPeers.DefaultInterval = 200;
72
+ //# sourceMappingURL=peer_discovery_static_list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer_discovery_static_list.js","sourceRoot":"","sources":["../../src/lib/peer_discovery_static_list.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEtE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,GAAG,GAAG,KAAK,CAAC,iCAAiC,CAAC,CAAC;AAiBrD;;GAEG;AACH,MAAM,OAAO,wBACX,SAAQ,YAAiC;IAQzC;;;OAGG;IACH,YAAY,KAA6B,EAAE,IAAc;QACvD,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,wBAAwB,CAAC,eAAe,CAAC;QAC3E,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,KAAK,EAAE,MAAM,CAAC;QAEjD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAwB,EAAE,EAAE;YACrD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC5B,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;aACxB;iBAAM;gBACL,OAAO,IAAI,CAAC;aACb;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAC,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC5E,GAAG,CACD,kDAAkD,EAClD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CACtC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,GAAG,CAAC,gCAAgC,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;gBACtB,OAAO;aACR;YAED,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEnE,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;IACH,CAAC;IAED,YAAY;QACV,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;YACtB,OAAO;SACR;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC9B,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAW,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CACxD,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;YACtB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC3B;QAED,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,kCAAkC,CAAC;IAC5C,CAAC;;AA9EM,wCAAe,GAAG,GAAG,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { Multiaddr } from "@multiformats/multiaddr";
2
+ export declare const DefaultWantedNumber = 1;
3
+ export declare enum Fleet {
4
+ Prod = "prod",
5
+ Test = "test"
6
+ }
7
+ /**
8
+ * Return list of pre-defined (hardcoded) bootstrap nodes.
9
+ *
10
+ * Default behavior is to return nodes of the nwaku Status Prod fleet.
11
+ *
12
+ * @param fleet The fleet to be returned. Defaults to production fleet.
13
+ * @param wantedNumber The number of connections desired. Defaults to {@link DefaultWantedNumber}.
14
+ *
15
+ * @returns An array of multiaddresses.
16
+ */
17
+ export declare function getPredefinedBootstrapNodes(fleet?: Fleet, wantedNumber?: number): Multiaddr[];
18
+ export declare const fleets: {
19
+ fleets: {
20
+ "wakuv2.prod": {
21
+ "waku-websocket": {
22
+ "node-01.ac-cn-hongkong-c.wakuv2.prod": string;
23
+ "node-01.do-ams3.wakuv2.prod": string;
24
+ "node-01.gc-us-central1-a.wakuv2.prod": string;
25
+ };
26
+ };
27
+ "wakuv2.test": {
28
+ "waku-websocket": {
29
+ "node-01.ac-cn-hongkong-c.wakuv2.test": string;
30
+ "node-01.do-ams3.wakuv2.test": string;
31
+ "node-01.gc-us-central1-a.wakuv2.test": string;
32
+ };
33
+ };
34
+ };
35
+ };
@@ -0,0 +1,56 @@
1
+ import { multiaddr } from "@multiformats/multiaddr";
2
+ import { getPseudoRandomSubset } from "./random_subset.js";
3
+ export const DefaultWantedNumber = 1;
4
+ export var Fleet;
5
+ (function (Fleet) {
6
+ Fleet["Prod"] = "prod";
7
+ Fleet["Test"] = "test";
8
+ })(Fleet || (Fleet = {}));
9
+ /**
10
+ * Return list of pre-defined (hardcoded) bootstrap nodes.
11
+ *
12
+ * Default behavior is to return nodes of the nwaku Status Prod fleet.
13
+ *
14
+ * @param fleet The fleet to be returned. Defaults to production fleet.
15
+ * @param wantedNumber The number of connections desired. Defaults to {@link DefaultWantedNumber}.
16
+ *
17
+ * @returns An array of multiaddresses.
18
+ */
19
+ export function getPredefinedBootstrapNodes(fleet = Fleet.Prod, wantedNumber = DefaultWantedNumber) {
20
+ if (wantedNumber <= 0) {
21
+ return [];
22
+ }
23
+ let nodes;
24
+ switch (fleet) {
25
+ case Fleet.Prod:
26
+ nodes = fleets.fleets["wakuv2.prod"]["waku-websocket"];
27
+ break;
28
+ case Fleet.Test:
29
+ nodes = fleets.fleets["wakuv2.test"]["waku-websocket"];
30
+ break;
31
+ default:
32
+ nodes = fleets.fleets["wakuv2.prod"]["waku-websocket"];
33
+ }
34
+ nodes = Object.values(nodes);
35
+ nodes = nodes.map((node) => multiaddr(node));
36
+ return getPseudoRandomSubset(nodes, wantedNumber);
37
+ }
38
+ export const fleets = {
39
+ fleets: {
40
+ "wakuv2.prod": {
41
+ "waku-websocket": {
42
+ "node-01.ac-cn-hongkong-c.wakuv2.prod": "/dns4/node-01.ac-cn-hongkong-c.wakuv2.prod.statusim.net/tcp/443/wss/p2p/16Uiu2HAm4v86W3bmT1BiH6oSPzcsSr24iDQpSN5Qa992BCjjwgrD",
43
+ "node-01.do-ams3.wakuv2.prod": "/dns4/node-01.do-ams3.wakuv2.prod.statusim.net/tcp/443/wss/p2p/16Uiu2HAmL5okWopX7NqZWBUKVqW8iUxCEmd5GMHLVPwCgzYzQv3e",
44
+ "node-01.gc-us-central1-a.wakuv2.prod": "/dns4/node-01.gc-us-central1-a.wakuv2.prod.statusim.net/tcp/443/wss/p2p/16Uiu2HAmVkKntsECaYfefR1V2yCR79CegLATuTPE6B9TxgxBiiiA",
45
+ },
46
+ },
47
+ "wakuv2.test": {
48
+ "waku-websocket": {
49
+ "node-01.ac-cn-hongkong-c.wakuv2.test": "/dns4/node-01.ac-cn-hongkong-c.wakuv2.test.statusim.net/tcp/443/wss/p2p/16Uiu2HAkvWiyFsgRhuJEb9JfjYxEkoHLgnUQmr1N5mKWnYjxYRVm",
50
+ "node-01.do-ams3.wakuv2.test": "/dns4/node-01.do-ams3.wakuv2.test.statusim.net/tcp/443/wss/p2p/16Uiu2HAmPLe7Mzm8TsYUubgCAW1aJoeFScxrLj8ppHFivPo97bUZ",
51
+ "node-01.gc-us-central1-a.wakuv2.test": "/dns4/node-01.gc-us-central1-a.wakuv2.test.statusim.net/tcp/443/wss/p2p/16Uiu2HAmJb2e28qLXxT5kZxVUUoJt72EMzNGXB47Rxx5hw3q4YjS",
52
+ },
53
+ },
54
+ },
55
+ };
56
+ //# sourceMappingURL=predefined_bootstrap_nodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predefined_bootstrap_nodes.js","sourceRoot":"","sources":["../../src/lib/predefined_bootstrap_nodes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,MAAM,CAAN,IAAY,KAGX;AAHD,WAAY,KAAK;IACf,sBAAa,CAAA;IACb,sBAAa,CAAA;AACf,CAAC,EAHW,KAAK,KAAL,KAAK,QAGhB;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,2BAA2B,CACzC,QAAe,KAAK,CAAC,IAAI,EACzB,eAAuB,mBAAmB;IAE1C,IAAI,YAAY,IAAI,CAAC,EAAE;QACrB,OAAO,EAAE,CAAC;KACX;IAED,IAAI,KAAK,CAAC;IACV,QAAQ,KAAK,EAAE;QACb,KAAK,KAAK,CAAC,IAAI;YACb,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,CAAC;YACvD,MAAM;QACR,KAAK,KAAK,CAAC,IAAI;YACb,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,CAAC;YACvD,MAAM;QACR;YACE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,CAAC;KAC1D;IAED,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAa,CAAC;IAEzC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,OAAO,qBAAqB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE;QACN,aAAa,EAAE;YACb,gBAAgB,EAAE;gBAChB,sCAAsC,EACpC,+HAA+H;gBACjI,6BAA6B,EAC3B,sHAAsH;gBACxH,sCAAsC,EACpC,+HAA+H;aAClI;SACF;QACD,aAAa,EAAE;YACb,gBAAgB,EAAE;gBAChB,sCAAsC,EACpC,+HAA+H;gBACjI,6BAA6B,EAC3B,sHAAsH;gBACxH,sCAAsC,EACpC,+HAA+H;aAClI;SACF;KACF;CACF,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function pushOrInitMapSet<K, V>(map: Map<K, Set<V>>, key: K, newValue: V): void;
@@ -0,0 +1,9 @@
1
+ export function pushOrInitMapSet(map, key, newValue) {
2
+ let arr = map.get(key);
3
+ if (typeof arr === "undefined") {
4
+ map.set(key, new Set());
5
+ arr = map.get(key);
6
+ }
7
+ arr.add(newValue);
8
+ }
9
+ //# sourceMappingURL=push_or_init_map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push_or_init_map.js","sourceRoot":"","sources":["../../src/lib/push_or_init_map.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAC9B,GAAmB,EACnB,GAAM,EACN,QAAW;IAEX,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;QAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACxB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAW,CAAC;KAC9B;IAED,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Return pseudo random subset of the input.
3
+ */
4
+ export declare function getPseudoRandomSubset<T>(values: T[], wantedNumber: number): T[];
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Return pseudo random subset of the input.
3
+ */
4
+ export function getPseudoRandomSubset(values, wantedNumber) {
5
+ if (values.length <= wantedNumber || values.length <= 1) {
6
+ return values;
7
+ }
8
+ return shuffle(values).slice(0, wantedNumber);
9
+ }
10
+ function shuffle(arr) {
11
+ if (arr.length <= 1) {
12
+ return arr;
13
+ }
14
+ const randInt = () => {
15
+ return Math.floor(Math.random() * Math.floor(arr.length));
16
+ };
17
+ for (let i = 0; i < arr.length; i++) {
18
+ const j = randInt();
19
+ const tmp = arr[i];
20
+ arr[i] = arr[j];
21
+ arr[j] = tmp;
22
+ }
23
+ return arr;
24
+ }
25
+ //# sourceMappingURL=random_subset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random_subset.js","sourceRoot":"","sources":["../../src/lib/random_subset.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAW,EACX,YAAoB;IAEpB,IAAI,MAAM,CAAC,MAAM,IAAI,YAAY,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;QACvD,OAAO,MAAM,CAAC;KACf;IAED,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,OAAO,CAAI,GAAQ;IAC1B,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE;QACnB,OAAO,GAAG,CAAC;KACZ;IACD,MAAM,OAAO,GAAG,GAAW,EAAE;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACnC,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAChB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;KACd;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Connection } from "@libp2p/interface-connection";
2
+ export declare function selectConnection(connections: Connection[]): Connection | undefined;
@@ -0,0 +1,19 @@
1
+ export function selectConnection(connections) {
2
+ if (!connections.length)
3
+ return;
4
+ if (connections.length === 1)
5
+ return connections[0];
6
+ let latestConnection;
7
+ connections.forEach((connection) => {
8
+ if (connection.stat.status === "OPEN") {
9
+ if (!latestConnection) {
10
+ latestConnection = connection;
11
+ }
12
+ else if (connection.stat.timeline.open > latestConnection.stat.timeline.open) {
13
+ latestConnection = connection;
14
+ }
15
+ }
16
+ });
17
+ return latestConnection;
18
+ }
19
+ //# sourceMappingURL=select_connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select_connection.js","sourceRoot":"","sources":["../../src/lib/select_connection.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAC9B,WAAyB;IAEzB,IAAI,CAAC,WAAW,CAAC,MAAM;QAAE,OAAO;IAChC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;IAEpD,IAAI,gBAAwC,CAAC;IAE7C,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QACjC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;YACrC,IAAI,CAAC,gBAAgB,EAAE;gBACrB,gBAAgB,GAAG,UAAU,CAAC;aAC/B;iBAAM,IACL,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EACnE;gBACA,gBAAgB,GAAG,UAAU,CAAC;aAC/B;SACF;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { PeerId } from "@libp2p/interface-peer-id";
2
+ import type { Peer, PeerStore } from "@libp2p/interface-peer-store";
3
+ /**
4
+ * Returns a pseudo-random peer that supports the given protocol.
5
+ * Useful for protocols such as store and light push
6
+ */
7
+ export declare function selectRandomPeer(peers: Peer[]): Peer | undefined;
8
+ /**
9
+ * Returns the list of peers that supports the given protocol.
10
+ */
11
+ export declare function getPeersForProtocol(peerStore: PeerStore, protocols: string[]): Promise<Peer[]>;
12
+ export declare function selectPeerForProtocol(peerStore: PeerStore, protocols: string[], peerId?: PeerId): Promise<{
13
+ peer: Peer;
14
+ protocol: string;
15
+ } | undefined>;
@@ -0,0 +1,59 @@
1
+ import debug from "debug";
2
+ const log = debug("waku:select-peer");
3
+ /**
4
+ * Returns a pseudo-random peer that supports the given protocol.
5
+ * Useful for protocols such as store and light push
6
+ */
7
+ export function selectRandomPeer(peers) {
8
+ if (peers.length === 0)
9
+ return;
10
+ const index = Math.round(Math.random() * (peers.length - 1));
11
+ return peers[index];
12
+ }
13
+ /**
14
+ * Returns the list of peers that supports the given protocol.
15
+ */
16
+ export async function getPeersForProtocol(peerStore, protocols) {
17
+ const peers = [];
18
+ await peerStore.forEach((peer) => {
19
+ for (let i = 0; i < protocols.length; i++) {
20
+ if (peer.protocols.includes(protocols[i])) {
21
+ peers.push(peer);
22
+ break;
23
+ }
24
+ }
25
+ });
26
+ return peers;
27
+ }
28
+ export async function selectPeerForProtocol(peerStore, protocols, peerId) {
29
+ let peer;
30
+ if (peerId) {
31
+ peer = await peerStore.get(peerId);
32
+ if (!peer) {
33
+ log(`Failed to retrieve connection details for provided peer in peer store: ${peerId.toString()}`);
34
+ return;
35
+ }
36
+ }
37
+ else {
38
+ const peers = await getPeersForProtocol(peerStore, protocols);
39
+ peer = selectRandomPeer(peers);
40
+ if (!peer) {
41
+ log("Failed to find known peer that registers protocols", protocols);
42
+ return;
43
+ }
44
+ }
45
+ let protocol;
46
+ for (const codec of protocols) {
47
+ if (peer.protocols.includes(codec)) {
48
+ protocol = codec;
49
+ // Do not break as we want to keep the last value
50
+ }
51
+ }
52
+ log(`Using codec ${protocol}`);
53
+ if (!protocol) {
54
+ log(`Peer does not register required protocols: ${peer.id.toString()}`, protocols);
55
+ return;
56
+ }
57
+ return { peer, protocol };
58
+ }
59
+ //# sourceMappingURL=select_peer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select_peer.js","sourceRoot":"","sources":["../../src/lib/select_peer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,GAAG,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC;AAEtC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAoB,EACpB,SAAmB;IAEnB,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;gBACzC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,MAAM;aACP;SACF;IACH,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAAoB,EACpB,SAAmB,EACnB,MAAe;IAEf,IAAI,IAAI,CAAC;IACT,IAAI,MAAM,EAAE;QACV,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE;YACT,GAAG,CACD,0EAA0E,MAAM,CAAC,QAAQ,EAAE,EAAE,CAC9F,CAAC;YACF,OAAO;SACR;KACF;SAAM;QACL,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC9D,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,EAAE;YACT,GAAG,CAAC,oDAAoD,EAAE,SAAS,CAAC,CAAC;YACrE,OAAO;SACR;KACF;IAED,IAAI,QAAQ,CAAC;IACb,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;QAC7B,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAClC,QAAQ,GAAG,KAAK,CAAC;YACjB,iDAAiD;SAClD;KACF;IACD,GAAG,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC;IAC/B,IAAI,CAAC,QAAQ,EAAE;QACb,GAAG,CACD,8CAA8C,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,EAClE,SAAS,CACV,CAAC;QACF,OAAO;KACR;IAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ProtoMessage } from "@waku/interfaces";
2
+ import { WakuMessage as WakuMessageProto } from "../proto/message";
3
+ export declare function toProtoMessage(wire: WakuMessageProto): ProtoMessage;
@@ -0,0 +1,11 @@
1
+ const EmptyMessage = {
2
+ payload: undefined,
3
+ contentTopic: undefined,
4
+ version: undefined,
5
+ timestamp: undefined,
6
+ rateLimitProof: undefined,
7
+ };
8
+ export function toProtoMessage(wire) {
9
+ return { ...EmptyMessage, ...wire };
10
+ }
11
+ //# sourceMappingURL=to_proto_message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to_proto_message.js","sourceRoot":"","sources":["../../src/lib/to_proto_message.ts"],"names":[],"mappings":"AAIA,MAAM,YAAY,GAAiB;IACjC,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,SAAS;IACvB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,cAAc,EAAE,SAAS;CAC1B,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,IAAsB;IACnD,OAAO,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,EAAE,CAAC;AACtC,CAAC"}