@lhremote/core 0.4.0 → 0.6.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 (130) hide show
  1. package/dist/db/index.d.ts +1 -1
  2. package/dist/db/index.d.ts.map +1 -1
  3. package/dist/db/index.js +1 -1
  4. package/dist/db/index.js.map +1 -1
  5. package/dist/db/repositories/collection-list.d.ts +69 -0
  6. package/dist/db/repositories/collection-list.d.ts.map +1 -0
  7. package/dist/db/repositories/collection-list.integration.test.d.ts +2 -0
  8. package/dist/db/repositories/collection-list.integration.test.d.ts.map +1 -0
  9. package/dist/db/repositories/collection-list.integration.test.js +124 -0
  10. package/dist/db/repositories/collection-list.integration.test.js.map +1 -0
  11. package/dist/db/repositories/collection-list.js +161 -0
  12. package/dist/db/repositories/collection-list.js.map +1 -0
  13. package/dist/db/repositories/index.d.ts +1 -0
  14. package/dist/db/repositories/index.d.ts.map +1 -1
  15. package/dist/db/repositories/index.js +1 -0
  16. package/dist/db/repositories/index.js.map +1 -1
  17. package/dist/db/testing/create-fixture.js +17 -0
  18. package/dist/db/testing/create-fixture.js.map +1 -1
  19. package/dist/index.d.ts +4 -4
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +7 -3
  22. package/dist/index.js.map +1 -1
  23. package/dist/operations/add-people-to-collection.d.ts +22 -0
  24. package/dist/operations/add-people-to-collection.d.ts.map +1 -0
  25. package/dist/operations/add-people-to-collection.js +27 -0
  26. package/dist/operations/add-people-to-collection.js.map +1 -0
  27. package/dist/operations/add-people-to-collection.test.d.ts +2 -0
  28. package/dist/operations/add-people-to-collection.test.d.ts.map +1 -0
  29. package/dist/operations/add-people-to-collection.test.js +69 -0
  30. package/dist/operations/add-people-to-collection.test.js.map +1 -0
  31. package/dist/operations/collect-people.d.ts +40 -0
  32. package/dist/operations/collect-people.d.ts.map +1 -0
  33. package/dist/operations/collect-people.js +55 -0
  34. package/dist/operations/collect-people.js.map +1 -0
  35. package/dist/operations/collect-people.test.d.ts +2 -0
  36. package/dist/operations/collect-people.test.d.ts.map +1 -0
  37. package/dist/operations/collect-people.test.js +156 -0
  38. package/dist/operations/collect-people.test.js.map +1 -0
  39. package/dist/operations/create-collection.d.ts +20 -0
  40. package/dist/operations/create-collection.d.ts.map +1 -0
  41. package/dist/operations/create-collection.js +26 -0
  42. package/dist/operations/create-collection.js.map +1 -0
  43. package/dist/operations/create-collection.test.d.ts +2 -0
  44. package/dist/operations/create-collection.test.d.ts.map +1 -0
  45. package/dist/operations/create-collection.test.js +72 -0
  46. package/dist/operations/create-collection.test.js.map +1 -0
  47. package/dist/operations/delete-collection.d.ts +20 -0
  48. package/dist/operations/delete-collection.d.ts.map +1 -0
  49. package/dist/operations/delete-collection.js +26 -0
  50. package/dist/operations/delete-collection.js.map +1 -0
  51. package/dist/operations/delete-collection.test.d.ts +2 -0
  52. package/dist/operations/delete-collection.test.d.ts.map +1 -0
  53. package/dist/operations/delete-collection.test.js +61 -0
  54. package/dist/operations/delete-collection.test.js.map +1 -0
  55. package/dist/operations/import-people-from-collection.d.ts +30 -0
  56. package/dist/operations/import-people-from-collection.d.ts.map +1 -0
  57. package/dist/operations/import-people-from-collection.js +65 -0
  58. package/dist/operations/import-people-from-collection.js.map +1 -0
  59. package/dist/operations/import-people-from-collection.test.d.ts +2 -0
  60. package/dist/operations/import-people-from-collection.test.d.ts.map +1 -0
  61. package/dist/operations/import-people-from-collection.test.js +170 -0
  62. package/dist/operations/import-people-from-collection.test.js.map +1 -0
  63. package/dist/operations/index.d.ts +7 -0
  64. package/dist/operations/index.d.ts.map +1 -1
  65. package/dist/operations/index.js +9 -0
  66. package/dist/operations/index.js.map +1 -1
  67. package/dist/operations/list-collections.d.ts +18 -0
  68. package/dist/operations/list-collections.d.ts.map +1 -0
  69. package/dist/operations/list-collections.js +22 -0
  70. package/dist/operations/list-collections.js.map +1 -0
  71. package/dist/operations/list-collections.test.d.ts +2 -0
  72. package/dist/operations/list-collections.test.d.ts.map +1 -0
  73. package/dist/operations/list-collections.test.js +73 -0
  74. package/dist/operations/list-collections.test.js.map +1 -0
  75. package/dist/operations/remove-people-from-collection.d.ts +21 -0
  76. package/dist/operations/remove-people-from-collection.d.ts.map +1 -0
  77. package/dist/operations/remove-people-from-collection.js +26 -0
  78. package/dist/operations/remove-people-from-collection.js.map +1 -0
  79. package/dist/operations/remove-people-from-collection.test.d.ts +2 -0
  80. package/dist/operations/remove-people-from-collection.test.d.ts.map +1 -0
  81. package/dist/operations/remove-people-from-collection.test.js +68 -0
  82. package/dist/operations/remove-people-from-collection.test.js.map +1 -0
  83. package/dist/services/app.d.ts +3 -0
  84. package/dist/services/app.d.ts.map +1 -1
  85. package/dist/services/app.js +22 -2
  86. package/dist/services/app.js.map +1 -1
  87. package/dist/services/app.test.js +5 -1
  88. package/dist/services/app.test.js.map +1 -1
  89. package/dist/services/collection.d.ts +84 -0
  90. package/dist/services/collection.d.ts.map +1 -0
  91. package/dist/services/collection.js +145 -0
  92. package/dist/services/collection.js.map +1 -0
  93. package/dist/services/collection.test.d.ts +2 -0
  94. package/dist/services/collection.test.d.ts.map +1 -0
  95. package/dist/services/collection.test.js +203 -0
  96. package/dist/services/collection.test.js.map +1 -0
  97. package/dist/services/errors.d.ts +29 -0
  98. package/dist/services/errors.d.ts.map +1 -1
  99. package/dist/services/errors.js +41 -0
  100. package/dist/services/errors.js.map +1 -1
  101. package/dist/services/index.d.ts +3 -1
  102. package/dist/services/index.d.ts.map +1 -1
  103. package/dist/services/index.js +3 -1
  104. package/dist/services/index.js.map +1 -1
  105. package/dist/services/launcher.d.ts.map +1 -1
  106. package/dist/services/launcher.js +6 -2
  107. package/dist/services/launcher.js.map +1 -1
  108. package/dist/services/launcher.test.js +4 -1
  109. package/dist/services/launcher.test.js.map +1 -1
  110. package/dist/services/source-type-registry.d.ts +19 -0
  111. package/dist/services/source-type-registry.d.ts.map +1 -0
  112. package/dist/services/source-type-registry.js +66 -0
  113. package/dist/services/source-type-registry.js.map +1 -0
  114. package/dist/services/source-type-registry.test.d.ts +2 -0
  115. package/dist/services/source-type-registry.test.d.ts.map +1 -0
  116. package/dist/services/source-type-registry.test.js +124 -0
  117. package/dist/services/source-type-registry.test.js.map +1 -0
  118. package/dist/services/status.d.ts +3 -0
  119. package/dist/services/status.d.ts.map +1 -1
  120. package/dist/services/status.js +7 -1
  121. package/dist/services/status.js.map +1 -1
  122. package/dist/services/status.test.js +6 -1
  123. package/dist/services/status.test.js.map +1 -1
  124. package/dist/types/collection.d.ts +12 -0
  125. package/dist/types/collection.d.ts.map +1 -0
  126. package/dist/types/collection.js +4 -0
  127. package/dist/types/collection.js.map +1 -0
  128. package/dist/types/index.d.ts +1 -0
  129. package/dist/types/index.d.ts.map +1 -1
  130. package/package.json +1 -1
