@sunsteel/contracts 0.64.0 → 0.65.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/dist/index.d.ts CHANGED
@@ -24,6 +24,217 @@ interface PaginatedResponse<T> {
24
24
  nextCursor?: string;
25
25
  }
26
26
 
27
+ /** A local calendar date, YYYY-MM-DD. */
28
+ type CalendarDate = string;
29
+ /**
30
+ * The schedule-instance model: per-date overrides of a routine's plan. MOVE
31
+ * puts one weekly occurrence on another date (SCHED-04); SKIP marks it
32
+ * skipped on purpose (SCHED-05). Overrides are kept by calendar date, not by
33
+ * routine day, because routine edits replace the days.
34
+ */
35
+ declare const SCHEDULE_OVERRIDE_KINDS: readonly ["MOVE", "SKIP"];
36
+ type ScheduleOverrideKind = (typeof SCHEDULE_OVERRIDE_KINDS)[number];
37
+ /** A move goes at most this many days before or after the planned date. */
38
+ declare const SCHEDULE_MOVE_MAX_DAYS = 6;
39
+ /**
40
+ * SCHED-05: a skip can explain a planned day up to this many days back;
41
+ * ahead, any planned day can be skipped.
42
+ */
43
+ declare const SCHEDULE_SKIP_PAST_DAYS = 6;
44
+ /** Overrides are read for at most this many days at once. */
45
+ declare const SCHEDULE_OVERRIDES_MAX_RANGE_DAYS = 62;
46
+ interface ScheduleOverride {
47
+ id: string;
48
+ routineId: string;
49
+ /** The planned date this override changes. */
50
+ date: CalendarDate;
51
+ kind: ScheduleOverrideKind;
52
+ /** MOVE: the date the occurrence now falls on; null for SKIP. */
53
+ toDate: CalendarDate | null;
54
+ createdAt: IsoDateString;
55
+ }
56
+ /**
57
+ * `GET /schedule/overrides?from&to`: the owner's overrides whose date or
58
+ * target falls in the range, both ends included.
59
+ */
60
+ interface ScheduleOverridesQuery {
61
+ from: CalendarDate;
62
+ to: CalendarDate;
63
+ }
64
+ interface ScheduleOverridesResponse {
65
+ overrides: ScheduleOverride[];
66
+ }
67
+ /** `PUT /schedule/overrides/move`: moves one occurrence, or moves it again. */
68
+ interface MoveOccurrenceRequest {
69
+ routineId: string;
70
+ date: CalendarDate;
71
+ toDate: CalendarDate;
72
+ }
73
+ /**
74
+ * `PUT /schedule/overrides/skip`: marks one occurrence skipped. A moved
75
+ * occurrence is skipped as a whole; undoing is `DELETE` like a move.
76
+ */
77
+ interface SkipOccurrenceRequest {
78
+ routineId: string;
79
+ date: CalendarDate;
80
+ }
81
+
82
+ /** One routine may have this many current, non-overlapping planned blocks. */
83
+ declare const ROUTINE_TRAINING_BLOCKS_MAX = 24;
84
+ /** A started block keeps at most this many immutable revisions. */
85
+ declare const ROUTINE_TRAINING_BLOCK_REVISIONS_MAX = 20;
86
+ declare const ROUTINE_TRAINING_BLOCK_NAME_MAX = 60;
87
+ declare const ROUTINE_TRAINING_BLOCK_STATES: readonly ["FUTURE", "ACTIVE", "COMPLETE"];
88
+ type RoutineTrainingBlockState = (typeof ROUTINE_TRAINING_BLOCK_STATES)[number];
89
+ declare const ROUTINE_TRAINING_BLOCK_SOURCE_KINDS: readonly ["CURRENT_ROUTINE", "SAVED_VERSION"];
90
+ type RoutineTrainingBlockSourceKind = (typeof ROUTINE_TRAINING_BLOCK_SOURCE_KINDS)[number];
91
+ /**
92
+ * The origin is snapshotted so a later routine edit or ROUT-08 version
93
+ * deletion cannot change what this block says it was authored from.
94
+ */
95
+ interface RoutineTrainingBlockSource {
96
+ kind: RoutineTrainingBlockSourceKind;
97
+ versionId: string | null;
98
+ versionNumber: number | null;
99
+ versionName: string | null;
100
+ }
101
+ /** One immutable revision of a named, dated setup. */
102
+ interface RoutineTrainingBlockRevision {
103
+ id: string;
104
+ routineId: string;
105
+ /** Stable across every replacement of the same logical block. */
106
+ seriesId: string;
107
+ /** 1, 2, 3… inside the series. */
108
+ revision: number;
109
+ name: string;
110
+ startDate: CalendarDate;
111
+ endDate: CalendarDate;
112
+ setup: RoutineVersionSetup;
113
+ source: RoutineTrainingBlockSource;
114
+ createdAt: IsoDateString;
115
+ /** Null only on the current revision. */
116
+ supersededAt: IsoDateString | null;
117
+ }
118
+ /** A current block in the routine timeline. State is relative to `today`. */
119
+ interface RoutineTrainingBlock extends Omit<RoutineTrainingBlockRevision, 'supersededAt'> {
120
+ state: RoutineTrainingBlockState;
121
+ revisionCount: number;
122
+ }
123
+ /** `GET /routines/:id/training-blocks`, ordered by start date. */
124
+ interface RoutineTrainingBlocksResponse {
125
+ blocks: RoutineTrainingBlock[];
126
+ max: number;
127
+ revisionMax: number;
128
+ /** The owner's local date used to derive every state in this response. */
129
+ today: CalendarDate;
130
+ }
131
+ /** `GET /routines/:id/training-blocks/:blockId/revisions`, newest first. */
132
+ interface RoutineTrainingBlockRevisionsResponse {
133
+ seriesId: string;
134
+ revisions: RoutineTrainingBlockRevision[];
135
+ max: number;
136
+ }
137
+ /**
138
+ * `POST /routines/:id/training-blocks` and
139
+ * `PUT /routines/:id/training-blocks/:blockId`.
140
+ * Null or omission captures the routine as it exists at request time.
141
+ */
142
+ interface UpsertRoutineTrainingBlockRequest {
143
+ name: string;
144
+ startDate: CalendarDate;
145
+ endDate: CalendarDate;
146
+ sourceVersionId?: string | null;
147
+ }
148
+ /**
149
+ * A current block as a plan the schedule, the dashboard and a session start
150
+ * use. Its days are the block's own working copy, with ids, kept apart from
151
+ * the routine's baseline `days`: a session of a block day logs against them
152
+ * and progression advances them, never the baseline, which resumes unchanged
153
+ * once the block ends. A new revision starts again from its authored setup.
154
+ */
155
+ interface RoutineTrainingBlockPlan {
156
+ /** The current revision's id. */
157
+ id: string;
158
+ seriesId: string;
159
+ revision: number;
160
+ name: string;
161
+ startDate: CalendarDate;
162
+ endDate: CalendarDate;
163
+ scheduleMode: RoutineScheduleMode;
164
+ restDays: number[];
165
+ rotationWeekdays: number[];
166
+ /**
167
+ * ROTATION only: the day after the last completed session of this block
168
+ * (any revision), or its first day before any. Never a baseline day.
169
+ */
170
+ nextRotationDayId: string | null;
171
+ days: RoutineDay[];
172
+ }
173
+ /** ROUT-15: the block a session trained, copied onto the session itself. */
174
+ interface SessionTrainingBlock {
175
+ /** The revision trained. */
176
+ id: string;
177
+ seriesId: string;
178
+ revision: number;
179
+ name: string;
180
+ }
181
+ type DatedBlock = {
182
+ startDate: CalendarDate;
183
+ endDate: CalendarDate;
184
+ };
185
+ /** Both ends are inclusive; dates compare as `YYYY-MM-DD` strings. */
186
+ declare function trainingBlockCovers(block: DatedBlock, date: CalendarDate): boolean;
187
+ /**
188
+ * The one active block for a date, or null. Blocks of one routine never
189
+ * overlap (ROUT-09), so the first cover is the only one.
190
+ */
191
+ declare function resolveActiveTrainingBlock<T extends DatedBlock>(blocks: readonly T[] | null | undefined, date: CalendarDate): T | null;
192
+ /** What a routine plans for one date: its active block, else its baseline. */
193
+ interface ResolvedRoutinePlan<D> {
194
+ /** The block in force, also while a deload lightens it (ROUT-16). */
195
+ block: SessionTrainingBlock & DatedBlock | null;
196
+ /** ROUT-16: the deload in force that date, or null. */
197
+ override: SessionTemporaryOverride & DatedBlock | null;
198
+ scheduleMode: RoutineScheduleMode;
199
+ restDays: number[];
200
+ rotationWeekdays: number[];
201
+ nextRotationDayId: string | null;
202
+ days: D[];
203
+ }
204
+ interface RoutinePlanSource<D> {
205
+ scheduleMode: RoutineScheduleMode;
206
+ restDays: number[];
207
+ rotationWeekdays?: number[] | null;
208
+ nextRotationDayId?: string | null;
209
+ days: D[];
210
+ trainingBlocks?: ReadonlyArray<DatedBlock & SessionTrainingBlock & {
211
+ scheduleMode: RoutineScheduleMode;
212
+ restDays: number[];
213
+ rotationWeekdays: number[];
214
+ nextRotationDayId: string | null;
215
+ days: D[];
216
+ }> | null;
217
+ /** ROUT-16: deloads, which take precedence over the plan they lighten. */
218
+ temporaryOverrides?: ReadonlyArray<DatedBlock & {
219
+ id: string;
220
+ kind: TemporaryOverrideKind;
221
+ scheduleMode: RoutineScheduleMode;
222
+ restDays: number[];
223
+ rotationWeekdays: number[];
224
+ nextRotationDayId: string | null;
225
+ days: D[];
226
+ }> | null;
227
+ }
228
+ /**
229
+ * ROUT-15's single resolver. Every reader that decides what a routine trains
230
+ * on a date - the schedule, the dashboard, a session start, reminders and the
231
+ * partner schedule, on the frontend and the backend alike - asks this, so
232
+ * weekly and rotation routines, and the baseline and a block, never disagree.
233
+ * ROUT-16: a deload covering the date wins over the plan it lightened; the
234
+ * block it lightened is still reported, since a deload never crosses a plan.
235
+ */
236
+ declare function resolveRoutinePlan<D>(routine: RoutinePlanSource<D>, date: CalendarDate): ResolvedRoutinePlan<D>;
237
+
27
238
  /**
28
239
  * Per-routine visibility. The account-level `PROF-06` routines rule is the
29
240
  * upper bound: a routine marked `PUBLIC` inside an account whose routines are
@@ -257,6 +468,11 @@ interface Routine {
257
468
  * `days` separately.
258
469
  */
