@lhremote/core 0.11.0 → 0.13.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.
Files changed (74) hide show
  1. package/dist/index.d.ts +2 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +4 -4
  4. package/dist/index.js.map +1 -1
  5. package/dist/linkedin/dom-automation-mentions.test.d.ts +2 -0
  6. package/dist/linkedin/dom-automation-mentions.test.d.ts.map +1 -0
  7. package/dist/linkedin/dom-automation-mentions.test.js +165 -0
  8. package/dist/linkedin/dom-automation-mentions.test.js.map +1 -0
  9. package/dist/linkedin/dom-automation.d.ts +30 -0
  10. package/dist/linkedin/dom-automation.d.ts.map +1 -1
  11. package/dist/linkedin/dom-automation.js +147 -0
  12. package/dist/linkedin/dom-automation.js.map +1 -1
  13. package/dist/linkedin/index.d.ts +2 -2
  14. package/dist/linkedin/index.d.ts.map +1 -1
  15. package/dist/linkedin/index.js +2 -2
  16. package/dist/linkedin/index.js.map +1 -1
  17. package/dist/linkedin/selectors.d.ts +27 -0
  18. package/dist/linkedin/selectors.d.ts.map +1 -1
  19. package/dist/linkedin/selectors.js +29 -0
  20. package/dist/linkedin/selectors.js.map +1 -1
  21. package/dist/operations/comment-on-post.d.ts +24 -0
  22. package/dist/operations/comment-on-post.d.ts.map +1 -1
  23. package/dist/operations/comment-on-post.js +64 -13
  24. package/dist/operations/comment-on-post.js.map +1 -1
  25. package/dist/operations/comment-on-post.test.js +93 -1
  26. package/dist/operations/comment-on-post.test.js.map +1 -1
  27. package/dist/operations/dismiss-feed-post.d.ts +28 -0
  28. package/dist/operations/dismiss-feed-post.d.ts.map +1 -0
  29. package/dist/operations/dismiss-feed-post.js +115 -0
  30. package/dist/operations/dismiss-feed-post.js.map +1 -0
  31. package/dist/operations/dismiss-feed-post.test.d.ts +2 -0
  32. package/dist/operations/dismiss-feed-post.test.d.ts.map +1 -0
  33. package/dist/operations/dismiss-feed-post.test.js +137 -0
  34. package/dist/operations/dismiss-feed-post.test.js.map +1 -0
  35. package/dist/operations/get-post.d.ts.map +1 -1
  36. package/dist/operations/get-post.js +5 -1
  37. package/dist/operations/get-post.js.map +1 -1
  38. package/dist/operations/get-post.test.js +10 -9
  39. package/dist/operations/get-post.test.js.map +1 -1
  40. package/dist/operations/hide-feed-author.d.ts +32 -0
  41. package/dist/operations/hide-feed-author.d.ts.map +1 -0
  42. package/dist/operations/hide-feed-author.js +116 -0
  43. package/dist/operations/hide-feed-author.js.map +1 -0
  44. package/dist/operations/hide-feed-author.test.d.ts +2 -0
  45. package/dist/operations/hide-feed-author.test.d.ts.map +1 -0
  46. package/dist/operations/hide-feed-author.test.js +160 -0
  47. package/dist/operations/hide-feed-author.test.js.map +1 -0
  48. package/dist/operations/index.d.ts +3 -0
  49. package/dist/operations/index.d.ts.map +1 -1
  50. package/dist/operations/index.js +3 -0
  51. package/dist/operations/index.js.map +1 -1
  52. package/dist/operations/react-to-post.d.ts +9 -0
  53. package/dist/operations/react-to-post.d.ts.map +1 -1
  54. package/dist/operations/react-to-post.js +15 -4
  55. package/dist/operations/react-to-post.js.map +1 -1
  56. package/dist/operations/react-to-post.test.js +49 -0
  57. package/dist/operations/react-to-post.test.js.map +1 -1
  58. package/dist/operations/unfollow-from-feed.d.ts +30 -0
  59. package/dist/operations/unfollow-from-feed.d.ts.map +1 -0
  60. package/dist/operations/unfollow-from-feed.js +114 -0
  61. package/dist/operations/unfollow-from-feed.js.map +1 -0
  62. package/dist/operations/unfollow-from-feed.test.d.ts +2 -0
  63. package/dist/operations/unfollow-from-feed.test.d.ts.map +1 -0
  64. package/dist/operations/unfollow-from-feed.test.js +141 -0
  65. package/dist/operations/unfollow-from-feed.test.js.map +1 -0
  66. package/dist/testing/e2e-helpers.d.ts +9 -0
  67. package/dist/testing/e2e-helpers.d.ts.map +1 -1
  68. package/dist/testing/e2e-helpers.js +14 -0
  69. package/dist/testing/e2e-helpers.js.map +1 -1
  70. package/dist/testing/index.d.ts +1 -1
  71. package/dist/testing/index.d.ts.map +1 -1
  72. package/dist/testing/index.js +1 -1
  73. package/dist/testing/index.js.map +1 -1
  74. package/package.json +1 -1
