@dakkitor/api-contracts 1.1.154 → 1.5.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.
Files changed (353) hide show
  1. package/dist/abilities/abilities.contract.d.ts +55 -1
  2. package/dist/abilities/abilities.contract.d.ts.map +1 -1
  3. package/dist/abilities/abilities.contract.js +95 -1
  4. package/dist/abilities/abilities.contract.spec.d.ts +2 -0
  5. package/dist/abilities/abilities.contract.spec.d.ts.map +1 -0
  6. package/dist/abilities/abilities.contract.spec.js +145 -0
  7. package/dist/abilities/admin-dashboard.abilities.test.d.ts +2 -0
  8. package/dist/abilities/admin-dashboard.abilities.test.d.ts.map +1 -0
  9. package/dist/abilities/admin-dashboard.abilities.test.js +33 -0
  10. package/dist/abilities/admin.abilities.json +19 -0
  11. package/dist/abilities/bot.abilities.json +13 -4
  12. package/dist/abilities/first-agent.abilities.json +330 -70
  13. package/dist/abilities/interconnection.abilities.json +75 -0
  14. package/dist/abilities/kpi.abilities.json +68 -0
  15. package/dist/abilities/office-manager.abilities.json +111 -0
  16. package/dist/abilities/outreach-service.abilities.json +14 -0
  17. package/dist/abilities/second-agent.abilities.json +430 -43
  18. package/dist/abilities/team-leads.json +71 -6
  19. package/dist/abilities/worker-curator.abilities.json +233 -0
  20. package/dist/actives/actives.contract.d.ts +15521 -19793
  21. package/dist/actives/actives.contract.d.ts.map +1 -1
  22. package/dist/actives/actives.contract.js +517 -114
  23. package/dist/agent-client-links/agent-client-links.contract.d.ts +1431 -291
  24. package/dist/agent-client-links/agent-client-links.contract.d.ts.map +1 -1
  25. package/dist/auth/auth.contract.d.ts +1050 -81
  26. package/dist/auth/auth.contract.d.ts.map +1 -1
  27. package/dist/auth/auth.contract.js +115 -3
  28. package/dist/bookings/booking-worker-summary.spec.d.ts +2 -0
  29. package/dist/bookings/booking-worker-summary.spec.d.ts.map +1 -0
  30. package/dist/bookings/booking-worker-summary.spec.js +25 -0
  31. package/dist/bookings/bookings.contract.d.ts +21631 -27105
  32. package/dist/bookings/bookings.contract.d.ts.map +1 -1
  33. package/dist/bookings/bookings.contract.js +383 -91
  34. package/dist/bookings/bookings.contract.spec.d.ts +2 -0
  35. package/dist/bookings/bookings.contract.spec.d.ts.map +1 -0
  36. package/dist/bookings/bookings.contract.spec.js +11 -0
  37. package/dist/bookings/job-lock.spec.d.ts +2 -0
  38. package/dist/bookings/job-lock.spec.d.ts.map +1 -0
  39. package/dist/bookings/job-lock.spec.js +56 -0
  40. package/dist/bot-parse-cache/bot-parse-cache.contract.d.ts +232 -0
  41. package/dist/bot-parse-cache/bot-parse-cache.contract.d.ts.map +1 -0
  42. package/dist/bot-parse-cache/bot-parse-cache.contract.js +64 -0
  43. package/dist/call-history/call-history.contract.d.ts +1336 -767
  44. package/dist/call-history/call-history.contract.d.ts.map +1 -1
  45. package/dist/call-history/call-history.contract.js +86 -10
  46. package/dist/calls-feed/calls-feed.contract.d.ts +417 -0
  47. package/dist/calls-feed/calls-feed.contract.d.ts.map +1 -0
  48. package/dist/calls-feed/calls-feed.contract.js +32 -0
  49. package/dist/client-contacts/client-contacts.contract.d.ts +410 -226
  50. package/dist/client-contacts/client-contacts.contract.d.ts.map +1 -1
  51. package/dist/client-contacts/client-contacts.contract.js +35 -4
  52. package/dist/clients/clients.contract.d.ts +227 -73
  53. package/dist/clients/clients.contract.d.ts.map +1 -1
  54. package/dist/clients/clients.contract.js +45 -21
  55. package/dist/collaboration-checkings/collaboration-checkings.contract.d.ts +2908 -1834
  56. package/dist/collaboration-checkings/collaboration-checkings.contract.d.ts.map +1 -1
  57. package/dist/collaboration-checkings/collaboration-checkings.contract.js +14 -9
  58. package/dist/collaborations/collaborations.contract.d.ts +2676 -1409
  59. package/dist/collaborations/collaborations.contract.d.ts.map +1 -1
  60. package/dist/collaborations/collaborations.contract.js +33 -9
  61. package/dist/common/call-rating.schema.d.ts.map +1 -1
  62. package/dist/common/call-rating.schema.js +4 -2
  63. package/dist/common/common-schemas.d.ts +59 -11
  64. package/dist/common/common-schemas.d.ts.map +1 -1
  65. package/dist/common/common-schemas.js +55 -29
  66. package/dist/common/error-schemas.d.ts +2 -2
  67. package/dist/common/pagination-query.schema.d.ts +13 -2
  68. package/dist/common/pagination-query.schema.d.ts.map +1 -1
  69. package/dist/common/pagination-query.schema.js +21 -2
  70. package/dist/common/pagination-query.schema.spec.d.ts +2 -0
  71. package/dist/common/pagination-query.schema.spec.d.ts.map +1 -0
  72. package/dist/common/pagination-query.schema.spec.js +53 -0
  73. package/dist/companies/companies.contract.d.ts +53 -28
  74. package/dist/companies/companies.contract.d.ts.map +1 -1
  75. package/dist/companies/companies.contract.js +11 -10
  76. package/dist/crews/crews.contract.d.ts +1010 -196
  77. package/dist/crews/crews.contract.d.ts.map +1 -1
  78. package/dist/crews/crews.contract.js +98 -17
  79. package/dist/crews/crews.contract.spec.d.ts +2 -0
  80. package/dist/crews/crews.contract.spec.d.ts.map +1 -0
  81. package/dist/crews/crews.contract.spec.js +67 -0
  82. package/dist/cron-executions/cron-executions.contract.d.ts +988 -59
  83. package/dist/cron-executions/cron-executions.contract.d.ts.map +1 -1
  84. package/dist/cron-executions/cron-executions.contract.js +127 -7
  85. package/dist/curated-worker-leads/__tests__/disposition-reason.spec.d.ts +2 -0
  86. package/dist/curated-worker-leads/__tests__/disposition-reason.spec.d.ts.map +1 -0
  87. package/dist/curated-worker-leads/__tests__/disposition-reason.spec.js +40 -0
  88. package/dist/curated-worker-leads/candidate-coordination-snapshot.spec.d.ts +2 -0
  89. package/dist/curated-worker-leads/candidate-coordination-snapshot.spec.d.ts.map +1 -0
  90. package/dist/curated-worker-leads/candidate-coordination-snapshot.spec.js +16 -0
  91. package/dist/curated-worker-leads/candidate-coordination.contract.d.ts +21650 -0
  92. package/dist/curated-worker-leads/candidate-coordination.contract.d.ts.map +1 -0
  93. package/dist/curated-worker-leads/candidate-coordination.contract.js +921 -0
  94. package/dist/curated-worker-leads/candidate-coordination.contract.spec.d.ts +2 -0
  95. package/dist/curated-worker-leads/candidate-coordination.contract.spec.d.ts.map +1 -0
  96. package/dist/curated-worker-leads/candidate-coordination.contract.spec.js +51 -0
  97. package/dist/curated-worker-leads/candidate-edit-session.contract.d.ts +2364 -0
  98. package/dist/curated-worker-leads/candidate-edit-session.contract.d.ts.map +1 -0
  99. package/dist/curated-worker-leads/candidate-edit-session.contract.js +173 -0
  100. package/dist/curated-worker-leads/consent-queue.contract.d.ts +4497 -0
  101. package/dist/curated-worker-leads/consent-queue.contract.d.ts.map +1 -0
  102. package/dist/curated-worker-leads/consent-queue.contract.js +201 -0
  103. package/dist/curated-worker-leads/contact-history.spec.d.ts +2 -0
  104. package/dist/curated-worker-leads/contact-history.spec.d.ts.map +1 -0
  105. package/dist/curated-worker-leads/contact-history.spec.js +88 -0
  106. package/dist/curated-worker-leads/contact-session.contract.spec.d.ts +2 -0
  107. package/dist/curated-worker-leads/contact-session.contract.spec.d.ts.map +1 -0
  108. package/dist/curated-worker-leads/contact-session.contract.spec.js +315 -0
  109. package/dist/curated-worker-leads/curated-worker-lead-config.contract.d.ts +489 -0
  110. package/dist/curated-worker-leads/curated-worker-lead-config.contract.d.ts.map +1 -0
  111. package/dist/curated-worker-leads/curated-worker-lead-config.contract.js +88 -0
  112. package/dist/curated-worker-leads/curated-worker-leads.contract.d.ts +135 -0
  113. package/dist/curated-worker-leads/curated-worker-leads.contract.d.ts.map +1 -0
  114. package/dist/curated-worker-leads/curated-worker-leads.contract.js +32 -0
  115. package/dist/curated-worker-leads/job-candidate-cards.spec.d.ts +2 -0
  116. package/dist/curated-worker-leads/job-candidate-cards.spec.d.ts.map +1 -0
  117. package/dist/curated-worker-leads/job-candidate-cards.spec.js +157 -0
  118. package/dist/curated-worker-leads/job-candidates.spec.d.ts +2 -0
  119. package/dist/curated-worker-leads/job-candidates.spec.d.ts.map +1 -0
  120. package/dist/curated-worker-leads/job-candidates.spec.js +140 -0
  121. package/dist/curated-worker-leads/job-feed-match-counts.contract.spec.d.ts +2 -0
  122. package/dist/curated-worker-leads/job-feed-match-counts.contract.spec.d.ts.map +1 -0
  123. package/dist/curated-worker-leads/job-feed-match-counts.contract.spec.js +19 -0
  124. package/dist/curated-worker-leads/jobs-tab.contract.d.ts +18547 -0
  125. package/dist/curated-worker-leads/jobs-tab.contract.d.ts.map +1 -0
  126. package/dist/curated-worker-leads/jobs-tab.contract.js +672 -0
  127. package/dist/curated-worker-leads/lead-agent-area.contract.d.ts +348 -0
  128. package/dist/curated-worker-leads/lead-agent-area.contract.d.ts.map +1 -0
  129. package/dist/curated-worker-leads/lead-agent-area.contract.js +51 -0
  130. package/dist/curated-worker-leads/owned-jobs-tab.contract.d.ts +1116 -0
  131. package/dist/curated-worker-leads/owned-jobs-tab.contract.d.ts.map +1 -0
  132. package/dist/curated-worker-leads/owned-jobs-tab.contract.js +93 -0
  133. package/dist/curated-workers/curated-filter-additions.spec.d.ts +2 -0
  134. package/dist/curated-workers/curated-filter-additions.spec.d.ts.map +1 -0
  135. package/dist/curated-workers/curated-filter-additions.spec.js +17 -0
  136. package/dist/curated-workers/curated-job-seeking.spec.d.ts +2 -0
  137. package/dist/curated-workers/curated-job-seeking.spec.d.ts.map +1 -0
  138. package/dist/curated-workers/curated-job-seeking.spec.js +53 -0
  139. package/dist/curated-workers/curated-workers-id-documents.spec.d.ts +2 -0
  140. package/dist/curated-workers/curated-workers-id-documents.spec.d.ts.map +1 -0
  141. package/dist/curated-workers/curated-workers-id-documents.spec.js +38 -0
  142. package/dist/curated-workers/curated-workers.contract.d.ts +6160 -1906
  143. package/dist/curated-workers/curated-workers.contract.d.ts.map +1 -1
  144. package/dist/curated-workers/curated-workers.contract.js +333 -51
  145. package/dist/dashboards/agent-daily-metrics.contract.d.ts +10 -10
  146. package/dist/dashboards/agent-daily-metrics.contract.js +1 -1
  147. package/dist/dashboards/dashboard-widgets.contract.d.ts +3777 -473
  148. package/dist/dashboards/dashboard-widgets.contract.d.ts.map +1 -1
  149. package/dist/dashboards/dashboard-widgets.contract.js +527 -29
  150. package/dist/dashboards/dashboard.contract.d.ts +8 -8
  151. package/dist/document-intake/document-intake.contract.d.ts +3132 -0
  152. package/dist/document-intake/document-intake.contract.d.ts.map +1 -0
  153. package/dist/document-intake/document-intake.contract.js +418 -0
  154. package/dist/export-jobs/export-jobs.contract.d.ts +3928 -0
  155. package/dist/export-jobs/export-jobs.contract.d.ts.map +1 -0
  156. package/dist/export-jobs/export-jobs.contract.js +240 -0
  157. package/dist/exports-events/exports-events.schemas.d.ts +90 -0
  158. package/dist/exports-events/exports-events.schemas.d.ts.map +1 -0
  159. package/dist/exports-events/exports-events.schemas.js +56 -0
  160. package/dist/files/files.contract.d.ts +133 -126
  161. package/dist/files/files.contract.d.ts.map +1 -1
  162. package/dist/files/files.contract.js +8 -0
  163. package/dist/health/health.contract.d.ts +4 -4
  164. package/dist/index.d.ts +86 -0
  165. package/dist/index.d.ts.map +1 -1
  166. package/dist/index.js +91 -1
  167. package/dist/interactions/interactions.contract.d.ts +162 -0
  168. package/dist/interactions/interactions.contract.d.ts.map +1 -0
  169. package/dist/interactions/interactions.contract.js +42 -0
  170. package/dist/job-clusters/job-clusters.contract.d.ts +1584 -0
  171. package/dist/job-clusters/job-clusters.contract.d.ts.map +1 -0
  172. package/dist/job-clusters/job-clusters.contract.js +133 -0
  173. package/dist/jobs/jobs.contract.d.ts +16662 -8628
  174. package/dist/jobs/jobs.contract.d.ts.map +1 -1
  175. package/dist/jobs/jobs.contract.js +403 -190
  176. package/dist/jobs/jobs.contract.spec.d.ts +2 -0
  177. package/dist/jobs/jobs.contract.spec.d.ts.map +1 -0
  178. package/dist/jobs/jobs.contract.spec.js +70 -0
  179. package/dist/kpi-impersonation/kpi-impersonation.contract.d.ts +75 -75
  180. package/dist/lead-assignments/lead-assignments.contract.d.ts +2933 -1122
  181. package/dist/lead-assignments/lead-assignments.contract.d.ts.map +1 -1
  182. package/dist/lead-assignments/lead-assignments.contract.js +29 -7
  183. package/dist/lead-distribution/agent-lead-distribution.contract.d.ts +328 -64
  184. package/dist/lead-distribution/agent-lead-distribution.contract.d.ts.map +1 -1
  185. package/dist/lead-distribution/agent-lead-distribution.contract.js +1 -1
  186. package/dist/lead-distribution/lead-distribution-config.contract.d.ts +31 -31
  187. package/dist/leads/leads.contract.d.ts +830 -368
  188. package/dist/leads/leads.contract.d.ts.map +1 -1
  189. package/dist/leads/leads.contract.js +106 -26
  190. package/dist/locations/locations.contract.d.ts +36 -36
  191. package/dist/notifications/notifications.contract.d.ts +1039 -0
  192. package/dist/notifications/notifications.contract.d.ts.map +1 -0
  193. package/dist/notifications/notifications.contract.js +110 -0
  194. package/dist/offices/offices.contract.d.ts +210 -60
  195. package/dist/offices/offices.contract.d.ts.map +1 -1
  196. package/dist/offices/offices.contract.js +18 -4
  197. package/dist/outreach/__tests__/outreach-claim.test.d.ts +2 -0
  198. package/dist/outreach/__tests__/outreach-claim.test.d.ts.map +1 -0
  199. package/dist/outreach/__tests__/outreach-claim.test.js +98 -0
  200. package/dist/outreach/__tests__/outreach-confirm-release.test.d.ts +2 -0
  201. package/dist/outreach/__tests__/outreach-confirm-release.test.d.ts.map +1 -0
  202. package/dist/outreach/__tests__/outreach-confirm-release.test.js +98 -0
  203. package/dist/outreach/__tests__/outreach-contract-additions.spec.d.ts +2 -0
  204. package/dist/outreach/__tests__/outreach-contract-additions.spec.d.ts.map +1 -0
  205. package/dist/outreach/__tests__/outreach-contract-additions.spec.js +78 -0
  206. package/dist/outreach/__tests__/outreach-requests.contract.spec.d.ts +2 -0
  207. package/dist/outreach/__tests__/outreach-requests.contract.spec.d.ts.map +1 -0
  208. package/dist/outreach/__tests__/outreach-requests.contract.spec.js +64 -0
  209. package/dist/outreach/__tests__/outreach-routes.test.d.ts +2 -0
  210. package/dist/outreach/__tests__/outreach-routes.test.d.ts.map +1 -0
  211. package/dist/outreach/__tests__/outreach-routes.test.js +57 -0
  212. package/dist/outreach/__tests__/outreach.schemas.test.d.ts +2 -0
  213. package/dist/outreach/__tests__/outreach.schemas.test.d.ts.map +1 -0
  214. package/dist/outreach/__tests__/outreach.schemas.test.js +144 -0
  215. package/dist/outreach/outreach-requests.contract.d.ts +1108 -0
  216. package/dist/outreach/outreach-requests.contract.d.ts.map +1 -0
  217. package/dist/outreach/outreach-requests.contract.js +134 -0
  218. package/dist/outreach/outreach-requests.schemas.d.ts +49 -0
  219. package/dist/outreach/outreach-requests.schemas.d.ts.map +1 -0
  220. package/dist/outreach/outreach-requests.schemas.js +60 -0
  221. package/dist/outreach/outreach.contract.d.ts +819 -0
  222. package/dist/outreach/outreach.contract.d.ts.map +1 -0
  223. package/dist/outreach/outreach.contract.js +195 -0
  224. package/dist/outreach/outreach.schemas.d.ts +118 -0
  225. package/dist/outreach/outreach.schemas.d.ts.map +1 -0
  226. package/dist/outreach/outreach.schemas.js +135 -0
  227. package/dist/own-research/own-research.contract.d.ts +1356 -552
  228. package/dist/own-research/own-research.contract.d.ts.map +1 -1
  229. package/dist/own-research/own-research.contract.js +14 -3
  230. package/dist/postcodes/postcodes.contract.d.ts +16 -16
  231. package/dist/proofs/proof-category.enum.d.ts +4 -0
  232. package/dist/proofs/proof-category.enum.d.ts.map +1 -0
  233. package/dist/proofs/proof-category.enum.js +5 -0
  234. package/dist/proofs/proof-entity-type.enum.d.ts +4 -0
  235. package/dist/proofs/proof-entity-type.enum.d.ts.map +1 -0
  236. package/dist/proofs/proof-entity-type.enum.js +5 -0
  237. package/dist/proofs/proof-type.enum.d.ts +28 -0
  238. package/dist/proofs/proof-type.enum.d.ts.map +1 -0
  239. package/dist/proofs/proof-type.enum.js +14 -0
  240. package/dist/proofs/proofs.contract.d.ts +3009 -0
  241. package/dist/proofs/proofs.contract.d.ts.map +1 -0
  242. package/dist/proofs/proofs.contract.js +92 -0
  243. package/dist/proofs/proofs.dtos.d.ts +1319 -0
  244. package/dist/proofs/proofs.dtos.d.ts.map +1 -0
  245. package/dist/proofs/proofs.dtos.js +178 -0
  246. package/dist/qualifications/qualifications.contract.d.ts +94 -94
  247. package/dist/realtime/data-changed.d.ts +21 -0
  248. package/dist/realtime/data-changed.d.ts.map +1 -0
  249. package/dist/realtime/data-changed.js +37 -0
  250. package/dist/shared/booking-history.schema.d.ts +27 -0
  251. package/dist/shared/booking-history.schema.d.ts.map +1 -0
  252. package/dist/shared/booking-history.schema.js +22 -0
  253. package/dist/shared/booking-history.spec.d.ts +2 -0
  254. package/dist/shared/booking-history.spec.d.ts.map +1 -0
  255. package/dist/shared/booking-history.spec.js +44 -0
  256. package/dist/shared/contact-suppressions.contract.d.ts +22 -0
  257. package/dist/shared/contact-suppressions.contract.d.ts.map +1 -0
  258. package/dist/shared/contact-suppressions.contract.js +13 -0
  259. package/dist/shared/live-booking.schema.d.ts +57 -0
  260. package/dist/shared/live-booking.schema.d.ts.map +1 -0
  261. package/dist/shared/live-booking.schema.js +34 -0
  262. package/dist/shared/summary-schemas.d.ts +218 -0
  263. package/dist/shared/summary-schemas.d.ts.map +1 -0
  264. package/dist/shared/summary-schemas.js +56 -0
  265. package/dist/sheets-sync/__tests__/sheets-sync-events.schemas.test.d.ts +2 -0
  266. package/dist/sheets-sync/__tests__/sheets-sync-events.schemas.test.d.ts.map +1 -0
  267. package/dist/sheets-sync/__tests__/sheets-sync-events.schemas.test.js +20 -0
  268. package/dist/sheets-sync/__tests__/tab-sync-config.schema.test.d.ts +2 -0
  269. package/dist/sheets-sync/__tests__/tab-sync-config.schema.test.d.ts.map +1 -0
  270. package/dist/sheets-sync/__tests__/tab-sync-config.schema.test.js +41 -0
  271. package/dist/sheets-sync/sheets-sync-events.schemas.d.ts +43 -0
  272. package/dist/sheets-sync/sheets-sync-events.schemas.d.ts.map +1 -0
  273. package/dist/sheets-sync/sheets-sync-events.schemas.js +29 -0
  274. package/dist/sheets-sync/sheets-sync.contract.d.ts +7258 -0
  275. package/dist/sheets-sync/sheets-sync.contract.d.ts.map +1 -0
  276. package/dist/sheets-sync/sheets-sync.contract.js +323 -0
  277. package/dist/telegram/telegram.contract.d.ts +727 -0
  278. package/dist/telegram/telegram.contract.d.ts.map +1 -0
  279. package/dist/telegram/telegram.contract.js +75 -0
  280. package/dist/trades/trade-rate-assessment.d.ts +18 -0
  281. package/dist/trades/trade-rate-assessment.d.ts.map +1 -0
  282. package/dist/trades/trade-rate-assessment.js +46 -0
  283. package/dist/trades/trade-rate-assessment.spec.d.ts +2 -0
  284. package/dist/trades/trade-rate-assessment.spec.d.ts.map +1 -0
  285. package/dist/trades/trade-rate-assessment.spec.js +223 -0
  286. package/dist/trades/trades.contract.d.ts +111 -0
  287. package/dist/trades/trades.contract.d.ts.map +1 -1
  288. package/dist/trades/trades.contract.js +49 -1
  289. package/dist/trades/trades.contract.spec.d.ts +2 -0
  290. package/dist/trades/trades.contract.spec.d.ts.map +1 -0
  291. package/dist/trades/trades.contract.spec.js +173 -0
  292. package/dist/user-access-grants/build-user-access-grant-rules.d.ts +10 -0
  293. package/dist/user-access-grants/build-user-access-grant-rules.d.ts.map +1 -0
  294. package/dist/user-access-grants/build-user-access-grant-rules.js +69 -0
  295. package/dist/user-access-grants/build-user-access-grant-rules.spec.d.ts +2 -0
  296. package/dist/user-access-grants/build-user-access-grant-rules.spec.d.ts.map +1 -0
  297. package/dist/user-access-grants/build-user-access-grant-rules.spec.js +77 -0
  298. package/dist/user-access-grants/user-access-grant-templates.json +454 -0
  299. package/dist/user-access-grants/user-access-grants.contract.d.ts +3886 -0
  300. package/dist/user-access-grants/user-access-grants.contract.d.ts.map +1 -0
  301. package/dist/user-access-grants/user-access-grants.contract.js +189 -0
  302. package/dist/user-access-grants/user-access-grants.contract.spec.d.ts +2 -0
  303. package/dist/user-access-grants/user-access-grants.contract.spec.d.ts.map +1 -0
  304. package/dist/user-access-grants/user-access-grants.contract.spec.js +149 -0
  305. package/dist/users/users.contract.d.ts +1959 -349
  306. package/dist/users/users.contract.d.ts.map +1 -1
  307. package/dist/users/users.contract.js +222 -37
  308. package/dist/users/users.contract.spec.d.ts +2 -0
  309. package/dist/users/users.contract.spec.d.ts.map +1 -0
  310. package/dist/users/users.contract.spec.js +103 -0
  311. package/dist/worker-identity-cases/worker-identity-cases.contract.d.ts +4609 -0
  312. package/dist/worker-identity-cases/worker-identity-cases.contract.d.ts.map +1 -0
  313. package/dist/worker-identity-cases/worker-identity-cases.contract.js +409 -0
  314. package/dist/worker-merge-proposals/worker-merge-proposals.contract.d.ts +1511 -0
  315. package/dist/worker-merge-proposals/worker-merge-proposals.contract.d.ts.map +1 -0
  316. package/dist/worker-merge-proposals/worker-merge-proposals.contract.js +150 -0
  317. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.d.ts +1106 -0
  318. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.d.ts.map +1 -0
  319. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.js +85 -0
  320. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.spec.d.ts +2 -0
  321. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.spec.d.ts.map +1 -0
  322. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.spec.js +216 -0
  323. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.schemas.d.ts +453 -0
  324. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.schemas.d.ts.map +1 -0
  325. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.schemas.js +109 -0
  326. package/dist/workers/do-not-contact.contract.d.ts +46 -0
  327. package/dist/workers/do-not-contact.contract.d.ts.map +1 -0
  328. package/dist/workers/do-not-contact.contract.js +41 -0
  329. package/dist/workers/do-not-contact.contract.spec.d.ts +2 -0
  330. package/dist/workers/do-not-contact.contract.spec.d.ts.map +1 -0
  331. package/dist/workers/do-not-contact.contract.spec.js +47 -0
  332. package/dist/workers/duplicate-group-worker.spec.d.ts +2 -0
  333. package/dist/workers/duplicate-group-worker.spec.d.ts.map +1 -0
  334. package/dist/workers/duplicate-group-worker.spec.js +34 -0
  335. package/dist/workers/filter-exact-flags.spec.d.ts +2 -0
  336. package/dist/workers/filter-exact-flags.spec.d.ts.map +1 -0
  337. package/dist/workers/filter-exact-flags.spec.js +37 -0
  338. package/dist/workers/worker-source-attribution.contract.spec.d.ts +2 -0
  339. package/dist/workers/worker-source-attribution.contract.spec.d.ts.map +1 -0
  340. package/dist/workers/worker-source-attribution.contract.spec.js +442 -0
  341. package/dist/workers/worker-source.spec.d.ts +2 -0
  342. package/dist/workers/worker-source.spec.d.ts.map +1 -0
  343. package/dist/workers/worker-source.spec.js +13 -0
  344. package/dist/workers/worker-status-facets.spec.d.ts +2 -0
  345. package/dist/workers/worker-status-facets.spec.d.ts.map +1 -0
  346. package/dist/workers/worker-status-facets.spec.js +34 -0
  347. package/dist/workers/workers.contract.d.ts +19534 -5969
  348. package/dist/workers/workers.contract.d.ts.map +1 -1
  349. package/dist/workers/workers.contract.js +1096 -113
  350. package/dist/workers/workers.contract.spec.d.ts +2 -0
  351. package/dist/workers/workers.contract.spec.d.ts.map +1 -0
  352. package/dist/workers/workers.contract.spec.js +31 -0
  353. package/package.json +5 -4
