@sunsteel/contracts 0.85.0 → 0.87.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
@@ -6,7 +6,7 @@ declare const SEXES: readonly ["MALE", "FEMALE"];
6
6
  type Sex = (typeof SEXES)[number];
7
7
  declare const REP_TYPES: readonly ["FIXED", "RANGE"];
8
8
  type RepType = (typeof REP_TYPES)[number];
9
- declare const PROGRESSION_SCHEMES: readonly ["NONE", "DOUBLE_PROGRESSION", "DYNAMIC_DOUBLE_PROGRESSION"];
9
+ declare const PROGRESSION_SCHEMES: readonly ["NONE", "DOUBLE_PROGRESSION", "DYNAMIC_DOUBLE_PROGRESSION", "LINEAR_PERIODIZATION"];
10
10
  type ProgressionScheme = (typeof PROGRESSION_SCHEMES)[number];
11
11
  declare const MUSCLE_GROUPS: readonly ["PECTORAL", "LATISSIMUS_DORSI", "TRAPEZIUS", "REAR_DELTOIDS", "ERECTOR_SPINAE", "TERES_MAJOR_MINOR", "ANTERIOR_DELTOIDS", "MEDIAL_DELTOIDS", "BICEPS", "TRICEPS", "FOREARMS", "QUADRICEPS", "HAMSTRINGS", "GLUTES", "CALVES", "CORE", "ADDUCTOR"];
12
12
  type MuscleGroup = (typeof MUSCLE_GROUPS)[number];
@@ -75,6 +75,101 @@ interface UpdateLocaleRequest {
75
75
  locale: AppLocale | null;
76
76
  }
77
77
 
78
+ /**
79
+ * Who may start a conversation with a member. `FOLLOWED`: members they follow.
80
+ * `MSG-02` adds `EVERYONE` (as requests).
81
+ */
82
+ declare const MESSAGE_PERMISSIONS: readonly ["FOLLOWED", "NOBODY"];
83
+ type MessagePermission = (typeof MESSAGE_PERMISSIONS)[number];
84
+ declare const DEFAULT_MESSAGE_PERMISSION: MessagePermission;
85
+ /** Characters in one message, counted as code points. */
86
+ declare const MESSAGE_BODY_MAX = 2000;
87
+ /** Messages one member may send in a rolling minute. */
88
+ declare const MESSAGES_PER_MINUTE_MAX = 30;
89
+ /** Conversations one member may start in a rolling day. */
90
+ declare const NEW_CONVERSATIONS_PER_DAY_MAX = 20;
91
+ declare const CONVERSATIONS_PAGE_SIZE = 20;
92
+ declare const MESSAGES_PAGE_SIZE = 30;
93
+ /** Length as a reader counts it: an emoji is one character, not two. */
94
+ declare function messageBodyLength(body: string): number;
95
+ /**
96
+ * The stored form of a typed message: line endings made `\n` and the ends
97
+ * trimmed, the lines in between kept as written. Null when it is empty or too
98
+ * long -- it is refused rather than cut, because a message clipped mid-sentence
99
+ * would misrepresent its author.
100
+ */
101
+ declare function normalizeMessageBody(body: string): string | null;
102
+ /** The other participant, or null once their account was deleted. */
103
+ interface ConversationMember {
104
+ id: string;
105
+ username: string;
106
+ name: string;
107
+ avatarUrl: string | null;
108
+ }
109
+ interface ConversationMessage {
110
+ id: string;
111
+ sentByMe: boolean;
112
+ /** Null once its author deleted it; the place stays as "Message deleted". */
113
+ body: string | null;
114
+ deleted: boolean;
115
+ createdAt: IsoDateString;
116
+ }
117
+ interface ConversationSummary {
118
+ id: string;
119
+ /** Null when the other member deleted their account ("Deleted member"). */
120
+ counterpart: ConversationMember | null;
121
+ /** The newest message the viewer can see, or null when there is none. */
122
+ lastMessage: ConversationMessage | null;
123
+ lastMessageAt: IsoDateString | null;
124
+ /**
125
+ * Whether the viewer may write in it now. False when the other member's
126
+ * account is gone, or the viewer's own messaging is unavailable.
127
+ */
128
+ canSend: boolean;
129
+ }
130
+ /** GET /conversations, newest activity first. */
131
+ interface ConversationsResponse {
132
+ conversations: ConversationSummary[];
133
+ nextCursor: string | null;
134
+ }
135
+ /** GET /conversations/:id/messages, newest first; `cursor` pages older. */
136
+ interface ConversationMessagesResponse {
137
+ conversation: ConversationSummary;
138
+ messages: ConversationMessage[];
139
+ nextCursor: string | null;
140
+ }
141
+ /**
142
+ * POST /conversations. Starts a conversation with its first message, so an
143
+ * empty conversation never exists; when one with this member already exists
144
+ * the message is sent there instead. `recipient` is a username or an id.
145
+ */
146
+ interface StartConversationRequest {
147
+ recipient: string;
148
+ body: string;
149
+ }
150
+ /** POST /conversations/:id/messages. */
151
+ interface SendMessageRequest {
152
+ body: string;
153
+ }
154
+ interface SendMessageResponse {
155
+ conversation: ConversationSummary;
156
+ message: ConversationMessage;
157
+ }
158
+ /** PUT /users/preferences/messages. */
159
+ interface UpdateMessagePermissionRequest {
160
+ messagePermission: MessagePermission;
161
+ }
162
+ /**
163
+ * On the authenticated member profile only: whether the viewer may start a
164
+ * conversation, and the one they already have. The server decides; a viewer
165
+ * who may not is told nothing more.
166
+ */
167
+ interface MemberMessagingState {
168
+ canStart: boolean;
169
+ conversationId: string | null;
170
+ }
171
+ declare function isMessagePermission(value: unknown): value is MessagePermission;
172
+
78
173
  /** A step id as the registry names it: lowercase words joined by hyphens. */
79
174
  declare const ONBOARDING_STEP_ID_PATTERN_SOURCE = "^[a-z][a-z0-9-]{0,39}$";
80
175
  declare const ONBOARDING_STEPS_MAX = 30;
@@ -170,6 +265,216 @@ declare function countsForProgression(kind?: SetKind | null): boolean;
170
265
  /** Whether a set must be done before a workout finishes without a prompt. */
171
266
  declare function requiredToFinish(kind?: SetKind | null): boolean;
172
267
 