@@ -0,0 +1,160 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
4
+ vi.mock("../cdp/client.js", () => ({
5
+ CDPClient: vi.fn(),
6
+ }));
7
+ vi.mock("../cdp/discovery.js", () => ({
8
+ discoverTargets: vi.fn(),
9
+ }));
10
+ vi.mock("../linkedin/dom-automation.js", () => ({
11
+ humanizedScrollToByIndex: vi.fn(),
12
+ retryInteraction: vi.fn().mockImplementation((fn) => fn()),
13
+ }));
14
+ vi.mock("../utils/delay.js", () => ({
15
+ delay: vi.fn().mockResolvedValue(undefined),
16
+ gaussianDelay: vi.fn().mockResolvedValue(undefined),
17
+ }));
18
+ vi.mock("./navigate-away.js", () => ({
19
+ navigateAwayIf: vi.fn().mockResolvedValue(undefined),
20
+ }));
21
+ vi.mock("./get-feed.js", () => ({
22
+ waitForFeedLoad: vi.fn().mockResolvedValue(undefined),
23
+ }));
24
+ import { CDPClient } from "../cdp/client.js";
25
+ import { discoverTargets } from "../cdp/discovery.js";
26
+ import { humanizedScrollToByIndex } from "../linkedin/dom-automation.js";
27
+ import { hideFeedAuthor } from "./hide-feed-author.js";
28
+ const mockClient = {
29
+ connect: vi.fn().mockResolvedValue(undefined),
30
+ navigate: vi.fn().mockResolvedValue(undefined),
31
+ evaluate: vi.fn(),
32
+ disconnect: vi.fn(),
33
+ };
34
+ function setupMocks(hiddenName = "John Doe") {
35
+ vi.mocked(CDPClient).mockImplementation(function () {
36
+ return mockClient;
37
+ });
38
+ vi.mocked(discoverTargets).mockResolvedValue([
39
+ { id: "target-1", type: "page", title: "LinkedIn", url: "https://www.linkedin.com/feed/", description: "", devtoolsFrontendUrl: "" },
40
+ ]);
41
+ vi.mocked(humanizedScrollToByIndex).mockResolvedValue(undefined);
42
+ // First evaluate: click menu button by index → returns true
43
+ // Second evaluate: click "Hide posts by" menu item → returns hidden name
44
+ mockClient.evaluate
45
+ .mockResolvedValueOnce(true) // menu button clicked
46
+ .mockResolvedValueOnce(hiddenName); // hidden name from menu item
47
+ }
48
+ describe("hideFeedAuthor", () => {
49
+ beforeEach(() => {
50
+ vi.clearAllMocks();
51
+ });
52
+ afterEach(() => {
53
+ vi.restoreAllMocks();
54
+ });
55
+ it("throws on non-loopback host without allowRemote", async () => {
56
+ await expect(hideFeedAuthor({
57
+ feedIndex: 0,
58
+ cdpPort: 9222,
59
+ cdpHost: "192.168.1.100",
60
+ })).rejects.toThrow("requires --allow-remote");
61
+ });
62
+ it("allows non-loopback host with allowRemote", async () => {
63
+ setupMocks();
64
+ const result = await hideFeedAuthor({
65
+ feedIndex: 0,
66
+ cdpPort: 9222,
67
+ cdpHost: "192.168.1.100",
68
+ allowRemote: true,
69
+ });
70
+ expect(result.success).toBe(true);
71
+ });
72
+ it("throws when no LinkedIn page is found", async () => {
73
+ vi.mocked(discoverTargets).mockResolvedValue([
74
+ { id: "target-1", type: "page", title: "Example", url: "https://example.com", description: "", devtoolsFrontendUrl: "" },
75
+ ]);
76
+ await expect(hideFeedAuthor({
77
+ feedIndex: 0,
78
+ cdpPort: 9222,
79
+ })).rejects.toThrow("No LinkedIn page found");
80
+ });
81
+ it("throws when no feed post menu button is found", async () => {
82
+ vi.mocked(CDPClient).mockImplementation(function () {
83
+ return mockClient;
84
+ });
85
+ vi.mocked(discoverTargets).mockResolvedValue([
86
+ { id: "target-1", type: "page", title: "LinkedIn", url: "https://www.linkedin.com/feed/", description: "", devtoolsFrontendUrl: "" },
87
+ ]);
88
+ vi.mocked(humanizedScrollToByIndex).mockResolvedValue(undefined);
89
+ mockClient.evaluate.mockResolvedValueOnce(false); // no menu button
90
+ await expect(hideFeedAuthor({
91
+ feedIndex: 0,
92
+ cdpPort: 9222,
93
+ })).rejects.toThrow("No feed post menu button found");
94
+ });
95
+ it("throws when 'Hide posts by' menu item is not found", async () => {
96
+ setupMocks(null);
97
+ // Third evaluate is the Escape dismiss
98
+ mockClient.evaluate.mockResolvedValueOnce(undefined);
99
+ await expect(hideFeedAuthor({
100
+ feedIndex: 0,
101
+ cdpPort: 9222,
102
+ })).rejects.toThrow('No "Hide posts by" menu item found');
103
+ });
104
+ it("returns success with hidden name", async () => {
105
+ setupMocks("Jane Smith");
106
+ const result = await hideFeedAuthor({
107
+ feedIndex: 0,
108
+ cdpPort: 9222,
109
+ });
110
+ expect(result).toEqual({
111
+ success: true,
112
+ feedIndex: 0,
113
+ hiddenName: "Jane Smith",
114
+ dryRun: false,
115
+ });
116
+ });
117
+ it("navigates to the feed", async () => {
118
+ setupMocks();
119
+ await hideFeedAuthor({
120
+ feedIndex: 0,
121
+ cdpPort: 9222,
122
+ });
123
+ expect(mockClient.navigate).toHaveBeenCalledWith("https://www.linkedin.com/feed/");
124
+ });
125
+ it("scrolls menu button into view and clicks by index", async () => {
126
+ setupMocks();
127
+ await hideFeedAuthor({
128
+ feedIndex: 0,
129
+ cdpPort: 9222,
130
+ });
131
+ expect(humanizedScrollToByIndex).toHaveBeenCalledWith(mockClient, '[data-testid="mainFeed"] div[role="listitem"] button[aria-label^="Open control menu for post"]', 0, undefined);
132
+ // Menu button is clicked via evaluate (by index), not humanizedClick
133
+ expect(mockClient.evaluate).toHaveBeenCalled();
134
+ });
135
+ it("wraps menu interaction in retryInteraction", async () => {
136
+ setupMocks();
137
+ const { retryInteraction } = await import("../linkedin/dom-automation.js");
138
+ await hideFeedAuthor({
139
+ feedIndex: 0,
140
+ cdpPort: 9222,
141
+ });
142
+ expect(retryInteraction).toHaveBeenCalledWith(expect.any(Function), 3);
143
+ });
144
+ it("disconnects the CDP client even when an error occurs", async () => {
145
+ vi.mocked(CDPClient).mockImplementation(function () {
146
+ return mockClient;
147
+ });
148
+ vi.mocked(discoverTargets).mockResolvedValue([
149
+ { id: "target-1", type: "page", title: "LinkedIn", url: "https://www.linkedin.com/feed/", description: "", devtoolsFrontendUrl: "" },
150
+ ]);
151
+ vi.mocked(humanizedScrollToByIndex).mockResolvedValue(undefined);
152
+ mockClient.evaluate.mockRejectedValue(new Error("evaluation failed"));
153
+ await expect(hideFeedAuthor({
154
+ feedIndex: 0,
155
+ cdpPort: 9222,
156
+ })).rejects.toThrow("evaluation failed");
157
+ expect(mockClient.disconnect).toHaveBeenCalled();
158
+ });
159
+ });
160
+ //# sourceMappingURL=hide-feed-author.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hide-feed-author.test.js","sourceRoot":"","sources":["../../src/operations/hide-feed-author.test.ts"],"names":[],"mappings":"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"}
@@ -35,16 +35,19 @@ export { addPeopleToCollection, type AddPeopleToCollectionInput, type AddPeopleT
35
35
  export { removePeopleFromCollection, type RemovePeopleFromCollectionInput, type RemovePeopleFromCollectionOutput, } from "./remove-people-from-collection.js";
36
36
  export { importPeopleFromCollection, type ImportPeopleFromCollectionInput, type ImportPeopleFromCollectionOutput, } from "./import-people-from-collection.js";
37
37
  export { commentOnPost, type CommentOnPostInput, type CommentOnPostOutput, } from "./comment-on-post.js";
38
+ export { dismissFeedPost, type DismissFeedPostInput, type DismissFeedPostOutput, } from "./dismiss-feed-post.js";
38
39
  export { getPost, type GetPostInput, type GetPostOutput, } from "./get-post.js";
39
40
  export { getPostStats, extractPostUrn, resolvePostDetailUrl, type GetPostStatsInput, type GetPostStatsOutput, } from "./get-post-stats.js";
40
41
  export { getPostEngagers, type GetPostEngagersInput, type GetPostEngagersOutput, } from "./get-post-engagers.js";
41
42
  export { searchPosts, type SearchPostsInput, type SearchPostsOutput, } from "./search-posts.js";
42
43
  export { getFeed, type GetFeedInput, type GetFeedOutput, } from "./get-feed.js";
44
+ export { hideFeedAuthor, type HideFeedAuthorInput, type HideFeedAuthorOutput, } from "./hide-feed-author.js";
43
45
  export { getProfileActivity, extractProfileId, type GetProfileActivityInput, type GetProfileActivityOutput, } from "./get-profile-activity.js";
44
46
  export { getActionBudget, type GetActionBudgetInput, type GetActionBudgetOutput, } from "./get-action-budget.js";
45
47
  export { getThrottleStatus, type GetThrottleStatusInput, type GetThrottleStatusOutput, } from "./get-throttle-status.js";
46
48
  export { visitProfile, type VisitProfileInput, type VisitProfileOutput, } from "./visit-profile.js";
47
49
  export { reactToPost, REACTION_TYPES, type ReactToPostInput, type ReactToPostOutput, type ReactionType, } from "./react-to-post.js";
50
+ export { unfollowFromFeed, type UnfollowFromFeedInput, type UnfollowFromFeedOutput, } from "./unfollow-from-feed.js";
48
51
  export { type EphemeralActionInput, } from "./ephemeral-action.js";
49
52
  export { messagePerson, type MessagePersonInput, type MessagePersonOutput, } from "./message-person.js";
50
53
  export { sendInvite, type SendInviteInput, type SendInviteOutput, } from "./send-invite.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/operations/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/operations/index.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,7 @@ export { removePeopleFromCollection, } from "./remove-people-from-collection.js"
47
47
  export { importPeopleFromCollection, } from "./import-people-from-collection.js";
48
48
  // Post interaction
49
49
  export { commentOnPost, } from "./comment-on-post.js";
50
+ export { dismissFeedPost, } from "./dismiss-feed-post.js";
50
51
  // Post detail
51
52
  export { getPost, } from "./get-post.js";
52
53
  // Post analytics
@@ -56,6 +57,7 @@ export { getPostEngagers, } from "./get-post-engagers.js";
56
57
  export { searchPosts, } from "./search-posts.js";
57
58
  // Feed
58
59
  export { getFeed, } from "./get-feed.js";
60
+ export { hideFeedAuthor, } from "./hide-feed-author.js";
59
61
  // Profile activity
60
62
  export { getProfileActivity, extractProfileId, } from "./get-profile-activity.js";
61
63
  // Action budget & throttle status
@@ -65,6 +67,7 @@ export { getThrottleStatus, } from "./get-throttle-status.js";
65
67
  export { visitProfile, } from "./visit-profile.js";
66
68
  // Post interaction
67
69
  export { reactToPost, REACTION_TYPES, } from "./react-to-post.js";
70
+ export { unfollowFromFeed, } from "./unfollow-from-feed.js";
68
71
  // Individual actions (ephemeral campaign)
69
72
  export {} from "./ephemeral-action.js";
70
73
  export { messagePerson, } from "./message-person.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/operations/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/operations/index.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,8 @@ export interface ReactToPostInput extends ConnectionOptions {
21
21
  readonly reactionType?: ReactionType | undefined;
22
22
  /** Optional humanized mouse for natural cursor movement and clicks. */
23
23
  readonly mouse?: HumanizedMouse | null | undefined;
24
+ /** When true, detect the reaction state but do not click. */
25
+ readonly dryRun?: boolean | undefined;
24
26
  }
