garminclimb 1.0.0 → 1.0.1
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 +172 -176
- package/bin/download.js +5 -10
- package/bin/download.js.map +1 -1
- package/bin/index.js +6 -47
- package/bin/index.js.map +1 -1
- package/package.json +1 -1
- package/src/download.ts +8 -15
- package/src/index.ts +7 -18
package/README.md
CHANGED
|
@@ -6,8 +6,7 @@ Garmin connect doesn't have the charts I want so I decided to make my own CLI to
|
|
|
6
6
|
|
|
7
7
|
```shell
|
|
8
8
|
npm i -g garminclimb
|
|
9
|
-
garminclimb
|
|
10
|
-
garminclimb download # download your data
|
|
9
|
+
garminclimb download -u username -p password # download your data
|
|
11
10
|
garminclimb charts
|
|
12
11
|
```
|
|
13
12
|
|
|
@@ -21,230 +20,227 @@ ls
|
|
|
21
20
|
# Develop locally or make your own charts
|
|
22
21
|
|
|
23
22
|
```shell
|
|
24
|
-
npm i
|
|
23
|
+
npm i
|
|
25
24
|
npm link
|
|
26
25
|
npm run watch
|
|
27
26
|
# change parse.ts in /src to edit charts
|
|
28
27
|
# then all commaands will be locally linked to your code
|
|
29
|
-
garminclimb
|
|
30
|
-
garminclimb download # download your data
|
|
28
|
+
garminclimb download -u username -p password # download your data
|
|
31
29
|
garminclimb charts
|
|
32
30
|
```
|
|
33
31
|
|
|
34
|
-
|
|
35
32
|
# Example Charts
|
|
36
33
|
|
|
37
|
-
|
|
38
34
|
```
|
|
39
35
|
Max Grade Per Session Indoor Climbing
|
|
40
36
|
|
|
41
|
-
▲
|
|
42
|
-
512A ┤ ┏━━━━━━━━━━┓ ┏━━━━━━━━━━┓
|
|
43
|
-
511D ┤ ┏━━━━━━━━━━┓ ┃ ┃ ┃ ┃
|
|
44
|
-
│ ┃ ┃ ┃ ┃ ┃ ┃
|
|
45
|
-
511B ┤━━━━━━━━━━┓ ┃ ┃ ┃ ┃ ┃ ┗━
|
|
46
|
-
511A ┤ ┗━━━━━━━━━━┓ ┃ ┃ ┃ ┃ ┃
|
|
47
|
-
510D ┤ ┗━━━━━━━━━━━━━━━━━━━━━┛ ┗━━━━━━━━━┓ ┃ ┗━━━━━━━━━━┛
|
|
48
|
-
│ ┃ ┃
|
|
49
|
-
510B ┤ ┗━━━━━━━━━━┛
|
|
37
|
+
▲
|
|
38
|
+
512A ┤ ┏━━━━━━━━━━┓ ┏━━━━━━━━━━┓
|
|
39
|
+
511D ┤ ┏━━━━━━━━━━┓ ┃ ┃ ┃ ┃
|
|
40
|
+
│ ┃ ┃ ┃ ┃ ┃ ┃
|
|
41
|
+
511B ┤━━━━━━━━━━┓ ┃ ┃ ┃ ┃ ┃ ┗━
|
|
42
|
+
511A ┤ ┗━━━━━━━━━━┓ ┃ ┃ ┃ ┃ ┃
|
|
43
|
+
510D ┤ ┗━━━━━━━━━━━━━━━━━━━━━┛ ┗━━━━━━━━━┓ ┃ ┗━━━━━━━━━━┛
|
|
44
|
+
│ ┃ ┃
|
|
45
|
+
510B ┤ ┗━━━━━━━━━━┛
|
|
50
46
|
└┬──────────┬──────────┬──────────┬──────────┬──────────┬─────────┬──────────┬──────────┬──────────┬──────────┬▶
|
|
51
|
-
2024-12-12 2024-12-18 2025-01-01 2025-01-09 2025-01-31 2025-02-062025-02-09 2025-02-12 2025-02-16 2025-02-25 2025-02-27
|
|
47
|
+
2024-12-12 2024-12-18 2025-01-01 2025-01-09 2025-01-31 2025-02-062025-02-09 2025-02-12 2025-02-16 2025-02-25 2025-02-27
|
|
52
48
|
|
|
53
49
|
Number of Sends per session
|
|
54
50
|
|
|
55
|
-
▲
|
|
56
|
-
22┤ ┏━━━━━━━━━━┓
|
|
57
|
-
│ ┃ ┃
|
|
58
|
-
│ ┃ ┃
|
|
59
|
-
│ ┃ ┃
|
|
60
|
-
│ ┃ ┃
|
|
61
|
-
17┤ ┃ ┃ ┏━━━━━━━━━━┓
|
|
62
|
-
│ ┃ ┃ ┃ ┃
|
|
63
|
-
│ ┃ ┃ ┃ ┃
|
|
64
|
-
│ ┃ ┃ ┃ ┃
|
|
65
|
-
│ ┃ ┃ ┃ ┃
|
|
66
|
-
11┤ ┃ ┃ ┃ ┗━
|
|
67
|
-
│ ┃ ┃ ┃
|
|
68
|
-
9┤━━━━━━━━━━┓ ┏━━━━━━━━━┓ ┃ ┃ ┃
|
|
69
|
-
│ ┃ ┃ ┃ ┃ ┃ ┃
|
|
70
|
-
│ ┃ ┃ ┃ ┃ ┃ ┃
|
|
71
|
-
6┤ ┗━━━━━━━━━━┓ ┃ ┃ ┃ ┗━━━━━━━━━━┛
|
|
72
|
-
│ ┃ ┃ ┃ ┃
|
|
73
|
-
4┤ ┃ ┏━━━━━━━━━━┛ ┃ ┃
|
|
74
|
-
3┤ ┗━━━━━━━━━━┓ ┃ ┃ ┃
|
|
75
|
-
2┤ ┗━━━━━━━━━━┛ ┗━━━━━━━━━━┛
|
|
51
|
+
▲
|
|
52
|
+
22┤ ┏━━━━━━━━━━┓
|
|
53
|
+
│ ┃ ┃
|
|
54
|
+
│ ┃ ┃
|
|
55
|
+
│ ┃ ┃
|
|
56
|
+
│ ┃ ┃
|
|
57
|
+
17┤ ┃ ┃ ┏━━━━━━━━━━┓
|
|
58
|
+
│ ┃ ┃ ┃ ┃
|
|
59
|
+
│ ┃ ┃ ┃ ┃
|
|
60
|
+
│ ┃ ┃ ┃ ┃
|
|
61
|
+
│ ┃ ┃ ┃ ┃
|
|
62
|
+
11┤ ┃ ┃ ┃ ┗━
|
|
63
|
+
│ ┃ ┃ ┃
|
|
64
|
+
9┤━━━━━━━━━━┓ ┏━━━━━━━━━┓ ┃ ┃ ┃
|
|
65
|
+
│ ┃ ┃ ┃ ┃ ┃ ┃
|
|
66
|
+
│ ┃ ┃ ┃ ┃ ┃ ┃
|
|
67
|
+
6┤ ┗━━━━━━━━━━┓ ┃ ┃ ┃ ┗━━━━━━━━━━┛
|
|
68
|
+
│ ┃ ┃ ┃ ┃
|
|
69
|
+
4┤ ┃ ┏━━━━━━━━━━┛ ┃ ┃
|
|
70
|
+
3┤ ┗━━━━━━━━━━┓ ┃ ┃ ┃
|
|
71
|
+
2┤ ┗━━━━━━━━━━┛ ┗━━━━━━━━━━┛
|
|
76
72
|
└┬──────────┬──────────┬──────────┬──────────┬──────────┬─────────┬──────────┬──────────┬──────────┬──────────┬▶
|
|
77
|
-
2024-12-12 2024-12-18 2025-01-01 2025-01-09 2025-01-31 2025-02-062025-02-09 2025-02-12 2025-02-16 2025-02-25 2025-02-27
|
|
73
|
+
2024-12-12 2024-12-18 2025-01-01 2025-01-09 2025-01-31 2025-02-062025-02-09 2025-02-12 2025-02-16 2025-02-25 2025-02-27
|
|
78
74
|
|
|
79
75
|
Total Feet Per Session
|
|
80
76
|
|
|
81
|
-
▲ █
|
|
82
|
-
604┤ █
|
|
83
|
-
│ █ █
|
|
84
|
-
509┤ █ █ █
|
|
85
|
-
436┤█ █ █ █
|
|
86
|
-
348┤█ █ █ █ █ █
|
|
87
|
-
312┤█ █ █ █ █ █ █
|
|
88
|
-
272┤█ █ █ █ █ █ █ █ █ █
|
|
89
|
-
208┤█ █ █ █ █ █ █ █ █ █
|
|
90
|
-
│█ █ █ █ █ █ █ █ █ █ █
|
|
91
|
-
70┤█ █ █ █ █ █ █ █ █ █ █
|
|
77
|
+
▲ █
|
|
78
|
+
604┤ █
|
|
79
|
+
│ █ █
|
|
80
|
+
509┤ █ █ █
|
|
81
|
+
436┤█ █ █ █
|
|
82
|
+
348┤█ █ █ █ █ █
|
|
83
|
+
312┤█ █ █ █ █ █ █
|
|
84
|
+
272┤█ █ █ █ █ █ █ █ █ █
|
|
85
|
+
208┤█ █ █ █ █ █ █ █ █ █
|
|
86
|
+
│█ █ █ █ █ █ █ █ █ █ █
|
|
87
|
+
70┤█ █ █ █ █ █ █ █ █ █ █
|
|
92
88
|
└┬──────────┬──────────┬──────────┬──────────┬──────────┬─────────┬──────────┬──────────┬──────────┬──────────┬▶
|
|
93
|
-
2024-12-12 2024-12-18 2025-01-01 2025-01-09 2025-01-31 2025-02-062025-02-09 2025-02-12 2025-02-16 2025-02-25 2025-02-27
|
|
89
|
+
2024-12-12 2024-12-18 2025-01-01 2025-01-09 2025-01-31 2025-02-062025-02-09 2025-02-12 2025-02-16 2025-02-25 2025-02-27
|
|
94
90
|
|
|
95
91
|
Total Route Feet By Month
|
|
96
92
|
|
|
97
|
-
▲ █
|
|
98
|
-
2341┤ █
|
|
99
|
-
│ █
|
|
100
|
-
│ █
|
|
101
|
-
│ █
|
|
102
|
-
│ █
|
|
103
|
-
│ █
|
|
104
|
-
│ █
|
|
105
|
-
│ █
|
|
106
|
-
│ █
|
|
107
|
-
│ █
|
|
108
|
-
│ █
|
|
109
|
-
│ █
|
|
110
|
-
│ █
|
|
111
|
-
│ █
|
|
112
|
-
│ █
|
|
113
|
-
│ █
|
|
114
|
-
│ █
|
|
115
|
-
│█ █
|
|
116
|
-
620┤█ █ █
|
|
117
|
-
480┤█ █ █
|
|
93
|
+
▲ █
|
|
94
|
+
2341┤ █
|
|
95
|
+
│ █
|
|
96
|
+
│ █
|
|
97
|
+
│ █
|
|
98
|
+
│ █
|
|
99
|
+
│ █
|
|
100
|
+
│ █
|
|
101
|
+
│ █
|
|
102
|
+
│ █
|
|
103
|
+
│ █
|
|
104
|
+
│ █
|
|
105
|
+
│ █
|
|
106
|
+
│ █
|
|
107
|
+
│ █
|
|
108
|
+
│ █
|
|
109
|
+
│ █
|
|
110
|
+
│ █
|
|
111
|
+
│█ █
|
|
112
|
+
620┤█ █ █
|
|
113
|
+
480┤█ █ █
|
|
118
114
|
└┬─────────┬────────┬▶
|
|
119
|
-
2024-12 2025-01 2025-02
|
|
115
|
+
2024-12 2025-01 2025-02
|
|
120
116
|
|
|
121
117
|
Active Minutes Per Session
|
|
122
118
|
|
|
123
|
-
▲ █
|
|
124
|
-
28┤ █ █
|
|
125
|
-
27┤ █ █
|
|
126
|
-
│ █ █ █
|
|
127
|
-
25┤ █ █ █
|
|
128
|
-
│ █ █ █ █ █
|
|
129
|
-
23┤█ █ █ █ █ █
|
|
130
|
-
22┤█ █ █ █ █ █ █
|
|
131
|
-
21┤█ █ █ █ █ █ █
|
|
132
|
-
│█ █ █ █ █ █ █ █ █
|
|
133
|
-
19┤█ █ █ █ █ █ █ █ █ █
|
|
134
|
-
18┤█ █ █ █ █ █ █ █ █ █
|
|
135
|
-
│█ █ █ █ █ █ █ █ █ █
|
|
136
|
-
│█ █ █ █ █ █ █ █ █ █
|
|
137
|
-
│█ █ █ █ █ █ █ █ █ █
|
|
138
|
-
│█ █ █ █ █ █ █ █ █ █
|
|
139
|
-
│█ █ █ █ █ █ █ █ █ █
|
|
140
|
-
│█ █ █ █ █ █ █ █ █ █
|
|
141
|
-
│█ █ █ █ █ █ █ █ █ █
|
|
142
|
-
│█ █ █ █ █ █ █ █ █ █ █
|
|
143
|
-
9┤█ █ █ █ █ █ █ █ █ █ █
|
|
119
|
+
▲ █
|
|
120
|
+
28┤ █ █
|
|
121
|
+
27┤ █ █
|
|
122
|
+
│ █ █ █
|
|
123
|
+
25┤ █ █ █
|
|
124
|
+
│ █ █ █ █ █
|
|
125
|
+
23┤█ █ █ █ █ █
|
|
126
|
+
22┤█ █ █ █ █ █ █
|
|
127
|
+
21┤█ █ █ █ █ █ █
|
|
128
|
+
│█ █ █ █ █ █ █ █ █
|
|
129
|
+
19┤█ █ █ █ █ █ █ █ █ █
|
|
130
|
+
18┤█ █ █ █ █ █ █ █ █ █
|
|
131
|
+
│█ █ █ █ █ █ █ █ █ █
|
|
132
|
+
│█ █ █ █ █ █ █ █ █ █
|
|
133
|
+
│█ █ █ █ █ █ █ █ █ █
|
|
134
|
+
│█ █ █ █ █ █ █ █ █ █
|
|
135
|
+
│█ █ █ █ █ █ █ █ █ █
|
|
136
|
+
│█ █ █ █ █ █ █ █ █ █
|
|
137
|
+
│█ █ █ █ █ █ █ █ █ █
|
|
138
|
+
│█ █ █ █ █ █ █ █ █ █ █
|
|
139
|
+
9┤█ █ █ █ █ █ █ █ █ █ █
|
|
144
140
|
└┬──────────┬──────────┬──────────┬──────────┬──────────┬─────────┬──────────┬──────────┬──────────┬──────────┬▶
|
|
145
|
-
2024-12-12 2024-12-18 2025-01-01 2025-01-09 2025-01-31 2025-02-062025-02-09 2025-02-12 2025-02-16 2025-02-25 2025-02-27
|
|
141
|
+
2024-12-12 2024-12-18 2025-01-01 2025-01-09 2025-01-31 2025-02-062025-02-09 2025-02-12 2025-02-16 2025-02-25 2025-02-27
|
|
146
142
|
|
|
147
143
|
|
|
148
144
|
|
|
149
145
|
Bouldering===============================
|
|
150
146
|
Max Grade Per Session Bouldering
|
|
151
147
|
|
|
152
|
-
▲
|
|
153
|
-
V7┤ ┏━━━━━━━━━━┓
|
|
154
|
-
│ ┃ ┃
|
|
155
|
-
│ ┃ ┃
|
|
156
|
-
V6┤ ┏━━━━━━━━━┓ ┏━━━━━━━━━━┓ ┏━━━━━━━━━━━━━━━━━━━━┛ ┃
|
|
157
|
-
│ ┃ ┃ ┃ ┃ ┃ ┃
|
|
158
|
-
│ ┃ ┃ ┃ ┃ ┃ ┃
|
|
159
|
-
V5┤ ┃ ┗━━━━━━━━━━┛ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┗━
|
|
160
|
-
│ ┃
|
|
161
|
-
│ ┃
|
|
162
|
-
V4┤━━━━━━━━━━┛
|
|
148
|
+
▲
|
|
149
|
+
V7┤ ┏━━━━━━━━━━┓
|
|
150
|
+
│ ┃ ┃
|
|
151
|
+
│ ┃ ┃
|
|
152
|
+
V6┤ ┏━━━━━━━━━┓ ┏━━━━━━━━━━┓ ┏━━━━━━━━━━━━━━━━━━━━┛ ┃
|
|
153
|
+
│ ┃ ┃ ┃ ┃ ┃ ┃
|
|
154
|
+
│ ┃ ┃ ┃ ┃ ┃ ┃
|
|
155
|
+
V5┤ ┃ ┗━━━━━━━━━━┛ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┗━
|
|
156
|
+
│ ┃
|
|
157
|
+
│ ┃
|
|
158
|
+
V4┤━━━━━━━━━━┛
|
|
163
159
|
└┬──────────┬─────────┬──────────┬──────────┬─────────┬──────────┬──────────┬──────────┬─────────┬──────────┬──────────┬─────────┬──────────┬▶
|
|
164
|
-
2024-12-20 2024-12-282025-01-04 2025-01-08 2025-01-122025-01-19 2025-01-22 2025-01-29 2025-02-022025-02-14 2025-02-18 2025-02-232025-03-02 2025-03-05
|
|
160
|
+
2024-12-20 2024-12-282025-01-04 2025-01-08 2025-01-122025-01-19 2025-01-22 2025-01-29 2025-02-022025-02-14 2025-02-18 2025-02-232025-03-02 2025-03-05
|
|
165
161
|
|
|
166
162
|
Number of Climbs per session
|
|
167
163
|
|
|
168
|
-
▲ █
|
|
169
|
-
48┤ █
|
|
170
|
-
│ █
|
|
171
|
-
│ █ █
|
|
172
|
-
35┤ █ █ █ █
|
|
173
|
-
30┤ █ █ █ █ █ █ █ █
|
|
174
|
-
25┤ █ █ █ █ █ █ █ █ █ █
|
|
175
|
-
22┤ █ █ █ █ █ █ █ █ █ █ █ █ █
|
|
176
|
-
18┤ █ █ █ █ █ █ █ █ █ █ █ █ █
|
|
177
|
-
│█ █ █ █ █ █ █ █ █ █ █ █ █ █
|
|
178
|
-
7┤█ █ █ █ █ █ █ █ █ █ █ █ █ █
|
|
164
|
+
▲ █
|
|
165
|
+
48┤ █
|
|
166
|
+
│ █
|
|
167
|
+
│ █ █
|
|
168
|
+
35┤ █ █ █ █
|
|
169
|
+
30┤ █ █ █ █ █ █ █ █
|
|
170
|
+
25┤ █ █ █ █ █ █ █ █ █ █
|
|
171
|
+
22┤ █ █ █ █ █ █ █ █ █ █ █ █ █
|
|
172
|
+
18┤ █ █ █ █ █ █ █ █ █ █ █ █ █
|
|
173
|
+
│█ █ █ █ █ █ █ █ █ █ █ █ █ █
|
|
174
|
+
7┤█ █ █ █ █ █ █ █ █ █ █ █ █ █
|
|
179
175
|
└┬──────────┬─────────┬──────────┬──────────┬─────────┬──────────┬──────────┬──────────┬─────────┬──────────┬──────────┬─────────┬──────────┬▶
|
|
180
|
-
2024-12-20 2024-12-282025-01-04 2025-01-08 2025-01-122025-01-19 2025-01-22 2025-01-29 2025-02-022025-02-14 2025-02-18 2025-02-232025-03-02 2025-03-05
|
|
176
|
+
2024-12-20 2024-12-282025-01-04 2025-01-08 2025-01-122025-01-19 2025-01-22 2025-01-29 2025-02-022025-02-14 2025-02-18 2025-02-232025-03-02 2025-03-05
|
|
181
177
|
|
|
182
178
|
Active Minutes Bouldering Per Session
|
|
183
179
|
|
|
184
|
-
▲ █
|
|
185
|
-
30┤ █
|
|
186
|
-
│ █
|
|
187
|
-
│ █ █ █
|
|
188
|
-
22┤ █ █ █ █ █
|
|
189
|
-
18┤ █ █ █ █ █ █
|
|
190
|
-
17┤ █ █ █ █ █ █ █ █ █ █
|
|
191
|
-
13┤ █ █ █ █ █ █ █ █ █ █ █ █ █
|
|
192
|
-
10┤ █ █ █ █ █ █ █ █ █ █ █ █ █
|
|
193
|
-
│█ █ █ █ █ █ █ █ █ █ █ █ █ █
|
|
194
|
-
6┤█ █ █ █ █ █ █ █ █ █ █ █ █ █
|
|
180
|
+
▲ █
|
|
181
|
+
30┤ █
|
|
182
|
+
│ █
|
|
183
|
+
│ █ █ █
|
|
184
|
+
22┤ █ █ █ █ █
|
|
185
|
+
18┤ █ █ █ █ █ █
|
|
186
|
+
17┤ █ █ █ █ █ █ █ █ █ █
|
|
187
|
+
13┤ █ █ █ █ █ █ █ █ █ █ █ █ █
|
|
188
|
+
10┤ █ █ █ █ █ █ █ █ █ █ █ █ █
|
|
189
|
+
│█ █ █ █ █ █ █ █ █ █ █ █ █ █
|
|
190
|
+
6┤█ █ █ █ █ █ █ █ █ █ █ █ █ █
|
|
195
191
|
└┬──────────┬─────────┬──────────┬──────────┬─────────┬──────────┬──────────┬──────────┬─────────┬──────────┬──────────┬─────────┬──────────┬▶
|
|
196
|
-
2024-12-20 2024-12-282025-01-04 2025-01-08 2025-01-122025-01-19 2025-01-22 2025-01-29 2025-02-022025-02-14 2025-02-18 2025-02-232025-03-02 2025-03-05
|
|
192
|
+
2024-12-20 2024-12-282025-01-04 2025-01-08 2025-01-122025-01-19 2025-01-22 2025-01-29 2025-02-022025-02-14 2025-02-18 2025-02-232025-03-02 2025-03-05
|
|
197
193
|
|
|
198
194
|
Approx Boulder Feet By Month
|
|
199
195
|
|
|
200
|
-
▲ █
|
|
201
|
-
976┤ █ █
|
|
202
|
-
944┤ █ █
|
|
203
|
-
│ █ █
|
|
204
|
-
│ █ █
|
|
205
|
-
│ █ █
|
|
206
|
-
│ █ █
|
|
207
|
-
│ █ █
|
|
208
|
-
│ █ █
|
|
209
|
-
│ █ █
|
|
210
|
-
│ █ █ █
|
|
211
|
-
592┤ █ █ █
|
|
212
|
-
│ █ █ █
|
|
213
|
-
│ █ █ █
|
|
214
|
-
│ █ █ █
|
|
215
|
-
│ █ █ █
|
|
216
|
-
│ █ █ █
|
|
217
|
-
│ █ █ █
|
|
218
|
-
│ █ █ █
|
|
219
|
-
│█ █ █ █
|
|
220
|
-
256┤█ █ █ █
|
|
196
|
+
▲ █
|
|
197
|
+
976┤ █ █
|
|
198
|
+
944┤ █ █
|
|
199
|
+
│ █ █
|
|
200
|
+
│ █ █
|
|
201
|
+
│ █ █
|
|
202
|
+
│ █ █
|
|
203
|
+
│ █ █
|
|
204
|
+
│ █ █
|
|
205
|
+
│ █ █
|
|
206
|
+
│ █ █ █
|
|
207
|
+
592┤ █ █ █
|
|
208
|
+
│ █ █ █
|
|
209
|
+
│ █ █ █
|
|
210
|
+
│ █ █ █
|
|
211
|
+
│ █ █ █
|
|
212
|
+
│ █ █ █
|
|
213
|
+
│ █ █ █
|
|
214
|
+
│ █ █ █
|
|
215
|
+
│█ █ █ █
|
|
216
|
+
256┤█ █ █ █
|
|
221
217
|
└┬─────┬──────┬─────┬▶
|
|
222
|
-
2024-12 2025-02
|
|
218
|
+
2024-12 2025-02
|
|
223
219
|
2025-01 2025-03
|
|
224
220
|
|
|
225
221
|
Total Feet By Month Combined
|
|
226
222
|
|
|
227
|
-
▲ █
|
|
228
|
-
3285┤ █
|
|
229
|
-
│ █
|
|
230
|
-
│ █
|
|
231
|
-
│ █
|
|
232
|
-
│ █
|
|
233
|
-
│ █
|
|
234
|
-
│ █
|
|
235
|
-
│ █
|
|
236
|
-
│ █
|
|
237
|
-
│ █
|
|
238
|
-
│ █
|
|
239
|
-
│ █
|
|
240
|
-
│ █
|
|
241
|
-
│ █ █
|
|
242
|
-
1456┤ █ █
|
|
243
|
-
│ █ █
|
|
244
|
-
│ █ █
|
|
245
|
-
│ █ █
|
|
246
|
-
│█ █ █
|
|
247
|
-
876┤█ █ █
|
|
223
|
+
▲ █
|
|
224
|
+
3285┤ █
|
|
225
|
+
│ █
|
|
226
|
+
│ █
|
|
227
|
+
│ █
|
|
228
|
+
│ █
|
|
229
|
+
│ █
|
|
230
|
+
│ █
|
|
231
|
+
│ █
|
|
232
|
+
│ █
|
|
233
|
+
│ █
|
|
234
|
+
│ █
|
|
235
|
+
│ █
|
|
236
|
+
│ █
|
|
237
|
+
│ █ █
|
|
238
|
+
1456┤ █ █
|
|
239
|
+
│ █ █
|
|
240
|
+
│ █ █
|
|
241
|
+
│ █ █
|
|
242
|
+
│█ █ █
|
|
243
|
+
876┤█ █ █
|
|
248
244
|
└┬─────────┬────────┬▶
|
|
249
|
-
2024-12 2025-01 2025-02
|
|
250
|
-
```
|
|
245
|
+
2024-12 2025-01 2025-02
|
|
246
|
+
```
|
package/bin/download.js
CHANGED
|
@@ -42,22 +42,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
42
42
|
});
|
|
43
43
|
};
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
-
exports.download =
|
|
46
|
-
const dotenv = __importStar(require("dotenv"));
|
|
47
|
-
const path = require("path");
|
|
48
|
-
const homeDir = require("os").homedir();
|
|
49
|
-
exports.credentialsPath = path.join(homeDir, ".gc_credentials");
|
|
50
|
-
dotenv.config({ path: exports.credentialsPath });
|
|
45
|
+
exports.download = void 0;
|
|
51
46
|
const fs = __importStar(require("fs"));
|
|
52
47
|
// @ts-ignore
|
|
53
48
|
const garmin_connect_1 = require("garmin-connect");
|
|
54
49
|
const _1 = require(".");
|
|
55
|
-
const download = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
50
|
+
const download = (username, password) => __awaiter(void 0, void 0, void 0, function* () {
|
|
56
51
|
const GCClient = new garmin_connect_1.GarminConnect({
|
|
57
|
-
username
|
|
58
|
-
password
|
|
52
|
+
username,
|
|
53
|
+
password,
|
|
59
54
|
});
|
|
60
|
-
yield GCClient.login(
|
|
55
|
+
yield GCClient.login(username, password);
|
|
61
56
|
const activities = yield GCClient.getActivities();
|
|
62
57
|
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"; });
|
|
63
58
|
if (!fs.existsSync(_1.garminDataFolder)) {
|
package/bin/download.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.js","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,aAAa;AACb,mDAA+C;AAC/C,wBAAqC;AAC9B,MAAM,QAAQ,GAAG,CACtB,QAAgB,EAChB,QAAgB,EACD,EAAE;IACjB,MAAM,QAAQ,GAAG,IAAI,8BAAa,CAAC;QACjC,QAAQ;QACR,QAAQ;KACT,CAAC,CAAC;IAEH,MAAM,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEzC,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,CAAC;IAElD,MAAM,wBAAwB,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CACjD,CAAC,QAAQ,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,0CAAE,OAAO,MAAK,iBAAiB,CAAA,EAAA,CACpE,CAAC;IAEF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,mBAAgB,CAAC,EAAE,CAAC;QACrC,EAAE,CAAC,SAAS,CAAC,mBAAgB,CAAC,CAAC;IACjC,CAAC;IACD,EAAE,CAAC,aAAa,CACd,GAAG,mBAAgB,gCAAgC,EACnD,IAAI,CAAC,SAAS,CAAC,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC,CAClD,CAAC;IAEF,MAAM,oBAAoB,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAC7C,CAAC,QAAQ,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,0CAAE,OAAO,MAAK,YAAY,CAAA,EAAA,CAC/D,CAAC;IAEF,EAAE,CAAC,aAAa,CACd,GAAG,mBAAgB,4BAA4B,EAC/C,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC,CAC9C,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;AACpE,CAAC,CAAA,CAAC;AAlCW,QAAA,QAAQ,YAkCnB"}
|
package/bin/index.js
CHANGED
|
@@ -1,69 +1,28 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
-
if (k2 === undefined) k2 = k;
|
|
5
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
-
}
|
|
9
|
-
Object.defineProperty(o, k2, desc);
|
|
10
|
-
}) : (function(o, m, k, k2) {
|
|
11
|
-
if (k2 === undefined) k2 = k;
|
|
12
|
-
o[k2] = m[k];
|
|
13
|
-
}));
|
|
14
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
-
}) : function(o, v) {
|
|
17
|
-
o["default"] = v;
|
|
18
|
-
});
|
|
19
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
-
var ownKeys = function(o) {
|
|
21
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
-
var ar = [];
|
|
23
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
-
return ar;
|
|
25
|
-
};
|
|
26
|
-
return ownKeys(o);
|
|
27
|
-
};
|
|
28
|
-
return function (mod) {
|
|
29
|
-
if (mod && mod.__esModule) return mod;
|
|
30
|
-
var result = {};
|
|
31
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
-
__setModuleDefault(result, mod);
|
|
33
|
-
return result;
|
|
34
|
-
};
|
|
35
|
-
})();
|
|
36
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
-
exports.garminDataFolder =
|
|
38
|
-
const fs = __importStar(require("fs"));
|
|
4
|
+
exports.garminDataFolder = void 0;
|
|
39
5
|
const commander_1 = require("commander");
|
|
40
6
|
const os = require("os");
|
|
41
7
|
const path = require("path");
|
|
42
8
|
const homeDir = os.homedir();
|
|
43
|
-
exports.credentialsPath = path.join(homeDir, ".gc_credentials");
|
|
44
9
|
exports.garminDataFolder = path.join(homeDir, ".gc_data");
|
|
45
10
|
const download_1 = require("./download");
|
|
46
11
|
const parse_1 = require("./parse");
|
|
47
12
|
commander_1.program
|
|
48
|
-
.command("
|
|
13
|
+
.command("download")
|
|
14
|
+
.description("Download activities from Garmin Connect")
|
|
49
15
|
.option("-u, --username <username>", "Garmin Connect username")
|
|
50
16
|
.option("-p, --password <password>", "Garmin Connect password")
|
|
51
|
-
.description("Set GARMIN_USERNAME and GARMIN_PASSWORD")
|
|
52
17
|
.action((options) => {
|
|
53
18
|
const GARMIN_USERNAME = options.username;
|
|
54
19
|
const GARMIN_PASSWORD = options.password;
|
|
55
|
-
|
|
56
|
-
console.log("Setting credentials...");
|
|
57
|
-
fs.writeFileSync(exports.credentialsPath, newEnv);
|
|
58
|
-
console.log("Credentials set!");
|
|
20
|
+
(0, download_1.download)(GARMIN_USERNAME, GARMIN_PASSWORD);
|
|
59
21
|
});
|
|
60
22
|
commander_1.program
|
|
61
|
-
.command("
|
|
62
|
-
.description("
|
|
23
|
+
.command("charts")
|
|
24
|
+
.description("Parse activities from Garmin Connect")
|
|
63
25
|
.action(() => {
|
|
64
|
-
(0, download_1.download)();
|
|
65
|
-
});
|
|
66
|
-
commander_1.program.command("charts").description("Parse activities from Garmin Connect").action(() => {
|
|
67
26
|
console.log("Parsing activities...");
|
|
68
27
|
(0, parse_1.parse)();
|
|
69
28
|
});
|
package/bin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAEA,yCAAoC;AACpC,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,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,IAAA,aAAK,GAAE,CAAC;AACV,CAAC,CAAC,CAAC;AAEL,mBAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/package.json
CHANGED
package/src/download.ts
CHANGED
|
@@ -1,25 +1,18 @@
|
|
|
1
|
-
import * as dotenv from "dotenv";
|
|
2
|
-
|
|
3
|
-
const path = require("path");
|
|
4
|
-
const homeDir = require("os").homedir();
|
|
5
|
-
export const credentialsPath = path.join(homeDir, ".gc_credentials");
|
|
6
|
-
dotenv.config({ path: credentialsPath });
|
|
7
|
-
|
|
8
1
|
import * as fs from "fs";
|
|
9
2
|
// @ts-ignore
|
|
10
3
|
import { GarminConnect } from "garmin-connect";
|
|
11
4
|
import { garminDataFolder } from ".";
|
|
12
|
-
export const download = async (
|
|
5
|
+
export const download = async (
|
|
6
|
+
username: string,
|
|
7
|
+
password: string
|
|
8
|
+
): Promise<void> => {
|
|
13
9
|
const GCClient = new GarminConnect({
|
|
14
|
-
username
|
|
15
|
-
password
|
|
10
|
+
username,
|
|
11
|
+
password,
|
|
16
12
|
});
|
|
17
13
|
|
|
18
|
-
await GCClient.login(
|
|
19
|
-
|
|
20
|
-
process.env.GARMIN_PASSWORD || ""
|
|
21
|
-
);
|
|
22
|
-
|
|
14
|
+
await GCClient.login(username, password);
|
|
15
|
+
|
|
23
16
|
const activities = await GCClient.getActivities();
|
|
24
17
|
|
|
25
18
|
const indoorClimbingActivities = activities?.filter(
|
package/src/index.ts
CHANGED
|
@@ -1,41 +1,30 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import * as fs from "fs";
|
|
4
|
-
|
|
5
3
|
import { program } from "commander";
|
|
6
4
|
const os = require("os");
|
|
7
5
|
const path = require("path");
|
|
8
6
|
const homeDir = os.homedir();
|
|
9
|
-
export const credentialsPath = path.join(homeDir, ".gc_credentials");
|
|
10
7
|
export const garminDataFolder = path.join(homeDir, ".gc_data");
|
|
11
8
|
import { download } from "./download";
|
|
12
9
|
import { parse } from "./parse";
|
|
13
10
|
|
|
14
11
|
program
|
|
15
|
-
.command("
|
|
12
|
+
.command("download")
|
|
13
|
+
.description("Download activities from Garmin Connect")
|
|
16
14
|
.option("-u, --username <username>", "Garmin Connect username")
|
|
17
15
|
.option("-p, --password <password>", "Garmin Connect password")
|
|
18
|
-
.description("Set GARMIN_USERNAME and GARMIN_PASSWORD")
|
|
19
16
|
.action((options) => {
|
|
20
17
|
const GARMIN_USERNAME = options.username;
|
|
21
18
|
const GARMIN_PASSWORD = options.password;
|
|
22
|
-
|
|
23
|
-
console.log("Setting credentials...");
|
|
24
|
-
fs.writeFileSync(credentialsPath, newEnv);
|
|
25
|
-
console.log("Credentials set!");
|
|
19
|
+
download(GARMIN_USERNAME, GARMIN_PASSWORD);
|
|
26
20
|
});
|
|
27
21
|
|
|
28
22
|
program
|
|
29
|
-
.command("
|
|
30
|
-
.description("
|
|
23
|
+
.command("charts")
|
|
24
|
+
.description("Parse activities from Garmin Connect")
|
|
31
25
|
.action(() => {
|
|
32
|
-
|
|
26
|
+
console.log("Parsing activities...");
|
|
27
|
+
parse();
|
|
33
28
|
});
|
|
34
29
|
|
|
35
|
-
program.command("charts").description("Parse activities from Garmin Connect").action(() => {
|
|
36
|
-
console.log("Parsing activities...");
|
|
37
|
-
parse();
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
|
|
41
30
|
program.parse();
|