logicsrc/plugins/feed-discovery/src/index.ts

47 lines
1.8 KiB
TypeScript

import type { PluginDefinition } from "@logicsrc/plugin-core";
import { readFeedDiscoveryConfig } from "./config.js";
import { discoverFeeds } from "./discovery.js";
import { feedDiscoveryManifest } from "./manifest.js";
import { probeSite } from "./probe-site.js";
import { providerManifests } from "./providers/index.js";
import { validateFeed } from "./validate-feed.js";
export const feedDiscoveryPlugin: PluginDefinition = {
manifest: feedDiscoveryManifest,
configDefaults: {
enabled: true,
cache_ttl_seconds: "${LOGICSRC_FEEDS_CACHE_TTL_SECONDS}",
max_providers: "${LOGICSRC_FEEDS_MAX_PROVIDERS}",
max_probes: "${LOGICSRC_FEEDS_MAX_PROBES}",
request_timeout_ms: "${LOGICSRC_FEEDS_REQUEST_TIMEOUT_MS}",
user_agent: "${LOGICSRC_FEEDS_USER_AGENT}"
},
routes: [
{ method: "GET", path: "/api/feeds/discover", capability: "feeds.discover" },
{ method: "GET", path: "/api/feeds/providers", capability: "feeds.providers.list" },
{ method: "GET", path: "/rss/discover/:keyword.xml", capability: "feeds.export.rss" }
],
permissions: ["feeds:discover", "feeds:validate", "feeds:probe", "feeds:export"],
tuiPanels: [{ id: "feed-discovery-status", title: "Feed Discovery" }]
};
export function listFeedProviders() {
return providerManifests(readFeedDiscoveryConfig());
}
export { discoverFeeds, feedDiscoveryManifest, probeSite, readFeedDiscoveryConfig, validateFeed };
export type {
DiscoveredFeed,
FeedDiscoveryConfig,
FeedDiscoveryProvider,
FeedDiscoveryQuery,
FeedDiscoveryResponse,
FeedKind,
FeedOutputFormat,
FeedProviderManifest,
FeedSampleItem,
ProbeResult,
ValidationResult
} from "./types.js";
export { renderAtom, renderDiscoveryOutput, renderJsonFeed, renderOpml, renderRss } from "./output/index.js";
export { createDefaultFeedProviders, providerManifests } from "./providers/index.js";