{"_id":"@dawod/emdash-rss-aggregator","_rev":"2-a6e6d9f2a1bef09b3a2d7477814ec83b","name":"@dawod/emdash-rss-aggregator","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@dawod/emdash-rss-aggregator","version":"1.0.0","keywords":["emdash","emdash-plugin","rss","atom","feed","aggregator","content","import"],"author":{"url":"https://engdawood.com/","name":"Dawood"},"license":"MIT","_id":"@dawod/emdash-rss-aggregator@1.0.0","maintainers":[{"name":"dawod","email":"davidhormos@gmail.com"}],"homepage":"https://github.com/EngDawood/emdash-rss-aggregator#readme","bugs":{"url":"https://github.com/EngDawood/emdash-rss-aggregator/issues"},"dist":{"shasum":"b16324774dbdb9dfca3032b14df2712d3365f294","tarball":"https://registry.npmjs.org/@dawod/emdash-rss-aggregator/-/emdash-rss-aggregator-1.0.0.tgz","fileCount":24,"integrity":"sha512-BQ2d4kHDjg+ryq/Quh98lJZYK2Ul+SQs0wlrcKiZgxXuLxRvjIRqWYwNg15r1PlwbEHUJ24z4+w84/vqkt7dEA==","signatures":[{"sig":"MEUCIQCIy8XrcHLOMcXDc3vOHkNyklVZgFQ5Naqz1/AWCRr+gAIgdy68Vpe6vPFJTT5viZMnTPQIUmovoR9KrY0rDX7ZfGE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178465},"type":"module","exports":{".":"./src/index.ts","./admin":"./src/admin.tsx","./astro":"./src/astro/index.ts","./sandbox":"./src/sandbox-entry.ts"},"gitHead":"e7858d98379ecde16eae97530575763ee8d87217","_npmUser":{"name":"dawod","email":"davidhormos@gmail.com"},"repository":{"url":"git+https://github.com/EngDawood/emdash-rss-aggregator.git","type":"git"},"_npmVersion":"11.9.0","description":"RSS/Atom feed aggregator plugin for EmDash CMS. Import, manage, and display feed items as first-class content entries.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"astro":">=6.0.0","react":">=18.0.0","emdash":">=0.1.0","react-dom":">=18.0.0","@emdash-cms/admin":">=0.1.0","@emdash-cms/blocks":">=0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/emdash-rss-aggregator_1.0.0_1781913455183_0.419561139888057","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@dawod/emdash-rss-aggregator","version":"1.1.0","type":"module","description":"RSS/Atom feed aggregator plugin for EmDash CMS. Import, manage, and display feed items as first-class content entries.","author":{"name":"Dawood","url":"https://engdawood.com/"},"homepage":"https://github.com/emdash-cms/emdash-rss-aggregator#readme","repository":{"type":"git","url":"git+https://github.com/emdash-cms/emdash-rss-aggregator.git"},"bugs":{"url":"https://github.com/emdash-cms/emdash-rss-aggregator/issues"},"license":"MIT","exports":{".":"./src/index.ts","./sandbox":"./src/sandbox-entry.ts","./admin":"./src/admin.tsx","./astro":"./src/astro/index.ts"},"keywords":["emdash","emdash-plugin","rss","atom","feed","aggregator","content","import"],"peerDependencies":{"emdash":">=0.1.0","@emdash-cms/admin":">=0.1.0","@emdash-cms/blocks":">=0.1.0","react":">=18.0.0","react-dom":">=18.0.0","astro":">=6.0.0"},"devDependencies":{"typescript":"^5.8.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"gitHead":"fc9d3e37d5e4022d8c977ffdbe7a16c7ad5ba808","_id":"@dawod/emdash-rss-aggregator@1.1.0","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-d8UikShl5svCOOpCAHcZIlAlbJ7MFMFHxZRC8yjgtgGU8Q7hFeGKWgSxvfs1keKGbg2hcIJIm0VOos8RIhka3w==","shasum":"f7bb7cb4204929dee89e17e7949962929bb74e32","tarball":"https://registry.npmjs.org/@dawod/emdash-rss-aggregator/-/emdash-rss-aggregator-1.1.0.tgz","fileCount":27,"unpackedSize":197884,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDi/xtpyy7tybW4c822J9sZJ5UEqtJpHJTV4gg5YthgPAiEA+V8kNsxRpfXNywpuNGbX0bOYQy6CI6e9mocH2R5MJsc="}]},"_npmUser":{"name":"dawod","email":"davidhormos@gmail.com"},"directories":{},"maintainers":[{"name":"dawod","email":"davidhormos@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/emdash-rss-aggregator_1.1.0_1781981648851_0.6013392499734849"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-19T23:57:34.989Z","modified":"2026-06-20T18:54:09.123Z","1.0.0":"2026-06-19T23:57:35.324Z","1.1.0":"2026-06-20T18:54:08.996Z"},"bugs":{"url":"https://github.com/emdash-cms/emdash-rss-aggregator/issues"},"author":{"name":"Dawood","url":"https://engdawood.com/"},"license":"MIT","homepage":"https://github.com/emdash-cms/emdash-rss-aggregator#readme","keywords":["emdash","emdash-plugin","rss","atom","feed","aggregator","content","import"],"repository":{"type":"git","url":"git+https://github.com/emdash-cms/emdash-rss-aggregator.git"},"description":"RSS/Atom feed aggregator plugin for EmDash CMS. Import, manage, and display feed items as first-class content entries.","maintainers":[{"name":"dawod","email":"davidhormos@gmail.com"}],"readme":"# emdash-rss-aggregator\n\n[![npm version](https://img.shields.io/npm/v/@dawod/emdash-rss-aggregator.svg)](https://www.npmjs.com/package/@dawod/emdash-rss-aggregator)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Built with Astro](https://img.shields.io/badge/Built%20with-Astro-ff5d01.svg)](https://astro.build/)\n[![CMS-EmDash](https://img.shields.io/badge/CMS-EmDash-blue.svg)](https://github.com/emdash-cms/emdash)\n[![pnpm](https://img.shields.io/badge/maintained%20with-pnpm-cc00ff.svg)](https://pnpm.io/)\n\nAn RSS and Atom feed aggregator plugin for **[EmDash CMS](https://github.com/emdash-cms/emdash)** on **Astro**. Automatically import, manage, filter, and display RSS/Atom feed items as first-class CMS content entries.\n\nFeatures both standard aggregation and premium features (like Feed-to-Post conversion, keyword filtering, YouTube detection, and custom audio players).\n\n--- \n\n## Features\n\n- **Native Format**: Leverages React admin UI pages, Astro components, and direct database access.\n- **Robust Feed Parser**: Native regex-based feed parser supporting RSS 2.0, RSS 1.0 (RDF), and Atom 1.0 XML formats without requiring DOMParser.\n- **Deduplication & Reconciling**: Prevent duplicate imports using GUID or Title matching. Supports overwriting updated entries or preserving them.\n- **Content Trimming**: Automatically truncate feed content to a specific word count.\n- **Featured Image Extraction**: Extracts images from enclosure tags, Media RSS thumbnails, or parses them directly from item content body.\n- **YouTube Detection**: Extracts YouTube video IDs from URLs and renders them.\n- **Feed-to-Post (Premium)**: Automatically convert imported feed items into first-class CMS blog posts in your custom collections.\n- **Keyword Filtering (Premium)**: Only import items matching (or excluding) specific keyword criteria in titles or descriptions.\n- **Dashboard Widget**: Top-level stats on sources, active counts, and import times on your main admin dashboard.\n- **Custom XML Feed Output**: Merge all feed items and expose them as a single custom XML feed.\n\n---\n\n## Installation\n\nInstall the package via `pnpm` (or npm/yarn):\n\n```bash\npnpm add emdash-rss-aggregator\n```\n\n### Integration Setup\n\nAdd the plugin to your `astro.config.mjs` under the `emdash` integration settings:\n\n```javascript\nimport { defineConfig } from \"astro/config\";\nimport emdash from \"emdash\";\nimport { rssAggregatorPlugin } from \"emdash-rss-aggregator\";\n\nexport default defineConfig({\n  integrations: [\n    emdash({\n      plugins: [\n        rssAggregatorPlugin({\n          contentCollection: \"feed-items\", // Default destination collection\n          fetchInterval: 60,             // Default fetch interval (minutes)\n        }),\n      ],\n    }),\n  ],\n});\n```\n\n---\n\n## Astro Rendering Components\n\nThis plugin exports pre-styled, customizable Astro components for displaying feed items in your theme templates.\n\n### Displaying Feeds\n\nSimply import `<FeedList />` in your Astro pages:\n\n```astro\n---\nimport { FeedList } from \"emdash-rss-aggregator/astro\";\nimport Layout from \"../layouts/Layout.astro\";\n---\n\n<Layout title=\"Aggregated Feed\">\n  <main class=\"container\">\n    <h1>Latest News</h1>\n    \n    <!-- Render using the default display settings -->\n    <FeedList displayId=\"default\" limit={10} />\n  </main>\n</Layout>\n```\n\n### Options\n\nThe `<FeedList />` component accepts the following props:\n\n- `displayId`: ID of the display template configured in the admin UI (defaults to `\"default\"`).\n- `limit`: Override the maximum number of items to show.\n- `sourceId`: Filter items specifically for a single feed source.\n- `tag`: Filter items for sources belonging to a specific tag/folder.\n\n---\n\n## Developer API\n\nYou can fetch feed items directly in your frontend scripts or custom endpoints using the public JSON API:\n\n`GET /api/plugins/rss-aggregator/public/items?display=default`\n\nOptional query parameters:\n- `limit` (number)\n- `source` (sourceId)\n- `tag` (tag string)\n- `cursor` (opaque keyset pagination cursor)\n\n---\n\n## License\n\nMIT License. See [LICENSE](./LICENSE) for details.\n","readmeFilename":"README.md"}