@dlwiest/ts-tonal-client 0.0.1 → 0.1.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.
Files changed (48) hide show
  1. package/README.md +404 -38
  2. package/dist/examples/create-workout.d.ts +1 -0
  3. package/dist/examples/debug-daily-lifts.d.ts +1 -0
  4. package/dist/examples/delete-workout.d.ts +1 -0
  5. package/dist/examples/edit-workout.d.ts +1 -0
  6. package/dist/examples/estimate-workout.d.ts +1 -0
  7. package/dist/examples/get-achievement-stats.d.ts +2 -0
  8. package/dist/examples/get-achievements.d.ts +2 -0
  9. package/dist/examples/get-activity-summaries.d.ts +2 -0
  10. package/dist/examples/get-current-streak.d.ts +1 -0
  11. package/dist/examples/get-daily-lifts.d.ts +1 -0
  12. package/dist/examples/get-daily-metrics.d.ts +1 -0
  13. package/dist/examples/get-goal-metrics.d.ts +1 -0
  14. package/dist/examples/get-goals.d.ts +1 -0
  15. package/dist/examples/get-home-calendar.d.ts +2 -0
  16. package/dist/examples/get-metric-scores.d.ts +1 -0
  17. package/dist/examples/get-movements.d.ts +1 -0
  18. package/dist/examples/get-muscle-readiness.d.ts +1 -0
  19. package/dist/examples/get-program-by-id.d.ts +1 -0
  20. package/dist/examples/get-target-scores.d.ts +1 -0
  21. package/dist/examples/get-training-effect-goals.d.ts +1 -0
  22. package/dist/examples/get-training-types.d.ts +1 -0
  23. package/dist/examples/get-user-info.d.ts +1 -0
  24. package/dist/examples/get-user-settings.d.ts +1 -0
  25. package/dist/examples/get-user-statistics.d.ts +2 -0
  26. package/dist/examples/get-user-workouts.d.ts +1 -0
  27. package/dist/examples/get-workout-by-id.d.ts +1 -0
  28. package/dist/examples/get-workout-by-share-url.d.ts +1 -0
  29. package/dist/examples/raw-daily-lifts-test.d.ts +1 -0
  30. package/dist/index.d.ts +573 -29
  31. package/dist/index.esm.js +447 -119
  32. package/dist/index.js +451 -119
  33. package/dist/src/auth/auth-manager.d.ts +12 -0
  34. package/dist/src/client.d.ts +39 -0
  35. package/dist/src/http/http-client.d.ts +12 -0
  36. package/dist/src/index.d.ts +4 -0
  37. package/dist/src/services/movement-service.d.ts +7 -0
  38. package/dist/src/services/user-service.d.ts +51 -0
  39. package/dist/src/services/workout-service.d.ts +14 -0
  40. package/dist/src/types/auth.d.ts +18 -0
  41. package/dist/src/types/common.d.ts +1 -0
  42. package/dist/src/types/index.d.ts +6 -0
  43. package/dist/src/types/movements.d.ts +30 -0
  44. package/dist/src/types/programs.d.ts +46 -0
  45. package/dist/src/types/users.d.ts +418 -0
  46. package/dist/src/types/workouts.d.ts +120 -0
  47. package/dist/src/types.d.ts +125 -0
  48. package/package.json +43 -4
