docs(quick-260921-oxm): Plan fuer die beiden IMAP-Befunde
- B-06 (STARTTLS wird nicht erzwungen) und B-05 (Anhangs-Dateiname) - Ausgangsmessung der Zaehler festgehalten Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TPPB4ApQxzSU1rwV2Ffj9J
This commit is contained in:
+70
@@ -0,0 +1,70 @@
|
||||
---
|
||||
phase: quick-260921-oxm
|
||||
plan: 01
|
||||
type: tdd
|
||||
autonomous: true
|
||||
subsystem: apps/api/src/inbox
|
||||
requirements: []
|
||||
---
|
||||
|
||||
# Quick-Aufgabe 260921-oxm: IMAP-STARTTLS wirklich erzwingen und Anhangs-Dateinamen richtig lesen
|
||||
|
||||
## Ziel
|
||||
|
||||
Die beiden in 260921-m34 gemeldeten Befunde B-06 und B-05 in
|
||||
`apps/api/src/inbox/imap.provider.ts` beheben — mit Tests, die gegen den
|
||||
heutigen Stand rot sind, und ohne jede weitere Verhaltensaenderung.
|
||||
|
||||
## Ausgangsmessung (vor der Arbeit, gemessen am 21.09.2026 auf ad83407)
|
||||
|
||||
| Groesse | Wert |
|
||||
|---|---:|
|
||||
| `lint/suspicious/noExplicitAny` in `apps/api/src` | 15 |
|
||||
| `lint/style/noNonNullAssertion` in `apps/api/src` | 56 |
|
||||
| `as unknown as` in `apps/api/src` | 33 |
|
||||
| `biome-ignore` in `apps/api/src` | 1 |
|
||||
| `ts-expect-error` / `@ts-ignore` | 0 |
|
||||
|
||||
## Aufgabe 1 — B-06: STARTTLS erzwingen (sicherheitsrelevant)
|
||||
|
||||
<precondition>imapflow 1.4.3 deklariert `doSTARTTLS?: boolean` in `ImapFlowOptions` (`lib/imap-flow.d.ts:81`).</precondition>
|
||||
|
||||
**Test zuerst (rot):** Zwei Faelle in `imap.provider.spec.ts`, die die an
|
||||
`new ImapFlow(...)` uebergebenen Optionen pruefen:
|
||||
- `encryption: 'starttls'` ⇒ `secure === false`, `doSTARTTLS === true`, kein Feld `requireTLS`
|
||||
- `encryption: 'ssl-tls'` ⇒ `secure === true`, `doSTARTTLS !== true` (Unvertraeglichkeit
|
||||
der Bibliothek: `secure=true` zusammen mit `doSTARTTLS=true` wirft)
|
||||
|
||||
**Reparatur:** `requireTLS` durch `doSTARTTLS: config.encryption === 'starttls'`
|
||||
ersetzen. Bei `ssl-tls` ergibt der Ausdruck `false` — das ist erlaubt und
|
||||
dokumentiert ("STARTTLS explicitly disabled by config", `imap-flow.js:1210`) und
|
||||
loest die Unvertraeglichkeit nicht aus, weil die nur bei `doSTARTTLS === true`
|
||||
zuschlaegt (`imap-flow.js:1201`).
|
||||
|
||||
**Zusicherung:** `} as any` am Ende von `buildClient()` faellt ersatzlos, sobald
|
||||
alle uebergebenen Felder deklariert sind. Danach pruefen.
|
||||
|
||||
## Aufgabe 2 — B-05: Anhangs-Dateiname aus dem richtigen Feld
|
||||
|
||||
<precondition>imapflow deklariert `dispositionParameters?: { [key: string]: string }` (`lib/imap-flow.d.ts:450`) und fuellt es in `tools.js:887` mit kleingeschriebenen Schluesseln.</precondition>
|
||||
|
||||
**Test zuerst (rot):** Ein `application/octet-stream`-Knoten, dessen
|
||||
`dispositionParameters.filename` auf `.pdf` endet, muss von
|
||||
`fetchPdfAttachments()` eingesammelt werden.
|
||||
|
||||
**Reparatur:** `(node as any).disposition?.parameters?.filename` durch den
|
||||
getypten Zugriff `node.dispositionParameters?.filename` ersetzen.
|
||||
|
||||
## Verifikation
|
||||
|
||||
- `pnpm type-check` 4/4
|
||||
- `pnpm lint` 5/5, keine Befunde der Schwere `error`
|
||||
- `apps/api` mindestens 72 Dateien / 1143 Tests, `apps/web` 73/531
|
||||
- Zaehler: `as unknown as` = 33, `noNonNullAssertion` = 56, `biome-ignore` = 1,
|
||||
`ts-expect-error` = 0, `noExplicitAny` < 15
|
||||
|
||||
## Erfolgskriterien
|
||||
|
||||
- [ ] Beide Tests waren gegen den alten Stand nachweislich rot
|
||||
- [ ] Keine Verhaltensaenderung ausser der in B-06 gewollten
|
||||
- [ ] Keine neue Zusicherung, kein `!`, kein `@ts-expect-error`
|
||||
Reference in New Issue
Block a user