mirror of
https://github.com/juherr/kill-the-news.git
synced 2026-06-20 22:03:48 +00:00
7b2b98d693
- Add src/utils/urls.ts with baseUrl, feedRssUrl, feedAtomUrl, feedUrl, feedEmailAddress, feedTopicPattern - Add optional EMAIL_DOMAIN env var so web domain and email domain can differ (e.g. demo.kill-the.news serves feeds, @kill-the.news receives mail) - Replace all inline domain template literals with the new helpers - Remove unused site_url/feed_url fields from FeedConfig - Remove unused feedPath param from fetchFeedData - Extract verifyCallback() to deduplicate verifyAndStoreSubscription / verifyAndDeleteSubscription Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
41 lines
1.0 KiB
TypeScript
41 lines
1.0 KiB
TypeScript
import { Env, FeedConfig, FeedMetadata, EmailData } from "../types";
|
|
import { MAX_FEED_ITEMS } from "../config/constants";
|
|
|
|
export interface FeedData {
|
|
feedConfig: FeedConfig;
|
|
emails: EmailData[];
|
|
}
|
|
|
|
export async function fetchFeedData(
|
|
feedId: string,
|
|
env: Env,
|
|
): Promise<FeedData | null> {
|
|
const storage = env.EMAIL_STORAGE;
|
|
|
|
const feedMetadata = (await storage.get(
|
|
`feed:${feedId}:metadata`,
|
|
"json",
|
|
)) as FeedMetadata | null;
|
|
|
|
if (!feedMetadata) return null;
|
|
|
|
const feedConfig = ((await storage.get(
|
|
`feed:${feedId}:config`,
|
|
"json",
|
|
)) as FeedConfig | null) ?? {
|
|
title: `Newsletter Feed ${feedId}`,
|
|
description: "Converted email newsletter",
|
|
language: "en",
|
|
created_at: Date.now(),
|
|
};
|
|
|
|
const emailRefs = feedMetadata.emails.slice(0, MAX_FEED_ITEMS);
|
|
const emails: EmailData[] = [];
|
|
for (const ref of emailRefs) {
|
|
const data = (await storage.get(ref.key, "json")) as EmailData | null;
|
|
if (data) emails.push(data);
|
|
}
|
|
|
|
return { feedConfig, emails };
|
|
}
|