diff --git a/packages/api/src/resolvers/article/index.ts b/packages/api/src/resolvers/article/index.ts index 54b9fcfba..85a4bd4de 100644 --- a/packages/api/src/resolvers/article/index.ts +++ b/packages/api/src/resolvers/article/index.ts @@ -53,11 +53,9 @@ import { getInternalLabelWithColor } from '../../repository/label' import { libraryItemRepository } from '../../repository/library_item' import { userRepository } from '../../repository/user' import { createPageSaveRequest } from '../../services/create_page_save_request' -import { findHighlightsByLibraryItemId } from '../../services/highlights' import { addLabelsToLibraryItem, findLabelsByIds, - findLabelsByLibraryItemId, findOrCreateLabels, saveLabelsInLibraryItem, } from '../../services/labels' @@ -70,7 +68,6 @@ import { updateLibraryItemReadingProgress, updateLibraryItems, } from '../../services/library_item' -import { findRecommendationsByLibraryItemId } from '../../services/recommendation' import { parsedContentToLibraryItem } from '../../services/save_page' import { findUploadFileById, @@ -84,14 +81,12 @@ import { cleanUrl, errorHandler, generateSlug, - isBase64Image, isParsingTimeout, libraryItemToArticle, libraryItemToSearchItem, titleForFilePath, userDataToUser, } from '../../utils/helpers' -import { createImageProxyUrl } from '../../utils/imageproxy' import { contentConverter, getDistillerResult, diff --git a/packages/api/src/services/save_page.ts b/packages/api/src/services/save_page.ts index ad8d6d81c..3e82374d7 100644 --- a/packages/api/src/services/save_page.ts +++ b/packages/api/src/services/save_page.ts @@ -36,6 +36,7 @@ const FORCE_PUPPETEER_URLS = [ TWEET_URL_REGEX, /^((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu.be))(\/(?:[\w-]+\?v=|embed\/|v\/)?)([\w-]+)(\S+)?$/, ] +const ALREADY_PARSED_SOURCES = ['puppeteer-parse', 'csv-importer', 'rss-feeder'] const createSlug = (url: string, title?: Maybe | undefined) => { const { pathname } = new URL(url) @@ -52,7 +53,7 @@ const createSlug = (url: string, title?: Maybe | undefined) => { const shouldParseInBackend = (input: SavePageInput): boolean => { return ( - input.source !== 'puppeteer-parse' && + ALREADY_PARSED_SOURCES.indexOf(input.source) === -1 && FORCE_PUPPETEER_URLS.some((regex) => regex.test(input.url)) ) } @@ -99,7 +100,7 @@ export const savePage = async ( await createPageSaveRequest({ userId: user.id, url: itemToSave.originalUrl, - articleSavingRequestId: clientRequestId, + articleSavingRequestId: clientRequestId || undefined, state: input.state || undefined, labels: input.labels || undefined, }) diff --git a/packages/api/test/resolvers/article.test.ts b/packages/api/test/resolvers/article.test.ts index 7cb3cdcbe..4f8a3c96e 100644 --- a/packages/api/test/resolvers/article.test.ts +++ b/packages/api/test/resolvers/article.test.ts @@ -185,15 +185,17 @@ const savePageQuery = ( title: string, originalContent: string, state: ArticleSavingRequestStatus | null = null, - labels: string[] | null = null + labels: string[] | null = null, + clientRequestId = generateFakeUuid(), + source = 'puppeteer-parse' ) => { return ` mutation { savePage( input: { url: "${url}", - source: "test", - clientRequestId: "${generateFakeUuid()}", + source: "${source}", + clientRequestId: "${clientRequestId}", title: "${title}", originalContent: "${originalContent}" state: ${state} @@ -605,6 +607,29 @@ describe('Article API', () => { expect(savedItem?.labels?.map((l) => l.name)).to.eql(labels) }) }) + + context('when the source is rss-feeder and url is from youtube.com', () => { + const source = 'rss-feeder' + const stub = sinon.stub(createTask, 'enqueueParseRequest') + + before(() => { + url = 'https://www.youtube.com/watch?v=123' + }) + + after(async () => { + await deleteLibraryItemByUrl(url, user.id) + sinon.restore() + }) + + it('does not parse in the backend', async () => { + await graphqlRequest( + savePageQuery(url, title, originalContent, null, null, '', source), + authToken + ).expect(200) + + expect(stub).not.to.have.been.called + }) + }) }) describe('SaveUrl', () => {