@waku/sds 0.0.6-ced989a.0 → 0.0.6-e1212cc.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.
Files changed (32) hide show
  1. package/bundle/index.js +22879 -5883
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/message_channel/command_queue.d.ts +1 -1
  6. package/dist/message_channel/events.d.ts +3 -85
  7. package/dist/message_channel/events.js +1 -137
  8. package/dist/message_channel/events.js.map +1 -1
  9. package/dist/message_channel/index.d.ts +1 -0
  10. package/dist/message_channel/index.js +1 -0
  11. package/dist/message_channel/index.js.map +1 -1
  12. package/dist/message_channel/mem_local_history.d.ts +7 -7
  13. package/dist/message_channel/mem_local_history.js +18 -32
  14. package/dist/message_channel/mem_local_history.js.map +1 -1
  15. package/dist/message_channel/message.d.ts +83 -0
  16. package/dist/message_channel/message.js +139 -0
  17. package/dist/message_channel/message.js.map +1 -0
  18. package/dist/message_channel/message_channel.d.ts +4 -3
  19. package/dist/message_channel/message_channel.js +7 -7
  20. package/dist/message_channel/message_channel.js.map +1 -1
  21. package/package.json +1 -1
  22. package/src/index.ts +2 -1
  23. package/src/message_channel/command_queue.ts +1 -1
  24. package/src/message_channel/events.ts +3 -175
  25. package/src/message_channel/index.ts +13 -0
  26. package/src/message_channel/mem_local_history.ts +37 -43
  27. package/src/message_channel/message.ts +175 -0
  28. package/src/message_channel/message_channel.ts +13 -15
  29. package/dist/message_channel/sorted_array_base.d.ts +0 -50
  30. package/dist/message_channel/sorted_array_base.js +0 -199
  31. package/dist/message_channel/sorted_array_base.js.map +0 -1
  32. package/src/message_channel/sorted_array_base.ts +0 -306
@@ -1,4 +1,3 @@
1
- import { proto_sds_message } from "@waku/proto";
2
1
  export var MessageChannelEvent;
3
2
  (function (MessageChannelEvent) {
4
3
  MessageChannelEvent["OutMessageSent"] = "sds:out:message-sent";
@@ -9,142 +8,7 @@ export var MessageChannelEvent;
9
8
  MessageChannelEvent["InMessageMissing"] = "sds:in:message-missing";
10
9
  MessageChannelEvent["OutSyncSent"] = "sds:out:sync-sent";
11
10
  MessageChannelEvent["InSyncReceived"] = "sds:in:sync-received";
12
- MessageChannelEvent["InMessageIrretrievablyLost"] = "sds:in:message-irretrievably-lost";
11
+ MessageChannelEvent["InMessageLost"] = "sds:in:message-irretrievably-lost";
13
12
  MessageChannelEvent["ErrorTask"] = "sds:error-task";
14
13
  })(MessageChannelEvent || (MessageChannelEvent = {}));