@@ -0,0 +1,68 @@
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("../services/account-resolution.js", () => ({
5
+ resolveAccount: vi.fn(),
6
+ }));
7
+ vi.mock("../services/instance-context.js", () => ({
8
+ withDatabase: vi.fn(),
9
+ }));
10
+ vi.mock("../db/index.js", () => ({
11
+ CollectionListRepository: vi.fn(),
12
+ }));
13
+ import { resolveAccount } from "../services/account-resolution.js";
14
+ import { withDatabase } from "../services/instance-context.js";
15
+ import { CollectionListRepository } from "../db/index.js";
16
+ import { removePeopleFromCollection } from "./remove-people-from-collection.js";
17
+ function setupMocks(removed = 2) {
18
+ vi.mocked(resolveAccount).mockResolvedValue(1);
19
+ vi.mocked(withDatabase).mockImplementation(async (_accountId, callback) => callback({ accountId: 1, db: {} }));
20
+ vi.mocked(CollectionListRepository).mockImplementation(function () {
21
+ return {
22
+ removePeople: vi.fn().mockReturnValue(removed),
23
+ };
24
+ });
25
+ }
26
+ describe("removePeopleFromCollection", () => {
27
+ beforeEach(() => {
28
+ vi.clearAllMocks();
29
+ });
30
+ afterEach(() => {
31
+ vi.restoreAllMocks();
32
+ });
33
+ it("returns removed count", async () => {
34
+ setupMocks(2);
35
+ const result = await removePeopleFromCollection({
36
+ collectionId: 10,
37
+ personIds: [1, 3],
38
+ cdpPort: 9222,
39
+ });
40
+ expect(result.success).toBe(true);
41
+ expect(result.collectionId).toBe(10);
42
+ expect(result.removed).toBe(2);
43
+ });
44
+ it("passes collectionId and personIds to repository", async () => {
45
+ setupMocks();
46
+ await removePeopleFromCollection({
47
+ collectionId: 10,
48
+ personIds: [1, 3],
49
+ cdpPort: 9222,
50
+ });
51
+ const mockResult = vi.mocked(CollectionListRepository).mock.results[0];
52
+ expect(mockResult.value.removePeople).toHaveBeenCalledWith(10, [1, 3]);
53
+ });
54
+ it("opens database in write mode", async () => {
55
+ setupMocks();
56
+ await removePeopleFromCollection({
57
+ collectionId: 10,
58
+ personIds: [1],
59
+ cdpPort: 9222,
60
+ });
61
+ expect(withDatabase).toHaveBeenCalledWith(1, expect.any(Function), { readOnly: false });
62
+ });
63
+ it("propagates resolveAccount errors", async () => {
64
+ vi.mocked(resolveAccount).mockRejectedValue(new Error("connection refused"));
65
+ await expect(removePeopleFromCollection({ collectionId: 10, personIds: [1], cdpPort: 9222 })).rejects.toThrow("connection refused");
66
+ });
67
+ });
68
+ //# sourceMappingURL=remove-people-from-collection.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-people-from-collection.test.js","sourceRoot":"","sources":["../../src/operations/remove-people-from-collection.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  export interface AppServiceOptions {
2
2
  /** Delay in ms after spawn before checking if the app is reachable (default 3000). */
