@stuartshay/otel-graphql-types 1.0.94 → 1.0.445

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 +460 -26
  2. package/package.json +1 -1
  3. package/schema.graphql +857 -2
package/schema.graphql CHANGED
@@ -122,6 +122,10 @@ type Location {
122
122
  UTC timestamp when the record was inserted into the database
123
123
  """
124
124
  created_at: String
125
+ """
126
+ Short formatted address from reverse geocoding
127
+ """
128
+ display_address: String
125
129
  }
126
130
 
127
131
  """
@@ -188,10 +192,175 @@ type LocationDetail {
188
192
  Original OwnTracks JSON payload as received from the MQTT broker
189
193
  """
190
194
  raw_payload: JSON
195
+ """
196
+ Full reverse-geocoded address components from Pelias
197
+ """
198
+ address: GeocodedAddress
191
199
  }
192
200
 
193
201
  scalar JSON
194
202
 
203
+ # -------------------------------------------------------
204
+ # Geocoding
205
+ # -------------------------------------------------------
206
+ """
207
+ Reverse-geocoded address components from Pelias.
208
+ """
209
+ type GeocodedAddress {
210
+ """
211
+ Full formatted address label from Pelias
212
+ """
213
+ display_address: String
214
+ """
215
+ Street name
216
+ """
217
+ street: String
218
+ """
219
+ House or building number
220
+ """
221
+ housenumber: String
222
+ """
223
+ Neighbourhood name
224
+ """
225
+ neighbourhood: String
226
+ """
227
+ City or town
228
+ """
229
+ locality: String
230
+ """
231
+ State or province
232
+ """
233
+ region: String
234
+ """
235
+ Country name
236
+ """
237
+ country: String
238
+ """
239
+ Postal or ZIP code
240
+ """
241
+ postalcode: String
242
+ """
243
+ Pelias confidence score (0-1)
244
+ """
245
+ confidence: Float
246
+ """
247
+ Geocoding status: success, no_coverage, error, pending
248
+ """
249
+ status: String!
250
+ """
251
+ UTC timestamp when geocoding was performed
252
+ """
253
+ geocoded_at: String
254
+ }
255
+
256
+ """
257
+ Coverage statistics for geocoded location records.
258
+ """
259
+ type GeocodingStatus {
260
+ """
261
+ Total number of OwnTracks location records
262
+ """
263
+ total_locations: Int!
264
+ """
265
+ Number of locations with a geocoded address (any status)
266
+ """
267
+ geocoded: Int!
268
+ """
269
+ Number of successfully geocoded locations
270
+ """
271
+ success: Int!
272
+ """
273
+ Number of locations awaiting geocoding
274
+ """
275
+ pending: Int!
276
+ """
277
+ Number of locations outside Pelias coverage area
278
+ """
279
+ no_coverage: Int!
280
+ """
281
+ Number of locations that failed geocoding
282
+ """
283
+ errors: Int!
284
+ """
285
+ Percentage of locations with a geocoded address
286
+ """
287
+ coverage_percent: Float!
288
+ """
289
+ Per-source breakdown of geocoding coverage (owntracks, garmin)
290
+ """
291
+ by_source: GeocodingStatusBySource!
292
+ }
293
+
294
+ """
295
+ Coverage statistics for a single geocoding source (owntracks or garmin).
296
+ """
297
+ type GeocodingSourceStatus {
298
+ """
299
+ Number of successfully geocoded records for this source
300
+ """
301
+ success: Int!
302
+ """
303
+ Number of records awaiting geocoding for this source
304
+ """
305
+ pending: Int!
306
+ """
307
+ Number of records outside Pelias coverage area
308
+ """
309
+ no_coverage: Int!
310
+ """
311
+ Number of records that failed geocoding
312
+ """
313
+ errors: Int!
314
+ """
315
+ Total number of geocoded_addresses rows for this source
316
+ """
317
+ total: Int!
318
+ }
319
+
320
+ """
321
+ Per-source breakdown of geocoding coverage.
322
+ """
323
+ type GeocodingStatusBySource {
324
+ """
325
+ Coverage stats for OwnTracks rows
326
+ """
327
+ owntracks: GeocodingSourceStatus!
328
+ """
329
+ Coverage stats for Garmin rows
330
+ """
331
+ garmin: GeocodingSourceStatus!
332
+ """
333
+ Total number of Garmin activities (denominator for activity-level coverage)
334
+ """
335
+ garmin_activities_total: Int!
336
+ """
337
+ Number of Garmin activities that have at least one address row
338
+ """
339
+ garmin_activities_geocoded: Int!
340
+ """
341
+ Percentage of Garmin activities with at least one geocoded address
342
+ """
343
+ garmin_coverage_percent: Float!
344
+ }
345
+
346
+ """
347
+ Result of triggering a batch geocoding operation.
348
+ """
349
+ type GeocodingTriggerResult {
350
+ """
351
+ Number of records processed in this batch
352
+ """
353
+ processed: Int!
354
+ """
355
+ Number of records still awaiting geocoding
356
+ """
357
+ remaining: Int!
358
+ """
359
+ Number of records skipped via proximity deduplication
360
+ """
361
+ skipped_dedup: Int!
362
+ }
363
+
195
364
  """
196
365
  Paginated list of OwnTracks location records.
197
366
  """
@@ -242,9 +411,49 @@ type LocationCount {
242
411
  device_id: String
243
412
  }
244
413
 
414
+ """
415
+ Earliest and latest timestamps in the locations table.
416
+ """
417
+ type LocationDateRange {
418
+ """
419
+ Earliest location timestamp (ISO 8601)
420
+ """
421
+ min_date: DateTime!
422
+ """
423
+ Latest location timestamp (ISO 8601)
424
+ """
425
+ max_date: DateTime!
426
+ }
427
+
245
428
  # -------------------------------------------------------
246
429
  # Garmin
247
430
  # -------------------------------------------------------
431
+ """
432
+ Recording device metadata captured from a Garmin activity's FIT file.
433
+ """
434
+ type GarminDevice {
435
+ """
436
+ Recording device serial number
437
+ """
438
+ device_id: Float
439
+ """
440
+ Device manufacturer (e.g. garmin)
441
+ """
442
+ manufacturer: String
443
+ """
444
+ Raw Garmin product enum id from the FIT file (e.g. 4061)
445
+ """
446
+ garmin_product: Int
447
+ """
448
+ Friendly device model name (e.g. Edge 540 Solar)
449
+ """
450
+ model: String
451
+ """
452
+ Device firmware/software version (e.g. 31.30)
453
+ """
454
+ software_version: String
455
+ }
456
+
248
457
  """
249
458
  Summary of a Garmin Connect activity parsed from a FIT file.
250
459
  """
@@ -286,6 +495,62 @@ type GarminActivity {
286
495
  """
287
496
  max_heart_rate: Int
288
497
  """
498
+ Whether this activity has usable heart-rate data in summary or track points
499
+ """
500
+ hr_available: Boolean!
501
+ """
502
+ Minimum heart rate in beats per minute
503
+ """
504
+ min_heart_rate: Int
505
+ """
506
+ Aerobic training effect score
507
+ """
508
+ aerobic_training_effect: Float
509
+ """
510
+ Anaerobic training effect score
511
+ """
512
+ anaerobic_training_effect: Float
513
+ """
514
+ Exercise load score
515
+ """
516
+ exercise_load: Int
517
+ """
518
+ Average respiration rate in breaths per minute
519
+ """
520
+ avg_respiration_rate: Int
521
+ """
522
+ Minimum respiration rate in breaths per minute
523
+ """
524
+ min_respiration_rate: Int
525
+ """
526
+ Maximum respiration rate in breaths per minute
527
+ """
528
+ max_respiration_rate: Int
529
+ """
530
+ Estimated sweat loss in millilitres
531
+ """
532
+ sweat_loss_ml: Int
533
+ """
534
+ Moderate intensity minutes
535
+ """
536
+ moderate_intensity_minutes: Int
537
+ """
538
+ Vigorous intensity minutes
539
+ """
540
+ vigorous_intensity_minutes: Int
541
+ """
542
+ Total intensity minutes
543
+ """
544
+ total_intensity_minutes: Int
545
+ """
546
+ Distance over paved surfaces in kilometres
547
+ """
548
+ paved_distance_km: Float
549
+ """
550
+ Distance over unpaved surfaces in kilometres
551
+ """
552
+ unpaved_distance_km: Float
553
+ """
289
554
  Average cadence in RPM
290
555
  """
291
556
  avg_cadence: Int
@@ -294,6 +559,10 @@ type GarminActivity {
294
559
  """
295
560
  max_cadence: Int
296
561
  """
562
+ Total activity strokes
563
+ """
564
+ total_strokes: Int
565
+ """
297
566
  Total calories burned
298
567
  """
299
568
  calories: Int
@@ -326,6 +595,10 @@ type GarminActivity {
326
595
  """
327
596
  device_manufacturer: String
328
597
  """
598
+ Recording device metadata (manufacturer, model, firmware)
599
+ """
600
+ device: GarminDevice
601
+ """
329
602
  Average ambient temperature in degrees C
330
603
  """
331
604
  avg_temperature_c: Int
@@ -381,6 +654,248 @@ type GarminActivityConnection {
381
654
  offset: Int!
382
655
  }
383
656
 
657
+ """
658
+ Earliest and latest timestamps in the Garmin activities table.
659
+ """
660
+ type GarminDateRange {
661
+ """
662
+ Earliest Garmin activity timestamp (ISO 8601)
663
+ """
664
+ min_date: DateTime!
665
+ """
666
+ Latest Garmin activity timestamp (ISO 8601)
667
+ """
668
+ max_date: DateTime!
669
+ }
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
+
384
899
  """
385
900
  Individual GPS track point within a Garmin activity.
386
901
  """
@@ -422,6 +937,14 @@ type GarminTrackPoint {
422
937
  """
423
938
  heart_rate: Int
424
939
  """
940
+ Heart-rate zone index (1-5)
941
+ """
942
+ hr_zone: Int
943
+ """
944
+ Respiration rate in breaths per minute
945
+ """
946
+ respiration_rate: Int
947
+ """
425
948
  Pedal/step cadence in RPM
426
949
  """
427
950
  cadence: Int
@@ -430,9 +953,149 @@ type GarminTrackPoint {
430
953
  """
431
954
  temperature_c: Float
432
955
  """
956
+ Road or terrain type
957
+ """
958
+ surface_type: String
959
+ """
960
+ Effort classification label
961
+ """
962
+ effort_level: String
963
+ """
433
964
  UTC timestamp when the record was inserted
434
965
  """
435
966
  created_at: String
967
+ """
968
+ Compact reverse-geocoded address summary, when geocoded
969
+ """
970
+ address: GeocodedAddressSummary
971
+ }
972
+
973
+ """
974
+ Compact reverse-geocoded address summary embedded in track-point payloads.
975
+ """
976
+ type GeocodedAddressSummary {
977
+ """
978
+ Full formatted address label from Pelias
979
+ """
980
+ display_address: String
981
+ """
982
+ Street name
983
+ """
984
+ street: String
985
+ """
986
+ House or building number
987
+ """
988
+ housenumber: String
989
+ """
990
+ Neighbourhood name
991
+ """
992
+ neighbourhood: String
993
+ """
994
+ City or town
995
+ """
996
+ locality: String
997
+ """
998
+ State or province
999
+ """
1000
+ region: String
1001
+ """
1002
+ Country name
1003
+ """
1004
+ country: String
1005
+ """
1006
+ Postal or ZIP code
1007
+ """
1008
+ postalcode: String
1009
+ """
1010
+ Pelias confidence score (0-1)
1011
+ """
1012
+ confidence: Float
1013
+ """
1014
+ Role of this waypoint within a Garmin activity (start, end, waypoint). Null for OwnTracks records.
1015
+ """
1016
+ waypoint_kind: String
1017
+ """
1018
+ Geocoding status: success, no_coverage, error, pending
1019
+ """
1020
+ status: String!
1021
+ """
1022
+ UTC timestamp when geocoding was performed
1023
+ """
1024
+ geocoded_at: String
1025
+ }
1026
+
1027
+ """
1028
+ Full reverse-geocoded address attached to a Garmin activity waypoint.
1029
+ """
1030
+ type GarminActivityAddress {
1031
+ """
1032
+ garmin_track_points.id this address was geocoded from
1033
+ """
1034
+ track_point_id: Int!
1035
+ """
1036
+ Parent Garmin activity identifier
1037
+ """
1038
+ activity_id: String!
1039
+ """
1040
+ Role of this waypoint within the activity: start, end, or waypoint
1041
+ """
1042
+ waypoint_kind: String!
1043
+ """
1044
+ UTC timestamp of the track point this address was derived from
1045
+ """
1046
+ timestamp: DateTime!
1047
+ """
1048
+ GPS latitude in decimal degrees (WGS 84)
1049
+ """
1050
+ latitude: Float!
1051
+ """
1052
+ GPS longitude in decimal degrees (WGS 84)
1053
+ """
1054
+ longitude: Float!
1055
+ """
1056
+ Full formatted address label from Pelias
1057
+ """
1058
+ display_address: String
1059
+ """
1060
+ Street name
1061
+ """
1062
+ street: String
1063
+ """
1064
+ House or building number
1065
+ """
1066
+ housenumber: String
1067
+ """
1068
+ Neighbourhood name
1069
+ """
1070
+ neighbourhood: String
1071
+ """
1072
+ City or town
1073
+ """
1074
+ locality: String
1075
+ """
1076
+ State or province
1077
+ """
1078
+ region: String
1079
+ """
1080
+ Country name
1081
+ """
1082
+ country: String
1083
+ """
1084
+ Postal or ZIP code
1085
+ """
1086
+ postalcode: String
1087
+ """
1088
+ Pelias confidence score (0-1)
1089
+ """
1090
+ confidence: Float
1091
+ """
1092
+ Geocoding status: success, no_coverage, error, pending
1093
+ """
1094
+ status: String!
1095
+ """
1096
+ UTC timestamp when geocoding was performed
1097
+ """
1098
+ geocoded_at: String
436
1099
  }
437
1100
 
438
1101
  """
@@ -471,6 +1134,20 @@ type SportInfo {
471
1134
  activity_count: Int!
472
1135
  }
473
1136
 
1137
+ """
1138
+ Garmin activity count grouped by recording device model.
1139
+ """
1140
+ type GarminDeviceCount {
1141
+ """
1142
+ Device model label, or Manual when an activity has no recording device.
1143
+ """
1144
+ label: String!
1145
+ """
1146
+ Number of activities for this device label.
1147
+ """
1148
+ activity_count: Int!
1149
+ }
1150
+
474
1151
  """
475
1152
  Lightweight track point optimised for time-series chart rendering.
476
1153
  """
@@ -496,6 +1173,14 @@ type GarminChartPoint {
496
1173
  """
497
1174
  heart_rate: Int
498
1175
  """
1176
+ Heart-rate zone index (1-5)
1177
+ """
1178
+ hr_zone: Int
1179
+ """
1180
+ Respiration rate in breaths per minute
1181
+ """
1182
+ respiration_rate: Int
1183
+ """
499
1184
  Pedal/step cadence in RPM
500
1185
  """
501
1186
  cadence: Int
@@ -513,6 +1198,36 @@ type GarminChartPoint {
513
1198
  longitude: Float!
514
1199
  }
515
1200
 
1201
+ """
1202
+ Aggregated Garmin activity totals for a single time bucket (week, month, or year).
1203
+ """
1204
+ type GarminActivityTotal {
1205
+ """
1206
+ Start date of the period bucket (DATE_TRUNC of week/month/year)
1207
+ """
1208
+ period_start: String!
1209
+ """
1210
+ Number of activities in the period
1211
+ """
1212
+ activity_count: Int!
1213
+ """
1214
+ Sum of distance in kilometres
1215
+ """
1216
+ total_distance_km: Float
1217
+ """
1218
+ Sum of active duration in seconds (excludes pauses)
1219
+ """
1220
+ total_duration_seconds: Int
1221
+ """
1222
+ Sum of elevation gain in meters
1223
+ """
1224
+ total_ascent_m: Int
1225
+ """
1226
+ Sum of calories burned
1227
+ """
1228
+ total_calories: Int
1229
+ }
1230
+
516
1231
  # -------------------------------------------------------
517
1232
  # Unified GPS
518
1233
  # -------------------------------------------------------
@@ -638,6 +1353,42 @@ type DailyActivitySummary {
638
1353
  total_calories: Int
639
1354
  }
640
1355
 
1356
+ """
1357
+ Paginated list of daily activity summaries.
1358
+ """
1359
+ type DailySummaryConnection {
1360
+ """
1361
+ List of daily activity summary items in the current page
1362
+ """
1363
+ items: [DailyActivitySummary!]!
1364
+ """
1365
+ Total number of items matching the query
1366
+ """
1367
+ total: Int!
1368
+ """
1369
+ Maximum number of items per page
1370
+ """
1371
+ limit: Int!
1372
+ """
1373
+ Number of items skipped from the start
1374
+ """
1375
+ offset: Int!
1376
+ }
1377
+
1378
+ """
1379
+ Earliest and latest activity dates available in the daily activity summary view.
1380
+ """
1381
+ type DailySummaryDateRange {
1382
+ """
1383
+ Earliest activity date with daily summary data (YYYY-MM-DD)
1384
+ """
1385
+ min_date: String!
1386
+ """
1387
+ Latest activity date with daily summary data (YYYY-MM-DD)
1388
+ """
1389
+ max_date: String!
1390
+ }
1391
+
641
1392
  # -------------------------------------------------------
642
1393
  # Reference Locations
643
1394
  # -------------------------------------------------------
@@ -893,7 +1644,17 @@ type Query {
893
1644
  device_id: String
894
1645
  ): LocationCount!
895
1646
 
1647
+ """
1648
+ Get the earliest and latest location timestamps.
1649
+ """
1650
+ locationDateRange: LocationDateRange!
1651
+
896
1652
  # Garmin
1653
+ """
1654
+ Get the earliest and latest Garmin activity timestamps.
1655
+ """
1656
+ garminDateRange: GarminDateRange!
1657
+
897
1658
  """
898
1659
  Retrieve a paginated list of Garmin activities.
899
1660
  """
@@ -973,6 +1734,11 @@ type Query {
973
1734
  """
974
1735
  garminSports: [SportInfo!]!
975
1736
 
1737
+ """
1738
+ List Garmin recording device labels with activity counts.
1739
+ """
1740
+ garminDeviceCounts: [GarminDeviceCount!]!
1741
+
976
1742
  """
977
1743
  Retrieve chart-optimised track points for a Garmin activity.
978
1744
  """
@@ -983,6 +1749,58 @@ type Query {
983
1749
  activity_id: String!
984
1750
  ): [GarminChartPoint!]!
985
1751
 
1752
+ """
1753
+ Retrieve Garmin-native ClimbPro typed splits for a Garmin activity.
1754
+ """
1755
+ garminActivityClimbs(
1756
+ """
1757
+ Garmin Connect activity identifier
1758
+ """
1759
+ activity_id: String!
1760
+ ): [GarminActivityClimb!]!
1761
+
1762
+ """
1763
+ Retrieve Garmin-native or derived laps for a Garmin activity.
1764
+ """
1765
+ garminActivityLaps(
1766
+ """
1767
+ Garmin Connect activity identifier
1768
+ """
1769
+ activity_id: String!
1770
+ ): [GarminActivityLap!]!
1771
+
1772
+ """
1773
+ Retrieve all reverse-geocoded addresses for a Garmin activity (start, mid-route waypoints, and end).
1774
+ """
1775
+ garminActivityAddresses(
1776
+ """
1777
+ Garmin Connect activity identifier
1778
+ """
1779
+ activity_id: String!
1780
+ ): [GarminActivityAddress!]!
1781
+
1782
+ """
1783
+ Aggregate Garmin activity totals grouped by week, month, or year.
1784
+ """
1785
+ garminActivityTotals(
1786
+ """
1787
+ Aggregation period: 'week', 'month', or 'year'
1788
+ """
1789
+ period: String!
1790
+ """
1791
+ Filter by sport (e.g. cycling, running)
1792
+ """
1793
+ sport: String
1794
+ """
1795
+ Inclusive lower bound on activity start time (YYYY-MM-DD)
1796
+ """
1797
+ date_from: String
1798
+ """
1799
+ Inclusive upper bound on activity start time (YYYY-MM-DD)
1800
+ """
1801
+ date_to: String
1802
+ ): [GarminActivityTotal!]!
1803
+
986
1804
  # Unified GPS
987
1805
  """
988
1806
  Retrieve a paginated list of unified GPS points from all sources.
@@ -1012,6 +1830,14 @@ type Query {
1012
1830
  Sort direction
1013
1831
  """
1014
1832
  order: SortOrder
1833
+ """
1834
+ Exclude stationary points where speed is zero
1835
+ """
1836
+ exclude_stationary: Boolean
1837
+ """
1838
+ Remove points with duplicate coordinates (rounded to ~11m precision)
1839
+ """
1840
+ deduplicate: Boolean
1015
1841
  ): UnifiedGpsConnection!
1016
1842
 
1017
1843
  """
@@ -1027,10 +1853,19 @@ type Query {
1027
1853
  """
1028
1854
  date_to: String
1029
1855
  """
1030
- Maximum number of days to return
1856
+ Maximum number of days to return per page
1031
1857
  """
1032
1858
  limit: Int
1033
- ): [DailyActivitySummary!]!
1859
+ """
1860
+ Number of items to skip for pagination
1861
+ """
1862
+ offset: Int
1863
+ ): DailySummaryConnection!
1864
+
1865
+ """
1866
+ Get the earliest and latest activity dates available in the daily activity summary view.
1867
+ """
1868
+ dailySummaryDateRange: DailySummaryDateRange!
1034
1869
 
1035
1870
  # Reference Locations
1036
1871
  """
@@ -1113,6 +1948,12 @@ type Query {
1113
1948
  """
1114
1949
  limit: Int
1115
1950
  ): WithinReferenceResult!
1951
+
1952
+ # Geocoding
1953
+ """
1954
+ Get geocoding coverage statistics.
1955
+ """
1956
+ geocodingStatus: GeocodingStatus!
1116
1957
  }
1117
1958
 
1118
1959
  # -------------------------------------------------------
@@ -1132,4 +1973,18 @@ type Mutation {
1132
1973
  """
1133
1974
  lookback: Int
1134
1975
  ): GarminSyncTriggerResult!
1976
+
1977
+ """
1978
+ Trigger batch reverse-geocoding of un-geocoded location records.
1979
+ """
1980
+ triggerGeocoding(
1981
+ """
1982
+ Number of locations to geocode in this batch (default 100)
1983
+ """
1984
+ batch_size: Int
1985
+ """
1986
+ Re-process previously failed location records (for example, those with status `no_coverage`)
1987
+ """
1988
+ retry_failed: Boolean
1989
+ ): GeocodingTriggerResult!
1135
1990
  }