@waku/sds 0.0.4-f7c290d.0 → 0.0.4

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.
@@ -1,31 +1,42 @@
1
1
  import { TypedEventEmitter } from "@libp2p/interface";
2
2
  import { sha256 } from "@noble/hashes/sha256";
3
3
  import { bytesToHex } from "@noble/hashes/utils";
4
- import { DefaultBloomFilter } from "./bloom.js";
5
- export var MessageChannelEvent;
6
- (function (MessageChannelEvent) {
7
- MessageChannelEvent["MessageDelivered"] = "messageDelivered";
8
- })(MessageChannelEvent || (MessageChannelEvent = {}));
4
+ import { Logger } from "@waku/utils";
5
+ import { DefaultBloomFilter } from "../bloom_filter/bloom.js";
6
+ import { Command } from "./command_queue.js";
7
+ import { MessageChannelEvent } from "./events.js";
9
8
  export const DEFAULT_BLOOM_FILTER_OPTIONS = {
10
9
  capacity: 10000,
11
10
  errorRate: 0.001
12
11
  };
13
12
  const DEFAULT_CAUSAL_HISTORY_SIZE = 2;
14
13
  const DEFAULT_RECEIVED_MESSAGE_TIMEOUT = 1000 * 60 * 5; // 5 minutes
