diff --git a/packages/sds/src/bloom_filter/bloom.ts b/packages/sds/src/bloom_filter/bloom.ts index 22e4fff96a..6037d5f7f8 100644 --- a/packages/sds/src/bloom_filter/bloom.ts +++ b/packages/sds/src/bloom_filter/bloom.ts @@ -1,4 +1,4 @@ -import { hashN } from "../nim_hashn/nim_hashn.mjs.js"; +import { hashN } from "../nim_hashn/nim_hashn.mjs"; import { getMOverNBitsForK } from "../probabilities.js"; export interface BloomFilterOptions { diff --git a/packages/sds/src/index.ts b/packages/sds/src/index.ts index 9d1f887804..9938a8db88 100644 --- a/packages/sds/src/index.ts +++ b/packages/sds/src/index.ts @@ -1,5 +1,5 @@ import { BloomFilter } from "./bloom_filter/bloom.js"; -export * from "./message_channel/message_channel.js"; +export * from "./message_channel/index.js"; export { BloomFilter }; diff --git a/packages/sds/src/message_channel/events.ts b/packages/sds/src/message_channel/events.ts index dc3b3a97b4..e3ca17936e 100644 --- a/packages/sds/src/message_channel/events.ts +++ b/packages/sds/src/message_channel/events.ts @@ -15,6 +15,14 @@ export type Message = proto_sds_message.SdsMessage; export type HistoryEntry = proto_sds_message.HistoryEntry; export type ChannelId = string; +export function encodeMessage(message: Message): Uint8Array { + return proto_sds_message.SdsMessage.encode(message); +} + +export function decodeMessage(data: Uint8Array): Message { + return proto_sds_message.SdsMessage.decode(data); +} + export type MessageChannelEvents = { [MessageChannelEvent.MessageSent]: CustomEvent; [MessageChannelEvent.MessageDelivered]: CustomEvent<{ diff --git a/packages/sds/src/message_channel/index.ts b/packages/sds/src/message_channel/index.ts new file mode 100644 index 0000000000..0e575ed136 --- /dev/null +++ b/packages/sds/src/message_channel/index.ts @@ -0,0 +1,3 @@ +export * from "./command_queue.js"; +export * from "./events.js"; +export * from "./message_channel.js"; diff --git a/packages/sds/src/message_channel/message_channel.ts b/packages/sds/src/message_channel/message_channel.ts index 76aac63524..fbb0c679a4 100644 --- a/packages/sds/src/message_channel/message_channel.ts +++ b/packages/sds/src/message_channel/message_channel.ts @@ -298,7 +298,7 @@ export class MessageChannel extends TypedEventEmitter { public sweepIncomingBuffer(): HistoryEntry[] { const { buffer, missing } = this.incomingBuffer.reduce<{ buffer: Message[]; - missing: HistoryEntry[]; + missing: Set; }>( ({ buffer, missing }, message) => { // Check each message for missing dependencies @@ -335,21 +335,24 @@ export class MessageChannel extends TypedEventEmitter { } // Any message with missing dependencies stays in the buffer // and the missing message IDs are returned for processing. + missingDependencies.forEach((dependency) => { + missing.add(dependency); + }); return { buffer: buffer.concat(message), - missing: missing.concat(missingDependencies) + missing }; }, - { buffer: new Array(), missing: new Array() } + { buffer: new Array(), missing: new Set() } ); // Update the incoming buffer to only include messages with no missing dependencies this.incomingBuffer = buffer; - if (missing.length > 0) { + if (missing.size > 0) { this.safeDispatchEvent(MessageChannelEvent.MissedMessages, { - detail: missing + detail: Array.from(missing) }); } - return missing; + return Array.from(missing); } // https://rfc.vac.dev/vac/raw/sds/#periodic-outgoing-buffer-sweep