export class BufferManager { private buffer: Buffer; constructor( private readonly maxBufferSize: number, ) { this.buffer = Buffer.alloc(0); } hasRoom(chunk: Buffer): boolean { return chunk.length + this.buffer.length <= this.maxBufferSize; } append(chunk: Buffer) { if (!this.hasRoom(chunk)) { throw new Error('Buffer overflow - data will be lost. Check hasRoom before calling'); } this.buffer = Buffer.concat([this.buffer, chunk]); } appendAndGetCompletedBuffer(chunk: Buffer): Buffer { const fillSize = this.maxBufferSize - this.buffer.length; const completedBuffer = Buffer.concat([this.buffer, chunk.slice(0, fillSize)]); this.buffer = Buffer.from(chunk.slice(fillSize, chunk.length)); // ??? could be an issue return completedBuffer; } }