@stuartshay/otel-graphql-types 1.0.445 → 1.0.468
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 +212 -2
- package/package.json +1 -1
- package/schema.graphql +385 -2
package/index.d.ts
CHANGED
|
@@ -11,6 +11,32 @@ export interface Scalars {
|
|
|
11
11
|
JSON: { input: Record<string, unknown>; output: Record<string, unknown> };
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
/** Input for creating a saved Garmin segment (e.g. from an activity lap or climb). */
|
|
15
|
+
export interface CreateGarminSegmentInput {
|
|
16
|
+
/** Segment length in meters (optional metadata) */
|
|
17
|
+
distance_meters?: InputMaybe<Scalars['Float']['input']>;
|
|
18
|
+
/** Segment end latitude */
|
|
19
|
+
end_latitude: Scalars['Float']['input'];
|
|
20
|
+
/** Segment end longitude */
|
|
21
|
+
end_longitude: Scalars['Float']['input'];
|
|
22
|
+
/** Corridor radius (m) used to match traversing activities (default 35) */
|
|
23
|
+
match_tolerance_meters?: InputMaybe<Scalars['Float']['input']>;
|
|
24
|
+
/** Human-readable segment name */
|
|
25
|
+
name: Scalars['String']['input'];
|
|
26
|
+
/** Garmin activity this segment is created from, if any */
|
|
27
|
+
source_activity_id?: InputMaybe<Scalars['String']['input']>;
|
|
28
|
+
/** Zero-based ClimbPro split index the segment is created from, if any */
|
|
29
|
+
source_climb_index?: InputMaybe<Scalars['Int']['input']>;
|
|
30
|
+
/** Zero-based lap index the segment is created from, if any */
|
|
31
|
+
source_lap_index?: InputMaybe<Scalars['Int']['input']>;
|
|
32
|
+
/** Sport this segment applies to (e.g. cycling); null matches all sports */
|
|
33
|
+
sport?: InputMaybe<Scalars['String']['input']>;
|
|
34
|
+
/** Segment start latitude */
|
|
35
|
+
start_latitude: Scalars['Float']['input'];
|
|
36
|
+
/** Segment start longitude */
|
|
37
|
+
start_longitude: Scalars['Float']['input'];
|
|
38
|
+
}
|
|
39
|
+
|
|
14
40
|
/** Per-day aggregate combining OwnTracks location stats and Garmin activity metrics. */
|
|
15
41
|
export interface DailyActivitySummary {
|
|
16
42
|
__typename?: 'DailyActivitySummary';
|
|
@@ -345,6 +371,15 @@ export interface GarminActivityLap {
|
|
|
345
371
|
updated_at?: Maybe<Scalars['String']['output']>;
|
|
346
372
|
}
|
|
347
373
|
|
|
374
|
+
/** Laps for a single activity within the batch laps comparison response. */
|
|
375
|
+
export interface GarminActivityLapsGroup {
|
|
376
|
+
__typename?: 'GarminActivityLapsGroup';
|
|
377
|
+
/** Parent activity summary */
|
|
378
|
+
activity: GarminLapsActivity;
|
|
379
|
+
/** Laps ordered by lap_index ascending */
|
|
380
|
+
laps: Array<GarminActivityLap>;
|
|
381
|
+
}
|
|
382
|
+
|
|
348
383
|
/** Aggregated Garmin activity totals for a single time bucket (week, month, or year). */
|
|
349
384
|
export interface GarminActivityTotal {
|
|
350
385
|
__typename?: 'GarminActivityTotal';
|
|
@@ -422,6 +457,133 @@ export interface GarminDeviceCount {
|
|
|
422
457
|
label: Scalars['String']['output'];
|
|
423
458
|
}
|
|
424
459
|
|
|
460
|
+
/** Activity summary metadata for a batch laps comparison item. */
|
|
461
|
+
export interface GarminLapsActivity {
|
|
462
|
+
__typename?: 'GarminLapsActivity';
|
|
463
|
+
/** Garmin Connect activity identifier */
|
|
464
|
+
activity_id: Scalars['String']['output'];
|
|
465
|
+
/** Average activity heart rate in bpm */
|
|
466
|
+
avg_heart_rate?: Maybe<Scalars['Int']['output']>;
|
|
467
|
+
/** Average activity speed in km/h */
|
|
468
|
+
avg_speed_kmh?: Maybe<Scalars['Float']['output']>;
|
|
469
|
+
/** Total activity distance in kilometers */
|
|
470
|
+
distance_km?: Maybe<Scalars['Float']['output']>;
|
|
471
|
+
/** Total activity duration in seconds */
|
|
472
|
+
duration_seconds?: Maybe<Scalars['Float']['output']>;
|
|
473
|
+
/** Maximum activity heart rate in bpm */
|
|
474
|
+
max_heart_rate?: Maybe<Scalars['Int']['output']>;
|
|
475
|
+
/** Sport type (e.g. cycling) */
|
|
476
|
+
sport?: Maybe<Scalars['String']['output']>;
|
|
477
|
+
/** UTC activity start time */
|
|
478
|
+
start_time?: Maybe<Scalars['String']['output']>;
|
|
479
|
+
/** Sub-sport type (e.g. road) */
|
|
480
|
+
sub_sport?: Maybe<Scalars['String']['output']>;
|
|
481
|
+
/** Total activity elevation gain in meters */
|
|
482
|
+
total_ascent_m?: Maybe<Scalars['Float']['output']>;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
/** Paginated batch of activities (each with their laps) for cross-activity lap comparison. */
|
|
486
|
+
export interface GarminLapsComparisonConnection {
|
|
487
|
+
__typename?: 'GarminLapsComparisonConnection';
|
|
488
|
+
/** Activities (newest first), each with their laps ordered by lap_index */
|
|
489
|
+
items: Array<GarminActivityLapsGroup>;
|
|
490
|
+
/** Maximum number of activities per page */
|
|
491
|
+
limit: Scalars['Int']['output'];
|
|
492
|
+
/** Number of activities skipped from the start */
|
|
493
|
+
offset: Scalars['Int']['output'];
|
|
494
|
+
/** Total number of activities matching the query */
|
|
495
|
+
total: Scalars['Int']['output'];
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
/**
|
|
499
|
+
* A saved (named) Garmin segment: a start→end corridor used to compare efforts
|
|
500
|
+
* across all activities that traverse the same route.
|
|
501
|
+
*/
|
|
502
|
+
export interface GarminSegment {
|
|
503
|
+
__typename?: 'GarminSegment';
|
|
504
|
+
/** UTC timestamp when the segment was created */
|
|
505
|
+
created_at?: Maybe<Scalars['String']['output']>;
|
|
506
|
+
/** Segment length in meters (optional metadata) */
|
|
507
|
+
distance_meters?: Maybe<Scalars['Float']['output']>;
|
|
508
|
+
/** Segment end latitude */
|
|
509
|
+
end_latitude: Scalars['Float']['output'];
|
|
510
|
+
/** Segment end longitude */
|
|
511
|
+
end_longitude: Scalars['Float']['output'];
|
|
512
|
+
/** Unique segment identifier */
|
|
513
|
+
id: Scalars['Int']['output'];
|
|
514
|
+
/** Corridor radius (m) used to match traversing activities */
|
|
515
|
+
match_tolerance_meters: Scalars['Float']['output'];
|
|
516
|
+
/** Human-readable segment name (e.g. "Harlem Hill") */
|
|
517
|
+
name: Scalars['String']['output'];
|
|
518
|
+
/** Garmin activity this segment was created from, if any */
|
|
519
|
+
source_activity_id?: Maybe<Scalars['String']['output']>;
|
|
520
|
+
/** Zero-based ClimbPro split index the segment was created from, if any */
|
|
521
|
+
source_climb_index?: Maybe<Scalars['Int']['output']>;
|
|
522
|
+
/** Zero-based lap index the segment was created from, if any */
|
|
523
|
+
source_lap_index?: Maybe<Scalars['Int']['output']>;
|
|
524
|
+
/** Sport this segment applies to (e.g. cycling); null matches all sports */
|
|
525
|
+
sport?: Maybe<Scalars['String']['output']>;
|
|
526
|
+
/** Segment start latitude */
|
|
527
|
+
start_latitude: Scalars['Float']['output'];
|
|
528
|
+
/** Segment start longitude */
|
|
529
|
+
start_longitude: Scalars['Float']['output'];
|
|
530
|
+
/** UTC timestamp when the segment was last updated */
|
|
531
|
+
updated_at?: Maybe<Scalars['String']['output']>;
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
/** The start→end corridor a segment-efforts query was matched against. */
|
|
535
|
+
export interface GarminSegmentDefinition {
|
|
536
|
+
__typename?: 'GarminSegmentDefinition';
|
|
537
|
+
/** Corridor end latitude */
|
|
538
|
+
end_lat: Scalars['Float']['output'];
|
|
539
|
+
/** Corridor end longitude */
|
|
540
|
+
end_lon: Scalars['Float']['output'];
|
|
541
|
+
/** Corridor start latitude */
|
|
542
|
+
start_lat: Scalars['Float']['output'];
|
|
543
|
+
/** Corridor start longitude */
|
|
544
|
+
start_lon: Scalars['Float']['output'];
|
|
545
|
+
/** Corridor radius in meters used for matching */
|
|
546
|
+
tolerance_meters: Scalars['Float']['output'];
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
/** A single activity's best traversal of a segment, ranked against all others. */
|
|
550
|
+
export interface GarminSegmentEffort {
|
|
551
|
+
__typename?: 'GarminSegmentEffort';
|
|
552
|
+
/** Garmin activity identifier for this effort */
|
|
553
|
+
activity_id: Scalars['String']['output'];
|
|
554
|
+
/** UTC start time of the parent activity */
|
|
555
|
+
activity_start_time?: Maybe<Scalars['String']['output']>;
|
|
556
|
+
/** Average heart rate across the segment in bpm */
|
|
557
|
+
avg_heart_rate?: Maybe<Scalars['Int']['output']>;
|
|
558
|
+
/** Average speed across the segment in km/h */
|
|
559
|
+
avg_speed_kmh?: Maybe<Scalars['Float']['output']>;
|
|
560
|
+
/** Distance covered across the segment in km */
|
|
561
|
+
distance_km?: Maybe<Scalars['Float']['output']>;
|
|
562
|
+
/** UTC timestamp reaching the segment end corridor */
|
|
563
|
+
effort_end: Scalars['String']['output'];
|
|
564
|
+
/** UTC timestamp entering the segment start corridor */
|
|
565
|
+
effort_start: Scalars['String']['output'];
|
|
566
|
+
/** Segment elapsed time in seconds */
|
|
567
|
+
elapsed_seconds: Scalars['Float']['output'];
|
|
568
|
+
/** Maximum heart rate across the segment in bpm */
|
|
569
|
+
max_heart_rate?: Maybe<Scalars['Int']['output']>;
|
|
570
|
+
/** 1-based rank by elapsed time (1 = fastest) */
|
|
571
|
+
rank: Scalars['Int']['output'];
|
|
572
|
+
/** Sport type (e.g. cycling) */
|
|
573
|
+
sport?: Maybe<Scalars['String']['output']>;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
/** Ranked efforts for a segment across all matching activities (fastest first). */
|
|
577
|
+
export interface GarminSegmentEffortsConnection {
|
|
578
|
+
__typename?: 'GarminSegmentEffortsConnection';
|
|
579
|
+
/** Efforts ordered fastest-first */
|
|
580
|
+
items: Array<GarminSegmentEffort>;
|
|
581
|
+
/** The corridor the efforts were matched against */
|
|
582
|
+
segment: GarminSegmentDefinition;
|
|
583
|
+
/** Total number of matching efforts */
|
|
584
|
+
total: Scalars['Int']['output'];
|
|
585
|
+
}
|
|
586
|
+
|
|
425
587
|
/** Result payload returned when triggering an on-demand Garmin sync. */
|
|
426
588
|
export interface GarminSyncTriggerResult {
|
|
427
589
|
__typename?: 'GarminSyncTriggerResult';
|
|
@@ -729,12 +891,28 @@ export interface LocationDetail {
|
|
|
729
891
|
|
|
730
892
|
export interface Mutation {
|
|
731
893
|
__typename?: 'Mutation';
|
|
894
|
+
/**
|
|
895
|
+
* Create a saved Garmin segment (requires authentication). Typically called with
|
|
896
|
+
* the start/end coordinates of an activity lap or ClimbPro split to "save this
|
|
897
|
+
* lap as a segment".
|
|
898
|
+
*/
|
|
899
|
+
createGarminSegment: GarminSegment;
|
|
900
|
+
/** Delete a saved Garmin segment by id (requires authentication). Returns true on success. */
|
|
901
|
+
deleteGarminSegment: Scalars['Boolean']['output'];
|
|
732
902
|
/** Trigger an on-demand Garmin sync in the upstream API. */
|
|
733
903
|
triggerGarminSync: GarminSyncTriggerResult;
|
|
734
904
|
/** Trigger batch reverse-geocoding of un-geocoded location records. */
|
|
735
905
|
triggerGeocoding: GeocodingTriggerResult;
|
|
736
906
|
}
|
|
737
907
|
|
|
908
|
+
export interface MutationCreateGarminSegmentArgs {
|
|
909
|
+
input: CreateGarminSegmentInput;
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
export interface MutationDeleteGarminSegmentArgs {
|
|
913
|
+
id: Scalars['Int']['input'];
|
|
914
|
+
}
|
|
915
|
+
|
|
738
916
|
export interface MutationTriggerGarminSyncArgs {
|
|
739
917
|
lookback?: InputMaybe<Scalars['Int']['input']>;
|
|
740
918
|
window_hours?: InputMaybe<Scalars['Int']['input']>;
|
|
@@ -801,6 +979,14 @@ export interface Query {
|
|
|
801
979
|
garminDateRange: GarminDateRange;
|
|
802
980
|
/** List Garmin recording device labels with activity counts. */
|
|
803
981
|
garminDeviceCounts: Array<GarminDeviceCount>;
|
|
982
|
+
/** Batch laps across activities for cross-activity comparison (matrix of activities x lap_index). */
|
|
983
|
+
garminLapsComparison: GarminLapsComparisonConnection;
|
|
984
|
+
/** Fetch a single saved Garmin segment by id. Returns null if it does not exist. */
|
|
985
|
+
garminSegment?: Maybe<GarminSegment>;
|
|
986
|
+
/** Rank all historical activity efforts over a saved segment (fastest first). */
|
|
987
|
+
garminSegmentEfforts: GarminSegmentEffortsConnection;
|
|
988
|
+
/** List saved Garmin segments, optionally filtered by sport. */
|
|
989
|
+
garminSegments: Array<GarminSegment>;
|
|
804
990
|
/** List all distinct sport types with activity counts. */
|
|
805
991
|
garminSports: Array<SportInfo>;
|
|
806
992
|
/** Retrieve paginated GPS track points for a Garmin activity. */
|
|
@@ -882,6 +1068,30 @@ export interface QueryGarminChartDataArgs {
|
|
|
882
1068
|
activity_id: Scalars['String']['input'];
|
|
883
1069
|
}
|
|
884
1070
|
|
|
1071
|
+
export interface QueryGarminLapsComparisonArgs {
|
|
1072
|
+
date_from?: InputMaybe<Scalars['String']['input']>;
|
|
1073
|
+
date_to?: InputMaybe<Scalars['String']['input']>;
|
|
1074
|
+
limit?: InputMaybe<Scalars['Int']['input']>;
|
|
1075
|
+
offset?: InputMaybe<Scalars['Int']['input']>;
|
|
1076
|
+
sport?: InputMaybe<Scalars['String']['input']>;
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
export interface QueryGarminSegmentArgs {
|
|
1080
|
+
id: Scalars['Int']['input'];
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
export interface QueryGarminSegmentEffortsArgs {
|
|
1084
|
+
date_from?: InputMaybe<Scalars['String']['input']>;
|
|
1085
|
+
date_to?: InputMaybe<Scalars['String']['input']>;
|
|
1086
|
+
id: Scalars['Int']['input'];
|
|
1087
|
+
limit?: InputMaybe<Scalars['Int']['input']>;
|
|
1088
|
+
max_effort_seconds?: InputMaybe<Scalars['Int']['input']>;
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
export interface QueryGarminSegmentsArgs {
|
|
1092
|
+
sport?: InputMaybe<Scalars['String']['input']>;
|
|
1093
|
+
}
|
|
1094
|
+
|
|
885
1095
|
export interface QueryGarminTrackPointsArgs {
|
|
886
1096
|
activity_id: Scalars['String']['input'];
|
|
887
1097
|
limit?: InputMaybe<Scalars['Int']['input']>;
|
|
@@ -942,8 +1152,8 @@ export interface QueryWithinReferenceArgs {
|
|
|
942
1152
|
/** Service readiness status including database connectivity. */
|
|
943
1153
|
export interface ReadyStatus {
|
|
944
1154
|
__typename?: 'ReadyStatus';
|
|
945
|
-
/** Database
|
|
946
|
-
database?: Maybe<Scalars['
|
|
1155
|
+
/** Database readiness payload returned by otel-data-api */
|
|
1156
|
+
database?: Maybe<Scalars['JSON']['output']>;
|
|
947
1157
|
/** Service readiness status */
|
|
948
1158
|
status: Scalars['String']['output'];
|
|
949
1159
|
/** Application version from VERSION file */
|
package/package.json
CHANGED
package/schema.graphql
CHANGED
|
@@ -50,9 +50,9 @@ type ReadyStatus {
|
|
|
50
50
|
"""
|
|
51
51
|
status: String!
|
|
52
52
|
"""
|
|
53
|
-
Database
|
|
53
|
+
Database readiness payload returned by otel-data-api
|
|
54
54
|
"""
|
|
55
|
-
database:
|
|
55
|
+
database: JSON
|
|
56
56
|
"""
|
|
57
57
|
Application version from VERSION file
|
|
58
58
|
"""
|
|
@@ -896,6 +896,295 @@ type GarminActivityLap {
|
|
|
896
896
|
updated_at: String
|
|
897
897
|
}
|
|
898
898
|
|
|
899
|
+
"""
|
|
900
|
+
Activity summary metadata for a batch laps comparison item.
|
|
901
|
+
"""
|
|
902
|
+
type GarminLapsActivity {
|
|
903
|
+
"""
|
|
904
|
+
Garmin Connect activity identifier
|
|
905
|
+
"""
|
|
906
|
+
activity_id: String!
|
|
907
|
+
"""
|
|
908
|
+
Sport type (e.g. cycling)
|
|
909
|
+
"""
|
|
910
|
+
sport: String
|
|
911
|
+
"""
|
|
912
|
+
Sub-sport type (e.g. road)
|
|
913
|
+
"""
|
|
914
|
+
sub_sport: String
|
|
915
|
+
"""
|
|
916
|
+
UTC activity start time
|
|
917
|
+
"""
|
|
918
|
+
start_time: String
|
|
919
|
+
"""
|
|
920
|
+
Total activity distance in kilometers
|
|
921
|
+
"""
|
|
922
|
+
distance_km: Float
|
|
923
|
+
"""
|
|
924
|
+
Total activity duration in seconds
|
|
925
|
+
"""
|
|
926
|
+
duration_seconds: Float
|
|
927
|
+
"""
|
|
928
|
+
Average activity speed in km/h
|
|
929
|
+
"""
|
|
930
|
+
avg_speed_kmh: Float
|
|
931
|
+
"""
|
|
932
|
+
Average activity heart rate in bpm
|
|
933
|
+
"""
|
|
934
|
+
avg_heart_rate: Int
|
|
935
|
+
"""
|
|
936
|
+
Maximum activity heart rate in bpm
|
|
937
|
+
"""
|
|
938
|
+
max_heart_rate: Int
|
|
939
|
+
"""
|
|
940
|
+
Total activity elevation gain in meters
|
|
941
|
+
"""
|
|
942
|
+
total_ascent_m: Float
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
"""
|
|
946
|
+
Laps for a single activity within the batch laps comparison response.
|
|
947
|
+
"""
|
|
948
|
+
type GarminActivityLapsGroup {
|
|
949
|
+
"""
|
|
950
|
+
Parent activity summary
|
|
951
|
+
"""
|
|
952
|
+
activity: GarminLapsActivity!
|
|
953
|
+
"""
|
|
954
|
+
Laps ordered by lap_index ascending
|
|
955
|
+
"""
|
|
956
|
+
laps: [GarminActivityLap!]!
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
"""
|
|
960
|
+
Paginated batch of activities (each with their laps) for cross-activity lap comparison.
|
|
961
|
+
"""
|
|
962
|
+
type GarminLapsComparisonConnection {
|
|
963
|
+
"""
|
|
964
|
+
Activities (newest first), each with their laps ordered by lap_index
|
|
965
|
+
"""
|
|
966
|
+
items: [GarminActivityLapsGroup!]!
|
|
967
|
+
"""
|
|
968
|
+
Total number of activities matching the query
|
|
969
|
+
"""
|
|
970
|
+
total: Int!
|
|
971
|
+
"""
|
|
972
|
+
Maximum number of activities per page
|
|
973
|
+
"""
|
|
974
|
+
limit: Int!
|
|
975
|
+
"""
|
|
976
|
+
Number of activities skipped from the start
|
|
977
|
+
"""
|
|
978
|
+
offset: Int!
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
"""
|
|
982
|
+
A saved (named) Garmin segment: a start→end corridor used to compare efforts
|
|
983
|
+
across all activities that traverse the same route.
|
|
984
|
+
"""
|
|
985
|
+
type GarminSegment {
|
|
986
|
+
"""
|
|
987
|
+
Unique segment identifier
|
|
988
|
+
"""
|
|
989
|
+
id: Int!
|
|
990
|
+
"""
|
|
991
|
+
Human-readable segment name (e.g. "Harlem Hill")
|
|
992
|
+
"""
|
|
993
|
+
name: String!
|
|
994
|
+
"""
|
|
995
|
+
Sport this segment applies to (e.g. cycling); null matches all sports
|
|
996
|
+
"""
|
|
997
|
+
sport: String
|
|
998
|
+
"""
|
|
999
|
+
Segment start latitude
|
|
1000
|
+
"""
|
|
1001
|
+
start_latitude: Float!
|
|
1002
|
+
"""
|
|
1003
|
+
Segment start longitude
|
|
1004
|
+
"""
|
|
1005
|
+
start_longitude: Float!
|
|
1006
|
+
"""
|
|
1007
|
+
Segment end latitude
|
|
1008
|
+
"""
|
|
1009
|
+
end_latitude: Float!
|
|
1010
|
+
"""
|
|
1011
|
+
Segment end longitude
|
|
1012
|
+
"""
|
|
1013
|
+
end_longitude: Float!
|
|
1014
|
+
"""
|
|
1015
|
+
Segment length in meters (optional metadata)
|
|
1016
|
+
"""
|
|
1017
|
+
distance_meters: Float
|
|
1018
|
+
"""
|
|
1019
|
+
Corridor radius (m) used to match traversing activities
|
|
1020
|
+
"""
|
|
1021
|
+
match_tolerance_meters: Float!
|
|
1022
|
+
"""
|
|
1023
|
+
Garmin activity this segment was created from, if any
|
|
1024
|
+
"""
|
|
1025
|
+
source_activity_id: String
|
|
1026
|
+
"""
|
|
1027
|
+
Zero-based lap index the segment was created from, if any
|
|
1028
|
+
"""
|
|
1029
|
+
source_lap_index: Int
|
|
1030
|
+
"""
|
|
1031
|
+
Zero-based ClimbPro split index the segment was created from, if any
|
|
1032
|
+
"""
|
|
1033
|
+
source_climb_index: Int
|
|
1034
|
+
"""
|
|
1035
|
+
UTC timestamp when the segment was created
|
|
1036
|
+
"""
|
|
1037
|
+
created_at: String
|
|
1038
|
+
"""
|
|
1039
|
+
UTC timestamp when the segment was last updated
|
|
1040
|
+
"""
|
|
1041
|
+
updated_at: String
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
"""
|
|
1045
|
+
The start→end corridor a segment-efforts query was matched against.
|
|
1046
|
+
"""
|
|
1047
|
+
type GarminSegmentDefinition {
|
|
1048
|
+
"""
|
|
1049
|
+
Corridor start latitude
|
|
1050
|
+
"""
|
|
1051
|
+
start_lat: Float!
|
|
1052
|
+
"""
|
|
1053
|
+
Corridor start longitude
|
|
1054
|
+
"""
|
|
1055
|
+
start_lon: Float!
|
|
1056
|
+
"""
|
|
1057
|
+
Corridor end latitude
|
|
1058
|
+
"""
|
|
1059
|
+
end_lat: Float!
|
|
1060
|
+
"""
|
|
1061
|
+
Corridor end longitude
|
|
1062
|
+
"""
|
|
1063
|
+
end_lon: Float!
|
|
1064
|
+
"""
|
|
1065
|
+
Corridor radius in meters used for matching
|
|
1066
|
+
"""
|
|
1067
|
+
tolerance_meters: Float!
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
"""
|
|
1071
|
+
A single activity's best traversal of a segment, ranked against all others.
|
|
1072
|
+
"""
|
|
1073
|
+
type GarminSegmentEffort {
|
|
1074
|
+
"""
|
|
1075
|
+
1-based rank by elapsed time (1 = fastest)
|
|
1076
|
+
"""
|
|
1077
|
+
rank: Int!
|
|
1078
|
+
"""
|
|
1079
|
+
Garmin activity identifier for this effort
|
|
1080
|
+
"""
|
|
1081
|
+
activity_id: String!
|
|
1082
|
+
"""
|
|
1083
|
+
Sport type (e.g. cycling)
|
|
1084
|
+
"""
|
|
1085
|
+
sport: String
|
|
1086
|
+
"""
|
|
1087
|
+
UTC start time of the parent activity
|
|
1088
|
+
"""
|
|
1089
|
+
activity_start_time: String
|
|
1090
|
+
"""
|
|
1091
|
+
UTC timestamp entering the segment start corridor
|
|
1092
|
+
"""
|
|
1093
|
+
effort_start: String!
|
|
1094
|
+
"""
|
|
1095
|
+
UTC timestamp reaching the segment end corridor
|
|
1096
|
+
"""
|
|
1097
|
+
effort_end: String!
|
|
1098
|
+
"""
|
|
1099
|
+
Segment elapsed time in seconds
|
|
1100
|
+
"""
|
|
1101
|
+
elapsed_seconds: Float!
|
|
1102
|
+
"""
|
|
1103
|
+
Distance covered across the segment in km
|
|
1104
|
+
"""
|
|
1105
|
+
distance_km: Float
|
|
1106
|
+
"""
|
|
1107
|
+
Average speed across the segment in km/h
|
|
1108
|
+
"""
|
|
1109
|
+
avg_speed_kmh: Float
|
|
1110
|
+
"""
|
|
1111
|
+
Average heart rate across the segment in bpm
|
|
1112
|
+
"""
|
|
1113
|
+
avg_heart_rate: Int
|
|
1114
|
+
"""
|
|
1115
|
+
Maximum heart rate across the segment in bpm
|
|
1116
|
+
"""
|
|
1117
|
+
max_heart_rate: Int
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
"""
|
|
1121
|
+
Ranked efforts for a segment across all matching activities (fastest first).
|
|
1122
|
+
"""
|
|
1123
|
+
type GarminSegmentEffortsConnection {
|
|
1124
|
+
"""
|
|
1125
|
+
The corridor the efforts were matched against
|
|
1126
|
+
"""
|
|
1127
|
+
segment: GarminSegmentDefinition!
|
|
1128
|
+
"""
|
|
1129
|
+
Efforts ordered fastest-first
|
|
1130
|
+
"""
|
|
1131
|
+
items: [GarminSegmentEffort!]!
|
|
1132
|
+
"""
|
|
1133
|
+
Total number of matching efforts
|
|
1134
|
+
"""
|
|
1135
|
+
total: Int!
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
"""
|
|
1139
|
+
Input for creating a saved Garmin segment (e.g. from an activity lap or climb).
|
|
1140
|
+
"""
|
|
1141
|
+
input CreateGarminSegmentInput {
|
|
1142
|
+
"""
|
|
1143
|
+
Human-readable segment name
|
|
1144
|
+
"""
|
|
1145
|
+
name: String!
|
|
1146
|
+
"""
|
|
1147
|
+
Sport this segment applies to (e.g. cycling); null matches all sports
|
|
1148
|
+
"""
|
|
1149
|
+
sport: String
|
|
1150
|
+
"""
|
|
1151
|
+
Segment start latitude
|
|
1152
|
+
"""
|
|
1153
|
+
start_latitude: Float!
|
|
1154
|
+
"""
|
|
1155
|
+
Segment start longitude
|
|
1156
|
+
"""
|
|
1157
|
+
start_longitude: Float!
|
|
1158
|
+
"""
|
|
1159
|
+
Segment end latitude
|
|
1160
|
+
"""
|
|
1161
|
+
end_latitude: Float!
|
|
1162
|
+
"""
|
|
1163
|
+
Segment end longitude
|
|
1164
|
+
"""
|
|
1165
|
+
end_longitude: Float!
|
|
1166
|
+
"""
|
|
1167
|
+
Segment length in meters (optional metadata)
|
|
1168
|
+
"""
|
|
1169
|
+
distance_meters: Float
|
|
1170
|
+
"""
|
|
1171
|
+
Corridor radius (m) used to match traversing activities (default 35)
|
|
1172
|
+
"""
|
|
1173
|
+
match_tolerance_meters: Float
|
|
1174
|
+
"""
|
|
1175
|
+
Garmin activity this segment is created from, if any
|
|
1176
|
+
"""
|
|
1177
|
+
source_activity_id: String
|
|
1178
|
+
"""
|
|
1179
|
+
Zero-based lap index the segment is created from, if any
|
|
1180
|
+
"""
|
|
1181
|
+
source_lap_index: Int
|
|
1182
|
+
"""
|
|
1183
|
+
Zero-based ClimbPro split index the segment is created from, if any
|
|
1184
|
+
"""
|
|
1185
|
+
source_climb_index: Int
|
|
1186
|
+
}
|
|
1187
|
+
|
|
899
1188
|
"""
|
|
900
1189
|
Individual GPS track point within a Garmin activity.
|
|
901
1190
|
"""
|
|
@@ -1769,6 +2058,78 @@ type Query {
|
|
|
1769
2058
|
activity_id: String!
|
|
1770
2059
|
): [GarminActivityLap!]!
|
|
1771
2060
|
|
|
2061
|
+
"""
|
|
2062
|
+
Batch laps across activities for cross-activity comparison (matrix of activities x lap_index).
|
|
2063
|
+
"""
|
|
2064
|
+
garminLapsComparison(
|
|
2065
|
+
"""
|
|
2066
|
+
Filter by sport type (e.g. cycling, running)
|
|
2067
|
+
"""
|
|
2068
|
+
sport: String
|
|
2069
|
+
"""
|
|
2070
|
+
Start date filter (YYYY-MM-DD), inclusive on activity start_time
|
|
2071
|
+
"""
|
|
2072
|
+
date_from: String
|
|
2073
|
+
"""
|
|
2074
|
+
End date filter (YYYY-MM-DD), inclusive on activity start_time
|
|
2075
|
+
"""
|
|
2076
|
+
date_to: String
|
|
2077
|
+
"""
|
|
2078
|
+
Maximum number of activities to return per page
|
|
2079
|
+
"""
|
|
2080
|
+
limit: Int
|
|
2081
|
+
"""
|
|
2082
|
+
Number of activities to skip for pagination
|
|
2083
|
+
"""
|
|
2084
|
+
offset: Int
|
|
2085
|
+
): GarminLapsComparisonConnection!
|
|
2086
|
+
|
|
2087
|
+
"""
|
|
2088
|
+
List saved Garmin segments, optionally filtered by sport.
|
|
2089
|
+
"""
|
|
2090
|
+
garminSegments(
|
|
2091
|
+
"""
|
|
2092
|
+
Filter by sport type (e.g. cycling, running)
|
|
2093
|
+
"""
|
|
2094
|
+
sport: String
|
|
2095
|
+
): [GarminSegment!]!
|
|
2096
|
+
|
|
2097
|
+
"""
|
|
2098
|
+
Fetch a single saved Garmin segment by id. Returns null if it does not exist.
|
|
2099
|
+
"""
|
|
2100
|
+
garminSegment(
|
|
2101
|
+
"""
|
|
2102
|
+
Segment identifier
|
|
2103
|
+
"""
|
|
2104
|
+
id: Int!
|
|
2105
|
+
): GarminSegment
|
|
2106
|
+
|
|
2107
|
+
"""
|
|
2108
|
+
Rank all historical activity efforts over a saved segment (fastest first).
|
|
2109
|
+
"""
|
|
2110
|
+
garminSegmentEfforts(
|
|
2111
|
+
"""
|
|
2112
|
+
Segment identifier
|
|
2113
|
+
"""
|
|
2114
|
+
id: Int!
|
|
2115
|
+
"""
|
|
2116
|
+
Start date filter (YYYY-MM-DD), inclusive on activity start_time
|
|
2117
|
+
"""
|
|
2118
|
+
date_from: String
|
|
2119
|
+
"""
|
|
2120
|
+
End date filter (YYYY-MM-DD), inclusive on activity start_time
|
|
2121
|
+
"""
|
|
2122
|
+
date_to: String
|
|
2123
|
+
"""
|
|
2124
|
+
Ignore traversals longer than this many seconds (filters loop/return mismatches)
|
|
2125
|
+
"""
|
|
2126
|
+
max_effort_seconds: Int
|
|
2127
|
+
"""
|
|
2128
|
+
Maximum number of efforts to return
|
|
2129
|
+
"""
|
|
2130
|
+
limit: Int
|
|
2131
|
+
): GarminSegmentEffortsConnection!
|
|
2132
|
+
|
|
1772
2133
|
"""
|
|
1773
2134
|
Retrieve all reverse-geocoded addresses for a Garmin activity (start, mid-route waypoints, and end).
|
|
1774
2135
|
"""
|
|
@@ -1987,4 +2348,26 @@ type Mutation {
|
|
|
1987
2348
|
"""
|
|
1988
2349
|
retry_failed: Boolean
|
|
1989
2350
|
): GeocodingTriggerResult!
|
|
2351
|
+
|
|
2352
|
+
"""
|
|
2353
|
+
Create a saved Garmin segment (requires authentication). Typically called with
|
|
2354
|
+
the start/end coordinates of an activity lap or ClimbPro split to "save this
|
|
2355
|
+
lap as a segment".
|
|
2356
|
+
"""
|
|
2357
|
+
createGarminSegment(
|
|
2358
|
+
"""
|
|
2359
|
+
Segment definition
|
|
2360
|
+
"""
|
|
2361
|
+
input: CreateGarminSegmentInput!
|
|
2362
|
+
): GarminSegment!
|
|
2363
|
+
|
|
2364
|
+
"""
|
|
2365
|
+
Delete a saved Garmin segment by id (requires authentication). Returns true on success.
|
|
2366
|
+
"""
|
|
2367
|
+
deleteGarminSegment(
|
|
2368
|
+
"""
|
|
2369
|
+
Segment identifier
|
|
2370
|
+
"""
|
|
2371
|
+
id: Int!
|
|
2372
|
+
): Boolean!
|
|
1990
2373
|
}
|