@repo/streams package provides a Redis streams wrapper for managing the uptime check job queue.
Overview
This package exports:xAddBulk()- Publish website check jobs to streamxReadGroup()- Read fresh messages from streamxAutoClaimStale()- Reclaim stale messages from PELxAckBulk()- Acknowledge processed messagesxPendingInfo()- Get pending entry list (PEL) statusxForceAckStalePel()- Force-clear stuck messagesensureConsumerGroup()- Create consumer group if not exists
Configuration
Required environment variables:Architecture
Better Uptime uses Redis Streams with consumer groups for reliable job processing:Publishing Messages
Bulk Add
From the publisher app:apps/publisher/src/index.ts
packages/streams/src/index.ts
Consuming Messages
Read Fresh Messages
From the worker app:apps/worker/src/index.ts
XREADGROUP with server-side blocking:
packages/streams/src/index.ts
Consumer Group Pattern
The worker creates a consumer group on startup:packages/streams/src/index.ts
Pending Entry List (PEL)
Auto-Claim Stale Messages
Messages that aren’t acknowledged are “idle” in the PEL. Workers reclaim them:apps/worker/src/index.ts
XAUTOCLAIM with cursor pagination:
packages/streams/src/index.ts
PEL Monitoring
Check PEL status:packages/streams/src/index.ts
apps/worker/src/index.ts
Acknowledging Messages
Bulk ACK
After processing messages:apps/worker/src/index.ts
Promise.allSettled to handle partial failures:
packages/streams/src/index.ts
Types
WebsiteEvent
packages/streams/src/index.ts
MessageType
packages/streams/src/index.ts
ReadGroupOptions
packages/streams/src/index.ts
AutoClaimOptions
packages/streams/src/index.ts
PendingInfo
packages/streams/src/index.ts
Error Handling
Timeout Protection
All Redis operations have timeouts:packages/streams/src/index.ts
Exponential Backoff
Failed operations use exponential backoff:packages/streams/src/index.ts
Malformed Message Handling
Messages missing required fields are auto-ACKed:packages/streams/src/index.ts
Connection Management
Redis client with automatic reconnection:packages/streams/src/index.ts
Location
packages/streams/src/index.ts