@sports-alliance/sports-lib 7.0.0 → 7.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/.github/workflows/test.yml +2 -2
  2. package/lib/cjs/activities/activity.types.d.ts +6 -3
  3. package/lib/cjs/activities/activity.types.js +9 -4
  4. package/lib/cjs/activities/devices/device.d.ts +1 -0
  5. package/lib/cjs/activities/devices/device.interface.d.ts +1 -0
  6. package/lib/cjs/activities/devices/device.js +1 -0
  7. package/lib/cjs/activities/devices/device.json.interface.d.ts +1 -0
  8. package/lib/cjs/data/data.cycling-position.js +1 -1
  9. package/lib/cjs/data/data.feeling.js +1 -1
  10. package/lib/cjs/data/data.interface.js +1 -1
  11. package/lib/cjs/data/data.rpe.js +1 -1
  12. package/lib/cjs/data/data.store.export.spec.js +28 -14
  13. package/lib/cjs/data/data.store.js +1 -1
  14. package/lib/cjs/events/adapters/file-type.enum.js +1 -1
  15. package/lib/cjs/events/adapters/importers/fit/importer.fit.coros.device.names.js +2 -1
  16. package/lib/cjs/events/adapters/importers/fit/importer.fit.d.ts +2 -1
  17. package/lib/cjs/events/adapters/importers/fit/importer.fit.garmin.device.names.js +61 -2
  18. package/lib/cjs/events/adapters/importers/fit/importer.fit.garmin.profile.data.js +867 -855
  19. package/lib/cjs/events/adapters/importers/fit/importer.fit.garmin.profile.mapper.spec.d.ts +1 -0
  20. package/lib/cjs/events/adapters/importers/fit/importer.fit.garmin.profile.mapper.spec.js +34 -0
  21. package/lib/cjs/events/adapters/importers/fit/importer.fit.integration.spec.js +22 -8
  22. package/lib/cjs/events/adapters/importers/fit/importer.fit.js +24 -2
  23. package/lib/cjs/events/adapters/importers/fit/importer.fit.suunto.device.names.js +1 -0
  24. package/lib/cjs/events/adapters/importers/fit/importer.fit.wahoo.device.names.js +5 -1
  25. package/lib/cjs/events/adapters/importers/gpx/importer.gpx.integration.spec.js +22 -8
  26. package/lib/cjs/events/adapters/importers/gpx/importer.gpx.js +1 -1
  27. package/lib/cjs/events/adapters/importers/gpx/importer.gpx.spec.js +50 -0
  28. package/lib/cjs/events/adapters/importers/suunto/importer.suunto.activity.ids.js +1 -1
  29. package/lib/cjs/events/adapters/importers/suunto/importer.suunto.device.names.js +1 -0
  30. package/lib/cjs/events/adapters/importers/suunto/importer.suunto.integration.spec.js +22 -8
  31. package/lib/cjs/events/adapters/importers/tcx/importer.tcx.integration.spec.js +22 -8
  32. package/lib/cjs/events/utilities/activity.utilities.js +7 -7
  33. package/lib/cjs/events/utilities/grade-calculator/low-pass-filter.js +3 -3
  34. package/lib/cjs/events/utilities/helpers.d.ts +1 -1
  35. package/lib/cjs/events/utilities/helpers.js +19 -19
  36. package/lib/cjs/index.d.ts +1 -1
  37. package/lib/cjs/index.js +5 -1
  38. package/lib/cjs/laps/lap.types.js +1 -1
  39. package/lib/cjs/meta-data/event-meta-data.interface.js +1 -1
  40. package/lib/cjs/privacy/privacy.class.interface.js +1 -1
  41. package/lib/cjs/specs/activities-parsing.integration.spec.js +75 -61
  42. package/lib/cjs/specs/strava-streams-compliance.spec.js +22 -8
  43. package/lib/cjs/streams/compressed.stream.interface.js +2 -2
  44. package/lib/cjs/tiles/tile.settings.interface.js +5 -5
  45. package/lib/cjs/users/settings/dashboard/user.dashboard.settings.interface.js +1 -1
  46. package/lib/cjs/users/settings/user.app.settings.interface.js +1 -1
  47. package/lib/cjs/users/settings/user.chart.settings.interface.js +3 -3
  48. package/lib/cjs/users/settings/user.map.settings.interface.js +2 -2
  49. package/lib/cjs/users/settings/user.unit.settings.interface.js +9 -9
  50. package/lib/esm/activities/activity.types.d.ts +6 -3
  51. package/lib/esm/activities/activity.types.js +7 -2
  52. package/lib/esm/activities/devices/device.d.ts +1 -0
  53. package/lib/esm/activities/devices/device.interface.d.ts +1 -0
  54. package/lib/esm/activities/devices/device.js +1 -0
  55. package/lib/esm/activities/devices/device.json.interface.d.ts +1 -0
  56. package/lib/esm/data/data.store.export.spec.js +6 -6
  57. package/lib/esm/data/data.store.js +1 -1
  58. package/lib/esm/events/adapters/importers/fit/importer.fit.coros.device.names.js +2 -1
  59. package/lib/esm/events/adapters/importers/fit/importer.fit.d.ts +2 -1
  60. package/lib/esm/events/adapters/importers/fit/importer.fit.garmin.device.names.js +61 -2
  61. package/lib/esm/events/adapters/importers/fit/importer.fit.garmin.profile.data.js +867 -855
  62. package/lib/esm/events/adapters/importers/fit/importer.fit.garmin.profile.mapper.spec.d.ts +1 -0
  63. package/lib/esm/events/adapters/importers/fit/importer.fit.garmin.profile.mapper.spec.js +32 -0
  64. package/lib/esm/events/adapters/importers/fit/importer.fit.js +24 -2
  65. package/lib/esm/events/adapters/importers/fit/importer.fit.suunto.device.names.js +1 -0
  66. package/lib/esm/events/adapters/importers/fit/importer.fit.wahoo.device.names.js +5 -1
  67. package/lib/esm/events/adapters/importers/gpx/importer.gpx.js +1 -1
  68. package/lib/esm/events/adapters/importers/gpx/importer.gpx.spec.js +17 -0
  69. package/lib/esm/events/adapters/importers/suunto/importer.suunto.device.names.js +1 -0
  70. package/lib/esm/events/utilities/activity.utilities.js +7 -7
  71. package/lib/esm/events/utilities/grade-calculator/low-pass-filter.js +3 -3
  72. package/lib/esm/events/utilities/helpers.d.ts +1 -1
  73. package/lib/esm/index.d.ts +1 -1
  74. package/lib/esm/specs/activities-parsing.integration.spec.js +53 -53
  75. package/package.json +21 -21
  76. package/.editorconfig +0 -14
  77. package/.eslintignore +0 -4
  78. package/.eslintrc.js +0 -9
  79. package/.prettierignore +0 -24
  80. package/.prettierrc.json +0 -12
  81. package/.vscode/launch.json +0 -49
  82. package/.vscode/tasks.json +0 -34
  83. package/CODE_OF_CONDUCT.md +0 -76
  84. package/debug-fit-import.js +0 -10
  85. package/jest.config.js +0 -23
  86. package/lib/cjs/package.json +0 -1
  87. package/lib/cjs/specs/fixtures/streams/strava/rides/3171472783.json +0 -52534
  88. package/lib/cjs/specs/fixtures/streams/strava/rides/3171487458.json +0 -78818
  89. package/lib/cjs/specs/fixtures/streams/strava/rides/343080886.json +0 -105090
  90. package/lib/cjs/specs/fixtures/streams/strava/rides/5910143591.json +0 -110711
  91. package/lib/cjs/specs/fixtures/streams/strava/runs/2451375851.json +0 -74846
  92. package/lib/cjs/specs/fixtures/streams/strava/runs/2709634581.json +0 -66817
  93. package/lib/cjs/specs/fixtures/streams/strava/runs/3156040843.json +0 -17594
  94. package/lib/cjs/specs/fixtures/streams/strava/runs/3182900697.json +0 -17322
  95. package/lib/cjs/specs/fixtures/streams/strava/runs/3183465494.json +0 -20463
  96. package/lib/cjs/specs/fixtures/streams/strava/runs/3183490558.json +0 -58202
  97. package/lib/esm/specs/fixtures/streams/strava/rides/3171472783.json +0 -52534
  98. package/lib/esm/specs/fixtures/streams/strava/rides/3171487458.json +0 -78818
  99. package/lib/esm/specs/fixtures/streams/strava/rides/343080886.json +0 -105090
  100. package/lib/esm/specs/fixtures/streams/strava/rides/5910143591.json +0 -110711
  101. package/lib/esm/specs/fixtures/streams/strava/runs/2451375851.json +0 -74846
  102. package/lib/esm/specs/fixtures/streams/strava/runs/2709634581.json +0 -66817
  103. package/lib/esm/specs/fixtures/streams/strava/runs/3156040843.json +0 -17594
  104. package/lib/esm/specs/fixtures/streams/strava/runs/3182900697.json +0 -17322
  105. package/lib/esm/specs/fixtures/streams/strava/runs/3183465494.json +0 -20463
  106. package/lib/esm/specs/fixtures/streams/strava/runs/3183490558.json +0 -58202
  107. package/test_output.log +0 -162
  108. package/test_output_2.log +0 -168
  109. package/test_output_3.log +0 -168
  110. package/tsconfig.cjs.json +0 -7
  111. package/tsconfig.esm.json +0 -8
  112. package/tsconfig.lib.json +0 -8
