@dakkitor/api-contracts 1.8.0 → 1.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abilities/abilities.contract.d.ts +28 -1
- package/dist/abilities/abilities.contract.d.ts.map +1 -1
- package/dist/abilities/abilities.contract.js +32 -1
- package/dist/abilities/abilities.contract.spec.js +63 -3
- package/dist/abilities/admin-dashboard.abilities.test.js +1 -0
- package/dist/abilities/automatic-caller.abilities.json +1 -0
- package/dist/abilities/first-agent.abilities.json +14 -0
- package/dist/abilities/interconnection.abilities.json +17 -1
- package/dist/abilities/office-manager.abilities.json +4 -0
- package/dist/abilities/second-agent.abilities.json +48 -1
- package/dist/abilities/worker-curator.abilities.json +17 -1
- package/dist/actives/actives.contract.d.ts +6959 -6547
- package/dist/actives/actives.contract.d.ts.map +1 -1
- package/dist/agent-client-links/agent-client-links.contract.d.ts +1275 -1173
- package/dist/agent-client-links/agent-client-links.contract.d.ts.map +1 -1
- package/dist/auth/auth.contract.d.ts +102 -102
- package/dist/bookings/backdate-guard.spec.js +24 -32
- package/dist/bookings/bookings.contract.d.ts +9963 -9305
- package/dist/bookings/bookings.contract.d.ts.map +1 -1
- package/dist/bookings/bookings.contract.js +2 -16
- package/dist/call-history/call-history.contract.d.ts +1040 -828
- package/dist/call-history/call-history.contract.d.ts.map +1 -1
- package/dist/calls-feed/calls-feed.contract.d.ts +138 -98
- package/dist/calls-feed/calls-feed.contract.d.ts.map +1 -1
- package/dist/candidate-calling/candidate-calling.contract.d.ts +18372 -0
- package/dist/candidate-calling/candidate-calling.contract.d.ts.map +1 -0
- package/dist/candidate-calling/candidate-calling.contract.js +494 -0
- package/dist/candidate-calling/candidate-calling.contract.spec.d.ts +2 -0
- package/dist/candidate-calling/candidate-calling.contract.spec.d.ts.map +1 -0
- package/dist/candidate-calling/candidate-calling.contract.spec.js +357 -0
- package/dist/candidate-calling/candidate-dialpad-call.schemas.d.ts +10 -0
- package/dist/candidate-calling/candidate-dialpad-call.schemas.d.ts.map +1 -0
- package/dist/candidate-calling/candidate-dialpad-call.schemas.js +33 -0
- package/dist/client-contacts/client-contacts.contract.d.ts +622 -622
- package/dist/clients/clients.contract.d.ts +289 -289
- package/dist/collaboration-checkings/collaboration-checkings.contract.d.ts +3108 -3004
- package/dist/collaboration-checkings/collaboration-checkings.contract.d.ts.map +1 -1
- package/dist/collaborations/collaborations.contract.d.ts +2604 -2507
- package/dist/collaborations/collaborations.contract.d.ts.map +1 -1
- package/dist/common/callback-slots.d.ts +4 -0
- package/dist/common/callback-slots.d.ts.map +1 -0
- package/dist/common/callback-slots.js +20 -0
- package/dist/common/common-schemas.d.ts +10 -4
- package/dist/common/common-schemas.d.ts.map +1 -1
- package/dist/common/common-schemas.js +6 -0
- package/dist/companies/companies.contract.d.ts +120 -120
- package/dist/crews/crews.contract.d.ts +278 -278
- package/dist/cron-executions/cron-executions.contract.d.ts +245 -245
- package/dist/cron-executions/cron-executions.contract.d.ts.map +1 -1
- package/dist/cron-executions/cron-executions.contract.js +1 -0
- package/dist/curated-worker-leads/candidate-coordination.contract.d.ts +3830 -2354
- package/dist/curated-worker-leads/candidate-coordination.contract.d.ts.map +1 -1
- package/dist/curated-worker-leads/candidate-coordination.contract.js +73 -7
- package/dist/curated-worker-leads/candidate-edit-session.contract.d.ts +94 -94
- package/dist/curated-worker-leads/contact-history.spec.js +141 -0
- package/dist/curated-worker-leads/job-candidate-cards.spec.js +19 -0
- package/dist/curated-worker-leads/job-candidates.spec.js +179 -0
- package/dist/curated-worker-leads/jobs-tab.contract.d.ts +8185 -2106
- package/dist/curated-worker-leads/jobs-tab.contract.d.ts.map +1 -1
- package/dist/curated-worker-leads/jobs-tab.contract.js +126 -1
- package/dist/curated-worker-leads/owned-jobs-tab.contract.d.ts +110 -110
- package/dist/curated-workers/curated-workers.contract.d.ts +2033 -1951
- package/dist/curated-workers/curated-workers.contract.d.ts.map +1 -1
- package/dist/dashboards/dashboard-widgets.contact-history.spec.d.ts +2 -0
- package/dist/dashboards/dashboard-widgets.contact-history.spec.d.ts.map +1 -0
- package/dist/dashboards/dashboard-widgets.contact-history.spec.js +160 -0
- package/dist/dashboards/dashboard-widgets.contract.d.ts +1027 -284
- package/dist/dashboards/dashboard-widgets.contract.d.ts.map +1 -1
- package/dist/dashboards/dashboard-widgets.contract.js +46 -1
- package/dist/dashboards/dashboard.contract.d.ts +8 -8
- package/dist/document-intake/document-intake.contract.d.ts +1145 -1145
- package/dist/export-jobs/export-jobs.contract.d.ts +755 -755
- package/dist/exports-events/exports-events.schemas.d.ts +6 -6
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/jobs/jobs.contract.d.ts +8507 -6044
- package/dist/jobs/jobs.contract.d.ts.map +1 -1
- package/dist/jobs/jobs.contract.js +95 -2
- package/dist/jobs/jobs.contract.spec.js +231 -1
- package/dist/kpi-impersonation/kpi-impersonation.contract.d.ts +102 -102
- package/dist/lead-assignments/lead-assignments.contract.d.ts +2985 -1139
- package/dist/lead-assignments/lead-assignments.contract.d.ts.map +1 -1
- package/dist/lead-assignments/lead-assignments.contract.js +102 -2
- package/dist/lead-assignments/lead-assignments.contract.spec.d.ts +2 -0
- package/dist/lead-assignments/lead-assignments.contract.spec.d.ts.map +1 -0
- package/dist/lead-assignments/lead-assignments.contract.spec.js +51 -0
- package/dist/lead-distribution/agent-lead-distribution.contract.d.ts +341 -317
- package/dist/lead-distribution/agent-lead-distribution.contract.d.ts.map +1 -1
- package/dist/leads/leads.contract.d.ts +282 -282
- package/dist/locations/location-enrichment.contract.spec.d.ts +2 -0
- package/dist/locations/location-enrichment.contract.spec.d.ts.map +1 -0
- package/dist/locations/location-enrichment.contract.spec.js +50 -0
- package/dist/locations/locations.contract.d.ts +132 -98
- package/dist/locations/locations.contract.d.ts.map +1 -1
- package/dist/locations/locations.contract.js +10 -0
- package/dist/notifications/notifications.contract.d.ts +579 -107
- package/dist/notifications/notifications.contract.d.ts.map +1 -1
- package/dist/notifications/notifications.contract.js +36 -2
- package/dist/notifications/notifications.contract.spec.d.ts +2 -0
- package/dist/notifications/notifications.contract.spec.d.ts.map +1 -0
- package/dist/notifications/notifications.contract.spec.js +39 -0
- package/dist/outreach/__tests__/outreach-claim.test.js +33 -0
- package/dist/outreach/__tests__/outreach-routes.test.js +8 -0
- package/dist/outreach/outreach.contract.d.ts +583 -162
- package/dist/outreach/outreach.contract.d.ts.map +1 -1
- package/dist/outreach/outreach.contract.js +50 -1
- package/dist/outreach/relay-hub-outreach.contract.d.ts +299 -121
- package/dist/outreach/relay-hub-outreach.contract.d.ts.map +1 -1
- package/dist/outreach/relay-hub-outreach.contract.js +10 -0
- package/dist/outreach/relay-hub-outreach.contract.spec.js +26 -0
- package/dist/outreach/relay-hub-outreach.schemas.d.ts +94 -0
- package/dist/outreach/relay-hub-outreach.schemas.d.ts.map +1 -0
- package/dist/outreach/relay-hub-outreach.schemas.js +15 -0
- package/dist/own-research/check-phone-response.spec.d.ts +2 -0
- package/dist/own-research/check-phone-response.spec.d.ts.map +1 -0
- package/dist/own-research/check-phone-response.spec.js +54 -0
- package/dist/own-research/own-research.contract.d.ts +971 -820
- package/dist/own-research/own-research.contract.d.ts.map +1 -1
- package/dist/own-research/own-research.contract.js +6 -1
- package/dist/proofs/proofs.contract.d.ts +356 -356
- package/dist/proofs/proofs.dtos.d.ts +148 -148
- package/dist/realtime/job-call-priority-updated.d.ts +18 -0
- package/dist/realtime/job-call-priority-updated.d.ts.map +1 -0
- package/dist/realtime/job-call-priority-updated.js +17 -0
- package/dist/shared/summary-schemas.d.ts +36 -27
- package/dist/shared/summary-schemas.d.ts.map +1 -1
- package/dist/shared/summary-schemas.js +7 -0
- package/dist/sheets-sync/sheets-sync.contract.d.ts +683 -683
- package/dist/user-access-grants/user-access-grants.contract.d.ts +216 -216
- package/dist/users/users.contract.d.ts +365 -336
- package/dist/users/users.contract.d.ts.map +1 -1
- package/dist/users/users.contract.js +9 -1
- package/dist/users/users.contract.spec.js +39 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.d.ts +150 -150
- package/dist/workers/workers.contract.d.ts +4505 -4261
- package/dist/workers/workers.contract.d.ts.map +1 -1
- package/dist/workers/workers.contract.js +12 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.contract.d.ts","sourceRoot":"","sources":["../../contracts/notifications/notifications.contract.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB;;;mDAGmD;AACnD,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;EAKvC,CAAC;AAEH,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOM,CAAC;AAEzD,eAAO,MAAM,wCAAwC;;;;;;;;;;;;;;;EAKM,CAAC;AAC5D,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wCAAwC,CAAC,CAAC;AAE1G,eAAO,MAAM,uCAAuC;;;;;;;;;;;;;;;EAKM,CAAC;AAC3D,MAAM,MAAM,iCAAiC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uCAAuC,CAAC,CAAC;AAExG,eAAO,MAAM,sBAAsB,
|
|
1
|
+
{"version":3,"file":"notifications.contract.d.ts","sourceRoot":"","sources":["../../contracts/notifications/notifications.contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.notificationsContract = exports.NotificationListResponseSchema = exports.NotificationSchema = exports.NotificationKindSchema = exports.AiMergeAppliedNotificationPayloadSchema = exports.AiMergeMismatchNotificationPayloadSchema = exports.ActiveStatusNotificationPayloadSchema = exports.ActiveStatusBatchEntrySchema = void 0;
|
|
3
|
+
exports.notificationsContract = exports.NotificationListResponseSchema = exports.NotificationSchema = exports.NotificationKindSchema = exports.LeadCallbackDueNotificationPayloadSchema = exports.CandidateCallCallbackNotificationPayloadSchema = exports.AiMergeAppliedNotificationPayloadSchema = exports.AiMergeMismatchNotificationPayloadSchema = exports.ActiveStatusNotificationPayloadSchema = exports.ActiveStatusBatchEntrySchema = void 0;
|
|
4
4
|
const zod_openapi_1 = require("@anatine/zod-openapi");
|
|
5
5
|
const core_1 = require("@ts-rest/core");
|
|
6
6
|
const zod_1 = require("zod");
|
|
@@ -38,7 +38,27 @@ exports.AiMergeAppliedNotificationPayloadSchema = zod_1.z.object({
|
|
|
38
38
|
workerNames: zod_1.z.array(zod_1.z.string()),
|
|
39
39
|
createdAt: zod_1.z.string(),
|
|
40
40
|
}).openapi({ title: 'AiMergeAppliedNotificationPayload' });
|
|
41
|
-
|
|
41
|
+
/** Emitted by CandidateCallCallbackService.sweep() when a candidate asked to
|
|
42
|
+
* be called back and the requested (or fallback) time has arrived.
|
|
43
|
+
* `requestedAt` mirrors pass 2's raw extraction — null means the candidate
|
|
44
|
+
* asked for a callback without naming a specific time. */
|
|
45
|
+
exports.CandidateCallCallbackNotificationPayloadSchema = zod_1.z.object({
|
|
46
|
+
callId: zod_1.z.string().uuid(),
|
|
47
|
+
candidateName: zod_1.z.string(),
|
|
48
|
+
requestedAt: zod_1.z.string().nullable(),
|
|
49
|
+
jobId: zod_1.z.string().uuid(),
|
|
50
|
+
}).openapi({ title: 'CandidateCallCallbackNotificationPayload' });
|
|
51
|
+
exports.LeadCallbackDueNotificationPayloadSchema = zod_1.z.object({
|
|
52
|
+
callbackId: zod_1.z.string().uuid(),
|
|
53
|
+
leadId: zod_1.z.string().uuid(),
|
|
54
|
+
leadName: zod_1.z.string(),
|
|
55
|
+
companyName: zod_1.z.string().nullable(),
|
|
56
|
+
phoneNumber: zod_1.z.string(),
|
|
57
|
+
dueAt: zod_1.z.string(),
|
|
58
|
+
originRating: zod_1.z.number(),
|
|
59
|
+
originNotes: zod_1.z.string().nullable(),
|
|
60
|
+
}).openapi({ title: 'LeadCallbackDueNotificationPayload' });
|
|
61
|
+
exports.NotificationKindSchema = zod_1.z.enum(['ACTIVE_STATUS', 'AI_MERGE_MISMATCH', 'AI_MERGE_APPLIED', 'CANDIDATE_CALL_CALLBACK', 'LEAD_CALLBACK_DUE']).openapi({ title: 'NotificationKind' });
|
|
42
62
|
/** Discriminated union on `kind`; new kinds extend the union. */
|
|
43
63
|
exports.NotificationSchema = zod_1.z.discriminatedUnion('kind', [
|
|
44
64
|
zod_1.z.object({
|
|
@@ -62,6 +82,20 @@ exports.NotificationSchema = zod_1.z.discriminatedUnion('kind', [
|
|
|
62
82
|
payload: exports.AiMergeAppliedNotificationPayloadSchema,
|
|
63
83
|
createdAt: zod_1.z.string(),
|
|
64
84
|
}),
|
|
85
|
+
zod_1.z.object({
|
|
86
|
+
id: zod_1.z.string().uuid(),
|
|
87
|
+
kind: zod_1.z.literal('CANDIDATE_CALL_CALLBACK'),
|
|
88
|
+
refId: zod_1.z.string(),
|
|
89
|
+
payload: exports.CandidateCallCallbackNotificationPayloadSchema,
|
|
90
|
+
createdAt: zod_1.z.string(),
|
|
91
|
+
}),
|
|
92
|
+
zod_1.z.object({
|
|
93
|
+
id: zod_1.z.string().uuid(),
|
|
94
|
+
kind: zod_1.z.literal('LEAD_CALLBACK_DUE'),
|
|
95
|
+
refId: zod_1.z.string(),
|
|
96
|
+
payload: exports.LeadCallbackDueNotificationPayloadSchema,
|
|
97
|
+
createdAt: zod_1.z.string(),
|
|
98
|
+
}),
|
|
65
99
|
]).openapi({ title: 'Notification' });
|
|
66
100
|
exports.NotificationListResponseSchema = zod_1.z.object({
|
|
67
101
|
items: zod_1.z.array(exports.NotificationSchema),
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifications.contract.spec.d.ts","sourceRoot":"","sources":["../../contracts/notifications/notifications.contract.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const bun_test_1 = require("bun:test");
|
|
4
|
+
const notifications_contract_1 = require("./notifications.contract");
|
|
5
|
+
const payload = {
|
|
6
|
+
callbackId: '11111111-1111-4111-8111-111111111111',
|
|
7
|
+
leadId: '22222222-2222-4222-8222-222222222222',
|
|
8
|
+
leadName: 'J Carolan Plastering Services',
|
|
9
|
+
companyName: 'BRIXWELL GROUP LTD',
|
|
10
|
+
phoneNumber: '+447307201875',
|
|
11
|
+
dueAt: '2026-09-01T13:15:00.000Z',
|
|
12
|
+
originRating: 6,
|
|
13
|
+
originNotes: 'Asked for a call back Tuesday afternoon',
|
|
14
|
+
};
|
|
15
|
+
(0, bun_test_1.describe)('LEAD_CALLBACK_DUE notification', () => {
|
|
16
|
+
(0, bun_test_1.it)('is a known kind', () => {
|
|
17
|
+
(0, bun_test_1.expect)(notifications_contract_1.NotificationKindSchema.safeParse('LEAD_CALLBACK_DUE').success).toBe(true);
|
|
18
|
+
});
|
|
19
|
+
(0, bun_test_1.it)('parses a full notification', () => {
|
|
20
|
+
const parsed = notifications_contract_1.NotificationSchema.safeParse({
|
|
21
|
+
id: '33333333-3333-4333-8333-333333333333',
|
|
22
|
+
kind: 'LEAD_CALLBACK_DUE',
|
|
23
|
+
refId: payload.callbackId,
|
|
24
|
+
payload,
|
|
25
|
+
createdAt: '2026-09-01T13:05:00.000Z',
|
|
26
|
+
});
|
|
27
|
+
(0, bun_test_1.expect)(parsed.success).toBe(true);
|
|
28
|
+
});
|
|
29
|
+
(0, bun_test_1.it)('allows a null company and null notes', () => {
|
|
30
|
+
const parsed = notifications_contract_1.NotificationSchema.safeParse({
|
|
31
|
+
id: '33333333-3333-4333-8333-333333333333',
|
|
32
|
+
kind: 'LEAD_CALLBACK_DUE',
|
|
33
|
+
refId: payload.callbackId,
|
|
34
|
+
payload: { ...payload, companyName: null, originNotes: null },
|
|
35
|
+
createdAt: '2026-09-01T13:05:00.000Z',
|
|
36
|
+
});
|
|
37
|
+
(0, bun_test_1.expect)(parsed.success).toBe(true);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
@@ -17,6 +17,39 @@ const widened = outreach_contract_1.ClaimNextOutreachBodySchema.safeParse({
|
|
|
17
17
|
node_assert_1.default.ok(widened.success);
|
|
18
18
|
node_assert_1.default.equal(Object.prototype.hasOwnProperty.call(widened.data, 'maxCommuteMinutes'), false);
|
|
19
19
|
node_assert_1.default.ok(!outreach_contract_1.ClaimNextOutreachBodySchema.safeParse({}).success);
|
|
20
|
+
// The agent lane is a separate, strict envelope. These fields are the frozen
|
|
21
|
+
// proof of the exact Hub reservation that authorized this launch; ordinary
|
|
22
|
+
// legacy claim callers never need (and cannot accidentally acquire) it.
|
|
23
|
+
const AGENT_CLAIM_BODY = {
|
|
24
|
+
deviceId: 'rack-01',
|
|
25
|
+
authority: {
|
|
26
|
+
launchId: '0ce54488-598f-49a9-8c1a-ff843799c206',
|
|
27
|
+
campaignId: '0ce54488-598f-49a9-8c1a-ff843799c206',
|
|
28
|
+
jobId: 'b683831e-c98c-44c0-b75d-bd0356713f4e',
|
|
29
|
+
claimedLifecycleVersion: 7,
|
|
30
|
+
reservationCorrelationId: '9d84efb7-1ef1-4450-ad4d-22297806781f',
|
|
31
|
+
assignedPodId: '771db561-0701-4469-9e49-de618a07f8ac',
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
node_assert_1.default.ok(outreach_contract_1.AgentClaimNextOutreachBodySchema.safeParse(AGENT_CLAIM_BODY).success);
|
|
35
|
+
node_assert_1.default.ok(!outreach_contract_1.AgentClaimNextOutreachBodySchema.safeParse({
|
|
36
|
+
...AGENT_CLAIM_BODY,
|
|
37
|
+
authority: {
|
|
38
|
+
...AGENT_CLAIM_BODY.authority,
|
|
39
|
+
campaignId: 'bb49aedf-e17b-45bf-9087-5bf18ec7e2f0',
|
|
40
|
+
},
|
|
41
|
+
}).success, 'campaign and launch identities are one stable authority');
|
|
42
|
+
node_assert_1.default.ok(!outreach_contract_1.AgentClaimNextOutreachBodySchema.safeParse({
|
|
43
|
+
...AGENT_CLAIM_BODY,
|
|
44
|
+
maxCommuteMinutes: 240,
|
|
45
|
+
}).success, 'agent authority rejects rather than strips unexpected widening fields');
|
|
46
|
+
node_assert_1.default.ok(!outreach_contract_1.AgentClaimNextOutreachBodySchema.safeParse({
|
|
47
|
+
deviceId: AGENT_CLAIM_BODY.deviceId,
|
|
48
|
+
authority: {
|
|
49
|
+
...AGENT_CLAIM_BODY.authority,
|
|
50
|
+
claimedLifecycleVersion: -1,
|
|
51
|
+
},
|
|
52
|
+
}).success);
|
|
20
53
|
// --- TTL -------------------------------------------------------------------
|
|
21
54
|
node_assert_1.default.equal(outreach_contract_1.OUTREACH_LEASE_TTL_MINUTES, 15);
|
|
22
55
|
// --- CLAIMED ---------------------------------------------------------------
|
|
@@ -9,6 +9,8 @@ const outreach_contract_1 = require("../outreach.contract");
|
|
|
9
9
|
// `pathPrefix: '/v2'` is applied by c.router, so the runtime paths are absolute.
|
|
10
10
|
node_assert_1.default.equal(outreach_contract_1.outreachContract.claimNext.method, 'POST');
|
|
11
11
|
node_assert_1.default.equal(outreach_contract_1.outreachContract.claimNext.path, '/v2/outreach/requests/:requestId/claim-next');
|
|
12
|
+
node_assert_1.default.equal(outreach_contract_1.outreachContract.claimNextAgent.method, 'POST');
|
|
13
|
+
node_assert_1.default.equal(outreach_contract_1.outreachContract.claimNextAgent.path, '/v2/outreach/requests/:requestId/agent-claim-next');
|
|
12
14
|
node_assert_1.default.equal(outreach_contract_1.outreachContract.claimNextLegacy.method, 'POST');
|
|
13
15
|
node_assert_1.default.equal(outreach_contract_1.outreachContract.claimNextLegacy.path, '/v2/outreach/jobs/:jobId/claim-next');
|
|
14
16
|
node_assert_1.default.equal(outreach_contract_1.outreachContract.confirmSent.method, 'POST');
|
|
@@ -23,11 +25,13 @@ const declared = (route) => Object.keys(route.responses)
|
|
|
23
25
|
.map(Number)
|
|
24
26
|
.sort((a, b) => a - b);
|
|
25
27
|
node_assert_1.default.deepStrictEqual(declared(outreach_contract_1.outreachContract.claimNext), [200, 400, 401, 403, 409, 500]);
|
|
28
|
+
node_assert_1.default.deepStrictEqual(declared(outreach_contract_1.outreachContract.claimNextAgent), [200, 400, 401, 403, 409, 500]);
|
|
26
29
|
node_assert_1.default.deepStrictEqual(declared(outreach_contract_1.outreachContract.claimNextLegacy), [200, 400, 401, 403, 409, 500]);
|
|
27
30
|
node_assert_1.default.deepStrictEqual(declared(outreach_contract_1.outreachContract.confirmSent), [200, 400, 401, 403, 404, 500]);
|
|
28
31
|
node_assert_1.default.deepStrictEqual(declared(outreach_contract_1.outreachContract.release), [200, 400, 401, 403, 404, 500]);
|
|
29
32
|
for (const route of [
|
|
30
33
|
outreach_contract_1.outreachContract.claimNext,
|
|
34
|
+
outreach_contract_1.outreachContract.claimNextAgent,
|
|
31
35
|
outreach_contract_1.outreachContract.claimNextLegacy,
|
|
32
36
|
outreach_contract_1.outreachContract.confirmSent,
|
|
33
37
|
outreach_contract_1.outreachContract.release,
|
|
@@ -38,6 +42,9 @@ for (const route of [
|
|
|
38
42
|
node_assert_1.default.ok(outreach_contract_1.outreachContract.claimNext.pathParams.safeParse({
|
|
39
43
|
requestId: '6ba7b810-9dad-11d1-80b4-00c04fd430c8',
|
|
40
44
|
}).success);
|
|
45
|
+
node_assert_1.default.ok(outreach_contract_1.outreachContract.claimNextAgent.pathParams.safeParse({
|
|
46
|
+
requestId: '6ba7b810-9dad-11d1-80b4-00c04fd430c8',
|
|
47
|
+
}).success);
|
|
41
48
|
node_assert_1.default.ok(!outreach_contract_1.outreachContract.claimNext.pathParams.safeParse({ requestId: 'nope' })
|
|
42
49
|
.success);
|
|
43
50
|
node_assert_1.default.ok(outreach_contract_1.outreachContract.claimNextLegacy.pathParams.safeParse({
|
|
@@ -56,6 +63,7 @@ node_assert_1.default.ok(outreach_contract_1.outreachContract.confirmSent.pathPa
|
|
|
56
63
|
const headersOf = (route) => route.headers;
|
|
57
64
|
for (const route of [
|
|
58
65
|
outreach_contract_1.outreachContract.claimNext,
|
|
66
|
+
outreach_contract_1.outreachContract.claimNextAgent,
|
|
59
67
|
outreach_contract_1.outreachContract.claimNextLegacy,
|
|
60
68
|
outreach_contract_1.outreachContract.confirmSent,
|
|
61
69
|
outreach_contract_1.outreachContract.release,
|