@penkov/tasks_queue
Version:
A lightweight PostgreSQL-backed task queue system with scheduling, retries, backoff strategies, and priority handling. Designed for efficiency and observability in modern Node.js applications.
49 lines (48 loc) • 1.66 kB
JavaScript
export var TaskStatus;
(function (TaskStatus) {
TaskStatus["pending"] = "pending";
TaskStatus["in_progress"] = "in_progress";
TaskStatus["blocked"] = "blocked";
TaskStatus["finished"] = "finished";
TaskStatus["error"] = "error";
})(TaskStatus || (TaskStatus = {}));
export var BackoffType;
(function (BackoffType) {
BackoffType["constant"] = "constant";
BackoffType["linear"] = "linear";
BackoffType["exponential"] = "exponential";
})(BackoffType || (BackoffType = {}));
export var TaskPeriodType;
(function (TaskPeriodType) {
TaskPeriodType["fixed_rate"] = "fixed_rate";
TaskPeriodType["fixed_delay"] = "fixed_delay";
TaskPeriodType["cron"] = "cron";
})(TaskPeriodType || (TaskPeriodType = {}));
export var MissedRunStrategy;
(function (MissedRunStrategy) {
MissedRunStrategy["catch_up"] = "catch_up";
MissedRunStrategy["skip_missed"] = "skip_missed";
})(MissedRunStrategy || (MissedRunStrategy = {}));
export const TASK_HEARTBEAT_THROTTLE_MS = 60_000;
export function taskHeartbeatThrottleMs(timeout) {
if (!Number.isFinite(timeout) || timeout <= 0) {
return TASK_HEARTBEAT_THROTTLE_MS;
}
return Math.min(TASK_HEARTBEAT_THROTTLE_MS, Math.max(1, timeout / 2));
}
export class TaskFailed extends Error {
payload;
constructor(message, payload) {
super(message);
this.payload = payload;
}
}
export class TaskTimedOutError extends Error {
taskId;
finalStatus;
constructor(taskId, finalStatus) {
super(`Task ${taskId} timed out before liveness was refreshed`);
this.taskId = taskId;
this.finalStatus = finalStatus;
}
}