@dakkitor/api-contracts 1.1.153 → 1.4.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/abilities/abilities.contract.d.ts +53 -1
- package/dist/abilities/abilities.contract.d.ts.map +1 -1
- package/dist/abilities/abilities.contract.js +92 -1
- package/dist/abilities/abilities.contract.spec.d.ts +2 -0
- package/dist/abilities/abilities.contract.spec.d.ts.map +1 -0
- package/dist/abilities/abilities.contract.spec.js +145 -0
- package/dist/abilities/admin-dashboard.abilities.test.d.ts +2 -0
- package/dist/abilities/admin-dashboard.abilities.test.d.ts.map +1 -0
- package/dist/abilities/admin-dashboard.abilities.test.js +33 -0
- package/dist/abilities/admin.abilities.json +19 -0
- package/dist/abilities/bot.abilities.json +13 -4
- package/dist/abilities/first-agent.abilities.json +317 -70
- package/dist/abilities/interconnection.abilities.json +75 -0
- package/dist/abilities/kpi.abilities.json +68 -0
- package/dist/abilities/office-manager.abilities.json +111 -0
- package/dist/abilities/second-agent.abilities.json +417 -43
- package/dist/abilities/team-leads.json +71 -6
- package/dist/abilities/worker-curator.abilities.json +233 -0
- package/dist/actives/actives.contract.d.ts +19379 -23651
- package/dist/actives/actives.contract.d.ts.map +1 -1
- package/dist/actives/actives.contract.js +517 -114
- package/dist/agent-client-links/agent-client-links.contract.d.ts +1431 -291
- package/dist/agent-client-links/agent-client-links.contract.d.ts.map +1 -1
- package/dist/auth/auth.contract.d.ts +1050 -81
- package/dist/auth/auth.contract.d.ts.map +1 -1
- package/dist/auth/auth.contract.js +115 -3
- package/dist/bookings/booking-worker-summary.spec.d.ts +2 -0
- package/dist/bookings/booking-worker-summary.spec.d.ts.map +1 -0
- package/dist/bookings/booking-worker-summary.spec.js +25 -0
- package/dist/bookings/bookings.contract.d.ts +20643 -26117
- package/dist/bookings/bookings.contract.d.ts.map +1 -1
- package/dist/bookings/bookings.contract.js +383 -91
- package/dist/bookings/bookings.contract.spec.d.ts +2 -0
- package/dist/bookings/bookings.contract.spec.d.ts.map +1 -0
- package/dist/bookings/bookings.contract.spec.js +11 -0
- package/dist/bookings/job-lock.spec.d.ts +2 -0
- package/dist/bookings/job-lock.spec.d.ts.map +1 -0
- package/dist/bookings/job-lock.spec.js +56 -0
- package/dist/bot-parse-cache/bot-parse-cache.contract.d.ts +232 -0
- package/dist/bot-parse-cache/bot-parse-cache.contract.d.ts.map +1 -0
- package/dist/bot-parse-cache/bot-parse-cache.contract.js +64 -0
- package/dist/call-history/call-history.contract.d.ts +1336 -767
- package/dist/call-history/call-history.contract.d.ts.map +1 -1
- package/dist/call-history/call-history.contract.js +86 -10
- package/dist/calls-feed/calls-feed.contract.d.ts +417 -0
- package/dist/calls-feed/calls-feed.contract.d.ts.map +1 -0
- package/dist/calls-feed/calls-feed.contract.js +32 -0
- package/dist/client-contacts/client-contacts.contract.d.ts +410 -226
- package/dist/client-contacts/client-contacts.contract.d.ts.map +1 -1
- package/dist/client-contacts/client-contacts.contract.js +35 -4
- package/dist/clients/clients.contract.d.ts +227 -73
- package/dist/clients/clients.contract.d.ts.map +1 -1
- package/dist/clients/clients.contract.js +45 -21
- package/dist/collaboration-checkings/collaboration-checkings.contract.d.ts +2908 -1834
- package/dist/collaboration-checkings/collaboration-checkings.contract.d.ts.map +1 -1
- package/dist/collaboration-checkings/collaboration-checkings.contract.js +14 -9
- package/dist/collaborations/collaborations.contract.d.ts +2676 -1409
- package/dist/collaborations/collaborations.contract.d.ts.map +1 -1
- package/dist/collaborations/collaborations.contract.js +33 -9
- package/dist/common/call-rating.schema.d.ts.map +1 -1
- package/dist/common/call-rating.schema.js +4 -2
- package/dist/common/common-schemas.d.ts +59 -11
- package/dist/common/common-schemas.d.ts.map +1 -1
- package/dist/common/common-schemas.js +55 -29
- package/dist/common/error-schemas.d.ts +2 -2
- package/dist/common/pagination-query.schema.d.ts +13 -2
- package/dist/common/pagination-query.schema.d.ts.map +1 -1
- package/dist/common/pagination-query.schema.js +21 -2
- package/dist/common/pagination-query.schema.spec.d.ts +2 -0
- package/dist/common/pagination-query.schema.spec.d.ts.map +1 -0
- package/dist/common/pagination-query.schema.spec.js +53 -0
- package/dist/companies/companies.contract.d.ts +53 -28
- package/dist/companies/companies.contract.d.ts.map +1 -1
- package/dist/companies/companies.contract.js +11 -10
- package/dist/crews/crews.contract.d.ts +1010 -196
- package/dist/crews/crews.contract.d.ts.map +1 -1
- package/dist/crews/crews.contract.js +98 -17
- package/dist/crews/crews.contract.spec.d.ts +2 -0
- package/dist/crews/crews.contract.spec.d.ts.map +1 -0
- package/dist/crews/crews.contract.spec.js +67 -0
- package/dist/cron-executions/cron-executions.contract.d.ts +988 -59
- package/dist/cron-executions/cron-executions.contract.d.ts.map +1 -1
- package/dist/cron-executions/cron-executions.contract.js +127 -7
- package/dist/curated-worker-leads/__tests__/disposition-reason.spec.d.ts +2 -0
- package/dist/curated-worker-leads/__tests__/disposition-reason.spec.d.ts.map +1 -0
- package/dist/curated-worker-leads/__tests__/disposition-reason.spec.js +40 -0
- package/dist/curated-worker-leads/candidate-coordination-snapshot.spec.d.ts +2 -0
- package/dist/curated-worker-leads/candidate-coordination-snapshot.spec.d.ts.map +1 -0
- package/dist/curated-worker-leads/candidate-coordination-snapshot.spec.js +16 -0
- package/dist/curated-worker-leads/candidate-coordination.contract.d.ts +21650 -0
- package/dist/curated-worker-leads/candidate-coordination.contract.d.ts.map +1 -0
- package/dist/curated-worker-leads/candidate-coordination.contract.js +921 -0
- package/dist/curated-worker-leads/candidate-coordination.contract.spec.d.ts +2 -0
- package/dist/curated-worker-leads/candidate-coordination.contract.spec.d.ts.map +1 -0
- package/dist/curated-worker-leads/candidate-coordination.contract.spec.js +51 -0
- package/dist/curated-worker-leads/candidate-edit-session.contract.d.ts +2364 -0
- package/dist/curated-worker-leads/candidate-edit-session.contract.d.ts.map +1 -0
- package/dist/curated-worker-leads/candidate-edit-session.contract.js +173 -0
- package/dist/curated-worker-leads/consent-queue.contract.d.ts +4497 -0
- package/dist/curated-worker-leads/consent-queue.contract.d.ts.map +1 -0
- package/dist/curated-worker-leads/consent-queue.contract.js +201 -0
- package/dist/curated-worker-leads/contact-history.spec.d.ts +2 -0
- package/dist/curated-worker-leads/contact-history.spec.d.ts.map +1 -0
- package/dist/curated-worker-leads/contact-history.spec.js +88 -0
- package/dist/curated-worker-leads/contact-session.contract.spec.d.ts +2 -0
- package/dist/curated-worker-leads/contact-session.contract.spec.d.ts.map +1 -0
- package/dist/curated-worker-leads/contact-session.contract.spec.js +315 -0
- package/dist/curated-worker-leads/curated-worker-lead-config.contract.d.ts +489 -0
- package/dist/curated-worker-leads/curated-worker-lead-config.contract.d.ts.map +1 -0
- package/dist/curated-worker-leads/curated-worker-lead-config.contract.js +88 -0
- package/dist/curated-worker-leads/curated-worker-leads.contract.d.ts +135 -0
- package/dist/curated-worker-leads/curated-worker-leads.contract.d.ts.map +1 -0
- package/dist/curated-worker-leads/curated-worker-leads.contract.js +32 -0
- package/dist/curated-worker-leads/job-candidate-cards.spec.d.ts +2 -0
- package/dist/curated-worker-leads/job-candidate-cards.spec.d.ts.map +1 -0
- package/dist/curated-worker-leads/job-candidate-cards.spec.js +157 -0
- package/dist/curated-worker-leads/job-candidates.spec.d.ts +2 -0
- package/dist/curated-worker-leads/job-candidates.spec.d.ts.map +1 -0
- package/dist/curated-worker-leads/job-candidates.spec.js +140 -0
- package/dist/curated-worker-leads/job-feed-match-counts.contract.spec.d.ts +2 -0
- package/dist/curated-worker-leads/job-feed-match-counts.contract.spec.d.ts.map +1 -0
- package/dist/curated-worker-leads/job-feed-match-counts.contract.spec.js +19 -0
- package/dist/curated-worker-leads/jobs-tab.contract.d.ts +18365 -0
- package/dist/curated-worker-leads/jobs-tab.contract.d.ts.map +1 -0
- package/dist/curated-worker-leads/jobs-tab.contract.js +642 -0
- package/dist/curated-worker-leads/lead-agent-area.contract.d.ts +348 -0
- package/dist/curated-worker-leads/lead-agent-area.contract.d.ts.map +1 -0
- package/dist/curated-worker-leads/lead-agent-area.contract.js +51 -0
- package/dist/curated-worker-leads/owned-jobs-tab.contract.d.ts +1116 -0
- package/dist/curated-worker-leads/owned-jobs-tab.contract.d.ts.map +1 -0
- package/dist/curated-worker-leads/owned-jobs-tab.contract.js +93 -0
- package/dist/curated-workers/curated-filter-additions.spec.d.ts +2 -0
- package/dist/curated-workers/curated-filter-additions.spec.d.ts.map +1 -0
- package/dist/curated-workers/curated-filter-additions.spec.js +17 -0
- package/dist/curated-workers/curated-job-seeking.spec.d.ts +2 -0
- package/dist/curated-workers/curated-job-seeking.spec.d.ts.map +1 -0
- package/dist/curated-workers/curated-job-seeking.spec.js +53 -0
- package/dist/curated-workers/curated-workers-id-documents.spec.d.ts +2 -0
- package/dist/curated-workers/curated-workers-id-documents.spec.d.ts.map +1 -0
- package/dist/curated-workers/curated-workers-id-documents.spec.js +38 -0
- package/dist/curated-workers/curated-workers.contract.d.ts +6160 -1906
- package/dist/curated-workers/curated-workers.contract.d.ts.map +1 -1
- package/dist/curated-workers/curated-workers.contract.js +333 -51
- package/dist/dashboards/agent-daily-metrics.contract.d.ts +10 -10
- package/dist/dashboards/agent-daily-metrics.contract.js +1 -1
- package/dist/dashboards/dashboard-widgets.contract.d.ts +3800 -496
- package/dist/dashboards/dashboard-widgets.contract.d.ts.map +1 -1
- package/dist/dashboards/dashboard-widgets.contract.js +527 -29
- package/dist/dashboards/dashboard.contract.d.ts +8 -8
- package/dist/document-intake/document-intake.contract.d.ts +3132 -0
- package/dist/document-intake/document-intake.contract.d.ts.map +1 -0
- package/dist/document-intake/document-intake.contract.js +418 -0
- package/dist/export-jobs/export-jobs.contract.d.ts +3918 -0
- package/dist/export-jobs/export-jobs.contract.d.ts.map +1 -0
- package/dist/export-jobs/export-jobs.contract.js +240 -0
- package/dist/exports-events/exports-events.schemas.d.ts +90 -0
- package/dist/exports-events/exports-events.schemas.d.ts.map +1 -0
- package/dist/exports-events/exports-events.schemas.js +56 -0
- package/dist/files/files.contract.d.ts +133 -126
- package/dist/files/files.contract.d.ts.map +1 -1
- package/dist/files/files.contract.js +8 -0
- package/dist/health/health.contract.d.ts +4 -4
- package/dist/index.d.ts +82 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +87 -1
- package/dist/interactions/interactions.contract.d.ts +162 -0
- package/dist/interactions/interactions.contract.d.ts.map +1 -0
- package/dist/interactions/interactions.contract.js +42 -0
- package/dist/job-clusters/job-clusters.contract.d.ts +1584 -0
- package/dist/job-clusters/job-clusters.contract.d.ts.map +1 -0
- package/dist/job-clusters/job-clusters.contract.js +133 -0
- package/dist/jobs/jobs.contract.d.ts +16517 -8495
- package/dist/jobs/jobs.contract.d.ts.map +1 -1
- package/dist/jobs/jobs.contract.js +394 -190
- package/dist/jobs/jobs.contract.spec.d.ts +2 -0
- package/dist/jobs/jobs.contract.spec.d.ts.map +1 -0
- package/dist/jobs/jobs.contract.spec.js +70 -0
- package/dist/kpi-impersonation/kpi-impersonation.contract.d.ts +75 -75
- package/dist/lead-assignments/lead-assignments.contract.d.ts +2933 -1122
- package/dist/lead-assignments/lead-assignments.contract.d.ts.map +1 -1
- package/dist/lead-assignments/lead-assignments.contract.js +29 -7
- package/dist/lead-distribution/agent-lead-distribution.contract.d.ts +328 -64
- package/dist/lead-distribution/agent-lead-distribution.contract.d.ts.map +1 -1
- package/dist/lead-distribution/agent-lead-distribution.contract.js +1 -1
- package/dist/lead-distribution/lead-distribution-config.contract.d.ts +31 -31
- package/dist/leads/leads.contract.d.ts +830 -368
- package/dist/leads/leads.contract.d.ts.map +1 -1
- package/dist/leads/leads.contract.js +106 -26
- package/dist/locations/locations.contract.d.ts +36 -36
- package/dist/notifications/notifications.contract.d.ts +1039 -0
- package/dist/notifications/notifications.contract.d.ts.map +1 -0
- package/dist/notifications/notifications.contract.js +110 -0
- package/dist/offices/offices.contract.d.ts +210 -60
- package/dist/offices/offices.contract.d.ts.map +1 -1
- package/dist/offices/offices.contract.js +18 -4
- package/dist/outreach/__tests__/outreach-claim.test.d.ts +2 -0
- package/dist/outreach/__tests__/outreach-claim.test.d.ts.map +1 -0
- package/dist/outreach/__tests__/outreach-claim.test.js +97 -0
- package/dist/outreach/__tests__/outreach-confirm-release.test.d.ts +2 -0
- package/dist/outreach/__tests__/outreach-confirm-release.test.d.ts.map +1 -0
- package/dist/outreach/__tests__/outreach-confirm-release.test.js +98 -0
- package/dist/outreach/__tests__/outreach-routes.test.d.ts +2 -0
- package/dist/outreach/__tests__/outreach-routes.test.d.ts.map +1 -0
- package/dist/outreach/__tests__/outreach-routes.test.js +57 -0
- package/dist/outreach/__tests__/outreach.schemas.test.d.ts +2 -0
- package/dist/outreach/__tests__/outreach.schemas.test.d.ts.map +1 -0
- package/dist/outreach/__tests__/outreach.schemas.test.js +140 -0
- package/dist/outreach/outreach.contract.d.ts +809 -0
- package/dist/outreach/outreach.contract.d.ts.map +1 -0
- package/dist/outreach/outreach.contract.js +195 -0
- package/dist/outreach/outreach.schemas.d.ts +113 -0
- package/dist/outreach/outreach.schemas.d.ts.map +1 -0
- package/dist/outreach/outreach.schemas.js +132 -0
- package/dist/own-research/own-research.contract.d.ts +1356 -552
- package/dist/own-research/own-research.contract.d.ts.map +1 -1
- package/dist/own-research/own-research.contract.js +14 -3
- package/dist/postcodes/postcodes.contract.d.ts +16 -16
- package/dist/proofs/proof-category.enum.d.ts +4 -0
- package/dist/proofs/proof-category.enum.d.ts.map +1 -0
- package/dist/proofs/proof-category.enum.js +5 -0
- package/dist/proofs/proof-entity-type.enum.d.ts +4 -0
- package/dist/proofs/proof-entity-type.enum.d.ts.map +1 -0
- package/dist/proofs/proof-entity-type.enum.js +5 -0
- package/dist/proofs/proof-type.enum.d.ts +28 -0
- package/dist/proofs/proof-type.enum.d.ts.map +1 -0
- package/dist/proofs/proof-type.enum.js +14 -0
- package/dist/proofs/proofs.contract.d.ts +3009 -0
- package/dist/proofs/proofs.contract.d.ts.map +1 -0
- package/dist/proofs/proofs.contract.js +92 -0
- package/dist/proofs/proofs.dtos.d.ts +1319 -0
- package/dist/proofs/proofs.dtos.d.ts.map +1 -0
- package/dist/proofs/proofs.dtos.js +178 -0
- package/dist/qualifications/qualifications.contract.d.ts +94 -94
- package/dist/realtime/data-changed.d.ts +21 -0
- package/dist/realtime/data-changed.d.ts.map +1 -0
- package/dist/realtime/data-changed.js +37 -0
- package/dist/shared/booking-history.schema.d.ts +27 -0
- package/dist/shared/booking-history.schema.d.ts.map +1 -0
- package/dist/shared/booking-history.schema.js +22 -0
- package/dist/shared/booking-history.spec.d.ts +2 -0
- package/dist/shared/booking-history.spec.d.ts.map +1 -0
- package/dist/shared/booking-history.spec.js +44 -0
- package/dist/shared/contact-suppressions.contract.d.ts +22 -0
- package/dist/shared/contact-suppressions.contract.d.ts.map +1 -0
- package/dist/shared/contact-suppressions.contract.js +13 -0
- package/dist/shared/live-booking.schema.d.ts +57 -0
- package/dist/shared/live-booking.schema.d.ts.map +1 -0
- package/dist/shared/live-booking.schema.js +34 -0
- package/dist/shared/summary-schemas.d.ts +218 -0
- package/dist/shared/summary-schemas.d.ts.map +1 -0
- package/dist/shared/summary-schemas.js +56 -0
- package/dist/sheets-sync/__tests__/sheets-sync-events.schemas.test.d.ts +2 -0
- package/dist/sheets-sync/__tests__/sheets-sync-events.schemas.test.d.ts.map +1 -0
- package/dist/sheets-sync/__tests__/sheets-sync-events.schemas.test.js +20 -0
- package/dist/sheets-sync/__tests__/tab-sync-config.schema.test.d.ts +2 -0
- package/dist/sheets-sync/__tests__/tab-sync-config.schema.test.d.ts.map +1 -0
- package/dist/sheets-sync/__tests__/tab-sync-config.schema.test.js +41 -0
- package/dist/sheets-sync/sheets-sync-events.schemas.d.ts +43 -0
- package/dist/sheets-sync/sheets-sync-events.schemas.d.ts.map +1 -0
- package/dist/sheets-sync/sheets-sync-events.schemas.js +29 -0
- package/dist/sheets-sync/sheets-sync.contract.d.ts +7258 -0
- package/dist/sheets-sync/sheets-sync.contract.d.ts.map +1 -0
- package/dist/sheets-sync/sheets-sync.contract.js +323 -0
- package/dist/telegram/telegram.contract.d.ts +727 -0
- package/dist/telegram/telegram.contract.d.ts.map +1 -0
- package/dist/telegram/telegram.contract.js +75 -0
- package/dist/trades/trade-rate-assessment.d.ts +18 -0
- package/dist/trades/trade-rate-assessment.d.ts.map +1 -0
- package/dist/trades/trade-rate-assessment.js +46 -0
- package/dist/trades/trade-rate-assessment.spec.d.ts +2 -0
- package/dist/trades/trade-rate-assessment.spec.d.ts.map +1 -0
- package/dist/trades/trade-rate-assessment.spec.js +223 -0
- package/dist/trades/trades.contract.d.ts +111 -0
- package/dist/trades/trades.contract.d.ts.map +1 -1
- package/dist/trades/trades.contract.js +49 -1
- package/dist/trades/trades.contract.spec.d.ts +2 -0
- package/dist/trades/trades.contract.spec.d.ts.map +1 -0
- package/dist/trades/trades.contract.spec.js +173 -0
- package/dist/user-access-grants/build-user-access-grant-rules.d.ts +10 -0
- package/dist/user-access-grants/build-user-access-grant-rules.d.ts.map +1 -0
- package/dist/user-access-grants/build-user-access-grant-rules.js +69 -0
- package/dist/user-access-grants/build-user-access-grant-rules.spec.d.ts +2 -0
- package/dist/user-access-grants/build-user-access-grant-rules.spec.d.ts.map +1 -0
- package/dist/user-access-grants/build-user-access-grant-rules.spec.js +77 -0
- package/dist/user-access-grants/user-access-grant-templates.json +454 -0
- package/dist/user-access-grants/user-access-grants.contract.d.ts +3886 -0
- package/dist/user-access-grants/user-access-grants.contract.d.ts.map +1 -0
- package/dist/user-access-grants/user-access-grants.contract.js +189 -0
- package/dist/user-access-grants/user-access-grants.contract.spec.d.ts +2 -0
- package/dist/user-access-grants/user-access-grants.contract.spec.d.ts.map +1 -0
- package/dist/user-access-grants/user-access-grants.contract.spec.js +149 -0
- package/dist/users/users.contract.d.ts +1959 -349
- package/dist/users/users.contract.d.ts.map +1 -1
- package/dist/users/users.contract.js +222 -37
- package/dist/users/users.contract.spec.d.ts +2 -0
- package/dist/users/users.contract.spec.d.ts.map +1 -0
- package/dist/users/users.contract.spec.js +103 -0
- package/dist/worker-identity-cases/worker-identity-cases.contract.d.ts +4609 -0
- package/dist/worker-identity-cases/worker-identity-cases.contract.d.ts.map +1 -0
- package/dist/worker-identity-cases/worker-identity-cases.contract.js +409 -0
- package/dist/worker-merge-proposals/worker-merge-proposals.contract.d.ts +1511 -0
- package/dist/worker-merge-proposals/worker-merge-proposals.contract.d.ts.map +1 -0
- package/dist/worker-merge-proposals/worker-merge-proposals.contract.js +150 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.d.ts +1106 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.d.ts.map +1 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.js +85 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.spec.d.ts +2 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.spec.d.ts.map +1 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.spec.js +216 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.schemas.d.ts +453 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.schemas.d.ts.map +1 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.schemas.js +109 -0
- package/dist/workers/do-not-contact.contract.d.ts +46 -0
- package/dist/workers/do-not-contact.contract.d.ts.map +1 -0
- package/dist/workers/do-not-contact.contract.js +41 -0
- package/dist/workers/do-not-contact.contract.spec.d.ts +2 -0
- package/dist/workers/do-not-contact.contract.spec.d.ts.map +1 -0
- package/dist/workers/do-not-contact.contract.spec.js +47 -0
- package/dist/workers/duplicate-group-worker.spec.d.ts +2 -0
- package/dist/workers/duplicate-group-worker.spec.d.ts.map +1 -0
- package/dist/workers/duplicate-group-worker.spec.js +34 -0
- package/dist/workers/filter-exact-flags.spec.d.ts +2 -0
- package/dist/workers/filter-exact-flags.spec.d.ts.map +1 -0
- package/dist/workers/filter-exact-flags.spec.js +37 -0
- package/dist/workers/worker-source-attribution.contract.spec.d.ts +2 -0
- package/dist/workers/worker-source-attribution.contract.spec.d.ts.map +1 -0
- package/dist/workers/worker-source-attribution.contract.spec.js +442 -0
- package/dist/workers/worker-source.spec.d.ts +2 -0
- package/dist/workers/worker-source.spec.d.ts.map +1 -0
- package/dist/workers/worker-source.spec.js +13 -0
- package/dist/workers/worker-status-facets.spec.d.ts +2 -0
- package/dist/workers/worker-status-facets.spec.d.ts.map +1 -0
- package/dist/workers/worker-status-facets.spec.js +34 -0
- package/dist/workers/workers.contract.d.ts +19534 -5969
- package/dist/workers/workers.contract.d.ts.map +1 -1
- package/dist/workers/workers.contract.js +1096 -113
- package/dist/workers/workers.contract.spec.d.ts +2 -0
- package/dist/workers/workers.contract.spec.d.ts.map +1 -0
- package/dist/workers/workers.contract.spec.js +31 -0
- package/package.json +5 -4
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const EligibleWorkerAreaCountsSchema: z.ZodObject<{
|
|
3
|
+
areaCounts: z.ZodRecord<z.ZodString, z.ZodNumber>;
|
|
4
|
+
totalCount: z.ZodNumber;
|
|
5
|
+
}, "strip", z.ZodTypeAny, {
|
|
6
|
+
totalCount: number;
|
|
7
|
+
areaCounts: Record<string, number>;
|
|
8
|
+
}, {
|
|
9
|
+
totalCount: number;
|
|
10
|
+
areaCounts: Record<string, number>;
|
|
11
|
+
}>;
|
|
12
|
+
export type EligibleWorkerAreaCounts = z.infer<typeof EligibleWorkerAreaCountsSchema>;
|
|
13
|
+
export declare const curatedWorkerLeadsContract: {
|
|
14
|
+
areaCounts: {
|
|
15
|
+
metadata: {
|
|
16
|
+
tags: string[];
|
|
17
|
+
};
|
|
18
|
+
summary: "Eligible curated-worker counts per postcode area";
|
|
19
|
+
method: "GET";
|
|
20
|
+
path: "/v2/curated-worker-leads/area-counts";
|
|
21
|
+
responses: {
|
|
22
|
+
401: z.ZodObject<{
|
|
23
|
+
statusCode: z.ZodNumber;
|
|
24
|
+
message: z.ZodString;
|
|
25
|
+
code: z.ZodString;
|
|
26
|
+
details: z.ZodOptional<z.ZodUnknown>;
|
|
27
|
+
timestamp: z.ZodString;
|
|
28
|
+
path: z.ZodString;
|
|
29
|
+
correlationId: z.ZodOptional<z.ZodString>;
|
|
30
|
+
}, "strip", z.ZodTypeAny, {
|
|
31
|
+
message: string;
|
|
32
|
+
code: string;
|
|
33
|
+
path: string;
|
|
34
|
+
statusCode: number;
|
|
35
|
+
timestamp: string;
|
|
36
|
+
details?: unknown;
|
|
37
|
+
correlationId?: string | undefined;
|
|
38
|
+
}, {
|
|
39
|
+
message: string;
|
|
40
|
+
code: string;
|
|
41
|
+
path: string;
|
|
42
|
+
statusCode: number;
|
|
43
|
+
timestamp: string;
|
|
44
|
+
details?: unknown;
|
|
45
|
+
correlationId?: string | undefined;
|
|
46
|
+
}>;
|
|
47
|
+
400: z.ZodObject<{
|
|
48
|
+
statusCode: z.ZodNumber;
|
|
49
|
+
message: z.ZodString;
|
|
50
|
+
code: z.ZodString;
|
|
51
|
+
details: z.ZodOptional<z.ZodUnknown>;
|
|
52
|
+
timestamp: z.ZodString;
|
|
53
|
+
path: z.ZodString;
|
|
54
|
+
correlationId: z.ZodOptional<z.ZodString>;
|
|
55
|
+
}, "strip", z.ZodTypeAny, {
|
|
56
|
+
message: string;
|
|
57
|
+
code: string;
|
|
58
|
+
path: string;
|
|
59
|
+
statusCode: number;
|
|
60
|
+
timestamp: string;
|
|
61
|
+
details?: unknown;
|
|
62
|
+
correlationId?: string | undefined;
|
|
63
|
+
}, {
|
|
64
|
+
message: string;
|
|
65
|
+
code: string;
|
|
66
|
+
path: string;
|
|
67
|
+
statusCode: number;
|
|
68
|
+
timestamp: string;
|
|
69
|
+
details?: unknown;
|
|
70
|
+
correlationId?: string | undefined;
|
|
71
|
+
}>;
|
|
72
|
+
500: z.ZodObject<{
|
|
73
|
+
statusCode: z.ZodNumber;
|
|
74
|
+
message: z.ZodString;
|
|
75
|
+
code: z.ZodString;
|
|
76
|
+
details: z.ZodOptional<z.ZodUnknown>;
|
|
77
|
+
timestamp: z.ZodString;
|
|
78
|
+
path: z.ZodString;
|
|
79
|
+
correlationId: z.ZodOptional<z.ZodString>;
|
|
80
|
+
}, "strip", z.ZodTypeAny, {
|
|
81
|
+
message: string;
|
|
82
|
+
code: string;
|
|
83
|
+
path: string;
|
|
84
|
+
statusCode: number;
|
|
85
|
+
timestamp: string;
|
|
86
|
+
details?: unknown;
|
|
87
|
+
correlationId?: string | undefined;
|
|
88
|
+
}, {
|
|
89
|
+
message: string;
|
|
90
|
+
code: string;
|
|
91
|
+
path: string;
|
|
92
|
+
statusCode: number;
|
|
93
|
+
timestamp: string;
|
|
94
|
+
details?: unknown;
|
|
95
|
+
correlationId?: string | undefined;
|
|
96
|
+
}>;
|
|
97
|
+
200: z.ZodObject<{
|
|
98
|
+
areaCounts: z.ZodRecord<z.ZodString, z.ZodNumber>;
|
|
99
|
+
totalCount: z.ZodNumber;
|
|
100
|
+
}, "strip", z.ZodTypeAny, {
|
|
101
|
+
totalCount: number;
|
|
102
|
+
areaCounts: Record<string, number>;
|
|
103
|
+
}, {
|
|
104
|
+
totalCount: number;
|
|
105
|
+
areaCounts: Record<string, number>;
|
|
106
|
+
}>;
|
|
107
|
+
403: z.ZodObject<{
|
|
108
|
+
statusCode: z.ZodNumber;
|
|
109
|
+
message: z.ZodString;
|
|
110
|
+
code: z.ZodString;
|
|
111
|
+
details: z.ZodOptional<z.ZodUnknown>;
|
|
112
|
+
timestamp: z.ZodString;
|
|
113
|
+
path: z.ZodString;
|
|
114
|
+
correlationId: z.ZodOptional<z.ZodString>;
|
|
115
|
+
}, "strip", z.ZodTypeAny, {
|
|
116
|
+
message: string;
|
|
117
|
+
code: string;
|
|
118
|
+
path: string;
|
|
119
|
+
statusCode: number;
|
|
120
|
+
timestamp: string;
|
|
121
|
+
details?: unknown;
|
|
122
|
+
correlationId?: string | undefined;
|
|
123
|
+
}, {
|
|
124
|
+
message: string;
|
|
125
|
+
code: string;
|
|
126
|
+
path: string;
|
|
127
|
+
statusCode: number;
|
|
128
|
+
timestamp: string;
|
|
129
|
+
details?: unknown;
|
|
130
|
+
correlationId?: string | undefined;
|
|
131
|
+
}>;
|
|
132
|
+
};
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
//# sourceMappingURL=curated-worker-leads.contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curated-worker-leads.contract.d.ts","sourceRoot":"","sources":["../../contracts/curated-worker-leads/curated-worker-leads.contract.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,8BAA8B;;;;;;;;;EAKM,CAAC;AAClD,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAC5C,OAAO,8BAA8B,CACtC,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmBtC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.curatedWorkerLeadsContract = exports.EligibleWorkerAreaCountsSchema = void 0;
|
|
4
|
+
const zod_openapi_1 = require("@anatine/zod-openapi");
|
|
5
|
+
const core_1 = require("@ts-rest/core");
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
const error_schemas_1 = require("../common/error-schemas");
|
|
8
|
+
(0, zod_openapi_1.extendZodWithOpenApi)(zod_1.z);
|
|
9
|
+
const c = (0, core_1.initContract)();
|
|
10
|
+
exports.EligibleWorkerAreaCountsSchema = zod_1.z
|
|
11
|
+
.object({
|
|
12
|
+
areaCounts: zod_1.z.record(zod_1.z.string(), zod_1.z.number().int()),
|
|
13
|
+
totalCount: zod_1.z.number().int(),
|
|
14
|
+
})
|
|
15
|
+
.openapi({ title: 'EligibleWorkerAreaCounts' });
|
|
16
|
+
exports.curatedWorkerLeadsContract = c.router({
|
|
17
|
+
areaCounts: {
|
|
18
|
+
method: 'GET',
|
|
19
|
+
path: '/curated-worker-leads/area-counts',
|
|
20
|
+
responses: { 200: exports.EligibleWorkerAreaCountsSchema, 403: error_schemas_1.ErrorResponseSchema },
|
|
21
|
+
summary: 'Eligible curated-worker counts per postcode area',
|
|
22
|
+
metadata: { tags: ['Curated Worker Leads'] },
|
|
23
|
+
},
|
|
24
|
+
}, {
|
|
25
|
+
pathPrefix: '/v2',
|
|
26
|
+
commonResponses: {
|
|
27
|
+
400: error_schemas_1.ErrorResponseSchema,
|
|
28
|
+
401: error_schemas_1.ErrorResponseSchema,
|
|
29
|
+
403: error_schemas_1.ErrorResponseSchema,
|
|
30
|
+
500: error_schemas_1.ErrorResponseSchema,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-candidate-cards.spec.d.ts","sourceRoot":"","sources":["../../contracts/curated-worker-leads/job-candidate-cards.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const jobs_tab_contract_1 = require("./jobs-tab.contract");
|
|
4
|
+
const FORBIDDEN_KEYS = [
|
|
5
|
+
'phoneNumbers',
|
|
6
|
+
'email',
|
|
7
|
+
'nino',
|
|
8
|
+
'shareCode',
|
|
9
|
+
'idDocuments',
|
|
10
|
+
'source',
|
|
11
|
+
'createdBy',
|
|
12
|
+
'createdByUserId',
|
|
13
|
+
];
|
|
14
|
+
describe('JobCandidateCardSchema / OwnedCandidateCardSchema', () => {
|
|
15
|
+
it('reuses the candidate cards body schema in the hydration route', () => {
|
|
16
|
+
expect(jobs_tab_contract_1.jobsTabContract.getCandidateCards.responses[200]).toBe(jobs_tab_contract_1.CandidateCardsBodySchema);
|
|
17
|
+
});
|
|
18
|
+
it('curated projection contains no sensitive keys', () => {
|
|
19
|
+
const keys = Object.keys(jobs_tab_contract_1.JobCandidateCardSchema.shape);
|
|
20
|
+
for (const forbidden of FORBIDDEN_KEYS) {
|
|
21
|
+
expect(keys).not.toContain(forbidden);
|
|
22
|
+
}
|
|
23
|
+
expect(keys).toContain('hasPhoneNumber');
|
|
24
|
+
expect(keys).toContain('firstName');
|
|
25
|
+
expect(keys).toContain('location');
|
|
26
|
+
expect(keys).toContain('trades');
|
|
27
|
+
expect(keys).toContain('qualifications');
|
|
28
|
+
});
|
|
29
|
+
it('owned projection contains no sensitive keys', () => {
|
|
30
|
+
const keys = Object.keys(jobs_tab_contract_1.OwnedCandidateCardSchema.shape);
|
|
31
|
+
for (const forbidden of FORBIDDEN_KEYS) {
|
|
32
|
+
expect(keys).not.toContain(forbidden);
|
|
33
|
+
}
|
|
34
|
+
expect(keys).toContain('hasPhoneNumber');
|
|
35
|
+
});
|
|
36
|
+
it('nested projections omit upload, phone, address, and coordinate fields', () => {
|
|
37
|
+
expect(Object.keys(jobs_tab_contract_1.JobCandidateQualificationSchema.shape)).not.toContain('proofDocumentFileId');
|
|
38
|
+
expect(Object.keys(jobs_tab_contract_1.OwnedCandidateQualificationSchema.shape)).not.toContain('proofDocumentFileId');
|
|
39
|
+
expect(Object.keys(jobs_tab_contract_1.OwnedCandidateCrewSchema.shape)).not.toContain('leadPhone');
|
|
40
|
+
const locationKeys = Object.keys(jobs_tab_contract_1.CandidateLocationSchema.shape);
|
|
41
|
+
for (const forbidden of ['address', 'latitude', 'longitude']) {
|
|
42
|
+
expect(locationKeys).not.toContain(forbidden);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
it('parsing a full DTO strips unknown sensitive keys', () => {
|
|
46
|
+
const parsed = jobs_tab_contract_1.JobCandidateCardSchema.parse({
|
|
47
|
+
id: '7d5c0f4e-8f60-4bff-b544-111111111111',
|
|
48
|
+
firstName: 'Ana',
|
|
49
|
+
lastName: 'Pop',
|
|
50
|
+
englishLevel: 'ADVANCED',
|
|
51
|
+
nationality: 'ROMANIAN',
|
|
52
|
+
hasTools: true,
|
|
53
|
+
hasPpe: true,
|
|
54
|
+
transportation: null,
|
|
55
|
+
location: { postcode: 'E1 6AN' },
|
|
56
|
+
offerOpenness: 'OPEN',
|
|
57
|
+
createdAt: new Date().toISOString(),
|
|
58
|
+
updatedAt: new Date().toISOString(),
|
|
59
|
+
trades: [],
|
|
60
|
+
qualifications: [],
|
|
61
|
+
hasPhoneNumber: true,
|
|
62
|
+
phoneNumbers: [{ phoneNumber: '+441234567890' }],
|
|
63
|
+
email: 'x@y.z',
|
|
64
|
+
nino: 'QQ123456C',
|
|
65
|
+
});
|
|
66
|
+
expect(parsed).not.toHaveProperty('phoneNumbers');
|
|
67
|
+
expect(parsed).not.toHaveProperty('email');
|
|
68
|
+
expect(parsed).not.toHaveProperty('nino');
|
|
69
|
+
});
|
|
70
|
+
it('strips sensitive keys nested inside curated candidate data', () => {
|
|
71
|
+
const parsed = jobs_tab_contract_1.JobCandidateCardSchema.parse({
|
|
72
|
+
id: '7d5c0f4e-8f60-4bff-b544-111111111111',
|
|
73
|
+
firstName: 'Ana',
|
|
74
|
+
hasTools: true,
|
|
75
|
+
hasPpe: true,
|
|
76
|
+
location: {
|
|
77
|
+
postcode: 'E1 6AN',
|
|
78
|
+
postTown: 'London',
|
|
79
|
+
address: '10 Private Street',
|
|
80
|
+
latitude: 51.5,
|
|
81
|
+
longitude: -0.1,
|
|
82
|
+
},
|
|
83
|
+
offerOpenness: 'OPEN',
|
|
84
|
+
createdAt: new Date().toISOString(),
|
|
85
|
+
updatedAt: new Date().toISOString(),
|
|
86
|
+
qualifications: [
|
|
87
|
+
{
|
|
88
|
+
id: '11111111-1111-4111-8111-111111111111',
|
|
89
|
+
qualificationId: '22222222-2222-4222-8222-222222222222',
|
|
90
|
+
qualificationTypeId: null,
|
|
91
|
+
issueDate: null,
|
|
92
|
+
expiryDate: null,
|
|
93
|
+
referenceNumber: null,
|
|
94
|
+
proofDocumentFileId: '33333333-3333-4333-8333-333333333333',
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
hasPhoneNumber: true,
|
|
98
|
+
});
|
|
99
|
+
expect(parsed.location).not.toHaveProperty('address');
|
|
100
|
+
expect(parsed.location).not.toHaveProperty('latitude');
|
|
101
|
+
expect(parsed.location).not.toHaveProperty('longitude');
|
|
102
|
+
expect(parsed.qualifications?.[0]).not.toHaveProperty('proofDocumentFileId');
|
|
103
|
+
});
|
|
104
|
+
it('strips sensitive keys nested inside owned candidate data', () => {
|
|
105
|
+
const parsed = jobs_tab_contract_1.OwnedCandidateCardSchema.parse({
|
|
106
|
+
id: '7d5c0f4e-8f60-4bff-b544-111111111111',
|
|
107
|
+
firstName: 'Ana',
|
|
108
|
+
hasTools: true,
|
|
109
|
+
hasPpe: true,
|
|
110
|
+
offerOpenness: 'OPEN',
|
|
111
|
+
createdAt: new Date().toISOString(),
|
|
112
|
+
updatedAt: new Date().toISOString(),
|
|
113
|
+
qualifications: [
|
|
114
|
+
{
|
|
115
|
+
qualificationId: '22222222-2222-4222-8222-222222222222',
|
|
116
|
+
proofDocumentFileId: '33333333-3333-4333-8333-333333333333',
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
crew: {
|
|
120
|
+
id: '44444444-4444-4444-8444-444444444444',
|
|
121
|
+
name: 'Crew A',
|
|
122
|
+
leadName: 'Private Lead',
|
|
123
|
+
leadPhone: '+441234567890',
|
|
124
|
+
},
|
|
125
|
+
location: {
|
|
126
|
+
postcode: 'E1 6AN',
|
|
127
|
+
address: '10 Private Street',
|
|
128
|
+
latitude: 51.5,
|
|
129
|
+
longitude: -0.1,
|
|
130
|
+
},
|
|
131
|
+
hasPhoneNumber: true,
|
|
132
|
+
});
|
|
133
|
+
expect(parsed.qualifications?.[0]).not.toHaveProperty('proofDocumentFileId');
|
|
134
|
+
expect(parsed.crew).not.toHaveProperty('leadPhone');
|
|
135
|
+
expect(parsed.crew).not.toHaveProperty('leadName');
|
|
136
|
+
expect(parsed.location).not.toHaveProperty('address');
|
|
137
|
+
expect(parsed.location).not.toHaveProperty('latitude');
|
|
138
|
+
expect(parsed.location).not.toHaveProperty('longitude');
|
|
139
|
+
});
|
|
140
|
+
it('getCandidateCards route is job-scoped', () => {
|
|
141
|
+
expect(jobs_tab_contract_1.jobsTabContract.getCandidateCards.path).toBe('/v2/curated-worker-leads/jobs/:jobId/candidate-cards');
|
|
142
|
+
expect(jobs_tab_contract_1.jobsTabContract.getCandidateCards.query.safeParse({
|
|
143
|
+
ownedIds: '7d5c0f4e-8f60-4bff-b544-111111111111',
|
|
144
|
+
}).success).toBe(true);
|
|
145
|
+
expect(Object.keys(jobs_tab_contract_1.jobsTabContract.getCandidateCards.query.shape)).toContain('ownedIds');
|
|
146
|
+
expect(Object.keys(jobs_tab_contract_1.jobsTabContract.getCandidateCards.query.shape)).not.toContain('ownIds');
|
|
147
|
+
});
|
|
148
|
+
it('setDoNotContact accepts an optional jobId', () => {
|
|
149
|
+
const body = jobs_tab_contract_1.jobsTabContract.setDoNotContact.body;
|
|
150
|
+
expect(body.safeParse({ reason: 'NOT_INTERESTED', days: 7 }).success).toBe(true);
|
|
151
|
+
expect(body.safeParse({
|
|
152
|
+
reason: 'NOT_INTERESTED',
|
|
153
|
+
days: 7,
|
|
154
|
+
jobId: '7d5c0f4e-8f60-4bff-b544-111111111111',
|
|
155
|
+
}).success).toBe(true);
|
|
156
|
+
});
|
|
157
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-candidates.spec.d.ts","sourceRoot":"","sources":["../../contracts/curated-worker-leads/job-candidates.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const jobs_tab_contract_1 = require("./jobs-tab.contract");
|
|
4
|
+
describe('JobCandidates schemas', () => {
|
|
5
|
+
const row = {
|
|
6
|
+
subjectKind: 'OWNED',
|
|
7
|
+
subjectId: '4b36e83e-9a72-4c8f-9f6d-1e2a3b4c5d6e',
|
|
8
|
+
distanceKm: 5.2,
|
|
9
|
+
driveMinutes: 22,
|
|
10
|
+
transitMinutes: 48,
|
|
11
|
+
disposition: {
|
|
12
|
+
status: 'OFFER_SENT',
|
|
13
|
+
channel: 'WHATSAPP',
|
|
14
|
+
dispositionAt: '2026-07-02T09:00:00.000Z',
|
|
15
|
+
reason: null,
|
|
16
|
+
comment: null,
|
|
17
|
+
declinedRate: null,
|
|
18
|
+
declinedRateUnit: null,
|
|
19
|
+
},
|
|
20
|
+
lastActivityAt: '2026-07-02T09:00:00.000Z',
|
|
21
|
+
};
|
|
22
|
+
const card = {
|
|
23
|
+
id: row.subjectId,
|
|
24
|
+
firstName: 'Ana',
|
|
25
|
+
lastName: 'Pop',
|
|
26
|
+
englishLevel: 'ADVANCED',
|
|
27
|
+
nationality: 'ROMANIAN',
|
|
28
|
+
hasTools: true,
|
|
29
|
+
hasPpe: true,
|
|
30
|
+
transportation: null,
|
|
31
|
+
location: null,
|
|
32
|
+
offerOpenness: 'OPEN',
|
|
33
|
+
createdAt: '2026-07-01T09:00:00.000Z',
|
|
34
|
+
updatedAt: '2026-07-02T09:00:00.000Z',
|
|
35
|
+
trades: [],
|
|
36
|
+
qualifications: [],
|
|
37
|
+
hasPhoneNumber: true,
|
|
38
|
+
};
|
|
39
|
+
it('parses a full row', () => {
|
|
40
|
+
expect(jobs_tab_contract_1.CandidateRowSchema.parse({
|
|
41
|
+
...row,
|
|
42
|
+
contactedByViewer: true,
|
|
43
|
+
whatsappContact: {
|
|
44
|
+
agent: {
|
|
45
|
+
id: '5c47f94f-ab83-4dc5-a8ef-2f3b4c5d6e7f',
|
|
46
|
+
firstName: 'Alex',
|
|
47
|
+
lastName: 'Smith',
|
|
48
|
+
},
|
|
49
|
+
contactedAt: '2026-07-02T09:00:00.000Z',
|
|
50
|
+
},
|
|
51
|
+
})).toMatchObject({
|
|
52
|
+
subjectId: row.subjectId,
|
|
53
|
+
contactedByViewer: true,
|
|
54
|
+
whatsappContact: {
|
|
55
|
+
agent: { firstName: 'Alex', lastName: 'Smith' },
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
it('parses a never-contacted row (nullables)', () => {
|
|
60
|
+
const parsed = jobs_tab_contract_1.CandidateRowSchema.parse({
|
|
61
|
+
...row,
|
|
62
|
+
driveMinutes: null,
|
|
63
|
+
transitMinutes: null,
|
|
64
|
+
disposition: null,
|
|
65
|
+
lastActivityAt: null,
|
|
66
|
+
whatsappContact: null,
|
|
67
|
+
});
|
|
68
|
+
expect(parsed.disposition).toBeNull();
|
|
69
|
+
expect(parsed.whatsappContact).toBeNull();
|
|
70
|
+
});
|
|
71
|
+
it('parses ordered multi-channel offer evidence', () => {
|
|
72
|
+
const parsed = jobs_tab_contract_1.CandidateRowSchema.parse({
|
|
73
|
+
...row,
|
|
74
|
+
offerChannels: ['WHATSAPP', 'PHONE'],
|
|
75
|
+
offerContactedAt: '2026-07-24T09:01:01.000Z',
|
|
76
|
+
});
|
|
77
|
+
expect(parsed.offerChannels).toEqual(['WHATSAPP', 'PHONE']);
|
|
78
|
+
expect(parsed.offerContactedAt).toBe('2026-07-24T09:01:01.000Z');
|
|
79
|
+
});
|
|
80
|
+
it('keeps pre-field candidate rows compatible', () => {
|
|
81
|
+
const parsed = jobs_tab_contract_1.CandidateRowSchema.parse(row);
|
|
82
|
+
expect(parsed.offerChannels).toBeUndefined();
|
|
83
|
+
expect(parsed.offerContactedAt).toBeUndefined();
|
|
84
|
+
});
|
|
85
|
+
it('parses the response envelope', () => {
|
|
86
|
+
const parsed = jobs_tab_contract_1.JobCandidatesResponseSchema.parse({
|
|
87
|
+
owned: [row],
|
|
88
|
+
curated: [],
|
|
89
|
+
cards: { own: [card], curated: [] },
|
|
90
|
+
totalOwned: 1,
|
|
91
|
+
totalCurated: 0,
|
|
92
|
+
page: 1,
|
|
93
|
+
pageSize: 24,
|
|
94
|
+
totalPages: 1,
|
|
95
|
+
pendingEnrichmentCount: 2,
|
|
96
|
+
workersContactedByViewerCount: 0,
|
|
97
|
+
workersContactedByOthersCount: 0,
|
|
98
|
+
dismissed: [],
|
|
99
|
+
});
|
|
100
|
+
expect(parsed.totalOwned).toBe(1);
|
|
101
|
+
expect(parsed.page).toBe(1);
|
|
102
|
+
expect(parsed.cards.own[0]?.id).toBe(row.subjectId);
|
|
103
|
+
});
|
|
104
|
+
it('requires the atomic candidate card projection', () => {
|
|
105
|
+
expect(() => jobs_tab_contract_1.JobCandidatesResponseSchema.parse({
|
|
106
|
+
owned: [row],
|
|
107
|
+
curated: [],
|
|
108
|
+
totalOwned: 1,
|
|
109
|
+
totalCurated: 0,
|
|
110
|
+
page: 1,
|
|
111
|
+
pageSize: 24,
|
|
112
|
+
totalPages: 1,
|
|
113
|
+
pendingEnrichmentCount: 0,
|
|
114
|
+
workersContactedByViewerCount: 0,
|
|
115
|
+
workersContactedByOthersCount: 0,
|
|
116
|
+
dismissed: [],
|
|
117
|
+
})).toThrow();
|
|
118
|
+
});
|
|
119
|
+
it('parses a row with bookingHistory', () => {
|
|
120
|
+
const parsed = jobs_tab_contract_1.CandidateRowSchema.parse({
|
|
121
|
+
...row,
|
|
122
|
+
bookingHistory: {
|
|
123
|
+
workedTotal: 3,
|
|
124
|
+
workedByMe: 1,
|
|
125
|
+
noShowTotal: 1,
|
|
126
|
+
noShowByMe: 0,
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
expect(parsed.bookingHistory).toEqual({
|
|
130
|
+
workedTotal: 3,
|
|
131
|
+
workedByMe: 1,
|
|
132
|
+
noShowTotal: 1,
|
|
133
|
+
noShowByMe: 0,
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
it('parses a row without bookingHistory (pre-field cached payloads)', () => {
|
|
137
|
+
const parsed = jobs_tab_contract_1.CandidateRowSchema.parse(row);
|
|
138
|
+
expect(parsed.bookingHistory).toBeUndefined();
|
|
139
|
+
});
|
|
140
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-feed-match-counts.contract.spec.d.ts","sourceRoot":"","sources":["../../contracts/curated-worker-leads/job-feed-match-counts.contract.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const jobs_tab_contract_1 = require("./jobs-tab.contract");
|
|
4
|
+
const id = (index) => `00000000-0000-4000-8000-${String(index).padStart(12, '0')}`;
|
|
5
|
+
describe('job feed match-count batch contract', () => {
|
|
6
|
+
it('accepts a comma-separated batch of up to 200 UUIDs', () => {
|
|
7
|
+
const result = jobs_tab_contract_1.jobsTabContract.matchCounts.query.safeParse({
|
|
8
|
+
jobIds: Array.from({ length: 200 }, (_, index) => id(index)).join(','),
|
|
9
|
+
});
|
|
10
|
+
expect(result.success).toBe(true);
|
|
11
|
+
});
|
|
12
|
+
it('rejects malformed IDs and batches larger than 200', () => {
|
|
13
|
+
expect(jobs_tab_contract_1.jobsTabContract.matchCounts.query.safeParse({ jobIds: `${id(1)},nope` })
|
|
14
|
+
.success).toBe(false);
|
|
15
|
+
expect(jobs_tab_contract_1.jobsTabContract.matchCounts.query.safeParse({
|
|
16
|
+
jobIds: Array.from({ length: 201 }, (_, index) => id(index)).join(','),
|
|
17
|
+
}).success).toBe(false);
|
|
18
|
+
});
|
|
19
|
+
});
|