@@ -2,9 +2,9 @@ name: Test
2
2
 
3
3
  on:
4
4
  push:
5
- branches: [ "master", "develop" ]
5
+ branches: [ "master" ]
6
6
  pull_request:
7
- types: [opened, synchronize, reopened]
7
+ branches: [ "master", "develop" ]
8
8
 
9
9
  concurrency:
10
10
  group: ${{ github.workflow }}-${{ github.ref }}
@@ -141,9 +141,12 @@ export declare enum ActivityTypes {
141
141
  'MountainBiking' = "Mountain Biking",
142
142
  'Mountain Biking' = "Mountain Biking",
143
143
  'cycling_cyclocross' = "Mountain Biking",
144
- 'mountain' = "Mountain Biking",
144
+ 'mountain' = "Mountain Biking",// @todo this feels hacky but exists and indeed it's MTB
145
145
  'Mountain biking' = "Mountain Biking",
146
+ 'cycling_mountain_enduro' = "Enduro MTB",
147
+ 'Enduro MTB' = "Enduro MTB",
146
148
  'cycling_downhill' = "Downhill Cycling",
149
+ 'cycling_mountain_downhill' = "Downhill Cycling",
147
150
  'DownhillCycling' = "Downhill Cycling",
148
151
  'Downhill Cycling' = "Downhill Cycling",
149
152
  /**
@@ -317,8 +320,8 @@ export declare enum ActivityTypes {
317
320
  'BackCountrySkiing' = "Backcountry Skiing",
318
321
  'BackcountrySkiing' = "Backcountry Skiing",
319
322
  'BackcountrySki' = "Backcountry Skiing",
320
- 'cross_country_skiing_backcountry' = "Backcountry Skiing",
321
- 'alpine_skiing_backcountry' = "Backcountry Skiing",
323
+ 'cross_country_skiing_backcountry' = "Backcountry Skiing",// Hack for suunto
324
+ 'alpine_skiing_backcountry' = "Backcountry Skiing",// Hack for suunto
322
325
  'backcountry' = "Backcountry Skiing",
323
326
  'BackCountrySki' = "Backcountry Skiing",
324
327
  /**
@@ -234,7 +234,12 @@ var ActivityTypes;
234
234
  ActivityTypes["cycling_cyclocross"] = "Mountain Biking";
235
235
  ActivityTypes["mountain"] = "Mountain Biking";
236
236
  ActivityTypes["Mountain biking"] = "Mountain Biking";
237
+ // Enduro
238
+ ActivityTypes["cycling_mountain_enduro"] = "Enduro MTB";
239
+ ActivityTypes["Enduro MTB"] = "Enduro MTB";
240
+ // Downhill
237
241
  ActivityTypes["cycling_downhill"] = "Downhill Cycling";
242
+ ActivityTypes["cycling_mountain_downhill"] = "Downhill Cycling";
238
243
  ActivityTypes["DownhillCycling"] = "Downhill Cycling";
239
244
  ActivityTypes["Downhill Cycling"] = "Downhill Cycling";
240
245
  /**
@@ -876,7 +881,7 @@ var ActivityTypes;
876
881
  ActivityTypes["Workout"] = "Workout";
877
882
  ActivityTypes["generic_match"] = "Match";
878
883
  ActivityTypes["Match"] = "Match";
879
- })(ActivityTypes = exports.ActivityTypes || (exports.ActivityTypes = {}));
884
+ })(ActivityTypes || (exports.ActivityTypes = ActivityTypes = {}));
880
885
  var ActivityTypeGroups;
881
886
  (function (ActivityTypeGroups) {
882
887
  ActivityTypeGroups["Running"] = "Running";
@@ -897,7 +902,7 @@ var ActivityTypeGroups;
897
902
  ActivityTypeGroups["Team Racket"] = "Team Racket";
898
903
  ActivityTypeGroups["TeamRacket"] = "Team Racket";
899
904
  ActivityTypeGroups["Unspecified"] = "Unspecified";
900
- })(ActivityTypeGroups = exports.ActivityTypeGroups || (exports.ActivityTypeGroups = {}));
905
+ })(ActivityTypeGroups || (exports.ActivityTypeGroups = ActivityTypeGroups = {}));
901
906
  class ActivityTypesGroupMapping {
902
907
  }
903
908
  exports.ActivityTypesGroupMapping = ActivityTypesGroupMapping;
@@ -1021,8 +1026,8 @@ exports.ActivityTypesMoving = ActivityTypesMoving;
1021
1026
  * Holds moving speed threshold in m/s per sport group
1022
1027
  */
1023
1028
  ActivityTypesMoving.SPORTS_MOVING_SPEED_THRESHOLD_MAP = new Map([
1024
- [ActivityTypeGroups.Running, 1.5 / 3.6],
1025
- [ActivityTypeGroups.Cycling, 4 / 3.6],
1029
+ [ActivityTypeGroups.Running, 1.5 / 3.6], // kph to m/s
1030
+ [ActivityTypeGroups.Cycling, 4 / 3.6], // kph to m/s
1026
1031
  [ActivityTypeGroups.Swimming, 0.3] // 30 cm/s
1027
1032
  ]);
1028
1033
  ActivityTypesMoving.DEFAULT_MOVING_SPEED_THRESHOLD = 0.3; // m/s
@@ -5,6 +5,7 @@ export declare class Device implements DeviceInterface {
5
5
  name?: string;
6
6
  index?: number;
7
7
  batteryStatus?: string;
8
+ batteryLevel?: number;
8
9
  batteryVoltage?: number;
9
10
  manufacturer?: string;
10
11
  serialNumber?: string;
@@ -4,6 +4,7 @@ export interface DeviceInterface extends SerializableClassInterface {
4
4
  name?: string;
5
5
  index?: number;
6
6
  batteryStatus?: string;
7
+ batteryLevel?: number;
7
8
  batteryVoltage?: number;
8
9
  manufacturer?: string;
9
10
  serialNumber?: string;
@@ -11,6 +11,7 @@ class Device {
11
11
  type: this.type,
12
12
  index: (0, helpers_1.isNumber)(this.index) ? this.index || null : null,
13
13
  batteryStatus: this.batteryStatus || null,
14
+ batteryLevel: this.batteryLevel || null,
14
15
  name: this.name || null,
15
16
  batteryVoltage: this.batteryVoltage || null,
16
17
  manufacturer: this.manufacturer || null,
@@ -3,6 +3,7 @@ export interface DeviceJsonInterface {
3
3
  name: string | null;
4
4
  index: number | null;
5
5
  batteryStatus: string | null;
6
+ batteryLevel: number | null;
6
7
  batteryVoltage: number | null;
7
8
  manufacturer: string | null;
8
9
  serialNumber: string | null;
@@ -11,7 +11,7 @@ var RiderPosition;
11
11
  RiderPosition[RiderPosition["STANDING"] = 1] = "STANDING";
12
12
  RiderPosition[RiderPosition["TRANSITION_TO_SEATED"] = 2] = "TRANSITION_TO_SEATED";
13
13
  RiderPosition[RiderPosition["TRANSITION_TO_STANDING"] = 3] = "TRANSITION_TO_STANDING";
14
- })(RiderPosition = exports.RiderPosition || (exports.RiderPosition = {}));
14
+ })(RiderPosition || (exports.RiderPosition = RiderPosition = {}));
15
15
  class DataCyclingPosition extends data_cycling_dynamics_1.DataCyclingDynamics {
16
16
  }
17
17
  exports.DataCyclingPosition = DataCyclingPosition;
@@ -16,4 +16,4 @@ var Feelings;
16
16
  Feelings[Feelings["Good"] = 3] = "Good";
17
17
  Feelings[Feelings["Very Good"] = 4] = "Very Good";
18
18
  Feelings[Feelings["Excellent"] = 5] = "Excellent";
19
- })(Feelings = exports.Feelings || (exports.Feelings = {}));
19
+ })(Feelings || (exports.Feelings = Feelings = {}));
@@ -5,4 +5,4 @@ var UnitSystem;
5
5
  (function (UnitSystem) {
6
6
  UnitSystem[UnitSystem["Metric"] = 0] = "Metric";
7
7
  UnitSystem[UnitSystem["Imperial"] = 1] = "Imperial";
8
- })(UnitSystem = exports.UnitSystem || (exports.UnitSystem = {}));
8
+ })(UnitSystem || (exports.UnitSystem = UnitSystem = {}));
@@ -24,4 +24,4 @@ var RPEBorgCR10SCale;
24
24
  RPEBorgCR10SCale[RPEBorgCR10SCale["Very severe"] = 8] = "Very severe";