25
27
  export interface ReactToPostOutput {
26
28
  readonly success: true;
@@ -28,6 +30,9 @@ export interface ReactToPostOutput {
28
30
  readonly reactionType: ReactionType;
29
31
  /** Whether the post was already reacted with the requested type (no-op). */
30
32
  readonly alreadyReacted: boolean;
33
+ /** The reaction detected on the post before acting (null if none). */
34
+ readonly currentReaction: ReactionType | null;
35
+ readonly dryRun: boolean;
31
36
  }
32
37
  /**
33
38
  * React to a LinkedIn post with a specified reaction type.
@@ -42,6 +47,10 @@ export interface ReactToPostOutput {
42
47
  * - **Already reacted with a different type**: clicks the trigger to
43
48
  * remove the existing reaction, then applies the requested one.
44
49
  *
50
+ * When `dryRun` is `true`, the operation navigates to the post, detects
51
+ * the current reaction state, and validates that the reaction popup opens,
52
+ * but skips the final reaction click.
53
+ *
45
54
  * @param input - Post URL, reaction type, and CDP connection parameters.
46
55
  * @returns Confirmation of the reaction applied, including whether the
47
56
  * post was already reacted with the requested type.
@@ -1 +1 @@
1
- {"version":3,"file":"react-to-post.d.ts","sourceRoot":"","sources":["../../src/operations/react-to-post.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAWrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,WAAW,GACX,SAAS,GACT,MAAM,GACN,YAAY,GACZ,OAAO,CAAC;AAYZ,sCAAsC;AACtC,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAE/B,CAAC;AAoDpB,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACjD,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;CACpD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAkG5B"}
1
+ {"version":3,"file":"react-to-post.d.ts","sourceRoot":"","sources":["../../src/operations/react-to-post.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAWrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,WAAW,GACX,SAAS,GACT,MAAM,GACN,YAAY,GACZ,OAAO,CAAC;AAYZ,sCAAsC;AACtC,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAE/B,CAAC;AAoDpB,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACjD,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,sEAAsE;IACtE,QAAQ,CAAC,eAAe,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CA0G5B"}
@@ -71,6 +71,10 @@ async function detectCurrentReaction(client) {
71
71
  * - **Already reacted with a different type**: clicks the trigger to
72
72
  * remove the existing reaction, then applies the requested one.
73
73
  *
74
+ * When `dryRun` is `true`, the operation navigates to the post, detects
75
+ * the current reaction state, and validates that the reaction popup opens,
76
+ * but skips the final reaction click.
77
+ *
74
78
  * @param input - Post URL, reaction type, and CDP connection parameters.
75
79
  * @returns Confirmation of the reaction applied, including whether the
76
80
  * post was already reacted with the requested type.
@@ -80,6 +84,7 @@ export async function reactToPost(input) {
80
84
  const cdpHost = input.cdpHost ?? "127.0.0.1";
81
85
  const allowRemote = input.allowRemote ?? false;
82
86
  const reactionType = input.reactionType ?? "like";
87
+ const dryRun = input.dryRun ?? false;
83
88
  if (!REACTION_TYPES.includes(reactionType)) {
84
89
  throw new Error(`Invalid reaction type "${reactionType}". ` +
85
90
  `Valid types: ${REACTION_TYPES.join(", ")}`);
@@ -113,9 +118,11 @@ export async function reactToPost(input) {
113
118
  postUrl: input.postUrl,
114
119
  reactionType,
115
120
  alreadyReacted: true,
121
+ currentReaction,
122
+ dryRun,
116
123
  };
117
124
  }
118
- if (currentReaction !== null) {
125
+ if (!dryRun && currentReaction !== null) {
119
126
  // Reacted with a different type — click trigger to unreact first
120
127
  await humanizedClick(client, REACTION_TRIGGER, mouse);
121
128
  // Wait for DOM to settle after unreacting — the trigger element
@@ -138,15 +145,19 @@ export async function reactToPost(input) {
138
145
  await gaussianDelay(2_000, 300, 1_500, 3_000);
139
146
  await waitForElement(client, reactionSelector, { timeout: 10_000 });
140
147
  }, 3);
141
- await humanizedClick(client, reactionSelector, mouse);
142
- // Let the UI settle
143
- await gaussianDelay(550, 75, 400, 700);
148
+ if (!dryRun) {
149
+ await humanizedClick(client, reactionSelector, mouse);
150
+ // Let the UI settle
151
+ await gaussianDelay(550, 75, 400, 700);
152
+ }
144
153
  await gaussianDelay(1_500, 500, 700, 3_500); // Post-action dwell
145
154
  return {
146
155
  success: true,
147
156
  postUrl: input.postUrl,
148
157
  reactionType,
149
158
  alreadyReacted: false,
159
+ currentReaction,
160
+ dryRun,
150
161
  };
151
162
  }
152
163
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"react-to-post.js","sourceRoot":"","sources":["../../src/operations/react-to-post.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"react-to-post.js","sourceRoot":"","sources":["../../src/operations/react-to-post.ts"],"names":[],"mappings":"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"}
@@ -102,6 +102,8 @@ describe("reactToPost", () => {
102
102
  postUrl: "https://www.linkedin.com/feed/update/urn:li:activity:123/",
103
103
  reactionType: "celebrate",
104
104
  alreadyReacted: false,
105
+ currentReaction: null,
106
+ dryRun: false,
105
107
  });
106
108
  });
107
109
  it("returns alreadyReacted when same reaction is active (post page)", async () => {
@@ -148,6 +150,53 @@ describe("reactToPost", () => {
148
150
  expect(humanizedClick).toHaveBeenCalledTimes(2);
149
151
  expect(humanizedHover).toHaveBeenCalled();
150
152
  });
153
+ it("returns dryRun: true and hovers popup but skips click", async () => {
154
+ setupMocks();
155
+ const result = await reactToPost({
156
+ postUrl: "https://www.linkedin.com/feed/update/urn:li:activity:123/",
157
+ reactionType: "like",
158
+ cdpPort: 9222,
159
+ dryRun: true,
160
+ });
161
+ expect(result.success).toBe(true);
162
+ expect(result.dryRun).toBe(true);
163
+ expect(result.alreadyReacted).toBe(false);
164
+ expect(result.currentReaction).toBeNull();
165
+ // Should hover to validate popup opens, but NOT click
166
+ expect(humanizedHover).toHaveBeenCalled();
167
+ expect(humanizedClick).not.toHaveBeenCalled();
168
+ });
169
+ it("returns dryRun with currentReaction when a different reaction is active", async () => {
170
+ setupMocks();
171
+ mockClient.evaluate.mockResolvedValueOnce("Unreact Celebrate");
172
+ const result = await reactToPost({
173
+ postUrl: "https://www.linkedin.com/feed/update/urn:li:activity:123/",
174
+ reactionType: "like",
175
+ cdpPort: 9222,
176
+ dryRun: true,
177
+ });
178
+ expect(result.success).toBe(true);
179
+ expect(result.dryRun).toBe(true);
180
+ expect(result.alreadyReacted).toBe(false);
181
+ expect(result.currentReaction).toBe("celebrate");
182
+ // Should NOT click to unreact, but should hover to validate popup
183
+ expect(humanizedClick).not.toHaveBeenCalled();
184
+ expect(humanizedHover).toHaveBeenCalled();
185
+ });
186
+ it("returns alreadyReacted with dryRun when same reaction is active", async () => {
187
+ setupMocks();
188
+ mockClient.evaluate.mockResolvedValueOnce("Unreact Like");
189
+ const result = await reactToPost({
190
+ postUrl: "https://www.linkedin.com/feed/update/urn:li:activity:123/",
191
+ reactionType: "like",
192
+ cdpPort: 9222,
193
+ dryRun: true,
194
+ });
195
+ expect(result.success).toBe(true);
196
+ expect(result.dryRun).toBe(true);
197
+ expect(result.alreadyReacted).toBe(true);
198
+ expect(result.currentReaction).toBe("like");
199
+ });
151
200
  it("navigates to the post URL", async () => {
152
201
  setupMocks();
153
202
  await reactToPost({
@@ -1 +1 @@
1
- {"version":3,"file":"react-to-post.test.js","sourceRoot":"","sources":["../../src/operations/react-to-post.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"react-to-post.test.js","sourceRoot":"","sources":["../../src/operations/react-to-post.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { HumanizedMouse } from "../linkedin/humanized-mouse.js";
2
+ import type { ConnectionOptions } from "./types.js";
3
+ export interface UnfollowFromFeedInput extends ConnectionOptions {
4
+ /** Zero-based index of the post in the visible LinkedIn feed. */
5
+ readonly feedIndex: number;
6
+ /** Optional humanized mouse for natural cursor movement and clicks. */
7
+ readonly mouse?: HumanizedMouse | null | undefined;
8
+ /** When true, locate the menu item but do not click it. */
9
+ readonly dryRun?: boolean | undefined;
10
+ }
11
+ export interface UnfollowFromFeedOutput {
12
+ readonly success: true;
13
+ readonly feedIndex: number;
14
+ /** The name extracted from the "Unfollow {Name}" menu item. */
15
+ readonly unfollowedName: string;
16
+ readonly dryRun: boolean;
17
+ }
18
+ /**
19
+ * Unfollow the author of a LinkedIn post via its feed three-dot menu.
20
+ *
21
+ * Navigates to the LinkedIn home feed, opens the three-dot menu of the
22
+ * post at the given `feedIndex`, and clicks the "Unfollow {Name}" menu
23
+ * item. The unfollowed person's name is extracted from the menu item text.
24
+ *
25
+ * @param input - Feed index and CDP connection parameters.
26
+ * @returns Confirmation including the unfollowed person's name.
27
+ * @throws If the three-dot menu does not contain an "Unfollow" item.
28
+ */
29
+ export declare function unfollowFromFeed(input: UnfollowFromFeedInput): Promise<UnfollowFromFeedOutput>;
30
+ //# sourceMappingURL=unfollow-from-feed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unfollow-from-feed.d.ts","sourceRoot":"","sources":["../../src/operations/unfollow-from-feed.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAQpD,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;IACnD,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+DAA+D;IAC/D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CAqHjC"}
@@ -0,0 +1,114 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import { resolveInstancePort } from "../cdp/index.js";
4
+ import { CDPClient } from "../cdp/client.js";
5
+ import { discoverTargets } from "../cdp/discovery.js";
6
+ import { humanizedScrollToByIndex, retryInteraction } from "../linkedin/dom-automation.js";
7
+ import { gaussianDelay, maybeHesitate } from "../utils/delay.js";
8
+ import { navigateAwayIf } from "./navigate-away.js";
9
+ import { waitForFeedLoad } from "./get-feed.js";
10
+ /** CSS selector for feed post menu buttons. */
11
+ const FEED_MENU_BUTTON_SELECTOR = '[data-testid="mainFeed"] div[role="listitem"] button[aria-label^="Open control menu for post"]';
12
+ /**
13
+ * Unfollow the author of a LinkedIn post via its feed three-dot menu.
14
+ *
15
+ * Navigates to the LinkedIn home feed, opens the three-dot menu of the
16
+ * post at the given `feedIndex`, and clicks the "Unfollow {Name}" menu
17
+ * item. The unfollowed person's name is extracted from the menu item text.
18
+ *
19
+ * @param input - Feed index and CDP connection parameters.
20
+ * @returns Confirmation including the unfollowed person's name.
21
+ * @throws If the three-dot menu does not contain an "Unfollow" item.
22
+ */
23
+ export async function unfollowFromFeed(input) {
24
+ const cdpPort = await resolveInstancePort(input.cdpPort, input.cdpHost);
25
+ const cdpHost = input.cdpHost ?? "127.0.0.1";
26
+ const allowRemote = input.allowRemote ?? false;
27
+ // Enforce loopback guard
28
+ if (!allowRemote && cdpHost !== "127.0.0.1" && cdpHost !== "localhost") {
29
+ throw new Error(`Non-loopback CDP host "${cdpHost}" requires --allow-remote. ` +
30
+ "This is a security measure to prevent remote code execution.");
31
+ }
32
+ const targets = await discoverTargets(cdpPort, cdpHost);
33
+ const linkedInTarget = targets.find((t) => t.type === "page" && t.url?.includes("linkedin.com"));
34
+ if (!linkedInTarget) {
35
+ throw new Error("No LinkedIn page found in LinkedHelper. " +
36
+ "Ensure LinkedHelper is running with an active LinkedIn session.");
37
+ }
38
+ const client = new CDPClient(cdpPort, { host: cdpHost, allowRemote });
39
+ await client.connect(linkedInTarget.id);
40
+ try {
41
+ const mouse = input.mouse;
42
+ const dryRun = input.dryRun ?? false;
43
+ const feedIndex = input.feedIndex;
44
+ // Navigate to the feed (force fresh load if already there)
45
+ await navigateAwayIf(client, "/feed");
46
+ await client.navigate("https://www.linkedin.com/feed/");
47
+ await waitForFeedLoad(client);
48
+ await maybeHesitate();
49
+ // Scroll the menu button into view by index and click it, retrying if
50
+ // the menu does not open on the first attempt.
51
+ const unfollowedName = await retryInteraction(async () => {
52
+ await humanizedScrollToByIndex(client, FEED_MENU_BUTTON_SELECTOR, feedIndex, mouse);
53
+ const clicked = await client.evaluate(`(() => {
54
+ const btns = document.querySelectorAll(
55
+ ${JSON.stringify(FEED_MENU_BUTTON_SELECTOR)}
56
+ );
57
+ const btn = btns[${feedIndex}];
58
+ if (!btn) return false;
59
+ btn.click();
60
+ return true;
61
+ })()`);
62
+ if (!clicked) {
63
+ throw new Error("No feed post menu button found. " +
64
+ "Ensure the feed index points to a visible feed post.");
65
+ }
66
+ await gaussianDelay(700, 100, 500, 900);
67
+ // Find and click the "Unfollow {Name}" menu item, extracting
68
+ // the name from the text.
69
+ const name = await client.evaluate(`(() => {
70
+ const dryRun = ${dryRun};
71
+ for (const el of document.querySelectorAll('[role="menuitem"]')) {
72
+ const text = el.textContent?.trim() ?? '';
73
+ if (text.startsWith('Unfollow ')) {
74
+ if (!dryRun) el.click();
75
+ return text.slice('Unfollow '.length);
76
+ }
77
+ }
78
+ return null;
79
+ })()`);
80
+ if (!name) {
81
+ // Dismiss any open menu before retrying
82
+ await client.evaluate(`(() => {
83
+ document.dispatchEvent(
84
+ new KeyboardEvent('keydown', { key: 'Escape', bubbles: true })
85
+ );
86
+ })()`);
87
+ await gaussianDelay(300, 75, 200, 500);
88
+ throw new Error('No "Unfollow" item found in the post control menu. ' +
89
+ "The post author may already be unfollowed, or the post " +
90
+ "may not support this action.");
91
+ }
92
+ return name;
93
+ }, 3);
94
+ if (dryRun) {
95
+ await client.evaluate(`(() => {
96
+ document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }));
97
+ })()`);
98
+ await gaussianDelay(300, 75, 200, 500);
99
+ }
100
+ // Let the UI settle after clicking Unfollow
101
+ await gaussianDelay(550, 75, 400, 700);
102
+ await gaussianDelay(1_500, 500, 700, 3_500); // Post-action dwell
103
+ return {
104
+ success: true,
105
+ feedIndex: input.feedIndex,
106
+ unfollowedName,
107
+ dryRun,
108
+ };
109
+ }
110
+ finally {
111
+ client.disconnect();
112
+ }
113
+ }
114
+ //# sourceMappingURL=unfollow-from-feed.js.map