@sunsteel/contracts 0.49.0 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -812,6 +812,361 @@ interface AchievementsResponse {
812
812
  comeback: ComebackRecognitionSummary | null;
813
813
  }
814
814
 
815
+ /**
816
+ * A block is **symmetric**. It removes any follow in both directions and
817
+ * prevents a new one either way; neither account appears in the other's
818
+ * search, suggestions, relationship lists or profile reads. Hiding only the
819
+ * blocked account from the blocker would leave the blocker visible to them,
820
+ * which is the half nobody asks for.
821
+ *
822
+ * It is **not retroactive over what was already handed out**: a `SOC-07`
823
+ * session link and a `ROUT-04` routine link carry no viewer identity, so a
824
+ * block cannot withdraw one. Revoking the link is that control.
825
+ */
826
+ interface BlockedMember {
827
+ /** The blocked account's identity, as a search result carries it. */
828
+ member: UserSearchResponse;
829
+ blockedAt: IsoDateString;
830
+ }
831
+ /** Stable successful response of GET /users/me/blocks. */
832
+ interface BlockedMembersResponse {
833
+ blocks: BlockedMember[];
834
+ }
835
+ /** One account blocks at most this many others. */
836
+ declare const BLOCKED_MEMBERS_MAX = 500;
837
+ /** What a viewer may do about one profile, so the UI never offers a no-op. */
838
+ interface MemberModerationState {
839
+ /** The viewer has blocked this member. */
840
+ isBlocked: boolean;
841
+ }
842
+ declare const REPORT_SUBJECT_KINDS: readonly ["MEMBER", "ROUTINE", "SESSION"];
843
+ type ReportSubjectKind = (typeof REPORT_SUBJECT_KINDS)[number];
844
+ /**
845
+ * Why something was reported. The list is short and fixed on purpose: a free
846
+ * text field would collect personal data `TRUST-04` has nowhere to put yet.
847
+ */
848
+ declare const REPORT_REASONS: readonly ["SPAM", "HARASSMENT", "IMPERSONATION", "UNSAFE_ADVICE", "SEXUAL_CONTENT", "OTHER"];
849
+ type ReportReason = (typeof REPORT_REASONS)[number];
850
+ declare const REPORT_DETAILS_MAX_LENGTH = 500;
851
+ /** One account files at most this many reports a day. */
852
+ declare const REPORTS_PER_DAY_MAX = 20;
853
+ /** POST /reports */
854
+ interface CreateReportRequest {
855
+ subjectKind: ReportSubjectKind;
856
+ /** A member id or username, a routine id, or a session share token. */
857
+ subjectId: string;
858
+ reason: ReportReason;
859
+ /** Optional context from the reporter, never required. */
860
+ details?: string | null;
861
+ }
862
+ /**
863
+ * Stable successful response of POST /reports. It confirms the report was
864
+ * recorded and says nothing about review, because nothing reviews it yet.
865
+ */
866
+ interface CreateReportResponse {
867
+ id: string;
868
+ createdAt: IsoDateString;
869
+ }
870
+
871
+ /**
872
+ * ROUT-11: a WEEKLY routine ties each day to a weekday; a ROTATION routine
873
+ * runs its days in `order`, each after the last completed one, whatever the
874
+ * weekday.
875
+ */
876
+ declare const ROUTINE_SCHEDULE_MODES: readonly ["WEEKLY", "ROTATION"];
877
+ type RoutineScheduleMode = (typeof ROUTINE_SCHEDULE_MODES)[number];
878
+ /** At most seven days in either mode. */
879
+ declare const ROUTINE_DAYS_MAX = 7;
880
+ declare const ROUTINE_DAY_NAME_MAX = 40;
881
+ /**
882
+ * How a routine day is named everywhere, including history snapshots taken
883
+ * before ROUT-11: its own name, else its weekday, else its rotation letter
884
+ * ("Day A" for order 0).
885
+ */
886
+ declare function routineDayLabel(day: {
887
+ name?: string | null;
888
+ dayOfWeek?: number | null;
889
+ order?: number | null;
890
+ }): string;
891
+ interface RoutineSet {
892
+ setNumber: number;
893
+ repType: RepType;
894
+ reps?: number | null;
895
+ minReps?: number | null;
896
+ maxReps?: number | null;
897
+ weight?: number | null;
898
+ rir?: number | null;
899
+ }
900
+ interface RoutineExercise {
901
+ id: string;
902
+ order: number;
903
+ restSeconds: number;
904
+ note?: string | null;
905
+ progressionScheme: ProgressionScheme;
906
+ minWeightIncrement: number;
907
+ exercise: {
908
+ id: string;
909
+ name: string;
910
+ primaryMuscles?: MuscleGroup[];
911
+ secondaryMuscles?: MuscleGroup[];
912
+ };
913
+ sets: RoutineSet[];
914
+ }
915
+ interface CreateRoutineExerciseInput {
916
+ exerciseId: string;
917
+ order?: number;
918
+ restSeconds: number;
919
+ note?: string;
920
+ progressionScheme: ProgressionScheme;
921
+ minWeightIncrement: number;
922
+ sets: RoutineSet[];
923
+ }
924
+ interface RoutineDay {
925
+ id: string;
926
+ /** 0=Sun..6=Sat on a WEEKLY routine; null on a ROTATION routine. */
927
+ dayOfWeek: number | null;
928
+ /** Optional label such as "Push" or "Upper A" (see `routineDayLabel`). */
929
+ name: string | null;
930
+ /** Rotation sequence, 0-based; also the display order. */
931
+ order: number;
932
+ exercises: RoutineExercise[];
933
+ }
934
+ interface CreateRoutineDayInput {
935
+ /** Required and unique on a WEEKLY routine; omitted or null on a ROTATION. */
936
+ dayOfWeek?: number | null;
937
+ name?: string | null;
938
+ order?: number;
939
+ exercises: CreateRoutineExerciseInput[];
940
+ }
941
+ interface Routine {
942
+ id: string;
943
+ userId: string;
944
+ name: string;
945
+ description?: string | null;
946
+ isPeriodized: boolean;
947
+ isFavorite: boolean;
948
+ isCompleted: boolean;
949
+ scheduleMode: RoutineScheduleMode;
950
+ /**
951
+ * ROTATION only: the day after the one of the last completed session (an
952
+ * aborted session does not advance it), or the first day before any.
953
+ */
954
+ nextRotationDayId: string | null;
955
+ /**
956
+ * SCHED-07: weekdays (0=Sun..6=Sat) this weekly routine rests on by plan,
957
+ * never one of its training weekdays; always empty on a ROTATION routine.
958
+ */
959
+ restDays: number[];
960
+ /**
961
+ * SCHED-06: weekdays (0=Sun..6=Sat) a ROTATION routine trains on, sorted; the
962
+ * schedule places its days on them in order. Empty means any day, without
963
+ * dates; always empty on a WEEKLY routine.
964
+ */
965
+ rotationWeekdays: number[];
966
+ /**
967
+ * ROUT-04: who may read this routine, bounded by the account-level
968
+ * `PROF-06` routines rule. Owner-only field; it never appears in a shared
969
+ * read, where visibility is the reason the reader is there.
970
+ */
971
+ visibility: RoutineVisibility;
972
+ /**
973
+ * ROUT-06: present only on a routine that was cloned, and only with what
974
+ * this viewer is allowed to know about its source.
975
+ */
976
+ lineage?: RoutineLineage | null;
977
+ days: RoutineDay[];
978
+ createdAt: IsoDateString;
979
+ updatedAt: IsoDateString;
980
+ }
981
+ interface CreateRoutineRequest {
982
+ name: string;
983
+ description?: string;
984
+ isPeriodized: boolean;
985
+ /** Defaults to WEEKLY. Changing it on update requires `days`. */
986
+ scheduleMode?: RoutineScheduleMode;
987
+ /**
988
+ * Weekly routines only. Omitted on update keeps the stored rest days, minus
989
+ * any that became training weekdays.
990
+ */
991
+ restDays?: number[];
992
+ /**
993
+ * Rotation routines only. Omitted on update keeps the stored weekdays;
994
+ * switching to WEEKLY clears them.
995
+ */
996
+ rotationWeekdays?: number[];
997
+ days: CreateRoutineDayInput[];
998
+ }
999
+ type UpdateRoutineRequest = Partial<CreateRoutineRequest>;
1000
+ /** A routine keeps at most this many versions; saving past it is refused. */
1001
+ declare const ROUTINE_VERSIONS_MAX = 20;
1002
+ declare const ROUTINE_VERSION_NAME_MAX = 60;
1003
+ /**
1004
+ * SAVED is an intentional save; BEFORE_RESTORE is the setup a restore
1005
+ * replaced, saved automatically so the restore can be undone.
1006
+ */
1007
+ declare const ROUTINE_VERSION_KINDS: readonly ["SAVED", "BEFORE_RESTORE"];
1008
+ type RoutineVersionKind = (typeof ROUTINE_VERSION_KINDS)[number];
1009
+ interface RoutineVersionExercise {
1010
+ /** The catalog exercise and its name when the version was saved. */
1011
+ exercise: {
1012
+ id: string;
1013
+ name: string;
1014
+ };
1015
+ order: number;
1016
+ restSeconds: number;
1017
+ note: string | null;
1018
+ progressionScheme: ProgressionScheme;
1019
+ minWeightIncrement: number;
1020
+ sets: RoutineSet[];
1021
+ }
1022
+ interface RoutineVersionDay {
1023
+ dayOfWeek: number | null;
1024
+ name: string | null;
1025
+ order: number;
1026
+ exercises: RoutineVersionExercise[];
1027
+ }
1028
+ /** Everything a routine edit can change, as it was when the version was saved. */
1029
+ interface RoutineVersionSetup {
1030
+ name: string;
1031
+ description: string | null;
1032
+ scheduleMode: RoutineScheduleMode;
1033
+ restDays: number[];
1034
+ /** SCHED-06; absent in versions saved before it, which means none. */
1035
+ rotationWeekdays?: number[];
1036
+ days: RoutineVersionDay[];
1037
+ }
1038
+ interface RoutineVersion {
1039
+ id: string;
1040
+ routineId: string;
1041
+ /** 1, 2, 3… per routine, never reused after a deletion. */
1042
+ number: number;
1043
+ name: string | null;
1044
+ kind: RoutineVersionKind;
1045
+ /** BEFORE_RESTORE only: the number of the version that was restored. */
1046
+ restoredVersionNumber: number | null;
1047
+ createdAt: IsoDateString;
1048
+ setup: RoutineVersionSetup;
1049
+ }
1050
+ /** `GET /routines/:id/versions`, newest first. */
1051
+ interface RoutineVersionsResponse {
1052
+ versions: RoutineVersion[];
1053
+ max: number;
1054
+ }
1055
+ /** `POST /routines/:id/versions` */
1056
+ interface CreateRoutineVersionRequest {
1057
+ name?: string | null;
1058
+ }
1059
+ /** `POST /routines/:id/versions/:versionId/restore` */
1060
+ interface RestoreRoutineVersionResponse {
1061
+ routine: Routine;
1062
+ /** The replaced setup, saved as a BEFORE_RESTORE version. */
1063
+ savedVersion: RoutineVersion;
1064
+ }
1065
+
1066
+ /**
1067
+ * Per-routine visibility. The account-level `PROF-06` routines rule is the
1068
+ * upper bound: a routine marked `PUBLIC` inside an account whose routines are
1069
+ * `FOLLOWERS` is visible to followers only, the same way `SOC-04` bounds
1070
+ * activity by the profile section it comes from.
1071
+ */
1072
+ declare const ROUTINE_VISIBILITY_VALUES: readonly ["PRIVATE", "FOLLOWERS", "PUBLIC"];
1073
+ type RoutineVisibility = (typeof ROUTINE_VISIBILITY_VALUES)[number];
1074
+ /** One routine keeps at most this many active links. */
1075
+ declare const ROUTINE_SHARE_MAX_ACTIVE_LINKS = 10;
1076
+ /** PUT /routines/:id/visibility */
1077
+ interface UpdateRoutineVisibilityRequest {
1078
+ visibility: RoutineVisibility;
1079
+ }
1080
+ /** An active share link, visible only to the routine's owner. */
1081
+ interface RoutineShare {
1082
+ id: string;
1083
+ routineId: string;
1084
+ /** Unguessable identifier used in the public `/shared/routines/:token` URL. */
1085
+ token: string;
1086
+ createdAt: IsoDateString;
1087
+ }
1088
+ /** Stable successful response of GET /routines/:id/shares. */
1089
+ interface RoutineShareListResponse {
1090
+ items: RoutineShare[];
1091
+ }
1092
+ interface SharedRoutineOwner {
1093
+ username: string;
1094
+ name: string;
1095
+ lastName?: string | null;
1096
+ avatarUrl?: string | null;
1097
+ }
1098
+ /**
1099
+ * How a reader reached a routine. A link is the owner's explicit consent for
1100
+ * that one routine and ignores visibility; a visibility read is governed by
1101
+ * both the routine's own rule and the account's.
1102
+ */
1103
+ declare const SHARED_ROUTINE_SOURCES: readonly ["LINK", "VISIBILITY"];
1104
+ type SharedRoutineSource = (typeof SHARED_ROUTINE_SOURCES)[number];
1105
+ /**
1106
+ * Stable successful response of the unauthenticated
1107
+ * GET /shared/routines/:token, and of the authenticated member read.
1108
+ */
1109
+ interface SharedRoutine {
1110
+ /** Kept so a future clone (`ROUT-05`) can record what it came from. */
1111
+ routineId: string;
1112
+ setup: RoutineVersionSetup;
1113
+ owner: SharedRoutineOwner;
1114
+ source: SharedRoutineSource;
1115
+ /** When the routine was last changed, not when it was shared. */
1116
+ updatedAt: IsoDateString;
1117
+ }
1118
+ /**
1119
+ * ROUT-06. Where a cloned routine came from. It is recorded on the clone and
1120
+ * never on the source, so a routine cannot learn who copied it. It is served
1121
+ * only to a viewer who could read the source anyway: lineage must not become
1122
+ * a way to discover that a private routine exists.
1123
+ */
1124
+ interface RoutineLineage {
1125
+ /** The routine this one was cloned from, when the viewer may read it. */
1126
+ sourceRoutineId: string | null;
1127
+ /** The original author's public identity, when they still have one. */
1128
+ author: SharedRoutineOwner | null;
1129
+ /**
1130
+ * True when the source exists but this viewer may not read it, or its author
1131
+ * is gone. The clone still says it was cloned; it just cannot say from what.
1132
+ */
1133
+ isSourceHidden: boolean;
1134
+ clonedAt: IsoDateString;
1135
+ }
1136
+ /** A routine in a member's visible list, without loading its whole setup. */
1137
+ interface SharedRoutineSummary {
1138
+ routineId: string;
1139
+ name: string;
1140
+ description: string | null;
1141
+ scheduleMode: RoutineScheduleMode;
1142
+ dayCount: number;
1143
+ exerciseCount: number;
1144
+ updatedAt: IsoDateString;
1145
+ }
1146
+ /** Stable successful response of GET /users/:identifier/routines. */
1147
+ interface MemberRoutinesResponse {
1148
+ routines: SharedRoutineSummary[];
1149
+ }
1150
+ /**
1151
+ * POST /routines/clones. Exactly one source, matching the two ways a routine
1152
+ * can be read: `token` for a private link, `routineId` for one the viewer may
1153
+ * already see. Sending both, or neither, is refused.
1154
+ */
1155
+ interface CloneRoutineRequest {
1156
+ /** The `/shared/routines/:token` link the reader followed. */
1157
+ token?: string;
1158
+ /** A routine the viewer may read under `ROUT-04` visibility. */
1159
+ routineId?: string;
1160
+ }
1161
+ /** The refusals a clone states by name rather than as a bare 4xx. */
1162
+ declare const CLONE_ROUTINE_REFUSALS: {
1163
+ /** Neither `token` nor `routineId`, or both at once. */
1164
+ readonly SOURCE_REQUIRED: "SOURCE_REQUIRED";
1165
+ /** An exercise the routine programs is no longer in the catalog. */
1166
+ readonly UNKNOWN_EXERCISE: "UNKNOWN_EXERCISE";
1167
+ };
1168
+ type CloneRoutineRefusal = (typeof CLONE_ROUTINE_REFUSALS)[keyof typeof CLONE_ROUTINE_REFUSALS];
1169
+
815
1170
  declare const USERNAME_MIN_LENGTH = 3;
