@waku/sds 0.0.3-ff0222a.0 → 0.0.4-006cd41.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.
- package/CHANGELOG.md +19 -0
- package/bundle/index.js +5366 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/{bloom.js → bloom_filter/bloom.js} +2 -2
- package/dist/bloom_filter/bloom.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/message_channel/command_queue.d.ts +29 -0
- package/dist/message_channel/command_queue.js +7 -0
- package/dist/message_channel/command_queue.js.map +1 -0
- package/dist/message_channel/events.d.ts +32 -0
- package/dist/message_channel/events.js +19 -0
- package/dist/message_channel/events.js.map +1 -0
- package/dist/message_channel/index.d.ts +3 -0
- package/dist/message_channel/index.js +4 -0
- package/dist/message_channel/index.js.map +1 -0
- package/dist/{sds.d.ts → message_channel/message_channel.d.ts} +43 -11
- package/dist/{sds.js → message_channel/message_channel.js} +194 -33
- package/dist/message_channel/message_channel.js.map +1 -0
- package/package.json +1 -1
- package/src/{bloom.ts → bloom_filter/bloom.ts} +2 -2
- package/src/index.ts +3 -1
- package/src/message_channel/command_queue.ts +34 -0
- package/src/message_channel/events.ts +41 -0
- package/src/message_channel/index.ts +3 -0
- package/src/{sds.ts → message_channel/message_channel.ts} +252 -41
- package/dist/bloom.js.map +0 -1
- package/dist/sds.js.map +0 -1
- /package/dist/{bloom.d.ts → bloom_filter/bloom.d.ts} +0 -0
@@ -1,38 +1,73 @@
|
|
1
|
+
import { TypedEventEmitter } from "@libp2p/interface";
|
1
2
|
import { sha256 } from "@noble/hashes/sha256";
|
2
3
|
import { bytesToHex } from "@noble/hashes/utils";
|
3
|
-
import { DefaultBloomFilter } from "
|
4
|
+
import { DefaultBloomFilter } from "../bloom_filter/bloom.js";
|
5
|
+
import { Command } from "./command_queue.js";
|
6
|
+
import { MessageChannelEvent } from "./events.js";
|
4
7
|
export const DEFAULT_BLOOM_FILTER_OPTIONS = {
|
5
8
|
capacity: 10000,
|
6
9
|
errorRate: 0.001
|
7
10
|
};
|
8
11
|
const DEFAULT_CAUSAL_HISTORY_SIZE = 2;
|
9
12
|
const DEFAULT_RECEIVED_MESSAGE_TIMEOUT = 1000 * 60 * 5; // 5 minutes
|
10
|
-
export class MessageChannel {
|
11
|
-
receivedMessageTimeoutEnabled;
|
12
|
-
receivedMessageTimeout;
|
13
|
+
export class MessageChannel extends TypedEventEmitter {
|
13
14
|
lamportTimestamp;
|
14
15
|
filter;
|
15
16
|
outgoingBuffer;
|
16
17
|
acknowledgements;
|
17
18
|
incomingBuffer;
|
18
|
-
|
19
|
+
localHistory;
|
19
20
|
channelId;
|
20
21
|
causalHistorySize;
|
21
22
|
acknowledgementCount;
|
22
23
|
timeReceived;
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
receivedMessageTimeoutEnabled;
|
25
|
+
receivedMessageTimeout;
|
26
|
+
tasks = [];
|
27
|
+
handlers = {
|
28
|
+
[Command.Send]: async (params) => {
|
29
|
+
await this._sendMessage(params.payload, params.callback);
|
30
|
+
},
|
31
|
+
[Command.Receive]: async (params) => {
|
32
|
+
this._receiveMessage(params.message);
|
33
|
+
},
|
34
|
+
[Command.SendEphemeral]: async (params) => {
|
35
|
+
await this._sendEphemeralMessage(params.payload, params.callback);
|
36
|
+
}
|
37
|
+
};
|
38
|
+
constructor(channelId, options = {}) {
|
39
|
+
super();
|
26
40
|
this.channelId = channelId;
|
27
41
|
this.lamportTimestamp = 0;
|
28
42
|
this.filter = new DefaultBloomFilter(DEFAULT_BLOOM_FILTER_OPTIONS);
|
29
43
|
this.outgoingBuffer = [];
|
30
44
|
this.acknowledgements = new Map();
|
31
45
|
this.incomingBuffer = [];
|
32
|
-
this.
|
33
|
-
this.causalHistorySize =
|
46
|
+
this.localHistory = [];
|
47
|
+
this.causalHistorySize =
|
48
|
+
options.causalHistorySize ?? DEFAULT_CAUSAL_HISTORY_SIZE;
|
34
49
|
this.acknowledgementCount = this.getAcknowledgementCount();
|
35
50
|
this.timeReceived = new Map();
|
51
|
+
this.receivedMessageTimeoutEnabled =
|
52
|
+
options.receivedMessageTimeoutEnabled ?? false;
|
53
|
+
this.receivedMessageTimeout =
|
54
|
+
options.receivedMessageTimeout ?? DEFAULT_RECEIVED_MESSAGE_TIMEOUT;
|
55
|
+
}
|
56
|
+
// Periodically called by the library consumer to process async operations
|
57
|
+
// in a sequential manner.
|
58
|
+
async processTasks() {
|
59
|
+
while (this.tasks.length > 0) {
|
60
|
+
const item = this.tasks.shift();
|
61
|
+
if (!item) {
|
62
|
+
continue;
|
63
|
+
}
|
64
|
+
// Use a generic helper function to ensure type safety
|
65
|
+
await this.executeTask(item);
|
66
|
+
}
|
67
|
+
}
|
68
|
+
async executeTask(item) {
|
69
|
+
const handler = this.handlers[item.command];
|
70
|
+
await handler(item.params);
|
36
71
|
}
|
37
72
|
static getMessageId(payload) {
|
38
73
|
return bytesToHex(sha256(payload));
|
@@ -54,27 +89,81 @@ export class MessageChannel {
|
|
54
89
|
* @param callback - A callback function that returns a boolean indicating whether the message was sent successfully.
|
55
90
|
*/
|
56
91
|
async sendMessage(payload, callback) {
|
92
|
+
this.tasks.push({
|
93
|
+
command: Command.Send,
|
94
|
+
params: {
|
95
|
+
payload,
|
96
|
+
callback
|
97
|
+
}
|
98
|
+
});
|
99
|
+
}
|
100
|
+
async _sendMessage(payload, callback) {
|
57
101
|
this.lamportTimestamp++;
|
58
102
|
const messageId = MessageChannel.getMessageId(payload);
|
59
103
|
const message = {
|
60
104
|
messageId,
|
61
105
|
channelId: this.channelId,
|
62
106
|
lamportTimestamp: this.lamportTimestamp,
|
63
|
-
causalHistory: this.
|
107
|
+
causalHistory: this.localHistory
|
64
108
|
.slice(-this.causalHistorySize)
|
65
|
-
.map(({
|
109
|
+
.map(({ historyEntry }) => historyEntry),
|
66
110
|
bloomFilter: this.filter.toBytes(),
|
67
111
|
content: payload
|
68
112
|
};
|
69
113
|
this.outgoingBuffer.push(message);
|
70
114
|
if (callback) {
|
71
|
-
const success = await callback(message);
|
115
|
+
const { success, retrievalHint } = await callback(message);
|
72
116
|
if (success) {
|
73
117
|
this.filter.insert(messageId);
|
74
|
-
this.
|
118
|
+
this.localHistory.push({
|
119
|
+
timestamp: this.lamportTimestamp,
|
120
|
+
historyEntry: {
|
121
|
+
messageId,
|
122
|
+
retrievalHint
|
123
|
+
}
|
124
|
+
});
|
125
|
+
this.timeReceived.set(messageId, Date.now());
|
126
|
+
this.safeDispatchEvent(MessageChannelEvent.MessageSent, {
|
127
|
+
detail: message
|
128
|
+
});
|
75
129
|
}
|
76
130
|
}
|
77
131
|
}
|
132
|
+
/**
|
133
|
+
* Sends a short-lived message without synchronization or reliability requirements.
|
134
|
+
*
|
135
|
+
* Sends a message without a timestamp, causal history, or bloom filter.
|
136
|
+
* Ephemeral messages are not added to the outgoing buffer.
|
137
|
+
* Upon reception, ephemeral messages are delivered immediately without
|
138
|
+
* checking for causal dependencies or including in the local log.
|
139
|
+
*
|
140
|
+
* See https://rfc.vac.dev/vac/raw/sds/#ephemeral-messages
|
141
|
+
*
|
142
|
+
* @param payload - The payload to send.
|
143
|
+
* @param callback - A callback function that returns a boolean indicating whether the message was sent successfully.
|
144
|
+
*/
|
145
|
+
async sendEphemeralMessage(payload, callback) {
|
146
|
+
this.tasks.push({
|
147
|
+
command: Command.SendEphemeral,
|
148
|
+
params: {
|
149
|
+
payload,
|
150
|
+
callback
|
151
|
+
}
|
152
|
+
});
|
153
|
+
}
|
154
|
+
async _sendEphemeralMessage(payload, callback) {
|
155
|
+
const message = {
|
156
|
+
messageId: MessageChannel.getMessageId(payload),
|
157
|
+
channelId: this.channelId,
|
158
|
+
content: payload,
|
159
|
+
lamportTimestamp: undefined,
|
160
|
+
causalHistory: [],
|
161
|
+
bloomFilter: undefined
|
162
|
+
};
|
163
|
+
if (callback) {
|
164
|
+
await callback(message);
|
165
|
+
}
|
166
|
+
}
|
78
167
|
/**
|
79
168
|
* Process a received SDS message for this channel.
|
80
169
|
*
|
@@ -90,6 +179,35 @@ export class MessageChannel {
|
|
90
179
|
* @param message - The received SDS message.
|
91
180
|
*/
|
92
181
|
receiveMessage(message) {
|
182
|
+
this.tasks.push({
|
183
|
+
command: Command.Receive,
|
184
|
+
params: {
|
185
|
+
message
|
186
|
+
}
|
187
|
+
});
|
188
|
+
}
|
189
|
+
_receiveMessage(message) {
|
190
|
+
if (message.content &&
|
191
|
+
message.content.length > 0 &&
|
192
|
+
this.timeReceived.has(message.messageId)) {
|
193
|
+
// Received a duplicate message
|
194
|
+
return;
|
195
|
+
}
|
196
|
+
if (!message.lamportTimestamp) {
|
197
|
+
// Messages with no timestamp are ephemeral messages and should be delivered immediately
|
198
|
+
this.deliverMessage(message);
|
199
|
+
return;
|
200
|
+
}
|
201
|
+
if (message.content?.length === 0) {
|
202
|
+
this.safeDispatchEvent(MessageChannelEvent.SyncReceived, {
|
203
|
+
detail: message
|
204
|
+
});
|
205
|
+
}
|
206
|
+
else {
|
207
|
+
this.safeDispatchEvent(MessageChannelEvent.MessageReceived, {
|
208
|
+
detail: message
|
209
|
+
});
|
210
|
+
}
|
93
211
|
// review ack status
|
94
212
|
this.reviewAckStatus(message);
|
95
213
|
// add to bloom filter (skip for messages with empty content)
|
@@ -97,24 +215,38 @@ export class MessageChannel {
|
|
97
215
|
this.filter.insert(message.messageId);
|
98
216
|
}
|
99
217
|
// verify causal history
|
100
|
-
const dependenciesMet = message.causalHistory.every((
|
218
|
+
const dependenciesMet = message.causalHistory.every((historyEntry) => this.localHistory.some(({ historyEntry: { messageId } }) => messageId === historyEntry.messageId));
|
101
219
|
if (!dependenciesMet) {
|
102
220
|
this.incomingBuffer.push(message);
|
103
221
|
this.timeReceived.set(message.messageId, Date.now());
|
104
222
|
}
|
105
223
|
else {
|
106
224
|
this.deliverMessage(message);
|
225
|
+
this.safeDispatchEvent(MessageChannelEvent.MessageDelivered, {
|
226
|
+
detail: {
|
227
|
+
messageId: message.messageId,
|
228
|
+
sentOrReceived: "received"
|
229
|
+
}
|
230
|
+
});
|
107
231
|
}
|
108
232
|
}
|
109
233
|
// https://rfc.vac.dev/vac/raw/sds/#periodic-incoming-buffer-sweep
|
234
|
+
// Note that even though this function has side effects, it is not async
|
235
|
+
// and does not need to be called through the queue.
|
110
236
|
sweepIncomingBuffer() {
|
111
237
|
const { buffer, missing } = this.incomingBuffer.reduce(({ buffer, missing }, message) => {
|
112
238
|
// Check each message for missing dependencies
|
113
|
-
const missingDependencies = message.causalHistory.filter((
|
239
|
+
const missingDependencies = message.causalHistory.filter((messageHistoryEntry) => !this.localHistory.some(({ historyEntry: { messageId } }) => messageId === messageHistoryEntry.messageId));
|
114
240
|
if (missingDependencies.length === 0) {
|
115
241
|
// Any message with no missing dependencies is delivered
|
116
242
|
// and removed from the buffer (implicitly by not adding it to the new incoming buffer)
|
117
243
|
this.deliverMessage(message);
|
244
|
+
this.safeDispatchEvent(MessageChannelEvent.MessageDelivered, {
|
245
|
+
detail: {
|
246
|
+
messageId: message.messageId,
|
247
|
+
sentOrReceived: "received"
|
248
|
+
}
|
249
|
+
});
|
118
250
|
return { buffer, missing };
|
119
251
|
}
|
120
252
|
// Optionally, if a message has not been received after a predetermined amount of time,
|
@@ -128,14 +260,20 @@ export class MessageChannel {
|
|
128
260
|
}
|
129
261
|
// Any message with missing dependencies stays in the buffer
|
130
262
|
// and the missing message IDs are returned for processing.
|
263
|
+
missingDependencies.forEach((dependency) => {
|
264
|
+
missing.add(dependency);
|
265
|
+
});
|
131
266
|
return {
|
132
267
|
buffer: buffer.concat(message),
|
133
|
-
missing
|
268
|
+
missing
|
134
269
|
};
|
135
|
-
}, { buffer: new Array(), missing: new
|
270
|
+
}, { buffer: new Array(), missing: new Set() });
|
136
271
|
// Update the incoming buffer to only include messages with no missing dependencies
|
137
272
|
this.incomingBuffer = buffer;
|
138
|
-
|
273
|
+
this.safeDispatchEvent(MessageChannelEvent.MissedMessages, {
|
274
|
+
detail: Array.from(missing)
|
275
|
+
});
|
276
|
+
return Array.from(missing);
|
139
277
|
}
|
140
278
|
// https://rfc.vac.dev/vac/raw/sds/#periodic-outgoing-buffer-sweep
|
141
279
|
sweepOutgoingBuffer() {
|
@@ -166,32 +304,38 @@ export class MessageChannel {
|
|
166
304
|
*
|
167
305
|
* @param callback - A callback function that returns a boolean indicating whether the message was sent successfully.
|
168
306
|
*/
|
169
|
-
sendSyncMessage(callback) {
|
307
|
+
async sendSyncMessage(callback) {
|
170
308
|
this.lamportTimestamp++;
|
171
309
|
const emptyMessage = new Uint8Array();
|
172
310
|
const message = {
|
173
311
|
messageId: MessageChannel.getMessageId(emptyMessage),
|
174
312
|
channelId: this.channelId,
|
175
313
|
lamportTimestamp: this.lamportTimestamp,
|
176
|
-
causalHistory: this.
|
314
|
+
causalHistory: this.localHistory
|
177
315
|
.slice(-this.causalHistorySize)
|
178
|
-
.map(({
|
316
|
+
.map(({ historyEntry }) => historyEntry),
|
179
317
|
bloomFilter: this.filter.toBytes(),
|
180
318
|
content: emptyMessage
|
181
319
|
};
|
182
320
|
if (callback) {
|
183
|
-
|
321
|
+
await callback(message);
|
322
|
+
this.safeDispatchEvent(MessageChannelEvent.SyncSent, {
|
323
|
+
detail: message
|
324
|
+
});
|
325
|
+
return true;
|
184
326
|
}
|
185
|
-
return
|
327
|
+
return false;
|
186
328
|
}
|
187
329
|
// See https://rfc.vac.dev/vac/raw/sds/#deliver-message
|
188
|
-
deliverMessage(message) {
|
330
|
+
deliverMessage(message, retrievalHint) {
|
189
331
|
const messageLamportTimestamp = message.lamportTimestamp ?? 0;
|
190
332
|
if (messageLamportTimestamp > this.lamportTimestamp) {
|
191
333
|
this.lamportTimestamp = messageLamportTimestamp;
|
192
334
|
}
|
193
|
-
if (message.content?.length === 0
|
335
|
+
if (message.content?.length === 0 ||
|
336
|
+
message.lamportTimestamp === undefined) {
|
194
337
|
// Messages with empty content are sync messages.
|
338
|
+
// Messages with no timestamp are ephemeral messages.
|
195
339
|
// They are not added to the local log or bloom filter.
|
196
340
|
return;
|
197
341
|
}
|
@@ -200,15 +344,18 @@ export class MessageChannel {
|
|
200
344
|
// If one or more message IDs with the same Lamport timestamp already exists,
|
201
345
|
// the participant MUST follow the Resolve Conflicts procedure.
|
202
346
|
// https://rfc.vac.dev/vac/raw/sds/#resolve-conflicts
|
203
|
-
this.
|
347
|
+
this.localHistory.push({
|
204
348
|
timestamp: messageLamportTimestamp,
|
205
|
-
|
349
|
+
historyEntry: {
|
350
|
+
messageId: message.messageId,
|
351
|
+
retrievalHint
|
352
|
+
}
|
206
353
|
});
|
207
|
-
this.
|
354
|
+
this.localHistory.sort((a, b) => {
|
208
355
|
if (a.timestamp !== b.timestamp) {
|
209
356
|
return a.timestamp - b.timestamp;
|
210
357
|
}
|
211
|
-
return a.messageId.localeCompare(b.messageId);
|
358
|
+
return a.historyEntry.messageId.localeCompare(b.historyEntry.messageId);
|
212
359
|
});
|
213
360
|
}
|
214
361
|
// For each received message (including sync messages), inspect the causal history and bloom filter
|
@@ -216,8 +363,16 @@ export class MessageChannel {
|
|
216
363
|
// See https://rfc.vac.dev/vac/raw/sds/#review-ack-status
|
217
364
|
reviewAckStatus(receivedMessage) {
|
218
365
|
// the participant MUST mark all messages in the received causal_history as acknowledged.
|
219
|
-
receivedMessage.causalHistory.forEach((messageId) => {
|
220
|
-
this.outgoingBuffer = this.outgoingBuffer.filter((
|
366
|
+
receivedMessage.causalHistory.forEach(({ messageId }) => {
|
367
|
+
this.outgoingBuffer = this.outgoingBuffer.filter(({ messageId: outgoingMessageId }) => {
|
368
|
+
if (outgoingMessageId !== messageId) {
|
369
|
+
return true;
|
370
|
+
}
|
371
|
+
this.safeDispatchEvent(MessageChannelEvent.MessageAcknowledged, {
|
372
|
+
detail: messageId
|
373
|
+
});
|
374
|
+
return false;
|
375
|
+
});
|
221
376
|
this.acknowledgements.delete(messageId);
|
222
377
|
if (!this.filter.lookup(messageId)) {
|
223
378
|
this.filter.insert(messageId);
|
@@ -238,6 +393,12 @@ export class MessageChannel {
|
|
238
393
|
const count = (this.acknowledgements.get(message.messageId) ?? 0) + 1;
|
239
394
|
if (count < this.acknowledgementCount) {
|
240
395
|
this.acknowledgements.set(message.messageId, count);
|
396
|
+
this.safeDispatchEvent(MessageChannelEvent.PartialAcknowledgement, {
|
397
|
+
detail: {
|
398
|
+
messageId: message.messageId,
|
399
|
+
count
|
400
|
+
}
|
401
|
+
});
|
241
402
|
return true;
|
242
403
|
}
|
243
404
|
this.acknowledgements.delete(message.messageId);
|
@@ -249,4 +410,4 @@ export class MessageChannel {
|
|
249
410
|
return 2;
|
250
411
|
}
|
251
412
|
}
|
252
|
-
//# sourceMappingURL=
|
413
|
+
//# 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 @@
|
|
1
|
-
{"name":"@waku/sds","version":"0.0.
|
1
|
+
{"name":"@waku/sds","version":"0.0.4-006cd41.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/message-hash":"0.1.20-006cd41.0","@waku/proto":"0.0.11-006cd41.0","@waku/utils":"0.0.24-006cd41.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,5 +1,5 @@
|
|
1
|
-
import { hashN } from "
|
2
|
-
import { getMOverNBitsForK } from "
|
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
@@ -0,0 +1,34 @@
|
|
1
|
+
import { Message } from "./events.js";
|
2
|
+
|
3
|
+
export enum Command {
|
4
|
+
Send = "send",
|
5
|
+
Receive = "receive",
|
6
|
+
SendEphemeral = "sendEphemeral"
|
7
|
+
}
|
8
|
+
|
9
|
+
export interface ParamsByAction {
|
10
|
+
[Command.Send]: {
|
11
|
+
payload: Uint8Array;
|
12
|
+
callback?: (message: Message) => Promise<{
|
13
|
+
success: boolean;
|
14
|
+
retrievalHint?: Uint8Array;
|
15
|
+
}>;
|
16
|
+
};
|
17
|
+
[Command.Receive]: {
|
18
|
+
message: Message;
|
19
|
+
};
|
20
|
+
[Command.SendEphemeral]: {
|
21
|
+
payload: Uint8Array;
|
22
|
+
callback?: (message: Message) => Promise<boolean>;
|
23
|
+
};
|
24
|
+
}
|
25
|
+
|
26
|
+
export type Task<A extends Command = Command> = {
|
27
|
+
command: A;
|
28
|
+
params: ParamsByAction[A];
|
29
|
+
};
|
30
|
+
|
31
|
+
// Define a mapping for handlers based on action type
|
32
|
+
export type Handlers = {
|
33
|
+
[A in Command]: (params: ParamsByAction[A]) => Promise<void>;
|
34
|
+
};
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import { proto_sds_message } from "@waku/proto";
|
2
|
+
|
3
|
+
export enum MessageChannelEvent {
|
4
|
+
MessageSent = "messageSent",
|
5
|
+
MessageDelivered = "messageDelivered",
|
6
|
+
MessageReceived = "messageReceived",
|
7
|
+
MessageAcknowledged = "messageAcknowledged",
|
8
|
+
PartialAcknowledgement = "partialAcknowledgement",
|
9
|
+
MissedMessages = "missedMessages",
|
10
|
+
SyncSent = "syncSent",
|
11
|
+
SyncReceived = "syncReceived"
|
12
|
+
}
|
13
|
+
|
14
|
+
export type Message = proto_sds_message.SdsMessage;
|
15
|
+
export type HistoryEntry = proto_sds_message.HistoryEntry;
|
16
|
+
export type ChannelId = string;
|
17
|
+
|
18
|
+
export function encodeMessage(message: Message): Uint8Array {
|
19
|
+
return proto_sds_message.SdsMessage.encode(message);
|
20
|
+
}
|
21
|
+
|
22
|
+
export function decodeMessage(data: Uint8Array): Message {
|
23
|
+
return proto_sds_message.SdsMessage.decode(data);
|
24
|
+
}
|
25
|
+
|
26
|
+
export type MessageChannelEvents = {
|
27
|
+
[MessageChannelEvent.MessageSent]: CustomEvent<Message>;
|
28
|
+
[MessageChannelEvent.MessageDelivered]: CustomEvent<{
|
29
|
+
messageId: string;
|
30
|
+
sentOrReceived: "sent" | "received";
|
31
|
+
}>;
|
32
|
+
[MessageChannelEvent.MessageReceived]: CustomEvent<Message>;
|
33
|
+
[MessageChannelEvent.MessageAcknowledged]: CustomEvent<string>;
|
34
|
+
[MessageChannelEvent.PartialAcknowledgement]: CustomEvent<{
|
35
|
+
messageId: string;
|
36
|
+
count: number;
|
37
|
+
}>;
|
38
|
+
[MessageChannelEvent.MissedMessages]: CustomEvent<HistoryEntry[]>;
|
39
|
+
[MessageChannelEvent.SyncSent]: CustomEvent<Message>;
|
40
|
+
[MessageChannelEvent.SyncReceived]: CustomEvent<Message>;
|
41
|
+
};
|