@dakkitor/api-contracts 1.5.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 (129) hide show
  1. package/dist/abilities/abilities.contract.d.ts +6 -2
  2. package/dist/abilities/abilities.contract.d.ts.map +1 -1
  3. package/dist/abilities/abilities.contract.js +45 -1
  4. package/dist/abilities/abilities.contract.spec.js +98 -0
  5. package/dist/abilities/first-agent.abilities.json +8 -14
  6. package/dist/abilities/outreach.abilities.json +25 -0
  7. package/dist/abilities/second-agent.abilities.json +4 -13
  8. package/dist/actives/actives.contract.d.ts +3618 -3479
  9. package/dist/actives/actives.contract.d.ts.map +1 -1
  10. package/dist/actives/actives.contract.js +2 -0
  11. package/dist/actives/actives.contract.spec.d.ts +2 -0
  12. package/dist/actives/actives.contract.spec.d.ts.map +1 -0
  13. package/dist/actives/actives.contract.spec.js +35 -0
  14. package/dist/agent-client-links/agent-client-links.contract.d.ts +1087 -1087
  15. package/dist/auth/auth.contract.d.ts +108 -108
  16. package/dist/bookings/bookings.contract.d.ts +6644 -6452
  17. package/dist/bookings/bookings.contract.d.ts.map +1 -1
  18. package/dist/call-history/call-history.contract.d.ts +718 -718
  19. package/dist/calls-feed/calls-feed.contract.d.ts +86 -86
  20. package/dist/client-contacts/client-contacts.contract.d.ts +469 -469
  21. package/dist/clients/clients.contract.d.ts +203 -203
  22. package/dist/collaboration-checkings/collaboration-checkings.contract.d.ts +2713 -2713
  23. package/dist/collaborations/collaborations.contract.d.ts +2270 -2270
  24. package/dist/common/common-schemas.d.ts +12 -12
  25. package/dist/companies/companies.contract.d.ts +74 -74
  26. package/dist/crews/crews.contract.d.ts +253 -253
  27. package/dist/cron-executions/cron-executions.contract.d.ts +182 -182
  28. package/dist/curated-worker-leads/candidate-coordination.contract.d.ts +2723 -2723
  29. package/dist/curated-worker-leads/candidate-edit-session.contract.d.ts +378 -378
  30. package/dist/curated-worker-leads/consent-queue.contract.d.ts +1137 -1107
  31. package/dist/curated-worker-leads/consent-queue.contract.d.ts.map +1 -1
  32. package/dist/curated-worker-leads/curated-worker-lead-config.contract.d.ts +16 -16
  33. package/dist/curated-worker-leads/curated-worker-leads.contract.d.ts +2 -2
  34. package/dist/curated-worker-leads/jobs-tab.contract.d.ts +5818 -5372
  35. package/dist/curated-worker-leads/jobs-tab.contract.d.ts.map +1 -1
  36. package/dist/curated-worker-leads/jobs-tab.contract.js +34 -1
  37. package/dist/curated-worker-leads/lead-agent-area.contract.d.ts +4 -4
  38. package/dist/curated-worker-leads/outreach-pool-summary.contract.spec.d.ts +2 -0
  39. package/dist/curated-worker-leads/outreach-pool-summary.contract.spec.d.ts.map +1 -0
  40. package/dist/curated-worker-leads/outreach-pool-summary.contract.spec.js +39 -0
  41. package/dist/curated-worker-leads/owned-jobs-tab.contract.d.ts +148 -148
  42. package/dist/curated-workers/curated-workers.contract.d.ts +789 -789
  43. package/dist/dashboards/agent-daily-metrics.contract.d.ts +2 -2
  44. package/dist/dashboards/dashboard-widgets.contract.d.ts +180 -180
  45. package/dist/dashboards/dashboard.contract.d.ts +12 -12
  46. package/dist/document-intake/document-intake.contract.d.ts +601 -601
  47. package/dist/export-jobs/export-jobs.contract.d.ts +694 -694
  48. package/dist/exports-events/exports-events.schemas.d.ts +4 -4
  49. package/dist/files/files.contract.d.ts +74 -74
  50. package/dist/index.d.ts +6 -0
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +6 -0
  53. package/dist/interactions/interactions.contract.d.ts +6 -6
  54. package/dist/job-clusters/job-clusters.contract.d.ts +112 -112
  55. package/dist/jobs/job-moderation-fields.spec.d.ts +2 -0
  56. package/dist/jobs/job-moderation-fields.spec.d.ts.map +1 -0
  57. package/dist/jobs/job-moderation-fields.spec.js +72 -0
  58. package/dist/jobs/jobs.contract.d.ts +4773 -4525
  59. package/dist/jobs/jobs.contract.d.ts.map +1 -1
  60. package/dist/jobs/jobs.contract.js +48 -0
  61. package/dist/kpi-impersonation/kpi-impersonation.contract.d.ts +141 -141
  62. package/dist/lead-assignments/lead-assignments.contract.d.ts +911 -911
  63. package/dist/lead-distribution/agent-lead-distribution.contract.d.ts +209 -209
  64. package/dist/lead-distribution/lead-distribution-config.contract.d.ts +77 -77
  65. package/dist/leads/leads.contract.d.ts +283 -283
  66. package/dist/locations/locations.contract.d.ts +49 -49
  67. package/dist/notifications/notifications.contract.d.ts +67 -67
  68. package/dist/offices/offices.contract.d.ts +34 -34
  69. package/dist/outreach/__tests__/outreach-contract-additions.spec.js +11 -0
  70. package/dist/outreach/__tests__/outreach-requests.contract.spec.js +13 -0
  71. package/dist/outreach/__tests__/outreach-routes.test.js +14 -3
  72. package/dist/outreach/outreach-requests.contract.d.ts +862 -217
  73. package/dist/outreach/outreach-requests.contract.d.ts.map +1 -1
  74. package/dist/outreach/outreach-requests.contract.js +23 -3
  75. package/dist/outreach/outreach-requests.schemas.d.ts +56 -10
  76. package/dist/outreach/outreach-requests.schemas.d.ts.map +1 -1
  77. package/dist/outreach/outreach-requests.schemas.js +3 -0
  78. package/dist/outreach/outreach.contract.d.ts +300 -38
  79. package/dist/outreach/outreach.contract.d.ts.map +1 -1
  80. package/dist/outreach/outreach.contract.js +18 -0
  81. package/dist/outreach/outreach.contract.spec.d.ts +2 -0
  82. package/dist/outreach/outreach.contract.spec.d.ts.map +1 -0
  83. package/dist/outreach/outreach.contract.spec.js +54 -0
  84. package/dist/outreach/outreach.schemas.d.ts +2 -2
  85. package/dist/own-research/own-research.contract.d.ts +775 -775
  86. package/dist/postcodes/postcodes.contract.d.ts +24 -24
  87. package/dist/proofs/proof-type.enum.d.ts +4 -4
  88. package/dist/proofs/proofs.contract.d.ts +363 -363
  89. package/dist/proofs/proofs.dtos.d.ts +124 -124
  90. package/dist/qualifications/qualifications.contract.d.ts +38 -38
  91. package/dist/relay-pods/relay-pod-sessions.contract.d.ts +680 -0
  92. package/dist/relay-pods/relay-pod-sessions.contract.d.ts.map +1 -0
  93. package/dist/relay-pods/relay-pod-sessions.contract.js +67 -0
  94. package/dist/relay-pods/relay-pod-sessions.contract.spec.d.ts +2 -0
  95. package/dist/relay-pods/relay-pod-sessions.contract.spec.d.ts.map +1 -0
  96. package/dist/relay-pods/relay-pod-sessions.contract.spec.js +129 -0
  97. package/dist/relay-pods/relay-pods.contract.d.ts +1569 -0
  98. package/dist/relay-pods/relay-pods.contract.d.ts.map +1 -0
  99. package/dist/relay-pods/relay-pods.contract.js +188 -0
  100. package/dist/relay-pods/relay-pods.contract.spec.d.ts +2 -0
  101. package/dist/relay-pods/relay-pods.contract.spec.d.ts.map +1 -0
  102. package/dist/relay-pods/relay-pods.contract.spec.js +141 -0
  103. package/dist/relay-pods/relay-pods.schemas.d.ts +415 -0
  104. package/dist/relay-pods/relay-pods.schemas.d.ts.map +1 -0
  105. package/dist/relay-pods/relay-pods.schemas.js +112 -0
  106. package/dist/shared/live-booking.schema.d.ts +4 -4
  107. package/dist/shared/summary-schemas.d.ts +6 -6
  108. package/dist/sheets-sync/sheets-sync.contract.d.ts +939 -939
  109. package/dist/telegram/telegram.contract.d.ts +22 -22
  110. package/dist/trades/trades.contract.d.ts +90 -90
  111. package/dist/user-access-grants/user-access-grants.contract.d.ts +165 -165
  112. package/dist/users/__tests__/assignable-roles.spec.d.ts +2 -0
  113. package/dist/users/__tests__/assignable-roles.spec.d.ts.map +1 -0
  114. package/dist/users/__tests__/assignable-roles.spec.js +41 -0
  115. package/dist/users/users.contract.d.ts +399 -393
  116. package/dist/users/users.contract.d.ts.map +1 -1
  117. package/dist/users/users.contract.js +11 -0
  118. package/dist/worker-identity-cases/worker-identity-cases.contract.d.ts +585 -527
  119. package/dist/worker-identity-cases/worker-identity-cases.contract.d.ts.map +1 -1
  120. package/dist/worker-merge-proposals/worker-merge-proposals.contract.d.ts +278 -236
  121. package/dist/worker-merge-proposals/worker-merge-proposals.contract.d.ts.map +1 -1
  122. package/dist/worker-merge-proposals/worker-merge-proposals.contract.js +1 -0
  123. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.d.ts +153 -153
  124. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.schemas.d.ts +59 -59
  125. package/dist/workers/workers.contract.d.ts +2919 -2919
  126. package/package.json +1 -1
  127. package/dist/bookings/bookings.contract.spec.d.ts +0 -2
  128. package/dist/bookings/bookings.contract.spec.d.ts.map +0 -1
  129. package/dist/bookings/bookings.contract.spec.js +0 -11
