feat: startHeartbeat — 5s interval update last_seen_at, stops on record-not-found

This commit is contained in:
Janpeter Visser 2026-05-01 14:54:02 +02:00
parent 994f28f103
commit 1c7cb04d2e

25
src/presence/heartbeat.ts Normal file
View file

@ -0,0 +1,25 @@
import { prisma } from '../prisma.js'
export function startHeartbeat(opts: {
tokenId: string
intervalMs?: number
}): { stop: () => void } {
const ms = opts.intervalMs ?? 5_000
const timer = setInterval(async () => {
try {
const result = await prisma.claudeWorker.updateMany({
where: { token_id: opts.tokenId },
data: { last_seen_at: new Date() },
})
if (result.count === 0) {
console.warn('[scrum4me-mcp] heartbeat: worker record not found — token may be revoked, stopping heartbeat')
clearInterval(timer)
}
} catch (err) {
console.warn('[scrum4me-mcp] heartbeat error:', err)
}
}, ms)
return { stop: () => clearInterval(timer) }
}