@lhremote/core 0.8.0 → 0.9.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/cdp/app-discovery.d.ts +57 -0
- package/dist/cdp/app-discovery.d.ts.map +1 -1
- package/dist/cdp/app-discovery.js +90 -7
- package/dist/cdp/app-discovery.js.map +1 -1
- package/dist/cdp/app-discovery.test.js +180 -9
- package/dist/cdp/app-discovery.test.js.map +1 -1
- package/dist/cdp/client.d.ts +8 -1
- package/dist/cdp/client.d.ts.map +1 -1
- package/dist/cdp/client.js +8 -1
- package/dist/cdp/client.js.map +1 -1
- package/dist/cdp/discovery.d.ts.map +1 -1
- package/dist/cdp/discovery.js +5 -1
- package/dist/cdp/discovery.js.map +1 -1
- package/dist/cdp/discovery.test.js +7 -0
- package/dist/cdp/discovery.test.js.map +1 -1
- package/dist/cdp/index.d.ts +1 -1
- package/dist/cdp/index.d.ts.map +1 -1
- package/dist/cdp/index.js +1 -1
- package/dist/cdp/index.js.map +1 -1
- package/dist/cdp/instance-discovery.d.ts.map +1 -1
- package/dist/cdp/instance-discovery.js +25 -10
- package/dist/cdp/instance-discovery.js.map +1 -1
- package/dist/cdp/instance-discovery.test.js +17 -0
- package/dist/cdp/instance-discovery.test.js.map +1 -1
- package/dist/cdp/testing/launch-chromium.d.ts +1 -1
- package/dist/cdp/testing/launch-chromium.js +2 -2
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +3 -0
- package/dist/db/client.js.map +1 -1
- package/dist/db/repositories/collection-list.integration.test.js +6 -4
- package/dist/db/repositories/collection-list.integration.test.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/linkedin/dom-automation-retry.test.d.ts +2 -0
- package/dist/linkedin/dom-automation-retry.test.d.ts.map +1 -0
- package/dist/linkedin/dom-automation-retry.test.js +51 -0
- package/dist/linkedin/dom-automation-retry.test.js.map +1 -0
- package/dist/linkedin/dom-automation.d.ts +160 -3
- package/dist/linkedin/dom-automation.d.ts.map +1 -1
- package/dist/linkedin/dom-automation.js +489 -14
- package/dist/linkedin/dom-automation.js.map +1 -1
- package/dist/linkedin/humanized-mouse.d.ts +69 -0
- package/dist/linkedin/humanized-mouse.d.ts.map +1 -0
- package/dist/linkedin/humanized-mouse.js +109 -0
- package/dist/linkedin/humanized-mouse.js.map +1 -0
- package/dist/linkedin/index.d.ts +2 -1
- package/dist/linkedin/index.d.ts.map +1 -1
- package/dist/linkedin/index.js +2 -1
- package/dist/linkedin/index.js.map +1 -1
- package/dist/operations/add-people-to-collection.d.ts +1 -1
- package/dist/operations/add-people-to-collection.d.ts.map +1 -1
- package/dist/operations/add-people-to-collection.js +3 -6
- package/dist/operations/add-people-to-collection.js.map +1 -1
- package/dist/operations/build-linkedin-url.test.d.ts +2 -0
- package/dist/operations/build-linkedin-url.test.d.ts.map +1 -0
- package/dist/operations/build-linkedin-url.test.js +158 -0
- package/dist/operations/build-linkedin-url.test.js.map +1 -0
- package/dist/operations/campaign-add-action.d.ts +1 -1
- package/dist/operations/campaign-add-action.d.ts.map +1 -1
- package/dist/operations/campaign-add-action.js +3 -6
- package/dist/operations/campaign-add-action.js.map +1 -1
- package/dist/operations/campaign-create.d.ts +1 -1
- package/dist/operations/campaign-create.d.ts.map +1 -1
- package/dist/operations/campaign-create.js +3 -6
- package/dist/operations/campaign-create.js.map +1 -1
- package/dist/operations/campaign-delete.d.ts +1 -1
- package/dist/operations/campaign-delete.d.ts.map +1 -1
- package/dist/operations/campaign-delete.js +3 -6
- package/dist/operations/campaign-delete.js.map +1 -1
- package/dist/operations/campaign-erase.d.ts +1 -1
- package/dist/operations/campaign-erase.d.ts.map +1 -1
- package/dist/operations/campaign-erase.js +3 -6
- package/dist/operations/campaign-erase.js.map +1 -1
- package/dist/operations/campaign-exclude-add.d.ts +1 -1
- package/dist/operations/campaign-exclude-add.d.ts.map +1 -1
- package/dist/operations/campaign-exclude-add.js +3 -6
- package/dist/operations/campaign-exclude-add.js.map +1 -1
- package/dist/operations/campaign-exclude-list.d.ts +1 -1
- package/dist/operations/campaign-exclude-list.d.ts.map +1 -1
- package/dist/operations/campaign-exclude-list.js +3 -6
- package/dist/operations/campaign-exclude-list.js.map +1 -1
- package/dist/operations/campaign-exclude-remove.d.ts +1 -1
- package/dist/operations/campaign-exclude-remove.d.ts.map +1 -1
- package/dist/operations/campaign-exclude-remove.js +3 -6
- package/dist/operations/campaign-exclude-remove.js.map +1 -1
- package/dist/operations/campaign-export.d.ts +1 -1
- package/dist/operations/campaign-export.d.ts.map +1 -1
- package/dist/operations/campaign-export.js +3 -6
- package/dist/operations/campaign-export.js.map +1 -1
- package/dist/operations/campaign-get.d.ts +1 -1
- package/dist/operations/campaign-get.d.ts.map +1 -1
- package/dist/operations/campaign-get.js +3 -6
- package/dist/operations/campaign-get.js.map +1 -1
- package/dist/operations/campaign-list-people.d.ts +1 -1
- package/dist/operations/campaign-list-people.d.ts.map +1 -1
- package/dist/operations/campaign-list-people.js +3 -6
- package/dist/operations/campaign-list-people.js.map +1 -1
- package/dist/operations/campaign-list.d.ts +1 -1
- package/dist/operations/campaign-list.d.ts.map +1 -1
- package/dist/operations/campaign-list.js +3 -6
- package/dist/operations/campaign-list.js.map +1 -1
- package/dist/operations/campaign-move-next.d.ts +1 -1
- package/dist/operations/campaign-move-next.d.ts.map +1 -1
- package/dist/operations/campaign-move-next.js +3 -6
- package/dist/operations/campaign-move-next.js.map +1 -1
- package/dist/operations/campaign-remove-action.d.ts +1 -1
- package/dist/operations/campaign-remove-action.d.ts.map +1 -1
- package/dist/operations/campaign-remove-action.js +3 -6
- package/dist/operations/campaign-remove-action.js.map +1 -1
- package/dist/operations/campaign-remove-people.d.ts +1 -1
- package/dist/operations/campaign-remove-people.d.ts.map +1 -1
- package/dist/operations/campaign-remove-people.js +3 -6
- package/dist/operations/campaign-remove-people.js.map +1 -1
- package/dist/operations/campaign-reorder-actions.d.ts +1 -1
- package/dist/operations/campaign-reorder-actions.d.ts.map +1 -1
- package/dist/operations/campaign-reorder-actions.js +3 -6
- package/dist/operations/campaign-reorder-actions.js.map +1 -1
- package/dist/operations/campaign-retry.d.ts +1 -1
- package/dist/operations/campaign-retry.d.ts.map +1 -1
- package/dist/operations/campaign-retry.js +3 -6
- package/dist/operations/campaign-retry.js.map +1 -1
- package/dist/operations/campaign-start.d.ts +1 -1
- package/dist/operations/campaign-start.d.ts.map +1 -1
- package/dist/operations/campaign-start.js +3 -6
- package/dist/operations/campaign-start.js.map +1 -1
- package/dist/operations/campaign-statistics.d.ts +1 -1
- package/dist/operations/campaign-statistics.d.ts.map +1 -1
- package/dist/operations/campaign-statistics.js +3 -6
- package/dist/operations/campaign-statistics.js.map +1 -1
- package/dist/operations/campaign-status.d.ts +1 -1
- package/dist/operations/campaign-status.d.ts.map +1 -1
- package/dist/operations/campaign-status.js +3 -6
- package/dist/operations/campaign-status.js.map +1 -1
- package/dist/operations/campaign-stop.d.ts +1 -1
- package/dist/operations/campaign-stop.d.ts.map +1 -1
- package/dist/operations/campaign-stop.js +3 -6
- package/dist/operations/campaign-stop.js.map +1 -1
- package/dist/operations/campaign-update-action.d.ts +1 -1
- package/dist/operations/campaign-update-action.d.ts.map +1 -1
- package/dist/operations/campaign-update-action.js +3 -6
- package/dist/operations/campaign-update-action.js.map +1 -1
- package/dist/operations/campaign-update.d.ts +1 -1
- package/dist/operations/campaign-update.d.ts.map +1 -1
- package/dist/operations/campaign-update.js +3 -6
- package/dist/operations/campaign-update.js.map +1 -1
- package/dist/operations/check-replies.d.ts +3 -1
- package/dist/operations/check-replies.d.ts.map +1 -1
- package/dist/operations/check-replies.js +132 -17
- package/dist/operations/check-replies.js.map +1 -1
- package/dist/operations/check-replies.test.js +177 -17
- package/dist/operations/check-replies.test.js.map +1 -1
- package/dist/operations/collect-people.d.ts +1 -1
- package/dist/operations/collect-people.d.ts.map +1 -1
- package/dist/operations/collect-people.js +3 -6
- package/dist/operations/collect-people.js.map +1 -1
- package/dist/operations/comment-on-post.d.ts +4 -1
- package/dist/operations/comment-on-post.d.ts.map +1 -1
- package/dist/operations/comment-on-post.js +15 -19
- package/dist/operations/comment-on-post.js.map +1 -1
- package/dist/operations/comment-on-post.test.js +8 -6
- package/dist/operations/comment-on-post.test.js.map +1 -1
- package/dist/operations/create-collection.d.ts +1 -1
- package/dist/operations/create-collection.d.ts.map +1 -1
- package/dist/operations/create-collection.js +3 -6
- package/dist/operations/create-collection.js.map +1 -1
- package/dist/operations/delete-collection.d.ts +1 -1
- package/dist/operations/delete-collection.d.ts.map +1 -1
- package/dist/operations/delete-collection.js +3 -6
- package/dist/operations/delete-collection.js.map +1 -1
- package/dist/operations/dismiss-errors.d.ts +7 -4
- package/dist/operations/dismiss-errors.d.ts.map +1 -1
- package/dist/operations/dismiss-errors.js +52 -33
- package/dist/operations/dismiss-errors.js.map +1 -1
- package/dist/operations/dismiss-errors.test.js +53 -6
- package/dist/operations/dismiss-errors.test.js.map +1 -1
- package/dist/operations/endorse-skills.test.d.ts +2 -0
- package/dist/operations/endorse-skills.test.d.ts.map +1 -0
- package/dist/operations/endorse-skills.test.js +70 -0
- package/dist/operations/endorse-skills.test.js.map +1 -0
- package/dist/operations/enrich-profile.test.d.ts +2 -0
- package/dist/operations/enrich-profile.test.d.ts.map +1 -0
- package/dist/operations/enrich-profile.test.js +73 -0
- package/dist/operations/enrich-profile.test.js.map +1 -0
- package/dist/operations/ephemeral-action.d.ts +1 -1
- package/dist/operations/ephemeral-action.d.ts.map +1 -1
- package/dist/operations/ephemeral-action.js +3 -6
- package/dist/operations/ephemeral-action.js.map +1 -1
- package/dist/operations/ephemeral-action.test.d.ts +2 -0
- package/dist/operations/ephemeral-action.test.d.ts.map +1 -0
- package/dist/operations/ephemeral-action.test.js +140 -0
- package/dist/operations/ephemeral-action.test.js.map +1 -0
- package/dist/operations/follow-person.test.d.ts +2 -0
- package/dist/operations/follow-person.test.d.ts.map +1 -0
- package/dist/operations/follow-person.test.js +57 -0
- package/dist/operations/follow-person.test.js.map +1 -0
- package/dist/operations/get-action-budget.d.ts +1 -1
- package/dist/operations/get-action-budget.d.ts.map +1 -1
- package/dist/operations/get-action-budget.js +3 -6
- package/dist/operations/get-action-budget.js.map +1 -1
- package/dist/operations/get-errors.d.ts +5 -1
- package/dist/operations/get-errors.d.ts.map +1 -1
- package/dist/operations/get-errors.js +55 -33
- package/dist/operations/get-errors.js.map +1 -1
- package/dist/operations/get-errors.test.js +54 -55
- package/dist/operations/get-errors.test.js.map +1 -1
- package/dist/operations/get-feed.d.ts +83 -4
- package/dist/operations/get-feed.d.ts.map +1 -1
- package/dist/operations/get-feed.js +400 -153
- package/dist/operations/get-feed.js.map +1 -1
- package/dist/operations/get-feed.test.js +416 -190
- package/dist/operations/get-feed.test.js.map +1 -1
- package/dist/operations/get-post-engagers.d.ts +6 -3
- package/dist/operations/get-post-engagers.d.ts.map +1 -1
- package/dist/operations/get-post-engagers.js +278 -78
- package/dist/operations/get-post-engagers.js.map +1 -1
- package/dist/operations/get-post-engagers.test.js +292 -14
- package/dist/operations/get-post-engagers.test.js.map +1 -1
- package/dist/operations/get-post-stats.d.ts +8 -3
- package/dist/operations/get-post-stats.d.ts.map +1 -1
- package/dist/operations/get-post-stats.js +101 -37
- package/dist/operations/get-post-stats.js.map +1 -1
- package/dist/operations/get-post-stats.test.js +137 -2
- package/dist/operations/get-post-stats.test.js.map +1 -1
- package/dist/operations/get-post.d.ts +9 -150
- package/dist/operations/get-post.d.ts.map +1 -1
- package/dist/operations/get-post.js +356 -210
- package/dist/operations/get-post.js.map +1 -1
- package/dist/operations/get-post.test.js +210 -387
- package/dist/operations/get-post.test.js.map +1 -1
- package/dist/operations/get-profile-activity.d.ts +13 -92
- package/dist/operations/get-profile-activity.d.ts.map +1 -1
- package/dist/operations/get-profile-activity.js +305 -105
- package/dist/operations/get-profile-activity.js.map +1 -1
- package/dist/operations/get-profile-activity.test.js +277 -158
- package/dist/operations/get-profile-activity.test.js.map +1 -1
- package/dist/operations/get-throttle-status.d.ts +1 -1
- package/dist/operations/get-throttle-status.d.ts.map +1 -1
- package/dist/operations/get-throttle-status.js +4 -10
- package/dist/operations/get-throttle-status.js.map +1 -1
- package/dist/operations/import-people-from-collection.d.ts +1 -1
- package/dist/operations/import-people-from-collection.d.ts.map +1 -1
- package/dist/operations/import-people-from-collection.js +3 -6
- package/dist/operations/import-people-from-collection.js.map +1 -1
- package/dist/operations/import-people-from-urls.d.ts +1 -1
- package/dist/operations/import-people-from-urls.d.ts.map +1 -1
- package/dist/operations/import-people-from-urls.js +3 -6
- package/dist/operations/import-people-from-urls.js.map +1 -1
- package/dist/operations/index.d.ts +2 -2
- package/dist/operations/index.d.ts.map +1 -1
- package/dist/operations/index.js +2 -1
- package/dist/operations/index.js.map +1 -1
- package/dist/operations/like-person-posts.test.d.ts +2 -0
- package/dist/operations/like-person-posts.test.d.ts.map +1 -0
- package/dist/operations/like-person-posts.test.js +103 -0
- package/dist/operations/like-person-posts.test.js.map +1 -0
- package/dist/operations/list-collections.d.ts +1 -1
- package/dist/operations/list-collections.d.ts.map +1 -1
- package/dist/operations/list-collections.js +3 -6
- package/dist/operations/list-collections.js.map +1 -1
- package/dist/operations/message-person.test.d.ts +2 -0
- package/dist/operations/message-person.test.d.ts.map +1 -0
- package/dist/operations/message-person.test.js +108 -0
- package/dist/operations/message-person.test.js.map +1 -0
- package/dist/operations/navigate-away.d.ts +14 -0
- package/dist/operations/navigate-away.d.ts.map +1 -0
- package/dist/operations/navigate-away.js +24 -0
- package/dist/operations/navigate-away.js.map +1 -0
- package/dist/operations/navigate-away.test.d.ts +2 -0
- package/dist/operations/navigate-away.test.d.ts.map +1 -0
- package/dist/operations/navigate-away.test.js +51 -0
- package/dist/operations/navigate-away.test.js.map +1 -0
- package/dist/operations/query-messages.d.ts +1 -1
- package/dist/operations/query-messages.d.ts.map +1 -1
- package/dist/operations/query-messages.js +3 -6
- package/dist/operations/query-messages.js.map +1 -1
- package/dist/operations/react-to-post.d.ts +3 -0
- package/dist/operations/react-to-post.d.ts.map +1 -1
- package/dist/operations/react-to-post.js +13 -15
- package/dist/operations/react-to-post.js.map +1 -1
- package/dist/operations/react-to-post.test.js +8 -5
- package/dist/operations/react-to-post.test.js.map +1 -1
- package/dist/operations/remove-connection.test.d.ts +2 -0
- package/dist/operations/remove-connection.test.d.ts.map +1 -0
- package/dist/operations/remove-connection.test.js +45 -0
- package/dist/operations/remove-connection.test.js.map +1 -0
- package/dist/operations/remove-people-from-collection.d.ts +1 -1
- package/dist/operations/remove-people-from-collection.d.ts.map +1 -1
- package/dist/operations/remove-people-from-collection.js +3 -6
- package/dist/operations/remove-people-from-collection.js.map +1 -1
- package/dist/operations/resolve-linkedin-entity.d.ts.map +1 -1
- package/dist/operations/resolve-linkedin-entity.js +2 -2
- package/dist/operations/resolve-linkedin-entity.js.map +1 -1
- package/dist/operations/resolve-linkedin-entity.test.d.ts +2 -0
- package/dist/operations/resolve-linkedin-entity.test.d.ts.map +1 -0
- package/dist/operations/resolve-linkedin-entity.test.js +343 -0
- package/dist/operations/resolve-linkedin-entity.test.js.map +1 -0
- package/dist/operations/scrape-messaging-history.d.ts +2 -1
- package/dist/operations/scrape-messaging-history.d.ts.map +1 -1
- package/dist/operations/scrape-messaging-history.js +121 -18
- package/dist/operations/scrape-messaging-history.js.map +1 -1
- package/dist/operations/scrape-messaging-history.test.js +134 -12
- package/dist/operations/scrape-messaging-history.test.js.map +1 -1
- package/dist/operations/search-posts.d.ts +20 -112
- package/dist/operations/search-posts.d.ts.map +1 -1
- package/dist/operations/search-posts.js +369 -170
- package/dist/operations/search-posts.js.map +1 -1
- package/dist/operations/search-posts.test.js +273 -234
- package/dist/operations/search-posts.test.js.map +1 -1
- package/dist/operations/send-inmail.test.d.ts +2 -0
- package/dist/operations/send-inmail.test.d.ts.map +1 -0
- package/dist/operations/send-inmail.test.js +108 -0
- package/dist/operations/send-inmail.test.js.map +1 -0
- package/dist/operations/send-invite.test.d.ts +2 -0
- package/dist/operations/send-invite.test.d.ts.map +1 -0
- package/dist/operations/send-invite.test.js +59 -0
- package/dist/operations/send-invite.test.js.map +1 -0
- package/dist/operations/types.d.ts +24 -1
- package/dist/operations/types.d.ts.map +1 -1
- package/dist/operations/types.js +13 -1
- package/dist/operations/types.js.map +1 -1
- package/dist/operations/visit-profile.d.ts +1 -1
- package/dist/operations/visit-profile.d.ts.map +1 -1
- package/dist/operations/visit-profile.js +3 -6
- package/dist/operations/visit-profile.js.map +1 -1
- package/dist/services/account-resolution.d.ts +9 -4
- package/dist/services/account-resolution.d.ts.map +1 -1
- package/dist/services/account-resolution.js +60 -5
- package/dist/services/account-resolution.js.map +1 -1
- package/dist/services/app.d.ts +6 -2
- package/dist/services/app.d.ts.map +1 -1
- package/dist/services/app.js +18 -6
- package/dist/services/app.js.map +1 -1
- package/dist/services/app.test.js +41 -7
- package/dist/services/app.test.js.map +1 -1
- package/dist/services/campaign.d.ts +34 -2
- package/dist/services/campaign.d.ts.map +1 -1
- package/dist/services/campaign.js +108 -1
- package/dist/services/campaign.js.map +1 -1
- package/dist/services/errors.d.ts +2 -1
- package/dist/services/errors.d.ts.map +1 -1
- package/dist/services/errors.js +6 -3
- package/dist/services/errors.js.map +1 -1
- package/dist/services/index.d.ts +0 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +0 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/instance-context.d.ts +5 -1
- package/dist/services/instance-context.d.ts.map +1 -1
- package/dist/services/instance-context.js +87 -28
- package/dist/services/instance-context.js.map +1 -1
- package/dist/services/instance-context.test.js +5 -1
- package/dist/services/instance-context.test.js.map +1 -1
- package/dist/services/instance-lifecycle.d.ts.map +1 -1
- package/dist/services/instance-lifecycle.js +32 -1
- package/dist/services/instance-lifecycle.js.map +1 -1
- package/dist/services/instance-lifecycle.test.js +52 -1
- package/dist/services/instance-lifecycle.test.js.map +1 -1
- package/dist/services/instance.d.ts +19 -7
- package/dist/services/instance.d.ts.map +1 -1
- package/dist/services/instance.js +56 -17
- package/dist/services/instance.js.map +1 -1
- package/dist/services/instance.test.js +65 -0
- package/dist/services/instance.test.js.map +1 -1
- package/dist/services/launcher.d.ts +47 -3
- package/dist/services/launcher.d.ts.map +1 -1
- package/dist/services/launcher.js +205 -33
- package/dist/services/launcher.js.map +1 -1
- package/dist/services/launcher.test.js +133 -6
- package/dist/services/launcher.test.js.map +1 -1
- package/dist/services/status.d.ts +6 -2
- package/dist/services/status.d.ts.map +1 -1
- package/dist/services/status.js +67 -34
- package/dist/services/status.js.map +1 -1
- package/dist/services/status.test.js +9 -2
- package/dist/services/status.test.js.map +1 -1
- package/dist/testing/e2e-helpers.d.ts +23 -1
- package/dist/testing/e2e-helpers.d.ts.map +1 -1
- package/dist/testing/e2e-helpers.js +110 -5
- package/dist/testing/e2e-helpers.js.map +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/types/account.d.ts +1 -1
- package/dist/types/feed.d.ts +1 -3
- package/dist/types/feed.d.ts.map +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/cdp-port.d.ts.map +1 -1
- package/dist/utils/cdp-port.js +3 -1
- package/dist/utils/cdp-port.js.map +1 -1
- package/dist/utils/cdp-port.test.js +1 -1
- package/dist/utils/cdp-port.test.js.map +1 -1
- package/dist/utils/delay.d.ts +79 -0
- package/dist/utils/delay.d.ts.map +1 -1
- package/dist/utils/delay.js +118 -0
- package/dist/utils/delay.js.map +1 -1
- package/dist/utils/delay.test.js +111 -1
- package/dist/utils/delay.test.js.map +1 -1
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/session-pacer.d.ts +27 -0
- package/dist/utils/session-pacer.d.ts.map +1 -0
- package/dist/utils/session-pacer.js +55 -0
- package/dist/utils/session-pacer.js.map +1 -0
- package/dist/utils/session-pacer.test.d.ts +2 -0
- package/dist/utils/session-pacer.test.d.ts.map +1 -0
- package/dist/utils/session-pacer.test.js +111 -0
- package/dist/utils/session-pacer.test.js.map +1 -0
- package/package.json +1 -1
- package/dist/linkedin/__tests__/selectors.integration.test.d.ts +0 -2
- package/dist/linkedin/__tests__/selectors.integration.test.d.ts.map +0 -1
- package/dist/linkedin/__tests__/selectors.integration.test.js +0 -258
- package/dist/linkedin/__tests__/selectors.integration.test.js.map +0 -1
- package/dist/types/search-posts.d.ts +0 -22
- package/dist/types/search-posts.d.ts.map +0 -1
- package/dist/types/search-posts.js +0 -4
- package/dist/types/search-posts.js.map +0 -1
- package/dist/voyager/index.d.ts +0 -2
- package/dist/voyager/index.d.ts.map +0 -1
- package/dist/voyager/index.js +0 -4
- package/dist/voyager/index.js.map +0 -1
- package/dist/voyager/interceptor.d.ts +0 -100
- package/dist/voyager/interceptor.d.ts.map +0 -1
- package/dist/voyager/interceptor.integration.test.d.ts +0 -2
- package/dist/voyager/interceptor.integration.test.d.ts.map +0 -1
- package/dist/voyager/interceptor.integration.test.js +0 -89
- package/dist/voyager/interceptor.integration.test.js.map +0 -1
- package/dist/voyager/interceptor.js +0 -235
- package/dist/voyager/interceptor.js.map +0 -1
- package/dist/voyager/interceptor.test.d.ts +0 -2
- package/dist/voyager/interceptor.test.d.ts.map +0 -1
- package/dist/voyager/interceptor.test.js +0 -372
- package/dist/voyager/interceptor.test.js.map +0 -1
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
-
// Copyright (C) 2026 Oleksii PELYKH
|
|
3
|
-
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
4
|
-
import { CDPClient } from "../../cdp/client.js";
|
|
5
|
-
import { discoverTargets } from "../../cdp/discovery.js";
|
|
6
|
-
import { discoverInstancePort, killInstanceProcesses, } from "../../cdp/instance-discovery.js";
|
|
7
|
-
import { startInstanceWithRecovery, waitForInstanceShutdown, } from "../../services/instance-lifecycle.js";
|
|
8
|
-
import { LauncherService } from "../../services/launcher.js";
|
|
9
|
-
import { describeE2E, launchApp, quitApp, retryAsync, } from "../../testing/e2e-helpers.js";
|
|
10
|
-
import { delay } from "../../utils/delay.js";
|
|
11
|
-
import { COMMENT_INPUT, COMMENT_SUBMIT_BUTTON, FEED_POST_CONTAINER, PAGINATION_TRIGGER, POST_AUTHOR_INFO, POST_AUTHOR_NAME, POST_TEXT_CONTENT, REACTION_CELEBRATE, REACTION_FUNNY, REACTION_INSIGHTFUL, REACTION_LIKE, REACTION_LOVE, REACTION_SUPPORT, REACTION_TRIGGER, REACTIONS_MENU, SCROLL_CONTAINER, SELECTORS, } from "../selectors.js";
|
|
12
|
-
/**
|
|
13
|
-
* Query the number of elements matching a CSS selector in the LinkedIn
|
|
14
|
-
* WebView via CDP `Runtime.evaluate`.
|
|
15
|
-
*/
|
|
16
|
-
async function queryCount(client, selector) {
|
|
17
|
-
return client.evaluate(`document.querySelectorAll(${JSON.stringify(selector)}).length`);
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Dispatch a `mouseenter` + `mouseover` sequence on the first element
|
|
21
|
-
* matching `selector` to trigger hover-dependent UI (e.g. reactions menu).
|
|
22
|
-
*/
|
|
23
|
-
async function hoverFirst(client, selector) {
|
|
24
|
-
await client.evaluate(`(() => {
|
|
25
|
-
const el = document.querySelector(${JSON.stringify(selector)});
|
|
26
|
-
if (!el) return;
|
|
27
|
-
el.dispatchEvent(new MouseEvent('mouseenter', { bubbles: true }));
|
|
28
|
-
el.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
|
29
|
-
})()`);
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Click the first element matching `selector`.
|
|
33
|
-
*/
|
|
34
|
-
async function clickFirst(client, selector) {
|
|
35
|
-
await client.evaluate(`(() => {
|
|
36
|
-
const el = document.querySelector(${JSON.stringify(selector)});
|
|
37
|
-
if (el) el.click();
|
|
38
|
-
})()`);
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Navigate the CDP client to a URL and wait for the page load event.
|
|
42
|
-
*/
|
|
43
|
-
async function navigateAndWait(client, url) {
|
|
44
|
-
await client.send("Page.enable");
|
|
45
|
-
try {
|
|
46
|
-
const loadPromise = client.waitForEvent("Page.loadEventFired", 30_000);
|
|
47
|
-
await client.navigate(url);
|
|
48
|
-
await loadPromise;
|
|
49
|
-
}
|
|
50
|
-
finally {
|
|
51
|
-
await client.send("Page.disable").catch(() => { });
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
/** LinkedIn feed page URL. */
|
|
55
|
-
const FEED_URL = "https://www.linkedin.com/feed/";
|
|
56
|
-
/** Selector for the "Comment" button in the social action bar. */
|
|
57
|
-
const COMMENT_BUTTON = 'button[aria-label*="Comment" i]';
|
|
58
|
-
describeE2E("LinkedIn selectors registry", () => {
|
|
59
|
-
let app;
|
|
60
|
-
let launcherPort;
|
|
61
|
-
let accountId;
|
|
62
|
-
let linkedInClient;
|
|
63
|
-
beforeAll(async () => {
|
|
64
|
-
// 1. Launch LinkedHelper
|
|
65
|
-
const launched = await launchApp();
|
|
66
|
-
app = launched.app;
|
|
67
|
-
launcherPort = launched.port;
|
|
68
|
-
// 2. Start an account instance
|
|
69
|
-
const launcher = new LauncherService(launcherPort);
|
|
70
|
-
await retryAsync(() => launcher.connect(), { retries: 3, delay: 1_000 });
|
|
71
|
-
const accounts = await launcher.listAccounts();
|
|
72
|
-
expect(accounts.length, "No accounts configured in LinkedHelper").toBeGreaterThan(0);
|
|
73
|
-
accountId = accounts[0].id;
|
|
74
|
-
await startInstanceWithRecovery(launcher, accountId, launcherPort);
|
|
75
|
-
launcher.disconnect();
|
|
76
|
-
// 3. Discover the instance's CDP port
|
|
77
|
-
const instancePort = await discoverInstancePort(launcherPort);
|
|
78
|
-
if (instancePort === null) {
|
|
79
|
-
throw new Error("Instance CDP port not discovered");
|
|
80
|
-
}
|
|
81
|
-
// 4. Connect directly to the LinkedIn WebView target
|
|
82
|
-
const liTarget = await retryAsync(async () => {
|
|
83
|
-
const t = await discoverTargets(instancePort);
|
|
84
|
-
const li = t.find((tgt) => tgt.type === "page" && tgt.url.includes("linkedin.com"));
|
|
85
|
-
if (!li)
|
|
86
|
-
throw new Error("LinkedIn target not found yet");
|
|
87
|
-
return li;
|
|
88
|
-
}, { retries: 10, delay: 2_000 });
|
|
89
|
-
linkedInClient = new CDPClient(instancePort);
|
|
90
|
-
await linkedInClient.connect(liTarget.id);
|
|
91
|
-
// 5. Navigate to the feed page and wait for it to load
|
|
92
|
-
await navigateAndWait(linkedInClient, FEED_URL);
|
|
93
|
-
// Give the SPA a moment to render dynamic content
|
|
94
|
-
await delay(3_000);
|
|
95
|
-
}, 180_000);
|
|
96
|
-
afterAll(async () => {
|
|
97
|
-
linkedInClient?.disconnect();
|
|
98
|
-
if (accountId !== undefined) {
|
|
99
|
-
const launcher = new LauncherService(launcherPort);
|
|
100
|
-
try {
|
|
101
|
-
await launcher.connect();
|
|
102
|
-
try {
|
|
103
|
-
await launcher.stopInstance(accountId);
|
|
104
|
-
await waitForInstanceShutdown(launcherPort);
|
|
105
|
-
}
|
|
106
|
-
catch {
|
|
107
|
-
await killInstanceProcesses(launcherPort);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
catch {
|
|
111
|
-
// Best-effort cleanup
|
|
112
|
-
}
|
|
113
|
-
finally {
|
|
114
|
-
launcher.disconnect();
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
await quitApp(app);
|
|
118
|
-
}, 60_000);
|
|
119
|
-
// ── Module export sanity checks ─────────────────────────────────
|
|
120
|
-
describe("module exports", () => {
|
|
121
|
-
it("SELECTORS object contains all expected keys", () => {
|
|
122
|
-
const expectedKeys = [
|
|
123
|
-
"FEED_POST_CONTAINER",
|
|
124
|
-
"POST_TEXT_CONTENT",
|
|
125
|
-
"POST_AUTHOR_NAME",
|
|
126
|
-
"POST_AUTHOR_INFO",
|
|
127
|
-
"COMMENT_INPUT",
|
|
128
|
-
"REACTION_TRIGGER",
|
|
129
|
-
"REACTIONS_MENU",
|
|
130
|
-
"REACTION_LIKE",
|
|
131
|
-
"REACTION_CELEBRATE",
|
|
132
|
-
"REACTION_SUPPORT",
|
|
133
|
-
"REACTION_LOVE",
|
|
134
|
-
"REACTION_INSIGHTFUL",
|
|
135
|
-
"REACTION_FUNNY",
|
|
136
|
-
"COMMENT_SUBMIT_BUTTON",
|
|
137
|
-
"SCROLL_CONTAINER",
|
|
138
|
-
"PAGINATION_TRIGGER",
|
|
139
|
-
];
|
|
140
|
-
for (const key of expectedKeys) {
|
|
141
|
-
expect(SELECTORS).toHaveProperty(key);
|
|
142
|
-
expect(typeof SELECTORS[key], `${key} should be a non-empty string`).toBe("string");
|
|
143
|
-
expect(SELECTORS[key].length, `${key} should not be empty`).toBeGreaterThan(0);
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
// ── Feed page selectors ─────────────────────────────────────────
|
|
148
|
-
describe("feed page selectors", () => {
|
|
149
|
-
it("FEED_POST_CONTAINER matches at least one element", async () => {
|
|
150
|
-
const count = await queryCount(linkedInClient, FEED_POST_CONTAINER);
|
|
151
|
-
expect(count, `Selector "${FEED_POST_CONTAINER}" matched 0 elements`).toBeGreaterThan(0);
|
|
152
|
-
});
|
|
153
|
-
it("POST_TEXT_CONTENT matches at least one element", async () => {
|
|
154
|
-
const count = await queryCount(linkedInClient, POST_TEXT_CONTENT);
|
|
155
|
-
expect(count, `Selector "${POST_TEXT_CONTENT}" matched 0 elements`).toBeGreaterThan(0);
|
|
156
|
-
});
|
|
157
|
-
it("POST_AUTHOR_NAME matches at least one element", async () => {
|
|
158
|
-
const count = await queryCount(linkedInClient, POST_AUTHOR_NAME);
|
|
159
|
-
expect(count, `Selector "${POST_AUTHOR_NAME}" matched 0 elements`).toBeGreaterThan(0);
|
|
160
|
-
});
|
|
161
|
-
it("POST_AUTHOR_INFO matches at least one element", async () => {
|
|
162
|
-
const count = await queryCount(linkedInClient, POST_AUTHOR_INFO);
|
|
163
|
-
expect(count, `Selector "${POST_AUTHOR_INFO}" matched 0 elements`).toBeGreaterThan(0);
|
|
164
|
-
});
|
|
165
|
-
it("REACTION_TRIGGER matches at least one element", async () => {
|
|
166
|
-
const count = await queryCount(linkedInClient, REACTION_TRIGGER);
|
|
167
|
-
expect(count, `Selector "${REACTION_TRIGGER}" matched 0 elements`).toBeGreaterThan(0);
|
|
168
|
-
});
|
|
169
|
-
it("SCROLL_CONTAINER matches at least one element", async () => {
|
|
170
|
-
const count = await queryCount(linkedInClient, SCROLL_CONTAINER);
|
|
171
|
-
expect(count, `Selector "${SCROLL_CONTAINER}" matched 0 elements`).toBeGreaterThan(0);
|
|
172
|
-
});
|
|
173
|
-
});
|
|
174
|
-
// ── Reactions menu selectors (hover-triggered) ──────────────────
|
|
175
|
-
describe("reactions menu selectors", () => {
|
|
176
|
-
beforeAll(async () => {
|
|
177
|
-
// Hover over the first reaction trigger to reveal the reactions menu
|
|
178
|
-
await hoverFirst(linkedInClient, REACTION_TRIGGER);
|
|
179
|
-
// Wait for the popup to render
|
|
180
|
-
await delay(1_500);
|
|
181
|
-
});
|
|
182
|
-
it("REACTIONS_MENU matches at least one element", async () => {
|
|
183
|
-
const count = await queryCount(linkedInClient, REACTIONS_MENU);
|
|
184
|
-
expect(count, `Selector "${REACTIONS_MENU}" matched 0 elements`).toBeGreaterThan(0);
|
|
185
|
-
});
|
|
186
|
-
it("REACTION_LIKE matches at least one element", async () => {
|
|
187
|
-
const count = await queryCount(linkedInClient, REACTION_LIKE);
|
|
188
|
-
expect(count, `Selector "${REACTION_LIKE}" matched 0 elements`).toBeGreaterThan(0);
|
|
189
|
-
});
|
|
190
|
-
it("REACTION_CELEBRATE matches at least one element", async () => {
|
|
191
|
-
const count = await queryCount(linkedInClient, REACTION_CELEBRATE);
|
|
192
|
-
expect(count, `Selector "${REACTION_CELEBRATE}" matched 0 elements`).toBeGreaterThan(0);
|
|
193
|
-
});
|
|
194
|
-
it("REACTION_SUPPORT matches at least one element", async () => {
|
|
195
|
-
const count = await queryCount(linkedInClient, REACTION_SUPPORT);
|
|
196
|
-
expect(count, `Selector "${REACTION_SUPPORT}" matched 0 elements`).toBeGreaterThan(0);
|
|
197
|
-
});
|
|
198
|
-
it("REACTION_LOVE matches at least one element", async () => {
|
|
199
|
-
const count = await queryCount(linkedInClient, REACTION_LOVE);
|
|
200
|
-
expect(count, `Selector "${REACTION_LOVE}" matched 0 elements`).toBeGreaterThan(0);
|
|
201
|
-
});
|
|
202
|
-
it("REACTION_INSIGHTFUL matches at least one element", async () => {
|
|
203
|
-
const count = await queryCount(linkedInClient, REACTION_INSIGHTFUL);
|
|
204
|
-
expect(count, `Selector "${REACTION_INSIGHTFUL}" matched 0 elements`).toBeGreaterThan(0);
|
|
205
|
-
});
|
|
206
|
-
it("REACTION_FUNNY matches at least one element", async () => {
|
|
207
|
-
const count = await queryCount(linkedInClient, REACTION_FUNNY);
|
|
208
|
-
expect(count, `Selector "${REACTION_FUNNY}" matched 0 elements`).toBeGreaterThan(0);
|
|
209
|
-
});
|
|
210
|
-
});
|
|
211
|
-
// ── Comment selectors (click-triggered) ─────────────────────────
|
|
212
|
-
describe("comment selectors", () => {
|
|
213
|
-
beforeAll(async () => {
|
|
214
|
-
// Dismiss the reactions menu by clicking elsewhere
|
|
215
|
-
await clickFirst(linkedInClient, "body");
|
|
216
|
-
await delay(500);
|
|
217
|
-
// Click the "Comment" button on the first post to expand the section
|
|
218
|
-
await clickFirst(linkedInClient, COMMENT_BUTTON);
|
|
219
|
-
await delay(1_500);
|
|
220
|
-
});
|
|
221
|
-
it("COMMENT_INPUT matches at least one element", async () => {
|
|
222
|
-
const count = await queryCount(linkedInClient, COMMENT_INPUT);
|
|
223
|
-
expect(count, `Selector "${COMMENT_INPUT}" matched 0 elements`).toBeGreaterThan(0);
|
|
224
|
-
});
|
|
225
|
-
it("COMMENT_SUBMIT_BUTTON matches at least one element", async () => {
|
|
226
|
-
// The submit button only appears after typing into the editor
|
|
227
|
-
await linkedInClient.evaluate(`(() => {
|
|
228
|
-
const editor = document.querySelector(${JSON.stringify(COMMENT_INPUT)});
|
|
229
|
-
if (editor) {
|
|
230
|
-
editor.textContent = ' ';
|
|
231
|
-
editor.dispatchEvent(new Event('input', { bubbles: true }));
|
|
232
|
-
}
|
|
233
|
-
})()`);
|
|
234
|
-
await delay(1_000);
|
|
235
|
-
const count = await queryCount(linkedInClient, COMMENT_SUBMIT_BUTTON);
|
|
236
|
-
expect(count, `Selector "${COMMENT_SUBMIT_BUTTON}" matched 0 elements`).toBeGreaterThan(0);
|
|
237
|
-
// Clean up: clear the editor text
|
|
238
|
-
await linkedInClient.evaluate(`(() => {
|
|
239
|
-
const editor = document.querySelector(${JSON.stringify(COMMENT_INPUT)});
|
|
240
|
-
if (editor) {
|
|
241
|
-
editor.textContent = '';
|
|
242
|
-
editor.dispatchEvent(new Event('input', { bubbles: true }));
|
|
243
|
-
}
|
|
244
|
-
})()`);
|
|
245
|
-
});
|
|
246
|
-
});
|
|
247
|
-
// ── Pagination trigger ──────────────────────────────────────────
|
|
248
|
-
describe("pagination selectors", () => {
|
|
249
|
-
it("PAGINATION_TRIGGER matches at least one element after scrolling", async () => {
|
|
250
|
-
// Scroll to the bottom to trigger pagination rendering
|
|
251
|
-
await linkedInClient.evaluate("window.scrollTo(0, document.body.scrollHeight)");
|
|
252
|
-
await delay(3_000);
|
|
253
|
-
const count = await queryCount(linkedInClient, PAGINATION_TRIGGER);
|
|
254
|
-
expect(count, `Selector "${PAGINATION_TRIGGER}" matched 0 elements`).toBeGreaterThan(0);
|
|
255
|
-
});
|
|
256
|
-
});
|
|
257
|
-
});
|
|
258
|
-
//# sourceMappingURL=selectors.integration.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"selectors.integration.test.js","sourceRoot":"","sources":["../../../src/linkedin/__tests__/selectors.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A LinkedIn post returned from a content search.
|
|
3
|
-
*/
|
|
4
|
-
export interface SearchPostResult {
|
|
5
|
-
/** Post URN (e.g. `urn:li:activity:1234567890`). */
|
|
6
|
-
readonly postUrn: string;
|
|
7
|
-
/** Post text content (may be truncated by API). */
|
|
8
|
-
readonly text: string | null;
|
|
9
|
-
/** Author first name. */
|
|
10
|
-
readonly authorFirstName: string | null;
|
|
11
|
-
/** Author last name. */
|
|
12
|
-
readonly authorLastName: string | null;
|
|
13
|
-
/** Author LinkedIn public ID (vanity URL slug). */
|
|
14
|
-
readonly authorPublicId: string | null;
|
|
15
|
-
/** Author professional headline. */
|
|
16
|
-
readonly authorHeadline: string | null;
|
|
17
|
-
/** Total number of reactions on the post. */
|
|
18
|
-
readonly reactionCount: number;
|
|
19
|
-
/** Total number of comments on the post. */
|
|
20
|
-
readonly commentCount: number;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=search-posts.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-posts.d.ts","sourceRoot":"","sources":["../../src/types/search-posts.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,yBAAyB;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,wBAAwB;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,oCAAoC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,6CAA6C;IAC7C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,4CAA4C;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-posts.js","sourceRoot":"","sources":["../../src/types/search-posts.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC"}
|
package/dist/voyager/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/voyager/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,sBAAsB,GAC5B,MAAM,kBAAkB,CAAC"}
|
package/dist/voyager/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/voyager/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GAIpB,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import type { CDPClient } from "../cdp/client.js";
|
|
2
|
-
/** URL pattern matching LinkedIn Voyager API endpoints. */
|
|
3
|
-
export declare const VOYAGER_URL_PATTERN: RegExp;
|
|
4
|
-
/**
|
|
5
|
-
* A captured Voyager API response.
|
|
6
|
-
*/
|
|
7
|
-
export interface VoyagerResponse {
|
|
8
|
-
/** The full request URL. */
|
|
9
|
-
readonly url: string;
|
|
10
|
-
/** HTTP status code. */
|
|
11
|
-
readonly status: number;
|
|
12
|
-
/** Parsed JSON response body, or raw string if JSON parsing failed. */
|
|
13
|
-
readonly body: unknown;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Callback for intercepted Voyager API responses.
|
|
17
|
-
*/
|
|
18
|
-
export type VoyagerResponseHandler = (response: VoyagerResponse) => void;
|
|
19
|
-
/**
|
|
20
|
-
* Options for active Voyager API fetching.
|
|
21
|
-
*/
|
|
22
|
-
export interface VoyagerFetchOptions {
|
|
23
|
-
/** Additional HTTP headers to include in the request. */
|
|
24
|
-
readonly headers?: Readonly<Record<string, string>>;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* CDP Network domain listener for LinkedIn Voyager API responses.
|
|
28
|
-
*
|
|
29
|
-
* Intercepts HTTP responses matching the Voyager API URL pattern
|
|
30
|
-
* (`/voyager/api/`) via the Chrome DevTools Protocol Network domain.
|
|
31
|
-
*
|
|
32
|
-
* Two modes of operation:
|
|
33
|
-
* - **Passive**: Enable the interceptor and register handlers to capture
|
|
34
|
-
* Voyager responses triggered by page navigation, scrolling, or user
|
|
35
|
-
* interaction within the LinkedIn WebView.
|
|
36
|
-
* - **Active**: Use {@link fetch} to execute Voyager API requests directly
|
|
37
|
-
* in the page context (which has the LinkedIn session cookies).
|
|
38
|
-
*
|
|
39
|
-
* The interceptor is read-only — it does not modify requests or responses,
|
|
40
|
-
* so it coexists safely with LinkedHelper's mockttp proxy.
|
|
41
|
-
*/
|
|
42
|
-
export declare class VoyagerInterceptor {
|
|
43
|
-
private readonly client;
|
|
44
|
-
private readonly handlers;
|
|
45
|
-
private readonly pendingRequests;
|
|
46
|
-
private interceptEnabled;
|
|
47
|
-
constructor(client: CDPClient);
|
|
48
|
-
/** Whether passive interception is currently enabled. */
|
|
49
|
-
get isEnabled(): boolean;
|
|
50
|
-
/**
|
|
51
|
-
* Enable the CDP Network domain and start intercepting Voyager responses.
|
|
52
|
-
*
|
|
53
|
-
* Subscribes to `Network.responseReceived`, `Network.loadingFinished`,
|
|
54
|
-
* and `Network.loadingFailed` events. Responses matching the Voyager
|
|
55
|
-
* URL pattern are captured and emitted to registered handlers.
|
|
56
|
-
*/
|
|
57
|
-
enable(): Promise<void>;
|
|
58
|
-
/**
|
|
59
|
-
* Disable the CDP Network domain and stop intercepting.
|
|
60
|
-
*
|
|
61
|
-
* Cleans up event listeners and pending request state.
|
|
62
|
-
*/
|
|
63
|
-
disable(): Promise<void>;
|
|
64
|
-
/**
|
|
65
|
-
* Register a handler for passively intercepted Voyager responses.
|
|
66
|
-
*/
|
|
67
|
-
onResponse(handler: VoyagerResponseHandler): void;
|
|
68
|
-
/**
|
|
69
|
-
* Remove a previously registered response handler.
|
|
70
|
-
*/
|
|
71
|
-
offResponse(handler: VoyagerResponseHandler): void;
|
|
72
|
-
/**
|
|
73
|
-
* Wait for the next Voyager response matching an optional URL filter.
|
|
74
|
-
*
|
|
75
|
-
* Requires the interceptor to be {@link enable}d.
|
|
76
|
-
*
|
|
77
|
-
* @param filter - Optional predicate applied to the response URL.
|
|
78
|
-
* @param timeout - Maximum wait time in ms (default: 30 000).
|
|
79
|
-
*/
|
|
80
|
-
waitForResponse(filter?: (url: string) => boolean, timeout?: number): Promise<VoyagerResponse>;
|
|
81
|
-
/**
|
|
82
|
-
* Execute a Voyager API request in the LinkedIn page context.
|
|
83
|
-
*
|
|
84
|
-
* Runs `fetch()` inside the WebView where LinkedIn session cookies are
|
|
85
|
-
* available, automatically extracting the CSRF token from cookies.
|
|
86
|
-
*
|
|
87
|
-
* Does not require the interceptor to be {@link enable}d — works
|
|
88
|
-
* independently of the Network domain.
|
|
89
|
-
*
|
|
90
|
-
* @param path - Voyager API path (e.g. `/voyager/api/feed/dash/feedUpdates`).
|
|
91
|
-
* Full URLs starting with `https://` are also accepted.
|
|
92
|
-
* @param options - Optional fetch configuration.
|
|
93
|
-
*/
|
|
94
|
-
fetch(path: string, options?: VoyagerFetchOptions): Promise<VoyagerResponse>;
|
|
95
|
-
private handleResponseReceived;
|
|
96
|
-
private handleLoadingFinished;
|
|
97
|
-
private handleLoadingFailed;
|
|
98
|
-
private fetchAndEmitBody;
|
|
99
|
-
}
|
|
100
|
-
//# sourceMappingURL=interceptor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../../src/voyager/interceptor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD,2DAA2D;AAC3D,eAAO,MAAM,mBAAmB,QAAqB,CAAC;AAKtD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,yDAAyD;IACzD,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAUD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG5B;IACJ,OAAO,CAAC,gBAAgB,CAAS;gBAErB,MAAM,EAAE,SAAS;IAI7B,yDAAyD;IACzD,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;;;;;OAMG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7B;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAU9B;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAIjD;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAIlD;;;;;;;OAOG;IACG,eAAe,CACnB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,EACjC,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,CAAC;IA2B3B;;;;;;;;;;;;OAYG;IACG,KAAK,CACT,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,eAAe,CAAC;IAyE3B,OAAO,CAAC,sBAAsB,CAY5B;IAEF,OAAO,CAAC,qBAAqB,CAO3B;IAEF,OAAO,CAAC,mBAAmB,CAGzB;YAEY,gBAAgB;CAqC/B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.integration.test.d.ts","sourceRoot":"","sources":["../../src/voyager/interceptor.integration.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
-
// Copyright (C) 2026 Oleksii PELYKH
|
|
3
|
-
import { createServer } from "node:http";
|
|
4
|
-
import { afterAll, afterEach, beforeAll, describe, expect, it } from "vitest";
|
|
5
|
-
import { CDPClient } from "../cdp/client.js";
|
|
6
|
-
import { launchChromium, } from "../cdp/testing/launch-chromium.js";
|
|
7
|
-
import { VoyagerInterceptor } from "./interceptor.js";
|
|
8
|
-
describe("VoyagerInterceptor (integration)", () => {
|
|
9
|
-
let chromium;
|
|
10
|
-
let server;
|
|
11
|
-
let serverPort;
|
|
12
|
-
let client;
|
|
13
|
-
let interceptor;
|
|
14
|
-
beforeAll(async () => {
|
|
15
|
-
chromium = await launchChromium();
|
|
16
|
-
// Start a minimal local HTTP server to avoid external network dependency
|
|
17
|
-
// (http://example.com caused Windows CI timeouts)
|
|
18
|
-
server = createServer((_req, res) => {
|
|
19
|
-
res.writeHead(200, { "Content-Type": "text/html" });
|
|
20
|
-
res.end("<html></html>");
|
|
21
|
-
});
|
|
22
|
-
await new Promise((resolve) => server.listen(0, resolve));
|
|
23
|
-
serverPort = server.address().port;
|
|
24
|
-
}, 30_000);
|
|
25
|
-
afterAll(async () => {
|
|
26
|
-
await chromium.close();
|
|
27
|
-
server.close();
|
|
28
|
-
});
|
|
29
|
-
afterEach(async () => {
|
|
30
|
-
if (interceptor?.isEnabled) {
|
|
31
|
-
await interceptor.disable();
|
|
32
|
-
}
|
|
33
|
-
client?.disconnect();
|
|
34
|
-
});
|
|
35
|
-
describe("enable / disable", () => {
|
|
36
|
-
it("should enable and disable without error on a real browser", async () => {
|
|
37
|
-
client = new CDPClient(chromium.port);
|
|
38
|
-
await client.connect();
|
|
39
|
-
interceptor = new VoyagerInterceptor(client);
|
|
40
|
-
await interceptor.enable();
|
|
41
|
-
expect(interceptor.isEnabled).toBe(true);
|
|
42
|
-
await interceptor.disable();
|
|
43
|
-
expect(interceptor.isEnabled).toBe(false);
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
describe("passive interception", () => {
|
|
47
|
-
it("should capture responses matching Voyager URL pattern", async () => {
|
|
48
|
-
client = new CDPClient(chromium.port);
|
|
49
|
-
await client.connect();
|
|
50
|
-
interceptor = new VoyagerInterceptor(client);
|
|
51
|
-
// Navigate to the local HTTP server so we have an origin for fetch
|
|
52
|
-
await client.send("Page.enable");
|
|
53
|
-
const loadPromise = client.waitForEvent("Page.loadEventFired");
|
|
54
|
-
await client.navigate(`http://localhost:${serverPort.toString()}`);
|
|
55
|
-
await loadPromise;
|
|
56
|
-
await client.send("Page.disable").catch(() => { });
|
|
57
|
-
await interceptor.enable();
|
|
58
|
-
// Use waitForResponse for deterministic waiting instead of setTimeout
|
|
59
|
-
const responsePromise = interceptor.waitForResponse(undefined, 5000);
|
|
60
|
-
// Trigger a fetch from within the page to a URL containing /voyager/api/
|
|
61
|
-
// The local server responds with 200 to any path
|
|
62
|
-
await client.evaluate(`fetch("/voyager/api/test-endpoint").catch(() => {})`, true);
|
|
63
|
-
const captured = await responsePromise;
|
|
64
|
-
expect(captured.url).toContain("/voyager/api/");
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
describe("waitForResponse", () => {
|
|
68
|
-
it("should resolve when a matching response arrives", async () => {
|
|
69
|
-
client = new CDPClient(chromium.port);
|
|
70
|
-
await client.connect();
|
|
71
|
-
interceptor = new VoyagerInterceptor(client);
|
|
72
|
-
// Navigate to the local HTTP server so we have an origin for fetch
|
|
73
|
-
await client.send("Page.enable");
|
|
74
|
-
const loadPromise = client.waitForEvent("Page.loadEventFired");
|
|
75
|
-
await client.navigate(`http://localhost:${serverPort.toString()}`);
|
|
76
|
-
await loadPromise;
|
|
77
|
-
await client.send("Page.disable").catch(() => { });
|
|
78
|
-
await interceptor.enable();
|
|
79
|
-
// Start waiting before triggering the fetch
|
|
80
|
-
const responsePromise = interceptor.waitForResponse(undefined, 5000);
|
|
81
|
-
// Trigger a fetch matching the voyager pattern
|
|
82
|
-
await client.evaluate(`fetch("/voyager/api/integration-test").catch(() => {})`, true);
|
|
83
|
-
const response = await responsePromise;
|
|
84
|
-
expect(response.url).toContain("/voyager/api/");
|
|
85
|
-
expect(response.status).toEqual(expect.any(Number));
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
//# sourceMappingURL=interceptor.integration.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.integration.test.js","sourceRoot":"","sources":["../../src/voyager/interceptor.integration.test.ts"],"names":[],"mappings":"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"}
|