25
25
  RPEBorgCR10SCale[RPEBorgCR10SCale["Extreme"] = 9] = "Extreme";
26
26
  RPEBorgCR10SCale[RPEBorgCR10SCale["Maximal"] = 10] = "Maximal";
27
- })(RPEBorgCR10SCale = exports.RPEBorgCR10SCale || (exports.RPEBorgCR10SCale = {}));
27
+ })(RPEBorgCR10SCale || (exports.RPEBorgCR10SCale = RPEBorgCR10SCale = {}));
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
21
35
  Object.defineProperty(exports, "__esModule", { value: true });
22
36
  const fs = __importStar(require("fs"));
23
37
  const path = __importStar(require("path"));
@@ -34,12 +48,12 @@ describe('DataStore Export Verification', () => {
34
48
  'data.json.interface.ts',
35
49
  'data.position.interface.ts',
36
50
  'data.spec.ts',
37
- 'data.ts',
38
- 'data.string.ts',
39
- 'data.number.ts',
40
- 'data.boolean.ts',
41
- 'data.percent.ts',
42
- 'data.array.ts',
51
+ 'data.ts', // Base class
52
+ 'data.string.ts', // Base class
53
+ 'data.number.ts', // Base class
54
+ 'data.boolean.ts', // Base class
55
+ 'data.percent.ts', // Base class or abstract?
56
+ 'data.array.ts', // Base class
43
57
  'data.balance.ts' // interface/base
44
58
  ];
45
59
  files.forEach(file => {
@@ -363,7 +363,7 @@ exports.DataStore = {
363
363
  DataVerticalSpeedMinMilesPerHour: data_vertical_speed_min_1.DataVerticalSpeedMinMilesPerHour,
364
364
  DataIBI: data_ibi_1.DataIBI,
365
365
  DataSteps: data_steps_1.DataSteps,
366
- DataStepsOld: data_steps_old_1.DataStepsOld,
366
+ DataStepsOld: data_steps_old_1.DataStepsOld, // @todo find way to make this easy to migrate for projects that persist data based on types
367
367
  DataStrydAltitude: // @todo find way to make this easy to migrate for projects that persist data based on types
368
368
  data_stryd_altitude_1.DataStrydAltitude,
369
369
  DataStrydSpeed: data_stryd_speed_1.DataStrydSpeed,
@@ -7,4 +7,4 @@ var FileType;
7
7
  FileType["TCX"] = "tcx";
8
8
  FileType["FIT"] = "fit";
9
9
  FileType["SUUNTO"] = "suunto";
10
- })(FileType = exports.FileType || (exports.FileType = {}));
10
+ })(FileType || (exports.FileType = FileType = {}));
@@ -3,5 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ImporterFitCorosDeviceNames = void 0;
4
4
  exports.ImporterFitCorosDeviceNames = {
5
5
  802: 'PACE 2',
6
- 841: 'APEX Pro'
6
+ 841: 'APEX Pro',
7
+ 821: 'APEX'
7
8
  };
