@stuartshay/otel-graphql-types 1.0.0 → 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 +563 -24
- package/package.json +1 -1
- package/schema.graphql +1398 -5
package/schema.graphql
CHANGED
|
@@ -6,234 +6,1321 @@ scalar DateTime
|
|
|
6
6
|
# -------------------------------------------------------
|
|
7
7
|
# Common Types
|
|
8
8
|
# -------------------------------------------------------
|
|
9
|
+
"""
|
|
10
|
+
Pagination metadata for paginated list responses.
|
|
11
|
+
"""
|
|
9
12
|
type PaginationInfo {
|
|
13
|
+
"""
|
|
14
|
+
Total number of items matching the query
|
|
15
|
+
"""
|
|
10
16
|
total: Int!
|
|
17
|
+
"""
|
|
18
|
+
Maximum number of items per page
|
|
19
|
+
"""
|
|
11
20
|
limit: Int!
|
|
21
|
+
"""
|
|
22
|
+
Number of items skipped from the start
|
|
23
|
+
"""
|
|
12
24
|
offset: Int!
|
|
13
25
|
}
|
|
14
26
|
|
|
15
27
|
# -------------------------------------------------------
|
|
16
28
|
# Health
|
|
17
29
|
# -------------------------------------------------------
|
|
30
|
+
"""
|
|
31
|
+
Service health status.
|
|
32
|
+
"""
|
|
18
33
|
type HealthStatus {
|
|
34
|
+
"""
|
|
35
|
+
Service health status (healthy or unhealthy)
|
|
36
|
+
"""
|
|
19
37
|
status: String!
|
|
38
|
+
"""
|
|
39
|
+
Application version from VERSION file
|
|
40
|
+
"""
|
|
20
41
|
version: String!
|
|
21
42
|
}
|
|
22
43
|
|
|
44
|
+
"""
|
|
45
|
+
Service readiness status including database connectivity.
|
|
46
|
+
"""
|
|
23
47
|
type ReadyStatus {
|
|
48
|
+
"""
|
|
49
|
+
Service readiness status
|
|
50
|
+
"""
|
|
24
51
|
status: String!
|
|
52
|
+
"""
|
|
53
|
+
Database connection status
|
|
54
|
+
"""
|
|
25
55
|
database: String
|
|
56
|
+
"""
|
|
57
|
+
Application version from VERSION file
|
|
58
|
+
"""
|
|
26
59
|
version: String
|
|
27
60
|
}
|
|
28
61
|
|
|
29
62
|
# -------------------------------------------------------
|
|
30
63
|
# Locations (OwnTracks)
|
|
31
64
|
# -------------------------------------------------------
|
|
65
|
+
"""
|
|
66
|
+
GPS location recorded by the OwnTracks mobile app.
|
|
67
|
+
"""
|
|
32
68
|
type Location {
|
|
69
|
+
"""
|
|
70
|
+
Unique location record identifier
|
|
71
|
+
"""
|
|
33
72
|
id: Int!
|
|
73
|
+
"""
|
|
74
|
+
OwnTracks device identifier (e.g. iphone_stuart)
|
|
75
|
+
"""
|
|
34
76
|
device_id: String!
|
|
77
|
+
"""
|
|
78
|
+
Two-character tracker ID set in the OwnTracks app
|
|
79
|
+
"""
|
|
35
80
|
tid: String
|
|
81
|
+
"""
|
|
82
|
+
GPS latitude in decimal degrees (WGS 84)
|
|
83
|
+
"""
|
|
36
84
|
latitude: Float!
|
|
85
|
+
"""
|
|
86
|
+
GPS longitude in decimal degrees (WGS 84)
|
|
87
|
+
"""
|
|
37
88
|
longitude: Float!
|
|
89
|
+
"""
|
|
90
|
+
Horizontal accuracy of the GPS fix in meters
|
|
91
|
+
"""
|
|
38
92
|
accuracy: Float
|
|
93
|
+
"""
|
|
94
|
+
Altitude above sea level in meters
|
|
95
|
+
"""
|
|
39
96
|
altitude: Float
|
|
97
|
+
"""
|
|
98
|
+
Device velocity in km/h at time of report
|
|
99
|
+
"""
|
|
40
100
|
velocity: Float
|
|
101
|
+
"""
|
|
102
|
+
Device battery level as a percentage (0-100)
|
|
103
|
+
"""
|
|
41
104
|
battery: Int
|
|
105
|
+
"""
|
|
106
|
+
Battery charging state (0=unknown, 1=unplugged, 2=charging, 3=full)
|
|
107
|
+
"""
|
|
42
108
|
battery_status: Int
|
|
109
|
+
"""
|
|
110
|
+
Network connection type (w=WiFi, m=mobile)
|
|
111
|
+
"""
|
|
43
112
|
connection_type: String
|
|
113
|
+
"""
|
|
114
|
+
What triggered this location report (p=ping, c=circular, t=timer)
|
|
115
|
+
"""
|
|
44
116
|
trigger: String
|
|
117
|
+
"""
|
|
118
|
+
UTC timestamp when the device recorded the location
|
|
119
|
+
"""
|
|
45
120
|
timestamp: DateTime!
|
|
121
|
+
"""
|
|
122
|
+
UTC timestamp when the record was inserted into the database
|
|
123
|
+
"""
|
|
46
124
|
created_at: String
|
|
125
|
+
"""
|
|
126
|
+
Short formatted address from reverse geocoding
|
|
127
|
+
"""
|
|
128
|
+
display_address: String
|
|
47
129
|
}
|
|
48
130
|
|
|
131
|
+
"""
|
|
132
|
+
Full location detail including the original OwnTracks JSON payload.
|
|
133
|
+
"""
|
|
49
134
|
type LocationDetail {
|
|
135
|
+
"""
|
|
136
|
+
Unique location record identifier
|
|
137
|
+
"""
|
|
50
138
|
id: Int!
|
|
139
|
+
"""
|
|
140
|
+
OwnTracks device identifier (e.g. iphone_stuart)
|
|
141
|
+
"""
|
|
51
142
|
device_id: String!
|
|
143
|
+
"""
|
|
144
|
+
Two-character tracker ID set in the OwnTracks app
|
|
145
|
+
"""
|
|
52
146
|
tid: String
|
|
147
|
+
"""
|
|
148
|
+
GPS latitude in decimal degrees (WGS 84)
|
|
149
|
+
"""
|
|
53
150
|
latitude: Float!
|
|
151
|
+
"""
|
|
152
|
+
GPS longitude in decimal degrees (WGS 84)
|
|
153
|
+
"""
|
|
54
154
|
longitude: Float!
|
|
155
|
+
"""
|
|
156
|
+
Horizontal accuracy of the GPS fix in meters
|
|
157
|
+
"""
|
|
55
158
|
accuracy: Float
|
|
159
|
+
"""
|
|
160
|
+
Altitude above sea level in meters
|
|
161
|
+
"""
|
|
56
162
|
altitude: Float
|
|
163
|
+
"""
|
|
164
|
+
Device velocity in km/h at time of report
|
|
165
|
+
"""
|
|
57
166
|
velocity: Float
|
|
167
|
+
"""
|
|
168
|
+
Device battery level as a percentage (0-100)
|
|
169
|
+
"""
|
|
58
170
|
battery: Int
|
|
171
|
+
"""
|
|
172
|
+
Battery charging state (0=unknown, 1=unplugged, 2=charging, 3=full)
|
|
173
|
+
"""
|
|
59
174
|
battery_status: Int
|
|
175
|
+
"""
|
|
176
|
+
Network connection type (w=WiFi, m=mobile)
|
|
177
|
+
"""
|
|
60
178
|
connection_type: String
|
|
179
|
+
"""
|
|
180
|
+
What triggered this location report (p=ping, c=circular, t=timer)
|
|
181
|
+
"""
|
|
61
182
|
trigger: String
|
|
183
|
+
"""
|
|
184
|
+
UTC timestamp when the device recorded the location
|
|
185
|
+
"""
|
|
62
186
|
timestamp: DateTime!
|
|
187
|
+
"""
|
|
188
|
+
UTC timestamp when the record was inserted into the database
|
|
189
|
+
"""
|
|
63
190
|
created_at: String
|
|
191
|
+
"""
|
|
192
|
+
Original OwnTracks JSON payload as received from the MQTT broker
|
|
193
|
+
"""
|
|
64
194
|
raw_payload: JSON
|
|
195
|
+
"""
|
|
196
|
+
Full reverse-geocoded address components from Pelias
|
|
197
|
+
"""
|
|
198
|
+
address: GeocodedAddress
|
|
65
199
|
}
|
|
66
200
|
|
|
67
201
|
scalar JSON
|
|
68
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
|
+
|
|
364
|
+
"""
|
|
365
|
+
Paginated list of OwnTracks location records.
|
|
366
|
+
"""
|
|
69
367
|
type LocationConnection {
|
|
368
|
+
"""
|
|
369
|
+
List of location items in the current page
|
|
370
|
+
"""
|
|
70
371
|
items: [Location!]!
|
|
372
|
+
"""
|
|
373
|
+
Total number of items matching the query
|
|
374
|
+
"""
|
|
71
375
|
total: Int!
|
|
376
|
+
"""
|
|
377
|
+
Maximum number of items per page
|
|
378
|
+
"""
|
|
72
379
|
limit: Int!
|
|
380
|
+
"""
|
|
381
|
+
Number of items skipped from the start
|
|
382
|
+
"""
|
|
73
383
|
offset: Int!
|
|
74
384
|
}
|
|
75
385
|
|
|
386
|
+
"""
|
|
387
|
+
Distinct OwnTracks device identifier.
|
|
388
|
+
"""
|
|
76
389
|
type DeviceInfo {
|
|
390
|
+
"""
|
|
391
|
+
OwnTracks device identifier
|
|
392
|
+
"""
|
|
77
393
|
device_id: String!
|
|
78
394
|
}
|
|
79
395
|
|
|
396
|
+
"""
|
|
397
|
+
Aggregate location count with optional filter context.
|
|
398
|
+
"""
|
|
80
399
|
type LocationCount {
|
|
400
|
+
"""
|
|
401
|
+
Total number of location records matching the filter
|
|
402
|
+
"""
|
|
81
403
|
count: Int!
|
|
404
|
+
"""
|
|
405
|
+
Date filter applied (YYYY-MM-DD), if any
|
|
406
|
+
"""
|
|
82
407
|
date: String
|
|
408
|
+
"""
|
|
409
|
+
Device ID filter applied, if any
|
|
410
|
+
"""
|
|
83
411
|
device_id: String
|
|
84
412
|
}
|
|
85
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
|
+
|
|
86
428
|
# -------------------------------------------------------
|
|
87
429
|
# Garmin
|
|
88
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
|
+
|
|
457
|
+
"""
|
|
458
|
+
Summary of a Garmin Connect activity parsed from a FIT file.
|
|
459
|
+
"""
|
|
89
460
|
type GarminActivity {
|
|
461
|
+
"""
|
|
462
|
+
Garmin Connect activity identifier
|
|
463
|
+
"""
|
|
90
464
|
activity_id: String!
|
|
465
|
+
"""
|
|
466
|
+
Primary sport type (e.g. cycling, running)
|
|
467
|
+
"""
|
|
91
468
|
sport: String!
|
|
469
|
+
"""
|
|
470
|
+
Sub-sport classification (e.g. road, trail)
|
|
471
|
+
"""
|
|
92
472
|
sub_sport: String
|
|
473
|
+
"""
|
|
474
|
+
Activity start time in UTC
|
|
475
|
+
"""
|
|
93
476
|
start_time: String
|
|
477
|
+
"""
|
|
478
|
+
Activity end time in UTC
|
|
479
|
+
"""
|
|
94
480
|
end_time: String
|
|
481
|
+
"""
|
|
482
|
+
Total distance in kilometres
|
|
483
|
+
"""
|
|
95
484
|
distance_km: Float
|
|
485
|
+
"""
|
|
486
|
+
Active duration in seconds (excludes pauses)
|
|
487
|
+
"""
|
|
96
488
|
duration_seconds: Float
|
|
489
|
+
"""
|
|
490
|
+
Average heart rate in beats per minute
|
|
491
|
+
"""
|
|
97
492
|
avg_heart_rate: Int
|
|
493
|
+
"""
|
|
494
|
+
Maximum heart rate in beats per minute
|
|
495
|
+
"""
|
|
98
496
|
max_heart_rate: Int
|
|
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
|
+
"""
|
|
554
|
+
Average cadence in RPM
|
|
555
|
+
"""
|
|
99
556
|
avg_cadence: Int
|
|
557
|
+
"""
|
|
558
|
+
Maximum cadence in RPM
|
|
559
|
+
"""
|
|
100
560
|
max_cadence: Int
|
|
561
|
+
"""
|
|
562
|
+
Total activity strokes
|
|
563
|
+
"""
|
|
564
|
+
total_strokes: Int
|
|
565
|
+
"""
|
|
566
|
+
Total calories burned
|
|
567
|
+
"""
|
|
101
568
|
calories: Int
|
|
569
|
+
"""
|
|
570
|
+
Average speed in km/h
|
|
571
|
+
"""
|
|
102
572
|
avg_speed_kmh: Float
|
|
573
|
+
"""
|
|
574
|
+
Maximum speed in km/h
|
|
575
|
+
"""
|
|
103
576
|
max_speed_kmh: Float
|
|
577
|
+
"""
|
|
578
|
+
Total elevation gain in meters
|
|
579
|
+
"""
|
|
104
580
|
total_ascent_m: Float
|
|
581
|
+
"""
|
|
582
|
+
Total elevation loss in meters
|
|
583
|
+
"""
|
|
105
584
|
total_descent_m: Float
|
|
585
|
+
"""
|
|
586
|
+
Raw total distance in meters from FIT file
|
|
587
|
+
"""
|
|
106
588
|
total_distance: Float
|
|
589
|
+
"""
|
|
590
|
+
Average pace in minutes per kilometre
|
|
591
|
+
"""
|
|
107
592
|
avg_pace: Float
|
|
593
|
+
"""
|
|
594
|
+
Device manufacturer (e.g. garmin)
|
|
595
|
+
"""
|
|
108
596
|
device_manufacturer: String
|
|
597
|
+
"""
|
|
598
|
+
Recording device metadata (manufacturer, model, firmware)
|
|
599
|
+
"""
|
|
600
|
+
device: GarminDevice
|
|
601
|
+
"""
|
|
602
|
+
Average ambient temperature in degrees C
|
|
603
|
+
"""
|
|
109
604
|
avg_temperature_c: Int
|
|
605
|
+
"""
|
|
606
|
+
Minimum ambient temperature in degrees C
|
|
607
|
+
"""
|
|
110
608
|
min_temperature_c: Int
|
|
609
|
+
"""
|
|
610
|
+
Maximum ambient temperature in degrees C
|
|
611
|
+
"""
|
|
111
612
|
max_temperature_c: Int
|
|
613
|
+
"""
|
|
614
|
+
Total elapsed time in seconds (includes pauses)
|
|
615
|
+
"""
|
|
112
616
|
total_elapsed_time: Float
|
|
617
|
+
"""
|
|
618
|
+
Total timer time in seconds (active recording)
|
|
619
|
+
"""
|
|
113
620
|
total_timer_time: Float
|
|
621
|
+
"""
|
|
622
|
+
UTC timestamp when the record was inserted
|
|
623
|
+
"""
|
|
114
624
|
created_at: String
|
|
625
|
+
"""
|
|
626
|
+
UTC timestamp when the FIT file was uploaded
|
|
627
|
+
"""
|
|
115
628
|
uploaded_at: String
|
|
629
|
+
"""
|
|
630
|
+
Number of GPS track points in this activity
|
|
631
|
+
"""
|
|
116
632
|
track_point_count: Int
|
|
117
633
|
}
|
|
118
634
|
|
|
635
|
+
"""
|
|
636
|
+
Paginated list of Garmin activities.
|
|
637
|
+
"""
|
|
119
638
|
type GarminActivityConnection {
|
|
639
|
+
"""
|
|
640
|
+
List of Garmin activity items in the current page
|
|
641
|
+
"""
|
|
120
642
|
items: [GarminActivity!]!
|
|
643
|
+
"""
|
|
644
|
+
Total number of items matching the query
|
|
645
|
+
"""
|
|
121
646
|
total: Int!
|
|
647
|
+
"""
|
|
648
|
+
Maximum number of items per page
|
|
649
|
+
"""
|
|
122
650
|
limit: Int!
|
|
651
|
+
"""
|
|
652
|
+
Number of items skipped from the start
|
|
653
|
+
"""
|
|
123
654
|
offset: Int!
|
|
124
655
|
}
|
|
125
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
|
+
Individual GPS track point within a Garmin activity.
|
|
673
|
+
"""
|
|
126
674
|
type GarminTrackPoint {
|
|
675
|
+
"""
|
|
676
|
+
Unique track point record identifier
|
|
677
|
+
"""
|
|
127
678
|
id: Int!
|
|
679
|
+
"""
|
|
680
|
+
Parent Garmin activity identifier
|
|
681
|
+
"""
|
|
128
682
|
activity_id: String!
|
|
683
|
+
"""
|
|
684
|
+
GPS latitude in decimal degrees (WGS 84)
|
|
685
|
+
"""
|
|
129
686
|
latitude: Float!
|
|
687
|
+
"""
|
|
688
|
+
GPS longitude in decimal degrees (WGS 84)
|
|
689
|
+
"""
|
|
130
690
|
longitude: Float!
|
|
691
|
+
"""
|
|
692
|
+
UTC timestamp of the track point recording
|
|
693
|
+
"""
|
|
131
694
|
timestamp: DateTime!
|
|
695
|
+
"""
|
|
696
|
+
Elevation above sea level in meters
|
|
697
|
+
"""
|
|
132
698
|
altitude: Float
|
|
699
|
+
"""
|
|
700
|
+
Cumulative distance from activity start in km
|
|
701
|
+
"""
|
|
133
702
|
distance_from_start_km: Float
|
|
703
|
+
"""
|
|
704
|
+
Instantaneous speed in km/h
|
|
705
|
+
"""
|
|
134
706
|
speed_kmh: Float
|
|
707
|
+
"""
|
|
708
|
+
Heart rate in beats per minute
|
|
709
|
+
"""
|
|
135
710
|
heart_rate: Int
|
|
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
|
+
"""
|
|
720
|
+
Pedal/step cadence in RPM
|
|
721
|
+
"""
|
|
136
722
|
cadence: Int
|
|
723
|
+
"""
|
|
724
|
+
Ambient temperature in degrees C
|
|
725
|
+
"""
|
|
137
726
|
temperature_c: Float
|
|
727
|
+
"""
|
|
728
|
+
Road or terrain type
|
|
729
|
+
"""
|
|
730
|
+
surface_type: String
|
|
731
|
+
"""
|
|
732
|
+
Effort classification label
|
|
733
|
+
"""
|
|
734
|
+
effort_level: String
|
|
735
|
+
"""
|
|
736
|
+
UTC timestamp when the record was inserted
|
|
737
|
+
"""
|
|
138
738
|
created_at: String
|
|
739
|
+
"""
|
|
740
|
+
Compact reverse-geocoded address summary, when geocoded
|
|
741
|
+
"""
|
|
742
|
+
address: GeocodedAddressSummary
|
|
139
743
|
}
|
|
140
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
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
"""
|
|
874
|
+
Paginated list of Garmin track points.
|
|
875
|
+
"""
|
|
141
876
|
type GarminTrackPointConnection {
|
|
877
|
+
"""
|
|
878
|
+
List of track point items in the current page
|
|
879
|
+
"""
|
|
142
880
|
items: [GarminTrackPoint!]!
|
|
881
|
+
"""
|
|
882
|
+
Total number of items matching the query
|
|
883
|
+
"""
|
|
143
884
|
total: Int!
|
|
885
|
+
"""
|
|
886
|
+
Maximum number of items per page
|
|
887
|
+
"""
|
|
144
888
|
limit: Int!
|
|
889
|
+
"""
|
|
890
|
+
Number of items skipped from the start
|
|
891
|
+
"""
|
|
145
892
|
offset: Int!
|
|
146
893
|
}
|
|
147
894
|
|
|
895
|
+
"""
|
|
896
|
+
Sport type with its activity count.
|
|
897
|
+
"""
|
|
148
898
|
type SportInfo {
|
|
899
|
+
"""
|
|
900
|
+
Sport type name (e.g. cycling, running)
|
|
901
|
+
"""
|
|
149
902
|
sport: String!
|
|
903
|
+
"""
|
|
904
|
+
Number of activities for this sport
|
|
905
|
+
"""
|
|
906
|
+
activity_count: Int!
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
"""
|
|
910
|
+
Lightweight track point optimised for time-series chart rendering.
|
|
911
|
+
"""
|
|
912
|
+
type GarminChartPoint {
|
|
913
|
+
"""
|
|
914
|
+
UTC timestamp of the data point
|
|
915
|
+
"""
|
|
916
|
+
timestamp: DateTime!
|
|
917
|
+
"""
|
|
918
|
+
Elevation above sea level in meters
|
|
919
|
+
"""
|
|
920
|
+
altitude: Float
|
|
921
|
+
"""
|
|
922
|
+
Cumulative distance from activity start in km
|
|
923
|
+
"""
|
|
924
|
+
distance_from_start_km: Float
|
|
925
|
+
"""
|
|
926
|
+
Instantaneous speed in km/h
|
|
927
|
+
"""
|
|
928
|
+
speed_kmh: Float
|
|
929
|
+
"""
|
|
930
|
+
Heart rate in beats per minute
|
|
931
|
+
"""
|
|
932
|
+
heart_rate: Int
|
|
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
|
+
"""
|
|
942
|
+
Pedal/step cadence in RPM
|
|
943
|
+
"""
|
|
944
|
+
cadence: Int
|
|
945
|
+
"""
|
|
946
|
+
Ambient temperature in degrees C
|
|
947
|
+
"""
|
|
948
|
+
temperature_c: Float
|
|
949
|
+
"""
|
|
950
|
+
GPS latitude in decimal degrees (WGS 84)
|
|
951
|
+
"""
|
|
952
|
+
latitude: Float!
|
|
953
|
+
"""
|
|
954
|
+
GPS longitude in decimal degrees (WGS 84)
|
|
955
|
+
"""
|
|
956
|
+
longitude: Float!
|
|
957
|
+
}
|
|
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
|
+
"""
|
|
150
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
|
|
151
987
|
}
|
|
152
988
|
|
|
153
989
|
# -------------------------------------------------------
|
|
154
990
|
# Unified GPS
|
|
155
991
|
# -------------------------------------------------------
|
|
992
|
+
"""
|
|
993
|
+
Single GPS data point from the unified view combining OwnTracks and Garmin sources.
|
|
994
|
+
"""
|
|
156
995
|
type UnifiedGpsPoint {
|
|
996
|
+
"""
|
|
997
|
+
Data source: 'owntracks' or 'garmin'
|
|
998
|
+
"""
|
|
157
999
|
source: String!
|
|
1000
|
+
"""
|
|
1001
|
+
Device or activity identifier from the source
|
|
1002
|
+
"""
|
|
158
1003
|
identifier: String!
|
|
1004
|
+
"""
|
|
1005
|
+
GPS latitude in decimal degrees (WGS 84)
|
|
1006
|
+
"""
|
|
159
1007
|
latitude: Float!
|
|
1008
|
+
"""
|
|
1009
|
+
GPS longitude in decimal degrees (WGS 84)
|
|
1010
|
+
"""
|
|
160
1011
|
longitude: Float!
|
|
1012
|
+
"""
|
|
1013
|
+
UTC timestamp of the GPS recording
|
|
1014
|
+
"""
|
|
161
1015
|
timestamp: DateTime!
|
|
1016
|
+
"""
|
|
1017
|
+
Horizontal GPS accuracy in meters (OwnTracks only)
|
|
1018
|
+
"""
|
|
162
1019
|
accuracy: Float
|
|
1020
|
+
"""
|
|
1021
|
+
Device battery percentage (OwnTracks only)
|
|
1022
|
+
"""
|
|
163
1023
|
battery: Int
|
|
1024
|
+
"""
|
|
1025
|
+
Instantaneous speed in km/h (Garmin only)
|
|
1026
|
+
"""
|
|
164
1027
|
speed_kmh: Float
|
|
1028
|
+
"""
|
|
1029
|
+
Heart rate in BPM (Garmin only)
|
|
1030
|
+
"""
|
|
165
1031
|
heart_rate: Int
|
|
1032
|
+
"""
|
|
1033
|
+
UTC timestamp when the record was inserted
|
|
1034
|
+
"""
|
|
166
1035
|
created_at: String
|
|
167
1036
|
}
|
|
168
1037
|
|
|
1038
|
+
"""
|
|
1039
|
+
Paginated list of unified GPS data points.
|
|
1040
|
+
"""
|
|
169
1041
|
type UnifiedGpsConnection {
|
|
1042
|
+
"""
|
|
1043
|
+
List of unified GPS items in the current page
|
|
1044
|
+
"""
|
|
170
1045
|
items: [UnifiedGpsPoint!]!
|
|
1046
|
+
"""
|
|
1047
|
+
Total number of items matching the query
|
|
1048
|
+
"""
|
|
171
1049
|
total: Int!
|
|
1050
|
+
"""
|
|
1051
|
+
Maximum number of items per page
|
|
1052
|
+
"""
|
|
172
1053
|
limit: Int!
|
|
1054
|
+
"""
|
|
1055
|
+
Number of items skipped from the start
|
|
1056
|
+
"""
|
|
173
1057
|
offset: Int!
|
|
174
1058
|
}
|
|
175
1059
|
|
|
1060
|
+
"""
|
|
1061
|
+
Per-day aggregate combining OwnTracks location stats and Garmin activity metrics.
|
|
1062
|
+
"""
|
|
176
1063
|
type DailyActivitySummary {
|
|
1064
|
+
"""
|
|
1065
|
+
Calendar date in YYYY-MM-DD format
|
|
1066
|
+
"""
|
|
177
1067
|
activity_date: String
|
|
1068
|
+
"""
|
|
1069
|
+
OwnTracks device that reported data for this day
|
|
1070
|
+
"""
|
|
178
1071
|
owntracks_device: String
|
|
1072
|
+
"""
|
|
1073
|
+
Number of OwnTracks GPS points recorded
|
|
1074
|
+
"""
|
|
179
1075
|
owntracks_points: Int
|
|
1076
|
+
"""
|
|
1077
|
+
Lowest device battery percentage observed
|
|
1078
|
+
"""
|
|
180
1079
|
min_battery: Int
|
|
1080
|
+
"""
|
|
1081
|
+
Highest device battery percentage observed
|
|
1082
|
+
"""
|
|
181
1083
|
max_battery: Int
|
|
1084
|
+
"""
|
|
1085
|
+
Mean horizontal GPS accuracy in meters
|
|
1086
|
+
"""
|
|
182
1087
|
avg_accuracy: Float
|
|
1088
|
+
"""
|
|
1089
|
+
Garmin sport type for activities on this day
|
|
1090
|
+
"""
|
|
183
1091
|
garmin_sport: String
|
|
1092
|
+
"""
|
|
1093
|
+
Number of Garmin activities recorded
|
|
1094
|
+
"""
|
|
184
1095
|
garmin_activities: Int
|
|
1096
|
+
"""
|
|
1097
|
+
Combined Garmin activity distance in km
|
|
1098
|
+
"""
|
|
185
1099
|
total_distance_km: Float
|
|
1100
|
+
"""
|
|
1101
|
+
Combined Garmin activity duration in seconds
|
|
1102
|
+
"""
|
|
186
1103
|
total_duration_seconds: Float
|
|
1104
|
+
"""
|
|
1105
|
+
Mean heart rate across Garmin activities in BPM
|
|
1106
|
+
"""
|
|
187
1107
|
avg_heart_rate: Int
|
|
1108
|
+
"""
|
|
1109
|
+
Total calories burned across Garmin activities
|
|
1110
|
+
"""
|
|
188
1111
|
total_calories: Int
|
|
189
1112
|
}
|
|
190
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
|
+
|
|
191
1150
|
# -------------------------------------------------------
|
|
192
1151
|
# Reference Locations
|
|
193
1152
|
# -------------------------------------------------------
|
|
1153
|
+
"""
|
|
1154
|
+
Named geographic reference point used for spatial queries (e.g. home, office).
|
|
1155
|
+
"""
|
|
194
1156
|
type ReferenceLocation {
|
|
1157
|
+
"""
|
|
1158
|
+
Unique reference location identifier
|
|
1159
|
+
"""
|
|
195
1160
|
id: Int!
|
|
1161
|
+
"""
|
|
1162
|
+
Short, unique name for the location (e.g. home, office)
|
|
1163
|
+
"""
|
|
196
1164
|
name: String!
|
|
1165
|
+
"""
|
|
1166
|
+
GPS latitude in decimal degrees (WGS 84)
|
|
1167
|
+
"""
|
|
197
1168
|
latitude: Float!
|
|
1169
|
+
"""
|
|
1170
|
+
GPS longitude in decimal degrees (WGS 84)
|
|
1171
|
+
"""
|
|
198
1172
|
longitude: Float!
|
|
1173
|
+
"""
|
|
1174
|
+
Geofence radius in meters for proximity queries
|
|
1175
|
+
"""
|
|
199
1176
|
radius_meters: Float!
|
|
1177
|
+
"""
|
|
1178
|
+
Optional human-readable description of the location
|
|
1179
|
+
"""
|
|
200
1180
|
description: String
|
|
1181
|
+
"""
|
|
1182
|
+
UTC timestamp when the record was created
|
|
1183
|
+
"""
|
|
201
1184
|
created_at: String
|
|
1185
|
+
"""
|
|
1186
|
+
UTC timestamp when the record was last updated
|
|
1187
|
+
"""
|
|
202
1188
|
updated_at: String
|
|
203
1189
|
}
|
|
204
1190
|
|
|
205
1191
|
# -------------------------------------------------------
|
|
206
1192
|
# Spatial
|
|
207
1193
|
# -------------------------------------------------------
|
|
1194
|
+
"""
|
|
1195
|
+
GPS point found within a spatial proximity search.
|
|
1196
|
+
"""
|
|
208
1197
|
type NearbyPoint {
|
|
1198
|
+
"""
|
|
1199
|
+
Data source: 'owntracks' or 'garmin'
|
|
1200
|
+
"""
|
|
209
1201
|
source: String!
|
|
1202
|
+
"""
|
|
1203
|
+
Record identifier in the source table
|
|
1204
|
+
"""
|
|
210
1205
|
id: Int!
|
|
1206
|
+
"""
|
|
1207
|
+
GPS latitude in decimal degrees (WGS 84)
|
|
1208
|
+
"""
|
|
211
1209
|
latitude: Float!
|
|
1210
|
+
"""
|
|
1211
|
+
GPS longitude in decimal degrees (WGS 84)
|
|
1212
|
+
"""
|
|
212
1213
|
longitude: Float!
|
|
1214
|
+
"""
|
|
1215
|
+
Distance from the search center point in meters
|
|
1216
|
+
"""
|
|
213
1217
|
distance_meters: Float!
|
|
1218
|
+
"""
|
|
1219
|
+
UTC timestamp of the GPS recording
|
|
1220
|
+
"""
|
|
214
1221
|
timestamp: DateTime!
|
|
215
1222
|
}
|
|
216
1223
|
|
|
1224
|
+
"""
|
|
1225
|
+
Geodesic distance calculation result between two geographic points.
|
|
1226
|
+
"""
|
|
217
1227
|
type DistanceResult {
|
|
1228
|
+
"""
|
|
1229
|
+
Geodesic distance between the two points in meters
|
|
1230
|
+
"""
|
|
218
1231
|
distance_meters: Float!
|
|
1232
|
+
"""
|
|
1233
|
+
Origin latitude in decimal degrees
|
|
1234
|
+
"""
|
|
219
1235
|
from_lat: Float!
|
|
1236
|
+
"""
|
|
1237
|
+
Origin longitude in decimal degrees
|
|
1238
|
+
"""
|
|
220
1239
|
from_lon: Float!
|
|
1240
|
+
"""
|
|
1241
|
+
Destination latitude in decimal degrees
|
|
1242
|
+
"""
|
|
221
1243
|
to_lat: Float!
|
|
1244
|
+
"""
|
|
1245
|
+
Destination longitude in decimal degrees
|
|
1246
|
+
"""
|
|
222
1247
|
to_lon: Float!
|
|
223
1248
|
}
|
|
224
1249
|
|
|
1250
|
+
"""
|
|
1251
|
+
GPS points found within a named reference location's geofence radius.
|
|
1252
|
+
"""
|
|
225
1253
|
type WithinReferenceResult {
|
|
1254
|
+
"""
|
|
1255
|
+
Name of the reference location searched
|
|
1256
|
+
"""
|
|
226
1257
|
reference_name: String!
|
|
1258
|
+
"""
|
|
1259
|
+
Geofence radius used for the search in meters
|
|
1260
|
+
"""
|
|
227
1261
|
radius_meters: Float!
|
|
1262
|
+
"""
|
|
1263
|
+
Number of GPS points found within the radius
|
|
1264
|
+
"""
|
|
228
1265
|
total_points: Int!
|
|
1266
|
+
"""
|
|
1267
|
+
GPS points within the radius, sorted by distance
|
|
1268
|
+
"""
|
|
229
1269
|
points: [NearbyPoint!]!
|
|
230
1270
|
}
|
|
231
1271
|
|
|
1272
|
+
"""
|
|
1273
|
+
Result payload returned when triggering an on-demand Garmin sync.
|
|
1274
|
+
"""
|
|
1275
|
+
type GarminSyncTriggerResult {
|
|
1276
|
+
"""
|
|
1277
|
+
Sync trigger status (e.g. accepted, conflict, bad_request, error)
|
|
1278
|
+
"""
|
|
1279
|
+
status: String!
|
|
1280
|
+
"""
|
|
1281
|
+
Human-readable status message from upstream sync service
|
|
1282
|
+
"""
|
|
1283
|
+
message: String!
|
|
1284
|
+
"""
|
|
1285
|
+
True when a new sync run was accepted and triggered
|
|
1286
|
+
"""
|
|
1287
|
+
accepted: Boolean!
|
|
1288
|
+
"""
|
|
1289
|
+
UTC timestamp when sync was triggered
|
|
1290
|
+
"""
|
|
1291
|
+
triggered_at: String
|
|
1292
|
+
"""
|
|
1293
|
+
UTC timestamp when an already-running sync started
|
|
1294
|
+
"""
|
|
1295
|
+
started_at: String
|
|
1296
|
+
"""
|
|
1297
|
+
Effective sync window in hours
|
|
1298
|
+
"""
|
|
1299
|
+
window_hours: Int
|
|
1300
|
+
"""
|
|
1301
|
+
Window start timestamp computed by upstream service, when available
|
|
1302
|
+
"""
|
|
1303
|
+
window_start: String
|
|
1304
|
+
"""
|
|
1305
|
+
Effective lookback value, when provided
|
|
1306
|
+
"""
|
|
1307
|
+
lookback: Int
|
|
1308
|
+
}
|
|
1309
|
+
|
|
232
1310
|
# -------------------------------------------------------
|
|
233
1311
|
# Enums
|
|
234
1312
|
# -------------------------------------------------------
|
|
1313
|
+
"""
|
|
1314
|
+
Sort direction for query results.
|
|
1315
|
+
"""
|
|
235
1316
|
enum SortOrder {
|
|
1317
|
+
"""
|
|
1318
|
+
Ascending order (oldest first, A-Z)
|
|
1319
|
+
"""
|
|
236
1320
|
asc
|
|
1321
|
+
"""
|
|
1322
|
+
Descending order (newest first, Z-A)
|
|
1323
|
+
"""
|
|
237
1324
|
desc
|
|
238
1325
|
}
|
|
239
1326
|
|
|
@@ -242,89 +1329,395 @@ enum SortOrder {
|
|
|
242
1329
|
# -------------------------------------------------------
|
|
243
1330
|
type Query {
|
|
244
1331
|
# Health
|
|
1332
|
+
"""
|
|
1333
|
+
Get service health status.
|
|
1334
|
+
"""
|
|
245
1335
|
health: HealthStatus!
|
|
1336
|
+
"""
|
|
1337
|
+
Get service readiness status including database connectivity.
|
|
1338
|
+
"""
|
|
246
1339
|
ready: ReadyStatus!
|
|
247
1340
|
|
|
248
1341
|
# Locations
|
|
1342
|
+
"""
|
|
1343
|
+
Retrieve a paginated list of OwnTracks location records.
|
|
1344
|
+
"""
|
|
249
1345
|
locations(
|
|
1346
|
+
"""
|
|
1347
|
+
Filter by OwnTracks device identifier
|
|
1348
|
+
"""
|
|
250
1349
|
device_id: String
|
|
1350
|
+
"""
|
|
1351
|
+
Start date filter (YYYY-MM-DD or ISO 8601)
|
|
1352
|
+
"""
|
|
251
1353
|
date_from: String
|
|
1354
|
+
"""
|
|
1355
|
+
End date filter (YYYY-MM-DD or ISO 8601)
|
|
1356
|
+
"""
|
|
252
1357
|
date_to: String
|
|
1358
|
+
"""
|
|
1359
|
+
Maximum number of items to return per page
|
|
1360
|
+
"""
|
|
253
1361
|
limit: Int
|
|
1362
|
+
"""
|
|
1363
|
+
Number of items to skip for pagination
|
|
1364
|
+
"""
|
|
254
1365
|
offset: Int
|
|
1366
|
+
"""
|
|
1367
|
+
Field name to sort by
|
|
1368
|
+
"""
|
|
255
1369
|
sort: String
|
|
1370
|
+
"""
|
|
1371
|
+
Sort direction
|
|
1372
|
+
"""
|
|
256
1373
|
order: SortOrder
|
|
257
1374
|
): LocationConnection!
|
|
258
1375
|
|
|
259
|
-
|
|
1376
|
+
"""
|
|
1377
|
+
Retrieve a single location by its ID, including raw payload.
|
|
1378
|
+
"""
|
|
1379
|
+
location(
|
|
1380
|
+
"""
|
|
1381
|
+
Unique location record identifier
|
|
1382
|
+
"""
|
|
1383
|
+
id: Int!
|
|
1384
|
+
): LocationDetail
|
|
260
1385
|
|
|
1386
|
+
"""
|
|
1387
|
+
List all distinct OwnTracks device identifiers.
|
|
1388
|
+
"""
|
|
261
1389
|
devices: [DeviceInfo!]!
|
|
262
1390
|
|
|
263
|
-
|
|
1391
|
+
"""
|
|
1392
|
+
Get aggregate count of location records with optional filters.
|
|
1393
|
+
"""
|
|
1394
|
+
locationCount(
|
|
1395
|
+
"""
|
|
1396
|
+
Filter by date (YYYY-MM-DD)
|
|
1397
|
+
"""
|
|
1398
|
+
date: String
|
|
1399
|
+
"""
|
|
1400
|
+
Filter by device identifier
|
|
1401
|
+
"""
|
|
1402
|
+
device_id: String
|
|
1403
|
+
): LocationCount!
|
|
1404
|
+
|
|
1405
|
+
"""
|
|
1406
|
+
Get the earliest and latest location timestamps.
|
|
1407
|
+
"""
|
|
1408
|
+
locationDateRange: LocationDateRange!
|
|
264
1409
|
|
|
265
1410
|
# Garmin
|
|
1411
|
+
"""
|
|
1412
|
+
Get the earliest and latest Garmin activity timestamps.
|
|
1413
|
+
"""
|
|
1414
|
+
garminDateRange: GarminDateRange!
|
|
1415
|
+
|
|
1416
|
+
"""
|
|
1417
|
+
Retrieve a paginated list of Garmin activities.
|
|
1418
|
+
"""
|
|
266
1419
|
garminActivities(
|
|
1420
|
+
"""
|
|
1421
|
+
Filter by sport type (e.g. cycling, running)
|
|
1422
|
+
"""
|
|
267
1423
|
sport: String
|
|
1424
|
+
"""
|
|
1425
|
+
Start date filter (YYYY-MM-DD or ISO 8601)
|
|
1426
|
+
"""
|
|
268
1427
|
date_from: String
|
|
1428
|
+
"""
|
|
1429
|
+
End date filter (YYYY-MM-DD or ISO 8601)
|
|
1430
|
+
"""
|
|
269
1431
|
date_to: String
|
|
1432
|
+
"""
|
|
1433
|
+
Maximum number of items to return per page
|
|
1434
|
+
"""
|
|
270
1435
|
limit: Int
|
|
1436
|
+
"""
|
|
1437
|
+
Number of items to skip for pagination
|
|
1438
|
+
"""
|
|
271
1439
|
offset: Int
|
|
1440
|
+
"""
|
|
1441
|
+
Field name to sort by
|
|
1442
|
+
"""
|
|
272
1443
|
sort: String
|
|
1444
|
+
"""
|
|
1445
|
+
Sort direction
|
|
1446
|
+
"""
|
|
273
1447
|
order: SortOrder
|
|
274
1448
|
): GarminActivityConnection!
|
|
275
1449
|
|
|
276
|
-
|
|
1450
|
+
"""
|
|
1451
|
+
Retrieve a single Garmin activity by its ID.
|
|
1452
|
+
"""
|
|
1453
|
+
garminActivity(
|
|
1454
|
+
"""
|
|
1455
|
+
Garmin Connect activity identifier
|
|
1456
|
+
"""
|
|
1457
|
+
activity_id: String!
|
|
1458
|
+
): GarminActivity
|
|
277
1459
|
|
|
1460
|
+
"""
|
|
1461
|
+
Retrieve paginated GPS track points for a Garmin activity.
|
|
1462
|
+
"""
|
|
278
1463
|
garminTrackPoints(
|
|
1464
|
+
"""
|
|
1465
|
+
Garmin Connect activity identifier
|
|
1466
|
+
"""
|
|
279
1467
|
activity_id: String!
|
|
1468
|
+
"""
|
|
1469
|
+
Maximum number of items to return per page
|
|
1470
|
+
"""
|
|
280
1471
|
limit: Int
|
|
1472
|
+
"""
|
|
1473
|
+
Number of items to skip for pagination
|
|
1474
|
+
"""
|
|
281
1475
|
offset: Int
|
|
1476
|
+
"""
|
|
1477
|
+
Field name to sort by
|
|
1478
|
+
"""
|
|
282
1479
|
sort: String
|
|
1480
|
+
"""
|
|
1481
|
+
Sort direction
|
|
1482
|
+
"""
|
|
283
1483
|
order: SortOrder
|
|
1484
|
+
"""
|
|
1485
|
+
Simplification tolerance for track point reduction
|
|
1486
|
+
"""
|
|
284
1487
|
simplify: Float
|
|
285
1488
|
): GarminTrackPointConnection!
|
|
286
1489
|
|
|
1490
|
+
"""
|
|
1491
|
+
List all distinct sport types with activity counts.
|
|
1492
|
+
"""
|
|
287
1493
|
garminSports: [SportInfo!]!
|
|
288
1494
|
|
|
1495
|
+
"""
|
|
1496
|
+
Retrieve chart-optimised track points for a Garmin activity.
|
|
1497
|
+
"""
|
|
1498
|
+
garminChartData(
|
|
1499
|
+
"""
|
|
1500
|
+
Garmin Connect activity identifier
|
|
1501
|
+
"""
|
|
1502
|
+
activity_id: String!
|
|
1503
|
+
): [GarminChartPoint!]!
|
|
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
|
+
|
|
289
1537
|
# Unified GPS
|
|
1538
|
+
"""
|
|
1539
|
+
Retrieve a paginated list of unified GPS points from all sources.
|
|
1540
|
+
"""
|
|
290
1541
|
unifiedGps(
|
|
1542
|
+
"""
|
|
1543
|
+
Filter by data source: 'owntracks' or 'garmin'
|
|
1544
|
+
"""
|
|
291
1545
|
source: String
|
|
1546
|
+
"""
|
|
1547
|
+
Start date filter (YYYY-MM-DD or ISO 8601)
|
|
1548
|
+
"""
|
|
292
1549
|
date_from: String
|
|
1550
|
+
"""
|
|
1551
|
+
End date filter (YYYY-MM-DD or ISO 8601)
|
|
1552
|
+
"""
|
|
293
1553
|
date_to: String
|
|
1554
|
+
"""
|
|
1555
|
+
Maximum number of items to return per page
|
|
1556
|
+
"""
|
|
294
1557
|
limit: Int
|
|
1558
|
+
"""
|
|
1559
|
+
Number of items to skip for pagination
|
|
1560
|
+
"""
|
|
295
1561
|
offset: Int
|
|
1562
|
+
"""
|
|
1563
|
+
Sort direction
|
|
1564
|
+
"""
|
|
296
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
|
|
297
1574
|
): UnifiedGpsConnection!
|
|
298
1575
|
|
|
1576
|
+
"""
|
|
1577
|
+
Retrieve daily activity summaries combining OwnTracks and Garmin data.
|
|
1578
|
+
"""
|
|
299
1579
|
dailySummary(
|
|
1580
|
+
"""
|
|
1581
|
+
Start date filter (YYYY-MM-DD or ISO 8601)
|
|
1582
|
+
"""
|
|
300
1583
|
date_from: String
|
|
1584
|
+
"""
|
|
1585
|
+
End date filter (YYYY-MM-DD or ISO 8601)
|
|
1586
|
+
"""
|
|
301
1587
|
date_to: String
|
|
1588
|
+
"""
|
|
1589
|
+
Maximum number of days to return per page
|
|
1590
|
+
"""
|
|
302
1591
|
limit: Int
|
|
303
|
-
|
|
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!
|
|
304
1602
|
|
|
305
1603
|
# Reference Locations
|
|
1604
|
+
"""
|
|
1605
|
+
List all named reference locations.
|
|
1606
|
+
"""
|
|
306
1607
|
referenceLocations: [ReferenceLocation!]!
|
|
307
|
-
|
|
1608
|
+
"""
|
|
1609
|
+
Retrieve a single reference location by its ID.
|
|
1610
|
+
"""
|
|
1611
|
+
referenceLocation(
|
|
1612
|
+
"""
|
|
1613
|
+
Unique reference location identifier
|
|
1614
|
+
"""
|
|
1615
|
+
id: Int!
|
|
1616
|
+
): ReferenceLocation
|
|
308
1617
|
|
|
309
1618
|
# Spatial
|
|
1619
|
+
"""
|
|
1620
|
+
Find GPS points within a radius of a geographic coordinate.
|
|
1621
|
+
"""
|
|
310
1622
|
nearbyPoints(
|
|
1623
|
+
"""
|
|
1624
|
+
Center point latitude in decimal degrees
|
|
1625
|
+
"""
|
|
311
1626
|
lat: Float!
|
|
1627
|
+
"""
|
|
1628
|
+
Center point longitude in decimal degrees
|
|
1629
|
+
"""
|
|
312
1630
|
lon: Float!
|
|
1631
|
+
"""
|
|
1632
|
+
Search radius in meters
|
|
1633
|
+
"""
|
|
313
1634
|
radius_meters: Float
|
|
1635
|
+
"""
|
|
1636
|
+
Filter by data source: 'owntracks' or 'garmin'
|
|
1637
|
+
"""
|
|
314
1638
|
source: String
|
|
1639
|
+
"""
|
|
1640
|
+
Maximum number of points to return
|
|
1641
|
+
"""
|
|
315
1642
|
limit: Int
|
|
316
1643
|
): [NearbyPoint!]!
|
|
317
1644
|
|
|
1645
|
+
"""
|
|
1646
|
+
Calculate the geodesic distance between two geographic points.
|
|
1647
|
+
"""
|
|
318
1648
|
calculateDistance(
|
|
1649
|
+
"""
|
|
1650
|
+
Origin latitude in decimal degrees
|
|
1651
|
+
"""
|
|
319
1652
|
from_lat: Float!
|
|
1653
|
+
"""
|
|
1654
|
+
Origin longitude in decimal degrees
|
|
1655
|
+
"""
|
|
320
1656
|
from_lon: Float!
|
|
1657
|
+
"""
|
|
1658
|
+
Destination latitude in decimal degrees
|
|
1659
|
+
"""
|
|
321
1660
|
to_lat: Float!
|
|
1661
|
+
"""
|
|
1662
|
+
Destination longitude in decimal degrees
|
|
1663
|
+
"""
|
|
322
1664
|
to_lon: Float!
|
|
323
1665
|
): DistanceResult!
|
|
324
1666
|
|
|
1667
|
+
"""
|
|
1668
|
+
Find GPS points within a named reference location's geofence.
|
|
1669
|
+
"""
|
|
325
1670
|
withinReference(
|
|
1671
|
+
"""
|
|
1672
|
+
Name of the reference location to search within
|
|
1673
|
+
"""
|
|
326
1674
|
name: String!
|
|
1675
|
+
"""
|
|
1676
|
+
Filter by data source: 'owntracks' or 'garmin'
|
|
1677
|
+
"""
|
|
327
1678
|
source: String
|
|
1679
|
+
"""
|
|
1680
|
+
Maximum number of points to return
|
|
1681
|
+
"""
|
|
328
1682
|
limit: Int
|
|
329
1683
|
): WithinReferenceResult!
|
|
1684
|
+
|
|
1685
|
+
# Geocoding
|
|
1686
|
+
"""
|
|
1687
|
+
Get geocoding coverage statistics.
|
|
1688
|
+
"""
|
|
1689
|
+
geocodingStatus: GeocodingStatus!
|
|
1690
|
+
}
|
|
1691
|
+
|
|
1692
|
+
# -------------------------------------------------------
|
|
1693
|
+
# Mutations
|
|
1694
|
+
# -------------------------------------------------------
|
|
1695
|
+
type Mutation {
|
|
1696
|
+
"""
|
|
1697
|
+
Trigger an on-demand Garmin sync in the upstream API.
|
|
1698
|
+
"""
|
|
1699
|
+
triggerGarminSync(
|
|
1700
|
+
"""
|
|
1701
|
+
Optional sync window in hours. Preferred over lookback.
|
|
1702
|
+
"""
|
|
1703
|
+
window_hours: Int
|
|
1704
|
+
"""
|
|
1705
|
+
Optional legacy lookback value.
|
|
1706
|
+
"""
|
|
1707
|
+
lookback: Int
|
|
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!
|
|
330
1723
|
}
|