@lhremote/core 0.1.0 → 0.2.1
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/README.md +124 -0
- package/dist/cdp/app-discovery.d.ts +22 -0
- package/dist/cdp/app-discovery.d.ts.map +1 -0
- package/dist/cdp/app-discovery.js +60 -0
- package/dist/cdp/app-discovery.js.map +1 -0
- package/dist/cdp/app-discovery.test.d.ts +2 -0
- package/dist/cdp/app-discovery.test.d.ts.map +1 -0
- package/dist/cdp/app-discovery.test.js +124 -0
- package/dist/cdp/app-discovery.test.js.map +1 -0
- package/dist/cdp/client.d.ts +14 -0
- package/dist/cdp/client.d.ts.map +1 -1
- package/dist/cdp/client.integration.test.js +10 -3
- package/dist/cdp/client.integration.test.js.map +1 -1
- package/dist/cdp/client.js +41 -8
- package/dist/cdp/client.js.map +1 -1
- package/dist/cdp/client.test.js +267 -3
- package/dist/cdp/client.test.js.map +1 -1
- package/dist/cdp/discovery.d.ts.map +1 -1
- package/dist/cdp/discovery.integration.test.js +2 -0
- package/dist/cdp/discovery.integration.test.js.map +1 -1
- package/dist/cdp/discovery.js +2 -0
- package/dist/cdp/discovery.js.map +1 -1
- package/dist/cdp/discovery.test.js +2 -0
- package/dist/cdp/discovery.test.js.map +1 -1
- package/dist/cdp/errors.d.ts.map +1 -1
- package/dist/cdp/errors.js +2 -0
- package/dist/cdp/errors.js.map +1 -1
- package/dist/cdp/errors.test.js +2 -0
- package/dist/cdp/errors.test.js.map +1 -1
- package/dist/cdp/index.d.ts +1 -0
- package/dist/cdp/index.d.ts.map +1 -1
- package/dist/cdp/index.js +3 -0
- package/dist/cdp/index.js.map +1 -1
- package/dist/cdp/instance-discovery.d.ts.map +1 -1
- package/dist/cdp/instance-discovery.integration.test.js +2 -0
- package/dist/cdp/instance-discovery.integration.test.js.map +1 -1
- package/dist/cdp/instance-discovery.js +5 -17
- package/dist/cdp/instance-discovery.js.map +1 -1
- package/dist/cdp/instance-discovery.test.js +2 -0
- package/dist/cdp/instance-discovery.test.js.map +1 -1
- package/dist/cdp/testing/launch-chromium.d.ts.map +1 -1
- package/dist/cdp/testing/launch-chromium.js +4 -1
- package/dist/cdp/testing/launch-chromium.js.map +1 -1
- package/dist/constants.d.ts +5 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +7 -0
- package/dist/constants.js.map +1 -0
- package/dist/data/action-types.d.ts +39 -0
- package/dist/data/action-types.d.ts.map +1 -0
- package/dist/data/action-types.js +497 -0
- package/dist/data/action-types.js.map +1 -0
- package/dist/data/action-types.test.d.ts +2 -0
- package/dist/data/action-types.test.d.ts.map +1 -0
- package/dist/data/action-types.test.js +544 -0
- package/dist/data/action-types.test.js.map +1 -0
- package/dist/data/index.d.ts +3 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +4 -0
- package/dist/data/index.js.map +1 -0
- package/dist/db/client.d.ts +19 -5
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.integration.test.js +5 -1
- package/dist/db/client.integration.test.js.map +1 -1
- package/dist/db/client.js +11 -5
- package/dist/db/client.js.map +1 -1
- package/dist/db/client.test.js +2 -0
- package/dist/db/client.test.js.map +1 -1
- package/dist/db/discovery.d.ts.map +1 -1
- package/dist/db/discovery.integration.test.js +2 -0
- package/dist/db/discovery.integration.test.js.map +1 -1
- package/dist/db/discovery.js +2 -0
- package/dist/db/discovery.js.map +1 -1
- package/dist/db/discovery.test.js +2 -0
- package/dist/db/discovery.test.js.map +1 -1
- package/dist/db/errors.d.ts +31 -0
- package/dist/db/errors.d.ts.map +1 -1
- package/dist/db/errors.js +49 -0
- package/dist/db/errors.js.map +1 -1
- package/dist/db/errors.test.js +2 -0
- package/dist/db/errors.test.js.map +1 -1
- package/dist/db/escape-like.d.ts +8 -0
- package/dist/db/escape-like.d.ts.map +1 -0
- package/dist/db/escape-like.js +12 -0
- package/dist/db/escape-like.js.map +1 -0
- package/dist/db/escape-like.test.d.ts +2 -0
- package/dist/db/escape-like.test.d.ts.map +1 -0
- package/dist/db/escape-like.test.js +25 -0
- package/dist/db/escape-like.test.js.map +1 -0
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +4 -2
- package/dist/db/index.js.map +1 -1
- package/dist/db/repositories/campaign-exclude-list.d.ts +89 -0
- package/dist/db/repositories/campaign-exclude-list.d.ts.map +1 -0
- package/dist/db/repositories/campaign-exclude-list.js +204 -0
- package/dist/db/repositories/campaign-exclude-list.js.map +1 -0
- package/dist/db/repositories/campaign-exclude-list.test.d.ts +2 -0
- package/dist/db/repositories/campaign-exclude-list.test.d.ts.map +1 -0
- package/dist/db/repositories/campaign-exclude-list.test.js +132 -0
- package/dist/db/repositories/campaign-exclude-list.test.js.map +1 -0
- package/dist/db/repositories/campaign-statistics.d.ts +58 -0
- package/dist/db/repositories/campaign-statistics.d.ts.map +1 -0
- package/dist/db/repositories/campaign-statistics.js +278 -0
- package/dist/db/repositories/campaign-statistics.js.map +1 -0
- package/dist/db/repositories/campaign-statistics.test.d.ts +2 -0
- package/dist/db/repositories/campaign-statistics.test.d.ts.map +1 -0
- package/dist/db/repositories/campaign-statistics.test.js +266 -0
- package/dist/db/repositories/campaign-statistics.test.js.map +1 -0
- package/dist/db/repositories/campaign.d.ts +103 -0
- package/dist/db/repositories/campaign.d.ts.map +1 -0
- package/dist/db/repositories/campaign.js +388 -0
- package/dist/db/repositories/campaign.js.map +1 -0
- package/dist/db/repositories/campaign.test.d.ts +2 -0
- package/dist/db/repositories/campaign.test.d.ts.map +1 -0
- package/dist/db/repositories/campaign.test.js +392 -0
- package/dist/db/repositories/campaign.test.js.map +1 -0
- package/dist/db/repositories/index.d.ts +4 -0
- package/dist/db/repositories/index.d.ts.map +1 -1
- package/dist/db/repositories/index.js +6 -0
- package/dist/db/repositories/index.js.map +1 -1
- package/dist/db/repositories/message.d.ts +57 -0
- package/dist/db/repositories/message.d.ts.map +1 -0
- package/dist/db/repositories/message.integration.test.d.ts +2 -0
- package/dist/db/repositories/message.integration.test.d.ts.map +1 -0
- package/dist/db/repositories/message.integration.test.js +137 -0
- package/dist/db/repositories/message.integration.test.js.map +1 -0
- package/dist/db/repositories/message.js +308 -0
- package/dist/db/repositories/message.js.map +1 -0
- package/dist/db/repositories/message.test.d.ts +2 -0
- package/dist/db/repositories/message.test.d.ts.map +1 -0
- package/dist/db/repositories/message.test.js +179 -0
- package/dist/db/repositories/message.test.js.map +1 -0
- package/dist/db/repositories/profile.d.ts +11 -1
- package/dist/db/repositories/profile.d.ts.map +1 -1
- package/dist/db/repositories/profile.integration.test.js +103 -0
- package/dist/db/repositories/profile.integration.test.js.map +1 -1
- package/dist/db/repositories/profile.js +52 -15
- package/dist/db/repositories/profile.js.map +1 -1
- package/dist/db/repositories/profile.test.js +90 -0
- package/dist/db/repositories/profile.test.js.map +1 -1
- package/dist/db/testing/create-fixture.d.ts +0 -6
- package/dist/db/testing/create-fixture.d.ts.map +1 -1
- package/dist/db/testing/create-fixture.js +463 -4
- package/dist/db/testing/create-fixture.js.map +1 -1
- package/dist/db/testing/open-fixture.d.ts +5 -4
- package/dist/db/testing/open-fixture.d.ts.map +1 -1
- package/dist/db/testing/open-fixture.js +24 -6
- package/dist/db/testing/open-fixture.js.map +1 -1
- package/dist/formats/campaign-format.d.ts +31 -0
- package/dist/formats/campaign-format.d.ts.map +1 -0
- package/dist/formats/campaign-format.js +225 -0
- package/dist/formats/campaign-format.js.map +1 -0
- package/dist/formats/campaign-format.test.d.ts +2 -0
- package/dist/formats/campaign-format.test.d.ts.map +1 -0
- package/dist/formats/campaign-format.test.js +442 -0
- package/dist/formats/campaign-format.test.js.map +1 -0
- package/dist/formats/errors.d.ts +7 -0
- package/dist/formats/errors.d.ts.map +1 -0
- package/dist/formats/errors.js +12 -0
- package/dist/formats/errors.js.map +1 -0
- package/dist/formats/index.d.ts +3 -0
- package/dist/formats/index.d.ts.map +1 -0
- package/dist/formats/index.js +5 -0
- package/dist/formats/index.js.map +1 -0
- package/dist/index.d.ts +10 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -4
- package/dist/index.js.map +1 -1
- package/dist/operations/campaign-add-action.d.ts +14 -0
- package/dist/operations/campaign-add-action.d.ts.map +1 -0
- package/dist/operations/campaign-add-action.js +33 -0
- package/dist/operations/campaign-add-action.js.map +1 -0
- package/dist/operations/campaign-add-action.test.d.ts +2 -0
- package/dist/operations/campaign-add-action.test.d.ts.map +1 -0
- package/dist/operations/campaign-add-action.test.js +122 -0
- package/dist/operations/campaign-add-action.test.js.map +1 -0
- package/dist/operations/campaign-create.d.ts +17 -0
- package/dist/operations/campaign-create.d.ts.map +1 -0
- package/dist/operations/campaign-create.js +21 -0
- package/dist/operations/campaign-create.js.map +1 -0
- package/dist/operations/campaign-create.test.d.ts +2 -0
- package/dist/operations/campaign-create.test.d.ts.map +1 -0
- package/dist/operations/campaign-create.test.js +121 -0
- package/dist/operations/campaign-create.test.js.map +1 -0
- package/dist/operations/campaign-delete.d.ts +20 -0
- package/dist/operations/campaign-delete.d.ts.map +1 -0
- package/dist/operations/campaign-delete.js +22 -0
- package/dist/operations/campaign-delete.js.map +1 -0
- package/dist/operations/campaign-delete.test.d.ts +2 -0
- package/dist/operations/campaign-delete.test.d.ts.map +1 -0
- package/dist/operations/campaign-delete.test.js +92 -0
- package/dist/operations/campaign-delete.test.js.map +1 -0
- package/dist/operations/campaign-exclude-add.d.ts +16 -0
- package/dist/operations/campaign-exclude-add.d.ts.map +1 -0
- package/dist/operations/campaign-exclude-add.js +27 -0
- package/dist/operations/campaign-exclude-add.js.map +1 -0
- package/dist/operations/campaign-exclude-add.test.d.ts +2 -0
- package/dist/operations/campaign-exclude-add.test.d.ts.map +1 -0
- package/dist/operations/campaign-exclude-add.test.js +114 -0
- package/dist/operations/campaign-exclude-add.test.js.map +1 -0
- package/dist/operations/campaign-exclude-list.d.ts +14 -0
- package/dist/operations/campaign-exclude-list.d.ts.map +1 -0
- package/dist/operations/campaign-exclude-list.js +26 -0
- package/dist/operations/campaign-exclude-list.js.map +1 -0
- package/dist/operations/campaign-exclude-list.test.d.ts +2 -0
- package/dist/operations/campaign-exclude-list.test.d.ts.map +1 -0
- package/dist/operations/campaign-exclude-list.test.js +113 -0
- package/dist/operations/campaign-exclude-list.test.js.map +1 -0
- package/dist/operations/campaign-exclude-remove.d.ts +16 -0
- package/dist/operations/campaign-exclude-remove.d.ts.map +1 -0
- package/dist/operations/campaign-exclude-remove.js +27 -0
- package/dist/operations/campaign-exclude-remove.js.map +1 -0
- package/dist/operations/campaign-exclude-remove.test.d.ts +2 -0
- package/dist/operations/campaign-exclude-remove.test.d.ts.map +1 -0
- package/dist/operations/campaign-exclude-remove.test.js +114 -0
- package/dist/operations/campaign-exclude-remove.test.js.map +1 -0
- package/dist/operations/campaign-export.d.ts +12 -0
- package/dist/operations/campaign-export.d.ts.map +1 -0
- package/dist/operations/campaign-export.js +24 -0
- package/dist/operations/campaign-export.js.map +1 -0
- package/dist/operations/campaign-export.test.d.ts +2 -0
- package/dist/operations/campaign-export.test.d.ts.map +1 -0
- package/dist/operations/campaign-export.test.js +134 -0
- package/dist/operations/campaign-export.test.js.map +1 -0
- package/dist/operations/campaign-get.d.ts +19 -0
- package/dist/operations/campaign-get.d.ts.map +1 -0
- package/dist/operations/campaign-get.js +23 -0
- package/dist/operations/campaign-get.js.map +1 -0
- package/dist/operations/campaign-get.test.d.ts +2 -0
- package/dist/operations/campaign-get.test.d.ts.map +1 -0
- package/dist/operations/campaign-get.test.js +99 -0
- package/dist/operations/campaign-get.test.js.map +1 -0
- package/dist/operations/campaign-list.d.ts +20 -0
- package/dist/operations/campaign-list.d.ts.map +1 -0
- package/dist/operations/campaign-list.js +23 -0
- package/dist/operations/campaign-list.js.map +1 -0
- package/dist/operations/campaign-list.test.d.ts +2 -0
- package/dist/operations/campaign-list.test.d.ts.map +1 -0
- package/dist/operations/campaign-list.test.js +106 -0
- package/dist/operations/campaign-list.test.js.map +1 -0
- package/dist/operations/campaign-move-next.d.ts +15 -0
- package/dist/operations/campaign-move-next.d.ts.map +1 -0
- package/dist/operations/campaign-move-next.js +25 -0
- package/dist/operations/campaign-move-next.js.map +1 -0
- package/dist/operations/campaign-move-next.test.d.ts +2 -0
- package/dist/operations/campaign-move-next.test.d.ts.map +1 -0
- package/dist/operations/campaign-move-next.test.js +105 -0
- package/dist/operations/campaign-move-next.test.js.map +1 -0
- package/dist/operations/campaign-remove-action.d.ts +12 -0
- package/dist/operations/campaign-remove-action.d.ts.map +1 -0
- package/dist/operations/campaign-remove-action.js +23 -0
- package/dist/operations/campaign-remove-action.js.map +1 -0
- package/dist/operations/campaign-remove-action.test.d.ts +2 -0
- package/dist/operations/campaign-remove-action.test.d.ts.map +1 -0
- package/dist/operations/campaign-remove-action.test.js +95 -0
- package/dist/operations/campaign-remove-action.test.js.map +1 -0
- package/dist/operations/campaign-reorder-actions.d.ts +13 -0
- package/dist/operations/campaign-reorder-actions.d.ts.map +1 -0
- package/dist/operations/campaign-reorder-actions.js +19 -0
- package/dist/operations/campaign-reorder-actions.js.map +1 -0
- package/dist/operations/campaign-reorder-actions.test.d.ts +2 -0
- package/dist/operations/campaign-reorder-actions.test.d.ts.map +1 -0
- package/dist/operations/campaign-reorder-actions.test.js +103 -0
- package/dist/operations/campaign-reorder-actions.test.js.map +1 -0
- package/dist/operations/campaign-retry.d.ts +13 -0
- package/dist/operations/campaign-retry.d.ts.map +1 -0
- package/dist/operations/campaign-retry.js +24 -0
- package/dist/operations/campaign-retry.js.map +1 -0
- package/dist/operations/campaign-retry.test.d.ts +2 -0
- package/dist/operations/campaign-retry.test.d.ts.map +1 -0
- package/dist/operations/campaign-retry.test.js +100 -0
- package/dist/operations/campaign-retry.test.js.map +1 -0
- package/dist/operations/campaign-start.d.ts +13 -0
- package/dist/operations/campaign-start.d.ts.map +1 -0
- package/dist/operations/campaign-start.js +24 -0
- package/dist/operations/campaign-start.js.map +1 -0
- package/dist/operations/campaign-start.test.d.ts +2 -0
- package/dist/operations/campaign-start.test.d.ts.map +1 -0
- package/dist/operations/campaign-start.test.js +105 -0
- package/dist/operations/campaign-start.test.js.map +1 -0
- package/dist/operations/campaign-statistics.d.ts +10 -0
- package/dist/operations/campaign-statistics.d.ts.map +1 -0
- package/dist/operations/campaign-statistics.js +23 -0
- package/dist/operations/campaign-statistics.js.map +1 -0
- package/dist/operations/campaign-statistics.test.d.ts +2 -0
- package/dist/operations/campaign-statistics.test.d.ts.map +1 -0
- package/dist/operations/campaign-statistics.test.js +120 -0
- package/dist/operations/campaign-statistics.test.js.map +1 -0
- package/dist/operations/campaign-status.d.ts +26 -0
- package/dist/operations/campaign-status.d.ts.map +1 -0
- package/dist/operations/campaign-status.js +32 -0
- package/dist/operations/campaign-status.js.map +1 -0
- package/dist/operations/campaign-status.test.d.ts +2 -0
- package/dist/operations/campaign-status.test.d.ts.map +1 -0
- package/dist/operations/campaign-status.test.js +142 -0
- package/dist/operations/campaign-status.test.js.map +1 -0
- package/dist/operations/campaign-stop.d.ts +11 -0
- package/dist/operations/campaign-stop.d.ts.map +1 -0
- package/dist/operations/campaign-stop.js +23 -0
- package/dist/operations/campaign-stop.js.map +1 -0
- package/dist/operations/campaign-stop.test.d.ts +2 -0
- package/dist/operations/campaign-stop.test.d.ts.map +1 -0
- package/dist/operations/campaign-stop.test.js +92 -0
- package/dist/operations/campaign-stop.test.js.map +1 -0
- package/dist/operations/campaign-update.d.ts +18 -0
- package/dist/operations/campaign-update.d.ts.map +1 -0
- package/dist/operations/campaign-update.js +21 -0
- package/dist/operations/campaign-update.js.map +1 -0
- package/dist/operations/campaign-update.test.d.ts +2 -0
- package/dist/operations/campaign-update.test.d.ts.map +1 -0
- package/dist/operations/campaign-update.test.js +105 -0
- package/dist/operations/campaign-update.test.js.map +1 -0
- package/dist/operations/check-replies.d.ts +12 -0
- package/dist/operations/check-replies.d.ts.map +1 -0
- package/dist/operations/check-replies.js +26 -0
- package/dist/operations/check-replies.js.map +1 -0
- package/dist/operations/check-replies.test.d.ts +2 -0
- package/dist/operations/check-replies.test.d.ts.map +1 -0
- package/dist/operations/check-replies.test.js +118 -0
- package/dist/operations/check-replies.test.js.map +1 -0
- package/dist/operations/import-people-from-urls.d.ts +16 -0
- package/dist/operations/import-people-from-urls.d.ts.map +1 -0
- package/dist/operations/import-people-from-urls.js +27 -0
- package/dist/operations/import-people-from-urls.js.map +1 -0
- package/dist/operations/import-people-from-urls.test.d.ts +2 -0
- package/dist/operations/import-people-from-urls.test.d.ts.map +1 -0
- package/dist/operations/import-people-from-urls.test.js +118 -0
- package/dist/operations/import-people-from-urls.test.js.map +1 -0
- package/dist/operations/index.d.ts +24 -0
- package/dist/operations/index.d.ts.map +1 -0
- package/dist/operations/index.js +30 -0
- package/dist/operations/index.js.map +1 -0
- package/dist/operations/query-messages.d.ts +23 -0
- package/dist/operations/query-messages.d.ts.map +1 -0
- package/dist/operations/query-messages.js +33 -0
- package/dist/operations/query-messages.js.map +1 -0
- package/dist/operations/query-messages.test.d.ts +2 -0
- package/dist/operations/query-messages.test.d.ts.map +1 -0
- package/dist/operations/query-messages.test.js +134 -0
- package/dist/operations/query-messages.test.js.map +1 -0
- package/dist/operations/scrape-messaging-history.d.ts +10 -0
- package/dist/operations/scrape-messaging-history.d.ts.map +1 -0
- package/dist/operations/scrape-messaging-history.js +24 -0
- package/dist/operations/scrape-messaging-history.js.map +1 -0
- package/dist/operations/scrape-messaging-history.test.d.ts +2 -0
- package/dist/operations/scrape-messaging-history.test.d.ts.map +1 -0
- package/dist/operations/scrape-messaging-history.test.js +112 -0
- package/dist/operations/scrape-messaging-history.test.js.map +1 -0
- package/dist/operations/types.d.ts +10 -0
- package/dist/operations/types.d.ts.map +1 -0
- package/dist/operations/types.js +4 -0
- package/dist/operations/types.js.map +1 -0
- package/dist/services/account-resolution.d.ts +22 -0
- package/dist/services/account-resolution.d.ts.map +1 -0
- package/dist/services/account-resolution.js +45 -0
- package/dist/services/account-resolution.js.map +1 -0
- package/dist/services/account-resolution.test.d.ts +2 -0
- package/dist/services/account-resolution.test.d.ts.map +1 -0
- package/dist/services/account-resolution.test.js +91 -0
- package/dist/services/account-resolution.test.js.map +1 -0
- package/dist/services/app.d.ts.map +1 -1
- package/dist/services/app.js +2 -0
- package/dist/services/app.js.map +1 -1
- package/dist/services/app.test.js +2 -0
- package/dist/services/app.test.js.map +1 -1
- package/dist/services/campaign.d.ts +143 -0
- package/dist/services/campaign.d.ts.map +1 -0
- package/dist/services/campaign.js +409 -0
- package/dist/services/campaign.js.map +1 -0
- package/dist/services/campaign.test.d.ts +2 -0
- package/dist/services/campaign.test.d.ts.map +1 -0
- package/dist/services/campaign.test.js +481 -0
- package/dist/services/campaign.test.js.map +1 -0
- package/dist/services/errors.d.ts +38 -0
- package/dist/services/errors.d.ts.map +1 -1
- package/dist/services/errors.js +60 -0
- package/dist/services/errors.js.map +1 -1
- package/dist/services/errors.test.js +53 -1
- package/dist/services/errors.test.js.map +1 -1
- package/dist/services/index.d.ts +5 -3
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +6 -2
- package/dist/services/index.js.map +1 -1
- package/dist/services/instance-context.d.ts +37 -0
- package/dist/services/instance-context.d.ts.map +1 -0
- package/dist/services/instance-context.js +49 -0
- package/dist/services/instance-context.js.map +1 -0
- package/dist/services/instance-context.test.d.ts +2 -0
- package/dist/services/instance-context.test.d.ts.map +1 -0
- package/dist/services/instance-context.test.js +203 -0
- package/dist/services/instance-context.test.js.map +1 -0
- package/dist/services/instance-lifecycle.d.ts.map +1 -1
- package/dist/services/instance-lifecycle.js +6 -6
- package/dist/services/instance-lifecycle.js.map +1 -1
- package/dist/services/instance-lifecycle.test.js +8 -2
- package/dist/services/instance-lifecycle.test.js.map +1 -1
- package/dist/services/instance.d.ts +40 -0
- package/dist/services/instance.d.ts.map +1 -1
- package/dist/services/instance.js +66 -9
- package/dist/services/instance.js.map +1 -1
- package/dist/services/instance.test.js +116 -6
- package/dist/services/instance.test.js.map +1 -1
- package/dist/services/launcher.d.ts +3 -0
- package/dist/services/launcher.d.ts.map +1 -1
- package/dist/services/launcher.js +25 -10
- package/dist/services/launcher.js.map +1 -1
- package/dist/services/launcher.test.js +39 -2
- package/dist/services/launcher.test.js.map +1 -1
- package/dist/services/status.d.ts +5 -1
- package/dist/services/status.d.ts.map +1 -1
- package/dist/services/status.js +24 -15
- package/dist/services/status.js.map +1 -1
- package/dist/services/status.test.js +42 -1
- package/dist/services/status.test.js.map +1 -1
- package/dist/testing/e2e-helpers.d.ts.map +1 -1
- package/dist/testing/e2e-helpers.js +7 -4
- package/dist/testing/e2e-helpers.js.map +1 -1
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +4 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/types/account.d.ts.map +1 -1
- package/dist/types/account.js +2 -0
- package/dist/types/account.js.map +1 -1
- package/dist/types/account.test.js +2 -0
- package/dist/types/account.test.js.map +1 -1
- package/dist/types/campaign.d.ts +267 -0
- package/dist/types/campaign.d.ts.map +1 -0
- package/dist/types/campaign.js +4 -0
- package/dist/types/campaign.js.map +1 -0
- package/dist/types/cdp.d.ts.map +1 -1
- package/dist/types/cdp.js +2 -0
- package/dist/types/cdp.js.map +1 -1
- package/dist/types/cdp.test.js +2 -0
- package/dist/types/cdp.test.js.map +1 -1
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/instance.d.ts.map +1 -1
- package/dist/types/instance.js +2 -6
- package/dist/types/instance.js.map +1 -1
- package/dist/types/instance.test.js +2 -0
- package/dist/types/instance.test.js.map +1 -1
- package/dist/types/messaging.d.ts +51 -0
- package/dist/types/messaging.d.ts.map +1 -0
- package/dist/types/messaging.js +4 -0
- package/dist/types/messaging.js.map +1 -0
- package/dist/types/profile.d.ts +31 -0
- package/dist/types/profile.d.ts.map +1 -1
- package/dist/types/profile.js +2 -6
- package/dist/types/profile.js.map +1 -1
- package/dist/types/profile.test.js +2 -0
- package/dist/types/profile.test.js.map +1 -1
- package/dist/utils/cdp-port.d.ts +5 -0
- package/dist/utils/cdp-port.d.ts.map +1 -0
- package/dist/utils/cdp-port.js +15 -0
- package/dist/utils/cdp-port.js.map +1 -0
- package/dist/utils/cdp-port.test.d.ts +2 -0
- package/dist/utils/cdp-port.test.d.ts.map +1 -0
- package/dist/utils/cdp-port.test.js +23 -0
- package/dist/utils/cdp-port.test.js.map +1 -0
- package/dist/utils/delay.d.ts +5 -0
- package/dist/utils/delay.d.ts.map +1 -0
- package/dist/utils/delay.js +9 -0
- package/dist/utils/delay.js.map +1 -0
- package/dist/utils/delay.test.d.ts +2 -0
- package/dist/utils/delay.test.d.ts.map +1 -0
- package/dist/utils/delay.test.js +17 -0
- package/dist/utils/delay.test.js.map +1 -0
- package/dist/utils/error-message.d.ts +5 -0
- package/dist/utils/error-message.d.ts.map +1 -0
- package/dist/utils/error-message.js +9 -0
- package/dist/utils/error-message.js.map +1 -0
- package/dist/utils/error-message.test.d.ts +2 -0
- package/dist/utils/error-message.test.d.ts.map +1 -0
- package/dist/utils/error-message.test.js +28 -0
- package/dist/utils/error-message.test.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/loopback.d.ts +10 -0
- package/dist/utils/loopback.d.ts.map +1 -0
- package/dist/utils/loopback.js +28 -0
- package/dist/utils/loopback.js.map +1 -0
- package/dist/utils/loopback.test.d.ts +2 -0
- package/dist/utils/loopback.test.d.ts.map +1 -0
- package/dist/utils/loopback.test.js +34 -0
- package/dist/utils/loopback.test.js.map +1 -0
- package/package.json +13 -8
- package/dist/services/profile.d.ts +0 -44
- package/dist/services/profile.d.ts.map +0 -1
- package/dist/services/profile.js +0 -83
- package/dist/services/profile.js.map +0 -1
- package/dist/services/profile.test.d.ts +0 -2
- package/dist/services/profile.test.d.ts.map +0 -1
- package/dist/services/profile.test.js +0 -145
- package/dist/services/profile.test.js.map +0 -1
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result of a LinkedHelper action execution.
|
|
3
|
+
*/
|
|
4
|
+
export interface ActionResult {
|
|
5
|
+
/** Whether the action completed successfully. */
|
|
6
|
+
success: boolean;
|
|
7
|
+
/** The action type that was executed. */
|
|
8
|
+
actionType: string;
|
|
9
|
+
/** Error message if the action failed. */
|
|
10
|
+
error?: string;
|
|
11
|
+
}
|
|
1
12
|
/**
|
|
2
13
|
* Controls a running LinkedHelper instance via CDP.
|
|
3
14
|
*
|
|
@@ -11,10 +22,14 @@
|
|
|
11
22
|
export declare class InstanceService {
|
|
12
23
|
private readonly port;
|
|
13
24
|
private readonly host;
|
|
25
|
+
private readonly timeout;
|
|
26
|
+
private readonly allowRemote;
|
|
14
27
|
private linkedInClient;
|
|
15
28
|
private uiClient;
|
|
16
29
|
constructor(port: number, options?: {
|
|
17
30
|
host?: string;
|
|
31
|
+
timeout?: number;
|
|
32
|
+
allowRemote?: boolean;
|
|
18
33
|
});
|
|
19
34
|
/**
|
|
20
35
|
* Connect to both instance CDP targets (LinkedIn page and UI).
|
|
@@ -33,8 +48,22 @@ export declare class InstanceService {
|
|
|
33
48
|
* Navigate the LinkedIn webview to a profile URL.
|
|
34
49
|
*
|
|
35
50
|
* Enables the Page domain, navigates, and waits for the load event.
|
|
51
|
+
*
|
|
52
|
+
* @throws {InvalidProfileUrlError} if the URL is not a valid LinkedIn profile path.
|
|
36
53
|
*/
|
|
37
54
|
navigateToProfile(url: string): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Execute a LinkedHelper action via the instance UI.
|
|
57
|
+
*
|
|
58
|
+
* This tells LinkedHelper to run the given action type with the
|
|
59
|
+
* provided configuration object. The call resolves when the action
|
|
60
|
+
* completes (which may take minutes for long-running actions like
|
|
61
|
+
* ScrapeMessagingHistory).
|
|
62
|
+
*
|
|
63
|
+
* @param actionName The action type (e.g., 'SaveCurrentProfile', 'ScrapeMessagingHistory').
|
|
64
|
+
* @param config Action configuration object (default: `{}`).
|
|
65
|
+
*/
|
|
66
|
+
executeAction(actionName: string, config?: Record<string, unknown>): Promise<ActionResult>;
|
|
38
67
|
/**
|
|
39
68
|
* Trigger the SaveCurrentProfile action via the instance UI.
|
|
40
69
|
*
|
|
@@ -42,6 +71,17 @@ export declare class InstanceService {
|
|
|
42
71
|
* displayed LinkedIn profile and save it to the database.
|
|
43
72
|
*/
|
|
44
73
|
triggerExtraction(): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Evaluate a JavaScript expression in the LinkedHelper UI context.
|
|
76
|
+
*
|
|
77
|
+
* Provides access to `window.mainWindowService.mainWindow.source.*`
|
|
78
|
+
* and other LinkedHelper internal APIs that are only available on
|
|
79
|
+
* the UI target.
|
|
80
|
+
*
|
|
81
|
+
* @param expression JavaScript source to evaluate.
|
|
82
|
+
* @param awaitPromise Whether to await a Promise result (default `true`).
|
|
83
|
+
*/
|
|
84
|
+
evaluateUI<T = unknown>(expression: string, awaitPromise?: boolean): Promise<T>;
|
|
45
85
|
/** Whether both clients are currently connected. */
|
|
46
86
|
get isConnected(): boolean;
|
|
47
87
|
private ensureLinkedInClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/services/instance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/services/instance.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD;;;;;;;;;GASG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,QAAQ,CAA0B;gBAE9B,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;IAO9F;;;;;;;OAOG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+C9B;;OAEG;IACH,UAAU,IAAI,IAAI;IAOlB;;;;;;OAMG;IACG,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnD;;;;;;;;;;OAUG;IACG,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAoBxB;;;;;OAKG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC;;;;;;;;;OASG;IACG,UAAU,CAAC,CAAC,GAAG,OAAO,EAC1B,UAAU,EAAE,MAAM,EAClB,YAAY,UAAO,GAClB,OAAO,CAAC,CAAC,CAAC;IAKb,oDAAoD;IACpD,IAAI,WAAW,IAAI,OAAO,CAOzB;IAED,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,cAAc;CAMvB"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
// Copyright (C) 2026 Oleksii PELYKH
|
|
1
3
|
import { CDPClient, discoverTargets } from "../cdp/index.js";
|
|
2
|
-
import {
|
|
4
|
+
import { delay } from "../utils/delay.js";
|
|
5
|
+
import { errorMessage } from "../utils/error-message.js";
|
|
6
|
+
import { ActionExecutionError, InstanceNotRunningError, InvalidProfileUrlError, ServiceError } from "./errors.js";
|
|
3
7
|
/** Maximum time to wait for both CDP targets to appear (ms). */
|
|
4
8
|
const CONNECT_TIMEOUT = 30_000;
|
|
5
9
|
/** Interval between target discovery polls (ms). */
|
|
@@ -17,11 +21,15 @@ const CONNECT_POLL_INTERVAL = 1_000;
|
|
|
17
21
|
export class InstanceService {
|
|
18
22
|
port;
|
|
19
23
|
host;
|
|
24
|
+
timeout;
|
|
25
|
+
allowRemote;
|
|
20
26
|
linkedInClient = null;
|
|
21
27
|
uiClient = null;
|
|
22
28
|
constructor(port, options) {
|
|
23
29
|
this.port = port;
|
|
24
30
|
this.host = options?.host ?? "127.0.0.1";
|
|
31
|
+
this.timeout = options?.timeout;
|
|
32
|
+
this.allowRemote = options?.allowRemote ?? false;
|
|
25
33
|
}
|
|
26
34
|
/**
|
|
27
35
|
* Connect to both instance CDP targets (LinkedIn page and UI).
|
|
@@ -43,7 +51,7 @@ export class InstanceService {
|
|
|
43
51
|
if (linkedInTarget && uiTarget) {
|
|
44
52
|
break;
|
|
45
53
|
}
|
|
46
|
-
await
|
|
54
|
+
await delay(CONNECT_POLL_INTERVAL);
|
|
47
55
|
}
|
|
48
56
|
if (!linkedInTarget) {
|
|
49
57
|
throw new InstanceNotRunningError(`LinkedIn webview target not found among ${String(targets.length)} CDP target(s) on port ${String(this.port)}`);
|
|
@@ -51,9 +59,14 @@ export class InstanceService {
|
|
|
51
59
|
if (!uiTarget) {
|
|
52
60
|
throw new InstanceNotRunningError(`Instance UI target not found among ${String(targets.length)} CDP target(s) on port ${String(this.port)}`);
|
|
53
61
|
}
|
|
54
|
-
const
|
|
62
|
+
const clientOptions = {
|
|
63
|
+
host: this.host,
|
|
64
|
+
...(this.timeout !== undefined && { timeout: this.timeout }),
|
|
65
|
+
allowRemote: this.allowRemote,
|
|
66
|
+
};
|
|
67
|
+
const liClient = new CDPClient(this.port, clientOptions);
|
|
55
68
|
await liClient.connect(linkedInTarget.id);
|
|
56
|
-
const ui = new CDPClient(this.port,
|
|
69
|
+
const ui = new CDPClient(this.port, clientOptions);
|
|
57
70
|
await ui.connect(uiTarget.id);
|
|
58
71
|
this.linkedInClient = liClient;
|
|
59
72
|
this.uiClient = ui;
|
|
@@ -71,13 +84,42 @@ export class InstanceService {
|
|
|
71
84
|
* Navigate the LinkedIn webview to a profile URL.
|
|
72
85
|
*
|
|
73
86
|
* Enables the Page domain, navigates, and waits for the load event.
|
|
87
|
+
*
|
|
88
|
+
* @throws {InvalidProfileUrlError} if the URL is not a valid LinkedIn profile path.
|
|
74
89
|
*/
|
|
75
90
|
async navigateToProfile(url) {
|
|
91
|
+
assertLinkedInProfileUrl(url);
|
|
76
92
|
const client = this.ensureLinkedInClient();
|
|
77
93
|
await client.send("Page.enable");
|
|
78
94
|
await client.navigate(url);
|
|
79
95
|
await client.waitForEvent("Page.loadEventFired");
|
|
80
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Execute a LinkedHelper action via the instance UI.
|
|
99
|
+
*
|
|
100
|
+
* This tells LinkedHelper to run the given action type with the
|
|
101
|
+
* provided configuration object. The call resolves when the action
|
|
102
|
+
* completes (which may take minutes for long-running actions like
|
|
103
|
+
* ScrapeMessagingHistory).
|
|
104
|
+
*
|
|
105
|
+
* @param actionName The action type (e.g., 'SaveCurrentProfile', 'ScrapeMessagingHistory').
|
|
106
|
+
* @param config Action configuration object (default: `{}`).
|
|
107
|
+
*/
|
|
108
|
+
async executeAction(actionName, config = {}) {
|
|
109
|
+
const client = this.ensureUiClient();
|
|
110
|
+
try {
|
|
111
|
+
await client.evaluate(`(async () => {
|
|
112
|
+
const mws = window.mainWindowService;
|
|
113
|
+
if (!mws) throw new Error('mainWindowService not found on window');
|
|
114
|
+
return await mws.call('executeSingleAction', ${JSON.stringify(actionName)}, ${JSON.stringify(config)});
|
|
115
|
+
})()`, true);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
const message = errorMessage(error);
|
|
119
|
+
throw new ActionExecutionError(actionName, `Action '${actionName}' failed: ${message}`, { cause: error });
|
|
120
|
+
}
|
|
121
|
+
return { success: true, actionType: actionName };
|
|
122
|
+
}
|
|
81
123
|
/**
|
|
82
124
|
* Trigger the SaveCurrentProfile action via the instance UI.
|
|
83
125
|
*
|
|
@@ -85,12 +127,21 @@ export class InstanceService {
|
|
|
85
127
|
* displayed LinkedIn profile and save it to the database.
|
|
86
128
|
*/
|
|
87
129
|
async triggerExtraction() {
|
|
130
|
+
await this.executeAction("SaveCurrentProfile");
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Evaluate a JavaScript expression in the LinkedHelper UI context.
|
|
134
|
+
*
|
|
135
|
+
* Provides access to `window.mainWindowService.mainWindow.source.*`
|
|
136
|
+
* and other LinkedHelper internal APIs that are only available on
|
|
137
|
+
* the UI target.
|
|
138
|
+
*
|
|
139
|
+
* @param expression JavaScript source to evaluate.
|
|
140
|
+
* @param awaitPromise Whether to await a Promise result (default `true`).
|
|
141
|
+
*/
|
|
142
|
+
async evaluateUI(expression, awaitPromise = true) {
|
|
88
143
|
const client = this.ensureUiClient();
|
|
89
|
-
|
|
90
|
-
const mws = window.mainWindowService;
|
|
91
|
-
if (!mws) throw new Error('mainWindowService not found on window');
|
|
92
|
-
return await mws.call('executeSingleAction', 'SaveCurrentProfile', {});
|
|
93
|
-
})()`, true);
|
|
144
|
+
return client.evaluate(expression, awaitPromise);
|
|
94
145
|
}
|
|
95
146
|
/** Whether both clients are currently connected. */
|
|
96
147
|
get isConnected() {
|
|
@@ -112,6 +163,12 @@ export class InstanceService {
|
|
|
112
163
|
return this.uiClient;
|
|
113
164
|
}
|
|
114
165
|
}
|
|
166
|
+
const LINKEDIN_PROFILE_URL_RE = /^https:\/\/www\.linkedin\.com\/in\/[^/]+\/?$/;
|
|
167
|
+
function assertLinkedInProfileUrl(url) {
|
|
168
|
+
if (!LINKEDIN_PROFILE_URL_RE.test(url)) {
|
|
169
|
+
throw new InvalidProfileUrlError(url);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
115
172
|
function isLinkedInTarget(target) {
|
|
116
173
|
return target.type === "page" && target.url.includes("linkedin.com");
|
|
117
174
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../../src/services/instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../../src/services/instance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
// Copyright (C) 2026 Oleksii PELYKH
|
|
1
3
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { ServiceError } from "./errors.js";
|
|
4
|
+
import { ActionExecutionError, InvalidProfileUrlError, ServiceError } from "./errors.js";
|
|
3
5
|
import { InstanceService } from "./instance.js";
|
|
4
6
|
/** All created client mocks, in creation order. */
|
|
5
7
|
let clientInstances = [];
|
|
@@ -157,21 +159,129 @@ describe("InstanceService", () => {
|
|
|
157
159
|
expect(uiClient.navigate).not.toHaveBeenCalled();
|
|
158
160
|
expect(uiClient.waitForEvent).not.toHaveBeenCalled();
|
|
159
161
|
});
|
|
162
|
+
it("accepts a profile URL with trailing slash", async () => {
|
|
163
|
+
mockedDiscoverTargets.mockResolvedValue([LINKEDIN_TARGET, UI_TARGET]);
|
|
164
|
+
await service.connect();
|
|
165
|
+
await service.navigateToProfile("https://www.linkedin.com/in/test-user/");
|
|
166
|
+
const liClient = getClientMocks("LI1");
|
|
167
|
+
expect(liClient.navigate).toHaveBeenCalledWith("https://www.linkedin.com/in/test-user/");
|
|
168
|
+
});
|
|
169
|
+
it("rejects file:// URLs", async () => {
|
|
170
|
+
await expect(service.navigateToProfile("file:///etc/passwd")).rejects.toThrow(InvalidProfileUrlError);
|
|
171
|
+
});
|
|
172
|
+
it("rejects javascript: URLs", async () => {
|
|
173
|
+
await expect(service.navigateToProfile("javascript:alert(1)")).rejects.toThrow(InvalidProfileUrlError);
|
|
174
|
+
});
|
|
175
|
+
it("rejects non-LinkedIn URLs", async () => {
|
|
176
|
+
await expect(service.navigateToProfile("https://evil.com/in/someone")).rejects.toThrow(InvalidProfileUrlError);
|
|
177
|
+
});
|
|
178
|
+
it("rejects LinkedIn URLs that are not profile paths", async () => {
|
|
179
|
+
await expect(service.navigateToProfile("https://www.linkedin.com/feed/")).rejects.toThrow(InvalidProfileUrlError);
|
|
180
|
+
});
|
|
181
|
+
it("rejects http:// LinkedIn profile URLs", async () => {
|
|
182
|
+
await expect(service.navigateToProfile("http://www.linkedin.com/in/test")).rejects.toThrow(InvalidProfileUrlError);
|
|
183
|
+
});
|
|
184
|
+
it("rejects profile URL with extra path segments", async () => {
|
|
185
|
+
await expect(service.navigateToProfile("https://www.linkedin.com/in/test/detail/contact-info/")).rejects.toThrow(InvalidProfileUrlError);
|
|
186
|
+
});
|
|
187
|
+
it("includes the invalid URL in the error message", async () => {
|
|
188
|
+
await expect(service.navigateToProfile("https://evil.com")).rejects.toThrow(/https:\/\/evil\.com/);
|
|
189
|
+
});
|
|
160
190
|
it("throws ServiceError when not connected", async () => {
|
|
161
191
|
await expect(service.navigateToProfile("https://www.linkedin.com/in/test")).rejects.toThrow(ServiceError);
|
|
162
192
|
});
|
|
163
193
|
});
|
|
194
|
+
describe("executeAction", () => {
|
|
195
|
+
it("evaluates the given action on the UI client only", async () => {
|
|
196
|
+
mockedDiscoverTargets.mockResolvedValue([LINKEDIN_TARGET, UI_TARGET]);
|
|
197
|
+
await service.connect();
|
|
198
|
+
await service.executeAction("ScrapeMessagingHistory");
|
|
199
|
+
const liClient = getClientMocks("LI1");
|
|
200
|
+
const uiClient = getClientMocks("UI1");
|
|
201
|
+
expect(uiClient.evaluate).toHaveBeenCalledWith(expect.stringContaining("ScrapeMessagingHistory"), true);
|
|
202
|
+
expect(liClient.evaluate).not.toHaveBeenCalled();
|
|
203
|
+
});
|
|
204
|
+
it("passes config to the action", async () => {
|
|
205
|
+
mockedDiscoverTargets.mockResolvedValue([LINKEDIN_TARGET, UI_TARGET]);
|
|
206
|
+
await service.connect();
|
|
207
|
+
await service.executeAction("SomeAction", { key: "value" });
|
|
208
|
+
const uiClient = getClientMocks("UI1");
|
|
209
|
+
const script = uiClient.evaluate.mock.calls[0]?.[0];
|
|
210
|
+
expect(script).toContain('"SomeAction"');
|
|
211
|
+
expect(script).toContain('"key"');
|
|
212
|
+
expect(script).toContain('"value"');
|
|
213
|
+
});
|
|
214
|
+
it("returns ActionResult with success on completion", async () => {
|
|
215
|
+
mockedDiscoverTargets.mockResolvedValue([LINKEDIN_TARGET, UI_TARGET]);
|
|
216
|
+
await service.connect();
|
|
217
|
+
const result = await service.executeAction("ScrapeMessagingHistory");
|
|
218
|
+
expect(result).toEqual({
|
|
219
|
+
success: true,
|
|
220
|
+
actionType: "ScrapeMessagingHistory",
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
it("throws ActionExecutionError when evaluation fails", async () => {
|
|
224
|
+
mockedDiscoverTargets.mockResolvedValue([LINKEDIN_TARGET, UI_TARGET]);
|
|
225
|
+
await service.connect();
|
|
226
|
+
const uiClient = getClientMocks("UI1");
|
|
227
|
+
const cause = new Error("mainWindowService not found on window");
|
|
228
|
+
uiClient.evaluate.mockRejectedValueOnce(cause);
|
|
229
|
+
const error = await service.executeAction("BadAction").catch((e) => e);
|
|
230
|
+
expect(error).toBeInstanceOf(ActionExecutionError);
|
|
231
|
+
expect(error).toMatchObject({
|
|
232
|
+
actionType: "BadAction",
|
|
233
|
+
message: expect.stringContaining("mainWindowService not found"),
|
|
234
|
+
});
|
|
235
|
+
expect(error.cause).toBe(cause);
|
|
236
|
+
});
|
|
237
|
+
it("throws ServiceError when not connected", async () => {
|
|
238
|
+
await expect(service.executeAction("SomeAction")).rejects.toThrow(ServiceError);
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
describe("evaluateUI", () => {
|
|
242
|
+
it("evaluates expression on the UI client only", async () => {
|
|
243
|
+
mockedDiscoverTargets.mockResolvedValue([LINKEDIN_TARGET, UI_TARGET]);
|
|
244
|
+
await service.connect();
|
|
245
|
+
const uiClient = getClientMocks("UI1");
|
|
246
|
+
uiClient.evaluate.mockResolvedValueOnce({ result: 42 });
|
|
247
|
+
const result = await service.evaluateUI("1 + 1");
|
|
248
|
+
expect(uiClient.evaluate).toHaveBeenCalledWith("1 + 1", true);
|
|
249
|
+
expect(result).toEqual({ result: 42 });
|
|
250
|
+
const liClient = getClientMocks("LI1");
|
|
251
|
+
expect(liClient.evaluate).not.toHaveBeenCalled();
|
|
252
|
+
});
|
|
253
|
+
it("defaults awaitPromise to true", async () => {
|
|
254
|
+
mockedDiscoverTargets.mockResolvedValue([LINKEDIN_TARGET, UI_TARGET]);
|
|
255
|
+
await service.connect();
|
|
256
|
+
await service.evaluateUI("expr");
|
|
257
|
+
const uiClient = getClientMocks("UI1");
|
|
258
|
+
expect(uiClient.evaluate).toHaveBeenCalledWith("expr", true);
|
|
259
|
+
});
|
|
260
|
+
it("respects awaitPromise=false", async () => {
|
|
261
|
+
mockedDiscoverTargets.mockResolvedValue([LINKEDIN_TARGET, UI_TARGET]);
|
|
262
|
+
await service.connect();
|
|
263
|
+
await service.evaluateUI("expr", false);
|
|
264
|
+
const uiClient = getClientMocks("UI1");
|
|
265
|
+
expect(uiClient.evaluate).toHaveBeenCalledWith("expr", false);
|
|
266
|
+
});
|
|
267
|
+
it("throws ServiceError when not connected", async () => {
|
|
268
|
+
await expect(service.evaluateUI("expr")).rejects.toThrow(ServiceError);
|
|
269
|
+
});
|
|
270
|
+
it("propagates errors from CDP client", async () => {
|
|
271
|
+
mockedDiscoverTargets.mockResolvedValue([LINKEDIN_TARGET, UI_TARGET]);
|
|
272
|
+
await service.connect();
|
|
273
|
+
const uiClient = getClientMocks("UI1");
|
|
274
|
+
uiClient.evaluate.mockRejectedValueOnce(new Error("CDP failure"));
|
|
275
|
+
await expect(service.evaluateUI("bad")).rejects.toThrow("CDP failure");
|
|
276
|
+
});
|
|
277
|
+
});
|
|
164
278
|
describe("triggerExtraction", () => {
|
|
165
|
-
it("
|
|
279
|
+
it("delegates to executeAction with SaveCurrentProfile", async () => {
|
|
166
280
|
mockedDiscoverTargets.mockResolvedValue([LINKEDIN_TARGET, UI_TARGET]);
|
|
167
281
|
await service.connect();
|
|
168
282
|
await service.triggerExtraction();
|
|
169
|
-
const liClient = getClientMocks("LI1");
|
|
170
283
|
const uiClient = getClientMocks("UI1");
|
|
171
|
-
// UI client should have received the extraction call
|
|
172
284
|
expect(uiClient.evaluate).toHaveBeenCalledWith(expect.stringContaining("SaveCurrentProfile"), true);
|
|
173
|
-
// LinkedIn client should NOT have received any evaluate call
|
|
174
|
-
expect(liClient.evaluate).not.toHaveBeenCalled();
|
|
175
285
|
});
|
|
176
286
|
it("throws ServiceError when not connected", async () => {
|
|
177
287
|
await expect(service.triggerExtraction()).rejects.toThrow(ServiceError);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.test.js","sourceRoot":"","sources":["../../src/services/instance.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"instance.test.js","sourceRoot":"","sources":["../../src/services/instance.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,9 +9,11 @@ import type { Account, InstanceStatus } from "../types/index.js";
|
|
|
9
9
|
export declare class LauncherService {
|
|
10
10
|
private readonly port;
|
|
11
11
|
private readonly host;
|
|
12
|
+
private readonly allowRemote;
|
|
12
13
|
private client;
|
|
13
14
|
constructor(port?: number, options?: {
|
|
14
15
|
host?: string;
|
|
16
|
+
allowRemote?: boolean;
|
|
15
17
|
});
|
|
16
18
|
/**
|
|
17
19
|
* Connect to the LinkedHelper launcher via CDP.
|
|
@@ -47,5 +49,6 @@ export declare class LauncherService {
|
|
|
47
49
|
/** Whether the service is currently connected to the launcher. */
|
|
48
50
|
get isConnected(): boolean;
|
|
49
51
|
private ensureConnected;
|
|
52
|
+
private launcherEvaluate;
|
|
50
53
|
}
|
|
51
54
|
//# sourceMappingURL=launcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/services/launcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/services/launcher.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAQ3B;;;;;;GAMG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,MAAM,CAA0B;gBAGtC,IAAI,GAAE,MAAyB,EAC/B,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;IAOpD;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAa9B;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;;;OAIG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCrD;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcpD;;OAEG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAoBnE;;;;;OAKG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IA8BxC,kEAAkE;IAClE,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,OAAO,CAAC,eAAe;YAOT,gBAAgB;CAiB/B"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
// Copyright (C) 2026 Oleksii PELYKH
|
|
3
|
+
import { CDPClient, CDPConnectionError, CDPEvaluationError } from "../cdp/index.js";
|
|
4
|
+
import { DEFAULT_CDP_PORT } from "../constants.js";
|
|
5
|
+
import { LinkedHelperNotRunningError, ServiceError, StartInstanceError, WrongPortError, } from "./errors.js";
|
|
5
6
|
/**
|
|
6
7
|
* Controls the LinkedHelper launcher process via CDP.
|
|
7
8
|
*
|
|
@@ -12,10 +13,12 @@ const DEFAULT_LAUNCHER_PORT = 9222;
|
|
|
12
13
|
export class LauncherService {
|
|
13
14
|
port;
|
|
14
15
|
host;
|
|
16
|
+
allowRemote;
|
|
15
17
|
client = null;
|
|
16
|
-
constructor(port =
|
|
18
|
+
constructor(port = DEFAULT_CDP_PORT, options) {
|
|
17
19
|
this.port = port;
|
|
18
20
|
this.host = options?.host ?? "127.0.0.1";
|
|
21
|
+
this.allowRemote = options?.allowRemote ?? false;
|
|
19
22
|
}
|
|
20
23
|
/**
|
|
21
24
|
* Connect to the LinkedHelper launcher via CDP.
|
|
@@ -23,7 +26,7 @@ export class LauncherService {
|
|
|
23
26
|
* @throws {LinkedHelperNotRunningError} if the launcher is not reachable.
|
|
24
27
|
*/
|
|
25
28
|
async connect() {
|
|
26
|
-
const client = new CDPClient(this.port, { host: this.host });
|
|
29
|
+
const client = new CDPClient(this.port, { host: this.host, allowRemote: this.allowRemote });
|
|
27
30
|
try {
|
|
28
31
|
await client.connect();
|
|
29
32
|
}
|
|
@@ -49,7 +52,7 @@ export class LauncherService {
|
|
|
49
52
|
*/
|
|
50
53
|
async startInstance(accountId) {
|
|
51
54
|
const client = this.ensureConnected();
|
|
52
|
-
const result = await
|
|
55
|
+
const result = await this.launcherEvaluate(client, `(async () => {
|
|
53
56
|
try {
|
|
54
57
|
const remote = require('@electron/remote');
|
|
55
58
|
const mainWindow = remote.getGlobal('mainWindow');
|
|
@@ -80,7 +83,7 @@ export class LauncherService {
|
|
|
80
83
|
*/
|
|
81
84
|
async stopInstance(accountId) {
|
|
82
85
|
const client = this.ensureConnected();
|
|
83
|
-
await
|
|
86
|
+
await this.launcherEvaluate(client, `(async () => {
|
|
84
87
|
const remote = require('@electron/remote');
|
|
85
88
|
const mainWindow = remote.getGlobal('mainWindow');
|
|
86
89
|
return await mainWindow.instanceManager.stopInstance(${String(accountId)});
|
|
@@ -94,7 +97,7 @@ export class LauncherService {
|
|
|
94
97
|
// NOTE: instanceManager.instances is always empty in the renderer process
|
|
95
98
|
// due to cross-process architecture (instances run as separate OS processes).
|
|
96
99
|
// This returns 'stopped' until a reliable IPC-based status query is implemented.
|
|
97
|
-
const status = await
|
|
100
|
+
const status = await this.launcherEvaluate(client, `(() => {
|
|
98
101
|
const remote = require('@electron/remote');
|
|
99
102
|
const mainWindow = remote.getGlobal('mainWindow');
|
|
100
103
|
const im = mainWindow.instanceManager;
|
|
@@ -111,7 +114,7 @@ export class LauncherService {
|
|
|
111
114
|
*/
|
|
112
115
|
async listAccounts() {
|
|
113
116
|
const client = this.ensureConnected();
|
|
114
|
-
const accounts = await
|
|
117
|
+
const accounts = await this.launcherEvaluate(client, `(() => {
|
|
115
118
|
const remote = require('@electron/remote');
|
|
116
119
|
const mainWindow = remote.getGlobal('mainWindow');
|
|
117
120
|
const store = mainWindow.electronStore;
|
|
@@ -143,5 +146,17 @@ export class LauncherService {
|
|
|
143
146
|
}
|
|
144
147
|
return this.client;
|
|
145
148
|
}
|
|
149
|
+
async launcherEvaluate(client, expression, awaitPromise = false) {
|
|
150
|
+
try {
|
|
151
|
+
return await client.evaluate(expression, awaitPromise);
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
if (error instanceof CDPEvaluationError &&
|
|
155
|
+
error.message.includes("require is not defined")) {
|
|
156
|
+
throw new WrongPortError(this.port);
|
|
157
|
+
}
|
|
158
|
+
throw error;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
146
161
|
}
|
|
147
162
|
//# sourceMappingURL=launcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/services/launcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/services/launcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
// Copyright (C) 2026 Oleksii PELYKH
|
|
1
3
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { LinkedHelperNotRunningError, ServiceError, StartInstanceError, } from "./errors.js";
|
|
4
|
+
import { LinkedHelperNotRunningError, ServiceError, StartInstanceError, WrongPortError, } from "./errors.js";
|
|
3
5
|
import { LauncherService } from "./launcher.js";
|
|
4
6
|
/**
|
|
5
7
|
* Shared CDPClient mocks — LauncherService creates exactly one CDPClient,
|
|
@@ -21,9 +23,10 @@ vi.mock("../cdp/index.js", async (importOriginal) => {
|
|
|
21
23
|
});
|
|
22
24
|
}),
|
|
23
25
|
CDPConnectionError: original.CDPConnectionError,
|
|
26
|
+
CDPEvaluationError: original.CDPEvaluationError,
|
|
24
27
|
};
|
|
25
28
|
});
|
|
26
|
-
import { CDPConnectionError } from "../cdp/index.js";
|
|
29
|
+
import { CDPConnectionError, CDPEvaluationError } from "../cdp/index.js";
|
|
27
30
|
afterEach(() => {
|
|
28
31
|
vi.restoreAllMocks();
|
|
29
32
|
});
|
|
@@ -121,6 +124,40 @@ describe("LauncherService", () => {
|
|
|
121
124
|
const accounts = await service.listAccounts();
|
|
122
125
|
expect(accounts).toEqual([]);
|
|
123
126
|
});
|
|
127
|
+
it("throws WrongPortError when require is not defined", async () => {
|
|
128
|
+
await service.connect();
|
|
129
|
+
mockEvaluate.mockRejectedValue(new CDPEvaluationError("ReferenceError: require is not defined"));
|
|
130
|
+
await expect(service.listAccounts()).rejects.toThrow(WrongPortError);
|
|
131
|
+
await expect(service.listAccounts()).rejects.toThrow(/appears to be a LinkedHelper instance/);
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
describe("wrong port detection", () => {
|
|
135
|
+
it("throws WrongPortError from startInstance", async () => {
|
|
136
|
+
await service.connect();
|
|
137
|
+
mockEvaluate.mockRejectedValue(new CDPEvaluationError("ReferenceError: require is not defined"));
|
|
138
|
+
await expect(service.startInstance(42)).rejects.toThrow(WrongPortError);
|
|
139
|
+
});
|
|
140
|
+
it("throws WrongPortError from stopInstance", async () => {
|
|
141
|
+
await service.connect();
|
|
142
|
+
mockEvaluate.mockRejectedValue(new CDPEvaluationError("ReferenceError: require is not defined"));
|
|
143
|
+
await expect(service.stopInstance(42)).rejects.toThrow(WrongPortError);
|
|
144
|
+
});
|
|
145
|
+
it("throws WrongPortError from getInstanceStatus", async () => {
|
|
146
|
+
await service.connect();
|
|
147
|
+
mockEvaluate.mockRejectedValue(new CDPEvaluationError("ReferenceError: require is not defined"));
|
|
148
|
+
await expect(service.getInstanceStatus(42)).rejects.toThrow(WrongPortError);
|
|
149
|
+
});
|
|
150
|
+
it("does not catch unrelated CDPEvaluationErrors", async () => {
|
|
151
|
+
await service.connect();
|
|
152
|
+
mockEvaluate.mockRejectedValue(new CDPEvaluationError("TypeError: Cannot read property 'get' of undefined"));
|
|
153
|
+
await expect(service.listAccounts()).rejects.toThrow(CDPEvaluationError);
|
|
154
|
+
await expect(service.listAccounts()).rejects.not.toThrow(WrongPortError);
|
|
155
|
+
});
|
|
156
|
+
it("includes the port number in the error message", async () => {
|
|
157
|
+
await service.connect();
|
|
158
|
+
mockEvaluate.mockRejectedValue(new CDPEvaluationError("ReferenceError: require is not defined"));
|
|
159
|
+
await expect(service.listAccounts()).rejects.toThrow(/9222/);
|
|
160
|
+
});
|
|
124
161
|
});
|
|
125
162
|
});
|
|
126
163
|
//# sourceMappingURL=launcher.test.js.map
|