BillTracker/services
null 3c82c30f3c fix(auth): handle requires_webauthn in POST /login — was a 500 self-lockout
authService.login returns a requires_webauthn payload for webauthn-enabled
users, but the login route only handled requires_totp and fell through to
result.user.id (undefined) -> TypeError -> 500 on every attempt. Any user who
enabled WebAuthn via the API (reachable today) was permanently locked out.

- routes/auth.cts: return the two-step requires_webauthn payload (mirrors TOTP)
- services/authService.cts: stale-flag guard — webauthn_enabled with no usable
  credentials falls through to password login instead of hard-failing
- tests/authLoginWebauthnRoute.test.js: pins both paths + wrong-password 401

(QA-B1-01, lockout part)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 16:29:08 -05:00
..
advisoryFilterService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
amountSuggestionService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
analyticsService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
aprService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
auditService.cts feat(logging): redacted, level-gated logger; migrate all server console.* (Pillar D) 2026-07-06 16:05:18 -05:00
authService.cts fix(auth): handle requires_webauthn in POST /login — was a 500 self-lockout 2026-07-10 16:29:08 -05:00
backupScheduler.cts feat(logging): redacted, level-gated logger; migrate all server console.* (Pillar D) 2026-07-06 16:05:18 -05:00
backupService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
bankSyncConfigService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
bankSyncService.cts feat(logging): redacted, level-gated logger; migrate all server console.* (Pillar D) 2026-07-06 16:05:18 -05:00
bankSyncWorker.cts feat(logging): redacted, level-gated logger; migrate all server console.* (Pillar D) 2026-07-06 16:05:18 -05:00
billMerchantRuleService.cts feat(logging): redacted, level-gated logger; migrate all server console.* (Pillar D) 2026-07-06 16:05:18 -05:00
billsService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
calendarFeedService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
cleanupService.cts feat(logging): redacted, level-gated logger; migrate all server console.* (Pillar D) 2026-07-06 16:05:18 -05:00
csvTransactionImportService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
driftService.cts feat(logging): redacted, level-gated logger; migrate all server console.* (Pillar D) 2026-07-06 16:05:18 -05:00
encryptionService.cts feat(logging): redacted, level-gated logger; migrate all server console.* (Pillar D) 2026-07-06 16:05:18 -05:00
loginFingerprint.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
matchSuggestionService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
merchantStoreMatchService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
notificationService.cts feat(logging): redacted, level-gated logger; migrate all server console.* (Pillar D) 2026-07-06 16:05:18 -05:00
ofxImportService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
oidcService.cts feat(logging): redacted, level-gated logger; migrate all server console.* (Pillar D) 2026-07-06 16:05:18 -05:00
paymentAccountingService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
paymentValidation.cts feat(server-ts): paymentValidation → .cts, proving the CJS-module path (Phase 2) 2026-07-05 13:51:37 -05:00
simplefinService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
snowballService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
spendingService.cts feat(logging): redacted, level-gated logger; migrate all server console.* (Pillar D) 2026-07-06 16:05:18 -05:00
spreadsheetImportService.cts feat(logging): redacted, level-gated logger; migrate all server console.* (Pillar D) 2026-07-06 16:05:18 -05:00
statusRuntime.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
statusService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
subscriptionService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
totpService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
trackerService.cts feat(logging): redacted, level-gated logger; migrate all server console.* (Pillar D) 2026-07-06 16:05:18 -05:00
transactionMatchService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
transactionMatchState.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
transactionService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
updateCheckService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
userDataService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
userDbImportService.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
userSettings.cts style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
webauthnService.cts feat(logging): redacted, level-gated logger; migrate all server console.* (Pillar D) 2026-07-06 16:05:18 -05:00