@dakkitor/api-contracts 1.7.1 → 1.8.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 (187) hide show
  1. package/dist/abilities/abilities.contract.spec.js +39 -19
  2. package/dist/abilities/interconnection.abilities.json +6 -0
  3. package/dist/abilities/outreach.abilities.json +0 -7
  4. package/dist/abilities/second-agent.abilities.json +2 -91
  5. package/dist/abilities/team-leads.json +1 -0
  6. package/dist/abilities/worker-curator.abilities.json +2 -0
  7. package/dist/actives/actives.contract.d.ts +2562 -2515
  8. package/dist/actives/actives.contract.d.ts.map +1 -1
  9. package/dist/agent-client-links/agent-client-links.contract.d.ts +908 -908
  10. package/dist/auth/auth.contract.d.ts +50 -44
  11. package/dist/auth/auth.contract.d.ts.map +1 -1
  12. package/dist/auth/auth.contract.js +1 -0
  13. package/dist/bookings/backdate-guard.spec.d.ts +2 -0
  14. package/dist/bookings/backdate-guard.spec.d.ts.map +1 -0
  15. package/dist/bookings/backdate-guard.spec.js +80 -0
  16. package/dist/bookings/bookings.contract.d.ts +4918 -4824
  17. package/dist/bookings/bookings.contract.d.ts.map +1 -1
  18. package/dist/bookings/bookings.contract.js +26 -2
  19. package/dist/call-history/call-history.contract.d.ts +434 -434
  20. package/dist/calls-feed/calls-feed.contract.d.ts +70 -70
  21. package/dist/client-contacts/client-contacts.contract.d.ts +290 -290
  22. package/dist/clients/clients.contract.d.ts +110 -110
  23. package/dist/collaboration-checkings/collaboration-checkings.contract.d.ts +1412 -1412
  24. package/dist/collaborations/collaborations.contract.d.ts +1278 -1278
  25. package/dist/common/common-schemas.d.ts +13 -13
  26. package/dist/common/common-schemas.d.ts.map +1 -1
  27. package/dist/common/common-schemas.js +1 -0
  28. package/dist/common/nino.d.ts +8 -0
  29. package/dist/common/nino.d.ts.map +1 -0
  30. package/dist/common/nino.js +26 -0
  31. package/dist/common/nino.spec.d.ts +2 -0
  32. package/dist/common/nino.spec.d.ts.map +1 -0
  33. package/dist/common/nino.spec.js +32 -0
  34. package/dist/companies/companies.contract.d.ts +30 -30
  35. package/dist/crews/crews.contract.d.ts +300 -300
  36. package/dist/cron-executions/cron-executions.contract.d.ts +19 -6
  37. package/dist/cron-executions/cron-executions.contract.d.ts.map +1 -1
  38. package/dist/cron-executions/cron-executions.contract.js +1 -0
  39. package/dist/cron-executions/cron-executions.contract.spec.d.ts +2 -0
  40. package/dist/cron-executions/cron-executions.contract.spec.d.ts.map +1 -0
  41. package/dist/cron-executions/cron-executions.contract.spec.js +27 -0
  42. package/dist/curated-worker-leads/candidate-booking-date-fields.spec.d.ts +2 -0
  43. package/dist/curated-worker-leads/candidate-booking-date-fields.spec.d.ts.map +1 -0
  44. package/dist/curated-worker-leads/candidate-booking-date-fields.spec.js +59 -0
  45. package/dist/curated-worker-leads/candidate-coordination.contract.d.ts +1255 -1188
  46. package/dist/curated-worker-leads/candidate-coordination.contract.d.ts.map +1 -1
  47. package/dist/curated-worker-leads/candidate-coordination.contract.js +22 -6
  48. package/dist/curated-worker-leads/candidate-coordination.contract.spec.js +11 -0
  49. package/dist/curated-worker-leads/candidate-edit-session.contract.d.ts +347 -304
  50. package/dist/curated-worker-leads/candidate-edit-session.contract.d.ts.map +1 -1
  51. package/dist/curated-worker-leads/contact-history.spec.js +1 -0
  52. package/dist/curated-worker-leads/curated-worker-lead-config.contract.d.ts +2 -85
  53. package/dist/curated-worker-leads/curated-worker-lead-config.contract.d.ts.map +1 -1
  54. package/dist/curated-worker-leads/curated-worker-lead-config.contract.js +17 -41
  55. package/dist/curated-worker-leads/curated-worker-lead-config.contract.spec.d.ts +2 -0
  56. package/dist/curated-worker-leads/curated-worker-lead-config.contract.spec.d.ts.map +1 -0
  57. package/dist/curated-worker-leads/curated-worker-lead-config.contract.spec.js +30 -0
  58. package/dist/curated-worker-leads/job-feed-match-counts.contract.spec.js +30 -0
  59. package/dist/curated-worker-leads/jobs-tab.contract.d.ts +6058 -5381
  60. package/dist/curated-worker-leads/jobs-tab.contract.d.ts.map +1 -1
  61. package/dist/curated-worker-leads/jobs-tab.contract.js +64 -12
  62. package/dist/curated-worker-leads/owned-jobs-tab.contract.d.ts +88 -88
  63. package/dist/curated-workers/curated-workers.contract.d.ts +1173 -962
  64. package/dist/curated-workers/curated-workers.contract.d.ts.map +1 -1
  65. package/dist/curated-workers/curated-workers.contract.js +37 -6
  66. package/dist/dashboards/dashboard-widgets.contract.d.ts +43 -73
  67. package/dist/dashboards/dashboard-widgets.contract.d.ts.map +1 -1
  68. package/dist/dashboards/dashboard-widgets.contract.js +1 -11
  69. package/dist/dashboards/dashboard-widgets.retirement.spec.d.ts +2 -0
  70. package/dist/dashboards/dashboard-widgets.retirement.spec.d.ts.map +1 -0
  71. package/dist/dashboards/dashboard-widgets.retirement.spec.js +22 -0
  72. package/dist/document-intake/document-intake.automation.spec.d.ts +2 -0
  73. package/dist/document-intake/document-intake.automation.spec.d.ts.map +1 -0
  74. package/dist/document-intake/document-intake.automation.spec.js +469 -0
  75. package/dist/document-intake/document-intake.card-side.spec.d.ts +2 -0
  76. package/dist/document-intake/document-intake.card-side.spec.d.ts.map +1 -0
  77. package/dist/document-intake/document-intake.card-side.spec.js +51 -0
  78. package/dist/document-intake/document-intake.contract.d.ts +9421 -1071
  79. package/dist/document-intake/document-intake.contract.d.ts.map +1 -1
  80. package/dist/document-intake/document-intake.contract.js +219 -5
  81. package/dist/document-intake/document-intake.contract.spec.d.ts +2 -0
  82. package/dist/document-intake/document-intake.contract.spec.d.ts.map +1 -0
  83. package/dist/document-intake/document-intake.contract.spec.js +37 -0
  84. package/dist/document-intake/document-intake.nino.spec.d.ts +2 -0
  85. package/dist/document-intake/document-intake.nino.spec.d.ts.map +1 -0
  86. package/dist/document-intake/document-intake.nino.spec.js +42 -0
  87. package/dist/export-jobs/export-jobs.contract.d.ts +426 -426
  88. package/dist/files/files.contract.d.ts +36 -36
  89. package/dist/index.d.ts +17 -9
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +17 -9
  92. package/dist/job-clusters/job-clusters.contract.d.ts +52 -52
  93. package/dist/jobs/jobs.contract.d.ts +3610 -3610
  94. package/dist/kpi-impersonation/kpi-impersonation.contract.d.ts +56 -56
  95. package/dist/lead-assignments/lead-assignments.contract.d.ts +706 -706
  96. package/dist/lead-distribution/agent-lead-distribution.contract.d.ts +220 -220
  97. package/dist/lead-distribution/lead-distribution-config.contract.d.ts +10 -10
  98. package/dist/leads/leads.contract.d.ts +86 -86
  99. package/dist/locations/locations.contract.d.ts +46 -46
  100. package/dist/notifications/notifications.contract.d.ts +18 -18
  101. package/dist/offices/offices.contract.d.ts +24 -24
  102. package/dist/outreach/__tests__/outreach-contract-additions.spec.js +27 -0
  103. package/dist/outreach/lab-outreach.contract.d.ts +48 -48
  104. package/dist/outreach/outreach-requests.contract.d.ts +272 -272
  105. package/dist/outreach/outreach-requests.schemas.d.ts +14 -14
  106. package/dist/outreach/outreach.contract.d.ts +12 -12
  107. package/dist/outreach/outreach.schemas.d.ts +2 -2
  108. package/dist/outreach/relay-hub-outreach.contract.d.ts +1156 -0
  109. package/dist/outreach/relay-hub-outreach.contract.d.ts.map +1 -0
  110. package/dist/outreach/relay-hub-outreach.contract.js +103 -0
  111. package/dist/outreach/relay-hub-outreach.contract.spec.d.ts +2 -0
  112. package/dist/outreach/relay-hub-outreach.contract.spec.d.ts.map +1 -0
  113. package/dist/outreach/relay-hub-outreach.contract.spec.js +119 -0
  114. package/dist/own-research/own-research.contract.d.ts +708 -708
  115. package/dist/proofs/proofs.contract.d.ts +196 -196
  116. package/dist/proofs/proofs.dtos.d.ts +104 -104
  117. package/dist/qualifications/qualifications.contract.d.ts +22 -22
  118. package/dist/realtime/realtime-telemetry.contract.d.ts +181 -0
  119. package/dist/realtime/realtime-telemetry.contract.d.ts.map +1 -0
  120. package/dist/realtime/realtime-telemetry.contract.js +81 -0
  121. package/dist/realtime/realtime-telemetry.contract.spec.d.ts +2 -0
  122. package/dist/realtime/realtime-telemetry.contract.spec.d.ts.map +1 -0
  123. package/dist/realtime/realtime-telemetry.contract.spec.js +41 -0
  124. package/dist/relay-pods/build-relay-pod-membership-rules.d.ts +9 -0
  125. package/dist/relay-pods/build-relay-pod-membership-rules.d.ts.map +1 -0
  126. package/dist/relay-pods/build-relay-pod-membership-rules.js +17 -0
  127. package/dist/relay-pods/build-relay-pod-membership-rules.spec.d.ts +2 -0
  128. package/dist/relay-pods/build-relay-pod-membership-rules.spec.d.ts.map +1 -0
  129. package/dist/relay-pods/build-relay-pod-membership-rules.spec.js +20 -0
  130. package/dist/relay-pods/relay-hub.contract.d.ts +1463 -0
  131. package/dist/relay-pods/relay-hub.contract.d.ts.map +1 -0
  132. package/dist/relay-pods/relay-hub.contract.js +140 -0
  133. package/dist/relay-pods/relay-hub.contract.spec.d.ts +2 -0
  134. package/dist/relay-pods/relay-hub.contract.spec.d.ts.map +1 -0
  135. package/dist/relay-pods/relay-hub.contract.spec.js +180 -0
  136. package/dist/relay-pods/relay-hub.schemas.d.ts +577 -0
  137. package/dist/relay-pods/relay-hub.schemas.d.ts.map +1 -0
  138. package/dist/relay-pods/relay-hub.schemas.js +158 -0
  139. package/dist/relay-pods/relay-lab-fleet.contract.d.ts +81 -81
  140. package/dist/relay-pods/relay-lab-fleet.schemas.d.ts +53 -53
  141. package/dist/{curated-worker-leads/lead-agent-area.contract.d.ts → relay-pods/relay-pod-members.contract.d.ts} +233 -126
  142. package/dist/relay-pods/relay-pod-members.contract.d.ts.map +1 -0
  143. package/dist/relay-pods/relay-pod-members.contract.js +73 -0
  144. package/dist/relay-pods/relay-pod-sessions.contract.d.ts +58 -58
  145. package/dist/relay-pods/relay-pods.contract.d.ts +169 -169
  146. package/dist/relay-pods/relay-pods.schemas.d.ts +46 -46
  147. package/dist/shared/summary-schemas.d.ts +10 -10
  148. package/dist/sheets-sync/__tests__/sheets-sync-events.schemas.test.js +22 -2
  149. package/dist/sheets-sync/sheets-sync-events.schemas.d.ts +30 -0
  150. package/dist/sheets-sync/sheets-sync-events.schemas.d.ts.map +1 -1
  151. package/dist/sheets-sync/sheets-sync-events.schemas.js +16 -1
  152. package/dist/sheets-sync/sheets-sync.contract.d.ts +829 -262
  153. package/dist/sheets-sync/sheets-sync.contract.d.ts.map +1 -1
  154. package/dist/sheets-sync/sheets-sync.contract.js +156 -34
  155. package/dist/telegram/telegram.contract.d.ts +12 -12
  156. package/dist/trades/trades.contract.d.ts +16 -16
  157. package/dist/user-access-grants/user-access-grants.contract.d.ts +226 -226
  158. package/dist/users/__tests__/assignable-roles.spec.js +1 -1
  159. package/dist/users/users.contract.d.ts +327 -325
  160. package/dist/users/users.contract.d.ts.map +1 -1
  161. package/dist/users/users.contract.js +10 -7
  162. package/dist/users/users.contract.spec.js +15 -0
  163. package/dist/voice-screener/voice-screener.contract.d.ts +237 -0
  164. package/dist/voice-screener/voice-screener.contract.d.ts.map +1 -0
  165. package/dist/voice-screener/voice-screener.contract.js +89 -0
  166. package/dist/worker-identity-cases/worker-identity-cases.contract.d.ts +500 -260
  167. package/dist/worker-identity-cases/worker-identity-cases.contract.d.ts.map +1 -1
  168. package/dist/worker-identity-cases/worker-identity-cases.contract.js +17 -1
  169. package/dist/worker-merge-proposals/worker-merge-proposals.contract.d.ts +130 -130
  170. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.d.ts +35 -35
  171. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.schemas.d.ts +15 -15
  172. package/dist/workers/do-not-contact.contract.d.ts +4 -4
  173. package/dist/workers/qualification-back-proof.spec.d.ts +2 -0
  174. package/dist/workers/qualification-back-proof.spec.d.ts.map +1 -0
  175. package/dist/workers/qualification-back-proof.spec.js +39 -0
  176. package/dist/workers/workers.contract.d.ts +1969 -1775
  177. package/dist/workers/workers.contract.d.ts.map +1 -1
  178. package/dist/workers/workers.contract.js +5 -0
  179. package/package.json +1 -1
  180. package/dist/curated-worker-leads/consent-queue.contract.d.ts +0 -4527
  181. package/dist/curated-worker-leads/consent-queue.contract.d.ts.map +0 -1
  182. package/dist/curated-worker-leads/consent-queue.contract.js +0 -201
  183. package/dist/curated-worker-leads/curated-worker-leads.contract.d.ts +0 -135
  184. package/dist/curated-worker-leads/curated-worker-leads.contract.d.ts.map +0 -1
  185. package/dist/curated-worker-leads/curated-worker-leads.contract.js +0 -32
  186. package/dist/curated-worker-leads/lead-agent-area.contract.d.ts.map +0 -1
  187. package/dist/curated-worker-leads/lead-agent-area.contract.js +0 -51
