Reconnection

Survive a dropped stream with backoff and buffered writes
View as Markdown

The Node SDK has a built-in reconnect loop on both connectWithRetry() and createConversationStream(). It retries with full-jitter exponential backoff and buffers writes until the stream is back.

const conversation = client.createConversationStream({
maxRetries: 20,
initialDelayMs: 500,
maxDelayMs: 30_000,
jitter: true,
maxBufferSize: 1000,
});
conversation.on('reconnecting', ({ attempt, delayMs }) => { /* … */ });
conversation.on('reconnected', ({ attempt }) => { /* … */ });

ReconnectOptions (used by connectWithRetry() and createConversationStream())

FieldTypeDefaultNotes
maxRetriesnumberInfinityCap on retry attempts.
initialDelayMsnumber500Initial backoff delay.
maxDelayMsnumber30_000Cap on backoff delay.
jitterbooleantrueFull-jitter on the backoff delay.
maxBufferSizenumber1000Writes buffered while reconnecting.
retryableStatusCodesnumber[][4, 8, 13, 14]DEADLINE_EXCEEDED, RESOURCE_EXHAUSTED, INTERNAL, UNAVAILABLE.

Next steps