Realtime Subscriptions
kalam-link supports realtime subscriptions via WebSocket.
Table subscription (sugar API)
const unsub = await client.subscribe('app.messages', (event) => {
console.log(event.type);
});In source, this is sugar for:
client.subscribeWithSql(`SELECT * FROM ${tableName}`, callback, options)SQL subscription
const unsub = await client.subscribeWithSql(
'SELECT * FROM app.messages WHERE conversation_id = $1',
(event) => {
if (event.type === 'change') {
console.log(event.change_type, event.rows);
}
},
{ batch_size: 100, last_rows: 50 }
);Event model
Use runtime enums from types.ts:
import { MessageType, ChangeType } from 'kalam-link';Event sequence commonly observed:
subscription_ack- one or more
initial_data_batch changeevents (insert|update|delete)- optional
error
Subscription options
{
batch_size?: number;
last_rows?: number;
from_seq_id?: string;
}Use from_seq_id for resume patterns after reconnect.
Unsubscribe patterns
const unsub = await client.subscribe('app.messages', cb);
await unsub();
await client.unsubscribe('<subscription-id>');
await client.unsubscribeAll();Subscription introspection
client.getSubscriptionCount();
client.getSubscriptions();
client.isSubscribedTo('SELECT * FROM app.messages');
client.getLastSeqId('<subscription-id>');getLastSeqId() is useful for checkpointing consumption progress.
Error handling guidance
- Parse
event.type === MessageType.Errorand inspectcode/message. - Keep callbacks resilient (non-throwing) to avoid app-level disruption.
- For mission-critical streams, persist last sequence IDs and re-subscribe with
from_seq_id.
Last updated on