@@ -5,6 +5,7 @@
5
5
  * Description: Exports CASL ability definitions for each user role.
6
6
  * These are the single source of truth for role-based permissions.
7
7
  */
8
+ import { type UserRole } from '../users/users.contract';
8
9
  export interface AbilityRule {
9
10
  action: string;
10
11
  subject: string;
@@ -19,6 +20,10 @@ export declare const SecondAgentAbilities: AbilityRule[];
19
20
  export declare const TeamLeadAbilities: AbilityRule[];
20
21
  export declare const BotAbilities: AbilityRule[];
21
22
  export declare const CronSchedulerAbilities: AbilityRule[];
23
+ export declare const OutreachServiceAbilities: AbilityRule[];
24
+ export declare const OfficeManagerAbilities: AbilityRule[];
25
+ export declare const WorkerCuratorAbilities: AbilityRule[];
26
+ export declare const InterconnectionAbilities: AbilityRule[];
22
27
  export declare const RoleAbilities: {
23
28
  readonly ADMIN: AbilityRule[];
24
29
  readonly KPI: AbilityRule[];
@@ -27,6 +32,10 @@ export declare const RoleAbilities: {
27
32
  readonly TEAM_LEADS: AbilityRule[];
28
33
  readonly BOT: AbilityRule[];
29
34
  readonly CRON_SCHEDULER: AbilityRule[];
35
+ readonly OUTREACH_SERVICE: AbilityRule[];
36
+ readonly OFFICE_MANAGER: AbilityRule[];
37
+ readonly WORKER_CURATOR: AbilityRule[];
38
+ readonly INTERCONNECTION: AbilityRule[];
30
39
  };
31
40
  export type RoleAbilitiesType = typeof RoleAbilities;
32
41
  /**
@@ -34,5 +43,50 @@ export type RoleAbilitiesType = typeof RoleAbilities;
34
43
  * Used for feature-level permission checking.
35
44
  * These must be kept in sync with the subjects in the abilities JSON files.
36
45
  */
37
- export type VirtualSubjects = 'FaDashboardWidgets' | 'SaDashboardWidgets' | 'DashboardTrends' | 'FirstAgentTutorials' | 'SecondAgentTutorials';
46
+ export type VirtualSubjects = 'FaDashboardWidgets' | 'SaDashboardWidgets' | 'DashboardTrends' | 'AdminFaDashboardWidgets' | 'AdminSaDashboardWidgets' | 'AdminAgentStats' | 'AdminProofs' | 'AdminDashboardTrends' | 'FirstAgentTutorials' | 'CuratedMatchWorkspace' | 'JobCandidate' | 'LeadActivityEvent' | 'FilterCandidateContactHistorySchema' | 'SecondAgentTutorials' | 'SortActiveSchema' | 'SortBookingSchema' | 'SortJobSchema' | 'SortWorkerSchema' | 'SortCuratedWorkerSchema' | 'SortLeadSchema' | 'SortOwnResearchLeadSchema' | 'SortClientSchema' | 'SortCompanySchema' | 'SortCollaborationSchema' | 'SortCollaborationCheckingSchema' | 'SortClientContactSchema' | 'SortCallHistorySchema' | 'SortUserSchema' | 'SortCrewSchema' | 'FilterExportJobSchema' | 'OutreachClaim' | 'OutreachRequest';
47
+ /**
48
+ * Roles an OFFICE_MANAGER may assign to users they create.
49
+ * Single source of truth for the office-manager create-user role policy.
50
+ */
51
+ export declare const OFFICE_MANAGER_ASSIGNABLE_ROLES: readonly ["FIRST_AGENT", "SECOND_AGENT"];
52
+ /**
53
+ * Roles the acting user must NOT be allowed to assign when creating a user
54
+ * as an office manager. Resolves the `{{ rolesOmCannotAssign }}` ability
55
+ * placeholder. Computed as the COMPLEMENT of the allowed set (fail-safe: a
56
+ * newly-added role defaults to disallowed). Returns `[]` for admins so the
57
+ * inverted ability rule never fires for an admin-who-is-also-an-OM.
58
+ */
59
+ export declare function getRolesOmCannotAssign(actingUserRoles: readonly UserRole[] | undefined): UserRole[];
60
+ export declare const SHARED_CURATED_MATCH_ROLES: readonly ["ADMIN", "WORKER_CURATOR", "INTERCONNECTION"];
61
+ export declare function hasSharedCuratedMatchAccess(roles: readonly string[] | null | undefined): boolean;
62
+ /**
63
+ * Roles whose JOB-FIRST CANDIDATE scope is global: inside a specific job's
64
+ * candidate ranking, counts, hydration, and tuple-authorized actions they see
65
+ * the whole eligible pool instead of an assignment-scoped slice.
66
+ *
67
+ * This is NOT a general curated-record permission (spec 2026-07-15 superseded
68
+ * that use). Do not consult it on directory, consent-queue, worker-first, or
69
+ * any surface that is not keyed by a jobId — those surfaces gate
70
+ * INTERCONNECTION with isCandidateOnlyCuratedViewer instead. Deliberately
71
+ * does not widen owned-worker scoping (only ADMIN sees all owned workers).
72
+ *
73
+ * @deprecated Use SHARED_CURATED_MATCH_ROLES for new match-workspace policy.
74
+ */
75
+ export declare const GLOBAL_CURATED_SCOPE_ROLES: readonly ["ADMIN", "INTERCONNECTION"];
76
+ /**
77
+ * @deprecated Use hasSharedCuratedMatchAccess for new match-workspace policy.
78
+ */
79
+ export declare function hasGlobalCuratedCandidateScope(roles: readonly string[] | null | undefined): boolean;
80
+ /**
81
+ * Roles whose curated-worker access is restricted to the match workspaces:
82
+ * true only for the SECOND_AGENT+INTERCONNECTION modifier pair, excluding
83
+ * privileged curated roles. Such users may see curated workers through
84
+ * job-scoped candidates and worker-first job matches. Generic curated
85
+ * directory/detail/search/export surfaces reject them before querying. Used by
86
+ * API guards and the web
87
+ * (navigation, server-page guards, tabs, filters) so both stay in agreement.
88
+ *
89
+ * @deprecated Retained temporarily for rolling compatibility.
90
+ */
91
+ export declare function isCandidateOnlyCuratedViewer(roles: readonly string[] | null | undefined): boolean;
38
92
  //# sourceMappingURL=abilities.contract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"abilities.contract.d.ts","sourceRoot":"","sources":["../../contracts/abilities/abilities.contract.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,cAAc,EAAE,WAAW,EAAoC,CAAC;AAC7E,eAAO,MAAM,YAAY,EAAE,WAAW,EAAkC,CAAC;AACzE,eAAO,MAAM,mBAAmB,EAAE,WAAW,EACP,CAAC;AACvC,eAAO,MAAM,oBAAoB,EAAE,WAAW,EACP,CAAC;AACxC,eAAO,MAAM,iBAAiB,EAAE,WAAW,EACP,CAAC;AACrC,eAAO,MAAM,YAAY,EAAE,WAAW,EAAkC,CAAC;AACzE,eAAO,MAAM,sBAAsB,EAAE,WAAW,EACP,CAAC;AAE1C,eAAO,MAAM,aAAa;;;;;;;;CAQhB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,OAAO,aAAa,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACvB,oBAAoB,GACpB,oBAAoB,GACpB,iBAAiB,GACjB,qBAAqB,GACrB,sBAAsB,CAAC"}
1
+ {"version":3,"file":"abilities.contract.d.ts","sourceRoot":"","sources":["../../contracts/abilities/abilities.contract.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExE,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,cAAc,EAAE,WAAW,EAAoC,CAAC;AAC7E,eAAO,MAAM,YAAY,EAAE,WAAW,EAAkC,CAAC;AACzE,eAAO,MAAM,mBAAmB,EAAE,WAAW,EACP,CAAC;AACvC,eAAO,MAAM,oBAAoB,EAAE,WAAW,EACP,CAAC;AACxC,eAAO,MAAM,iBAAiB,EAAE,WAAW,EACP,CAAC;AACrC,eAAO,MAAM,YAAY,EAAE,WAAW,EAAkC,CAAC;AACzE,eAAO,MAAM,sBAAsB,EAAE,WAAW,EACP,CAAC;AAC1C,eAAO,MAAM,wBAAwB,EAAE,WAAW,EACP,CAAC;AAC5C,eAAO,MAAM,sBAAsB,EAAE,WAAW,EACP,CAAC;AAC1C,eAAO,MAAM,sBAAsB,EAAE,WAAW,EACP,CAAC;AAC1C,eAAO,MAAM,wBAAwB,EAAE,WAAW,EACP,CAAC;AAE5C,eAAO,MAAM,aAAa;;;;;;;;;;;;CAYhB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,OAAO,aAAa,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACvB,oBAAoB,GACpB,oBAAoB,GACpB,iBAAiB,GACjB,yBAAyB,GACzB,yBAAyB,GACzB,iBAAiB,GACjB,aAAa,GACb,sBAAsB,GACtB,qBAAqB,GACrB,uBAAuB,GACvB,cAAc,GACd,mBAAmB,GACnB,qCAAqC,GACrC,sBAAsB,GACtB,kBAAkB,GAClB,mBAAmB,GACnB,eAAe,GACf,kBAAkB,GAClB,yBAAyB,GACzB,gBAAgB,GAChB,2BAA2B,GAC3B,kBAAkB,GAClB,mBAAmB,GACnB,yBAAyB,GACzB,iCAAiC,GACjC,yBAAyB,GACzB,uBAAuB,GACvB,gBAAgB,GAChB,gBAAgB,GAChB,uBAAuB,GACvB,eAAe,GACf,iBAAiB,CAAC;AAEtB;;;GAGG;AACH,eAAO,MAAM,+BAA+B,0CAGJ,CAAC;AAEzC;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,SAAS,QAAQ,EAAE,GAAG,SAAS,GAC/C,QAAQ,EAAE,CAMZ;AAED,eAAO,MAAM,0BAA0B,yDAIC,CAAC;AAWzC,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAQT;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,0BAA0B,uCAGC,CAAC;AAEzC;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAIT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAMT"}
@@ -10,14 +10,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
10
10
  return (mod && mod.__esModule) ? mod : { "default": mod };
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.RoleAbilities = exports.CronSchedulerAbilities = exports.BotAbilities = exports.TeamLeadAbilities = exports.SecondAgentAbilities = exports.FirstAgentAbilities = exports.KpiAbilities = exports.AdminAbilities = void 0;
13
+ exports.GLOBAL_CURATED_SCOPE_ROLES = exports.SHARED_CURATED_MATCH_ROLES = exports.OFFICE_MANAGER_ASSIGNABLE_ROLES = exports.RoleAbilities = exports.InterconnectionAbilities = exports.WorkerCuratorAbilities = exports.OfficeManagerAbilities = exports.OutreachServiceAbilities = exports.CronSchedulerAbilities = exports.BotAbilities = exports.TeamLeadAbilities = exports.SecondAgentAbilities = exports.FirstAgentAbilities = exports.KpiAbilities = exports.AdminAbilities = void 0;
14
+ exports.getRolesOmCannotAssign = getRolesOmCannotAssign;
15
+ exports.hasSharedCuratedMatchAccess = hasSharedCuratedMatchAccess;
16
+ exports.hasGlobalCuratedCandidateScope = hasGlobalCuratedCandidateScope;
17
+ exports.isCandidateOnlyCuratedViewer = isCandidateOnlyCuratedViewer;
14
18
  const admin_abilities_json_1 = __importDefault(require("./admin.abilities.json"));
15
19
  const bot_abilities_json_1 = __importDefault(require("./bot.abilities.json"));
16
20
  const cron_scheduler_abilities_json_1 = __importDefault(require("./cron-scheduler.abilities.json"));
17
21
  const first_agent_abilities_json_1 = __importDefault(require("./first-agent.abilities.json"));
18
22
  const kpi_abilities_json_1 = __importDefault(require("./kpi.abilities.json"));
23
+ const office_manager_abilities_json_1 = __importDefault(require("./office-manager.abilities.json"));
24
+ const outreach_service_abilities_json_1 = __importDefault(require("./outreach-service.abilities.json"));
19
25
  const second_agent_abilities_json_1 = __importDefault(require("./second-agent.abilities.json"));
20
26
  const team_leads_json_1 = __importDefault(require("./team-leads.json"));
27
+ const worker_curator_abilities_json_1 = __importDefault(require("./worker-curator.abilities.json"));
28
+ const interconnection_abilities_json_1 = __importDefault(require("./interconnection.abilities.json"));
29
+ const users_contract_1 = require("../users/users.contract");
21
30
  exports.AdminAbilities = admin_abilities_json_1.default;
22
31
  exports.KpiAbilities = kpi_abilities_json_1.default;
23
32
  exports.FirstAgentAbilities = first_agent_abilities_json_1.default;
@@ -25,6 +34,10 @@ exports.SecondAgentAbilities = second_agent_abilities_json_1.default;
25
34
  exports.TeamLeadAbilities = team_leads_json_1.default;
26
35
  exports.BotAbilities = bot_abilities_json_1.default;
27
36
  exports.CronSchedulerAbilities = cron_scheduler_abilities_json_1.default;
37
+ exports.OutreachServiceAbilities = outreach_service_abilities_json_1.default;
38
+ exports.OfficeManagerAbilities = office_manager_abilities_json_1.default;
39
+ exports.WorkerCuratorAbilities = worker_curator_abilities_json_1.default;
40
+ exports.InterconnectionAbilities = interconnection_abilities_json_1.default;
28
41
  exports.RoleAbilities = {
29
42
  ADMIN: exports.AdminAbilities,
30
43
  KPI: exports.KpiAbilities,
@@ -33,4 +46,85 @@ exports.RoleAbilities = {
33
46
  TEAM_LEADS: exports.TeamLeadAbilities,
34
47
  BOT: exports.BotAbilities,
35
48
  CRON_SCHEDULER: exports.CronSchedulerAbilities,
49
+ OUTREACH_SERVICE: exports.OutreachServiceAbilities,
50
+ OFFICE_MANAGER: exports.OfficeManagerAbilities,
51
+ WORKER_CURATOR: exports.WorkerCuratorAbilities,
52
+ INTERCONNECTION: exports.InterconnectionAbilities,
36
53
  };
54
+ /**
55
+ * Roles an OFFICE_MANAGER may assign to users they create.
56
+ * Single source of truth for the office-manager create-user role policy.
57
+ */
58
+ exports.OFFICE_MANAGER_ASSIGNABLE_ROLES = [
59
+ 'FIRST_AGENT',
60
+ 'SECOND_AGENT',
61
+ ];
62
+ /**
63
+ * Roles the acting user must NOT be allowed to assign when creating a user
64
+ * as an office manager. Resolves the `{{ rolesOmCannotAssign }}` ability
65
+ * placeholder. Computed as the COMPLEMENT of the allowed set (fail-safe: a
66
+ * newly-added role defaults to disallowed). Returns `[]` for admins so the
67
+ * inverted ability rule never fires for an admin-who-is-also-an-OM.
68
+ */
69
+ function getRolesOmCannotAssign(actingUserRoles) {
70
+ if (actingUserRoles?.includes('ADMIN')) {
71
+ return [];
72
+ }
73
+ const allowed = new Set(exports.OFFICE_MANAGER_ASSIGNABLE_ROLES);
74
+ return users_contract_1.UserRoleSchema.options.filter((role) => !allowed.has(role));
75
+ }
76
+ exports.SHARED_CURATED_MATCH_ROLES = [
77
+ 'ADMIN',
78
+ 'WORKER_CURATOR',
79
+ 'INTERCONNECTION',
80
+ ];
81
+ function hasInterconnectionModifierPair(roles) {
82
+ return (roles?.includes('SECOND_AGENT') === true &&
83
+ roles.includes('INTERCONNECTION'));
84
+ }
85
+ function hasSharedCuratedMatchAccess(roles) {
86
+ if (!roles)
87
+ return false;
88
+ return (roles.includes('ADMIN') ||
89
+ roles.includes('WORKER_CURATOR') ||
90
+ hasInterconnectionModifierPair(roles));
91
+ }
92
+ /**
93
+ * Roles whose JOB-FIRST CANDIDATE scope is global: inside a specific job's
94
+ * candidate ranking, counts, hydration, and tuple-authorized actions they see
95
+ * the whole eligible pool instead of an assignment-scoped slice.
96
+ *
97
+ * This is NOT a general curated-record permission (spec 2026-07-15 superseded
98
+ * that use). Do not consult it on directory, consent-queue, worker-first, or
99
+ * any surface that is not keyed by a jobId — those surfaces gate
100
+ * INTERCONNECTION with isCandidateOnlyCuratedViewer instead. Deliberately
101
+ * does not widen owned-worker scoping (only ADMIN sees all owned workers).
102
+ *
103
+ * @deprecated Use SHARED_CURATED_MATCH_ROLES for new match-workspace policy.
104
+ */
105
+ exports.GLOBAL_CURATED_SCOPE_ROLES = [
106
+ 'ADMIN',
107
+ 'INTERCONNECTION',
108
+ ];
109
+ /**
110
+ * @deprecated Use hasSharedCuratedMatchAccess for new match-workspace policy.
111
+ */
112
+ function hasGlobalCuratedCandidateScope(roles) {
113
+ return (roles?.includes('ADMIN') === true || hasInterconnectionModifierPair(roles));
114
+ }
115
+ /**
116
+ * Roles whose curated-worker access is restricted to the match workspaces:
117
+ * true only for the SECOND_AGENT+INTERCONNECTION modifier pair, excluding
118
+ * privileged curated roles. Such users may see curated workers through
119
+ * job-scoped candidates and worker-first job matches. Generic curated
120
+ * directory/detail/search/export surfaces reject them before querying. Used by
121
+ * API guards and the web
122
+ * (navigation, server-page guards, tabs, filters) so both stay in agreement.
123
+ *
124
+ * @deprecated Retained temporarily for rolling compatibility.
125
+ */
126
+ function isCandidateOnlyCuratedViewer(roles) {
127
+ return (hasInterconnectionModifierPair(roles) &&
128
+ !roles?.includes('ADMIN') &&
129
+ !roles?.includes('WORKER_CURATOR'));
130
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=abilities.contract.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abilities.contract.spec.d.ts","sourceRoot":"","sources":["../../contracts/abilities/abilities.contract.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const abilities_contract_1 = require("./abilities.contract");
4
+ describe('hasGlobalCuratedCandidateScope', () => {
5
+ it('true for ADMIN', () => {
6
+ expect((0, abilities_contract_1.hasGlobalCuratedCandidateScope)(['ADMIN'])).toBe(true);
7
+ });
8
+ it('true for SECOND_AGENT + INTERCONNECTION', () => {
9
+ expect((0, abilities_contract_1.hasGlobalCuratedCandidateScope)(['SECOND_AGENT', 'INTERCONNECTION'])).toBe(true);
10
+ });
11
+ it('false for plain SECOND_AGENT', () => {
12
+ expect((0, abilities_contract_1.hasGlobalCuratedCandidateScope)(['SECOND_AGENT'])).toBe(false);
13
+ });
14
+ it('false for standalone or incorrectly paired INTERCONNECTION', () => {
15
+ expect((0, abilities_contract_1.hasGlobalCuratedCandidateScope)(['INTERCONNECTION'])).toBe(false);
16
+ expect((0, abilities_contract_1.hasGlobalCuratedCandidateScope)(['FIRST_AGENT', 'INTERCONNECTION'])).toBe(false);
17
+ });
18
+ it('keeps WORKER_CURATOR outside the deprecated candidate-global helper', () => {
19
+ expect((0, abilities_contract_1.hasGlobalCuratedCandidateScope)(['WORKER_CURATOR'])).toBe(false);
20
+ });
21
+ it('false for undefined/empty', () => {
22
+ expect((0, abilities_contract_1.hasGlobalCuratedCandidateScope)(undefined)).toBe(false);
23
+ expect((0, abilities_contract_1.hasGlobalCuratedCandidateScope)([])).toBe(false);
24
+ });
25
+ });
26
+ describe('shared curated match access', () => {
27
+ it.each([
28
+ [['SECOND_AGENT', 'INTERCONNECTION'], true],
29
+ [['INTERCONNECTION', 'SECOND_AGENT'], true],
30
+ [['ADMIN'], true],
31
+ [['WORKER_CURATOR'], true],
32
+ [['INTERCONNECTION'], false],
33
+ [['FIRST_AGENT', 'INTERCONNECTION'], false],
34
+ [['SECOND_AGENT'], false],
35
+ [['FIRST_AGENT'], false],
36
+ [[], false],
37
+ ])('%j => %s', (roles, expected) => {
38
+ expect((0, abilities_contract_1.hasSharedCuratedMatchAccess)(roles)).toBe(expected);
39
+ });
40
+ it('grants only the purpose-limited workspace, not curated internals', () => {
41
+ expect(abilities_contract_1.InterconnectionAbilities).toEqual(expect.arrayContaining([
42
+ { action: 'read', subject: 'CuratedMatchWorkspace' },
43
+ { action: 'update', subject: 'CuratedMatchWorkspace' },
44
+ ]));
45
+ const subjects = abilities_contract_1.InterconnectionAbilities.map((rule) => rule.subject);
46
+ for (const forbidden of [
47
+ 'CuratedWorker',
48
+ 'WorkerJobMatch',
49
+ 'WorkerLeadAssignment',
50
+ 'WorkerLeadProfile',
51
+ ]) {
52
+ expect(subjects).not.toContain(forbidden);
53
+ }
54
+ });
55
+ });
56
+ describe('isCandidateOnlyCuratedViewer', () => {
57
+ it('is true for the SECOND_AGENT + INTERCONNECTION modifier pair', () => {
58
+ expect((0, abilities_contract_1.isCandidateOnlyCuratedViewer)(['SECOND_AGENT', 'INTERCONNECTION'])).toBe(true);
59
+ });
60
+ it('is false for every other role set', () => {
61
+ expect((0, abilities_contract_1.isCandidateOnlyCuratedViewer)(['ADMIN'])).toBe(false);
62
+ expect((0, abilities_contract_1.isCandidateOnlyCuratedViewer)(['SECOND_AGENT'])).toBe(false);
63
+ expect((0, abilities_contract_1.isCandidateOnlyCuratedViewer)(['WORKER_CURATOR'])).toBe(false);
64
+ expect((0, abilities_contract_1.isCandidateOnlyCuratedViewer)(['INTERCONNECTION'])).toBe(false);
65
+ expect((0, abilities_contract_1.isCandidateOnlyCuratedViewer)(['FIRST_AGENT', 'INTERCONNECTION'])).toBe(false);
66
+ expect((0, abilities_contract_1.isCandidateOnlyCuratedViewer)(['ADMIN', 'INTERCONNECTION'])).toBe(false);
67
+ expect((0, abilities_contract_1.isCandidateOnlyCuratedViewer)(['WORKER_CURATOR', 'INTERCONNECTION'])).toBe(false);
68
+ expect((0, abilities_contract_1.isCandidateOnlyCuratedViewer)([
69
+ 'ADMIN',
70
+ 'SECOND_AGENT',
71
+ 'INTERCONNECTION',
72
+ ])).toBe(false);
73
+ expect((0, abilities_contract_1.isCandidateOnlyCuratedViewer)([])).toBe(false);
74
+ expect((0, abilities_contract_1.isCandidateOnlyCuratedViewer)(undefined)).toBe(false);
75
+ expect((0, abilities_contract_1.isCandidateOnlyCuratedViewer)(null)).toBe(false);
76
+ });
77
+ it('is order-independent', () => {
78
+ expect((0, abilities_contract_1.isCandidateOnlyCuratedViewer)(['INTERCONNECTION', 'SECOND_AGENT'])).toBe(true);
79
+ });
80
+ });
81
+ describe('JobCandidate grants (candidates-page entry ability)', () => {
82
+ const hasRule = (rules, action) => rules.some((r) => r.action === action && r.subject === 'JobCandidate');
83
+ it.each(['SECOND_AGENT', 'WORKER_CURATOR', 'INTERCONNECTION'])('%s holds read+update JobCandidate', (role) => {
84
+ expect(hasRule(abilities_contract_1.RoleAbilities[role], 'read')).toBe(true);
85
+ expect(hasRule(abilities_contract_1.RoleAbilities[role], 'update')).toBe(true);
86
+ });
87
+ it('ADMIN is covered by manage all', () => {
88
+ expect(abilities_contract_1.RoleAbilities.ADMIN.some((r) => r.action === 'manage' && r.subject === 'all')).toBe(true);
89
+ });
90
+ });
91
+ describe('LeadActivityEvent grants (contact-history resource)', () => {
92
+ it.each(['SECOND_AGENT', 'WORKER_CURATOR', 'INTERCONNECTION'])('%s can read and update only owned contact events', (role) => {
93
+ for (const action of ['read', 'update']) {
94
+ expect(abilities_contract_1.RoleAbilities[role]).toContainEqual(expect.objectContaining({
95
+ action,
96
+ subject: 'LeadActivityEvent',
97
+ conditions: { agentId: '{{ id }}' },
98
+ }));
99
+ }
100
+ });
101
+ it.each(['SECOND_AGENT', 'WORKER_CURATOR', 'INTERCONNECTION'])('%s can read the safe layered contact-session projections', (role) => {
102
+ const rule = abilities_contract_1.RoleAbilities[role].find((candidate) => candidate.action === 'read' &&
103
+ candidate.subject === 'LeadActivityEvent');
104
+ expect(rule?.fields).toEqual(expect.arrayContaining([
105
+ 'contactSessionId',
106
+ 'connection',
107
+ 'workerState',
108
+ 'workerState.*',
109
+ 'jobResult',
110
+ 'jobResult.*',
111
+ ]));
112
+ });
113
+ it('ADMIN is unrestricted through manage all', () => {
114
+ expect(abilities_contract_1.RoleAbilities.ADMIN).toContainEqual({
115
+ action: 'manage',
116
+ subject: 'all',
117
+ });
118
+ });
119
+ });
120
+ describe('FilterCandidateContactHistorySchema grants', () => {
121
+ it.each(['SECOND_AGENT', 'WORKER_CURATOR', 'INTERCONNECTION'])('%s can filter owned history fields but not by another contacting agent', (role) => {
122
+ const rule = abilities_contract_1.RoleAbilities[role].find((candidate) => candidate.action === 'read' &&
123
+ candidate.subject === 'FilterCandidateContactHistorySchema');
124
+ expect(rule?.fields).toEqual(expect.arrayContaining(['worker', 'job', 'status', 'channel']));
125
+ expect(rule?.fields).not.toContain('contactedById');
126
+ });
127
+ it('ADMIN can use contactedById through manage all', () => {
128
+ expect(abilities_contract_1.RoleAbilities.ADMIN).toContainEqual({
129
+ action: 'manage',
130
+ subject: 'all',
131
+ });
132
+ });
133
+ });
134
+ describe('OFFICE_MANAGER reference-data grants', () => {
135
+ it.each(['Qualification', 'QualificationType', 'Trade'])('can read %s', (subject) => {
136
+ expect(abilities_contract_1.RoleAbilities.OFFICE_MANAGER).toContainEqual({
137
+ action: 'read',
138
+ subject,
139
+ });
140
+ });
141
+ it.each(['Qualification', 'QualificationType', 'Trade'])('does not receive write access to %s', (subject) => {
142
+ expect(abilities_contract_1.RoleAbilities.OFFICE_MANAGER.some((rule) => rule.subject === subject &&
143
+ ['create', 'update', 'delete', 'manage'].includes(rule.action))).toBe(false);
144
+ });
145
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=admin-dashboard.abilities.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-dashboard.abilities.test.d.ts","sourceRoot":"","sources":["../../contracts/abilities/admin-dashboard.abilities.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const abilities_contract_1 = require("./abilities.contract");
4
+ const subjects = [
5
+ 'AdminFaDashboardWidgets',
6
+ 'AdminSaDashboardWidgets',
7
+ 'AdminAgentStats',
8
+ 'AdminProofs',
9
+ 'AdminDashboardTrends',
10
+ ];
11
+ function canRead(rules, subject) {
12
+ return rules.some((rule) => !rule.inverted &&
13
+ (rule.action === 'read' || rule.action === 'manage') &&
14
+ (rule.subject === subject || rule.subject === 'all'));
15
+ }
16
+ describe('admin dashboard ability matrix', () => {
17
+ it.each(subjects)('allows Admin, KPI and Office Manager to read %s', (subject) => {
18
+ expect(canRead(abilities_contract_1.AdminAbilities, subject)).toBe(true);
19
+ expect(canRead(abilities_contract_1.KpiAbilities, subject)).toBe(true);
20
+ expect(canRead(abilities_contract_1.OfficeManagerAbilities, subject)).toBe(true);
21
+ });
22
+ it.each(subjects)('does not grant %s to personal FA/SA roles', (subject) => {
23
+ expect(canRead(abilities_contract_1.FirstAgentAbilities, subject)).toBe(false);
24
+ expect(canRead(abilities_contract_1.SecondAgentAbilities, subject)).toBe(false);
25
+ });
26
+ it('retains managed-office row scope for Office Manager', () => {
27
+ expect(abilities_contract_1.OfficeManagerAbilities).toContainEqual({
28
+ action: 'view-stats',
29
+ subject: 'User',
30
+ conditions: { officeId: { $in: '{{ managedOfficeIds }}' } },
31
+ });
32
+ });
33
+ });
@@ -32,5 +32,24 @@
32
32
  "id": "{{ id }}"
33
33
  },
34
34
  "inverted": true
35
+ },
36
+ { "action": "manage", "subject": "Proof" },
37
+ { "action": "manage", "subject": "ProofPhoto" },
38
+ { "action": "manage", "subject": "ProofEntityLink" },
39
+ { "action": "read", "subject": "FilterProofsSchema" },
40
+ {
41
+ "action": "read",
42
+ "subject": "FilterExportJobSchema",
43
+ "fields": [
44
+ "entity",
45
+ "status",
46
+ "userId",
47
+ "requestedAt",
48
+ "requestedAt.*",
49
+ "sort",
50
+ "sort.*",
51
+ "page",
52
+ "limit"
53
+ ]
35
54
  }
36
55
  ]
@@ -13,13 +13,22 @@
13
13
  },
14
14
  {
15
15
  "action": "read",
16
- "subject": "User",
17
- "conditions": {
18
- "id": "{{ id }}"
19
- }
16
+ "subject": "User"
20
17
  },
21
18
  {
22
19
  "action": "read",
23
20
  "subject": "Office"
21
+ },
22
+ {
23
+ "action": "read",
24
+ "subject": "Job"
25
+ },
26
+ {
27
+ "action": "create",
28
+ "subject": "Job"
29
+ },
30
+ {
31
+ "action": "update",
32
+ "subject": "Job"
24
33
  }
25
34
  ]