@@ -14,12 +14,12 @@ export declare const ImpersonationContextSchema: z.ZodObject<{
14
14
  lastName: z.ZodString;
15
15
  }, "strip", z.ZodTypeAny, {
16
16
  id: string;
17
- firstName: string;
18
17
  lastName: string;
18
+ firstName: string;
19
19
  }, {
20
20
  id: string;
21
- firstName: string;
22
21
  lastName: string;
22
+ firstName: string;
23
23
  }>;
24
24
  canImpersonateUsers: z.ZodArray<z.ZodObject<{
25
25
  id: z.ZodString;
@@ -27,34 +27,34 @@ export declare const ImpersonationContextSchema: z.ZodObject<{
27
27
  lastName: z.ZodString;
28
28
  }, "strip", z.ZodTypeAny, {
29
29
  id: string;
30
- firstName: string;
31
30
  lastName: string;
31
+ firstName: string;
32
32
  }, {
33
33
  id: string;
34
- firstName: string;
35
34
  lastName: string;
35
+ firstName: string;
36
36
  }>, "many">;
37
37
  }, "strip", z.ZodTypeAny, {
38
38
  canImpersonateUsers: {
39
39
  id: string;
40
- firstName: string;
41
40
  lastName: string;
41
+ firstName: string;
42
42
  }[];
43
43
  originalUser: {
44
44
  id: string;
45
- firstName: string;
46
45
  lastName: string;
46
+ firstName: string;
47
47
  };
48
48
  }, {
49
49
  canImpersonateUsers: {
50
50
  id: string;
51
- firstName: string;
52
51
  lastName: string;
52
+ firstName: string;
53
53
  }[];
54
54
  originalUser: {
55
55
  id: string;
56
- firstName: string;
57
56
  lastName: string;
57
+ firstName: string;
58
58
  };
59
59
  }>;
