53e72dfa05d4356b93aa59fec43c83c853854e86
Structural clone of DkvMailService (RESEARCH.md Pattern F / D-08): a fresh nodemailer transport is built from settingsService.getDecryptedSmtpConfig(tenantId) on every send, never a cached/global mailer, and transport.close() always runs in finally (WR-01 socket-leak guard). Unlike DkvMailService, sendDigest/sendInstant never throw — a missing SmtpConfig or a send failure both resolve to false so the digest scheduler (Task 2) can decide whether to stamp TenderMatch.notifiedAt without a per-caller try/catch, and a cron run never crashes because one tenant lacks SMTP config (Pitfall 6). sendDigest builds ONE mail sectioned by saved-search profile name (D-02); sendInstant builds ONE collective mail per profile (D-05). estimatedValue is formatted via String() only, never Number()-coerced (mostly-null Decimal field). Tender titles/profile names are HTML-escaped before interpolation (T-12-08). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Description
Tessera - Modulare Workflow-Automatisierung und Tool-Integration
Releases
14
Tessera 1.9.1
Latest
Languages
TypeScript
90.3%
JavaScript
5.6%
Rust
1.5%
HTML
1.1%
Shell
0.6%
Other
0.8%