@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
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
// Copyright (C) 2026 Oleksii PELYKH
|
|
3
|
+
import { ActionNotFoundError, CampaignNotFoundError, ExcludeListNotFoundError, } from "../errors.js";
|
|
4
|
+
/**
|
|
5
|
+
* Repository for campaign exclude-list operations.
|
|
6
|
+
*
|
|
7
|
+
* Provides read operations (getExcludeList) and write operations
|
|
8
|
+
* (addToExcludeList, removeFromExcludeList) for campaign and
|
|
9
|
+
* action-level exclude lists.
|
|
10
|
+
*
|
|
11
|
+
* Write operations require the DatabaseClient to be opened with
|
|
12
|
+
* `{ readOnly: false }`.
|
|
13
|
+
*/
|
|
14
|
+
export class CampaignExcludeListRepository {
|
|
15
|
+
client;
|
|
16
|
+
stmtGetCampaign;
|
|
17
|
+
stmtGetCampaignActions;
|
|
18
|
+
// Write statements (prepared lazily to avoid issues with read-only mode)
|
|
19
|
+
writeStatements = null;
|
|
20
|
+
constructor(client) {
|
|
21
|
+
this.client = client;
|
|
22
|
+
const { db } = client;
|
|
23
|
+
this.stmtGetCampaign = db.prepare(`SELECT id, name, description, is_paused, is_archived, is_valid,
|
|
24
|
+
li_account_id, created_at
|
|
25
|
+
FROM campaigns WHERE id = ?`);
|
|
26
|
+
this.stmtGetCampaignActions = db.prepare(`SELECT a.id, a.campaign_id
|
|
27
|
+
FROM actions a
|
|
28
|
+
WHERE a.campaign_id = ?
|
|
29
|
+
ORDER BY a.id`);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get the exclude list for a campaign or action.
|
|
33
|
+
*
|
|
34
|
+
* @param campaignId - Campaign ID (verified to exist).
|
|
35
|
+
* @param actionId - If provided, get the action-level exclude list.
|
|
36
|
+
* Otherwise, get the campaign-level exclude list.
|
|
37
|
+
* @throws {CampaignNotFoundError} if the campaign does not exist.
|
|
38
|
+
* @throws {ActionNotFoundError} if actionId is provided and not in the campaign.
|
|
39
|
+
* @throws {ExcludeListNotFoundError} if the exclude list chain is not found.
|
|
40
|
+
*/
|
|
41
|
+
getExcludeList(campaignId, actionId) {
|
|
42
|
+
const { collectionId } = this.resolveExcludeListContext(campaignId, actionId);
|
|
43
|
+
const rows = this.client.db
|
|
44
|
+
.prepare(`SELECT person_id FROM collection_people
|
|
45
|
+
WHERE collection_id = ?
|
|
46
|
+
ORDER BY person_id`)
|
|
47
|
+
.all(collectionId);
|
|
48
|
+
return rows.map((r) => ({ personId: r.person_id }));
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Add people to a campaign or action exclude list.
|
|
52
|
+
*
|
|
53
|
+
* @param campaignId - Campaign ID (verified to exist).
|
|
54
|
+
* @param personIds - Person IDs to add.
|
|
55
|
+
* @param actionId - If provided, add to the action-level exclude list.
|
|
56
|
+
* @returns Number of people actually added (excludes already-present).
|
|
57
|
+
* @throws {CampaignNotFoundError} if the campaign does not exist.
|
|
58
|
+
* @throws {ActionNotFoundError} if actionId is provided and not in the campaign.
|
|
59
|
+
* @throws {ExcludeListNotFoundError} if the exclude list chain is not found.
|
|
60
|
+
*/
|
|
61
|
+
addToExcludeList(campaignId, personIds, actionId) {
|
|
62
|
+
if (personIds.length === 0)
|
|
63
|
+
return 0;
|
|
64
|
+
const { collectionId } = this.resolveExcludeListContext(campaignId, actionId);
|
|
65
|
+
const stmts = this.getWriteStatements();
|
|
66
|
+
let added = 0;
|
|
67
|
+
this.client.db.exec("BEGIN");
|
|
68
|
+
try {
|
|
69
|
+
for (const personId of personIds) {
|
|
70
|
+
const result = stmts.insertCollectionPerson.run(collectionId, personId);
|
|
71
|
+
if (result.changes > 0)
|
|
72
|
+
added++;
|
|
73
|
+
}
|
|
74
|
+
this.client.db.exec("COMMIT");
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
this.client.db.exec("ROLLBACK");
|
|
78
|
+
throw e;
|
|
79
|
+
}
|
|
80
|
+
return added;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Remove people from a campaign or action exclude list.
|
|
84
|
+
*
|
|
85
|
+
* @param campaignId - Campaign ID (verified to exist).
|
|
86
|
+
* @param personIds - Person IDs to remove.
|
|
87
|
+
* @param actionId - If provided, remove from the action-level exclude list.
|
|
88
|
+
* @returns Number of people actually removed.
|
|
89
|
+
* @throws {CampaignNotFoundError} if the campaign does not exist.
|
|
90
|
+
* @throws {ActionNotFoundError} if actionId is provided and not in the campaign.
|
|
91
|
+
* @throws {ExcludeListNotFoundError} if the exclude list chain is not found.
|
|
92
|
+
*/
|
|
93
|
+
removeFromExcludeList(campaignId, personIds, actionId) {
|
|
94
|
+
if (personIds.length === 0)
|
|
95
|
+
return 0;
|
|
96
|
+
const { collectionId } = this.resolveExcludeListContext(campaignId, actionId);
|
|
97
|
+
const stmts = this.getWriteStatements();
|
|
98
|
+
let removed = 0;
|
|
99
|
+
this.client.db.exec("BEGIN");
|
|
100
|
+
try {
|
|
101
|
+
for (const personId of personIds) {
|
|
102
|
+
const result = stmts.deleteCollectionPerson.run(collectionId, personId);
|
|
103
|
+
if (result.changes > 0)
|
|
104
|
+
removed++;
|
|
105
|
+
}
|
|
106
|
+
this.client.db.exec("COMMIT");
|
|
107
|
+
}
|
|
108
|
+
catch (e) {
|
|
109
|
+
this.client.db.exec("ROLLBACK");
|
|
110
|
+
throw e;
|
|
111
|
+
}
|
|
112
|
+
return removed;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Prepare write statements lazily (only when needed).
|
|
116
|
+
* This avoids issues when the client is opened in read-only mode.
|
|
117
|
+
*/
|
|
118
|
+
getWriteStatements() {
|
|
119
|
+
if (this.writeStatements)
|
|
120
|
+
return this.writeStatements;
|
|
121
|
+
const { db } = this.client;
|
|
122
|
+
this.writeStatements = {
|
|
123
|
+
insertCollectionPerson: db.prepare(`INSERT OR IGNORE INTO collection_people (collection_id, person_id)
|
|
124
|
+
VALUES (?, ?)`),
|
|
125
|
+
deleteCollectionPerson: db.prepare(`DELETE FROM collection_people
|
|
126
|
+
WHERE collection_id = ? AND person_id = ?`),
|
|
127
|
+
};
|
|
128
|
+
return this.writeStatements;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Resolve the collection_id for an exclude list.
|
|
132
|
+
*
|
|
133
|
+
* Follows the chain: exclude_list_id -> collection_people_versions -> collection_id.
|
|
134
|
+
*
|
|
135
|
+
* @param level - "campaign" or "action"
|
|
136
|
+
* @param id - Campaign ID (if level is "campaign") or action ID (if level is "action")
|
|
137
|
+
* @throws {ExcludeListNotFoundError} if the exclude list chain is not found.
|
|
138
|
+
*/
|
|
139
|
+
resolveExcludeListCollectionId(level, id) {
|
|
140
|
+
const { db } = this.client;
|
|
141
|
+
let excludeListId = null;
|
|
142
|
+
if (level === "campaign") {
|
|
143
|
+
const row = db
|
|
144
|
+
.prepare(`SELECT exclude_list_id FROM campaign_versions
|
|
145
|
+
WHERE campaign_id = ? ORDER BY id DESC LIMIT 1`)
|
|
146
|
+
.get(id);
|
|
147
|
+
excludeListId = row?.exclude_list_id ?? null;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
const row = db
|
|
151
|
+
.prepare(`SELECT exclude_list_id FROM action_versions
|
|
152
|
+
WHERE action_id = ? ORDER BY id DESC LIMIT 1`)
|
|
153
|
+
.get(id);
|
|
154
|
+
excludeListId = row?.exclude_list_id ?? null;
|
|
155
|
+
}
|
|
156
|
+
if (excludeListId === null) {
|
|
157
|
+
throw new ExcludeListNotFoundError(level, id);
|
|
158
|
+
}
|
|
159
|
+
// Resolve CPV -> collection_id
|
|
160
|
+
const cpv = db
|
|
161
|
+
.prepare(`SELECT collection_id FROM collection_people_versions WHERE id = ?`)
|
|
162
|
+
.get(excludeListId);
|
|
163
|
+
if (!cpv) {
|
|
164
|
+
throw new ExcludeListNotFoundError(level, id);
|
|
165
|
+
}
|
|
166
|
+
return cpv.collection_id;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Validate campaign/action and resolve the exclude-list collection ID.
|
|
170
|
+
*
|
|
171
|
+
* Shared preamble for {@link getExcludeList}, {@link addToExcludeList},
|
|
172
|
+
* and {@link removeFromExcludeList}.
|
|
173
|
+
*
|
|
174
|
+
* @param campaignId - Campaign ID (verified to exist).
|
|
175
|
+
* @param actionId - If provided, scope to the action-level exclude list.
|
|
176
|
+
* @throws {CampaignNotFoundError} if the campaign does not exist.
|
|
177
|
+
* @throws {ActionNotFoundError} if actionId is provided and not in the campaign.
|
|
178
|
+
* @throws {ExcludeListNotFoundError} if the exclude list chain is not found.
|
|
179
|
+
*/
|
|
180
|
+
resolveExcludeListContext(campaignId, actionId) {
|
|
181
|
+
this.verifyCampaignExists(campaignId);
|
|
182
|
+
if (actionId !== undefined) {
|
|
183
|
+
const rows = this.stmtGetCampaignActions.all(campaignId);
|
|
184
|
+
if (!rows.some((a) => a.id === actionId)) {
|
|
185
|
+
throw new ActionNotFoundError(actionId, campaignId);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const level = actionId !== undefined ? "action" : "campaign";
|
|
189
|
+
const targetId = actionId ?? campaignId;
|
|
190
|
+
const collectionId = this.resolveExcludeListCollectionId(level, targetId);
|
|
191
|
+
return { collectionId, level, targetId };
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Verify that a campaign exists.
|
|
195
|
+
*
|
|
196
|
+
* @throws {CampaignNotFoundError} if no campaign exists with the given ID.
|
|
197
|
+
*/
|
|
198
|
+
verifyCampaignExists(campaignId) {
|
|
199
|
+
const row = this.stmtGetCampaign.get(campaignId);
|
|
200
|
+
if (!row)
|
|
201
|
+
throw new CampaignNotFoundError(campaignId);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=campaign-exclude-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-exclude-list.js","sourceRoot":"","sources":["../../../src/db/repositories/campaign-exclude-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-exclude-list.test.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/campaign-exclude-list.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
// Copyright (C) 2026 Oleksii PELYKH
|
|
3
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
4
|
+
import { DatabaseClient } from "../client.js";
|
|
5
|
+
import { ActionNotFoundError, CampaignNotFoundError, ExcludeListNotFoundError, } from "../errors.js";
|
|
6
|
+
import { openFixture } from "../testing/open-fixture.js";
|
|
7
|
+
import { CampaignExcludeListRepository } from "./campaign-exclude-list.js";
|
|
8
|
+
describe("CampaignExcludeListRepository", () => {
|
|
9
|
+
let db;
|
|
10
|
+
let client;
|
|
11
|
+
let repo;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
db = openFixture();
|
|
14
|
+
client = { db };
|
|
15
|
+
repo = new CampaignExcludeListRepository(client);
|
|
16
|
+
});
|
|
17
|
+
afterEach(() => {
|
|
18
|
+
db.close();
|
|
19
|
+
});
|
|
20
|
+
describe("getExcludeList", () => {
|
|
21
|
+
// Campaign 1 has campaign-level exclude list with person 2 pre-populated
|
|
22
|
+
// Campaign 5 has campaign-level exclude list (empty) and action-level lists (empty)
|
|
23
|
+
it("returns campaign-level exclude list", () => {
|
|
24
|
+
const entries = repo.getExcludeList(1);
|
|
25
|
+
expect(entries).toEqual([{ personId: 2 }]);
|
|
26
|
+
});
|
|
27
|
+
it("returns empty list when no people excluded", () => {
|
|
28
|
+
const entries = repo.getExcludeList(5);
|
|
29
|
+
expect(entries).toEqual([]);
|
|
30
|
+
});
|
|
31
|
+
it("returns action-level exclude list", () => {
|
|
32
|
+
const entries = repo.getExcludeList(1, 1);
|
|
33
|
+
// Action 1's exclude list (collection 2) has no people
|
|
34
|
+
expect(entries).toEqual([]);
|
|
35
|
+
});
|
|
36
|
+
it("throws CampaignNotFoundError for missing campaign", () => {
|
|
37
|
+
expect(() => repo.getExcludeList(999)).toThrow(CampaignNotFoundError);
|
|
38
|
+
});
|
|
39
|
+
it("throws ActionNotFoundError for action not in campaign", () => {
|
|
40
|
+
expect(() => repo.getExcludeList(1, 999)).toThrow(ActionNotFoundError);
|
|
41
|
+
});
|
|
42
|
+
it("throws ExcludeListNotFoundError when campaign has no exclude list chain", () => {
|
|
43
|
+
// Campaign 2 has no campaign_versions entry
|
|
44
|
+
expect(() => repo.getExcludeList(2)).toThrow(ExcludeListNotFoundError);
|
|
45
|
+
});
|
|
46
|
+
it("returns entries ordered by person_id", () => {
|
|
47
|
+
// Add multiple people to campaign 1's exclude list
|
|
48
|
+
db.exec(`
|
|
49
|
+
INSERT INTO collection_people (collection_id, person_id) VALUES (1, 3);
|
|
50
|
+
INSERT INTO collection_people (collection_id, person_id) VALUES (1, 1);
|
|
51
|
+
`);
|
|
52
|
+
const entries = repo.getExcludeList(1);
|
|
53
|
+
expect(entries.map((e) => e.personId)).toEqual([1, 2, 3]);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe("addToExcludeList", () => {
|
|
57
|
+
it("adds people to campaign-level exclude list", () => {
|
|
58
|
+
const added = repo.addToExcludeList(1, [1, 3]);
|
|
59
|
+
expect(added).toBe(2);
|
|
60
|
+
// Verify in database
|
|
61
|
+
const entries = repo.getExcludeList(1);
|
|
62
|
+
expect(entries.map((e) => e.personId)).toContain(1);
|
|
63
|
+
expect(entries.map((e) => e.personId)).toContain(3);
|
|
64
|
+
});
|
|
65
|
+
it("skips already-excluded people", () => {
|
|
66
|
+
// Person 2 is already in campaign 1's exclude list
|
|
67
|
+
const added = repo.addToExcludeList(1, [2, 3]);
|
|
68
|
+
expect(added).toBe(1); // Only person 3 was newly added
|
|
69
|
+
const entries = repo.getExcludeList(1);
|
|
70
|
+
expect(entries).toHaveLength(2); // Person 2 (existing) + person 3 (new)
|
|
71
|
+
});
|
|
72
|
+
it("adds people to action-level exclude list", () => {
|
|
73
|
+
const added = repo.addToExcludeList(1, [1], 1);
|
|
74
|
+
expect(added).toBe(1);
|
|
75
|
+
const entries = repo.getExcludeList(1, 1);
|
|
76
|
+
expect(entries).toEqual([{ personId: 1 }]);
|
|
77
|
+
});
|
|
78
|
+
it("returns 0 for empty person list", () => {
|
|
79
|
+
const added = repo.addToExcludeList(1, []);
|
|
80
|
+
expect(added).toBe(0);
|
|
81
|
+
});
|
|
82
|
+
it("throws CampaignNotFoundError for missing campaign", () => {
|
|
83
|
+
expect(() => repo.addToExcludeList(999, [1])).toThrow(CampaignNotFoundError);
|
|
84
|
+
});
|
|
85
|
+
it("throws ActionNotFoundError for action not in campaign", () => {
|
|
86
|
+
expect(() => repo.addToExcludeList(1, [1], 999)).toThrow(ActionNotFoundError);
|
|
87
|
+
});
|
|
88
|
+
it("throws ExcludeListNotFoundError when exclude list chain missing", () => {
|
|
89
|
+
expect(() => repo.addToExcludeList(2, [1])).toThrow(ExcludeListNotFoundError);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
describe("removeFromExcludeList", () => {
|
|
93
|
+
it("removes people from campaign-level exclude list", () => {
|
|
94
|
+
// Person 2 is in campaign 1's exclude list
|
|
95
|
+
const removed = repo.removeFromExcludeList(1, [2]);
|
|
96
|
+
expect(removed).toBe(1);
|
|
97
|
+
const entries = repo.getExcludeList(1);
|
|
98
|
+
expect(entries).toEqual([]);
|
|
99
|
+
});
|
|
100
|
+
it("returns 0 for people not in the list", () => {
|
|
101
|
+
const removed = repo.removeFromExcludeList(1, [999]);
|
|
102
|
+
expect(removed).toBe(0);
|
|
103
|
+
});
|
|
104
|
+
it("removes people from action-level exclude list", () => {
|
|
105
|
+
// First add a person to action 1's exclude list
|
|
106
|
+
repo.addToExcludeList(1, [1], 1);
|
|
107
|
+
const removed = repo.removeFromExcludeList(1, [1], 1);
|
|
108
|
+
expect(removed).toBe(1);
|
|
109
|
+
const entries = repo.getExcludeList(1, 1);
|
|
110
|
+
expect(entries).toEqual([]);
|
|
111
|
+
});
|
|
112
|
+
it("handles mixed present and absent people", () => {
|
|
113
|
+
// Person 2 is in the list, person 999 is not
|
|
114
|
+
const removed = repo.removeFromExcludeList(1, [2, 999]);
|
|
115
|
+
expect(removed).toBe(1);
|
|
116
|
+
});
|
|
117
|
+
it("returns 0 for empty person list", () => {
|
|
118
|
+
const removed = repo.removeFromExcludeList(1, []);
|
|
119
|
+
expect(removed).toBe(0);
|
|
120
|
+
});
|
|
121
|
+
it("throws CampaignNotFoundError for missing campaign", () => {
|
|
122
|
+
expect(() => repo.removeFromExcludeList(999, [1])).toThrow(CampaignNotFoundError);
|
|
123
|
+
});
|
|
124
|
+
it("throws ActionNotFoundError for action not in campaign", () => {
|
|
125
|
+
expect(() => repo.removeFromExcludeList(1, [1], 999)).toThrow(ActionNotFoundError);
|
|
126
|
+
});
|
|
127
|
+
it("throws ExcludeListNotFoundError when exclude list chain missing", () => {
|
|
128
|
+
expect(() => repo.removeFromExcludeList(2, [1])).toThrow(ExcludeListNotFoundError);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
//# sourceMappingURL=campaign-exclude-list.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-exclude-list.test.js","sourceRoot":"","sources":["../../../src/db/repositories/campaign-exclude-list.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { CampaignStatistics, GetStatisticsOptions } from "../../types/index.js";
|
|
2
|
+
import type { DatabaseClient } from "../client.js";
|
|
3
|
+
/**
|
|
4
|
+
* Repository for campaign statistics and reset operations.
|
|
5
|
+
*
|
|
6
|
+
* Provides read operations (getStatistics) and write operations
|
|
7
|
+
* (resetForRerun) for campaign execution data.
|
|
8
|
+
*
|
|
9
|
+
* Write operations require the DatabaseClient to be opened with
|
|
10
|
+
* `{ readOnly: false }`.
|
|
11
|
+
*/
|
|
12
|
+
export declare class CampaignStatisticsRepository {
|
|
13
|
+
private readonly client;
|
|
14
|
+
private readonly stmtGetCampaign;
|
|
15
|
+
private readonly stmtGetCampaignActions;
|
|
16
|
+
private readonly stmtGetActionVersions;
|
|
17
|
+
private writeStatements;
|
|
18
|
+
constructor(client: DatabaseClient);
|
|
19
|
+
/**
|
|
20
|
+
* Get aggregated statistics for a campaign.
|
|
21
|
+
*
|
|
22
|
+
* Returns per-action result breakdowns (success/failure/skip/reply rates),
|
|
23
|
+
* top error codes with blame attribution, and processing timeline.
|
|
24
|
+
*
|
|
25
|
+
* @throws {CampaignNotFoundError} if no campaign exists with the given ID.
|
|
26
|
+
* @throws {ActionNotFoundError} if actionId is provided and not in the campaign.
|
|
27
|
+
*/
|
|
28
|
+
getStatistics(campaignId: number, options?: GetStatisticsOptions): CampaignStatistics;
|
|
29
|
+
/**
|
|
30
|
+
* Reset persons for re-run in a campaign.
|
|
31
|
+
*
|
|
32
|
+
* This performs the three-table reset pattern required by LinkedHelper:
|
|
33
|
+
* 1. Requeue person in action_target_people (state = 1)
|
|
34
|
+
* 2. Reset person_in_campaigns_history (result_status = -999)
|
|
35
|
+
* 3. Delete old action_results (and FK children)
|
|
36
|
+
*
|
|
37
|
+
* @throws {CampaignNotFoundError} if no campaign exists with the given ID.
|
|
38
|
+
*/
|
|
39
|
+
resetForRerun(campaignId: number, personIds: number[]): void;
|
|
40
|
+
/**
|
|
41
|
+
* Get all actions for a campaign.
|
|
42
|
+
*
|
|
43
|
+
* @throws {CampaignNotFoundError} if no campaign exists with the given ID.
|
|
44
|
+
*/
|
|
45
|
+
private getCampaignActions;
|
|
46
|
+
/**
|
|
47
|
+
* Prepare write statements lazily (only when needed).
|
|
48
|
+
* This avoids issues when the client is opened in read-only mode.
|
|
49
|
+
*/
|
|
50
|
+
private getWriteStatements;
|
|
51
|
+
/**
|
|
52
|
+
* Verify that a campaign exists.
|
|
53
|
+
*
|
|
54
|
+
* @throws {CampaignNotFoundError} if no campaign exists with the given ID.
|
|
55
|
+
*/
|
|
56
|
+
private verifyCampaignExists;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=campaign-statistics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-statistics.d.ts","sourceRoot":"","sources":["../../../src/db/repositories/campaign-statistics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAMV,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA6BnD;;;;;;;;GAQG;AACH,qBAAa,4BAA4B;IAc3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAbnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACxC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAGvC,OAAO,CAAC,eAAe,CAMP;gBAEa,MAAM,EAAE,cAAc;IA8BnD;;;;;;;;OAQG;IACH,aAAa,CACX,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,oBAAyB,GACjC,kBAAkB;IAyIrB;;;;;;;;;OASG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAuC5D;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAoC1B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAqD1B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;CAI7B"}
|