From defe2732208b0321cba23423315d0ac544c3f8f5 Mon Sep 17 00:00:00 2001 From: sigvardt Date: Sat, 21 Mar 2026 20:34:00 +0100 Subject: [PATCH] fix #596: prevent events search category from over-extracting fields - Fix splitLines logic to split by newlines before normalizing whitespace in linkedinSearch.ts and linkedinEvents.ts - Add e2e assertions to ensure title and date_time fields are reasonably sized --- packages/core/src/__tests__/e2e/events.e2e.test.ts | 2 ++ packages/core/src/__tests__/e2e/search.e2e.test.ts | 2 ++ packages/core/src/linkedinEvents.ts | 2 +- packages/core/src/linkedinSearch.ts | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/core/src/__tests__/e2e/events.e2e.test.ts b/packages/core/src/__tests__/e2e/events.e2e.test.ts index f8fa6318..3fa6f7ba 100644 --- a/packages/core/src/__tests__/e2e/events.e2e.test.ts +++ b/packages/core/src/__tests__/e2e/events.e2e.test.ts @@ -29,7 +29,9 @@ describe("Events E2E", () => { const first = result.results[0]!; expect(first.event_id.length).toBeGreaterThan(0); expect(first.title.length).toBeGreaterThan(0); + expect(first.title.length).toBeLessThan(200); expect(typeof first.date_time).toBe("string"); + expect(first.date_time.length).toBeLessThan(100); expect(typeof first.location).toBe("string"); expect(typeof first.organizer).toBe("string"); expect(typeof first.attendee_count).toBe("string"); diff --git a/packages/core/src/__tests__/e2e/search.e2e.test.ts b/packages/core/src/__tests__/e2e/search.e2e.test.ts index d952619d..5843791b 100644 --- a/packages/core/src/__tests__/e2e/search.e2e.test.ts +++ b/packages/core/src/__tests__/e2e/search.e2e.test.ts @@ -129,6 +129,8 @@ describe("Search E2E", () => { expect(first).toBeDefined(); if (first) { expect(first.title.length).toBeGreaterThan(0); + expect(first.title.length).toBeLessThan(200); + expect(first.date.length).toBeLessThan(100); } }); diff --git a/packages/core/src/linkedinEvents.ts b/packages/core/src/linkedinEvents.ts index 2533c39d..7a254503 100644 --- a/packages/core/src/linkedinEvents.ts +++ b/packages/core/src/linkedinEvents.ts @@ -344,7 +344,7 @@ async function extractEventSearchResults( return uniqueLinks.slice(0, maxEvents).map((link) => { const card = link.closest("li") ?? link.closest("div[data-view-tracking-scope]") ?? link.closest("div.search-result__wrapper") ?? link.parentElement; - const rawText = normalize((card as HTMLElement)?.innerText ?? link.innerText ?? ""); + const rawText = (card as HTMLElement)?.innerText ?? link.innerText ?? ""; const lines = rawText .split("\n") .map((line) => normalize(line)) diff --git a/packages/core/src/linkedinSearch.ts b/packages/core/src/linkedinSearch.ts index 641c4866..8cf420f1 100644 --- a/packages/core/src/linkedinSearch.ts +++ b/packages/core/src/linkedinSearch.ts @@ -2295,7 +2295,7 @@ export class LinkedInSearchService { return Array.from(globalThis.document.querySelectorAll("main li, div.search-results-container ul > li, ul.reusable-search__entity-result-list > li")) .map((card) => { - const lines = normalize((card as HTMLElement).innerText) + const lines = ((card as HTMLElement).innerText || "") .split("\n") .map((line) => normalize(line)) .filter(Boolean);