diff --git a/packages/backend/package.json b/packages/backend/package.json
index 9590711a..c0a79590 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -42,6 +42,7 @@
"dotenv": "^10.0.0",
"express": "~4.16.1",
"express-graphql": "^0.12.0",
+ "fast-xml-parser": "^4.0.11",
"flickr-sdk": "3.10.0",
"googleapis": "89.0.0",
"graphql-middleware": "^6.1.15",
@@ -134,4 +135,4 @@
"publishConfig": {
"access": "public"
}
-}
\ No newline at end of file
+}
diff --git a/packages/backend/src/apps/rss/assets/favicon.svg b/packages/backend/src/apps/rss/assets/favicon.svg
new file mode 100644
index 00000000..ce961d24
--- /dev/null
+++ b/packages/backend/src/apps/rss/assets/favicon.svg
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff --git a/packages/backend/src/apps/rss/index.d.ts b/packages/backend/src/apps/rss/index.d.ts
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/backend/src/apps/rss/index.ts b/packages/backend/src/apps/rss/index.ts
new file mode 100644
index 00000000..6a145dd0
--- /dev/null
+++ b/packages/backend/src/apps/rss/index.ts
@@ -0,0 +1,13 @@
+import defineApp from '../../helpers/define-app';
+
+export default defineApp({
+ name: 'RSS',
+ key: 'rss',
+ iconUrl: '{BASE_URL}/apps/rss/assets/favicon.svg',
+ authDocUrl: 'https://automatisch.io/docs/connections/rss',
+ supportsConnections: false,
+ baseUrl: '',
+ apiBaseUrl: '',
+ primaryColor: 'ff8800',
+ beforeRequest: [],
+});
diff --git a/packages/backend/src/apps/rss/triggers/new-items-in-feed/index.ts b/packages/backend/src/apps/rss/triggers/new-items-in-feed/index.ts
new file mode 100644
index 00000000..71728f25
--- /dev/null
+++ b/packages/backend/src/apps/rss/triggers/new-items-in-feed/index.ts
@@ -0,0 +1,33 @@
+import defineTrigger from '../../../../helpers/define-trigger';
+import newItemsInFeed from './new-items-in-feed';
+
+export default defineTrigger({
+ name: 'New items in feed',
+ key: 'newItemsInFeed',
+ description: 'Triggers on new RSS feed items.',
+ pollInterval: 15,
+ substeps: [
+ {
+ key: 'chooseTrigger',
+ name: 'Set up trigger',
+ arguments: [
+ {
+ label: 'Feed URL',
+ key: 'feedUrl',
+ type: 'string',
+ required: true,
+ description: 'Paste your publicly accessible RSS URL here.',
+ variables: false,
+ },
+ ],
+ },
+ {
+ key: 'testStep',
+ name: 'Test trigger',
+ },
+ ],
+
+ async run($) {
+ await newItemsInFeed($);
+ },
+});
diff --git a/packages/backend/src/apps/rss/triggers/new-items-in-feed/new-items-in-feed.ts b/packages/backend/src/apps/rss/triggers/new-items-in-feed/new-items-in-feed.ts
new file mode 100644
index 00000000..6111929d
--- /dev/null
+++ b/packages/backend/src/apps/rss/triggers/new-items-in-feed/new-items-in-feed.ts
@@ -0,0 +1,24 @@
+import { IGlobalVariable } from '@automatisch/types';
+import { XMLParser } from 'fast-xml-parser';[]
+
+const newItemsInFeed = async ($: IGlobalVariable) => {
+ const { data } = await $.http.get($.step.parameters.feedUrl as string);
+ const parser = new XMLParser();
+ const parsedData = parser.parse(data);
+
+ for (const item of parsedData.rss.channel.item) {
+ if ($.flow.isAlreadyProcessed(item.guid))
+ return;
+
+ const dataItem = {
+ raw: item,
+ meta: {
+ internalId: item.guid
+ }
+ }
+
+ $.pushTriggerItem(dataItem);
+ }
+};
+
+export default newItemsInFeed;
diff --git a/packages/backend/src/graphql/schema.graphql b/packages/backend/src/graphql/schema.graphql
index baf388c7..e8c208f6 100644
--- a/packages/backend/src/graphql/schema.graphql
+++ b/packages/backend/src/graphql/schema.graphql
@@ -155,13 +155,14 @@ enum AvailableAppsEnumType {
github
gitlab
postgresql
+ rss
+ scheduler
+ slack
smtp
twilio
twitch
twitter
typeform
- slack
- scheduler
}
type Connection {
diff --git a/packages/docs/pages/connections/rss.md b/packages/docs/pages/connections/rss.md
new file mode 100644
index 00000000..ce12caac
--- /dev/null
+++ b/packages/docs/pages/connections/rss.md
@@ -0,0 +1,3 @@
+# RSS
+
+RSS is a built-in app shipped with Automatisch, and it doesn't need to talk with any other external service to run. So there are no additional steps to use the RSS app.
diff --git a/packages/web/src/components/AddAppConnection/index.tsx b/packages/web/src/components/AddAppConnection/index.tsx
index 4f4f9bf7..fb0428be 100644
--- a/packages/web/src/components/AddAppConnection/index.tsx
+++ b/packages/web/src/components/AddAppConnection/index.tsx
@@ -88,15 +88,17 @@ export default function AddAppConnection(props: AddAppConnectionProps): React.Re