From 610c9c634816247efddf8ed4e10089d031ca4d5c Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Wed, 23 Feb 2022 11:17:59 +0800 Subject: [PATCH] Closes #37 (#109) * change return value for new version of pubsub * add support for the other bloomberg newsletters not only business * add default fallback url if newsletter url not found * revert pubsub version change --- .../inbound-email-handler/src/axios-handler.ts | 1 + .../src/bloomberg-handler.ts | 3 ++- .../inbound-email-handler/src/golang-handler.ts | 1 + .../inbound-email-handler/src/newsletter.ts | 12 ++++-------- .../src/substack-handler.ts | 12 ++++++++++-- .../test/newsletter.test.ts | 17 ++++++++++++++--- 6 files changed, 32 insertions(+), 14 deletions(-) diff --git a/packages/inbound-email-handler/src/axios-handler.ts b/packages/inbound-email-handler/src/axios-handler.ts index 7af57daa9..706d11047 100644 --- a/packages/inbound-email-handler/src/axios-handler.ts +++ b/packages/inbound-email-handler/src/axios-handler.ts @@ -5,5 +5,6 @@ export class AxiosHandler extends NewsletterHandler { super() this.senderRegex = /<.+@axios.com>/ this.urlRegex = /View in browser at (.*)<\/a>/ + this.defaultUrl = 'https://axios.com' } } diff --git a/packages/inbound-email-handler/src/bloomberg-handler.ts b/packages/inbound-email-handler/src/bloomberg-handler.ts index d3dad1961..a60736461 100644 --- a/packages/inbound-email-handler/src/bloomberg-handler.ts +++ b/packages/inbound-email-handler/src/bloomberg-handler.ts @@ -3,7 +3,8 @@ import { NewsletterHandler } from './newsletter' export class BloombergHandler extends NewsletterHandler { constructor() { super() - this.senderRegex = /<.+@mail.bloombergbusiness.com>/ + this.senderRegex = /<.+@mail.bloomberg.*.com>/ this.urlRegex = // this.urlRegex = /Read on the Web<\/a>/ + this.defaultUrl = 'https://golangweekly.com/' } } diff --git a/packages/inbound-email-handler/src/newsletter.ts b/packages/inbound-email-handler/src/newsletter.ts index ccbb4ba2b..98b8d84e9 100644 --- a/packages/inbound-email-handler/src/newsletter.ts +++ b/packages/inbound-email-handler/src/newsletter.ts @@ -12,6 +12,7 @@ const CONFIRMATION_CODE_PATTERN = /^\\(#\\d+\\)/ export class NewsletterHandler { protected senderRegex = /NEWSLETTER_SENDER_REGEX/ protected urlRegex = /NEWSLETTER_URL_REGEX/ + protected defaultUrl = 'NEWSLETTER_DEFAULT_URL' isNewsletter(_rawUrl: string, from: string): boolean { // Axios newsletter is from @@ -19,7 +20,7 @@ export class NewsletterHandler { return re.test(from) } - getNewsletterUrl(rawUrl: string, html: string): string | undefined { + getNewsletterUrl(_rawUrl: string, html: string): string | undefined { // get newsletter url from html const matches = html.match(this.urlRegex) if (matches) { @@ -53,13 +54,8 @@ export class NewsletterHandler { throw new Error('invalid newsletter email') } - const url = this.getNewsletterUrl(rawUrl, html) - console.log('url', url) - if (!url) { - console.log('invalid newsletter url', url) - throw new Error('invalid newsletter url') - } - + // fallback to default url if newsletter url does not exist + const url = this.getNewsletterUrl(rawUrl, html) || this.defaultUrl const author = this.getAuthor(from) const message = { diff --git a/packages/inbound-email-handler/src/substack-handler.ts b/packages/inbound-email-handler/src/substack-handler.ts index ac0e54d1b..02530c30b 100644 --- a/packages/inbound-email-handler/src/substack-handler.ts +++ b/packages/inbound-email-handler/src/substack-handler.ts @@ -1,10 +1,18 @@ import { NewsletterHandler } from './newsletter' +import addressparser from 'addressparser' export class SubstackHandler extends NewsletterHandler { + constructor() { + super() + this.defaultUrl = 'https://www.substack.com/' + } + getNewsletterUrl(rawUrl: string, _html: string): string | undefined { // raw SubStack newsletter url is like - // we need to get the real url - return rawUrl.slice(1, -1) + // we need to get the real url from the raw url + return addressparser(rawUrl).length > 0 + ? addressparser(rawUrl)[0].name + : undefined } isNewsletter(rawUrl: string, _from: string): boolean { diff --git a/packages/inbound-email-handler/test/newsletter.test.ts b/packages/inbound-email-handler/test/newsletter.test.ts index 3cd6d7824..bda334237 100644 --- a/packages/inbound-email-handler/test/newsletter.test.ts +++ b/packages/inbound-email-handler/test/newsletter.test.ts @@ -30,9 +30,20 @@ describe('Newsletter email test', () => { expect(getNewsletterHandler('', from)).to.be.instanceof(AxiosHandler) }) - it('should return BloombergHandler when email is from Bloomberg', () => { - const from = 'From: Bloomberg ' - expect(getNewsletterHandler('', from)).to.be.instanceof(BloombergHandler) + context('when email is from Bloomberg', () => { + it('should return BloombergHandler when email is from Bloomberg Business', () => { + const from = 'From: Bloomberg ' + expect(getNewsletterHandler('', from)).to.be.instanceof( + BloombergHandler + ) + }) + + it('should return BloombergHandler when email is from Bloomberg View', () => { + const from = 'From: Bloomberg ' + expect(getNewsletterHandler('', from)).to.be.instanceof( + BloombergHandler + ) + }) }) it('should return GolangHandler when email is from Golang Weekly', () => {