Skip to content

@thuum/transport

Terminal window
npm install @thuum/transport

@thuum/transport provides a MessageTransport interface for bidirectional message passing:

  • createTransport(options) — Factory that creates a transport of the specified type
  • MessageTransport — Interface with receiver (subscribe) and sender (publish) sides

Creates a MessageTransport instance of the specified type.

import { createTransport } from "@thuum/transport";
const transport = createTransport({
type: "window-custom-event",
namespace: "my-app",
});
// Subscribe to a topic
const unsubscribe = transport.receiver.on("greeting", (message) => {
console.log("Received:", message);
});
// Send a message
transport.sender.send("greeting", { text: "Hello!" });
// Cleanup
unsubscribe();
interface MessageTransport<R extends MessageMap, S extends MessageMap> {
readonly receiver: MessageReceiver<R>;
readonly sender: MessageSender<S>;
readonly namespace: string;
}
interface MessageReceiver<Map extends MessageMap> {
on<K extends keyof Map & string>(topic: K, handler: (message: Map[K]) => void): () => void;
}
interface MessageSender<Map extends MessageMap> {
send<K extends keyof Map & string>(topic: K, message: Map[K]): void;
}
TypeStatus
window-custom-eventAvailable
window-message-eventPlanned
broadcast-message-eventPlanned

Uses window.addEventListener / window.dispatchEvent with CustomEvent. Events are scoped by namespace as "namespace:topic".

Messages are dispatched asynchronously via queueMicrotask and the transport object is frozen to prevent mutation.