@lhremote/core 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- export type { Account, ActionBudget, ActionBudgetEntry, ActionConfig, ActionErrorSummary, ActionPeopleCounts, ActionStatistics, CampaignActionConfig, CampaignActionResult, CampaignActionUpdateConfig, ActionSettings, ActionTargetPerson, Campaign, CampaignAction, CampaignConfig, CampaignPersonEntry, CampaignPersonState, CampaignRunResult, CampaignState, EphemeralActionResult, EphemeralExecuteOptions, ResultProfileData, CampaignStatistics, CampaignStatus, CampaignSummary, CampaignUpdateConfig, CriticalErrorIssueData, DialogIssueData, ExcludeListEntry, Chat, ChatParticipant, ConversationMessages, ConversationThread, CurrentPosition, Education, ExternalId, ExternalIdTypeGroup, FeedPost, GetResultsOptions, GetStatisticsOptions, ImportPeopleResult, LimitType, RemovePeopleResult, InstanceInfo, InstanceIssue, InstancePopup, InstanceStatus, ListCampaignPeopleOptions, ListCampaignsOptions, Message, MessageStats, MessageSummary, MiniProfile, PopupState, PostComment, PostDetail, PostEngager, PostStats, Position, Profile, ProfileFindOptions, ProfileSearchOptions, ProfileSearchResult, ProfileSummary, ReactionCount, RunnerState, Skill, BasicSearchParams, BooleanExpressionInput, BooleanExpressionRaw, BooleanExpressionStructured, CompanySizeEntry, ConnectionDegreeEntry, EntityMatch, EntityType, FunctionEntry, IndustryEntry, ProfileLanguageEntry, ReferenceDataType, SNFilter, SNFilterValue, SNSearchParams, SeniorityEntry, SourceTier, SourceType, StartInstanceParams, StartInstanceResult, ThrottleStatus, UIHealthStatus, UrlBuilderResult, } from "./types/index.js";
1
+ export type { Account, ActionBudget, ActionBudgetEntry, ActionConfig, ActionErrorSummary, ActionPeopleCounts, ActionStatistics, CampaignActionConfig, CampaignActionResult, CampaignActionUpdateConfig, ActionSettings, ActionTargetPerson, Campaign, CampaignAction, CampaignConfig, CampaignPersonEntry, CampaignPersonState, CampaignRunResult, CampaignState, EphemeralActionResult, EphemeralExecuteOptions, ResultProfileData, CampaignStatistics, CampaignStatus, CampaignSummary, CampaignUpdateConfig, CriticalErrorIssueData, DialogIssueData, ExcludeListEntry, Chat, ChatParticipant, ConversationMessages, ConversationThread, CurrentPosition, Education, ExternalId, ExternalIdTypeGroup, FeedPost, GetResultsOptions, GetStatisticsOptions, ImportPeopleResult, LimitType, RemovePeopleResult, InstanceInfo, InstanceIssue, InstancePopup, InstanceStatus, ListCampaignPeopleOptions, ListCampaignsOptions, Message, MessageStats, MessageSummary, MiniProfile, PopupState, PostComment, PostDetail, PostEngager, PostStats, Position, Profile, ProfileFindOptions, ProfileSearchOptions, ProfileSearchResult, ProfileSummary, ReactionCount, RunnerState, Skill, BasicSearchParams, BooleanExpressionInput, BooleanExpressionRaw, BooleanExpressionStructured, CompanySizeEntry, ConnectionDegreeEntry, EntityMatch, EntityType, FunctionEntry, IndustryEntry, ProfileLanguageEntry, ReferenceDataType, SNFilter, SNFilterValue, SNSearchParams, SeniorityEntry, SourceTier, SourceType, StartInstanceParams, StartInstanceResult, ThrottleStatus, UIHealthStatus, UrlBuilderResult, Workspace, WorkspaceAccess, WorkspaceAccessLevel, WorkspaceInvitationStatus, WorkspaceUser, WorkspaceUserRole, } from "./types/index.js";
2
+ export { canStartInstance, isOwnerOrExtended, isRestrictedOrHigher, isViewOnlyOrHigher, WORKSPACE_ACCESS_LEVEL_ORDER, } from "./types/index.js";
2
3
  export { AccountResolutionError, ActionExecutionError, type ActionResult, AppLaunchError, AppNotFoundError, AppService, type AppServiceOptions, BudgetExceededError, CampaignExecutionError, CampaignService, CampaignTimeoutError, EphemeralCampaignService, CollectionBusyError, CollectionError, type DatabaseContext, buildBasicSearchUrl, buildBooleanExpression, buildParameterisedUrl, buildSNSearchUrl, detectSourceType, getFixedUrl, getParameterType, isFixedUrlType, isParameterisedType, isSNSearchBuilderType, isSearchBuilderType, ExtractionTimeoutError, type InstanceDatabaseContext, InstanceNotRunningError, InstanceService, InvalidProfileUrlError, LauncherService, LinkedHelperNotRunningError, LinkedHelperUnreachableError, resolveAccount, ServiceError, StartInstanceError, startInstanceWithRecovery, UIBlockedError, validateSourceType, type StartInstanceOutcome, checkStatus, type AccountInstanceStatus, type DatabaseStatus, type LauncherStatus, type StatusReport, waitForInstancePort, waitForInstanceShutdown, waitForInstanceTargets, withDatabase, withInstanceDatabase, NodeIntegrationUnavailableError, WrongPortError, } from "./services/index.js";
