@masslessai/push-todo 4.0.3 → 4.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/daemon.js +54 -0
- package/package.json +1 -1
package/lib/daemon.js
CHANGED
|
@@ -443,6 +443,52 @@ async function fetchQueuedTasks() {
|
|
|
443
443
|
}
|
|
444
444
|
}
|
|
445
445
|
|
|
446
|
+
// ==================== Scheduled Reminder Bridge ====================
|
|
447
|
+
|
|
448
|
+
async function fetchScheduledTodos() {
|
|
449
|
+
try {
|
|
450
|
+
const params = new URLSearchParams();
|
|
451
|
+
params.set('scheduled_before', new Date().toISOString());
|
|
452
|
+
|
|
453
|
+
const response = await apiRequest(`synced-todos?${params}`);
|
|
454
|
+
if (!response.ok) return [];
|
|
455
|
+
|
|
456
|
+
const data = await response.json();
|
|
457
|
+
return data.todos || [];
|
|
458
|
+
} catch (error) {
|
|
459
|
+
logError(`Failed to fetch scheduled todos: ${error.message}`);
|
|
460
|
+
return [];
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
async function checkAndQueueScheduledTodos() {
|
|
465
|
+
const scheduledTodos = await fetchScheduledTodos();
|
|
466
|
+
if (scheduledTodos.length === 0) return;
|
|
467
|
+
|
|
468
|
+
for (const todo of scheduledTodos) {
|
|
469
|
+
const dn = todo.displayNumber;
|
|
470
|
+
const todoId = todo.id;
|
|
471
|
+
|
|
472
|
+
log(`Schedule triggered for #${dn} (reminder_date: ${todo.reminderDate})`);
|
|
473
|
+
|
|
474
|
+
try {
|
|
475
|
+
await updateTaskStatus(dn, 'queued', {
|
|
476
|
+
event: {
|
|
477
|
+
type: 'scheduled_trigger',
|
|
478
|
+
timestamp: new Date().toISOString(),
|
|
479
|
+
summary: 'Auto-queued: reminder time reached',
|
|
480
|
+
}
|
|
481
|
+
}, todoId);
|
|
482
|
+
|
|
483
|
+
log(`Queued #${dn} via schedule trigger`);
|
|
484
|
+
} catch (error) {
|
|
485
|
+
logError(`Failed to queue scheduled todo #${dn}: ${error.message}`);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
// ==================== Task Status Updates ====================
|
|
491
|
+
|
|
446
492
|
async function updateTaskStatus(displayNumber, status, extra = {}, todoId = null) {
|
|
447
493
|
try {
|
|
448
494
|
const payload = {
|
|
@@ -2125,6 +2171,14 @@ async function mainLoop() {
|
|
|
2125
2171
|
const poll = async () => {
|
|
2126
2172
|
try {
|
|
2127
2173
|
await checkTimeouts();
|
|
2174
|
+
|
|
2175
|
+
// Schedule bridge: auto-queue todos whose reminder time has arrived
|
|
2176
|
+
try {
|
|
2177
|
+
await checkAndQueueScheduledTodos();
|
|
2178
|
+
} catch (error) {
|
|
2179
|
+
logError(`Scheduled todo check error: ${error.message}`);
|
|
2180
|
+
}
|
|
2181
|
+
|
|
2128
2182
|
await pollAndExecute();
|
|
2129
2183
|
|
|
2130
2184
|
// Cron jobs (check every poll cycle, execution throttled by nextRunAt)
|