14
+ const log = new Logger("sds:message-channel");
15
15
  export class MessageChannel extends TypedEventEmitter {
16
+ channelId;
16
17
  lamportTimestamp;
17
18
  filter;
18
19
  outgoingBuffer;
19
20
  acknowledgements;
20
21
  incomingBuffer;
21
22
  localHistory;
22
- channelId;
23
23
  causalHistorySize;
24
24
  acknowledgementCount;
25
25
  timeReceived;
26
26
  receivedMessageTimeoutEnabled;
27
27
  receivedMessageTimeout;
28
- deliveredMessageCallback;
28
+ tasks = [];
29
+ handlers = {
30
+ [Command.Send]: async (params) => {
31
+ await this._sendMessage(params.payload, params.callback);
32
+ },
33
+ [Command.Receive]: async (params) => {
34
+ this._receiveMessage(params.message);
35
+ },
36
+ [Command.SendEphemeral]: async (params) => {
37
+ await this._sendEphemeralMessage(params.payload, params.callback);
38
+ }
39
+ };
29
40
  constructor(channelId, options = {}) {
30
41
  super();
31
42
  this.channelId = channelId;
@@ -43,55 +54,72 @@ export class MessageChannel extends TypedEventEmitter {
43
54
  options.receivedMessageTimeoutEnabled ?? false;
44
55
  this.receivedMessageTimeout =
45
56
  options.receivedMessageTimeout ?? DEFAULT_RECEIVED_MESSAGE_TIMEOUT;
46
- this.deliveredMessageCallback = options.deliveredMessageCallback;
47
57
  }
48
58
  static getMessageId(payload) {
49
59
  return bytesToHex(sha256(payload));
50
60
  }
51
61
  /**
52
- * Send a message to the SDS channel.
62
+ * Processes all queued tasks sequentially to ensure proper message ordering.
53
63
  *
54
- * Increments the lamport timestamp, constructs a `Message` object
55
- * with the given payload, and adds it to the outgoing buffer.
64
+ * This method should be called periodically by the library consumer to execute
65
+ * queued send/receive operations in the correct sequence.
56
66
  *
57
- * If the callback is successful, the message is also added to
58
- * the bloom filter and message history. In the context of
59
- * Waku, this likely means the message was published via
60
- * light push or relay.
67
+ * @example
68
+ * ```typescript
69
+ * const channel = new MessageChannel("my-channel");
61
70
  *
62
- * See https://rfc.vac.dev/vac/raw/sds/#send-message
71
+ * // Queue some operations
72
+ * await channel.sendMessage(payload, callback);
73
+ * channel.receiveMessage(incomingMessage);
63
74
  *
64
- * @param payload - The payload to send.
65
- * @param callback - A callback function that returns a boolean indicating whether the message was sent successfully.
75
+ * // Process all queued operations
76
+ * await channel.processTasks();
77
+ * ```
78
+ *
79
+ * @throws Will emit a 'taskError' event if any task fails, but continues processing remaining tasks
66
80
  */
67
- async sendMessage(payload, callback) {
68
- this.lamportTimestamp++;
69
- const messageId = MessageChannel.getMessageId(payload);
70
- const message = {
71
- messageId,
72
- channelId: this.channelId,
73
- lamportTimestamp: this.lamportTimestamp,
74
- causalHistory: this.localHistory
75
- .slice(-this.causalHistorySize)
76
- .map(({ historyEntry }) => historyEntry),
77
- bloomFilter: this.filter.toBytes(),
78
- content: payload
79
- };
80
- this.outgoingBuffer.push(message);
81
- if (callback) {
82
- const { success, retrievalHint } = await callback(message);
83
- if (success) {
84
- this.filter.insert(messageId);
85
- this.localHistory.push({
86
- timestamp: this.lamportTimestamp,
87
- historyEntry: {
88
- messageId,
89
- retrievalHint
90
- }
91
- });
81
+ async processTasks() {
82
+ while (this.tasks.length > 0) {
83
+ const item = this.tasks.shift();
84
+ if (!item) {
85
+ continue;
92
86
  }
87
+ await this.executeTask(item);
93
88
  }
94
89
  }
90
+ /**
91
+ * Queues a message to be sent on this channel.
92
+ *
93
+ * The message will be processed sequentially when processTasks() is called.
94
+ * This ensures proper lamport timestamp ordering and causal history tracking.
95
+ *
96
+ * @param payload - The message content as a byte array
97
+ * @param callback - Optional callback function called after the message is processed
98
+ * @returns Promise that resolves when the message is queued (not sent)
99
+ *
100
+ * @example
101
+ * ```typescript
102
+ * const channel = new MessageChannel("chat-room");
103
+ * const message = new TextEncoder().encode("Hello, world!");
104
+ *
105
+ * await channel.sendMessage(message, async (processedMessage) => {
106
+ * console.log("Message processed:", processedMessage.messageId);
107
+ * return { success: true };
108
+ * });
109
+ *
110
+ * // Actually send the message
111
+ * await channel.processTasks();
112
+ * ```
113
+ */
114
+ async sendMessage(payload, callback) {
115
+ this.tasks.push({
116
+ command: Command.Send,
117
+ params: {
118
+ payload,
119
+ callback
120
+ }
121
+ });
122
+ }
95
123
  /**
96
124
  * Sends a short-lived message without synchronization or reliability requirements.
97
125
  *
@@ -105,64 +133,58 @@ export class MessageChannel extends TypedEventEmitter {
105
133
  * @param payload - The payload to send.
106
134
  * @param callback - A callback function that returns a boolean indicating whether the message was sent successfully.
107
135
  */
108
- sendEphemeralMessage(payload, callback) {
109
- const message = {
110
- messageId: MessageChannel.getMessageId(payload),
111
- channelId: this.channelId,
112
- content: payload,
113
- lamportTimestamp: undefined,
114
- causalHistory: [],
115
- bloomFilter: undefined
116
- };
117
- if (callback) {
118
- callback(message);
119
- }
136
+ async sendEphemeralMessage(payload, callback) {
137
+ this.tasks.push({
138
+ command: Command.SendEphemeral,
139
+ params: {
140
+ payload,
141
+ callback
142
+ }
143
+ });
120
144
  }
121
145
  /**
122
- * Process a received SDS message for this channel.
146
+ * Queues a received message for processing.
147
+ *
148
+ * The message will be processed when processTasks() is called, ensuring
149
+ * proper dependency resolution and causal ordering.
123
150
  *
124
- * Review the acknowledgement status of messages in the outgoing buffer
125
- * by inspecting the received message's bloom filter and causal history.
126
- * Add the received message to the bloom filter.
127
- * If the local history contains every message in the received message's
128
- * causal history, deliver the message. Otherwise, add the message to the
129
- * incoming buffer.
151
+ * @param message - The message to receive and process
130
152
  *
131
- * See https://rfc.vac.dev/vac/raw/sds/#receive-message
153
+ * @example
154
+ * ```typescript
155
+ * const channel = new MessageChannel("chat-room");
132
156
  *
133
- * @param message - The received SDS message.
157
+ * // Receive a message from the network
158
+ * channel.receiveMessage(incomingMessage);
159
+ *
160
+ * // Process the received message
161
+ * await channel.processTasks();
162
+ * ```
134
163
  */
135
164
  receiveMessage(message) {
136
- if (!message.lamportTimestamp) {
137
- // Messages with no timestamp are ephemeral messages and should be delivered immediately
138
- this.deliverMessage(message);
139
- return;
140
- }
141
- // review ack status
142
- this.reviewAckStatus(message);
143
- // add to bloom filter (skip for messages with empty content)
144
- if (message.content?.length && message.content.length > 0) {
145
- this.filter.insert(message.messageId);
146
- }
147
- // verify causal history
148
- const dependenciesMet = message.causalHistory.every((historyEntry) => this.localHistory.some(({ historyEntry: { messageId } }) => messageId === historyEntry.messageId));
149
- if (!dependenciesMet) {
150
- this.incomingBuffer.push(message);
151
- this.timeReceived.set(message.messageId, Date.now());
152
- }
153
- else {
154
- this.deliverMessage(message);
155
- }
165
+ this.tasks.push({
166
+ command: Command.Receive,
167
+ params: {
168
+ message
169
+ }
170
+ });
156
171
  }
157
- // https://rfc.vac.dev/vac/raw/sds/#periodic-incoming-buffer-sweep
172
+ /**
173
+ * Processes messages in the incoming buffer, delivering those with satisfied dependencies.
174
+ *
175
+ * @returns Array of history entries for messages still missing dependencies
176
+ */
158
177
  sweepIncomingBuffer() {
159
178
  const { buffer, missing } = this.incomingBuffer.reduce(({ buffer, missing }, message) => {
160
- // Check each message for missing dependencies
161
179
  const missingDependencies = message.causalHistory.filter((messageHistoryEntry) => !this.localHistory.some(({ historyEntry: { messageId } }) => messageId === messageHistoryEntry.messageId));
162
180
  if (missingDependencies.length === 0) {
163
- // Any message with no missing dependencies is delivered
164
- // and removed from the buffer (implicitly by not adding it to the new incoming buffer)
165
181
  this.deliverMessage(message);
182
+ this.safeSendEvent(MessageChannelEvent.MessageDelivered, {
183
+ detail: {
184
+ messageId: message.messageId,
185
+ sentOrReceived: "received"
186
+ }
187
+ });
166
188
  return { buffer, missing };
167
189
  }
168
190
  // Optionally, if a message has not been received after a predetermined amount of time,
@@ -174,20 +196,22 @@ export class MessageChannel extends TypedEventEmitter {
174
196
  return { buffer, missing };
175
197
  }
176
198
  }
177
- // Any message with missing dependencies stays in the buffer
178
- // and the missing message IDs are returned for processing.
199
+ missingDependencies.forEach((dependency) => {
200
+ missing.add(dependency);
201
+ });
179
202
  return {
180
203
  buffer: buffer.concat(message),
181
- missing: missing.concat(missingDependencies)
204
+ missing
182
205
  };
183
- }, { buffer: new Array(), missing: new Array() });
184
- // Update the incoming buffer to only include messages with no missing dependencies
206
+ }, { buffer: new Array(), missing: new Set() });
185
207
  this.incomingBuffer = buffer;
186
- return missing;
208
+ this.safeSendEvent(MessageChannelEvent.MissedMessages, {
209
+ detail: Array.from(missing)
210
+ });
211
+ return Array.from(missing);
187
212
  }
188
213
  // https://rfc.vac.dev/vac/raw/sds/#periodic-outgoing-buffer-sweep
189
214
  sweepOutgoingBuffer() {
190
- // Partition all messages in the outgoing buffer into unacknowledged and possibly acknowledged messages
191
215
  return this.outgoingBuffer.reduce(({ unacknowledged, possiblyAcknowledged }, message) => {
192
216
  if (this.acknowledgements.has(message.messageId)) {
193
217
  return {
@@ -214,7 +238,7 @@ export class MessageChannel extends TypedEventEmitter {
214
238
  *
215
239
  * @param callback - A callback function that returns a boolean indicating whether the message was sent successfully.
216
240
  */
217
- sendSyncMessage(callback) {
241
+ async sendSyncMessage(callback) {
218
242
  this.lamportTimestamp++;
219
243
  const emptyMessage = new Uint8Array();
220
244
  const message = {
@@ -228,13 +252,139 @@ export class MessageChannel extends TypedEventEmitter {
228
252
  content: emptyMessage
229
253
  };
230
254
  if (callback) {
231
- return callback(message);
255
+ try {
256
+ await callback(message);
257
+ this.safeSendEvent(MessageChannelEvent.SyncSent, {
258
+ detail: message
259
+ });
260
+ return true;
261
+ }
262
+ catch (error) {
263
+ log.error("Callback execution failed in sendSyncMessage:", error);
264
+ throw error;
265
+ }
266
+ }
267
+ return false;
268
+ }
269
+ _receiveMessage(message) {
270
+ const isDuplicate = message.content &&
271
+ message.content.length > 0 &&
272
+ this.timeReceived.has(message.messageId);
273
+ if (isDuplicate) {
274
+ return;
275
+ }
276
+ if (!message.lamportTimestamp) {
277
+ this.deliverMessage(message);
278
+ return;
279
+ }
280
+ if (message.content?.length === 0) {
281
+ this.safeSendEvent(MessageChannelEvent.SyncReceived, {
282
+ detail: message
283
+ });
284
+ }
285
+ else {
286
+ this.safeSendEvent(MessageChannelEvent.MessageReceived, {
287
+ detail: message
288
+ });
289
+ }
290
+ this.reviewAckStatus(message);
291
+ if (message.content?.length && message.content.length > 0) {
292
+ this.filter.insert(message.messageId);
293
+ }
294
+ const dependenciesMet = message.causalHistory.every((historyEntry) => this.localHistory.some(({ historyEntry: { messageId } }) => messageId === historyEntry.messageId));
295
+ if (!dependenciesMet) {
296
+ this.incomingBuffer.push(message);
297
+ this.timeReceived.set(message.messageId, Date.now());
298
+ }
299
+ else {
300
+ this.deliverMessage(message);
301
+ this.safeSendEvent(MessageChannelEvent.MessageDelivered, {
302
+ detail: {
303
+ messageId: message.messageId,
304
+ sentOrReceived: "received"
305
+ }
306
+ });
307
+ }
308
+ }
309
+ async executeTask(item) {
310
+ try {
311
+ const handler = this.handlers[item.command];
312
+ await handler(item.params);
313
+ }
314
+ catch (error) {
315
+ log.error(`Task execution failed for command ${item.command}:`, error);
316
+ this.dispatchEvent(new CustomEvent("taskError", {
317
+ detail: { command: item.command, error, params: item.params }
318
+ }));
319
+ }
320
+ }
321
+ safeSendEvent(event, eventInit) {
322
+ try {
323
+ this.dispatchEvent(new CustomEvent(event, eventInit));
324
+ }
325
+ catch (error) {
326
+ log.error(`Failed to dispatch event ${event}:`, error);
327
+ }
328
+ }
329
+ async _sendMessage(payload, callback) {
330
+ this.lamportTimestamp++;
331
+ const messageId = MessageChannel.getMessageId(payload);
332
+ const message = {
333
+ messageId,
334
+ channelId: this.channelId,
335
+ lamportTimestamp: this.lamportTimestamp,
336
+ causalHistory: this.localHistory
337
+ .slice(-this.causalHistorySize)
338
+ .map(({ historyEntry }) => historyEntry),
339
+ bloomFilter: this.filter.toBytes(),
340
+ content: payload
341
+ };
342
+ this.outgoingBuffer.push(message);
343
+ if (callback) {
344
+ try {
345
+ const { success, retrievalHint } = await callback(message);
346
+ if (success) {
347
+ this.filter.insert(messageId);
348
+ this.localHistory.push({
349
+ timestamp: this.lamportTimestamp,
350
+ historyEntry: {
351
+ messageId,
352
+ retrievalHint
353
+ }
354
+ });
355
+ this.timeReceived.set(messageId, Date.now());
356
+ this.safeSendEvent(MessageChannelEvent.MessageSent, {
357
+ detail: message
358
+ });
359
+ }
360
+ }
361
+ catch (error) {
362
+ log.error("Callback execution failed in _sendMessage:", error);
363
+ throw error;
364
+ }
365
+ }
366
+ }
367
+ async _sendEphemeralMessage(payload, callback) {
368
+ const message = {
369
+ messageId: MessageChannel.getMessageId(payload),
370
+ channelId: this.channelId,
371
+ content: payload,
372
+ lamportTimestamp: undefined,
373
+ causalHistory: [],
374
+ bloomFilter: undefined
375
+ };
376
+ if (callback) {
377
+ try {
378
+ await callback(message);
379
+ }
380
+ catch (error) {
381
+ log.error("Callback execution failed in _sendEphemeralMessage:", error);
382
+ throw error;
383
+ }
232
384
  }
233
- return Promise.resolve(false);
234
385
  }
235
386
  // See https://rfc.vac.dev/vac/raw/sds/#deliver-message
236
387
  deliverMessage(message, retrievalHint) {
237
- this.notifyDeliveredMessage(message.messageId);
238
388
  const messageLamportTimestamp = message.lamportTimestamp ?? 0;
239
389
  if (messageLamportTimestamp > this.lamportTimestamp) {
240
390
  this.lamportTimestamp = messageLamportTimestamp;
@@ -269,15 +419,21 @@ export class MessageChannel extends TypedEventEmitter {
269
419
  // to determine the acknowledgement status of messages in the outgoing buffer.
270
420
  // See https://rfc.vac.dev/vac/raw/sds/#review-ack-status
271
421
  reviewAckStatus(receivedMessage) {
272
- // the participant MUST mark all messages in the received causal_history as acknowledged.
273
422
  receivedMessage.causalHistory.forEach(({ messageId }) => {
274
- this.outgoingBuffer = this.outgoingBuffer.filter(({ messageId: outgoingMessageId }) => outgoingMessageId !== messageId);
423
+ this.outgoingBuffer = this.outgoingBuffer.filter(({ messageId: outgoingMessageId }) => {
424
+ if (outgoingMessageId !== messageId) {
425
+ return true;
426
+ }
427
+ this.safeSendEvent(MessageChannelEvent.MessageAcknowledged, {
428
+ detail: messageId
429
+ });
430
+ return false;
431
+ });
275
432
  this.acknowledgements.delete(messageId);
276
433
  if (!this.filter.lookup(messageId)) {
277
434
  this.filter.insert(messageId);
278
435
  }
279
436
  });
280
- // the participant MUST mark all messages included in the bloom_filter as possibly acknowledged
281
437
  if (!receivedMessage.bloomFilter) {
282
438
  return;
283
439
  }
@@ -292,6 +448,12 @@ export class MessageChannel extends TypedEventEmitter {
292
448
  const count = (this.acknowledgements.get(message.messageId) ?? 0) + 1;
293
449
  if (count < this.acknowledgementCount) {
294
450
  this.acknowledgements.set(message.messageId, count);
451
+ this.safeSendEvent(MessageChannelEvent.PartialAcknowledgement, {
452
+ detail: {
453
+ messageId: message.messageId,
454
+ count
455
+ }
456
+ });
295
457
  return true;
296
458
  }
297
459
  this.acknowledgements.delete(message.messageId);
@@ -302,13 +464,5 @@ export class MessageChannel extends TypedEventEmitter {
302
464
  getAcknowledgementCount() {
303
465
  return 2;
304
466
  }
305
- notifyDeliveredMessage(messageId) {
306
- if (this.deliveredMessageCallback) {
307
- this.deliveredMessageCallback(messageId);
308
- }
309
- this.dispatchEvent(new CustomEvent(MessageChannelEvent.MessageDelivered, {
310
- detail: messageId
311
- }));
312
- }
313
467
  }
314
- //# sourceMappingURL=sds.js.map
468
+ //# sourceMappingURL=message_channel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message_channel.js","sourceRoot":"","sources":["../../src/message_channel/message_channel.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1 +1,91 @@
1
- {"name":"@waku/sds","version":"0.0.4-f7c290d.0","description":"Scalable Data Sync implementation for the browser. Based on https://github.com/vacp2p/rfc-index/blob/main/vac/raw/sds.md","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"typesVersions":{"*":{"*":["*","dist/*","dist/*/index"]}},"type":"module","author":"Waku Team","homepage":"https://github.com/waku-org/js-waku/tree/master/packages/scalable-data-sync#readme","repository":{"type":"git","url":"https://github.com/waku-org/js-waku.git"},"bugs":{"url":"https://github.com/waku-org/js-waku/issues"},"license":"MIT OR Apache-2.0","keywords":["waku","decentralized","secure","communication","web3","ethereum","dapps","privacy"],"scripts":{"build":"run-s build:**","build:esm":"tsc","build:bundle":"rollup --config rollup.config.js","fix":"run-s fix:*","fix:lint":"eslint src *.js --fix","check":"run-s check:*","check:lint":"eslint src *.js","check:spelling":"cspell \"{README.md,src/**/*.ts}\"","check:tsc":"tsc -p tsconfig.dev.json","prepublish":"npm run build","reset-hard":"git clean -dfx -e .idea && git reset --hard && npm i && npm run build","test":"NODE_ENV=test run-s test:*","test:node":"NODE_ENV=test TS_NODE_PROJECT=./tsconfig.dev.json mocha"},"engines":{"node":">=20"},"dependencies":{"@libp2p/interface":"2.7.0","@noble/hashes":"^1.7.1","@waku/proto":"0.0.11-f7c290d.0","@waku/utils":"0.0.24-f7c290d.0","chai":"^5.1.2"},"devDependencies":{"@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.3","@waku/build-utils":"*","allure-commandline":"^2.27.0","allure-mocha":"^2.9.2","cspell":"^8.6.1","fast-check":"^3.19.0","mocha-multi-reporters":"^1.5.1","npm-run-all":"^4.1.5","rollup":"^4.12.0"},"files":["dist","bundle","src/**/*.ts","!**/*.spec.*","!**/*.json","CHANGELOG.md","LICENSE","README.md"]}
1
+ {
2
+ "name": "@waku/sds",
3
+ "version": "0.0.4",
4
+ "description": "Scalable Data Sync implementation for the browser. Based on https://github.com/vacp2p/rfc-index/blob/main/vac/raw/sds.md",
5
+ "types": "./dist/index.d.ts",
6
+ "module": "./dist/index.js",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js"
11
+ }
12
+ },
13
+ "typesVersions": {
14
+ "*": {
15
+ "*": [
16
+ "*",
17
+ "dist/*",
18
+ "dist/*/index"
19
+ ]
20
+ }
21
+ },
22
+ "type": "module",
23
+ "author": "Waku Team",
24
+ "homepage": "https://github.com/waku-org/js-waku/tree/master/packages/scalable-data-sync#readme",
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "https://github.com/waku-org/js-waku.git"
28
+ },
29
+ "bugs": {
30
+ "url": "https://github.com/waku-org/js-waku/issues"
31
+ },
32
+ "license": "MIT OR Apache-2.0",
33
+ "keywords": [
34
+ "waku",
35
+ "decentralized",
36
+ "secure",
37
+ "communication",
38
+ "web3",
39
+ "ethereum",
40
+ "dapps",
41
+ "privacy"
42
+ ],
43
+ "scripts": {
44
+ "build": "run-s build:**",
45
+ "build:esm": "tsc",
46
+ "build:bundle": "rollup --config rollup.config.js",
47
+ "fix": "run-s fix:*",
48
+ "fix:lint": "eslint src *.js --fix",
49
+ "check": "run-s check:*",
50
+ "check:lint": "eslint src *.js",
51
+ "check:spelling": "cspell \"{README.md,src/**/*.ts}\"",
52
+ "check:tsc": "tsc -p tsconfig.dev.json",
53
+ "prepublish": "npm run build",
54
+ "reset-hard": "git clean -dfx -e .idea && git reset --hard && npm i && npm run build",
55
+ "test": "NODE_ENV=test run-s test:*",
56
+ "test:node": "NODE_ENV=test TS_NODE_PROJECT=./tsconfig.dev.json mocha"
57
+ },
58
+ "engines": {
59
+ "node": ">=22"
60
+ },
61
+ "dependencies": {
62
+ "@libp2p/interface": "2.10.4",
63
+ "@noble/hashes": "^1.7.1",
64
+ "@waku/proto": "^0.0.11",
65
+ "@waku/utils": "^0.0.24",
66
+ "chai": "^5.1.2"
67
+ },
68
+ "devDependencies": {
69
+ "@rollup/plugin-commonjs": "^25.0.7",
70
+ "@rollup/plugin-json": "^6.0.0",
71
+ "@rollup/plugin-node-resolve": "^15.2.3",
72
+ "@waku/build-utils": "*",
73
+ "allure-commandline": "^2.27.0",
74
+ "allure-mocha": "^2.9.2",
75
+ "cspell": "^8.6.1",
76
+ "fast-check": "^3.19.0",
77
+ "mocha-multi-reporters": "^1.5.1",
78
+ "npm-run-all": "^4.1.5",
79
+ "rollup": "^4.12.0"
80
+ },
81
+ "files": [
82
+ "dist",
83
+ "bundle",
84
+ "src/**/*.ts",
85
+ "!**/*.spec.*",
86
+ "!**/*.json",
87
+ "CHANGELOG.md",
88
+ "LICENSE",
89
+ "README.md"
90
+ ]
91
+ }
@@ -1,5 +1,5 @@
1
- import { hashN } from "./nim_hashn/nim_hashn.mjs";
2
- import { getMOverNBitsForK } from "./probabilities.js";
1
+ import { hashN } from "../nim_hashn/nim_hashn.mjs";
2
+ import { getMOverNBitsForK } from "../probabilities.js";
3
3
 
4
4
  export interface BloomFilterOptions {
5
5
  // The expected maximum number of elements for which this BloomFilter is sized.
package/src/index.ts CHANGED
@@ -1,3 +1,17 @@
1
- import { BloomFilter } from "./bloom.js";
1
+ import { BloomFilter } from "./bloom_filter/bloom.js";
2
+
3
+ export {
4
+ MessageChannel,
5
+ MessageChannelEvent,
6
+ encodeMessage,
7
+ decodeMessage
8
+ } from "./message_channel/index.js";
9
+
10
+ export type {
11
+ Message,
12
+ HistoryEntry,
13
+ ChannelId,
14
+ MessageChannelEvents
15
+ } from "./message_channel/index.js";
2
16
 
3
17
  export { BloomFilter };