@dakkitor/api-contracts 1.4.0 → 1.6.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 (139) hide show
  1. package/dist/abilities/abilities.contract.d.ts +8 -2
  2. package/dist/abilities/abilities.contract.d.ts.map +1 -1
  3. package/dist/abilities/abilities.contract.js +48 -1
  4. package/dist/abilities/abilities.contract.spec.js +98 -0
  5. package/dist/abilities/first-agent.abilities.json +9 -2
  6. package/dist/abilities/outreach-service.abilities.json +14 -0
  7. package/dist/abilities/outreach.abilities.json +25 -0
  8. package/dist/abilities/second-agent.abilities.json +5 -1
  9. package/dist/actives/actives.contract.d.ts +7160 -7021
  10. package/dist/actives/actives.contract.d.ts.map +1 -1
  11. package/dist/actives/actives.contract.js +2 -0
  12. package/dist/actives/actives.contract.spec.d.ts +2 -0
  13. package/dist/actives/actives.contract.spec.d.ts.map +1 -0
  14. package/dist/actives/actives.contract.spec.js +35 -0
  15. package/dist/agent-client-links/agent-client-links.contract.d.ts +1087 -1087
  16. package/dist/auth/auth.contract.d.ts +108 -108
  17. package/dist/bookings/bookings.contract.d.ts +10131 -9939
  18. package/dist/bookings/bookings.contract.d.ts.map +1 -1
  19. package/dist/call-history/call-history.contract.d.ts +718 -718
  20. package/dist/calls-feed/calls-feed.contract.d.ts +86 -86
  21. package/dist/client-contacts/client-contacts.contract.d.ts +469 -469
  22. package/dist/clients/clients.contract.d.ts +203 -203
  23. package/dist/collaboration-checkings/collaboration-checkings.contract.d.ts +2713 -2713
  24. package/dist/collaborations/collaborations.contract.d.ts +2270 -2270
  25. package/dist/common/common-schemas.d.ts +12 -12
  26. package/dist/companies/companies.contract.d.ts +74 -74
  27. package/dist/crews/crews.contract.d.ts +253 -253
  28. package/dist/cron-executions/cron-executions.contract.d.ts +182 -182
  29. package/dist/curated-worker-leads/candidate-coordination.contract.d.ts +3353 -3353
  30. package/dist/curated-worker-leads/candidate-edit-session.contract.d.ts +20 -20
  31. package/dist/curated-worker-leads/consent-queue.contract.d.ts +196 -166
  32. package/dist/curated-worker-leads/consent-queue.contract.d.ts.map +1 -1
  33. package/dist/curated-worker-leads/curated-worker-lead-config.contract.d.ts +16 -16
  34. package/dist/curated-worker-leads/curated-worker-leads.contract.d.ts +2 -2
  35. package/dist/curated-worker-leads/jobs-tab.contract.d.ts +1192 -564
  36. package/dist/curated-worker-leads/jobs-tab.contract.d.ts.map +1 -1
  37. package/dist/curated-worker-leads/jobs-tab.contract.js +65 -2
  38. package/dist/curated-worker-leads/lead-agent-area.contract.d.ts +4 -4
  39. package/dist/curated-worker-leads/outreach-pool-summary.contract.spec.d.ts +2 -0
  40. package/dist/curated-worker-leads/outreach-pool-summary.contract.spec.d.ts.map +1 -0
  41. package/dist/curated-worker-leads/outreach-pool-summary.contract.spec.js +39 -0
  42. package/dist/curated-worker-leads/owned-jobs-tab.contract.d.ts +46 -46
  43. package/dist/curated-workers/curated-workers.contract.d.ts +789 -789
  44. package/dist/dashboards/agent-daily-metrics.contract.d.ts +2 -2
  45. package/dist/dashboards/dashboard-widgets.contract.d.ts +292 -292
  46. package/dist/dashboards/dashboard.contract.d.ts +12 -12
  47. package/dist/document-intake/document-intake.contract.d.ts +601 -601
  48. package/dist/export-jobs/export-jobs.contract.d.ts +572 -562
  49. package/dist/export-jobs/export-jobs.contract.d.ts.map +1 -1
  50. package/dist/exports-events/exports-events.schemas.d.ts +6 -6
  51. package/dist/files/files.contract.d.ts +74 -74
  52. package/dist/index.d.ts +10 -0
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +10 -0
  55. package/dist/interactions/interactions.contract.d.ts +6 -6
  56. package/dist/job-clusters/job-clusters.contract.d.ts +112 -112
  57. package/dist/jobs/job-moderation-fields.spec.d.ts +2 -0
  58. package/dist/jobs/job-moderation-fields.spec.d.ts.map +1 -0
  59. package/dist/jobs/job-moderation-fields.spec.js +72 -0
  60. package/dist/jobs/jobs.contract.d.ts +7734 -7474
  61. package/dist/jobs/jobs.contract.d.ts.map +1 -1
  62. package/dist/jobs/jobs.contract.js +57 -0
  63. package/dist/kpi-impersonation/kpi-impersonation.contract.d.ts +141 -141
  64. package/dist/lead-assignments/lead-assignments.contract.d.ts +911 -911
  65. package/dist/lead-distribution/agent-lead-distribution.contract.d.ts +209 -209
  66. package/dist/lead-distribution/lead-distribution-config.contract.d.ts +77 -77
  67. package/dist/leads/leads.contract.d.ts +283 -283
  68. package/dist/locations/locations.contract.d.ts +49 -49
  69. package/dist/notifications/notifications.contract.d.ts +49 -49
  70. package/dist/offices/offices.contract.d.ts +34 -34
  71. package/dist/outreach/__tests__/outreach-claim.test.js +1 -0
  72. package/dist/outreach/__tests__/outreach-contract-additions.spec.d.ts +2 -0
  73. package/dist/outreach/__tests__/outreach-contract-additions.spec.d.ts.map +1 -0
  74. package/dist/outreach/__tests__/outreach-contract-additions.spec.js +89 -0
  75. package/dist/outreach/__tests__/outreach-requests.contract.spec.d.ts +2 -0
  76. package/dist/outreach/__tests__/outreach-requests.contract.spec.d.ts.map +1 -0
  77. package/dist/outreach/__tests__/outreach-requests.contract.spec.js +77 -0
  78. package/dist/outreach/__tests__/outreach-routes.test.js +14 -3
  79. package/dist/outreach/__tests__/outreach.schemas.test.js +5 -1
  80. package/dist/outreach/outreach-requests.contract.d.ts +1753 -0
  81. package/dist/outreach/outreach-requests.contract.d.ts.map +1 -0
  82. package/dist/outreach/outreach-requests.contract.js +154 -0
  83. package/dist/outreach/outreach-requests.schemas.d.ts +95 -0
  84. package/dist/outreach/outreach-requests.schemas.d.ts.map +1 -0
  85. package/dist/outreach/outreach-requests.schemas.js +63 -0
  86. package/dist/outreach/outreach.contract.d.ts +373 -101
  87. package/dist/outreach/outreach.contract.d.ts.map +1 -1
  88. package/dist/outreach/outreach.contract.js +18 -0
  89. package/dist/outreach/outreach.contract.spec.d.ts +2 -0
  90. package/dist/outreach/outreach.contract.spec.d.ts.map +1 -0
  91. package/dist/outreach/outreach.contract.spec.js +54 -0
  92. package/dist/outreach/outreach.schemas.d.ts +15 -10
  93. package/dist/outreach/outreach.schemas.d.ts.map +1 -1
  94. package/dist/outreach/outreach.schemas.js +5 -2
  95. package/dist/own-research/own-research.contract.d.ts +775 -775
  96. package/dist/postcodes/postcodes.contract.d.ts +24 -24
  97. package/dist/proofs/proof-type.enum.d.ts +4 -4
  98. package/dist/proofs/proofs.contract.d.ts +363 -363
  99. package/dist/proofs/proofs.dtos.d.ts +124 -124
  100. package/dist/qualifications/qualifications.contract.d.ts +38 -38
  101. package/dist/relay-pods/relay-pod-sessions.contract.d.ts +680 -0
  102. package/dist/relay-pods/relay-pod-sessions.contract.d.ts.map +1 -0
  103. package/dist/relay-pods/relay-pod-sessions.contract.js +67 -0
  104. package/dist/relay-pods/relay-pod-sessions.contract.spec.d.ts +2 -0
  105. package/dist/relay-pods/relay-pod-sessions.contract.spec.d.ts.map +1 -0
  106. package/dist/relay-pods/relay-pod-sessions.contract.spec.js +129 -0
  107. package/dist/relay-pods/relay-pods.contract.d.ts +1569 -0
  108. package/dist/relay-pods/relay-pods.contract.d.ts.map +1 -0
  109. package/dist/relay-pods/relay-pods.contract.js +188 -0
  110. package/dist/relay-pods/relay-pods.contract.spec.d.ts +2 -0
  111. package/dist/relay-pods/relay-pods.contract.spec.d.ts.map +1 -0
  112. package/dist/relay-pods/relay-pods.contract.spec.js +141 -0
  113. package/dist/relay-pods/relay-pods.schemas.d.ts +415 -0
  114. package/dist/relay-pods/relay-pods.schemas.d.ts.map +1 -0
  115. package/dist/relay-pods/relay-pods.schemas.js +112 -0
  116. package/dist/shared/live-booking.schema.d.ts +4 -4
  117. package/dist/shared/summary-schemas.d.ts +6 -6
  118. package/dist/sheets-sync/sheets-sync.contract.d.ts +939 -939
  119. package/dist/telegram/telegram.contract.d.ts +22 -22
  120. package/dist/trades/trades.contract.d.ts +90 -90
  121. package/dist/user-access-grants/user-access-grants.contract.d.ts +165 -165
  122. package/dist/users/__tests__/assignable-roles.spec.d.ts +2 -0
  123. package/dist/users/__tests__/assignable-roles.spec.d.ts.map +1 -0
  124. package/dist/users/__tests__/assignable-roles.spec.js +41 -0
  125. package/dist/users/users.contract.d.ts +399 -393
  126. package/dist/users/users.contract.d.ts.map +1 -1
  127. package/dist/users/users.contract.js +11 -0
  128. package/dist/worker-identity-cases/worker-identity-cases.contract.d.ts +585 -527
  129. package/dist/worker-identity-cases/worker-identity-cases.contract.d.ts.map +1 -1
  130. package/dist/worker-merge-proposals/worker-merge-proposals.contract.d.ts +278 -236
  131. package/dist/worker-merge-proposals/worker-merge-proposals.contract.d.ts.map +1 -1
  132. package/dist/worker-merge-proposals/worker-merge-proposals.contract.js +1 -0
  133. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.d.ts +153 -153
  134. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.schemas.d.ts +59 -59
  135. package/dist/workers/workers.contract.d.ts +2919 -2919
  136. package/package.json +1 -1
  137. package/dist/bookings/bookings.contract.spec.d.ts +0 -2
  138. package/dist/bookings/bookings.contract.spec.d.ts.map +0 -1
  139. package/dist/bookings/bookings.contract.spec.js +0 -11
