@waku/sds 0.0.4-16328a3.0 → 0.0.4-383e0b2.0

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,20 +1,17 @@
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 { proto_sds_message } from "@waku/proto";
5
4
 
6
- import { DefaultBloomFilter } from "./bloom.js";
5
+ import { DefaultBloomFilter } from "../bloom_filter/bloom.js";
7
6
 
8
- export enum MessageChannelEvent {
9
- MessageDelivered = "messageDelivered"
10
- }
11
- type MessageChannelEvents = {
12
- [MessageChannelEvent.MessageDelivered]: CustomEvent<string>;
13
- };
14
-
15
- export type Message = proto_sds_message.SdsMessage;
16
- export type HistoryEntry = proto_sds_message.HistoryEntry;
17
- export type ChannelId = string;
7
+ import { Command, Handlers, ParamsByAction, Task } from "./command_queue.js";
8
+ import {
9
+ ChannelId,
10
+ HistoryEntry,
11
+ Message,
12
+ MessageChannelEvent,
13
+ MessageChannelEvents
14
+ } from "./events.js";
18
15
 
19
16
  export const DEFAULT_BLOOM_FILTER_OPTIONS = {
20
17
  capacity: 10000,
@@ -28,7 +25,6 @@ interface MessageChannelOptions {
28
25
  causalHistorySize?: number;
29
26
  receivedMessageTimeoutEnabled?: boolean;
30
27
  receivedMessageTimeout?: number;
31
- deliveredMessageCallback?: (messageId: string) => void;
32
28
  }
33
29
 
34
30
  export class MessageChannel extends TypedEventEmitter<MessageChannelEvents> {
@@ -38,13 +34,31 @@ export class MessageChannel extends TypedEventEmitter<MessageChannelEvents> {
38
34
  private acknowledgements: Map<string, number>;
39
35
  private incomingBuffer: Message[];
40
36
  private localHistory: { timestamp: number; historyEntry: HistoryEntry }[];
41
- private channelId: ChannelId;
37
+ public channelId: ChannelId;
42
38
  private causalHistorySize: number;
43
39
  private acknowledgementCount: number;
44
40
  private timeReceived: Map<string, number>;
45
41
  private receivedMessageTimeoutEnabled: boolean;
46
42
  private receivedMessageTimeout: number;
47
- private deliveredMessageCallback?: (messageId: string) => void;
43
+
44
+ private tasks: Task[] = [];
45
+ private handlers: Handlers = {
46
+ [Command.Send]: async (
47
+ params: ParamsByAction[Command.Send]
48
+ ): Promise<void> => {
49
+ await this._sendMessage(params.payload, params.callback);
50
+ },
51
+ [Command.Receive]: async (
52
+ params: ParamsByAction[Command.Receive]
53
+ ): Promise<void> => {
54
+ this._receiveMessage(params.message);
55
+ },
56
+ [Command.SendEphemeral]: async (
57
+ params: ParamsByAction[Command.SendEphemeral]
58
+ ): Promise<void> => {
59
+ await this._sendEphemeralMessage(params.payload, params.callback);
60
+ }
61
+ };
48
62
 
49
63
  public constructor(
50
64
  channelId: ChannelId,
@@ -66,7 +80,25 @@ export class MessageChannel extends TypedEventEmitter<MessageChannelEvents> {
66
80
  options.receivedMessageTimeoutEnabled ?? false;
67
81
  this.receivedMessageTimeout =
68
82
  options.receivedMessageTimeout ?? DEFAULT_RECEIVED_MESSAGE_TIMEOUT;
69
- this.deliveredMessageCallback = options.deliveredMessageCallback;
83
+ }
84
+
85
+ // Periodically called by the library consumer to process async operations
86
+ // in a sequential manner.
87
+ public async processTasks(): Promise<void> {
88
+ while (this.tasks.length > 0) {
89
+ const item = this.tasks.shift();
90
+ if (!item) {
91
+ continue;
92
+ }
93
+
94
+ // Use a generic helper function to ensure type safety
95
+ await this.executeTask(item);
96
+ }
97
+ }
98
+
99
+ private async executeTask<A extends Command>(item: Task<A>): Promise<void> {
100
+ const handler = this.handlers[item.command];
101
+ await handler(item.params as ParamsByAction[A]);
70
102
  }
71
103
 
72
104
  public static getMessageId(payload: Uint8Array): string {
@@ -95,6 +127,22 @@ export class MessageChannel extends TypedEventEmitter<MessageChannelEvents> {
95
127
  success: boolean;
96
128
  retrievalHint?: Uint8Array;
97
129
  }>
130
+ ): Promise<void> {
131
+ this.tasks.push({
132
+ command: Command.Send,
133
+ params: {
134
+ payload,
135
+ callback
136
+ }
137
+ });
138
+ }
139
+
140
+ public async _sendMessage(
141
+ payload: Uint8Array,
142
+ callback?: (message: Message) => Promise<{
143
+ success: boolean;
144
+ retrievalHint?: Uint8Array;
145
+ }>
98
146
  ): Promise<void> {
99
147
  this.lamportTimestamp++;
100
148
 
@@ -124,6 +172,10 @@ export class MessageChannel extends TypedEventEmitter<MessageChannelEvents> {
124
172
  retrievalHint
125
173
  }
126
174
  });
175
+ this.timeReceived.set(messageId, Date.now());
176
+ this.safeDispatchEvent(MessageChannelEvent.MessageSent, {
177
+ detail: message
178
+ });
127
179
  }
128
180
  }
129
181
  }