60
60
  export type ImpersonationContext = z.infer<typeof ImpersonationContextSchema>;
@@ -62,11 +62,11 @@ export declare const LoginSchema: z.ZodObject<{
62
62
  email: z.ZodString;
63
63
  password: z.ZodString;
64
64
  }, "strip", z.ZodTypeAny, {
65
- email: string;
66
65
  password: string;
67
- }, {
68
66
  email: string;
67
+ }, {
69
68
  password: string;
69
+ email: string;
70
70
  }>;
71
71
  export type Login = z.infer<typeof LoginSchema>;
72
72
  export declare const EvictedDeviceSchema: z.ZodObject<{
@@ -120,6 +120,7 @@ export declare const LoginResponseSchema: z.ZodObject<{
120
120
  userAgent: string | null;
121
121
  lastUsedAt: string | Date;
122
122
  }>>>;
123
+ relayPodIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
123
124
  }, "strip", z.ZodTypeAny, {
124
125
  id: string;
125
126
  email: string;
@@ -129,9 +130,9 @@ export declare const LoginResponseSchema: z.ZodObject<{
129
130
  isPrimary: boolean;
130
131
  description?: string | null | undefined;
131
132
  }[];
132
- firstName?: string | undefined;
133
- lastName?: string | undefined;
134
133
  roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
134
+ lastName?: string | undefined;
135
+ firstName?: string | undefined;
135
136
  impersonatedBy?: string | undefined;
136
137
  managedOfficeIds?: string[] | undefined;
137
138
  avatarUrl?: string | undefined;
@@ -143,18 +144,19 @@ export declare const LoginResponseSchema: z.ZodObject<{
143
144
  userAgent: string | null;
144
145
  lastUsedAt: string | Date;
145
146
  } | null | undefined;
147
+ relayPodIds?: string[] | undefined;
146
148
  }, {
147
149
  id: string;
148
150
  email: string;
149
- firstName?: string | undefined;
151
+ roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
150
152
  lastName?: string | undefined;
153
+ firstName?: string | undefined;
151
154
  phoneNumbers?: {
152
155
  id: string;
153
156
  phoneNumber: string;
154
157
  description?: string | null | undefined;
155
158
  isPrimary?: boolean | undefined;
156
159
  }[] | undefined;
157
- roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
158
160
  impersonatedBy?: string | undefined;
159
161
  managedOfficeIds?: string[] | undefined;
160
162
  avatarUrl?: string | undefined;
@@ -166,6 +168,7 @@ export declare const LoginResponseSchema: z.ZodObject<{
166
168
  userAgent: string | null;
167
169
  lastUsedAt: string | Date;
168
170
  } | null | undefined;
171
+ relayPodIds?: string[] | undefined;
169
172
  }>;