3
4
  export { ActionBudgetRepository, CampaignExcludeListRepository, CampaignRepository, CampaignStatisticsRepository, CollectionListRepository, type CollectionSummary, DatabaseClient, type DatabaseClientOptions, discoverAllDatabases, discoverDatabase, MessageRepository, ProfileRepository, } from "./db/index.js";
4
5
  export { CampaignFormatError, FormatError, parseCampaignJson, parseCampaignYaml, serializeCampaignJson, serializeCampaignYaml, } from "./formats/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  // SPDX-License-Identifier: AGPL-3.0-only
2
2
  // Copyright (C) 2026 Oleksii PELYKH
3
+ export { canStartInstance, isOwnerOrExtended, isRestrictedOrHigher, isViewOnlyOrHigher, WORKSPACE_ACCESS_LEVEL_ORDER, } from "./types/index.js";
3
4
  // Services
4
5
  export { AccountResolutionError, ActionExecutionError, AppLaunchError, AppNotFoundError, AppService, BudgetExceededError, CampaignExecutionError, CampaignService, CampaignTimeoutError, EphemeralCampaignService, CollectionBusyError, CollectionError, buildBasicSearchUrl, buildBooleanExpression, buildParameterisedUrl, buildSNSearchUrl, detectSourceType, getFixedUrl, getParameterType, isFixedUrlType, isParameterisedType, isSNSearchBuilderType, isSearchBuilderType, ExtractionTimeoutError, InstanceNotRunningError, InstanceService, InvalidProfileUrlError, LauncherService, LinkedHelperNotRunningError, LinkedHelperUnreachableError, resolveAccount, ServiceError, StartInstanceError, startInstanceWithRecovery, UIBlockedError, validateSourceType, checkStatus, waitForInstancePort, waitForInstanceShutdown, waitForInstanceTargets, withDatabase, withInstanceDatabase, NodeIntegrationUnavailableError, WrongPortError, } from "./services/index.js";
