| 07-dkv-fleet-module |
02 |
dkv-inbox-access-layer |
| dkv |
| imap |
| ews |
| exchange |
| imapflow |
| inbox-provider |
| dto |
| class-validator |
|
| requires |
provides |
affects |
| dkv.types.ts (Plan 01) |
| CalendarModule (ews-javascript-api installed) |
|
| InboxProvider interface |
| ImapProvider |
| ExchangeInboxProvider |
| DkvConfigDto |
| CreateVehicleDto |
| UpdateVehicleDto |
| DkvHistoryQueryDto |
|
| apps/api/src/dkv/providers/inbox-provider.interface.ts |
| apps/api/src/dkv/providers/imap.provider.ts |
| apps/api/src/dkv/providers/exchange-inbox.provider.ts |
| apps/api/src/dkv/dto/dkv-config.dto.ts |
| apps/api/src/dkv/dto/dkv-vehicle.dto.ts |
| apps/api/src/dkv/dto/dkv-history.dto.ts |
|
|
| added |
patterns |
|
|
| imapflow: fetchAll() before any download() — avoids IMAP connection deadlock (Pitfall 1) |
| imapflow: logger:false in ImapFlow constructor — credential safety (T-07-03) |
| imapflow: collectPdfParts() recursive MIME tree traversal for application/pdf parts |
| ews-javascript-api: dynamic import as any, WellKnownFolderName.Inbox + FindItems (not FindAppointments) |
| ews-javascript-api: SearchFilter.ContainsSubstring for server-side sender filtering |
| 25MB MAX_ATTACHMENT_BYTES guard in both providers — PDF-bomb mitigation (T-07-05) |
| export type { ... } required for isolatedModules TypeScript setting |
| class-validator: @IsEmail() on senderFilter/exportRecipient, @Min(5) on pollIntervalMin, @IsInt @Min(1) on pagination |
|
|
| created |
modified |
| apps/api/src/dkv/providers/inbox-provider.interface.ts |
| apps/api/src/dkv/providers/imap.provider.ts |
| apps/api/src/dkv/providers/exchange-inbox.provider.ts |
| apps/api/src/dkv/dto/dkv-config.dto.ts |
| apps/api/src/dkv/dto/dkv-vehicle.dto.ts |
| apps/api/src/dkv/dto/dkv-history.dto.ts |
|
|
|
| Max attachment size limit set to 25MB (26_214_400 bytes) — covers all realistic DKV invoices; larger files are skipped with a warning log |
| ExchangeInboxProvider uses server-side SearchFilter.ContainsSubstring for sender filtering plus client-side verification (handles case-insensitivity differences) |
| InboxProvider re-exports dkv.types.ts shapes using export type {} (isolatedModules requirement) |
| EWS attachment download: attachment.Load() then Buffer.from(attachment.Content) — no streaming interface available in ews-javascript-api |
| ExchangeInboxProvider buildService() uses WebCredentials with empty string fallback (avoids undefined credential error when username/password absent) |
|
| duration |
completed |
tasks |
files_created |
files_modified |
| 5min |
2026-06-27T00:05:00Z |
3 |
6 |
0 |
|