Review streaming response cancellation

src/stream-report-types.tsTypeScript
@@ -0,0 +1,34 @@
1+export interface ReportRequest {
2+ reportId: string;
3+ signal: AbortSignal;
4+}
5+
6+export interface ReportResponse {
7+ writableEnded: boolean;
8+ finished: Promise<"flushed" | "closed">;
9+ writeHead(status: number, headers: Record<string, string>): void;
10+ write(chunk: Uint8Array): boolean;
11+ once(event: "drain", listener: () => void): void;
12+ end(): void;
13+ destroy(error?: Error): void;
14+ on(event: "close", listener: () => void): void;
15+}
16+
17+export interface ReportSource {
18+ open(
19+ reportId: string,
20+ options?: { signal: AbortSignal },
21+ ): Promise<AsyncIterable<Uint8Array>>;
22+}
23+
24+export interface UsageLedger {
25+ recordCompleted(input: {
26+ reportId: string;
27+ deliveredBytes: number;
28+ }): Promise<void>;
29+}
30+
31+export interface StreamDependencies {
32+ reports: ReportSource;
33+ usage: UsageLedger;
34+}