268
+ /** Steps in one block. */
269
+ declare const LP_BLOCK_STEPS = 8;
270
+ /** Working sets per step, all at the step's load. */
271
+ declare const LP_WORKING_SETS = 3;
272
+ /** The rest a new LP exercise is offered with. */
273
+ declare const LP_REST_SECONDS = 180;
274
+ /** Upper bound for a reference max, in kg. */
275
+ declare const LP_REFERENCE_MAX_KG = 1000;
276
+ interface LpSetTarget {
277
+ /** Target RIR range; equal ends mean one value (the AMRAP's 0). */
278
+ rirMin: number;
279
+ rirMax: number;
280
+ /** A technical AMRAP: as many good reps as possible, to RIR 0. */
281
+ amrap: boolean;
282
+ }
283
+ interface LpStep {
284
+ step: number;
285
+ /** The share of the reference max, 0.63 for 63 %. */
286
+ percentage: number;
287
+ sets: [LpSetTarget, LpSetTarget, LpSetTarget];
288
+ }
289
+ /** The fixed table: steps 1-4 end in a technical AMRAP, 5-8 do not. */
290
+ declare const LP_STEPS: readonly LpStep[];
291
+ /** The step's prescription; out-of-range steps are clamped to 1-8. */
292
+ declare function lpStep(step: number): LpStep;
293
+ /** The optional recovery step after a block (ROUT-19): fixed reps, light. */
294
+ declare const LP_RECOVERY: {
295
+ readonly percentage: 0.7;
296
+ readonly sets: 2;
297
+ readonly reps: 5;
298
+ };
299
+ /**
300
+ * The nearest multiple of the increment, a tie rounding down. Rounding in kg
301
+ * equals rounding in pounds when the increment was entered in pounds, since
302
+ * the conversion is linear.
303
+ */
304
+ declare function roundToIncrement(value: number, increment: number): number;
305
+ /** The largest multiple of the increment not above the value. */
306
+ declare function roundDownToIncrement(value: number, increment: number): number;
307
+ /** The load of a share of the reference max, on the exercise's increment. */
308
+ declare function lpLoadKg(referenceMaxKg: number, percentage: number, incrementKg: number): number;
309
+ /**
310
+ * BLOCK trains `step`; FINISHED waits for the member's choice of what follows
311
+ * (ROUT-19); RECOVERY trains the optional recovery step, then the next block.
312
+ */
313
+ declare const LP_PHASES: readonly ["BLOCK", "RECOVERY", "FINISHED"];
314
+ type LpPhase = (typeof LP_PHASES)[number];
315
+ /** One working set of steps 7-8, kept for the end-of-block estimate. */
316
+ interface LpSample {
317
+ sessionId: string;
318
+ step: number;
319
+ /** 1-3: the set's place among the step's working sets. */
320
+ set: number;
321
+ loadKg: number;
322
+ reps: number;
323
+ }
324
+ /**
325
+ * Where a slot is in its block. It travels with the routine's setup like the
326
+ * set loads do, so an edit, a version or a block keeps it; a shared or cloned
327
+ * routine drops it, since the reference max is the owner's.
328
+ */
329
+ interface LinearPeriodizationState {
330
+ /** The block's reference max (an estimated 1RM), canonical kg. */
331
+ referenceMaxKg: number;
332
+ phase: LpPhase;
333
+ /** 1-8: the step the next workout of this slot trains. */
334
+ step: number;
335
+ /** 1 for the first block, one more for each block started after it. */
336
+ cycle: number;
337
+ /** Steps 7-8 of this block, for the estimate (ROUT-18). */
338
+ samples: LpSample[];
339
+ /** FINISHED and RECOVERY: when the block finished. */
340
+ finishedAt?: IsoDateString | null;
341
+ /** FINISHED and RECOVERY: the finished block's estimate, if one was possible. */
342
+ estimatedMaxKg?: number | null;
343
+ /** RECOVERY: the reference the next block starts from. */
344
+ nextReferenceMaxKg?: number | null;
345
+ }
346
+ /** A new block from step 1. */
347
+ declare function startLinearPeriodization(referenceMaxKg: number, cycle?: number): LinearPeriodizationState;
348
+ /** Why a state cannot be stored, or null. */
349
+ declare function linearPeriodizationProblem(state: LinearPeriodizationState): string | null;
350
+ /** What one set of an LP exercise prescribes this workout. */
351
+ interface LpSetPrescription {
352
+ loadKg: number;
353
+ /** Null on the recovery step, which prescribes reps instead. */
354
+ target: LpSetTarget | null;
355
+ /** The recovery step's fixed reps. */
356
+ reps: number | null;
357
+ }
358
+ /**
359
+ * The slot's working sets for its next workout: three at the step's load in
360
+ * BLOCK, the recovery step's two in RECOVERY, none while FINISHED waits for a
361
+ * choice.
362
+ */
363
+ declare function lpPrescription(state: LinearPeriodizationState, incrementKg: number): LpSetPrescription[];
364
+ /**
365
+ * The working sets of a list in order, the LP way: every set that is not a
366
+ * warm-up. Warm-ups stay outside the block.
367
+ */
368
+ declare function lpWorkingSets<T extends {
369
+ kind?: SetKind | null;
370
+ }>(sets: T[]): T[];
371
+ /** Only these steps feed the estimate: the heaviest, closest to a max. */
372
+ declare const LP_ESTIMATE_STEPS: readonly number[];
373
+ /** Sets whose reps plus RIR exceed this are left out (Epley drifts above it). */
374
+ declare const LP_ESTIMATE_MAX_REPS_TO_FAILURE = 10;
375
+ /** Fewer qualifying sets than this, and there is no estimate. */
376
+ declare const LP_ESTIMATE_MIN_SETS = 3;
377
+ /** The middle of a target RIR range: 2-3 counts 2.5, 1-2 counts 1.5. */
378
+ declare function lpRirMidpoint(target: LpSetTarget): number;
379
+ /** The RIR a sample is counted with: its prescribed target's midpoint. */
380
+ declare function lpSampleRir(sample: Pick<LpSample, 'step' | 'set'>): number;
381
+ /** Epley on reps to failure: `load × (1 + (reps + RIR) / 30)`. */
382
+ declare function lpSetEstimateKg(loadKg: number, reps: number, rir: number): number;
383
+ interface LpEstimate {
384
+ /** Rounded down to the increment; null with too few qualifying sets. */
385
+ estimatedMaxKg: number | null;
386
+ /** The sets it was computed from, in step and set order. */
387
+ sets: Array<LpSample & {
388
+ rir: number;
389
+ estimateKg: number;
390
+ }>;
391
+ }
392
+ /**
393
+ * The end-of-block estimate: each set of steps 7-8 with at least one rep and
394
+ * reps + RIR of 10 or fewer, estimated with Epley on reps to failure; their
395
+ * median, rounded down to the increment, once there are three.
396
+ */
397
+ declare function lpEstimate(samples: LpSample[], incrementKg: number): LpEstimate;
398
+ /** An estimate this far above the reference pre-selects a heavier block. */
399
+ declare const LP_PROGRESS_THRESHOLD = 0.025;
400
+ /** A heavier block's reference is at most this far above the last one. */
401
+ declare const LP_PROGRESS_CAP = 0.05;
402
+ /**
403
+ * PROGRESS: a new, heavier block. REPEAT: the same reference again. RESET: a
404
+ * new block at the lower estimate.
405
+ */
406
+ declare const LP_NEXT_BLOCK_KINDS: readonly ["PROGRESS", "REPEAT", "RESET"];
407
+ type LpNextBlockKind = (typeof LP_NEXT_BLOCK_KINDS)[number];
408
+ interface LpRecommendation {
409
+ kind: LpNextBlockKind;
410
+ /** The reference the pre-selected next block starts from, kg. */
411
+ nextReferenceMaxKg: number;
412
+ /** estimate / reference - 1, or null without an estimate. */
413
+ change: number | null;
414
+ }
415
+ /**
416
+ * The next block pre-selected from the evidence -- never applied without the
417
+ * member's choice: at least 2.5 % above, a block at the estimate capped at
418
+ * 5 % over the reference; more than 2.5 % below, a block at the estimate;
419
+ * otherwise, or without an estimate, the same reference again.
420
+ */
421
+ declare function lpRecommendation(referenceMaxKg: number, estimatedMaxKg: number | null | undefined, incrementKg: number): LpRecommendation;
422
+ /**
423
+ * Body of `PUT /routines/:id/exercises/:routineExerciseId/linear-block`: what
424
+ * a FINISHED slot does next. `recovery` takes the optional recovery step
425
+ * first; the reference is the member's choice, pre-filled from
426
+ * `lpRecommendation`.
427
+ */
428
+ interface ContinueLinearBlockRequest {
429
+ referenceMaxKg: number;
430
+ recovery: boolean;
431
+ }
432
+ /** One working set of the slot as a completed workout left it. */
433
+ interface LpLoggedSet {
434
+ /** 1-based place among the step's working sets. */
435
+ set: number;
436
+ reps: number;
437
+ loadKg: number;
438
+ completed: boolean;
439
+ }
440
+ /** Whether two states stand at the same place of the same block. */
441
+ declare function sameLpPosition(a: LinearPeriodizationState | null | undefined, b: LinearPeriodizationState | null | undefined): boolean;
442
+ /**
443
+ * Where a completed workout leaves the slot, or null when it does not move:
444
+ * a FINISHED slot waits for a choice, and a step or the recovery step counts
445
+ * only when every one of its working sets was ticked. Step 8 finishes the
446
+ * block with its estimate; the recovery step begins the next block. Reps
447
+ * never change a load.
448
+ */
449
+ declare function advanceLinearPeriodization(state: LinearPeriodizationState, logged: LpLoggedSet[], context: {
450
+ sessionId: string;
451
+ finishedAt: IsoDateString;
452
+ incrementKg: number;
453
+ }): LinearPeriodizationState | null;
454
+ /**
455
+ * What a FINISHED slot does next (ROUT-19): the optional recovery step on the
456
+ * finished block's reference, then the chosen reference; or the next block at
457
+ * once. Null when the slot has not finished.
458
+ */
459
+ declare function continueLinearPeriodization(state: LinearPeriodizationState, choice: ContinueLinearBlockRequest): LinearPeriodizationState | null;
460
+ /** A working set as the routine stores it for an LP slot. */
461
+ interface LpStoredSet {
462
+ repType: 'FIXED';
463
+ /** No rep target in a block; the recovery step's fixed reps. */
464
+ reps: number | null;
465
+ weight: number | null;
466
+ /** The target's lower end; the full range is read from `lpStep`. */
467
+ rir: number | null;
468
+ kind: 'WORKING';
469
+ }
470
+ /**
471
+ * The working sets a routine stores for an LP slot, after its warm-ups: the
472
+ * step's three in BLOCK, the final step's three while FINISHED waits for a
473
+ * choice (they repeat it and move nothing), the recovery step's two in
474
+ * RECOVERY, and three without loads while no reference max is set.
475
+ */
476
+ declare function lpStoredSets(state: LinearPeriodizationState | null | undefined, incrementKg: number): LpStoredSet[];
477
+
173
478
  /** A local calendar date, YYYY-MM-DD. */
