@stuartshay/otel-graphql-types 1.0.95 → 1.0.455

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.
Files changed (3) hide show
  1. package/index.d.ts +200 -2
  2. package/package.json +1 -1
  3. package/schema.graphql +377 -2
package/index.d.ts CHANGED
@@ -214,6 +214,81 @@ export interface GarminActivityAddress {
214
214
  waypoint_kind: Scalars['String']['output'];
215
215
  }
216
216
 
217
+ /** Garmin-native ClimbPro typed split for an activity. */
218
+ export interface GarminActivityClimb {
219
+ __typename?: 'GarminActivityClimb';
220
+ /** Parent Garmin activity identifier */
221
+ activity_id: Scalars['String']['output'];
222
+ /** Average elapsed vertical speed in meters per second */
223
+ average_elapsed_vertical_speed_mps?: Maybe<Scalars['Float']['output']>;
224
+ /** Average climb grade percent */
225
+ average_grade_percent?: Maybe<Scalars['Float']['output']>;
226
+ /** Average moving speed in meters per second */
227
+ average_moving_speed_mps?: Maybe<Scalars['Float']['output']>;
228
+ /** Average speed in meters per second */
229
+ average_speed_mps?: Maybe<Scalars['Float']['output']>;
230
+ /** Average temperature in degrees C */
231
+ average_temperature_c?: Maybe<Scalars['Float']['output']>;
232
+ /** Average vertical speed in meters per second */
233
+ average_vertical_speed_mps?: Maybe<Scalars['Float']['output']>;
234
+ /** BMR calories recorded for this climb */
235
+ bmr_calories?: Maybe<Scalars['Float']['output']>;
236
+ /** Calories recorded for this climb */
237
+ calories?: Maybe<Scalars['Float']['output']>;
238
+ /** Garmin ClimbPro difficulty */
239
+ climb_pro_difficulty?: Maybe<Scalars['String']['output']>;
240
+ /** Garmin ClimbPro typed split type */
241
+ climb_type?: Maybe<Scalars['String']['output']>;
242
+ /** UTC timestamp when the row was inserted */
243
+ created_at?: Maybe<Scalars['String']['output']>;
244
+ /** Climb distance in meters */
245
+ distance_meters?: Maybe<Scalars['Float']['output']>;
246
+ /** Climb duration in seconds */
247
+ duration_seconds?: Maybe<Scalars['Float']['output']>;
248
+ /** Elapsed climb duration in seconds */
249
+ elapsed_duration_seconds?: Maybe<Scalars['Float']['output']>;
250
+ /** Climb elevation gain in meters */
251
+ elevation_gain_meters?: Maybe<Scalars['Float']['output']>;
252
+ /** Climb elevation loss in meters */
253
+ elevation_loss_meters?: Maybe<Scalars['Float']['output']>;
254
+ /** Climb end latitude */
255
+ end_latitude?: Maybe<Scalars['Float']['output']>;
256
+ /** Climb end longitude */
257
+ end_longitude?: Maybe<Scalars['Float']['output']>;
258
+ /** UTC climb end time */
259
+ end_time?: Maybe<Scalars['String']['output']>;
260
+ /** Unique climb row identifier */
261
+ id: Scalars['Float']['output'];
262
+ /** Maximum climb grade percent */
263
+ max_grade_percent?: Maybe<Scalars['Float']['output']>;
264
+ /** Maximum speed in meters per second */
265
+ max_speed_mps?: Maybe<Scalars['Float']['output']>;
266
+ /** Maximum temperature in degrees C */
267
+ max_temperature_c?: Maybe<Scalars['Float']['output']>;
268
+ /** Garmin message index */
269
+ message_index?: Maybe<Scalars['Int']['output']>;
270
+ /** Minimum temperature in degrees C */
271
+ min_temperature_c?: Maybe<Scalars['Float']['output']>;
272
+ /** Moving climb duration in seconds */
273
+ moving_duration_seconds?: Maybe<Scalars['Float']['output']>;
274
+ /** Zero-based Garmin typed split order */
275
+ source_split_index: Scalars['Int']['output'];
276
+ /** Garmin split type label when provided */
277
+ split_type?: Maybe<Scalars['String']['output']>;
278
+ /** Climb start elevation in meters */
279
+ start_elevation_meters?: Maybe<Scalars['Float']['output']>;
280
+ /** Climb start latitude */
281
+ start_latitude?: Maybe<Scalars['Float']['output']>;
282
+ /** Climb start longitude */
283
+ start_longitude?: Maybe<Scalars['Float']['output']>;
284
+ /** UTC climb start time */
285
+ start_time?: Maybe<Scalars['String']['output']>;
286
+ /** Local climb start time from Garmin */
287
+ start_time_local?: Maybe<Scalars['String']['output']>;
288
+ /** UTC timestamp when the row was last updated */
289
+ updated_at?: Maybe<Scalars['String']['output']>;
290
+ }
291
+
217
292
  /** Paginated list of Garmin activities. */
