@waku/sds 0.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nim_hashn.mjs","sourceRoot":"","sources":["../../src/nim_hashn/nim_hashn.mjs"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Represents the error rates for a given number of hash functions (k) across
3
+ * different (m/n) ratios (i.e., bits per element).
4
+ */
5
+ type TErrorForK = Float32Array;
6
+ /**
7
+ * An array where each index corresponds to a value of k (the number of hash functions),
8
+ * and each element is a vector of false-positive rates for varying bits-per-element ratios.
9
+ * Example:
10
+ * ```ts
11
+ * // Probability of a false positive upon lookup when using 1 hash function (k=1)
12
+ * // and 15 bits per element (mOverN=15):
13
+ * const falsePositiveRate = kErrors[1][15];
14
+ * ```
15
+ */
16
+ type TAllErrorRates = Array<TErrorForK>;
17
+ /**
18
+ * Table of false positive rates for values of k from 0 to 12, and bits-per-element
19
+ * ratios ranging from 0 up to around 32. Each Float32Array is indexed by mOverN,
20
+ * so kErrors[k][mOverN] gives the estimated false-positive probability.
21
+ *
22
+ * These values mirror commonly used reference data found in Bloom filter literature,
23
+ * such as:
24
+ * https://pages.cs.wisc.edu/~cao/papers/summary-cache/node8.html
25
+ * https://dl.acm.org/doi/pdf/10.1145/362686.362692
26
+ */
27
+ export declare const kErrors: TAllErrorRates;
28
+ export declare const KTooLargeError = "K must be <= 12";
29
+ export declare const NoSuitableRatioError = "Specified value of k and error rate not achievable using less than 4 bytes / element.";
30
+ /**
31
+ * Given a number of hash functions (k) and a target false-positive rate (targetError),
32
+ * determines the minimum (m/n) bits-per-element that satisfies the error threshold.
33
+ *
34
+ * In the context of a Bloom filter:
35
+ * - m is the total number of bits in the filter.
36
+ * - n is the number of elements you expect to insert.
37
+ * Thus, (m/n) describes how many bits are assigned per inserted element.
38
+ *
39
+ * Example:
40
+ * ```ts
41
+ * // We want to use 3 hash functions (k=3) and a false-positive rate of 1% (targetError=0.01).
42
+ * const mOverN = getMOverNBitsForK(3, 0.01);
43
+ * // The function will iterate through the error tables and find the smallest m/n that satisfies the error threshold.
44
+ * // In this case, kErrors[3][5] is the first value in the vector kErrors[3] that is less than 0.01 (0.0920000000).
45
+ * console.log(mOverN); // 5
46
+ * ```
47
+ *
48
+ * @param k - The number of hash functions.
49
+ * @param targetError - The desired maximum false-positive rate.
50
+ * @param probabilityTable - An optional table of false-positive probabilities indexed by k.
51
+ * @returns The smallest (m/n) bit ratio for which the false-positive rate is below targetError.
52
+ * @throws If k is out of range or if no suitable ratio can be found.
53
+ */
54
+ export declare function getMOverNBitsForK(k: number, targetError: number, probabilityTable?: TAllErrorRates): number;
55
+ export {};
@@ -0,0 +1,130 @@
1
+ // This file contains the probability tables used to determine the optimal number of
2
+ // hash functions (k) and bits per element (m/n) for a Bloom filter.
3
+ //
4
+ // These are used to determine how to construct a Bloom filter that can perform
5
+ // lookups with false-positive rate low enough to be satisfactory.
6
+ /**
7
+ * Table of false positive rates for values of k from 0 to 12, and bits-per-element
8
+ * ratios ranging from 0 up to around 32. Each Float32Array is indexed by mOverN,
9
+ * so kErrors[k][mOverN] gives the estimated false-positive probability.
10
+ *
11
+ * These values mirror commonly used reference data found in Bloom filter literature,
12
+ * such as:
13
+ * https://pages.cs.wisc.edu/~cao/papers/summary-cache/node8.html
14
+ * https://dl.acm.org/doi/pdf/10.1145/362686.362692
15
+ */
16
+ // prettier-ignore
17
+ export const kErrors = [
18
+ new Float32Array([1.0]),
19
+ new Float32Array([1.0, 1.0, 0.3930000000, 0.2830000000, 0.2210000000, 0.1810000000,
20
+ 0.1540000000, 0.1330000000, 0.1180000000, 0.1050000000, 0.0952000000,
21
+ 0.0869000000, 0.0800000000, 0.0740000000, 0.0689000000, 0.0645000000,
22
+ 0.0606000000, 0.0571000000, 0.0540000000, 0.0513000000, 0.0488000000,
23
+ 0.0465000000, 0.0444000000, 0.0425000000, 0.0408000000, 0.0392000000,
24
+ 0.0377000000, 0.0364000000, 0.0351000000, 0.0339000000, 0.0328000000,
25
+ 0.0317000000, 0.0308000000]),
26
+ new Float32Array([1.0, 1.0, 0.4000000000, 0.2370000000, 0.1550000000, 0.1090000000,
27
+ 0.0804000000, 0.0618000000, 0.0489000000, 0.0397000000, 0.0329000000,
28
+ 0.0276000000, 0.0236000000, 0.0203000000, 0.0177000000, 0.0156000000,
29
+ 0.0138000000, 0.0123000000, 0.0111000000, 0.0099800000, 0.0090600000,
30
+ 0.0082500000, 0.0075500000, 0.0069400000, 0.0063900000, 0.0059100000,
31
+ 0.0054800000, 0.0051000000, 0.0047500000, 0.0044400000, 0.0041600000,
32
+ 0.0039000000, 0.0036700000]),
33
+ new Float32Array([1.0, 1.0, 1.0, 0.2530000000, 0.1470000000, 0.0920000000,
34
+ 0.0609000000, 0.0423000000, 0.0306000000, 0.0228000000, 0.0174000000,
35
+ 0.0136000000, 0.0108000000, 0.0087500000, 0.0071800000, 0.0059600000,
36
+ 0.0108000000, 0.0087500000, 0.0071800000, 0.0059600000, 0.0050000000,
37
+ 0.0042300000, 0.0036200000, 0.0031200000, 0.0027000000, 0.0023600000,
38
+ 0.0020700000, 0.0018300000, 0.0016200000, 0.0014500000, 0.0012900000,
39
+ 0.0011600000, 0.0010500000, 0.0009490000, 0.0008620000, 0.0007850000,
40
+ 0.0007170000]),
41
+ new Float32Array([1.0, 1.0, 1.0, 1.0, 0.1600000000, 0.0920000000, 0.0561000000, 0.0359000000,
42
+ 0.0240000000, 0.0166000000, 0.0118000000, 0.0086400000, 0.0064600000,
43
+ 0.0049200000, 0.0038100000, 0.0030000000, 0.0023900000, 0.0019300000,
44
+ 0.0015800000, 0.0013000000, 0.0010800000, 0.0009050000, 0.0007640000,
45
+ 0.0006490000, 0.0005550000, 0.0004780000, 0.0004130000, 0.0003590000,
46
+ 0.0003140000, 0.0002760000, 0.0002430000, 0.0002150000, 0.0001910000]),
47
+ new Float32Array([1.0, 1.0, 1.0, 1.0, 1.0, 0.1010000000, 0.0578000000, 0.0347000000,
48
+ 0.0217000000, 0.0141000000, 0.0094300000, 0.0065000000, 0.0045900000,
49
+ 0.0033200000, 0.0024400000, 0.0018300000, 0.0013900000, 0.0010700000,
50
+ 0.0008390000, 0.0006630000, 0.0005300000, 0.0004270000, 0.0003470000,
51
+ 0.0002850000, 0.0002350000, 0.0001960000, 0.0001640000, 0.0001380000,
52
+ 0.0001170000, 0.0000996000, 0.0000853000, 0.0000733000, 0.0000633000]),
53
+ new Float32Array([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0638000000, 0.0364000000, 0.0216000000,
54
+ 0.0133000000, 0.0084400000, 0.0055200000, 0.0037100000, 0.0025500000,
55
+ 0.0017900000, 0.0012800000, 0.0009350000, 0.0006920000, 0.0005190000,
56
+ 0.0003940000, 0.0003030000, 0.0002360000, 0.0001850000, 0.0001470000,
57
+ 0.0001170000, 0.0000944000, 0.0000766000, 0.0000626000, 0.0000515000,
58
+ 0.0000426000, 0.0000355000, 0.0000297000, 0.0000250000]),
59
+ new Float32Array([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0229000000, 0.0135000000, 0.0081900000,
60
+ 0.0051300000, 0.0032900000, 0.0021700000, 0.0014600000, 0.0010000000,
61
+ 0.0007020000, 0.0004990000, 0.0003600000, 0.0002640000, 0.0001960000,
62
+ 0.0001470000, 0.0001120000, 0.0000856000, 0.0000663000, 0.0000518000,
63
+ 0.0000408000, 0.0000324000, 0.0000259000, 0.0000209000, 0.0000169000,
64
+ 0.0000138000, 0.0000113000]),
65
+ new Float32Array([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
66
+ 1.0, 0.0145000000, 0.0084600000, 0.0050900000, 0.0031400000, 0.0019900000,
67
+ 0.0012900000, 0.0008520000, 0.0005740000, 0.0003940000, 0.0002750000,
68
+ 0.0001940000, 0.0001400000, 0.0001010000, 0.0000746000, 0.0000555000,
69
+ 0.0000417000, 0.0000316000, 0.0000242000, 0.0000187000, 0.0000146000,
70
+ 0.0000114000, 0.0000090100, 0.0000071600, 0.0000057300]),
71
+ new Float32Array([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0053100000, 0.0031700000,
72
+ 0.0019400000, 0.0012100000, 0.0007750000, 0.0005050000, 0.0003350000,
73
+ 0.0002260000, 0.0001550000, 0.0001080000, 0.0000759000, 0.0000542000,
74
+ 0.0000392000, 0.0000286000, 0.0000211000, 0.0000157000, 0.0000118000,
75
+ 0.0000089600, 0.0000068500, 0.0000052800, 0.0000041000, 0.0000032000]),
76
+ new Float32Array([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0033400000,
77
+ 0.0019800000, 0.0012000000, 0.0007440000, 0.0004700000, 0.0003020000,
78
+ 0.0001980000, 0.0001320000, 0.0000889000, 0.0000609000, 0.0000423000,
79
+ 0.0000297000, 0.0000211000, 0.0000152000, 0.0000110000, 0.0000080700,
80
+ 0.0000059700, 0.0000044500, 0.0000033500, 0.0000025400, 0.0000019400]),
81
+ new Float32Array([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
82
+ 0.0021000000, 0.0012400000, 0.0007470000, 0.0004590000, 0.0002870000,
83
+ 0.0001830000, 0.0001180000, 0.0000777000, 0.0000518000, 0.0000350000,
84
+ 0.0000240000, 0.0000166000, 0.0000116000, 0.0000082300, 0.0000058900,
85
+ 0.0000042500, 0.0000031000, 0.0000022800, 0.0000016900, 0.0000012600]),
86
+ new Float32Array([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
87
+ 0.0007780000, 0.0004660000, 0.0002840000, 0.0001760000, 0.0001110000,
88
+ 0.0000712000, 0.0000463000, 0.0000305000, 0.0000204000, 0.0000138000,
89
+ 0.0000094200, 0.0000065200, 0.0000045600, 0.0000032200, 0.0000022900,
90
+ 0.0000016500, 0.0000012000, 0.0000008740]),
91
+ ];
92
+ export const KTooLargeError = "K must be <= 12";
93
+ export const NoSuitableRatioError = "Specified value of k and error rate not achievable using less than 4 bytes / element.";
94
+ /**
95
+ * Given a number of hash functions (k) and a target false-positive rate (targetError),
96
+ * determines the minimum (m/n) bits-per-element that satisfies the error threshold.
97
+ *
98
+ * In the context of a Bloom filter:
99
+ * - m is the total number of bits in the filter.
100
+ * - n is the number of elements you expect to insert.
101
+ * Thus, (m/n) describes how many bits are assigned per inserted element.
102
+ *
103
+ * Example:
104
+ * ```ts
105
+ * // We want to use 3 hash functions (k=3) and a false-positive rate of 1% (targetError=0.01).
106
+ * const mOverN = getMOverNBitsForK(3, 0.01);
107
+ * // The function will iterate through the error tables and find the smallest m/n that satisfies the error threshold.
108
+ * // In this case, kErrors[3][5] is the first value in the vector kErrors[3] that is less than 0.01 (0.0920000000).
109
+ * console.log(mOverN); // 5
110
+ * ```
111
+ *
112
+ * @param k - The number of hash functions.
113
+ * @param targetError - The desired maximum false-positive rate.
114
+ * @param probabilityTable - An optional table of false-positive probabilities indexed by k.
115
+ * @returns The smallest (m/n) bit ratio for which the false-positive rate is below targetError.
116
+ * @throws If k is out of range or if no suitable ratio can be found.
117
+ */
118
+ export function getMOverNBitsForK(k, targetError, probabilityTable = kErrors) {
119
+ // Returns the optimal number of m/n bits for a given k.
120
+ if (k < 0 || k > 12) {
121
+ throw new Error(KTooLargeError);
122
+ }
123
+ for (let mOverN = 2; mOverN < probabilityTable[k].length; mOverN++) {
124
+ if (probabilityTable[k][mOverN] < targetError) {
125
+ return mOverN;
126
+ }
127
+ }
128
+ throw new Error(NoSuitableRatioError);
129
+ }
130
+ //# sourceMappingURL=probabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probabilities.js","sourceRoot":"","sources":["../src/probabilities.ts"],"names":[],"mappings":"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"}
package/dist/sds.d.ts ADDED
@@ -0,0 +1,74 @@
1
+ import { proto_sds_message } from "@waku/proto";
2
+ export type Message = proto_sds_message.SdsMessage;
3
+ export type ChannelId = string;
4
+ export declare const DEFAULT_BLOOM_FILTER_OPTIONS: {
5
+ capacity: number;
6
+ errorRate: number;
7
+ };
8
+ export declare class MessageChannel {
9
+ private receivedMessageTimeoutEnabled;
10
+ private receivedMessageTimeout;
11
+ private lamportTimestamp;
12
+ private filter;
13
+ private outgoingBuffer;
14
+ private acknowledgements;
15
+ private incomingBuffer;
16
+ private messageIdLog;
17
+ private channelId;
18
+ private causalHistorySize;
19
+ private acknowledgementCount;
20
+ private timeReceived;
21
+ constructor(channelId: ChannelId, causalHistorySize?: number, receivedMessageTimeoutEnabled?: boolean, receivedMessageTimeout?: number);
22
+ static getMessageId(payload: Uint8Array): string;
23
+ /**
24
+ * Send a message to the SDS channel.
25
+ *
26
+ * Increments the lamport timestamp, constructs a `Message` object
27
+ * with the given payload, and adds it to the outgoing buffer.
28
+ *
29
+ * If the callback is successful, the message is also added to
30
+ * the bloom filter and message history. In the context of
31
+ * Waku, this likely means the message was published via
32
+ * light push or relay.
33
+ *
34
+ * See https://rfc.vac.dev/vac/raw/sds/#send-message
35
+ *
36
+ * @param payload - The payload to send.
37
+ * @param callback - A callback function that returns a boolean indicating whether the message was sent successfully.
38
+ */
39
+ sendMessage(payload: Uint8Array, callback?: (message: Message) => Promise<boolean>): Promise<void>;
40
+ /**
41
+ * Process a received SDS message for this channel.
42
+ *
43
+ * Review the acknowledgement status of messages in the outgoing buffer
44
+ * by inspecting the received message's bloom filter and causal history.
45
+ * Add the received message to the bloom filter.
46
+ * If the local history contains every message in the received message's
47
+ * causal history, deliver the message. Otherwise, add the message to the
48
+ * incoming buffer.
49
+ *
50
+ * See https://rfc.vac.dev/vac/raw/sds/#receive-message
51
+ *
52
+ * @param message - The received SDS message.
53
+ */
54
+ receiveMessage(message: Message): void;
55
+ sweepIncomingBuffer(): string[];
56
+ sweepOutgoingBuffer(): {
57
+ unacknowledged: Message[];
58
+ possiblyAcknowledged: Message[];
59
+ };
60
+ /**
61
+ * Send a sync message to the SDS channel.
62
+ *
63
+ * Increments the lamport timestamp, constructs a `Message` object
64
+ * with an empty load. Skips outgoing buffer, filter, and local log.
65
+ *
66
+ * See https://rfc.vac.dev/vac/raw/sds/#send-sync-message
67
+ *
68
+ * @param callback - A callback function that returns a boolean indicating whether the message was sent successfully.
69
+ */
70
+ sendSyncMessage(callback?: (message: Message) => Promise<boolean>): Promise<boolean>;
71
+ private deliverMessage;
72
+ private reviewAckStatus;
73
+ private getAcknowledgementCount;
74
+ }
package/dist/sds.js ADDED
@@ -0,0 +1,252 @@
1
+ import { sha256 } from "@noble/hashes/sha256";
2
+ import { bytesToHex } from "@noble/hashes/utils";
3
+ import { DefaultBloomFilter } from "./bloom.js";
4
+ export const DEFAULT_BLOOM_FILTER_OPTIONS = {
5
+ capacity: 10000,
6
+ errorRate: 0.001
7
+ };
8
+ const DEFAULT_CAUSAL_HISTORY_SIZE = 2;
9
+ const DEFAULT_RECEIVED_MESSAGE_TIMEOUT = 1000 * 60 * 5; // 5 minutes
10
+ export class MessageChannel {
11
+ receivedMessageTimeoutEnabled;
12
+ receivedMessageTimeout;
13
+ lamportTimestamp;
14
+ filter;
15
+ outgoingBuffer;
16
+ acknowledgements;
17
+ incomingBuffer;
18
+ messageIdLog;
19
+ channelId;
20
+ causalHistorySize;
21
+ acknowledgementCount;
22
+ timeReceived;
23
+ constructor(channelId, causalHistorySize = DEFAULT_CAUSAL_HISTORY_SIZE, receivedMessageTimeoutEnabled = false, receivedMessageTimeout = DEFAULT_RECEIVED_MESSAGE_TIMEOUT) {
24
+ this.receivedMessageTimeoutEnabled = receivedMessageTimeoutEnabled;
25
+ this.receivedMessageTimeout = receivedMessageTimeout;
26
+ this.channelId = channelId;
27
+ this.lamportTimestamp = 0;
28
+ this.filter = new DefaultBloomFilter(DEFAULT_BLOOM_FILTER_OPTIONS);
29
+ this.outgoingBuffer = [];
30
+ this.acknowledgements = new Map();
31
+ this.incomingBuffer = [];
32
+ this.messageIdLog = [];
33
+ this.causalHistorySize = causalHistorySize;
34
+ this.acknowledgementCount = this.getAcknowledgementCount();
35
+ this.timeReceived = new Map();
36
+ }
37
+ static getMessageId(payload) {
38
+ return bytesToHex(sha256(payload));
39
+ }
40
+ /**
41
+ * Send a message to the SDS channel.
42
+ *
43
+ * Increments the lamport timestamp, constructs a `Message` object
44
+ * with the given payload, and adds it to the outgoing buffer.
45
+ *
46
+ * If the callback is successful, the message is also added to
47
+ * the bloom filter and message history. In the context of
48
+ * Waku, this likely means the message was published via
49
+ * light push or relay.
50
+ *
51
+ * See https://rfc.vac.dev/vac/raw/sds/#send-message
52
+ *
53
+ * @param payload - The payload to send.
54
+ * @param callback - A callback function that returns a boolean indicating whether the message was sent successfully.
55
+ */
56
+ async sendMessage(payload, callback) {
57
+ this.lamportTimestamp++;
58
+ const messageId = MessageChannel.getMessageId(payload);
59
+ const message = {
60
+ messageId,
61
+ channelId: this.channelId,
62
+ lamportTimestamp: this.lamportTimestamp,
63
+ causalHistory: this.messageIdLog
64
+ .slice(-this.causalHistorySize)
65
+ .map(({ messageId }) => messageId),
66
+ bloomFilter: this.filter.toBytes(),
67
+ content: payload
68
+ };
69
+ this.outgoingBuffer.push(message);
70
+ if (callback) {
71
+ const success = await callback(message);
72
+ if (success) {
73
+ this.filter.insert(messageId);
74
+ this.messageIdLog.push({ timestamp: this.lamportTimestamp, messageId });
75
+ }
76
+ }
77
+ }
78
+ /**
79
+ * Process a received SDS message for this channel.
80
+ *
81
+ * Review the acknowledgement status of messages in the outgoing buffer
82
+ * by inspecting the received message's bloom filter and causal history.
83
+ * Add the received message to the bloom filter.
84
+ * If the local history contains every message in the received message's
85
+ * causal history, deliver the message. Otherwise, add the message to the
86
+ * incoming buffer.
87
+ *
88
+ * See https://rfc.vac.dev/vac/raw/sds/#receive-message
89
+ *
90
+ * @param message - The received SDS message.
91
+ */
92
+ receiveMessage(message) {
93
+ // review ack status
94
+ this.reviewAckStatus(message);
95
+ // add to bloom filter (skip for messages with empty content)
96
+ if (message.content?.length && message.content.length > 0) {
97
+ this.filter.insert(message.messageId);
98
+ }
99
+ // verify causal history
100
+ const dependenciesMet = message.causalHistory.every((messageId) => this.messageIdLog.some(({ messageId: logMessageId }) => logMessageId === messageId));
101
+ if (!dependenciesMet) {
102
+ this.incomingBuffer.push(message);
103
+ this.timeReceived.set(message.messageId, Date.now());
104
+ }
105
+ else {
106
+ this.deliverMessage(message);
107
+ }
108
+ }
109
+ // https://rfc.vac.dev/vac/raw/sds/#periodic-incoming-buffer-sweep
110
+ sweepIncomingBuffer() {
111
+ const { buffer, missing } = this.incomingBuffer.reduce(({ buffer, missing }, message) => {
112
+ // Check each message for missing dependencies
113
+ const missingDependencies = message.causalHistory.filter((messageId) => !this.messageIdLog.some(({ messageId: logMessageId }) => logMessageId === messageId));
114
+ if (missingDependencies.length === 0) {
115
+ // Any message with no missing dependencies is delivered
116
+ // and removed from the buffer (implicitly by not adding it to the new incoming buffer)
117
+ this.deliverMessage(message);
118
+ return { buffer, missing };
119
+ }
120
+ // Optionally, if a message has not been received after a predetermined amount of time,
121
+ // it is marked as irretrievably lost (implicitly by removing it from the buffer without delivery)
122
+ if (this.receivedMessageTimeoutEnabled) {
123
+ const timeReceived = this.timeReceived.get(message.messageId);
124
+ if (timeReceived &&
125
+ Date.now() - timeReceived > this.receivedMessageTimeout) {
126
+ return { buffer, missing };
127
+ }
128
+ }
129
+ // Any message with missing dependencies stays in the buffer
130
+ // and the missing message IDs are returned for processing.
131
+ return {
132
+ buffer: buffer.concat(message),
133
+ missing: missing.concat(missingDependencies)
134
+ };
135
+ }, { buffer: new Array(), missing: new Array() });
136
+ // Update the incoming buffer to only include messages with no missing dependencies
137
+ this.incomingBuffer = buffer;
138
+ return missing;
139
+ }
140
+ // https://rfc.vac.dev/vac/raw/sds/#periodic-outgoing-buffer-sweep
141
+ sweepOutgoingBuffer() {
142
+ // Partition all messages in the outgoing buffer into unacknowledged and possibly acknowledged messages
143
+ return this.outgoingBuffer.reduce(({ unacknowledged, possiblyAcknowledged }, message) => {
144
+ if (this.acknowledgements.has(message.messageId)) {
145
+ return {
146
+ unacknowledged,
147
+ possiblyAcknowledged: possiblyAcknowledged.concat(message)
148
+ };
149
+ }
150
+ return {
151
+ unacknowledged: unacknowledged.concat(message),
152
+ possiblyAcknowledged
153
+ };
154
+ }, {
155
+ unacknowledged: new Array(),
156
+ possiblyAcknowledged: new Array()
157
+ });
158
+ }
159
+ /**
160
+ * Send a sync message to the SDS channel.
161
+ *
162
+ * Increments the lamport timestamp, constructs a `Message` object
163
+ * with an empty load. Skips outgoing buffer, filter, and local log.
164
+ *
165
+ * See https://rfc.vac.dev/vac/raw/sds/#send-sync-message
166
+ *
167
+ * @param callback - A callback function that returns a boolean indicating whether the message was sent successfully.
168
+ */
169
+ sendSyncMessage(callback) {
170
+ this.lamportTimestamp++;
171
+ const emptyMessage = new Uint8Array();
172
+ const message = {
173
+ messageId: MessageChannel.getMessageId(emptyMessage),
174
+ channelId: this.channelId,
175
+ lamportTimestamp: this.lamportTimestamp,
176
+ causalHistory: this.messageIdLog
177
+ .slice(-this.causalHistorySize)
178
+ .map(({ messageId }) => messageId),
179
+ bloomFilter: this.filter.toBytes(),
180
+ content: emptyMessage
181
+ };
182
+ if (callback) {
183
+ return callback(message);
184
+ }
185
+ return Promise.resolve(false);
186
+ }
187
+ // See https://rfc.vac.dev/vac/raw/sds/#deliver-message
188
+ deliverMessage(message) {
189
+ const messageLamportTimestamp = message.lamportTimestamp ?? 0;
190
+ if (messageLamportTimestamp > this.lamportTimestamp) {
191
+ this.lamportTimestamp = messageLamportTimestamp;
192
+ }
193
+ if (message.content?.length === 0) {
194
+ // Messages with empty content are sync messages.
195
+ // They are not added to the local log or bloom filter.
196
+ return;
197
+ }
198
+ // The participant MUST insert the message ID into its local log,
199
+ // based on Lamport timestamp.
200
+ // If one or more message IDs with the same Lamport timestamp already exists,
201
+ // the participant MUST follow the Resolve Conflicts procedure.
202
+ // https://rfc.vac.dev/vac/raw/sds/#resolve-conflicts
203
+ this.messageIdLog.push({
204
+ timestamp: messageLamportTimestamp,
205
+ messageId: message.messageId
206
+ });
207
+ this.messageIdLog.sort((a, b) => {
208
+ if (a.timestamp !== b.timestamp) {
209
+ return a.timestamp - b.timestamp;
210
+ }
211
+ return a.messageId.localeCompare(b.messageId);
212
+ });
213
+ }
214
+ // For each received message (including sync messages), inspect the causal history and bloom filter
215
+ // to determine the acknowledgement status of messages in the outgoing buffer.
216
+ // See https://rfc.vac.dev/vac/raw/sds/#review-ack-status
217
+ reviewAckStatus(receivedMessage) {
218
+ // the participant MUST mark all messages in the received causal_history as acknowledged.
219
+ receivedMessage.causalHistory.forEach((messageId) => {
220
+ this.outgoingBuffer = this.outgoingBuffer.filter((msg) => msg.messageId !== messageId);
221
+ this.acknowledgements.delete(messageId);
222
+ if (!this.filter.lookup(messageId)) {
223
+ this.filter.insert(messageId);
224
+ }
225
+ });
226
+ // the participant MUST mark all messages included in the bloom_filter as possibly acknowledged
227
+ if (!receivedMessage.bloomFilter) {
228
+ return;
229
+ }
230
+ const messageBloomFilter = DefaultBloomFilter.fromBytes(receivedMessage.bloomFilter, this.filter.options);
231
+ this.outgoingBuffer = this.outgoingBuffer.filter((message) => {
232
+ if (!messageBloomFilter.lookup(message.messageId)) {
233
+ return true;
234
+ }
235
+ // If a message appears as possibly acknowledged in multiple received bloom filters,
236
+ // the participant MAY mark it as acknowledged based on probabilistic grounds,
237
+ // taking into account the bloom filter size and hash number.
238
+ const count = (this.acknowledgements.get(message.messageId) ?? 0) + 1;
239
+ if (count < this.acknowledgementCount) {
240
+ this.acknowledgements.set(message.messageId, count);
241
+ return true;
242
+ }
243
+ this.acknowledgements.delete(message.messageId);
244
+ return false;
245
+ });
246
+ }
247
+ // TODO: this should be determined based on the bloom filter parameters and number of hashes
248
+ getAcknowledgementCount() {
249
+ return 2;
250
+ }
251
+ }
252
+ //# sourceMappingURL=sds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sds.js","sourceRoot":"","sources":["../src/sds.ts"],"names":[],"mappings":"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"}