From 8c8fd98bd5da7d00f5727abc23babc98c7305bf4 Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Tue, 10 Jan 2023 22:23:15 +0100 Subject: [PATCH] feat(rss): cover atom feeds --- .../new-items-in-feed/new-items-in-feed.ts | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) 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 index cdc76791..0f94795a 100644 --- 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 @@ -1,16 +1,34 @@ -import { IGlobalVariable } from '@automatisch/types'; +import { IGlobalVariable, IJSONObject } from '@automatisch/types'; import { XMLParser } from 'fast-xml-parser'; +import bcrypt from 'bcrypt'; + +const getInternalId = async (item: IJSONObject): Promise => { + if (item.guid) { + return item.guid.toString(); + } else if (item.id) { + return item.id.toString(); + } + + return await hashItem(JSON.stringify(item)); +}; + +const hashItem = async (value: string) => { + return await bcrypt.hash(value, 1); +}; 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) { + // naive implementation to cover atom and rss feeds + const items = parsedData.rss?.channel?.item || parsedData.feed?.entry || []; + + for (const item of items) { const dataItem = { raw: item, meta: { - internalId: item.guid, + internalId: await getInternalId(item), }, };