3
3
  launchProbeDelay?: number;
4
+ /** Kill existing LinkedHelper processes before launching (default false). */
5
+ force?: boolean;
4
6
  }
5
7
  /**
6
8
  * Manages the LinkedHelper application process lifecycle.
@@ -13,6 +15,7 @@ export declare class AppService {
13
15
  private assignedPort;
14
16
  private childProcess;
15
17
  private readonly launchProbeDelay;
18
+ private readonly force;
16
19
  /**
17
20
  * @param cdpPort - Explicit CDP port. When omitted, `launch()` will
18
21
  * select a free port automatically via `get-port`.
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/services/app.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,iBAAiB;IAChC,sFAAsF;IACtF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C;;;;OAIG;gBACS,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB;IAKzD;;;;;OAKG;IACH,IAAI,OAAO,IAAI,MAAM,CAKpB;IAED;;;;;;;;OAQG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C7B;;;;;;;;;OASG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC3B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAYnC;;;;;OAKG;IACH,MAAM,CAAC,UAAU,IAAI,MAAM;CAW5B"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/services/app.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,iBAAiB;IAChC,sFAAsF;IACtF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAEhC;;;;OAIG;gBACS,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB;IAMzD;;;;;OAKG;IACH,IAAI,OAAO,IAAI,MAAM,CAKpB;IAED;;;;;;;;OAQG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IA6D7B;;;;;;;;;OASG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC3B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAYnC;;;;;OAKG;IACH,MAAM,CAAC,UAAU,IAAI,MAAM;CAW5B"}
@@ -4,8 +4,8 @@ import { spawn } from "node:child_process";
4
4
  import { accessSync, constants } from "node:fs";
5
5
  import { join } from "node:path";
6
6
  import getPort from "get-port";
7
- import { discoverTargets } from "../cdp/index.js";
8
- import { AppLaunchError, AppNotFoundError } from "./errors.js";
7
+ import { discoverTargets, findApp } from "../cdp/index.js";
8
+ import { AppLaunchError, AppNotFoundError, LinkedHelperUnreachableError } from "./errors.js";
9
9
  /** Default delay after spawn before checking if the app is reachable (ms). */
