earendil-works/pi · error · FrameError
Frame length ${length} exceeds configured limit of ${maxFram
Error message
Frame length ${length} exceeds configured limit of ${maxFrameLength} What it means
Error "Frame length ${length} exceeds configured limit of ${maxFrameLength}" thrown in earendil-works/pi.
Source
Thrown at packages/protocol/src/framing.ts:48
if (payload.byteLength > MAX_UINT32) throw new RangeError("Frame payload exceeds the unsigned 32-bit length limit");
const frame = new Uint8Array(FRAME_HEADER_LENGTH + payload.byteLength);
const length = payload.byteLength;
frame[0] = length >>> 24;
frame[1] = length >>> 16;
frame[2] = length >>> 8;
frame[3] = length;
frame.set(payload, FRAME_HEADER_LENGTH);
return frame;
}
/** Validates that bytes contain exactly one complete frame within the configured limit. */
export function assertCompleteFrame(frame: Uint8Array, options?: FrameDecoderOptions): void {
if (!(frame instanceof Uint8Array)) throw new TypeError("Frame must be a Uint8Array");
if (frame.byteLength < FRAME_HEADER_LENGTH) throw new FrameError("Frame does not contain a complete length prefix");
const length = frame[0]! * 0x1_000_000 + frame[1]! * 0x1_0000 + frame[2]! * 0x100 + frame[3]!;
const maxFrameLength = resolveMaxFrameLength(options);
if (length > maxFrameLength) {
throw new FrameError(`Frame length ${length} exceeds configured limit of ${maxFrameLength}`);
}
if (frame.byteLength !== FRAME_HEADER_LENGTH + length) {
throw new FrameError("Frame must contain exactly one complete payload");
}
}
type DecoderState = "open" | "ended" | "failed";
/** Incrementally splits arbitrary byte chunks into length-prefixed payloads. */
export class FrameDecoder {
private readonly header = new Uint8Array(FRAME_HEADER_LENGTH);
private headerLength = 0;
private readonly maxFrameLength: number;
private payloadBlocks: Uint8Array[] = [];
private currentPayloadBlock: Uint8Array | undefined;
private currentPayloadBlockLength = 0;
private expectedPayloadLength: number | undefined;
private payloadLength = 0;View on GitHub (pinned to 4af9d21d3b)
Solutions
- Reduce the frame size or raise maxFrameLength to match the peer.
When it happens
Trigger: Thrown at packages/protocol/src/framing.ts:48 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of earendil-works/pi@4af9d21d3b (2026-08-24).
Data as JSON: /api/errors/14934cde14c32330.
Report an issue: GitHub.