@sunsteel/contracts 0.92.0 → 0.93.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.cjs +2 -1
- package/dist/index.d.cts +658 -600
- package/dist/index.d.ts +658 -600
- package/dist/index.js +2 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -981,693 +981,743 @@ declare const CLONE_ROUTINE_REFUSALS: {
|
|
|
981
981
|
};
|
|
982
982
|
type CloneRoutineRefusal = (typeof CLONE_ROUTINE_REFUSALS)[keyof typeof CLONE_ROUTINE_REFUSALS];
|
|
983
983
|
|
|
984
|
-
|
|
985
|
-
* Who may start a conversation with a member. `FOLLOWED`: members they follow.
|
|
986
|
-
* `EVERYONE` (MSG-02): members they follow reach the inbox, anyone else lands
|
|
987
|
-
* in Requests. `NOBODY`: no one may start a new one.
|
|
988
|
-
*/
|
|
989
|
-
declare const MESSAGE_PERMISSIONS: readonly ["FOLLOWED", "EVERYONE", "NOBODY"];
|
|
990
|
-
type MessagePermission = (typeof MESSAGE_PERMISSIONS)[number];
|
|
991
|
-
declare const DEFAULT_MESSAGE_PERMISSION: MessagePermission;
|
|
992
|
-
/** Characters in one message, counted as code points. */
|
|
993
|
-
declare const MESSAGE_BODY_MAX = 2000;
|
|
994
|
-
/** Messages one member may send in a rolling minute. */
|
|
995
|
-
declare const MESSAGES_PER_MINUTE_MAX = 30;
|
|
996
|
-
/** Conversations one member may start in a rolling day. */
|
|
997
|
-
declare const NEW_CONVERSATIONS_PER_DAY_MAX = 20;
|
|
998
|
-
declare const CONVERSATIONS_PAGE_SIZE = 20;
|
|
999
|
-
declare const MESSAGES_PAGE_SIZE = 30;
|
|
1000
|
-
/** Length as a reader counts it: an emoji is one character, not two. */
|
|
1001
|
-
declare function messageBodyLength(body: string): number;
|
|
1002
|
-
/**
|
|
1003
|
-
* The stored form of a typed message: line endings made `\n` and the ends
|
|
1004
|
-
* trimmed, the lines in between kept as written. Null when it is empty or too
|
|
1005
|
-
* long -- it is refused rather than cut, because a message clipped mid-sentence
|
|
1006
|
-
* would misrepresent its author.
|
|
1007
|
-
*/
|
|
1008
|
-
declare function normalizeMessageBody(body: string): string | null;
|
|
1009
|
-
/**
|
|
1010
|
-
* MSG-07: what a message, its text left empty or not, may carry. A routine
|
|
1011
|
-
* travels with an optional note.
|
|
1012
|
-
*/
|
|
1013
|
-
declare const MESSAGE_ATTACHMENT_KINDS: readonly ["ROUTINE"];
|
|
1014
|
-
type MessageAttachmentKind = (typeof MESSAGE_ATTACHMENT_KINDS)[number];
|
|
1015
|
-
/**
|
|
1016
|
-
* MSG-07: a routine in a message, as it is now. `routine` is null once it is
|
|
1017
|
-
* no longer available -- deleted, or hidden by moderation -- and the card
|
|
1018
|
-
* says so rather than showing what it once was.
|
|
1019
|
-
*/
|
|
1020
|
-
interface MessageRoutineAttachment {
|
|
1021
|
-
kind: "ROUTINE";
|
|
1022
|
-
routine: SharedRoutineSummary | null;
|
|
1023
|
-
}
|
|
1024
|
-
type MessageAttachment = MessageRoutineAttachment;
|
|
1025
|
-
/**
|
|
1026
|
-
* MSG-07: the stored text of a message. A message with a routine may leave it
|
|
1027
|
-
* empty (null); one without must say something. Undefined when the text is
|
|
1028
|
-
* refused: empty with nothing attached, or too long.
|
|
1029
|
-
*/
|
|
1030
|
-
declare function messageNote(body: string | undefined | null, hasAttachment: boolean): string | null | undefined;
|
|
1031
|
-
/** The other participant, or null once their account was deleted. */
|
|
1032
|
-
interface ConversationMember {
|
|
984
|
+
interface SetLog {
|
|
1033
985
|
id: string;
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
986
|
+
sessionId: string;
|
|
987
|
+
routineExerciseId: string;
|
|
988
|
+
exerciseId: string;
|
|
989
|
+
setNumber: number;
|
|
990
|
+
reps: number;
|
|
991
|
+
weight?: number | null;
|
|
992
|
+
rpe?: number | null;
|
|
993
|
+
isCompleted: boolean;
|
|
994
|
+
/** LIVE-12: what this set was for in this workout. */
|
|
995
|
+
kind: SetKind;
|
|
996
|
+
completedAt?: IsoDateString | null;
|
|
997
|
+
createdAt: IsoDateString;
|
|
998
|
+
updatedAt: IsoDateString;
|
|
1037
999
|
}
|
|
1038
|
-
interface
|
|
1000
|
+
interface WorkoutSession {
|
|
1039
1001
|
id: string;
|
|
1040
|
-
|
|
1002
|
+
userId: string;
|
|
1003
|
+
routineId: string;
|
|
1004
|
+
routineDayId: string;
|
|
1005
|
+
status: WorkoutSessionStatus;
|
|
1006
|
+
startedAt: IsoDateString;
|
|
1007
|
+
endedAt?: IsoDateString | null;
|
|
1008
|
+
durationSec?: number | null;
|
|
1009
|
+
notes?: string | null;
|
|
1010
|
+
lastActivityAt?: IsoDateString | null;
|
|
1011
|
+
setLogs?: SetLog[];
|
|
1041
1012
|
/**
|
|
1042
|
-
*
|
|
1043
|
-
*
|
|
1044
|
-
*
|
|
1013
|
+
* LIVE-11: slots performed with a different exercise in this session. The
|
|
1014
|
+
* routine day (snapshot) keeps the original prescription; set logs for a
|
|
1015
|
+
* substituted slot carry the substitute's `exerciseId`.
|
|
1045
1016
|
*/
|
|
1046
|
-
|
|
1047
|
-
deleted: boolean;
|
|
1017
|
+
exerciseSubstitutions?: SessionExerciseSubstitution[];
|
|
1048
1018
|
/**
|
|
1049
|
-
*
|
|
1050
|
-
*
|
|
1051
|
-
* is
|
|
1019
|
+
* LIVE-16: what the owner noted about one exercise in this workout. The
|
|
1020
|
+
* routine's own note (`routineDay.exercises[].note`) is the standing
|
|
1021
|
+
* instruction and is never written from a session.
|
|
1052
1022
|
*/
|
|
1053
|
-
|
|
1023
|
+
exerciseNotes?: SessionExerciseNote[];
|
|
1024
|
+
reused?: boolean;
|
|
1054
1025
|
/**
|
|
1055
|
-
*
|
|
1056
|
-
*
|
|
1057
|
-
*
|
|
1026
|
+
* ROUT-15: the training block this session trained, or null when it
|
|
1027
|
+
* trained the routine's baseline. Copied at start, so a later revision or
|
|
1028
|
+
* the block's end never rewrites what the session was.
|
|
1058
1029
|
*/
|
|
1059
|
-
|
|
1060
|
-
|
|
1030
|
+
trainingBlock?: SessionTrainingBlock | null;
|
|
1031
|
+
/**
|
|
1032
|
+
* ROUT-16: the deload this session trained, or null. A deload session
|
|
1033
|
+
* never advances progression.
|
|
1034
|
+
*/
|
|
1035
|
+
temporaryOverride?: SessionTemporaryOverride | null;
|
|
1036
|
+
routine?: {
|
|
1037
|
+
id: string;
|
|
1038
|
+
name: string;
|
|
1039
|
+
description?: string | null;
|
|
1040
|
+
};
|
|
1041
|
+
routineDay?: {
|
|
1042
|
+
id: string;
|
|
1043
|
+
name?: string | null;
|
|
1044
|
+
order?: number;
|
|
1045
|
+
/** Null on a ROTATION routine day (ROUT-11). */
|
|
1046
|
+
dayOfWeek?: number | null;
|
|
1047
|
+
exercises: Array<{
|
|
1048
|
+
id: string;
|
|
1049
|
+
order: number;
|
|
1050
|
+
restSeconds?: number | null;
|
|
1051
|
+
note?: string | null;
|
|
1052
|
+
progressionScheme: ProgressionScheme;
|
|
1053
|
+
minWeightIncrement: number;
|
|
1054
|
+
/** ROUT-12: done in rounds with the next exercise of the day. */
|
|
1055
|
+
linkedToNext?: boolean;
|
|
1056
|
+
/**
|
|
1057
|
+
* ROUT-17: the slot's block as it stood when the workout started; the
|
|
1058
|
+
* sets' weights are the step's prescribed loads.
|
|
1059
|
+
*/
|
|
1060
|
+
linearPeriodization?: LinearPeriodizationState | null;
|
|
1061
|
+
exercise: {
|
|
1062
|
+
id: string;
|
|
1063
|
+
name: string;
|
|
1064
|
+
primaryMuscles: MuscleGroup[];
|
|
1065
|
+
secondaryMuscles?: MuscleGroup[];
|
|
1066
|
+
};
|
|
1067
|
+
sets: Array<{
|
|
1068
|
+
id: string;
|
|
1069
|
+
setNumber: number;
|
|
1070
|
+
repType: RepType;
|
|
1071
|
+
reps?: number | null;
|
|
1072
|
+
minReps?: number | null;
|
|
1073
|
+
maxReps?: number | null;
|
|
1074
|
+
weight?: number | null;
|
|
1075
|
+
rir?: number | null;
|
|
1076
|
+
/** LIVE-12; absent on snapshots captured before it: a working set. */
|
|
1077
|
+
kind?: SetKind;
|
|
1078
|
+
}>;
|
|
1079
|
+
}>;
|
|
1080
|
+
};
|
|
1081
|
+
}
|
|
1082
|
+
/** Completed set from the latest earlier execution of the same routine day. */
|
|
1083
|
+
interface PreviousSetPerformance {
|
|
1084
|
+
routineExerciseId: string;
|
|
1085
|
+
exerciseId: string;
|
|
1086
|
+
setNumber: number;
|
|
1087
|
+
reps: number;
|
|
1088
|
+
weight?: number | null;
|
|
1089
|
+
rpe?: number | null;
|
|
1090
|
+
}
|
|
1091
|
+
/** Stable successful response of GET /workouts/sessions/:id/previous-performance. */
|
|
1092
|
+
interface PreviousPerformanceResponse {
|
|
1093
|
+
sessionId: string;
|
|
1094
|
+
endedAt: IsoDateString;
|
|
1095
|
+
sets: PreviousSetPerformance[];
|
|
1096
|
+
}
|
|
1097
|
+
interface StartWorkoutRequest {
|
|
1098
|
+
routineId: string;
|
|
1099
|
+
routineDayId: string;
|
|
1100
|
+
notes?: string;
|
|
1101
|
+
}
|
|
1102
|
+
interface StartWorkoutResponse {
|
|
1103
|
+
id: string;
|
|
1104
|
+
routineId: string;
|
|
1105
|
+
routineDayId: string;
|
|
1106
|
+
status: WorkoutSessionStatus;
|
|
1107
|
+
startedAt: IsoDateString;
|
|
1108
|
+
endedAt?: IsoDateString | null;
|
|
1109
|
+
reused: boolean;
|
|
1110
|
+
}
|
|
1111
|
+
type FinishStatus = Extract<WorkoutSessionStatus, 'COMPLETED' | 'ABORTED'>;
|
|
1112
|
+
interface FinishWorkoutRequest {
|
|
1113
|
+
status: FinishStatus;
|
|
1114
|
+
notes?: string;
|
|
1115
|
+
}
|
|
1116
|
+
type ProgressionRule = 'ALL_SETS_REACHED_TARGET' | 'SET_REACHED_TARGET';
|
|
1117
|
+
interface ProgressionSetChange {
|
|
1118
|
+
setNumber: number;
|
|
1119
|
+
targetReps: number;
|
|
1120
|
+
performedReps: number;
|
|
1121
|
+
previousWeightKg: number;
|
|
1122
|
+
newWeightKg: number;
|
|
1123
|
+
}
|
|
1124
|
+
/** An automatic prescription update produced while completing a session. */
|
|
1125
|
+
interface ProgressionChange {
|
|
1126
|
+
routineExerciseId: string;
|
|
1127
|
+
exerciseId: string;
|
|
1128
|
+
exerciseName: string;
|
|
1129
|
+
progressionScheme: Extract<ProgressionScheme, 'DOUBLE_PROGRESSION' | 'DYNAMIC_DOUBLE_PROGRESSION'>;
|
|
1130
|
+
rule: ProgressionRule;
|
|
1131
|
+
minWeightIncrementKg: number;
|
|
1132
|
+
sets: ProgressionSetChange[];
|
|
1061
1133
|
}
|
|
1062
1134
|
/**
|
|
1063
|
-
*
|
|
1064
|
-
*
|
|
1065
|
-
*
|
|
1135
|
+
* ROUT-17/ROUT-18: one LP slot's block moved by a completed workout -- a step
|
|
1136
|
+
* done, the block finished, or the recovery step done and the next block
|
|
1137
|
+
* begun. `after.phase === 'FINISHED'` with `before.phase === 'BLOCK'` is the
|
|
1138
|
+
* block finishing; its estimate is `after.estimatedMaxKg`, from
|
|
1139
|
+
* `after.samples`.
|
|
1066
1140
|
*/
|
|
1067
|
-
interface
|
|
1068
|
-
|
|
1141
|
+
interface LinearBlockChange {
|
|
1142
|
+
routineExerciseId: string;
|
|
1143
|
+
exerciseId: string;
|
|
1144
|
+
exerciseName: string;
|
|
1145
|
+
/** The exercise's increment, kg, for rounding the estimate's sets. */
|
|
1146
|
+
minWeightIncrementKg: number;
|
|
1147
|
+
before: LinearPeriodizationState;
|
|
1148
|
+
after: LinearPeriodizationState;
|
|
1069
1149
|
}
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
/**
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
*/
|
|
1087
|
-
messagingRestricted: boolean;
|
|
1088
|
-
/**
|
|
1089
|
-
* MSG-03: the other member wrote something the viewer has not seen -- a
|
|
1090
|
-
* message after the viewer's read position that is neither deleted nor
|
|
1091
|
-
* removed for them. The viewer's own messages never count.
|
|
1092
|
-
*/
|
|
1093
|
-
unread: boolean;
|
|
1150
|
+
/** Stable successful response of PATCH /workouts/sessions/:id/finish. */
|
|
1151
|
+
interface FinishWorkoutResponse {
|
|
1152
|
+
session: WorkoutSession;
|
|
1153
|
+
progressionChanges: ProgressionChange[];
|
|
1154
|
+
/** ROUT-17; absent from servers before it. */
|
|
1155
|
+
linearBlockChanges?: LinearBlockChange[];
|
|
1156
|
+
recap: WorkoutSessionRecap | null;
|
|
1157
|
+
}
|
|
1158
|
+
interface UpsertSetLogRequest {
|
|
1159
|
+
routineExerciseId: string;
|
|
1160
|
+
exerciseId: string;
|
|
1161
|
+
setNumber: number;
|
|
1162
|
+
reps: number;
|
|
1163
|
+
weight?: number;
|
|
1164
|
+
rpe?: number;
|
|
1165
|
+
isCompleted?: boolean;
|
|
1094
1166
|
/**
|
|
1095
|
-
*
|
|
1096
|
-
*
|
|
1097
|
-
*
|
|
1167
|
+
* LIVE-12: change what the set is for. Omitted, a new set takes its
|
|
1168
|
+
* prescription's kind (an added set is working) and an existing one keeps
|
|
1169
|
+
* its own.
|
|
1098
1170
|
*/
|
|
1099
|
-
|
|
1100
|
-
/** MSG-02: null once accepted, or for a conversation that never was a request. */
|
|
1101
|
-
request: ConversationRequest | null;
|
|
1171
|
+
kind?: SetKind;
|
|
1102
1172
|
}
|
|
1103
1173
|
/**
|
|
1104
|
-
*
|
|
1105
|
-
*
|
|
1106
|
-
|
|
1107
|
-
declare const CONVERSATION_BOXES: readonly ["INBOX", "REQUESTS"];
|
|
1108
|
-
type ConversationBox = (typeof CONVERSATION_BOXES)[number];
|
|
1109
|
-
/**
|
|
1110
|
-
* MSG-02: after a decline, the same member's new request is refused for this
|
|
1111
|
-
* many days, unless the recipient follows them or writes first.
|
|
1112
|
-
*/
|
|
1113
|
-
declare const MESSAGE_REQUEST_DECLINE_COOLDOWN_DAYS = 30;
|
|
1114
|
-
/**
|
|
1115
|
-
* MSG-08: a message push waits this long and is dropped if the conversation
|
|
1116
|
-
* was read meanwhile, so two members talking live do not buzz each other.
|
|
1174
|
+
* LIVE-11: an exercise performed in place of one routine slot for a single
|
|
1175
|
+
* session. The substitute's muscles are captured when the swap is made, so
|
|
1176
|
+
* later catalog changes cannot rewrite what the session trained.
|
|
1117
1177
|
*/
|
|
1118
|
-
|
|
1119
|
-
/**
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1178
|
+
interface SessionExerciseSubstitution {
|
|
1179
|
+
/** The replaced slot, as in `routineDay.exercises[].id`. */
|
|
1180
|
+
routineExerciseId: string;
|
|
1181
|
+
exercise: {
|
|
1182
|
+
id: string;
|
|
1183
|
+
name: string;
|
|
1184
|
+
primaryMuscles: MuscleGroup[];
|
|
1185
|
+
secondaryMuscles: MuscleGroup[];
|
|
1186
|
+
};
|
|
1187
|
+
substitutedAt: IsoDateString;
|
|
1188
|
+
}
|
|
1189
|
+
declare const SESSION_NOTE_MAX_LENGTH = 2000;
|
|
1190
|
+
declare const SESSION_EXERCISE_NOTE_MAX_LENGTH = 500;
|
|
1191
|
+
/** One exercise's note for one workout, keyed by its routine slot. */
|
|
1192
|
+
interface SessionExerciseNote {
|
|
1193
|
+
/** The slot, as in `routineDay.exercises[].id`. */
|
|
1194
|
+
routineExerciseId: string;
|
|
1195
|
+
note: string;
|
|
1125
1196
|
}
|
|
1126
1197
|
/**
|
|
1127
|
-
*
|
|
1128
|
-
*
|
|
1129
|
-
|
|
1130
|
-
declare const MESSAGE_REPORT_CONTEXT_BEFORE = 5;
|
|
1131
|
-
/**
|
|
1132
|
-
* MSG-03: POST /conversations/:id/read. Moves the viewer's read position to
|
|
1133
|
-
* the message they have seen (`through`, the newest one on their screen),
|
|
1134
|
-
* never backwards, so a message that arrived after it stays unread.
|
|
1198
|
+
* Body of PUT /workouts/sessions/:id/notes. Partial: an omitted field keeps
|
|
1199
|
+
* what is stored, `null` or an empty string clears it. Exercise notes merge
|
|
1200
|
+
* by slot, so two notes saved moments apart cannot overwrite each other.
|
|
1135
1201
|
*/
|
|
1136
|
-
interface
|
|
1137
|
-
|
|
1202
|
+
interface UpdateSessionNotesRequest {
|
|
1203
|
+
notes?: string | null;
|
|
1204
|
+
exerciseNotes?: Array<{
|
|
1205
|
+
routineExerciseId: string;
|
|
1206
|
+
note: string | null;
|
|
1207
|
+
}>;
|
|
1138
1208
|
}
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
unreadConversations: number;
|
|
1143
|
-
/**
|
|
1144
|
-
* MSG-02: requests waiting for the viewer. For the Requests tab only: they
|
|
1145
|
-
* never count in the navigation (owner, 2026-10-06).
|
|
1146
|
-
*/
|
|
1147
|
-
requests: number;
|
|
1209
|
+
interface UpdateSessionNotesResponse {
|
|
1210
|
+
notes: string | null;
|
|
1211
|
+
exerciseNotes: SessionExerciseNote[];
|
|
1148
1212
|
}
|
|
1149
|
-
/**
|
|
1150
|
-
interface
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1213
|
+
/** Body of PUT /workouts/sessions/:id/exercises/:routineExerciseId/substitution. */
|
|
1214
|
+
interface SubstituteSessionExerciseRequest {
|
|
1215
|
+
exerciseId: string;
|
|
1216
|
+
/** Also use this exercise in the routine from the next session on. */
|
|
1217
|
+
applyToRoutine?: boolean;
|
|
1154
1218
|
}
|
|
1155
1219
|
/**
|
|
1156
|
-
*
|
|
1157
|
-
*
|
|
1158
|
-
*
|
|
1220
|
+
* Stable successful response of the substitution PUT and DELETE. A swap is
|
|
1221
|
+
* refused once the slot has a completed set; incomplete drafts for the slot
|
|
1222
|
+
* are cleared because their values belonged to the other exercise.
|
|
1159
1223
|
*/
|
|
1160
|
-
interface
|
|
1161
|
-
|
|
1162
|
-
/**
|
|
1163
|
-
|
|
1164
|
-
/** MSG-07: one of the sender's own routines. */
|
|
1165
|
-
routineId?: string;
|
|
1224
|
+
interface SubstituteSessionExerciseResponse {
|
|
1225
|
+
session: WorkoutSession;
|
|
1226
|
+
/** True only when `applyToRoutine` was asked for and the routine still has the slot. */
|
|
1227
|
+
routineUpdated: boolean;
|
|
1166
1228
|
}
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1229
|
+
type PersonalRecordKind = 'WEIGHT' | 'REPS' | 'VOLUME' | 'ESTIMATED_1RM';
|
|
1230
|
+
/** A record frontier crossed by the set mutation that produced this response. */
|
|
1231
|
+
interface EarnedPersonalRecord {
|
|
1232
|
+
kind: PersonalRecordKind;
|
|
1233
|
+
exerciseId: string;
|
|
1234
|
+
exerciseName: string;
|
|
1235
|
+
/** Canonical kg for every kind except REPS, where this is a repetition count. */
|
|
1236
|
+
value: number;
|
|
1237
|
+
/** Missing when this is the first completed result for that record kind. */
|
|
1238
|
+
previousBest?: number | null;
|
|
1173
1239
|
}
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1240
|
+
/** Stable successful response of PUT /workouts/sessions/:id/set-logs. */
|
|
1241
|
+
interface UpsertSetLogResponse {
|
|
1242
|
+
setLog: SetLog;
|
|
1243
|
+
earnedRecords: EarnedPersonalRecord[];
|
|
1177
1244
|
}
|
|
1178
|
-
/**
|
|
1179
|
-
interface
|
|
1180
|
-
|
|
1245
|
+
/** Final record frontier earned by one completed session. */
|
|
1246
|
+
interface SessionRecapRecord extends EarnedPersonalRecord {
|
|
1247
|
+
setNumber: number;
|
|
1248
|
+
achievedAt: IsoDateString;
|
|
1181
1249
|
}
|
|
1182
|
-
/**
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1250
|
+
/** Metrics from the latest earlier execution of the same routine day. */
|
|
1251
|
+
interface PreviousSessionRecap {
|
|
1252
|
+
sessionId: string;
|
|
1253
|
+
endedAt: IsoDateString;
|
|
1254
|
+
durationSec: number;
|
|
1255
|
+
totalVolumeKg: number;
|
|
1256
|
+
completedSets: number;
|
|
1257
|
+
durationDeltaSec: number;
|
|
1258
|
+
volumeDeltaKg: number;
|
|
1259
|
+
completedSetsDelta: number;
|
|
1260
|
+
}
|
|
1261
|
+
/** Stable successful response of GET /workouts/sessions/:id/recap. */
|
|
1262
|
+
interface WorkoutSessionRecap {
|
|
1263
|
+
sessionId: string;
|
|
1264
|
+
routineName: string;
|
|
1265
|
+
dayName?: string | null;
|
|
1266
|
+
startedAt: IsoDateString;
|
|
1267
|
+
endedAt: IsoDateString;
|
|
1268
|
+
durationSec: number;
|
|
1269
|
+
totalVolumeKg: number;
|
|
1270
|
+
completedSets: number;
|
|
1271
|
+
notes?: string | null;
|
|
1272
|
+
/** LIVE-16: exercise notes of this workout, named, in the day's order. */
|
|
1273
|
+
exerciseNotes?: SessionRecapExerciseNote[];
|
|
1274
|
+
records: SessionRecapRecord[];
|
|
1275
|
+
progressionChanges: ProgressionChange[];
|
|
1276
|
+
/** ROUT-17/ROUT-18: LP blocks this workout moved; absent before them. */
|
|
1277
|
+
linearBlockChanges?: LinearBlockChange[];
|
|
1278
|
+
/** The routine trained, null once it was deleted; absent before ROUT-18. */
|
|
1279
|
+
routineId?: string | null;
|
|
1280
|
+
previousSession: PreviousSessionRecap | null;
|
|
1281
|
+
}
|
|
1282
|
+
interface SessionRecapExerciseNote {
|
|
1283
|
+
routineExerciseId: string;
|
|
1284
|
+
exerciseName: string;
|
|
1285
|
+
note: string;
|
|
1192
1286
|
}
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
declare const
|
|
1198
|
-
declare const
|
|
1199
|
-
interface
|
|
1287
|
+
/** Parts of a completed session's recap the owner may choose to share. */
|
|
1288
|
+
declare const SESSION_SHARE_FIELDS: readonly ["duration", "volume", "completedSets", "records", "progression", "notes"];
|
|
1289
|
+
type SessionShareField = (typeof SESSION_SHARE_FIELDS)[number];
|
|
1290
|
+
/** Pre-selected when creating a link; notes and prescriptions are opt-in. */
|
|
1291
|
+
declare const SESSION_SHARE_DEFAULT_FIELDS: SessionShareField[];
|
|
1292
|
+
declare const SESSION_SHARE_MAX_ACTIVE_LINKS = 10;
|
|
1293
|
+
interface CreateSessionShareRequest {
|
|
1294
|
+
fields: SessionShareField[];
|
|
1295
|
+
}
|
|
1296
|
+
/** An active share link, visible only to the session owner. */
|
|
1297
|
+
interface SessionShare {
|
|
1298
|
+
id: string;
|
|
1299
|
+
sessionId: string;
|
|
1300
|
+
/** Unguessable identifier used in the public `/shared/sessions/:token` URL. */
|
|
1301
|
+
token: string;
|
|
1302
|
+
fields: SessionShareField[];
|
|
1303
|
+
createdAt: IsoDateString;
|
|
1200
1304
|
/**
|
|
1201
|
-
*
|
|
1202
|
-
*
|
|
1203
|
-
*
|
|
1305
|
+
* TRUST-04: a moderator has hidden the shared workout, so the link stops
|
|
1306
|
+
* resolving for everyone but its owner. The link is not revoked and the
|
|
1307
|
+
* session is untouched; the owner is told because a live-looking link that
|
|
1308
|
+
* opens for nobody is worse than one that says why.
|
|
1204
1309
|
*/
|
|
1205
|
-
|
|
1206
|
-
/** Steps answered or skipped since that version, so the flow resumes. */
|
|
1207
|
-
stepsDone: string[];
|
|
1208
|
-
/** When the flow first opened by itself; it never does again. */
|
|
1209
|
-
offeredAt: IsoDateString | null;
|
|
1310
|
+
isHiddenByModeration?: boolean;
|
|
1210
1311
|
}
|
|
1211
|
-
/**
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
* rises and clears the steps, and `offered` records the first opening once.
|
|
1215
|
-
*/
|
|
1216
|
-
interface UpdateOnboardingRequest {
|
|
1217
|
-
stepsDone?: string[];
|
|
1218
|
-
completedVersion?: number;
|
|
1219
|
-
offered?: true;
|
|
1312
|
+
/** Stable successful response of GET /workouts/sessions/:id/shares. */
|
|
1313
|
+
interface SessionShareListResponse {
|
|
1314
|
+
items: SessionShare[];
|
|
1220
1315
|
}
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
* chooses. **The rank never follows it**: its active weeks are Monday weeks
|
|
1227
|
-
* for every member, because a rank is public and must mean the same on every
|
|
1228
|
-
* profile.
|
|
1229
|
-
*/
|
|
1230
|
-
declare const WEEK_STARTS: readonly [1, 0];
|
|
1231
|
-
type WeekStartsOn = (typeof WEEK_STARTS)[number];
|
|
1232
|
-
declare const DEFAULT_WEEK_STARTS_ON: WeekStartsOn;
|
|
1233
|
-
declare function isWeekStartsOn(value: unknown): value is WeekStartsOn;
|
|
1234
|
-
/**
|
|
1235
|
-
* The first day of the week a `YYYY-MM-DD` calendar date belongs to, as a
|
|
1236
|
-
* `YYYY-MM-DD` date, for a week starting on `weekStartsOn`. Calendar
|
|
1237
|
-
* arithmetic only: no time zone, so a daylight-saving change cannot move it.
|
|
1238
|
-
*/
|
|
1239
|
-
declare function weekStartOf(dateKey: string, weekStartsOn?: WeekStartsOn): string;
|
|
1240
|
-
/** PUT /users/preferences/week-start */
|
|
1241
|
-
interface UpdateWeekStartRequest {
|
|
1242
|
-
weekStartsOn: WeekStartsOn;
|
|
1316
|
+
interface SharedSessionOwner {
|
|
1317
|
+
username: string;
|
|
1318
|
+
name: string;
|
|
1319
|
+
lastName?: string | null;
|
|
1320
|
+
avatarUrl?: string | null;
|
|
1243
1321
|
}
|
|
1244
1322
|
/**
|
|
1245
|
-
*
|
|
1246
|
-
*
|
|
1247
|
-
*
|
|
1248
|
-
|
|
1249
|
-
declare const LENGTH_UNITS: readonly ["CM", "IN"];
|
|
1250
|
-
type LengthUnit = (typeof LENGTH_UNITS)[number];
|
|
1251
|
-
declare const CM_PER_INCH = 2.54;
|
|
1252
|
-
declare const INCHES_PER_FOOT = 12;
|
|
1253
|
-
/** Centimetres as inches, to two decimals. */
|
|
1254
|
-
declare function cmToInches(cm: number): number;
|
|
1255
|
-
/** Inches as centimetres, to two decimals. */
|
|
1256
|
-
declare function inchesToCm(inches: number): number;
|
|
1257
|
-
/**
|
|
1258
|
-
* A height in centimetres as whole feet and inches to one decimal. The total
|
|
1259
|
-
* is rounded before it is split, so 71.98 in reads as 6 ft 0 in, never as
|
|
1260
|
-
* 5 ft 12 in.
|
|
1323
|
+
* Stable successful response of the unauthenticated
|
|
1324
|
+
* GET /shared/sessions/:token. Only the fields named in `fields` are present;
|
|
1325
|
+
* everything else is omitted rather than nulled. Weights are canonical kg and
|
|
1326
|
+
* `weightUnit` is the owner's display preference.
|
|
1261
1327
|
*/
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
rpe?: number | null;
|
|
1278
|
-
isCompleted: boolean;
|
|
1279
|
-
/** LIVE-12: what this set was for in this workout. */
|
|
1280
|
-
kind: SetKind;
|
|
1281
|
-
completedAt?: IsoDateString | null;
|
|
1282
|
-
createdAt: IsoDateString;
|
|
1283
|
-
updatedAt: IsoDateString;
|
|
1328
|
+
interface SharedSessionRecap {
|
|
1329
|
+
fields: SessionShareField[];
|
|
1330
|
+
owner: SharedSessionOwner;
|
|
1331
|
+
weightUnit: WeightUnit;
|
|
1332
|
+
routineName: string;
|
|
1333
|
+
dayName?: string | null;
|
|
1334
|
+
endedAt: IsoDateString;
|
|
1335
|
+
durationSec?: number;
|
|
1336
|
+
totalVolumeKg?: number;
|
|
1337
|
+
completedSets?: number;
|
|
1338
|
+
records?: SessionRecapRecord[];
|
|
1339
|
+
progressionChanges?: ProgressionChange[];
|
|
1340
|
+
notes?: string | null;
|
|
1341
|
+
/** LIVE-16: shared with the `notes` field. */
|
|
1342
|
+
exerciseNotes?: SessionRecapExerciseNote[];
|
|
1284
1343
|
}
|
|
1285
|
-
interface
|
|
1344
|
+
interface WorkoutSessionSummary {
|
|
1286
1345
|
id: string;
|
|
1287
|
-
userId: string;
|
|
1288
|
-
routineId: string;
|
|
1289
|
-
routineDayId: string;
|
|
1290
1346
|
status: WorkoutSessionStatus;
|
|
1291
1347
|
startedAt: IsoDateString;
|
|
1292
1348
|
endedAt?: IsoDateString | null;
|
|
1293
1349
|
durationSec?: number | null;
|
|
1350
|
+
totalVolume?: number | null;
|
|
1351
|
+
totalSets?: number | null;
|
|
1352
|
+
totalExercises?: number | null;
|
|
1294
1353
|
notes?: string | null;
|
|
1295
|
-
|
|
1296
|
-
setLogs?: SetLog[];
|
|
1297
|
-
/**
|
|
1298
|
-
* LIVE-11: slots performed with a different exercise in this session. The
|
|
1299
|
-
* routine day (snapshot) keeps the original prescription; set logs for a
|
|
1300
|
-
* substituted slot carry the substitute's `exerciseId`.
|
|
1301
|
-
*/
|
|
1302
|
-
exerciseSubstitutions?: SessionExerciseSubstitution[];
|
|
1303
|
-
/**
|
|
1304
|
-
* LIVE-16: what the owner noted about one exercise in this workout. The
|
|
1305
|
-
* routine's own note (`routineDay.exercises[].note`) is the standing
|
|
1306
|
-
* instruction and is never written from a session.
|
|
1307
|
-
*/
|
|
1308
|
-
exerciseNotes?: SessionExerciseNote[];
|
|
1309
|
-
reused?: boolean;
|
|
1310
|
-
/**
|
|
1311
|
-
* ROUT-15: the training block this session trained, or null when it
|
|
1312
|
-
* trained the routine's baseline. Copied at start, so a later revision or
|
|
1313
|
-
* the block's end never rewrites what the session was.
|
|
1314
|
-
*/
|
|
1315
|
-
trainingBlock?: SessionTrainingBlock | null;
|
|
1316
|
-
/**
|
|
1317
|
-
* ROUT-16: the deload this session trained, or null. A deload session
|
|
1318
|
-
* never advances progression.
|
|
1319
|
-
*/
|
|
1320
|
-
temporaryOverride?: SessionTemporaryOverride | null;
|
|
1321
|
-
routine?: {
|
|
1354
|
+
routine: {
|
|
1322
1355
|
id: string;
|
|
1323
1356
|
name: string;
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
order?: number;
|
|
1330
|
-
/** Null on a ROTATION routine day (ROUT-11). */
|
|
1331
|
-
dayOfWeek?: number | null;
|
|
1332
|
-
exercises: Array<{
|
|
1333
|
-
id: string;
|
|
1334
|
-
order: number;
|
|
1335
|
-
restSeconds?: number | null;
|
|
1336
|
-
note?: string | null;
|
|
1337
|
-
progressionScheme: ProgressionScheme;
|
|
1338
|
-
minWeightIncrement: number;
|
|
1339
|
-
/** ROUT-12: done in rounds with the next exercise of the day. */
|
|
1340
|
-
linkedToNext?: boolean;
|
|
1341
|
-
/**
|
|
1342
|
-
* ROUT-17: the slot's block as it stood when the workout started; the
|
|
1343
|
-
* sets' weights are the step's prescribed loads.
|
|
1344
|
-
*/
|
|
1345
|
-
linearPeriodization?: LinearPeriodizationState | null;
|
|
1346
|
-
exercise: {
|
|
1347
|
-
id: string;
|
|
1348
|
-
name: string;
|
|
1349
|
-
primaryMuscles: MuscleGroup[];
|
|
1350
|
-
secondaryMuscles?: MuscleGroup[];
|
|
1351
|
-
};
|
|
1352
|
-
sets: Array<{
|
|
1353
|
-
id: string;
|
|
1354
|
-
setNumber: number;
|
|
1355
|
-
repType: RepType;
|
|
1356
|
-
reps?: number | null;
|
|
1357
|
-
minReps?: number | null;
|
|
1358
|
-
maxReps?: number | null;
|
|
1359
|
-
weight?: number | null;
|
|
1360
|
-
rir?: number | null;
|
|
1361
|
-
/** LIVE-12; absent on snapshots captured before it: a working set. */
|
|
1362
|
-
kind?: SetKind;
|
|
1363
|
-
}>;
|
|
1364
|
-
}>;
|
|
1357
|
+
dayName?: string | null;
|
|
1358
|
+
/** ROUT-15: the block trained, when it was one. */
|
|
1359
|
+
trainingBlockName?: string | null;
|
|
1360
|
+
/** ROUT-16: set when the session trained a deload. */
|
|
1361
|
+
temporaryOverrideKind?: 'DELOAD' | null;
|
|
1365
1362
|
};
|
|
1366
1363
|
}
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1364
|
+
interface ListSessionsParams {
|
|
1365
|
+
status?: WorkoutSessionStatus;
|
|
1366
|
+
routineId?: string;
|
|
1367
|
+
from?: IsoDateString;
|
|
1368
|
+
to?: IsoDateString;
|
|
1369
|
+
q?: string;
|
|
1370
|
+
cursor?: string;
|
|
1371
|
+
limit?: number;
|
|
1372
|
+
sort?: 'finishedAt:desc' | 'finishedAt:asc' | 'startedAt:desc' | 'startedAt:asc';
|
|
1373
|
+
}
|
|
1374
|
+
type WorkoutSessionListResponse = PaginatedResponse<WorkoutSessionSummary>;
|
|
1375
|
+
interface WorkoutStatsQuery {
|
|
1376
|
+
weekStart: IsoDateString;
|
|
1377
|
+
weekEnd: IsoDateString;
|
|
1378
|
+
timeZone: string;
|
|
1379
|
+
}
|
|
1380
|
+
interface WorkoutStatsResponse {
|
|
1381
|
+
totalCompleted: number;
|
|
1382
|
+
completionRate: number;
|
|
1383
|
+
weeklyWorkoutsCount: number;
|
|
1384
|
+
activeDaysThisWeek: number;
|
|
1385
|
+
}
|
|
1386
|
+
|
|
1387
|
+
/**
|
|
1388
|
+
* Who may start a conversation with a member. `FOLLOWED`: members they follow.
|
|
1389
|
+
* `EVERYONE` (MSG-02): members they follow reach the inbox, anyone else lands
|
|
1390
|
+
* in Requests. `NOBODY`: no one may start a new one.
|
|
1391
|
+
*/
|
|
1392
|
+
declare const MESSAGE_PERMISSIONS: readonly ["FOLLOWED", "EVERYONE", "NOBODY"];
|
|
1393
|
+
type MessagePermission = (typeof MESSAGE_PERMISSIONS)[number];
|
|
1394
|
+
declare const DEFAULT_MESSAGE_PERMISSION: MessagePermission;
|
|
1395
|
+
/** Characters in one message, counted as code points. */
|
|
1396
|
+
declare const MESSAGE_BODY_MAX = 2000;
|
|
1397
|
+
/** Messages one member may send in a rolling minute. */
|
|
1398
|
+
declare const MESSAGES_PER_MINUTE_MAX = 30;
|
|
1399
|
+
/** Conversations one member may start in a rolling day. */
|
|
1400
|
+
declare const NEW_CONVERSATIONS_PER_DAY_MAX = 20;
|
|
1401
|
+
declare const CONVERSATIONS_PAGE_SIZE = 20;
|
|
1402
|
+
declare const MESSAGES_PAGE_SIZE = 30;
|
|
1403
|
+
/** Length as a reader counts it: an emoji is one character, not two. */
|
|
1404
|
+
declare function messageBodyLength(body: string): number;
|
|
1405
|
+
/**
|
|
1406
|
+
* The stored form of a typed message: line endings made `\n` and the ends
|
|
1407
|
+
* trimmed, the lines in between kept as written. Null when it is empty or too
|
|
1408
|
+
* long -- it is refused rather than cut, because a message clipped mid-sentence
|
|
1409
|
+
* would misrepresent its author.
|
|
1410
|
+
*/
|
|
1411
|
+
declare function normalizeMessageBody(body: string): string | null;
|
|
1412
|
+
/**
|
|
1413
|
+
* MSG-07: what a message, its text left empty or not, may carry -- one of
|
|
1414
|
+
* them, with an optional note. MSG-10 adds a finished workout.
|
|
1415
|
+
*/
|
|
1416
|
+
declare const MESSAGE_ATTACHMENT_KINDS: readonly ["ROUTINE", "WORKOUT"];
|
|
1417
|
+
type MessageAttachmentKind = (typeof MESSAGE_ATTACHMENT_KINDS)[number];
|
|
1418
|
+
/**
|
|
1419
|
+
* MSG-07: a routine in a message, as it is now. `routine` is null once it is
|
|
1420
|
+
* no longer available -- deleted, or hidden by moderation -- and the card
|
|
1421
|
+
* says so rather than showing what it once was.
|
|
1422
|
+
*/
|
|
1423
|
+
interface MessageRoutineAttachment {
|
|
1424
|
+
kind: "ROUTINE";
|
|
1425
|
+
routine: SharedRoutineSummary | null;
|
|
1375
1426
|
}
|
|
1376
|
-
/**
|
|
1377
|
-
|
|
1427
|
+
/**
|
|
1428
|
+
* MSG-10: a finished workout in a card -- what was trained and its totals,
|
|
1429
|
+
* as the workout is now (a correction shows). Never its notes, RPE or the
|
|
1430
|
+
* comparison with the session before.
|
|
1431
|
+
*/
|
|
1432
|
+
interface MessageWorkoutSummary {
|
|
1378
1433
|
sessionId: string;
|
|
1434
|
+
routineName: string;
|
|
1435
|
+
dayName: string | null;
|
|
1379
1436
|
endedAt: IsoDateString;
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
routineId: string;
|
|
1384
|
-
routineDayId: string;
|
|
1385
|
-
notes?: string;
|
|
1386
|
-
}
|
|
1387
|
-
interface StartWorkoutResponse {
|
|
1388
|
-
id: string;
|
|
1389
|
-
routineId: string;
|
|
1390
|
-
routineDayId: string;
|
|
1391
|
-
status: WorkoutSessionStatus;
|
|
1392
|
-
startedAt: IsoDateString;
|
|
1393
|
-
endedAt?: IsoDateString | null;
|
|
1394
|
-
reused: boolean;
|
|
1437
|
+
durationSec: number;
|
|
1438
|
+
totalVolumeKg: number;
|
|
1439
|
+
completedSets: number;
|
|
1395
1440
|
}
|
|
1396
|
-
|
|
1397
|
-
interface
|
|
1398
|
-
|
|
1399
|
-
|
|
1441
|
+
/** MSG-10: `workout` is null once it is no longer available (deleted). */
|
|
1442
|
+
interface MessageWorkoutAttachment {
|
|
1443
|
+
kind: "WORKOUT";
|
|
1444
|
+
workout: MessageWorkoutSummary | null;
|
|
1400
1445
|
}
|
|
1401
|
-
type
|
|
1402
|
-
|
|
1446
|
+
type MessageAttachment = MessageRoutineAttachment | MessageWorkoutAttachment;
|
|
1447
|
+
/** MSG-10: one completed set of a shared workout. Never its RPE. */
|
|
1448
|
+
interface SharedWorkoutSet {
|
|
1403
1449
|
setNumber: number;
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1450
|
+
kind: SetKind;
|
|
1451
|
+
/** Canonical kilograms; null for a set logged without a load. */
|
|
1452
|
+
weightKg: number | null;
|
|
1453
|
+
reps: number | null;
|
|
1408
1454
|
}
|
|
1409
|
-
|
|
1410
|
-
interface ProgressionChange {
|
|
1411
|
-
routineExerciseId: string;
|
|
1455
|
+
interface SharedWorkoutExercise {
|
|
1412
1456
|
exerciseId: string;
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
minWeightIncrementKg: number;
|
|
1417
|
-
sets: ProgressionSetChange[];
|
|
1457
|
+
/** The exercise as it was performed (a swapped slot by its substitute). */
|
|
1458
|
+
name: string;
|
|
1459
|
+
sets: SharedWorkoutSet[];
|
|
1418
1460
|
}
|
|
1419
1461
|
/**
|
|
1420
|
-
*
|
|
1421
|
-
*
|
|
1422
|
-
*
|
|
1423
|
-
*
|
|
1424
|
-
* `after.samples`.
|
|
1462
|
+
* MSG-10: GET /conversations/:id/messages/:messageId/workout. The workout a
|
|
1463
|
+
* message shared, opened: the summary, the records it set and each
|
|
1464
|
+
* exercise's completed sets, in the order they were trained. Nothing else of
|
|
1465
|
+
* the session -- no notes, no RPE, no previous-session comparison.
|
|
1425
1466
|
*/
|
|
1426
|
-
interface
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
before: LinearPeriodizationState;
|
|
1433
|
-
after: LinearPeriodizationState;
|
|
1467
|
+
interface SharedWorkout extends MessageWorkoutSummary {
|
|
1468
|
+
owner: SharedSessionOwner;
|
|
1469
|
+
/** The owner's unit; a reader shows weights in their own. */
|
|
1470
|
+
weightUnit: WeightUnit;
|
|
1471
|
+
records: SessionRecapRecord[];
|
|
1472
|
+
exercises: SharedWorkoutExercise[];
|
|
1434
1473
|
}
|
|
1435
|
-
/**
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1474
|
+
/**
|
|
1475
|
+
* MSG-07: the stored text of a message. A message with a routine may leave it
|
|
1476
|
+
* empty (null); one without must say something. Undefined when the text is
|
|
1477
|
+
* refused: empty with nothing attached, or too long.
|
|
1478
|
+
*/
|
|
1479
|
+
declare function messageNote(body: string | undefined | null, hasAttachment: boolean): string | null | undefined;
|
|
1480
|
+
/** The other participant, or null once their account was deleted. */
|
|
1481
|
+
interface ConversationMember {
|
|
1482
|
+
id: string;
|
|
1483
|
+
username: string;
|
|
1484
|
+
name: string;
|
|
1485
|
+
avatarUrl: string | null;
|
|
1442
1486
|
}
|
|
1443
|
-
interface
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
setNumber: number;
|
|
1447
|
-
reps: number;
|
|
1448
|
-
weight?: number;
|
|
1449
|
-
rpe?: number;
|
|
1450
|
-
isCompleted?: boolean;
|
|
1487
|
+
interface ConversationMessage {
|
|
1488
|
+
id: string;
|
|
1489
|
+
sentByMe: boolean;
|
|
1451
1490
|
/**
|
|
1452
|
-
*
|
|
1453
|
-
*
|
|
1454
|
-
*
|
|
1491
|
+
* Null once its author deleted it; the place stays as "Message deleted".
|
|
1492
|
+
* Also null for the other participant while moderation hides it (MSG-09),
|
|
1493
|
+
* and for a routine sent without a note (MSG-07).
|
|
1455
1494
|
*/
|
|
1456
|
-
|
|
1495
|
+
body: string | null;
|
|
1496
|
+
deleted: boolean;
|
|
1497
|
+
/**
|
|
1498
|
+
* MSG-09: a moderator hid this message from the other participant. They read
|
|
1499
|
+
* "Removed by moderation" in its place; its author still reads the text and
|
|
1500
|
+
* is told it is hidden.
|
|
1501
|
+
*/
|
|
1502
|
+
hiddenByModeration: boolean;
|
|
1503
|
+
/**
|
|
1504
|
+
* MSG-07: a routine it carries, resolved as it is now. Null when it carries
|
|
1505
|
+
* none, and whenever the text is withheld (deleted, or hidden from the
|
|
1506
|
+
* viewer by moderation).
|
|
1507
|
+
*/
|
|
1508
|
+
attachment: MessageAttachment | null;
|
|
1509
|
+
createdAt: IsoDateString;
|
|
1457
1510
|
}
|
|
1458
1511
|
/**
|
|
1459
|
-
*
|
|
1460
|
-
*
|
|
1461
|
-
*
|
|
1512
|
+
* MSG-02: a conversation that is still a request. `INCOMING`: the viewer may
|
|
1513
|
+
* accept, decline or block. `OUTGOING`: the viewer sent it and waits -- told
|
|
1514
|
+
* neither whether it was seen nor whether it was declined.
|
|
1462
1515
|
*/
|
|
1463
|
-
interface
|
|
1464
|
-
|
|
1465
|
-
routineExerciseId: string;
|
|
1466
|
-
exercise: {
|
|
1467
|
-
id: string;
|
|
1468
|
-
name: string;
|
|
1469
|
-
primaryMuscles: MuscleGroup[];
|
|
1470
|
-
secondaryMuscles: MuscleGroup[];
|
|
1471
|
-
};
|
|
1472
|
-
substitutedAt: IsoDateString;
|
|
1516
|
+
interface ConversationRequest {
|
|
1517
|
+
direction: "INCOMING" | "OUTGOING";
|
|
1473
1518
|
}
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
/**
|
|
1477
|
-
|
|
1478
|
-
/** The
|
|
1479
|
-
|
|
1480
|
-
|
|
1519
|
+
interface ConversationSummary {
|
|
1520
|
+
id: string;
|
|
1521
|
+
/** Null when the other member deleted their account ("Deleted member"). */
|
|
1522
|
+
counterpart: ConversationMember | null;
|
|
1523
|
+
/** The newest message the viewer can see, or null when there is none. */
|
|
1524
|
+
lastMessage: ConversationMessage | null;
|
|
1525
|
+
lastMessageAt: IsoDateString | null;
|
|
1526
|
+
/**
|
|
1527
|
+
* Whether the viewer may write in it now. False when the other member's
|
|
1528
|
+
* account is gone, or the viewer's own messaging is unavailable or
|
|
1529
|
+
* restricted.
|
|
1530
|
+
*/
|
|
1531
|
+
canSend: boolean;
|
|
1532
|
+
/**
|
|
1533
|
+
* MSG-09: a moderator restricted the viewer's messaging, which is why they
|
|
1534
|
+
* cannot write. Only ever about the viewer: nobody else is told.
|
|
1535
|
+
*/
|
|
1536
|
+
messagingRestricted: boolean;
|
|
1537
|
+
/**
|
|
1538
|
+
* MSG-03: the other member wrote something the viewer has not seen -- a
|
|
1539
|
+
* message after the viewer's read position that is neither deleted nor
|
|
1540
|
+
* removed for them. The viewer's own messages never count.
|
|
1541
|
+
*/
|
|
1542
|
+
unread: boolean;
|
|
1543
|
+
/**
|
|
1544
|
+
* MSG-03: the viewer's read position, where "new since you last looked"
|
|
1545
|
+
* starts. Null when they have never read the conversation. It is the
|
|
1546
|
+
* viewer's alone: no read receipts, so a sender never learns it.
|
|
1547
|
+
*/
|
|
1548
|
+
lastReadAt: IsoDateString | null;
|
|
1549
|
+
/** MSG-02: null once accepted, or for a conversation that never was a request. */
|
|
1550
|
+
request: ConversationRequest | null;
|
|
1481
1551
|
}
|
|
1482
1552
|
/**
|
|
1483
|
-
*
|
|
1484
|
-
*
|
|
1485
|
-
* by slot, so two notes saved moments apart cannot overwrite each other.
|
|
1553
|
+
* MSG-02: GET /conversations?box=. The inbox holds accepted conversations
|
|
1554
|
+
* and the viewer's own requests; Requests holds the ones waiting for them.
|
|
1486
1555
|
*/
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1556
|
+
declare const CONVERSATION_BOXES: readonly ["INBOX", "REQUESTS"];
|
|
1557
|
+
type ConversationBox = (typeof CONVERSATION_BOXES)[number];
|
|
1558
|
+
/**
|
|
1559
|
+
* MSG-02: after a decline, the same member's new request is refused for this
|
|
1560
|
+
* many days, unless the recipient follows them or writes first.
|
|
1561
|
+
*/
|
|
1562
|
+
declare const MESSAGE_REQUEST_DECLINE_COOLDOWN_DAYS = 30;
|
|
1563
|
+
/**
|
|
1564
|
+
* MSG-08: a message push waits this long and is dropped if the conversation
|
|
1565
|
+
* was read meanwhile, so two members talking live do not buzz each other.
|
|
1566
|
+
*/
|
|
1567
|
+
declare const MESSAGE_PUSH_DELAY_SECONDS = 30;
|
|
1568
|
+
/** GET /conversations, newest activity first. */
|
|
1569
|
+
interface ConversationsResponse {
|
|
1570
|
+
conversations: ConversationSummary[];
|
|
1571
|
+
nextCursor: string | null;
|
|
1572
|
+
/** MSG-09: the viewer's own messaging is restricted by moderation. */
|
|
1573
|
+
messagingRestricted: boolean;
|
|
1493
1574
|
}
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1575
|
+
/**
|
|
1576
|
+
* MSG-09: a report of a message captures it and at most this many messages
|
|
1577
|
+
* before it in its conversation, as the reporter could see them then.
|
|
1578
|
+
*/
|
|
1579
|
+
declare const MESSAGE_REPORT_CONTEXT_BEFORE = 5;
|
|
1580
|
+
/**
|
|
1581
|
+
* MSG-03: POST /conversations/:id/read. Moves the viewer's read position to
|
|
1582
|
+
* the message they have seen (`through`, the newest one on their screen),
|
|
1583
|
+
* never backwards, so a message that arrived after it stays unread.
|
|
1584
|
+
*/
|
|
1585
|
+
interface MarkConversationReadRequest {
|
|
1586
|
+
through: string;
|
|
1497
1587
|
}
|
|
1498
|
-
/**
|
|
1499
|
-
interface
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1588
|
+
/** MSG-03: GET /conversations/unread, for the navigation's count. */
|
|
1589
|
+
interface UnreadConversationsResponse {
|
|
1590
|
+
/** Conversations with something new, not messages (owner, 2026-10-06). */
|
|
1591
|
+
unreadConversations: number;
|
|
1592
|
+
/**
|
|
1593
|
+
* MSG-02: requests waiting for the viewer. For the Requests tab only: they
|
|
1594
|
+
* never count in the navigation (owner, 2026-10-06).
|
|
1595
|
+
*/
|
|
1596
|
+
requests: number;
|
|
1597
|
+
}
|
|
1598
|
+
/** GET /conversations/:id/messages, newest first; `cursor` pages older. */
|
|
1599
|
+
interface ConversationMessagesResponse {
|
|
1600
|
+
conversation: ConversationSummary;
|
|
1601
|
+
messages: ConversationMessage[];
|
|
1602
|
+
nextCursor: string | null;
|
|
1503
1603
|
}
|
|
1504
1604
|
/**
|
|
1505
|
-
*
|
|
1506
|
-
*
|
|
1507
|
-
*
|
|
1605
|
+
* POST /conversations. Starts a conversation with its first message, so an
|
|
1606
|
+
* empty conversation never exists; when one with this member already exists
|
|
1607
|
+
* the message is sent there instead. `recipient` is a username or an id.
|
|
1508
1608
|
*/
|
|
1509
|
-
interface
|
|
1510
|
-
|
|
1511
|
-
/**
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
/**
|
|
1516
|
-
|
|
1517
|
-
kind: PersonalRecordKind;
|
|
1518
|
-
exerciseId: string;
|
|
1519
|
-
exerciseName: string;
|
|
1520
|
-
/** Canonical kg for every kind except REPS, where this is a repetition count. */
|
|
1521
|
-
value: number;
|
|
1522
|
-
/** Missing when this is the first completed result for that record kind. */
|
|
1523
|
-
previousBest?: number | null;
|
|
1524
|
-
}
|
|
1525
|
-
/** Stable successful response of PUT /workouts/sessions/:id/set-logs. */
|
|
1526
|
-
interface UpsertSetLogResponse {
|
|
1527
|
-
setLog: SetLog;
|
|
1528
|
-
earnedRecords: EarnedPersonalRecord[];
|
|
1529
|
-
}
|
|
1530
|
-
/** Final record frontier earned by one completed session. */
|
|
1531
|
-
interface SessionRecapRecord extends EarnedPersonalRecord {
|
|
1532
|
-
setNumber: number;
|
|
1533
|
-
achievedAt: IsoDateString;
|
|
1609
|
+
interface StartConversationRequest {
|
|
1610
|
+
recipient: string;
|
|
1611
|
+
/** Optional when the message carries a routine or a workout. */
|
|
1612
|
+
body?: string;
|
|
1613
|
+
/** MSG-07: one of the sender's own routines. */
|
|
1614
|
+
routineId?: string;
|
|
1615
|
+
/** MSG-10: one of the sender's own finished workouts. Not with a routine. */
|
|
1616
|
+
sessionId?: string;
|
|
1534
1617
|
}
|
|
1535
|
-
/**
|
|
1536
|
-
interface
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
volumeDeltaKg: number;
|
|
1544
|
-
completedSetsDelta: number;
|
|
1618
|
+
/** POST /conversations/:id/messages. */
|
|
1619
|
+
interface SendMessageRequest {
|
|
1620
|
+
/** Optional when the message carries a routine or a workout. */
|
|
1621
|
+
body?: string;
|
|
1622
|
+
/** MSG-07: one of the sender's own routines. */
|
|
1623
|
+
routineId?: string;
|
|
1624
|
+
/** MSG-10: one of the sender's own finished workouts. Not with a routine. */
|
|
1625
|
+
sessionId?: string;
|
|
1545
1626
|
}
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
routineName: string;
|
|
1550
|
-
dayName?: string | null;
|
|
1551
|
-
startedAt: IsoDateString;
|
|
1552
|
-
endedAt: IsoDateString;
|
|
1553
|
-
durationSec: number;
|
|
1554
|
-
totalVolumeKg: number;
|
|
1555
|
-
completedSets: number;
|
|
1556
|
-
notes?: string | null;
|
|
1557
|
-
/** LIVE-16: exercise notes of this workout, named, in the day's order. */
|
|
1558
|
-
exerciseNotes?: SessionRecapExerciseNote[];
|
|
1559
|
-
records: SessionRecapRecord[];
|
|
1560
|
-
progressionChanges: ProgressionChange[];
|
|
1561
|
-
/** ROUT-17/ROUT-18: LP blocks this workout moved; absent before them. */
|
|
1562
|
-
linearBlockChanges?: LinearBlockChange[];
|
|
1563
|
-
/** The routine trained, null once it was deleted; absent before ROUT-18. */
|
|
1564
|
-
routineId?: string | null;
|
|
1565
|
-
previousSession: PreviousSessionRecap | null;
|
|
1627
|
+
interface SendMessageResponse {
|
|
1628
|
+
conversation: ConversationSummary;
|
|
1629
|
+
message: ConversationMessage;
|
|
1566
1630
|
}
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
note: string;
|
|
1631
|
+
/** PUT /users/preferences/messages. */
|
|
1632
|
+
interface UpdateMessagePermissionRequest {
|
|
1633
|
+
messagePermission: MessagePermission;
|
|
1571
1634
|
}
|
|
1572
|
-
/**
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1635
|
+
/**
|
|
1636
|
+
* On the authenticated member profile only: whether the viewer may start a
|
|
1637
|
+
* conversation, and the one they already have. The server decides; a viewer
|
|
1638
|
+
* who may not is told nothing more.
|
|
1639
|
+
*/
|
|
1640
|
+
interface MemberMessagingState {
|
|
1641
|
+
canStart: boolean;
|
|
1642
|
+
conversationId: string | null;
|
|
1643
|
+
/** MSG-02: a first message would land in their Requests. */
|
|
1644
|
+
asRequest: boolean;
|
|
1580
1645
|
}
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
createdAt: IsoDateString;
|
|
1646
|
+
declare function isMessagePermission(value: unknown): value is MessagePermission;
|
|
1647
|
+
|
|
1648
|
+
/** A step id as the registry names it: lowercase words joined by hyphens. */
|
|
1649
|
+
declare const ONBOARDING_STEP_ID_PATTERN_SOURCE = "^[a-z][a-z0-9-]{0,39}$";
|
|
1650
|
+
declare const ONBOARDING_STEPS_MAX = 30;
|
|
1651
|
+
declare const ONBOARDING_VERSION_MAX = 1000;
|
|
1652
|
+
interface OnboardingState {
|
|
1589
1653
|
/**
|
|
1590
|
-
*
|
|
1591
|
-
*
|
|
1592
|
-
*
|
|
1593
|
-
* opens for nobody is worse than one that says why.
|
|
1654
|
+
* The registry version the account completed. A new account starts at 0;
|
|
1655
|
+
* accounts that existed when onboarding shipped start at 1, so they are
|
|
1656
|
+
* offered only steps added later.
|
|
1594
1657
|
*/
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
}
|
|
1601
|
-
interface SharedSessionOwner {
|
|
1602
|
-
username: string;
|
|
1603
|
-
name: string;
|
|
1604
|
-
lastName?: string | null;
|
|
1605
|
-
avatarUrl?: string | null;
|
|
1658
|
+
completedVersion: number;
|
|
1659
|
+
/** Steps answered or skipped since that version, so the flow resumes. */
|
|
1660
|
+
stepsDone: string[];
|
|
1661
|
+
/** When the flow first opened by itself; it never does again. */
|
|
1662
|
+
offeredAt: IsoDateString | null;
|
|
1606
1663
|
}
|
|
1607
1664
|
/**
|
|
1608
|
-
*
|
|
1609
|
-
*
|
|
1610
|
-
*
|
|
1611
|
-
* `weightUnit` is the owner's display preference.
|
|
1665
|
+
* PUT /users/preferences/onboarding. Partial: `stepsDone` is added to what is
|
|
1666
|
+
* stored (two devices never undo each other), `completedVersion` only ever
|
|
1667
|
+
* rises and clears the steps, and `offered` records the first opening once.
|
|
1612
1668
|
*/
|
|
1613
|
-
interface
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
routineName: string;
|
|
1618
|
-
dayName?: string | null;
|
|
1619
|
-
endedAt: IsoDateString;
|
|
1620
|
-
durationSec?: number;
|
|
1621
|
-
totalVolumeKg?: number;
|
|
1622
|
-
completedSets?: number;
|
|
1623
|
-
records?: SessionRecapRecord[];
|
|
1624
|
-
progressionChanges?: ProgressionChange[];
|
|
1625
|
-
notes?: string | null;
|
|
1626
|
-
/** LIVE-16: shared with the `notes` field. */
|
|
1627
|
-
exerciseNotes?: SessionRecapExerciseNote[];
|
|
1628
|
-
}
|
|
1629
|
-
interface WorkoutSessionSummary {
|
|
1630
|
-
id: string;
|
|
1631
|
-
status: WorkoutSessionStatus;
|
|
1632
|
-
startedAt: IsoDateString;
|
|
1633
|
-
endedAt?: IsoDateString | null;
|
|
1634
|
-
durationSec?: number | null;
|
|
1635
|
-
totalVolume?: number | null;
|
|
1636
|
-
totalSets?: number | null;
|
|
1637
|
-
totalExercises?: number | null;
|
|
1638
|
-
notes?: string | null;
|
|
1639
|
-
routine: {
|
|
1640
|
-
id: string;
|
|
1641
|
-
name: string;
|
|
1642
|
-
dayName?: string | null;
|
|
1643
|
-
/** ROUT-15: the block trained, when it was one. */
|
|
1644
|
-
trainingBlockName?: string | null;
|
|
1645
|
-
/** ROUT-16: set when the session trained a deload. */
|
|
1646
|
-
temporaryOverrideKind?: 'DELOAD' | null;
|
|
1647
|
-
};
|
|
1648
|
-
}
|
|
1649
|
-
interface ListSessionsParams {
|
|
1650
|
-
status?: WorkoutSessionStatus;
|
|
1651
|
-
routineId?: string;
|
|
1652
|
-
from?: IsoDateString;
|
|
1653
|
-
to?: IsoDateString;
|
|
1654
|
-
q?: string;
|
|
1655
|
-
cursor?: string;
|
|
1656
|
-
limit?: number;
|
|
1657
|
-
sort?: 'finishedAt:desc' | 'finishedAt:asc' | 'startedAt:desc' | 'startedAt:asc';
|
|
1658
|
-
}
|
|
1659
|
-
type WorkoutSessionListResponse = PaginatedResponse<WorkoutSessionSummary>;
|
|
1660
|
-
interface WorkoutStatsQuery {
|
|
1661
|
-
weekStart: IsoDateString;
|
|
1662
|
-
weekEnd: IsoDateString;
|
|
1663
|
-
timeZone: string;
|
|
1669
|
+
interface UpdateOnboardingRequest {
|
|
1670
|
+
stepsDone?: string[];
|
|
1671
|
+
completedVersion?: number;
|
|
1672
|
+
offered?: true;
|
|
1664
1673
|
}
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1674
|
+
declare function isOnboardingStepId(value: unknown): value is string;
|
|
1675
|
+
|
|
1676
|
+
/**
|
|
1677
|
+
* The weekday a week starts on, as `Date.getDay()` numbers it: 1 Monday, 0
|
|
1678
|
+
* Sunday. Monday is everyone's default, so nothing changes until a member
|
|
1679
|
+
* chooses. **The rank never follows it**: its active weeks are Monday weeks
|
|
1680
|
+
* for every member, because a rank is public and must mean the same on every
|
|
1681
|
+
* profile.
|
|
1682
|
+
*/
|
|
1683
|
+
declare const WEEK_STARTS: readonly [1, 0];
|
|
1684
|
+
type WeekStartsOn = (typeof WEEK_STARTS)[number];
|
|
1685
|
+
declare const DEFAULT_WEEK_STARTS_ON: WeekStartsOn;
|
|
1686
|
+
declare function isWeekStartsOn(value: unknown): value is WeekStartsOn;
|
|
1687
|
+
/**
|
|
1688
|
+
* The first day of the week a `YYYY-MM-DD` calendar date belongs to, as a
|
|
1689
|
+
* `YYYY-MM-DD` date, for a week starting on `weekStartsOn`. Calendar
|
|
1690
|
+
* arithmetic only: no time zone, so a daylight-saving change cannot move it.
|
|
1691
|
+
*/
|
|
1692
|
+
declare function weekStartOf(dateKey: string, weekStartsOn?: WeekStartsOn): string;
|
|
1693
|
+
/** PUT /users/preferences/week-start */
|
|
1694
|
+
interface UpdateWeekStartRequest {
|
|
1695
|
+
weekStartsOn: WeekStartsOn;
|
|
1670
1696
|
}
|
|
1697
|
+
/**
|
|
1698
|
+
* How lengths are shown and typed: centimetres, or inches (a height in feet
|
|
1699
|
+
* and inches). Every length is **stored in centimetres**, as weights are
|
|
1700
|
+
* stored in kilograms; the unit is only the display and entry boundary.
|
|
1701
|
+
*/
|
|
1702
|
+
declare const LENGTH_UNITS: readonly ["CM", "IN"];
|
|
1703
|
+
type LengthUnit = (typeof LENGTH_UNITS)[number];
|
|
1704
|
+
declare const CM_PER_INCH = 2.54;
|
|
1705
|
+
declare const INCHES_PER_FOOT = 12;
|
|
1706
|
+
/** Centimetres as inches, to two decimals. */
|
|
1707
|
+
declare function cmToInches(cm: number): number;
|
|
1708
|
+
/** Inches as centimetres, to two decimals. */
|
|
1709
|
+
declare function inchesToCm(inches: number): number;
|
|
1710
|
+
/**
|
|
1711
|
+
* A height in centimetres as whole feet and inches to one decimal. The total
|
|
1712
|
+
* is rounded before it is split, so 71.98 in reads as 6 ft 0 in, never as
|
|
1713
|
+
* 5 ft 12 in.
|
|
1714
|
+
*/
|
|
1715
|
+
declare function cmToFeetInches(cm: number): {
|
|
1716
|
+
feet: number;
|
|
1717
|
+
inches: number;
|
|
1718
|
+
};
|
|
1719
|
+
/** Feet and inches as centimetres, to two decimals. */
|
|
1720
|
+
declare function feetInchesToCm(feet: number, inches: number): number;
|
|
1671
1721
|
|
|
1672
1722
|
declare const TRAINING_EVENT_TYPES: readonly ["SESSION_COMPLETED", "PERSONAL_RECORD", "PROGRESSION_CHANGED", "STREAK_MILESTONE", "ACHIEVEMENT_UNLOCKED"];
|
|
1673
1723
|
type TrainingEventType = (typeof TRAINING_EVENT_TYPES)[number];
|
|
@@ -2291,6 +2341,11 @@ interface CapturedMessage {
|
|
|
2291
2341
|
* it carried none. Its name and nothing of the routine itself.
|
|
2292
2342
|
*/
|
|
2293
2343
|
routineName?: string | null;
|
|
2344
|
+
/**
|
|
2345
|
+
* MSG-10: the workout it carried, by the routine and day the reporter saw,
|
|
2346
|
+
* empty when it was no longer available, or null when it carried none.
|
|
2347
|
+
*/
|
|
2348
|
+
workoutName?: string | null;
|
|
2294
2349
|
createdAt: IsoDateString;
|
|
2295
2350
|
}
|
|
2296
2351
|
/**
|
|
@@ -4661,6 +4716,8 @@ interface AccountExportV1 {
|
|
|
4661
4716
|
body: string;
|
|
4662
4717
|
/** MSG-07: the member's own routine the message shared, by id. */
|
|
4663
4718
|
routineId?: string;
|
|
4719
|
+
/** MSG-10: the member's own workout the message shared, by id. */
|
|
4720
|
+
sessionId?: string;
|
|
4664
4721
|
createdAt: IsoDateString;
|
|
4665
4722
|
}>;
|
|
4666
4723
|
reportsFiled: Array<{
|
|
@@ -4838,6 +4895,7 @@ declare const API_ERROR_MESSAGES: {
|
|
|
4838
4895
|
readonly ENCOURAGEMENT_RETRY: "Please retry the encouragement.";
|
|
4839
4896
|
readonly MESSAGE_SELF: "You cannot message yourself";
|
|
4840
4897
|
readonly MESSAGE_LENGTH: "A message must not be empty and may be at most {max} characters.";
|
|
4898
|
+
readonly MESSAGE_ONE_ATTACHMENT: "A message can carry one routine or one workout.";
|
|
4841
4899
|
readonly MESSAGES_PER_MINUTE: "You can send at most {max} messages a minute.";
|
|
4842
4900
|
readonly CONVERSATIONS_PER_DAY: "You can start at most {max} new conversations a day.";
|
|
4843
4901
|
readonly MESSAGE_NOT_ADMITTED: "This member is not taking messages from you.";
|
|
@@ -5029,4 +5087,4 @@ declare function isRealtimeTopic(value: unknown): value is RealtimeTopic;
|
|
|
5029
5087
|
/** The event in one `data:` payload, or null for anything else. */
|
|
5030
5088
|
declare function parseRealtimeEvent(data: string): RealtimeEvent | null;
|
|
5031
5089
|
|
|
5032
|
-
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, CONVERSATION_BOXES, CUSTOM_EXERCISES_MAX, CUSTOM_EXERCISE_NAME_MAX, CUSTOM_EXERCISE_NOTE_MAX, CUSTOM_EXERCISE_PROBLEM_MESSAGES, CUSTOM_EXERCISE_REFUSALS, type CalendarDate, type CapturedMessage, type CloneRoutineRefusal, type CloneRoutineRequest, type ComebackActivity, type ComebackRecognition, type ComebackRecognitionSummary, type ContinueLinearBlockRequest, type ConversationBox, type ConversationMember, type ConversationMessage, type ConversationMessagesResponse, type ConversationRequest, 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_ATTACHMENT_KINDS, MESSAGE_BODY_MAX, MESSAGE_PERMISSIONS, MESSAGE_PUSH_DELAY_SECONDS, MESSAGE_REPORT_CONTEXT_BEFORE, MESSAGE_REQUEST_DECLINE_COOLDOWN_DAYS, MINUTES_IN_DAY, MODERATION_ACTION_KINDS, MODERATION_HISTORY_PAGE_SIZE, MODERATION_NOTE_MAX_LENGTH, MODERATION_QUEUE_PAGE_SIZE, MOVEMENT_PATTERNS, MUSCLE_GROUPS, type MarkConversationReadRequest, 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 MessageAttachment, type MessageAttachmentKind, type MessagePermission, type MessagePushPayload, type MessageRoutineAttachment, 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 ReportedMessageContext, 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 UnreadConversationsResponse, 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, messageNote, normalizeDashboardLayout, normalizeExerciseLinks, normalizeExerciseName, normalizeMessageBody, normalizeSearchQuery, parseRealtimeEvent, primaryEquipment, requiredToFinish, resolveActiveTrainingBlock, resolveRoutinePlan, roundDownToIncrement, roundToIncrement, routineDayLabel, sameLpPosition, sessionCorrectionWindow, setKindOf, setLogValuesDiffer, startLinearPeriodization, summarizeBodyProgress, trainingBlockCovers, warmUpLoad, weekStartOf };
|
|
5090
|
+
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, CONVERSATION_BOXES, CUSTOM_EXERCISES_MAX, CUSTOM_EXERCISE_NAME_MAX, CUSTOM_EXERCISE_NOTE_MAX, CUSTOM_EXERCISE_PROBLEM_MESSAGES, CUSTOM_EXERCISE_REFUSALS, type CalendarDate, type CapturedMessage, type CloneRoutineRefusal, type CloneRoutineRequest, type ComebackActivity, type ComebackRecognition, type ComebackRecognitionSummary, type ContinueLinearBlockRequest, type ConversationBox, type ConversationMember, type ConversationMessage, type ConversationMessagesResponse, type ConversationRequest, 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_ATTACHMENT_KINDS, MESSAGE_BODY_MAX, MESSAGE_PERMISSIONS, MESSAGE_PUSH_DELAY_SECONDS, MESSAGE_REPORT_CONTEXT_BEFORE, MESSAGE_REQUEST_DECLINE_COOLDOWN_DAYS, MINUTES_IN_DAY, MODERATION_ACTION_KINDS, MODERATION_HISTORY_PAGE_SIZE, MODERATION_NOTE_MAX_LENGTH, MODERATION_QUEUE_PAGE_SIZE, MOVEMENT_PATTERNS, MUSCLE_GROUPS, type MarkConversationReadRequest, 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 MessageAttachment, type MessageAttachmentKind, type MessagePermission, type MessagePushPayload, type MessageRoutineAttachment, type MessageWorkoutAttachment, type MessageWorkoutSummary, 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 ReportedMessageContext, 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 SharedWorkout, type SharedWorkoutExercise, type SharedWorkoutSet, 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 UnreadConversationsResponse, 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, messageNote, normalizeDashboardLayout, normalizeExerciseLinks, normalizeExerciseName, normalizeMessageBody, normalizeSearchQuery, parseRealtimeEvent, primaryEquipment, requiredToFinish, resolveActiveTrainingBlock, resolveRoutinePlan, roundDownToIncrement, roundToIncrement, routineDayLabel, sameLpPosition, sessionCorrectionWindow, setKindOf, setLogValuesDiffer, startLinearPeriodization, summarizeBodyProgress, trainingBlockCovers, warmUpLoad, weekStartOf };
|