refactor: parallelize KV writes, cap metadata, remove redundant normalization

- email-processor: run email put + metadata get in parallel (saves one KV round-trip per email)
- email-processor: add missing 50-email metadata cap (was unbounded unlike storage.ts)
- email-processor: remove redundant normalizeEmail call on already-normalized allowedSender
- email-parser: strip WHAT-comments and boilerplate JSDoc throughout

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
Julien HerrandClaude Sonnet 4.6 committed 2026-05-20 23:05:26 +02:00
1 parent 093efe7fc9
commit 71a5c20e62
2 files changed
+22 -59

No files matched your search

+18 -15
View File
@@ -17,21 +17,20 @@ function normalizeEmail(value: string): string {
function senderMatchesAllowlist(
sender: string,
allowedSender: string,
allowedSender: string, // already normalized by caller
): boolean {
if (!allowedSender) return false;
const normalizedSender = normalizeEmail(sender);
const normalizedAllowed = normalizeEmail(allowedSender);
if (!normalizedAllowed) return false;
if (normalizedAllowed.includes("@")) {
return normalizedSender === normalizedAllowed;
if (allowedSender.includes("@")) {
return normalizedSender === allowedSender;
}
const senderDomain = normalizedSender.split("@")[1] || "";
const normalizedDomain = normalizedAllowed.startsWith("@")
? normalizedAllowed.slice(1)
: normalizedAllowed;
const normalizedDomain = allowedSender.startsWith("@")
? allowedSender.slice(1)
: allowedSender;
return senderDomain === normalizedDomain;
}
@@ -84,13 +83,14 @@ export async function processEmail(
};
const emailKey = `feed:${feedId}:${Date.now()}`;
await env.EMAIL_STORAGE.put(emailKey, JSON.stringify(emailData));
const feedMetadataKey = `feed:${feedId}:metadata`;
const feedMetadata = ((await env.EMAIL_STORAGE.get(
feedMetadataKey,
"json",
)) || {
const [, rawMetadata] = await Promise.all([
env.EMAIL_STORAGE.put(emailKey, JSON.stringify(emailData)),
env.EMAIL_STORAGE.get(feedMetadataKey, "json"),
]);
const feedMetadata = ((rawMetadata as FeedMetadata | null) || {
emails: [],
}) as FeedMetadata;
feedMetadata.emails.unshift({
@@ -98,6 +98,9 @@ export async function processEmail(
subject: emailData.subject,
receivedAt: emailData.receivedAt,
});
if (feedMetadata.emails.length > 50) {
feedMetadata.emails = feedMetadata.emails.slice(0, 50);
}
await env.EMAIL_STORAGE.put(feedMetadataKey, JSON.stringify(feedMetadata));
console.log(`Successfully processed email for feed ${feedId}`);