Skip to content
TypeWire

@tahanabavi/typesocket

v2.2.0

Contract-driven, type-safe Socket.IO client — one Zod contract validated in both directions, with acks, middleware, queueing and a devtools instrumentation seam.

Emitting

ts
// Ack declared → Promise, rejecting on validation failure or timeout.
const ack = await client.modules.chat.sendMessage(
{ roomId: "r1", text: "hi" },
{ timeoutMs: 3_000, signal: controller.signal },
);

// No ack declared → void, throwing synchronously on an invalid payload.
client.modules.chat.typing({ roomId: "r1", isTyping: true });

// Validate now, send on the next connect.
client.modules.chat.typing.queue({ roomId: "r1", isTyping: false });

queue() validates at call time, so a malformed payload fails where you wrote it instead of going out unvalidated minutes later. Buffered frames flush in order on connect; the buffer is bounded by maxQueueSize (default 100) and evicts oldest-first.

Acks are validated. If the server answers sendMessage with something that doesn't match the ack schema, the promise rejects with a SocketValidationError rather than resolving a value whose type is a lie.