From c64962c7d5b015d8c9ec1d528d88279df536d236 Mon Sep 17 00:00:00 2001 From: voc0der Date: Mon, 23 Feb 2026 16:26:31 -0500 Subject: [PATCH] Handle dynamic task job accessor compatibility --- backend/tasks.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/backend/tasks.js b/backend/tasks.js index 9ecd6f0..9165902 100644 --- a/backend/tasks.js +++ b/backend/tasks.js @@ -55,8 +55,16 @@ const TASKS = { const TASK_JOBS = new Map(); // Backwards-compatible job access for tests/callers while storing jobs in a Map. -for (const taskKey of Object.keys(TASKS)) { - Object.defineProperty(TASKS[taskKey], 'job', { +function ensureTaskJobAccessor(taskKey) { + const taskObj = TASKS[taskKey]; + if (!taskObj || typeof taskObj !== 'object') return; + + const descriptor = Object.getOwnPropertyDescriptor(taskObj, 'job'); + if (descriptor && typeof descriptor.get === 'function' && typeof descriptor.set === 'function') { + return; + } + + Object.defineProperty(taskObj, 'job', { enumerable: true, configurable: true, get() { @@ -71,6 +79,9 @@ for (const taskKey of Object.keys(TASKS)) { } }); } +for (const taskKey of Object.keys(TASKS)) { + ensureTaskJobAccessor(taskKey); +} const defaultOptions = { all: { @@ -124,6 +135,7 @@ exports.setupTasks = async () => { const tasks_keys = Object.keys(TASKS); for (let i = 0; i < tasks_keys.length; i++) { const task_key = tasks_keys[i]; + ensureTaskJobAccessor(task_key); const mergedDefaultOptions = Object.assign({}, defaultOptions['all'], defaultOptions[task_key] || {}); const task_in_db = await db_api.getRecord('tasks', {key: task_key}); if (!task_in_db) { @@ -216,6 +228,7 @@ exports.updateTaskSchedule = async (task_key, schedule) => { logger.error(`Cannot update schedule for unknown task key '${task_key}'.`); return false; } + ensureTaskJobAccessor(task_key); await db_api.updateRecord('tasks', {key: task_key}, {schedule: schedule}); const existingJob = TASK_JOBS.get(task_key); if (existingJob) {