@waku/core 0.0.31-ce62600.0 → 0.0.31

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 (76) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/bundle/{base_protocol-C6HnrRx8.js → base_protocol-C47QkJ2o.js} +22 -25
  3. package/bundle/{index-DnW8ifxc.js → index-tdQNdKHx.js} +62 -57
  4. package/bundle/index.js +381 -315
  5. package/bundle/lib/base_protocol.js +2 -2
  6. package/bundle/lib/message/version_0.js +2 -2
  7. package/bundle/{version_0-DQ9xsSLk.js → version_0-BrbNEwD-.js} +154 -308
  8. package/dist/.tsbuildinfo +1 -1
  9. package/dist/index.d.ts +2 -2
  10. package/dist/index.js +2 -2
  11. package/dist/index.js.map +1 -1
  12. package/dist/lib/base_protocol.d.ts +3 -4
  13. package/dist/lib/base_protocol.js +4 -8
  14. package/dist/lib/base_protocol.js.map +1 -1
  15. package/dist/lib/connection_manager.d.ts +9 -6
  16. package/dist/lib/connection_manager.js +70 -45
  17. package/dist/lib/connection_manager.js.map +1 -1
  18. package/dist/lib/filter/filter_rpc.js.map +1 -1
  19. package/dist/lib/filter/index.d.ts +4 -3
  20. package/dist/lib/filter/index.js +37 -35
  21. package/dist/lib/filter/index.js.map +1 -1
  22. package/dist/lib/health_manager.d.ts +14 -0
  23. package/dist/lib/health_manager.js +70 -0
  24. package/dist/lib/health_manager.js.map +1 -0
  25. package/dist/lib/keep_alive_manager.d.ts +13 -7
  26. package/dist/lib/keep_alive_manager.js +9 -9
  27. package/dist/lib/keep_alive_manager.js.map +1 -1
  28. package/dist/lib/light_push/index.d.ts +3 -2
  29. package/dist/lib/light_push/index.js +17 -3
  30. package/dist/lib/light_push/index.js.map +1 -1
  31. package/dist/lib/light_push/push_rpc.js.map +1 -1
  32. package/dist/lib/light_push/utils.d.ts +3 -0
  33. package/dist/lib/light_push/utils.js +26 -0
  34. package/dist/lib/light_push/utils.js.map +1 -0
  35. package/dist/lib/message/version_0.js.map +1 -1
  36. package/dist/lib/metadata/index.d.ts +2 -2
  37. package/dist/lib/metadata/index.js +26 -26
  38. package/dist/lib/metadata/index.js.map +1 -1
  39. package/dist/lib/store/index.d.ts +5 -44
  40. package/dist/lib/store/index.js +39 -45
  41. package/dist/lib/store/index.js.map +1 -1
  42. package/dist/lib/store/rpc.d.ts +22 -0
  43. package/dist/lib/store/rpc.js +74 -0
  44. package/dist/lib/store/rpc.js.map +1 -0
  45. package/dist/lib/stream_manager/index.d.ts +1 -0
  46. package/dist/lib/stream_manager/index.js +2 -0
  47. package/dist/lib/stream_manager/index.js.map +1 -0
  48. package/dist/lib/{stream_manager.js → stream_manager/stream_manager.js} +1 -1
  49. package/dist/lib/stream_manager/stream_manager.js.map +1 -0
  50. package/dist/lib/stream_manager/utils.d.ts +2 -0
  51. package/dist/lib/stream_manager/utils.js +19 -0
  52. package/dist/lib/stream_manager/utils.js.map +1 -0
  53. package/package.json +130 -1
  54. package/src/index.ts +3 -3
  55. package/src/lib/base_protocol.ts +7 -10
  56. package/src/lib/connection_manager.ts +100 -57
  57. package/src/lib/filter/filter_rpc.ts +21 -19
  58. package/src/lib/filter/index.ts +54 -56
  59. package/src/lib/health_manager.ts +90 -0
  60. package/src/lib/keep_alive_manager.ts +27 -18
  61. package/src/lib/light_push/index.ts +21 -11
  62. package/src/lib/light_push/push_rpc.ts +5 -5
  63. package/src/lib/light_push/utils.ts +31 -0
  64. package/src/lib/message/version_0.ts +17 -15
  65. package/src/lib/metadata/index.ts +43 -44
  66. package/src/lib/store/index.ts +54 -94
  67. package/src/lib/store/rpc.ts +92 -0
  68. package/src/lib/stream_manager/index.ts +1 -0
  69. package/src/lib/{stream_manager.ts → stream_manager/stream_manager.ts} +3 -2
  70. package/src/lib/stream_manager/utils.ts +22 -0
  71. package/dist/lib/store/history_rpc.d.ts +0 -27
  72. package/dist/lib/store/history_rpc.js +0 -72
  73. package/dist/lib/store/history_rpc.js.map +0 -1
  74. package/dist/lib/stream_manager.js.map +0 -1
  75. package/src/lib/store/history_rpc.ts +0 -93
  76. /package/dist/lib/{stream_manager.d.ts → stream_manager/stream_manager.d.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -5,6 +5,35 @@ All notable changes to this project will be documented in this file.
5
5
  The file is maintained by [Release Please](https://github.com/googleapis/release-please) based on [Conventional Commits](https://www.conventionalcommits.org) specification,
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.0.31](https://github.com/waku-org/js-waku/compare/core-v0.0.30...core-v0.0.31) (2024-08-29)
9
+
10
+
11
+ ### ⚠ BREAKING CHANGES
12
+
13
+ * **lightpush:** return new error messages ([#2115](https://github.com/waku-org/js-waku/issues/2115))
14
+ * deprecate named pubsub topics and use static/auto sharding ([#2097](https://github.com/waku-org/js-waku/issues/2097))
15
+ * store v3 ([#2036](https://github.com/waku-org/js-waku/issues/2036))
16
+
17
+ ### Features
18
+
19
+ * Deprecate named pubsub topics and use static/auto sharding ([#2097](https://github.com/waku-org/js-waku/issues/2097)) ([5ce36c8](https://github.com/waku-org/js-waku/commit/5ce36c8f187f218df8af66e0643ab277e909b227))
20
+ * Fix peer renewal, change Filter keep alive ([#2065](https://github.com/waku-org/js-waku/issues/2065)) ([00635b7](https://github.com/waku-org/js-waku/commit/00635b7afe60c2ed739f2ccd1f07b2a6cc04f797))
21
+ * **lightpush:** Return new error messages ([#2115](https://github.com/waku-org/js-waku/issues/2115)) ([a022433](https://github.com/waku-org/js-waku/commit/a022433851e6e187679b8c40bb465b431854809b))
22
+ * Node and protocols health ([#2080](https://github.com/waku-org/js-waku/issues/2080)) ([d464af3](https://github.com/waku-org/js-waku/commit/d464af3645d769034d6c6293607de5b00e904ae4))
23
+ * Offline state recovery for Filter subscription ([#2049](https://github.com/waku-org/js-waku/issues/2049)) ([eadb85a](https://github.com/waku-org/js-waku/commit/eadb85ab8367c0e0d8fa9f9fd012eebc71200b6c))
24
+ * Store v3 ([#2036](https://github.com/waku-org/js-waku/issues/2036)) ([86f730f](https://github.com/waku-org/js-waku/commit/86f730f9587e3688b79c8e846e5c005bb4d5fae4))
25
+ * Validate messages for individual filter nodes & perform renewals ([#2057](https://github.com/waku-org/js-waku/issues/2057)) ([9b0f1e8](https://github.com/waku-org/js-waku/commit/9b0f1e855aa3a1f7b9aec3a4c726568d37595c28))
26
+
27
+
28
+ ### Dependencies
29
+
30
+ * The following workspace dependencies were updated
31
+ * dependencies
32
+ * @waku/enr bumped from ^0.0.24 to ^0.0.25
33
+ * @waku/interfaces bumped from 0.0.25 to 0.0.26
34
+ * @waku/proto bumped from 0.0.7 to 0.0.8
35
+ * @waku/utils bumped from 0.0.18 to 0.0.19
36
+
8
37
  ## [0.0.30](https://github.com/waku-org/js-waku/compare/core-v0.0.29...core-v0.0.30) (2024-07-10)
9
38
 
10
39
 
@@ -1,4 +1,4 @@
1
- import { h as bytesToUtf8, T as Tags, L as Logger, i as ensureShardingConfigured } from './index-DnW8ifxc.js';
1
+ import { h as bytesToUtf8, T as Tags, L as Logger, e as pubsubTopicsToShardInfo } from './index-tdQNdKHx.js';
2
2
 
3
3
  const decodeRelayShard = (bytes) => {
4
4
  // explicitly converting to Uint8Array to avoid Buffer
@@ -118,24 +118,6 @@ async function getConnectedPeersForProtocolAndShard(connections, peerStore, prot
118
118
  const peersWithNulls = await Promise.all(peerPromises);
119
119
  return peersWithNulls.filter((peer) => peer !== null);
120
120
  }
121
- function selectConnection(connections) {
122
- if (!connections.length)
123
- return;
124
- if (connections.length === 1)
125
- return connections[0];
126
- let latestConnection;
127
- connections.forEach((connection) => {
128
- if (connection.status === "open") {
129
- if (!latestConnection) {
130
- latestConnection = connection;
131
- }
132
- else if (connection.timeline.open > latestConnection.timeline.open) {
133
- latestConnection = connection;
134
- }
135
- }
136
- });
137
- return latestConnection;
138
- }
139
121
 
140
122
  /**
141
123
  * Retrieves a list of peers based on the specified criteria:
@@ -174,6 +156,25 @@ function filterPeersByDiscovery(peers, numPeers, maxBootstrapPeers) {
174
156
  return selectedPeers;
175
157
  }
176
158
 
159
+ function selectConnection(connections) {
160
+ if (!connections.length)
161
+ return;
162
+ if (connections.length === 1)
163
+ return connections[0];
164
+ let latestConnection;
165
+ connections.forEach((connection) => {
166
+ if (connection.status === "open") {
167
+ if (!latestConnection) {
168
+ latestConnection = connection;
169
+ }
170
+ else if (connection.timeline.open > latestConnection.timeline.open) {
171
+ latestConnection = connection;
172
+ }
173
+ }
174
+ });
175
+ return latestConnection;
176
+ }
177
+
177
178
  const CONNECTION_TIMEOUT = 5_000;
178
179
  const RETRY_BACKOFF_BASE = 1_000;
179
180
  const MAX_RETRIES = 3;
@@ -271,16 +272,14 @@ class BaseProtocol {
271
272
  components;
272
273
  log;
273
274
  pubsubTopics;
274
- options;
275
275
  addLibp2pEventListener;
276
276
  removeLibp2pEventListener;
277
277
  streamManager;
278
- constructor(multicodec, components, log, pubsubTopics, options) {
278
+ constructor(multicodec, components, log, pubsubTopics) {
279
279
  this.multicodec = multicodec;
280
280
  this.components = components;
281
281
  this.log = log;
282
282
  this.pubsubTopics = pubsubTopics;
283
- this.options = options;
284
283
  this.addLibp2pEventListener = components.events.addEventListener.bind(components.events);
285
284
  this.removeLibp2pEventListener = components.events.removeEventListener.bind(components.events);
286
285
  this.streamManager = new StreamManager(multicodec, components.connectionManager.getConnections.bind(components.connectionManager), this.addLibp2pEventListener);
@@ -318,9 +317,7 @@ class BaseProtocol {
318
317
  numPeers: 0
319
318
  }) {
320
319
  // Retrieve all connected peers that support the protocol & shard (if configured)
321
- const connectedPeersForProtocolAndShard = await getConnectedPeersForProtocolAndShard(this.components.connectionManager.getConnections(), this.peerStore, [this.multicodec], this.options?.shardInfo
322
- ? ensureShardingConfigured(this.options.shardInfo).shardInfo
323
- : undefined);
320
+ const connectedPeersForProtocolAndShard = await getConnectedPeersForProtocolAndShard(this.components.connectionManager.getConnections(), this.peerStore, [this.multicodec], pubsubTopicsToShardInfo(this.pubsubTopics));
324
321
  // Filter the peers based on discovery & number of peers requested
325
322
  const filteredPeers = filterPeersByDiscovery(connectedPeersForProtocolAndShard, numPeers, maxBootstrapPeers);
326
323
  // Sort the peers by latency
@@ -1037,6 +1037,11 @@ var ProtocolError;
1037
1037
  * Ensure that the pubsub topic used for decoder creation is the same as the one used for protocol.
1038
1038
  */
1039
1039
  ProtocolError["TOPIC_DECODER_MISMATCH"] = "Topic decoder mismatch";
1040
+ /**
1041
+ * The topics passed in the decoders do not match each other, or don't exist at all.
1042
+ * Ensure that all the pubsub topics used in the decoders are valid and match each other.
1043
+ */
1044
+ ProtocolError["INVALID_DECODER_TOPICS"] = "Invalid decoder topics";
1040
1045
  /**
1041
1046
  * Failure to find a peer with suitable protocols. This may due to a connection issue.
1042
1047
  * Mitigation can be: retrying after a given time period, display connectivity issue
@@ -1053,7 +1058,7 @@ var ProtocolError;
1053
1058
  * The remote peer did not behave as expected. Mitigation for `NO_PEER_AVAILABLE`
1054
1059
  * or `DECODE_FAILED` can be used.
1055
1060
  */
1056
- ProtocolError["REMOTE_PEER_FAULT"] = "Remote peer fault";
1061
+ ProtocolError["NO_RESPONSE"] = "No response received";
1057
1062
  /**
1058
1063
  * The remote peer rejected the message. Information provided by the remote peer
1059
1064
  * is logged. Review message validity, or mitigation for `NO_PEER_AVAILABLE`
@@ -1065,14 +1070,28 @@ var ProtocolError;
1065
1070
  * Mitigation can be: retrying after a given time period
1066
1071
  */
1067
1072
  ProtocolError["REQUEST_TIMEOUT"] = "Request timeout";
1073
+ /**
1074
+ * Missing credentials info message.
1075
+ * nwaku: https://github.com/waku-org/nwaku/blob/c3cb06ac6c03f0f382d3941ea53b330f6a8dd127/waku/waku_rln_relay/group_manager/group_manager_base.nim#L186
1076
+ */
1077
+ ProtocolError["RLN_IDENTITY_MISSING"] = "Identity credentials are not set";
1078
+ /**
1079
+ * Membership index missing info message.
1080
+ * nwaku: https://github.com/waku-org/nwaku/blob/c3cb06ac6c03f0f382d3941ea53b330f6a8dd127/waku/waku_rln_relay/group_manager/group_manager_base.nim#L188
1081
+ */
1082
+ ProtocolError["RLN_MEMBERSHIP_INDEX"] = "Membership index is not set";
1083
+ /**
1084
+ * Message limit is missing.
1085
+ * nwaku: https://github.com/waku-org/nwaku/blob/c3cb06ac6c03f0f382d3941ea53b330f6a8dd127/waku/waku_rln_relay/group_manager/group_manager_base.nim#L190
1086
+ */
1087
+ ProtocolError["RLN_LIMIT_MISSING"] = "User message limit is not set";
1088
+ /**
1089
+ * General proof generation error message.
1090
+ * nwaku: https://github.com/waku-org/nwaku/blob/c3cb06ac6c03f0f382d3941ea53b330f6a8dd127/waku/waku_rln_relay/group_manager/group_manager_base.nim#L201C19-L201C42
1091
+ */
1092
+ ProtocolError["RLN_PROOF_GENERATION"] = "Proof generation failed";
1068
1093
  })(ProtocolError || (ProtocolError = {}));
1069
1094
 
1070
- var PageDirection;
1071
- (function (PageDirection) {
1072
- PageDirection["BACKWARD"] = "backward";
1073
- PageDirection["FORWARD"] = "forward";
1074
- })(PageDirection || (PageDirection = {}));
1075
-
1076
1095
  var Tags;
1077
1096
  (function (Tags) {
1078
1097
  Tags["BOOTSTRAP"] = "bootstrap";
@@ -1091,14 +1110,18 @@ var EConnectionStateEvents;
1091
1110
  EConnectionStateEvents["CONNECTION_STATUS"] = "waku:connection";
1092
1111
  })(EConnectionStateEvents || (EConnectionStateEvents = {}));
1093
1112
 
1094
- /**
1095
- * DefaultPubsubTopic is the default gossipsub topic to use for Waku.
1096
- */
1097
1113
  /**
1098
1114
  * The default cluster ID for The Waku Network
1099
1115
  */
1100
1116
  const DEFAULT_CLUSTER_ID = 1;
1101
1117
 
1118
+ var HealthStatus;
1119
+ (function (HealthStatus) {
1120
+ HealthStatus["Unhealthy"] = "Unhealthy";
1121
+ HealthStatus["MinimallyHealthy"] = "MinimallyHealthy";
1122
+ HealthStatus["SufficientlyHealthy"] = "SufficientlyHealthy";
1123
+ })(HealthStatus || (HealthStatus = {}));
1124
+
1102
1125
  /**
1103
1126
  * Turns a `Uint8Array` into a string.
1104
1127
  *
@@ -1127,7 +1150,7 @@ const utf8ToBytes = (s) => fromString(s, "utf8");
1127
1150
  * Concatenate using Uint8Arrays as `Buffer` has a different behavior with `DataView`
1128
1151
  */
1129
1152
  function concat(byteArrays, totalLength) {
1130
- const len = totalLength ?? byteArrays.reduce((acc, curr) => acc + curr.length, 0);
1153
+ const len = byteArrays.reduce((acc, curr) => acc + curr.length, 0);
1131
1154
  const res = new Uint8Array(len);
1132
1155
  let offset = 0;
1133
1156
  for (const bytes of byteArrays) {
@@ -1179,6 +1202,27 @@ const pubsubTopicToSingleShardInfo = (pubsubTopics) => {
1179
1202
  shard
1180
1203
  };
1181
1204
  };
1205
+ const pubsubTopicsToShardInfo = (pubsubTopics) => {
1206
+ const shardInfoSet = new Set();
1207
+ const clusterIds = new Set();
1208
+ for (const topic of pubsubTopics) {
1209
+ const { clusterId, shard } = pubsubTopicToSingleShardInfo(topic);
1210
+ shardInfoSet.add(`${clusterId}:${shard}`);
1211
+ clusterIds.add(clusterId);
1212
+ }
1213
+ if (shardInfoSet.size === 0) {
1214
+ throw new Error("No valid pubsub topics provided");
1215
+ }
1216
+ if (clusterIds.size > 1) {
1217
+ throw new Error("Pubsub topics from multiple cluster IDs are not supported");
1218
+ }
1219
+ const clusterId = clusterIds.values().next().value;
1220
+ const shards = Array.from(shardInfoSet).map((info) => parseInt(info.split(":")[1]));
1221
+ return {
1222
+ clusterId,
1223
+ shards
1224
+ };
1225
+ };
1182
1226
  /**
1183
1227
  * Given a string, will throw an error if it is not formatted as a valid content topic for autosharding based on https://rfc.vac.dev/spec/51/
1184
1228
  * @param contentTopic String to validate
@@ -1246,7 +1290,9 @@ function contentTopicToPubsubTopic(contentTopic, clusterId = DEFAULT_CLUSTER_ID,
1246
1290
  /**
1247
1291
  * Used when creating encoders/decoders to determine which pubsub topic to use
1248
1292
  */
1249
- function determinePubsubTopic(contentTopic, pubsubTopicShardInfo) {
1293
+ function determinePubsubTopic(contentTopic,
1294
+ // TODO: make it accept ShardInfo https://github.com/waku-org/js-waku/issues/2086
1295
+ pubsubTopicShardInfo) {
1250
1296
  if (typeof pubsubTopicShardInfo == "string") {
1251
1297
  return pubsubTopicShardInfo;
1252
1298
  }
@@ -1254,49 +1300,6 @@ function determinePubsubTopic(contentTopic, pubsubTopicShardInfo) {
1254
1300
  ? singleShardInfoToPubsubTopic(pubsubTopicShardInfo)
1255
1301
  : contentTopicToPubsubTopic(contentTopic, pubsubTopicShardInfo?.clusterId ?? DEFAULT_CLUSTER_ID);
1256
1302
  }
1257
- /**
1258
- * Validates sharding configuration and sets defaults where possible.
1259
- * @returns Validated sharding parameters, with any missing values set to defaults
1260
- */
1261
- const ensureShardingConfigured = (shardInfo) => {
1262
- const clusterId = shardInfo.clusterId ?? DEFAULT_CLUSTER_ID;
1263
- const shards = "shards" in shardInfo ? shardInfo.shards : [];
1264
- const contentTopics = "contentTopics" in shardInfo ? shardInfo.contentTopics : [];
1265
- const [application, version] = "application" in shardInfo && "version" in shardInfo
1266
- ? [shardInfo.application, shardInfo.version]
1267
- : [undefined, undefined];
1268
- const isShardsConfigured = shards && shards.length > 0;
1269
- const isContentTopicsConfigured = contentTopics && contentTopics.length > 0;
1270
- const isApplicationVersionConfigured = application && version;
1271
- if (isShardsConfigured) {
1272
- return {
1273
- shardingParams: { clusterId, shards },
1274
- shardInfo: { clusterId, shards },
1275
- pubsubTopics: shardInfoToPubsubTopics({ clusterId, shards })
1276
- };
1277
- }
1278
- if (isContentTopicsConfigured) {
1279
- const pubsubTopics = Array.from(new Set(contentTopics.map((topic) => contentTopicToPubsubTopic(topic, clusterId))));
1280
- const shards = Array.from(new Set(contentTopics.map((topic) => contentTopicToShardIndex(topic))));
1281
- return {
1282
- shardingParams: { clusterId, contentTopics },
1283
- shardInfo: { clusterId, shards },
1284
- pubsubTopics
1285
- };
1286
- }
1287
- if (isApplicationVersionConfigured) {
1288
- const pubsubTopic = contentTopicToPubsubTopic(`/${application}/${version}/default/default`, clusterId);
1289
- return {
1290
- shardingParams: { clusterId, application, version },
1291
- shardInfo: {
1292
- clusterId,
1293
- shards: [pubsubTopicToSingleShardInfo(pubsubTopic).shard]
1294
- },
1295
- pubsubTopics: [pubsubTopic]
1296
- };
1297
- }
1298
- throw new Error("Missing minimum required configuration options for static sharding or autosharding.");
1299
- };
1300
1303
 
1301
1304
  function getDefaultExportFromCjs (x) {
1302
1305
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
@@ -1877,6 +1880,8 @@ var common = setup;
1877
1880
  return false;
1878
1881
  }
1879
1882
 
1883
+ let m;
1884
+
1880
1885
  // Is webkit? http://stackoverflow.com/a/16459606/376773
1881
1886
  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
1882
1887
  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
@@ -1884,7 +1889,7 @@ var common = setup;
1884
1889
  (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
1885
1890
  // Is firefox >= v31?
1886
1891
  // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
1887
- (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
1892
+ (typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31) ||
1888
1893
  // Double check webkit in userAgent just in case we are in a worker
1889
1894
  (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
1890
1895
  }
@@ -2052,4 +2057,4 @@ class Logger {
2052
2057
  }
2053
2058
  }
2054
2059
 
2055
- export { EConnectionStateEvents as E, Logger as L, ProtocolError as P, Tags as T, allocUnsafe as a, alloc as b, Protocols as c, EPeersByDiscoveryEvents as d, determinePubsubTopic as e, fromString as f, getDefaultExportFromCjs as g, bytesToUtf8 as h, ensureShardingConfigured as i, pubsubTopicToSingleShardInfo as p, shardInfoToPubsubTopics as s, utf8ToBytes as u };
2060
+ export { EPeersByDiscoveryEvents as E, HealthStatus as H, Logger as L, ProtocolError as P, Tags as T, allocUnsafe as a, alloc as b, Protocols as c, EConnectionStateEvents as d, pubsubTopicsToShardInfo as e, fromString as f, determinePubsubTopic as g, bytesToUtf8 as h, pubsubTopicToSingleShardInfo as p, shardInfoToPubsubTopics as s, utf8ToBytes as u };