@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/index.d.ts CHANGED
@@ -1,19 +1,14 @@
1
1
  export type Maybe<T> = T | null;
2
2
  export type InputMaybe<T> = Maybe<T>;
3
- export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
4
- export type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };
5
- export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };
6
- export type MakeEmpty<T extends { [key: string]: unknown }, K extends keyof T> = { [_ in K]?: never };
7
- export type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };
8
3
  /** All built-in and custom scalars, mapped to their actual values */
9
4
  export interface Scalars {
10
- ID: { input: string; output: string; }
11
- String: { input: string; output: string; }
12
- Boolean: { input: boolean; output: boolean; }
13
- Int: { input: number; output: number; }
14
- Float: { input: number; output: number; }
15
- DateTime: { input: string; output: string; }
16
- JSON: { input: Record<string, unknown>; output: Record<string, unknown>; }
5
+ ID: { input: string; output: string };
6
+ String: { input: string; output: string };
7
+ Boolean: { input: boolean; output: boolean };
8
+ Int: { input: number; output: number };
9
+ Float: { input: number; output: number };
10
+ DateTime: { input: string; output: string };
11
+ JSON: { input: Record<string, unknown>; output: Record<string, unknown> };
17
12
  }
18
13
 
19
14
  /** Per-day aggregate combining OwnTracks location stats and Garmin activity metrics. */
@@ -45,6 +40,28 @@ export interface DailyActivitySummary {
45
40
  total_duration_seconds?: Maybe<Scalars['Float']['output']>;
46
41
  }
47
42
 
43
+ /** Paginated list of daily activity summaries. */
44
+ export interface DailySummaryConnection {
45
+ __typename?: 'DailySummaryConnection';
46
+ /** List of daily activity summary items in the current page */
47
+ items: Array<DailyActivitySummary>;
48
+ /** Maximum number of items per page */
49
+ limit: Scalars['Int']['output'];
50
+ /** Number of items skipped from the start */
51
+ offset: Scalars['Int']['output'];
52
+ /** Total number of items matching the query */
53
+ total: Scalars['Int']['output'];
54
+ }
55
+
56
+ /** Earliest and latest activity dates available in the daily activity summary view. */
57
+ export interface DailySummaryDateRange {
58
+ __typename?: 'DailySummaryDateRange';
59
+ /** Latest activity date with daily summary data (YYYY-MM-DD) */
60
+ max_date: Scalars['String']['output'];
61
+ /** Earliest activity date with daily summary data (YYYY-MM-DD) */
62
+ min_date: Scalars['String']['output'];
63
+ }
64
+
48
65
  /** Distinct OwnTracks device identifier. */
