Session Decoder
The session decoder maintains state required by Stateful Profile messages. Use it on the consumer side of an ordered channel (WebSocket, ordered queue, persistent RPC stream) to reconstruct full values from STATE_PATCH frames.
Session encoders and session decoders are separate objects. Their states stay aligned only by processing the same ordered byte sequence. On a bidirectional connection, outbound encode state and inbound decode state must remain independent.
Creating a decoder
JavaScript
import { createSessionDecoder, init } from "@twilic/core";
await init();
const dec = createSessionDecoder({
maxBaseSnapshots: 8,
unknownReferencePolicy: "statelessRetry",
});
const value = dec.decode(bytes);
dec.reset();Rust
use twilic::{create_session_decoder, SessionOptions};
let mut dec = create_session_decoder(SessionOptions::default());
let value = dec.decode(&bytes)?;
dec.reset();SessionOptions are shared with Session Encoder.
API
class SessionDecoder {
decode(bytes: Uint8Array): TwilicValue;
reset(): void;
}| Method | Description |
|---|---|
decode() | Returns the application value for a full message, or the reconstructed value after applying a STATE_PATCH |
reset() | Invalidates session-local snapshots, templates, dictionaries, and previous-message state |
Control messages such as RESET_STATE invalidate decoder state and are not returned as application values. If decoding fails, decoder state does not partially advance.
WebSocket helper
Prefer createTwilicWebSocket(socket, { stateful: true }) when you want that connection's encoder and decoder without managing them by hand.