package/dist/index.d.ts CHANGED
@@ -1,3 +1,13 @@
1
+ interface TonalApiError {
2
+ error: string;
3
+ error_description?: string;
4
+ statusCode?: number;
5
+ }
6
+ declare class TonalClientError extends Error {
7
+ readonly statusCode?: number;
8
+ readonly originalError?: unknown;
9
+ constructor(message: string, statusCode?: number, originalError?: unknown);
10
+ }
1
11
  interface OAuthTokenResponse {
2
12
  access_token: string;
3
13
  id_token: string;
@@ -6,7 +16,9 @@ interface OAuthTokenResponse {
6
16
  token_type: string;
7
17
  expires_in: number;
8
18
  }
19
+
9
20
  type MuscleGroup = 'Obliques' | 'Abs' | 'Shoulders' | 'Glutes' | 'Back' | 'Biceps' | 'Quads' | 'Triceps' | 'Chest' | 'Hamstrings' | 'Calves' | 'Forearms';
21
+
10
22
  interface TonalMovement {
11
23
  id: string;
12
24
  createdAt: string;
@@ -36,6 +48,37 @@ interface TonalMovement {
36
48
  featureGroupIds: null | string[];
37
49
  isGeneric: boolean;
38
50
  }
51
+
52
+ type WorkoutPublishState = 'published' | 'archived' | string;
53
+ interface WorkoutSet {
54
+ id: string;
55
+ workoutId: string;
56
+ blockStart: boolean;
57
+ movementId: string;
58
+ prescribedReps: number;
59
+ repetition: number;
60
+ repetitionTotal: number;
61
+ blockNumber: number;
62
+ burnout: boolean;
63
+ spotter: boolean;
64
+ eccentric: boolean;
65
+ chains: boolean;
66
+ skipSetup: boolean;
67
+ skipDemo: boolean;
68
+ finalSet: boolean;
69
+ calibration: boolean;
70
+ practice: boolean;
71
+ flex: boolean;
72
+ progressive: boolean;
73
+ weightPercentage: number;
74
+ warmUp: boolean;
75
+ durationBasedRepGoal: number;
76
+ setGroup: number;
77
+ round: number;
78
+ description: string;
79
+ dropSet: boolean;
80
+ omitempty?: unknown;
81
+ }
39
82
  interface TonalWorkout {
40
83
  id: string;
41
84
  createdAt: string;
@@ -47,7 +90,7 @@ interface TonalWorkout {
47
90
  coachId: string;
48
91
  sets: WorkoutSet[];
49
92
  duration: number;
50
- publishState: string;
93
+ publishState: WorkoutPublishState;
51
94
  programId: string | null;
52
95
  level: string;
53
96
  groupIds: string[];
@@ -70,16 +113,27 @@ interface TonalWorkout {
70
113
  supportedDevices: string[] | null;
71
114
  featureGroupIds: string[] | null;
72
115
  movementIds: string[];
116
+ accessories?: string[];
73
117
  muscleGroupsForExclusion: MuscleGroup[] | null;
74
118
  playbackType: string;
75
119
  isImported: boolean;
120
+ createdSource?: unknown | null;
76
121
  }
77
- interface WorkoutSet {
122
+ interface TonalSharedWorkout {
78
123
  id: string;
79
- workoutId: string;
124
+ sharerUserId: string;
125
+ parentWorkoutId: string;
126
+ workoutSnapshotId: string;
127
+ workoutSnapshotHash: string;
128
+ deepLinkUrl: string;
129
+ workoutSnapshot: TonalWorkout;
130
+ }
131
+ interface TonalWorkoutEstimateSet {
80
132
  blockStart: boolean;
81
133
  movementId: string;
82
- prescribedReps: number;
134
+ prescribedReps?: number;
135
+ prescribedDuration?: number;
136
+ dropSet: boolean;
83
137
  repetition: number;
84
138
  repetitionTotal: number;
85
139
  blockNumber: number;
@@ -87,46 +141,536 @@ interface WorkoutSet {
87
141
  spotter: boolean;
88
142
  eccentric: boolean;
89
143
  chains: boolean;
90
- skipSetup: boolean;
91
- skipDemo: boolean;
92
- finalSet: boolean;
93
- calibration: boolean;
94
- practice: boolean;
95
144
  flex: boolean;
96
- progressive: boolean;
97
- weightPercentage: number;
98
145
  warmUp: boolean;
99
- durationBasedRepGoal: number;
146
+ weightPercentage: number;
100
147
  setGroup: number;
101
148
  round: number;
102
149
  description: string;
103
- dropSet: boolean;
104
- omitempty: null | any;
105
150
  }
106
- interface TonalSharedWorkout {
151
+ interface TonalWorkoutEstimateResponse {
152
+ duration: number;
153
+ }
154
+ interface TonalWorkoutCreateRequest {
155
+ title: string;
156
+ sets: TonalWorkoutEstimateSet[];
157
+ createdSource?: 'WorkoutBuilder' | 'FreeLift' | 'SharedWorkout' | 'DailyLift' | 'TonalWorkout' | 'WorkoutGenerator' | 'ActivityFeed';
158
+ shortDescription?: string;
159
+ description?: string;
160
+ }
161
+ interface TonalWorkoutUpdateRequest {
107
162
  id: string;
108
- sharerUserId: string;
109
- parentWorkoutId: string;
110
- workoutSnapshotId: string;
111
- workoutSnapshotHash: string;
112
- deepLinkUrl: string;
113
- workoutSnapshot: TonalWorkout;
163
+ title: string;
164
+ description?: string;
165
+ coachId: string;
166
+ sets: TonalWorkoutEstimateSet[];
167
+ level?: string;
168
+ assetId: string;
169
+ createdSource?: 'WorkoutBuilder' | 'FreeLift' | 'SharedWorkout' | 'DailyLift' | 'TonalWorkout' | 'WorkoutGenerator' | 'ActivityFeed';
170
+ }
171
+
172
+ interface TonalProgramWorkout {
173
+ id: string;
174
+ programId: string;
175
+ workoutId: string;
176
+ level: string;
177
+ workoutNumber: number;
178
+ workoutTitle: string;
179
+ programWeek: number;
180
+ programDay: number;
181
+ duration: number;
182
+ }
183
+ interface TonalProgramTrainingEffectGoal {
184
+ goalID: string;
185
+ score: number;
186
+ goalMet: boolean;
187
+ }
188
+ interface TonalProgram {
189
+ id: string;
190
+ createdAt: string;
191
+ name: string;
192
+ description: string;
193
+ productionCode: string;
194
+ workoutsPerWeek: number;
195
+ cadence: boolean[];
196
+ weeks: number;
197
+ publishState: string;
198
+ publishedAt: string;
199
+ level: string;
200
+ workouts: TonalWorkout[];
201
+ assetId: string;
202
+ goalIds: string[];
203
+ groupIds: string[];
204
+ coachId: string;
205
+ coachIds: string[];
206
+ trainingTypeIds: string[];
207
+ isAdjustable: boolean;
208
+ programWorkoutIds: string[];
209
+ programWorkouts: TonalProgramWorkout[];
210
+ nonComparableWorkouts: boolean;
211
+ mobileFriendly: boolean;
212
+ supportedDevices: string[];
213
+ featureGroupIds: string[] | null;
214
+ excludeFromCoachHighlights: boolean;
215
+ trainingEffectGoals: TonalProgramTrainingEffectGoal[];
216
+ }
217
+
218
+ interface TonalUserDevice {
219
+ deviceId: string;
220
+ tonalDeviceId: string;
221
+ userId: string;
222
+ createdAt: string;
223
+ updatedAt: string;
224
+ loggedIn: boolean;
225
+ postWorkoutNotifs: boolean;
226
+ reminderNotifs: boolean;
227
+ productUpdateNotifs: boolean;
228
+ socialNotifs: boolean;
229
+ blogNotifs: boolean;
230
+ chatbotNotifs: boolean;
231
+ deviceModel: string;
232
+ osVersion: string;
233
+ appVersion: string;
234
+ platform: string;
235
+ }
236
+ interface TonalDeviceRegistration {
237
+ userId: string;
238
+ tonalDeviceId: string;
239
+ deviceId: string;
240
+ deviceModel: string;
241
+ osVersion: string;
242
+ appVersion: string;
243
+ platform: string;
244
+ loggedIn: boolean;
245
+ }
246
+ interface TonalUserPermissions {
247
+ userId: string;
248
+ memberDate: 'Public' | 'Private';
249
+ gender: 'Public' | 'Private';
250
+ age: 'Public' | 'Private';
251
+ streak: 'Public' | 'Private';
252
+ workoutCalendar: 'Public' | 'Private';
253
+ strengthScore: 'Public' | 'Private';
254
+ achievements: 'Public' | 'Private';
255
+ leaderboard: 'Public' | 'Private';
256
+ volume: 'Public' | 'Private';
257
+ workouts: 'Public' | 'Private';
258
+ movements: 'Public' | 'Private';
259
+ programs: 'Public' | 'Private';
260
+ activity: 'Public' | 'Private';
261
+ publicProfile: 'Public' | 'Private';
262
+ location: 'Public' | 'Private';
263
+ fullName: 'Public' | 'Private';
264
+ }
265
+ interface TonalUserSettings {
266
+ userId: string;
267
+ overallVolume: number;
268
+ musicVolume: number;
269
+ coachVolume: number;
270
+ soundEffectsVolume: number;
271
+ coachingCuesVolume: number;
272
+ bluetoothOverallVolume: number;
273
+ bluetoothMusicVolume: number;
274
+ bluetoothCoachVolume: number;
275
+ bluetoothSoundEffectsVolume: number;
276
+ feedFmStation: string;
277
+ feedFmAutoPlay: boolean;
278
+ feedFmClientId: string;
279
+ preferredMusicService: string;
280
+ timeZone: string;
281
+ screenBrightness: number;
282
+ closedCaptions: boolean;
283
+ coachingCuesVoiceType: number;
284
+ workoutGraph: string;
285
+ workoutDemo: boolean;
286
+ demoPlayerSize: string;
287
+ dataInGuidedWorkouts: boolean;
288
+ defaultRecoveryWeightTooltipCount: number;
289
+ activeRecoveryRecoveryWeightTooltipCount: number;
290
+ timedWeightOffDisabledByDefault: boolean;
291
+ timedWeightOffDelayBeforeRampMs: number;
292
+ hasRequestedAccountDeletion: boolean;
293
+ isSmartViewEnabled: boolean;
294
+ smartViewMode: string;
295
+ hasSeenLeaderboardIntroTile: boolean;
296
+ hasSeenYearInReviewBanner: boolean;
297
+ hasSeenYearInReviewPromo: boolean;
298
+ hasSeenWarmUpSetsModal: boolean;
299
+ hasSeenWorkoutRemindersPopUp: boolean;
300
+ hasSeenScheduleWorkoutToolTip: boolean;
301
+ hasSeenPublicProfilePopUp: boolean;
302
+ hasSharedPublicProfile: boolean;
303
+ hasHiddenReferralPromo2022: boolean;
304
+ hasClosedTonal101Ad: boolean;
305
+ hasConnectedVisionCamera: boolean;
306
+ hasSeenTonalVisionPromo: boolean;
307
+ hasSeenARCoreDisclaimer: boolean;
308
+ hasSeenEditorialContentsPromo: boolean;
309
+ hasOpenedEditorialContentsPromo: boolean;
310
+ hasSeenCustomMovementDescriptions: boolean;
311
+ hasSeenMovementInfoAndGraphsFtue: boolean;
312
+ hasSeenFreeLiftMovementInfoFtue: boolean;
313
+ hasSeenMovementReplacementModal: boolean;
314
+ hasSeenRomPowerGraphModal: boolean;
315
+ hasSeenCustomMovementReplacementModal: boolean;
316
+ hasSeenAnkleStrapsPromo: boolean;
317
+ hasHiddenAnkleStraps: boolean;
318
+ hasSeenPilatesLoopsPromo: boolean;
319
+ hasHiddenPilatesLoops: boolean;
320
+ hasSeenPilatesLoopsPreOrderPromo: boolean;
321
+ hasHiddenPreOrderPilatesLoops: boolean;
322
+ hasSeenExclusionFiltersTooltip: boolean;
323
+ hasSeenExclusionFiltersTrainerTooltip: boolean;
324
+ hasSeenSmartViewInfoVid: boolean;
325
+ hasHiddenSmartViewDiscoveryTooltip: boolean;
326
+ hasSeenSmartViewMovementsTabToolTip: boolean;
327
+ hasSeenSmartViewClipsToolTip: boolean;
328
+ hasSeenLinkTonalOrderDialog: boolean;
329
+ hasSeenThirdPartyMetricsPromo: boolean;
330
+ hasDismissedUpdatePreferencesBanner: boolean;
331
+ hasDismissedThirdPartyMuscleReadinessTile: boolean;
332
+ hasSeenUpdatedAppleHealthScreen: boolean;
333
+ hasDismissedTrainingEffectGoalsBanner: boolean;
334
+ hasSeenTrainingEffectGoalsPromo: boolean;
335
+ hasSeenTrainingMetricsPromo: boolean;
336
+ hasSeenBodygramInstructions: boolean;
337
+ hasSeenChatbotAnnouncementModal: boolean;
338
+ hasDismissedChatbotTooltip: boolean;
339
+ hasSeenDropSetsPromo: boolean;
340
+ hasHiddenDropSetsPromoBanner: boolean;
341
+ hasSeenScorecardPromo: boolean;
342
+ hasHiddenScorecardPopover: boolean;
343
+ hasHiddenProgramScorecardPopover: boolean;
344
+ hasHiddenAeroPromoBanner: boolean;
345
+ hasSeenPostWorkoutSelfiePromo: boolean;
346
+ hasSeenCoachingCuesPopup: boolean;
347
+ hasSeenCoachingCuesVolumeTooltip: boolean;
348
+ hasSeenCounterPopover: boolean;
349
+ hasSeenDailyLiftPromo: boolean;
350
+ joinProgramPromptEnabled: boolean;
351
+ hasSeenTosUpdate: boolean;
352
+ hasSeenShareCustomWorkoutToolTip: boolean;
353
+ hasSeenCustomTabSharingToolTip: boolean;
354
+ hasSeenCustomWorkoutsSharingPromo: boolean;
355
+ }
356
+ interface TonalDailyMetrics {
357
+ date: string;
358
+ totalVolume: number;
359
+ totalWorkouts: number;
360
+ totalDuration: number;
361
+ totalExternalActivities: number;
362
+ totalWork: number;
363
+ totalTimeUnderTension: number;
364
+ }
365
+ interface TonalCurrentStreak {
366
+ userId: string;
367
+ currentStreak: number;
368
+ currentStreakStartDate: string;
369
+ lastUpdatedWeek: string;
370
+ maxStreak: number;
371
+ maxStreakStartDate: string;
372
+ updatedByActivityId: string;
373
+ }
374
+ interface TonalActivitySummary {
375
+ id: string;
376
+ deletedAt: string | null;
377
+ userId: string;
378
+ name: string;
379
+ workoutId: string;
380
+ isInProgram: boolean;
381
+ isGuidedWorkout: boolean;
382
+ isBaselineWorkout: boolean;
383
+ timestamp: string;
384
+ UTCTimestamp: string;
385
+ localTimestamp: string;
386
+ endTime: string;
387
+ timeZone: string;
388
+ assetID?: string;
389
+ targetArea: string;
390
+ duration: number;
391
+ timeUnderTension: number;
392
+ repGoalPercentage: number | null;
393
+ totalReps: number;
394
+ totalVolume: number;
395
+ totalWork: number;
396
+ level: string;
397
+ programWeeks: number;
398
+ programWorkoutsPerWeek: number;
399
+ groupIds: string[];
400
+ workoutType: string;
401
+ completed: boolean;
402
+ deviceId: string;
403
+ appVersion: string;
404
+ activityType: string;
405
+ triggeredTimedWeightOff: boolean;
406
+ }
407
+ interface TonalUserStatistics {
408
+ volume: {
409
+ total: number;
410
+ maxVolumeInWorkout: number;
411
+ maxVolumeInAWeek: number;
412
+ avgVolumePerWorkout: number;
413
+ avgVolumePerWeek: number;
414
+ };
415
+ workouts: {
416
+ total: number;
417
+ maxWorkoutDuration: number;
418
+ avgWorkoutDuration: number;
419
+ totalDuration: number;
420
+ totalTimeUnderTension: number;
421
+ maxWorkoutsPerWeek: number;
422
+ avgWorkoutsPerWeek: number;
423
+ totalFreeliftWorkouts: number;
424
+ totalCustomWorkouts: number;
425
+ };
426
+ movements: {
427
+ total: number;
428
+ movementIds: string[];
429
+ };
430
+ programs: {
431
+ total: number;
432
+ totalProgramVolume: number;
433
+ totalProgramWorkouts: number;
434
+ totalDuration: number;
435
+ programSummaries: unknown | null;
436
+ };
437
+ }
438
+ interface TonalAchievementMilestone {
439
+ id: string;
440
+ name: string;
441
+ description: string;
442
+ shortDescription: string;
443
+ achievementCategoryId: string;
444
+ achievementCategory: unknown | null;
445
+ assetId: string;
446
+ value: number;
447
+ iconAssetId: string;
448
+ active: boolean;
449
+ needsTemplate: boolean;
450
+ }
451
+ interface TonalAchievementStats {
452
+ totalAchievements: number;
453
+ nextMilestones: TonalAchievementMilestone[];
454
+ }
455
+ interface TonalAchievementCategory {
456
+ id: string;
457
+ name: string;
458
+ type: string;
459
+ }
460
+ interface TonalAchievementDefinition {
461
+ id: string;
462
+ name: string;
463
+ description: string;
464
+ shortDescription: string;
465
+ achievementCategoryId: string;
466
+ achievementCategory: TonalAchievementCategory;
467
+ assetId: string;
468
+ value: number | null;
469
+ iconAssetId: string;
470
+ active: boolean;
471
+ needsTemplate: boolean;
472
+ }
473
+ interface TonalEarnedAchievement {
474
+ id: string;
475
+ achievementId: string;
476
+ userId: string;
477
+ createdAt: string;
478
+ name: string;
479
+ description: string;
480
+ shortDescription: string;
481
+ assetId: string;
482
+ workoutActivityId?: string;
483
+ iconAssetId: string;
484
+ achievement: TonalAchievementDefinition;
485
+ localTimestamp: string;
486
+ }
487
+ interface TonalMuscleUtilization {
488
+ muscleGroup: string;
489
+ value: number;
490
+ }
491
+ interface TonalWorkoutSummaryData {
492
+ workoutActivityId: string;
493
+ duration: number;
494
+ volume: number;
495
+ work: number;
496
+ muscleUtilization: TonalMuscleUtilization[];
497
+ }
498
+ interface TonalCompatibilityStatus {
499
+ status: string;
500
+ lockedReason: string | null;
501
+ }
502
+ interface TonalCalendarTile {
503
+ type: string;
504
+ assetId: string;
505
+ title: string;
506
+ duration: number;
507
+ completed?: boolean;
508
+ workoutId: string;
509
+ targetArea: string;
510
+ level?: string;
511
+ trainingTypeIds?: string[];
512
+ coachId?: string;
513
+ accessories?: string[];
514
+ compatibilityStatus?: TonalCompatibilityStatus;
515
+ workoutSummaryData?: TonalWorkoutSummaryData;
516
+ }
517
+ interface TonalDailySchedule {
518
+ date: string;
519
+ recommendationType?: string;
520
+ tiles: TonalCalendarTile[];
521
+ }
522
+ interface TonalHomeCalendar {
523
+ dailySchedules: TonalDailySchedule[];
524
+ }
525
+ interface TonalGoal {
526
+ id: string;
527
+ name: string;
528
+ description: string;
529
+ active: boolean;
530
+ filterItemId: string;
531
+ }
532
+ interface TonalTrainingEffectGoal {
533
+ id: string;
534
+ name: string;
535
+ description: string;
536
+ active: boolean;
537
+ filterItemId: string;
538
+ }
539
+ interface TonalTrainingEffectGoalRelation {
540
+ id: string;
541
+ secondary: string[];
542
+ tertiary: string[];
543
+ }
544
+ interface TonalTrainingEffectGoalsResponse {
545
+ goals: TonalTrainingEffectGoal[];
546
+ relations: TonalTrainingEffectGoalRelation[];
547
+ }
548
+ interface TonalTrainingType {
549
+ id: string;
550
+ name: string;
551
+ description: string;
552
+ assetId: string;
553
+ infoVidId: string;
554
+ filterItemId: string;
555
+ }
556
+ interface TonalGoalMetric {
557
+ id: string;
558
+ name: string;
559
+ goalId: string;
560
+ description: string;
561
+ }
562
+ interface TonalUserGoal {
563
+ id: string;
564
+ userID: string;
565
+ goalID: string;
566
+ tier: number;
567
+ }
568
+ interface TonalMuscleReadiness {
569
+ Chest: number;
570
+ Shoulders: number;
571
+ Back: number;
572
+ Triceps: number;
573
+ Biceps: number;
574
+ Abs: number;
575
+ Obliques: number;
576
+ Quads: number;
577
+ Glutes: number;
578
+ Hamstrings: number;
579
+ Calves: number;
580
+ }
581
+ interface TonalTargetScore {
582
+ userId: string;
583
+ weekNumber: number;
584
+ metricId: string;
585
+ target: number;
586
+ lowRange: number;
587
+ highRange: number;
588
+ }
589
+ interface TonalTargetScoresResponse {
590
+ [metricId: string]: TonalTargetScore[];
591
+ }
592
+ interface TonalMetricScore {
593
+ userId: string;
594
+ weekNumber: number;
595
+ metricId: string;
596
+ score: number;
597
+ }
598
+ interface TonalMetricScoresResponse {
599
+ [metricId: string]: TonalMetricScore[];
600
+ }
601
+ interface TonalUserInfo {
602
+ id: string;
603
+ createdAt: string;
604
+ updatedAt: string;
605
+ deletedAt: string | null;
606
+ email: string;
607
+ firstName: string;
608
+ lastName: string;
609
+ gender: 'MALE' | 'FEMALE' | string;
610
+ heightInches: number;
611
+ weightPounds: number;
612
+ auth0Id: string;
613
+ dateOfBirth: string;
614
+ isGuestAccount: boolean;
615
+ isDemoAccount: boolean;
616
+ watchedSafetyVideo: boolean;
617
+ recentMobileDevice: TonalUserDevice;
618
+ emailVerified: boolean;
619
+ username: string;
620
+ workoutsPerWeek: number;
621
+ tonalStatus: 'purchased' | string;
622
+ social: unknown | null;
623
+ profileAssetID: string | null;
624
+ mobileWorkoutsEnabled: boolean;
625
+ accountType: 'PublicUser' | string;
626
+ location: string;
627
+ sharingCustomWorkoutsDisabled: boolean;
628
+ level: 'BEGINNER' | 'INTERMEDIATE' | 'ADVANCED' | string;
629
+ goalId: string;
630
+ goals: TonalUserGoal[];
631
+ workoutDurationMin: number;
632
+ workoutDurationMax: number;
633
+ updatedPreferencesAt: string;
634
+ primaryDeviceType: 'Classic' | string;
114
635
  }
115
636
 
116
637
  declare class TonalClient {
117
- private username;
118
- private password;
119
- private idToken;
120
- private tokenExpiresAt;
638
+ private authManager;
639
+ private httpClient;
640
+ private workoutService;
641
+ private movementService;
642
+ private userService;
121
643
  private constructor();
122
- static create({ username, password }: {
644
+ static create(credentials: {
123
645
  username: string;
124
646
  password: string;
125
647
  }): Promise<TonalClient>;
126
- private refreshToken;
127
648
  getMovements(): Promise<TonalMovement[]>;
128
- getWorkoutById(id: string): Promise<TonalWorkout>;
649
+ getUserInfo(): Promise<TonalUserInfo>;
650
+ getGoals(): Promise<TonalGoal[]>;
651
+ getTrainingEffectGoals(): Promise<TonalTrainingEffectGoalsResponse>;
652
+ getTrainingTypes(): Promise<TonalTrainingType[]>;
653
+ getGoalMetrics(): Promise<TonalGoalMetric[]>;
654
+ getUserSettings(): Promise<TonalUserSettings>;
655
+ getDailyMetrics(days?: number): Promise<TonalDailyMetrics[]>;
656
+ getCurrentStreak(): Promise<TonalCurrentStreak>;
657
+ getActivitySummaries(): Promise<TonalActivitySummary[]>;
658
+ getUserStatistics(): Promise<TonalUserStatistics>;
659
+ getAchievementStats(): Promise<TonalAchievementStats>;
660
+ getAchievements(): Promise<TonalEarnedAchievement[]>;
661
+ getHomeCalendar(): Promise<TonalHomeCalendar>;
662
+ getMuscleReadiness(): Promise<TonalMuscleReadiness>;
663
+ getProgramById(programId: string): Promise<TonalProgram>;
664
+ getTargetScores(): Promise<TonalTargetScoresResponse>;
665
+ getMetricScores(startWeek?: number): Promise<TonalMetricScoresResponse>;
666
+ getUserWorkouts(offset?: number, limit?: number): Promise<TonalWorkout[]>;
667
+ getDailyLifts(timeZone?: string): Promise<TonalWorkout[]>;
668
+ getWorkoutById(workoutId: string): Promise<TonalWorkout>;
129
669
  getWorkoutByShareUrl(shareUrl: string): Promise<TonalSharedWorkout>;
670
+ estimateWorkoutDuration(sets: TonalWorkoutEstimateSet[]): Promise<TonalWorkoutEstimateResponse>;
671
+ createWorkout(workoutData: TonalWorkoutCreateRequest): Promise<TonalWorkout>;
672
+ updateWorkout(workoutData: TonalWorkoutUpdateRequest): Promise<TonalWorkout>;
673
+ deleteWorkout(workoutId: string): Promise<void>;
130
674
  }
131
675
 
132
- export { MuscleGroup, OAuthTokenResponse, TonalMovement, TonalSharedWorkout, TonalWorkout, TonalClient as default };
676
+ export { MuscleGroup, OAuthTokenResponse, TonalAchievementCategory, TonalAchievementDefinition, TonalAchievementMilestone, TonalAchievementStats, TonalActivitySummary, TonalApiError, TonalCalendarTile, TonalClient, TonalClientError, TonalCompatibilityStatus, TonalCurrentStreak, TonalDailyMetrics, TonalDailySchedule, TonalDeviceRegistration, TonalEarnedAchievement, TonalGoal, TonalGoalMetric, TonalHomeCalendar, TonalMetricScore, TonalMetricScoresResponse, TonalMovement, TonalMuscleReadiness, TonalMuscleUtilization, TonalProgram, TonalProgramTrainingEffectGoal, TonalProgramWorkout, TonalSharedWorkout, TonalTargetScore, TonalTargetScoresResponse, TonalTrainingEffectGoal, TonalTrainingEffectGoalRelation, TonalTrainingEffectGoalsResponse, TonalTrainingType, TonalUserDevice, TonalUserGoal, TonalUserInfo, TonalUserPermissions, TonalUserSettings, TonalUserStatistics, TonalWorkout, TonalWorkoutCreateRequest, TonalWorkoutEstimateResponse, TonalWorkoutEstimateSet, TonalWorkoutSummaryData, TonalWorkoutUpdateRequest, WorkoutPublishState, WorkoutSet, TonalClient as default };