garminclimb 1.2.1 → 1.2.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.
@@ -22,7 +22,11 @@
22
22
  "Bash(grep -r \"Cycling\" /Users/johnottenlips/garminclimb/node_modules/garmin-connect/dist/garmin/types/activity* 2>/dev/null | head -20)",
23
23
  "Bash(node -e \"const { ActivityType } = require\\('garmin-connect/dist/garmin/types/activity'\\); console.log\\('ActivityType.Cycling =', ActivityType.Cycling\\); console.log\\('All types:', JSON.stringify\\(ActivityType, null, 2\\)\\);\")",
24
24
  "Bash(ls:*)",
25
- "Bash(npm run:*)"
25
+ "Bash(npm run:*)",
26
+ "Bash(python3 -c ':*)",
27
+ "Bash(node *)",
28
+ "Bash(open *)",
29
+ "Bash(make *)"
26
30
  ]
27
31
  }
28
32
  }
package/bin/download.js CHANGED
@@ -48,15 +48,39 @@ const fs = __importStar(require("fs"));
48
48
  const garmin_connect_1 = require("garmin-connect");
49
49
  const _1 = require(".");
50
50
  const activity_1 = require("garmin-connect/dist/garmin/types/activity");
51
+ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
52
+ const DELAY = 3000; // 3s between bulk requests
53
+ function withRetry(fn_1) {
54
+ return __awaiter(this, arguments, void 0, function* (fn, retries = 3) {
55
+ var _a, _b;
56
+ for (let i = 0; i < retries; i++) {
57
+ try {
58
+ return yield fn();
59
+ }
60
+ catch (e) {
61
+ const is429 = ((_a = e === null || e === void 0 ? void 0 : e.message) === null || _a === void 0 ? void 0 : _a.includes("429")) || ((_b = e === null || e === void 0 ? void 0 : e.message) === null || _b === void 0 ? void 0 : _b.includes("Rate"));
62
+ if (is429 && i < retries - 1) {
63
+ const wait = DELAY * (i + 2);
64
+ console.log(`Rate limited, retrying in ${wait / 1000}s...`);
65
+ yield sleep(wait);
66
+ }
67
+ else {
68
+ throw e;
69
+ }
70
+ }
71
+ }
72
+ throw new Error("Unreachable");
73
+ });
74
+ }
51
75
  const download = (username, password) => __awaiter(void 0, void 0, void 0, function* () {
52
76
  const GCClient = new garmin_connect_1.GarminConnect({
53
77
  username,
54
78
  password,
55
79
  });
56
80
  yield GCClient.login(username, password);
57
- const activities = yield GCClient.getActivities(0, 6000, activity_1.ActivityType.FitnessEquipment,
81
+ const activities = yield withRetry(() => GCClient.getActivities(0, 6000, activity_1.ActivityType.FitnessEquipment,
58
82
  // @ts-ignore
59
- "indoor_climbing");
83
+ "indoor_climbing"));
60
84
  const indoorClimbingActivities = activities === null || activities === void 0 ? void 0 : activities.filter((activity) => { var _a; return ((_a = activity === null || activity === void 0 ? void 0 : activity.activityType) === null || _a === void 0 ? void 0 : _a.typeKey) === "indoor_climbing"; });
61
85
  if (!fs.existsSync(_1.garminDataFolder)) {
62
86
  fs.mkdirSync(_1.garminDataFolder);
@@ -66,16 +90,18 @@ const download = (username, password) => __awaiter(void 0, void 0, void 0, funct
66
90
  fs.writeFileSync(`${_1.garminDataFolder}/boulderingActivities.json`, JSON.stringify(boulderingActivities, null, 2));
67
91
  console.log("Downloaded climbing activities from Garmin Connect");
68
92
  // Download strength training activities
69
- const strengthActivities = yield GCClient.getActivities(0, 6000, activity_1.ActivityType.FitnessEquipment,
93
+ yield sleep(DELAY);
94
+ const strengthActivities = yield withRetry(() => GCClient.getActivities(0, 6000, activity_1.ActivityType.FitnessEquipment,
70
95
  // @ts-ignore
71
- "strength_training");
96
+ "strength_training"));
72
97
  const strengthTrainingActivities = strengthActivities === null || strengthActivities === void 0 ? void 0 : strengthActivities.filter((activity) => { var _a; return ((_a = activity === null || activity === void 0 ? void 0 : activity.activityType) === null || _a === void 0 ? void 0 : _a.typeKey) === "strength_training"; });
73
98
  // Fetch detailed data for each strength activity to get exercise sets
74
99
  console.log(`Found ${(strengthTrainingActivities === null || strengthTrainingActivities === void 0 ? void 0 : strengthTrainingActivities.length) || 0} strength training activities, fetching details...`);
75
100
  const detailedActivities = [];
76
101
  for (const activity of strengthTrainingActivities || []) {
77
102
  try {
78
- const detail = yield GCClient.getActivity({ activityId: activity.activityId });
103
+ yield sleep(1000);
104
+ const detail = yield withRetry(() => GCClient.getActivity({ activityId: activity.activityId }));
79
105
  detailedActivities.push(Object.assign(Object.assign({}, activity), { exerciseSets: (detail === null || detail === void 0 ? void 0 : detail.exerciseSets) || (detail === null || detail === void 0 ? void 0 : detail.summarizedExerciseSets) || (activity === null || activity === void 0 ? void 0 : activity.summarizedExerciseSets) || [], fullSummarizedExerciseSets: (detail === null || detail === void 0 ? void 0 : detail.summarizedExerciseSets) || (activity === null || activity === void 0 ? void 0 : activity.summarizedExerciseSets) || [] }));
80
106
  }
81
107
  catch (e) {
@@ -86,9 +112,10 @@ const download = (username, password) => __awaiter(void 0, void 0, void 0, funct
86
112
  fs.writeFileSync(`${_1.garminDataFolder}/strengthTrainingActivities.json`, JSON.stringify(detailedActivities, null, 2));
87
113
  console.log("Downloaded strength training activities from Garmin Connect");
88
114
  // Download running activities (street_running gets all running subtypes)
89
- const runningActivities = yield GCClient.getActivities(0, 6000,
115
+ yield sleep(DELAY);
116
+ const runningActivities = yield withRetry(() => GCClient.getActivities(0, 6000,
90
117
  // @ts-ignore
91
- "running");
118
+ "running"));
92
119
  const filteredRunning = (runningActivities || []).filter((a) => {
93
120
  var _a;
94
121
  const key = ((_a = a === null || a === void 0 ? void 0 : a.activityType) === null || _a === void 0 ? void 0 : _a.typeKey) || "";
@@ -97,13 +124,15 @@ const download = (username, password) => __awaiter(void 0, void 0, void 0, funct
97
124
  fs.writeFileSync(`${_1.garminDataFolder}/runningActivities.json`, JSON.stringify(filteredRunning, null, 2));
98
125
  console.log(`Downloaded ${filteredRunning.length} running activities from Garmin Connect`);
99
126
  // Download cycling activities
100
- const cyclingActivities = yield GCClient.getActivities(0, 6000,
127
+ yield sleep(DELAY);
128
+ const cyclingActivities = yield withRetry(() => GCClient.getActivities(0, 6000,
101
129
  // @ts-ignore
102
- "cycling");
130
+ "cycling"));
103
131
  // Download mountain biking activities using correct subtype
104
- const mtbActivities = yield GCClient.getActivities(0, 6000,
132
+ yield sleep(DELAY);
133
+ const mtbActivities = yield withRetry(() => GCClient.getActivities(0, 6000,
105
134
  // @ts-ignore
106
- "cycling", "mountain_biking");
135
+ "cycling", "mountain_biking"));
107
136
  const allCycling = [...(cyclingActivities || []), ...(mtbActivities || [])];
108
137
  const seen = new Set();
109
138
  const filteredCycling = allCycling.filter((a) => {
@@ -1 +1 @@
1
- {"version":3,"file":"download.js","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"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"}
package/bin/index.js CHANGED
@@ -62,22 +62,14 @@ commander_1.program
62
62
  function loadData() {
63
63
  const indoorData = fs.readFileSync(path.join(exports.garminDataFolder, "indoorClimbingActivities.json"), "utf8");
64
64
  const boulderData = fs.readFileSync(path.join(exports.garminDataFolder, "boulderingActivities.json"), "utf8");
65
- let strengthData = "[]";
66
- try {
67
- strengthData = fs.readFileSync(path.join(exports.garminDataFolder, "strengthTrainingActivities.json"), "utf8");
68
- }
69
- catch (e) { }
70
- let runningData = "[]";
71
- try {
72
- runningData = fs.readFileSync(path.join(exports.garminDataFolder, "runningActivities.json"), "utf8");
73
- }
74
- catch (e) { }
75
- let cyclingData = "[]";
76
- try {
77
- cyclingData = fs.readFileSync(path.join(exports.garminDataFolder, "cyclingActivities.json"), "utf8");
78
- }
79
- catch (e) { }
80
- return `var INDOOR_DATA = ${indoorData};\nvar BOULDER_DATA = ${boulderData};\nvar STRENGTH_DATA = ${strengthData};\nvar CYCLING_DATA = ${cyclingData};\nvar RUNNING_DATA = ${runningData};\n`;
65
+ // Strength, running, cycling data loading commented out — climbing-only
66
+ // let strengthData = "[]";
67
+ // try { strengthData = fs.readFileSync(path.join(garminDataFolder, "strengthTrainingActivities.json"), "utf8"); } catch (e) {}
68
+ // let runningData = "[]";
69
+ // try { runningData = fs.readFileSync(path.join(garminDataFolder, "runningActivities.json"), "utf8"); } catch (e) {}
70
+ // let cyclingData = "[]";
71
+ // try { cyclingData = fs.readFileSync(path.join(garminDataFolder, "cyclingActivities.json"), "utf8"); } catch (e) {}
72
+ return `var INDOOR_DATA = ${indoorData};\nvar BOULDER_DATA = ${boulderData};\n`;
81
73
  }
82
74
  commander_1.program
83
75
  .command("chartjs")
package/bin/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,uCAAyB;AACzB,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;AAChB,QAAA,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC/D,yCAAsC;AACtC,mCAAgC;AAEhC,mBAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,2BAA2B,EAAE,yBAAyB,CAAC;KAC9D,MAAM,CAAC,2BAA2B,EAAE,yBAAyB,CAAC;KAC9D,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IACzC,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IACzC,IAAA,mBAAQ,EAAC,eAAe,EAAE,eAAe,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEL,mBAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,GAAG,EAAE;IACX,IAAA,aAAK,GAAE,CAAC;AACV,CAAC,CAAC,CAAC;AAEL,SAAS,QAAQ;IACf,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAgB,EAAE,+BAA+B,CAAC,EAAE,MAAM,CAAC,CAAC;IACzG,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAgB,EAAE,2BAA2B,CAAC,EAAE,MAAM,CAAC,CAAC;IACtG,wEAAwE;IACxE,2BAA2B;IAC3B,+HAA+H;IAC/H,0BAA0B;IAC1B,qHAAqH;IACrH,0BAA0B;IAC1B,qHAAqH;IACrH,OAAO,qBAAqB,UAAU,yBAAyB,WAAW,KAAK,CAAC;AAClF,CAAC;AAED,mBAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC,CAAC;IAC3F,MAAM,UAAU,GAAG,QAAQ,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA6BT,UAAU;EAClB,SAAS;;QAEH,CAAC;IACL,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AAEL,mBAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC,CAAC;IAC3F,MAAM,UAAU,GAAG,QAAQ,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAC9B,yBAAyB,EACzB,aAAa,UAAU,eAAe,CACvC,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC;AAEL,mBAAO,CAAC,KAAK,EAAE,CAAC"}
package/bin/parse.js CHANGED
@@ -113,7 +113,6 @@ const numberToGrade = (number) => {
113
113
  return grade.padEnd(8, " ");
114
114
  };
115
115
  const parse = () => __awaiter(void 0, void 0, void 0, function* () {
116
- var _a;
117
116
  const indoorClimbingActivities = JSON.parse(fs.readFileSync(`${_1.garminDataFolder}/indoorClimbingActivities.json`, "utf8"));
118
117
  // ?.reverse();
119
118
  const activeIndoorSplits = indoorClimbingActivities.map((activity) => {
@@ -443,256 +442,23 @@ const parse = () => __awaiter(void 0, void 0, void 0, function* () {
443
442
  },
444
443
  });
445
444
  console.log("```");
446
- // === STRENGTH TRAINING ===
447
- try {
448
- const strengthActivities = JSON.parse(fs.readFileSync(`${_1.garminDataFolder}/strengthTrainingActivities.json`, "utf8"));
449
- if ((strengthActivities === null || strengthActivities === void 0 ? void 0 : strengthActivities.length) > 0) {
450
- console.log("\n```");
451
- console.log("\n\nStrength Training ===============================\n");
452
- // Extract exercise data from each activity
453
- // Garmin summarizedExerciseSets uses: category, subCategory, maxWeight (milligrams), reps, volume (milligrams), sets
454
- const mgToLbs = (mg) => Math.round((mg / 1000) * 2.20462);
455
- const exercisePatterns = {
456
- bench: {
457
- label: "Bench Press",
458
- match: (cat, sub) => cat === "BENCH_PRESS",
459
- },
460
- squat: {
461
- label: "Back Squat",
462
- match: (cat, sub) => cat === "SQUAT" && (sub || "").includes("BACK_SQUAT"),
463
- },
464
- pullup: {
465
- label: "Weighted Pull-Up",
466
- match: (cat, sub) => cat === "PULL_UP",
467
- },
468
- rdl: {
469
- label: "Romanian Deadlift",
470
- match: (cat, sub) => cat === "DEADLIFT" && (sub || "").includes("ROMANIAN"),
471
- },
472
- };
473
- const exerciseData = { bench: [], squat: [], pullup: [], rdl: [] };
474
- for (const activity of strengthActivities) {
475
- const date = ((_a = activity === null || activity === void 0 ? void 0 : activity.startTimeLocal) === null || _a === void 0 ? void 0 : _a.split(" ")[0]) || "";
476
- const exercises = (activity === null || activity === void 0 ? void 0 : activity.exerciseSets) || (activity === null || activity === void 0 ? void 0 : activity.fullSummarizedExerciseSets) || (activity === null || activity === void 0 ? void 0 : activity.summarizedExerciseSets) || [];
477
- for (const exKey of Object.keys(exercisePatterns)) {
478
- const pattern = exercisePatterns[exKey];
479
- for (const ex of exercises) {
480
- const cat = ((ex === null || ex === void 0 ? void 0 : ex.category) || "").toUpperCase();
481
- const sub = ((ex === null || ex === void 0 ? void 0 : ex.subCategory) || "").toUpperCase();
482
- if (pattern.match(cat, sub)) {
483
- exerciseData[exKey].push({
484
- date,
485
- maxWeight: mgToLbs((ex === null || ex === void 0 ? void 0 : ex.maxWeight) || 0),
486
- totalVolume: mgToLbs((ex === null || ex === void 0 ? void 0 : ex.volume) || 0),
487
- sets: (ex === null || ex === void 0 ? void 0 : ex.sets) || 0,
488
- totalReps: (ex === null || ex === void 0 ? void 0 : ex.reps) || 0,
489
- });
490
- }
491
- }
492
- }
493
- }
494
- for (const exKey of Object.keys(exercisePatterns)) {
495
- const pattern = exercisePatterns[exKey];
496
- const sessions = exerciseData[exKey];
497
- if (sessions.length === 0)
498
- continue;
499
- console.log(`\n${pattern.label} (${sessions.length} sessions)`);
500
- console.log(` All Time Max Weight: ${Math.max(...sessions.map(s => s.maxWeight))} lbs`);
501
- console.log(` All Time Max Session Volume: ${Math.max(...sessions.map(s => s.totalVolume))} lbs`);
502
- console.log(` Average Max Weight: ${Math.round(sessions.reduce((a, s) => a + s.maxWeight, 0) / sessions.length)} lbs`);
503
- console.log(` Total Reps All Time: ${sessions.reduce((a, s) => a + s.totalReps, 0)}\n`);
504
- // Per-session max weight
505
- generateChart(sessions.map((s, i) => [i, s.maxWeight]), `${pattern.label} - Max Weight Per Session (lbs)`, {
506
- width: sessions.length * CHART_WIDTH_PER_DATA_POINT,
507
- formatter: (value, { axis }) => { var _a; return axis === "y" ? value : (_a = sessions[value]) === null || _a === void 0 ? void 0 : _a.date; },
508
- });
509
- // Per-session volume
510
- generateChart(sessions.map((s, i) => [i, s.totalVolume]), `${pattern.label} - Total Volume Per Session (lbs)`, {
511
- height: 10,
512
- width: sessions.length * CHART_WIDTH_PER_DATA_POINT,
513
- barChart: true,
514
- formatter: (value, { axis }) => { var _a; return axis === "y" ? value : (_a = sessions[value]) === null || _a === void 0 ? void 0 : _a.date; },
515
- });
516
- // Monthly max weight
517
- const maxWeightByMonth = sessions.reduce((acc, s) => {
518
- const parts = s.date.split("-");
519
- const key = `${parts[0]}-${parts[1]}`;
520
- acc[key] = Math.max(acc[key] || 0, s.maxWeight);
521
- return acc;
522
- }, {});
523
- generateChart(Object.keys(maxWeightByMonth).map((month, i) => [i, maxWeightByMonth[month]]), `${pattern.label} - Max Weight By Month (lbs)`, {
524
- width: YEAR_WIDTH,
525
- formatter: (value, { axis }) => axis === "y" ? value : Object.keys(maxWeightByMonth)[value],
526
- });
527
- // Monthly volume
528
- const volumeByMonth = sessions.reduce((acc, s) => {
529
- const parts = s.date.split("-");
530
- const key = `${parts[0]}-${parts[1]}`;
531
- acc[key] = (acc[key] || 0) + s.totalVolume;
532
- return acc;
533
- }, {});
534
- generateChart(Object.keys(volumeByMonth).map((month, i) => [i, volumeByMonth[month]]), `${pattern.label} - Total Volume By Month (lbs)`, {
535
- height: 10,
536
- width: YEAR_WIDTH,
537
- barChart: true,
538
- formatter: (value, { axis }) => axis === "y" ? value : Object.keys(volumeByMonth)[value],
539
- });
540
- // Yearly max weight
541
- const maxWeightByYear = aggregateByYear(maxWeightByMonth, "max");
542
- generateChart(maxWeightByYear.map(([, val], index) => [index, val]), `${pattern.label} - Max Weight By Year (lbs)`, {
543
- width: maxWeightByYear.length * 20,
544
- formatter: (value, { axis }) => { var _a; return axis === "y" ? value : (_a = maxWeightByYear[value]) === null || _a === void 0 ? void 0 : _a[0]; },
545
- });
546
- // Yearly volume
547
- const volumeByYear = aggregateByYear(volumeByMonth);
548
- generateChart(volumeByYear.map(([, val], index) => [index, val]), `${pattern.label} - Total Volume By Year (lbs)`, {
549
- height: 10,
550
- width: volumeByYear.length * 20,
551
- barChart: true,
552
- formatter: (value, { axis }) => { var _a; return axis === "y" ? value : (_a = volumeByYear[value]) === null || _a === void 0 ? void 0 : _a[0]; },
553
- });
554
- // Per-session reps
555
- generateChart(sessions.map((s, i) => [i, s.totalReps]), `${pattern.label} - Total Reps Per Session`, {
556
- height: 10,
557
- width: sessions.length * CHART_WIDTH_PER_DATA_POINT,
558
- barChart: true,
559
- formatter: (value, { axis }) => { var _a; return axis === "y" ? value : (_a = sessions[value]) === null || _a === void 0 ? void 0 : _a.date; },
560
- });
561
- // Monthly reps
562
- const repsByMonth = sessions.reduce((acc, s) => {
563
- const parts = s.date.split("-");
564
- const key = `${parts[0]}-${parts[1]}`;
565
- acc[key] = (acc[key] || 0) + s.totalReps;
566
- return acc;
567
- }, {});
568
- generateChart(Object.keys(repsByMonth).map((month, i) => [i, repsByMonth[month]]), `${pattern.label} - Total Reps By Month`, {
569
- height: 10,
570
- width: YEAR_WIDTH,
571
- barChart: true,
572
- formatter: (value, { axis }) => axis === "y" ? value : Object.keys(repsByMonth)[value],
573
- });
574
- // Yearly reps
575
- const repsByYear = aggregateByYear(repsByMonth);
576
- generateChart(repsByYear.map(([, val], index) => [index, val]), `${pattern.label} - Total Reps By Year`, {
577
- height: 10,
578
- width: repsByYear.length * 20,
579
- barChart: true,
580
- formatter: (value, { axis }) => { var _a; return axis === "y" ? value : (_a = repsByYear[value]) === null || _a === void 0 ? void 0 : _a[0]; },
581
- });
582
- }
583
- console.log("```");
584
- }
585
- }
586
- catch (e) {
587
- // No strength training data available, skip
588
- }
589
- // === RUNNING & CYCLING ===
590
- const cardioTypes = [
591
- { file: "cyclingActivities.json", label: "Cycling", unit: "mi" },
592
- { file: "runningActivities.json", label: "Running", unit: "mi" },
593
- ];
594
- for (const cardio of cardioTypes) {
595
- try {
596
- const activities = JSON.parse(fs.readFileSync(`${_1.garminDataFolder}/${cardio.file}`, "utf8"));
597
- if (!(activities === null || activities === void 0 ? void 0 : activities.length))
598
- continue;
599
- console.log("\n```");
600
- console.log(`\n\n${cardio.label} ===============================\n`);
601
- const metersToMiles = (m) => Math.round((m / 1609.344) * 100) / 100;
602
- const secondsToMinutes = (s) => Math.round(s / 60);
603
- const pacePerMile = (dist, dur) => {
604
- const miles = dist / 1609.344;
605
- if (miles === 0)
606
- return 0;
607
- return Math.round((dur / 60) / miles * 100) / 100; // min/mile
608
- };
609
- const sessions = activities.map((a) => {
610
- var _a;
611
- return ({
612
- date: ((_a = a === null || a === void 0 ? void 0 : a.startTimeLocal) === null || _a === void 0 ? void 0 : _a.split(" ")[0]) || "",
613
- distance: metersToMiles((a === null || a === void 0 ? void 0 : a.distance) || 0),
614
- duration: secondsToMinutes((a === null || a === void 0 ? void 0 : a.duration) || 0),
615
- pace: pacePerMile((a === null || a === void 0 ? void 0 : a.distance) || 0, (a === null || a === void 0 ? void 0 : a.duration) || 0),
616
- calories: (a === null || a === void 0 ? void 0 : a.calories) || 0,
617
- avgHR: (a === null || a === void 0 ? void 0 : a.averageHR) || 0,
618
- elevGain: metersToFeet((a === null || a === void 0 ? void 0 : a.elevationGain) || 0),
619
- });
620
- });
621
- const totalDist = Math.round(sessions.reduce((a, s) => a + s.distance, 0) * 100) / 100;
622
- const totalTime = sessions.reduce((a, s) => a + s.duration, 0);
623
- const avgPace = Math.round(sessions.filter(s => s.pace > 0).reduce((a, s) => a + s.pace, 0) / sessions.filter(s => s.pace > 0).length * 100) / 100;
624
- const bestPace = Math.round(Math.min(...sessions.filter(s => s.pace > 0).map(s => s.pace)) * 100) / 100;
625
- const totalCalories = sessions.reduce((a, s) => a + s.calories, 0);
626
- console.log(`${cardio.label} (${sessions.length} sessions)`);
627
- console.log(` Total Distance: ${totalDist} ${cardio.unit}`);
628
- console.log(` Total Time: ${totalTime} min (${Math.round(totalTime / 60)} hrs)`);
629
- console.log(` Average Pace: ${avgPace} min/${cardio.unit}`);
630
- console.log(` Best Pace: ${bestPace} min/${cardio.unit}`);
631
- console.log(` Total Calories: ${totalCalories}\n`);
632
- // Per-session distance
633
- generateChart(sessions.map((s, i) => [i, s.distance]), `${cardio.label} - Distance Per Session (${cardio.unit})`, {
634
- height: 10,
635
- width: sessions.length * CHART_WIDTH_PER_DATA_POINT,
636
- barChart: true,
637
- formatter: (value, { axis }) => { var _a; return axis === "y" ? value : (_a = sessions[value]) === null || _a === void 0 ? void 0 : _a.date; },
638
- });
639
- // Per-session pace
640
- generateChart(sessions.filter(s => s.pace > 0).map((s, i) => [i, s.pace]), `${cardio.label} - Pace Per Session (min/${cardio.unit})`, {
641
- width: sessions.filter(s => s.pace > 0).length * CHART_WIDTH_PER_DATA_POINT,
642
- formatter: (value, { axis }) => { var _a; return axis === "y" ? value : (_a = sessions.filter(s => s.pace > 0)[value]) === null || _a === void 0 ? void 0 : _a.date; },
643
- });
644
- // Per-session duration
645
- generateChart(sessions.map((s, i) => [i, s.duration]), `${cardio.label} - Duration Per Session (min)`, {
646
- height: 10,
647
- width: sessions.length * CHART_WIDTH_PER_DATA_POINT,
648
- barChart: true,
649
- formatter: (value, { axis }) => { var _a; return axis === "y" ? value : (_a = sessions[value]) === null || _a === void 0 ? void 0 : _a.date; },
650
- });
651
- // Monthly aggregations
652
- const groupByMonth = (fn) => sessions.reduce((acc, s) => {
653
- const parts = s.date.split("-");
654
- const key = `${parts[0]}-${parts[1]}`;
655
- acc[key] = fn(s, acc[key] || 0);
656
- return acc;
657
- }, {});
658
- const distByMonth = groupByMonth((s, prev) => Math.round((prev + s.distance) * 100) / 100);
659
- const durationByMonth = groupByMonth((s, prev) => prev + s.duration);
660
- const sessionsByMonth = groupByMonth((s, prev) => prev + 1);
661
- generateChart(Object.keys(distByMonth).map((m, i) => [i, distByMonth[m]]), `${cardio.label} - Distance By Month (${cardio.unit})`, {
662
- height: 10, width: YEAR_WIDTH, barChart: true,
663
- formatter: (value, { axis }) => axis === "y" ? value : Object.keys(distByMonth)[value],
664
- });
665
- generateChart(Object.keys(durationByMonth).map((m, i) => [i, durationByMonth[m]]), `${cardio.label} - Duration By Month (min)`, {
666
- height: 10, width: YEAR_WIDTH, barChart: true,
667
- formatter: (value, { axis }) => axis === "y" ? value : Object.keys(durationByMonth)[value],
668
- });
669
- generateChart(Object.keys(sessionsByMonth).map((m, i) => [i, sessionsByMonth[m]]), `${cardio.label} - Sessions By Month`, {
670
- height: 10, width: YEAR_WIDTH, barChart: true,
671
- formatter: (value, { axis }) => axis === "y" ? value : Object.keys(sessionsByMonth)[value],
672
- });
673
- // Yearly
674
- console.log("\nYearly Stats ===============================\n");
675
- const distByYear = aggregateByYear(distByMonth);
676
- generateChart(distByYear.map(([, val], i) => [i, val]), `${cardio.label} - Distance By Year (${cardio.unit})`, {
677
- height: 10, width: distByYear.length * 20, barChart: true,
678
- formatter: (value, { axis }) => { var _a; return axis === "y" ? value : (_a = distByYear[value]) === null || _a === void 0 ? void 0 : _a[0]; },
679
- });
680
- const durationByYear = aggregateByYear(durationByMonth);
681
- generateChart(durationByYear.map(([, val], i) => [i, val]), `${cardio.label} - Duration By Year (min)`, {
682
- height: 10, width: durationByYear.length * 20, barChart: true,
683
- formatter: (value, { axis }) => { var _a; return axis === "y" ? value : (_a = durationByYear[value]) === null || _a === void 0 ? void 0 : _a[0]; },
684
- });
685
- const sessionsByYear = aggregateByYear(sessionsByMonth);
686
- generateChart(sessionsByYear.map(([, val], i) => [i, val]), `${cardio.label} - Sessions By Year`, {
687
- height: 10, width: sessionsByYear.length * 20, barChart: true,
688
- formatter: (value, { axis }) => { var _a; return axis === "y" ? value : (_a = sessionsByYear[value]) === null || _a === void 0 ? void 0 : _a[0]; },
689
- });
690
- console.log("```");
691
- }
692
- catch (e) {
693
- // No data for this cardio type
694
- }
695
- }
445
+ // === STRENGTH TRAINING === (commented out — climbing-only)
446
+ // try {
447
+ // const strengthActivities = JSON.parse(
448
+ // fs.readFileSync(`${garminDataFolder}/strengthTrainingActivities.json`, "utf8"),
449
+ // );
450
+ // if (strengthActivities?.length > 0) {
451
+ // // ... strength training charts omitted
452
+ // }
453
+ // } catch (e) {}
454
+ // === RUNNING & CYCLING === (commented out — climbing-only)
455
+ // const cardioTypes = [
456
+ // { file: "cyclingActivities.json", label: "Cycling", unit: "mi" },
457
+ // { file: "runningActivities.json", label: "Running", unit: "mi" },
458
+ // ];
459
+ // for (const cardio of cardioTypes) {
460
+ // // ... cardio charts omitted
461
+ // }
696
462
  });
697
463
  exports.parse = parse;
698
464
  //# sourceMappingURL=parse.js.map
package/bin/parse.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
package/charts-embed.html CHANGED
@@ -75,62 +75,53 @@
75
75
  <div id="gc-session-boulder-charts"></div>
76
76
  </details>
77
77
 
78
+ <!-- Strength Training, Cycling, Running sections commented out — climbing-only -->
79
+ <!--
78
80
  <h1>Strength Training</h1>
79
81
  <div class="gc-stats" id="gc-strength-stats-summary"></div>
80
-
81
82
  <details open><summary><h2>Yearly Overview: Strength</h2></summary>
82
83
  <div id="gc-strength-yearly-charts"></div>
83
84
  </details>
84
-
85
85
  <details open><summary><h2>Monthly Trends: Strength</h2></summary>
86
86
  <div id="gc-strength-monthly-charts"></div>
87
87
  </details>
88
-
89
88
  <details open><summary><h2>Per-Session: Bench Press</h2></summary>
90
89
  <div id="gc-session-bench-charts"></div>
91
90
  </details>
92
-
93
91
  <details open><summary><h2>Per-Session: Back Squat</h2></summary>
94
92
  <div id="gc-session-squat-charts"></div>
95
93
  </details>
96
-
97
94
  <details open><summary><h2>Per-Session: Weighted Pull-Up</h2></summary>
98
95
  <div id="gc-session-pullup-charts"></div>
99
96
  </details>
100
-
101
97
  <details open><summary><h2>Per-Session: Romanian Deadlift</h2></summary>
102
98
  <div id="gc-session-rdl-charts"></div>
103
99
  </details>
104
100
 
105
101
  <h1>Cycling</h1>
106
102
  <div class="gc-stats" id="gc-cycling-stats-summary"></div>
107
-
108
103
  <details open><summary><h2>Yearly Overview: Cycling</h2></summary>
109
104
  <div id="gc-cycling-yearly-charts"></div>
110
105
  </details>
111
-
112
106
  <details open><summary><h2>Monthly Trends: Cycling</h2></summary>
113
107
  <div id="gc-cycling-monthly-charts"></div>
114
108
  </details>
115
-
116
109
  <details open><summary><h2>Per-Session: Cycling</h2></summary>
117
110
  <div id="gc-cycling-session-charts"></div>
118
111
  </details>
119
112
 
120
113
  <h1>Running</h1>
121
114
  <div class="gc-stats" id="gc-running-stats-summary"></div>
122
-
123
115
  <details open><summary><h2>Yearly Overview: Running</h2></summary>
124
116
  <div id="gc-running-yearly-charts"></div>
125
117
  </details>
126
-
127
118
  <details open><summary><h2>Monthly Trends: Running</h2></summary>
128
119
  <div id="gc-running-monthly-charts"></div>
129
120
  </details>
130
-
131
121
  <details open><summary><h2>Per-Session: Running</h2></summary>
132
122
  <div id="gc-running-session-charts"></div>
133
123
  </details>
124
+ -->
134
125
  </div>
135
126
 
136
127
  <script>
@@ -462,14 +453,15 @@ function renderCardio(activities, sport) {
462
453
  if (typeof INDOOR_DATA !== 'undefined' && typeof BOULDER_DATA !== 'undefined') {
463
454
  render(INDOOR_DATA, BOULDER_DATA);
464
455
  }
465
- if (typeof STRENGTH_DATA !== 'undefined' && STRENGTH_DATA && STRENGTH_DATA.length > 0) {
466
- renderStrength(STRENGTH_DATA);
467
- }
468
- if (typeof CYCLING_DATA !== 'undefined' && CYCLING_DATA && CYCLING_DATA.length > 0) {
469
- renderCardio(CYCLING_DATA, 'cycling');
470
- }
471
- if (typeof RUNNING_DATA !== 'undefined' && RUNNING_DATA && RUNNING_DATA.length > 0) {
472
- renderCardio(RUNNING_DATA, 'running');
473
- }
456
+ // Strength, Cycling, Running rendering commented out climbing-only
457
+ // if (typeof STRENGTH_DATA !== 'undefined' && STRENGTH_DATA && STRENGTH_DATA.length > 0) {
458
+ // renderStrength(STRENGTH_DATA);
459
+ // }
460
+ // if (typeof CYCLING_DATA !== 'undefined' && CYCLING_DATA && CYCLING_DATA.length > 0) {
461
+ // renderCardio(CYCLING_DATA, 'cycling');
462
+ // }
463
+ // if (typeof RUNNING_DATA !== 'undefined' && RUNNING_DATA && RUNNING_DATA.length > 0) {
464
+ // renderCardio(RUNNING_DATA, 'running');
465
+ // }
474
466
  })();
475
467
  </script>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "garminclimb",
3
- "version": "1.2.1",
3
+ "version": "1.2.3",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/src/download.ts CHANGED
@@ -6,6 +6,28 @@ import {
6
6
  ActivitySubType,
7
7
  ActivityType,
8
8
  } from "garmin-connect/dist/garmin/types/activity";
9
+
10
+ const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));
11
+ const DELAY = 3000; // 3s between bulk requests
12
+
13
+ async function withRetry<T>(fn: () => Promise<T>, retries = 3): Promise<T> {
14
+ for (let i = 0; i < retries; i++) {
15
+ try {
16
+ return await fn();
17
+ } catch (e: any) {
18
+ const is429 = e?.message?.includes("429") || e?.message?.includes("Rate");
19
+ if (is429 && i < retries - 1) {
20
+ const wait = DELAY * (i + 2);
21
+ console.log(`Rate limited, retrying in ${wait / 1000}s...`);
22
+ await sleep(wait);
23
+ } else {
24
+ throw e;
25
+ }
26
+ }
27
+ }
28
+ throw new Error("Unreachable");
29
+ }
30
+
9
31
  export const download = async (
10
32
  username: string,
11
33
  password: string
@@ -17,13 +39,13 @@ export const download = async (
17
39
 
18
40
  await GCClient.login(username, password);
19
41
 
20
- const activities = await GCClient.getActivities(
42
+ const activities = await withRetry(() => GCClient.getActivities(
21
43
  0,
22
44
  6000,
23
45
  ActivityType.FitnessEquipment,
24
46
  // @ts-ignore
25
47
  "indoor_climbing"
26
- );
48
+ ));
27
49
 
28
50
  const indoorClimbingActivities = activities?.filter(
29
51
  (activity) => activity?.activityType?.typeKey === "indoor_climbing"
@@ -48,13 +70,14 @@ export const download = async (
48
70
  console.log("Downloaded climbing activities from Garmin Connect");
49
71
 
50
72
  // Download strength training activities
51
- const strengthActivities = await GCClient.getActivities(
73
+ await sleep(DELAY);
74
+ const strengthActivities = await withRetry(() => GCClient.getActivities(
52
75
  0,
53
76
  6000,
54
77
  ActivityType.FitnessEquipment,
55
78
  // @ts-ignore
56
79
  "strength_training"
57
- );
80
+ ));
58
81
 
59
82
  const strengthTrainingActivities = strengthActivities?.filter(
60
83
  (activity: any) => activity?.activityType?.typeKey === "strength_training"
@@ -65,7 +88,8 @@ export const download = async (
65
88
  const detailedActivities: any[] = [];
66
89
  for (const activity of strengthTrainingActivities || []) {
67
90
  try {
68
- const detail: any = await GCClient.getActivity({ activityId: activity.activityId });
91
+ await sleep(1000);
92
+ const detail: any = await withRetry(() => GCClient.getActivity({ activityId: activity.activityId }));
69
93
  detailedActivities.push({
70
94
  ...activity,
71
95
  exerciseSets: detail?.exerciseSets || detail?.summarizedExerciseSets || (activity as any)?.summarizedExerciseSets || [],
@@ -84,12 +108,13 @@ export const download = async (
84
108
  console.log("Downloaded strength training activities from Garmin Connect");
85
109
 
86
110
  // Download running activities (street_running gets all running subtypes)
87
- const runningActivities = await GCClient.getActivities(
111
+ await sleep(DELAY);
112
+ const runningActivities = await withRetry(() => GCClient.getActivities(
88
113
  0,
89
114
  6000,
90
115
  // @ts-ignore
91
116
  "running",
92
- );
117
+ ));
93
118
 
94
119
  const filteredRunning = (runningActivities || []).filter(
95
120
  (a: any) => {
@@ -105,21 +130,23 @@ export const download = async (
105
130
  console.log(`Downloaded ${filteredRunning.length} running activities from Garmin Connect`);
106
131
 
107
132
  // Download cycling activities
108
- const cyclingActivities = await GCClient.getActivities(
133
+ await sleep(DELAY);
134
+ const cyclingActivities = await withRetry(() => GCClient.getActivities(
109
135
  0,
110
136
  6000,
111
137
  // @ts-ignore
112
138
  "cycling",
113
- );
139
+ ));
114
140
 
115
141
  // Download mountain biking activities using correct subtype
116
- const mtbActivities = await GCClient.getActivities(
142
+ await sleep(DELAY);
143
+ const mtbActivities = await withRetry(() => GCClient.getActivities(
117
144
  0,
118
145
  6000,
119
146
  // @ts-ignore
120
147
  "cycling",
121
148
  "mountain_biking",
122
- );
149
+ ));
123
150
 
124
151
  const allCycling = [...(cyclingActivities || []), ...(mtbActivities || [])];
125
152
  const seen = new Set<number>();
package/src/index.ts CHANGED
@@ -30,13 +30,14 @@ program
30
30
  function loadData() {
31
31
  const indoorData = fs.readFileSync(path.join(garminDataFolder, "indoorClimbingActivities.json"), "utf8");
32
32
  const boulderData = fs.readFileSync(path.join(garminDataFolder, "boulderingActivities.json"), "utf8");
33
- let strengthData = "[]";
34
- try { strengthData = fs.readFileSync(path.join(garminDataFolder, "strengthTrainingActivities.json"), "utf8"); } catch (e) {}
35
- let runningData = "[]";
36
- try { runningData = fs.readFileSync(path.join(garminDataFolder, "runningActivities.json"), "utf8"); } catch (e) {}
37
- let cyclingData = "[]";
38
- try { cyclingData = fs.readFileSync(path.join(garminDataFolder, "cyclingActivities.json"), "utf8"); } catch (e) {}
39
- return `var INDOOR_DATA = ${indoorData};\nvar BOULDER_DATA = ${boulderData};\nvar STRENGTH_DATA = ${strengthData};\nvar CYCLING_DATA = ${cyclingData};\nvar RUNNING_DATA = ${runningData};\n`;
33
+ // Strength, running, cycling data loading commented out — climbing-only
34
+ // let strengthData = "[]";
35
+ // try { strengthData = fs.readFileSync(path.join(garminDataFolder, "strengthTrainingActivities.json"), "utf8"); } catch (e) {}
36
+ // let runningData = "[]";
37
+ // try { runningData = fs.readFileSync(path.join(garminDataFolder, "runningActivities.json"), "utf8"); } catch (e) {}
38
+ // let cyclingData = "[]";
39
+ // try { cyclingData = fs.readFileSync(path.join(garminDataFolder, "cyclingActivities.json"), "utf8"); } catch (e) {}
40
+ return `var INDOOR_DATA = ${indoorData};\nvar BOULDER_DATA = ${boulderData};\n`;
40
41
  }
41
42
 
42
43
  program
package/src/parse.ts CHANGED
@@ -592,379 +592,22 @@ export const parse = async () => {
592
592
 
593
593
  console.log("```");
594
594
 
595
- // === STRENGTH TRAINING ===
596
- try {
597
- const strengthActivities = JSON.parse(
598
- fs.readFileSync(`${garminDataFolder}/strengthTrainingActivities.json`, "utf8"),
599
- );
600
-
601
- if (strengthActivities?.length > 0) {
602
- console.log("\n```");
603
- console.log("\n\nStrength Training ===============================\n");
604
-
605
- // Extract exercise data from each activity
606
- // Garmin summarizedExerciseSets uses: category, subCategory, maxWeight (milligrams), reps, volume (milligrams), sets
607
- const mgToLbs = (mg: number): number => Math.round((mg / 1000) * 2.20462);
608
-
609
- const exercisePatterns: { [key: string]: { label: string; match: (cat: string, sub: string) => boolean } } = {
610
- bench: {
611
- label: "Bench Press",
612
- match: (cat, sub) => cat === "BENCH_PRESS",
613
- },
614
- squat: {
615
- label: "Back Squat",
616
- match: (cat, sub) => cat === "SQUAT" && (sub || "").includes("BACK_SQUAT"),
617
- },
618
- pullup: {
619
- label: "Weighted Pull-Up",
620
- match: (cat, sub) => cat === "PULL_UP",
621
- },
622
- rdl: {
623
- label: "Romanian Deadlift",
624
- match: (cat, sub) => cat === "DEADLIFT" && (sub || "").includes("ROMANIAN"),
625
- },
626
- };
627
-
628
- type SessionData = { date: string; maxWeight: number; totalVolume: number; sets: number; totalReps: number };
629
- const exerciseData: { [key: string]: SessionData[] } = { bench: [], squat: [], pullup: [], rdl: [] };
630
-
631
- for (const activity of strengthActivities) {
632
- const date = activity?.startTimeLocal?.split(" ")[0] || "";
633
- const exercises = activity?.exerciseSets || activity?.fullSummarizedExerciseSets || activity?.summarizedExerciseSets || [];
634
-
635
- for (const exKey of Object.keys(exercisePatterns)) {
636
- const pattern = exercisePatterns[exKey];
637
-
638
- for (const ex of exercises) {
639
- const cat = (ex?.category || "").toUpperCase();
640
- const sub = (ex?.subCategory || "").toUpperCase();
641
-
642
- if (pattern.match(cat, sub)) {
643
- exerciseData[exKey].push({
644
- date,
645
- maxWeight: mgToLbs(ex?.maxWeight || 0),
646
- totalVolume: mgToLbs(ex?.volume || 0),
647
- sets: ex?.sets || 0,
648
- totalReps: ex?.reps || 0,
649
- });
650
- }
651
- }
652
- }
653
- }
654
-
655
- for (const exKey of Object.keys(exercisePatterns)) {
656
- const pattern = exercisePatterns[exKey];
657
- const sessions = exerciseData[exKey];
658
- if (sessions.length === 0) continue;
659
-
660
- console.log(`\n${pattern.label} (${sessions.length} sessions)`);
661
- console.log(` All Time Max Weight: ${Math.max(...sessions.map(s => s.maxWeight))} lbs`);
662
- console.log(` All Time Max Session Volume: ${Math.max(...sessions.map(s => s.totalVolume))} lbs`);
663
- console.log(` Average Max Weight: ${Math.round(sessions.reduce((a, s) => a + s.maxWeight, 0) / sessions.length)} lbs`);
664
- console.log(` Total Reps All Time: ${sessions.reduce((a, s) => a + s.totalReps, 0)}\n`);
665
-
666
- // Per-session max weight
667
- generateChart(
668
- sessions.map((s, i) => [i, s.maxWeight]),
669
- `${pattern.label} - Max Weight Per Session (lbs)`,
670
- {
671
- width: sessions.length * CHART_WIDTH_PER_DATA_POINT,
672
- formatter: (value: number, { axis }: any) =>
673
- axis === "y" ? value : sessions[value]?.date,
674
- },
675
- );
676
-
677
- // Per-session volume
678
- generateChart(
679
- sessions.map((s, i) => [i, s.totalVolume]),
680
- `${pattern.label} - Total Volume Per Session (lbs)`,
681
- {
682
- height: 10,
683
- width: sessions.length * CHART_WIDTH_PER_DATA_POINT,
684
- barChart: true,
685
- formatter: (value: number, { axis }: any) =>
686
- axis === "y" ? value : sessions[value]?.date,
687
- },
688
- );
689
-
690
- // Monthly max weight
691
- const maxWeightByMonth = sessions.reduce((acc: any, s) => {
692
- const parts = s.date.split("-");
693
- const key = `${parts[0]}-${parts[1]}`;
694
- acc[key] = Math.max(acc[key] || 0, s.maxWeight);
695
- return acc;
696
- }, {});
697
-
698
- generateChart(
699
- Object.keys(maxWeightByMonth).map((month, i) => [i, maxWeightByMonth[month]]),
700
- `${pattern.label} - Max Weight By Month (lbs)`,
701
- {
702
- width: YEAR_WIDTH,
703
- formatter: (value: number, { axis }: any) =>
704
- axis === "y" ? value : Object.keys(maxWeightByMonth)[value],
705
- },
706
- );
707
-
708
- // Monthly volume
709
- const volumeByMonth = sessions.reduce((acc: any, s) => {
710
- const parts = s.date.split("-");
711
- const key = `${parts[0]}-${parts[1]}`;
712
- acc[key] = (acc[key] || 0) + s.totalVolume;
713
- return acc;
714
- }, {});
715
-
716
- generateChart(
717
- Object.keys(volumeByMonth).map((month, i) => [i, volumeByMonth[month]]),
718
- `${pattern.label} - Total Volume By Month (lbs)`,
719
- {
720
- height: 10,
721
- width: YEAR_WIDTH,
722
- barChart: true,
723
- formatter: (value: number, { axis }: any) =>
724
- axis === "y" ? value : Object.keys(volumeByMonth)[value],
725
- },
726
- );
727
-
728
- // Yearly max weight
729
- const maxWeightByYear = aggregateByYear(maxWeightByMonth, "max");
730
- generateChart(
731
- maxWeightByYear.map(([, val], index) => [index, val]),
732
- `${pattern.label} - Max Weight By Year (lbs)`,
733
- {
734
- width: maxWeightByYear.length * 20,
735
- formatter: (value: number, { axis }: any) =>
736
- axis === "y" ? value : maxWeightByYear[value]?.[0],
737
- },
738
- );
739
-
740
- // Yearly volume
741
- const volumeByYear = aggregateByYear(volumeByMonth);
742
- generateChart(
743
- volumeByYear.map(([, val], index) => [index, val]),
744
- `${pattern.label} - Total Volume By Year (lbs)`,
745
- {
746
- height: 10,
747
- width: volumeByYear.length * 20,
748
- barChart: true,
749
- formatter: (value: number, { axis }: any) =>
750
- axis === "y" ? value : volumeByYear[value]?.[0],
751
- },
752
- );
753
-
754
- // Per-session reps
755
- generateChart(
756
- sessions.map((s, i) => [i, s.totalReps]),
757
- `${pattern.label} - Total Reps Per Session`,
758
- {
759
- height: 10,
760
- width: sessions.length * CHART_WIDTH_PER_DATA_POINT,
761
- barChart: true,
762
- formatter: (value: number, { axis }: any) =>
763
- axis === "y" ? value : sessions[value]?.date,
764
- },
765
- );
766
-
767
- // Monthly reps
768
- const repsByMonth = sessions.reduce((acc: any, s) => {
769
- const parts = s.date.split("-");
770
- const key = `${parts[0]}-${parts[1]}`;
771
- acc[key] = (acc[key] || 0) + s.totalReps;
772
- return acc;
773
- }, {});
774
-
775
- generateChart(
776
- Object.keys(repsByMonth).map((month, i) => [i, repsByMonth[month]]),
777
- `${pattern.label} - Total Reps By Month`,
778
- {
779
- height: 10,
780
- width: YEAR_WIDTH,
781
- barChart: true,
782
- formatter: (value: number, { axis }: any) =>
783
- axis === "y" ? value : Object.keys(repsByMonth)[value],
784
- },
785
- );
786
-
787
- // Yearly reps
788
- const repsByYear = aggregateByYear(repsByMonth);
789
- generateChart(
790
- repsByYear.map(([, val], index) => [index, val]),
791
- `${pattern.label} - Total Reps By Year`,
792
- {
793
- height: 10,
794
- width: repsByYear.length * 20,
795
- barChart: true,
796
- formatter: (value: number, { axis }: any) =>
797
- axis === "y" ? value : repsByYear[value]?.[0],
798
- },
799
- );
800
- }
801
- console.log("```");
802
- }
803
- } catch (e) {
804
- // No strength training data available, skip
805
- }
806
-
807
- // === RUNNING & CYCLING ===
808
- const cardioTypes = [
809
- { file: "cyclingActivities.json", label: "Cycling", unit: "mi" },
810
- { file: "runningActivities.json", label: "Running", unit: "mi" },
811
- ];
812
-
813
- for (const cardio of cardioTypes) {
814
- try {
815
- const activities = JSON.parse(
816
- fs.readFileSync(`${garminDataFolder}/${cardio.file}`, "utf8"),
817
- );
818
- if (!activities?.length) continue;
819
-
820
- console.log("\n```");
821
- console.log(`\n\n${cardio.label} ===============================\n`);
822
-
823
- const metersToMiles = (m: number): number => Math.round((m / 1609.344) * 100) / 100;
824
- const secondsToMinutes = (s: number): number => Math.round(s / 60);
825
- const pacePerMile = (dist: number, dur: number): number => {
826
- const miles = dist / 1609.344;
827
- if (miles === 0) return 0;
828
- return Math.round((dur / 60) / miles * 100) / 100; // min/mile
829
- };
830
-
831
- type CardioSession = { date: string; distance: number; duration: number; pace: number; calories: number; avgHR: number; elevGain: number };
832
- const sessions: CardioSession[] = activities.map((a: any) => ({
833
- date: a?.startTimeLocal?.split(" ")[0] || "",
834
- distance: metersToMiles(a?.distance || 0),
835
- duration: secondsToMinutes(a?.duration || 0),
836
- pace: pacePerMile(a?.distance || 0, a?.duration || 0),
837
- calories: a?.calories || 0,
838
- avgHR: a?.averageHR || 0,
839
- elevGain: metersToFeet(a?.elevationGain || 0),
840
- }));
841
-
842
- const totalDist = Math.round(sessions.reduce((a, s) => a + s.distance, 0) * 100) / 100;
843
- const totalTime = sessions.reduce((a, s) => a + s.duration, 0);
844
- const avgPace = Math.round(sessions.filter(s => s.pace > 0).reduce((a, s) => a + s.pace, 0) / sessions.filter(s => s.pace > 0).length * 100) / 100;
845
- const bestPace = Math.round(Math.min(...sessions.filter(s => s.pace > 0).map(s => s.pace)) * 100) / 100;
846
- const totalCalories = sessions.reduce((a, s) => a + s.calories, 0);
847
-
848
- console.log(`${cardio.label} (${sessions.length} sessions)`);
849
- console.log(` Total Distance: ${totalDist} ${cardio.unit}`);
850
- console.log(` Total Time: ${totalTime} min (${Math.round(totalTime / 60)} hrs)`);
851
- console.log(` Average Pace: ${avgPace} min/${cardio.unit}`);
852
- console.log(` Best Pace: ${bestPace} min/${cardio.unit}`);
853
- console.log(` Total Calories: ${totalCalories}\n`);
854
-
855
- // Per-session distance
856
- generateChart(
857
- sessions.map((s, i) => [i, s.distance]),
858
- `${cardio.label} - Distance Per Session (${cardio.unit})`,
859
- {
860
- height: 10,
861
- width: sessions.length * CHART_WIDTH_PER_DATA_POINT,
862
- barChart: true,
863
- formatter: (value: number, { axis }: any) =>
864
- axis === "y" ? value : sessions[value]?.date,
865
- },
866
- );
867
-
868
- // Per-session pace
869
- generateChart(
870
- sessions.filter(s => s.pace > 0).map((s, i) => [i, s.pace]),
871
- `${cardio.label} - Pace Per Session (min/${cardio.unit})`,
872
- {
873
- width: sessions.filter(s => s.pace > 0).length * CHART_WIDTH_PER_DATA_POINT,
874
- formatter: (value: number, { axis }: any) =>
875
- axis === "y" ? value : sessions.filter(s => s.pace > 0)[value]?.date,
876
- },
877
- );
878
-
879
- // Per-session duration
880
- generateChart(
881
- sessions.map((s, i) => [i, s.duration]),
882
- `${cardio.label} - Duration Per Session (min)`,
883
- {
884
- height: 10,
885
- width: sessions.length * CHART_WIDTH_PER_DATA_POINT,
886
- barChart: true,
887
- formatter: (value: number, { axis }: any) =>
888
- axis === "y" ? value : sessions[value]?.date,
889
- },
890
- );
891
-
892
- // Monthly aggregations
893
- const groupByMonth = (fn: (s: CardioSession, prev: number) => number) =>
894
- sessions.reduce((acc: any, s) => {
895
- const parts = s.date.split("-");
896
- const key = `${parts[0]}-${parts[1]}`;
897
- acc[key] = fn(s, acc[key] || 0);
898
- return acc;
899
- }, {});
900
-
901
- const distByMonth = groupByMonth((s, prev) => Math.round((prev + s.distance) * 100) / 100);
902
- const durationByMonth = groupByMonth((s, prev) => prev + s.duration);
903
- const sessionsByMonth = groupByMonth((s, prev) => prev + 1);
904
-
905
- generateChart(
906
- Object.keys(distByMonth).map((m, i) => [i, distByMonth[m]]),
907
- `${cardio.label} - Distance By Month (${cardio.unit})`,
908
- {
909
- height: 10, width: YEAR_WIDTH, barChart: true,
910
- formatter: (value: number, { axis }: any) => axis === "y" ? value : Object.keys(distByMonth)[value],
911
- },
912
- );
913
-
914
- generateChart(
915
- Object.keys(durationByMonth).map((m, i) => [i, durationByMonth[m]]),
916
- `${cardio.label} - Duration By Month (min)`,
917
- {
918
- height: 10, width: YEAR_WIDTH, barChart: true,
919
- formatter: (value: number, { axis }: any) => axis === "y" ? value : Object.keys(durationByMonth)[value],
920
- },
921
- );
922
-
923
- generateChart(
924
- Object.keys(sessionsByMonth).map((m, i) => [i, sessionsByMonth[m]]),
925
- `${cardio.label} - Sessions By Month`,
926
- {
927
- height: 10, width: YEAR_WIDTH, barChart: true,
928
- formatter: (value: number, { axis }: any) => axis === "y" ? value : Object.keys(sessionsByMonth)[value],
929
- },
930
- );
931
-
932
- // Yearly
933
- console.log("\nYearly Stats ===============================\n");
934
-
935
- const distByYear = aggregateByYear(distByMonth);
936
- generateChart(
937
- distByYear.map(([, val], i) => [i, val]),
938
- `${cardio.label} - Distance By Year (${cardio.unit})`,
939
- {
940
- height: 10, width: distByYear.length * 20, barChart: true,
941
- formatter: (value: number, { axis }: any) => axis === "y" ? value : distByYear[value]?.[0],
942
- },
943
- );
944
-
945
- const durationByYear = aggregateByYear(durationByMonth);
946
- generateChart(
947
- durationByYear.map(([, val], i) => [i, val]),
948
- `${cardio.label} - Duration By Year (min)`,
949
- {
950
- height: 10, width: durationByYear.length * 20, barChart: true,
951
- formatter: (value: number, { axis }: any) => axis === "y" ? value : durationByYear[value]?.[0],
952
- },
953
- );
954
-
955
- const sessionsByYear = aggregateByYear(sessionsByMonth);
956
- generateChart(
957
- sessionsByYear.map(([, val], i) => [i, val]),
958
- `${cardio.label} - Sessions By Year`,
959
- {
960
- height: 10, width: sessionsByYear.length * 20, barChart: true,
961
- formatter: (value: number, { axis }: any) => axis === "y" ? value : sessionsByYear[value]?.[0],
962
- },
963
- );
964
-
965
- console.log("```");
966
- } catch (e) {
967
- // No data for this cardio type
968
- }
969
- }
595
+ // === STRENGTH TRAINING === (commented out — climbing-only)
596
+ // try {
597
+ // const strengthActivities = JSON.parse(
598
+ // fs.readFileSync(`${garminDataFolder}/strengthTrainingActivities.json`, "utf8"),
599
+ // );
600
+ // if (strengthActivities?.length > 0) {
601
+ // // ... strength training charts omitted
602
+ // }
603
+ // } catch (e) {}
604
+
605
+ // === RUNNING & CYCLING === (commented out — climbing-only)
606
+ // const cardioTypes = [
607
+ // { file: "cyclingActivities.json", label: "Cycling", unit: "mi" },
608
+ // { file: "runningActivities.json", label: "Running", unit: "mi" },
609
+ // ];
610
+ // for (const cardio of cardioTypes) {
611
+ // // ... cardio charts omitted
612
+ // }
970
613
  };