earendil-works/pi · error · CborError

CBOR integers must be safe JavaScript integers

Error message

CBOR integers must be safe JavaScript integers

What it means

Error "CBOR integers must be safe JavaScript integers" thrown in earendil-works/pi.

Source

Thrown at packages/protocol/src/cbor/encoder.ts:140

	options: ResolvedCborOptions,
	depth: number,
	ancestors: Set<object>,
): void {
	if (depth > options.maxDepth)
		throw new CborError(`CBOR nesting depth exceeds configured limit of ${options.maxDepth}`);

	if (value === null) {
		writer.writeByte(0xf6);
		return;
	}
	if (typeof value === "boolean") {
		writer.writeByte(value ? 0xf5 : 0xf4);
		return;
	}
	if (typeof value === "number") {
		if (!Number.isFinite(value)) throw new CborError("CBOR numbers must be finite");
		if (Number.isInteger(value) && !Object.is(value, -0)) {
			if (!Number.isSafeInteger(value)) throw new CborError("CBOR integers must be safe JavaScript integers");
			if (value >= 0) writeArgument(writer, 0, value);
			else writeArgument(writer, 1, -1 - value);
		} else {
			writer.writeFloat64(value);
		}
		return;
	}
	if (typeof value === "string") {
		encodeText(writer, value, options);
		return;
	}
	if (value instanceof Uint8Array) {
		if (value.byteLength > options.maxByteLength) {
			throw new CborError(`CBOR byte string length exceeds configured limit of ${options.maxByteLength}`);
		}
		writeArgument(writer, 2, value.byteLength);
		writer.writeBytes(value);
		return;

View on GitHub (pinned to 4af9d21d3b)

Solutions

  1. Only encode safe integers (Number.isSafeInteger); round the value or use a string for larger integers.

When it happens

Trigger: Thrown at packages/protocol/src/cbor/encoder.ts:140 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/0fb78d52bda4af20. Report an issue: GitHub.