@@ -141,10 +193,23 @@ export class MessageChannel extends TypedEventEmitter<MessageChannelEvents> {
141
193
  * @param payload - The payload to send.
142
194
  * @param callback - A callback function that returns a boolean indicating whether the message was sent successfully.
143
195
  */
144
- public sendEphemeralMessage(
196
+ public async sendEphemeralMessage(
197
+ payload: Uint8Array,
198
+ callback?: (message: Message) => Promise<boolean>
199
+ ): Promise<void> {
200
+ this.tasks.push({
201
+ command: Command.SendEphemeral,
202
+ params: {
203
+ payload,
204
+ callback
205
+ }
206
+ });
207
+ }
208
+
209
+ public async _sendEphemeralMessage(
145
210
  payload: Uint8Array,
146
- callback?: (message: Message) => boolean
147
- ): void {
211
+ callback?: (message: Message) => Promise<boolean>
212
+ ): Promise<void> {
148
213
  const message: Message = {
149
214
  messageId: MessageChannel.getMessageId(payload),
150
215
  channelId: this.channelId,
@@ -155,9 +220,10 @@ export class MessageChannel extends TypedEventEmitter<MessageChannelEvents> {
155
220
  };
156
221
 
157
222
  if (callback) {
158
- callback(message);
223
+ await callback(message);
159
224
  }
160
225
  }
226
+
161
227
  /**
162
228
  * Process a received SDS message for this channel.
163
229
  *
@@ -172,12 +238,40 @@ export class MessageChannel extends TypedEventEmitter<MessageChannelEvents> {
172
238
  *
173
239
  * @param message - The received SDS message.
174
240
  */
241
+
175
242
  public receiveMessage(message: Message): void {
243
+ this.tasks.push({
244
+ command: Command.Receive,
245
+ params: {
246
+ message
247
+ }
248
+ });
249
+ }
250
+
251
+ public _receiveMessage(message: Message): void {
252
+ if (
253
+ message.content &&
254
+ message.content.length > 0 &&
255
+ this.timeReceived.has(message.messageId)
256
+ ) {
257
+ // Received a duplicate message
258
+ return;
259
+ }
260
+
176
261
  if (!message.lamportTimestamp) {
177
262
  // Messages with no timestamp are ephemeral messages and should be delivered immediately
178
263
  this.deliverMessage(message);
179
264
  return;
180
265
  }
266
+ if (message.content?.length === 0) {
267
+ this.safeDispatchEvent(MessageChannelEvent.SyncReceived, {
268
+ detail: message
269
+ });
270
+ } else {
271
+ this.safeDispatchEvent(MessageChannelEvent.MessageReceived, {
272
+ detail: message
273
+ });
274
+ }
181
275
  // review ack status
182
276
  this.reviewAckStatus(message);
183
277
  // add to bloom filter (skip for messages with empty content)
@@ -196,14 +290,22 @@ export class MessageChannel extends TypedEventEmitter<MessageChannelEvents> {
196
290
  this.timeReceived.set(message.messageId, Date.now());
197
291
  } else {
198
292
  this.deliverMessage(message);
293
+ this.safeDispatchEvent(MessageChannelEvent.MessageDelivered, {
294
+ detail: {
295
+ messageId: message.messageId,
296
+ sentOrReceived: "received"
297
+ }
298
+ });
199
299
  }
200
300
  }
201
301
 
202
302
  // https://rfc.vac.dev/vac/raw/sds/#periodic-incoming-buffer-sweep
303
+ // Note that even though this function has side effects, it is not async
304
+ // and does not need to be called through the queue.
203
305
  public sweepIncomingBuffer(): HistoryEntry[] {
204
306
  const { buffer, missing } = this.incomingBuffer.reduce<{
205
307
  buffer: Message[];
206
- missing: HistoryEntry[];
308
+ missing: Set<HistoryEntry>;
207
309
  }>(
208
310
  ({ buffer, missing }, message) => {
209
311
  // Check each message for missing dependencies
@@ -218,6 +320,12 @@ export class MessageChannel extends TypedEventEmitter<MessageChannelEvents> {
218
320
  // Any message with no missing dependencies is delivered
219
321
  // and removed from the buffer (implicitly by not adding it to the new incoming buffer)
220
322
  this.deliverMessage(message);
323
+ this.safeDispatchEvent(MessageChannelEvent.MessageDelivered, {
324
+ detail: {
325
+ messageId: message.messageId,
326
+ sentOrReceived: "received"
327
+ }
328
+ });
221
329
  return { buffer, missing };
222
330
  }
223
331
 
@@ -234,16 +342,24 @@ export class MessageChannel extends TypedEventEmitter<MessageChannelEvents> {
234
342
  }
235
343
  // Any message with missing dependencies stays in the buffer
236
344
  // and the missing message IDs are returned for processing.
345
+ missingDependencies.forEach((dependency) => {
346
+ missing.add(dependency);
347
+ });
237
348
  return {
238
349
  buffer: buffer.concat(message),
239
- missing: missing.concat(missingDependencies)
350
+ missing
240
351
  };
241
352
  },
242
- { buffer: new Array<Message>(), missing: new Array<HistoryEntry>() }
353
+ { buffer: new Array<Message>(), missing: new Set<HistoryEntry>() }
243
354
  );
244
355
  // Update the incoming buffer to only include messages with no missing dependencies
245
356
  this.incomingBuffer = buffer;
246
- return missing;
357
+
358
+ this.safeDispatchEvent(MessageChannelEvent.MissedMessages, {
359
+ detail: Array.from(missing)
360
+ });
361
+
362
+ return Array.from(missing);
247
363
  }
248
364
 
249
365
  // https://rfc.vac.dev/vac/raw/sds/#periodic-outgoing-buffer-sweep
@@ -285,7 +401,7 @@ export class MessageChannel extends TypedEventEmitter<MessageChannelEvents> {
285
401
  *
286
402
  * @param callback - A callback function that returns a boolean indicating whether the message was sent successfully.
287
403
  */
288
- public sendSyncMessage(
404
+ public async sendSyncMessage(
289
405
  callback?: (message: Message) => Promise<boolean>
290
406
  ): Promise<boolean> {
291
407
  this.lamportTimestamp++;
@@ -304,15 +420,17 @@ export class MessageChannel extends TypedEventEmitter<MessageChannelEvents> {
304
420
  };
305
421
 
306
422
  if (callback) {
307
- return callback(message);
423
+ await callback(message);
424
+ this.safeDispatchEvent(MessageChannelEvent.SyncSent, {
425
+ detail: message
426
+ });
427
+ return true;
308
428
  }
309
- return Promise.resolve(false);
429
+ return false;
310
430
  }
311
431
 
312
432
  // See https://rfc.vac.dev/vac/raw/sds/#deliver-message
313
433
  private deliverMessage(message: Message, retrievalHint?: Uint8Array): void {
314
- this.notifyDeliveredMessage(message.messageId);
315
-
316
434
  const messageLamportTimestamp = message.lamportTimestamp ?? 0;
317
435
  if (messageLamportTimestamp > this.lamportTimestamp) {
318
436
  this.lamportTimestamp = messageLamportTimestamp;
@@ -355,7 +473,15 @@ export class MessageChannel extends TypedEventEmitter<MessageChannelEvents> {
355
473
  // the participant MUST mark all messages in the received causal_history as acknowledged.
356
474
  receivedMessage.causalHistory.forEach(({ messageId }) => {
357
475
  this.outgoingBuffer = this.outgoingBuffer.filter(
358
- ({ messageId: outgoingMessageId }) => outgoingMessageId !== messageId
476
+ ({ messageId: outgoingMessageId }) => {
477
+ if (outgoingMessageId !== messageId) {
478
+ return true;
479
+ }
480
+ this.safeDispatchEvent(MessageChannelEvent.MessageAcknowledged, {
481
+ detail: messageId
482
+ });
483
+ return false;
484
+ }
359
485
  );
360
486
  this.acknowledgements.delete(messageId);
361
487
  if (!this.filter.lookup(messageId)) {
@@ -380,6 +506,12 @@ export class MessageChannel extends TypedEventEmitter<MessageChannelEvents> {
380
506
  const count = (this.acknowledgements.get(message.messageId) ?? 0) + 1;
381
507
  if (count < this.acknowledgementCount) {
382
508
  this.acknowledgements.set(message.messageId, count);
509
+ this.safeDispatchEvent(MessageChannelEvent.PartialAcknowledgement, {
510
+ detail: {
511
+ messageId: message.messageId,
512
+ count
513
+ }
514
+ });
383
515
  return true;
384
516
  }
385
517
  this.acknowledgements.delete(message.messageId);
@@ -391,15 +523,4 @@ export class MessageChannel extends TypedEventEmitter<MessageChannelEvents> {
391
523
  private getAcknowledgementCount(): number {
392
524
  return 2;
393
525
  }
394
-
395
- private notifyDeliveredMessage(messageId: string): void {
396
- if (this.deliveredMessageCallback) {
397
- this.deliveredMessageCallback(messageId);
398
- }
399
- this.dispatchEvent(
400
- new CustomEvent(MessageChannelEvent.MessageDelivered, {
401
- detail: messageId
402
- })
403
- );
404
- }
405
526
  }
package/dist/bloom.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bloom.js","sourceRoot":"","sources":["../src/bloom.ts"],"names":[],"mappings":"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"}
package/dist/sds.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"sds.js","sourceRoot":"","sources":["../src/sds.ts"],"names":[],"mappings":"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"}
File without changes