15
- export class Message {
16
- messageId;
17
- channelId;
18
- senderId;
19
- causalHistory;
20
- lamportTimestamp;
21
- bloomFilter;
22
- content;
23
- retrievalHint;
24
- constructor(messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content,
25
- /**
26
- * Not encoded, set after it is sent, used to include in follow-up messages
27
- */
28
- retrievalHint) {
29
- this.messageId = messageId;
30
- this.channelId = channelId;
31
- this.senderId = senderId;
32
- this.causalHistory = causalHistory;
33
- this.lamportTimestamp = lamportTimestamp;
34
- this.bloomFilter = bloomFilter;
35
- this.content = content;
36
- this.retrievalHint = retrievalHint;
37
- }
38
- encode() {
39
- return proto_sds_message.SdsMessage.encode(this);
40
- }
41
- static decode(data) {
42
- const { messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content } = proto_sds_message.SdsMessage.decode(data);
43
- return new Message(messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content);
44
- }
45
- }
46
- export class SyncMessage extends Message {
47
- messageId;
48
- channelId;
49
- senderId;
50
- causalHistory;
51
- lamportTimestamp;
52
- bloomFilter;
53
- content;
54
- retrievalHint;
55
- constructor(messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content,
56
- /**
57
- * Not encoded, set after it is sent, used to include in follow-up messages
58
- */
59
- retrievalHint) {
60
- super(messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content, retrievalHint);
61
- this.messageId = messageId;
62
- this.channelId = channelId;
63
- this.senderId = senderId;
64
- this.causalHistory = causalHistory;
65
- this.lamportTimestamp = lamportTimestamp;
66
- this.bloomFilter = bloomFilter;
67
- this.content = content;
68
- this.retrievalHint = retrievalHint;
69
- }
70
- }
71
- export function isSyncMessage(message) {
72
- return Boolean("lamportTimestamp" in message &&
73
- typeof message.lamportTimestamp === "number" &&
74
- (message.content === undefined || message.content.length === 0));
75
- }
76
- export class EphemeralMessage extends Message {
77
- messageId;
78
- channelId;
79
- senderId;
80
- causalHistory;
81
- lamportTimestamp;
82
- bloomFilter;
83
- content;
84
- retrievalHint;
85
- constructor(messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content,
86
- /**
87
- * Not encoded, set after it is sent, used to include in follow-up messages
88
- */
89
- retrievalHint) {
90
- if (!content || !content.length) {
91
- throw Error("Ephemeral Message must have content");
92
- }
93
- super(messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content, retrievalHint);
94
- this.messageId = messageId;
95
- this.channelId = channelId;
96
- this.senderId = senderId;
97
- this.causalHistory = causalHistory;
98
- this.lamportTimestamp = lamportTimestamp;
99
- this.bloomFilter = bloomFilter;
100
- this.content = content;
101
- this.retrievalHint = retrievalHint;
102
- }
103
- }
104
- export function isEphemeralMessage(message) {
105
- return Boolean(message.lamportTimestamp === undefined &&
106
- "content" in message &&
107
- message.content &&
108
- message.content.length);
109
- }
110
- export class ContentMessage extends Message {
111
- messageId;
112
- channelId;
113
- senderId;
114
- causalHistory;
115
- lamportTimestamp;
116
- bloomFilter;
117
- content;
118
- retrievalHint;
119
- constructor(messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content,
120
- /**
121
- * Not encoded, set after it is sent, used to include in follow-up messages
122
- */
123
- retrievalHint) {
124
- if (!content.length) {
125
- throw Error("Content Message must have content");
126
- }
127
- super(messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content, retrievalHint);
128
- this.messageId = messageId;
129
- this.channelId = channelId;
130
- this.senderId = senderId;
131
- this.causalHistory = causalHistory;
132
- this.lamportTimestamp = lamportTimestamp;
133
- this.bloomFilter = bloomFilter;
134
- this.content = content;
135
- this.retrievalHint = retrievalHint;
136
- }
137
- static compare(a, b) {
138
- if (a.lamportTimestamp !== b.lamportTimestamp) {
139
- return a.lamportTimestamp - b.lamportTimestamp;
140
- }
141
- return a.messageId.localeCompare(b.messageId);
142
- }
143
- }
144
- export function isContentMessage(message) {
145
- return Boolean("lamportTimestamp" in message &&
146
- typeof message.lamportTimestamp === "number" &&
147
- message.content &&
148
- message.content.length);
149
- }
150
14
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/message_channel/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/message_channel/events.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,mBAWX;AAXD,WAAY,mBAAmB;IAC7B,8DAAuC,CAAA;IACvC,sEAA+C,CAAA;IAC/C,oEAA6C,CAAA;IAC7C,8EAAuD,CAAA;IACvD,+FAAwE,CAAA;IACxE,kEAA2C,CAAA;IAC3C,wDAAiC,CAAA;IACjC,8DAAuC,CAAA;IACvC,0EAAmD,CAAA;IACnD,mDAA4B,CAAA;AAC9B,CAAC,EAXW,mBAAmB,KAAnB,mBAAmB,QAW9B"}
@@ -1,3 +1,4 @@
1
1
  export * from "./command_queue.js";
2
2
  export * from "./events.js";
3
3
  export * from "./message_channel.js";
4
+ export { ChannelId, ContentMessage, EphemeralMessage, HistoryEntry, Message, MessageId, SenderId, SyncMessage, isContentMessage, isEphemeralMessage, isSyncMessage } from "./message.js";
@@ -1,4 +1,5 @@
1
1
  export * from "./command_queue.js";