10
10
  const DEFAULT_LAUNCH_PROBE_DELAY = 3000;
11
11
  /** Maximum time to wait for the process to exit after SIGTERM (ms). */
@@ -23,6 +23,7 @@ export class AppService {
23
23
  assignedPort;
24
24
  childProcess = null;
25
25
  launchProbeDelay;
26
+ force;
26
27
  /**
27
28
  * @param cdpPort - Explicit CDP port. When omitted, `launch()` will
28
29
  * select a free port automatically via `get-port`.
@@ -31,6 +32,7 @@ export class AppService {
31
32
  constructor(cdpPort, options) {
32
33
  this.assignedPort = cdpPort ?? null;
33
34
  this.launchProbeDelay = options?.launchProbeDelay ?? DEFAULT_LAUNCH_PROBE_DELAY;
35
+ this.force = options?.force ?? false;
34
36
  }
35
37
  /**
36
38
  * The CDP port currently in use.
@@ -57,6 +59,24 @@ export class AppService {
57
59
  if (this.assignedPort !== null && await this.isRunning()) {
58
60
  return;
59
61
  }
62
+ // Proactive conflict detection: check for existing LH processes
63
+ const existingApps = await findApp();
64
+ if (existingApps.length > 0) {
65
+ const connectable = existingApps.find((a) => a.connectable);
66
+ if (connectable) {
67
+ // Already running with CDP — use that port
68
+ this.assignedPort = connectable.cdpPort;
69
+ return;
70
+ }
71
+ // Running but CDP unreachable
72
+ if (!this.force) {
73
+ throw new LinkedHelperUnreachableError(existingApps);
74
+ }
75
+ // Force mode: kill existing processes before relaunching
76
+ for (const app of existingApps) {
77
+ process.kill(app.pid, "SIGKILL");
78
+ }
79
+ }
60
80
  if (this.assignedPort === null) {
61
81
  this.assignedPort = await getPort();
62
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/services/app.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAqB,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,OAAO,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/D,8EAA8E;AAC9E,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAExC,uEAAuE;AACvE,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC,uEAAuE;AACvE,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAOjC;;;;;;GAMG;AACH,MAAM,OAAO,UAAU;IACb,YAAY,CAAgB;IAC5B,YAAY,GAAwB,IAAI,CAAC;IAChC,gBAAgB,CAAS;IAE1C;;;;OAIG;IACH,YAAY,OAAgB,EAAE,OAA2B;QACvD,IAAI,CAAC,YAAY,GAAG,OAAO,IAAI,IAAI,CAAC;QACpC,IAAI,CAAC,gBAAgB,GAAG,OAAO,EAAE,gBAAgB,IAAI,0BAA0B,CAAC;IAClF,CAAC;IAED;;;;;OAKG;IACH,IAAI,OAAO;QACT,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;QAC1G,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,MAAM;QACV,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACzD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,GAAG,MAAM,OAAO,EAAE,CAAC;QACtC,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,CAAC,2BAA2B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAEtE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE;YAChC,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QAEH,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,kEAAkE;QAClE,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,OAAO,GAAG,CAAC,GAAU,EAAE,EAAE;gBAC7B,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,cAAc,CAAC,kCAAkC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAC9F,CAAC,CAAC;YAEF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;YACZ,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAE1B,SAAS,OAAO;gBACd,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACvC,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;YAED,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAEzB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEtB,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;YAC/D,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,MAAM,WAAW,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;YAC/C,CAAC;YAED,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,wCAAwC;QACxC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,KAAK,CACT,oBAAoB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,KAAK,CAAC,EAAE,EAAE,CACvE,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC;YACH,MAAM,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,UAAU;QACf,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjD,IAAI,OAAO,EAAE,CAAC;YACZ,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC1B,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;QACpC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,SAAS,oBAAoB;IAC3B,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO,8DAA8D,CAAC;QACxE,KAAK,OAAO;YACV,OAAO,IAAI,CACT,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,oBAAoB,EAAE,SAAS,EAAE,OAAO,CAAC,EAC3G,UAAU,EACV,eAAe,EACf,mBAAmB,CACpB,CAAC;QACJ;YACE,OAAO,kCAAkC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,KAAmB,EAAE,OAAe;IACvD,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,EAAE,OAAO,CAAC,CAAC;QAEZ,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;QAEF,SAAS,OAAO;YACd,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACrC,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,gBAAgB,CACxB,oCAAoC,IAAI,sCAAsC,CAC/E,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/services/app.ts"],"names":[],"mappings":"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"}
@@ -14,15 +14,17 @@ vi.mock("node:fs", () => ({
14
14
  }));
15
15
  vi.mock("../cdp/index.js", () => ({
16
16
  discoverTargets: vi.fn(),
17
+ findApp: vi.fn(),
17
18
  }));
18
19
  vi.mock("get-port", () => ({
19
20
  default: vi.fn(),
20
21
  }));
21
- import { discoverTargets } from "../cdp/index.js";
22
+ import { discoverTargets, findApp } from "../cdp/index.js";
22
23
  import getPort from "get-port";
23
24
  const mockedSpawn = vi.mocked(spawn);
24
25
  const mockedAccessSync = vi.mocked(accessSync);
25
26
  const mockedDiscoverTargets = vi.mocked(discoverTargets);
27
+ const mockedFindApp = vi.mocked(findApp);
26
28
  const mockedGetPort = vi.mocked(getPort);
27
29
  /** Use zero probe delay in tests to avoid 3s waits. */
28
30
  const FAST_OPTIONS = { launchProbeDelay: 0 };
@@ -129,6 +131,7 @@ describe("AppService", () => {
129
131
  describe("launch", () => {
130
132
  beforeEach(() => {
131
133
  vi.stubGlobal("process", { ...process, platform: "darwin", env: {} });
134
+ mockedFindApp.mockResolvedValue([]);
132
135
  });
133
136
  it("skips launch if already running with explicit port", async () => {
134
137
  const service = new AppService(9222, FAST_OPTIONS);
@@ -195,6 +198,7 @@ describe("AppService", () => {
195
198
  describe("quit", () => {
196
199
  beforeEach(() => {
197
200
  vi.stubGlobal("process", { ...process, platform: "darwin", env: {} });
201
+ mockedFindApp.mockResolvedValue([]);
198
202
  });
199
203
  it("sends SIGTERM and waits for exit", async () => {
200
204
  const service = new AppService(9222, FAST_OPTIONS);
@@ -1 +1 @@
1
- {"version":3,"file":"app.test.js","sourceRoot":"","sources":["../../src/services/app.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.test.js","sourceRoot":"","sources":["../../src/services/app.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import type { SourceType } from "../types/index.js";
2
+ import type { RunnerState } from "../types/index.js";
3
+ import type { InstanceService } from "./instance.js";
4
+ /**
5
+ * Options for initiating a collection operation.
6
+ */
7
+ export interface CollectOptions {
8
+ /** Maximum number of profiles to collect. */
9
+ readonly limit?: number;
10
+ /** Maximum number of pages to process. */
11
+ readonly maxPages?: number;
12
+ /** Number of results per page. */
13
+ readonly pageSize?: number;
14
+ }
15
+ /**
16
+ * Manages people collection from LinkedIn pages via CDP.
17
+ *
18
+ * Collection uses the dedicated `prepareCollecting` → `collect` IPC
19
+ * entry point, which drives the LinkedHelper state machine through
20
+ * `idle → preparing-collecting → collecting → idle`.
21
+ *
22
+ * The {@link collect} method returns immediately — callers should poll
23
+ * the runner state (`mainWindow.state`) for progress.
24
+ */
25
+ export declare class CollectionService {
26
+ private readonly instance;
27
+ constructor(instance: InstanceService);
28
+ /**
29
+ * Initiate people collection from a LinkedIn source URL.
30
+ *
31
+ * Validates that the source URL is a recognized LinkedIn page type,
32
+ * ensures the instance is idle, then calls `canCollect` →
33
+ * `prepareCollecting` → `collect` via CDP.
34
+ *
35
+ * Returns immediately after initiating collection — the actual
36
+ * collection runs asynchronously in LinkedHelper. Poll the runner
37
+ * state via {@link getRunnerState} for progress.
38
+ *
39
+ * @param sourceUrl - LinkedIn page URL to collect from (e.g., search results URL).
40
+ * @param campaignId - Campaign to associate the collection with.
41
+ * @param options - Collection parameters (limit, maxPages, pageSize).
42
+ * @throws {CollectionError} if the source URL is not recognized, canCollect returns false,
43
+ * or the CDP calls fail.
44
+ * @throws {CollectionBusyError} if the instance is not idle.
45
+ */
46
+ collect(sourceUrl: string, _campaignId: number, options?: CollectOptions): Promise<void>;
47
+ /**
48
+ * Check whether collection is possible for a given source type.
49
+ *
50
+ * This is a page-state check — returns `true` only when the
51
+ * LinkedHelper browser is currently on a matching source page.
52
+ */
53
+ canCollect(sourceType: SourceType): Promise<boolean>;
54
+ /**
55
+ * Get the current runner state from the LinkedHelper main window.
56
+ */
57
+ getRunnerState(): Promise<RunnerState>;
58
+ /**
59
+ * Ensure the instance runner is idle.
60
+ *
61
+ * @throws {CollectionBusyError} if the runner is not idle.
62
+ */
63
+ private ensureIdle;
64
+ /**
65
+ * Assert that `canCollect` returns `true` for the source type.
66
+ *
67
+ * @throws {CollectionError} if `canCollect` returns `false`.
68
+ */
69
+ private assertCanCollect;
70
+ /**
71
+ * Call `prepareCollecting` to transition the state machine from
72
+ * `idle` to `preparing-collecting`.
73
+ *
74
+ * @throws {CollectionError} if the call returns `false`.
75
+ */
76
+ private prepareCollecting;
77
+ /**
78
+ * Call `collect` to start the actual collection process.
79
+ *
80
+ * @throws {CollectionError} if the call returns `false`.
81
+ */
82
+ private startCollecting;
83
+ }
84
+ //# sourceMappingURL=collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../src/services/collection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;GASG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;gBAE/B,QAAQ,EAAE,eAAe;IAIrC;;;;;;;;;;;;;;;;;OAiBG;IACG,OAAO,CACX,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;IAkChB;;;;;OAKG;IACG,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1D;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAO5C;;;;OAIG;YACW,UAAU;IAOxB;;;;OAIG;YACW,gBAAgB;IAS9B;;;;;OAKG;YACW,iBAAiB;IAkB/B;;;;OAIG;YACW,eAAe;CAmB9B"}
@@ -0,0 +1,145 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import { errorMessage } from "../utils/error-message.js";
4
+ import { detectSourceType } from "./source-type-registry.js";
5
+ import { CollectionBusyError, CollectionError } from "./errors.js";
6
+ /**
7
+ * Manages people collection from LinkedIn pages via CDP.
8
+ *
9
+ * Collection uses the dedicated `prepareCollecting` → `collect` IPC
10
+ * entry point, which drives the LinkedHelper state machine through
11
+ * `idle → preparing-collecting → collecting → idle`.
12
+ *
13
+ * The {@link collect} method returns immediately — callers should poll
14
+ * the runner state (`mainWindow.state`) for progress.
15
+ */
16
+ export class CollectionService {
17
+ instance;
18
+ constructor(instance) {
19
+ this.instance = instance;
20
+ }
21
+ /**
22
+ * Initiate people collection from a LinkedIn source URL.
23
+ *
24
+ * Validates that the source URL is a recognized LinkedIn page type,
25
+ * ensures the instance is idle, then calls `canCollect` →
26
+ * `prepareCollecting` → `collect` via CDP.
27
+ *
28
+ * Returns immediately after initiating collection — the actual
29
+ * collection runs asynchronously in LinkedHelper. Poll the runner
30
+ * state via {@link getRunnerState} for progress.
31
+ *
32
+ * @param sourceUrl - LinkedIn page URL to collect from (e.g., search results URL).
33
+ * @param campaignId - Campaign to associate the collection with.
34
+ * @param options - Collection parameters (limit, maxPages, pageSize).
35
+ * @throws {CollectionError} if the source URL is not recognized, canCollect returns false,
36
+ * or the CDP calls fail.
37
+ * @throws {CollectionBusyError} if the instance is not idle.
38
+ */
39
+ async collect(sourceUrl, _campaignId, options) {
40
+ const sourceType = detectSourceType(sourceUrl);
41
+ if (!sourceType) {
42
+ throw new CollectionError(`Unrecognized source URL: ${sourceUrl} — cannot determine LinkedIn page type`);
43
+ }
44
+ await this.ensureIdle();
45
+ await this.assertCanCollect(sourceType);
46
+ try {
47
+ await this.prepareCollecting(sourceType);
48
+ }
49
+ catch (error) {
50
+ if (error instanceof CollectionError)
51
+ throw error;
52
+ const message = errorMessage(error);
53
+ throw new CollectionError(`Failed to prepare collection for ${sourceType}: ${message}`, { cause: error });
54
+ }
55
+ try {
56
+ await this.startCollecting(options);
57
+ }
58
+ catch (error) {
59
+ if (error instanceof CollectionError)
60
+ throw error;
61
+ const message = errorMessage(error);
62
+ throw new CollectionError(`Failed to start collection: ${message}`, { cause: error });
63
+ }
64
+ }
65
+ /**
66
+ * Check whether collection is possible for a given source type.
67
+ *
68
+ * This is a page-state check — returns `true` only when the
69
+ * LinkedHelper browser is currently on a matching source page.
70
+ */
71
+ async canCollect(sourceType) {
72
+ return this.instance.evaluateUI(`(async () => {
73
+ const mws = window.mainWindowService;
74
+ return await mws.call('canCollect', ${JSON.stringify(sourceType)});
75
+ })()`);
76
+ }
77
+ /**
78
+ * Get the current runner state from the LinkedHelper main window.
79
+ */
80
+ async getRunnerState() {
81
+ return this.instance.evaluateUI(`window.mainWindowService.mainWindow.state`, false);
82
+ }
83
+ /**
84
+ * Ensure the instance runner is idle.
85
+ *
86
+ * @throws {CollectionBusyError} if the runner is not idle.
87
+ */
88
+ async ensureIdle() {
89
+ const state = await this.getRunnerState();
90
+ if (state !== "idle") {
91
+ throw new CollectionBusyError(state);
92
+ }
93
+ }
94
+ /**
95
+ * Assert that `canCollect` returns `true` for the source type.
96
+ *
97
+ * @throws {CollectionError} if `canCollect` returns `false`.
98
+ */
99
+ async assertCanCollect(sourceType) {
100
+ const result = await this.canCollect(sourceType);
101
+ if (!result) {
102
+ throw new CollectionError(`Cannot collect from ${sourceType} — the LinkedIn browser is not on a matching page`);
103
+ }
104
+ }
105
+ /**
106
+ * Call `prepareCollecting` to transition the state machine from
107
+ * `idle` to `preparing-collecting`.
108
+ *
109
+ * @throws {CollectionError} if the call returns `false`.
110
+ */
111
+ async prepareCollecting(sourceType) {
112
+ const result = await this.instance.evaluateUI(`(async () => {
113
+ const mws = window.mainWindowService;
114
+ return await mws.call('prepareCollecting', ${JSON.stringify({
115
+ type: sourceType,
116
+ actionType: "AutoCollectPeople",
117
+ })});
118
+ })()`);
119
+ if (!result) {
120
+ throw new CollectionError(`prepareCollecting returned false for ${sourceType} — state machine did not transition`);
121
+ }
122
+ }
123
+ /**
124
+ * Call `collect` to start the actual collection process.
125
+ *
126
+ * @throws {CollectionError} if the call returns `false`.
127
+ */
128
+ async startCollecting(options) {
129
+ const params = {};
130
+ if (options?.limit !== undefined)
131
+ params.limit = options.limit;
132
+ if (options?.maxPages !== undefined)
133
+ params.maxPages = options.maxPages;
134
+ if (options?.pageSize !== undefined)
135
+ params.pageSize = options.pageSize;
136
+ const result = await this.instance.evaluateUI(`(async () => {
137
+ const mws = window.mainWindowService;
138
+ return await mws.call('collect', ${JSON.stringify(params)});
139
+ })()`);
140
+ if (!result) {
141
+ throw new CollectionError("collect returned false — state machine was not in collecting state");
142
+ }
143
+ }
144
+ }
145
+ //# sourceMappingURL=collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.js","sourceRoot":"","sources":["../../src/services/collection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=collection.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.test.d.ts","sourceRoot":"","sources":["../../src/services/collection.test.ts"],"names":[],"mappings":""}