@openlifelog/sdk 1.0.4 → 1.0.6

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
@@ -371,6 +371,7 @@ interface SessionExerciseDetail {
371
371
  rpe?: number;
372
372
  exerciseName: string;
373
373
  exerciseDescription?: string;
374
+ exerciseCapabilities?: ExerciseCapabilities;
374
375
  }
375
376
  interface WorkoutSession {
376
377
  id: UUID;
package/dist/index.d.ts CHANGED
@@ -371,6 +371,7 @@ interface SessionExerciseDetail {
371
371
  rpe?: number;
372
372
  exerciseName: string;
373
373
  exerciseDescription?: string;
374
+ exerciseCapabilities?: ExerciseCapabilities;
374
375
  }
375
376
  interface WorkoutSession {
376
377
  id: UUID;
package/dist/index.js CHANGED
@@ -702,6 +702,27 @@ function convertWorkoutDataToMetric(data, measurementSystem) {
702
702
  if (converted.sets && Array.isArray(converted.sets)) {
703
703
  converted.sets = convertSetsDataToMetric(converted.sets, measurementSystem);
704
704
  }
705
+ if (converted.updateSets && typeof converted.updateSets === "object") {
706
+ const convertedUpdateSets = {};
707
+ for (const [exerciseId, sets] of Object.entries(converted.updateSets)) {
708
+ if (Array.isArray(sets)) {
709
+ convertedUpdateSets[exerciseId] = convertSetsDataToMetric(sets, measurementSystem);
710
+ } else {
711
+ convertedUpdateSets[exerciseId] = sets;
712
+ }
713
+ }
714
+ converted.updateSets = convertedUpdateSets;
715
+ }
716
+ if (converted.updateExercises && Array.isArray(converted.updateExercises)) {
717
+ converted.updateExercises = converted.updateExercises.map(
718
+ (exercise) => convertWorkoutDataToMetric(exercise, measurementSystem)
719
+ );
720
+ }
721
+ if (converted.addExercises && Array.isArray(converted.addExercises)) {
722
+ converted.addExercises = converted.addExercises.map(
723
+ (exercise) => convertWorkoutDataToMetric(exercise, measurementSystem)
724
+ );
725
+ }
705
726
  if (converted.exercises && Array.isArray(converted.exercises)) {
706
727
  converted.exercises = converted.exercises.map(
707
728
  (exercise) => convertWorkoutDataToMetric(exercise, measurementSystem)
@@ -1505,7 +1526,8 @@ var WorkoutsResource = class {
1505
1526
  * Create a new workout template
1506
1527
  */
1507
1528
  async create(request) {
1508
- const response = await this.http.post("/v1/workouts", request);
1529
+ const requestToSend = this.config.autoConvertUnits ? convertWorkoutDataToMetric(request, this.config.measurementSystem) : request;
1530
+ const response = await this.http.post("/v1/workouts", requestToSend);
1509
1531
  if (this.config.autoConvertUnits) {
1510
1532
  return convertWorkoutDataFromMetric(response.data, this.config.measurementSystem);
1511
1533
  }
@@ -1515,7 +1537,8 @@ var WorkoutsResource = class {
1515
1537
  * Update a workout template
1516
1538
  */
1517
1539
  async update(workoutId, request) {
1518
- const response = await this.http.put(`/v1/workouts/${workoutId}`, request);
1540
+ const requestToSend = this.config.autoConvertUnits ? convertWorkoutDataToMetric(request, this.config.measurementSystem) : request;
1541
+ const response = await this.http.put(`/v1/workouts/${workoutId}`, requestToSend);
1519
1542
  if (this.config.autoConvertUnits) {
1520
1543
  return convertWorkoutDataFromMetric(response.data, this.config.measurementSystem);
1521
1544
  }
@@ -1983,11 +2006,18 @@ var MetricsResource = class {
1983
2006
  }
1984
2007
  /**
1985
2008
  * Update a metric event
1986
- * Note: metricKey cannot be changed, so we can't determine if this is a weight metric from the request alone.
1987
- * We'll convert the value assuming it follows the user's preference setting.
2009
+ * Note: metricKey cannot be changed, so we need to fetch the event first to determine if it's a weight metric.
1988
2010
  */
1989
2011
  async updateEvent(eventId, request) {
1990
- const response = await this.http.put(`/v1/metric-events/${eventId}`, request);
2012
+ const requestToSend = { ...request };
2013
+ if (this.config.autoConvertUnits && requestToSend.value !== null && requestToSend.value !== void 0) {
2014
+ const existingEvent = await this.getEvent(eventId);
2015
+ const isWeightMetric = existingEvent.metricKey?.includes("weight") || existingEvent.metricKey?.includes("bodyweight");
2016
+ if (isWeightMetric) {
2017
+ requestToSend.value = WeightConverter.toMetric(requestToSend.value, this.config.measurementSystem);
2018
+ }
2019
+ }
2020
+ const response = await this.http.put(`/v1/metric-events/${eventId}`, requestToSend);
1991
2021
  if (this.config.autoConvertUnits && response.data.value !== null && response.data.value !== void 0) {
1992
2022
  const isWeightMetric = response.data.metricKey?.includes("weight") || response.data.metricKey?.includes("bodyweight");
1993
2023
  if (isWeightMetric) {
package/dist/index.mjs CHANGED
@@ -648,6 +648,27 @@ function convertWorkoutDataToMetric(data, measurementSystem) {
648
648
  if (converted.sets && Array.isArray(converted.sets)) {
649
649
  converted.sets = convertSetsDataToMetric(converted.sets, measurementSystem);
650
650
  }
651
+ if (converted.updateSets && typeof converted.updateSets === "object") {
652
+ const convertedUpdateSets = {};
653
+ for (const [exerciseId, sets] of Object.entries(converted.updateSets)) {
654
+ if (Array.isArray(sets)) {
655
+ convertedUpdateSets[exerciseId] = convertSetsDataToMetric(sets, measurementSystem);
656
+ } else {
657
+ convertedUpdateSets[exerciseId] = sets;
658
+ }
659
+ }
660
+ converted.updateSets = convertedUpdateSets;
661
+ }
662
+ if (converted.updateExercises && Array.isArray(converted.updateExercises)) {
663
+ converted.updateExercises = converted.updateExercises.map(
664
+ (exercise) => convertWorkoutDataToMetric(exercise, measurementSystem)
665
+ );
666
+ }
667
+ if (converted.addExercises && Array.isArray(converted.addExercises)) {
668
+ converted.addExercises = converted.addExercises.map(
669
+ (exercise) => convertWorkoutDataToMetric(exercise, measurementSystem)
670
+ );
671
+ }
651
672
  if (converted.exercises && Array.isArray(converted.exercises)) {
652
673
  converted.exercises = converted.exercises.map(
653
674
  (exercise) => convertWorkoutDataToMetric(exercise, measurementSystem)
@@ -1451,7 +1472,8 @@ var WorkoutsResource = class {
1451
1472
  * Create a new workout template
1452
1473
  */
1453
1474
  async create(request) {
1454
- const response = await this.http.post("/v1/workouts", request);
1475
+ const requestToSend = this.config.autoConvertUnits ? convertWorkoutDataToMetric(request, this.config.measurementSystem) : request;
1476
+ const response = await this.http.post("/v1/workouts", requestToSend);
1455
1477
  if (this.config.autoConvertUnits) {
1456
1478
  return convertWorkoutDataFromMetric(response.data, this.config.measurementSystem);
1457
1479
  }
@@ -1461,7 +1483,8 @@ var WorkoutsResource = class {
1461
1483
  * Update a workout template
1462
1484
  */
1463
1485
  async update(workoutId, request) {
1464
- const response = await this.http.put(`/v1/workouts/${workoutId}`, request);
1486
+ const requestToSend = this.config.autoConvertUnits ? convertWorkoutDataToMetric(request, this.config.measurementSystem) : request;
1487
+ const response = await this.http.put(`/v1/workouts/${workoutId}`, requestToSend);
1465
1488
  if (this.config.autoConvertUnits) {
1466
1489
  return convertWorkoutDataFromMetric(response.data, this.config.measurementSystem);
1467
1490
  }
@@ -1929,11 +1952,18 @@ var MetricsResource = class {
1929
1952
  }
1930
1953
  /**
1931
1954
  * Update a metric event
1932
- * Note: metricKey cannot be changed, so we can't determine if this is a weight metric from the request alone.
1933
- * We'll convert the value assuming it follows the user's preference setting.
1955
+ * Note: metricKey cannot be changed, so we need to fetch the event first to determine if it's a weight metric.
1934
1956
  */
1935
1957
  async updateEvent(eventId, request) {
1936
- const response = await this.http.put(`/v1/metric-events/${eventId}`, request);
1958
+ const requestToSend = { ...request };
1959
+ if (this.config.autoConvertUnits && requestToSend.value !== null && requestToSend.value !== void 0) {
1960
+ const existingEvent = await this.getEvent(eventId);
1961
+ const isWeightMetric = existingEvent.metricKey?.includes("weight") || existingEvent.metricKey?.includes("bodyweight");
1962
+ if (isWeightMetric) {
1963
+ requestToSend.value = WeightConverter.toMetric(requestToSend.value, this.config.measurementSystem);
1964
+ }
1965
+ }
1966
+ const response = await this.http.put(`/v1/metric-events/${eventId}`, requestToSend);
1937
1967
  if (this.config.autoConvertUnits && response.data.value !== null && response.data.value !== void 0) {
1938
1968
  const isWeightMetric = response.data.metricKey?.includes("weight") || response.data.metricKey?.includes("bodyweight");
1939
1969
  if (isWeightMetric) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openlifelog/sdk",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
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",
@@ -172,11 +172,23 @@ export class MetricsResource {
172
172
 
173
173
  /**
174
174
  * Update a metric event
175
- * Note: metricKey cannot be changed, so we can't determine if this is a weight metric from the request alone.
176
- * We'll convert the value assuming it follows the user's preference setting.
175
+ * Note: metricKey cannot be changed, so we need to fetch the event first to determine if it's a weight metric.
177
176
  */
178
177
  async updateEvent(eventId: string, request: UpdateMetricEventRequest): Promise<MetricEvent> {
179
- const response = await this.http.put<MetricEvent>(`/v1/metric-events/${eventId}`, request);
178
+ // Convert request value to metric before sending
179
+ const requestToSend = { ...request };
180
+
181
+ // If value is being updated, we need to convert it
182
+ // Since we can't determine the metric type from the request alone, we fetch the event first
183
+ if (this.config.autoConvertUnits && requestToSend.value !== null && requestToSend.value !== undefined) {
184
+ const existingEvent = await this.getEvent(eventId);
185
+ const isWeightMetric = existingEvent.metricKey?.includes('weight') || existingEvent.metricKey?.includes('bodyweight');
186
+ if (isWeightMetric) {
187
+ requestToSend.value = WeightConverter.toMetric(requestToSend.value, this.config.measurementSystem);
188
+ }
189
+ }
190
+
191
+ const response = await this.http.put<MetricEvent>(`/v1/metric-events/${eventId}`, requestToSend);
180
192
 
181
193
  // Convert response back to user preference
182
194
  if (this.config.autoConvertUnits && response.data.value !== null && response.data.value !== undefined) {
@@ -80,7 +80,11 @@ export class WorkoutsResource {
80
80
  * Create a new workout template
81
81
  */
82
82
  async create(request: CreateWorkoutRequest): Promise<Workout> {
83
- const response = await this.http.post<Workout>('/v1/workouts', request);
83
+ const requestToSend = this.config.autoConvertUnits
84
+ ? convertWorkoutDataToMetric(request, this.config.measurementSystem)
85
+ : request;
86
+
87
+ const response = await this.http.post<Workout>('/v1/workouts', requestToSend);
84
88
 
85
89
  if (this.config.autoConvertUnits) {
86
90
  return convertWorkoutDataFromMetric(response.data, this.config.measurementSystem);
@@ -93,7 +97,11 @@ export class WorkoutsResource {
93
97
  * Update a workout template
94
98
  */
95
99
  async update(workoutId: string, request: UpdateWorkoutRequest): Promise<Workout> {
96
- const response = await this.http.put<Workout>(`/v1/workouts/${workoutId}`, request);
100
+ const requestToSend = this.config.autoConvertUnits
101
+ ? convertWorkoutDataToMetric(request, this.config.measurementSystem)
102
+ : request;
103
+
104
+ const response = await this.http.put<Workout>(`/v1/workouts/${workoutId}`, requestToSend);
97
105
 
98
106
  if (this.config.autoConvertUnits) {
99
107
  return convertWorkoutDataFromMetric(response.data, this.config.measurementSystem);
package/types/session.ts CHANGED
@@ -8,6 +8,7 @@ import type {
8
8
  DateString,
9
9
  } from './common';
10
10
  import type { SetData } from './workout';
11
+ import type { ExerciseCapabilities } from './exercise';
11
12
 
12
13
  /**
13
14
  * Workout session types (performance tracking)
@@ -37,6 +38,7 @@ export interface SessionExerciseDetail {
37
38
  rpe?: number; // 1-10
38
39
  exerciseName: string;
39
40
  exerciseDescription?: string;
41
+ exerciseCapabilities?: ExerciseCapabilities;
40
42
  }
41
43
 
42
44
  /**
package/utils/units.ts CHANGED
@@ -438,6 +438,34 @@ export function convertWorkoutDataToMetric(
438
438
  converted.sets = convertSetsDataToMetric(converted.sets, measurementSystem);
439
439
  }
440
440
 
441
+ // Convert updateSets object (used in session updates)
442
+ // Format: { exerciseId: [setData, setData, ...] }
443
+ if (converted.updateSets && typeof converted.updateSets === 'object') {
444
+ const convertedUpdateSets: any = {};
445
+ for (const [exerciseId, sets] of Object.entries(converted.updateSets)) {
446
+ if (Array.isArray(sets)) {
447
+ convertedUpdateSets[exerciseId] = convertSetsDataToMetric(sets, measurementSystem);
448
+ } else {
449
+ convertedUpdateSets[exerciseId] = sets;
450
+ }
451
+ }
452
+ converted.updateSets = convertedUpdateSets;
453
+ }
454
+
455
+ // Convert updateExercises array (used in session updates)
456
+ if (converted.updateExercises && Array.isArray(converted.updateExercises)) {
457
+ converted.updateExercises = converted.updateExercises.map((exercise: any) =>
458
+ convertWorkoutDataToMetric(exercise, measurementSystem)
459
+ );
460
+ }
461
+
462
+ // Convert addExercises array (used in session updates)
463
+ if (converted.addExercises && Array.isArray(converted.addExercises)) {
464
+ converted.addExercises = converted.addExercises.map((exercise: any) =>
465
+ convertWorkoutDataToMetric(exercise, measurementSystem)
466
+ );
467
+ }
468
+
441
469
  // Convert exercises arrays (nested structures)
442
470
  if (converted.exercises && Array.isArray(converted.exercises)) {
443
471
  converted.exercises = converted.exercises.map((exercise: any) =>