managarten/packages/shared-rss/src/validate.ts
Till JS b768a0ffce refactor(shared-rss): extract RSS parsing + Readability into one package
news-ingester and apps/api both shipped their own copy of rss-parser
+ jsdom + Readability glue. Single source now in packages/shared-rss.
Adds discoverFeeds (rel=alternate + common-paths probe) and validateFeed
which News Research will use. JSDOM virtualConsole is silenced once,
in the package, instead of in two parallel call sites.

- packages/shared-rss: parse, extract, discover, validate
- services/news-ingester: drop local parsers, depend on @mana/shared-rss
- apps/api: drop @mozilla/readability + jsdom direct deps, use shared

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 22:30:44 +02:00

24 lines
554 B
TypeScript

import { parseFeedMeta } from './parse';
import type { FeedValidation } from './types';
const SAMPLE_LIMIT = 5;
export async function validateFeed(url: string): Promise<FeedValidation> {
try {
const parsed = await parseFeedMeta(url);
return {
ok: parsed.items.length > 0,
itemCount: parsed.items.length,
title: parsed.title,
sample: parsed.items.slice(0, SAMPLE_LIMIT),
};
} catch (err) {
return {
ok: false,
itemCount: 0,
title: null,
sample: [],
error: err instanceof Error ? err.message : String(err),
};
}
}