816
1171
  declare const USERNAME_MAX_LENGTH = 30;
817
1172
  declare const USERNAME_PATTERN_SOURCE = "^[a-z0-9][a-z0-9_-]{1,28}[a-z0-9]$";
@@ -879,7 +1234,12 @@ interface PublicBodyMetrics {
879
1234
  weightKg?: number | null;
880
1235
  heightCm?: number | null;
881
1236
  }
882
- declare const FEATURED_PROFILE_ITEM_KINDS: readonly ["RECORD", "ACHIEVEMENT", "RANK"];
1237
+ /**
1238
+ * `ROUTINE` is `PROF-08`: a shared routine is a fourth kind of featured item,
1239
+ * not a second showcase. It carries a `SharedRoutineSummary`, so a slot on a
1240
+ * profile still cannot express the owner's training.
1241
+ */
1242
+ declare const FEATURED_PROFILE_ITEM_KINDS: readonly ["RECORD", "ACHIEVEMENT", "RANK", "ROUTINE"];
883
1243
  type FeaturedProfileItemKind = (typeof FEATURED_PROFILE_ITEM_KINDS)[number];
884
1244
  declare const FEATURED_PROFILE_ITEMS_MAX = 6;
885
1245
  declare const FEATURED_PROFILE_REFERENCE_MAX_LENGTH = 100;
