26 lines
1.1 KiB
TypeScript
26 lines
1.1 KiB
TypeScript
// Projection helpers - convert host-internal types into the read-only views
|
|
// that plugins consume. Keeping this in one place ensures every slot/hook
|
|
// hands plugins the same shape declared in plugin-types.ts.
|
|
|
|
import type { Email } from '@/lib/jmap/types';
|
|
import type { EmailReadView } from '@/lib/plugin-types';
|
|
|
|
export function emailToReadView(email: Email): EmailReadView {
|
|
return {
|
|
id: email.id,
|
|
threadId: email.threadId,
|
|
mailboxIds: Object.keys(email.mailboxIds || {}).filter(k => email.mailboxIds[k]),
|
|
from: (email.from || []).map(a => ({ name: a.name || '', email: a.email })),
|
|
to: (email.to || []).map(a => ({ name: a.name || '', email: a.email })),
|
|
cc: (email.cc || []).map(a => ({ name: a.name || '', email: a.email })),
|
|
subject: email.subject || '',
|
|
receivedAt: email.receivedAt,
|
|
isRead: !!email.keywords?.['$seen'],
|
|
isFlagged: !!email.keywords?.['$flagged'],
|
|
hasAttachment: email.hasAttachment,
|
|
preview: email.preview || '',
|
|
keywords: Object.keys(email.keywords || {}).filter(k => email.keywords[k]),
|
|
auth: email.authenticationResults,
|
|
};
|
|
}
|