@stuartshay/otel-graphql-types 1.0.94 → 1.0.95
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/index.d.ts +319 -26
- package/package.json +1 -1
- package/schema.graphql +590 -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,59 @@ 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'];
|
|
127
215
|
}
|
|
128
216
|
|
|
129
217
|
/** Paginated list of Garmin activities. */
|
|
@@ -139,6 +227,23 @@ export interface GarminActivityConnection {
|
|
|
139
227
|
total: Scalars['Int']['output'];
|
|
140
228
|
}
|
|
141
229
|
|
|
230
|
+
/** Aggregated Garmin activity totals for a single time bucket (week, month, or year). */
|
|
231
|
+
export interface GarminActivityTotal {
|
|
232
|
+
__typename?: 'GarminActivityTotal';
|
|
233
|
+
/** Number of activities in the period */
|
|
234
|
+
activity_count: Scalars['Int']['output'];
|
|
235
|
+
/** Start date of the period bucket (DATE_TRUNC of week/month/year) */
|
|
236
|
+
period_start: Scalars['String']['output'];
|
|
237
|
+
/** Sum of elevation gain in meters */
|
|
238
|
+
total_ascent_m?: Maybe<Scalars['Int']['output']>;
|
|
239
|
+
/** Sum of calories burned */
|
|
240
|
+
total_calories?: Maybe<Scalars['Int']['output']>;
|
|
241
|
+
/** Sum of distance in kilometres */
|
|
242
|
+
total_distance_km?: Maybe<Scalars['Float']['output']>;
|
|
243
|
+
/** Sum of active duration in seconds (excludes pauses) */
|
|
244
|
+
total_duration_seconds?: Maybe<Scalars['Int']['output']>;
|
|
245
|
+
}
|
|
246
|
+
|
|
142
247
|
/** Lightweight track point optimised for time-series chart rendering. */
|
|
143
248
|
export interface GarminChartPoint {
|
|
144
249
|
__typename?: 'GarminChartPoint';
|
|
@@ -150,10 +255,14 @@ export interface GarminChartPoint {
|
|
|
150
255
|
distance_from_start_km?: Maybe<Scalars['Float']['output']>;
|
|
151
256
|
/** Heart rate in beats per minute */
|
|
152
257
|
heart_rate?: Maybe<Scalars['Int']['output']>;
|
|
258
|
+
/** Heart-rate zone index (1-5) */
|
|
259
|
+
hr_zone?: Maybe<Scalars['Int']['output']>;
|
|
153
260
|
/** GPS latitude in decimal degrees (WGS 84) */
|
|
154
261
|
latitude: Scalars['Float']['output'];
|
|
155
262
|
/** GPS longitude in decimal degrees (WGS 84) */
|
|
156
263
|
longitude: Scalars['Float']['output'];
|
|
264
|
+
/** Respiration rate in breaths per minute */
|
|
265
|
+
respiration_rate?: Maybe<Scalars['Int']['output']>;
|
|
157
266
|
/** Instantaneous speed in km/h */
|
|
158
267
|
speed_kmh?: Maybe<Scalars['Float']['output']>;
|
|
159
268
|
/** Ambient temperature in degrees C */
|
|
@@ -162,6 +271,30 @@ export interface GarminChartPoint {
|
|
|
162
271
|
timestamp: Scalars['DateTime']['output'];
|
|
163
272
|
}
|
|
164
273
|
|
|
274
|
+
/** Earliest and latest timestamps in the Garmin activities table. */
|
|
275
|
+
export interface GarminDateRange {
|
|
276
|
+
__typename?: 'GarminDateRange';
|
|
277
|
+
/** Latest Garmin activity timestamp (ISO 8601) */
|
|
278
|
+
max_date: Scalars['DateTime']['output'];
|
|
279
|
+
/** Earliest Garmin activity timestamp (ISO 8601) */
|
|
280
|
+
min_date: Scalars['DateTime']['output'];
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/** Recording device metadata captured from a Garmin activity's FIT file. */
|
|
284
|
+
export interface GarminDevice {
|
|
285
|
+
__typename?: 'GarminDevice';
|
|
286
|
+
/** Recording device serial number */
|
|
287
|
+
device_id?: Maybe<Scalars['Float']['output']>;
|
|
288
|
+
/** Raw Garmin product enum id from the FIT file (e.g. 4061) */
|
|
289
|
+
garmin_product?: Maybe<Scalars['Int']['output']>;
|
|
290
|
+
/** Device manufacturer (e.g. garmin) */
|
|
291
|
+
manufacturer?: Maybe<Scalars['String']['output']>;
|
|
292
|
+
/** Friendly device model name (e.g. Edge 540 Solar) */
|
|
293
|
+
model?: Maybe<Scalars['String']['output']>;
|
|
294
|
+
/** Device firmware/software version (e.g. 31.30) */
|
|
295
|
+
software_version?: Maybe<Scalars['String']['output']>;
|
|
296
|
+
}
|
|
297
|
+
|
|
165
298
|
/** Result payload returned when triggering an on-demand Garmin sync. */
|
|
166
299
|
export interface GarminSyncTriggerResult {
|
|
167
300
|
__typename?: 'GarminSyncTriggerResult';
|
|
@@ -188,6 +321,8 @@ export interface GarminTrackPoint {
|
|
|
188
321
|
__typename?: 'GarminTrackPoint';
|
|
189
322
|
/** Parent Garmin activity identifier */
|
|
190
323
|
activity_id: Scalars['String']['output'];
|
|
324
|
+
/** Compact reverse-geocoded address summary, when geocoded */
|
|
325
|
+
address?: Maybe<GeocodedAddressSummary>;
|
|
191
326
|
/** Elevation above sea level in meters */
|
|
192
327
|
altitude?: Maybe<Scalars['Float']['output']>;
|
|
193
328
|
/** Pedal/step cadence in RPM */
|
|
@@ -196,16 +331,24 @@ export interface GarminTrackPoint {
|
|
|
196
331
|
created_at?: Maybe<Scalars['String']['output']>;
|
|
197
332
|
/** Cumulative distance from activity start in km */
|
|
198
333
|
distance_from_start_km?: Maybe<Scalars['Float']['output']>;
|
|
334
|
+
/** Effort classification label */
|
|
335
|
+
effort_level?: Maybe<Scalars['String']['output']>;
|
|
199
336
|
/** Heart rate in beats per minute */
|
|
200
337
|
heart_rate?: Maybe<Scalars['Int']['output']>;
|
|
338
|
+
/** Heart-rate zone index (1-5) */
|
|
339
|
+
hr_zone?: Maybe<Scalars['Int']['output']>;
|
|
201
340
|
/** Unique track point record identifier */
|
|
202
341
|
id: Scalars['Int']['output'];
|
|
203
342
|
/** GPS latitude in decimal degrees (WGS 84) */
|
|
204
343
|
latitude: Scalars['Float']['output'];
|
|
205
344
|
/** GPS longitude in decimal degrees (WGS 84) */
|
|
206
345
|
longitude: Scalars['Float']['output'];
|
|
346
|
+
/** Respiration rate in breaths per minute */
|
|
347
|
+
respiration_rate?: Maybe<Scalars['Int']['output']>;
|
|
207
348
|
/** Instantaneous speed in km/h */
|
|
208
349
|
speed_kmh?: Maybe<Scalars['Float']['output']>;
|
|
350
|
+
/** Road or terrain type */
|
|
351
|
+
surface_type?: Maybe<Scalars['String']['output']>;
|
|
209
352
|
/** Ambient temperature in degrees C */
|
|
210
353
|
temperature_c?: Maybe<Scalars['Float']['output']>;
|
|
211
354
|
/** UTC timestamp of the track point recording */
|
|
@@ -225,6 +368,124 @@ export interface GarminTrackPointConnection {
|
|
|
225
368
|
total: Scalars['Int']['output'];
|
|
226
369
|
}
|
|
227
370
|
|
|
371
|
+
/** Reverse-geocoded address components from Pelias. */
|
|
372
|
+
export interface GeocodedAddress {
|
|
373
|
+
__typename?: 'GeocodedAddress';
|
|
374
|
+
/** Pelias confidence score (0-1) */
|
|
375
|
+
confidence?: Maybe<Scalars['Float']['output']>;
|
|
376
|
+
/** Country name */
|
|
377
|
+
country?: Maybe<Scalars['String']['output']>;
|
|
378
|
+
/** Full formatted address label from Pelias */
|
|
379
|
+
display_address?: Maybe<Scalars['String']['output']>;
|
|
380
|
+
/** UTC timestamp when geocoding was performed */
|
|
381
|
+
geocoded_at?: Maybe<Scalars['String']['output']>;
|
|
382
|
+
/** House or building number */
|
|
383
|
+
housenumber?: Maybe<Scalars['String']['output']>;
|
|
384
|
+
/** City or town */
|
|
385
|
+
locality?: Maybe<Scalars['String']['output']>;
|
|
386
|
+
/** Neighbourhood name */
|
|
387
|
+
neighbourhood?: Maybe<Scalars['String']['output']>;
|
|
388
|
+
/** Postal or ZIP code */
|
|
389
|
+
postalcode?: Maybe<Scalars['String']['output']>;
|
|
390
|
+
/** State or province */
|
|
391
|
+
region?: Maybe<Scalars['String']['output']>;
|
|
392
|
+
/** Geocoding status: success, no_coverage, error, pending */
|
|
393
|
+
status: Scalars['String']['output'];
|
|
394
|
+
/** Street name */
|
|
395
|
+
street?: Maybe<Scalars['String']['output']>;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
/** Compact reverse-geocoded address summary embedded in track-point payloads. */
|
|
399
|
+
export interface GeocodedAddressSummary {
|
|
400
|
+
__typename?: 'GeocodedAddressSummary';
|
|
401
|
+
/** Pelias confidence score (0-1) */
|
|
402
|
+
confidence?: Maybe<Scalars['Float']['output']>;
|
|
403
|
+
/** Country name */
|
|
404
|
+
country?: Maybe<Scalars['String']['output']>;
|
|
405
|
+
/** Full formatted address label from Pelias */
|
|
406
|
+
display_address?: Maybe<Scalars['String']['output']>;
|
|
407
|
+
/** UTC timestamp when geocoding was performed */
|
|
408
|
+
geocoded_at?: Maybe<Scalars['String']['output']>;
|
|
409
|
+
/** House or building number */
|
|
410
|
+
housenumber?: Maybe<Scalars['String']['output']>;
|
|
411
|
+
/** City or town */
|
|
412
|
+
locality?: Maybe<Scalars['String']['output']>;
|
|
413
|
+
/** Neighbourhood name */
|
|
414
|
+
neighbourhood?: Maybe<Scalars['String']['output']>;
|
|
415
|
+
/** Postal or ZIP code */
|
|
416
|
+
postalcode?: Maybe<Scalars['String']['output']>;
|
|
417
|
+
/** State or province */
|
|
418
|
+
region?: Maybe<Scalars['String']['output']>;
|
|
419
|
+
/** Geocoding status: success, no_coverage, error, pending */
|
|
420
|
+
status: Scalars['String']['output'];
|
|
421
|
+
/** Street name */
|
|
422
|
+
street?: Maybe<Scalars['String']['output']>;
|
|
423
|
+
/** Role of this waypoint within a Garmin activity (start, end, waypoint). Null for OwnTracks records. */
|
|
424
|
+
waypoint_kind?: Maybe<Scalars['String']['output']>;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/** Coverage statistics for a single geocoding source (owntracks or garmin). */
|
|
428
|
+
export interface GeocodingSourceStatus {
|
|
429
|
+
__typename?: 'GeocodingSourceStatus';
|
|
430
|
+
/** Number of records that failed geocoding */
|
|
431
|
+
errors: Scalars['Int']['output'];
|
|
432
|
+
/** Number of records outside Pelias coverage area */
|
|
433
|
+
no_coverage: Scalars['Int']['output'];
|
|
434
|
+
/** Number of records awaiting geocoding for this source */
|
|
435
|
+
pending: Scalars['Int']['output'];
|
|
436
|
+
/** Number of successfully geocoded records for this source */
|
|
437
|
+
success: Scalars['Int']['output'];
|
|
438
|
+
/** Total number of geocoded_addresses rows for this source */
|
|
439
|
+
total: Scalars['Int']['output'];
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/** Coverage statistics for geocoded location records. */
|
|
443
|
+
export interface GeocodingStatus {
|
|
444
|
+
__typename?: 'GeocodingStatus';
|
|
445
|
+
/** Per-source breakdown of geocoding coverage (owntracks, garmin) */
|
|
446
|
+
by_source: GeocodingStatusBySource;
|
|
447
|
+
/** Percentage of locations with a geocoded address */
|
|
448
|
+
coverage_percent: Scalars['Float']['output'];
|
|
449
|
+
/** Number of locations that failed geocoding */
|
|
450
|
+
errors: Scalars['Int']['output'];
|
|
451
|
+
/** Number of locations with a geocoded address (any status) */
|
|
452
|
+
geocoded: Scalars['Int']['output'];
|
|
453
|
+
/** Number of locations outside Pelias coverage area */
|
|
454
|
+
no_coverage: Scalars['Int']['output'];
|
|
455
|
+
/** Number of locations awaiting geocoding */
|
|
456
|
+
pending: Scalars['Int']['output'];
|
|
457
|
+
/** Number of successfully geocoded locations */
|
|
458
|
+
success: Scalars['Int']['output'];
|
|
459
|
+
/** Total number of OwnTracks location records */
|
|
460
|
+
total_locations: Scalars['Int']['output'];
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
/** Per-source breakdown of geocoding coverage. */
|
|
464
|
+
export interface GeocodingStatusBySource {
|
|
465
|
+
__typename?: 'GeocodingStatusBySource';
|
|
466
|
+
/** Coverage stats for Garmin rows */
|
|
467
|
+
garmin: GeocodingSourceStatus;
|
|
468
|
+
/** Number of Garmin activities that have at least one address row */
|
|
469
|
+
garmin_activities_geocoded: Scalars['Int']['output'];
|
|
470
|
+
/** Total number of Garmin activities (denominator for activity-level coverage) */
|
|
471
|
+
garmin_activities_total: Scalars['Int']['output'];
|
|
472
|
+
/** Percentage of Garmin activities with at least one geocoded address */
|
|
473
|
+
garmin_coverage_percent: Scalars['Float']['output'];
|
|
474
|
+
/** Coverage stats for OwnTracks rows */
|
|
475
|
+
owntracks: GeocodingSourceStatus;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
/** Result of triggering a batch geocoding operation. */
|
|
479
|
+
export interface GeocodingTriggerResult {
|
|
480
|
+
__typename?: 'GeocodingTriggerResult';
|
|
481
|
+
/** Number of records processed in this batch */
|
|
482
|
+
processed: Scalars['Int']['output'];
|
|
483
|
+
/** Number of records still awaiting geocoding */
|
|
484
|
+
remaining: Scalars['Int']['output'];
|
|
485
|
+
/** Number of records skipped via proximity deduplication */
|
|
486
|
+
skipped_dedup: Scalars['Int']['output'];
|
|
487
|
+
}
|
|
488
|
+
|
|
228
489
|
/** Service health status. */
|
|
229
490
|
export interface HealthStatus {
|
|
230
491
|
__typename?: 'HealthStatus';
|
|
@@ -251,6 +512,8 @@ export interface Location {
|
|
|
251
512
|
created_at?: Maybe<Scalars['String']['output']>;
|
|
252
513
|
/** OwnTracks device identifier (e.g. iphone_stuart) */
|
|
253
514
|
device_id: Scalars['String']['output'];
|
|
515
|
+
/** Short formatted address from reverse geocoding */
|
|
516
|
+
display_address?: Maybe<Scalars['String']['output']>;
|
|
254
517
|
/** Unique location record identifier */
|
|
255
518
|
id: Scalars['Int']['output'];
|
|
256
519
|
/** GPS latitude in decimal degrees (WGS 84) */
|
|
@@ -291,11 +554,22 @@ export interface LocationCount {
|
|
|
291
554
|
device_id?: Maybe<Scalars['String']['output']>;
|
|
292
555
|
}
|
|
293
556
|
|
|
557
|
+
/** Earliest and latest timestamps in the locations table. */
|
|
558
|
+
export interface LocationDateRange {
|
|
559
|
+
__typename?: 'LocationDateRange';
|
|
560
|
+
/** Latest location timestamp (ISO 8601) */
|
|
561
|
+
max_date: Scalars['DateTime']['output'];
|
|
562
|
+
/** Earliest location timestamp (ISO 8601) */
|
|
563
|
+
min_date: Scalars['DateTime']['output'];
|
|
564
|
+
}
|
|
565
|
+
|
|
294
566
|
/** Full location detail including the original OwnTracks JSON payload. */
|
|
295
567
|
export interface LocationDetail {
|
|
296
568
|
__typename?: 'LocationDetail';
|
|
297
569
|
/** Horizontal accuracy of the GPS fix in meters */
|
|
298
570
|
accuracy?: Maybe<Scalars['Float']['output']>;
|
|
571
|
+
/** Full reverse-geocoded address components from Pelias */
|
|
572
|
+
address?: Maybe<GeocodedAddress>;
|
|
299
573
|
/** Altitude above sea level in meters */
|
|
300
574
|
altitude?: Maybe<Scalars['Float']['output']>;
|
|
301
575
|
/** Device battery level as a percentage (0-100) */
|
|
@@ -330,14 +604,20 @@ export interface Mutation {
|
|
|
330
604
|
__typename?: 'Mutation';
|
|
331
605
|
/** Trigger an on-demand Garmin sync in the upstream API. */
|
|
332
606
|
triggerGarminSync: GarminSyncTriggerResult;
|
|
607
|
+
/** Trigger batch reverse-geocoding of un-geocoded location records. */
|
|
608
|
+
triggerGeocoding: GeocodingTriggerResult;
|
|
333
609
|
}
|
|
334
610
|
|
|
335
|
-
|
|
336
611
|
export interface MutationTriggerGarminSyncArgs {
|
|
337
612
|
lookback?: InputMaybe<Scalars['Int']['input']>;
|
|
338
613
|
window_hours?: InputMaybe<Scalars['Int']['input']>;
|
|
339
614
|
}
|
|
340
615
|
|
|
616
|
+
export interface MutationTriggerGeocodingArgs {
|
|
617
|
+
batch_size?: InputMaybe<Scalars['Int']['input']>;
|
|
618
|
+
retry_failed?: InputMaybe<Scalars['Boolean']['input']>;
|
|
619
|
+
}
|
|
620
|
+
|
|
341
621
|
/** GPS point found within a spatial proximity search. */
|
|
342
622
|
export interface NearbyPoint {
|
|
343
623
|
__typename?: 'NearbyPoint';
|
|
@@ -371,25 +651,37 @@ export interface Query {
|
|
|
371
651
|
/** Calculate the geodesic distance between two geographic points. */
|
|
372
652
|
calculateDistance: DistanceResult;
|
|
373
653
|
/** Retrieve daily activity summaries combining OwnTracks and Garmin data. */
|
|
374
|
-
dailySummary:
|
|
654
|
+
dailySummary: DailySummaryConnection;
|
|
655
|
+
/** Get the earliest and latest activity dates available in the daily activity summary view. */
|
|
656
|
+
dailySummaryDateRange: DailySummaryDateRange;
|
|
375
657
|
/** List all distinct OwnTracks device identifiers. */
|
|
376
658
|
devices: Array<DeviceInfo>;
|
|
377
659
|
/** Retrieve a paginated list of Garmin activities. */
|
|
378
660
|
garminActivities: GarminActivityConnection;
|
|
379
661
|
/** Retrieve a single Garmin activity by its ID. */
|
|
380
662
|
garminActivity?: Maybe<GarminActivity>;
|
|
663
|
+
/** Retrieve all reverse-geocoded addresses for a Garmin activity (start, mid-route waypoints, and end). */
|
|
664
|
+
garminActivityAddresses: Array<GarminActivityAddress>;
|
|
665
|
+
/** Aggregate Garmin activity totals grouped by week, month, or year. */
|
|
666
|
+
garminActivityTotals: Array<GarminActivityTotal>;
|
|
381
667
|
/** Retrieve chart-optimised track points for a Garmin activity. */
|
|
382
668
|
garminChartData: Array<GarminChartPoint>;
|
|
669
|
+
/** Get the earliest and latest Garmin activity timestamps. */
|
|
670
|
+
garminDateRange: GarminDateRange;
|
|
383
671
|
/** List all distinct sport types with activity counts. */
|
|
384
672
|
garminSports: Array<SportInfo>;
|
|
385
673
|
/** Retrieve paginated GPS track points for a Garmin activity. */
|
|
386
674
|
garminTrackPoints: GarminTrackPointConnection;
|
|
675
|
+
/** Get geocoding coverage statistics. */
|
|
676
|
+
geocodingStatus: GeocodingStatus;
|
|
387
677
|
/** Get service health status. */
|
|
388
678
|
health: HealthStatus;
|
|
389
679
|
/** Retrieve a single location by its ID, including raw payload. */
|
|
390
680
|
location?: Maybe<LocationDetail>;
|
|
391
681
|
/** Get aggregate count of location records with optional filters. */
|
|
392
682
|
locationCount: LocationCount;
|
|
683
|
+
/** Get the earliest and latest location timestamps. */
|
|
684
|
+
locationDateRange: LocationDateRange;
|
|
393
685
|
/** Retrieve a paginated list of OwnTracks location records. */
|
|
394
686
|
locations: LocationConnection;
|
|
395
687
|
/** Find GPS points within a radius of a geographic coordinate. */
|
|
@@ -406,7 +698,6 @@ export interface Query {
|
|
|
406
698
|
withinReference: WithinReferenceResult;
|
|
407
699
|
}
|
|
408
700
|
|
|
409
|
-
|
|
410
701
|
export interface QueryCalculateDistanceArgs {
|
|
411
702
|
from_lat: Scalars['Float']['input'];
|
|
412
703
|
from_lon: Scalars['Float']['input'];
|
|
@@ -414,14 +705,13 @@ export interface QueryCalculateDistanceArgs {
|
|
|
414
705
|
to_lon: Scalars['Float']['input'];
|
|
415
706
|
}
|
|
416
707
|
|
|
417
|
-
|
|
418
708
|
export interface QueryDailySummaryArgs {
|
|
419
709
|
date_from?: InputMaybe<Scalars['String']['input']>;
|
|
420
710
|
date_to?: InputMaybe<Scalars['String']['input']>;
|
|
421
711
|
limit?: InputMaybe<Scalars['Int']['input']>;
|
|
712
|
+
offset?: InputMaybe<Scalars['Int']['input']>;
|
|
422
713
|
}
|
|
423
714
|
|
|
424
|
-
|
|
425
715
|
export interface QueryGarminActivitiesArgs {
|
|
426
716
|
date_from?: InputMaybe<Scalars['String']['input']>;
|
|
427
717
|
date_to?: InputMaybe<Scalars['String']['input']>;
|
|
@@ -432,17 +722,25 @@ export interface QueryGarminActivitiesArgs {
|
|
|
432
722
|
sport?: InputMaybe<Scalars['String']['input']>;
|
|
433
723
|
}
|
|
434
724
|
|
|
435
|
-
|
|
436
725
|
export interface QueryGarminActivityArgs {
|
|
437
726
|
activity_id: Scalars['String']['input'];
|
|
438
727
|
}
|
|
439
728
|
|
|
729
|
+
export interface QueryGarminActivityAddressesArgs {
|
|
730
|
+
activity_id: Scalars['String']['input'];
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
export interface QueryGarminActivityTotalsArgs {
|
|
734
|
+
date_from?: InputMaybe<Scalars['String']['input']>;
|
|
735
|
+
date_to?: InputMaybe<Scalars['String']['input']>;
|
|
736
|
+
period: Scalars['String']['input'];
|
|
737
|
+
sport?: InputMaybe<Scalars['String']['input']>;
|
|
738
|
+
}
|
|
440
739
|
|
|
441
740
|
export interface QueryGarminChartDataArgs {
|
|
442
741
|
activity_id: Scalars['String']['input'];
|
|
443
742
|
}
|
|
444
743
|
|
|
445
|
-
|
|
446
744
|
export interface QueryGarminTrackPointsArgs {
|
|
447
745
|
activity_id: Scalars['String']['input'];
|
|
448
746
|
limit?: InputMaybe<Scalars['Int']['input']>;
|
|
@@ -452,18 +750,15 @@ export interface QueryGarminTrackPointsArgs {
|
|
|
452
750
|
sort?: InputMaybe<Scalars['String']['input']>;
|
|
453
751
|
}
|
|
454
752
|
|
|
455
|
-
|
|
456
753
|
export interface QueryLocationArgs {
|
|
457
754
|
id: Scalars['Int']['input'];
|
|
458
755
|
}
|
|
459
756
|
|
|
460
|
-
|
|
461
757
|
export interface QueryLocationCountArgs {
|
|
462
758
|
date?: InputMaybe<Scalars['String']['input']>;
|
|
463
759
|
device_id?: InputMaybe<Scalars['String']['input']>;
|
|
464
760
|
}
|
|
465
761
|
|
|
466
|
-
|
|
467
762
|
export interface QueryLocationsArgs {
|
|
468
763
|
date_from?: InputMaybe<Scalars['String']['input']>;
|
|
469
764
|
date_to?: InputMaybe<Scalars['String']['input']>;
|
|
@@ -474,7 +769,6 @@ export interface QueryLocationsArgs {
|
|
|
474
769
|
sort?: InputMaybe<Scalars['String']['input']>;
|
|
475
770
|
}
|
|
476
771
|
|
|
477
|
-
|
|
478
772
|
export interface QueryNearbyPointsArgs {
|
|
479
773
|
lat: Scalars['Float']['input'];
|
|
480
774
|
limit?: InputMaybe<Scalars['Int']['input']>;
|
|
@@ -483,22 +777,21 @@ export interface QueryNearbyPointsArgs {
|
|
|
483
777
|
source?: InputMaybe<Scalars['String']['input']>;
|
|
484
778
|
}
|
|
485
779
|
|
|
486
|
-
|
|
487
780
|
export interface QueryReferenceLocationArgs {
|
|
488
781
|
id: Scalars['Int']['input'];
|
|
489
782
|
}
|
|
490
783
|
|
|
491
|
-
|
|
492
784
|
export interface QueryUnifiedGpsArgs {
|
|
493
785
|
date_from?: InputMaybe<Scalars['String']['input']>;
|
|
494
786
|
date_to?: InputMaybe<Scalars['String']['input']>;
|
|
787
|
+
deduplicate?: InputMaybe<Scalars['Boolean']['input']>;
|
|
788
|
+
exclude_stationary?: InputMaybe<Scalars['Boolean']['input']>;
|
|
495
789
|
limit?: InputMaybe<Scalars['Int']['input']>;
|
|
496
790
|
offset?: InputMaybe<Scalars['Int']['input']>;
|
|
497
791
|
order?: InputMaybe<SortOrder>;
|
|
498
792
|
source?: InputMaybe<Scalars['String']['input']>;
|
|
499
793
|
}
|
|
500
794
|
|
|
501
|
-
|
|
502
795
|
export interface QueryWithinReferenceArgs {
|
|
503
796
|
limit?: InputMaybe<Scalars['Int']['input']>;
|
|
504
797
|
name: Scalars['String']['input'];
|
package/package.json
CHANGED
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,20 @@ 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
|
+
|
|
384
671
|
"""
|
|
385
672
|
Individual GPS track point within a Garmin activity.
|
|
386
673
|
"""
|
|
@@ -422,6 +709,14 @@ type GarminTrackPoint {
|
|
|
422
709
|
"""
|
|
423
710
|
heart_rate: Int
|
|
424
711
|
"""
|
|
712
|
+
Heart-rate zone index (1-5)
|
|
713
|
+
"""
|
|
714
|
+
hr_zone: Int
|
|
715
|
+
"""
|
|
716
|
+
Respiration rate in breaths per minute
|
|
717
|
+
"""
|
|
718
|
+
respiration_rate: Int
|
|
719
|
+
"""
|
|
425
720
|
Pedal/step cadence in RPM
|
|
426
721
|
"""
|
|
427
722
|
cadence: Int
|
|
@@ -430,9 +725,149 @@ type GarminTrackPoint {
|
|
|
430
725
|
"""
|
|
431
726
|
temperature_c: Float
|
|
432
727
|
"""
|
|
728
|
+
Road or terrain type
|
|
729
|
+
"""
|
|
730
|
+
surface_type: String
|
|
731
|
+
"""
|
|
732
|
+
Effort classification label
|
|
733
|
+
"""
|
|
734
|
+
effort_level: String
|
|
735
|
+
"""
|
|
433
736
|
UTC timestamp when the record was inserted
|
|
434
737
|
"""
|
|
435
738
|
created_at: String
|
|
739
|
+
"""
|
|
740
|
+
Compact reverse-geocoded address summary, when geocoded
|
|
741
|
+
"""
|
|
742
|
+
address: GeocodedAddressSummary
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
"""
|
|
746
|
+
Compact reverse-geocoded address summary embedded in track-point payloads.
|
|
747
|
+
"""
|
|
748
|
+
type GeocodedAddressSummary {
|
|
749
|
+
"""
|
|
750
|
+
Full formatted address label from Pelias
|
|
751
|
+
"""
|
|
752
|
+
display_address: String
|
|
753
|
+
"""
|
|
754
|
+
Street name
|
|
755
|
+
"""
|
|
756
|
+
street: String
|
|
757
|
+
"""
|
|
758
|
+
House or building number
|
|
759
|
+
"""
|
|
760
|
+
housenumber: String
|
|
761
|
+
"""
|
|
762
|
+
Neighbourhood name
|
|
763
|
+
"""
|
|
764
|
+
neighbourhood: String
|
|
765
|
+
"""
|
|
766
|
+
City or town
|
|
767
|
+
"""
|
|
768
|
+
locality: String
|
|
769
|
+
"""
|
|
770
|
+
State or province
|
|
771
|
+
"""
|
|
772
|
+
region: String
|
|
773
|
+
"""
|
|
774
|
+
Country name
|
|
775
|
+
"""
|
|
776
|
+
country: String
|
|
777
|
+
"""
|
|
778
|
+
Postal or ZIP code
|
|
779
|
+
"""
|
|
780
|
+
postalcode: String
|
|
781
|
+
"""
|
|
782
|
+
Pelias confidence score (0-1)
|
|
783
|
+
"""
|
|
784
|
+
confidence: Float
|
|
785
|
+
"""
|
|
786
|
+
Role of this waypoint within a Garmin activity (start, end, waypoint). Null for OwnTracks records.
|
|
787
|
+
"""
|
|
788
|
+
waypoint_kind: String
|
|
789
|
+
"""
|
|
790
|
+
Geocoding status: success, no_coverage, error, pending
|
|
791
|
+
"""
|
|
792
|
+
status: String!
|
|
793
|
+
"""
|
|
794
|
+
UTC timestamp when geocoding was performed
|
|
795
|
+
"""
|
|
796
|
+
geocoded_at: String
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
"""
|
|
800
|
+
Full reverse-geocoded address attached to a Garmin activity waypoint.
|
|
801
|
+
"""
|
|
802
|
+
type GarminActivityAddress {
|
|
803
|
+
"""
|
|
804
|
+
garmin_track_points.id this address was geocoded from
|
|
805
|
+
"""
|
|
806
|
+
track_point_id: Int!
|
|
807
|
+
"""
|
|
808
|
+
Parent Garmin activity identifier
|
|
809
|
+
"""
|
|
810
|
+
activity_id: String!
|
|
811
|
+
"""
|
|
812
|
+
Role of this waypoint within the activity: start, end, or waypoint
|
|
813
|
+
"""
|
|
814
|
+
waypoint_kind: String!
|
|
815
|
+
"""
|
|
816
|
+
UTC timestamp of the track point this address was derived from
|
|
817
|
+
"""
|
|
818
|
+
timestamp: DateTime!
|
|
819
|
+
"""
|
|
820
|
+
GPS latitude in decimal degrees (WGS 84)
|
|
821
|
+
"""
|
|
822
|
+
latitude: Float!
|
|
823
|
+
"""
|
|
824
|
+
GPS longitude in decimal degrees (WGS 84)
|
|
825
|
+
"""
|
|
826
|
+
longitude: Float!
|
|
827
|
+
"""
|
|
828
|
+
Full formatted address label from Pelias
|
|
829
|
+
"""
|
|
830
|
+
display_address: String
|
|
831
|
+
"""
|
|
832
|
+
Street name
|
|
833
|
+
"""
|
|
834
|
+
street: String
|
|
835
|
+
"""
|
|
836
|
+
House or building number
|
|
837
|
+
"""
|
|
838
|
+
housenumber: String
|
|
839
|
+
"""
|
|
840
|
+
Neighbourhood name
|
|
841
|
+
"""
|
|
842
|
+
neighbourhood: String
|
|
843
|
+
"""
|
|
844
|
+
City or town
|
|
845
|
+
"""
|
|
846
|
+
locality: String
|
|
847
|
+
"""
|
|
848
|
+
State or province
|
|
849
|
+
"""
|
|
850
|
+
region: String
|
|
851
|
+
"""
|
|
852
|
+
Country name
|
|
853
|
+
"""
|
|
854
|
+
country: String
|
|
855
|
+
"""
|
|
856
|
+
Postal or ZIP code
|
|
857
|
+
"""
|
|
858
|
+
postalcode: String
|
|
859
|
+
"""
|
|
860
|
+
Pelias confidence score (0-1)
|
|
861
|
+
"""
|
|
862
|
+
confidence: Float
|
|
863
|
+
"""
|
|
864
|
+
Geocoding status: success, no_coverage, error, pending
|
|
865
|
+
"""
|
|
866
|
+
status: String!
|
|
867
|
+
"""
|
|
868
|
+
UTC timestamp when geocoding was performed
|
|
869
|
+
"""
|
|
870
|
+
geocoded_at: String
|
|
436
871
|
}
|
|
437
872
|
|
|
438
873
|
"""
|
|
@@ -496,6 +931,14 @@ type GarminChartPoint {
|
|
|
496
931
|
"""
|
|
497
932
|
heart_rate: Int
|
|
498
933
|
"""
|
|
934
|
+
Heart-rate zone index (1-5)
|
|
935
|
+
"""
|
|
936
|
+
hr_zone: Int
|
|
937
|
+
"""
|
|
938
|
+
Respiration rate in breaths per minute
|
|
939
|
+
"""
|
|
940
|
+
respiration_rate: Int
|
|
941
|
+
"""
|
|
499
942
|
Pedal/step cadence in RPM
|
|
500
943
|
"""
|
|
501
944
|
cadence: Int
|
|
@@ -513,6 +956,36 @@ type GarminChartPoint {
|
|
|
513
956
|
longitude: Float!
|
|
514
957
|
}
|
|
515
958
|
|
|
959
|
+
"""
|
|
960
|
+
Aggregated Garmin activity totals for a single time bucket (week, month, or year).
|
|
961
|
+
"""
|
|
962
|
+
type GarminActivityTotal {
|
|
963
|
+
"""
|
|
964
|
+
Start date of the period bucket (DATE_TRUNC of week/month/year)
|
|
965
|
+
"""
|
|
966
|
+
period_start: String!
|
|
967
|
+
"""
|
|
968
|
+
Number of activities in the period
|
|
969
|
+
"""
|
|
970
|
+
activity_count: Int!
|
|
971
|
+
"""
|
|
972
|
+
Sum of distance in kilometres
|
|
973
|
+
"""
|
|
974
|
+
total_distance_km: Float
|
|
975
|
+
"""
|
|
976
|
+
Sum of active duration in seconds (excludes pauses)
|
|
977
|
+
"""
|
|
978
|
+
total_duration_seconds: Int
|
|
979
|
+
"""
|
|
980
|
+
Sum of elevation gain in meters
|
|
981
|
+
"""
|
|
982
|
+
total_ascent_m: Int
|
|
983
|
+
"""
|
|
984
|
+
Sum of calories burned
|
|
985
|
+
"""
|
|
986
|
+
total_calories: Int
|
|
987
|
+
}
|
|
988
|
+
|
|
516
989
|
# -------------------------------------------------------
|
|
517
990
|
# Unified GPS
|
|
518
991
|
# -------------------------------------------------------
|
|
@@ -638,6 +1111,42 @@ type DailyActivitySummary {
|
|
|
638
1111
|
total_calories: Int
|
|
639
1112
|
}
|
|
640
1113
|
|
|
1114
|
+
"""
|
|
1115
|
+
Paginated list of daily activity summaries.
|
|
1116
|
+
"""
|
|
1117
|
+
type DailySummaryConnection {
|
|
1118
|
+
"""
|
|
1119
|
+
List of daily activity summary items in the current page
|
|
1120
|
+
"""
|
|
1121
|
+
items: [DailyActivitySummary!]!
|
|
1122
|
+
"""
|
|
1123
|
+
Total number of items matching the query
|
|
1124
|
+
"""
|
|
1125
|
+
total: Int!
|
|
1126
|
+
"""
|
|
1127
|
+
Maximum number of items per page
|
|
1128
|
+
"""
|
|
1129
|
+
limit: Int!
|
|
1130
|
+
"""
|
|
1131
|
+
Number of items skipped from the start
|
|
1132
|
+
"""
|
|
1133
|
+
offset: Int!
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1136
|
+
"""
|
|
1137
|
+
Earliest and latest activity dates available in the daily activity summary view.
|
|
1138
|
+
"""
|
|
1139
|
+
type DailySummaryDateRange {
|
|
1140
|
+
"""
|
|
1141
|
+
Earliest activity date with daily summary data (YYYY-MM-DD)
|
|
1142
|
+
"""
|
|
1143
|
+
min_date: String!
|
|
1144
|
+
"""
|
|
1145
|
+
Latest activity date with daily summary data (YYYY-MM-DD)
|
|
1146
|
+
"""
|
|
1147
|
+
max_date: String!
|
|
1148
|
+
}
|
|
1149
|
+
|
|
641
1150
|
# -------------------------------------------------------
|
|
642
1151
|
# Reference Locations
|
|
643
1152
|
# -------------------------------------------------------
|
|
@@ -893,7 +1402,17 @@ type Query {
|
|
|
893
1402
|
device_id: String
|
|
894
1403
|
): LocationCount!
|
|
895
1404
|
|
|
1405
|
+
"""
|
|
1406
|
+
Get the earliest and latest location timestamps.
|
|
1407
|
+
"""
|
|
1408
|
+
locationDateRange: LocationDateRange!
|
|
1409
|
+
|
|
896
1410
|
# Garmin
|
|
1411
|
+
"""
|
|
1412
|
+
Get the earliest and latest Garmin activity timestamps.
|
|
1413
|
+
"""
|
|
1414
|
+
garminDateRange: GarminDateRange!
|
|
1415
|
+
|
|
897
1416
|
"""
|
|
898
1417
|
Retrieve a paginated list of Garmin activities.
|
|
899
1418
|
"""
|
|
@@ -983,6 +1502,38 @@ type Query {
|
|
|
983
1502
|
activity_id: String!
|
|
984
1503
|
): [GarminChartPoint!]!
|
|
985
1504
|
|
|
1505
|
+
"""
|
|
1506
|
+
Retrieve all reverse-geocoded addresses for a Garmin activity (start, mid-route waypoints, and end).
|
|
1507
|
+
"""
|
|
1508
|
+
garminActivityAddresses(
|
|
1509
|
+
"""
|
|
1510
|
+
Garmin Connect activity identifier
|
|
1511
|
+
"""
|
|
1512
|
+
activity_id: String!
|
|
1513
|
+
): [GarminActivityAddress!]!
|
|
1514
|
+
|
|
1515
|
+
"""
|
|
1516
|
+
Aggregate Garmin activity totals grouped by week, month, or year.
|
|
1517
|
+
"""
|
|
1518
|
+
garminActivityTotals(
|
|
1519
|
+
"""
|
|
1520
|
+
Aggregation period: 'week', 'month', or 'year'
|
|
1521
|
+
"""
|
|
1522
|
+
period: String!
|
|
1523
|
+
"""
|
|
1524
|
+
Filter by sport (e.g. cycling, running)
|
|
1525
|
+
"""
|
|
1526
|
+
sport: String
|
|
1527
|
+
"""
|
|
1528
|
+
Inclusive lower bound on activity start time (YYYY-MM-DD)
|
|
1529
|
+
"""
|
|
1530
|
+
date_from: String
|
|
1531
|
+
"""
|
|
1532
|
+
Inclusive upper bound on activity start time (YYYY-MM-DD)
|
|
1533
|
+
"""
|
|
1534
|
+
date_to: String
|
|
1535
|
+
): [GarminActivityTotal!]!
|
|
1536
|
+
|
|
986
1537
|
# Unified GPS
|
|
987
1538
|
"""
|
|
988
1539
|
Retrieve a paginated list of unified GPS points from all sources.
|
|
@@ -1012,6 +1563,14 @@ type Query {
|
|
|
1012
1563
|
Sort direction
|
|
1013
1564
|
"""
|
|
1014
1565
|
order: SortOrder
|
|
1566
|
+
"""
|
|
1567
|
+
Exclude stationary points where speed is zero
|
|
1568
|
+
"""
|
|
1569
|
+
exclude_stationary: Boolean
|
|
1570
|
+
"""
|
|
1571
|
+
Remove points with duplicate coordinates (rounded to ~11m precision)
|
|
1572
|
+
"""
|
|
1573
|
+
deduplicate: Boolean
|
|
1015
1574
|
): UnifiedGpsConnection!
|
|
1016
1575
|
|
|
1017
1576
|
"""
|
|
@@ -1027,10 +1586,19 @@ type Query {
|
|
|
1027
1586
|
"""
|
|
1028
1587
|
date_to: String
|
|
1029
1588
|
"""
|
|
1030
|
-
Maximum number of days to return
|
|
1589
|
+
Maximum number of days to return per page
|
|
1031
1590
|
"""
|
|
1032
1591
|
limit: Int
|
|
1033
|
-
|
|
1592
|
+
"""
|
|
1593
|
+
Number of items to skip for pagination
|
|
1594
|
+
"""
|
|
1595
|
+
offset: Int
|
|
1596
|
+
): DailySummaryConnection!
|
|
1597
|
+
|
|
1598
|
+
"""
|
|
1599
|
+
Get the earliest and latest activity dates available in the daily activity summary view.
|
|
1600
|
+
"""
|
|
1601
|
+
dailySummaryDateRange: DailySummaryDateRange!
|
|
1034
1602
|
|
|
1035
1603
|
# Reference Locations
|
|
1036
1604
|
"""
|
|
@@ -1113,6 +1681,12 @@ type Query {
|
|
|
1113
1681
|
"""
|
|
1114
1682
|
limit: Int
|
|
1115
1683
|
): WithinReferenceResult!
|
|
1684
|
+
|
|
1685
|
+
# Geocoding
|
|
1686
|
+
"""
|
|
1687
|
+
Get geocoding coverage statistics.
|
|
1688
|
+
"""
|
|
1689
|
+
geocodingStatus: GeocodingStatus!
|
|
1116
1690
|
}
|
|
1117
1691
|
|
|
1118
1692
|
# -------------------------------------------------------
|
|
@@ -1132,4 +1706,18 @@ type Mutation {
|
|
|
1132
1706
|
"""
|
|
1133
1707
|
lookback: Int
|
|
1134
1708
|
): GarminSyncTriggerResult!
|
|
1709
|
+
|
|
1710
|
+
"""
|
|
1711
|
+
Trigger batch reverse-geocoding of un-geocoded location records.
|
|
1712
|
+
"""
|
|
1713
|
+
triggerGeocoding(
|
|
1714
|
+
"""
|
|
1715
|
+
Number of locations to geocode in this batch (default 100)
|
|
1716
|
+
"""
|
|
1717
|
+
batch_size: Int
|
|
1718
|
+
"""
|
|
1719
|
+
Re-process previously failed location records (for example, those with status `no_coverage`)
|
|
1720
|
+
"""
|
|
1721
|
+
retry_failed: Boolean
|
|
1722
|
+
): GeocodingTriggerResult!
|
|
1135
1723
|
}
|