Commit Graph

4 Commits

Author SHA1 Message Date
null 7ce5fb66f5 refactor(types): type-check server.cts + document the 8 intentional @ts-nocheck files
- server.cts (the app entry): dropped @ts-nocheck, added the leading
  import type + handler/callback annotations (30 mechanical errors).
  types/http.d.ts gained the 2-arg res.redirect(status, url) overload
  (same gap class as the download overload). Verified by a real boot
  smoke: node server.cts → /api/health + /api/version both 200.
- The 8 remaining files (4 db migration/seed factories + 4 dynamic
  parsers/matchers: spreadsheet/userDbImport/subscription/oidc) now carry
  an INTENTIONAL rationale instead of a bare 'TODO: type incrementally' —
  they parse inherently-unknown input or mutate arbitrary historical
  schemas, where full typing yields 'any' anyway or adds risk to
  data-critical boot code. This is the defensible steady state, not debt.

@ts-nocheck server count: 9 -> 8, and QA-B0-04 is now CLOSED: all 29
routes + server.cts checked, 8 documented exceptions. ci green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 07:17:55 -05:00
null 6c915a62c8 refactor(types): type-check batch 2 — 7 medium routes + 2 real fixes
Dropped @ts-nocheck from admin/payments/monthly-starting-amounts/
subscriptions/authOidc/calendar/export (~113 errors). Mostly mechanical
(catch bindings, params, never[] arrays), but the checker earned its keep:

- types/http.d.ts: added the 4-arg res.download(path, name, options, cb)
  overload — the v0.42.0 root-option download fix (admin backup + user-db
  export) didn't type-check against the old 3-arg-only signature.
- routes/calendar.cts: deleted dead clampDay() (zero callers; was also a
  standing lint warning).

@ts-nocheck server count: 21 -> 14. Server suite 252/252.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 06:57:41 -05:00
null a6c9b6cb1c refactor(server): migrate 8 leaf services + apiError to TypeScript (.cts)
Batch of low-blast-radius modules: utils/apiError, and services statusRuntime,
loginFingerprint, auditService, transactionMatchState, updateCheckService,
advisoryFilterService, bankSyncConfigService.

- types/http.d.ts: shared permissive Express-ish Req/Res/Next/Router types
  (@types/express isn't installed; handlers are dynamic) — for apiError's
  errorHandler now and the routes/middleware batches next.
- Every require of a migrated module updated to the explicit .cts extension.
- Confirmed + documented the Node rule: a .cts needs at least one `import`
  statement or type-stripping never activates (node --check fails on the first
  type token); import-less modules lead with an `import type`.

Behavior-preserving. Verified: typecheck:server 0, check:server 0, suite 226/226.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 10:47:16 -05:00
null 005b0b7b64 refactor(server): migrate 10 services to TypeScript (.cts)
Continues the incremental server TS migration (after utils/*.mts and
paymentValidation.cts): converts 10 services to .cts (CommonJS TypeScript,
run natively via Node type-stripping — no build step), type-checked by
tsconfig.server.json.

Migrated: totpService, amountSuggestionService, encryptionService,
paymentAccountingService, statusService, aprService, driftService,
analyticsService, spendingService, billMerchantRuleService.

- types/db.d.ts: shared minimal better-sqlite3 Db/Statement types (the lib
  ships none), reused across the migrated modules.
- Every require of a migrated service updated to the explicit .cts extension
  (extensionless require does not resolve .cts) across routes / services /
  db migrations / server.js / workers / tests — require-only changes.
- package.json: check:server find pattern now includes *.cts (it silently
  skipped .cts before, so paymentValidation.cts had no node --check gate).

Behavior-preserving (types only). Verified: typecheck:server 0,
check:server 0, full server suite 226/226, real boot → /api/health 200.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 10:35:29 -05:00