@dakkitor/api-contracts 1.9.1 → 1.9.3

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 (111) hide show
  1. package/dist/abilities/abilities.contract.d.ts +28 -1
  2. package/dist/abilities/abilities.contract.d.ts.map +1 -1
  3. package/dist/abilities/abilities.contract.js +31 -1
  4. package/dist/abilities/abilities.contract.spec.js +52 -3
  5. package/dist/abilities/admin-dashboard.abilities.test.js +1 -0
  6. package/dist/abilities/automatic-caller.abilities.json +1 -0
  7. package/dist/abilities/first-agent.abilities.json +14 -0
  8. package/dist/abilities/interconnection.abilities.json +17 -1
  9. package/dist/abilities/office-manager.abilities.json +4 -0
  10. package/dist/abilities/second-agent.abilities.json +32 -1
  11. package/dist/abilities/worker-curator.abilities.json +17 -1
  12. package/dist/actives/actives.contract.d.ts +7200 -6919
  13. package/dist/actives/actives.contract.d.ts.map +1 -1
  14. package/dist/agent-client-links/agent-client-links.contract.d.ts +137 -137
  15. package/dist/auth/auth.contract.d.ts +85 -85
  16. package/dist/bookings/backdate-guard.spec.js +24 -32
  17. package/dist/bookings/bookings.contract.d.ts +10542 -10116
  18. package/dist/bookings/bookings.contract.d.ts.map +1 -1
  19. package/dist/bookings/bookings.contract.js +2 -16
  20. package/dist/call-history/call-history.contract.d.ts +315 -140
  21. package/dist/call-history/call-history.contract.d.ts.map +1 -1
  22. package/dist/calls-feed/calls-feed.contract.d.ts +39 -6
  23. package/dist/calls-feed/calls-feed.contract.d.ts.map +1 -1
  24. package/dist/candidate-calling/candidate-calling.contract.d.ts +9230 -4114
  25. package/dist/candidate-calling/candidate-calling.contract.d.ts.map +1 -1
  26. package/dist/candidate-calling/candidate-calling.contract.js +362 -16
  27. package/dist/candidate-calling/candidate-calling.contract.spec.js +164 -0
  28. package/dist/candidate-calling/candidate-dialpad-call.schemas.d.ts +10 -0
  29. package/dist/candidate-calling/candidate-dialpad-call.schemas.d.ts.map +1 -0
  30. package/dist/candidate-calling/candidate-dialpad-call.schemas.js +33 -0
  31. package/dist/client-contacts/client-contacts.contract.d.ts +622 -622
  32. package/dist/clients/clients.contract.d.ts +289 -289
  33. package/dist/collaboration-checkings/collaboration-checkings.contract.d.ts +601 -601
  34. package/dist/collaborations/collaborations.contract.d.ts +538 -538
  35. package/dist/common/callback-slots.d.ts +4 -0
  36. package/dist/common/callback-slots.d.ts.map +1 -0
  37. package/dist/common/callback-slots.js +20 -0
  38. package/dist/common/common-schemas.d.ts +10 -4
  39. package/dist/common/common-schemas.d.ts.map +1 -1
  40. package/dist/common/common-schemas.js +6 -0
  41. package/dist/companies/companies.contract.d.ts +120 -120
  42. package/dist/crews/crews.contract.d.ts +278 -278
  43. package/dist/cron-executions/cron-executions.contract.d.ts +238 -238
  44. package/dist/curated-worker-leads/candidate-coordination.contract.d.ts +2154 -1296
  45. package/dist/curated-worker-leads/candidate-coordination.contract.d.ts.map +1 -1
  46. package/dist/curated-worker-leads/candidate-coordination.contract.js +36 -3
  47. package/dist/curated-worker-leads/candidate-edit-session.contract.d.ts +300 -300
  48. package/dist/curated-worker-leads/contact-history.spec.js +86 -0
  49. package/dist/curated-worker-leads/job-candidate-cards.spec.js +19 -0
  50. package/dist/curated-worker-leads/job-candidates.spec.js +179 -0
  51. package/dist/curated-worker-leads/jobs-tab.contract.d.ts +8598 -2519
  52. package/dist/curated-worker-leads/jobs-tab.contract.d.ts.map +1 -1
  53. package/dist/curated-worker-leads/jobs-tab.contract.js +126 -1
  54. package/dist/curated-worker-leads/owned-jobs-tab.contract.d.ts +110 -110
  55. package/dist/curated-workers/curated-workers.contract.d.ts +1213 -1131
  56. package/dist/curated-workers/curated-workers.contract.d.ts.map +1 -1
  57. package/dist/dashboards/dashboard-widgets.contact-history.spec.d.ts +2 -0
  58. package/dist/dashboards/dashboard-widgets.contact-history.spec.d.ts.map +1 -0
  59. package/dist/dashboards/dashboard-widgets.contact-history.spec.js +160 -0
  60. package/dist/dashboards/dashboard-widgets.contract.d.ts +1278 -535
  61. package/dist/dashboards/dashboard-widgets.contract.d.ts.map +1 -1
  62. package/dist/dashboards/dashboard-widgets.contract.js +46 -1
  63. package/dist/dashboards/dashboard.contract.d.ts +8 -8
  64. package/dist/document-intake/document-intake.contract.d.ts +1145 -1145
  65. package/dist/export-jobs/export-jobs.contract.d.ts +663 -663
  66. package/dist/exports-events/exports-events.schemas.d.ts +2 -2
  67. package/dist/index.d.ts +1 -0
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +1 -0
  70. package/dist/jobs/jobs.contract.d.ts +5586 -3381
  71. package/dist/jobs/jobs.contract.d.ts.map +1 -1
  72. package/dist/jobs/jobs.contract.js +95 -2
  73. package/dist/jobs/jobs.contract.spec.js +231 -1
  74. package/dist/kpi-impersonation/kpi-impersonation.contract.d.ts +123 -123
  75. package/dist/lead-assignments/lead-assignments.contract.d.ts +1897 -122
  76. package/dist/lead-assignments/lead-assignments.contract.d.ts.map +1 -1
  77. package/dist/lead-assignments/lead-assignments.contract.js +102 -2
  78. package/dist/lead-assignments/lead-assignments.contract.spec.d.ts +2 -0
  79. package/dist/lead-assignments/lead-assignments.contract.spec.d.ts.map +1 -0
  80. package/dist/lead-assignments/lead-assignments.contract.spec.js +51 -0
  81. package/dist/lead-distribution/agent-lead-distribution.contract.d.ts +103 -103
  82. package/dist/leads/leads.contract.d.ts +210 -210
  83. package/dist/locations/location-enrichment.contract.spec.d.ts +2 -0
  84. package/dist/locations/location-enrichment.contract.spec.d.ts.map +1 -0
  85. package/dist/locations/location-enrichment.contract.spec.js +50 -0
  86. package/dist/locations/locations.contract.d.ts +132 -98
  87. package/dist/locations/locations.contract.d.ts.map +1 -1
  88. package/dist/locations/locations.contract.js +10 -0
  89. package/dist/notifications/notifications.contract.d.ts +512 -40
  90. package/dist/notifications/notifications.contract.d.ts.map +1 -1
  91. package/dist/notifications/notifications.contract.js +36 -2
  92. package/dist/notifications/notifications.contract.spec.d.ts +2 -0
  93. package/dist/notifications/notifications.contract.spec.d.ts.map +1 -0
  94. package/dist/notifications/notifications.contract.spec.js +39 -0
  95. package/dist/own-research/own-research.contract.d.ts +196 -130
  96. package/dist/own-research/own-research.contract.d.ts.map +1 -1
  97. package/dist/proofs/proofs.contract.d.ts +356 -356
  98. package/dist/proofs/proofs.dtos.d.ts +148 -148
  99. package/dist/realtime/job-call-priority-updated.d.ts +18 -0
  100. package/dist/realtime/job-call-priority-updated.d.ts.map +1 -0
  101. package/dist/realtime/job-call-priority-updated.js +17 -0
  102. package/dist/shared/summary-schemas.d.ts +36 -27
  103. package/dist/shared/summary-schemas.d.ts.map +1 -1
  104. package/dist/shared/summary-schemas.js +7 -0
  105. package/dist/sheets-sync/sheets-sync.contract.d.ts +683 -683
  106. package/dist/user-access-grants/user-access-grants.contract.d.ts +55 -55
  107. package/dist/users/users.contract.d.ts +236 -236
  108. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.d.ts +69 -69
  109. package/dist/workers/workers.contract.d.ts +2620 -2420
  110. package/dist/workers/workers.contract.d.ts.map +1 -1
  111. package/package.json +1 -1
