suunto-api-wrapper 1.2.0 → 1.3.0
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/README.md +35 -2
- package/dist/index.d.mts +375 -61
- package/dist/index.d.ts +375 -61
- package/dist/index.js +244 -5
- package/dist/index.mjs +235 -5
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -24,15 +24,24 @@ __export(index_exports, {
|
|
|
24
24
|
GearResource: () => GearResource,
|
|
25
25
|
HttpClient: () => HttpClient,
|
|
26
26
|
HttpError: () => HttpError,
|
|
27
|
+
SPORTS_TRACKER_247_API: () => SPORTS_TRACKER_247_API,
|
|
27
28
|
SPORTS_TRACKER_API: () => SPORTS_TRACKER_API,
|
|
29
|
+
SuuntoActivityType: () => SuuntoActivityType,
|
|
28
30
|
SuuntoClient: () => SuuntoClient,
|
|
29
31
|
UsersResource: () => UsersResource,
|
|
32
|
+
WellnessResource: () => WellnessResource,
|
|
30
33
|
WorkoutsResource: () => WorkoutsResource,
|
|
31
34
|
generateXtotp: () => generateXtotp,
|
|
35
|
+
getActivityExport: () => getActivityExport,
|
|
32
36
|
getLatestGear: () => getLatestGear,
|
|
33
37
|
getOwnWorkouts: () => getOwnWorkouts,
|
|
38
|
+
getRecoveryExport: () => getRecoveryExport,
|
|
39
|
+
getSleepExport: () => getSleepExport,
|
|
40
|
+
getSleepStagesExport: () => getSleepStagesExport,
|
|
34
41
|
getUserByName: () => getUserByName,
|
|
42
|
+
getWorkoutStats: () => getWorkoutStats,
|
|
35
43
|
getWorkouts: () => getWorkouts,
|
|
44
|
+
getWorkoutsWithin: () => getWorkoutsWithin,
|
|
36
45
|
login: () => login,
|
|
37
46
|
searchUsers: () => searchUsers,
|
|
38
47
|
secondsUntilRollover: () => secondsUntilRollover,
|
|
@@ -178,6 +187,9 @@ async function parseBody(response) {
|
|
|
178
187
|
const contentType = response.headers.get("content-type") ?? "";
|
|
179
188
|
const text = await response.text();
|
|
180
189
|
if (!text) return void 0;
|
|
190
|
+
if (contentType.includes("application/x-ndjson") || contentType.includes("application/jsonl") || contentType.includes("application/x-jsonlines")) {
|
|
191
|
+
return text.split(/\r?\n/).filter((line) => line.length > 0).map((line) => JSON.parse(line));
|
|
192
|
+
}
|
|
181
193
|
if (contentType.includes("application/json")) {
|
|
182
194
|
try {
|
|
183
195
|
return JSON.parse(text);
|
|
@@ -290,6 +302,131 @@ function sessionTokenFrom(response) {
|
|
|
290
302
|
return response.sessionkey;
|
|
291
303
|
}
|
|
292
304
|
|
|
305
|
+
// src/workouts/types.ts
|
|
306
|
+
var SuuntoActivityType = /* @__PURE__ */ ((SuuntoActivityType2) => {
|
|
307
|
+
SuuntoActivityType2[SuuntoActivityType2["WALKING"] = 0] = "WALKING";
|
|
308
|
+
SuuntoActivityType2[SuuntoActivityType2["RUNNING"] = 1] = "RUNNING";
|
|
309
|
+
SuuntoActivityType2[SuuntoActivityType2["CYCLING"] = 2] = "CYCLING";
|
|
310
|
+
SuuntoActivityType2[SuuntoActivityType2["CROSS_COUNTRY_SKIING"] = 3] = "CROSS_COUNTRY_SKIING";
|
|
311
|
+
SuuntoActivityType2[SuuntoActivityType2["OTHER_1"] = 4] = "OTHER_1";
|
|
312
|
+
SuuntoActivityType2[SuuntoActivityType2["OTHER_2"] = 5] = "OTHER_2";
|
|
313
|
+
SuuntoActivityType2[SuuntoActivityType2["OTHER_3"] = 6] = "OTHER_3";
|
|
314
|
+
SuuntoActivityType2[SuuntoActivityType2["OTHER_4"] = 7] = "OTHER_4";
|
|
315
|
+
SuuntoActivityType2[SuuntoActivityType2["OTHER_5"] = 8] = "OTHER_5";
|
|
316
|
+
SuuntoActivityType2[SuuntoActivityType2["OTHER_6"] = 9] = "OTHER_6";
|
|
317
|
+
SuuntoActivityType2[SuuntoActivityType2["MOUNTAIN_BIKING"] = 10] = "MOUNTAIN_BIKING";
|
|
318
|
+
SuuntoActivityType2[SuuntoActivityType2["HIKING"] = 11] = "HIKING";
|
|
319
|
+
SuuntoActivityType2[SuuntoActivityType2["ROLLER_SKATING"] = 12] = "ROLLER_SKATING";
|
|
320
|
+
SuuntoActivityType2[SuuntoActivityType2["DOWNHILL_SKIING"] = 13] = "DOWNHILL_SKIING";
|
|
321
|
+
SuuntoActivityType2[SuuntoActivityType2["PADDLING"] = 14] = "PADDLING";
|
|
322
|
+
SuuntoActivityType2[SuuntoActivityType2["ROWING"] = 15] = "ROWING";
|
|
323
|
+
SuuntoActivityType2[SuuntoActivityType2["GOLF"] = 16] = "GOLF";
|
|
324
|
+
SuuntoActivityType2[SuuntoActivityType2["INDOOR"] = 17] = "INDOOR";
|
|
325
|
+
SuuntoActivityType2[SuuntoActivityType2["PARKOUR"] = 18] = "PARKOUR";
|
|
326
|
+
SuuntoActivityType2[SuuntoActivityType2["BALLGAMES"] = 19] = "BALLGAMES";
|
|
327
|
+
SuuntoActivityType2[SuuntoActivityType2["OUTDOOR_GYM"] = 20] = "OUTDOOR_GYM";
|
|
328
|
+
SuuntoActivityType2[SuuntoActivityType2["SWIMMING"] = 21] = "SWIMMING";
|
|
329
|
+
SuuntoActivityType2[SuuntoActivityType2["TRAIL_RUNNING"] = 22] = "TRAIL_RUNNING";
|
|
330
|
+
SuuntoActivityType2[SuuntoActivityType2["GYM"] = 23] = "GYM";
|
|
331
|
+
SuuntoActivityType2[SuuntoActivityType2["NORDIC_WALKING"] = 24] = "NORDIC_WALKING";
|
|
332
|
+
SuuntoActivityType2[SuuntoActivityType2["HORSEBACK_RIDING"] = 25] = "HORSEBACK_RIDING";
|
|
333
|
+
SuuntoActivityType2[SuuntoActivityType2["MOTOR_SPORTS"] = 26] = "MOTOR_SPORTS";
|
|
334
|
+
SuuntoActivityType2[SuuntoActivityType2["SKATEBOARDING"] = 27] = "SKATEBOARDING";
|
|
335
|
+
SuuntoActivityType2[SuuntoActivityType2["WATER_SPORTS"] = 28] = "WATER_SPORTS";
|
|
336
|
+
SuuntoActivityType2[SuuntoActivityType2["CLIMBING"] = 29] = "CLIMBING";
|
|
337
|
+
SuuntoActivityType2[SuuntoActivityType2["SNOWBOARDING"] = 30] = "SNOWBOARDING";
|
|
338
|
+
SuuntoActivityType2[SuuntoActivityType2["SKI_TOURING"] = 31] = "SKI_TOURING";
|
|
339
|
+
SuuntoActivityType2[SuuntoActivityType2["FITNESS_CLASS"] = 32] = "FITNESS_CLASS";
|
|
340
|
+
SuuntoActivityType2[SuuntoActivityType2["SOCCER"] = 33] = "SOCCER";
|
|
341
|
+
SuuntoActivityType2[SuuntoActivityType2["TENNIS"] = 34] = "TENNIS";
|
|
342
|
+
SuuntoActivityType2[SuuntoActivityType2["BASKETBALL"] = 35] = "BASKETBALL";
|
|
343
|
+
SuuntoActivityType2[SuuntoActivityType2["BADMINTON"] = 36] = "BADMINTON";
|
|
344
|
+
SuuntoActivityType2[SuuntoActivityType2["BASEBALL"] = 37] = "BASEBALL";
|
|
345
|
+
SuuntoActivityType2[SuuntoActivityType2["VOLLEYBALL"] = 38] = "VOLLEYBALL";
|
|
346
|
+
SuuntoActivityType2[SuuntoActivityType2["AMERICAN_FOOTBALL"] = 39] = "AMERICAN_FOOTBALL";
|
|
347
|
+
SuuntoActivityType2[SuuntoActivityType2["TABLE_TENNIS"] = 40] = "TABLE_TENNIS";
|
|
348
|
+
SuuntoActivityType2[SuuntoActivityType2["RACQUETBALL"] = 41] = "RACQUETBALL";
|
|
349
|
+
SuuntoActivityType2[SuuntoActivityType2["SQUASH"] = 42] = "SQUASH";
|
|
350
|
+
SuuntoActivityType2[SuuntoActivityType2["FLOORBALL"] = 43] = "FLOORBALL";
|
|
351
|
+
SuuntoActivityType2[SuuntoActivityType2["HANDBALL"] = 44] = "HANDBALL";
|
|
352
|
+
SuuntoActivityType2[SuuntoActivityType2["SOFTBALL"] = 45] = "SOFTBALL";
|
|
353
|
+
SuuntoActivityType2[SuuntoActivityType2["BOWLING"] = 46] = "BOWLING";
|
|
354
|
+
SuuntoActivityType2[SuuntoActivityType2["CRICKET"] = 47] = "CRICKET";
|
|
355
|
+
SuuntoActivityType2[SuuntoActivityType2["RUGBY"] = 48] = "RUGBY";
|
|
356
|
+
SuuntoActivityType2[SuuntoActivityType2["ICE_SKATING"] = 49] = "ICE_SKATING";
|
|
357
|
+
SuuntoActivityType2[SuuntoActivityType2["ICE_HOCKEY"] = 50] = "ICE_HOCKEY";
|
|
358
|
+
SuuntoActivityType2[SuuntoActivityType2["YOGA"] = 51] = "YOGA";
|
|
359
|
+
SuuntoActivityType2[SuuntoActivityType2["INDOOR_CYCLING"] = 52] = "INDOOR_CYCLING";
|
|
360
|
+
SuuntoActivityType2[SuuntoActivityType2["TREADMILL"] = 53] = "TREADMILL";
|
|
361
|
+
SuuntoActivityType2[SuuntoActivityType2["CROSSFIT"] = 54] = "CROSSFIT";
|
|
362
|
+
SuuntoActivityType2[SuuntoActivityType2["CROSSTRAINER"] = 55] = "CROSSTRAINER";
|
|
363
|
+
SuuntoActivityType2[SuuntoActivityType2["ROLLER_SKIING"] = 56] = "ROLLER_SKIING";
|
|
364
|
+
SuuntoActivityType2[SuuntoActivityType2["INDOOR_ROWING"] = 57] = "INDOOR_ROWING";
|
|
365
|
+
SuuntoActivityType2[SuuntoActivityType2["STRETCHING"] = 58] = "STRETCHING";
|
|
366
|
+
SuuntoActivityType2[SuuntoActivityType2["TRACK_AND_FIELD"] = 59] = "TRACK_AND_FIELD";
|
|
367
|
+
SuuntoActivityType2[SuuntoActivityType2["ORIENTEERING"] = 60] = "ORIENTEERING";
|
|
368
|
+
SuuntoActivityType2[SuuntoActivityType2["SUP"] = 61] = "SUP";
|
|
369
|
+
SuuntoActivityType2[SuuntoActivityType2["COMBAT_SPORTS"] = 62] = "COMBAT_SPORTS";
|
|
370
|
+
SuuntoActivityType2[SuuntoActivityType2["KETTLEBELL"] = 63] = "KETTLEBELL";
|
|
371
|
+
SuuntoActivityType2[SuuntoActivityType2["DANCING"] = 64] = "DANCING";
|
|
372
|
+
SuuntoActivityType2[SuuntoActivityType2["SNOWSHOEING"] = 65] = "SNOWSHOEING";
|
|
373
|
+
SuuntoActivityType2[SuuntoActivityType2["FRISBEE_GOLF"] = 66] = "FRISBEE_GOLF";
|
|
374
|
+
SuuntoActivityType2[SuuntoActivityType2["FUTSAL"] = 67] = "FUTSAL";
|
|
375
|
+
SuuntoActivityType2[SuuntoActivityType2["MULTISPORT"] = 68] = "MULTISPORT";
|
|
376
|
+
SuuntoActivityType2[SuuntoActivityType2["AEROBICS"] = 69] = "AEROBICS";
|
|
377
|
+
SuuntoActivityType2[SuuntoActivityType2["TREKKING"] = 70] = "TREKKING";
|
|
378
|
+
SuuntoActivityType2[SuuntoActivityType2["SAILING"] = 71] = "SAILING";
|
|
379
|
+
SuuntoActivityType2[SuuntoActivityType2["KAYAKING"] = 72] = "KAYAKING";
|
|
380
|
+
SuuntoActivityType2[SuuntoActivityType2["CIRCUIT_TRAINING"] = 73] = "CIRCUIT_TRAINING";
|
|
381
|
+
SuuntoActivityType2[SuuntoActivityType2["TRIATHLON"] = 74] = "TRIATHLON";
|
|
382
|
+
SuuntoActivityType2[SuuntoActivityType2["PADEL"] = 75] = "PADEL";
|
|
383
|
+
SuuntoActivityType2[SuuntoActivityType2["CHEERLEADING"] = 76] = "CHEERLEADING";
|
|
384
|
+
SuuntoActivityType2[SuuntoActivityType2["BOXING"] = 77] = "BOXING";
|
|
385
|
+
SuuntoActivityType2[SuuntoActivityType2["SCUBADIVING"] = 78] = "SCUBADIVING";
|
|
386
|
+
SuuntoActivityType2[SuuntoActivityType2["FREEDIVING"] = 79] = "FREEDIVING";
|
|
387
|
+
SuuntoActivityType2[SuuntoActivityType2["ADVENTURE_RACING"] = 80] = "ADVENTURE_RACING";
|
|
388
|
+
SuuntoActivityType2[SuuntoActivityType2["GYMNASTICS"] = 81] = "GYMNASTICS";
|
|
389
|
+
SuuntoActivityType2[SuuntoActivityType2["CANOEING"] = 82] = "CANOEING";
|
|
390
|
+
SuuntoActivityType2[SuuntoActivityType2["MOUNTAINEERING"] = 83] = "MOUNTAINEERING";
|
|
391
|
+
SuuntoActivityType2[SuuntoActivityType2["TELEMARKSKIING"] = 84] = "TELEMARKSKIING";
|
|
392
|
+
SuuntoActivityType2[SuuntoActivityType2["OPENWATER_SWIMMING"] = 85] = "OPENWATER_SWIMMING";
|
|
393
|
+
SuuntoActivityType2[SuuntoActivityType2["WINDSURFING"] = 86] = "WINDSURFING";
|
|
394
|
+
SuuntoActivityType2[SuuntoActivityType2["KITESURFING_KITING"] = 87] = "KITESURFING_KITING";
|
|
395
|
+
SuuntoActivityType2[SuuntoActivityType2["PARAGLIDING"] = 88] = "PARAGLIDING";
|
|
396
|
+
SuuntoActivityType2[SuuntoActivityType2["SNORKELING"] = 90] = "SNORKELING";
|
|
397
|
+
SuuntoActivityType2[SuuntoActivityType2["SURFING"] = 91] = "SURFING";
|
|
398
|
+
SuuntoActivityType2[SuuntoActivityType2["SWIMRUN"] = 92] = "SWIMRUN";
|
|
399
|
+
SuuntoActivityType2[SuuntoActivityType2["DUATHLON"] = 93] = "DUATHLON";
|
|
400
|
+
SuuntoActivityType2[SuuntoActivityType2["AQUATHLON"] = 94] = "AQUATHLON";
|
|
401
|
+
SuuntoActivityType2[SuuntoActivityType2["OBSTACLE_RACING"] = 95] = "OBSTACLE_RACING";
|
|
402
|
+
SuuntoActivityType2[SuuntoActivityType2["FISHING"] = 96] = "FISHING";
|
|
403
|
+
SuuntoActivityType2[SuuntoActivityType2["HUNTING"] = 97] = "HUNTING";
|
|
404
|
+
SuuntoActivityType2[SuuntoActivityType2["GRAVEL_CYCLING"] = 99] = "GRAVEL_CYCLING";
|
|
405
|
+
SuuntoActivityType2[SuuntoActivityType2["MERMAIDING"] = 100] = "MERMAIDING";
|
|
406
|
+
SuuntoActivityType2[SuuntoActivityType2["SPEARFISHING"] = 101] = "SPEARFISHING";
|
|
407
|
+
SuuntoActivityType2[SuuntoActivityType2["JUMP_ROPE"] = 102] = "JUMP_ROPE";
|
|
408
|
+
SuuntoActivityType2[SuuntoActivityType2["TRACK_RUNNING"] = 103] = "TRACK_RUNNING";
|
|
409
|
+
SuuntoActivityType2[SuuntoActivityType2["CALISTHENICS"] = 104] = "CALISTHENICS";
|
|
410
|
+
SuuntoActivityType2[SuuntoActivityType2["E_BIKING"] = 105] = "E_BIKING";
|
|
411
|
+
SuuntoActivityType2[SuuntoActivityType2["E_MTB"] = 106] = "E_MTB";
|
|
412
|
+
SuuntoActivityType2[SuuntoActivityType2["BACKCOUNTRY_SKIING"] = 107] = "BACKCOUNTRY_SKIING";
|
|
413
|
+
SuuntoActivityType2[SuuntoActivityType2["WHEELCHAIR"] = 108] = "WHEELCHAIR";
|
|
414
|
+
SuuntoActivityType2[SuuntoActivityType2["HAND_CYCLING"] = 109] = "HAND_CYCLING";
|
|
415
|
+
SuuntoActivityType2[SuuntoActivityType2["SPLIT_BOARDING"] = 110] = "SPLIT_BOARDING";
|
|
416
|
+
SuuntoActivityType2[SuuntoActivityType2["BIATHLON"] = 111] = "BIATHLON";
|
|
417
|
+
SuuntoActivityType2[SuuntoActivityType2["MEDITATION"] = 112] = "MEDITATION";
|
|
418
|
+
SuuntoActivityType2[SuuntoActivityType2["FIELD_HOCKEY"] = 113] = "FIELD_HOCKEY";
|
|
419
|
+
SuuntoActivityType2[SuuntoActivityType2["CYCLOCROSS"] = 114] = "CYCLOCROSS";
|
|
420
|
+
SuuntoActivityType2[SuuntoActivityType2["VERTICAL_RUN"] = 115] = "VERTICAL_RUN";
|
|
421
|
+
SuuntoActivityType2[SuuntoActivityType2["SKI_MOUNTAINEERING"] = 116] = "SKI_MOUNTAINEERING";
|
|
422
|
+
SuuntoActivityType2[SuuntoActivityType2["SKATE_SKIING"] = 117] = "SKATE_SKIING";
|
|
423
|
+
SuuntoActivityType2[SuuntoActivityType2["CLASSIC_SKIING"] = 118] = "CLASSIC_SKIING";
|
|
424
|
+
SuuntoActivityType2[SuuntoActivityType2["CHORES"] = 119] = "CHORES";
|
|
425
|
+
SuuntoActivityType2[SuuntoActivityType2["PILATES"] = 120] = "PILATES";
|
|
426
|
+
SuuntoActivityType2[SuuntoActivityType2["NEW_YOGA"] = 121] = "NEW_YOGA";
|
|
427
|
+
return SuuntoActivityType2;
|
|
428
|
+
})(SuuntoActivityType || {});
|
|
429
|
+
|
|
293
430
|
// src/workouts/index.ts
|
|
294
431
|
var DEFAULT_WORKOUT_EXTENSIONS = [
|
|
295
432
|
"SummaryExtension" /* Summary */,
|
|
@@ -337,6 +474,28 @@ async function getWorkout(client, username, workoutKey, params = {}) {
|
|
|
337
474
|
);
|
|
338
475
|
return res.data;
|
|
339
476
|
}
|
|
477
|
+
async function getWorkoutsWithin(client, params) {
|
|
478
|
+
const { lowerLat, lowerLng, upperLat, upperLng, limit = 50 } = params;
|
|
479
|
+
const res = await client.get(
|
|
480
|
+
"/apiserver/v1/workouts/public/within",
|
|
481
|
+
{
|
|
482
|
+
query: {
|
|
483
|
+
lowerlat: lowerLat,
|
|
484
|
+
lowerlng: lowerLng,
|
|
485
|
+
upperlat: upperLat,
|
|
486
|
+
upperlng: upperLng,
|
|
487
|
+
limit
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
);
|
|
491
|
+
return res.data;
|
|
492
|
+
}
|
|
493
|
+
async function getWorkoutStats(client, username) {
|
|
494
|
+
const res = await client.get(
|
|
495
|
+
`/apiserver/v1/workouts/${encodeURIComponent(username)}/stats`
|
|
496
|
+
);
|
|
497
|
+
return res.data;
|
|
498
|
+
}
|
|
340
499
|
var WorkoutsResource = class {
|
|
341
500
|
constructor(client) {
|
|
342
501
|
this.client = client;
|
|
@@ -356,6 +515,17 @@ var WorkoutsResource = class {
|
|
|
356
515
|
byKey(username, workoutKey, params) {
|
|
357
516
|
return getWorkout(this.client, username, workoutKey, params);
|
|
358
517
|
}
|
|
518
|
+
/**
|
|
519
|
+
* Aggregated workout stats per activity for the given user. Works
|
|
520
|
+
* unauthenticated.
|
|
521
|
+
*/
|
|
522
|
+
stats(username) {
|
|
523
|
+
return getWorkoutStats(this.client, username);
|
|
524
|
+
}
|
|
525
|
+
/** Public workouts whose center falls inside a geographic bounding box. */
|
|
526
|
+
within(params) {
|
|
527
|
+
return getWorkoutsWithin(this.client, params);
|
|
528
|
+
}
|
|
359
529
|
};
|
|
360
530
|
|
|
361
531
|
// src/users/index.ts
|
|
@@ -404,6 +574,56 @@ var GearResource = class {
|
|
|
404
574
|
}
|
|
405
575
|
};
|
|
406
576
|
|
|
577
|
+
// src/wellness/types.ts
|
|
578
|
+
var SPORTS_TRACKER_247_API = "https://247.sports-tracker.com";
|
|
579
|
+
|
|
580
|
+
// src/wellness/index.ts
|
|
581
|
+
function exportQuery(params) {
|
|
582
|
+
return params.since == null ? void 0 : { since: params.since };
|
|
583
|
+
}
|
|
584
|
+
async function getSleepExport(client, params = {}) {
|
|
585
|
+
const res = await client.get("/v1/sleep/export", {
|
|
586
|
+
query: exportQuery(params)
|
|
587
|
+
});
|
|
588
|
+
return res.data;
|
|
589
|
+
}
|
|
590
|
+
async function getSleepStagesExport(client, params = {}) {
|
|
591
|
+
const res = await client.get(
|
|
592
|
+
"/v1/sleepstages/export",
|
|
593
|
+
{ query: exportQuery(params) }
|
|
594
|
+
);
|
|
595
|
+
return res.data;
|
|
596
|
+
}
|
|
597
|
+
async function getRecoveryExport(client, params = {}) {
|
|
598
|
+
const res = await client.get("/v1/recovery/export", {
|
|
599
|
+
query: exportQuery(params)
|
|
600
|
+
});
|
|
601
|
+
return res.data;
|
|
602
|
+
}
|
|
603
|
+
async function getActivityExport(client, params = {}) {
|
|
604
|
+
const res = await client.get("/v1/activity/export", {
|
|
605
|
+
query: exportQuery(params)
|
|
606
|
+
});
|
|
607
|
+
return res.data;
|
|
608
|
+
}
|
|
609
|
+
var WellnessResource = class {
|
|
610
|
+
constructor(client) {
|
|
611
|
+
this.client = client;
|
|
612
|
+
}
|
|
613
|
+
sleep(params) {
|
|
614
|
+
return getSleepExport(this.client, params);
|
|
615
|
+
}
|
|
616
|
+
sleepStages(params) {
|
|
617
|
+
return getSleepStagesExport(this.client, params);
|
|
618
|
+
}
|
|
619
|
+
recovery(params) {
|
|
620
|
+
return getRecoveryExport(this.client, params);
|
|
621
|
+
}
|
|
622
|
+
activity(params) {
|
|
623
|
+
return getActivityExport(this.client, params);
|
|
624
|
+
}
|
|
625
|
+
};
|
|
626
|
+
|
|
407
627
|
// src/client.ts
|
|
408
628
|
var SuuntoClient = class _SuuntoClient {
|
|
409
629
|
constructor(options) {
|
|
@@ -412,22 +632,32 @@ var SuuntoClient = class _SuuntoClient {
|
|
|
412
632
|
sessionKey,
|
|
413
633
|
userAgent = DEFAULT_USER_AGENT,
|
|
414
634
|
baseUrl,
|
|
635
|
+
baseUrl247,
|
|
415
636
|
headers,
|
|
416
637
|
...rest
|
|
417
638
|
} = options;
|
|
418
639
|
this.sessionKey = sessionKey;
|
|
640
|
+
const beforeRequest = async (ctx) => {
|
|
641
|
+
if (email) ctx.headers["x-totp"] = await generateXtotp(email);
|
|
642
|
+
if (sessionKey) ctx.headers["sttauthorization"] = sessionKey;
|
|
643
|
+
};
|
|
644
|
+
const sharedHeaders = { "user-agent": userAgent, ...headers };
|
|
419
645
|
this.http = new HttpClient({
|
|
420
646
|
baseUrl: baseUrl ?? SPORTS_TRACKER_API,
|
|
421
|
-
headers:
|
|
647
|
+
headers: sharedHeaders,
|
|
422
648
|
...rest,
|
|
423
|
-
beforeRequest
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
649
|
+
beforeRequest
|
|
650
|
+
});
|
|
651
|
+
this.http247 = new HttpClient({
|
|
652
|
+
baseUrl: baseUrl247 ?? SPORTS_TRACKER_247_API,
|
|
653
|
+
headers: sharedHeaders,
|
|
654
|
+
...rest,
|
|
655
|
+
beforeRequest
|
|
427
656
|
});
|
|
428
657
|
this.workouts = new WorkoutsResource(this.http);
|
|
429
658
|
this.users = new UsersResource(this.http);
|
|
430
659
|
this.gear = new GearResource(this.http);
|
|
660
|
+
this.wellness = new WellnessResource(this.http247);
|
|
431
661
|
}
|
|
432
662
|
/** Log in with email/password and return an authenticated client. */
|
|
433
663
|
static async login(options) {
|
|
@@ -450,15 +680,24 @@ var SuuntoClient = class _SuuntoClient {
|
|
|
450
680
|
GearResource,
|
|
451
681
|
HttpClient,
|
|
452
682
|
HttpError,
|
|
683
|
+
SPORTS_TRACKER_247_API,
|
|
453
684
|
SPORTS_TRACKER_API,
|
|
685
|
+
SuuntoActivityType,
|
|
454
686
|
SuuntoClient,
|
|
455
687
|
UsersResource,
|
|
688
|
+
WellnessResource,
|
|
456
689
|
WorkoutsResource,
|
|
457
690
|
generateXtotp,
|
|
691
|
+
getActivityExport,
|
|
458
692
|
getLatestGear,
|
|
459
693
|
getOwnWorkouts,
|
|
694
|
+
getRecoveryExport,
|
|
695
|
+
getSleepExport,
|
|
696
|
+
getSleepStagesExport,
|
|
460
697
|
getUserByName,
|
|
698
|
+
getWorkoutStats,
|
|
461
699
|
getWorkouts,
|
|
700
|
+
getWorkoutsWithin,
|
|
462
701
|
login,
|
|
463
702
|
searchUsers,
|
|
464
703
|
secondsUntilRollover,
|
package/dist/index.mjs
CHANGED
|
@@ -136,6 +136,9 @@ async function parseBody(response) {
|
|
|
136
136
|
const contentType = response.headers.get("content-type") ?? "";
|
|
137
137
|
const text = await response.text();
|
|
138
138
|
if (!text) return void 0;
|
|
139
|
+
if (contentType.includes("application/x-ndjson") || contentType.includes("application/jsonl") || contentType.includes("application/x-jsonlines")) {
|
|
140
|
+
return text.split(/\r?\n/).filter((line) => line.length > 0).map((line) => JSON.parse(line));
|
|
141
|
+
}
|
|
139
142
|
if (contentType.includes("application/json")) {
|
|
140
143
|
try {
|
|
141
144
|
return JSON.parse(text);
|
|
@@ -248,6 +251,131 @@ function sessionTokenFrom(response) {
|
|
|
248
251
|
return response.sessionkey;
|
|
249
252
|
}
|
|
250
253
|
|
|
254
|
+
// src/workouts/types.ts
|
|
255
|
+
var SuuntoActivityType = /* @__PURE__ */ ((SuuntoActivityType2) => {
|
|
256
|
+
SuuntoActivityType2[SuuntoActivityType2["WALKING"] = 0] = "WALKING";
|
|
257
|
+
SuuntoActivityType2[SuuntoActivityType2["RUNNING"] = 1] = "RUNNING";
|
|
258
|
+
SuuntoActivityType2[SuuntoActivityType2["CYCLING"] = 2] = "CYCLING";
|
|
259
|
+
SuuntoActivityType2[SuuntoActivityType2["CROSS_COUNTRY_SKIING"] = 3] = "CROSS_COUNTRY_SKIING";
|
|
260
|
+
SuuntoActivityType2[SuuntoActivityType2["OTHER_1"] = 4] = "OTHER_1";
|
|
261
|
+
SuuntoActivityType2[SuuntoActivityType2["OTHER_2"] = 5] = "OTHER_2";
|
|
262
|
+
SuuntoActivityType2[SuuntoActivityType2["OTHER_3"] = 6] = "OTHER_3";
|
|
263
|
+
SuuntoActivityType2[SuuntoActivityType2["OTHER_4"] = 7] = "OTHER_4";
|
|
264
|
+
SuuntoActivityType2[SuuntoActivityType2["OTHER_5"] = 8] = "OTHER_5";
|
|
265
|
+
SuuntoActivityType2[SuuntoActivityType2["OTHER_6"] = 9] = "OTHER_6";
|
|
266
|
+
SuuntoActivityType2[SuuntoActivityType2["MOUNTAIN_BIKING"] = 10] = "MOUNTAIN_BIKING";
|
|
267
|
+
SuuntoActivityType2[SuuntoActivityType2["HIKING"] = 11] = "HIKING";
|
|
268
|
+
SuuntoActivityType2[SuuntoActivityType2["ROLLER_SKATING"] = 12] = "ROLLER_SKATING";
|
|
269
|
+
SuuntoActivityType2[SuuntoActivityType2["DOWNHILL_SKIING"] = 13] = "DOWNHILL_SKIING";
|
|
270
|
+
SuuntoActivityType2[SuuntoActivityType2["PADDLING"] = 14] = "PADDLING";
|
|
271
|
+
SuuntoActivityType2[SuuntoActivityType2["ROWING"] = 15] = "ROWING";
|
|
272
|
+
SuuntoActivityType2[SuuntoActivityType2["GOLF"] = 16] = "GOLF";
|
|
273
|
+
SuuntoActivityType2[SuuntoActivityType2["INDOOR"] = 17] = "INDOOR";
|
|
274
|
+
SuuntoActivityType2[SuuntoActivityType2["PARKOUR"] = 18] = "PARKOUR";
|
|
275
|
+
SuuntoActivityType2[SuuntoActivityType2["BALLGAMES"] = 19] = "BALLGAMES";
|
|
276
|
+
SuuntoActivityType2[SuuntoActivityType2["OUTDOOR_GYM"] = 20] = "OUTDOOR_GYM";
|
|
277
|
+
SuuntoActivityType2[SuuntoActivityType2["SWIMMING"] = 21] = "SWIMMING";
|
|
278
|
+
SuuntoActivityType2[SuuntoActivityType2["TRAIL_RUNNING"] = 22] = "TRAIL_RUNNING";
|
|
279
|
+
SuuntoActivityType2[SuuntoActivityType2["GYM"] = 23] = "GYM";
|
|
280
|
+
SuuntoActivityType2[SuuntoActivityType2["NORDIC_WALKING"] = 24] = "NORDIC_WALKING";
|
|
281
|
+
SuuntoActivityType2[SuuntoActivityType2["HORSEBACK_RIDING"] = 25] = "HORSEBACK_RIDING";
|
|
282
|
+
SuuntoActivityType2[SuuntoActivityType2["MOTOR_SPORTS"] = 26] = "MOTOR_SPORTS";
|
|
283
|
+
SuuntoActivityType2[SuuntoActivityType2["SKATEBOARDING"] = 27] = "SKATEBOARDING";
|
|
284
|
+
SuuntoActivityType2[SuuntoActivityType2["WATER_SPORTS"] = 28] = "WATER_SPORTS";
|
|
285
|
+
SuuntoActivityType2[SuuntoActivityType2["CLIMBING"] = 29] = "CLIMBING";
|
|
286
|
+
SuuntoActivityType2[SuuntoActivityType2["SNOWBOARDING"] = 30] = "SNOWBOARDING";
|
|
287
|
+
SuuntoActivityType2[SuuntoActivityType2["SKI_TOURING"] = 31] = "SKI_TOURING";
|
|
288
|
+
SuuntoActivityType2[SuuntoActivityType2["FITNESS_CLASS"] = 32] = "FITNESS_CLASS";
|
|
289
|
+
SuuntoActivityType2[SuuntoActivityType2["SOCCER"] = 33] = "SOCCER";
|
|
290
|
+
SuuntoActivityType2[SuuntoActivityType2["TENNIS"] = 34] = "TENNIS";
|
|
291
|
+
SuuntoActivityType2[SuuntoActivityType2["BASKETBALL"] = 35] = "BASKETBALL";
|
|
292
|
+
SuuntoActivityType2[SuuntoActivityType2["BADMINTON"] = 36] = "BADMINTON";
|
|
293
|
+
SuuntoActivityType2[SuuntoActivityType2["BASEBALL"] = 37] = "BASEBALL";
|
|
294
|
+
SuuntoActivityType2[SuuntoActivityType2["VOLLEYBALL"] = 38] = "VOLLEYBALL";
|
|
295
|
+
SuuntoActivityType2[SuuntoActivityType2["AMERICAN_FOOTBALL"] = 39] = "AMERICAN_FOOTBALL";
|
|
296
|
+
SuuntoActivityType2[SuuntoActivityType2["TABLE_TENNIS"] = 40] = "TABLE_TENNIS";
|
|
297
|
+
SuuntoActivityType2[SuuntoActivityType2["RACQUETBALL"] = 41] = "RACQUETBALL";
|
|
298
|
+
SuuntoActivityType2[SuuntoActivityType2["SQUASH"] = 42] = "SQUASH";
|
|
299
|
+
SuuntoActivityType2[SuuntoActivityType2["FLOORBALL"] = 43] = "FLOORBALL";
|
|
300
|
+
SuuntoActivityType2[SuuntoActivityType2["HANDBALL"] = 44] = "HANDBALL";
|
|
301
|
+
SuuntoActivityType2[SuuntoActivityType2["SOFTBALL"] = 45] = "SOFTBALL";
|
|
302
|
+
SuuntoActivityType2[SuuntoActivityType2["BOWLING"] = 46] = "BOWLING";
|
|
303
|
+
SuuntoActivityType2[SuuntoActivityType2["CRICKET"] = 47] = "CRICKET";
|
|
304
|
+
SuuntoActivityType2[SuuntoActivityType2["RUGBY"] = 48] = "RUGBY";
|
|
305
|
+
SuuntoActivityType2[SuuntoActivityType2["ICE_SKATING"] = 49] = "ICE_SKATING";
|
|
306
|
+
SuuntoActivityType2[SuuntoActivityType2["ICE_HOCKEY"] = 50] = "ICE_HOCKEY";
|
|
307
|
+
SuuntoActivityType2[SuuntoActivityType2["YOGA"] = 51] = "YOGA";
|
|
308
|
+
SuuntoActivityType2[SuuntoActivityType2["INDOOR_CYCLING"] = 52] = "INDOOR_CYCLING";
|
|
309
|
+
SuuntoActivityType2[SuuntoActivityType2["TREADMILL"] = 53] = "TREADMILL";
|
|
310
|
+
SuuntoActivityType2[SuuntoActivityType2["CROSSFIT"] = 54] = "CROSSFIT";
|
|
311
|
+
SuuntoActivityType2[SuuntoActivityType2["CROSSTRAINER"] = 55] = "CROSSTRAINER";
|
|
312
|
+
SuuntoActivityType2[SuuntoActivityType2["ROLLER_SKIING"] = 56] = "ROLLER_SKIING";
|
|
313
|
+
SuuntoActivityType2[SuuntoActivityType2["INDOOR_ROWING"] = 57] = "INDOOR_ROWING";
|
|
314
|
+
SuuntoActivityType2[SuuntoActivityType2["STRETCHING"] = 58] = "STRETCHING";
|
|
315
|
+
SuuntoActivityType2[SuuntoActivityType2["TRACK_AND_FIELD"] = 59] = "TRACK_AND_FIELD";
|
|
316
|
+
SuuntoActivityType2[SuuntoActivityType2["ORIENTEERING"] = 60] = "ORIENTEERING";
|
|
317
|
+
SuuntoActivityType2[SuuntoActivityType2["SUP"] = 61] = "SUP";
|
|
318
|
+
SuuntoActivityType2[SuuntoActivityType2["COMBAT_SPORTS"] = 62] = "COMBAT_SPORTS";
|
|
319
|
+
SuuntoActivityType2[SuuntoActivityType2["KETTLEBELL"] = 63] = "KETTLEBELL";
|
|
320
|
+
SuuntoActivityType2[SuuntoActivityType2["DANCING"] = 64] = "DANCING";
|
|
321
|
+
SuuntoActivityType2[SuuntoActivityType2["SNOWSHOEING"] = 65] = "SNOWSHOEING";
|
|
322
|
+
SuuntoActivityType2[SuuntoActivityType2["FRISBEE_GOLF"] = 66] = "FRISBEE_GOLF";
|
|
323
|
+
SuuntoActivityType2[SuuntoActivityType2["FUTSAL"] = 67] = "FUTSAL";
|
|
324
|
+
SuuntoActivityType2[SuuntoActivityType2["MULTISPORT"] = 68] = "MULTISPORT";
|
|
325
|
+
SuuntoActivityType2[SuuntoActivityType2["AEROBICS"] = 69] = "AEROBICS";
|
|
326
|
+
SuuntoActivityType2[SuuntoActivityType2["TREKKING"] = 70] = "TREKKING";
|
|
327
|
+
SuuntoActivityType2[SuuntoActivityType2["SAILING"] = 71] = "SAILING";
|
|
328
|
+
SuuntoActivityType2[SuuntoActivityType2["KAYAKING"] = 72] = "KAYAKING";
|
|
329
|
+
SuuntoActivityType2[SuuntoActivityType2["CIRCUIT_TRAINING"] = 73] = "CIRCUIT_TRAINING";
|
|
330
|
+
SuuntoActivityType2[SuuntoActivityType2["TRIATHLON"] = 74] = "TRIATHLON";
|
|
331
|
+
SuuntoActivityType2[SuuntoActivityType2["PADEL"] = 75] = "PADEL";
|
|
332
|
+
SuuntoActivityType2[SuuntoActivityType2["CHEERLEADING"] = 76] = "CHEERLEADING";
|
|
333
|
+
SuuntoActivityType2[SuuntoActivityType2["BOXING"] = 77] = "BOXING";
|
|
334
|
+
SuuntoActivityType2[SuuntoActivityType2["SCUBADIVING"] = 78] = "SCUBADIVING";
|
|
335
|
+
SuuntoActivityType2[SuuntoActivityType2["FREEDIVING"] = 79] = "FREEDIVING";
|
|
336
|
+
SuuntoActivityType2[SuuntoActivityType2["ADVENTURE_RACING"] = 80] = "ADVENTURE_RACING";
|
|
337
|
+
SuuntoActivityType2[SuuntoActivityType2["GYMNASTICS"] = 81] = "GYMNASTICS";
|
|
338
|
+
SuuntoActivityType2[SuuntoActivityType2["CANOEING"] = 82] = "CANOEING";
|
|
339
|
+
SuuntoActivityType2[SuuntoActivityType2["MOUNTAINEERING"] = 83] = "MOUNTAINEERING";
|
|
340
|
+
SuuntoActivityType2[SuuntoActivityType2["TELEMARKSKIING"] = 84] = "TELEMARKSKIING";
|
|
341
|
+
SuuntoActivityType2[SuuntoActivityType2["OPENWATER_SWIMMING"] = 85] = "OPENWATER_SWIMMING";
|
|
342
|
+
SuuntoActivityType2[SuuntoActivityType2["WINDSURFING"] = 86] = "WINDSURFING";
|
|
343
|
+
SuuntoActivityType2[SuuntoActivityType2["KITESURFING_KITING"] = 87] = "KITESURFING_KITING";
|
|
344
|
+
SuuntoActivityType2[SuuntoActivityType2["PARAGLIDING"] = 88] = "PARAGLIDING";
|
|
345
|
+
SuuntoActivityType2[SuuntoActivityType2["SNORKELING"] = 90] = "SNORKELING";
|
|
346
|
+
SuuntoActivityType2[SuuntoActivityType2["SURFING"] = 91] = "SURFING";
|
|
347
|
+
SuuntoActivityType2[SuuntoActivityType2["SWIMRUN"] = 92] = "SWIMRUN";
|
|
348
|
+
SuuntoActivityType2[SuuntoActivityType2["DUATHLON"] = 93] = "DUATHLON";
|
|
349
|
+
SuuntoActivityType2[SuuntoActivityType2["AQUATHLON"] = 94] = "AQUATHLON";
|
|
350
|
+
SuuntoActivityType2[SuuntoActivityType2["OBSTACLE_RACING"] = 95] = "OBSTACLE_RACING";
|
|
351
|
+
SuuntoActivityType2[SuuntoActivityType2["FISHING"] = 96] = "FISHING";
|
|
352
|
+
SuuntoActivityType2[SuuntoActivityType2["HUNTING"] = 97] = "HUNTING";
|
|
353
|
+
SuuntoActivityType2[SuuntoActivityType2["GRAVEL_CYCLING"] = 99] = "GRAVEL_CYCLING";
|
|
354
|
+
SuuntoActivityType2[SuuntoActivityType2["MERMAIDING"] = 100] = "MERMAIDING";
|
|
355
|
+
SuuntoActivityType2[SuuntoActivityType2["SPEARFISHING"] = 101] = "SPEARFISHING";
|
|
356
|
+
SuuntoActivityType2[SuuntoActivityType2["JUMP_ROPE"] = 102] = "JUMP_ROPE";
|
|
357
|
+
SuuntoActivityType2[SuuntoActivityType2["TRACK_RUNNING"] = 103] = "TRACK_RUNNING";
|
|
358
|
+
SuuntoActivityType2[SuuntoActivityType2["CALISTHENICS"] = 104] = "CALISTHENICS";
|
|
359
|
+
SuuntoActivityType2[SuuntoActivityType2["E_BIKING"] = 105] = "E_BIKING";
|
|
360
|
+
SuuntoActivityType2[SuuntoActivityType2["E_MTB"] = 106] = "E_MTB";
|
|
361
|
+
SuuntoActivityType2[SuuntoActivityType2["BACKCOUNTRY_SKIING"] = 107] = "BACKCOUNTRY_SKIING";
|
|
362
|
+
SuuntoActivityType2[SuuntoActivityType2["WHEELCHAIR"] = 108] = "WHEELCHAIR";
|
|
363
|
+
SuuntoActivityType2[SuuntoActivityType2["HAND_CYCLING"] = 109] = "HAND_CYCLING";
|
|
364
|
+
SuuntoActivityType2[SuuntoActivityType2["SPLIT_BOARDING"] = 110] = "SPLIT_BOARDING";
|
|
365
|
+
SuuntoActivityType2[SuuntoActivityType2["BIATHLON"] = 111] = "BIATHLON";
|
|
366
|
+
SuuntoActivityType2[SuuntoActivityType2["MEDITATION"] = 112] = "MEDITATION";
|
|
367
|
+
SuuntoActivityType2[SuuntoActivityType2["FIELD_HOCKEY"] = 113] = "FIELD_HOCKEY";
|
|
368
|
+
SuuntoActivityType2[SuuntoActivityType2["CYCLOCROSS"] = 114] = "CYCLOCROSS";
|
|
369
|
+
SuuntoActivityType2[SuuntoActivityType2["VERTICAL_RUN"] = 115] = "VERTICAL_RUN";
|
|
370
|
+
SuuntoActivityType2[SuuntoActivityType2["SKI_MOUNTAINEERING"] = 116] = "SKI_MOUNTAINEERING";
|
|
371
|
+
SuuntoActivityType2[SuuntoActivityType2["SKATE_SKIING"] = 117] = "SKATE_SKIING";
|
|
372
|
+
SuuntoActivityType2[SuuntoActivityType2["CLASSIC_SKIING"] = 118] = "CLASSIC_SKIING";
|
|
373
|
+
SuuntoActivityType2[SuuntoActivityType2["CHORES"] = 119] = "CHORES";
|
|
374
|
+
SuuntoActivityType2[SuuntoActivityType2["PILATES"] = 120] = "PILATES";
|
|
375
|
+
SuuntoActivityType2[SuuntoActivityType2["NEW_YOGA"] = 121] = "NEW_YOGA";
|
|
376
|
+
return SuuntoActivityType2;
|
|
377
|
+
})(SuuntoActivityType || {});
|
|
378
|
+
|
|
251
379
|
// src/workouts/index.ts
|
|
252
380
|
var DEFAULT_WORKOUT_EXTENSIONS = [
|
|
253
381
|
"SummaryExtension" /* Summary */,
|
|
@@ -295,6 +423,28 @@ async function getWorkout(client, username, workoutKey, params = {}) {
|
|
|
295
423
|
);
|
|
296
424
|
return res.data;
|
|
297
425
|
}
|
|
426
|
+
async function getWorkoutsWithin(client, params) {
|
|
427
|
+
const { lowerLat, lowerLng, upperLat, upperLng, limit = 50 } = params;
|
|
428
|
+
const res = await client.get(
|
|
429
|
+
"/apiserver/v1/workouts/public/within",
|
|
430
|
+
{
|
|
431
|
+
query: {
|
|
432
|
+
lowerlat: lowerLat,
|
|
433
|
+
lowerlng: lowerLng,
|
|
434
|
+
upperlat: upperLat,
|
|
435
|
+
upperlng: upperLng,
|
|
436
|
+
limit
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
);
|
|
440
|
+
return res.data;
|
|
441
|
+
}
|
|
442
|
+
async function getWorkoutStats(client, username) {
|
|
443
|
+
const res = await client.get(
|
|
444
|
+
`/apiserver/v1/workouts/${encodeURIComponent(username)}/stats`
|
|
445
|
+
);
|
|
446
|
+
return res.data;
|
|
447
|
+
}
|
|
298
448
|
var WorkoutsResource = class {
|
|
299
449
|
constructor(client) {
|
|
300
450
|
this.client = client;
|
|
@@ -314,6 +464,17 @@ var WorkoutsResource = class {
|
|
|
314
464
|
byKey(username, workoutKey, params) {
|
|
315
465
|
return getWorkout(this.client, username, workoutKey, params);
|
|
316
466
|
}
|
|
467
|
+
/**
|
|
468
|
+
* Aggregated workout stats per activity for the given user. Works
|
|
469
|
+
* unauthenticated.
|
|
470
|
+
*/
|
|
471
|
+
stats(username) {
|
|
472
|
+
return getWorkoutStats(this.client, username);
|
|
473
|
+
}
|
|
474
|
+
/** Public workouts whose center falls inside a geographic bounding box. */
|
|
475
|
+
within(params) {
|
|
476
|
+
return getWorkoutsWithin(this.client, params);
|
|
477
|
+
}
|
|
317
478
|
};
|
|
318
479
|
|
|
319
480
|
// src/users/index.ts
|
|
@@ -362,6 +523,56 @@ var GearResource = class {
|
|
|
362
523
|
}
|
|
363
524
|
};
|
|
364
525
|
|
|
526
|
+
// src/wellness/types.ts
|
|
527
|
+
var SPORTS_TRACKER_247_API = "https://247.sports-tracker.com";
|
|
528
|
+
|
|
529
|
+
// src/wellness/index.ts
|
|
530
|
+
function exportQuery(params) {
|
|
531
|
+
return params.since == null ? void 0 : { since: params.since };
|
|
532
|
+
}
|
|
533
|
+
async function getSleepExport(client, params = {}) {
|
|
534
|
+
const res = await client.get("/v1/sleep/export", {
|
|
535
|
+
query: exportQuery(params)
|
|
536
|
+
});
|
|
537
|
+
return res.data;
|
|
538
|
+
}
|
|
539
|
+
async function getSleepStagesExport(client, params = {}) {
|
|
540
|
+
const res = await client.get(
|
|
541
|
+
"/v1/sleepstages/export",
|
|
542
|
+
{ query: exportQuery(params) }
|
|
543
|
+
);
|
|
544
|
+
return res.data;
|
|
545
|
+
}
|
|
546
|
+
async function getRecoveryExport(client, params = {}) {
|
|
547
|
+
const res = await client.get("/v1/recovery/export", {
|
|
548
|
+
query: exportQuery(params)
|
|
549
|
+
});
|
|
550
|
+
return res.data;
|
|
551
|
+
}
|
|
552
|
+
async function getActivityExport(client, params = {}) {
|
|
553
|
+
const res = await client.get("/v1/activity/export", {
|
|
554
|
+
query: exportQuery(params)
|
|
555
|
+
});
|
|
556
|
+
return res.data;
|
|
557
|
+
}
|
|
558
|
+
var WellnessResource = class {
|
|
559
|
+
constructor(client) {
|
|
560
|
+
this.client = client;
|
|
561
|
+
}
|
|
562
|
+
sleep(params) {
|
|
563
|
+
return getSleepExport(this.client, params);
|
|
564
|
+
}
|
|
565
|
+
sleepStages(params) {
|
|
566
|
+
return getSleepStagesExport(this.client, params);
|
|
567
|
+
}
|
|
568
|
+
recovery(params) {
|
|
569
|
+
return getRecoveryExport(this.client, params);
|
|
570
|
+
}
|
|
571
|
+
activity(params) {
|
|
572
|
+
return getActivityExport(this.client, params);
|
|
573
|
+
}
|
|
574
|
+
};
|
|
575
|
+
|
|
365
576
|
// src/client.ts
|
|
366
577
|
var SuuntoClient = class _SuuntoClient {
|
|
367
578
|
constructor(options) {
|
|
@@ -370,22 +581,32 @@ var SuuntoClient = class _SuuntoClient {
|
|
|
370
581
|
sessionKey,
|
|
371
582
|
userAgent = DEFAULT_USER_AGENT,
|
|
372
583
|
baseUrl,
|
|
584
|
+
baseUrl247,
|
|
373
585
|
headers,
|
|
374
586
|
...rest
|
|
375
587
|
} = options;
|
|
376
588
|
this.sessionKey = sessionKey;
|
|
589
|
+
const beforeRequest = async (ctx) => {
|
|
590
|
+
if (email) ctx.headers["x-totp"] = await generateXtotp(email);
|
|
591
|
+
if (sessionKey) ctx.headers["sttauthorization"] = sessionKey;
|
|
592
|
+
};
|
|
593
|
+
const sharedHeaders = { "user-agent": userAgent, ...headers };
|
|
377
594
|
this.http = new HttpClient({
|
|
378
595
|
baseUrl: baseUrl ?? SPORTS_TRACKER_API,
|
|
379
|
-
headers:
|
|
596
|
+
headers: sharedHeaders,
|
|
380
597
|
...rest,
|
|
381
|
-
beforeRequest
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
598
|
+
beforeRequest
|
|
599
|
+
});
|
|
600
|
+
this.http247 = new HttpClient({
|
|
601
|
+
baseUrl: baseUrl247 ?? SPORTS_TRACKER_247_API,
|
|
602
|
+
headers: sharedHeaders,
|
|
603
|
+
...rest,
|
|
604
|
+
beforeRequest
|
|
385
605
|
});
|
|
386
606
|
this.workouts = new WorkoutsResource(this.http);
|
|
387
607
|
this.users = new UsersResource(this.http);
|
|
388
608
|
this.gear = new GearResource(this.http);
|
|
609
|
+
this.wellness = new WellnessResource(this.http247);
|
|
389
610
|
}
|
|
390
611
|
/** Log in with email/password and return an authenticated client. */
|
|
391
612
|
static async login(options) {
|
|
@@ -407,15 +628,24 @@ export {
|
|
|
407
628
|
GearResource,
|
|
408
629
|
HttpClient,
|
|
409
630
|
HttpError,
|
|
631
|
+
SPORTS_TRACKER_247_API,
|
|
410
632
|
SPORTS_TRACKER_API,
|
|
633
|
+
SuuntoActivityType,
|
|
411
634
|
SuuntoClient,
|
|
412
635
|
UsersResource,
|
|
636
|
+
WellnessResource,
|
|
413
637
|
WorkoutsResource,
|
|
414
638
|
generateXtotp,
|
|
639
|
+
getActivityExport,
|
|
415
640
|
getLatestGear,
|
|
416
641
|
getOwnWorkouts,
|
|
642
|
+
getRecoveryExport,
|
|
643
|
+
getSleepExport,
|
|
644
|
+
getSleepStagesExport,
|
|
417
645
|
getUserByName,
|
|
646
|
+
getWorkoutStats,
|
|
418
647
|
getWorkouts,
|
|
648
|
+
getWorkoutsWithin,
|
|
419
649
|
login,
|
|
420
650
|
searchUsers,
|
|
421
651
|
secondsUntilRollover,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "suunto-api-wrapper",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Unofficial typed TypeScript client for the Suunto app API (Sports Tracker backend). Not affiliated with or endorsed by Suunto or Sports Tracker.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"url": "https://github.com/Marius-Ar/suunto-api-wrapper"
|