@openlifelog/sdk 1.0.6 → 1.0.8

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.mts CHANGED
@@ -247,6 +247,24 @@ interface QuickEntryFoodLogRequest {
247
247
  loggedAt?: DateTime;
248
248
  }
249
249
 
250
+ interface MuscleGroupEntity {
251
+ id: UUID;
252
+ name: string;
253
+ medicalName?: string;
254
+ bodyPart?: string;
255
+ description?: string;
256
+ createdAt: DateTime;
257
+ deletedAt?: DateTime;
258
+ }
259
+ interface ExerciseEquipmentEntity {
260
+ id: UUID;
261
+ name: string;
262
+ category?: string;
263
+ description?: string;
264
+ isActive: boolean;
265
+ createdAt: DateTime;
266
+ deletedAt?: DateTime;
267
+ }
250
268
  interface ExerciseCapabilities {
251
269
  supportsWeight: boolean;
252
270
  isBodyweight: boolean;
@@ -912,6 +930,8 @@ declare class ExercisesResource {
912
930
  getFavorites(params?: ListExercisesParams): Promise<ListResponse<Exercise>>;
913
931
  addToFavorites(exerciseId: string): Promise<void>;
914
932
  removeFromFavorites(exerciseId: string): Promise<void>;
933
+ getMuscleGroups(): Promise<MuscleGroupEntity[]>;
934
+ getEquipment(): Promise<ExerciseEquipmentEntity[]>;
915
935
  }
916
936
 
917
937
  declare class WorkoutsResource {
@@ -1018,6 +1038,7 @@ declare class GoalsResource {
1018
1038
  getNutritionGoalsHistory(params?: ListNutritionGoalsHistoryParams): Promise<ListResponse<UserNutritionGoals>>;
1019
1039
  getNutritionProgress(): Promise<DailyNutritionProgress>;
1020
1040
  getNutritionProgressByDate(date: string): Promise<DailyNutritionProgress>;
1041
+ private convertNutritionProgressFromMetric;
1021
1042
  }
1022
1043
 
1023
1044
  declare class AIResource {
@@ -1108,4 +1129,4 @@ declare class UnitConversionError extends OpenLifeLogError {
1108
1129
  constructor(message?: string, rawError?: any);
1109
1130
  }
1110
1131
 
1111
- export { ACTIVITY_METRICS, ALL_METRICS, type AddExerciseItem, type AddExercisesToWorkoutRequest, type AuthResponse, AuthenticationError, AuthorizationError, BODY_METRICS, type BulkCreateMetricEventsRequest, type BulkCreateNutritionGoalsRequest, type CopyNutritionGoalsRequest, type CountResponse, type CreateExerciseRequest, type CreateFoodLogRequest, type CreateFoodRequest, type CreateMetricEventRequest, type CreateNutritionGoalsRequest, type CreateProgramRequest, type CreateUserGoalRequest, type CreateWorkoutRequest, type CreateWorkoutSessionRequest, type CurrentWeekSchedule, type DailyGoalProgress, type DailyMetricAggregate, type DailyNutritionProgress, type DailyNutritionSummary, type DateRangeParams, type DateString, type DateTime, DistanceConverter, type EnrollInProgramRequest, type EnrollmentProgress, type Equipment, type ErrorResponse, type Exercise, type ExerciseCapabilities, type ExerciseCategory, type ExerciseHistory, type ExerciseHistoryEntry, type Food, type FoodInsightsResponse, type FoodLog, type ForceDirection, type GetDailyMetricParams, type GetDailySummaryParams, type GetFoodInsightsParams, type GoalProgress, type GoalProgressStatus, type GoalTargetType, HeightConverter, type Insight, type InsightSeverity, type InsightType, type ListExercisesParams, type ListFoodLogsParams, type ListFoodsParams, type ListMetricEventsParams, type ListNutritionGoalsHistoryParams, type ListParams, type ListResponse, type ListWorkoutSessionsParams, type ListWorkoutsParams, type LoginRequest, type MealType, type MeasurementSystem, type Metric, type MetricAggregationType, type MetricCategory, type MetricDefinition, type MetricEvent, type MovementPattern, type MuscleGroup, NetworkError, NotFoundError, type NutritionGoal, type NutritionGoalType, type NutritionProgress, type NutritionalInformation, OpenLifeLog, type OpenLifeLogConfig, OpenLifeLogError, type PageInfo, PaginatedIterator, type PasswordResetConfirm, type PasswordResetRequest, type PersonalRecord, type PersonalRecordHistory, type PersonalRecordHistoryEntry, type Program, type ProgramEnrollment, type ProgramMetadata, type ProgramScheduleDay, type ProgramScheduleExercise, type QuickEntryFoodLogRequest, RateLimitError, type Recommendation, type RecordType, SLEEP_METRICS, type SearchParams, ServerError, type ServingSize, type SessionExerciseDetail, type SessionStatus, type SetData, type SignupRequest, type SuccessResponse, TimeoutError, type UUID, UnitConversionError, UnitConverter, type UpdateEnrollmentRequest, type UpdateExerciseItem, type UpdateExerciseRequest, type UpdateFoodLogRequest, type UpdateFoodRequest, type UpdateMetricEventRequest, type UpdateNutritionGoalsRequest, type UpdatePreferencesRequest, type UpdateProgramRequest, type UpdateUserGoalRequest, type UpdateUserRequest, type UpdateWorkoutExerciseRequest, type UpdateWorkoutRequest, type UpdateWorkoutSessionRequest, type User, type UserGoal, type UserNutritionGoals, type UserPreferences, VITAL_METRICS, ValidationError, WELLNESS_METRICS, WeightConverter, type Workout, type WorkoutExercise, type WorkoutFormat, type WorkoutSession, createPaginatedIterator, createUnitConverter, OpenLifeLog as default, fetchAllPages, getMetricDefinition, getMetricsByCategory, hasMorePages };
1132
+ export { ACTIVITY_METRICS, ALL_METRICS, type AddExerciseItem, type AddExercisesToWorkoutRequest, type AuthResponse, AuthenticationError, AuthorizationError, BODY_METRICS, type BulkCreateMetricEventsRequest, type BulkCreateNutritionGoalsRequest, type CopyNutritionGoalsRequest, type CountResponse, type CreateExerciseRequest, type CreateFoodLogRequest, type CreateFoodRequest, type CreateMetricEventRequest, type CreateNutritionGoalsRequest, type CreateProgramRequest, type CreateUserGoalRequest, type CreateWorkoutRequest, type CreateWorkoutSessionRequest, type CurrentWeekSchedule, type DailyGoalProgress, type DailyMetricAggregate, type DailyNutritionProgress, type DailyNutritionSummary, type DateRangeParams, type DateString, type DateTime, DistanceConverter, type EnrollInProgramRequest, type EnrollmentProgress, type Equipment, type ErrorResponse, type Exercise, type ExerciseCapabilities, type ExerciseCategory, type ExerciseEquipmentEntity, type ExerciseHistory, type ExerciseHistoryEntry, type Food, type FoodInsightsResponse, type FoodLog, type ForceDirection, type GetDailyMetricParams, type GetDailySummaryParams, type GetFoodInsightsParams, type GoalProgress, type GoalProgressStatus, type GoalTargetType, HeightConverter, type Insight, type InsightSeverity, type InsightType, type ListExercisesParams, type ListFoodLogsParams, type ListFoodsParams, type ListMetricEventsParams, type ListNutritionGoalsHistoryParams, type ListParams, type ListResponse, type ListWorkoutSessionsParams, type ListWorkoutsParams, type LoginRequest, type MealType, type MeasurementSystem, type Metric, type MetricAggregationType, type MetricCategory, type MetricDefinition, type MetricEvent, type MovementPattern, type MuscleGroup, type MuscleGroupEntity, NetworkError, NotFoundError, type NutritionGoal, type NutritionGoalType, type NutritionProgress, type NutritionalInformation, OpenLifeLog, type OpenLifeLogConfig, OpenLifeLogError, type PageInfo, PaginatedIterator, type PasswordResetConfirm, type PasswordResetRequest, type PersonalRecord, type PersonalRecordHistory, type PersonalRecordHistoryEntry, type Program, type ProgramEnrollment, type ProgramMetadata, type ProgramScheduleDay, type ProgramScheduleExercise, type QuickEntryFoodLogRequest, RateLimitError, type Recommendation, type RecordType, SLEEP_METRICS, type SearchParams, ServerError, type ServingSize, type SessionExerciseDetail, type SessionStatus, type SetData, type SignupRequest, type SuccessResponse, TimeoutError, type UUID, UnitConversionError, UnitConverter, type UpdateEnrollmentRequest, type UpdateExerciseItem, type UpdateExerciseRequest, type UpdateFoodLogRequest, type UpdateFoodRequest, type UpdateMetricEventRequest, type UpdateNutritionGoalsRequest, type UpdatePreferencesRequest, type UpdateProgramRequest, type UpdateUserGoalRequest, type UpdateUserRequest, type UpdateWorkoutExerciseRequest, type UpdateWorkoutRequest, type UpdateWorkoutSessionRequest, type User, type UserGoal, type UserNutritionGoals, type UserPreferences, VITAL_METRICS, ValidationError, WELLNESS_METRICS, WeightConverter, type Workout, type WorkoutExercise, type WorkoutFormat, type WorkoutSession, createPaginatedIterator, createUnitConverter, OpenLifeLog as default, fetchAllPages, getMetricDefinition, getMetricsByCategory, hasMorePages };
package/dist/index.d.ts CHANGED
@@ -247,6 +247,24 @@ interface QuickEntryFoodLogRequest {
247
247
  loggedAt?: DateTime;
248
248
  }
249
249
 
250
+ interface MuscleGroupEntity {
251
+ id: UUID;
252
+ name: string;
253
+ medicalName?: string;
254
+ bodyPart?: string;
255
+ description?: string;
256
+ createdAt: DateTime;
257
+ deletedAt?: DateTime;
258
+ }
259
+ interface ExerciseEquipmentEntity {
260
+ id: UUID;
261
+ name: string;
262
+ category?: string;
263
+ description?: string;
264
+ isActive: boolean;
265
+ createdAt: DateTime;
266
+ deletedAt?: DateTime;
267
+ }
250
268
  interface ExerciseCapabilities {
251
269
  supportsWeight: boolean;
252
270
  isBodyweight: boolean;
@@ -912,6 +930,8 @@ declare class ExercisesResource {
912
930
  getFavorites(params?: ListExercisesParams): Promise<ListResponse<Exercise>>;
913
931
  addToFavorites(exerciseId: string): Promise<void>;
914
932
  removeFromFavorites(exerciseId: string): Promise<void>;
933
+ getMuscleGroups(): Promise<MuscleGroupEntity[]>;
934
+ getEquipment(): Promise<ExerciseEquipmentEntity[]>;
915
935
  }
916
936
 
917
937
  declare class WorkoutsResource {
@@ -1018,6 +1038,7 @@ declare class GoalsResource {
1018
1038
  getNutritionGoalsHistory(params?: ListNutritionGoalsHistoryParams): Promise<ListResponse<UserNutritionGoals>>;
1019
1039
  getNutritionProgress(): Promise<DailyNutritionProgress>;
1020
1040
  getNutritionProgressByDate(date: string): Promise<DailyNutritionProgress>;
1041
+ private convertNutritionProgressFromMetric;
1021
1042
  }
1022
1043
 
1023
1044
  declare class AIResource {
@@ -1108,4 +1129,4 @@ declare class UnitConversionError extends OpenLifeLogError {
1108
1129
  constructor(message?: string, rawError?: any);
1109
1130
  }
1110
1131
 
1111
- export { ACTIVITY_METRICS, ALL_METRICS, type AddExerciseItem, type AddExercisesToWorkoutRequest, type AuthResponse, AuthenticationError, AuthorizationError, BODY_METRICS, type BulkCreateMetricEventsRequest, type BulkCreateNutritionGoalsRequest, type CopyNutritionGoalsRequest, type CountResponse, type CreateExerciseRequest, type CreateFoodLogRequest, type CreateFoodRequest, type CreateMetricEventRequest, type CreateNutritionGoalsRequest, type CreateProgramRequest, type CreateUserGoalRequest, type CreateWorkoutRequest, type CreateWorkoutSessionRequest, type CurrentWeekSchedule, type DailyGoalProgress, type DailyMetricAggregate, type DailyNutritionProgress, type DailyNutritionSummary, type DateRangeParams, type DateString, type DateTime, DistanceConverter, type EnrollInProgramRequest, type EnrollmentProgress, type Equipment, type ErrorResponse, type Exercise, type ExerciseCapabilities, type ExerciseCategory, type ExerciseHistory, type ExerciseHistoryEntry, type Food, type FoodInsightsResponse, type FoodLog, type ForceDirection, type GetDailyMetricParams, type GetDailySummaryParams, type GetFoodInsightsParams, type GoalProgress, type GoalProgressStatus, type GoalTargetType, HeightConverter, type Insight, type InsightSeverity, type InsightType, type ListExercisesParams, type ListFoodLogsParams, type ListFoodsParams, type ListMetricEventsParams, type ListNutritionGoalsHistoryParams, type ListParams, type ListResponse, type ListWorkoutSessionsParams, type ListWorkoutsParams, type LoginRequest, type MealType, type MeasurementSystem, type Metric, type MetricAggregationType, type MetricCategory, type MetricDefinition, type MetricEvent, type MovementPattern, type MuscleGroup, NetworkError, NotFoundError, type NutritionGoal, type NutritionGoalType, type NutritionProgress, type NutritionalInformation, OpenLifeLog, type OpenLifeLogConfig, OpenLifeLogError, type PageInfo, PaginatedIterator, type PasswordResetConfirm, type PasswordResetRequest, type PersonalRecord, type PersonalRecordHistory, type PersonalRecordHistoryEntry, type Program, type ProgramEnrollment, type ProgramMetadata, type ProgramScheduleDay, type ProgramScheduleExercise, type QuickEntryFoodLogRequest, RateLimitError, type Recommendation, type RecordType, SLEEP_METRICS, type SearchParams, ServerError, type ServingSize, type SessionExerciseDetail, type SessionStatus, type SetData, type SignupRequest, type SuccessResponse, TimeoutError, type UUID, UnitConversionError, UnitConverter, type UpdateEnrollmentRequest, type UpdateExerciseItem, type UpdateExerciseRequest, type UpdateFoodLogRequest, type UpdateFoodRequest, type UpdateMetricEventRequest, type UpdateNutritionGoalsRequest, type UpdatePreferencesRequest, type UpdateProgramRequest, type UpdateUserGoalRequest, type UpdateUserRequest, type UpdateWorkoutExerciseRequest, type UpdateWorkoutRequest, type UpdateWorkoutSessionRequest, type User, type UserGoal, type UserNutritionGoals, type UserPreferences, VITAL_METRICS, ValidationError, WELLNESS_METRICS, WeightConverter, type Workout, type WorkoutExercise, type WorkoutFormat, type WorkoutSession, createPaginatedIterator, createUnitConverter, OpenLifeLog as default, fetchAllPages, getMetricDefinition, getMetricsByCategory, hasMorePages };
1132
+ export { ACTIVITY_METRICS, ALL_METRICS, type AddExerciseItem, type AddExercisesToWorkoutRequest, type AuthResponse, AuthenticationError, AuthorizationError, BODY_METRICS, type BulkCreateMetricEventsRequest, type BulkCreateNutritionGoalsRequest, type CopyNutritionGoalsRequest, type CountResponse, type CreateExerciseRequest, type CreateFoodLogRequest, type CreateFoodRequest, type CreateMetricEventRequest, type CreateNutritionGoalsRequest, type CreateProgramRequest, type CreateUserGoalRequest, type CreateWorkoutRequest, type CreateWorkoutSessionRequest, type CurrentWeekSchedule, type DailyGoalProgress, type DailyMetricAggregate, type DailyNutritionProgress, type DailyNutritionSummary, type DateRangeParams, type DateString, type DateTime, DistanceConverter, type EnrollInProgramRequest, type EnrollmentProgress, type Equipment, type ErrorResponse, type Exercise, type ExerciseCapabilities, type ExerciseCategory, type ExerciseEquipmentEntity, type ExerciseHistory, type ExerciseHistoryEntry, type Food, type FoodInsightsResponse, type FoodLog, type ForceDirection, type GetDailyMetricParams, type GetDailySummaryParams, type GetFoodInsightsParams, type GoalProgress, type GoalProgressStatus, type GoalTargetType, HeightConverter, type Insight, type InsightSeverity, type InsightType, type ListExercisesParams, type ListFoodLogsParams, type ListFoodsParams, type ListMetricEventsParams, type ListNutritionGoalsHistoryParams, type ListParams, type ListResponse, type ListWorkoutSessionsParams, type ListWorkoutsParams, type LoginRequest, type MealType, type MeasurementSystem, type Metric, type MetricAggregationType, type MetricCategory, type MetricDefinition, type MetricEvent, type MovementPattern, type MuscleGroup, type MuscleGroupEntity, NetworkError, NotFoundError, type NutritionGoal, type NutritionGoalType, type NutritionProgress, type NutritionalInformation, OpenLifeLog, type OpenLifeLogConfig, OpenLifeLogError, type PageInfo, PaginatedIterator, type PasswordResetConfirm, type PasswordResetRequest, type PersonalRecord, type PersonalRecordHistory, type PersonalRecordHistoryEntry, type Program, type ProgramEnrollment, type ProgramMetadata, type ProgramScheduleDay, type ProgramScheduleExercise, type QuickEntryFoodLogRequest, RateLimitError, type Recommendation, type RecordType, SLEEP_METRICS, type SearchParams, ServerError, type ServingSize, type SessionExerciseDetail, type SessionStatus, type SetData, type SignupRequest, type SuccessResponse, TimeoutError, type UUID, UnitConversionError, UnitConverter, type UpdateEnrollmentRequest, type UpdateExerciseItem, type UpdateExerciseRequest, type UpdateFoodLogRequest, type UpdateFoodRequest, type UpdateMetricEventRequest, type UpdateNutritionGoalsRequest, type UpdatePreferencesRequest, type UpdateProgramRequest, type UpdateUserGoalRequest, type UpdateUserRequest, type UpdateWorkoutExerciseRequest, type UpdateWorkoutRequest, type UpdateWorkoutSessionRequest, type User, type UserGoal, type UserNutritionGoals, type UserPreferences, VITAL_METRICS, ValidationError, WELLNESS_METRICS, WeightConverter, type Workout, type WorkoutExercise, type WorkoutFormat, type WorkoutSession, createPaginatedIterator, createUnitConverter, OpenLifeLog as default, fetchAllPages, getMetricDefinition, getMetricsByCategory, hasMorePages };
package/dist/index.js CHANGED
@@ -1469,6 +1469,30 @@ var ExercisesResource = class {
1469
1469
  async removeFromFavorites(exerciseId) {
1470
1470
  await this.http.delete(`/v1/exercises/${exerciseId}/favorite`);
1471
1471
  }
1472
+ /**
1473
+ * Get all muscle groups
1474
+ *
1475
+ * @example
1476
+ * ```typescript
1477
+ * const muscleGroups = await client.exercises.getMuscleGroups();
1478
+ * ```
1479
+ */
1480
+ async getMuscleGroups() {
1481
+ const response = await this.http.get("/v1/exercises/muscle-groups");
1482
+ return response.data;
1483
+ }
1484
+ /**
1485
+ * Get all exercise equipment
1486
+ *
1487
+ * @example
1488
+ * ```typescript
1489
+ * const equipment = await client.exercises.getEquipment();
1490
+ * ```
1491
+ */
1492
+ async getEquipment() {
1493
+ const response = await this.http.get("/v1/exercises/equipment");
1494
+ return response.data;
1495
+ }
1472
1496
  };
1473
1497
 
1474
1498
  // resources/workouts.ts
@@ -2163,6 +2187,9 @@ var GoalsResource = class {
2163
2187
  */
2164
2188
  async getNutritionProgress() {
2165
2189
  const response = await this.http.get("/v1/nutrition/progress/today");
2190
+ if (this.config.autoConvertUnits) {
2191
+ return this.convertNutritionProgressFromMetric(response.data);
2192
+ }
2166
2193
  return response.data;
2167
2194
  }
2168
2195
  /**
@@ -2170,8 +2197,33 @@ var GoalsResource = class {
2170
2197
  */
2171
2198
  async getNutritionProgressByDate(date) {
2172
2199
  const response = await this.http.get(`/v1/nutrition/progress/date/${date}`);
2200
+ if (this.config.autoConvertUnits) {
2201
+ return this.convertNutritionProgressFromMetric(response.data);
2202
+ }
2173
2203
  return response.data;
2174
2204
  }
2205
+ /**
2206
+ * Convert nutrition progress data from metric to user's preferred units
2207
+ * Handles water values in the progress data
2208
+ */
2209
+ convertNutritionProgressFromMetric(data) {
2210
+ if (!data || !data.progress) {
2211
+ return data;
2212
+ }
2213
+ const converted = { ...data };
2214
+ converted.progress = data.progress.map((nutrient) => {
2215
+ if (nutrient.nutrientKey === "water" && this.config.measurementSystem === "imperial") {
2216
+ return {
2217
+ ...nutrient,
2218
+ current: nutrient.current ? VolumeConverter.fromMetric(nutrient.current, this.config.measurementSystem) : nutrient.current,
2219
+ target: nutrient.target ? VolumeConverter.fromMetric(nutrient.target, this.config.measurementSystem) : nutrient.target,
2220
+ remaining: nutrient.remaining ? VolumeConverter.fromMetric(nutrient.remaining, this.config.measurementSystem) : nutrient.remaining
2221
+ };
2222
+ }
2223
+ return nutrient;
2224
+ });
2225
+ return converted;
2226
+ }
2175
2227
  };
2176
2228
 
2177
2229
  // resources/ai.ts
package/dist/index.mjs CHANGED
@@ -1415,6 +1415,30 @@ var ExercisesResource = class {
1415
1415
  async removeFromFavorites(exerciseId) {
1416
1416
  await this.http.delete(`/v1/exercises/${exerciseId}/favorite`);
1417
1417
  }
1418
+ /**
1419
+ * Get all muscle groups
1420
+ *
1421
+ * @example
1422
+ * ```typescript
1423
+ * const muscleGroups = await client.exercises.getMuscleGroups();
1424
+ * ```
1425
+ */
1426
+ async getMuscleGroups() {
1427
+ const response = await this.http.get("/v1/exercises/muscle-groups");
1428
+ return response.data;
1429
+ }
1430
+ /**
1431
+ * Get all exercise equipment
1432
+ *
1433
+ * @example
1434
+ * ```typescript
1435
+ * const equipment = await client.exercises.getEquipment();
1436
+ * ```
1437
+ */
1438
+ async getEquipment() {
1439
+ const response = await this.http.get("/v1/exercises/equipment");
1440
+ return response.data;
1441
+ }
1418
1442
  };
1419
1443
 
1420
1444
  // resources/workouts.ts
@@ -2109,6 +2133,9 @@ var GoalsResource = class {
2109
2133
  */
2110
2134
  async getNutritionProgress() {
2111
2135
  const response = await this.http.get("/v1/nutrition/progress/today");
2136
+ if (this.config.autoConvertUnits) {
2137
+ return this.convertNutritionProgressFromMetric(response.data);
2138
+ }
2112
2139
  return response.data;
2113
2140
  }
2114
2141
  /**
@@ -2116,8 +2143,33 @@ var GoalsResource = class {
2116
2143
  */
2117
2144
  async getNutritionProgressByDate(date) {
2118
2145
  const response = await this.http.get(`/v1/nutrition/progress/date/${date}`);
2146
+ if (this.config.autoConvertUnits) {
2147
+ return this.convertNutritionProgressFromMetric(response.data);
2148
+ }
2119
2149
  return response.data;
2120
2150
  }
2151
+ /**
2152
+ * Convert nutrition progress data from metric to user's preferred units
2153
+ * Handles water values in the progress data
2154
+ */
2155
+ convertNutritionProgressFromMetric(data) {
2156
+ if (!data || !data.progress) {
2157
+ return data;
2158
+ }
2159
+ const converted = { ...data };
2160
+ converted.progress = data.progress.map((nutrient) => {
2161
+ if (nutrient.nutrientKey === "water" && this.config.measurementSystem === "imperial") {
2162
+ return {
2163
+ ...nutrient,
2164
+ current: nutrient.current ? VolumeConverter.fromMetric(nutrient.current, this.config.measurementSystem) : nutrient.current,
2165
+ target: nutrient.target ? VolumeConverter.fromMetric(nutrient.target, this.config.measurementSystem) : nutrient.target,
2166
+ remaining: nutrient.remaining ? VolumeConverter.fromMetric(nutrient.remaining, this.config.measurementSystem) : nutrient.remaining
2167
+ };
2168
+ }
2169
+ return nutrient;
2170
+ });
2171
+ return converted;
2172
+ }
2121
2173
  };
2122
2174
 
2123
2175
  // resources/ai.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openlifelog/sdk",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "TypeScript SDK for the OpenLifeLog API - A comprehensive fitness and nutrition tracking platform",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -6,6 +6,8 @@ import type {
6
6
  ListExercisesParams,
7
7
  ListResponse,
8
8
  CountResponse,
9
+ MuscleGroupEntity,
10
+ ExerciseEquipmentEntity,
9
11
  } from '../types';
10
12
  import { createPaginatedIterator, type PaginatedIterator } from '../utils/pagination';
11
13
 
@@ -109,4 +111,30 @@ export class ExercisesResource {
109
111
  async removeFromFavorites(exerciseId: string): Promise<void> {
110
112
  await this.http.delete(`/v1/exercises/${exerciseId}/favorite`);
111
113
  }
114
+
115
+ /**
116
+ * Get all muscle groups
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * const muscleGroups = await client.exercises.getMuscleGroups();
121
+ * ```
122
+ */
123
+ async getMuscleGroups(): Promise<MuscleGroupEntity[]> {
124
+ const response = await this.http.get<MuscleGroupEntity[]>('/v1/exercises/muscle-groups');
125
+ return response.data;
126
+ }
127
+
128
+ /**
129
+ * Get all exercise equipment
130
+ *
131
+ * @example
132
+ * ```typescript
133
+ * const equipment = await client.exercises.getEquipment();
134
+ * ```
135
+ */
136
+ async getEquipment(): Promise<ExerciseEquipmentEntity[]> {
137
+ const response = await this.http.get<ExerciseEquipmentEntity[]>('/v1/exercises/equipment');
138
+ return response.data;
139
+ }
112
140
  }
@@ -14,7 +14,7 @@ import type {
14
14
  ListNutritionGoalsHistoryParams,
15
15
  ListResponse,
16
16
  } from '../types';
17
- import { convertNutritionGoalsToMetric, convertNutritionGoalsFromMetric } from '../utils/units';
17
+ import { convertNutritionGoalsToMetric, convertNutritionGoalsFromMetric, VolumeConverter } from '../utils/units';
18
18
 
19
19
  /**
20
20
  * Goals resource
@@ -177,6 +177,11 @@ export class GoalsResource {
177
177
  */
178
178
  async getNutritionProgress(): Promise<DailyNutritionProgress> {
179
179
  const response = await this.http.get<DailyNutritionProgress>('/v1/nutrition/progress/today');
180
+
181
+ if (this.config.autoConvertUnits) {
182
+ return this.convertNutritionProgressFromMetric(response.data);
183
+ }
184
+
180
185
  return response.data;
181
186
  }
182
187
 
@@ -185,6 +190,37 @@ export class GoalsResource {
185
190
  */
186
191
  async getNutritionProgressByDate(date: string): Promise<DailyNutritionProgress> {
187
192
  const response = await this.http.get<DailyNutritionProgress>(`/v1/nutrition/progress/date/${date}`);
193
+
194
+ if (this.config.autoConvertUnits) {
195
+ return this.convertNutritionProgressFromMetric(response.data);
196
+ }
197
+
188
198
  return response.data;
189
199
  }
200
+
201
+ /**
202
+ * Convert nutrition progress data from metric to user's preferred units
203
+ * Handles water values in the progress data
204
+ */
205
+ private convertNutritionProgressFromMetric(data: DailyNutritionProgress): DailyNutritionProgress {
206
+ if (!data || !data.progress) {
207
+ return data;
208
+ }
209
+
210
+ const converted = { ...data };
211
+ converted.progress = data.progress.map(nutrient => {
212
+ // Only convert water from ml to oz/fl oz for imperial users
213
+ if (nutrient.nutrientKey === 'water' && this.config.measurementSystem === 'imperial') {
214
+ return {
215
+ ...nutrient,
216
+ current: nutrient.current ? VolumeConverter.fromMetric(nutrient.current, this.config.measurementSystem) : nutrient.current,
217
+ target: nutrient.target ? VolumeConverter.fromMetric(nutrient.target, this.config.measurementSystem) : nutrient.target,
218
+ remaining: nutrient.remaining ? VolumeConverter.fromMetric(nutrient.remaining, this.config.measurementSystem) : nutrient.remaining,
219
+ };
220
+ }
221
+ return nutrient;
222
+ });
223
+
224
+ return converted;
225
+ }
190
226
  }
package/types/exercise.ts CHANGED
@@ -13,6 +13,32 @@ import type {
13
13
  * Exercise types
14
14
  */
15
15
 
16
+ /**
17
+ * Muscle group entity from database
18
+ */
19
+ export interface MuscleGroupEntity {
20
+ id: UUID;
21
+ name: string;
22
+ medicalName?: string;
23
+ bodyPart?: string;
24
+ description?: string;
25
+ createdAt: DateTime;
26
+ deletedAt?: DateTime;
27
+ }
28
+
29
+ /**
30
+ * Exercise equipment entity from database
31
+ */
32
+ export interface ExerciseEquipmentEntity {
33
+ id: UUID;
34
+ name: string;
35
+ category?: string;
36
+ description?: string;
37
+ isActive: boolean;
38
+ createdAt: DateTime;
39
+ deletedAt?: DateTime;
40
+ }
41
+
16
42
  /**
17
43
  * Exercise capabilities
18
44
  */