5
6
  // Data access
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -52,7 +52,7 @@ export interface RawDomPost {
52
52
  * separate phase by opening each post's three-dot menu, clicking
53
53
  * "Copy link to post", and deriving the URN from the captured URL.
54
54
  */
55
- declare const SCRAPE_FEED_POSTS_SCRIPT = "(() => {\n const posts = [];\n\n // --- Step 1: Find the feed list via data-testid ---\n const feedList = document.querySelector('[data-testid=\"mainFeed\"]');\n if (!feedList) return posts;\n\n // --- Step 2: Iterate listitem children ---\n const items = feedList.querySelectorAll('div[role=\"listitem\"]');\n for (const wrapper of items) {\n // The listitem wraps the actual post content in nested divs.\n // Some listitems may be zero-height (virtualized/hidden) or\n // non-post items (composer, suggestions).\n const item = wrapper;\n if (item.offsetHeight < 100) continue;\n\n // Detect real posts: must have a three-dot menu button\n const menuBtn = item.querySelector('button[aria-label^=\"Open control menu for post\"]');\n if (!menuBtn) continue;\n\n // --- Author info ---\n let authorName = null;\n let authorHeadline = null;\n let authorProfileUrl = null;\n\n const authorLink = item.querySelector('a[href*=\"/in/\"], a[href*=\"/company/\"]');\n if (authorLink) {\n authorProfileUrl = authorLink.href.split('?')[0] || null;\n const nameEl = authorLink.querySelector('span[dir=\"ltr\"], span[aria-hidden=\"true\"]')\n || authorLink;\n const rawName = (nameEl.textContent || '').trim();\n authorName = rawName || null;\n }\n\n // Author headline: look for a short descriptive text near the author.\n const allSpans = item.querySelectorAll('span');\n for (const span of allSpans) {\n const txt = (span.textContent || '').trim();\n if (\n txt &&\n txt.length > 5 &&\n txt.length < 200 &&\n txt !== authorName &&\n !txt.match(/^\\d+[smhdw]$/) &&\n !txt.match(/^\\d[\\d,]*\\s+(reactions?|comments?|reposts?|likes?)$/i) &&\n !txt.match(/^Follow$|^Promoted$/i)\n ) {\n authorHeadline = txt;\n break;\n }\n }\n\n // --- Post text ---\n let text = null;\n const ltrSpans = item.querySelectorAll('span[dir=\"ltr\"]');\n let longestText = '';\n for (const span of ltrSpans) {\n const txt = (span.textContent || '').trim();\n if (txt.length > longestText.length && txt !== authorName && txt !== authorHeadline) {\n longestText = txt;\n }\n }\n if (longestText.length > 20) {\n text = longestText;\n }\n\n // --- Media type ---\n let mediaType = null;\n if (item.querySelector('video')) {\n mediaType = 'video';\n } else if (item.querySelector('img[src*=\"media.licdn.com\"]')) {\n const imgs = item.querySelectorAll('img[src*=\"media.licdn.com\"]');\n for (const img of imgs) {\n if (img.offsetHeight > 100) { mediaType = 'image'; break; }\n }\n }\n\n // --- Engagement counts ---\n const itemText = item.textContent || '';\n\n function parseCount(pattern) {\n const m = itemText.match(pattern);\n if (!m) return 0;\n const raw = m[1].replace(/,/g, '');\n const num = parseInt(raw, 10);\n return isNaN(num) ? 0 : num;\n }\n\n const reactionCount = parseCount(/(\\d[\\d,]*)\\s+reactions?/i);\n const commentCount = parseCount(/(\\d[\\d,]*)\\s+comments?/i);\n const shareCount = parseCount(/(\\d[\\d,]*)\\s+reposts?/i);\n\n // --- Timestamp ---\n let timestamp = null;\n const timeEl = item.querySelector('time');\n if (timeEl) {\n const dt = timeEl.getAttribute('datetime');\n if (dt) timestamp = dt;\n }\n if (!timestamp) {\n const timeMatch = itemText.match(/(?:^|\\s)(\\d+[smhdw])(?:\\s|$|\\u00B7|\\xB7)/);\n if (timeMatch) timestamp = timeMatch[1];\n }\n\n posts.push({\n url: null,\n authorName: authorName,\n authorHeadline: authorHeadline,\n authorProfileUrl: authorProfileUrl,\n text: text,\n mediaType: mediaType,\n reactionCount: reactionCount,\n commentCount: commentCount,\n shareCount: shareCount,\n timestamp: timestamp,\n });\n }\n\n return posts;\n})()";
55
+ declare const SCRAPE_FEED_POSTS_SCRIPT = "(() => {\n const posts = [];\n if (window.__lhrNextIdx == null) window.__lhrNextIdx = 0;\n\n // --- Step 1: Find the feed list via data-testid ---\n const feedList = document.querySelector('[data-testid=\"mainFeed\"]');\n if (!feedList) return posts;\n\n // --- Step 2: Iterate listitem children ---\n const items = feedList.querySelectorAll('div[role=\"listitem\"]');\n for (const wrapper of items) {\n // The listitem wraps the actual post content in nested divs.\n // Some listitems may be zero-height (virtualized/hidden) or\n // non-post items (composer, suggestions).\n const item = wrapper;\n if (item.offsetHeight < 100) continue;\n\n // Detect real posts: must have a three-dot menu button\n const menuBtn = item.querySelector('button[aria-label^=\"Open control menu for post\"]');\n if (!menuBtn) continue;\n\n // --- Discovery tagging ---\n // Tag each listitem with a unique index on first discovery so that\n // posts can be accumulated across scroll iterations despite LinkedIn\n // virtualising off-screen items out of the DOM. The index value\n // itself isn't consumed by the Node-side logic \u2014 it's only used as\n // the DOM attribute payload so that already-seen items can be\n // recognised on subsequent scrapes.\n let _isNew = false;\n if (!item.hasAttribute('data-lhr-idx')) {\n item.setAttribute('data-lhr-idx', String(window.__lhrNextIdx++));\n _isNew = true;\n }\n\n // --- Author info ---\n let authorName = null;\n let authorHeadline = null;\n let authorProfileUrl = null;\n\n const authorLink = item.querySelector('a[href*=\"/in/\"], a[href*=\"/company/\"]');\n if (authorLink) {\n authorProfileUrl = authorLink.href.split('?')[0] || null;\n const nameEl = authorLink.querySelector('span[dir=\"ltr\"], span[aria-hidden=\"true\"]')\n || authorLink;\n const rawName = (nameEl.textContent || '').trim();\n authorName = rawName || null;\n }\n\n // Author headline: look for a short descriptive text near the author.\n const allSpans = item.querySelectorAll('span');\n for (const span of allSpans) {\n const txt = (span.textContent || '').trim();\n if (\n txt &&\n txt.length > 5 &&\n txt.length < 200 &&\n txt !== authorName &&\n !txt.match(/^\\d+[smhdw]$/) &&\n !txt.match(/^\\d[\\d,]*\\s+(reactions?|comments?|reposts?|likes?)$/i) &&\n !txt.match(/^Follow$|^Promoted$/i)\n ) {\n authorHeadline = txt;\n break;\n }\n }\n\n // --- Post text ---\n let text = null;\n const ltrSpans = item.querySelectorAll('span[dir=\"ltr\"]');\n let longestText = '';\n for (const span of ltrSpans) {\n const txt = (span.textContent || '').trim();\n if (txt.length > longestText.length && txt !== authorName && txt !== authorHeadline) {\n longestText = txt;\n }\n }\n if (longestText.length > 20) {\n text = longestText;\n }\n\n // --- Media type ---\n let mediaType = null;\n if (item.querySelector('video')) {\n mediaType = 'video';\n } else if (item.querySelector('img[src*=\"media.licdn.com\"]')) {\n const imgs = item.querySelectorAll('img[src*=\"media.licdn.com\"]');\n for (const img of imgs) {\n if (img.offsetHeight > 100) { mediaType = 'image'; break; }\n }\n }\n\n // --- Engagement counts ---\n const itemText = item.textContent || '';\n\n function parseCount(pattern) {\n const m = itemText.match(pattern);\n if (!m) return 0;\n const raw = m[1].replace(/,/g, '');\n const num = parseInt(raw, 10);\n return isNaN(num) ? 0 : num;\n }\n\n const reactionCount = parseCount(/(\\d[\\d,]*)\\s+reactions?/i);\n const commentCount = parseCount(/(\\d[\\d,]*)\\s+comments?/i);\n const shareCount = parseCount(/(\\d[\\d,]*)\\s+reposts?/i);\n\n // --- Timestamp ---\n let timestamp = null;\n const timeEl = item.querySelector('time');\n if (timeEl) {\n const dt = timeEl.getAttribute('datetime');\n if (dt) timestamp = dt;\n }\n if (!timestamp) {\n const timeMatch = itemText.match(/(?:^|\\s)(\\d+[smhdw])(?:\\s|$|\\u00B7|\\xB7)/);\n if (timeMatch) timestamp = timeMatch[1];\n }\n\n posts.push({\n _isNew: _isNew,\n url: null,\n authorName: authorName,\n authorHeadline: authorHeadline,\n authorProfileUrl: authorProfileUrl,\n text: text,\n mediaType: mediaType,\n reactionCount: reactionCount,\n commentCount: commentCount,\n shareCount: shareCount,\n timestamp: timestamp,\n });\n }\n\n return posts;\n})()";
56
56
  /**
57
57
  * Legacy scraping script using structural heuristics to find the feed
58
58
  * container. Used by search-posts which navigates to search result
@@ -1 +1 @@
1
- {"version":3,"file":"get-feed.d.ts","sourceRoot":"","sources":["../../src/operations/get-feed.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,KAAK,IAAI,UAAU,EAAkF,MAAM,mBAAmB,CAAC;AACxI,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,oEAAoE;IACpE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC3B,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAMD,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAMD;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,wBAAwB,g5HAuHzB,CAAC;AAEN;;;;;;GAMG;AACH,OAAO,EAAE,wBAAwB,IAAI,kBAAkB,EAAE,CAAC;AAmH1D;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,CAI7D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAwBhE;AAED;;GAEG;AACH,oDAAoD;AACpD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;GAEG;AACH,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,CAezD;AAMD,wDAAwD;AACxD,eAAO,MAAM,KAAK,mBAAa,CAAC;AAEhC;;;;;;;;;;;GAWG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,GAC5B,OAAO,CAAC,IAAI,CAAC,CAKf;AAMD,oDAAoD;AACpD,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,SAAS,SAAS,GACjB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,OAAO,CAC3B,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,aAAa,CAAC,CAmIxB"}
1
+ {"version":3,"file":"get-feed.d.ts","sourceRoot":"","sources":["../../src/operations/get-feed.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,KAAK,IAAI,UAAU,EAAkF,MAAM,mBAAmB,CAAC;AACxI,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,oEAAoE;IACpE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC3B,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAMD,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAMD;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,wBAAwB,6kJAsIzB,CAAC;AAEN;;;;;;GAMG;AACH,OAAO,EAAE,wBAAwB,IAAI,kBAAkB,EAAE,CAAC;AAmH1D;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,CAI7D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAwBhE;AAED;;GAEG;AACH,oDAAoD;AACpD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;GAEG;AACH,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,CAezD;AAMD,wDAAwD;AACxD,eAAO,MAAM,KAAK,mBAAa,CAAC;AAEhC;;;;;;;;;;;GAWG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,GAC5B,OAAO,CAAC,IAAI,CAAC,CAKf;AAMD,oDAAoD;AACpD,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,SAAS,SAAS,GACjB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,OAAO,CAC3B,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,aAAa,CAAC,CA6LxB"}
@@ -27,6 +27,7 @@ import { navigateAwayIf } from "./navigate-away.js";
27
27
  */
28
28
  const SCRAPE_FEED_POSTS_SCRIPT = `(() => {
29
29
  const posts = [];
30
+ if (window.__lhrNextIdx == null) window.__lhrNextIdx = 0;
30
31
 
31
32
  // --- Step 1: Find the feed list via data-testid ---
32
33
  const feedList = document.querySelector('[data-testid="mainFeed"]');
@@ -45,6 +46,19 @@ const SCRAPE_FEED_POSTS_SCRIPT = `(() => {
45
46
  const menuBtn = item.querySelector('button[aria-label^="Open control menu for post"]');
46
47
  if (!menuBtn) continue;
47
48
 
49
+ // --- Discovery tagging ---
50
+ // Tag each listitem with a unique index on first discovery so that
51
+ // posts can be accumulated across scroll iterations despite LinkedIn
52
+ // virtualising off-screen items out of the DOM. The index value
53
+ // itself isn't consumed by the Node-side logic — it's only used as
54
+ // the DOM attribute payload so that already-seen items can be
55
+ // recognised on subsequent scrapes.
56
+ let _isNew = false;
57
+ if (!item.hasAttribute('data-lhr-idx')) {
58
+ item.setAttribute('data-lhr-idx', String(window.__lhrNextIdx++));
59
+ _isNew = true;
60
+ }
61
+
48
62
  // --- Author info ---
49
63
  let authorName = null;
50
64
  let authorHeadline = null;
@@ -130,6 +144,7 @@ const SCRAPE_FEED_POSTS_SCRIPT = `(() => {
130
144
  }
131
145
 
132
146
  posts.push({
147
+ _isNew: _isNew,
133
148
  url: null,
134
149
  authorName: authorName,
135
150
  authorHeadline: authorHeadline,
@@ -391,31 +406,90 @@ export async function getFeed(input) {
391
406
  await client.navigate("https://www.linkedin.com/feed/");
392
407
  // Wait for the initial feed content to render
393
408
  await waitForFeedLoad(client);
394
- // Collect posts — scroll to load more if needed
409
+ // Collect posts — scroll to load more if needed.
410
+ //
411
+ // LinkedIn's main feed virtualises off-screen posts out of the DOM,
412
+ // so each point-in-time scrape only sees ~8-13 items. To accumulate
413
+ // beyond that cap we tag discovered listitems with `data-lhr-idx`
414
+ // and interleave URL extraction with scrolling so that each post's
415
+ // URL is captured while the element is still visible.
416
+ //
417
+ // The target is counted in URL-bearing posts only (`seenUrls.size`).
418
+ // Posts whose URL extraction failed are still accumulated for
419
+ // completeness but don't count toward the target — otherwise a run
420
+ // of transient failures could make the loop exit with a window of
421
+ // null-URL posts and no usable cursor.
422
+ //
423
+ // We need `count` posts plus one extra so the hasMore check has a
424
+ // post beyond the result window. Cursor calls use `count * 2 + 1`:
425
+ // up to `count` posts may be consumed locating the cursor, then
426
+ // `count` more for the next page, plus one for hasMore.
395
427
  const maxScrollAttempts = 10;
396
- let allPosts = [];
397
- let previousCount = 0;
428
+ const allPosts = [];
429
+ const seenUrls = new Set();
430
+ const accumulationTarget = cursor ? count * 2 + 1 : count + 1;
431
+ let previousUrlCount = 0;
398
432
  // If resuming with a cursor, we need to scroll past already-seen posts
399
433
  const cursorUrl = cursor;
434
+ // Install the clipboard interceptor before the scroll loop so that
435
+ // URL extraction can happen inside each iteration.
436
+ await installClipboardInterceptor(client);
400
437
  for (let scroll = 0; scroll <= maxScrollAttempts; scroll++) {
401
- const countBeforeScroll = previousCount;
438
+ const countBefore = allPosts.length;
439
+ // Scrape visible posts — the script tags each listitem with a
440
+ // discovery index and reports which items are newly discovered.
402
441
  const scraped = await client.evaluate(SCRAPE_FEED_POSTS_SCRIPT);
403
- allPosts = scraped ?? [];
404
- // Determine which posts to return
405
- const available = allPosts.length;
406
- if (available >= count && !cursorUrl)
442
+ const batch = scraped ?? [];
443
+ // Extract URLs for newly discovered posts while they are visible.
444
+ // `domIdx` is the position within the current batch which matches
445
+ // the DOM order of visible menu buttons.
446
+ //
447
+ // To avoid extracting URLs for far more posts than needed (each
448
+ // extraction opens the three-dot menu — ~1-2 s per post), we stop
449
+ // once we have enough URL-bearing posts.
450
+ let extractedInBatch = 0;
451
+ for (let domIdx = 0; domIdx < batch.length; domIdx++) {
452
+ const post = batch[domIdx];
453
+ if (!post?._isNew)
454
+ continue;
455
+ // Stop extracting once we have enough URL-bearing posts
456
+ if (seenUrls.size >= accumulationTarget)
457
+ break;
458
+ if (extractedInBatch > 0)
459
+ await gaussianDelay(550, 125, 300, 800);
460
+ await maybeBreak();
461
+ const url = await retryInteraction(() => capturePostUrl(client, domIdx, mouse));
462
+ if (url) {
463
+ post.url = url;
464
+ }
465
+ extractedInBatch++;
466
+ // Accumulate the post (dedup by URL when available)
467
+ if (post.url) {
468
+ if (!seenUrls.has(post.url)) {
469
+ seenUrls.add(post.url);
470
+ allPosts.push(post);
471
+ }
472
+ }
473
+ else {
474
+ // URL extraction failed — include for completeness but don't
475
+ // count toward accumulationTarget (see comment above).
476
+ allPosts.push(post);
477
+ }
478
+ }
479
+ // Enough URL-bearing posts accumulated?
480
+ if (seenUrls.size >= accumulationTarget)
407
481
  break;
408
- // No new posts appeared after scroll — stop
409
- if (allPosts.length === previousCount && scroll > 0)
482
+ // No new URL-bearing posts after scroll — stop
483
+ if (seenUrls.size === previousUrlCount && scroll > 0)
410
484
  break;
411
- previousCount = allPosts.length;
485
+ const newPostCount = allPosts.length - countBefore;
486
+ previousUrlCount = seenUrls.size;
412
487
  // Scroll to load more
413
488
  if (scroll < maxScrollAttempts) {
414
489
  await scrollFeed(client, mouse);
415
490
  // Progressive session fatigue: delays increase with each scroll
416
491
  const fatigueMultiplier = 1 + scroll * 0.1;
417
492
  // Scale delay by newly visible content volume
418
- const newPostCount = allPosts.length - countBeforeScroll;
419
493
  const contentBonus = Math.min(newPostCount * gaussianBetween(350, 75, 200, 500), 3_000);
420
494
  await gaussianDelay(1_500 * fatigueMultiplier + contentBonus, 150 * fatigueMultiplier, 1_200 * fatigueMultiplier + contentBonus, 1_800 * fatigueMultiplier + contentBonus);
421
495
  // Reading simulation: pause proportional to visible content volume.
@@ -426,23 +500,6 @@ export async function getFeed(input) {
426
500
  await maybeBreak();
427
501
  }
428
502
  }
429
- // --- URL extraction phase ---
430
- // Open each post's three-dot menu, click "Copy link to post", and
431
- // derive the URN from the captured URL. This populates the urn/url
432
- // fields that the scrape script left null.
433
- await installClipboardInterceptor(client);
434
- for (let i = 0; i < allPosts.length; i++) {
435
- const post = allPosts[i];
436
- if (!post)
437
- continue;
438
- if (i > 0)
439
- await gaussianDelay(550, 125, 300, 800); // Inter-post delay
440
- await maybeBreak();
441
- const url = await retryInteraction(() => capturePostUrl(client, i, mouse));
442
- if (url) {
443
- post.url = url;
444
- }
445
- }
446
503
  // Slice the result window
447
504
  let startIdx = 0;
448
505
  if (cursorUrl) {
@@ -453,10 +510,20 @@ export async function getFeed(input) {
453
510
  }
454
511
  const window = allPosts.slice(startIdx, startIdx + count);
455
512
  const posts = mapRawPosts(window);
456
- // Determine next cursor
513
+ // Determine next cursor — scan backwards for the nearest post with a
514
+ // non-null URL so that a single failed URL extraction doesn't block
515
+ // pagination when more posts are available.
457
516
  const hasMore = startIdx + count < allPosts.length;
458
- const lastPost = window[window.length - 1];
459
- const nextCursor = hasMore && lastPost ? lastPost.url : null;
517
+ let nextCursor = null;
518
+ if (hasMore) {
519
+ for (let i = window.length - 1; i >= 0; i--) {
520
+ const postUrl = window[i]?.url;
521
+ if (postUrl) {
522
+ nextCursor = postUrl;
523
+ break;
524
+ }
525
+ }
526
+ }
460
527
  await gaussianDelay(800, 300, 300, 1_800); // Post-action dwell
461
528
  return { posts, nextCursor };
462
529
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get-feed.js","sourceRoot":"","sources":["../../src/operations/get-feed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-feed.js","sourceRoot":"","sources":["../../src/operations/get-feed.ts"],"names":[],"mappings":"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"}
@@ -43,19 +43,31 @@ function rawPost(overrides = {}) {
43
43
  /**
44
44
  * Create a script-aware evaluate mock that handles the getFeed call sequence:
45
45
  * 1. waitForFeedLoad → truthy when posts exist
46
- * 2. SCRAPE_FEED_POSTS_SCRIPT posts array (may repeat on scroll)
47
- * 3. Clipboard interceptor install void
48
- * 4. Per-post URL capture: reset → void, scroll → void, menu click → true,
49
- * copy-link click → void, clipboard read → url string
46
+ * 2. Clipboard interceptor install void
47
+ * 3. SCRAPE_FEED_POSTS_SCRIPT indexed posts array (may repeat on scroll)
48
+ * 4. Per-post URL capture (interleaved): reset → void, scroll → void,
49
+ * menu click → true, copy-link click → void, clipboard read → url string
50
+ *
51
+ * The scrape mock adds an `_isNew` field to match the DOM-tagging
52
+ * accumulation strategy. On the first call all posts are "new"; subsequent
53
+ * calls return the same posts as "already seen" so that the scroll loop
54
+ * exits after one iteration.
50
55
  */
51
56
  function createEvaluateMock(scrapedPosts) {
52
57
  let urlIdx = 0;
58
+ let scrapeCallCount = 0;
53
59
  return vi.fn().mockImplementation((script) => {
54
60
  const s = String(script);
55
61
  // Order matters: check most specific patterns first
56
- // Scrape script: long script with parseCount function
62
+ // Scrape script: long script with parseCount function.
63
+ // Returns posts with discovery-tagging field (_isNew).
57
64
  if (s.includes("parseCount")) {
58
- return Promise.resolve(scrapedPosts);
65
+ const isFirstScrape = scrapeCallCount === 0;
66
+ scrapeCallCount++;
67
+ return Promise.resolve(scrapedPosts.map((p) => ({
68
+ ...p,
69
+ _isNew: isFirstScrape,
70
+ })));
59
71
  }
60
72
  // Clipboard interceptor install
61
73
  if (s.includes("navigator.clipboard.writeText")) {
@@ -172,10 +184,14 @@ describe("getFeed", () => {
172
184
  },
173
185
  ]);
174
186
  let clipboardReadCount = 0;
187
+ let retryScrapeCount = 0;
175
188
  const evaluate = vi.fn().mockImplementation((script) => {
176
189
  const s = String(script);
177
- if (s.includes("parseCount"))
178
- return Promise.resolve([post]);
190
+ if (s.includes("parseCount")) {
191
+ const isFirst = retryScrapeCount === 0;
192
+ retryScrapeCount++;
193
+ return Promise.resolve([{ ...post, _isNew: isFirst }]);
194
+ }
179
195
  if (s.includes("navigator.clipboard.writeText"))
180
196
  return Promise.resolve(undefined);
181
197
  if (s.includes("__capturedClipboard = null"))
@@ -237,6 +253,116 @@ describe("getFeed", () => {
237
253
  const result = await getFeed({ cdpPort: CDP_PORT, count: 2 });
238
254
  expect(result.nextCursor).toBe("https://www.linkedin.com/feed/update/urn:li:activity:2/");
239
255
  });
256
+ it("returns nextCursor from nearest post with URL when last post URL is null", async () => {
257
+ // Custom mock: 3 posts where only the first has a successful URL extraction.
258
+ // The clipboard mock returns a URL for the first post only; all subsequent
259
+ // reads return null, causing capturePostUrl to genuinely fail for posts 2–3.
260
+ vi.mocked(discoverTargets).mockResolvedValue([{
261
+ id: "target-1", type: "page", title: "LinkedIn",
262
+ url: "https://www.linkedin.com/feed/",
263
+ description: "", devtoolsFrontendUrl: "",
264
+ }]);
265
+ const posts = [
266
+ { ...rawPost({ url: null }), _isNew: true },
267
+ { ...rawPost({ url: null }), _isNew: true },
268
+ { ...rawPost({ url: null }), _isNew: true },
269
+ ];
270
+ let clipIdx = 0;
271
+ const clipUrls = ["https://www.linkedin.com/feed/update/urn:li:activity:1/"];
272
+ const evaluate = vi.fn().mockImplementation((script) => {
273
+ const s = String(script);
274
+ if (s.includes("parseCount"))
275
+ return Promise.resolve(posts);
276
+ if (s.includes("navigator.clipboard.writeText"))
277
+ return Promise.resolve(undefined);
278
+ if (s.includes("__capturedClipboard = null"))
279
+ return Promise.resolve(undefined);
280
+ if (s.includes("Copy link to post"))
281
+ return Promise.resolve(undefined);
282
+ if (s === "window.__capturedClipboard") {
283
+ const url = clipUrls[clipIdx] ?? null;
284
+ clipIdx++;
285
+ return Promise.resolve(url);
286
+ }
287
+ if (s.includes("btn.click()"))
288
+ return Promise.resolve(true);
289
+ if (s.includes("scrollIntoView"))
290
+ return Promise.resolve(undefined);
291
+ if (s.includes("mainFeed"))
292
+ return Promise.resolve(true);
293
+ return Promise.resolve(null);
294
+ });
295
+ vi.mocked(CDPClient).mockImplementation(function () {
296
+ return {
297
+ connect: vi.fn().mockResolvedValue(undefined),
298
+ disconnect: vi.fn(),
299
+ navigate: vi.fn().mockResolvedValue({ frameId: "F1" }),
300
+ evaluate,
301
+ send: vi.fn().mockResolvedValue(undefined),
302
+ };
303
+ });
304
+ const result = await getFeed({ cdpPort: CDP_PORT, count: 2 });
305
+ // Window = [post0 (url:activity:1), post1 (url:null)], hasMore = true
306
+ // post1.url = null → scan backwards → post0.url
307
+ expect(result.posts).toHaveLength(2);
308
+ expect(result.nextCursor).toBe("https://www.linkedin.com/feed/update/urn:li:activity:1/");
309
+ });
310
+ it("stops extracting URLs once accumulationTarget is reached", async () => {
311
+ // 20 posts available, but count=3 → accumulationTarget = 4.
312
+ // Only 4 URL extractions should occur (not 20).
313
+ const posts = Array.from({ length: 20 }, (_, i) => ({
314
+ ...rawPost({
315
+ url: `https://www.linkedin.com/feed/update/urn:li:activity:${String(i + 1)}/`,
316
+ }),
317
+ _isNew: true,
318
+ }));
319
+ let copyLinkClicks = 0;
320
+ let clipIdx = 0;
321
+ vi.mocked(discoverTargets).mockResolvedValue([{
322
+ id: "target-1", type: "page", title: "LinkedIn",
323
+ url: "https://www.linkedin.com/feed/",
324
+ description: "", devtoolsFrontendUrl: "",
325
+ }]);
326
+ const evaluate = vi.fn().mockImplementation((script) => {
327
+ const s = String(script);
328
+ if (s.includes("parseCount"))
329
+ return Promise.resolve(posts);
330
+ if (s.includes("navigator.clipboard.writeText"))
331
+ return Promise.resolve(undefined);
332
+ if (s.includes("__capturedClipboard = null"))
333
+ return Promise.resolve(undefined);
334
+ if (s.includes("Copy link to post")) {
335
+ copyLinkClicks++;
336
+ return Promise.resolve(undefined);
337
+ }
338
+ if (s === "window.__capturedClipboard") {
339
+ const url = posts[clipIdx]?.url ?? null;
340
+ clipIdx++;
341
+ return Promise.resolve(url);
342
+ }
343
+ if (s.includes("btn.click()"))
344
+ return Promise.resolve(true);
345
+ if (s.includes("scrollIntoView"))
346
+ return Promise.resolve(undefined);
347
+ if (s.includes("mainFeed"))
348
+ return Promise.resolve(true);
349
+ return Promise.resolve(null);
350
+ });
351
+ vi.mocked(CDPClient).mockImplementation(function () {
352
+ return {
353
+ connect: vi.fn().mockResolvedValue(undefined),
354
+ disconnect: vi.fn(),
355
+ navigate: vi.fn().mockResolvedValue({ frameId: "F1" }),
356
+ evaluate,
357
+ send: vi.fn().mockResolvedValue(undefined),
358
+ };
359
+ });
360
+ const result = await getFeed({ cdpPort: CDP_PORT, count: 3 });
361
+ expect(result.posts).toHaveLength(3);
362
+ // Target = count + 1 = 4. Extraction stops as soon as seenUrls.size
363
+ // reaches 4, so "Copy link to post" is clicked exactly 4 times.
364
+ expect(copyLinkClicks).toBe(4);
365
+ });
240
366
  it("returns null nextCursor when all posts are returned", async () => {
241
367
  setupMocks([
242
368
  rawPost({ url: "https://www.linkedin.com/feed/update/urn:li:activity:1/" }),
@@ -314,27 +440,40 @@ describe("getFeed", () => {
314
440
  rawPost({ url: "https://www.linkedin.com/feed/update/urn:li:activity:3/" }),
315
441
  rawPost({ url: "https://www.linkedin.com/feed/update/urn:li:activity:4/" }),
316
442
  ];
317
- let urnIdx = 0;
443
+ let clipIdx = 0;
318
444
  evaluate.mockReset();
319
445
  evaluate.mockImplementation((script) => {
320
446
  const s = String(script);
321
447
  if (s.includes("parseCount")) {
322
448
  scrapeCall++;
323
- return Promise.resolve(scrapeCall === 1 ? firstScrape : secondScrape);
449
+ // First scrape: 2 posts, all new.
450
+ // Second scrape: 4 posts — first 2 already tagged, last 2 new.
451
+ if (scrapeCall === 1) {
452
+ return Promise.resolve(firstScrape.map((p) => ({ ...p, _isNew: true })));
453
+ }
454
+ return Promise.resolve(secondScrape.map((p, i) => ({
455
+ ...p, _isNew: i >= firstScrape.length,
456
+ })));
324
457
  }
325
- if (s.includes("embed-modal")) {
326
- urnIdx++;
327
- return Promise.resolve(`urn:li:activity:${String(urnIdx)}`);
458
+ if (s.includes("navigator.clipboard.writeText"))
459
+ return Promise.resolve(undefined);
460
+ if (s.includes("__capturedClipboard = null"))
461
+ return Promise.resolve(undefined);
462
+ if (s.includes("Copy link to post"))
463
+ return Promise.resolve(undefined);
464
+ if (s === "window.__capturedClipboard") {
465
+ // Return URLs from the combined post list in discovery order
466
+ const allUrls = [...firstScrape, ...secondScrape.slice(firstScrape.length)];
467
+ const url = allUrls[clipIdx]?.url ?? null;
468
+ clipIdx++;
469
+ return Promise.resolve(url);
328
470
  }
329
- if (s.includes("btn.click()")) {
471
+ if (s.includes("btn.click()"))
330
472
  return Promise.resolve(true);
331
- }
332
- if (s.includes("scrollIntoView")) {
473
+ if (s.includes("scrollIntoView"))
333
474
  return Promise.resolve(undefined);
334
- }
335
- if (s.includes("mainFeed")) {
475
+ if (s.includes("mainFeed"))
336
476
  return Promise.resolve(true);
337
- }
338
477
  return Promise.resolve(null);
339
478
  });
340
479
  const result = await getFeed({ cdpPort: CDP_PORT, count: 4 });
@@ -354,26 +493,34 @@ describe("getFeed", () => {
354
493
  rawPost({ url: "https://www.linkedin.com/feed/update/urn:li:activity:1/" }),
355
494
  rawPost({ url: "https://www.linkedin.com/feed/update/urn:li:activity:2/" }),
356
495
  ];
357
- let urnIdx = 0;
496
+ let staleScrapeCount = 0;
497
+ let staleClipIdx = 0;
358
498
  evaluate.mockReset();
359
499
  evaluate.mockImplementation((script) => {
360
500
  const s = String(script);
361
501
  if (s.includes("parseCount")) {
362
- return Promise.resolve(fixedPosts);
502
+ // First call: posts are new. Subsequent: same posts, not new.
503
+ const isFirst = staleScrapeCount === 0;
504
+ staleScrapeCount++;
505
+ return Promise.resolve(fixedPosts.map((p) => ({ ...p, _isNew: isFirst })));
363
506
  }
364
- if (s.includes("embed-modal")) {
365
- urnIdx++;
366
- return Promise.resolve(`urn:li:activity:${String(urnIdx)}`);
507
+ if (s.includes("navigator.clipboard.writeText"))
508
+ return Promise.resolve(undefined);
509
+ if (s.includes("__capturedClipboard = null"))
510
+ return Promise.resolve(undefined);
511
+ if (s.includes("Copy link to post"))
512
+ return Promise.resolve(undefined);
513
+ if (s === "window.__capturedClipboard") {
514
+ const url = fixedPosts[staleClipIdx]?.url ?? null;
515
+ staleClipIdx++;
516
+ return Promise.resolve(url);
367
517
  }
368
- if (s.includes("btn.click()")) {
518
+ if (s.includes("btn.click()"))
369
519
  return Promise.resolve(true);
370
- }
371
- if (s.includes("scrollIntoView")) {
520
+ if (s.includes("scrollIntoView"))
372
521
  return Promise.resolve(undefined);
373
- }
374
- if (s.includes("mainFeed")) {
522
+ if (s.includes("mainFeed"))
375
523
  return Promise.resolve(true);
376
- }
377
524
  return Promise.resolve(null);
378
525
  });
379
526
  const result = await getFeed({ cdpPort: CDP_PORT, count: 10 });