diff --git a/changelog.d/469.bugfix b/changelog.d/469.bugfix new file mode 100644 index 00000000..cec52ac3 --- /dev/null +++ b/changelog.d/469.bugfix @@ -0,0 +1 @@ +Fix a bug where reading RSS feeds could crash the process. \ No newline at end of file diff --git a/src/Bridge.ts b/src/Bridge.ts index b256b103..7a0e2dd2 100644 --- a/src/Bridge.ts +++ b/src/Bridge.ts @@ -40,7 +40,7 @@ import { getAppservice } from "./appservice"; import { JiraOAuthRequestCloud, JiraOAuthRequestOnPrem, JiraOAuthRequestResult } from "./Jira/OAuth"; import { GenericWebhookEvent, GenericWebhookEventResult } from "./generic/types"; import { SetupWidget } from "./Widgets/SetupWidget"; -import { FeedEntry, FeedError, FeedReader } from "./feeds/FeedReader"; +import { FeedEntry, FeedError, FeedReader, FeedSuccess } from "./feeds/FeedReader"; const log = new LogWrapper("Bridge"); export class Bridge { @@ -615,9 +615,9 @@ export class Bridge { (data) => connManager.getConnectionsForFeedUrl(data.feed.url), (c, data) => c.handleFeedEntry(data), ); - this.bindHandlerToQueue( + this.bindHandlerToQueue( "feed.success", - (data) => connManager.getConnectionsForFeedUrl(data.feed.url), + (data) => connManager.getConnectionsForFeedUrl(data.url), c => c.handleFeedSuccess(), ); this.bindHandlerToQueue( diff --git a/src/feeds/FeedReader.ts b/src/feeds/FeedReader.ts index fd4bdab2..1e5f9fce 100644 --- a/src/feeds/FeedReader.ts +++ b/src/feeds/FeedReader.ts @@ -55,6 +55,10 @@ export interface FeedEntry { fetchKey: string, } +export interface FeedSuccess { + url: string, +} + interface AccountData { [url: string]: string[], } @@ -210,7 +214,7 @@ export class FeedReader { const entry = { feed: { title: feed.title ? stripHtml(feed.title) : null, - url: url.toString() + url: url, }, title: item.title ? stripHtml(item.title) : null, link: item.link || null, @@ -233,7 +237,7 @@ export class FeedReader { const newSeenItems = Array.from(new Set([ ...newGuids, ...seenGuids ]).values()).slice(0, maxGuids); this.seenEntries.set(url, newSeenItems); } - this.queue.push({ eventName: 'feed.success', sender: 'FeedReader', data: undefined}); + this.queue.push({ eventName: 'feed.success', sender: 'FeedReader', data: { url: url } }); } catch (err: unknown) { const error = err instanceof Error ? err : new Error(`Unknown error ${err}`); const feedError = new FeedError(url.toString(), error, fetchKey);