( ids: string[], firedAt: number, dir?: string, )
| 259 | * just-written `lastFiredAt` — idempotent (same computation, same answer). |
| 260 | */ |
| 261 | export async function markCronTasksFired( |
| 262 | ids: string[], |
| 263 | firedAt: number, |
| 264 | dir?: string, |
| 265 | ): Promise<void> { |
| 266 | if (ids.length === 0) return |
| 267 | const idSet = new Set(ids) |
| 268 | const tasks = await readCronTasks(dir) |
| 269 | let changed = false |
| 270 | for (const t of tasks) { |
| 271 | if (idSet.has(t.id)) { |
| 272 | t.lastFiredAt = firedAt |
| 273 | changed = true |
| 274 | } |
| 275 | } |
| 276 | if (!changed) return |
| 277 | await writeCronTasks(tasks, dir) |
| 278 | } |
| 279 | |
| 280 | /** |
| 281 | * File-backed tasks + session-only tasks, merged. Session tasks get |
no test coverage detected