@@ -911,8 +1271,18 @@ interface FeaturedProfileRankItem extends FeaturedProfileItemBase {
911
1271
  kind: 'RANK';
912
1272
  rank: RenaissanceRankDefinition;
913
1273
  }
1274
+ /**
1275
+ * PROF-08. `referenceId` is the routine's id. It is resolved through the same
1276
+ * `ROUT-04` rule as every other read of somebody else's routine, so the
1277
+ * account-level `PROF-06` routines rule caps the routine's own visibility and
1278
+ * a slot the viewer may not see is omitted rather than emptied.
1279
+ */
1280
+ interface FeaturedProfileRoutineItem extends FeaturedProfileItemBase {
1281
+ kind: 'ROUTINE';
1282
+ routine: SharedRoutineSummary;
1283
+ }
914
1284
  /** Privacy-filtered, currently valid selections in owner-defined order. */
915
- type FeaturedProfileItem = FeaturedProfileRecordItem | FeaturedProfileAchievementItem | FeaturedProfileRankItem;
1285
+ type FeaturedProfileItem = FeaturedProfileRecordItem | FeaturedProfileAchievementItem | FeaturedProfileRankItem | FeaturedProfileRoutineItem;
916
1286
  /** Complete earned ledger allowed by the profile achievements privacy rule. */
