earendil-works/pi · error · RangeError

writerLease.ttlMs must be positive

Error message

writerLease.ttlMs must be positive

What it means

Error "writerLease.ttlMs must be positive" thrown in earendil-works/pi.

Source

Thrown at packages/session-backends/sqlite-node/src/sqlite/repo.ts:117

	heartbeatIntervalMs?: number;
}

export interface SqliteSessionRepositoryOptions {
	env: SqliteSessionRepositoryEnv;
	sqlite: SqliteDatabaseFactory;
	databasePath: string;
	writerLease?: SqliteWriterLeaseOptions;
}

interface ResolvedWriterLeaseOptions {
	ttlMs: number;
	heartbeatIntervalMs: number;
}

function resolveWriterLeaseOptions(options: SqliteWriterLeaseOptions | undefined): ResolvedWriterLeaseOptions {
	const ttlMs = options?.ttlMs ?? 30_000;
	const heartbeatIntervalMs = options?.heartbeatIntervalMs ?? 10_000;
	if (!Number.isSafeInteger(ttlMs) || ttlMs <= 0) throw new RangeError("writerLease.ttlMs must be positive");
	if (!Number.isSafeInteger(heartbeatIntervalMs) || heartbeatIntervalMs <= 0 || heartbeatIntervalMs >= ttlMs) {
		throw new RangeError("writerLease.heartbeatIntervalMs must be positive and less than ttlMs");
	}
	return { ttlMs, heartbeatIntervalMs };
}

function activeWriterError(sessionId: string): SessionError {
	return new SessionError("storage", `SQLite session ${sessionId} already has an active writer`);
}

function lostWriterError(sessionId: string): SessionError {
	return new SessionError("storage", `SQLite session ${sessionId} writer lease was lost`);
}

function claimWriterLease(db: SqliteDatabase, sessionId: string, options: ResolvedWriterLeaseOptions): WriterLease {
	const now = Date.now();
	const lease = acquireWriterLease(db, sessionId, uuidv7(), now, now + options.ttlMs);
	if (!lease) throw activeWriterError(sessionId);

View on GitHub (pinned to 4af9d21d3b)

Solutions

  1. Set writerLease.ttlMs to a positive number.

When it happens

Trigger: Thrown at packages/session-backends/sqlite-node/src/sqlite/repo.ts:117 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/3f49dc2beffd126e. Report an issue: GitHub.