49
66
  export interface DeviceInfo {
50
67
  __typename?: 'DeviceInfo';
@@ -72,12 +89,18 @@ export interface GarminActivity {
72
89
  __typename?: 'GarminActivity';
73
90
  /** Garmin Connect activity identifier */
74
91
  activity_id: Scalars['String']['output'];
92
+ /** Aerobic training effect score */
93
+ aerobic_training_effect?: Maybe<Scalars['Float']['output']>;
94
+ /** Anaerobic training effect score */
95
+ anaerobic_training_effect?: Maybe<Scalars['Float']['output']>;
75
96
  /** Average cadence in RPM */
76
97
  avg_cadence?: Maybe<Scalars['Int']['output']>;
77
98
  /** Average heart rate in beats per minute */
78
99
  avg_heart_rate?: Maybe<Scalars['Int']['output']>;
79
100
  /** Average pace in minutes per kilometre */
80
101
  avg_pace?: Maybe<Scalars['Float']['output']>;
102
+ /** Average respiration rate in breaths per minute */
103
+ avg_respiration_rate?: Maybe<Scalars['Int']['output']>;
81
104
  /** Average speed in km/h */
82
105
  avg_speed_kmh?: Maybe<Scalars['Float']['output']>;
83
106
  /** Average ambient temperature in degrees C */
@@ -86,6 +109,8 @@ export interface GarminActivity {
86
109
  calories?: Maybe<Scalars['Int']['output']>;
87
110
  /** UTC timestamp when the record was inserted */
88
111
  created_at?: Maybe<Scalars['String']['output']>;
112
+ /** Recording device metadata (manufacturer, model, firmware) */
113
+ device?: Maybe<GarminDevice>;
89
114
  /** Device manufacturer (e.g. garmin) */
90
115
  device_manufacturer?: Maybe<Scalars['String']['output']>;
91
116
  /** Total distance in kilometres */
@@ -94,22 +119,38 @@ export interface GarminActivity {
94
119
  duration_seconds?: Maybe<Scalars['Float']['output']>;
95
120
  /** Activity end time in UTC */
96
121
  end_time?: Maybe<Scalars['String']['output']>;
122
+ /** Exercise load score */
123
+ exercise_load?: Maybe<Scalars['Int']['output']>;
124
+ /** Whether this activity has usable heart-rate data in summary or track points */
125
+ hr_available: Scalars['Boolean']['output'];
97
126
  /** Maximum cadence in RPM */
98
127
  max_cadence?: Maybe<Scalars['Int']['output']>;
99
128
  /** Maximum heart rate in beats per minute */
100
129
  max_heart_rate?: Maybe<Scalars['Int']['output']>;
130
+ /** Maximum respiration rate in breaths per minute */
131
+ max_respiration_rate?: Maybe<Scalars['Int']['output']>;
101
132
  /** Maximum speed in km/h */
102
133
  max_speed_kmh?: Maybe<Scalars['Float']['output']>;
103
134
  /** Maximum ambient temperature in degrees C */
104
135
  max_temperature_c?: Maybe<Scalars['Int']['output']>;
136
+ /** Minimum heart rate in beats per minute */
137
+ min_heart_rate?: Maybe<Scalars['Int']['output']>;
138
+ /** Minimum respiration rate in breaths per minute */
139
+ min_respiration_rate?: Maybe<Scalars['Int']['output']>;
105
140
  /** Minimum ambient temperature in degrees C */
106
141
  min_temperature_c?: Maybe<Scalars['Int']['output']>;
142
+ /** Moderate intensity minutes */
143
+ moderate_intensity_minutes?: Maybe<Scalars['Int']['output']>;
144
+ /** Distance over paved surfaces in kilometres */
145
+ paved_distance_km?: Maybe<Scalars['Float']['output']>;
107
146
  /** Primary sport type (e.g. cycling, running) */
108
147
  sport: Scalars['String']['output'];
109
148
  /** Activity start time in UTC */
110
149
  start_time?: Maybe<Scalars['String']['output']>;
111
150
  /** Sub-sport classification (e.g. road, trail) */
112
151
  sub_sport?: Maybe<Scalars['String']['output']>;
152
+ /** Estimated sweat loss in millilitres */
153
+ sweat_loss_ml?: Maybe<Scalars['Int']['output']>;
113
154
  /** Total elevation gain in meters */
114
155
  total_ascent_m?: Maybe<Scalars['Float']['output']>;
115
156
  /** Total elevation loss in meters */
@@ -118,12 +159,134 @@ export interface GarminActivity {
118
159
  total_distance?: Maybe<Scalars['Float']['output']>;
119
160
  /** Total elapsed time in seconds (includes pauses) */
120
161
  total_elapsed_time?: Maybe<Scalars['Float']['output']>;
162
+ /** Total intensity minutes */
163
+ total_intensity_minutes?: Maybe<Scalars['Int']['output']>;
164
+ /** Total activity strokes */
165
+ total_strokes?: Maybe<Scalars['Int']['output']>;
121
166
  /** Total timer time in seconds (active recording) */
122
167
  total_timer_time?: Maybe<Scalars['Float']['output']>;
123
168
  /** Number of GPS track points in this activity */
124
169
  track_point_count?: Maybe<Scalars['Int']['output']>;
170
+ /** Distance over unpaved surfaces in kilometres */
171
+ unpaved_distance_km?: Maybe<Scalars['Float']['output']>;
125
172
  /** UTC timestamp when the FIT file was uploaded */
126
173
  uploaded_at?: Maybe<Scalars['String']['output']>;
174
+ /** Vigorous intensity minutes */
175
+ vigorous_intensity_minutes?: Maybe<Scalars['Int']['output']>;
176
+ }
177
+
178
+ /** Full reverse-geocoded address attached to a Garmin activity waypoint. */
179
+ export interface GarminActivityAddress {
180
+ __typename?: 'GarminActivityAddress';
181
+ /** Parent Garmin activity identifier */
182
+ activity_id: Scalars['String']['output'];
183
+ /** Pelias confidence score (0-1) */
184
+ confidence?: Maybe<Scalars['Float']['output']>;
185
+ /** Country name */
186
+ country?: Maybe<Scalars['String']['output']>;
187
+ /** Full formatted address label from Pelias */
188
+ display_address?: Maybe<Scalars['String']['output']>;
189
+ /** UTC timestamp when geocoding was performed */
190
+ geocoded_at?: Maybe<Scalars['String']['output']>;
191
+ /** House or building number */
192
+ housenumber?: Maybe<Scalars['String']['output']>;
193
+ /** GPS latitude in decimal degrees (WGS 84) */
194
+ latitude: Scalars['Float']['output'];
195
+ /** City or town */
196
+ locality?: Maybe<Scalars['String']['output']>;
197
+ /** GPS longitude in decimal degrees (WGS 84) */
198
+ longitude: Scalars['Float']['output'];
199
+ /** Neighbourhood name */
200
+ neighbourhood?: Maybe<Scalars['String']['output']>;
201
+ /** Postal or ZIP code */
202
+ postalcode?: Maybe<Scalars['String']['output']>;
203
+ /** State or province */
204
+ region?: Maybe<Scalars['String']['output']>;
205
+ /** Geocoding status: success, no_coverage, error, pending */
206
+ status: Scalars['String']['output'];
207
+ /** Street name */
208
+ street?: Maybe<Scalars['String']['output']>;
209
+ /** UTC timestamp of the track point this address was derived from */
210
+ timestamp: Scalars['DateTime']['output'];
211
+ /** garmin_track_points.id this address was geocoded from */
212
+ track_point_id: Scalars['Int']['output'];
213
+ /** Role of this waypoint within the activity: start, end, or waypoint */
214
+ waypoint_kind: Scalars['String']['output'];
215
+ }
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']>;
127
290
  }
128
291
 
129
292
  /** Paginated list of Garmin activities. */
@@ -139,6 +302,66 @@ export interface GarminActivityConnection {
139
302
  total: Scalars['Int']['output'];
140
303
  }
141
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
+ /** Aggregated Garmin activity totals for a single time bucket (week, month, or year). */
349
+ export interface GarminActivityTotal {
350
+ __typename?: 'GarminActivityTotal';
351
+ /** Number of activities in the period */
352
+ activity_count: Scalars['Int']['output'];
353
+ /** Start date of the period bucket (DATE_TRUNC of week/month/year) */
354
+ period_start: Scalars['String']['output'];
355
+ /** Sum of elevation gain in meters */
356
+ total_ascent_m?: Maybe<Scalars['Int']['output']>;
357
+ /** Sum of calories burned */
358
+ total_calories?: Maybe<Scalars['Int']['output']>;
359
+ /** Sum of distance in kilometres */
360
+ total_distance_km?: Maybe<Scalars['Float']['output']>;
361
+ /** Sum of active duration in seconds (excludes pauses) */
362
+ total_duration_seconds?: Maybe<Scalars['Int']['output']>;
363
+ }
364
+
142
365
  /** Lightweight track point optimised for time-series chart rendering. */
143
366
  export interface GarminChartPoint {
144
367
  __typename?: 'GarminChartPoint';
@@ -150,10 +373,14 @@ export interface GarminChartPoint {
150
373
  distance_from_start_km?: Maybe<Scalars['Float']['output']>;
151
374
  /** Heart rate in beats per minute */
152
375
  heart_rate?: Maybe<Scalars['Int']['output']>;
376
+ /** Heart-rate zone index (1-5) */
377
+ hr_zone?: Maybe<Scalars['Int']['output']>;
153
378
  /** GPS latitude in decimal degrees (WGS 84) */
154
379
  latitude: Scalars['Float']['output'];
155
380
  /** GPS longitude in decimal degrees (WGS 84) */
156
381
  longitude: Scalars['Float']['output'];
382
+ /** Respiration rate in breaths per minute */
383
+ respiration_rate?: Maybe<Scalars['Int']['output']>;
157
384
  /** Instantaneous speed in km/h */
158
385
  speed_kmh?: Maybe<Scalars['Float']['output']>;
159
386
  /** Ambient temperature in degrees C */
@@ -162,6 +389,39 @@ export interface GarminChartPoint {
162
389
  timestamp: Scalars['DateTime']['output'];
163
390
  }
164
391
 
392
+ /** Earliest and latest timestamps in the Garmin activities table. */
393
+ export interface GarminDateRange {
394
+ __typename?: 'GarminDateRange';
395
+ /** Latest Garmin activity timestamp (ISO 8601) */
396
+ max_date: Scalars['DateTime']['output'];
397
+ /** Earliest Garmin activity timestamp (ISO 8601) */
398
+ min_date: Scalars['DateTime']['output'];
399
+ }
400
+
401
+ /** Recording device metadata captured from a Garmin activity's FIT file. */
402
+ export interface GarminDevice {
403
+ __typename?: 'GarminDevice';
404
+ /** Recording device serial number */
405
+ device_id?: Maybe<Scalars['Float']['output']>;
406
+ /** Raw Garmin product enum id from the FIT file (e.g. 4061) */
407
+ garmin_product?: Maybe<Scalars['Int']['output']>;
408
+ /** Device manufacturer (e.g. garmin) */
409
+ manufacturer?: Maybe<Scalars['String']['output']>;
410
+ /** Friendly device model name (e.g. Edge 540 Solar) */
411
+ model?: Maybe<Scalars['String']['output']>;
412
+ /** Device firmware/software version (e.g. 31.30) */
413
+ software_version?: Maybe<Scalars['String']['output']>;
414
+ }
415
+
416
+ /** Garmin activity count grouped by recording device model. */
417
+ export interface GarminDeviceCount {
418
+ __typename?: 'GarminDeviceCount';
419
+ /** Number of activities for this device label. */
420
+ activity_count: Scalars['Int']['output'];
421
+ /** Device model label, or Manual when an activity has no recording device. */
422
+ label: Scalars['String']['output'];
423
+ }
424
+
165
425
  /** Result payload returned when triggering an on-demand Garmin sync. */
166
426
  export interface GarminSyncTriggerResult {
167
427
  __typename?: 'GarminSyncTriggerResult';
@@ -188,6 +448,8 @@ export interface GarminTrackPoint {
188
448
  __typename?: 'GarminTrackPoint';
189
449
  /** Parent Garmin activity identifier */
190
450
  activity_id: Scalars['String']['output'];
451
+ /** Compact reverse-geocoded address summary, when geocoded */
452
+ address?: Maybe<GeocodedAddressSummary>;
191
453
  /** Elevation above sea level in meters */
192
454
  altitude?: Maybe<Scalars['Float']['output']>;
193
455
  /** Pedal/step cadence in RPM */
@@ -196,16 +458,24 @@ export interface GarminTrackPoint {
196
458
  created_at?: Maybe<Scalars['String']['output']>;
197
459
  /** Cumulative distance from activity start in km */
198
460
  distance_from_start_km?: Maybe<Scalars['Float']['output']>;
461
+ /** Effort classification label */
462
+ effort_level?: Maybe<Scalars['String']['output']>;
199
463
  /** Heart rate in beats per minute */
200
464
  heart_rate?: Maybe<Scalars['Int']['output']>;
465
+ /** Heart-rate zone index (1-5) */
466
+ hr_zone?: Maybe<Scalars['Int']['output']>;
201
467
  /** Unique track point record identifier */
202
468
  id: Scalars['Int']['output'];
203
469
  /** GPS latitude in decimal degrees (WGS 84) */
204
470
  latitude: Scalars['Float']['output'];
205
471
  /** GPS longitude in decimal degrees (WGS 84) */
206
472
  longitude: Scalars['Float']['output'];
473
+ /** Respiration rate in breaths per minute */
474
+ respiration_rate?: Maybe<Scalars['Int']['output']>;
207
475
  /** Instantaneous speed in km/h */
208
476
  speed_kmh?: Maybe<Scalars['Float']['output']>;
477
+ /** Road or terrain type */
478
+ surface_type?: Maybe<Scalars['String']['output']>;
209
479
  /** Ambient temperature in degrees C */
210
480
  temperature_c?: Maybe<Scalars['Float']['output']>;
211
481
  /** UTC timestamp of the track point recording */
@@ -225,6 +495,124 @@ export interface GarminTrackPointConnection {
225
495
  total: Scalars['Int']['output'];
226
496
  }
227
497
 
498
+ /** Reverse-geocoded address components from Pelias. */
499
+ export interface GeocodedAddress {
500
+ __typename?: 'GeocodedAddress';
501
+ /** Pelias confidence score (0-1) */
502
+ confidence?: Maybe<Scalars['Float']['output']>;
503
+ /** Country name */
504
+ country?: Maybe<Scalars['String']['output']>;
505
+ /** Full formatted address label from Pelias */
506
+ display_address?: Maybe<Scalars['String']['output']>;
507
+ /** UTC timestamp when geocoding was performed */
508
+ geocoded_at?: Maybe<Scalars['String']['output']>;
509
+ /** House or building number */
510
+ housenumber?: Maybe<Scalars['String']['output']>;
511
+ /** City or town */
512
+ locality?: Maybe<Scalars['String']['output']>;
513
+ /** Neighbourhood name */
514
+ neighbourhood?: Maybe<Scalars['String']['output']>;
515
+ /** Postal or ZIP code */
516
+ postalcode?: Maybe<Scalars['String']['output']>;
517
+ /** State or province */
518
+ region?: Maybe<Scalars['String']['output']>;
519
+ /** Geocoding status: success, no_coverage, error, pending */
520
+ status: Scalars['String']['output'];
521
+ /** Street name */
522
+ street?: Maybe<Scalars['String']['output']>;
523
+ }
524
+
525
+ /** Compact reverse-geocoded address summary embedded in track-point payloads. */
526
+ export interface GeocodedAddressSummary {
527
+ __typename?: 'GeocodedAddressSummary';
528
+ /** Pelias confidence score (0-1) */
529
+ confidence?: Maybe<Scalars['Float']['output']>;
530
+ /** Country name */
531
+ country?: Maybe<Scalars['String']['output']>;
532
+ /** Full formatted address label from Pelias */
533
+ display_address?: Maybe<Scalars['String']['output']>;
534
+ /** UTC timestamp when geocoding was performed */
535
+ geocoded_at?: Maybe<Scalars['String']['output']>;
536
+ /** House or building number */
537
+ housenumber?: Maybe<Scalars['String']['output']>;
538
+ /** City or town */
539
+ locality?: Maybe<Scalars['String']['output']>;
540
+ /** Neighbourhood name */
541
+ neighbourhood?: Maybe<Scalars['String']['output']>;
542
+ /** Postal or ZIP code */
543
+ postalcode?: Maybe<Scalars['String']['output']>;
544
+ /** State or province */
545
+ region?: Maybe<Scalars['String']['output']>;
546
+ /** Geocoding status: success, no_coverage, error, pending */
547
+ status: Scalars['String']['output'];
548
+ /** Street name */
549
+ street?: Maybe<Scalars['String']['output']>;
550
+ /** Role of this waypoint within a Garmin activity (start, end, waypoint). Null for OwnTracks records. */
551
+ waypoint_kind?: Maybe<Scalars['String']['output']>;
552
+ }
553
+
554
+ /** Coverage statistics for a single geocoding source (owntracks or garmin). */
555
+ export interface GeocodingSourceStatus {
556
+ __typename?: 'GeocodingSourceStatus';
557
+ /** Number of records that failed geocoding */
558
+ errors: Scalars['Int']['output'];
559
+ /** Number of records outside Pelias coverage area */
560
+ no_coverage: Scalars['Int']['output'];
561
+ /** Number of records awaiting geocoding for this source */
562
+ pending: Scalars['Int']['output'];
563
+ /** Number of successfully geocoded records for this source */
564
+ success: Scalars['Int']['output'];
565
+ /** Total number of geocoded_addresses rows for this source */
566
+ total: Scalars['Int']['output'];
567
+ }
568
+
569
+ /** Coverage statistics for geocoded location records. */
570
+ export interface GeocodingStatus {
571
+ __typename?: 'GeocodingStatus';
572
+ /** Per-source breakdown of geocoding coverage (owntracks, garmin) */
573
+ by_source: GeocodingStatusBySource;
574
+ /** Percentage of locations with a geocoded address */
575
+ coverage_percent: Scalars['Float']['output'];
576
+ /** Number of locations that failed geocoding */
577
+ errors: Scalars['Int']['output'];
578
+ /** Number of locations with a geocoded address (any status) */
579
+ geocoded: Scalars['Int']['output'];
580
+ /** Number of locations outside Pelias coverage area */
581
+ no_coverage: Scalars['Int']['output'];
582
+ /** Number of locations awaiting geocoding */
583
+ pending: Scalars['Int']['output'];
584
+ /** Number of successfully geocoded locations */
585
+ success: Scalars['Int']['output'];
586
+ /** Total number of OwnTracks location records */
587
+ total_locations: Scalars['Int']['output'];
588
+ }
589
+
590
+ /** Per-source breakdown of geocoding coverage. */
591
+ export interface GeocodingStatusBySource {
592
+ __typename?: 'GeocodingStatusBySource';
593
+ /** Coverage stats for Garmin rows */
594
+ garmin: GeocodingSourceStatus;
595
+ /** Number of Garmin activities that have at least one address row */
596
+ garmin_activities_geocoded: Scalars['Int']['output'];
597
+ /** Total number of Garmin activities (denominator for activity-level coverage) */
598
+ garmin_activities_total: Scalars['Int']['output'];
599
+ /** Percentage of Garmin activities with at least one geocoded address */
600
+ garmin_coverage_percent: Scalars['Float']['output'];
601
+ /** Coverage stats for OwnTracks rows */
602
+ owntracks: GeocodingSourceStatus;
603
+ }
604
+
605
+ /** Result of triggering a batch geocoding operation. */
606
+ export interface GeocodingTriggerResult {
607
+ __typename?: 'GeocodingTriggerResult';
608
+ /** Number of records processed in this batch */
609
+ processed: Scalars['Int']['output'];
610
+ /** Number of records still awaiting geocoding */
611
+ remaining: Scalars['Int']['output'];
612
+ /** Number of records skipped via proximity deduplication */
613
+ skipped_dedup: Scalars['Int']['output'];
614
+ }
615
+
228
616
  /** Service health status. */
229
617
  export interface HealthStatus {
230
618
  __typename?: 'HealthStatus';
@@ -251,6 +639,8 @@ export interface Location {
251
639
  created_at?: Maybe<Scalars['String']['output']>;
252
640
  /** OwnTracks device identifier (e.g. iphone_stuart) */
253
641
  device_id: Scalars['String']['output'];
642
+ /** Short formatted address from reverse geocoding */
643
+ display_address?: Maybe<Scalars['String']['output']>;
254
644
  /** Unique location record identifier */
255
645
  id: Scalars['Int']['output'];
256
646
  /** GPS latitude in decimal degrees (WGS 84) */
@@ -291,11 +681,22 @@ export interface LocationCount {
291
681
  device_id?: Maybe<Scalars['String']['output']>;
292
682
  }
293
683
 
684
+ /** Earliest and latest timestamps in the locations table. */
685
+ export interface LocationDateRange {
686
+ __typename?: 'LocationDateRange';
687
+ /** Latest location timestamp (ISO 8601) */
688
+ max_date: Scalars['DateTime']['output'];
689
+ /** Earliest location timestamp (ISO 8601) */
690
+ min_date: Scalars['DateTime']['output'];
691
+ }
692
+
294
693
  /** Full location detail including the original OwnTracks JSON payload. */
295
694
  export interface LocationDetail {
296
695
  __typename?: 'LocationDetail';
297
696
  /** Horizontal accuracy of the GPS fix in meters */
298
697
  accuracy?: Maybe<Scalars['Float']['output']>;
698
+ /** Full reverse-geocoded address components from Pelias */
699
+ address?: Maybe<GeocodedAddress>;
299
700
  /** Altitude above sea level in meters */
300
701
  altitude?: Maybe<Scalars['Float']['output']>;
301
702
  /** Device battery level as a percentage (0-100) */
@@ -330,14 +731,20 @@ export interface Mutation {
330
731
  __typename?: 'Mutation';
331
732
  /** Trigger an on-demand Garmin sync in the upstream API. */
332
733
  triggerGarminSync: GarminSyncTriggerResult;
734
+ /** Trigger batch reverse-geocoding of un-geocoded location records. */
735
+ triggerGeocoding: GeocodingTriggerResult;
333
736
  }
334
737
 
335
-
336
738
  export interface MutationTriggerGarminSyncArgs {
337
739
  lookback?: InputMaybe<Scalars['Int']['input']>;
338
740
  window_hours?: InputMaybe<Scalars['Int']['input']>;
339
741
  }
340
742
 
743
+ export interface MutationTriggerGeocodingArgs {
744
+ batch_size?: InputMaybe<Scalars['Int']['input']>;
745
+ retry_failed?: InputMaybe<Scalars['Boolean']['input']>;
746
+ }
747
+
341
748
  /** GPS point found within a spatial proximity search. */
342
749
  export interface NearbyPoint {
343
750
  __typename?: 'NearbyPoint';
@@ -371,25 +778,43 @@ export interface Query {
371
778
  /** Calculate the geodesic distance between two geographic points. */
372
779
  calculateDistance: DistanceResult;
373
780
  /** Retrieve daily activity summaries combining OwnTracks and Garmin data. */
374
- dailySummary: Array<DailyActivitySummary>;
781
+ dailySummary: DailySummaryConnection;
782
+ /** Get the earliest and latest activity dates available in the daily activity summary view. */
783
+ dailySummaryDateRange: DailySummaryDateRange;
375
784
  /** List all distinct OwnTracks device identifiers. */
376
785
  devices: Array<DeviceInfo>;
377
786
  /** Retrieve a paginated list of Garmin activities. */
378
787
  garminActivities: GarminActivityConnection;
379
788
  /** Retrieve a single Garmin activity by its ID. */
380
789
  garminActivity?: Maybe<GarminActivity>;
790
+ /** Retrieve all reverse-geocoded addresses for a Garmin activity (start, mid-route waypoints, and end). */
791
+ garminActivityAddresses: Array<GarminActivityAddress>;
792
+ /** Retrieve Garmin-native ClimbPro typed splits for a Garmin activity. */
793
+ garminActivityClimbs: Array<GarminActivityClimb>;
794
+ /** Retrieve Garmin-native or derived laps for a Garmin activity. */
795
+ garminActivityLaps: Array<GarminActivityLap>;
796
+ /** Aggregate Garmin activity totals grouped by week, month, or year. */
797
+ garminActivityTotals: Array<GarminActivityTotal>;
381
798
  /** Retrieve chart-optimised track points for a Garmin activity. */
382
799
  garminChartData: Array<GarminChartPoint>;
800
+ /** Get the earliest and latest Garmin activity timestamps. */
801
+ garminDateRange: GarminDateRange;
802
+ /** List Garmin recording device labels with activity counts. */
803
+ garminDeviceCounts: Array<GarminDeviceCount>;
383
804
  /** List all distinct sport types with activity counts. */
384
805
  garminSports: Array<SportInfo>;
385
806
  /** Retrieve paginated GPS track points for a Garmin activity. */
386
807
  garminTrackPoints: GarminTrackPointConnection;
808
+ /** Get geocoding coverage statistics. */
809
+ geocodingStatus: GeocodingStatus;
387
810
  /** Get service health status. */
388
811
  health: HealthStatus;
389
812
  /** Retrieve a single location by its ID, including raw payload. */
390
813
  location?: Maybe<LocationDetail>;
391
814
  /** Get aggregate count of location records with optional filters. */
392
815
  locationCount: LocationCount;
816
+ /** Get the earliest and latest location timestamps. */
817
+ locationDateRange: LocationDateRange;
393
818
  /** Retrieve a paginated list of OwnTracks location records. */
394
819
  locations: LocationConnection;
395
820
  /** Find GPS points within a radius of a geographic coordinate. */
@@ -406,7 +831,6 @@ export interface Query {
406
831
  withinReference: WithinReferenceResult;
407
832
  }
408
833
 
409
-
410
834
  export interface QueryCalculateDistanceArgs {
411
835
  from_lat: Scalars['Float']['input'];
412
836
  from_lon: Scalars['Float']['input'];
@@ -414,14 +838,13 @@ export interface QueryCalculateDistanceArgs {
414
838
  to_lon: Scalars['Float']['input'];
415
839
  }
416
840
 
417
-
418
841
  export interface QueryDailySummaryArgs {
419
842
  date_from?: InputMaybe<Scalars['String']['input']>;
420
843
  date_to?: InputMaybe<Scalars['String']['input']>;
421
844
  limit?: InputMaybe<Scalars['Int']['input']>;
845
+ offset?: InputMaybe<Scalars['Int']['input']>;
422
846
  }
423
847
 
424
-
425
848
  export interface QueryGarminActivitiesArgs {
426
849
  date_from?: InputMaybe<Scalars['String']['input']>;
427
850
  date_to?: InputMaybe<Scalars['String']['input']>;
@@ -432,16 +855,32 @@ export interface QueryGarminActivitiesArgs {
432
855
  sport?: InputMaybe<Scalars['String']['input']>;
433
856
  }
434
857
 
435
-
436
858
  export interface QueryGarminActivityArgs {
437
859
  activity_id: Scalars['String']['input'];
438
860
  }
439
861
 
862
+ export interface QueryGarminActivityAddressesArgs {
863
+ activity_id: Scalars['String']['input'];
864
+ }
440
865
 
441
- export interface QueryGarminChartDataArgs {
866
+ export interface QueryGarminActivityClimbsArgs {
442
867
  activity_id: Scalars['String']['input'];
443
868
  }
444
869
 
870
+ export interface QueryGarminActivityLapsArgs {
871
+ activity_id: Scalars['String']['input'];
872
+ }
873
+
874
+ export interface QueryGarminActivityTotalsArgs {
875
+ date_from?: InputMaybe<Scalars['String']['input']>;
876
+ date_to?: InputMaybe<Scalars['String']['input']>;
877
+ period: Scalars['String']['input'];
878
+ sport?: InputMaybe<Scalars['String']['input']>;
879
+ }
880
+
881
+ export interface QueryGarminChartDataArgs {
882
+ activity_id: Scalars['String']['input'];
883
+ }
445
884
 
446
885
  export interface QueryGarminTrackPointsArgs {
447
886
  activity_id: Scalars['String']['input'];
@@ -452,18 +891,15 @@ export interface QueryGarminTrackPointsArgs {
452
891
  sort?: InputMaybe<Scalars['String']['input']>;
453
892
  }
454
893
 
455
-
456
894
  export interface QueryLocationArgs {
457
895
  id: Scalars['Int']['input'];
458
896
  }
459
897
 
460
-
461
898
  export interface QueryLocationCountArgs {
462
899
  date?: InputMaybe<Scalars['String']['input']>;
463
900
  device_id?: InputMaybe<Scalars['String']['input']>;
464
901
  }
465
902
 
466
-
467
903
  export interface QueryLocationsArgs {
468
904
  date_from?: InputMaybe<Scalars['String']['input']>;
469
905
  date_to?: InputMaybe<Scalars['String']['input']>;
@@ -474,7 +910,6 @@ export interface QueryLocationsArgs {
474
910
  sort?: InputMaybe<Scalars['String']['input']>;
475
911
  }
476
912
 
477
-
478
913
  export interface QueryNearbyPointsArgs {
479
914
  lat: Scalars['Float']['input'];
480
915
  limit?: InputMaybe<Scalars['Int']['input']>;
@@ -483,22 +918,21 @@ export interface QueryNearbyPointsArgs {
483
918
  source?: InputMaybe<Scalars['String']['input']>;
484
919
  }
485
920
 
486
-
487
921
  export interface QueryReferenceLocationArgs {
488
922
  id: Scalars['Int']['input'];
489
923
  }
490
924
 
491
-
492
925
  export interface QueryUnifiedGpsArgs {
493
926
  date_from?: InputMaybe<Scalars['String']['input']>;
494
927
  date_to?: InputMaybe<Scalars['String']['input']>;
928
+ deduplicate?: InputMaybe<Scalars['Boolean']['input']>;
929
+ exclude_stationary?: InputMaybe<Scalars['Boolean']['input']>;
495
930
  limit?: InputMaybe<Scalars['Int']['input']>;
496
931
  offset?: InputMaybe<Scalars['Int']['input']>;
497
932
  order?: InputMaybe<SortOrder>;
498
933
  source?: InputMaybe<Scalars['String']['input']>;
499
934
  }
500
935
 
501
-
502
936
  export interface QueryWithinReferenceArgs {
503
937
  limit?: InputMaybe<Scalars['Int']['input']>;
504
938
  name: Scalars['String']['input'];