917
1287
  interface PublicProfileAchievements {
918
1288
  rank: RenaissanceRankDefinition | null;
@@ -956,6 +1326,12 @@ interface PublicUserProfile {
956
1326
  followerCount: number;
957
1327
  followingCount: number;
958
1328
  isFollowedByMe: boolean;
1329
+ /**
1330
+ * PROF-10: only on the authenticated read, and only about the viewer's own
1331
+ * action. A profile never says it has blocked the viewer — a blocked viewer
1332
+ * gets a 404, as a denied routine does.
1333
+ */
1334
+ moderation?: MemberModerationState;
959
1335
  viewerAccess: ProfileViewerAccess;
960
1336
  trainingSummary?: PublicTrainingSummary;
961
1337
  personalRecords?: PersonalRecordEntry[];
@@ -1069,371 +1445,114 @@ interface SupabaseAuthUser {
1069
1445
  }
1070
1446
  interface SupabaseAuthResponse {
1071
1447
  user: SupabaseAuthUser;
1072
- message?: string;
1073
- requiresEmailVerification?: boolean;
1074
- }
1075
- interface SupabaseMigrationResponse {
1076
- message: string;
1077
- userId: string;
1078
- email: string;
1079
- }
1080
-
1081
- /**
1082
- * How an exercise moves (EXER-09). Compound patterns first, then the
1083
- * single-joint actions the catalog uses. Alternatives start from this plus
1084
- * primary muscles; `substitutionGroup` is the narrower, near-identical set.
1085
- */
1086
- declare const MOVEMENT_PATTERNS: readonly ["HORIZONTAL_PUSH", "VERTICAL_PUSH", "HORIZONTAL_PULL", "VERTICAL_PULL", "SQUAT", "HINGE", "LUNGE", "CHEST_FLY", "SHOULDER_ABDUCTION", "SHOULDER_FLEXION", "SHOULDER_HORIZONTAL_ABDUCTION", "SHOULDER_EXTENSION", "SCAPULAR_ELEVATION", "ELBOW_FLEXION", "ELBOW_EXTENSION", "KNEE_EXTENSION", "KNEE_FLEXION", "HIP_EXTENSION", "PLANTAR_FLEXION", "CORE_FLEXION", "CORE_ROTATION", "CORE_STABILITY"];
1087
- type MovementPattern = (typeof MOVEMENT_PATTERNS)[number];
1088
- declare const EXERCISE_MECHANICS: readonly ["COMPOUND", "ISOLATION"];
1089
- type ExerciseMechanic = (typeof EXERCISE_MECHANICS)[number];
1090
- /**
1091
- * Closed, lowercase vocabulary for what an exercise needs. Lowercase so it can
1092
- * be compared with the free-text equipment users list on a training location
1093
- * (PREF-01), which is normalized to lowercase.
1094
- */
1095
- declare const EXERCISE_EQUIPMENT: readonly ["barbell", "ez-bar", "dumbbell", "cable", "machine", "smith-machine", "bench", "incline-bench", "preacher-bench", "rack", "pull-up-bar", "dip-station", "bodyweight"];
1096
- type ExerciseEquipment = (typeof EXERCISE_EQUIPMENT)[number];
1097
- interface Exercise {
1098
- id: string;
1099
- name: string;
1100
- primaryMuscles: MuscleGroup[];
1101
- secondaryMuscles: MuscleGroup[];
1102
- /** The primary implement, kept for existing displays. */
1103
- equipment: string;
1104
- /** Null only for entries without catalog metadata (e.g. future custom exercises). */
1105
- movementPattern: MovementPattern | null;
1106
- mechanic: ExerciseMechanic | null;
1107
- /** Everything needed to perform the exercise, from `EXERCISE_EQUIPMENT`. */
1108
- equipmentRequired: ExerciseEquipment[];
1109
- /** Near-identical exercises share a group and can replace each other. */
1110
- substitutionGroup: string | null;
1111
- /** Ordered cues; empty until the content work in EXER-03 lands. */
1112
- instructions: string[];
1113
- /** Demonstration asset; null until EXER-04 supplies licensed media. */
1114
- mediaUrl: string | null;
1115
- createdAt: IsoDateString;
1116
- updatedAt: IsoDateString;
1117
- }
1118
- /**
1119
- * The most catalog exercises one account can star. Starring is a private
1120
- * working preference that orders pickers; it is separate from the public
1121
- * favorite exercises on the training identity.
1122
- */
1123
- declare const STARRED_EXERCISES_MAX = 100;
1124
- interface StarredExercise {
1125
- exerciseId: string;
1126
- starredAt: IsoDateString;
1127
- }
1128
- /**
1129
- * Response of GET /exercises/starred and of PUT/DELETE
1130
- * /exercises/:id/star. Newest first.
1131
- */
1132
- interface StarredExercisesResponse {
1133
- items: StarredExercise[];
1134
- }
1135
-
1136
- declare const MEASURABLE_GOAL_TYPES: readonly ["WEEKLY_SESSIONS", "WEEKLY_VOLUME", "STREAK_DAYS", "EXERCISE_ESTIMATED_1RM", "BODY_WEIGHT"];
1137
- type MeasurableGoalType = (typeof MEASURABLE_GOAL_TYPES)[number];
1138
- declare const MEASURABLE_GOAL_DIRECTIONS: readonly ["AT_LEAST", "AT_MOST"];
1139
- type MeasurableGoalDirection = (typeof MEASURABLE_GOAL_DIRECTIONS)[number];
1140
- declare const MEASURABLE_GOALS_MAX = 8;
1141
- interface MeasurableGoalExercise {
1142
- id: string;
1143
- name: string;
1144
- }
1145
- /** A private target stored in canonical units (kg where applicable). */
1146
- interface MeasurableGoal {
1147
- id: string;
1148
- type: MeasurableGoalType;
1149
- targetValue: number;
1150
- direction: MeasurableGoalDirection;
1151
- exercise?: MeasurableGoalExercise | null;
1152
- createdAt: IsoDateString;
1153
- updatedAt: IsoDateString;
1154
- }
1155
- interface MeasurableGoalInput {
1156
- id?: string;
1157
- type: MeasurableGoalType;
1158
- targetValue: number;
1159
- /** Only BODY_WEIGHT may use AT_MOST; every other goal is AT_LEAST. */
1160
- direction?: MeasurableGoalDirection;
1161
- /** Required only for EXERCISE_ESTIMATED_1RM. */
1162
- exerciseId?: string;
1163
- }
1164
- interface ReplaceMeasurableGoalsRequest {
1165
- goals: MeasurableGoalInput[];
1166
- }
1167
- interface PersonalGoalProgress extends MeasurableGoal {
1168
- currentValue: number | null;
1169
- remainingValue: number | null;
1170
- progressPercent: number | null;
1171
- achieved: boolean | null;
1172
- /** Monday-based local week for WEEKLY_SESSIONS and WEEKLY_VOLUME. */
1173
- periodStart?: string;
1174
- }
1175
- /** Stable successful response of GET /workouts/progress/goals. */
1176
- interface PersonalGoalsResponse {
1177
- timeZone: string;
1178
- asOf: IsoDateString;
1179
- goals: PersonalGoalProgress[];
1180
- }
1181
-
1182
- /**
1183
- * Per-routine visibility. The account-level `PROF-06` routines rule is the
1184
- * upper bound: a routine marked `PUBLIC` inside an account whose routines are
1185
- * `FOLLOWERS` is visible to followers only, the same way `SOC-04` bounds
1186
- * activity by the profile section it comes from.
1187
- */
1188
- declare const ROUTINE_VISIBILITY_VALUES: readonly ["PRIVATE", "FOLLOWERS", "PUBLIC"];
1189
- type RoutineVisibility = (typeof ROUTINE_VISIBILITY_VALUES)[number];
1190
- /** One routine keeps at most this many active links. */
1191
- declare const ROUTINE_SHARE_MAX_ACTIVE_LINKS = 10;
1192
- /** PUT /routines/:id/visibility */
1193
- interface UpdateRoutineVisibilityRequest {
1194
- visibility: RoutineVisibility;
1195
- }
1196
- /** An active share link, visible only to the routine's owner. */
1197
- interface RoutineShare {
1198
- id: string;
1199
- routineId: string;
1200
- /** Unguessable identifier used in the public `/shared/routines/:token` URL. */
1201
- token: string;
1202
- createdAt: IsoDateString;
1203
- }
1204
- /** Stable successful response of GET /routines/:id/shares. */
1205
- interface RoutineShareListResponse {
1206
- items: RoutineShare[];
1207
- }
1208
- interface SharedRoutineOwner {
1209
- username: string;
1210
- name: string;
1211
- lastName?: string | null;
1212
- avatarUrl?: string | null;
1213
- }
1214
- /**
1215
- * How a reader reached a routine. A link is the owner's explicit consent for
1216
- * that one routine and ignores visibility; a visibility read is governed by
1217
- * both the routine's own rule and the account's.
1218
- */
1219
- declare const SHARED_ROUTINE_SOURCES: readonly ["LINK", "VISIBILITY"];
1220
- type SharedRoutineSource = (typeof SHARED_ROUTINE_SOURCES)[number];
1221
- /**
1222
- * Stable successful response of the unauthenticated
1223
- * GET /shared/routines/:token, and of the authenticated member read.
1224
- */
1225
- interface SharedRoutine {
1226
- /** Kept so a future clone (`ROUT-05`) can record what it came from. */
1227
- routineId: string;
1228
- setup: RoutineVersionSetup;
1229
- owner: SharedRoutineOwner;
1230
- source: SharedRoutineSource;
1231
- /** When the routine was last changed, not when it was shared. */
1232
- updatedAt: IsoDateString;
1233
- }
1234
- /** A routine in a member's visible list, without loading its whole setup. */
1235
- interface SharedRoutineSummary {
1236
- routineId: string;
1237
- name: string;
1238
- description: string | null;
1239
- scheduleMode: RoutineScheduleMode;
1240
- dayCount: number;
1241
- exerciseCount: number;
1242
- updatedAt: IsoDateString;
1448
+ message?: string;
1449
+ requiresEmailVerification?: boolean;
1243
1450
  }
1244
- /** Stable successful response of GET /users/:identifier/routines. */
1245
- interface MemberRoutinesResponse {
1246
- routines: SharedRoutineSummary[];
1451
+ interface SupabaseMigrationResponse {
1452
+ message: string;
1453
+ userId: string;
1454
+ email: string;
1247
1455
  }
1248
1456
 
1249
1457
  /**
1250
- * ROUT-11: a WEEKLY routine ties each day to a weekday; a ROTATION routine
1251
- * runs its days in `order`, each after the last completed one, whatever the
1252
- * weekday.
1458
+ * How an exercise moves (EXER-09). Compound patterns first, then the
1459
+ * single-joint actions the catalog uses. Alternatives start from this plus
1460
+ * primary muscles; `substitutionGroup` is the narrower, near-identical set.
1253
1461
  */
1254
- declare const ROUTINE_SCHEDULE_MODES: readonly ["WEEKLY", "ROTATION"];
1255
- type RoutineScheduleMode = (typeof ROUTINE_SCHEDULE_MODES)[number];
1256
- /** At most seven days in either mode. */
1257
- declare const ROUTINE_DAYS_MAX = 7;
1258
- declare const ROUTINE_DAY_NAME_MAX = 40;
1462
+ declare const MOVEMENT_PATTERNS: readonly ["HORIZONTAL_PUSH", "VERTICAL_PUSH", "HORIZONTAL_PULL", "VERTICAL_PULL", "SQUAT", "HINGE", "LUNGE", "CHEST_FLY", "SHOULDER_ABDUCTION", "SHOULDER_FLEXION", "SHOULDER_HORIZONTAL_ABDUCTION", "SHOULDER_EXTENSION", "SCAPULAR_ELEVATION", "ELBOW_FLEXION", "ELBOW_EXTENSION", "KNEE_EXTENSION", "KNEE_FLEXION", "HIP_EXTENSION", "PLANTAR_FLEXION", "CORE_FLEXION", "CORE_ROTATION", "CORE_STABILITY"];
1463
+ type MovementPattern = (typeof MOVEMENT_PATTERNS)[number];
1464
+ declare const EXERCISE_MECHANICS: readonly ["COMPOUND", "ISOLATION"];
1465
+ type ExerciseMechanic = (typeof EXERCISE_MECHANICS)[number];
1259
1466
  /**
1260
- * How a routine day is named everywhere, including history snapshots taken
1261
- * before ROUT-11: its own name, else its weekday, else its rotation letter
1262
- * ("Day A" for order 0).
1467
+ * Closed, lowercase vocabulary for what an exercise needs. Lowercase so it can
1468
+ * be compared with the free-text equipment users list on a training location
1469
+ * (PREF-01), which is normalized to lowercase.
1263
1470
  */
1264
- declare function routineDayLabel(day: {
1265
- name?: string | null;
1266
- dayOfWeek?: number | null;
1267
- order?: number | null;
1268
- }): string;
1269
- interface RoutineSet {
1270
- setNumber: number;
1271
- repType: RepType;
1272
- reps?: number | null;
1273
- minReps?: number | null;
1274
- maxReps?: number | null;
1275
- weight?: number | null;
1276
- rir?: number | null;
1277
- }
1278
- interface RoutineExercise {
1279
- id: string;
1280
- order: number;
1281
- restSeconds: number;
1282
- note?: string | null;
1283
- progressionScheme: ProgressionScheme;
1284
- minWeightIncrement: number;
1285
- exercise: {
1286
- id: string;
1287
- name: string;
1288
- primaryMuscles?: MuscleGroup[];
1289
- secondaryMuscles?: MuscleGroup[];
1290
- };
1291
- sets: RoutineSet[];
1292
- }
1293
- interface CreateRoutineExerciseInput {
1294
- exerciseId: string;
1295
- order?: number;
1296
- restSeconds: number;
1297
- note?: string;
1298
- progressionScheme: ProgressionScheme;
1299
- minWeightIncrement: number;
1300
- sets: RoutineSet[];
1301
- }
1302
- interface RoutineDay {
1303
- id: string;
1304
- /** 0=Sun..6=Sat on a WEEKLY routine; null on a ROTATION routine. */
1305
- dayOfWeek: number | null;
1306
- /** Optional label such as "Push" or "Upper A" (see `routineDayLabel`). */
1307
- name: string | null;
1308
- /** Rotation sequence, 0-based; also the display order. */
1309
- order: number;
1310
- exercises: RoutineExercise[];
1311
- }
1312
- interface CreateRoutineDayInput {
1313
- /** Required and unique on a WEEKLY routine; omitted or null on a ROTATION. */
1314
- dayOfWeek?: number | null;
1315
- name?: string | null;
1316
- order?: number;
1317
- exercises: CreateRoutineExerciseInput[];
1318
- }
1319
- interface Routine {
1471
+ declare const EXERCISE_EQUIPMENT: readonly ["barbell", "ez-bar", "dumbbell", "cable", "machine", "smith-machine", "bench", "incline-bench", "preacher-bench", "rack", "pull-up-bar", "dip-station", "bodyweight"];
1472
+ type ExerciseEquipment = (typeof EXERCISE_EQUIPMENT)[number];
1473
+ interface Exercise {
1320
1474
  id: string;
1321
- userId: string;
1322
1475
  name: string;
1323
- description?: string | null;
1324
- isPeriodized: boolean;
1325
- isFavorite: boolean;
1326
- isCompleted: boolean;
1327
- scheduleMode: RoutineScheduleMode;
1328
- /**
1329
- * ROTATION only: the day after the one of the last completed session (an
1330
- * aborted session does not advance it), or the first day before any.
1331
- */
1332
- nextRotationDayId: string | null;
1333
- /**
1334
- * SCHED-07: weekdays (0=Sun..6=Sat) this weekly routine rests on by plan,
1335
- * never one of its training weekdays; always empty on a ROTATION routine.
1336
- */
1337
- restDays: number[];
1338
- /**
1339
- * SCHED-06: weekdays (0=Sun..6=Sat) a ROTATION routine trains on, sorted; the
1340
- * schedule places its days on them in order. Empty means any day, without
1341
- * dates; always empty on a WEEKLY routine.
1342
- */
1343
- rotationWeekdays: number[];
1344
- /**
1345
- * ROUT-04: who may read this routine, bounded by the account-level
1346
- * `PROF-06` routines rule. Owner-only field; it never appears in a shared
1347
- * read, where visibility is the reason the reader is there.
1348
- */
1349
- visibility: RoutineVisibility;
1350
- days: RoutineDay[];
1476
+ primaryMuscles: MuscleGroup[];
1477
+ secondaryMuscles: MuscleGroup[];
1478
+ /** The primary implement, kept for existing displays. */
1479
+ equipment: string;
1480
+ /** Null only for entries without catalog metadata (e.g. future custom exercises). */
1481
+ movementPattern: MovementPattern | null;
1482
+ mechanic: ExerciseMechanic | null;
1483
+ /** Everything needed to perform the exercise, from `EXERCISE_EQUIPMENT`. */
1484
+ equipmentRequired: ExerciseEquipment[];
1485
+ /** Near-identical exercises share a group and can replace each other. */
1486
+ substitutionGroup: string | null;
1487
+ /** Ordered cues; empty until the content work in EXER-03 lands. */
1488
+ instructions: string[];
1489
+ /** Demonstration asset; null until EXER-04 supplies licensed media. */
1490
+ mediaUrl: string | null;
1351
1491
  createdAt: IsoDateString;
1352
1492
  updatedAt: IsoDateString;
1353
1493
  }
1354
- interface CreateRoutineRequest {
1355
- name: string;
1356
- description?: string;
1357
- isPeriodized: boolean;
1358
- /** Defaults to WEEKLY. Changing it on update requires `days`. */
1359
- scheduleMode?: RoutineScheduleMode;
1360
- /**
1361
- * Weekly routines only. Omitted on update keeps the stored rest days, minus
1362
- * any that became training weekdays.
1363
- */
1364
- restDays?: number[];
1365
- /**
1366
- * Rotation routines only. Omitted on update keeps the stored weekdays;
1367
- * switching to WEEKLY clears them.
1368
- */
1369
- rotationWeekdays?: number[];
1370
- days: CreateRoutineDayInput[];
1371
- }
1372
- type UpdateRoutineRequest = Partial<CreateRoutineRequest>;
1373
- /** A routine keeps at most this many versions; saving past it is refused. */
1374
- declare const ROUTINE_VERSIONS_MAX = 20;
1375
- declare const ROUTINE_VERSION_NAME_MAX = 60;
1376
1494
  /**
1377
- * SAVED is an intentional save; BEFORE_RESTORE is the setup a restore
1378
- * replaced, saved automatically so the restore can be undone.
1495
+ * The most catalog exercises one account can star. Starring is a private
1496
+ * working preference that orders pickers; it is separate from the public
1497
+ * favorite exercises on the training identity.
1379
1498
  */
1380
- declare const ROUTINE_VERSION_KINDS: readonly ["SAVED", "BEFORE_RESTORE"];
1381
- type RoutineVersionKind = (typeof ROUTINE_VERSION_KINDS)[number];
1382
- interface RoutineVersionExercise {
1383
- /** The catalog exercise and its name when the version was saved. */
1384
- exercise: {
1385
- id: string;
1386
- name: string;
1387
- };
1388
- order: number;
1389
- restSeconds: number;
1390
- note: string | null;
1391
- progressionScheme: ProgressionScheme;
1392
- minWeightIncrement: number;
1393
- sets: RoutineSet[];
1499
+ declare const STARRED_EXERCISES_MAX = 100;
1500
+ interface StarredExercise {
1501
+ exerciseId: string;
1502
+ starredAt: IsoDateString;
1394
1503
  }
1395
- interface RoutineVersionDay {
1396
- dayOfWeek: number | null;
1397
- name: string | null;
1398
- order: number;
1399
- exercises: RoutineVersionExercise[];
1504
+ /**
1505
+ * Response of GET /exercises/starred and of PUT/DELETE
1506
+ * /exercises/:id/star. Newest first.
1507
+ */
1508
+ interface StarredExercisesResponse {
1509
+ items: StarredExercise[];
1400
1510
  }
1401
- /** Everything a routine edit can change, as it was when the version was saved. */
1402
- interface RoutineVersionSetup {
1511
+
1512
+ declare const MEASURABLE_GOAL_TYPES: readonly ["WEEKLY_SESSIONS", "WEEKLY_VOLUME", "STREAK_DAYS", "EXERCISE_ESTIMATED_1RM", "BODY_WEIGHT"];
1513
+ type MeasurableGoalType = (typeof MEASURABLE_GOAL_TYPES)[number];
1514
+ declare const MEASURABLE_GOAL_DIRECTIONS: readonly ["AT_LEAST", "AT_MOST"];
1515
+ type MeasurableGoalDirection = (typeof MEASURABLE_GOAL_DIRECTIONS)[number];
1516
+ declare const MEASURABLE_GOALS_MAX = 8;
1517
+ interface MeasurableGoalExercise {
1518
+ id: string;
1403
1519
  name: string;
1404
- description: string | null;
1405
- scheduleMode: RoutineScheduleMode;
1406
- restDays: number[];
1407
- /** SCHED-06; absent in versions saved before it, which means none. */
1408
- rotationWeekdays?: number[];
1409
- days: RoutineVersionDay[];
1410
1520
  }
1411
- interface RoutineVersion {
1521
+ /** A private target stored in canonical units (kg where applicable). */
1522
+ interface MeasurableGoal {
1412
1523
  id: string;
1413
- routineId: string;
1414
- /** 1, 2, 3… per routine, never reused after a deletion. */
1415
- number: number;
1416
- name: string | null;
1417
- kind: RoutineVersionKind;
1418
- /** BEFORE_RESTORE only: the number of the version that was restored. */
1419
- restoredVersionNumber: number | null;
1524
+ type: MeasurableGoalType;
1525
+ targetValue: number;
1526
+ direction: MeasurableGoalDirection;
1527
+ exercise?: MeasurableGoalExercise | null;
1420
1528
  createdAt: IsoDateString;
1421
- setup: RoutineVersionSetup;
1529
+ updatedAt: IsoDateString;
1422
1530
  }
1423
- /** `GET /routines/:id/versions`, newest first. */
1424
- interface RoutineVersionsResponse {
1425
- versions: RoutineVersion[];
1426
- max: number;
1531
+ interface MeasurableGoalInput {
1532
+ id?: string;
1533
+ type: MeasurableGoalType;
1534
+ targetValue: number;
1535
+ /** Only BODY_WEIGHT may use AT_MOST; every other goal is AT_LEAST. */
1536
+ direction?: MeasurableGoalDirection;
1537
+ /** Required only for EXERCISE_ESTIMATED_1RM. */
1538
+ exerciseId?: string;
1427
1539
  }
1428
- /** `POST /routines/:id/versions` */
1429
- interface CreateRoutineVersionRequest {
1430
- name?: string | null;
1540
+ interface ReplaceMeasurableGoalsRequest {
1541
+ goals: MeasurableGoalInput[];
1431
1542
  }
1432
- /** `POST /routines/:id/versions/:versionId/restore` */
1433
- interface RestoreRoutineVersionResponse {
1434
- routine: Routine;
1435
- /** The replaced setup, saved as a BEFORE_RESTORE version. */
1436
- savedVersion: RoutineVersion;
1543
+ interface PersonalGoalProgress extends MeasurableGoal {
1544
+ currentValue: number | null;
1545
+ remainingValue: number | null;
1546
+ progressPercent: number | null;
1547
+ achieved: boolean | null;
1548
+ /** Monday-based local week for WEEKLY_SESSIONS and WEEKLY_VOLUME. */
1549
+ periodStart?: string;
1550
+ }
1551
+ /** Stable successful response of GET /workouts/progress/goals. */
1552
+ interface PersonalGoalsResponse {
1553
+ timeZone: string;
1554
+ asOf: IsoDateString;
1555
+ goals: PersonalGoalProgress[];
1437
1556
  }
1438
1557
 
1439
1558
  /** A local calendar date, YYYY-MM-DD. */
@@ -1760,4 +1879,4 @@ interface PlannedReminder {
1760
1879
  routineNames: string[];
1761
1880
  }
1762
1881
 
1763
- export { ACHIEVEMENT_CATEGORIES, ACHIEVEMENT_DEFINITIONS, type AchievementCategory, type AchievementCategoryProgress, type AchievementDefinition, type AchievementNotification, type AchievementUnlockedEventPayload, type AchievementsResponse, type AppNotification, type Brand, COMEBACK_MIN_INACTIVE_DAYS, COMEBACK_RECOGNITION_LIMIT, COMEBACK_REQUIRED_ACTIVE_DAYS, COMEBACK_SESSION_LOOKBACK, COMEBACK_WINDOW_DAYS, type CalendarDate, type ComebackRecognition, type ComebackRecognitionSummary, type CreateRoutineDayInput, type CreateRoutineExerciseInput, type CreateRoutineRequest, type CreateRoutineVersionRequest, type CreateSessionShareRequest, type DeletePushSubscriptionRequest, EXERCISE_EQUIPMENT, EXERCISE_MECHANICS, type EarnedAchievement, type EarnedPersonalRecord, type Exercise, type ExerciseEquipment, type ExerciseId, type ExerciseMechanic, type ExercisePerformanceHistoryQuery, type ExercisePerformanceHistoryResponse, type ExercisePerformancePrescription, type ExercisePerformancePrescriptionSet, type ExercisePerformanceSession, type ExercisePerformanceSet, type ExercisePerformanceSummary, type ExercisePlateau, type ExerciseStrengthSummary, type ExerciseStrengthTrendPoint, type ExerciseStrengthTrendQuery, type ExerciseStrengthTrendResponse, FEATURED_PROFILE_ITEMS_MAX, FEATURED_PROFILE_ITEM_KINDS, FEATURED_PROFILE_REFERENCE_MAX_LENGTH, FOLLOW_SUGGESTIONS_DEFAULT_LIMIT, FOLLOW_SUGGESTIONS_MAX_LIMIT, FOLLOW_SUGGESTION_REASONS, type FeaturedProfileAchievementItem, type FeaturedProfileItem, type FeaturedProfileItemKind, type FeaturedProfileRankItem, type FeaturedProfileRecordItem, type FeaturedProfileSelection, type FeaturedProfileSelectionInput, type FeaturedProfileSelectionsResponse, type FinishStatus, type FinishWorkoutRequest, type FinishWorkoutResponse, type FollowSuggestion, type FollowSuggestionReason, type FollowSuggestionsResponse, type IsoDateString, type ListSessionsParams, MEASURABLE_GOALS_MAX, MEASURABLE_GOAL_DIRECTIONS, MEASURABLE_GOAL_TYPES, MINUTES_IN_DAY, MOVEMENT_PATTERNS, MUSCLE_GROUPS, type MarkNotificationsReadRequest, type MarkNotificationsReadResponse, type MeasurableGoal, type MeasurableGoalDirection, type MeasurableGoalExercise, type MeasurableGoalInput, type MeasurableGoalType, type MemberRoutinesResponse, type MoveOccurrenceRequest, type MovementPattern, type MuscleGroup, type MuscleGroupHeatmapQuery, type MuscleGroupHeatmapResponse, type MuscleGroupHeatmapValue, type MuscleGroupHeatmapWeek, type MuscleVolumeTrendSeries, NOTIFICATIONS_LIST_LIMIT, NOTIFICATIONS_LOOKBACK_DAYS, NOTIFICATIONS_RETENTION_DAYS, NOTIFICATION_CATEGORIES, NOTIFICATION_KINDS, type NewFollowerNotification, type NotificationCategory, type NotificationKind, type NotificationPreferences, type NotificationPreferencesResponse, type NotificationsResponse, PLATEAU_MIN_DAYS_SINCE_BEST, PLATEAU_MIN_SESSIONS, PLATEAU_MIN_SESSIONS_MAX, PLATEAU_MIN_SESSIONS_MIN, PLATEAU_RECENT_DAYS, PLATEAU_WINDOW_DAYS, PREFERRED_TRAINING_STYLE_VALUES, PROFILE_BIO_MAX_LENGTH, PROFILE_FAVORITE_EXERCISES_MAX, PROFILE_LOCATION_MAX_LENGTH, PROFILE_TRAINING_DISCIPLINES_MAX, PROFILE_TRAINING_GOALS_MAX, PROFILE_VISIBILITY_VALUES, PROGRESSION_SCHEMES, PROGRESS_TIMELINE_EVENT_TYPES, PUSH_PAYLOAD_KINDS, PUSH_SUBSCRIPTIONS_MAX, type PaginatedResponse, type PersonalGoalProgress, type PersonalGoalsResponse, type PersonalRecordEntry, type PersonalRecordKind, type PlannedReminder, type PlatePairInventory, type PlateauPreferences, type PlateauSet, type PlateausResponse, type PreferredTrainingStyle, type PreviousPerformanceResponse, type PreviousSessionRecap, type PreviousSetPerformance, type ProfileDiscoverySettings, type ProfileFavoriteExercise, type ProfilePrivacySettings, type ProfileViewerAccess, type ProfileVisibility, type ProgressTimelineEventType, type ProgressTimelineItem, type ProgressTimelinePersonalRecordItem, type ProgressTimelineProgressionItem, type ProgressTimelineQuery, type ProgressTimelineRecordPerformance, type ProgressTimelineRecordReason, type ProgressTimelineResponse, type ProgressTimelineSessionContext, type ProgressionChange, type ProgressionRule, type ProgressionScheme, type ProgressionSetChange, type PublicBodyMetrics, type PublicProfileAchievements, type PublicTrainingSummary, type PublicUserProfile, type PushPayload, type PushPayloadKind, type PushSubscriptionKeys, type PushSubscriptionSummary, type PushSubscriptionsResponse, type QuietHours, RELATIONSHIP_LIST_DEFAULT_LIMIT, RELATIONSHIP_LIST_KINDS, RELATIONSHIP_LIST_MAX_LIMIT, RENAISSANCE_RANK_DEFINITIONS, 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_SCHEDULE_MODES, ROUTINE_SHARE_MAX_ACTIVE_LINKS, ROUTINE_VERSIONS_MAX, ROUTINE_VERSION_KINDS, ROUTINE_VERSION_NAME_MAX, ROUTINE_VISIBILITY_VALUES, type RecentActivityEntry, type RegisterPushSubscriptionRequest, type RelationshipListKind, type RelationshipListQuery, type RelationshipListResponse, type RelationshipMember, type RenaissanceRankDefinition, type RenaissanceRankProgress, type RepType, type ReplaceFeaturedProfileItemsRequest, type ReplaceMeasurableGoalsRequest, type ReplaceTrainingLocationsRequest, type RestAlertPushPayload, type RestAlertRefusal, type RestoreRoutineVersionResponse, type Routine, type RoutineDay, type RoutineDayId, type RoutineExercise, type RoutineId, type RoutineScheduleMode, type RoutineSet, type RoutineShare, type RoutineShareListResponse, type RoutineVersion, type RoutineVersionDay, type RoutineVersionExercise, type RoutineVersionKind, type RoutineVersionSetup, type RoutineVersionsResponse, type RoutineVisibility, SCHEDULE_MOVE_MAX_DAYS, SCHEDULE_OVERRIDES_MAX_RANGE_DAYS, SCHEDULE_OVERRIDE_KINDS, SCHEDULE_SKIP_PAST_DAYS, SESSION_SHARE_DEFAULT_FIELDS, SESSION_SHARE_FIELDS, SESSION_SHARE_MAX_ACTIVE_LINKS, SEXES, SHARED_ROUTINE_SOURCES, STARRED_EXERCISES_MAX, STREAK_MAX_GAP_DAYS, type ScheduleOverride, type ScheduleOverrideKind, type ScheduleOverridesQuery, type ScheduleOverridesResponse, type ScheduleRestAlertRequest, type ScheduleRestAlertResponse, type SessionComparisonExercise, type SessionComparisonQuery, type SessionComparisonResponse, type SessionComparisonRoutineDay, type SessionComparisonSession, type SessionComparisonSet, type SessionExerciseSubstitution, type SessionProgressNotification, type SessionRecapRecord, type SessionShare, type SessionShareField, type SessionShareListResponse, type SetAccountTimeZoneRequest, type SetLog, type Sex, type SharedRoutine, type SharedRoutineOwner, type SharedRoutineSource, type SharedRoutineSummary, type SharedSessionOwner, type SharedSessionRecap, type SkipOccurrenceRequest, type StarredExercise, type StarredExercisesResponse, type StartWorkoutRequest, type StartWorkoutResponse, type StreakAtRiskPushPayload, type StreakMilestoneEventPayload, type SubstituteSessionExerciseRequest, type SubstituteSessionExerciseResponse, type SupabaseAuthResponse, type SupabaseAuthUser, type SupabaseMigrationResponse, TRAINING_DISCIPLINE_VALUES, TRAINING_EVENT_TYPES, TRAINING_EXPERIENCE_LEVEL_VALUES, TRAINING_GOAL_VALUES, type TrainingDiscipline, type TrainingEventType, type TrainingExperienceLevel, type TrainingGoal, type TrainingIdentity, type TrainingLocationPreference, type TrainingLocationPreferenceInput, type TrainingReminderPreference, type TrainingReminderPushPayload, USERNAME_MAX_LENGTH, USERNAME_MIN_LENGTH, USERNAME_PATTERN_SOURCE, type UpdateNotificationPreferencesRequest, type UpdateProfileDiscoveryRequest, type UpdateProfilePrivacyRequest, type UpdateProfileRequest, type UpdateRoutineRequest, type UpdateRoutineVisibilityRequest, type UpsertSetLogRequest, type UpsertSetLogResponse, type UserId, type UserProfile, type UserSearchResponse, type VolumeTrendPoint, type VolumeTrendQuery, type VolumeTrendResponse, type VolumeTrendSeries, WEIGHT_UNITS, WORKOUT_SESSION_STATUSES, type WeightUnit, type WorkoutAnalyticsStatus, type WorkoutProgressQuery, type WorkoutProgressResponse, type WorkoutSession, type WorkoutSessionId, type WorkoutSessionListResponse, type WorkoutSessionRecap, type WorkoutSessionSnapshotV1, type WorkoutSessionStatus, type WorkoutSessionSummary, type WorkoutStatsQuery, type WorkoutStatsResponse, isWithinQuietHours, routineDayLabel };
1882
+ export { ACHIEVEMENT_CATEGORIES, ACHIEVEMENT_DEFINITIONS, type AchievementCategory, type AchievementCategoryProgress, type AchievementDefinition, type AchievementNotification, type AchievementUnlockedEventPayload, type AchievementsResponse, type AppNotification, BLOCKED_MEMBERS_MAX, type BlockedMember, type BlockedMembersResponse, type Brand, CLONE_ROUTINE_REFUSALS, COMEBACK_MIN_INACTIVE_DAYS, COMEBACK_RECOGNITION_LIMIT, COMEBACK_REQUIRED_ACTIVE_DAYS, COMEBACK_SESSION_LOOKBACK, COMEBACK_WINDOW_DAYS, type CalendarDate, type CloneRoutineRefusal, type CloneRoutineRequest, type ComebackRecognition, type ComebackRecognitionSummary, type CreateReportRequest, type CreateReportResponse, type CreateRoutineDayInput, type CreateRoutineExerciseInput, type CreateRoutineRequest, type CreateRoutineVersionRequest, type CreateSessionShareRequest, type DeletePushSubscriptionRequest, EXERCISE_EQUIPMENT, EXERCISE_MECHANICS, type EarnedAchievement, type EarnedPersonalRecord, type Exercise, type ExerciseEquipment, type ExerciseId, type ExerciseMechanic, type ExercisePerformanceHistoryQuery, type ExercisePerformanceHistoryResponse, type ExercisePerformancePrescription, type ExercisePerformancePrescriptionSet, type ExercisePerformanceSession, type ExercisePerformanceSet, type ExercisePerformanceSummary, type ExercisePlateau, type ExerciseStrengthSummary, type ExerciseStrengthTrendPoint, type ExerciseStrengthTrendQuery, type ExerciseStrengthTrendResponse, FEATURED_PROFILE_ITEMS_MAX, FEATURED_PROFILE_ITEM_KINDS, FEATURED_PROFILE_REFERENCE_MAX_LENGTH, FOLLOW_SUGGESTIONS_DEFAULT_LIMIT, FOLLOW_SUGGESTIONS_MAX_LIMIT, FOLLOW_SUGGESTION_REASONS, type FeaturedProfileAchievementItem, type FeaturedProfileItem, type FeaturedProfileItemKind, type FeaturedProfileRankItem, type FeaturedProfileRecordItem, type FeaturedProfileRoutineItem, type FeaturedProfileSelection, type FeaturedProfileSelectionInput, type FeaturedProfileSelectionsResponse, type FinishStatus, type FinishWorkoutRequest, type FinishWorkoutResponse, type FollowSuggestion, type FollowSuggestionReason, type FollowSuggestionsResponse, type IsoDateString, type ListSessionsParams, MEASURABLE_GOALS_MAX, MEASURABLE_GOAL_DIRECTIONS, MEASURABLE_GOAL_TYPES, MINUTES_IN_DAY, MOVEMENT_PATTERNS, MUSCLE_GROUPS, type MarkNotificationsReadRequest, type MarkNotificationsReadResponse, type MeasurableGoal, type MeasurableGoalDirection, type MeasurableGoalExercise, type MeasurableGoalInput, type MeasurableGoalType, type MemberModerationState, type MemberRoutinesResponse, type MoveOccurrenceRequest, type MovementPattern, type MuscleGroup, type MuscleGroupHeatmapQuery, type MuscleGroupHeatmapResponse, type MuscleGroupHeatmapValue, type MuscleGroupHeatmapWeek, type MuscleVolumeTrendSeries, NOTIFICATIONS_LIST_LIMIT, NOTIFICATIONS_LOOKBACK_DAYS, NOTIFICATIONS_RETENTION_DAYS, NOTIFICATION_CATEGORIES, NOTIFICATION_KINDS, type NewFollowerNotification, type NotificationCategory, type NotificationKind, type NotificationPreferences, type NotificationPreferencesResponse, type NotificationsResponse, PLATEAU_MIN_DAYS_SINCE_BEST, PLATEAU_MIN_SESSIONS, PLATEAU_MIN_SESSIONS_MAX, PLATEAU_MIN_SESSIONS_MIN, PLATEAU_RECENT_DAYS, PLATEAU_WINDOW_DAYS, PREFERRED_TRAINING_STYLE_VALUES, PROFILE_BIO_MAX_LENGTH, PROFILE_FAVORITE_EXERCISES_MAX, PROFILE_LOCATION_MAX_LENGTH, PROFILE_TRAINING_DISCIPLINES_MAX, PROFILE_TRAINING_GOALS_MAX, PROFILE_VISIBILITY_VALUES, PROGRESSION_SCHEMES, PROGRESS_TIMELINE_EVENT_TYPES, PUSH_PAYLOAD_KINDS, PUSH_SUBSCRIPTIONS_MAX, type PaginatedResponse, type PersonalGoalProgress, type PersonalGoalsResponse, type PersonalRecordEntry, type PersonalRecordKind, type PlannedReminder, type PlatePairInventory, type PlateauPreferences, type PlateauSet, type PlateausResponse, type PreferredTrainingStyle, type PreviousPerformanceResponse, type PreviousSessionRecap, type PreviousSetPerformance, type ProfileDiscoverySettings, type ProfileFavoriteExercise, type ProfilePrivacySettings, type ProfileViewerAccess, type ProfileVisibility, type ProgressTimelineEventType, type ProgressTimelineItem, type ProgressTimelinePersonalRecordItem, type ProgressTimelineProgressionItem, type ProgressTimelineQuery, type ProgressTimelineRecordPerformance, type ProgressTimelineRecordReason, type ProgressTimelineResponse, type ProgressTimelineSessionContext, type ProgressionChange, type ProgressionRule, type ProgressionScheme, type ProgressionSetChange, type PublicBodyMetrics, type PublicProfileAchievements, type PublicTrainingSummary, type PublicUserProfile, type PushPayload, type PushPayloadKind, type PushSubscriptionKeys, type PushSubscriptionSummary, type PushSubscriptionsResponse, type QuietHours, RELATIONSHIP_LIST_DEFAULT_LIMIT, RELATIONSHIP_LIST_KINDS, RELATIONSHIP_LIST_MAX_LIMIT, RENAISSANCE_RANK_DEFINITIONS, REPORTS_PER_DAY_MAX, REPORT_DETAILS_MAX_LENGTH, REPORT_REASONS, REPORT_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_SCHEDULE_MODES, ROUTINE_SHARE_MAX_ACTIVE_LINKS, ROUTINE_VERSIONS_MAX, ROUTINE_VERSION_KINDS, ROUTINE_VERSION_NAME_MAX, ROUTINE_VISIBILITY_VALUES, type RecentActivityEntry, type RegisterPushSubscriptionRequest, type RelationshipListKind, type RelationshipListQuery, type RelationshipListResponse, type RelationshipMember, type RenaissanceRankDefinition, type RenaissanceRankProgress, type RepType, type ReplaceFeaturedProfileItemsRequest, type ReplaceMeasurableGoalsRequest, type ReplaceTrainingLocationsRequest, type ReportReason, type ReportSubjectKind, type RestAlertPushPayload, type RestAlertRefusal, type RestoreRoutineVersionResponse, type Routine, type RoutineDay, type RoutineDayId, type RoutineExercise, type RoutineId, type RoutineLineage, type RoutineScheduleMode, type RoutineSet, type RoutineShare, type RoutineShareListResponse, type RoutineVersion, type RoutineVersionDay, type RoutineVersionExercise, type RoutineVersionKind, type RoutineVersionSetup, type RoutineVersionsResponse, type RoutineVisibility, SCHEDULE_MOVE_MAX_DAYS, SCHEDULE_OVERRIDES_MAX_RANGE_DAYS, SCHEDULE_OVERRIDE_KINDS, SCHEDULE_SKIP_PAST_DAYS, SESSION_SHARE_DEFAULT_FIELDS, SESSION_SHARE_FIELDS, SESSION_SHARE_MAX_ACTIVE_LINKS, SEXES, SHARED_ROUTINE_SOURCES, STARRED_EXERCISES_MAX, STREAK_MAX_GAP_DAYS, type ScheduleOverride, type ScheduleOverrideKind, type ScheduleOverridesQuery, type ScheduleOverridesResponse, type ScheduleRestAlertRequest, type ScheduleRestAlertResponse, type SessionComparisonExercise, type SessionComparisonQuery, type SessionComparisonResponse, type SessionComparisonRoutineDay, type SessionComparisonSession, type SessionComparisonSet, type SessionExerciseSubstitution, type SessionProgressNotification, type SessionRecapRecord, type SessionShare, type SessionShareField, type SessionShareListResponse, type SetAccountTimeZoneRequest, type SetLog, type Sex, type SharedRoutine, type SharedRoutineOwner, type SharedRoutineSource, type SharedRoutineSummary, type SharedSessionOwner, type SharedSessionRecap, type SkipOccurrenceRequest, type StarredExercise, type StarredExercisesResponse, type StartWorkoutRequest, type StartWorkoutResponse, type StreakAtRiskPushPayload, type StreakMilestoneEventPayload, type SubstituteSessionExerciseRequest, type SubstituteSessionExerciseResponse, type SupabaseAuthResponse, type SupabaseAuthUser, type SupabaseMigrationResponse, TRAINING_DISCIPLINE_VALUES, TRAINING_EVENT_TYPES, TRAINING_EXPERIENCE_LEVEL_VALUES, TRAINING_GOAL_VALUES, type TrainingDiscipline, type TrainingEventType, type TrainingExperienceLevel, type TrainingGoal, type TrainingIdentity, type TrainingLocationPreference, type TrainingLocationPreferenceInput, type TrainingReminderPreference, type TrainingReminderPushPayload, USERNAME_MAX_LENGTH, USERNAME_MIN_LENGTH, USERNAME_PATTERN_SOURCE, type UpdateNotificationPreferencesRequest, type UpdateProfileDiscoveryRequest, type UpdateProfilePrivacyRequest, type UpdateProfileRequest, type UpdateRoutineRequest, type UpdateRoutineVisibilityRequest, type UpsertSetLogRequest, type UpsertSetLogResponse, type UserId, type UserProfile, type UserSearchResponse, type VolumeTrendPoint, type VolumeTrendQuery, type VolumeTrendResponse, type VolumeTrendSeries, WEIGHT_UNITS, WORKOUT_SESSION_STATUSES, type WeightUnit, type WorkoutAnalyticsStatus, type WorkoutProgressQuery, type WorkoutProgressResponse, type WorkoutSession, type WorkoutSessionId, type WorkoutSessionListResponse, type WorkoutSessionRecap, type WorkoutSessionSnapshotV1, type WorkoutSessionStatus, type WorkoutSessionSummary, type WorkoutStatsQuery, type WorkoutStatsResponse, isWithinQuietHours, routineDayLabel };