( ids: string[], firedAt: number, dir?: string, )
| 277 | * just-written `lastFiredAt` — idempotent (same computation, same answer). |
| 278 | */ |
| 279 | export async function markCronTasksFired( |
| 280 | ids: string[], |
| 281 | firedAt: number, |
| 282 | dir?: string, |
| 283 | ): Promise<void> { |
| 284 | if (ids.length === 0) return |
| 285 | const idSet = new Set(ids) |
| 286 | const tasks = await readCronTasks(dir) |
| 287 | let changed = false |
| 288 | for (const t of tasks) { |
| 289 | if (idSet.has(t.id)) { |
| 290 | t.lastFiredAt = firedAt |
| 291 | changed = true |
| 292 | } |
| 293 | } |
| 294 | if (!changed) return |
| 295 | await writeCronTasks(tasks, dir) |
| 296 | } |
| 297 | |
| 298 | /** |
| 299 | * File-backed tasks + session-only tasks, merged. Session tasks get |
no test coverage detected