import type { GroupXEnvelope } from "../../core/envelope.js"; export type DurableGroupXEnvelope = GroupXEnvelope & { durability: "durable"; seq: number; }; export type TransientGroupXEnvelope = GroupXEnvelope & { durability: "transient"; seq: null; }; export interface DurableRangeRequest { roomId: string; afterSeq: number; throughSeq: number; signal: AbortSignal; } /** * The storage-facing side of SSE. Implementations must take the high-water * mark from the same committed durable sequence space used by readDurableRange. * readDurableRange must yield committed events in ascending seq order and * must never expose a higher seq before a lower event from the same room. */ export interface SseDurableEventReader { captureHighWaterSeq(roomId: string, signal: AbortSignal): number | Promise; readDurableRange(request: DurableRangeRequest): AsyncIterable | Iterable; } /** * A single HTTP response (or a test double). A write promise resolves only * when that frame has passed the sink's own backpressure boundary. */ export interface SseSink { write(frame: string, signal: AbortSignal): void | Promise; close(info: SseCloseInfo): void | Promise; } export type SseCloseCode = "client_closed" | "server_closed" | "aborted" | "durable_overflow" | "sequence_error" | "sink_error" | "replay_error"; export interface SseCloseInfo { code: SseCloseCode; error?: unknown; } export interface OpenSseConnectionOptions { roomId: string; afterSeq?: number; sink: SseSink; signal?: AbortSignal; } export interface SseRuntimeOptions { heartbeatIntervalMs?: number; maxBufferedEvents?: number; maxBufferedBytes?: number; } export interface SseConnectionSnapshot { phase: "replaying" | "live" | "closed"; afterSeq: number; highWaterSeq?: number; lastSentDurableSeq: number; bufferedEvents: number; bufferedBytes: number; } //# sourceMappingURL=types.d.ts.map