174
479
  type CalendarDate = string;
175
480
  /**
@@ -536,6 +841,12 @@ interface RoutineExercise {
536
841
  * or a circuit of three to six); see `exerciseGroups`.
537
842
  */
538
843
  linkedToNext?: boolean;
844
+ /**
845
+ * ROUT-17: on a `LINEAR_PERIODIZATION` exercise, where the slot is in its
846
+ * block. Null on any other scheme, and on an LP exercise nobody has given
847
+ * a reference max yet (a shared or cloned routine drops the owner's).
848
+ */
849
+ linearPeriodization?: LinearPeriodizationState | null;
539
850
  exercise: {
540
851
  id: string;
541
852
  name: string;
@@ -558,6 +869,12 @@ interface CreateRoutineExerciseInput {
558
869
  * or a circuit of three to six); see `exerciseGroups`.
559
870
  */
560
871
  linkedToNext?: boolean;
872
+ /**
873
+ * ROUT-17: on a `LINEAR_PERIODIZATION` exercise, where the slot is in its
874
+ * block. Null on any other scheme, and on an LP exercise nobody has given
875
+ * a reference max yet (a shared or cloned routine drops the owner's).
876
+ */
877
+ linearPeriodization?: LinearPeriodizationState | null;
561
878
  sets: RoutineSet[];
562
879
  }
563
880
  interface RoutineDay {
@@ -693,6 +1010,12 @@ interface RoutineVersionExercise {
693
1010
  * or a circuit of three to six); see `exerciseGroups`.
694
1011
  */
695
1012
  linkedToNext?: boolean;
1013
+ /**
1014
+ * ROUT-17: on a `LINEAR_PERIODIZATION` exercise, where the slot is in its
1015
+ * block. Null on any other scheme, and on an LP exercise nobody has given
1016
+ * a reference max yet (a shared or cloned routine drops the owner's).
1017
+ */
1018
+ linearPeriodization?: LinearPeriodizationState | null;
696
1019
  sets: RoutineSet[];
697
1020
  }
