export type ProviderOutputLimiter = Readonly<{ consume(chunk: Buffer | string): void; bytes(): number; }>; export function createProviderOutputLimiter( maxBytes: number, onExceeded: () => void, ): ProviderOutputLimiter { if (!Number.isSafeInteger(maxBytes) || maxBytes <= 0 || typeof onExceeded !== "function") { throw new TypeError("provider output limiter input is invalid"); } let observedBytes = 0; let exceeded = false; return Object.freeze({ consume: (chunk: Buffer | string) => { if (exceeded) return; const bytes = Buffer.isBuffer(chunk) ? chunk.byteLength : Buffer.byteLength(chunk); observedBytes += bytes; if (observedBytes > maxBytes) { exceeded = true; onExceeded(); } }, bytes: () => observedBytes, }); }