@@ -1,8 +1,9 @@
1
1
  import { EventInterface } from '../../../event.interface';
2
2
  import { CreatorInterface } from '../../../../creators/creator.interface';
3
3
  import { ActivityParsingOptions } from '../../../../activities/activity-parsing-options';
4
+ import { Buffer } from 'buffer';
4
5
  export declare class EventImporterFIT {
5
- static getFromArrayBuffer(arrayBuffer: ArrayBuffer, options?: ActivityParsingOptions, name?: string): Promise<EventInterface>;
6
+ static getFromArrayBuffer(arrayBuffer: ArrayBuffer | Buffer<ArrayBuffer>, options?: ActivityParsingOptions, name?: string): Promise<EventInterface>;
6
7
  /**
7
8
  * Tell if an activity is lengths based (e.g. Pool swimming activities)
8
9
  * @param sessionObject
@@ -119,6 +119,7 @@ exports.ImporterFitGarminDeviceNames = {
119
119
  1328: 'Forerunner 910XT',
120
120
  1333: 'Edge 800',
121
121
  1334: 'Edge 800',
122
+ 1341: 'Alf 04',
122
123
  1345: 'Forerunner 610',
123
124
  1360: 'Forerunner 210',
124
125
  1386: 'Edge 800',
@@ -210,7 +211,7 @@ exports.ImporterFitGarminDeviceNames = {
210
211
  2290: 'Edge 20',
211
212
  2292: 'Approach X40',
212
213
  2293: 'Fenix 3',
213
- 2294: 'VivoSmart',
214
+ 2294: 'VivoSmart EM',
214
215
  2310: 'Forerunner 630',
215
216
  2311: 'Forerunner 630',
216
217
  2313: 'Forerunner 230',
@@ -272,6 +273,7 @@ exports.ImporterFitGarminDeviceNames = {
272
273
  2769: 'Foretrex 601 701',
273
274
  2772: 'VivoMove HR',
274
275
  2713: 'Edge 1030',
276
+ 2727: 'Forerunner 35',
275
277
  2796: 'Fenix 5',
276
278
  2797: 'Fenix 5S',
277
279
  2798: 'Fenix 5X',
@@ -314,9 +316,11 @@ exports.ImporterFitGarminDeviceNames = {
314
316
  3134: 'Fenix 5S Plus',
315
317
  3135: 'Fenix 5X Plus',
316
318
  3142: 'Edge 520 Plus',
319
+ 3143: 'Descent T1',
317
320
  3144: 'Forerunner 235L',
318
321
  3145: 'Forerunner 245',
319
322
  3163: 'VivoActive 3M',
323
+ 3192: 'Speed Sensor 2 ',
320
324
  3218: 'VivoSmart 4',
321
325
  3224: 'VivoActive 4',
322
326
  3225: 'VivoActive 4',
@@ -365,12 +369,13 @@ exports.ImporterFitGarminDeviceNames = {
365
369
  3558: 'Edge 130 Plus',
366
370
  3570: 'Edge 1030 Plus',
367
371
  3589: 'Forerunner 745',
372
+ 3596: 'Venu SQ',
368
373
  3600: 'Venu SQ',
369
374
  3615: 'Lily',
370
375
  3624: 'Marq Adventurer',
371
376
  3638: 'Enduro',
372
- 3648: 'Marq Adventurer',
373
377
  3639: 'Swim 2',
378
+ 3648: 'Marq Adventurer',
374
379
  3652: 'Forerunner 945',
375
380
  3703: 'Venu 2',
376
381
  3704: 'Venu 2S',
@@ -384,19 +389,73 @@ exports.ImporterFitGarminDeviceNames = {
384
389
  3823: 'Approach S12',
385
390
  3872: 'Enduro',
386
391
  3837: 'Venu SQ',
392
+ 3843: 'Edge 1040',
387
393
  3850: 'Marq Golfer',
394
+ 3851: 'Venu 2 Plus',
395
+ 3865: 'Gnss',
388
396
  3869: 'Forerunner 55',
397
+ 3888: 'Instinct 2',
398
+ 3905: 'Fenix 7S',
399
+ 3906: 'Fenix 7',
400
+ 3907: 'Fenix 7X',
401
+ 3908: 'Fenix 7S',
402
+ 3909: 'Fenix 7',
403
+ 3910: 'Fenix 7X',
389
404
  3930: 'Descent MK 2S',
390
405
  3934: 'Approach S42',
406
+ 3943: 'Epix Gen 2',
407
+ 3944: 'Epix Gen 2',
391
408
  3949: 'Venu 2S',
392
409
  3950: 'Venu 2',
393
410
  3978: 'Forerunner 945',
394
411
  3986: 'Approach S12',
412
+ 3990: 'Forerunner 255 Music',
413
+ 3991: 'Forerunner 255 Music',
414
+ 3992: 'Forerunner 255',
415
+ 3993: 'Forerunner 255',
395
416
  4002: 'Approach S42',
417
+ 4005: 'Descent G1',
418
+ 4017: 'Venu 2 Plus',
419
+ 4024: 'Forerunner 955',
396
420
  4033: 'Forerunner 55',
421
+ 4061: 'Edge 540',
422
+ 4062: 'Edge 840',
423
+ 4063: 'Vivosmart 5',
424
+ 4071: 'Instinct 2',
425
+ 4115: 'Venu SQ 2',
426
+ 4116: 'Venu SQ 2MUSIC',
427
+ 4124: 'Marq Gen 2 Aviator',
428
+ 4125: 'D2 Air X10',
429
+ 4132: 'Descent G1',
430
+ 4135: 'Tactix 7',
431
+ 4155: 'Instinct Crossover',
432
+ 4169: 'Edge Explore 2',
433
+ 4222: 'Descent MK 3',
434
+ 4223: 'Descent MK 3I',
435
+ 4233: 'Approach S70',
436
+ 4257: 'Forerunner 265',
437
+ 4258: 'Forerunner 265',
438
+ 4260: 'Venu 3',
439
+ 4261: 'Venu 3S',
440
+ 4305: 'Edge 1040',
441
+ 4312: 'Epix Gen 2 Pro 42',
442
+ 4313: 'Epix Gen 2 Pro 47',
443
+ 4314: 'Epix Gen 2 Pro 51',
444
+ 4315: 'Forerunner 965',
445
+ 4341: 'Enduro 2',
446
+ 4374: 'Fenix 7S Pro Solar',
447
+ 4375: 'Fenix 7 Pro Solar',
448
+ 4376: 'Fenix 7X Pro Solar',
449
+ 4380: 'Lily 2',
450
+ 4394: 'Instinct 2X',
451
+ 4426: 'VivoActive 5',
452
+ 4442: 'Descent T2',
453
+ 4472: 'Marq Gen 2 Commander',
454
+ 4556: 'D2 H1 Pro',
397
455
  10014: 'Edge Remote',
398
456
  20533: 'Tacx Training App',
399
457
  20534: 'Tacx Training App',
458
+ 20565: 'Tacx Training App Catalyst',
400
459
  20119: 'Training Center',
401
460
  30045: 'Tacx Training App',
402
461
  30046: 'Tacx Training App',