2
2
  export * from "./events.js";
3
3
  export * from "./message_channel.js";
4
+ export { ContentMessage, EphemeralMessage, Message, SyncMessage, isContentMessage, isEphemeralMessage, isSyncMessage } from "./message.js";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/message_channel/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/message_channel/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAEL,cAAc,EACd,gBAAgB,EAEhB,OAAO,EAGP,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACd,MAAM,cAAc,CAAC"}
@@ -1,5 +1,4 @@
1
- import { ContentMessage } from "./events.js";
2
- import { SortedArrayBase } from "./sorted_array_base.js";
1
+ import { ContentMessage } from "./message.js";
3
2
  /**
4
3
  * In-Memory implementation of a local store of messages.
5
4
  *
@@ -9,11 +8,12 @@ import { SortedArrayBase } from "./sorted_array_base.js";
9
8
  *
10
9
  * Only stores content message: `message.lamportTimestamp` and `message.content` are present.
11
10
  */
12
- export declare class MemLocalHistory extends SortedArrayBase<ContentMessage> {
13
- protected getCompareFn(): (a: ContentMessage, b: ContentMessage) => number;
11
+ export declare class MemLocalHistory {
12
+ private items;
13
+ get length(): number;
14
14
  push(...items: ContentMessage[]): number;
15
- unshift(...items: ContentMessage[]): number;
16
- fill(value: ContentMessage, start?: number, end?: number): ContentMessage[];
15
+ some(predicate: (value: ContentMessage, index: number, array: ContentMessage[]) => unknown, thisArg?: any): boolean;
16
+ slice(start?: number, end?: number): ContentMessage[];
17
+ find(predicate: (value: ContentMessage, index: number, obj: ContentMessage[]) => unknown, thisArg?: any): ContentMessage | undefined;
17
18
  private validateMessage;
18
- private validateAndAddMessage;
19
19
  }
@@ -1,5 +1,5 @@
1
- import { ContentMessage } from "./events.js";
2
- import { SortedArrayBase } from "./sorted_array_base.js";
1
+ import _ from "lodash";
2
+ import { isContentMessage } from "./message.js";
3
3
  /**
4
4
  * In-Memory implementation of a local store of messages.
5
5
  *
@@ -9,47 +9,33 @@ import { SortedArrayBase } from "./sorted_array_base.js";
9
9
  *
10
10
  * Only stores content message: `message.lamportTimestamp` and `message.content` are present.
11
11
  */
12
- export class MemLocalHistory extends SortedArrayBase {
13
- getCompareFn() {
14
- return ContentMessage.compare;
12
+ export class MemLocalHistory {
13
+ items = [];
14
+ get length() {
15
+ return this.items.length;
15
16
  }
16
17
  push(...items) {
17
18
  for (const item of items) {
18
- this.validateAndAddMessage(item);
19
+ this.validateMessage(item);
19
20
  }
20
- this.sort();
21
+ // Add new items and ensure uniqueness by messageId using sortedUniqBy
22
+ // The valueOf() method on ContentMessage enables native < operator sorting
23
+ this.items = _.sortedUniqBy([...this.items, ...items], "messageId");
21
24
  return this.items.length;
22
25
  }
23
- unshift(...items) {
24
- for (const item of items) {
25
- this.validateMessage(item);
26
- }
27
- const result = this.items.unshift(...items);
28
- this.sort();
29
- return result;
26
+ some(predicate, thisArg) {
27
+ return this.items.some(predicate, thisArg);
28
+ }
29
+ slice(start, end) {
30
+ return this.items.slice(start, end);
30
31
  }
31
- fill(value, start, end) {
32
- this.validateMessage(value);
33
- this.items.fill(value, start, end);
34
- this.sort();
35
- return this.items;
32
+ find(predicate, thisArg) {
33
+ return this.items.find(predicate, thisArg);
36
34
  }
37
35
  validateMessage(message) {
38
- if (!message.lamportTimestamp ||
39
- !message.content ||
40
- !message.content.length ||
41
- !message.messageId) {
36
+ if (!isContentMessage(message)) {
42
37
  throw new Error("Message must have lamportTimestamp and content defined, sync and ephemeral messages cannot be stored");
43
38
  }
44
39
  }
45
- validateAndAddMessage(newMessage) {
46
- this.validateMessage(newMessage);
47
- // Check if the entry is already present
48
- const existingHistoryEntry = this.items.find(({ messageId }) => newMessage.messageId === messageId);
49
- // If history entry is already present, no need to re-add
50
- if (!existingHistoryEntry) {
51
- this.items.push(newMessage);
52
- }
53
- }
54
40
  }
55
41
  //# sourceMappingURL=mem_local_history.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mem_local_history.js","sourceRoot":"","sources":["../../src/message_channel/mem_local_history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,OAAO,eAAgB,SAAQ,eAA+B;IACxD,YAAY;QACpB,OAAO,cAAc,CAAC,OAAO,CAAC;IAChC,CAAC;IAEM,IAAI,CAAC,GAAG,KAAuB;QACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAEM,OAAO,CAAC,GAAG,KAAuB;QACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,IAAI,CACT,KAAqB,EACrB,KAAc,EACd,GAAY;QAEZ,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEO,eAAe,CAAC,OAAuB;QAC7C,IACE,CAAC,OAAO,CAAC,gBAAgB;YACzB,CAAC,OAAO,CAAC,OAAO;YAChB,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM;YACvB,CAAC,OAAO,CAAC,SAAS,EAClB,CAAC;YACD,MAAM,IAAI,KAAK,CACb,sGAAsG,CACvG,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,qBAAqB,CAAC,UAA0B;QACtD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAEjC,wCAAwC;QACxC,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAC1C,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS,CACtD,CAAC;QAEF,yDAAyD;QACzD,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"mem_local_history.js","sourceRoot":"","sources":["../../src/message_channel/mem_local_history.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAC;AAEvB,OAAO,EAAkB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhE;;;;;;;;GAQG;AACH,MAAM,OAAO,eAAe;IAClB,KAAK,GAAqB,EAAE,CAAC;IAErC,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAEM,IAAI,CAAC,GAAG,KAAuB;QACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,sEAAsE;QACtE,2EAA2E;QAC3E,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;QAEpE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAEM,IAAI,CACT,SAIY,EACZ,OAAa;QAEb,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAEM,KAAK,CAAC,KAAc,EAAE,GAAY;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;IAEM,IAAI,CACT,SAIY,EACZ,OAAa;QAEb,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAEO,eAAe,CAAC,OAAuB;QAC7C,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,sGAAsG,CACvG,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,83 @@
1
+ import { proto_sds_message } from "@waku/proto";
2
+ export type MessageId = string;
3
+ export type HistoryEntry = proto_sds_message.HistoryEntry;
4
+ export type ChannelId = string;
5
+ export type SenderId = string;
6
+ export declare class Message implements proto_sds_message.SdsMessage {
7
+ messageId: string;
8
+ channelId: string;
9
+ senderId: string;
10
+ causalHistory: proto_sds_message.HistoryEntry[];
11
+ lamportTimestamp?: number | undefined;
12
+ bloomFilter?: Uint8Array<ArrayBufferLike> | undefined;
13
+ content?: Uint8Array<ArrayBufferLike> | undefined;
14
+ /**
15
+ * Not encoded, set after it is sent, used to include in follow-up messages
16
+ */
17
+ retrievalHint?: Uint8Array | undefined;
18
+ constructor(messageId: string, channelId: string, senderId: string, causalHistory: proto_sds_message.HistoryEntry[], lamportTimestamp?: number | undefined, bloomFilter?: Uint8Array<ArrayBufferLike> | undefined, content?: Uint8Array<ArrayBufferLike> | undefined,
19
+ /**
20
+ * Not encoded, set after it is sent, used to include in follow-up messages
21
+ */
22
+ retrievalHint?: Uint8Array | undefined);
23
+ encode(): Uint8Array;
24
+ static decode(data: Uint8Array): Message;
25
+ }
26
+ export declare class SyncMessage extends Message {
27
+ messageId: string;
28
+ channelId: string;
29
+ senderId: string;
30
+ causalHistory: proto_sds_message.HistoryEntry[];
31
+ lamportTimestamp: number;
32
+ bloomFilter: Uint8Array<ArrayBufferLike> | undefined;
33
+ content: undefined;
34
+ /**
35
+ * Not encoded, set after it is sent, used to include in follow-up messages
36
+ */
37
+ retrievalHint?: Uint8Array | undefined;
38
+ constructor(messageId: string, channelId: string, senderId: string, causalHistory: proto_sds_message.HistoryEntry[], lamportTimestamp: number, bloomFilter: Uint8Array<ArrayBufferLike> | undefined, content: undefined,
39
+ /**
40
+ * Not encoded, set after it is sent, used to include in follow-up messages
41
+ */
42
+ retrievalHint?: Uint8Array | undefined);
43
+ }
44
+ export declare function isSyncMessage(message: Message | ContentMessage | SyncMessage | EphemeralMessage): message is SyncMessage;
45
+ export declare class EphemeralMessage extends Message {
46
+ messageId: string;
47
+ channelId: string;
48
+ senderId: string;
49
+ causalHistory: proto_sds_message.HistoryEntry[];
50
+ lamportTimestamp: undefined;
51
+ bloomFilter: Uint8Array<ArrayBufferLike> | undefined;
52
+ content: Uint8Array<ArrayBufferLike>;
53
+ /**
54
+ * Not encoded, set after it is sent, used to include in follow-up messages
55
+ */
56
+ retrievalHint?: Uint8Array | undefined;
57
+ constructor(messageId: string, channelId: string, senderId: string, causalHistory: proto_sds_message.HistoryEntry[], lamportTimestamp: undefined, bloomFilter: Uint8Array<ArrayBufferLike> | undefined, content: Uint8Array<ArrayBufferLike>,
58
+ /**
59
+ * Not encoded, set after it is sent, used to include in follow-up messages
60
+ */
61
+ retrievalHint?: Uint8Array | undefined);
62
+ }
63
+ export declare function isEphemeralMessage(message: Message | ContentMessage | SyncMessage | EphemeralMessage): message is EphemeralMessage;
64
+ export declare class ContentMessage extends Message {
65
+ messageId: string;
66
+ channelId: string;
67
+ senderId: string;
68
+ causalHistory: proto_sds_message.HistoryEntry[];
69
+ lamportTimestamp: number;
70
+ bloomFilter: Uint8Array<ArrayBufferLike> | undefined;
71
+ content: Uint8Array<ArrayBufferLike>;
72
+ /**
73
+ * Not encoded, set after it is sent, used to include in follow-up messages
74
+ */
75
+ retrievalHint?: Uint8Array | undefined;
76
+ constructor(messageId: string, channelId: string, senderId: string, causalHistory: proto_sds_message.HistoryEntry[], lamportTimestamp: number, bloomFilter: Uint8Array<ArrayBufferLike> | undefined, content: Uint8Array<ArrayBufferLike>,
77
+ /**
78
+ * Not encoded, set after it is sent, used to include in follow-up messages
79
+ */
80
+ retrievalHint?: Uint8Array | undefined);
81
+ valueOf(): string;
82
+ }
83
+ export declare function isContentMessage(message: Message | ContentMessage): message is ContentMessage;
@@ -0,0 +1,139 @@
1
+ import { proto_sds_message } from "@waku/proto";
2
+ export class Message {
3
+ messageId;
4
+ channelId;
5
+ senderId;
6
+ causalHistory;
7
+ lamportTimestamp;
8
+ bloomFilter;
9
+ content;
10
+ retrievalHint;
11
+ constructor(messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content,
12
+ /**
13
+ * Not encoded, set after it is sent, used to include in follow-up messages
14
+ */
15
+ retrievalHint) {
16
+ this.messageId = messageId;
17
+ this.channelId = channelId;
18
+ this.senderId = senderId;
19
+ this.causalHistory = causalHistory;
20
+ this.lamportTimestamp = lamportTimestamp;
21
+ this.bloomFilter = bloomFilter;
22
+ this.content = content;
23
+ this.retrievalHint = retrievalHint;
24
+ }
25
+ encode() {
26
+ return proto_sds_message.SdsMessage.encode(this);
27
+ }
28
+ static decode(data) {
29
+ const { messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content } = proto_sds_message.SdsMessage.decode(data);
30
+ return new Message(messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content);
31
+ }
32
+ }
33
+ export class SyncMessage extends Message {
34
+ messageId;
35
+ channelId;
36
+ senderId;
37
+ causalHistory;
38
+ lamportTimestamp;
39
+ bloomFilter;
40
+ content;
41
+ retrievalHint;
42
+ constructor(messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content,
43
+ /**
44
+ * Not encoded, set after it is sent, used to include in follow-up messages
45
+ */
46
+ retrievalHint) {
47
+ super(messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content, retrievalHint);
48
+ this.messageId = messageId;
49
+ this.channelId = channelId;
50
+ this.senderId = senderId;
51
+ this.causalHistory = causalHistory;
52
+ this.lamportTimestamp = lamportTimestamp;
53
+ this.bloomFilter = bloomFilter;
54
+ this.content = content;
55
+ this.retrievalHint = retrievalHint;
56
+ }
57
+ }
58
+ export function isSyncMessage(message) {
59
+ return Boolean("lamportTimestamp" in message &&
60
+ typeof message.lamportTimestamp === "number" &&
61
+ (message.content === undefined || message.content.length === 0));
62
+ }
63
+ export class EphemeralMessage extends Message {
64
+ messageId;
65
+ channelId;
66
+ senderId;
67
+ causalHistory;
68
+ lamportTimestamp;
69
+ bloomFilter;
70
+ content;
71
+ retrievalHint;
72
+ constructor(messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content,
73
+ /**
74
+ * Not encoded, set after it is sent, used to include in follow-up messages
75
+ */
76
+ retrievalHint) {
77
+ if (!content || !content.length) {
78
+ throw Error("Ephemeral Message must have content");
79
+ }
80
+ super(messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content, retrievalHint);
81
+ this.messageId = messageId;
82
+ this.channelId = channelId;
83
+ this.senderId = senderId;
84
+ this.causalHistory = causalHistory;
85
+ this.lamportTimestamp = lamportTimestamp;
86
+ this.bloomFilter = bloomFilter;
87
+ this.content = content;
88
+ this.retrievalHint = retrievalHint;
89
+ }
90
+ }
91
+ export function isEphemeralMessage(message) {
92
+ return Boolean(message.lamportTimestamp === undefined &&
93
+ "content" in message &&
94
+ message.content &&
95
+ message.content.length);
96
+ }
97
+ export class ContentMessage extends Message {
98
+ messageId;
99
+ channelId;
100
+ senderId;
101
+ causalHistory;
102
+ lamportTimestamp;
103
+ bloomFilter;
104
+ content;
105
+ retrievalHint;
106
+ constructor(messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content,
107
+ /**
108
+ * Not encoded, set after it is sent, used to include in follow-up messages
109
+ */
110
+ retrievalHint) {
111
+ if (!content.length) {
112
+ throw Error("Content Message must have content");
113
+ }
114
+ super(messageId, channelId, senderId, causalHistory, lamportTimestamp, bloomFilter, content, retrievalHint);
115
+ this.messageId = messageId;
116
+ this.channelId = channelId;
117
+ this.senderId = senderId;
118
+ this.causalHistory = causalHistory;
119
+ this.lamportTimestamp = lamportTimestamp;
120
+ this.bloomFilter = bloomFilter;
121
+ this.content = content;
122
+ this.retrievalHint = retrievalHint;
123
+ }
124
+ // `valueOf` is used by comparison operands such as `<`
125
+ valueOf() {
126
+ // Create a sortable string representation that matches the compare logic
127
+ // Pad lamportTimestamp to ensure proper lexicographic ordering
128
+ // Use 16 digits to handle up to Number.MAX_SAFE_INTEGER (9007199254740991)
129
+ const paddedTimestamp = this.lamportTimestamp.toString().padStart(16, "0");
130
+ return `${paddedTimestamp}_${this.messageId}`;
131
+ }
132
+ }
133
+ export function isContentMessage(message) {
134
+ return Boolean("lamportTimestamp" in message &&
135
+ typeof message.lamportTimestamp === "number" &&
136
+ message.content &&
137
+ message.content.length);
138
+ }
139
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/message_channel/message.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { TypedEventEmitter } from "@libp2p/interface";
2
- import { type ChannelId, ContentMessage, type HistoryEntry, Message, MessageChannelEvents, type MessageId, type SenderId, SyncMessage } from "./events.js";
2
+ import { MessageChannelEvents } from "./events.js";
3
+ import { ChannelId, ContentMessage, HistoryEntry, Message, MessageId, SenderId, SyncMessage } from "./message.js";
3
4
  export declare const DEFAULT_BLOOM_FILTER_OPTIONS: {
4
5
  capacity: number;
5
6
  errorRate: number;
@@ -13,7 +14,7 @@ export interface MessageChannelOptions {
13
14
  *
14
15
  * @default undefined because it is coupled to processTask calls frequency
15
16
  */
16
- timeoutToMarkMessageIrretrievableMs?: number;
17
+ timeoutForLostMessagesMs?: number;
17
18
  /**
18
19
  * How many possible acks does it take to consider it a definitive ack.
19
20
  */
@@ -32,7 +33,7 @@ export declare class MessageChannel extends TypedEventEmitter<MessageChannelEven
32
33
  private timeReceived;
33
34
  private readonly causalHistorySize;
34
35
  private readonly possibleAcksThreshold;
35
- private readonly timeoutToMarkMessageIrretrievableMs?;
36
+ private readonly timeoutForLostMessagesMs?;
36
37
  private tasks;
37
38
  private handlers;
38
39
  constructor(channelId: ChannelId, senderId: SenderId, options?: MessageChannelOptions, localHistory?: ILocalHistory);
@@ -4,8 +4,9 @@ import { bytesToHex } from "@noble/hashes/utils";
4
4
  import { Logger } from "@waku/utils";
5
5
  import { DefaultBloomFilter } from "../bloom_filter/bloom.js";
6
6
  import { Command } from "./command_queue.js";
7
- import { ContentMessage, EphemeralMessage, isContentMessage, isEphemeralMessage, isSyncMessage, MessageChannelEvent, SyncMessage } from "./events.js";
7
+ import { MessageChannelEvent } from "./events.js";
8
8
  import { MemLocalHistory } from "./mem_local_history.js";
9
+ import { ContentMessage, EphemeralMessage, isContentMessage, isEphemeralMessage, isSyncMessage, SyncMessage } from "./message.js";
9
10
  export const DEFAULT_BLOOM_FILTER_OPTIONS = {
10
11
  capacity: 10000,
11
12
  errorRate: 0.001
@@ -25,7 +26,7 @@ export class MessageChannel extends TypedEventEmitter {
25
26
  timeReceived;
26
27
  causalHistorySize;
27
28
  possibleAcksThreshold;
28
- timeoutToMarkMessageIrretrievableMs;
29
+ timeoutForLostMessagesMs;
29
30
  tasks = [];
30
31
  handlers = {
31
32
  [Command.Send]: async (params) => {
@@ -54,8 +55,7 @@ export class MessageChannel extends TypedEventEmitter {
54
55
  this.possibleAcksThreshold =
55
56
  options.possibleAcksThreshold ?? DEFAULT_POSSIBLE_ACKS_THRESHOLD;
56
57
  this.timeReceived = new Map();
57
- this.timeoutToMarkMessageIrretrievableMs =
58
- options.timeoutToMarkMessageIrretrievableMs;
58
+ this.timeoutForLostMessagesMs = options.timeoutForLostMessagesMs;
59
59
  }
60
60
  static getMessageId(payload) {
61
61
  return bytesToHex(sha256(payload));
@@ -199,11 +199,11 @@ export class MessageChannel extends TypedEventEmitter {
199
199
  log.info(this.senderId, message.messageId, "is missing dependencies", missingDependencies.map((ch) => ch.messageId));
200
200
  // Optionally, if a message has not been received after a predetermined amount of time,
201
201
  // its dependencies are marked as irretrievably lost (implicitly by removing it from the buffer without delivery)
202
- if (this.timeoutToMarkMessageIrretrievableMs) {
202
+ if (this.timeoutForLostMessagesMs) {
203
203
  const timeReceived = this.timeReceived.get(message.messageId);
204
204
  if (timeReceived &&
205
- Date.now() - timeReceived > this.timeoutToMarkMessageIrretrievableMs) {
206
- this.safeSendEvent(MessageChannelEvent.InMessageIrretrievablyLost, {
205
+ Date.now() - timeReceived > this.timeoutForLostMessagesMs) {
206
+ this.safeSendEvent(MessageChannelEvent.InMessageLost, {
207
207
  detail: Array.from(missingDependencies)
208
208
  });
209
209
  return { buffer, missing };