@nativesquare/soma 0.16.8 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/garmin.d.ts +56 -0
- package/dist/client/garmin.d.ts.map +1 -1
- package/dist/client/garmin.js +57 -0
- package/dist/client/garmin.js.map +1 -1
- package/dist/client/strava.d.ts +58 -0
- package/dist/client/strava.d.ts.map +1 -1
- package/dist/client/strava.js +62 -2
- package/dist/client/strava.js.map +1 -1
- package/dist/component/_generated/component.d.ts +18 -0
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/garmin/public.d.ts +9 -0
- package/dist/component/garmin/public.d.ts.map +1 -1
- package/dist/component/garmin/public.js +28 -0
- package/dist/component/garmin/public.js.map +1 -1
- package/dist/component/strava/public.d.ts +9 -0
- package/dist/component/strava/public.d.ts.map +1 -1
- package/dist/component/strava/public.js +28 -0
- package/dist/component/strava/public.js.map +1 -1
- package/package.json +1 -1
- package/src/client/garmin.ts +65 -0
- package/src/client/strava.ts +70 -2
- package/src/component/_generated/component.ts +14 -0
- package/src/component/garmin/public.ts +45 -0
- package/src/component/strava/client.ts +20 -20
- package/src/component/strava/public.ts +45 -0
- package/src/component/strava/utils.ts +52 -52
|
@@ -119,6 +119,34 @@ export const disconnectStrava = action({
|
|
|
119
119
|
return null;
|
|
120
120
|
},
|
|
121
121
|
});
|
|
122
|
+
// ─── Access Token ───────────────────────────────────────────────────────────
|
|
123
|
+
export const getAccessToken = action({
|
|
124
|
+
args: {
|
|
125
|
+
userId: v.string(),
|
|
126
|
+
clientId: v.string(),
|
|
127
|
+
clientSecret: v.string(),
|
|
128
|
+
},
|
|
129
|
+
returns: v.object({
|
|
130
|
+
accessToken: v.string(),
|
|
131
|
+
expiresAt: v.optional(v.number()),
|
|
132
|
+
providerUserId: v.optional(v.string()),
|
|
133
|
+
}),
|
|
134
|
+
handler: async (ctx, args) => {
|
|
135
|
+
const { connectionId, accessToken } = await ctx.runAction(internal.private.resolveConnectionAndAccessToken, {
|
|
136
|
+
userId: args.userId,
|
|
137
|
+
provider: "STRAVA",
|
|
138
|
+
clientId: args.clientId,
|
|
139
|
+
clientSecret: args.clientSecret,
|
|
140
|
+
});
|
|
141
|
+
const tokenDoc = await ctx.runQuery(internal.private.getTokens, { connectionId });
|
|
142
|
+
const connection = await ctx.runQuery(internal.private.getConnectionByProvider, { userId: args.userId, provider: "STRAVA" });
|
|
143
|
+
return {
|
|
144
|
+
accessToken,
|
|
145
|
+
expiresAt: tokenDoc?.expiresAt,
|
|
146
|
+
providerUserId: connection?.providerUserId,
|
|
147
|
+
};
|
|
148
|
+
},
|
|
149
|
+
});
|
|
122
150
|
// ─── Pull ───────────────────────────────────────────────────────────────────
|
|
123
151
|
export const pullAthlete = action({
|
|
124
152
|
args: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.js","sourceRoot":"","sources":["../../../src/component/strava/public.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"public.js","sourceRoot":"","sources":["../../../src/component/strava/public.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/client/garmin.ts
CHANGED
|
@@ -59,6 +59,71 @@ export class SomaGarmin {
|
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
+
/**
|
|
63
|
+
* Resolve a fresh Garmin access token for a connected user.
|
|
64
|
+
*
|
|
65
|
+
* Returns the user's current access token, transparently refreshing it
|
|
66
|
+
* if it has expired or is within ~10 minutes of expiry. The refreshed
|
|
67
|
+
* token is persisted inside Soma before being returned.
|
|
68
|
+
*
|
|
69
|
+
* Intended for host apps that need to call Garmin Wellness/Training API
|
|
70
|
+
* endpoints not yet covered by Soma's `pull*` / `push*` helpers.
|
|
71
|
+
*
|
|
72
|
+
* ⚠️ **Security — server-only**
|
|
73
|
+
*
|
|
74
|
+
* The returned `accessToken` grants full API access to the user's Garmin
|
|
75
|
+
* account under the granted scopes. It must never leave your Convex
|
|
76
|
+
* backend:
|
|
77
|
+
*
|
|
78
|
+
* - Do **not** return it from a Convex query/mutation/action whose result
|
|
79
|
+
* is sent to a browser, mobile, or any untrusted client.
|
|
80
|
+
* - Do **not** log it, write it to analytics/telemetry, or persist a copy
|
|
81
|
+
* outside Soma's `providerTokens` table.
|
|
82
|
+
* - Treat the returned token as **single-use within this action**. Don't
|
|
83
|
+
* cache it across requests — Soma may refresh it on the next `pull*`
|
|
84
|
+
* call, leaving your cached copy stale.
|
|
85
|
+
* - Prefer Soma's built-in `pull*` / `push*` / `backfill*` methods
|
|
86
|
+
* whenever they cover the use case; they keep token freshness and
|
|
87
|
+
* refresh as Soma's responsibility, not yours.
|
|
88
|
+
*
|
|
89
|
+
* @param ctx - Action context from the host app
|
|
90
|
+
* @param args.userId - The host app's user identifier
|
|
91
|
+
* @returns `{ accessToken, expiresAt, providerUserId }` where `expiresAt`
|
|
92
|
+
* is a Unix timestamp (seconds) and `providerUserId` is Garmin's
|
|
93
|
+
* external user id, or `undefined` if not yet known.
|
|
94
|
+
* @throws If the user has no active Garmin connection, or no stored tokens.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* // Server-side action — never expose the token to the client.
|
|
99
|
+
* export const callCustomGarminEndpoint = action({
|
|
100
|
+
* args: { userId: v.string() },
|
|
101
|
+
* handler: async (ctx, { userId }) => {
|
|
102
|
+
* const { accessToken } = await soma.garmin.getAccessToken(ctx, { userId });
|
|
103
|
+
* const res = await fetch("https://apis.garmin.com/...", {
|
|
104
|
+
* headers: { Authorization: `Bearer ${accessToken}` },
|
|
105
|
+
* });
|
|
106
|
+
* return await res.json();
|
|
107
|
+
* },
|
|
108
|
+
* });
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
async getAccessToken(
|
|
112
|
+
ctx: ActionCtx,
|
|
113
|
+
args: { userId: string },
|
|
114
|
+
): Promise<{
|
|
115
|
+
accessToken: string;
|
|
116
|
+
expiresAt?: number;
|
|
117
|
+
providerUserId?: string;
|
|
118
|
+
}> {
|
|
119
|
+
const config = this.requireConfig();
|
|
120
|
+
return await ctx.runAction(this.component.garmin.public.getAccessToken, {
|
|
121
|
+
...args,
|
|
122
|
+
clientId: config.clientId,
|
|
123
|
+
clientSecret: config.clientSecret,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
62
127
|
/**
|
|
63
128
|
* Disconnect a user from Garmin.
|
|
64
129
|
*
|
package/src/client/strava.ts
CHANGED
|
@@ -55,6 +55,73 @@ export class SomaStrava {
|
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Resolve a fresh Strava access token for a connected user.
|
|
60
|
+
*
|
|
61
|
+
* Returns the user's current access token, transparently refreshing it
|
|
62
|
+
* if it has expired or is within ~10 minutes of expiry. The refreshed
|
|
63
|
+
* token is persisted inside Soma before being returned.
|
|
64
|
+
*
|
|
65
|
+
* Intended for host apps that need to call Strava endpoints not yet
|
|
66
|
+
* covered by Soma's `pull*` helpers (e.g. uploading activities, reading
|
|
67
|
+
* club data, posting comments).
|
|
68
|
+
*
|
|
69
|
+
* ⚠️ **Security — server-only**
|
|
70
|
+
*
|
|
71
|
+
* The returned `accessToken` grants full API access to the user's Strava
|
|
72
|
+
* account under the granted scopes. It must never leave your Convex
|
|
73
|
+
* backend:
|
|
74
|
+
*
|
|
75
|
+
* - Do **not** return it from a Convex query/mutation/action whose result
|
|
76
|
+
* is sent to a browser, mobile, or any untrusted client.
|
|
77
|
+
* - Do **not** log it, write it to analytics/telemetry, or persist a copy
|
|
78
|
+
* outside Soma's `providerTokens` table.
|
|
79
|
+
* - Treat the returned token as **single-use within this action**. Don't
|
|
80
|
+
* cache it across requests — Soma may refresh it on the next `pull*`
|
|
81
|
+
* call, leaving your cached copy stale.
|
|
82
|
+
* - Prefer Soma's built-in `pull*` / `push*` methods whenever they cover
|
|
83
|
+
* the use case; they keep token freshness and refresh as Soma's
|
|
84
|
+
* responsibility, not yours.
|
|
85
|
+
*
|
|
86
|
+
* @param ctx - Action context from the host app
|
|
87
|
+
* @param args.userId - The host app's user identifier
|
|
88
|
+
* @returns `{ accessToken, expiresAt, providerUserId }` where `expiresAt`
|
|
89
|
+
* is a Unix timestamp (seconds) and `providerUserId` is the user's
|
|
90
|
+
* Strava athlete id (as a string), or `undefined` if not yet known.
|
|
91
|
+
* @throws If the user has no active Strava connection, or no stored tokens.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```ts
|
|
95
|
+
* // Server-side action — never expose the token to the client.
|
|
96
|
+
* export const uploadGpx = action({
|
|
97
|
+
* args: { userId: v.string(), gpx: v.string() },
|
|
98
|
+
* handler: async (ctx, { userId, gpx }) => {
|
|
99
|
+
* const { accessToken } = await soma.strava.getAccessToken(ctx, { userId });
|
|
100
|
+
* await fetch("https://www.strava.com/api/v3/uploads", {
|
|
101
|
+
* method: "POST",
|
|
102
|
+
* headers: { Authorization: `Bearer ${accessToken}` },
|
|
103
|
+
* body: buildFormData(gpx),
|
|
104
|
+
* });
|
|
105
|
+
* },
|
|
106
|
+
* });
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
async getAccessToken(
|
|
110
|
+
ctx: ActionCtx,
|
|
111
|
+
args: { userId: string },
|
|
112
|
+
): Promise<{
|
|
113
|
+
accessToken: string;
|
|
114
|
+
expiresAt?: number;
|
|
115
|
+
providerUserId?: string;
|
|
116
|
+
}> {
|
|
117
|
+
const config = this.requireConfig();
|
|
118
|
+
return await ctx.runAction(this.component.strava.public.getAccessToken, {
|
|
119
|
+
...args,
|
|
120
|
+
clientId: config.clientId,
|
|
121
|
+
clientSecret: config.clientSecret,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
|
|
58
125
|
/**
|
|
59
126
|
* Disconnect a user from Strava.
|
|
60
127
|
*
|
|
@@ -305,15 +372,16 @@ export class SomaStrava {
|
|
|
305
372
|
updates?: Record<string, unknown>;
|
|
306
373
|
};
|
|
307
374
|
const rawEventName = `${p.object_type}-${p.aspect_type}`;
|
|
375
|
+
const authorizedFlag = p.updates?.authorized;
|
|
308
376
|
const isDeauthorize =
|
|
309
377
|
rawEventName === "athlete-update" &&
|
|
310
|
-
String(
|
|
378
|
+
(authorizedFlag === false || String(authorizedFlag) === "false");
|
|
311
379
|
const eventName = (isDeauthorize
|
|
312
380
|
? "athlete-deauthorize"
|
|
313
381
|
: rawEventName) as StravaWebhookEventName;
|
|
314
382
|
|
|
315
383
|
console.log(
|
|
316
|
-
`[soma:strava:webhook] received eventName=${eventName} ownerId=${p.owner_id} objectId=${p.object_id}`,
|
|
384
|
+
`[soma:strava:webhook] received eventName=${eventName} ownerId=${p.owner_id} objectId=${p.object_id} rawPayload=${JSON.stringify(payload)}`,
|
|
317
385
|
);
|
|
318
386
|
|
|
319
387
|
if (!webhookCfg.events?.[eventName]) {
|
|
@@ -82,6 +82,13 @@ export type ComponentApi<Name extends string | undefined = string | undefined> =
|
|
|
82
82
|
any,
|
|
83
83
|
Name
|
|
84
84
|
>;
|
|
85
|
+
getAccessToken: FunctionReference<
|
|
86
|
+
"action",
|
|
87
|
+
"internal",
|
|
88
|
+
{ clientId: string; clientSecret: string; userId: string },
|
|
89
|
+
{ accessToken: string; expiresAt?: number; providerUserId?: string },
|
|
90
|
+
Name
|
|
91
|
+
>;
|
|
85
92
|
getGarminAuthUrl: FunctionReference<
|
|
86
93
|
"action",
|
|
87
94
|
"internal",
|
|
@@ -2306,6 +2313,13 @@ export type ComponentApi<Name extends string | undefined = string | undefined> =
|
|
|
2306
2313
|
null,
|
|
2307
2314
|
Name
|
|
2308
2315
|
>;
|
|
2316
|
+
getAccessToken: FunctionReference<
|
|
2317
|
+
"action",
|
|
2318
|
+
"internal",
|
|
2319
|
+
{ clientId: string; clientSecret: string; userId: string },
|
|
2320
|
+
{ accessToken: string; expiresAt?: number; providerUserId?: string },
|
|
2321
|
+
Name
|
|
2322
|
+
>;
|
|
2309
2323
|
getStravaAuthUrl: FunctionReference<
|
|
2310
2324
|
"action",
|
|
2311
2325
|
"internal",
|
|
@@ -216,6 +216,51 @@ export const disconnectGarmin = action({
|
|
|
216
216
|
},
|
|
217
217
|
});
|
|
218
218
|
|
|
219
|
+
// ─── Access Token ───────────────────────────────────────────────────────────
|
|
220
|
+
|
|
221
|
+
export const getAccessToken = action({
|
|
222
|
+
args: {
|
|
223
|
+
userId: v.string(),
|
|
224
|
+
clientId: v.string(),
|
|
225
|
+
clientSecret: v.string(),
|
|
226
|
+
},
|
|
227
|
+
returns: v.object({
|
|
228
|
+
accessToken: v.string(),
|
|
229
|
+
expiresAt: v.optional(v.number()),
|
|
230
|
+
providerUserId: v.optional(v.string()),
|
|
231
|
+
}),
|
|
232
|
+
handler: async (ctx, args): Promise<{
|
|
233
|
+
accessToken: string;
|
|
234
|
+
expiresAt?: number;
|
|
235
|
+
providerUserId?: string;
|
|
236
|
+
}> => {
|
|
237
|
+
const { connectionId, accessToken } = await ctx.runAction(
|
|
238
|
+
internal.private.resolveConnectionAndAccessToken,
|
|
239
|
+
{
|
|
240
|
+
userId: args.userId,
|
|
241
|
+
provider: "GARMIN",
|
|
242
|
+
clientId: args.clientId,
|
|
243
|
+
clientSecret: args.clientSecret,
|
|
244
|
+
},
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
const tokenDoc: Doc<"providerTokens"> | null = await ctx.runQuery(
|
|
248
|
+
internal.private.getTokens,
|
|
249
|
+
{ connectionId },
|
|
250
|
+
);
|
|
251
|
+
const connection: Doc<"connections"> | null = await ctx.runQuery(
|
|
252
|
+
internal.private.getConnectionByProvider,
|
|
253
|
+
{ userId: args.userId, provider: "GARMIN" },
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
return {
|
|
257
|
+
accessToken,
|
|
258
|
+
expiresAt: tokenDoc?.expiresAt,
|
|
259
|
+
providerUserId: connection?.providerUserId,
|
|
260
|
+
};
|
|
261
|
+
},
|
|
262
|
+
});
|
|
263
|
+
|
|
219
264
|
// ─── Pull ───────────────────────────────────────────────────────────────────
|
|
220
265
|
|
|
221
266
|
export const pullActivities = action({
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
// ─── Strava API Helper ──────────────────────────────────────────────────────
|
|
2
|
-
// Shared utility for calling the Strava API v3.
|
|
3
|
-
// Uses the auto-generated @hey-api/openapi-ts SDK.
|
|
4
|
-
|
|
5
|
-
import { createClient, createConfig } from "./types/stravaApi/client/index.js";
|
|
6
|
-
|
|
7
|
-
// ─── Strava API Client ─────────────────────────────────────────────────────
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Create a configured Strava API client with Bearer auth.
|
|
11
|
-
*
|
|
12
|
-
* Each call creates a lightweight client instance — no connection pooling or
|
|
13
|
-
* shared state. Safe to create per-request.
|
|
14
|
-
*/
|
|
15
|
-
export function createStravaClient(accessToken: string) {
|
|
16
|
-
return createClient(createConfig({
|
|
17
|
-
baseUrl: "https://www.strava.com/api/v3",
|
|
18
|
-
headers: { Authorization: `Bearer ${accessToken}` },
|
|
19
|
-
}));
|
|
20
|
-
}
|
|
1
|
+
// ─── Strava API Helper ──────────────────────────────────────────────────────
|
|
2
|
+
// Shared utility for calling the Strava API v3.
|
|
3
|
+
// Uses the auto-generated @hey-api/openapi-ts SDK.
|
|
4
|
+
|
|
5
|
+
import { createClient, createConfig } from "./types/stravaApi/client/index.js";
|
|
6
|
+
|
|
7
|
+
// ─── Strava API Client ─────────────────────────────────────────────────────
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Create a configured Strava API client with Bearer auth.
|
|
11
|
+
*
|
|
12
|
+
* Each call creates a lightweight client instance — no connection pooling or
|
|
13
|
+
* shared state. Safe to create per-request.
|
|
14
|
+
*/
|
|
15
|
+
export function createStravaClient(accessToken: string) {
|
|
16
|
+
return createClient(createConfig({
|
|
17
|
+
baseUrl: "https://www.strava.com/api/v3",
|
|
18
|
+
headers: { Authorization: `Bearer ${accessToken}` },
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
@@ -174,6 +174,51 @@ export const disconnectStrava = action({
|
|
|
174
174
|
},
|
|
175
175
|
});
|
|
176
176
|
|
|
177
|
+
// ─── Access Token ───────────────────────────────────────────────────────────
|
|
178
|
+
|
|
179
|
+
export const getAccessToken = action({
|
|
180
|
+
args: {
|
|
181
|
+
userId: v.string(),
|
|
182
|
+
clientId: v.string(),
|
|
183
|
+
clientSecret: v.string(),
|
|
184
|
+
},
|
|
185
|
+
returns: v.object({
|
|
186
|
+
accessToken: v.string(),
|
|
187
|
+
expiresAt: v.optional(v.number()),
|
|
188
|
+
providerUserId: v.optional(v.string()),
|
|
189
|
+
}),
|
|
190
|
+
handler: async (ctx, args): Promise<{
|
|
191
|
+
accessToken: string;
|
|
192
|
+
expiresAt?: number;
|
|
193
|
+
providerUserId?: string;
|
|
194
|
+
}> => {
|
|
195
|
+
const { connectionId, accessToken } = await ctx.runAction(
|
|
196
|
+
internal.private.resolveConnectionAndAccessToken,
|
|
197
|
+
{
|
|
198
|
+
userId: args.userId,
|
|
199
|
+
provider: "STRAVA",
|
|
200
|
+
clientId: args.clientId,
|
|
201
|
+
clientSecret: args.clientSecret,
|
|
202
|
+
},
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
const tokenDoc: Doc<"providerTokens"> | null = await ctx.runQuery(
|
|
206
|
+
internal.private.getTokens,
|
|
207
|
+
{ connectionId },
|
|
208
|
+
);
|
|
209
|
+
const connection: Doc<"connections"> | null = await ctx.runQuery(
|
|
210
|
+
internal.private.getConnectionByProvider,
|
|
211
|
+
{ userId: args.userId, provider: "STRAVA" },
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
return {
|
|
215
|
+
accessToken,
|
|
216
|
+
expiresAt: tokenDoc?.expiresAt,
|
|
217
|
+
providerUserId: connection?.providerUserId,
|
|
218
|
+
};
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
|
|
177
222
|
// ─── Pull ───────────────────────────────────────────────────────────────────
|
|
178
223
|
|
|
179
224
|
export const pullAthlete = action({
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
// ─── Strava Shared Utilities ─────────────────────────────────────────────────
|
|
2
|
-
// Small helpers shared across the Strava component.
|
|
3
|
-
|
|
4
|
-
import type { Client } from "./types/stravaApi/client/index.js";
|
|
5
|
-
import type { SummaryActivity } from "./types/stravaApi/types.gen.js";
|
|
6
|
-
import { getLoggedInAthleteActivities } from "./types/stravaApi/sdk.gen.js";
|
|
7
|
-
|
|
8
|
-
// ─── Pagination ────────────────────────────────────────────────────────────
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* List ALL activities for the authenticated athlete, automatically
|
|
12
|
-
* paginating through all pages.
|
|
13
|
-
*
|
|
14
|
-
* The Strava API returns at most `perPage` activities per request.
|
|
15
|
-
* This helper loops until a page returns fewer results than requested.
|
|
16
|
-
*/
|
|
17
|
-
export async function listAllActivities(
|
|
18
|
-
client: Client,
|
|
19
|
-
params?: {
|
|
20
|
-
after?: number;
|
|
21
|
-
before?: number;
|
|
22
|
-
perPage?: number;
|
|
23
|
-
},
|
|
24
|
-
): Promise<SummaryActivity[]> {
|
|
25
|
-
const perPage = params?.perPage ?? 200;
|
|
26
|
-
const all: SummaryActivity[] = [];
|
|
27
|
-
let page = 1;
|
|
28
|
-
|
|
29
|
-
while (true) {
|
|
30
|
-
const { data, error } = await getLoggedInAthleteActivities({
|
|
31
|
-
client,
|
|
32
|
-
query: {
|
|
33
|
-
after: params?.after,
|
|
34
|
-
before: params?.before,
|
|
35
|
-
page,
|
|
36
|
-
per_page: perPage,
|
|
37
|
-
},
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
if (error || !data) {
|
|
41
|
-
throw new Error(
|
|
42
|
-
`Strava API error listing activities: ${error ? JSON.stringify(error) : "No data"}`,
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
all.push(...data);
|
|
47
|
-
if (data.length < perPage) break;
|
|
48
|
-
page++;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return all;
|
|
52
|
-
}
|
|
1
|
+
// ─── Strava Shared Utilities ─────────────────────────────────────────────────
|
|
2
|
+
// Small helpers shared across the Strava component.
|
|
3
|
+
|
|
4
|
+
import type { Client } from "./types/stravaApi/client/index.js";
|
|
5
|
+
import type { SummaryActivity } from "./types/stravaApi/types.gen.js";
|
|
6
|
+
import { getLoggedInAthleteActivities } from "./types/stravaApi/sdk.gen.js";
|
|
7
|
+
|
|
8
|
+
// ─── Pagination ────────────────────────────────────────────────────────────
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* List ALL activities for the authenticated athlete, automatically
|
|
12
|
+
* paginating through all pages.
|
|
13
|
+
*
|
|
14
|
+
* The Strava API returns at most `perPage` activities per request.
|
|
15
|
+
* This helper loops until a page returns fewer results than requested.
|
|
16
|
+
*/
|
|
17
|
+
export async function listAllActivities(
|
|
18
|
+
client: Client,
|
|
19
|
+
params?: {
|
|
20
|
+
after?: number;
|
|
21
|
+
before?: number;
|
|
22
|
+
perPage?: number;
|
|
23
|
+
},
|
|
24
|
+
): Promise<SummaryActivity[]> {
|
|
25
|
+
const perPage = params?.perPage ?? 200;
|
|
26
|
+
const all: SummaryActivity[] = [];
|
|
27
|
+
let page = 1;
|
|
28
|
+
|
|
29
|
+
while (true) {
|
|
30
|
+
const { data, error } = await getLoggedInAthleteActivities({
|
|
31
|
+
client,
|
|
32
|
+
query: {
|
|
33
|
+
after: params?.after,
|
|
34
|
+
before: params?.before,
|
|
35
|
+
page,
|
|
36
|
+
per_page: perPage,
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
if (error || !data) {
|
|
41
|
+
throw new Error(
|
|
42
|
+
`Strava API error listing activities: ${error ? JSON.stringify(error) : "No data"}`,
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
all.push(...data);
|
|
47
|
+
if (data.length < perPage) break;
|
|
48
|
+
page++;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return all;
|
|
52
|
+
}
|