@@ -1,6 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const candidate_calling_contract_1 = require("./candidate-calling.contract");
4
+ describe('candidate calling ring target', () => {
5
+ it('accepts only DESKTOP and PHONE', () => {
6
+ expect(candidate_calling_contract_1.CandidateCallingRingTargetSchema.parse('DESKTOP')).toBe('DESKTOP');
7
+ expect(candidate_calling_contract_1.CandidateCallingRingTargetSchema.parse('PHONE')).toBe('PHONE');
8
+ expect(candidate_calling_contract_1.CandidateCallingRingTargetSchema.safeParse('FAX').success).toBe(false);
9
+ });
10
+ it('reports the ring target on availability', () => {
11
+ const parsed = candidate_calling_contract_1.CandidateCallingAvailabilitySchema.parse({
12
+ enabled: true,
13
+ reason: null,
14
+ ringTarget: 'PHONE',
15
+ });
16
+ expect(parsed.ringTarget).toBe('PHONE');
17
+ });
18
+ it('exposes a route to change the ring target', () => {
19
+ expect(candidate_calling_contract_1.candidateCallingContract.setRingTarget.method).toBe('PATCH');
20
+ expect(candidate_calling_contract_1.candidateCallingContract.setRingTarget.path).toBe('/v2/candidate-calling-queues/ring-target');
21
+ });
22
+ });
4
23
  describe('candidate calling contract', () => {
5
24
  it('pins the application routes', () => {
6
25
  expect(candidate_calling_contract_1.candidateCallingContract.availability).toMatchObject({
@@ -31,6 +50,14 @@ describe('candidate calling contract', () => {
31
50
  method: 'GET',
32
51
  path: '/v2/candidate-dialpad-calls/:callId/review-artifact',
33
52
  });
53
+ expect(candidate_calling_contract_1.candidateCallingContract.getCallReview).toMatchObject({
54
+ method: 'GET',
55
+ path: '/v2/candidate-dialpad-calls/:callId/review',
56
+ });
57
+ expect(candidate_calling_contract_1.candidateCallingContract.resolveProfileFact).toMatchObject({
58
+ method: 'POST',
59
+ path: '/v2/candidate-dialpad-calls/:callId/profile-facts/:field/resolve',
60
+ });
34
61
  });
35
62
  it('validates every route path parameter as a UUID', () => {
36
63
  const uuid = '88888888-8888-4888-8888-888888888888';
@@ -77,6 +104,8 @@ describe('candidate calling contract', () => {
77
104
  expect(Object.keys(candidate_calling_contract_1.candidateCallingContract.endCall.responses).map(Number)).toEqual([200, 403, 404, 409]);
78
105
  expect(Object.keys(candidate_calling_contract_1.candidateCallingContract.stopQueue.responses).map(Number)).toEqual([200, 403, 404, 409]);
79
106
  expect(Object.keys(candidate_calling_contract_1.candidateCallingContract.reviewArtifact.responses).map(Number)).toEqual([200, 403, 404, 409, 410]);
107
+ expect(Object.keys(candidate_calling_contract_1.candidateCallingContract.getCallReview.responses).map(Number)).toEqual([200, 403, 404]);
108
+ expect(Object.keys(candidate_calling_contract_1.candidateCallingContract.resolveProfileFact.responses).map(Number)).toEqual([200, 403, 404, 409]);
80
109
  });
81
110
  it('uses strict end intent and complete managed states', () => {
82
111
  expect(candidate_calling_contract_1.candidateCallingContract.endCall.body.safeParse({
@@ -97,6 +126,12 @@ describe('candidate calling contract', () => {
97
126
  'CANCELLED',
98
127
  ]);
99
128
  });
129
+ it('accepts only live queue, historical import, and automatic probe call sources', () => {
130
+ expect(candidate_calling_contract_1.CandidateDialpadCallSourceSchema.safeParse('LIVE_QUEUE').success).toBe(true);
131
+ expect(candidate_calling_contract_1.CandidateDialpadCallSourceSchema.safeParse('HISTORICAL_IMPORT').success).toBe(true);
132
+ expect(candidate_calling_contract_1.CandidateDialpadCallSourceSchema.safeParse('AUTOMATIC_PROBE').success).toBe(true);
133
+ expect(candidate_calling_contract_1.CandidateDialpadCallSourceSchema.safeParse('MANUAL_IMPORT').success).toBe(false);
134
+ });
100
135
  it('keeps candidate and active-queue wrappers strict', () => {
101
136
  const candidate = {
102
137
  subjectKind: 'OWNED',
@@ -175,6 +210,135 @@ describe('candidate calling contract', () => {
175
210
  modelOutput: { outcome: 'INTERESTED' },
176
211
  }).success).toBe(false);
177
212
  });
213
+ it('models the complete profile fact and typed analysis review results', () => {
214
+ const response = {
215
+ workerState: { result: { kind: 'ACTIVELY_LOOKING' } },
216
+ jobs: [{ jobId: '11111111-1111-4111-8111-111111111111' }],
217
+ profileFacts: [
218
+ 'APPLIED',
219
+ 'CONFLICT',
220
+ 'PENDING',
221
+ 'FAILED',
222
+ 'OVERRIDDEN',
223
+ 'ALREADY_AGREES',
224
+ 'PENDING_REVIEW',
225
+ 'SUPERSEDED',
226
+ ].map((status) => ({
227
+ field: 'englishLevel',
228
+ value: 'ADVANCED',
229
+ status,
230
+ agentValue: 'BASIC',
231
+ evidence: ['She said her English is very good'],
232
+ evidenceReferences: [
233
+ {
234
+ quote: 'She said her English is very good',
235
+ turnId: null,
236
+ startMs: null,
237
+ endMs: null,
238
+ },
239
+ ],
240
+ })),
241
+ referral: null,
242
+ callback: null,
243
+ reviewReason: null,
244
+ employmentObservation: {
245
+ status: 'WORKING',
246
+ elapsedDuration: { value: 2, unit: 'WEEK' },
247
+ confidence: 0.92,
248
+ evidence: ['She has worked there for two weeks'],
249
+ },
250
+ phoneAssessment: {
251
+ result: 'CONFIRMED_WORKER',
252
+ confidence: 0.97,
253
+ evidence: ['The worker confirmed their identity'],
254
+ },
255
+ };
256
+ expect(candidate_calling_contract_1.CandidateCallReviewResponseSchema.parse(response)).toEqual(response);
257
+ const legacyProfileFactResponse = {
258
+ ...response,
259
+ profileFacts: response.profileFacts.map(({ evidenceReferences: _evidenceReferences, ...fact }) => fact),
260
+ };
261
+ expect(candidate_calling_contract_1.CandidateCallReviewResponseSchema.parse(legacyProfileFactResponse)).toEqual(legacyProfileFactResponse);
262
+ expect(candidate_calling_contract_1.CandidateCallProfileFactStatusSchema.safeParse('SUPERSEDED').success).toBe(true);
263
+ expect(candidate_calling_contract_1.CandidateCallReviewResponseSchema.safeParse({
264
+ ...response,
265
+ extra: true,
266
+ }).success).toBe(false);
267
+ expect(candidate_calling_contract_1.CandidateCallReviewResponseSchema.safeParse({
268
+ ...response,
269
+ profileFacts: [{ ...response.profileFacts[0], status: 'NOT_A_STATUS' }],
270
+ }).success).toBe(false);
271
+ });
272
+ it('accepts only inbound and outbound Dialpad call directions', () => {
273
+ expect(candidate_calling_contract_1.CandidateDialpadCallDirectionSchema.parse('INBOUND')).toBe('INBOUND');
274
+ expect(candidate_calling_contract_1.CandidateDialpadCallDirectionSchema.parse('OUTBOUND')).toBe('OUTBOUND');
275
+ expect(candidate_calling_contract_1.CandidateDialpadCallDirectionSchema.safeParse('SIDEWAYS').success).toBe(false);
276
+ });
277
+ it('parses timed and legacy-normalized transcript rows and rejects invalid timings', () => {
278
+ const timedTranscript = {
279
+ outcome: 'TRANSCRIPT',
280
+ languages: ['en', 'ro'],
281
+ turns: [
282
+ {
283
+ id: 'turn-0001',
284
+ speaker: 'AGENT',
285
+ text: 'Hello, this is Lorena.',
286
+ startMs: 840,
287
+ endMs: 2470,
288
+ },
289
+ ],
290
+ };
291
+ expect(candidate_calling_contract_1.CandidateDialpadCallTranscriptResponseSchema.parse(timedTranscript)).toEqual(timedTranscript);
292
+ expect(candidate_calling_contract_1.CandidateDialpadCallTranscriptResponseSchema.parse({
293
+ ...timedTranscript,
294
+ turns: [{ ...timedTranscript.turns[0], startMs: null, endMs: null }],
295
+ })).toBeDefined();
296
+ expect(() => candidate_calling_contract_1.CandidateDialpadCallTranscriptResponseSchema.parse({
297
+ ...timedTranscript,
298
+ turns: [{ ...timedTranscript.turns[0], startMs: -1 }],
299
+ })).toThrow();
300
+ expect(() => candidate_calling_contract_1.CandidateDialpadCallTranscriptResponseSchema.parse({
301
+ ...timedTranscript,
302
+ turns: [{ ...timedTranscript.turns[0], startMs: 840.5 }],
303
+ })).toThrow();
304
+ });
305
+ it('parses linked and unlinked evidence and rejects incomplete or reversed links', () => {
306
+ expect(candidate_calling_contract_1.CandidateCallReviewEvidenceSchema.parse({
307
+ quote: 'I can start on Monday.',
308
+ turnId: 'turn-0007',
309
+ startMs: 18200,
310
+ endMs: 19540,
311
+ })).toBeDefined();
312
+ expect(candidate_calling_contract_1.CandidateCallReviewEvidenceSchema.parse({
313
+ quote: 'I can start on Monday.',
314
+ turnId: null,
315
+ startMs: null,
316
+ endMs: null,
317
+ })).toBeDefined();
318
+ expect(() => candidate_calling_contract_1.CandidateCallReviewEvidenceSchema.parse({
319
+ quote: 'I can start on Monday.',
320
+ turnId: 'turn-0007',
321
+ startMs: null,
322
+ endMs: null,
323
+ })).toThrow();
324
+ expect(() => candidate_calling_contract_1.CandidateCallReviewEvidenceSchema.parse({
325
+ quote: 'I can start on Monday.',
326
+ turnId: 'turn-0007',
327
+ startMs: 19540,
328
+ endMs: 18200,
329
+ })).toThrow();
330
+ });
331
+ it('accepts only KEEP_AGENT or APPLY_AI as a profile-fact resolution', () => {
332
+ expect(candidate_calling_contract_1.ResolveProfileFactBodySchema.safeParse({ resolution: 'APPLY_AI' })
333
+ .success).toBe(true);
334
+ expect(candidate_calling_contract_1.ResolveProfileFactBodySchema.safeParse({ resolution: 'KEEP_AGENT' })
335
+ .success).toBe(true);
336
+ expect(candidate_calling_contract_1.ResolveProfileFactBodySchema.safeParse({ resolution: 'DISCARD' }).success).toBe(false);
337
+ expect(candidate_calling_contract_1.ResolveProfileFactBodySchema.safeParse({
338
+ resolution: 'APPLY_AI',
339
+ extra: true,
340
+ }).success).toBe(false);
341
+ });
178
342
  it('publishes only queue identity and change time', () => {
179
343
  const payload = {
180
344
  queueSessionId: '55555555-5555-4555-8555-555555555555',
@@ -0,0 +1,10 @@
1
+ import { z } from 'zod';
2
+ export declare const CandidateDialpadCallStatusSchema: z.ZodEnum<["CLAIMED", "INITIATING", "INITIATION_UNCERTAIN", "RINGING", "CONNECTED", "ENDING", "PROCESSING", "FEEDBACK_RECORDED", "NEEDS_REVIEW", "INITIATION_FAILED", "CANCELLED"]>;
3
+ export type CandidateDialpadCallStatus = z.infer<typeof CandidateDialpadCallStatusSchema>;
4
+ export declare const CandidateDialpadCallSourceSchema: z.ZodEnum<["LIVE_QUEUE", "HISTORICAL_IMPORT", "AUTOMATIC_PROBE"]>;
5
+ export type CandidateDialpadCallSource = z.infer<typeof CandidateDialpadCallSourceSchema>;
6
+ export declare const CandidateDialpadCallDirectionSchema: z.ZodEnum<["INBOUND", "OUTBOUND"]>;
7
+ export type CandidateDialpadCallDirection = z.infer<typeof CandidateDialpadCallDirectionSchema>;
8
+ export declare const CandidateContactHistoryConnectionSchema: z.ZodEnum<["CONNECTED", "NO_ANSWER", "BUSY", "INVALID_NUMBER", "FAILED"]>;
9
+ export type CandidateContactHistoryConnection = z.infer<typeof CandidateContactHistoryConnectionSchema>;
10
+ //# sourceMappingURL=candidate-dialpad-call.schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candidate-dialpad-call.schemas.d.ts","sourceRoot":"","sources":["../../contracts/candidate-calling/candidate-dialpad-call.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,gCAAgC,qLAY3C,CAAC;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC9C,OAAO,gCAAgC,CACxC,CAAC;AAEF,eAAO,MAAM,gCAAgC,mEAI3C,CAAC;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC9C,OAAO,gCAAgC,CACxC,CAAC;AAEF,eAAO,MAAM,mCAAmC,oCAG9C,CAAC;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CACjD,OAAO,mCAAmC,CAC3C,CAAC;AAEF,eAAO,MAAM,uCAAuC,2EAMlD,CAAC;AACH,MAAM,MAAM,iCAAiC,GAAG,CAAC,CAAC,KAAK,CACrD,OAAO,uCAAuC,CAC/C,CAAC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CandidateContactHistoryConnectionSchema = exports.CandidateDialpadCallDirectionSchema = exports.CandidateDialpadCallSourceSchema = exports.CandidateDialpadCallStatusSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.CandidateDialpadCallStatusSchema = zod_1.z.enum([
6
+ 'CLAIMED',
7
+ 'INITIATING',
8
+ 'INITIATION_UNCERTAIN',
9
+ 'RINGING',
10
+ 'CONNECTED',
11
+ 'ENDING',
12
+ 'PROCESSING',
13
+ 'FEEDBACK_RECORDED',
14
+ 'NEEDS_REVIEW',
15
+ 'INITIATION_FAILED',
16
+ 'CANCELLED',
17
+ ]);
18
+ exports.CandidateDialpadCallSourceSchema = zod_1.z.enum([
19
+ 'LIVE_QUEUE',
20
+ 'HISTORICAL_IMPORT',
21
+ 'AUTOMATIC_PROBE',
22
+ ]);
23
+ exports.CandidateDialpadCallDirectionSchema = zod_1.z.enum([
24
+ 'INBOUND',
25
+ 'OUTBOUND',
26
+ ]);
27
+ exports.CandidateContactHistoryConnectionSchema = zod_1.z.enum([
28
+ 'CONNECTED',
29
+ 'NO_ANSWER',
30
+ 'BUSY',
31
+ 'INVALID_NUMBER',
32
+ 'FAILED',
33
+ ]);