218
293
  export interface GarminActivityConnection {
219
294
  __typename?: 'GarminActivityConnection';
@@ -227,6 +302,58 @@ export interface GarminActivityConnection {
227
302
  total: Scalars['Int']['output'];
228
303
  }
229
304
 
305
+ /** Garmin-native or derived activity lap row. */
306
+ export interface GarminActivityLap {
307
+ __typename?: 'GarminActivityLap';
308
+ /** Parent Garmin activity identifier */
309
+ activity_id: Scalars['String']['output'];
310
+ /** Average lap heart rate in bpm */
311
+ avg_heart_rate?: Maybe<Scalars['Int']['output']>;
312
+ /** Average lap speed in meters per second */
313
+ avg_speed_mps?: Maybe<Scalars['Float']['output']>;
314
+ /** Calories recorded for this lap */
315
+ calories?: Maybe<Scalars['Float']['output']>;
316
+ /** UTC timestamp when the row was inserted */
317
+ created_at?: Maybe<Scalars['String']['output']>;
318
+ /** Lap distance in meters */
319
+ distance_meters?: Maybe<Scalars['Float']['output']>;
320
+ /** Lap timer duration in seconds */
321
+ duration_seconds?: Maybe<Scalars['Float']['output']>;
322
+ /** Lap elapsed duration in seconds */
323
+ elapsed_duration_seconds?: Maybe<Scalars['Float']['output']>;
324
+ /** UTC lap end time */
325
+ end_time?: Maybe<Scalars['String']['output']>;
326
+ /** Unique lap row identifier */
327
+ id: Scalars['Float']['output'];
328
+ /** One-based lap order within the activity */
329
+ lap_index: Scalars['Int']['output'];
330
+ /** Maximum lap heart rate in bpm */
331
+ max_heart_rate?: Maybe<Scalars['Int']['output']>;
332
+ /** Lap moving duration in seconds */
333
+ moving_duration_seconds?: Maybe<Scalars['Float']['output']>;
334
+ /** Lap paved distance in meters */
335
+ paved_distance_meters?: Maybe<Scalars['Float']['output']>;
336
+ /** UTC lap start time */
337
+ start_time?: Maybe<Scalars['String']['output']>;
338
+ /** Lap elevation gain in meters */
339
+ total_ascent_meters?: Maybe<Scalars['Float']['output']>;
340
+ /** Lap elevation loss in meters */
341
+ total_descent_meters?: Maybe<Scalars['Float']['output']>;
342
+ /** Lap unpaved distance in meters */
343
+ unpaved_distance_meters?: Maybe<Scalars['Float']['output']>;
344
+ /** UTC timestamp when the row was last updated */
345
+ updated_at?: Maybe<Scalars['String']['output']>;
346
+ }
347
+
348
+ /** Laps for a single activity within the batch laps comparison response. */
349
+ export interface GarminActivityLapsGroup {
350
+ __typename?: 'GarminActivityLapsGroup';
351
+ /** Parent activity summary */
352
+ activity: GarminLapsActivity;
353
+ /** Laps ordered by lap_index ascending */
354
+ laps: Array<GarminActivityLap>;
355
+ }
356
+
230
357
  /** Aggregated Garmin activity totals for a single time bucket (week, month, or year). */
231
358
  export interface GarminActivityTotal {
232
359
  __typename?: 'GarminActivityTotal';
@@ -295,6 +422,53 @@ export interface GarminDevice {
295
422
  software_version?: Maybe<Scalars['String']['output']>;
296
423
  }
297
424
 
425
+ /** Garmin activity count grouped by recording device model. */
426
+ export interface GarminDeviceCount {
427
+ __typename?: 'GarminDeviceCount';
428
+ /** Number of activities for this device label. */
429
+ activity_count: Scalars['Int']['output'];
430
+ /** Device model label, or Manual when an activity has no recording device. */
431
+ label: Scalars['String']['output'];
432
+ }
433
+
434
+ /** Activity summary metadata for a batch laps comparison item. */
435
+ export interface GarminLapsActivity {
436
+ __typename?: 'GarminLapsActivity';
437
+ /** Garmin Connect activity identifier */
438
+ activity_id: Scalars['String']['output'];
439
+ /** Average activity heart rate in bpm */
440
+ avg_heart_rate?: Maybe<Scalars['Int']['output']>;
441
+ /** Average activity speed in km/h */
442
+ avg_speed_kmh?: Maybe<Scalars['Float']['output']>;
443
+ /** Total activity distance in kilometers */
444
+ distance_km?: Maybe<Scalars['Float']['output']>;
445
+ /** Total activity duration in seconds */
446
+ duration_seconds?: Maybe<Scalars['Float']['output']>;
447
+ /** Maximum activity heart rate in bpm */
448
+ max_heart_rate?: Maybe<Scalars['Int']['output']>;
449
+ /** Sport type (e.g. cycling) */
450
+ sport?: Maybe<Scalars['String']['output']>;
451
+ /** UTC activity start time */
452
+ start_time?: Maybe<Scalars['String']['output']>;
453
+ /** Sub-sport type (e.g. road) */
454
+ sub_sport?: Maybe<Scalars['String']['output']>;
455
+ /** Total activity elevation gain in meters */
456
+ total_ascent_m?: Maybe<Scalars['Float']['output']>;
457
+ }
458
+
459
+ /** Paginated batch of activities (each with their laps) for cross-activity lap comparison. */
460
+ export interface GarminLapsComparisonConnection {
461
+ __typename?: 'GarminLapsComparisonConnection';
462
+ /** Activities (newest first), each with their laps ordered by lap_index */
463
+ items: Array<GarminActivityLapsGroup>;
464
+ /** Maximum number of activities per page */
465
+ limit: Scalars['Int']['output'];
466
+ /** Number of activities skipped from the start */
467
+ offset: Scalars['Int']['output'];
468
+ /** Total number of activities matching the query */
469
+ total: Scalars['Int']['output'];
470
+ }
471
+
298
472
  /** Result payload returned when triggering an on-demand Garmin sync. */
299
473
  export interface GarminSyncTriggerResult {
300
474
  __typename?: 'GarminSyncTriggerResult';
@@ -662,12 +836,20 @@ export interface Query {
662
836
  garminActivity?: Maybe<GarminActivity>;
663
837
  /** Retrieve all reverse-geocoded addresses for a Garmin activity (start, mid-route waypoints, and end). */
664
838
  garminActivityAddresses: Array<GarminActivityAddress>;
839
+ /** Retrieve Garmin-native ClimbPro typed splits for a Garmin activity. */
840
+ garminActivityClimbs: Array<GarminActivityClimb>;
841
+ /** Retrieve Garmin-native or derived laps for a Garmin activity. */
842
+ garminActivityLaps: Array<GarminActivityLap>;
665
843
  /** Aggregate Garmin activity totals grouped by week, month, or year. */
666
844
  garminActivityTotals: Array<GarminActivityTotal>;
667
845
  /** Retrieve chart-optimised track points for a Garmin activity. */
668
846
  garminChartData: Array<GarminChartPoint>;
669
847
  /** Get the earliest and latest Garmin activity timestamps. */
670
848
  garminDateRange: GarminDateRange;
849
+ /** List Garmin recording device labels with activity counts. */
850
+ garminDeviceCounts: Array<GarminDeviceCount>;
851
+ /** Batch laps across activities for cross-activity comparison (matrix of activities x lap_index). */
852
+ garminLapsComparison: GarminLapsComparisonConnection;
671
853
  /** List all distinct sport types with activity counts. */
672
854
  garminSports: Array<SportInfo>;
673
855
  /** Retrieve paginated GPS track points for a Garmin activity. */
@@ -730,6 +912,14 @@ export interface QueryGarminActivityAddressesArgs {
730
912
  activity_id: Scalars['String']['input'];
731
913
  }
732
914
 
915
+ export interface QueryGarminActivityClimbsArgs {
916
+ activity_id: Scalars['String']['input'];
917
+ }
918
+
919
+ export interface QueryGarminActivityLapsArgs {
920
+ activity_id: Scalars['String']['input'];
921
+ }
922
+
733
923
  export interface QueryGarminActivityTotalsArgs {
734
924
  date_from?: InputMaybe<Scalars['String']['input']>;
735
925
  date_to?: InputMaybe<Scalars['String']['input']>;
@@ -741,6 +931,14 @@ export interface QueryGarminChartDataArgs {
741
931
  activity_id: Scalars['String']['input'];
742
932
  }
743
933
 
934
+ export interface QueryGarminLapsComparisonArgs {
935
+ date_from?: InputMaybe<Scalars['String']['input']>;
936
+ date_to?: InputMaybe<Scalars['String']['input']>;
937
+ limit?: InputMaybe<Scalars['Int']['input']>;
938
+ offset?: InputMaybe<Scalars['Int']['input']>;
939
+ sport?: InputMaybe<Scalars['String']['input']>;
940
+ }
941
+
744
942
  export interface QueryGarminTrackPointsArgs {
745
943
  activity_id: Scalars['String']['input'];
746
944
  limit?: InputMaybe<Scalars['Int']['input']>;
@@ -801,8 +999,8 @@ export interface QueryWithinReferenceArgs {
801
999
  /** Service readiness status including database connectivity. */
802
1000
  export interface ReadyStatus {
803
1001
  __typename?: 'ReadyStatus';
804
- /** Database connection status */
805
- database?: Maybe<Scalars['String']['output']>;
1002
+ /** Database readiness payload returned by otel-data-api */
1003
+ database?: Maybe<Scalars['JSON']['output']>;
806
1004
  /** Service readiness status */
807
1005
  status: Scalars['String']['output'];
808
1006
  /** Application version from VERSION file */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stuartshay/otel-graphql-types",
3
- "version": "1.0.95",
3
+ "version": "1.0.455",
4
4
  "description": "TypeScript types for otel-data-gateway — Auto-generated from GraphQL schema",
5
5
  "types": "index.d.ts",
6
6
  "exports": {
package/schema.graphql CHANGED
@@ -50,9 +50,9 @@ type ReadyStatus {
50
50
  """
51
51
  status: String!
52
52
  """
53
- Database connection status
53
+ Database readiness payload returned by otel-data-api
54
54
  """
55
- database: String
55
+ database: JSON
56
56
  """
57
57
  Application version from VERSION file
58
58
  """
@@ -668,6 +668,316 @@ type GarminDateRange {
668
668
  max_date: DateTime!
669
669
  }
670
670
 
671
+ """
672
+ Garmin-native ClimbPro typed split for an activity.
673
+ """
674
+ type GarminActivityClimb {
675
+ """
676
+ Unique climb row identifier
677
+ """
678
+ id: Float!
679
+ """
680
+ Parent Garmin activity identifier
681
+ """
682
+ activity_id: String!
683
+ """
684
+ Zero-based Garmin typed split order
685
+ """
686
+ source_split_index: Int!
687
+ """
688
+ Garmin message index
689
+ """
690
+ message_index: Int
691
+ """
692
+ Garmin split type label when provided
693
+ """
694
+ split_type: String
695
+ """
696
+ Garmin ClimbPro typed split type
697
+ """
698
+ climb_type: String
699
+ """
700
+ UTC climb start time
701
+ """
702
+ start_time: String
703
+ """
704
+ UTC climb end time
705
+ """
706
+ end_time: String
707
+ """
708
+ Local climb start time from Garmin
709
+ """
710
+ start_time_local: String
711
+ """
712
+ Climb duration in seconds
713
+ """
714
+ duration_seconds: Float
715
+ """
716
+ Elapsed climb duration in seconds
717
+ """
718
+ elapsed_duration_seconds: Float
719
+ """
720
+ Moving climb duration in seconds
721
+ """
722
+ moving_duration_seconds: Float
723
+ """
724
+ Climb distance in meters
725
+ """
726
+ distance_meters: Float
727
+ """
728
+ Climb elevation gain in meters
729
+ """
730
+ elevation_gain_meters: Float
731
+ """
732
+ Climb elevation loss in meters
733
+ """
734
+ elevation_loss_meters: Float
735
+ """
736
+ Climb start elevation in meters
737
+ """
738
+ start_elevation_meters: Float
739
+ """
740
+ Average climb grade percent
741
+ """
742
+ average_grade_percent: Float
743
+ """
744
+ Maximum climb grade percent
745
+ """
746
+ max_grade_percent: Float
747
+ """
748
+ Average speed in meters per second
749
+ """
750
+ average_speed_mps: Float
751
+ """
752
+ Average moving speed in meters per second
753
+ """
754
+ average_moving_speed_mps: Float
755
+ """
756
+ Maximum speed in meters per second
757
+ """
758
+ max_speed_mps: Float
759
+ """
760
+ Average vertical speed in meters per second
761
+ """
762
+ average_vertical_speed_mps: Float
763
+ """
764
+ Average elapsed vertical speed in meters per second
765
+ """
766
+ average_elapsed_vertical_speed_mps: Float
767
+ """
768
+ Climb start latitude
769
+ """
770
+ start_latitude: Float
771
+ """
772
+ Climb start longitude
773
+ """
774
+ start_longitude: Float
775
+ """
776
+ Climb end latitude
777
+ """
778
+ end_latitude: Float
779
+ """
780
+ Climb end longitude
781
+ """
782
+ end_longitude: Float
783
+ """
784
+ Garmin ClimbPro difficulty
785
+ """
786
+ climb_pro_difficulty: String
787
+ """
788
+ Calories recorded for this climb
789
+ """
790
+ calories: Float
791
+ """
792
+ BMR calories recorded for this climb
793
+ """
794
+ bmr_calories: Float
795
+ """
796
+ Average temperature in degrees C
797
+ """
798
+ average_temperature_c: Float
799
+ """
800
+ Minimum temperature in degrees C
801
+ """
802
+ min_temperature_c: Float
803
+ """
804
+ Maximum temperature in degrees C
805
+ """
806
+ max_temperature_c: Float
807
+ """
808
+ UTC timestamp when the row was inserted
809
+ """
810
+ created_at: String
811
+ """
812
+ UTC timestamp when the row was last updated
813
+ """
814
+ updated_at: String
815
+ }
816
+
817
+ """
818
+ Garmin-native or derived activity lap row.
819
+ """
820
+ type GarminActivityLap {
821
+ """
822
+ Unique lap row identifier
823
+ """
824
+ id: Float!
825
+ """
826
+ Parent Garmin activity identifier
827
+ """
828
+ activity_id: String!
829
+ """
830
+ One-based lap order within the activity
831
+ """
832
+ lap_index: Int!
833
+ """
834
+ UTC lap start time
835
+ """
836
+ start_time: String
837
+ """
838
+ UTC lap end time
839
+ """
840
+ end_time: String
841
+ """
842
+ Lap timer duration in seconds
843
+ """
844
+ duration_seconds: Float
845
+ """
846
+ Lap elapsed duration in seconds
847
+ """
848
+ elapsed_duration_seconds: Float
849
+ """
850
+ Lap moving duration in seconds
851
+ """
852
+ moving_duration_seconds: Float
853
+ """
854
+ Lap distance in meters
855
+ """
856
+ distance_meters: Float
857
+ """
858
+ Lap paved distance in meters
859
+ """
860
+ paved_distance_meters: Float
861
+ """
862
+ Lap unpaved distance in meters
863
+ """
864
+ unpaved_distance_meters: Float
865
+ """
866
+ Average lap speed in meters per second
867
+ """
868
+ avg_speed_mps: Float
869
+ """
870
+ Average lap heart rate in bpm
871
+ """
872
+ avg_heart_rate: Int
873
+ """
874
+ Maximum lap heart rate in bpm
875
+ """
876
+ max_heart_rate: Int
877
+ """
878
+ Lap elevation gain in meters
879
+ """
880
+ total_ascent_meters: Float
881
+ """
882
+ Lap elevation loss in meters
883
+ """
884
+ total_descent_meters: Float
885
+ """
886
+ Calories recorded for this lap
887
+ """
888
+ calories: Float
889
+ """
890
+ UTC timestamp when the row was inserted
891
+ """
892
+ created_at: String
893
+ """
894
+ UTC timestamp when the row was last updated
895
+ """
896
+ updated_at: String
897
+ }
898
+
899
+ """
900
+ Activity summary metadata for a batch laps comparison item.
901
+ """
902
+ type GarminLapsActivity {
903
+ """
904
+ Garmin Connect activity identifier
905
+ """
906
+ activity_id: String!
907
+ """
908
+ Sport type (e.g. cycling)
909
+ """
910
+ sport: String
911
+ """
912
+ Sub-sport type (e.g. road)
913
+ """
914
+ sub_sport: String
915
+ """
916
+ UTC activity start time
917
+ """
918
+ start_time: String
919
+ """
920
+ Total activity distance in kilometers
921
+ """
922
+ distance_km: Float
923
+ """
924
+ Total activity duration in seconds
925
+ """
926
+ duration_seconds: Float
927
+ """
928
+ Average activity speed in km/h
929
+ """
930
+ avg_speed_kmh: Float
931
+ """
932
+ Average activity heart rate in bpm
933
+ """
934
+ avg_heart_rate: Int
935
+ """
936
+ Maximum activity heart rate in bpm
937
+ """
938
+ max_heart_rate: Int
939
+ """
940
+ Total activity elevation gain in meters
941
+ """
942
+ total_ascent_m: Float
943
+ }
944
+
945
+ """
946
+ Laps for a single activity within the batch laps comparison response.
947
+ """
948
+ type GarminActivityLapsGroup {
949
+ """
950
+ Parent activity summary
951
+ """
952
+ activity: GarminLapsActivity!
953
+ """
954
+ Laps ordered by lap_index ascending
955
+ """
956
+ laps: [GarminActivityLap!]!
957
+ }
958
+
959
+ """
960
+ Paginated batch of activities (each with their laps) for cross-activity lap comparison.
961
+ """
962
+ type GarminLapsComparisonConnection {
963
+ """
964
+ Activities (newest first), each with their laps ordered by lap_index
965
+ """
966
+ items: [GarminActivityLapsGroup!]!
967
+ """
968
+ Total number of activities matching the query
969
+ """
970
+ total: Int!
971
+ """
972
+ Maximum number of activities per page
973
+ """
974
+ limit: Int!
975
+ """
976
+ Number of activities skipped from the start
977
+ """
978
+ offset: Int!
979
+ }
980
+
671
981
  """
672
982
  Individual GPS track point within a Garmin activity.
673
983
  """
@@ -906,6 +1216,20 @@ type SportInfo {
906
1216
  activity_count: Int!
907
1217
  }
908
1218
 
1219
+ """
1220
+ Garmin activity count grouped by recording device model.
1221
+ """
1222
+ type GarminDeviceCount {
1223
+ """
1224
+ Device model label, or Manual when an activity has no recording device.
1225
+ """
1226
+ label: String!
1227
+ """
1228
+ Number of activities for this device label.
1229
+ """
1230
+ activity_count: Int!
1231
+ }
1232
+
909
1233
  """
910
1234
  Lightweight track point optimised for time-series chart rendering.
911
1235
  """
@@ -1492,6 +1816,11 @@ type Query {
1492
1816
  """
1493
1817
  garminSports: [SportInfo!]!
1494
1818
 
1819
+ """
1820
+ List Garmin recording device labels with activity counts.
1821
+ """
1822
+ garminDeviceCounts: [GarminDeviceCount!]!
1823
+
1495
1824
  """
1496
1825
  Retrieve chart-optimised track points for a Garmin activity.
1497
1826
  """
@@ -1502,6 +1831,52 @@ type Query {
1502
1831
  activity_id: String!
1503
1832
  ): [GarminChartPoint!]!
1504
1833
 
1834
+ """
1835
+ Retrieve Garmin-native ClimbPro typed splits for a Garmin activity.
1836
+ """
1837
+ garminActivityClimbs(
1838
+ """
1839
+ Garmin Connect activity identifier
1840
+ """
1841
+ activity_id: String!
1842
+ ): [GarminActivityClimb!]!
1843
+
1844
+ """
1845
+ Retrieve Garmin-native or derived laps for a Garmin activity.
1846
+ """
1847
+ garminActivityLaps(
1848
+ """
1849
+ Garmin Connect activity identifier
1850
+ """
1851
+ activity_id: String!
1852
+ ): [GarminActivityLap!]!
1853
+
1854
+ """
1855
+ Batch laps across activities for cross-activity comparison (matrix of activities x lap_index).
1856
+ """
1857
+ garminLapsComparison(
1858
+ """
1859
+ Filter by sport type (e.g. cycling, running)
1860
+ """
1861
+ sport: String
1862
+ """
1863
+ Start date filter (YYYY-MM-DD), inclusive on activity start_time
1864
+ """
1865
+ date_from: String
1866
+ """
1867
+ End date filter (YYYY-MM-DD), inclusive on activity start_time
1868
+ """
1869
+ date_to: String
1870
+ """
1871
+ Maximum number of activities to return per page
1872
+ """
1873
+ limit: Int
1874
+ """
1875
+ Number of activities to skip for pagination
1876
+ """
1877
+ offset: Int
1878
+ ): GarminLapsComparisonConnection!
1879
+
1505
1880
  """
1506
1881
  Retrieve all reverse-geocoded addresses for a Garmin activity (start, mid-route waypoints, and end).
1507
1882
  """