@@ -20,9 +20,11 @@ export declare const SecondAgentAbilities: AbilityRule[];
20
20
  export declare const TeamLeadAbilities: AbilityRule[];
21
21
  export declare const BotAbilities: AbilityRule[];
22
22
  export declare const CronSchedulerAbilities: AbilityRule[];
23
+ export declare const OutreachServiceAbilities: AbilityRule[];
23
24
  export declare const OfficeManagerAbilities: AbilityRule[];
24
25
  export declare const WorkerCuratorAbilities: AbilityRule[];
25
26
  export declare const InterconnectionAbilities: AbilityRule[];
27
+ export declare const OutreachAbilities: AbilityRule[];
26
28
  export declare const RoleAbilities: {
27
29
  readonly ADMIN: AbilityRule[];
28
30
  readonly KPI: AbilityRule[];
@@ -31,17 +33,21 @@ export declare const RoleAbilities: {
31
33
  readonly TEAM_LEADS: AbilityRule[];
32
34
  readonly BOT: AbilityRule[];
33
35
  readonly CRON_SCHEDULER: AbilityRule[];
36
+ readonly OUTREACH_SERVICE: AbilityRule[];
34
37
  readonly OFFICE_MANAGER: AbilityRule[];
35
38
  readonly WORKER_CURATOR: AbilityRule[];
36
39
  readonly INTERCONNECTION: AbilityRule[];
40
+ readonly OUTREACH: AbilityRule[];
37
41
  };
38
42
  export type RoleAbilitiesType = typeof RoleAbilities;
39
43
  /**
40
44
  * Virtual subjects that don't correspond to entity classes.
41
45
  * Used for feature-level permission checking.
42
- * These must be kept in sync with the subjects in the abilities JSON files.
46
+ * Kept in sync with the abilities JSON files by abilities.contract.spec.ts,
47
+ * which fails on any JSON subject missing from the known-subject registry.
43
48
  */
44
- 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';
49
+ export declare const VIRTUAL_SUBJECTS: readonly ["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", "RelayPod"];
50
+ export type VirtualSubjects = (typeof VIRTUAL_SUBJECTS)[number];
45
51
  /**
46
52
  * Roles an OFFICE_MANAGER may assign to users they create.
47
53
  * Single source of truth for the office-manager create-user role policy.
@@ -1 +1 @@
1
- {"version":3,"file":"abilities.contract.d.ts","sourceRoot":"","sources":["../../contracts/abilities/abilities.contract.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,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,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;;;;;;;;;;;CAWhB,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,CAAC;AAE5B;;;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"}
1
+ {"version":3,"file":"abilities.contract.d.ts","sourceRoot":"","sources":["../../contracts/abilities/abilities.contract.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,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;AAC5C,eAAO,MAAM,iBAAiB,EAAE,WAAW,EACP,CAAC;AAErC,eAAO,MAAM,aAAa;;;;;;;;;;;;;CAahB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,OAAO,aAAa,CAAC;AAErD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,8uBAkCnB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE;;;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,7 +10,7 @@ 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.GLOBAL_CURATED_SCOPE_ROLES = exports.SHARED_CURATED_MATCH_ROLES = exports.OFFICE_MANAGER_ASSIGNABLE_ROLES = exports.RoleAbilities = exports.InterconnectionAbilities = exports.WorkerCuratorAbilities = exports.OfficeManagerAbilities = 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.VIRTUAL_SUBJECTS = exports.RoleAbilities = exports.OutreachAbilities = 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
14
  exports.getRolesOmCannotAssign = getRolesOmCannotAssign;
15
15
  exports.hasSharedCuratedMatchAccess = hasSharedCuratedMatchAccess;
16
16
  exports.hasGlobalCuratedCandidateScope = hasGlobalCuratedCandidateScope;
@@ -21,10 +21,12 @@ const cron_scheduler_abilities_json_1 = __importDefault(require("./cron-schedule
21
21
  const first_agent_abilities_json_1 = __importDefault(require("./first-agent.abilities.json"));
22
22
  const kpi_abilities_json_1 = __importDefault(require("./kpi.abilities.json"));
23
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"));
24
25
  const second_agent_abilities_json_1 = __importDefault(require("./second-agent.abilities.json"));
25
26
  const team_leads_json_1 = __importDefault(require("./team-leads.json"));
26
27
  const worker_curator_abilities_json_1 = __importDefault(require("./worker-curator.abilities.json"));
27
28
  const interconnection_abilities_json_1 = __importDefault(require("./interconnection.abilities.json"));
29
+ const outreach_abilities_json_1 = __importDefault(require("./outreach.abilities.json"));
28
30
  const users_contract_1 = require("../users/users.contract");
29
31
  exports.AdminAbilities = admin_abilities_json_1.default;
30
32
  exports.KpiAbilities = kpi_abilities_json_1.default;
@@ -33,9 +35,11 @@ exports.SecondAgentAbilities = second_agent_abilities_json_1.default;
33
35
  exports.TeamLeadAbilities = team_leads_json_1.default;
34
36
  exports.BotAbilities = bot_abilities_json_1.default;
35
37
  exports.CronSchedulerAbilities = cron_scheduler_abilities_json_1.default;
38
+ exports.OutreachServiceAbilities = outreach_service_abilities_json_1.default;
36
39
  exports.OfficeManagerAbilities = office_manager_abilities_json_1.default;
37
40
  exports.WorkerCuratorAbilities = worker_curator_abilities_json_1.default;
38
41
  exports.InterconnectionAbilities = interconnection_abilities_json_1.default;
42
+ exports.OutreachAbilities = outreach_abilities_json_1.default;
39
43
  exports.RoleAbilities = {
40
44
  ADMIN: exports.AdminAbilities,
41
45
  KPI: exports.KpiAbilities,
@@ -44,10 +48,53 @@ exports.RoleAbilities = {
44
48
  TEAM_LEADS: exports.TeamLeadAbilities,
45
49
  BOT: exports.BotAbilities,
46
50
  CRON_SCHEDULER: exports.CronSchedulerAbilities,
51
+ OUTREACH_SERVICE: exports.OutreachServiceAbilities,
47
52
  OFFICE_MANAGER: exports.OfficeManagerAbilities,
48
53
  WORKER_CURATOR: exports.WorkerCuratorAbilities,
49
54
  INTERCONNECTION: exports.InterconnectionAbilities,
55
+ OUTREACH: exports.OutreachAbilities,
50
56
  };
57
+ /**
58
+ * Virtual subjects that don't correspond to entity classes.
59
+ * Used for feature-level permission checking.
60
+ * Kept in sync with the abilities JSON files by abilities.contract.spec.ts,
61
+ * which fails on any JSON subject missing from the known-subject registry.
62
+ */
63
+ exports.VIRTUAL_SUBJECTS = [
64
+ 'FaDashboardWidgets',
65
+ 'SaDashboardWidgets',
66
+ 'DashboardTrends',
67
+ 'AdminFaDashboardWidgets',
68
+ 'AdminSaDashboardWidgets',
69
+ 'AdminAgentStats',
70
+ 'AdminProofs',
71
+ 'AdminDashboardTrends',
72
+ 'FirstAgentTutorials',
73
+ 'CuratedMatchWorkspace',
74
+ 'JobCandidate',
75
+ 'LeadActivityEvent',
76
+ 'FilterCandidateContactHistorySchema',
77
+ 'SecondAgentTutorials',
78
+ 'SortActiveSchema',
79
+ 'SortBookingSchema',
80
+ 'SortJobSchema',
81
+ 'SortWorkerSchema',
82
+ 'SortCuratedWorkerSchema',
83
+ 'SortLeadSchema',
84
+ 'SortOwnResearchLeadSchema',
85
+ 'SortClientSchema',
86
+ 'SortCompanySchema',
87
+ 'SortCollaborationSchema',
88
+ 'SortCollaborationCheckingSchema',
89
+ 'SortClientContactSchema',
90
+ 'SortCallHistorySchema',
91
+ 'SortUserSchema',
92
+ 'SortCrewSchema',
93
+ 'FilterExportJobSchema',
94
+ 'OutreachClaim',
95
+ 'OutreachRequest',
96
+ 'RelayPod',
97
+ ];
51
98
  /**
52
99
  * Roles an OFFICE_MANAGER may assign to users they create.
53
100
  * Single source of truth for the office-manager create-user role policy.
@@ -1,6 +1,104 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const abilities_contract_1 = require("./abilities.contract");
4
+ /**
5
+ * Entity subjects the API resolves through SUBJECT_CLASS_MAP
6
+ * (apps/api/src/modules/casl/casl-ability.factory.ts). Mirrored here because
7
+ * the contracts package cannot import API entity classes. A subject used in
8
+ * an abilities JSON but absent from BOTH this list and VIRTUAL_SUBJECTS is a
9
+ * typo that would silently grant nothing — the validity test below turns it
10
+ * into a loud failure. Adding a genuinely new subject means registering it
11
+ * here (or in VIRTUAL_SUBJECTS) on purpose.
12
+ */
13
+ const ENTITY_SUBJECTS = [
14
+ 'Active',
15
+ 'AgentClientLink',
16
+ 'Booking',
17
+ 'CallHistory',
18
+ 'Client',
19
+ 'ClientContact',
20
+ 'Collaboration',
21
+ 'CollaborationChecking',
22
+ 'Company',
23
+ 'Crew',
24
+ 'CronExecution',
25
+ 'CuratedWorker',
26
+ 'CuratedWorkerLeadConfig',
27
+ 'File',
28
+ 'InteractionEvent',
29
+ 'Job',
30
+ 'Lead',
31
+ 'LeadAssignment',
32
+ 'Location',
33
+ 'Office',
34
+ 'OwnResearchLead',
35
+ 'OwnedWorkerJobMatch',
36
+ 'Proof',
37
+ 'ProofEntityLink',
38
+ 'ProofPhoto',
39
+ 'Qualification',
40
+ 'QualificationType',
41
+ 'Trade',
42
+ 'User',
43
+ 'Worker',
44
+ 'WorkerJobMatch',
45
+ 'WorkerLeadAssignment',
46
+ 'WorkerLeadProfile',
47
+ ];
48
+ /** Filter DTO subjects checked by name against field-filter grants. */
49
+ const FILTER_SCHEMA_SUBJECTS = [
50
+ 'FilterActiveSchema',
51
+ 'FilterAgentClientLinkSchema',
52
+ 'FilterBookingSchema',
53
+ 'FilterCallHistorySchema',
54
+ 'FilterClientContactSchema',
55
+ 'FilterClientSchema',
56
+ 'FilterCollaborationCheckingSchema',
57
+ 'FilterCollaborationSchema',
58
+ 'FilterCompanySchema',
59
+ 'FilterCrewSchema',
60
+ 'FilterCuratedWorkerSchema',
61
+ 'FilterJobSchema',
62
+ 'FilterLeadSchema',
63
+ 'FilterLocationSchema',
64
+ 'FilterOwnResearchLeadSchema',
65
+ 'FilterProofsSchema',
66
+ 'FilterUserSchema',
67
+ 'FilterWorkerSchema',
68
+ ];
69
+ const KNOWN_SUBJECTS = new Set([
70
+ ...abilities_contract_1.VIRTUAL_SUBJECTS,
71
+ ...ENTITY_SUBJECTS,
72
+ ...FILTER_SCHEMA_SUBJECTS,
73
+ 'Schema:BookingItem',
74
+ 'all',
75
+ ]);
76
+ describe('abilities JSON subject validity', () => {
77
+ it.each(Object.entries(abilities_contract_1.RoleAbilities))('%s abilities reference only known subjects', (_role, rules) => {
78
+ const unknown = rules
79
+ .map((rule) => rule.subject)
80
+ .filter((subject) => !KNOWN_SUBJECTS.has(subject));
81
+ expect(unknown).toEqual([]);
82
+ });
83
+ });
84
+ describe('Relay pod ownership grants', () => {
85
+ it('registers RelayPod and conditions outreach management on ownership', () => {
86
+ expect(abilities_contract_1.VIRTUAL_SUBJECTS).toContain('RelayPod');
87
+ expect(abilities_contract_1.RoleAbilities.OUTREACH).toContainEqual({
88
+ action: 'manage',
89
+ subject: 'RelayPod',
90
+ conditions: { ownerUserId: '{{ id }}' },
91
+ });
92
+ expect(abilities_contract_1.RoleAbilities.OUTREACH).toContainEqual({
93
+ action: 'update',
94
+ subject: 'OutreachRequest',
95
+ conditions: {
96
+ requestedByUserId: '{{ id }}',
97
+ status: 'PENDING',
98
+ },
99
+ });
100
+ });
101
+ });
4
102
  describe('hasGlobalCuratedCandidateScope', () => {
5
103
  it('true for ADMIN', () => {
6
104
  expect((0, abilities_contract_1.hasGlobalCuratedCandidateScope)(['ADMIN'])).toBe(true);
@@ -98,6 +98,7 @@
98
98
  "qualificationFilters",
99
99
  "qualificationFilters[*].*",
100
100
  "status",
101
+ "outreachRequested",
101
102
  "clientId",
102
103
  "companyId",
103
104
  "postcode",
@@ -167,7 +168,10 @@
167
168
  "endDate",
168
169
  "createdAt",
169
170
  "updatedAt",
170
- "createdById"
171
+ "createdById",
172
+ "sourceMessageDeletedAt",
173
+ "minimumRateDeletionExemptAt",
174
+ "minimumRateDeletionExemptById"
171
175
  ],
172
176
  "conditions": {
173
177
  "faUserId": "{{ id }}"
@@ -203,7 +207,10 @@
203
207
  "endDate",
204
208
  "createdAt",
205
209
  "updatedAt",
206
- "createdById"
210
+ "createdById",
211
+ "sourceMessageDeletedAt",
212
+ "minimumRateDeletionExemptAt",
213
+ "minimumRateDeletionExemptById"
207
214
  ],
208
215
  "conditions": {
209
216
  "createdById": "{{ id }}"
@@ -0,0 +1,14 @@
1
+ [
2
+ {
3
+ "action": "create",
4
+ "subject": "OutreachClaim"
5
+ },
6
+ {
7
+ "action": "read",
8
+ "subject": "OutreachRequest"
9
+ },
10
+ {
11
+ "action": "update",
12
+ "subject": "OutreachRequest"
13
+ }
14
+ ]
@@ -0,0 +1,25 @@
1
+ [
2
+ {
3
+ "action": "create",
4
+ "subject": "OutreachRequest"
5
+ },
6
+ {
7
+ "action": "read",
8
+ "subject": "OutreachRequest"
9
+ },
10
+ {
11
+ "action": "update",
12
+ "subject": "OutreachRequest",
13
+ "conditions": {
14
+ "requestedByUserId": "{{ id }}",
15
+ "status": "PENDING"
16
+ }
17
+ },
18
+ {
19
+ "action": "manage",
20
+ "subject": "RelayPod",
21
+ "conditions": {
22
+ "ownerUserId": "{{ id }}"
23
+ }
24
+ }
25
+ ]
@@ -205,7 +205,10 @@
205
205
  "updatedAt.*",
206
206
  "createdById",
207
207
  "createdBy",
208
- "createdBy.*"
208
+ "createdBy.*",
209
+ "sourceMessageDeletedAt",
210
+ "minimumRateDeletionExemptAt",
211
+ "minimumRateDeletionExemptById"
209
212
  ]
210
213
  },
211
214
  {
@@ -534,6 +537,7 @@
534
537
  "qualificationFilters",
535
538
  "qualificationFilters[*].*",
536
539
  "status",
540
+ "outreachRequested",
537
541
  "userId",
538
542
  "postcode",
539
543
  "distance",