fix(presence): heartbeat stopt bij een verlopen API-token (ISS-9) #165

Merged
janpeter merged 1 commit from fix/api-token-expiry into main 2026-09-27 20:21:46 +02:00
Owner

Vervolg op #163, die al gemerged was voordat deze commit erbij kwam.

Probleem

De heartbeat in src/presence/heartbeat.ts controleert alleen revoked_at. Een draaiende worker met een verlopen token blijft daardoor last_seen_at verversen en als verbonden zichtbaar, terwijl getAuth() elke tool-aanroep sinds #163 weigert. Een verdwenen worker-rij wordt bovendien opnieuw geregistreerd. Het is een weergavefout, geen toegangslek.

Wijziging

  • De heartbeat slaat de tick over bij een token met expires_at <= now.
  • isTokenExpired is geexporteerd uit src/auth.ts (was een lokale functie), zodat beide paden dezelfde grens gebruiken.

Tests

__tests__/heartbeat-user-id-refresh.test.ts: tick overgeslagen bij een verlopen token (ook bij een verdwenen worker-rij), heartbeat loopt door zonder of met toekomstige vervaldatum. De weiger-test faalde voor de fix.

npm run typecheck schoon, npm test: 1816 geslaagd, 51 overgeslagen (integratiesuites zonder database).

🤖 Generated with Claude Code

Vervolg op #163, die al gemerged was voordat deze commit erbij kwam. ## Probleem De heartbeat in `src/presence/heartbeat.ts` controleert alleen `revoked_at`. Een draaiende worker met een verlopen token blijft daardoor `last_seen_at` verversen en als verbonden zichtbaar, terwijl `getAuth()` elke tool-aanroep sinds #163 weigert. Een verdwenen worker-rij wordt bovendien opnieuw geregistreerd. Het is een weergavefout, geen toegangslek. ## Wijziging - De heartbeat slaat de tick over bij een token met `expires_at <= now`. - `isTokenExpired` is geexporteerd uit `src/auth.ts` (was een lokale functie), zodat beide paden dezelfde grens gebruiken. ## Tests `__tests__/heartbeat-user-id-refresh.test.ts`: tick overgeslagen bij een verlopen token (ook bij een verdwenen worker-rij), heartbeat loopt door zonder of met toekomstige vervaldatum. De weiger-test faalde voor de fix. `npm run typecheck` schoon, `npm test`: 1816 geslaagd, 51 overgeslagen (integratiesuites zonder database). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix(presence): heartbeat stopt bij een verlopen API-token (ISS-9)
Some checks failed
CI / Final merge attestation and immutable publication (pull_request) Has been skipped
CI / PR candidate (never published) (pull_request) Failing after 18s
3e94daa2a8
De heartbeat controleerde alleen revoked_at. Een draaiende worker met een
verlopen token bleef daardoor last_seen_at verversen en als verbonden
zichtbaar, terwijl getAuth elke tool-aanroep al weigert. Een verdwenen
worker-rij werd bovendien opnieuw geregistreerd.

isTokenExpired is nu geexporteerd uit src/auth.ts zodat beide paden
dezelfde grens gebruiken.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
s4m-codex-reviewer left a comment

Verdict: APPROVED

Findings

  • Geen findings met blokkerende of error-severity.

Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden.

De heartbeat controleert nu dezelfde expiry-grens als authenticatie vóór het bijwerken of opnieuw registreren van een worker. De tests dekken verlopen, niet-verlopende en toekomstige tokens.

# Verdict: APPROVED ## Findings - Geen findings met blokkerende of error-severity. Geen gekoppeld plan gevonden — beoordeeld op codekwaliteit + product-standaarden. De heartbeat controleert nu dezelfde expiry-grens als authenticatie vóór het bijwerken of opnieuw registreren van een worker. De tests dekken verlopen, niet-verlopende en toekomstige tokens.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/scrum4me-mcp!165
No description provided.