35 lines
982 B
TypeScript
35 lines
982 B
TypeScript
import type { Email } from "@/lib/email-data"
|
|
import {
|
|
extractEmbeddedIcsFromHtml,
|
|
parseCalendarInvitationFromIcs,
|
|
type ParsedCalendarInvitation,
|
|
} from "@/lib/calendar-invitation"
|
|
|
|
function gatherIcsCandidates(email: Email): string[] {
|
|
const out: string[] = []
|
|
if (email.calendarInvitation?.ics) {
|
|
out.push(email.calendarInvitation.ics)
|
|
}
|
|
for (const a of email.attachments ?? []) {
|
|
if (a.name.toLowerCase().endsWith(".ics") && a.inlineText) {
|
|
out.push(a.inlineText)
|
|
}
|
|
}
|
|
if (email.body) {
|
|
const embedded = extractEmbeddedIcsFromHtml(email.body)
|
|
if (embedded) out.push(embedded)
|
|
}
|
|
return out
|
|
}
|
|
|
|
/** Premier bloc ICS exploitable (metadata, pièce jointe ou texte/HTML inline). */
|
|
export function resolveParsedCalendarInvitation(
|
|
email: Email
|
|
): ParsedCalendarInvitation | null {
|
|
for (const ics of gatherIcsCandidates(email)) {
|
|
const parsed = parseCalendarInvitationFromIcs(ics)
|
|
if (parsed) return parsed
|
|
}
|
|
return null
|
|
}
|