Files
kill-the-news/src/utils/feed-generator.ts
T

53 lines
1.3 KiB
TypeScript

import { Feed } from 'feed';
import { FeedConfig, EmailData } from '../types';
/**
* Generate an RSS feed from a list of emails
*/
export function generateRssFeed(
feedConfig: FeedConfig,
emails: EmailData[],
baseUrl: string
): string {
// Create a new feed
const feed = new Feed({
title: feedConfig.title,
description: feedConfig.description || '',
id: feedConfig.feed_url,
link: feedConfig.site_url,
language: feedConfig.language,
updated: new Date(),
generator: 'Email-to-RSS',
copyright: `Copyright © ${new Date().getFullYear()} ${feedConfig.title}`,
feedLinks: {
rss: feedConfig.feed_url
},
author: feedConfig.author ? {
name: feedConfig.author,
email: `noreply@${new URL(feedConfig.site_url).hostname}`
} : undefined
});
// Add each email as a feed item
for (const email of emails) {
const date = new Date(email.receivedAt);
const uniqueId = `${email.receivedAt}-${Buffer.from(email.subject).toString('base64').substring(0, 10)}`;
feed.addItem({
title: email.subject,
id: uniqueId,
link: `${baseUrl}/emails/${uniqueId}`,
description: email.content,
content: email.content,
author: [
{
name: email.from,
},
],
date: date,
});
}
// Return the RSS feed as XML
return feed.rss2();
}