170
173
  export type LoginResponse = z.infer<typeof LoginResponseSchema>;
171
174
  export declare const SessionInfoSchema: z.ZodObject<{
@@ -200,11 +203,11 @@ export declare const authContract: {
200
203
  email: z.ZodString;
201
204
  password: z.ZodString;
202
205
  }, "strip", z.ZodTypeAny, {
203
- email: string;
204
206
  password: string;
205
- }, {
206
207
  email: string;
208
+ }, {
207
209
  password: string;
210
+ email: string;
208
211
  }>;
209
212
  path: "/v2/auth/login";
210
213
  responses: {
@@ -298,6 +301,7 @@ export declare const authContract: {
298
301
  userAgent: string | null;
299
302
  lastUsedAt: string | Date;
300
303
  }>>>;
304
+ relayPodIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
301
305
  }, "strip", z.ZodTypeAny, {
302
306
  id: string;
303
307
  email: string;
@@ -307,9 +311,9 @@ export declare const authContract: {
307
311
  isPrimary: boolean;
308
312
  description?: string | null | undefined;
309
313
  }[];
310
- firstName?: string | undefined;
311
- lastName?: string | undefined;
312
314
  roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
315
+ lastName?: string | undefined;
316
+ firstName?: string | undefined;
313
317
  impersonatedBy?: string | undefined;
314
318
  managedOfficeIds?: string[] | undefined;
315
319
  avatarUrl?: string | undefined;
@@ -321,18 +325,19 @@ export declare const authContract: {
321
325
  userAgent: string | null;
322
326
  lastUsedAt: string | Date;
323
327
  } | null | undefined;
328
+ relayPodIds?: string[] | undefined;
324
329
  }, {
325
330
  id: string;
326
331
  email: string;
327
- firstName?: string | undefined;
332
+ roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
328
333
  lastName?: string | undefined;
334
+ firstName?: string | undefined;
329
335
  phoneNumbers?: {
330
336
  id: string;
331
337
  phoneNumber: string;
332
338
  description?: string | null | undefined;
333
339
  isPrimary?: boolean | undefined;
334
340
  }[] | undefined;
335
- roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
336
341
  impersonatedBy?: string | undefined;
337
342
  managedOfficeIds?: string[] | undefined;
338
343
  avatarUrl?: string | undefined;
@@ -344,6 +349,7 @@ export declare const authContract: {
344
349
  userAgent: string | null;
345
350
  lastUsedAt: string | Date;
346
351
  } | null | undefined;
352
+ relayPodIds?: string[] | undefined;
347
353
  }>;
348
354
  401: z.ZodObject<{
349
355
  statusCode: z.ZodNumber;
@@ -470,9 +476,9 @@ export declare const authContract: {
470
476
  isPrimary: boolean;
471
477
  description?: string | null | undefined;
472
478
  }[];
473
- firstName?: string | undefined;
474
- lastName?: string | undefined;
475
479
  roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
480
+ lastName?: string | undefined;
481
+ firstName?: string | undefined;
476
482
  impersonatedBy?: string | undefined;
477
483
  managedOfficeIds?: string[] | undefined;
478
484
  avatarUrl?: string | undefined;
@@ -483,15 +489,15 @@ export declare const authContract: {
483
489
  }, {
484
490
  id: string;
485
491
  email: string;
486
- firstName?: string | undefined;
492
+ roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
487
493
  lastName?: string | undefined;
494
+ firstName?: string | undefined;
488
495
  phoneNumbers?: {
489
496
  id: string;
490
497
  phoneNumber: string;
491
498
  description?: string | null | undefined;
492
499
  isPrimary?: boolean | undefined;
493
500
  }[] | undefined;
494
- roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
495
501
  impersonatedBy?: string | undefined;
496
502
  managedOfficeIds?: string[] | undefined;
497
503
  avatarUrl?: string | undefined;
@@ -1133,9 +1139,9 @@ export declare const authContract: {
1133
1139
  isPrimary: boolean;
1134
1140
  description?: string | null | undefined;
1135
1141
  }[];
1136
- firstName?: string | undefined;
1137
- lastName?: string | undefined;
1138
1142
  roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
1143
+ lastName?: string | undefined;
1144
+ firstName?: string | undefined;
1139
1145
  impersonatedBy?: string | undefined;
1140
1146
  managedOfficeIds?: string[] | undefined;
1141
1147
  avatarUrl?: string | undefined;
@@ -1146,15 +1152,15 @@ export declare const authContract: {
1146
1152
  }, {
1147
1153
  id: string;
1148
1154
  email: string;
1149
- firstName?: string | undefined;
1155
+ roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
1150
1156
  lastName?: string | undefined;
1157
+ firstName?: string | undefined;
1151
1158
  phoneNumbers?: {
1152
1159
  id: string;
1153
1160
  phoneNumber: string;
1154
1161
  description?: string | null | undefined;
1155
1162
  isPrimary?: boolean | undefined;
1156
1163
  }[] | undefined;
1157
- roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
1158
1164
  impersonatedBy?: string | undefined;
1159
1165
  managedOfficeIds?: string[] | undefined;
1160
1166
  avatarUrl?: string | undefined;
@@ -1363,9 +1369,9 @@ export declare const authContract: {
1363
1369
  isPrimary: boolean;
1364
1370
  description?: string | null | undefined;
1365
1371
  }[];
1366
- firstName?: string | undefined;
1367
- lastName?: string | undefined;
1368
1372
  roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
1373
+ lastName?: string | undefined;
1374
+ firstName?: string | undefined;
1369
1375
  impersonatedBy?: string | undefined;
1370
1376
  managedOfficeIds?: string[] | undefined;
1371
1377
  avatarUrl?: string | undefined;
@@ -1376,15 +1382,15 @@ export declare const authContract: {
1376
1382
  }, {
1377
1383
  id: string;
1378
1384
  email: string;
1379
- firstName?: string | undefined;
1385
+ roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
1380
1386
  lastName?: string | undefined;
1387
+ firstName?: string | undefined;
1381
1388
  phoneNumbers?: {
1382
1389
  id: string;
1383
1390
  phoneNumber: string;
1384
1391
  description?: string | null | undefined;
1385
1392
  isPrimary?: boolean | undefined;
1386
1393
  }[] | undefined;
1387
- roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
1388
1394
  impersonatedBy?: string | undefined;
1389
1395
  managedOfficeIds?: string[] | undefined;
1390
1396
  avatarUrl?: string | undefined;
@@ -1499,9 +1505,9 @@ export declare const authContract: {
1499
1505
  isPrimary: boolean;
1500
1506
  description?: string | null | undefined;
1501
1507
  }[];
1502
- firstName?: string | undefined;
1503
- lastName?: string | undefined;
1504
1508
  roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
1509
+ lastName?: string | undefined;
1510
+ firstName?: string | undefined;
1505
1511
  impersonatedBy?: string | undefined;
1506
1512
  managedOfficeIds?: string[] | undefined;
1507
1513
  avatarUrl?: string | undefined;
@@ -1512,15 +1518,15 @@ export declare const authContract: {
1512
1518
  }, {
1513
1519
  id: string;
1514
1520
  email: string;
1515
- firstName?: string | undefined;
1521
+ roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
1516
1522
  lastName?: string | undefined;
1523
+ firstName?: string | undefined;
1517
1524
  phoneNumbers?: {
1518
1525
  id: string;
1519
1526
  phoneNumber: string;
1520
1527
  description?: string | null | undefined;
1521
1528
  isPrimary?: boolean | undefined;
1522
1529
  }[] | undefined;
1523
- roles?: ("ADMIN" | "SECOND_AGENT" | "FIRST_AGENT" | "COMPANY_CHECKING" | "KPI" | "TEAM_LEADS" | "OFFICE_MANAGER" | "WORKER_CURATOR" | "INTERCONNECTION" | "OUTREACH")[] | undefined;
1524
1530
  impersonatedBy?: string | undefined;
1525
1531
  managedOfficeIds?: string[] | undefined;
1526
1532
  avatarUrl?: string | undefined;
@@ -1704,12 +1710,12 @@ export declare const authContract: {
1704
1710
  lastName: z.ZodString;
1705
1711
  }, "strip", z.ZodTypeAny, {
1706
1712
  id: string;
1707
- firstName: string;
1708
1713
  lastName: string;
1714
+ firstName: string;
1709
1715
  }, {
1710
1716
  id: string;
1711
- firstName: string;
1712
1717
  lastName: string;
1718
+ firstName: string;
1713
1719
  }>;
1714
1720
  canImpersonateUsers: z.ZodArray<z.ZodObject<{
1715
1721
  id: z.ZodString;
@@ -1717,34 +1723,34 @@ export declare const authContract: {
1717
1723
  lastName: z.ZodString;
1718
1724
  }, "strip", z.ZodTypeAny, {
1719
1725
  id: string;
1720
- firstName: string;
1721
1726
  lastName: string;
1727
+ firstName: string;
1722
1728
  }, {
1723
1729
  id: string;
1724
- firstName: string;
1725
1730
  lastName: string;
1731
+ firstName: string;
1726
1732
  }>, "many">;
1727
1733
  }, "strip", z.ZodTypeAny, {
1728
1734
  canImpersonateUsers: {
1729
1735
  id: string;
1730
- firstName: string;
1731
1736
  lastName: string;
1737
+ firstName: string;
1732
1738
  }[];
1733
1739
  originalUser: {
1734
1740
  id: string;
1735
- firstName: string;
1736
1741
  lastName: string;
1742
+ firstName: string;
1737
1743
  };
1738
1744
  }, {
1739
1745
  canImpersonateUsers: {
1740
1746
  id: string;
1741
- firstName: string;
1742
1747
  lastName: string;
1748
+ firstName: string;
1743
1749
  }[];
1744
1750
  originalUser: {
1745
1751
  id: string;
1746
- firstName: string;
1747
1752
  lastName: string;
1753
+ firstName: string;
1748
1754
  };
1749
1755
  }>;
1750
1756
  401: z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"auth.contract.d.ts","sourceRoot":"","sources":["../../contracts/auth/auth.contract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,iBAAiB;;;;;;EAIM,CAAC;AAErC,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASM,CAAC;AAE9C,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAI9E,eAAO,MAAM,WAAW;;;;;;;;;EAKM,CAAC;AAE/B,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEhD,eAAO,MAAM,mBAAmB;;;;;;;;;EAUM,CAAC;AAEvC,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKM,CAAC;AAEvC,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;EAYM,CAAC;AAErC,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgLxB,CAAC"}
1
+ {"version":3,"file":"auth.contract.d.ts","sourceRoot":"","sources":["../../contracts/auth/auth.contract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,iBAAiB;;;;;;EAIM,CAAC;AAErC,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASM,CAAC;AAE9C,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAI9E,eAAO,MAAM,WAAW;;;;;;;;;EAKM,CAAC;AAE/B,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEhD,eAAO,MAAM,mBAAmB;;;;;;;;;EAUM,CAAC;AAEvC,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMM,CAAC;AAEvC,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;EAYM,CAAC;AAErC,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgLxB,CAAC"}
@@ -43,6 +43,7 @@ exports.LoginResponseSchema = users_contract_1.ProfileSchema.extend({
43
43
  evictedDevice: exports.EvictedDeviceSchema.nullable()
44
44
  .optional()
45
45
  .describe('Set when this login pushed the account over the device cap and signed out another device'),
46
+ relayPodIds: zod_1.z.array(zod_1.z.string().uuid()).optional(),
46
47
  }).openapi({ title: 'LoginResponse' });
47
48
  exports.SessionInfoSchema = zod_1.z
48
49
  .object({
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=backdate-guard.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backdate-guard.spec.d.ts","sourceRoot":"","sources":["../../contracts/bookings/backdate-guard.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const bookings_contract_1 = require("./bookings.contract");
4
+ // Fixed "now" so the date math is deterministic.
5
+ const NOW = new Date('2026-08-13T10:00:00Z');
6
+ const daysBefore = (n) => {
7
+ const d = new Date(NOW);
8
+ d.setUTCDate(d.getUTCDate() - n);
9
+ return d.toISOString().split('T')[0];
10
+ };
11
+ describe('backdateDaysFrom', () => {
12
+ it('exposes the threshold as 31', () => {
13
+ expect(bookings_contract_1.MAX_BOOKING_BACKDATE_DAYS).toBe(31);
14
+ });
15
+ it('returns 0 for today', () => {
16
+ expect((0, bookings_contract_1.backdateDaysFrom)(daysBefore(0), NOW)).toBe(0);
17
+ });
18
+ it('counts whole days into the past', () => {
19
+ expect((0, bookings_contract_1.backdateDaysFrom)(daysBefore(31), NOW)).toBe(31);
20
+ expect((0, bookings_contract_1.backdateDaysFrom)(daysBefore(32), NOW)).toBe(32);
21
+ });
22
+ it('returns a negative count for future dates', () => {
23
+ expect((0, bookings_contract_1.backdateDaysFrom)('2026-08-20', NOW)).toBe(-7);
24
+ });
25
+ it('measures the 2016 incident at 3772 days', () => {
26
+ expect((0, bookings_contract_1.backdateDaysFrom)('2016-04-15', new Date('2026-08-13T00:00:00Z'))).toBe(3772);
27
+ });
28
+ it('is unaffected by the time of day', () => {
29
+ expect((0, bookings_contract_1.backdateDaysFrom)(daysBefore(5), new Date('2026-08-13T23:59:59Z'))).toBe(5);
30
+ });
31
+ });
32
+ describe('BookingItemSchema backdating rule', () => {
33
+ // BookingItemSchema's only other required field is `worker` (ResourceIdSchema);
34
+ // there is no `jobId` on this schema — job assignment happens one level up on
35
+ // CreateBookingSchema.
36
+ const base = {
37
+ worker: { id: '11111111-1111-4111-8111-111111111111' },
38
+ };
39
+ // BookingItemSchema's cross-field rules call backdateDaysFrom(data.startDate)
40
+ // with the DEFAULT `now = new Date()` — the real wall clock, not the pinned
41
+ // NOW above. Fixtures in this block must be built from the real clock too,
42
+ // or the two clocks drift apart (by a day, then more) and these tests
43
+ // become flaky/false-failing over time.
44
+ const daysBeforeReal = (n) => {
45
+ const d = new Date();
46
+ d.setUTCDate(d.getUTCDate() - n);
47
+ return d.toISOString().split('T')[0];
48
+ };
49
+ it('rejects a start date 32 days in the past', () => {
50
+ const result = bookings_contract_1.BookingItemSchema.safeParse({
51
+ ...base,
52
+ startDate: daysBeforeReal(32),
53
+ });
54
+ expect(result.success).toBe(false);
55
+ if (!result.success) {
56
+ const issue = result.error.issues.find((i) => i.path[0] === 'startDate');
57
+ expect(issue?.message).toBe('Start date cannot be more than 31 days in the past (received 32 days).');
58
+ }
59
+ });
60
+ it('accepts a start date exactly 31 days in the past', () => {
61
+ const result = bookings_contract_1.BookingItemSchema.safeParse({
62
+ ...base,
63
+ startDate: daysBeforeReal(31),
64
+ });
65
+ const startDateIssue = result.success
66
+ ? undefined
67
+ : result.error.issues.find((i) => i.path[0] === 'startDate');
68
+ expect(startDateIssue).toBeUndefined();
69
+ });
70
+ it('accepts today', () => {
71
+ const result = bookings_contract_1.BookingItemSchema.safeParse({
72
+ ...base,
73
+ startDate: daysBeforeReal(0),
74
+ });
75
+ const startDateIssue = result.success
76
+ ? undefined
77
+ : result.error.issues.find((i) => i.path[0] === 'startDate');
78
+ expect(startDateIssue).toBeUndefined();
79
+ });
80
+ });