Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

README.md

LogicSRC Feed Discovery Plugin

Discover RSS, Atom, JSON Feed, podcast, and feed-like sources by keyword using a provider-based LogicSRC plugin.

Install

This repository includes the plugin as a normal LogicSRC workspace plugin:

npm --workspace @logicsrc/plugin-feed-discovery run build

Consumers can import the runtime API:

import { discoverFeeds, renderRss } from "@logicsrc/plugin-feed-discovery";

const result = await discoverFeeds({ q: "microsaas", limit: 25 });
console.log(renderRss(result));

CLI

logicsrc feeds discover "microsaas" --format json
logicsrc feeds discover "microsaas" --format opml
logicsrc feeds discover "microsaas" --format rss
logicsrc feeds discover "ai agents" --type podcast
logicsrc feeds validate https://example.com/feed.xml
logicsrc feeds probe https://example.com
logicsrc feeds providers

Validation is enabled by default. Use --include-unvalidated to inspect raw provider candidates without network validation.

Providers

MVP providers:

  • manual-curated: local high-trust starter feeds.
  • opml-directory: local OPML files configured with LOGICSRC_FEEDS_OPML_PATHS.
  • web-feed-probe: probes direct URL queries and configured candidate homepages from LOGICSRC_FEEDS_CANDIDATE_URLS.
  • itunes-podcast: public iTunes podcast search.
  • podcastindex: optional PodcastIndex search when PODCASTINDEX_API_KEY and PODCASTINDEX_API_SECRET are set.

Provider failures are isolated and returned as providerErrors; one failed provider does not fail the whole discovery request.

HTTP Reference API

The CommandBoard reference API exposes:

GET /api/feeds/discover?q=microsaas&type=all&limit=50
GET /api/feeds/providers
GET /rss/discover/microsaas.xml
GET /api/rss/discover?q=microsaas

BitTorrented can consume the plugin package directly and map its public routes to the same runtime calls:

  • /api/rss/discover?q=:keyword -> discoverFeeds()
  • /rss/discover/:keyword.xml -> discoverFeeds() plus renderRss()
  • /rss/discover/:keyword.opml -> discoverFeeds() plus renderOpml()

Configuration

LOGICSRC_FEEDS_CACHE_TTL_SECONDS=86400
LOGICSRC_FEEDS_MAX_PROVIDERS=10
LOGICSRC_FEEDS_MAX_PROBES=50
LOGICSRC_FEEDS_REQUEST_TIMEOUT_MS=8000
LOGICSRC_FEEDS_MAX_BODY_BYTES=1000000
LOGICSRC_FEEDS_USER_AGENT="LogicSrcFeedDiscovery/0.1"
LOGICSRC_FEEDS_OPML_PATHS="./data/feeds.opml,./data/podcasts.opml"
LOGICSRC_FEEDS_CANDIDATE_URLS="https://example.com|microsaas,https://another.example|ai agents"

PODCASTINDEX_API_KEY=
PODCASTINDEX_API_SECRET=

Security

validateFeed() and probeSite() use guarded fetches:

  • Only http and https URLs are allowed.
  • localhost, loopback, private, link-local, carrier-grade NAT, and common metadata targets are blocked.
  • DNS-resolved private/internal addresses are blocked.
  • Redirects are limited and checked through the same guard.
  • Request timeouts and response body size limits are enforced.

Database

Supabase-compatible schema SQL is included at src/db/schema.sql. The current LogicSRC repo has no shared Supabase migration convention, so the plugin ships the schema for host applications to apply.

Deferred v0.2 Work

  • YouTube, Reddit, GitHub, and RSSHub adapters.
  • Persistent cache and refresh jobs.
  • Atom and JSON Feed public endpoints in host apps.
  • Provider health dashboard and admin tooling.
  • Paid provider adapters such as RSS.app, Feedly, Inoreader, Twingly, and Listen Notes.