Files
accounted/lib/email/service.ts
T
Mattsson 321e684523 Fix/usr fdbck ch (#1105)
* fix(privacy): mask voucher amounts in session replays

* fix: persist transaction source filter

* fix: clarify invoice filenames and booking previews

* fix: truncate long uploaded filenames

* feat: add invoice delivery history

* fix: harden invoice delivery history

* fix: include invoice deliveries in full archive
2026-07-22 18:49:57 +02:00

54 lines
1.2 KiB
TypeScript

/**
* Email Service Interface
*
* Core defines the contract. The email extension registers a real
* implementation (Resend). Without the extension, a no-op service
* is used: email-dependent features degrade gracefully.
*/
export interface SendEmailOptions {
to: string | string[]
cc?: string | string[]
subject: string
html: string
text?: string
replyTo?: string
fromName?: string
attachments?: Array<{
filename: string
content: Buffer | string
contentType?: string
}>
}
export interface SendEmailResult {
success: boolean
provider?: string
messageId?: string
error?: string
}
export interface EmailService {
sendEmail(options: SendEmailOptions): Promise<SendEmailResult>
isConfigured(): boolean
}
class NoopEmailService implements EmailService {
async sendEmail(): Promise<SendEmailResult> {
return { success: false, error: 'Email service not configured' }
}
isConfigured(): boolean {
return false
}
}
let emailService: EmailService = new NoopEmailService()
export function getEmailService(): EmailService {
return emailService
}
export function registerEmailService(svc: EmailService): void {
emailService = svc
}