259
470
  trainingBlocks?: RoutineTrainingBlockPlan[];
471
+ /**
472
+ * ROUT-16: current and upcoming deloads as plans, each with its own
473
+ * working-copy days. Owner-only, and resolved with `resolveRoutinePlan`.
474
+ */
475
+ temporaryOverrides?: RoutineTemporaryOverridePlan[];
260
476
  createdAt: IsoDateString;
261
477
  updatedAt: IsoDateString;
262
478
  }
@@ -348,201 +564,99 @@ interface RestoreRoutineVersionResponse {
348
564
  savedVersion: RoutineVersion;
349
565
  }
350
566
 
351
- /** A local calendar date, YYYY-MM-DD. */
352
- type CalendarDate = string;
353
- /**
354
- * The schedule-instance model: per-date overrides of a routine's plan. MOVE
355
- * puts one weekly occurrence on another date (SCHED-04); SKIP marks it
356
- * skipped on purpose (SCHED-05). Overrides are kept by calendar date, not by
357
- * routine day, because routine edits replace the days.
358
- */
359
- declare const SCHEDULE_OVERRIDE_KINDS: readonly ["MOVE", "SKIP"];
360
- type ScheduleOverrideKind = (typeof SCHEDULE_OVERRIDE_KINDS)[number];
361
- /** A move goes at most this many days before or after the planned date. */
362
- declare const SCHEDULE_MOVE_MAX_DAYS = 6;
363
- /**
364
- * SCHED-05: a skip can explain a planned day up to this many days back;
365
- * ahead, any planned day can be skipped.
366
- */
367
- declare const SCHEDULE_SKIP_PAST_DAYS = 6;
368
- /** Overrides are read for at most this many days at once. */
369
- declare const SCHEDULE_OVERRIDES_MAX_RANGE_DAYS = 62;
370
- interface ScheduleOverride {
371
- id: string;
372
- routineId: string;
373
- /** The planned date this override changes. */
374
- date: CalendarDate;
375
- kind: ScheduleOverrideKind;
376
- /** MOVE: the date the occurrence now falls on; null for SKIP. */
377
- toDate: CalendarDate | null;
378
- createdAt: IsoDateString;
379
- }
380
- /**
381
- * `GET /schedule/overrides?from&to`: the owner's overrides whose date or
382
- * target falls in the range, both ends included.
383
- */
384
- interface ScheduleOverridesQuery {
385
- from: CalendarDate;
386
- to: CalendarDate;
387
- }
388
- interface ScheduleOverridesResponse {
389
- overrides: ScheduleOverride[];
390
- }
391
- /** `PUT /schedule/overrides/move`: moves one occurrence, or moves it again. */
392
- interface MoveOccurrenceRequest {
393
- routineId: string;
394
- date: CalendarDate;
395
- toDate: CalendarDate;
396
- }
397
- /**
398
- * `PUT /schedule/overrides/skip`: marks one occurrence skipped. A moved
399
- * occurrence is skipped as a whole; undoing is `DELETE` like a move.
400
- */
401
- interface SkipOccurrenceRequest {
402
- routineId: string;
403
- date: CalendarDate;
404
- }
405
-
406
- /** One routine may have this many current, non-overlapping planned blocks. */
407
- declare const ROUTINE_TRAINING_BLOCKS_MAX = 24;
408
- /** A started block keeps at most this many immutable revisions. */
409
- declare const ROUTINE_TRAINING_BLOCK_REVISIONS_MAX = 20;
410
- declare const ROUTINE_TRAINING_BLOCK_NAME_MAX = 60;
411
- declare const ROUTINE_TRAINING_BLOCK_STATES: readonly ["FUTURE", "ACTIVE", "COMPLETE"];
412
- type RoutineTrainingBlockState = (typeof ROUTINE_TRAINING_BLOCK_STATES)[number];
413
- declare const ROUTINE_TRAINING_BLOCK_SOURCE_KINDS: readonly ["CURRENT_ROUTINE", "SAVED_VERSION"];
414
- type RoutineTrainingBlockSourceKind = (typeof ROUTINE_TRAINING_BLOCK_SOURCE_KINDS)[number];
415
- /**
416
- * The origin is snapshotted so a later routine edit or ROUT-08 version
417
- * deletion cannot change what this block says it was authored from.
418
- */
419
- interface RoutineTrainingBlockSource {
420
- kind: RoutineTrainingBlockSourceKind;
421
- versionId: string | null;
422
- versionNumber: number | null;
423
- versionName: string | null;
424
- }
425
- /** One immutable revision of a named, dated setup. */
426
- interface RoutineTrainingBlockRevision {
567
+ /** The longest deload, inclusive of both ends. */
568
+ declare const DELOAD_MAX_DAYS = 14;
569
+ /** The length a new deload is offered with. */
570
+ declare const DELOAD_DEFAULT_DAYS = 7;
571
+ /** How much lighter each set's load is, in percent. */
572
+ declare const DELOAD_LOAD_REDUCTIONS: readonly [0, 10, 20, 30, 40];
573
+ type DeloadLoadReduction = (typeof DELOAD_LOAD_REDUCTIONS)[number];
574
+ declare const DELOAD_DEFAULT_LOAD_REDUCTION: DeloadLoadReduction;
575
+ /** `HALF` keeps the first half of each exercise's sets, rounded up. */
576
+ declare const DELOAD_SET_MODES: readonly ["ALL", "HALF"];
577
+ type DeloadSetMode = (typeof DELOAD_SET_MODES)[number];
578
+ declare const DELOAD_DEFAULT_SET_MODE: DeloadSetMode;
579
+ declare const TEMPORARY_OVERRIDE_KINDS: readonly ["DELOAD"];
580
+ type TemporaryOverrideKind = (typeof TEMPORARY_OVERRIDE_KINDS)[number];
581
+ declare const TEMPORARY_OVERRIDE_SOURCE_KINDS: readonly ["BASELINE", "TRAINING_BLOCK"];
582
+ type TemporaryOverrideSourceKind = (typeof TEMPORARY_OVERRIDE_SOURCE_KINDS)[number];
583
+ interface DeloadOptions {
584
+ loadReductionPercent: DeloadLoadReduction;
585
+ setMode: DeloadSetMode;
586
+ }
587
+ /** Why a deload cannot be made from a prescription with these options. */
588
+ declare const DELOAD_NOT_LIGHTER = "Those options leave every set as it is: choose a lighter load or fewer sets";
589
+ /**
590
+ * ROUT-16's one rule for what a deload is, shared so the preview the owner
591
+ * reviews and the prescription the server stores cannot disagree: every load
592
+ * drops by the chosen percentage, rounded to the exercise's own increment
593
+ * (a load whose grid cannot express the cut keeps its weight), and `HALF` keeps the first half of each
594
+ * exercise's sets (rounded up, so one set stays one). Reps, RIR, rest and everything else are
595
+ * untouched. Returns null when nothing would be lighter -- the override is an
596
+ * explicitly lighter prescription, never an unchanged copy.
597
+ */
598
+ declare function applyDeload(setup: RoutineVersionSetup, options: DeloadOptions): RoutineVersionSetup | null;
599
+ /** Days from `start` to `end`, both included. */
600
+ declare function deloadLengthDays(startDate: CalendarDate, endDate: CalendarDate): number;
601
+ /** Where a deload's prescription was copied from. */
602
+ interface TemporaryOverrideSource {
603
+ kind: TemporaryOverrideSourceKind;
604
+ trainingBlockId: string | null;
605
+ trainingBlockName: string | null;
606
+ }
607
+ /** One deload of a routine. State is relative to `today`. */
608
+ interface RoutineTemporaryOverride {
427
609
  id: string;
428
610
  routineId: string;
429
- /** Stable across every replacement of the same logical block. */
430
- seriesId: string;
431
- /** 1, 2, 3… inside the series. */
432
- revision: number;
433
- name: string;
611
+ kind: TemporaryOverrideKind;
434
612
  startDate: CalendarDate;
613
+ /** Moves to the day before it was ended when it is ended early. */
435
614
  endDate: CalendarDate;
615
+ loadReductionPercent: DeloadLoadReduction;
616
+ setMode: DeloadSetMode;
617
+ source: TemporaryOverrideSource;
618
+ /** The prescription in force when the deload was created. */
619
+ originalSetup: RoutineVersionSetup;
620
+ /** The lighter prescription the deload trains. */
436
621
  setup: RoutineVersionSetup;
437
- source: RoutineTrainingBlockSource;
622
+ endedEarlyAt: IsoDateString | null;
438
623
  createdAt: IsoDateString;
439
- /** Null only on the current revision. */
440
- supersededAt: IsoDateString | null;
624
+ state: 'FUTURE' | 'ACTIVE' | 'COMPLETE';
441
625
  }
442
- /** A current block in the routine timeline. State is relative to `today`. */
443
- interface RoutineTrainingBlock extends Omit<RoutineTrainingBlockRevision, 'supersededAt'> {
444
- state: RoutineTrainingBlockState;
445
- revisionCount: number;
446
- }
447
- /** `GET /routines/:id/training-blocks`, ordered by start date. */
448
- interface RoutineTrainingBlocksResponse {
449
- blocks: RoutineTrainingBlock[];
450
- max: number;
451
- revisionMax: number;
452
- /** The owner's local date used to derive every state in this response. */
626
+ /** `GET /routines/:id/deloads`, newest start first. */
627
+ interface RoutineTemporaryOverridesResponse {
628
+ overrides: RoutineTemporaryOverride[];
629
+ maxDays: number;
630
+ /** The owner's local date every state is relative to. */
453
631
  today: CalendarDate;
454
632
  }
455
- /** `GET /routines/:id/training-blocks/:blockId/revisions`, newest first. */
456
- interface RoutineTrainingBlockRevisionsResponse {
457
- seriesId: string;
458
- revisions: RoutineTrainingBlockRevision[];
459
- max: number;
460
- }
461
- /**
462
- * `POST /routines/:id/training-blocks` and
463
- * `PUT /routines/:id/training-blocks/:blockId`.
464
- * Null or omission captures the routine as it exists at request time.
465
- */
466
- interface UpsertRoutineTrainingBlockRequest {
467
- name: string;
633
+ /** `POST /routines/:id/deloads` */
634
+ interface CreateDeloadRequest extends DeloadOptions {
468
635
  startDate: CalendarDate;
469
636
  endDate: CalendarDate;
470
- sourceVersionId?: string | null;
471
637
  }
472
638
  /**
473
- * A current block as a plan the schedule, the dashboard and a session start
474
- * use. Its days are the block's own working copy, with ids, kept apart from
475
- * the routine's baseline `days`: a session of a block day logs against them
476
- * and progression advances them, never the baseline, which resumes unchanged
477
- * once the block ends. A new revision starts again from its authored setup.
639
+ * A deload as a plan the resolver can place: its working-copy days (real ids,
640
+ * apart from the baseline and from any block) and the schedule of the plan it
641
+ * lightened. Owner-only, on `Routine.temporaryOverrides`.
478
642
  */
479
- interface RoutineTrainingBlockPlan {
480
- /** The current revision's id. */
643
+ interface RoutineTemporaryOverridePlan {
481
644
  id: string;
482
- seriesId: string;
483
- revision: number;
484
- name: string;
645
+ kind: TemporaryOverrideKind;
485
646
  startDate: CalendarDate;
486
647
  endDate: CalendarDate;
487
648
  scheduleMode: RoutineScheduleMode;
488
649
  restDays: number[];
489
650
  rotationWeekdays: number[];
490
- /**
491
- * ROTATION only: the day after the last completed session of this block
492
- * (any revision), or its first day before any. Never a baseline day.
493
- */
651
+ /** ROTATION only: the underlying plan's next day, in this copy. */
494
652
  nextRotationDayId: string | null;
495
653
  days: RoutineDay[];
496
654
  }
497
- /** ROUT-15: the block a session trained, copied onto the session itself. */
498
- interface SessionTrainingBlock {
499
- /** The revision trained. */
655
+ /** ROUT-16: the temporary override a session trained, copied onto it. */
656
+ interface SessionTemporaryOverride {
500
657
  id: string;
501
- seriesId: string;
502
- revision: number;
503
- name: string;
504
- }
505
- type DatedBlock = {
506
- startDate: CalendarDate;
507
- endDate: CalendarDate;
508
- };
509
- /** Both ends are inclusive; dates compare as `YYYY-MM-DD` strings. */
510
- declare function trainingBlockCovers(block: DatedBlock, date: CalendarDate): boolean;
511
- /**
512
- * The one active block for a date, or null. Blocks of one routine never
513
- * overlap (ROUT-09), so the first cover is the only one.
514
- */
515
- declare function resolveActiveTrainingBlock<T extends DatedBlock>(blocks: readonly T[] | null | undefined, date: CalendarDate): T | null;
516
- /** What a routine plans for one date: its active block, else its baseline. */
517
- interface ResolvedRoutinePlan<D> {
518
- block: SessionTrainingBlock & DatedBlock | null;
519
- scheduleMode: RoutineScheduleMode;
520
- restDays: number[];
521
- rotationWeekdays: number[];
522
- nextRotationDayId: string | null;
523
- days: D[];
658
+ kind: TemporaryOverrideKind;
524
659
  }
525
- interface RoutinePlanSource<D> {
526
- scheduleMode: RoutineScheduleMode;
527
- restDays: number[];
528
- rotationWeekdays?: number[] | null;
529
- nextRotationDayId?: string | null;
530
- days: D[];
531
- trainingBlocks?: ReadonlyArray<DatedBlock & SessionTrainingBlock & {
532
- scheduleMode: RoutineScheduleMode;
533
- restDays: number[];
534
- rotationWeekdays: number[];
535
- nextRotationDayId: string | null;
536
- days: D[];
537
- }> | null;
538
- }
539
- /**
540
- * ROUT-15's single resolver. Every reader that decides what a routine trains
541
- * on a date - the schedule, the dashboard, a session start, reminders and the
542
- * partner schedule, on the frontend and the backend alike - asks this, so
543
- * weekly and rotation routines, and the baseline and a block, never disagree.
544
- */
545
- declare function resolveRoutinePlan<D>(routine: RoutinePlanSource<D>, date: CalendarDate): ResolvedRoutinePlan<D>;
546
660
 
547
661
  interface SetLog {
548
662
  id: string;
@@ -589,6 +703,11 @@ interface WorkoutSession {
589
703
  * the block's end never rewrites what the session was.
590
704
  */
591
705
  trainingBlock?: SessionTrainingBlock | null;
706
+ /**
707
+ * ROUT-16: the deload this session trained, or null. A deload session
708
+ * never advances progression.
709
+ */
710
+ temporaryOverride?: SessionTemporaryOverride | null;
592
711
  routine?: {
593
712
  id: string;
594
713
  name: string;
@@ -876,6 +995,8 @@ interface WorkoutSessionSummary {
876
995
  dayName?: string | null;
877
996
  /** ROUT-15: the block trained, when it was one. */
878
997
  trainingBlockName?: string | null;
998
+ /** ROUT-16: set when the session trained a deload. */
999
+ temporaryOverrideKind?: 'DELOAD' | null;
879
1000
  };
880
1001
  }
881
1002
  interface ListSessionsParams {
@@ -1179,6 +1300,8 @@ interface WorkoutSessionSnapshotV1 {
1179
1300
  routineDay: NonNullable<WorkoutSession['routineDay']>;
1180
1301
  /** ROUT-15; absent on snapshots captured before blocks executed. */
1181
1302
  trainingBlock?: WorkoutSession['trainingBlock'];
1303
+ /** ROUT-16; absent on snapshots captured before deloads existed. */
1304
+ temporaryOverride?: WorkoutSession['temporaryOverride'];
1182
1305
  }
1183
1306
  interface SetAccountTimeZoneRequest {
1184
1307
  timeZone: string;
@@ -3002,4 +3125,4 @@ interface AccountExportV1 {
3002
3125
  /** The file name a download of the export is saved under. */
3003
3126
  declare function accountExportFileName(username: string, exportedAt: string): string;
3004
3127
 
3005
- export { ACCOUNT_EXPORT_FORMAT, ACCOUNT_EXPORT_VERSION, ACHIEVEMENT_CATEGORIES, ACHIEVEMENT_DEFINITIONS, ACTIVITY_CAPS, ACTIVITY_COMMENTS_PAGE_SIZE, ACTIVITY_COMMENTS_PER_DAY_MAX, ACTIVITY_COMMENT_MAX_LENGTH, ACTIVITY_DEFAULT_AUDIENCE, ACTIVITY_ENTRY_ID_MAX_LENGTH, ACTIVITY_FEED_FOLLOWED_MAX, ACTIVITY_PAGE_DEFAULT_LIMIT, ACTIVITY_PAGE_MAX_LIMIT, ACTIVITY_PREVIEW_AUDIENCES, ACTIVITY_REACTIONS, ACTIVITY_TYPES, ACTIVITY_TYPE_SECTIONS, type AccountExportGoal, type AccountExportMember, type AccountExportPersonalRecord, type AccountExportRoutine, type AccountExportScheduleOverride, type AccountExportTrainingEvent, type AccountExportTrainingLocation, type AccountExportV1, type AchievementActivity, type AchievementCategory, type AchievementCategoryProgress, type AchievementDefinition, type AchievementNotification, type AchievementUnlockedEventPayload, type AchievementsResponse, type ActivityAudience, type ActivityCap, type ActivityComment, type ActivityCommentNotification, type ActivityCommentSummary, type ActivityCommentsQuery, type ActivityCommentsResponse, type ActivityEntry, type ActivityEntrySharing, type ActivityFeedResponse, type ActivityLink, type ActivityPage, type ActivityPageQuery, type ActivityPreviewAudience, type ActivityPreviewQuery, type ActivityReaction, type ActivityReactionSummary, type ActivitySection, type ActivitySharingSettings, type ActivityType, type AppNotification, BLOCKED_MEMBERS_MAX, type BlockedMember, type BlockedMembersResponse, type Brand, CLONE_ROUTINE_REFUSALS, COMEBACK_MIN_INACTIVE_DAYS, COMEBACK_RECOGNITION_LIMIT, COMEBACK_REQUIRED_ACTIVE_DAYS, COMEBACK_SESSION_LOOKBACK, COMEBACK_WINDOW_DAYS, type CalendarDate, type CloneRoutineRefusal, type CloneRoutineRequest, type ComebackActivity, type ComebackRecognition, type ComebackRecognitionSummary, type CorrectSessionRequest, type CorrectSessionResponse, type CorrectSessionSetRequest, type CreateActivityCommentRequest, type CreateActivityCommentResponse, type CreateReportRequest, type CreateReportResponse, type CreateRoutineDayInput, type CreateRoutineExerciseInput, type CreateRoutineRequest, type CreateRoutineVersionRequest, type CreateSessionShareRequest, type DeleteAccountRequest, type DeleteAccountResponse, type DeleteActivityCommentResponse, type DeletePushSubscriptionRequest, type DiscoverableRoutine, EXERCISE_EQUIPMENT, EXERCISE_MECHANICS, type EarnedAchievement, type EarnedPersonalRecord, type Exercise, type ExerciseEquipment, type ExerciseId, type ExerciseMechanic, type ExercisePerformanceHistoryQuery, type ExercisePerformanceHistoryResponse, type ExercisePerformancePrescription, type ExercisePerformancePrescriptionSet, type ExercisePerformanceSession, type ExercisePerformanceSet, type ExercisePerformanceSummary, type ExercisePlateau, type ExerciseStrengthSummary, type ExerciseStrengthTrendPoint, type ExerciseStrengthTrendQuery, type ExerciseStrengthTrendResponse, FEATURED_PROFILE_ITEMS_MAX, FEATURED_PROFILE_ITEM_KINDS, FEATURED_PROFILE_REFERENCE_MAX_LENGTH, FOLLOW_SUGGESTIONS_DEFAULT_LIMIT, FOLLOW_SUGGESTIONS_MAX_LIMIT, FOLLOW_SUGGESTION_REASONS, type FeaturedProfileAchievementItem, type FeaturedProfileItem, type FeaturedProfileItemKind, type FeaturedProfileRankItem, type FeaturedProfileRecordItem, type FeaturedProfileRoutineItem, type FeaturedProfileSelection, type FeaturedProfileSelectionInput, type FeaturedProfileSelectionsResponse, type FinishStatus, type FinishWorkoutRequest, type FinishWorkoutResponse, type FollowSuggestion, type FollowSuggestionReason, type FollowSuggestionsResponse, type IsoDateString, type ListSessionsParams, MEASURABLE_GOALS_MAX, MEASURABLE_GOAL_DIRECTIONS, MEASURABLE_GOAL_TYPES, MINUTES_IN_DAY, MODERATION_ACTION_KINDS, MODERATION_HISTORY_PAGE_SIZE, MODERATION_NOTE_MAX_LENGTH, MODERATION_QUEUE_PAGE_SIZE, MOVEMENT_PATTERNS, MUSCLE_GROUPS, type MarkNotificationsReadRequest, type MarkNotificationsReadResponse, type MeasurableGoal, type MeasurableGoalDirection, type MeasurableGoalExercise, type MeasurableGoalInput, type MeasurableGoalType, type MemberActivityResponse, type MemberModerationState, type MemberRoutinesResponse, type ModerationActionKind, type ModerationActionRecord, type ModerationHistoryQuery, type ModerationHistoryResponse, type ModerationQueueQuery, type ModerationQueueResponse, type ModerationReport, type ModeratorState, type MoveOccurrenceRequest, type MovementPattern, type MuscleGroup, type MuscleGroupHeatmapQuery, type MuscleGroupHeatmapResponse, type MuscleGroupHeatmapValue, type MuscleGroupHeatmapWeek, type MuscleVolumeTrendSeries, NOTIFICATIONS_LIST_LIMIT, NOTIFICATIONS_LOOKBACK_DAYS, NOTIFICATIONS_RETENTION_DAYS, NOTIFICATION_CATEGORIES, NOTIFICATION_KINDS, type NewFollowerNotification, type NotificationCategory, type NotificationKind, type NotificationPreferences, type NotificationPreferencesResponse, type NotificationsResponse, type OwnActivityEntry, type OwnActivityResponse, PLATEAU_MIN_DAYS_SINCE_BEST, PLATEAU_MIN_SESSIONS, PLATEAU_MIN_SESSIONS_MAX, PLATEAU_MIN_SESSIONS_MIN, PLATEAU_RECENT_DAYS, PLATEAU_WINDOW_DAYS, PREFERRED_TRAINING_STYLE_VALUES, PROFILE_BIO_MAX_LENGTH, PROFILE_FAVORITE_EXERCISES_MAX, PROFILE_LOCATION_MAX_LENGTH, PROFILE_TRAINING_DISCIPLINES_MAX, PROFILE_TRAINING_GOALS_MAX, PROFILE_VISIBILITY_VALUES, PROGRESSION_SCHEMES, PROGRESS_TIMELINE_EVENT_TYPES, PUSH_PAYLOAD_KINDS, PUSH_SUBSCRIPTIONS_MAX, type PaginatedResponse, type PersonalGoalProgress, type PersonalGoalsResponse, type PersonalRecordActivity, type PersonalRecordEntry, type PersonalRecordKind, type PlannedReminder, type PlatePairInventory, type PlateauPreferences, type PlateauSet, type PlateausResponse, type PreferredTrainingStyle, type PreviousPerformanceResponse, type PreviousSessionRecap, type PreviousSetPerformance, type ProfileDiscoverySettings, type ProfileFavoriteExercise, type ProfilePrivacySettings, type ProfileViewerAccess, type ProfileVisibility, type ProgressTimelineEventType, type ProgressTimelineItem, type ProgressTimelinePersonalRecordItem, type ProgressTimelineProgressionItem, type ProgressTimelineQuery, type ProgressTimelineRecordPerformance, type ProgressTimelineRecordReason, type ProgressTimelineResponse, type ProgressTimelineSessionContext, type ProgressionActivity, type ProgressionChange, type ProgressionRule, type ProgressionScheme, type ProgressionSetChange, type PublicBodyMetrics, type PublicProfileAchievements, type PublicTrainingSummary, type PublicUserProfile, type PushPayload, type PushPayloadKind, type PushSubscriptionKeys, type PushSubscriptionSummary, type PushSubscriptionsResponse, type QuietHours, RELATIONSHIP_LIST_DEFAULT_LIMIT, RELATIONSHIP_LIST_KINDS, RELATIONSHIP_LIST_MAX_LIMIT, RENAISSANCE_RANK_DEFINITIONS, REPORTS_PER_DAY_MAX, REPORT_DETAILS_MAX_LENGTH, REPORT_REASONS, REPORT_STATUSES, REPORT_SUBJECT_KINDS, REP_TYPES, RESERVED_USERNAMES, REST_ALERT_MAX_LEAD_SECONDS, REST_ALERT_MIN_LEAD_SECONDS, REST_ALERT_REFUSALS, ROUTINE_DAYS_MAX, ROUTINE_DAY_NAME_MAX, ROUTINE_DISCOVERY_DEFAULT_LIMIT, ROUTINE_DISCOVERY_MAX_LIMIT, ROUTINE_DISCOVERY_SCAN_LIMIT, ROUTINE_DURATION_BANDS, ROUTINE_DURATION_BAND_MAX_MINUTES, ROUTINE_SCHEDULE_MODES, ROUTINE_SHARE_MAX_ACTIVE_LINKS, ROUTINE_TRAINING_BLOCKS_MAX, ROUTINE_TRAINING_BLOCK_NAME_MAX, ROUTINE_TRAINING_BLOCK_REVISIONS_MAX, ROUTINE_TRAINING_BLOCK_SOURCE_KINDS, ROUTINE_TRAINING_BLOCK_STATES, ROUTINE_VERSIONS_MAX, ROUTINE_VERSION_KINDS, ROUTINE_VERSION_NAME_MAX, ROUTINE_VISIBILITY_VALUES, type RecentActivityEntry, type RegisterPushSubscriptionRequest, type RelationshipListKind, type RelationshipListQuery, type RelationshipListResponse, type RelationshipMember, type RenaissanceRankDefinition, type RenaissanceRankProgress, type RepType, type ReplaceFeaturedProfileItemsRequest, type ReplaceMeasurableGoalsRequest, type ReplaceTrainingLocationsRequest, type ReportReason, type ReportStatus, type ReportSubjectKind, type ReportSubjectPreview, type ResolvedRoutinePlan, type RestAlertPushPayload, type RestAlertRefusal, type RestoreRoutineVersionResponse, type ReviewReportRequest, type ReviewReportResponse, type Routine, type RoutineClassification, type RoutineDay, type RoutineDayId, type RoutineDiscoveryQuery, type RoutineDiscoveryResponse, type RoutineDurationBand, type RoutineExercise, type RoutineFacets, type RoutineId, type RoutineLineage, type RoutinePlanSource, type RoutineScheduleMode, type RoutineSet, type RoutineShare, type RoutineShareListResponse, type RoutineSharedActivity, type RoutineTrainingBlock, type RoutineTrainingBlockPlan, type RoutineTrainingBlockRevision, type RoutineTrainingBlockRevisionsResponse, type RoutineTrainingBlockSource, type RoutineTrainingBlockSourceKind, type RoutineTrainingBlockState, type RoutineTrainingBlocksResponse, type RoutineVersion, type RoutineVersionDay, type RoutineVersionExercise, type RoutineVersionKind, type RoutineVersionSetup, type RoutineVersionsResponse, type RoutineVisibility, SCHEDULE_MOVE_MAX_DAYS, SCHEDULE_OVERRIDES_MAX_RANGE_DAYS, SCHEDULE_OVERRIDE_KINDS, SCHEDULE_SKIP_PAST_DAYS, SESSION_CORRECTIONS_MAX, SESSION_CORRECTION_LIMITS, SESSION_CORRECTION_WINDOW_HOURS, SESSION_EXERCISE_NOTE_MAX_LENGTH, SESSION_NOTE_MAX_LENGTH, SESSION_SHARE_DEFAULT_FIELDS, SESSION_SHARE_FIELDS, SESSION_SHARE_MAX_ACTIVE_LINKS, SEXES, SHARED_ROUTINE_SOURCES, STARRED_EXERCISES_MAX, STREAK_MAX_GAP_DAYS, type ScheduleOverride, type ScheduleOverrideKind, type ScheduleOverridesQuery, type ScheduleOverridesResponse, type ScheduleRestAlertRequest, type ScheduleRestAlertResponse, type SendTrainingPartnerEncouragementRequest, type SendTrainingPartnerEncouragementResponse, type SessionComparisonExercise, type SessionComparisonQuery, type SessionComparisonResponse, type SessionComparisonRoutineDay, type SessionComparisonSession, type SessionComparisonSet, type SessionCompletedActivity, type SessionCorrection, type SessionCorrectionClosedReason, type SessionCorrectionWindow, type SessionCorrectionsResponse, type SessionExerciseNote, type SessionExerciseSubstitution, type SessionProgressNotification, type SessionRecapExerciseNote, type SessionRecapRecord, type SessionSetCorrection, type SessionShare, type SessionShareField, type SessionShareListResponse, type SessionTrainingBlock, type SetAccountTimeZoneRequest, type SetActivityEntryAudienceRequest, type SetActivityEntryAudienceResponse, type SetActivityReactionRequest, type SetActivityReactionResponse, type SetLog, type SetLogValues, type Sex, type SharedRoutine, type SharedRoutineOwner, type SharedRoutineSource, type SharedRoutineSummary, type SharedSessionOwner, type SharedSessionRecap, type SkipOccurrenceRequest, type StarredExercise, type StarredExercisesResponse, type StartWorkoutRequest, type StartWorkoutResponse, type StreakAtRiskPushPayload, type StreakMilestoneActivity, type StreakMilestoneEventPayload, type SubstituteSessionExerciseRequest, type SubstituteSessionExerciseResponse, type SupabaseAuthResponse, type SupabaseAuthUser, type SupabaseMigrationResponse, TRAINING_DISCIPLINE_VALUES, TRAINING_EVENT_TYPES, TRAINING_EXPERIENCE_LEVEL_VALUES, TRAINING_GOAL_VALUES, TRAINING_PARTNERSHIP_STATUSES, TRAINING_PARTNERS_MAX, TRAINING_PARTNER_ENCOURAGEMENTS_PER_24_HOURS_MAX, TRAINING_PARTNER_ENCOURAGEMENT_KINDS, TRAINING_PARTNER_PERMISSION_KEYS, TRAINING_PARTNER_REQUESTS_PER_DAY_MAX, type TrainingDiscipline, type TrainingEventType, type TrainingExperienceLevel, type TrainingGoal, type TrainingIdentity, type TrainingLocationPreference, type TrainingLocationPreferenceInput, type TrainingPartnerEncouragementKind, type TrainingPartnerEncouragementNotification, type TrainingPartnerPermissions, type TrainingPartnerScheduleDay, type TrainingPartnerScheduleResponse, type TrainingPartnership, type TrainingPartnershipStatus, type TrainingPartnershipsResponse, type TrainingReminderPreference, type TrainingReminderPushPayload, USERNAME_MAX_LENGTH, USERNAME_MIN_LENGTH, USERNAME_PATTERN_SOURCE, type UpdateActivitySharingRequest, type UpdateNotificationPreferencesRequest, type UpdateProfileDiscoveryRequest, type UpdateProfilePrivacyRequest, type UpdateProfileRequest, type UpdateRoutineRequest, type UpdateRoutineVisibilityRequest, type UpdateSessionNotesRequest, type UpdateSessionNotesResponse, type UpdateTrainingPartnerPermissionsRequest, type UpsertRoutineTrainingBlockRequest, type UpsertSetLogRequest, type UpsertSetLogResponse, type UserId, type UserProfile, type UserSearchResponse, type VolumeTrendPoint, type VolumeTrendQuery, type VolumeTrendResponse, type VolumeTrendSeries, WEIGHT_UNITS, WORKOUT_SESSION_STATUSES, type WeightUnit, type WorkoutAnalyticsStatus, type WorkoutProgressQuery, type WorkoutProgressResponse, type WorkoutSession, type WorkoutSessionId, type WorkoutSessionListResponse, type WorkoutSessionRecap, type WorkoutSessionSnapshotV1, type WorkoutSessionStatus, type WorkoutSessionSummary, type WorkoutStatsQuery, type WorkoutStatsResponse, accountExportFileName, isWithinQuietHours, matchesDeletionConfirmation, resolveActiveTrainingBlock, resolveRoutinePlan, routineDayLabel, sessionCorrectionWindow, setLogValuesDiffer, trainingBlockCovers };
3128
+ export { ACCOUNT_EXPORT_FORMAT, ACCOUNT_EXPORT_VERSION, ACHIEVEMENT_CATEGORIES, ACHIEVEMENT_DEFINITIONS, ACTIVITY_CAPS, ACTIVITY_COMMENTS_PAGE_SIZE, ACTIVITY_COMMENTS_PER_DAY_MAX, ACTIVITY_COMMENT_MAX_LENGTH, ACTIVITY_DEFAULT_AUDIENCE, ACTIVITY_ENTRY_ID_MAX_LENGTH, ACTIVITY_FEED_FOLLOWED_MAX, ACTIVITY_PAGE_DEFAULT_LIMIT, ACTIVITY_PAGE_MAX_LIMIT, ACTIVITY_PREVIEW_AUDIENCES, ACTIVITY_REACTIONS, ACTIVITY_TYPES, ACTIVITY_TYPE_SECTIONS, type AccountExportGoal, type AccountExportMember, type AccountExportPersonalRecord, type AccountExportRoutine, type AccountExportScheduleOverride, type AccountExportTrainingEvent, type AccountExportTrainingLocation, type AccountExportV1, type AchievementActivity, type AchievementCategory, type AchievementCategoryProgress, type AchievementDefinition, type AchievementNotification, type AchievementUnlockedEventPayload, type AchievementsResponse, type ActivityAudience, type ActivityCap, type ActivityComment, type ActivityCommentNotification, type ActivityCommentSummary, type ActivityCommentsQuery, type ActivityCommentsResponse, type ActivityEntry, type ActivityEntrySharing, type ActivityFeedResponse, type ActivityLink, type ActivityPage, type ActivityPageQuery, type ActivityPreviewAudience, type ActivityPreviewQuery, type ActivityReaction, type ActivityReactionSummary, type ActivitySection, type ActivitySharingSettings, type ActivityType, type AppNotification, BLOCKED_MEMBERS_MAX, type BlockedMember, type BlockedMembersResponse, type Brand, CLONE_ROUTINE_REFUSALS, COMEBACK_MIN_INACTIVE_DAYS, COMEBACK_RECOGNITION_LIMIT, COMEBACK_REQUIRED_ACTIVE_DAYS, COMEBACK_SESSION_LOOKBACK, COMEBACK_WINDOW_DAYS, type CalendarDate, type CloneRoutineRefusal, type CloneRoutineRequest, type ComebackActivity, type ComebackRecognition, type ComebackRecognitionSummary, type CorrectSessionRequest, type CorrectSessionResponse, type CorrectSessionSetRequest, type CreateActivityCommentRequest, type CreateActivityCommentResponse, type CreateDeloadRequest, type CreateReportRequest, type CreateReportResponse, type CreateRoutineDayInput, type CreateRoutineExerciseInput, type CreateRoutineRequest, type CreateRoutineVersionRequest, type CreateSessionShareRequest, DELOAD_DEFAULT_DAYS, DELOAD_DEFAULT_LOAD_REDUCTION, DELOAD_DEFAULT_SET_MODE, DELOAD_LOAD_REDUCTIONS, DELOAD_MAX_DAYS, DELOAD_NOT_LIGHTER, DELOAD_SET_MODES, type DeleteAccountRequest, type DeleteAccountResponse, type DeleteActivityCommentResponse, type DeletePushSubscriptionRequest, type DeloadLoadReduction, type DeloadOptions, type DeloadSetMode, type DiscoverableRoutine, EXERCISE_EQUIPMENT, EXERCISE_MECHANICS, type EarnedAchievement, type EarnedPersonalRecord, type Exercise, type ExerciseEquipment, type ExerciseId, type ExerciseMechanic, type ExercisePerformanceHistoryQuery, type ExercisePerformanceHistoryResponse, type ExercisePerformancePrescription, type ExercisePerformancePrescriptionSet, type ExercisePerformanceSession, type ExercisePerformanceSet, type ExercisePerformanceSummary, type ExercisePlateau, type ExerciseStrengthSummary, type ExerciseStrengthTrendPoint, type ExerciseStrengthTrendQuery, type ExerciseStrengthTrendResponse, FEATURED_PROFILE_ITEMS_MAX, FEATURED_PROFILE_ITEM_KINDS, FEATURED_PROFILE_REFERENCE_MAX_LENGTH, FOLLOW_SUGGESTIONS_DEFAULT_LIMIT, FOLLOW_SUGGESTIONS_MAX_LIMIT, FOLLOW_SUGGESTION_REASONS, type FeaturedProfileAchievementItem, type FeaturedProfileItem, type FeaturedProfileItemKind, type FeaturedProfileRankItem, type FeaturedProfileRecordItem, type FeaturedProfileRoutineItem, type FeaturedProfileSelection, type FeaturedProfileSelectionInput, type FeaturedProfileSelectionsResponse, type FinishStatus, type FinishWorkoutRequest, type FinishWorkoutResponse, type FollowSuggestion, type FollowSuggestionReason, type FollowSuggestionsResponse, type IsoDateString, type ListSessionsParams, MEASURABLE_GOALS_MAX, MEASURABLE_GOAL_DIRECTIONS, MEASURABLE_GOAL_TYPES, MINUTES_IN_DAY, MODERATION_ACTION_KINDS, MODERATION_HISTORY_PAGE_SIZE, MODERATION_NOTE_MAX_LENGTH, MODERATION_QUEUE_PAGE_SIZE, MOVEMENT_PATTERNS, MUSCLE_GROUPS, type MarkNotificationsReadRequest, type MarkNotificationsReadResponse, type MeasurableGoal, type MeasurableGoalDirection, type MeasurableGoalExercise, type MeasurableGoalInput, type MeasurableGoalType, type MemberActivityResponse, type MemberModerationState, type MemberRoutinesResponse, type ModerationActionKind, type ModerationActionRecord, type ModerationHistoryQuery, type ModerationHistoryResponse, type ModerationQueueQuery, type ModerationQueueResponse, type ModerationReport, type ModeratorState, type MoveOccurrenceRequest, type MovementPattern, type MuscleGroup, type MuscleGroupHeatmapQuery, type MuscleGroupHeatmapResponse, type MuscleGroupHeatmapValue, type MuscleGroupHeatmapWeek, type MuscleVolumeTrendSeries, NOTIFICATIONS_LIST_LIMIT, NOTIFICATIONS_LOOKBACK_DAYS, NOTIFICATIONS_RETENTION_DAYS, NOTIFICATION_CATEGORIES, NOTIFICATION_KINDS, type NewFollowerNotification, type NotificationCategory, type NotificationKind, type NotificationPreferences, type NotificationPreferencesResponse, type NotificationsResponse, type OwnActivityEntry, type OwnActivityResponse, PLATEAU_MIN_DAYS_SINCE_BEST, PLATEAU_MIN_SESSIONS, PLATEAU_MIN_SESSIONS_MAX, PLATEAU_MIN_SESSIONS_MIN, PLATEAU_RECENT_DAYS, PLATEAU_WINDOW_DAYS, PREFERRED_TRAINING_STYLE_VALUES, PROFILE_BIO_MAX_LENGTH, PROFILE_FAVORITE_EXERCISES_MAX, PROFILE_LOCATION_MAX_LENGTH, PROFILE_TRAINING_DISCIPLINES_MAX, PROFILE_TRAINING_GOALS_MAX, PROFILE_VISIBILITY_VALUES, PROGRESSION_SCHEMES, PROGRESS_TIMELINE_EVENT_TYPES, PUSH_PAYLOAD_KINDS, PUSH_SUBSCRIPTIONS_MAX, type PaginatedResponse, type PersonalGoalProgress, type PersonalGoalsResponse, type PersonalRecordActivity, type PersonalRecordEntry, type PersonalRecordKind, type PlannedReminder, type PlatePairInventory, type PlateauPreferences, type PlateauSet, type PlateausResponse, type PreferredTrainingStyle, type PreviousPerformanceResponse, type PreviousSessionRecap, type PreviousSetPerformance, type ProfileDiscoverySettings, type ProfileFavoriteExercise, type ProfilePrivacySettings, type ProfileViewerAccess, type ProfileVisibility, type ProgressTimelineEventType, type ProgressTimelineItem, type ProgressTimelinePersonalRecordItem, type ProgressTimelineProgressionItem, type ProgressTimelineQuery, type ProgressTimelineRecordPerformance, type ProgressTimelineRecordReason, type ProgressTimelineResponse, type ProgressTimelineSessionContext, type ProgressionActivity, type ProgressionChange, type ProgressionRule, type ProgressionScheme, type ProgressionSetChange, type PublicBodyMetrics, type PublicProfileAchievements, type PublicTrainingSummary, type PublicUserProfile, type PushPayload, type PushPayloadKind, type PushSubscriptionKeys, type PushSubscriptionSummary, type PushSubscriptionsResponse, type QuietHours, RELATIONSHIP_LIST_DEFAULT_LIMIT, RELATIONSHIP_LIST_KINDS, RELATIONSHIP_LIST_MAX_LIMIT, RENAISSANCE_RANK_DEFINITIONS, REPORTS_PER_DAY_MAX, REPORT_DETAILS_MAX_LENGTH, REPORT_REASONS, REPORT_STATUSES, REPORT_SUBJECT_KINDS, REP_TYPES, RESERVED_USERNAMES, REST_ALERT_MAX_LEAD_SECONDS, REST_ALERT_MIN_LEAD_SECONDS, REST_ALERT_REFUSALS, ROUTINE_DAYS_MAX, ROUTINE_DAY_NAME_MAX, ROUTINE_DISCOVERY_DEFAULT_LIMIT, ROUTINE_DISCOVERY_MAX_LIMIT, ROUTINE_DISCOVERY_SCAN_LIMIT, ROUTINE_DURATION_BANDS, ROUTINE_DURATION_BAND_MAX_MINUTES, ROUTINE_SCHEDULE_MODES, ROUTINE_SHARE_MAX_ACTIVE_LINKS, ROUTINE_TRAINING_BLOCKS_MAX, ROUTINE_TRAINING_BLOCK_NAME_MAX, ROUTINE_TRAINING_BLOCK_REVISIONS_MAX, ROUTINE_TRAINING_BLOCK_SOURCE_KINDS, ROUTINE_TRAINING_BLOCK_STATES, ROUTINE_VERSIONS_MAX, ROUTINE_VERSION_KINDS, ROUTINE_VERSION_NAME_MAX, ROUTINE_VISIBILITY_VALUES, type RecentActivityEntry, type RegisterPushSubscriptionRequest, type RelationshipListKind, type RelationshipListQuery, type RelationshipListResponse, type RelationshipMember, type RenaissanceRankDefinition, type RenaissanceRankProgress, type RepType, type ReplaceFeaturedProfileItemsRequest, type ReplaceMeasurableGoalsRequest, type ReplaceTrainingLocationsRequest, type ReportReason, type ReportStatus, type ReportSubjectKind, type ReportSubjectPreview, type ResolvedRoutinePlan, type RestAlertPushPayload, type RestAlertRefusal, type RestoreRoutineVersionResponse, type ReviewReportRequest, type ReviewReportResponse, type Routine, type RoutineClassification, type RoutineDay, type RoutineDayId, type RoutineDiscoveryQuery, type RoutineDiscoveryResponse, type RoutineDurationBand, type RoutineExercise, type RoutineFacets, type RoutineId, type RoutineLineage, type RoutinePlanSource, type RoutineScheduleMode, type RoutineSet, type RoutineShare, type RoutineShareListResponse, type RoutineSharedActivity, type RoutineTemporaryOverride, type RoutineTemporaryOverridePlan, type RoutineTemporaryOverridesResponse, type RoutineTrainingBlock, type RoutineTrainingBlockPlan, type RoutineTrainingBlockRevision, type RoutineTrainingBlockRevisionsResponse, type RoutineTrainingBlockSource, type RoutineTrainingBlockSourceKind, type RoutineTrainingBlockState, type RoutineTrainingBlocksResponse, type RoutineVersion, type RoutineVersionDay, type RoutineVersionExercise, type RoutineVersionKind, type RoutineVersionSetup, type RoutineVersionsResponse, type RoutineVisibility, SCHEDULE_MOVE_MAX_DAYS, SCHEDULE_OVERRIDES_MAX_RANGE_DAYS, SCHEDULE_OVERRIDE_KINDS, SCHEDULE_SKIP_PAST_DAYS, SESSION_CORRECTIONS_MAX, SESSION_CORRECTION_LIMITS, SESSION_CORRECTION_WINDOW_HOURS, SESSION_EXERCISE_NOTE_MAX_LENGTH, SESSION_NOTE_MAX_LENGTH, SESSION_SHARE_DEFAULT_FIELDS, SESSION_SHARE_FIELDS, SESSION_SHARE_MAX_ACTIVE_LINKS, SEXES, SHARED_ROUTINE_SOURCES, STARRED_EXERCISES_MAX, STREAK_MAX_GAP_DAYS, type ScheduleOverride, type ScheduleOverrideKind, type ScheduleOverridesQuery, type ScheduleOverridesResponse, type ScheduleRestAlertRequest, type ScheduleRestAlertResponse, type SendTrainingPartnerEncouragementRequest, type SendTrainingPartnerEncouragementResponse, type SessionComparisonExercise, type SessionComparisonQuery, type SessionComparisonResponse, type SessionComparisonRoutineDay, type SessionComparisonSession, type SessionComparisonSet, type SessionCompletedActivity, type SessionCorrection, type SessionCorrectionClosedReason, type SessionCorrectionWindow, type SessionCorrectionsResponse, type SessionExerciseNote, type SessionExerciseSubstitution, type SessionProgressNotification, type SessionRecapExerciseNote, type SessionRecapRecord, type SessionSetCorrection, type SessionShare, type SessionShareField, type SessionShareListResponse, type SessionTemporaryOverride, type SessionTrainingBlock, type SetAccountTimeZoneRequest, type SetActivityEntryAudienceRequest, type SetActivityEntryAudienceResponse, type SetActivityReactionRequest, type SetActivityReactionResponse, type SetLog, type SetLogValues, type Sex, type SharedRoutine, type SharedRoutineOwner, type SharedRoutineSource, type SharedRoutineSummary, type SharedSessionOwner, type SharedSessionRecap, type SkipOccurrenceRequest, type StarredExercise, type StarredExercisesResponse, type StartWorkoutRequest, type StartWorkoutResponse, type StreakAtRiskPushPayload, type StreakMilestoneActivity, type StreakMilestoneEventPayload, type SubstituteSessionExerciseRequest, type SubstituteSessionExerciseResponse, type SupabaseAuthResponse, type SupabaseAuthUser, type SupabaseMigrationResponse, TEMPORARY_OVERRIDE_KINDS, TEMPORARY_OVERRIDE_SOURCE_KINDS, TRAINING_DISCIPLINE_VALUES, TRAINING_EVENT_TYPES, TRAINING_EXPERIENCE_LEVEL_VALUES, TRAINING_GOAL_VALUES, TRAINING_PARTNERSHIP_STATUSES, TRAINING_PARTNERS_MAX, TRAINING_PARTNER_ENCOURAGEMENTS_PER_24_HOURS_MAX, TRAINING_PARTNER_ENCOURAGEMENT_KINDS, TRAINING_PARTNER_PERMISSION_KEYS, TRAINING_PARTNER_REQUESTS_PER_DAY_MAX, type TemporaryOverrideKind, type TemporaryOverrideSource, type TemporaryOverrideSourceKind, type TrainingDiscipline, type TrainingEventType, type TrainingExperienceLevel, type TrainingGoal, type TrainingIdentity, type TrainingLocationPreference, type TrainingLocationPreferenceInput, type TrainingPartnerEncouragementKind, type TrainingPartnerEncouragementNotification, type TrainingPartnerPermissions, type TrainingPartnerScheduleDay, type TrainingPartnerScheduleResponse, type TrainingPartnership, type TrainingPartnershipStatus, type TrainingPartnershipsResponse, type TrainingReminderPreference, type TrainingReminderPushPayload, USERNAME_MAX_LENGTH, USERNAME_MIN_LENGTH, USERNAME_PATTERN_SOURCE, type UpdateActivitySharingRequest, type UpdateNotificationPreferencesRequest, type UpdateProfileDiscoveryRequest, type UpdateProfilePrivacyRequest, type UpdateProfileRequest, type UpdateRoutineRequest, type UpdateRoutineVisibilityRequest, type UpdateSessionNotesRequest, type UpdateSessionNotesResponse, type UpdateTrainingPartnerPermissionsRequest, type UpsertRoutineTrainingBlockRequest, type UpsertSetLogRequest, type UpsertSetLogResponse, type UserId, type UserProfile, type UserSearchResponse, type VolumeTrendPoint, type VolumeTrendQuery, type VolumeTrendResponse, type VolumeTrendSeries, WEIGHT_UNITS, WORKOUT_SESSION_STATUSES, type WeightUnit, type WorkoutAnalyticsStatus, type WorkoutProgressQuery, type WorkoutProgressResponse, type WorkoutSession, type WorkoutSessionId, type WorkoutSessionListResponse, type WorkoutSessionRecap, type WorkoutSessionSnapshotV1, type WorkoutSessionStatus, type WorkoutSessionSummary, type WorkoutStatsQuery, type WorkoutStatsResponse, accountExportFileName, applyDeload, deloadLengthDays, isWithinQuietHours, matchesDeletionConfirmation, resolveActiveTrainingBlock, resolveRoutinePlan, routineDayLabel, sessionCorrectionWindow, setLogValuesDiffer, trainingBlockCovers };