@lhremote/core 0.5.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.
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +1 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/repositories/collection-list.d.ts +69 -0
- package/dist/db/repositories/collection-list.d.ts.map +1 -0
- package/dist/db/repositories/collection-list.integration.test.d.ts +2 -0
- package/dist/db/repositories/collection-list.integration.test.d.ts.map +1 -0
- package/dist/db/repositories/collection-list.integration.test.js +124 -0
- package/dist/db/repositories/collection-list.integration.test.js.map +1 -0
- package/dist/db/repositories/collection-list.js +161 -0
- package/dist/db/repositories/collection-list.js.map +1 -0
- package/dist/db/repositories/index.d.ts +1 -0
- package/dist/db/repositories/index.d.ts.map +1 -1
- package/dist/db/repositories/index.js +1 -0
- package/dist/db/repositories/index.js.map +1 -1
- package/dist/db/testing/create-fixture.js +17 -0
- package/dist/db/testing/create-fixture.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/operations/add-people-to-collection.d.ts +22 -0
- package/dist/operations/add-people-to-collection.d.ts.map +1 -0
- package/dist/operations/add-people-to-collection.js +27 -0
- package/dist/operations/add-people-to-collection.js.map +1 -0
- package/dist/operations/add-people-to-collection.test.d.ts +2 -0
- package/dist/operations/add-people-to-collection.test.d.ts.map +1 -0
- package/dist/operations/add-people-to-collection.test.js +69 -0
- package/dist/operations/add-people-to-collection.test.js.map +1 -0
- package/dist/operations/collect-people.d.ts +40 -0
- package/dist/operations/collect-people.d.ts.map +1 -0
- package/dist/operations/collect-people.js +55 -0
- package/dist/operations/collect-people.js.map +1 -0
- package/dist/operations/collect-people.test.d.ts +2 -0
- package/dist/operations/collect-people.test.d.ts.map +1 -0
- package/dist/operations/collect-people.test.js +156 -0
- package/dist/operations/collect-people.test.js.map +1 -0
- package/dist/operations/create-collection.d.ts +20 -0
- package/dist/operations/create-collection.d.ts.map +1 -0
- package/dist/operations/create-collection.js +26 -0
- package/dist/operations/create-collection.js.map +1 -0
- package/dist/operations/create-collection.test.d.ts +2 -0
- package/dist/operations/create-collection.test.d.ts.map +1 -0
- package/dist/operations/create-collection.test.js +72 -0
- package/dist/operations/create-collection.test.js.map +1 -0
- package/dist/operations/delete-collection.d.ts +20 -0
- package/dist/operations/delete-collection.d.ts.map +1 -0
- package/dist/operations/delete-collection.js +26 -0
- package/dist/operations/delete-collection.js.map +1 -0
- package/dist/operations/delete-collection.test.d.ts +2 -0
- package/dist/operations/delete-collection.test.d.ts.map +1 -0
- package/dist/operations/delete-collection.test.js +61 -0
- package/dist/operations/delete-collection.test.js.map +1 -0
- package/dist/operations/import-people-from-collection.d.ts +30 -0
- package/dist/operations/import-people-from-collection.d.ts.map +1 -0
- package/dist/operations/import-people-from-collection.js +65 -0
- package/dist/operations/import-people-from-collection.js.map +1 -0
- package/dist/operations/import-people-from-collection.test.d.ts +2 -0
- package/dist/operations/import-people-from-collection.test.d.ts.map +1 -0
- package/dist/operations/import-people-from-collection.test.js +170 -0
- package/dist/operations/import-people-from-collection.test.js.map +1 -0
- package/dist/operations/index.d.ts +7 -0
- package/dist/operations/index.d.ts.map +1 -1
- package/dist/operations/index.js +9 -0
- package/dist/operations/index.js.map +1 -1
- package/dist/operations/list-collections.d.ts +18 -0
- package/dist/operations/list-collections.d.ts.map +1 -0
- package/dist/operations/list-collections.js +22 -0
- package/dist/operations/list-collections.js.map +1 -0
- package/dist/operations/list-collections.test.d.ts +2 -0
- package/dist/operations/list-collections.test.d.ts.map +1 -0
- package/dist/operations/list-collections.test.js +73 -0
- package/dist/operations/list-collections.test.js.map +1 -0
- package/dist/operations/remove-people-from-collection.d.ts +21 -0
- package/dist/operations/remove-people-from-collection.d.ts.map +1 -0
- package/dist/operations/remove-people-from-collection.js +26 -0
- package/dist/operations/remove-people-from-collection.js.map +1 -0
- package/dist/operations/remove-people-from-collection.test.d.ts +2 -0
- package/dist/operations/remove-people-from-collection.test.d.ts.map +1 -0
- package/dist/operations/remove-people-from-collection.test.js +68 -0
- package/dist/operations/remove-people-from-collection.test.js.map +1 -0
- package/dist/services/collection.d.ts +84 -0
- package/dist/services/collection.d.ts.map +1 -0
- package/dist/services/collection.js +145 -0
- package/dist/services/collection.js.map +1 -0
- package/dist/services/collection.test.d.ts +2 -0
- package/dist/services/collection.test.d.ts.map +1 -0
- package/dist/services/collection.test.js +203 -0
- package/dist/services/collection.test.js.map +1 -0
- package/dist/services/errors.d.ts +16 -0
- package/dist/services/errors.d.ts.map +1 -1
- package/dist/services/errors.js +23 -0
- package/dist/services/errors.js.map +1 -1
- package/dist/services/index.d.ts +3 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +3 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/source-type-registry.d.ts +19 -0
- package/dist/services/source-type-registry.d.ts.map +1 -0
- package/dist/services/source-type-registry.js +66 -0
- package/dist/services/source-type-registry.js.map +1 -0
- package/dist/services/source-type-registry.test.d.ts +2 -0
- package/dist/services/source-type-registry.test.d.ts.map +1 -0
- package/dist/services/source-type-registry.test.js +124 -0
- package/dist/services/source-type-registry.test.js.map +1 -0
- package/dist/types/collection.d.ts +12 -0
- package/dist/types/collection.d.ts.map +1 -0
- package/dist/types/collection.js +4 -0
- package/dist/types/collection.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- 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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"}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"collection.test.d.ts","sourceRoot":"","sources":["../../src/services/collection.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,203 @@
|
|
|
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
|
+
import { CollectionBusyError, CollectionError } from "./errors.js";
|
|
5
|
+
import { CollectionService } from "./collection.js";
|
|
6
|
+
// Mock InstanceService
|
|
7
|
+
const mockEvaluateUI = vi.fn();
|
|
8
|
+
vi.mock("./instance.js", () => ({
|
|
9
|
+
InstanceService: vi.fn().mockImplementation(function () {
|
|
10
|
+
this.evaluateUI = mockEvaluateUI;
|
|
11
|
+
}),
|
|
12
|
+
}));
|
|
13
|
+
import { InstanceService } from "./instance.js";
|
|
14
|
+
/** LinkedIn people search URL for tests. */
|
|
15
|
+
const SEARCH_URL = "https://www.linkedin.com/search/results/people/?keywords=software%20engineer";
|
|
16
|
+
/** LinkedIn company people URL for tests. */
|
|
17
|
+
const ORG_PEOPLE_URL = "https://www.linkedin.com/company/acme-corp/people/";
|
|
18
|
+
afterEach(() => {
|
|
19
|
+
vi.restoreAllMocks();
|
|
20
|
+
});
|
|
21
|
+
describe("CollectionService", () => {
|
|
22
|
+
let service;
|
|
23
|
+
beforeEach(() => {
|
|
24
|
+
vi.clearAllMocks();
|
|
25
|
+
const instance = new InstanceService(9223);
|
|
26
|
+
service = new CollectionService(instance);
|
|
27
|
+
});
|
|
28
|
+
describe("collect", () => {
|
|
29
|
+
it("calls canCollect, prepareCollecting, and collect via CDP", async () => {
|
|
30
|
+
mockEvaluateUI
|
|
31
|
+
.mockResolvedValueOnce("idle") // getRunnerState
|
|
32
|
+
.mockResolvedValueOnce(true) // canCollect
|
|
33
|
+
.mockResolvedValueOnce(true) // prepareCollecting
|
|
34
|
+
.mockResolvedValueOnce(true); // collect
|
|
35
|
+
await service.collect(SEARCH_URL, 1);
|
|
36
|
+
expect(mockEvaluateUI).toHaveBeenCalledTimes(4);
|
|
37
|
+
// 1. Runner state check
|
|
38
|
+
const stateExpr = mockEvaluateUI.mock.calls[0]?.[0];
|
|
39
|
+
expect(stateExpr).toContain("mainWindowService.mainWindow.state");
|
|
40
|
+
// 2. canCollect
|
|
41
|
+
const canCollectExpr = mockEvaluateUI.mock.calls[1]?.[0];
|
|
42
|
+
expect(canCollectExpr).toContain("canCollect");
|
|
43
|
+
expect(canCollectExpr).toContain("SearchPage");
|
|
44
|
+
// 3. prepareCollecting
|
|
45
|
+
const prepareExpr = mockEvaluateUI.mock.calls[2]?.[0];
|
|
46
|
+
expect(prepareExpr).toContain("prepareCollecting");
|
|
47
|
+
expect(prepareExpr).toContain("SearchPage");
|
|
48
|
+
expect(prepareExpr).toContain("AutoCollectPeople");
|
|
49
|
+
// 4. collect
|
|
50
|
+
const collectExpr = mockEvaluateUI.mock.calls[3]?.[0];
|
|
51
|
+
expect(collectExpr).toContain("mws.call('collect'");
|
|
52
|
+
});
|
|
53
|
+
it("passes limit, maxPages, pageSize to collect call", async () => {
|
|
54
|
+
mockEvaluateUI
|
|
55
|
+
.mockResolvedValueOnce("idle")
|
|
56
|
+
.mockResolvedValueOnce(true)
|
|
57
|
+
.mockResolvedValueOnce(true)
|
|
58
|
+
.mockResolvedValueOnce(true);
|
|
59
|
+
await service.collect(SEARCH_URL, 1, {
|
|
60
|
+
limit: 100,
|
|
61
|
+
maxPages: 5,
|
|
62
|
+
pageSize: 25,
|
|
63
|
+
});
|
|
64
|
+
const collectExpr = mockEvaluateUI.mock.calls[3]?.[0];
|
|
65
|
+
expect(collectExpr).toContain('"limit":100');
|
|
66
|
+
expect(collectExpr).toContain('"maxPages":5');
|
|
67
|
+
expect(collectExpr).toContain('"pageSize":25');
|
|
68
|
+
});
|
|
69
|
+
it("omits undefined options from collect call", async () => {
|
|
70
|
+
mockEvaluateUI
|
|
71
|
+
.mockResolvedValueOnce("idle")
|
|
72
|
+
.mockResolvedValueOnce(true)
|
|
73
|
+
.mockResolvedValueOnce(true)
|
|
74
|
+
.mockResolvedValueOnce(true);
|
|
75
|
+
await service.collect(SEARCH_URL, 1, { limit: 50 });
|
|
76
|
+
const collectExpr = mockEvaluateUI.mock.calls[3]?.[0];
|
|
77
|
+
expect(collectExpr).toContain('"limit":50');
|
|
78
|
+
expect(collectExpr).not.toContain("maxPages");
|
|
79
|
+
expect(collectExpr).not.toContain("pageSize");
|
|
80
|
+
});
|
|
81
|
+
it("detects OrganizationPeople source type from company URL", async () => {
|
|
82
|
+
mockEvaluateUI
|
|
83
|
+
.mockResolvedValueOnce("idle")
|
|
84
|
+
.mockResolvedValueOnce(true)
|
|
85
|
+
.mockResolvedValueOnce(true)
|
|
86
|
+
.mockResolvedValueOnce(true);
|
|
87
|
+
await service.collect(ORG_PEOPLE_URL, 1);
|
|
88
|
+
const canCollectExpr = mockEvaluateUI.mock.calls[1]?.[0];
|
|
89
|
+
expect(canCollectExpr).toContain("OrganizationPeople");
|
|
90
|
+
const prepareExpr = mockEvaluateUI.mock.calls[2]?.[0];
|
|
91
|
+
expect(prepareExpr).toContain("OrganizationPeople");
|
|
92
|
+
});
|
|
93
|
+
it("throws CollectionError for unrecognized source URL", async () => {
|
|
94
|
+
const error = await service
|
|
95
|
+
.collect("https://www.linkedin.com/feed/", 1)
|
|
96
|
+
.catch((e) => e);
|
|
97
|
+
expect(error).toBeInstanceOf(CollectionError);
|
|
98
|
+
expect(error.message).toContain("Unrecognized source URL");
|
|
99
|
+
// No CDP calls should be made
|
|
100
|
+
expect(mockEvaluateUI).not.toHaveBeenCalled();
|
|
101
|
+
});
|
|
102
|
+
it("throws CollectionBusyError when runner is not idle", async () => {
|
|
103
|
+
mockEvaluateUI.mockResolvedValueOnce("campaigns");
|
|
104
|
+
await expect(service.collect(SEARCH_URL, 1)).rejects.toThrow(CollectionBusyError);
|
|
105
|
+
// Only the runner state check should be made
|
|
106
|
+
expect(mockEvaluateUI).toHaveBeenCalledTimes(1);
|
|
107
|
+
});
|
|
108
|
+
it("includes runner state in CollectionBusyError", async () => {
|
|
109
|
+
mockEvaluateUI.mockResolvedValueOnce("campaigns");
|
|
110
|
+
try {
|
|
111
|
+
await service.collect(SEARCH_URL, 1);
|
|
112
|
+
expect.unreachable("should have thrown");
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
expect(error).toBeInstanceOf(CollectionBusyError);
|
|
116
|
+
expect(error.runnerState).toBe("campaigns");
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
it("throws CollectionError when canCollect returns false", async () => {
|
|
120
|
+
mockEvaluateUI
|
|
121
|
+
.mockResolvedValueOnce("idle")
|
|
122
|
+
.mockResolvedValueOnce(false); // canCollect returns false
|
|
123
|
+
const error = await service.collect(SEARCH_URL, 1).catch((e) => e);
|
|
124
|
+
expect(error).toBeInstanceOf(CollectionError);
|
|
125
|
+
expect(error.message).toContain("not on a matching page");
|
|
126
|
+
});
|
|
127
|
+
it("throws CollectionError when prepareCollecting returns false", async () => {
|
|
128
|
+
mockEvaluateUI
|
|
129
|
+
.mockResolvedValueOnce("idle")
|
|
130
|
+
.mockResolvedValueOnce(true)
|
|
131
|
+
.mockResolvedValueOnce(false); // prepareCollecting returns false
|
|
132
|
+
await expect(service.collect(SEARCH_URL, 1)).rejects.toThrow(CollectionError);
|
|
133
|
+
});
|
|
134
|
+
it("throws CollectionError when collect returns false", async () => {
|
|
135
|
+
mockEvaluateUI
|
|
136
|
+
.mockResolvedValueOnce("idle")
|
|
137
|
+
.mockResolvedValueOnce(true)
|
|
138
|
+
.mockResolvedValueOnce(true)
|
|
139
|
+
.mockResolvedValueOnce(false); // collect returns false
|
|
140
|
+
await expect(service.collect(SEARCH_URL, 1)).rejects.toThrow(CollectionError);
|
|
141
|
+
});
|
|
142
|
+
it("wraps CDP errors in CollectionError for prepareCollecting", async () => {
|
|
143
|
+
mockEvaluateUI
|
|
144
|
+
.mockResolvedValueOnce("idle")
|
|
145
|
+
.mockResolvedValueOnce(true)
|
|
146
|
+
.mockRejectedValueOnce(new Error("CDP timeout"));
|
|
147
|
+
const error = await service.collect(SEARCH_URL, 1).catch((e) => e);
|
|
148
|
+
expect(error).toBeInstanceOf(CollectionError);
|
|
149
|
+
expect(error.message).toContain("Failed to prepare collection");
|
|
150
|
+
expect(error.cause).toBeInstanceOf(Error);
|
|
151
|
+
});
|
|
152
|
+
it("wraps CDP errors in CollectionError for collect", async () => {
|
|
153
|
+
mockEvaluateUI
|
|
154
|
+
.mockResolvedValueOnce("idle")
|
|
155
|
+
.mockResolvedValueOnce(true)
|
|
156
|
+
.mockResolvedValueOnce(true)
|
|
157
|
+
.mockRejectedValueOnce(new Error("CDP timeout"));
|
|
158
|
+
const error = await service.collect(SEARCH_URL, 1).catch((e) => e);
|
|
159
|
+
expect(error).toBeInstanceOf(CollectionError);
|
|
160
|
+
expect(error.message).toContain("Failed to start collection");
|
|
161
|
+
expect(error.cause).toBeInstanceOf(Error);
|
|
162
|
+
});
|
|
163
|
+
it("does not wrap CollectionError from prepareCollecting", async () => {
|
|
164
|
+
mockEvaluateUI
|
|
165
|
+
.mockResolvedValueOnce("idle")
|
|
166
|
+
.mockResolvedValueOnce(true)
|
|
167
|
+
.mockResolvedValueOnce(false); // triggers CollectionError inside prepareCollecting
|
|
168
|
+
const error = await service.collect(SEARCH_URL, 1).catch((e) => e);
|
|
169
|
+
expect(error).toBeInstanceOf(CollectionError);
|
|
170
|
+
expect(error.message).toContain("prepareCollecting returned false");
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
describe("canCollect", () => {
|
|
174
|
+
it("calls canCollect IPC method via CDP", async () => {
|
|
175
|
+
mockEvaluateUI.mockResolvedValueOnce(true);
|
|
176
|
+
const result = await service.canCollect("SearchPage");
|
|
177
|
+
expect(result).toBe(true);
|
|
178
|
+
const expr = mockEvaluateUI.mock.calls[0]?.[0];
|
|
179
|
+
expect(expr).toContain("canCollect");
|
|
180
|
+
expect(expr).toContain("SearchPage");
|
|
181
|
+
});
|
|
182
|
+
it("returns false when LinkedHelper reports false", async () => {
|
|
183
|
+
mockEvaluateUI.mockResolvedValueOnce(false);
|
|
184
|
+
const result = await service.canCollect("MyConnections");
|
|
185
|
+
expect(result).toBe(false);
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
describe("getRunnerState", () => {
|
|
189
|
+
it("reads state from mainWindow.state via CDP", async () => {
|
|
190
|
+
mockEvaluateUI.mockResolvedValueOnce("idle");
|
|
191
|
+
const state = await service.getRunnerState();
|
|
192
|
+
expect(state).toBe("idle");
|
|
193
|
+
const expr = mockEvaluateUI.mock.calls[0]?.[0];
|
|
194
|
+
expect(expr).toContain("mainWindowService.mainWindow.state");
|
|
195
|
+
});
|
|
196
|
+
it("returns non-idle states", async () => {
|
|
197
|
+
mockEvaluateUI.mockResolvedValueOnce("campaigns");
|
|
198
|
+
const state = await service.getRunnerState();
|
|
199
|
+
expect(state).toBe("campaigns");
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
//# sourceMappingURL=collection.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection.test.js","sourceRoot":"","sources":["../../src/services/collection.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -78,6 +78,22 @@ export declare class InvalidProfileUrlError extends ServiceError {
|
|
|
78
78
|
export declare class ExtractionTimeoutError extends ServiceError {
|
|
79
79
|
constructor(profileUrl: string, timeoutMs: number);
|
|
80
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Thrown when a collection operation fails during execution
|
|
83
|
+
* (canCollect, prepareCollecting, collect, or other CDP-based operations).
|
|
84
|
+
*/
|
|
85
|
+
export declare class CollectionError extends ServiceError {
|
|
86
|
+
constructor(message: string, options?: ErrorOptions);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Thrown when a collection operation cannot proceed because the
|
|
90
|
+
* LinkedHelper instance is busy (running a campaign, another
|
|
91
|
+
* collection, or a single action).
|
|
92
|
+
*/
|
|
93
|
+
export declare class CollectionBusyError extends CollectionError {
|
|
94
|
+
readonly runnerState: string;
|
|
95
|
+
constructor(runnerState: string, options?: ErrorOptions);
|
|
96
|
+
}
|
|
81
97
|
/**
|
|
82
98
|
* Thrown when a campaign operation fails during execution
|
|
83
99
|
* (create, start, stop, or other CDP-based operations).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/services/errors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;gBACpC,OAAO,CAAC,EAAE,MAAM;CAM7B;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAY;gBAClC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,YAAY;gBAC/C,IAAI,EAAE,MAAM;CAMzB;AAED;;;;;;;GAOG;AACH,qBAAa,4BAA6B,SAAQ,YAAY;IAC5D,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC;gBAExB,SAAS,EAAE,aAAa,EAAE;CASvC;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;gBACtC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAM/C;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,YAAY;gBAC3C,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,YAAY;gBAClC,IAAI,EAAE,MAAM;CAOzB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;IACpD,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAQzE;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;gBAC1C,GAAG,EAAE,MAAM;CAMxB;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;gBAC1C,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAMlD;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;IACtD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE5B,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAKzE;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE5B,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAKzE;AAED;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;gBAEpB,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY;CAsB3D"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/services/errors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;gBACpC,OAAO,CAAC,EAAE,MAAM;CAM7B;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAY;gBAClC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,YAAY;gBAC/C,IAAI,EAAE,MAAM;CAMzB;AAED;;;;;;;GAOG;AACH,qBAAa,4BAA6B,SAAQ,YAAY;IAC5D,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC;gBAExB,SAAS,EAAE,aAAa,EAAE;CASvC;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;gBACtC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAM/C;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,YAAY;gBAC3C,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,YAAY;gBAClC,IAAI,EAAE,MAAM;CAOzB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;IACpD,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAQzE;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;gBAC1C,GAAG,EAAE,MAAM;CAMxB;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;gBAC1C,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAMlD;AAED;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,YAAY;gBACnC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;IACtD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAEjB,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAQxD;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;IACtD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE5B,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAKzE;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE5B,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAKzE;AAED;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;gBAEpB,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY;CAsB3D"}
|
package/dist/services/errors.js
CHANGED
|
@@ -117,6 +117,29 @@ export class ExtractionTimeoutError extends ServiceError {
|
|
|
117
117
|
this.name = "ExtractionTimeoutError";
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Thrown when a collection operation fails during execution
|
|
122
|
+
* (canCollect, prepareCollecting, collect, or other CDP-based operations).
|
|
123
|
+
*/
|
|
124
|
+
export class CollectionError extends ServiceError {
|
|
125
|
+
constructor(message, options) {
|
|
126
|
+
super(message, options);
|
|
127
|
+
this.name = "CollectionError";
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Thrown when a collection operation cannot proceed because the
|
|
132
|
+
* LinkedHelper instance is busy (running a campaign, another
|
|
133
|
+
* collection, or a single action).
|
|
134
|
+
*/
|
|
135
|
+
export class CollectionBusyError extends CollectionError {
|
|
136
|
+
runnerState;
|
|
137
|
+
constructor(runnerState, options) {
|
|
138
|
+
super(`Cannot start collection — instance is busy (runner state: ${runnerState})`, options);
|
|
139
|
+
this.name = "CollectionBusyError";
|
|
140
|
+
this.runnerState = runnerState;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
120
143
|
/**
|
|
121
144
|
* Thrown when a campaign operation fails during execution
|
|
122
145
|
* (create, start, stop, or other CDP-based operations).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/services/errors.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/services/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/services/index.d.ts
CHANGED
|
@@ -6,5 +6,7 @@ export { checkStatus, type AccountInstanceStatus, type DatabaseStatus, type Laun
|
|
|
6
6
|
export { CampaignService } from "./campaign.js";
|
|
7
7
|
export { AccountResolutionError, resolveAccount, } from "./account-resolution.js";
|
|
8
8
|
export { withDatabase, withInstanceDatabase, type DatabaseContext, type InstanceDatabaseContext, } from "./instance-context.js";
|
|
9
|
-
export {
|
|
9
|
+
export { detectSourceType, validateSourceType } from "./source-type-registry.js";
|
|
10
|
+
export { CollectionService } from "./collection.js";
|
|
11
|
+
export { ActionExecutionError, AppLaunchError, AppNotFoundError, CampaignExecutionError, CampaignTimeoutError, CollectionBusyError, CollectionError, ExtractionTimeoutError, InstanceNotRunningError, InvalidProfileUrlError, LinkedHelperNotRunningError, LinkedHelperUnreachableError, ServiceError, StartInstanceError, UIBlockedError, WrongPortError, } from "./errors.js";
|
|
10
12
|
//# sourceMappingURL=index.d.ts.map
|