@@ -24,6 +24,7 @@ export declare const OutreachServiceAbilities: AbilityRule[];
24
24
  export declare const OfficeManagerAbilities: AbilityRule[];
25
25
  export declare const WorkerCuratorAbilities: AbilityRule[];
26
26
  export declare const InterconnectionAbilities: AbilityRule[];
27
+ export declare const OutreachAbilities: AbilityRule[];
27
28
  export declare const RoleAbilities: {
28
29
  readonly ADMIN: AbilityRule[];
29
30
  readonly KPI: AbilityRule[];
@@ -36,14 +37,17 @@ export declare const RoleAbilities: {
36
37
  readonly OFFICE_MANAGER: AbilityRule[];
37
38
  readonly WORKER_CURATOR: AbilityRule[];
38
39
  readonly INTERCONNECTION: AbilityRule[];
40
+ readonly OUTREACH: AbilityRule[];
39
41
  };
40
42
  export type RoleAbilitiesType = typeof RoleAbilities;
41
43
  /**
42
44
  * Virtual subjects that don't correspond to entity classes.
43
45
  * Used for feature-level permission checking.
44
- * 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.
45
48
  */
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';
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];
47
51
  /**
48
52
  * Roles an OFFICE_MANAGER may assign to users they create.
49
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;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"}
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.OutreachServiceAbilities = 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;
@@ -26,6 +26,7 @@ const second_agent_abilities_json_1 = __importDefault(require("./second-agent.ab
26
26
  const team_leads_json_1 = __importDefault(require("./team-leads.json"));
27
27
  const worker_curator_abilities_json_1 = __importDefault(require("./worker-curator.abilities.json"));
28
28
  const interconnection_abilities_json_1 = __importDefault(require("./interconnection.abilities.json"));
29
+ const outreach_abilities_json_1 = __importDefault(require("./outreach.abilities.json"));
29
30
  const users_contract_1 = require("../users/users.contract");
30
31
  exports.AdminAbilities = admin_abilities_json_1.default;
31
32
  exports.KpiAbilities = kpi_abilities_json_1.default;
@@ -38,6 +39,7 @@ exports.OutreachServiceAbilities = outreach_service_abilities_json_1.default;
38
39
  exports.OfficeManagerAbilities = office_manager_abilities_json_1.default;
39
40
  exports.WorkerCuratorAbilities = worker_curator_abilities_json_1.default;
40
41
  exports.InterconnectionAbilities = interconnection_abilities_json_1.default;
42
+ exports.OutreachAbilities = outreach_abilities_json_1.default;
41
43
  exports.RoleAbilities = {
42
44
  ADMIN: exports.AdminAbilities,
43
45
  KPI: exports.KpiAbilities,
@@ -50,7 +52,49 @@ exports.RoleAbilities = {
50
52
  OFFICE_MANAGER: exports.OfficeManagerAbilities,
51
53
  WORKER_CURATOR: exports.WorkerCuratorAbilities,
52
54
  INTERCONNECTION: exports.InterconnectionAbilities,
55
+ OUTREACH: exports.OutreachAbilities,
53
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
+ ];
54
98
  /**
55
99
  * Roles an OFFICE_MANAGER may assign to users they create.
56
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);
@@ -168,7 +168,10 @@
168
168
  "endDate",
169
169
  "createdAt",
170
170
  "updatedAt",
171
- "createdById"
171
+ "createdById",
172
+ "sourceMessageDeletedAt",
173
+ "minimumRateDeletionExemptAt",
174
+ "minimumRateDeletionExemptById"
172
175
  ],
173
176
  "conditions": {
174
177
  "faUserId": "{{ id }}"
@@ -204,7 +207,10 @@
204
207
  "endDate",
205
208
  "createdAt",
206
209
  "updatedAt",
207
- "createdById"
210
+ "createdById",
211
+ "sourceMessageDeletedAt",
212
+ "minimumRateDeletionExemptAt",
213
+ "minimumRateDeletionExemptById"
208
214
  ],
209
215
  "conditions": {
210
216
  "createdById": "{{ id }}"
@@ -955,18 +961,6 @@
955
961
  "createdByUserId": "{{ id }}"
956
962
  }
957
963
  },
958
- {
959
- "action": "create",
960
- "subject": "OutreachRequest"
961
- },
962
- {
963
- "action": "read",
964
- "subject": "OutreachRequest"
965
- },
966
- {
967
- "action": "update",
968
- "subject": "OutreachRequest"
969
- },
970
964
  {
971
965
  "action": "read",
972
966
  "subject": "FilterCrewSchema",
@@ -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
  {
@@ -817,18 +820,6 @@
817
820
  ],
818
821
  "conditions": { "agentId": "{{ id }}" }
819
822
  },
820
- {
821
- "action": "create",
822
- "subject": "OutreachRequest"
823
- },
824
- {
825
- "action": "read",
826
- "subject": "OutreachRequest"
827
- },
828
- {
829
- "action": "update",
830
- "subject": "OutreachRequest"
831
- },
832
823
  {
833
824
  "action": "read",
834
825
  "subject": "FilterCandidateContactHistorySchema",