698
1021
  interface RoutineVersionDay {
@@ -896,6 +1219,11 @@ interface WorkoutSession {
896
1219
  minWeightIncrement: number;
897
1220
  /** ROUT-12: done in rounds with the next exercise of the day. */
898
1221
  linkedToNext?: boolean;
1222
+ /**
1223
+ * ROUT-17: the slot's block as it stood when the workout started; the
1224
+ * sets' weights are the step's prescribed loads.
1225
+ */
1226
+ linearPeriodization?: LinearPeriodizationState | null;
899
1227
  exercise: {
900
1228
  id: string;
901
1229
  name: string;
@@ -969,10 +1297,28 @@ interface ProgressionChange {
969
1297
  minWeightIncrementKg: number;
970
1298
  sets: ProgressionSetChange[];
971
1299
  }
1300
+ /**
1301
+ * ROUT-17/ROUT-18: one LP slot's block moved by a completed workout -- a step
1302
+ * done, the block finished, or the recovery step done and the next block
1303
+ * begun. `after.phase === 'FINISHED'` with `before.phase === 'BLOCK'` is the
1304
+ * block finishing; its estimate is `after.estimatedMaxKg`, from
1305
+ * `after.samples`.
1306
+ */
1307
+ interface LinearBlockChange {
1308
+ routineExerciseId: string;
1309
+ exerciseId: string;
1310
+ exerciseName: string;
1311
+ /** The exercise's increment, kg, for rounding the estimate's sets. */
1312
+ minWeightIncrementKg: number;
1313
+ before: LinearPeriodizationState;
1314
+ after: LinearPeriodizationState;
1315
+ }
972
1316
  /** Stable successful response of PATCH /workouts/sessions/:id/finish. */
973
1317
  interface FinishWorkoutResponse {
974
1318
  session: WorkoutSession;
975
1319
  progressionChanges: ProgressionChange[];
1320
+ /** ROUT-17; absent from servers before it. */
1321
+ linearBlockChanges?: LinearBlockChange[];
976
1322
  recap: WorkoutSessionRecap | null;
977
1323
  }
978
1324
  interface UpsertSetLogRequest {
@@ -1093,6 +1439,10 @@ interface WorkoutSessionRecap {
1093
1439
  exerciseNotes?: SessionRecapExerciseNote[];
1094
1440
  records: SessionRecapRecord[];
1095
1441
  progressionChanges: ProgressionChange[];
1442
+ /** ROUT-17/ROUT-18: LP blocks this workout moved; absent before them. */
1443
+ linearBlockChanges?: LinearBlockChange[];
1444
+ /** The routine trained, null once it was deleted; absent before ROUT-18. */
1445
+ routineId?: string | null;
1096
1446
  previousSession: PreviousSessionRecap | null;
1097
1447
  }
1098
1448
  interface SessionRecapExerciseNote {
@@ -2034,6 +2384,8 @@ interface UserProfile {
2034
2384
  weekStartsOn?: WeekStartsOn;
2035
2385
  /** ONBOARD-01: how far the account has come through onboarding. */
2036
2386
  onboarding?: OnboardingState;
2387
+ /** MSG-01: who may start a conversation with this member. */
2388
+ messagePermission?: MessagePermission;
2037
2389
  /** PREF-04: how lengths are shown; a missing one is centimetres. */
2038
2390
  lengthUnit?: LengthUnit;
2039
2391
  followerCount: number;
@@ -2072,6 +2424,11 @@ interface PublicUserProfile {
2072
2424
  * allows it; null while their analytics are not ready.
2073
2425
  */
2074
2426
  rank?: RenaissanceRankDefinition | null;
2427
+ /**
2428
+ * MSG-01: on the authenticated read only, whether the viewer may start a
2429
+ * conversation with this member and the one they already share.
2430
+ */
2431
+ messaging?: MemberMessagingState;
2075
2432
  }
2076
2433
  interface UpdateProfileRequest {
2077
2434
  username?: string;
@@ -3212,6 +3569,14 @@ interface CorrectSessionResponse {
3212
3569
  exerciseId: string;
3213
3570
  exerciseName: string;
3214
3571
  }>;
3572
+ /**
3573
+ * ROUT-17: LP exercises whose block had moved on since this workout, so
3574
+ * the correction did not change it. Absent before ROUT-17.
3575
+ */
3576
+ linearBlockKept?: Array<{
3577
+ exerciseId: string;
3578
+ exerciseName: string;
3579
+ }>;
3215
3580
  }
3216
3581
  /**
3217
3582
  * The window rule, shared so the server and the page state it the same way.
@@ -3497,7 +3862,7 @@ interface SendTrainingPartnerEncouragementResponse {
3497
3862
  * history), a finished session that set records or changed loads, and a new
3498
3863
  * follower.
3499
3864
  */
3500
- declare const NOTIFICATION_KINDS: readonly ["ACHIEVEMENT", "SESSION_PROGRESS", "NEW_FOLLOWER", "ACTIVITY_COMMENT", "TRAINING_PARTNER_ENCOURAGEMENT", "TRAINING_PARTNER_SESSION", "TRAINING_PARTNER_ACHIEVEMENT"];
3865
+ declare const NOTIFICATION_KINDS: readonly ["ACHIEVEMENT", "SESSION_PROGRESS", "NEW_FOLLOWER", "ACTIVITY_COMMENT", "TRAINING_PARTNER_ENCOURAGEMENT", "TRAINING_PARTNER_SESSION", "TRAINING_PARTNER_ACHIEVEMENT", "LINEAR_BLOCK_FINISHED"];
3501
3866
  type NotificationKind = (typeof NOTIFICATION_KINDS)[number];
3502
3867
  /** Sources older than this many days are never gathered. */
3503
3868
  declare const NOTIFICATIONS_LOOKBACK_DAYS = 30;
@@ -3615,8 +3980,28 @@ interface TrainingPartnerAchievementNotification extends TrainingPartnerActivity
3615
3980
  title: string;
3616
3981
  };
3617
3982
  }
3983
+ /**
3984
+ * ROUT-18: an exercise finished its 8-step block in a completed workout. The
3985
+ * estimate is an estimate, never a tested max, and null when the logs did not
3986
+ * allow one. The link is the routine, where the next block is chosen.
3987
+ */
3988
+ interface LinearBlockFinishedNotification extends NotificationBase {
3989
+ kind: 'LINEAR_BLOCK_FINISHED';
3990
+ routine: {
3991
+ id: string;
3992
+ name: string;
3993
+ };
3994
+ exercise: {
3995
+ id: string;
3996
+ name: string;
3997
+ };
3998
+ sessionId: string;
3999
+ /** The finished block's reference max, kg. */
4000
+ referenceMaxKg: number;
4001
+ estimatedMaxKg: number | null;
4002
+ }
3618
4003
  /** Named to stay clear of the DOM's `Notification`. */
3619
- type AppNotification = AchievementNotification | SessionProgressNotification | NewFollowerNotification | ActivityCommentNotification | TrainingPartnerEncouragementNotification | TrainingPartnerSessionNotification | TrainingPartnerAchievementNotification;
4004
+ type AppNotification = AchievementNotification | SessionProgressNotification | NewFollowerNotification | ActivityCommentNotification | TrainingPartnerEncouragementNotification | TrainingPartnerSessionNotification | TrainingPartnerAchievementNotification | LinearBlockFinishedNotification;
3620
4005
  /** GET /notifications?limit=&cursor= */
3621
4006
  interface NotificationsQuery {
3622
4007
  /** 1 to `NOTIFICATIONS_PAGE_SIZE_MAX`; `NOTIFICATIONS_PAGE_SIZE` when left out. */
@@ -4080,6 +4465,17 @@ interface AccountExportV1 {
4080
4465
  reaction: string;
4081
4466
  createdAt: IsoDateString;
4082
4467
  }>;
4468
+ /**
4469
+ * MSG-01: the messages the member wrote and has not deleted, each with
4470
+ * the member it was sent to (null once that account was deleted). Messages
4471
+ * written to them belong to their authors and are not included.
4472
+ */
4473
+ messagesSent?: Array<{
4474
+ to: AccountExportMember | null;
4475
+ conversationId: string;
4476
+ body: string;
4477
+ createdAt: IsoDateString;
4478
+ }>;
4083
4479
  reportsFiled: Array<{
4084
4480
  subjectKind: string;
4085
4481
  reason: string;
@@ -4131,6 +4527,8 @@ declare const API_ERROR_MESSAGES: {
4131
4527
  readonly REPORT_NOT_FOUND: "Report not found";
4132
4528
  readonly REPORT_SUBJECT_NOT_FOUND: "Subject not found";
4133
4529
  readonly REPORTED_CONTENT_GONE: "The reported content no longer exists";
4530
+ readonly CONVERSATION_NOT_FOUND: "Conversation not found";
4531
+ readonly MESSAGE_NOT_FOUND: "Message not found";
4134
4532
  readonly SHARE_LINK_NOT_FOUND: "Share link not found";
4135
4533
  readonly LINK_NOT_FOUND: "Link not found";
4136
4534
  readonly SHARED_SESSION_NOT_FOUND: "Shared session not found";
@@ -4204,6 +4602,13 @@ declare const API_ERROR_MESSAGES: {
4204
4602
  readonly SWAP_SESSION_NOT_ACTIVE: "Exercises can only be swapped in an active session";
4205
4603
  readonly SWAP_SETS_COMPLETED: "This exercise already has completed sets. Swap it before completing any.";
4206
4604
  readonly NOTES_DISCARDED_SESSION: "A discarded workout cannot take notes";
4605
+ readonly LINEAR_BLOCK_INVALID: "This exercise's block is not valid: {reason}";
4606
+ readonly LINEAR_BLOCK_EXTRA_SET: "An exercise on an 8-week block takes no extra sets";
4607
+ readonly LINEAR_BLOCK_KIND_FIXED: "The working sets of an 8-week block cannot change kind";
4608
+ readonly LINEAR_BLOCK_LOAD_FIXED: "The load of an 8-week block is prescribed and cannot be changed";
4609
+ readonly LINEAR_BLOCK_SWAP_ROUTINE: "An exercise on an 8-week block can be swapped for this workout only";
4610
+ readonly LINEAR_BLOCK_NOT_LINEAR: "This exercise is not on an 8-week block";
4611
+ readonly LINEAR_BLOCK_NOT_FINISHED: "This exercise's block has not finished, so there is nothing to choose yet";
4207
4612
  readonly CORRECTION_NOT_COMPLETED: "Only a completed workout can be corrected";
4208
4613
  readonly CORRECTION_NOT_LATEST: "Only your most recent workout can be corrected";
4209
4614
  readonly CORRECTION_LATER_SESSION: "This workout can no longer be corrected: another one has started since";
@@ -4244,6 +4649,13 @@ declare const API_ERROR_MESSAGES: {
4244
4649
  readonly PARTNERS_MAX: "An account can have at most {max} training partners.";
4245
4650
  readonly ENCOURAGEMENTS_MAX: "You can send this partner at most {max} encouragements in 24 hours.";
4246
4651
  readonly ENCOURAGEMENT_RETRY: "Please retry the encouragement.";
4652
+ readonly MESSAGE_SELF: "You cannot message yourself";
4653
+ readonly MESSAGE_LENGTH: "A message must not be empty and may be at most {max} characters.";
4654
+ readonly MESSAGES_PER_MINUTE: "You can send at most {max} messages a minute.";
4655
+ readonly CONVERSATIONS_PER_DAY: "You can start at most {max} new conversations a day.";
4656
+ readonly MESSAGE_NOT_ADMITTED: "This member is not taking messages from you.";
4657
+ readonly CONVERSATION_CLOSED: "This conversation can no longer receive messages.";
4658
+ readonly MESSAGING_UNAVAILABLE: "Messaging is not available for this account.";
4247
4659
  readonly ACCOUNT_CONFLICT: "Account conflict for this email";
4248
4660
  readonly ACCOUNT_DELETE_CONFIRMATION: "Type your username exactly as it appears to confirm.";
4249
4661
  readonly ACCOUNT_DELETE_MODERATOR: "A moderator account cannot be deleted while it holds moderator access.";
@@ -4389,8 +4801,11 @@ interface RecentSearchesResponse {
4389
4801
 
4390
4802
  /** GET, with the usual bearer token. */
4391
4803
  declare const REALTIME_STREAM_PATH = "/realtime/stream";
4392
- /** What a signal can say is out of date. `MSG-01` adds conversations. */
4393
- declare const REALTIME_TOPICS: readonly ["notifications"];
4804
+ /**
4805
+ * What a signal can say is out of date. `conversations` (MSG-01): the
4806
+ * member's conversation list and the messages of each.
4807
+ */
4808
+ declare const REALTIME_TOPICS: readonly ["notifications", "conversations"];
4394
4809
  type RealtimeTopic = (typeof REALTIME_TOPICS)[number];
4395
4810
  type RealtimeEvent =
4396
4811
  /** Sent first on every stream: re-read these topics once. */
@@ -4422,4 +4837,4 @@ declare function isRealtimeTopic(value: unknown): value is RealtimeTopic;
4422
4837
  /** The event in one `data:` payload, or null for anything else. */
4423
4838
  declare function parseRealtimeEvent(data: string): RealtimeEvent | null;
4424
4839
 
4425
- 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, API_ERROR_CODES, API_ERROR_MESSAGES, type AccountExportBodyMeasurement, 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 ApiErrorBody, type ApiErrorCode, type ApiErrorParams, type AppLocale, type AppNotification, BAR_CHOICES_KG, BAR_WARM_UP_STEPS, BLOCKED_MEMBERS_MAX, BODY_MEASUREMENT_FIELDS, BODY_MEASUREMENT_FIELD_KEYS, BODY_PROGRESS_RANGES, type BlockComparisonLift, type BlockComparisonLiftBest, type BlockComparisonPeriod, type BlockComparisonPeriodKind, type BlockedMember, type BlockedMembersResponse, type BodyFieldSummary, type BodyMeasurement, type BodyMeasurementField, type BodyMeasurementProblem, type BodyMeasurementValues, type BodyProgressRange, type BodyProgressResponse, type Brand, CLONE_ROUTINE_REFUSALS, CM_PER_INCH, COMEBACK_MIN_INACTIVE_DAYS, COMEBACK_RECOGNITION_LIMIT, COMEBACK_REQUIRED_ACTIVE_DAYS, COMEBACK_SESSION_LOOKBACK, COMEBACK_WINDOW_DAYS, CUSTOM_EXERCISES_MAX, CUSTOM_EXERCISE_NAME_MAX, CUSTOM_EXERCISE_NOTE_MAX, CUSTOM_EXERCISE_PROBLEM_MESSAGES, CUSTOM_EXERCISE_REFUSALS, 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, type CustomExerciseInput, type CustomExerciseProblem, type CustomExerciseRefusal, DASHBOARD_SECTION_IDS, DEFAULT_DASHBOARD_LAYOUT, DEFAULT_LOCALE, DEFAULT_WEEK_STARTS_ON, DELOAD_DEFAULT_DAYS, DELOAD_DEFAULT_LOAD_REDUCTION, DELOAD_DEFAULT_SET_MODE, DELOAD_LOAD_REDUCTIONS, DELOAD_MAX_DAYS, DELOAD_NOT_LIGHTER, DELOAD_SET_MODES, DELOAD_SUGGESTION_COOLDOWN_DAYS, DELOAD_SUGGESTION_EARLIER_DAYS, DELOAD_SUGGESTION_MIN_MARKED_TODAY, DELOAD_SUGGESTION_ROUTINE_DAYS, DELOAD_SUGGESTION_SIGNALS, type DashboardLayout, type DashboardLayoutEntry, type DashboardSectionId, type DeclineSignal, type DecliningLift, type DecliningLiftSession, type DeleteAccountRequest, type DeleteAccountResponse, type DeleteActivityCommentResponse, type DeletePushSubscriptionRequest, type DeloadLoadReduction, type DeloadOptions, type DeloadSetMode, type DeloadSuggestion, type DeloadSuggestionEvidence, type DeloadSuggestionResponse, type DeloadSuggestionSignal, type DeloadSuggestionUnavailableReason, type DiscoverableRoutine, type DismissGoalSuggestionRequest, EXERCISE_EQUIPMENT, EXERCISE_GROUP_KIND_LABELS, EXERCISE_GROUP_MAX, EXERCISE_MECHANICS, type EarnedAchievement, type EarnedPersonalRecord, type EffortPeriod, type EffortSignal, type Exercise, type ExerciseEquipment, type ExerciseGroup, type ExerciseGroupKind, type ExerciseGroupPosition, 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, GOAL_SUGGESTIONS_MAX, GOAL_SUGGESTION_DISMISSALS_MAX, GOAL_SUGGESTION_LIFT_MIN_SESSIONS, GOAL_SUGGESTION_LIFT_WINDOW_DAYS, GOAL_SUGGESTION_MIN_ACTIVE_WEEKS, GOAL_SUGGESTION_STRENGTH_STEP, GOAL_SUGGESTION_TYPES, GOAL_SUGGESTION_VOLUME_WEEKS, type GoalSuggestion, type GoalSuggestionBasis, type GoalSuggestionType, type GoalSuggestionsResponse, INCHES_PER_FOOT, type IsoDateString, LENGTH_UNITS, LIMITED_SHORTFALL_KG, type LengthUnit, type ListSessionsParams, MAX_SETS_PER_EXERCISE, 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 MemberSearchPage, 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_PAGE_SIZE, NOTIFICATIONS_PAGE_SIZE_MAX, NOTIFICATIONS_RETENTION_DAYS, NOTIFICATION_CATEGORIES, NOTIFICATION_KINDS, type NewFollowerNotification, type NotificationCategory, type NotificationKind, type NotificationPreferences, type NotificationPreferencesResponse, type NotificationsQuery, type NotificationsResponse, ONBOARDING_STEPS_MAX, ONBOARDING_STEP_ID_PATTERN_SOURCE, ONBOARDING_VERSION_MAX, OTHER_WARM_UP_STEPS, type OnboardingState, 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, PLATE_SETS, 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 PlateLoadingItem, type PlateLoadingResult, type PlatePairInventory, type PlateSetChoice, 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, REALTIME_HEARTBEAT_MS, REALTIME_MAX_STREAMS_PER_MEMBER, REALTIME_MAX_STREAM_MS, REALTIME_STREAM_PATH, REALTIME_TOPICS, REALTIME_UNAVAILABLE_RETRY_SECONDS, RECENT_SEARCHES_MAX, RECENT_SEARCH_KINDS, 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 RealtimeEvent, type RealtimeTopic, type RecentActivityEntry, type RecentExercise, type RecentRoutine, type RecentSearchItem, type RecentSearchKind, type RecentSearchesResponse, type RecordRecentSearchRequest, type RegisterPushSubscriptionRequest, type RelationshipListKind, type RelationshipListQuery, type RelationshipListResponse, type RelationshipMember, type RenaissanceRankDefinition, type RenaissanceRankProgress, type RepTargetPeriod, type RepTargetSignal, 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 RoutineSearchPage, 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, SEARCH_PAGE_SIZE, SEARCH_PAGE_SIZE_MAX, SEARCH_PREVIEW_LIMIT, SEARCH_QUERY_MAX_LENGTH, SEARCH_QUERY_MIN_LENGTH, SEARCH_SERVER_CATEGORIES, 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, SET_KINDS, SET_KIND_LABELS, SEXES, SHARED_ROUTINE_SOURCES, STARRED_EXERCISES_MAX, STREAK_MAX_GAP_DAYS, SUPPORTED_LOCALES, type ScheduleOverride, type ScheduleOverrideKind, type ScheduleOverridesQuery, type ScheduleOverridesResponse, type ScheduleRestAlertRequest, type ScheduleRestAlertResponse, type SearchPage, type SearchPageQuery, type SearchPreviewQuery, type SearchPreviewResponse, type SearchServerCategory, 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 SetKind, type SetLog, type SetLogValues, type Sex, type SharedRoutine, type SharedRoutineOwner, type SharedRoutineSearchResult, 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_BLOCK_COMPARISON_MAX_DAYS, 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, TRAINING_SIGNAL_DECLINES_MAX, TRAINING_SIGNAL_DECLINE_SESSIONS, TRAINING_SIGNAL_MIN_DECLINE, TRAINING_SIGNAL_MIN_RPE_SETS, TRAINING_SIGNAL_MIN_SHORT_SETS, TRAINING_SIGNAL_MIN_TARGET_SETS, TRAINING_SIGNAL_PERIOD_DAYS, TRAINING_SIGNAL_RPE_RISE, TRAINING_SIGNAL_SHORT_LIFTS_MAX, TRAINING_SIGNAL_SHORT_POINTS_RISE, TRAINING_SIGNAL_WORKOUT_DROP, type TemporaryOverrideKind, type TemporaryOverrideSource, type TemporaryOverrideSourceKind, type TrainingBlockComparisonResponse, type TrainingDiscipline, type TrainingEventType, type TrainingExperienceLevel, type TrainingGoal, type TrainingIdentity, type TrainingLocationPreference, type TrainingLocationPreferenceInput, type TrainingPartnerAchievementNotification, type TrainingPartnerAchievementPushPayload, type TrainingPartnerEncouragementKind, type TrainingPartnerEncouragementNotification, type TrainingPartnerPermissions, type TrainingPartnerScheduleDay, type TrainingPartnerScheduleResponse, type TrainingPartnerSessionNotification, type TrainingPartnerSessionPushPayload, type TrainingPartnership, type TrainingPartnershipStatus, type TrainingPartnershipsResponse, type TrainingReminderPreference, type TrainingReminderPushPayload, type TrainingSignalPeriod, type TrainingSignalsResponse, USERNAME_MAX_LENGTH, USERNAME_MIN_LENGTH, USERNAME_PATTERN_SOURCE, type UpdateActivitySharingRequest, type UpdateCustomExerciseRequest, type UpdateDashboardLayoutRequest, type UpdateLocaleRequest, type UpdateNotificationPreferencesRequest, type UpdateOnboardingRequest, type UpdateProfileDiscoveryRequest, type UpdateProfilePrivacyRequest, type UpdateProfileRequest, type UpdateRoutineRequest, type UpdateRoutineVisibilityRequest, type UpdateSessionNotesRequest, type UpdateSessionNotesResponse, type UpdateTrainingPartnerPermissionsRequest, type UpdateWeekStartRequest, type UpsertBodyMeasurementRequest, type UpsertRoutineTrainingBlockRequest, type UpsertSetLogRequest, type UpsertSetLogResponse, type UserId, type UserProfile, type UserSearchResponse, type VolumeTrendPoint, type VolumeTrendQuery, type VolumeTrendResponse, type VolumeTrendSeries, WEEK_STARTS, WEIGHT_UNITS, WORKOUT_SESSION_STATUSES, type WarmUpEquipment, type WarmUpLoad, type WarmUpRamp, type WarmUpSet, type WarmUpStep, type WeekStartsOn, type WeightUnit, type WorkoutAnalyticsStatus, type WorkoutPeriod, type WorkoutProgressQuery, type WorkoutProgressResponse, type WorkoutSearchPage, type WorkoutSession, type WorkoutSessionId, type WorkoutSessionListResponse, type WorkoutSessionRecap, type WorkoutSessionSnapshotV1, type WorkoutSessionStatus, type WorkoutSessionSummary, type WorkoutSignal, type WorkoutStatsQuery, type WorkoutStatsResponse, accountExportFileName, apiError, apiErrorMessage, applyDeload, bodyMeasurementProblems, bodyProgressRangeStart, buildWarmUpRamp, calculatePlateLoading, canLinkToNext, cmToFeetInches, cmToInches, countsAsWork, countsForProgression, customExerciseProblem, defaultWarmUpEquipment, deloadLengthDays, exerciseGroupLabel, exerciseGroupPosition, exerciseGroups, exerciseNameKey, feetInchesToCm, followWorkingLoad, goalSuggestionKey, hasOversizedGroup, inchesToCm, isApiErrorCode, isAppLocale, isBarLoaded, isBodyMeasurementDate, isDashboardSectionId, isDefaultDashboardLayout, isGoalSuggestionKey, isOnboardingStepId, isRealtimeTopic, isSetKind, isWeekStartsOn, isWithinQuietHours, latestBodyWeight, leadWorkingWeight, matchesDeletionConfirmation, normalizeDashboardLayout, normalizeExerciseLinks, normalizeExerciseName, normalizeSearchQuery, parseRealtimeEvent, primaryEquipment, requiredToFinish, resolveActiveTrainingBlock, resolveRoutinePlan, routineDayLabel, sessionCorrectionWindow, setKindOf, setLogValuesDiffer, summarizeBodyProgress, trainingBlockCovers, warmUpLoad, weekStartOf };
4840
+ 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, API_ERROR_CODES, API_ERROR_MESSAGES, type AccountExportBodyMeasurement, 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 ApiErrorBody, type ApiErrorCode, type ApiErrorParams, type AppLocale, type AppNotification, BAR_CHOICES_KG, BAR_WARM_UP_STEPS, BLOCKED_MEMBERS_MAX, BODY_MEASUREMENT_FIELDS, BODY_MEASUREMENT_FIELD_KEYS, BODY_PROGRESS_RANGES, type BlockComparisonLift, type BlockComparisonLiftBest, type BlockComparisonPeriod, type BlockComparisonPeriodKind, type BlockedMember, type BlockedMembersResponse, type BodyFieldSummary, type BodyMeasurement, type BodyMeasurementField, type BodyMeasurementProblem, type BodyMeasurementValues, type BodyProgressRange, type BodyProgressResponse, type Brand, CLONE_ROUTINE_REFUSALS, CM_PER_INCH, COMEBACK_MIN_INACTIVE_DAYS, COMEBACK_RECOGNITION_LIMIT, COMEBACK_REQUIRED_ACTIVE_DAYS, COMEBACK_SESSION_LOOKBACK, COMEBACK_WINDOW_DAYS, CONVERSATIONS_PAGE_SIZE, CUSTOM_EXERCISES_MAX, CUSTOM_EXERCISE_NAME_MAX, CUSTOM_EXERCISE_NOTE_MAX, CUSTOM_EXERCISE_PROBLEM_MESSAGES, CUSTOM_EXERCISE_REFUSALS, type CalendarDate, type CloneRoutineRefusal, type CloneRoutineRequest, type ComebackActivity, type ComebackRecognition, type ComebackRecognitionSummary, type ContinueLinearBlockRequest, type ConversationMember, type ConversationMessage, type ConversationMessagesResponse, type ConversationSummary, type ConversationsResponse, 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, type CustomExerciseInput, type CustomExerciseProblem, type CustomExerciseRefusal, DASHBOARD_SECTION_IDS, DEFAULT_DASHBOARD_LAYOUT, DEFAULT_LOCALE, DEFAULT_MESSAGE_PERMISSION, DEFAULT_WEEK_STARTS_ON, DELOAD_DEFAULT_DAYS, DELOAD_DEFAULT_LOAD_REDUCTION, DELOAD_DEFAULT_SET_MODE, DELOAD_LOAD_REDUCTIONS, DELOAD_MAX_DAYS, DELOAD_NOT_LIGHTER, DELOAD_SET_MODES, DELOAD_SUGGESTION_COOLDOWN_DAYS, DELOAD_SUGGESTION_EARLIER_DAYS, DELOAD_SUGGESTION_MIN_MARKED_TODAY, DELOAD_SUGGESTION_ROUTINE_DAYS, DELOAD_SUGGESTION_SIGNALS, type DashboardLayout, type DashboardLayoutEntry, type DashboardSectionId, type DeclineSignal, type DecliningLift, type DecliningLiftSession, type DeleteAccountRequest, type DeleteAccountResponse, type DeleteActivityCommentResponse, type DeletePushSubscriptionRequest, type DeloadLoadReduction, type DeloadOptions, type DeloadSetMode, type DeloadSuggestion, type DeloadSuggestionEvidence, type DeloadSuggestionResponse, type DeloadSuggestionSignal, type DeloadSuggestionUnavailableReason, type DiscoverableRoutine, type DismissGoalSuggestionRequest, EXERCISE_EQUIPMENT, EXERCISE_GROUP_KIND_LABELS, EXERCISE_GROUP_MAX, EXERCISE_MECHANICS, type EarnedAchievement, type EarnedPersonalRecord, type EffortPeriod, type EffortSignal, type Exercise, type ExerciseEquipment, type ExerciseGroup, type ExerciseGroupKind, type ExerciseGroupPosition, 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, GOAL_SUGGESTIONS_MAX, GOAL_SUGGESTION_DISMISSALS_MAX, GOAL_SUGGESTION_LIFT_MIN_SESSIONS, GOAL_SUGGESTION_LIFT_WINDOW_DAYS, GOAL_SUGGESTION_MIN_ACTIVE_WEEKS, GOAL_SUGGESTION_STRENGTH_STEP, GOAL_SUGGESTION_TYPES, GOAL_SUGGESTION_VOLUME_WEEKS, type GoalSuggestion, type GoalSuggestionBasis, type GoalSuggestionType, type GoalSuggestionsResponse, INCHES_PER_FOOT, type IsoDateString, LENGTH_UNITS, LIMITED_SHORTFALL_KG, LP_BLOCK_STEPS, LP_ESTIMATE_MAX_REPS_TO_FAILURE, LP_ESTIMATE_MIN_SETS, LP_ESTIMATE_STEPS, LP_NEXT_BLOCK_KINDS, LP_PHASES, LP_PROGRESS_CAP, LP_PROGRESS_THRESHOLD, LP_RECOVERY, LP_REFERENCE_MAX_KG, LP_REST_SECONDS, LP_STEPS, LP_WORKING_SETS, type LengthUnit, type LinearBlockChange, type LinearBlockFinishedNotification, type LinearPeriodizationState, type ListSessionsParams, type LpEstimate, type LpLoggedSet, type LpNextBlockKind, type LpPhase, type LpRecommendation, type LpSample, type LpSetPrescription, type LpSetTarget, type LpStep, type LpStoredSet, MAX_SETS_PER_EXERCISE, MEASURABLE_GOALS_MAX, MEASURABLE_GOAL_DIRECTIONS, MEASURABLE_GOAL_TYPES, MESSAGES_PAGE_SIZE, MESSAGES_PER_MINUTE_MAX, MESSAGE_BODY_MAX, MESSAGE_PERMISSIONS, 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 MemberMessagingState, type MemberModerationState, type MemberRoutinesResponse, type MemberSearchPage, type MessagePermission, 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, NEW_CONVERSATIONS_PER_DAY_MAX, NOTIFICATIONS_LIST_LIMIT, NOTIFICATIONS_LOOKBACK_DAYS, NOTIFICATIONS_PAGE_SIZE, NOTIFICATIONS_PAGE_SIZE_MAX, NOTIFICATIONS_RETENTION_DAYS, NOTIFICATION_CATEGORIES, NOTIFICATION_KINDS, type NewFollowerNotification, type NotificationCategory, type NotificationKind, type NotificationPreferences, type NotificationPreferencesResponse, type NotificationsQuery, type NotificationsResponse, ONBOARDING_STEPS_MAX, ONBOARDING_STEP_ID_PATTERN_SOURCE, ONBOARDING_VERSION_MAX, OTHER_WARM_UP_STEPS, type OnboardingState, 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, PLATE_SETS, 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 PlateLoadingItem, type PlateLoadingResult, type PlatePairInventory, type PlateSetChoice, 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, REALTIME_HEARTBEAT_MS, REALTIME_MAX_STREAMS_PER_MEMBER, REALTIME_MAX_STREAM_MS, REALTIME_STREAM_PATH, REALTIME_TOPICS, REALTIME_UNAVAILABLE_RETRY_SECONDS, RECENT_SEARCHES_MAX, RECENT_SEARCH_KINDS, 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 RealtimeEvent, type RealtimeTopic, type RecentActivityEntry, type RecentExercise, type RecentRoutine, type RecentSearchItem, type RecentSearchKind, type RecentSearchesResponse, type RecordRecentSearchRequest, type RegisterPushSubscriptionRequest, type RelationshipListKind, type RelationshipListQuery, type RelationshipListResponse, type RelationshipMember, type RenaissanceRankDefinition, type RenaissanceRankProgress, type RepTargetPeriod, type RepTargetSignal, 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 RoutineSearchPage, 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, SEARCH_PAGE_SIZE, SEARCH_PAGE_SIZE_MAX, SEARCH_PREVIEW_LIMIT, SEARCH_QUERY_MAX_LENGTH, SEARCH_QUERY_MIN_LENGTH, SEARCH_SERVER_CATEGORIES, 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, SET_KINDS, SET_KIND_LABELS, SEXES, SHARED_ROUTINE_SOURCES, STARRED_EXERCISES_MAX, STREAK_MAX_GAP_DAYS, SUPPORTED_LOCALES, type ScheduleOverride, type ScheduleOverrideKind, type ScheduleOverridesQuery, type ScheduleOverridesResponse, type ScheduleRestAlertRequest, type ScheduleRestAlertResponse, type SearchPage, type SearchPageQuery, type SearchPreviewQuery, type SearchPreviewResponse, type SearchServerCategory, type SendMessageRequest, type SendMessageResponse, 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 SetKind, type SetLog, type SetLogValues, type Sex, type SharedRoutine, type SharedRoutineOwner, type SharedRoutineSearchResult, type SharedRoutineSource, type SharedRoutineSummary, type SharedSessionOwner, type SharedSessionRecap, type SkipOccurrenceRequest, type StarredExercise, type StarredExercisesResponse, type StartConversationRequest, 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_BLOCK_COMPARISON_MAX_DAYS, 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, TRAINING_SIGNAL_DECLINES_MAX, TRAINING_SIGNAL_DECLINE_SESSIONS, TRAINING_SIGNAL_MIN_DECLINE, TRAINING_SIGNAL_MIN_RPE_SETS, TRAINING_SIGNAL_MIN_SHORT_SETS, TRAINING_SIGNAL_MIN_TARGET_SETS, TRAINING_SIGNAL_PERIOD_DAYS, TRAINING_SIGNAL_RPE_RISE, TRAINING_SIGNAL_SHORT_LIFTS_MAX, TRAINING_SIGNAL_SHORT_POINTS_RISE, TRAINING_SIGNAL_WORKOUT_DROP, type TemporaryOverrideKind, type TemporaryOverrideSource, type TemporaryOverrideSourceKind, type TrainingBlockComparisonResponse, type TrainingDiscipline, type TrainingEventType, type TrainingExperienceLevel, type TrainingGoal, type TrainingIdentity, type TrainingLocationPreference, type TrainingLocationPreferenceInput, type TrainingPartnerAchievementNotification, type TrainingPartnerAchievementPushPayload, type TrainingPartnerEncouragementKind, type TrainingPartnerEncouragementNotification, type TrainingPartnerPermissions, type TrainingPartnerScheduleDay, type TrainingPartnerScheduleResponse, type TrainingPartnerSessionNotification, type TrainingPartnerSessionPushPayload, type TrainingPartnership, type TrainingPartnershipStatus, type TrainingPartnershipsResponse, type TrainingReminderPreference, type TrainingReminderPushPayload, type TrainingSignalPeriod, type TrainingSignalsResponse, USERNAME_MAX_LENGTH, USERNAME_MIN_LENGTH, USERNAME_PATTERN_SOURCE, type UpdateActivitySharingRequest, type UpdateCustomExerciseRequest, type UpdateDashboardLayoutRequest, type UpdateLocaleRequest, type UpdateMessagePermissionRequest, type UpdateNotificationPreferencesRequest, type UpdateOnboardingRequest, type UpdateProfileDiscoveryRequest, type UpdateProfilePrivacyRequest, type UpdateProfileRequest, type UpdateRoutineRequest, type UpdateRoutineVisibilityRequest, type UpdateSessionNotesRequest, type UpdateSessionNotesResponse, type UpdateTrainingPartnerPermissionsRequest, type UpdateWeekStartRequest, type UpsertBodyMeasurementRequest, type UpsertRoutineTrainingBlockRequest, type UpsertSetLogRequest, type UpsertSetLogResponse, type UserId, type UserProfile, type UserSearchResponse, type VolumeTrendPoint, type VolumeTrendQuery, type VolumeTrendResponse, type VolumeTrendSeries, WEEK_STARTS, WEIGHT_UNITS, WORKOUT_SESSION_STATUSES, type WarmUpEquipment, type WarmUpLoad, type WarmUpRamp, type WarmUpSet, type WarmUpStep, type WeekStartsOn, type WeightUnit, type WorkoutAnalyticsStatus, type WorkoutPeriod, type WorkoutProgressQuery, type WorkoutProgressResponse, type WorkoutSearchPage, type WorkoutSession, type WorkoutSessionId, type WorkoutSessionListResponse, type WorkoutSessionRecap, type WorkoutSessionSnapshotV1, type WorkoutSessionStatus, type WorkoutSessionSummary, type WorkoutSignal, type WorkoutStatsQuery, type WorkoutStatsResponse, accountExportFileName, advanceLinearPeriodization, apiError, apiErrorMessage, applyDeload, bodyMeasurementProblems, bodyProgressRangeStart, buildWarmUpRamp, calculatePlateLoading, canLinkToNext, cmToFeetInches, cmToInches, continueLinearPeriodization, countsAsWork, countsForProgression, customExerciseProblem, defaultWarmUpEquipment, deloadLengthDays, exerciseGroupLabel, exerciseGroupPosition, exerciseGroups, exerciseNameKey, feetInchesToCm, followWorkingLoad, goalSuggestionKey, hasOversizedGroup, inchesToCm, isApiErrorCode, isAppLocale, isBarLoaded, isBodyMeasurementDate, isDashboardSectionId, isDefaultDashboardLayout, isGoalSuggestionKey, isMessagePermission, isOnboardingStepId, isRealtimeTopic, isSetKind, isWeekStartsOn, isWithinQuietHours, latestBodyWeight, leadWorkingWeight, linearPeriodizationProblem, lpEstimate, lpLoadKg, lpPrescription, lpRecommendation, lpRirMidpoint, lpSampleRir, lpSetEstimateKg, lpStep, lpStoredSets, lpWorkingSets, matchesDeletionConfirmation, messageBodyLength, normalizeDashboardLayout, normalizeExerciseLinks, normalizeExerciseName, normalizeMessageBody, normalizeSearchQuery, parseRealtimeEvent, primaryEquipment, requiredToFinish, resolveActiveTrainingBlock, resolveRoutinePlan, roundDownToIncrement, roundToIncrement, routineDayLabel, sameLpPosition, sessionCorrectionWindow, setKindOf, setLogValuesDiffer, startLinearPeriodization, summarizeBodyProgress, trainingBlockCovers, warmUpLoad, weekStartOf };