@dsptch-work/api-client 0.5.0 → 0.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.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,44 @@ minor bump until `1.0.0`. See [RELEASING.md](./RELEASING.md) for the release and
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.6.0] - 2026-08-12
11
+
12
+ ### Added
13
+
14
+ - `ProblemTypeCatalog` and `zProblemTypeCatalog` add `precondition_required` and
15
+ `precondition_failed`, the identifiers for the `428` and `412` returned by the operations that now
16
+ require `If-Match`.
17
+ - `JobResponseObject` adds required `clock_in_requirement` (`'none' | 'warning' | 'required'`), and
18
+ `JobParameters` accepts it as an optional field on create and update. Sending `required` needs the
19
+ company to be enabled for it; otherwise the request returns `422`.
20
+
21
+ ### Changed
22
+
23
+ - **Breaking:** `Timecodes.updateTimecode`, `Timecodes.scheduleTimecodeChange`,
24
+ `Timecodes.cancelTimecodeScheduledChanges`, `Timecodes.cancelTimecodeScheduledTermination`, and
25
+ `JobWageDeterminations.deleteWageDetermination` now take a **required** `headers` option carrying
26
+ `If-Match`, and their error types add `412` and `428`. TypeScript rejects a call that omits the
27
+ header, so upgrading surfaces every affected call site at compile time rather than as a runtime
28
+ `428`. Pass the `ETag` from a read of the resource, or `'*'` to write
29
+ against whatever exists, and take the next validator from the write's own response. Creating a new
30
+ record, the pay-schedule child writes, and the employment writes are unchanged.
31
+ - `JobResponseObject.require_clock_in` is now `boolean` rather than `boolean | null`, and reads as a
32
+ compatibility alias over `clock_in_requirement` — `true` when the level is `warning` or `required`.
33
+ On write, `true` ensures at least `warning` without downgrading a job already set to `required`,
34
+ and `false` or `null` clears it to `none`. Prefer `clock_in_requirement`.
35
+
36
+ ### Fixed
37
+
38
+ - `cancelUserCompanyScheduledTermination` documents a `422` for an employment with no scheduled
39
+ termination boundary to cancel, where the failure was previously untyped.
40
+ - The generated docstrings for `sex`, `veteran_status`, and `hispanic_origin` name the lowercase
41
+ values the API has always emitted (`female`, `protected_veteran`, `not_specified`) instead of the
42
+ uppercase form previously published. No emitted value changed, and the sibling `race` field
43
+ genuinely emits uppercase codes.
44
+
45
+ See the [API changelog](https://dsptch.app/support/docs/developers/api-changelog) for the complete
46
+ REST contract details.
47
+
10
48
  ## [0.5.0] - 2026-08-11
11
49
 
12
50
  ### Added
package/README.md CHANGED
@@ -7,7 +7,7 @@ that wires up the base URL and `X-Api-Key` auth for you.
7
7
 
8
8
  > **Status:** pre-1.0, published to the public npm registry. The API is still catching up
9
9
  > to the DSPTCH web app, so releases stay in the `0.x` range and may ship breaking changes
10
- > between minor versions (`0.4.x` → `0.5.0`) — pin a version you have tested.
10
+ > between minor versions (`0.5.x` → `0.6.0`) — pin a version you have tested.
11
11
 
12
12
  ## Installing
13
13
 
@@ -2599,6 +2599,8 @@ export declare class Timecodes {
2599
2599
  * re-sync. An `effective_date` in the body is not read here — the correction
2600
2600
  * takes effect at the record's existing `valid_from`.
2601
2601
  *
2602
+ * Conditional: send the timecode's `ETag` as `If-Match`.
2603
+ *
2602
2604
  *
2603
2605
  * **Required scope:**
2604
2606
  *
@@ -4522,6 +4522,8 @@ export class Timecodes {
4522
4522
  * re-sync. An `effective_date` in the body is not read here — the correction
4523
4523
  * takes effect at the record's existing `valid_from`.
4524
4524
  *
4525
+ * Conditional: send the timecode's `ETag` as `If-Match`.
4526
+ *
4525
4527
  *
4526
4528
  * **Required scope:**
4527
4529
  *
@@ -170,6 +170,14 @@ export type Problem = {
170
170
  *
171
171
  * The write conflicts with what is already recorded for the resource — another version occupies the same span, or the write contradicts the resource's recorded identity. Re-read the current state and retry on top of it.
172
172
  *
173
+ * ## 412
174
+ *
175
+ * ### precondition_failed
176
+ *
177
+ * **Precondition Failed**
178
+ *
179
+ * The `If-Match` validator names a version of this resource that is no longer current — the version family changed after you read it. Re-read the resource, take its fresh `ETag`, and reapply your change on top of the current state. A malformed or unrecognizable validator refuses the same way, since neither matches.
180
+ *
173
181
  * ## 422
174
182
  *
175
183
  * ### attachment_not_image
@@ -274,6 +282,14 @@ export type Problem = {
274
282
  *
275
283
  * The apprentice's wage schedule does not belong to the program in the URL. Use a schedule from that program.
276
284
  *
285
+ * ## 428
286
+ *
287
+ * ### precondition_required
288
+ *
289
+ * **Precondition Required**
290
+ *
291
+ * The write must state which version of the resource it was composed against, and no `If-Match` was sent. Read the resource, send its `ETag` back as `If-Match`, or send `If-Match: *` to write unconditionally against whatever exists.
292
+ *
277
293
  * ## 429
278
294
  *
279
295
  * ### too_many_requests
@@ -291,7 +307,7 @@ export type Problem = {
291
307
  * Something failed on the server; nothing in the request needs fixing. Retry later, or report the problem if it persists.
292
308
  *
293
309
  */
294
- export type ProblemTypeCatalog = 'blank_axis' | 'invalid_cursor' | 'invalid_filter_key' | 'invalid_limit' | 'invalid_signature' | 'non_range_filter_value' | 'non_scalar_axis' | 'non_scalar_filter_value' | 'parameter_missing' | 'parameter_not_object' | 'unknown_axis' | 'unknown_key' | 'unsupported_axis' | 'valid_axis_on_timeline' | 'unauthorized' | 'company_scoped_key_required' | 'forbidden' | 'insufficient_api_key_scope' | 'not_found' | 'recorded_since_termination' | 'version_overlap' | 'attachment_not_image' | 'company_not_employer' | 'confirm_apprenticeship_conflict' | 'destroy_restricted' | 'invalid_date' | 'invalid_filter_value' | 'invalid_iso8601_duration' | 'invalid_placement_move' | 'invalid_signed_id' | 'non_numeric_cents' | 'nothing_to_cancel' | 'pagination_failed' | 'subtype_foreign_keys' | 'synced_determination' | 'user_not_company_member' | 'validation_failed' | 'wage_schedule_outside_program' | 'too_many_requests' | 'internal_error';
310
+ export type ProblemTypeCatalog = 'blank_axis' | 'invalid_cursor' | 'invalid_filter_key' | 'invalid_limit' | 'invalid_signature' | 'non_range_filter_value' | 'non_scalar_axis' | 'non_scalar_filter_value' | 'parameter_missing' | 'parameter_not_object' | 'unknown_axis' | 'unknown_key' | 'unsupported_axis' | 'valid_axis_on_timeline' | 'unauthorized' | 'company_scoped_key_required' | 'forbidden' | 'insufficient_api_key_scope' | 'not_found' | 'recorded_since_termination' | 'version_overlap' | 'precondition_failed' | 'attachment_not_image' | 'company_not_employer' | 'confirm_apprenticeship_conflict' | 'destroy_restricted' | 'invalid_date' | 'invalid_filter_value' | 'invalid_iso8601_duration' | 'invalid_placement_move' | 'invalid_signed_id' | 'non_numeric_cents' | 'nothing_to_cancel' | 'pagination_failed' | 'subtype_foreign_keys' | 'synced_determination' | 'user_not_company_member' | 'validation_failed' | 'wage_schedule_outside_program' | 'precondition_required' | 'too_many_requests' | 'internal_error';
295
311
  export type ApiKeyScopeResponseObject = {
296
312
  resource: string;
297
313
  action: 'read' | 'create' | 'update' | 'delete';
@@ -2352,9 +2368,13 @@ export type JobResponseObject = {
2352
2368
  */
2353
2369
  tz_name: string;
2354
2370
  /**
2355
- * Whether workers must clock in to track time on this job; null when unset.
2371
+ * Compatibility alias true when clock_in_requirement is warning or required; always boolean.
2372
+ */
2373
+ require_clock_in: boolean;
2374
+ /**
2375
+ * Clock-in enforcement level: one of none (no guidance), warning (compliance warning on manual entries), or required (hard stop for technician web CUD and GraphQL owner CUD, including client-claimed punches, until a server-verified punch path exists; company-authed API v1 is intentionally ungated).
2356
2376
  */
2357
- require_clock_in: boolean | null;
2377
+ clock_in_requirement: 'none' | 'warning' | 'required';
2358
2378
  /**
2359
2379
  * Human-readable job name, unique within the creating company; null when unset.
2360
2380
  */
@@ -2669,9 +2689,13 @@ export type JobParameters = {
2669
2689
  tz_name?: string;
2670
2690
  time_card_start_day?: TimeCardStartDay;
2671
2691
  /**
2672
- * Whether workers must clock in to track time on this job; null when unset.
2692
+ * Compatibility alias true ensures at least warning (never downgrades required); false or null clears to none; omit to leave unchanged. Prefer clock_in_requirement.
2673
2693
  */
2674
2694
  require_clock_in?: boolean | null;
2695
+ /**
2696
+ * Clock-in enforcement level: one of none (no guidance), warning (compliance warning on manual entries), or required (hard stop for technician web CUD and GraphQL owner CUD, including client-claimed punches, until a server-verified punch path exists; company-authed API v1 is intentionally ungated). Omit the field to leave the current value unchanged.
2697
+ */
2698
+ clock_in_requirement?: 'none' | 'warning' | 'required';
2675
2699
  /**
2676
2700
  * Whether to send geofence-based clock-in/out reminders for this job; null when unset.
2677
2701
  */
@@ -3080,7 +3104,7 @@ export type UserResponseObject = {
3080
3104
  */
3081
3105
  race?: Array<string> | null;
3082
3106
  /**
3083
- * Worker sex for demographic reporting: one of FEMALE, MALE, NON_BINARY, or NOT_SPECIFIED. Null when unset.
3107
+ * Worker sex for demographic reporting: one of female, male, non_binary, or not_specified. Null when unset.
3084
3108
  */
3085
3109
  sex?: string | null;
3086
3110
  /**
@@ -3096,11 +3120,11 @@ export type UserResponseObject = {
3096
3120
  */
3097
3121
  drivers_license_number?: string | null;
3098
3122
  /**
3099
- * Veteran status per US Census definitions: one of PROTECTED_VETERAN, NOT_PROTECTED_VETERAN, RESERVES, GUARD, or NOT_SPECIFIED. Null when unset.
3123
+ * Veteran status per US Census definitions: one of protected_veteran, not_protected_veteran, reserves, guard, or not_specified. Null when unset.
3100
3124
  */
3101
3125
  veteran_status?: string | null;
3102
3126
  /**
3103
- * Whether the worker is of Hispanic origin per US Census definitions: one of YES, NO, or NOT_SPECIFIED. Null when unset.
3127
+ * Whether the worker is of Hispanic origin per US Census definitions: one of yes, no, or not_specified. Null when unset.
3104
3128
  */
3105
3129
  hispanic_origin?: string | null;
3106
3130
  /**
@@ -3369,7 +3393,7 @@ export type UserParameters = {
3369
3393
  */
3370
3394
  race?: Array<string> | null;
3371
3395
  /**
3372
- * Worker sex for demographic reporting: one of FEMALE, MALE, NON_BINARY, or NOT_SPECIFIED.
3396
+ * Worker sex for demographic reporting: one of female, male, non_binary, or not_specified.
3373
3397
  */
3374
3398
  sex?: string | null;
3375
3399
  /**
@@ -3385,11 +3409,11 @@ export type UserParameters = {
3385
3409
  */
3386
3410
  drivers_license_number?: string | null;
3387
3411
  /**
3388
- * Veteran status per US Census definitions: one of PROTECTED_VETERAN, NOT_PROTECTED_VETERAN, RESERVES, GUARD, or NOT_SPECIFIED.
3412
+ * Veteran status per US Census definitions: one of protected_veteran, not_protected_veteran, reserves, guard, or not_specified.
3389
3413
  */
3390
3414
  veteran_status?: string | null;
3391
3415
  /**
3392
- * Whether the worker is of Hispanic origin per US Census definitions: one of YES, NO, or NOT_SPECIFIED.
3416
+ * Whether the worker is of Hispanic origin per US Census definitions: one of yes, no, or not_specified.
3393
3417
  */
3394
3418
  hispanic_origin?: string | null;
3395
3419
  /**
@@ -13781,6 +13805,12 @@ export type CreateWageDeterminationResponses = {
13781
13805
  export type CreateWageDeterminationResponse = CreateWageDeterminationResponses[keyof CreateWageDeterminationResponses];
13782
13806
  export type DeleteWageDeterminationData = {
13783
13807
  body?: never;
13808
+ headers: {
13809
+ /**
13810
+ * Version validator this write is composed against — the `ETag` from a read of this wage determination, or `*` to write against whatever exists. See "Version validators" in the API overview.
13811
+ */
13812
+ 'If-Match': string;
13813
+ };
13784
13814
  path: {
13785
13815
  job_id: string;
13786
13816
  uid: string;
@@ -13797,10 +13827,18 @@ export type DeleteWageDeterminationErrors = {
13797
13827
  * Not Found
13798
13828
  */
13799
13829
  404: Problem;
13830
+ /**
13831
+ * Precondition Failed
13832
+ */
13833
+ 412: Problem;
13800
13834
  /**
13801
13835
  * Unprocessable Content
13802
13836
  */
13803
13837
  422: Problem;
13838
+ /**
13839
+ * Precondition Required
13840
+ */
13841
+ 428: Problem;
13804
13842
  };
13805
13843
  export type DeleteWageDeterminationError = DeleteWageDeterminationErrors[keyof DeleteWageDeterminationErrors];
13806
13844
  export type DeleteWageDeterminationResponses = {
@@ -16550,6 +16588,12 @@ export type ListTimecodeHistoryResponses = {
16550
16588
  export type ListTimecodeHistoryResponse = ListTimecodeHistoryResponses[keyof ListTimecodeHistoryResponses];
16551
16589
  export type CancelTimecodeScheduledChangesData = {
16552
16590
  body?: never;
16591
+ headers: {
16592
+ /**
16593
+ * Version validator this write is composed against — the `ETag` from a read of this timecode, or `*` to write against whatever exists. See "Version validators" in the API overview.
16594
+ */
16595
+ 'If-Match': string;
16596
+ };
16553
16597
  path: {
16554
16598
  timecode_id: string;
16555
16599
  };
@@ -16565,10 +16609,18 @@ export type CancelTimecodeScheduledChangesErrors = {
16565
16609
  * Not Found
16566
16610
  */
16567
16611
  404: Problem;
16612
+ /**
16613
+ * Precondition Failed
16614
+ */
16615
+ 412: Problem;
16568
16616
  /**
16569
16617
  * Unprocessable Content
16570
16618
  */
16571
16619
  422: Problem;
16620
+ /**
16621
+ * Precondition Required
16622
+ */
16623
+ 428: Problem;
16572
16624
  };
16573
16625
  export type CancelTimecodeScheduledChangesError = CancelTimecodeScheduledChangesErrors[keyof CancelTimecodeScheduledChangesErrors];
16574
16626
  export type CancelTimecodeScheduledChangesResponses = {
@@ -16606,6 +16658,12 @@ export type ListTimecodeScheduledChangesResponses = {
16606
16658
  export type ListTimecodeScheduledChangesResponse = ListTimecodeScheduledChangesResponses[keyof ListTimecodeScheduledChangesResponses];
16607
16659
  export type ScheduleTimecodeChangeData = {
16608
16660
  body: TimecodeScheduledChangeParameters;
16661
+ headers: {
16662
+ /**
16663
+ * Version validator this write is composed against — the `ETag` from a read of this timecode, or `*` to write against whatever exists. See "Version validators" in the API overview.
16664
+ */
16665
+ 'If-Match': string;
16666
+ };
16609
16667
  path: {
16610
16668
  timecode_id: string;
16611
16669
  };
@@ -16625,10 +16683,18 @@ export type ScheduleTimecodeChangeErrors = {
16625
16683
  * Not Found
16626
16684
  */
16627
16685
  404: Problem;
16686
+ /**
16687
+ * Precondition Failed
16688
+ */
16689
+ 412: Problem;
16628
16690
  /**
16629
16691
  * Unprocessable Content
16630
16692
  */
16631
16693
  422: Problem;
16694
+ /**
16695
+ * Precondition Required
16696
+ */
16697
+ 428: Problem;
16632
16698
  };
16633
16699
  export type ScheduleTimecodeChangeError = ScheduleTimecodeChangeErrors[keyof ScheduleTimecodeChangeErrors];
16634
16700
  export type ScheduleTimecodeChangeResponses = {
@@ -16640,6 +16706,12 @@ export type ScheduleTimecodeChangeResponses = {
16640
16706
  export type ScheduleTimecodeChangeResponse = ScheduleTimecodeChangeResponses[keyof ScheduleTimecodeChangeResponses];
16641
16707
  export type CancelTimecodeScheduledTerminationData = {
16642
16708
  body?: never;
16709
+ headers: {
16710
+ /**
16711
+ * Version validator this write is composed against — the `ETag` from a read of this timecode, or `*` to write against whatever exists. See "Version validators" in the API overview.
16712
+ */
16713
+ 'If-Match': string;
16714
+ };
16643
16715
  path: {
16644
16716
  timecode_id: string;
16645
16717
  };
@@ -16659,10 +16731,18 @@ export type CancelTimecodeScheduledTerminationErrors = {
16659
16731
  * Conflict
16660
16732
  */
16661
16733
  409: Problem;
16734
+ /**
16735
+ * Precondition Failed
16736
+ */
16737
+ 412: Problem;
16662
16738
  /**
16663
16739
  * Unprocessable Content
16664
16740
  */
16665
16741
  422: Problem;
16742
+ /**
16743
+ * Precondition Required
16744
+ */
16745
+ 428: Problem;
16666
16746
  };
16667
16747
  export type CancelTimecodeScheduledTerminationError = CancelTimecodeScheduledTerminationErrors[keyof CancelTimecodeScheduledTerminationErrors];
16668
16748
  export type CancelTimecodeScheduledTerminationResponses = {
@@ -16796,6 +16876,12 @@ export type GetTimecodeResponses = {
16796
16876
  export type GetTimecodeResponse = GetTimecodeResponses[keyof GetTimecodeResponses];
16797
16877
  export type UpdateTimecodeData = {
16798
16878
  body: TimecodeParameters;
16879
+ headers: {
16880
+ /**
16881
+ * Version validator this write is composed against — the `ETag` from a read of this timecode, or `*` to write against whatever exists. See "Version validators" in the API overview.
16882
+ */
16883
+ 'If-Match': string;
16884
+ };
16799
16885
  path: {
16800
16886
  /**
16801
16887
  * Unique identifier of the timecode.
@@ -16810,10 +16896,18 @@ export type UpdateTimecodeErrors = {
16810
16896
  * Forbidden
16811
16897
  */
16812
16898
  403: Problem;
16899
+ /**
16900
+ * Precondition Failed
16901
+ */
16902
+ 412: Problem;
16813
16903
  /**
16814
16904
  * Unprocessable Content
16815
16905
  */
16816
16906
  422: Problem;
16907
+ /**
16908
+ * Precondition Required
16909
+ */
16910
+ 428: Problem;
16817
16911
  };
16818
16912
  export type UpdateTimecodeError = UpdateTimecodeErrors[keyof UpdateTimecodeErrors];
16819
16913
  export type UpdateTimecodeResponses = {
@@ -17684,6 +17778,10 @@ export type CancelUserCompanyScheduledTerminationErrors = {
17684
17778
  * Not Found
17685
17779
  */
17686
17780
  404: Problem;
17781
+ /**
17782
+ * Unprocessable Content
17783
+ */
17784
+ 422: Problem;
17687
17785
  };
17688
17786
  export type CancelUserCompanyScheduledTerminationError = CancelUserCompanyScheduledTerminationErrors[keyof CancelUserCompanyScheduledTerminationErrors];
17689
17787
  export type CancelUserCompanyScheduledTerminationResponses = {
@@ -153,6 +153,14 @@ export declare const zProblem: z.ZodObject<{
153
153
  *
154
154
  * The write conflicts with what is already recorded for the resource — another version occupies the same span, or the write contradicts the resource's recorded identity. Re-read the current state and retry on top of it.
155
155
  *
156
+ * ## 412
157
+ *
158
+ * ### precondition_failed
159
+ *
160
+ * **Precondition Failed**
161
+ *
162
+ * The `If-Match` validator names a version of this resource that is no longer current — the version family changed after you read it. Re-read the resource, take its fresh `ETag`, and reapply your change on top of the current state. A malformed or unrecognizable validator refuses the same way, since neither matches.
163
+ *
156
164
  * ## 422
157
165
  *
158
166
  * ### attachment_not_image
@@ -257,6 +265,14 @@ export declare const zProblem: z.ZodObject<{
257
265
  *
258
266
  * The apprentice's wage schedule does not belong to the program in the URL. Use a schedule from that program.
259
267
  *
268
+ * ## 428
269
+ *
270
+ * ### precondition_required
271
+ *
272
+ * **Precondition Required**
273
+ *
274
+ * The write must state which version of the resource it was composed against, and no `If-Match` was sent. Read the resource, send its `ETag` back as `If-Match`, or send `If-Match: *` to write unconditionally against whatever exists.
275
+ *
260
276
  * ## 429
261
277
  *
262
278
  * ### too_many_requests
@@ -296,6 +312,7 @@ export declare const zProblemTypeCatalog: z.ZodEnum<{
296
312
  not_found: "not_found";
297
313
  recorded_since_termination: "recorded_since_termination";
298
314
  version_overlap: "version_overlap";
315
+ precondition_failed: "precondition_failed";
299
316
  attachment_not_image: "attachment_not_image";
300
317
  company_not_employer: "company_not_employer";
301
318
  confirm_apprenticeship_conflict: "confirm_apprenticeship_conflict";
@@ -313,6 +330,7 @@ export declare const zProblemTypeCatalog: z.ZodEnum<{
313
330
  user_not_company_member: "user_not_company_member";
314
331
  validation_failed: "validation_failed";
315
332
  wage_schedule_outside_program: "wage_schedule_outside_program";
333
+ precondition_required: "precondition_required";
316
334
  too_many_requests: "too_many_requests";
317
335
  internal_error: "internal_error";
318
336
  }>;
@@ -1768,6 +1786,11 @@ export declare const zJobParameters: z.ZodObject<{
1768
1786
  tz_name: z.ZodOptional<z.ZodString>;
1769
1787
  time_card_start_day: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>, z.ZodLiteral<6>]>>;
1770
1788
  require_clock_in: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1789
+ clock_in_requirement: z.ZodOptional<z.ZodEnum<{
1790
+ none: "none";
1791
+ warning: "warning";
1792
+ required: "required";
1793
+ }>>;
1771
1794
  send_geofence_reminders: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1772
1795
  allow_customer_access: z.ZodOptional<z.ZodBoolean>;
1773
1796
  timekeeping_timecode_ids: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
@@ -1841,6 +1864,11 @@ export declare const zJobUpdateParameters: z.ZodIntersection<z.ZodObject<{
1841
1864
  tz_name: z.ZodOptional<z.ZodString>;
1842
1865
  time_card_start_day: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>, z.ZodLiteral<6>]>>;
1843
1866
  require_clock_in: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1867
+ clock_in_requirement: z.ZodOptional<z.ZodEnum<{
1868
+ none: "none";
1869
+ warning: "warning";
1870
+ required: "required";
1871
+ }>>;
1844
1872
  send_geofence_reminders: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1845
1873
  allow_customer_access: z.ZodOptional<z.ZodBoolean>;
1846
1874
  timekeeping_timecode_ids: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
@@ -3175,7 +3203,12 @@ export declare const zJobResponseObject: z.ZodObject<{
3175
3203
  purchase_order_number: z.ZodNullable<z.ZodString>;
3176
3204
  time_card_start_day: z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>, z.ZodLiteral<6>]>;
3177
3205
  tz_name: z.ZodString;
3178
- require_clock_in: z.ZodNullable<z.ZodBoolean>;
3206
+ require_clock_in: z.ZodBoolean;
3207
+ clock_in_requirement: z.ZodEnum<{
3208
+ none: "none";
3209
+ warning: "warning";
3210
+ required: "required";
3211
+ }>;
3179
3212
  name: z.ZodNullable<z.ZodString>;
3180
3213
  federal_pwa_mode: z.ZodEnum<{
3181
3214
  none: "none";
@@ -12116,6 +12149,9 @@ export declare const zCreateWageDeterminationResponse: z.ZodDiscriminatedUnion<[
12116
12149
  updated_at: z.ZodISODateTime;
12117
12150
  type: z.ZodLiteral<"Pwa::JobWageDeterminations::Regional">;
12118
12151
  }, z.core.$strip>], "type">;
12152
+ export declare const zDeleteWageDeterminationHeaders: z.ZodObject<{
12153
+ 'If-Match': z.ZodString;
12154
+ }, z.core.$strip>;
12119
12155
  export declare const zDeleteWageDeterminationPath: z.ZodObject<{
12120
12156
  job_id: z.ZodString;
12121
12157
  uid: z.ZodString;
@@ -12246,7 +12282,12 @@ export declare const zListJobsResponse: z.ZodObject<{
12246
12282
  purchase_order_number: z.ZodNullable<z.ZodString>;
12247
12283
  time_card_start_day: z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>, z.ZodLiteral<6>]>;
12248
12284
  tz_name: z.ZodString;
12249
- require_clock_in: z.ZodNullable<z.ZodBoolean>;
12285
+ require_clock_in: z.ZodBoolean;
12286
+ clock_in_requirement: z.ZodEnum<{
12287
+ none: "none";
12288
+ warning: "warning";
12289
+ required: "required";
12290
+ }>;
12250
12291
  name: z.ZodNullable<z.ZodString>;
12251
12292
  federal_pwa_mode: z.ZodEnum<{
12252
12293
  none: "none";
@@ -12363,6 +12404,11 @@ export declare const zCreateJobBody: z.ZodObject<{
12363
12404
  tz_name: z.ZodOptional<z.ZodString>;
12364
12405
  time_card_start_day: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>, z.ZodLiteral<6>]>>;
12365
12406
  require_clock_in: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
12407
+ clock_in_requirement: z.ZodOptional<z.ZodEnum<{
12408
+ none: "none";
12409
+ warning: "warning";
12410
+ required: "required";
12411
+ }>>;
12366
12412
  send_geofence_reminders: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
12367
12413
  allow_customer_access: z.ZodOptional<z.ZodBoolean>;
12368
12414
  timekeeping_timecode_ids: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
@@ -12422,7 +12468,12 @@ export declare const zCreateJobResponse: z.ZodObject<{
12422
12468
  purchase_order_number: z.ZodNullable<z.ZodString>;
12423
12469
  time_card_start_day: z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>, z.ZodLiteral<6>]>;
12424
12470
  tz_name: z.ZodString;
12425
- require_clock_in: z.ZodNullable<z.ZodBoolean>;
12471
+ require_clock_in: z.ZodBoolean;
12472
+ clock_in_requirement: z.ZodEnum<{
12473
+ none: "none";
12474
+ warning: "warning";
12475
+ required: "required";
12476
+ }>;
12426
12477
  name: z.ZodNullable<z.ZodString>;
12427
12478
  federal_pwa_mode: z.ZodEnum<{
12428
12479
  none: "none";
@@ -12527,7 +12578,12 @@ export declare const zGetJobResponse: z.ZodObject<{
12527
12578
  purchase_order_number: z.ZodNullable<z.ZodString>;
12528
12579
  time_card_start_day: z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>, z.ZodLiteral<6>]>;
12529
12580
  tz_name: z.ZodString;
12530
- require_clock_in: z.ZodNullable<z.ZodBoolean>;
12581
+ require_clock_in: z.ZodBoolean;
12582
+ clock_in_requirement: z.ZodEnum<{
12583
+ none: "none";
12584
+ warning: "warning";
12585
+ required: "required";
12586
+ }>;
12531
12587
  name: z.ZodNullable<z.ZodString>;
12532
12588
  federal_pwa_mode: z.ZodEnum<{
12533
12589
  none: "none";
@@ -12640,6 +12696,11 @@ export declare const zUpdateJobBody: z.ZodIntersection<z.ZodObject<{
12640
12696
  tz_name: z.ZodOptional<z.ZodString>;
12641
12697
  time_card_start_day: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>, z.ZodLiteral<6>]>>;
12642
12698
  require_clock_in: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
12699
+ clock_in_requirement: z.ZodOptional<z.ZodEnum<{
12700
+ none: "none";
12701
+ warning: "warning";
12702
+ required: "required";
12703
+ }>>;
12643
12704
  send_geofence_reminders: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
12644
12705
  allow_customer_access: z.ZodOptional<z.ZodBoolean>;
12645
12706
  timekeeping_timecode_ids: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
@@ -12708,7 +12769,12 @@ export declare const zUpdateJobResponse: z.ZodObject<{
12708
12769
  purchase_order_number: z.ZodNullable<z.ZodString>;
12709
12770
  time_card_start_day: z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>, z.ZodLiteral<6>]>;
12710
12771
  tz_name: z.ZodString;
12711
- require_clock_in: z.ZodNullable<z.ZodBoolean>;
12772
+ require_clock_in: z.ZodBoolean;
12773
+ clock_in_requirement: z.ZodEnum<{
12774
+ none: "none";
12775
+ warning: "warning";
12776
+ required: "required";
12777
+ }>;
12712
12778
  name: z.ZodNullable<z.ZodString>;
12713
12779
  federal_pwa_mode: z.ZodEnum<{
12714
12780
  none: "none";
@@ -16228,6 +16294,9 @@ export declare const zListTimecodeHistoryResponse: z.ZodObject<{
16228
16294
  }, z.core.$strip>>;
16229
16295
  }, z.core.$strip>>>;
16230
16296
  }, z.core.$strip>;
16297
+ export declare const zCancelTimecodeScheduledChangesHeaders: z.ZodObject<{
16298
+ 'If-Match': z.ZodString;
16299
+ }, z.core.$strip>;
16231
16300
  export declare const zCancelTimecodeScheduledChangesPath: z.ZodObject<{
16232
16301
  timecode_id: z.ZodString;
16233
16302
  }, z.core.$strip>;
@@ -16323,6 +16392,9 @@ export declare const zScheduleTimecodeChangeBody: z.ZodObject<{
16323
16392
  job_with_timecode: "job_with_timecode";
16324
16393
  }>>;
16325
16394
  }, z.core.$strip>;
16395
+ export declare const zScheduleTimecodeChangeHeaders: z.ZodObject<{
16396
+ 'If-Match': z.ZodString;
16397
+ }, z.core.$strip>;
16326
16398
  export declare const zScheduleTimecodeChangePath: z.ZodObject<{
16327
16399
  timecode_id: z.ZodString;
16328
16400
  }, z.core.$strip>;
@@ -16359,6 +16431,9 @@ export declare const zScheduleTimecodeChangeResponse: z.ZodObject<{
16359
16431
  created_at: z.ZodISODateTime;
16360
16432
  updated_at: z.ZodISODateTime;
16361
16433
  }, z.core.$strip>;
16434
+ export declare const zCancelTimecodeScheduledTerminationHeaders: z.ZodObject<{
16435
+ 'If-Match': z.ZodString;
16436
+ }, z.core.$strip>;
16362
16437
  export declare const zCancelTimecodeScheduledTerminationPath: z.ZodObject<{
16363
16438
  timecode_id: z.ZodString;
16364
16439
  }, z.core.$strip>;
@@ -16576,6 +16651,9 @@ export declare const zUpdateTimecodeBody: z.ZodObject<{
16576
16651
  }>>;
16577
16652
  effective_date: z.ZodOptional<z.ZodISODateTime>;
16578
16653
  }, z.core.$strip>;
16654
+ export declare const zUpdateTimecodeHeaders: z.ZodObject<{
16655
+ 'If-Match': z.ZodString;
16656
+ }, z.core.$strip>;
16579
16657
  export declare const zUpdateTimecodePath: z.ZodObject<{
16580
16658
  id: z.ZodString;
16581
16659
  }, z.core.$strip>;
@@ -154,6 +154,14 @@ export const zProblem = z.object({
154
154
  *
155
155
  * The write conflicts with what is already recorded for the resource — another version occupies the same span, or the write contradicts the resource's recorded identity. Re-read the current state and retry on top of it.
156
156
  *
157
+ * ## 412
158
+ *
159
+ * ### precondition_failed
160
+ *
161
+ * **Precondition Failed**
162
+ *
163
+ * The `If-Match` validator names a version of this resource that is no longer current — the version family changed after you read it. Re-read the resource, take its fresh `ETag`, and reapply your change on top of the current state. A malformed or unrecognizable validator refuses the same way, since neither matches.
164
+ *
157
165
  * ## 422
158
166
  *
159
167
  * ### attachment_not_image
@@ -258,6 +266,14 @@ export const zProblem = z.object({
258
266
  *
259
267
  * The apprentice's wage schedule does not belong to the program in the URL. Use a schedule from that program.
260
268
  *
269
+ * ## 428
270
+ *
271
+ * ### precondition_required
272
+ *
273
+ * **Precondition Required**
274
+ *
275
+ * The write must state which version of the resource it was composed against, and no `If-Match` was sent. Read the resource, send its `ETag` back as `If-Match`, or send `If-Match: *` to write unconditionally against whatever exists.
276
+ *
261
277
  * ## 429
262
278
  *
263
279
  * ### too_many_requests
@@ -297,6 +313,7 @@ export const zProblemTypeCatalog = z.enum([
297
313
  'not_found',
298
314
  'recorded_since_termination',
299
315
  'version_overlap',
316
+ 'precondition_failed',
300
317
  'attachment_not_image',
301
318
  'company_not_employer',
302
319
  'confirm_apprenticeship_conflict',
@@ -314,6 +331,7 @@ export const zProblemTypeCatalog = z.enum([
314
331
  'user_not_company_member',
315
332
  'validation_failed',
316
333
  'wage_schedule_outside_program',
334
+ 'precondition_required',
317
335
  'too_many_requests',
318
336
  'internal_error'
319
337
  ]);
@@ -1695,6 +1713,11 @@ export const zJobParameters = z.object({
1695
1713
  tz_name: z.string().optional(),
1696
1714
  time_card_start_day: zTimeCardStartDay.optional(),
1697
1715
  require_clock_in: z.boolean().nullish(),
1716
+ clock_in_requirement: z.enum([
1717
+ 'none',
1718
+ 'warning',
1719
+ 'required'
1720
+ ]).optional(),
1698
1721
  send_geofence_reminders: z.boolean().nullish(),
1699
1722
  allow_customer_access: z.boolean().optional(),
1700
1723
  timekeeping_timecode_ids: z.array(z.string()).nullish(),
@@ -2896,7 +2919,12 @@ export const zJobResponseObject = z.object({
2896
2919
  purchase_order_number: z.string().nullable(),
2897
2920
  time_card_start_day: zTimeCardStartDay,
2898
2921
  tz_name: z.string(),
2899
- require_clock_in: z.boolean().nullable(),
2922
+ require_clock_in: z.boolean(),
2923
+ clock_in_requirement: z.enum([
2924
+ 'none',
2925
+ 'warning',
2926
+ 'required'
2927
+ ]),
2900
2928
  name: z.string().nullable(),
2901
2929
  federal_pwa_mode: z.enum([
2902
2930
  'all',
@@ -6028,6 +6056,9 @@ export const zCreateWageDeterminationPath = z.object({
6028
6056
  * Created
6029
6057
  */
6030
6058
  export const zCreateWageDeterminationResponse = zJobWageDeterminationResponseObject;
6059
+ export const zDeleteWageDeterminationHeaders = z.object({
6060
+ 'If-Match': z.string()
6061
+ });
6031
6062
  export const zDeleteWageDeterminationPath = z.object({
6032
6063
  job_id: z.string(),
6033
6064
  uid: z.string()
@@ -6918,6 +6949,9 @@ export const zListTimecodeHistoryResponse = z.object({
6918
6949
  links: zLinks.optional(),
6919
6950
  data: z.array(zTimecodeHistoryVersionObject).optional()
6920
6951
  });
6952
+ export const zCancelTimecodeScheduledChangesHeaders = z.object({
6953
+ 'If-Match': z.string()
6954
+ });
6921
6955
  export const zCancelTimecodeScheduledChangesPath = z.object({
6922
6956
  timecode_id: z.string()
6923
6957
  });
@@ -6933,6 +6967,9 @@ export const zListTimecodeScheduledChangesPath = z.object({
6933
6967
  */
6934
6968
  export const zListTimecodeScheduledChangesResponse = z.array(zTimecodeResponseObject);
6935
6969
  export const zScheduleTimecodeChangeBody = zTimecodeScheduledChangeParameters;
6970
+ export const zScheduleTimecodeChangeHeaders = z.object({
6971
+ 'If-Match': z.string()
6972
+ });
6936
6973
  export const zScheduleTimecodeChangePath = z.object({
6937
6974
  timecode_id: z.string()
6938
6975
  });
@@ -6940,6 +6977,9 @@ export const zScheduleTimecodeChangePath = z.object({
6940
6977
  * Created
6941
6978
  */
6942
6979
  export const zScheduleTimecodeChangeResponse = zTimecodeResponseObject;
6980
+ export const zCancelTimecodeScheduledTerminationHeaders = z.object({
6981
+ 'If-Match': z.string()
6982
+ });
6943
6983
  export const zCancelTimecodeScheduledTerminationPath = z.object({
6944
6984
  timecode_id: z.string()
6945
6985
  });
@@ -6988,6 +7028,9 @@ export const zGetTimecodeQuery = z.object({
6988
7028
  */
6989
7029
  export const zGetTimecodeResponse = zTimecodeResponseObject;
6990
7030
  export const zUpdateTimecodeBody = zTimecodeParameters;
7031
+ export const zUpdateTimecodeHeaders = z.object({
7032
+ 'If-Match': z.string()
7033
+ });
6991
7034
  export const zUpdateTimecodePath = z.object({
6992
7035
  id: z.string()
6993
7036
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dsptch-work/api-client",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Generated TypeScript client for the DSPTCH REST API.",
5
5
  "keywords": [
6
6
  "dsptch",