@nativesquare/soma 0.9.4 → 0.10.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.
Files changed (203) hide show
  1. package/dist/client/index.d.ts +124 -144
  2. package/dist/client/index.d.ts.map +1 -1
  3. package/dist/client/index.js +157 -134
  4. package/dist/client/index.js.map +1 -1
  5. package/dist/component/_generated/api.d.ts +18 -0
  6. package/dist/component/_generated/api.d.ts.map +1 -1
  7. package/dist/component/_generated/api.js.map +1 -1
  8. package/dist/component/_generated/component.d.ts +113 -22
  9. package/dist/component/_generated/component.d.ts.map +1 -1
  10. package/dist/component/garmin/auth.d.ts +0 -4
  11. package/dist/component/garmin/auth.d.ts.map +1 -1
  12. package/dist/component/garmin/auth.js +0 -8
  13. package/dist/component/garmin/auth.js.map +1 -1
  14. package/dist/component/garmin/private.d.ts +10 -1
  15. package/dist/component/garmin/private.d.ts.map +1 -1
  16. package/dist/component/garmin/private.js +49 -9
  17. package/dist/component/garmin/private.js.map +1 -1
  18. package/dist/component/garmin/public.d.ts +237 -62
  19. package/dist/component/garmin/public.d.ts.map +1 -1
  20. package/dist/component/garmin/public.js +689 -254
  21. package/dist/component/garmin/public.js.map +1 -1
  22. package/dist/component/garmin/utils.d.ts +8 -0
  23. package/dist/component/garmin/utils.d.ts.map +1 -1
  24. package/dist/component/garmin/utils.js +9 -0
  25. package/dist/component/garmin/utils.js.map +1 -1
  26. package/dist/component/schema.d.ts +2 -2
  27. package/dist/component/schema.d.ts.map +1 -1
  28. package/dist/component/schema.js +5 -3
  29. package/dist/component/schema.js.map +1 -1
  30. package/dist/{strava → component/strava}/auth.d.ts +15 -48
  31. package/dist/component/strava/auth.d.ts.map +1 -0
  32. package/dist/{strava → component/strava}/auth.js +4 -39
  33. package/dist/component/strava/auth.js.map +1 -0
  34. package/dist/component/strava/client.d.ts +8 -0
  35. package/dist/component/strava/client.d.ts.map +1 -0
  36. package/dist/component/strava/client.js +18 -0
  37. package/dist/component/strava/client.js.map +1 -0
  38. package/dist/component/strava/private.d.ts +19 -0
  39. package/dist/component/strava/private.d.ts.map +1 -1
  40. package/dist/component/strava/private.js +52 -2
  41. package/dist/component/strava/private.js.map +1 -1
  42. package/dist/component/strava/public.d.ts +54 -19
  43. package/dist/component/strava/public.d.ts.map +1 -1
  44. package/dist/component/strava/public.js +159 -109
  45. package/dist/component/strava/public.js.map +1 -1
  46. package/dist/component/strava/transform/activity.d.ts +19 -0
  47. package/dist/component/strava/transform/activity.d.ts.map +1 -0
  48. package/dist/{strava → component/strava/transform}/activity.js +31 -45
  49. package/dist/component/strava/transform/activity.js.map +1 -0
  50. package/dist/{strava → component/strava/transform}/athlete.d.ts +4 -10
  51. package/dist/component/strava/transform/athlete.d.ts.map +1 -0
  52. package/dist/{strava → component/strava/transform}/athlete.js +2 -8
  53. package/dist/component/strava/transform/athlete.js.map +1 -0
  54. package/dist/component/strava/transform/maps/sportType.d.ts +7 -0
  55. package/dist/component/strava/transform/maps/sportType.d.ts.map +1 -0
  56. package/dist/{strava/maps/sport-type.js → component/strava/transform/maps/sportType.js} +4 -2
  57. package/dist/component/strava/transform/maps/sportType.js.map +1 -0
  58. package/dist/component/strava/types/stravaApi/client/client.gen.d.ts +3 -0
  59. package/dist/component/strava/types/stravaApi/client/client.gen.d.ts.map +1 -0
  60. package/dist/component/strava/types/stravaApi/client/client.gen.js +236 -0
  61. package/dist/component/strava/types/stravaApi/client/client.gen.js.map +1 -0
  62. package/dist/component/strava/types/stravaApi/client/index.d.ts +9 -0
  63. package/dist/component/strava/types/stravaApi/client/index.d.ts.map +1 -0
  64. package/dist/component/strava/types/stravaApi/client/index.js +7 -0
  65. package/dist/component/strava/types/stravaApi/client/index.js.map +1 -0
  66. package/dist/component/strava/types/stravaApi/client/types.gen.d.ts +118 -0
  67. package/dist/component/strava/types/stravaApi/client/types.gen.d.ts.map +1 -0
  68. package/dist/component/strava/types/stravaApi/client/types.gen.js +3 -0
  69. package/dist/component/strava/types/stravaApi/client/types.gen.js.map +1 -0
  70. package/dist/component/strava/types/stravaApi/client/utils.gen.d.ts +34 -0
  71. package/dist/component/strava/types/stravaApi/client/utils.gen.d.ts.map +1 -0
  72. package/dist/component/strava/types/stravaApi/client/utils.gen.js +229 -0
  73. package/dist/component/strava/types/stravaApi/client/utils.gen.js.map +1 -0
  74. package/dist/component/strava/types/stravaApi/client.gen.d.ts +13 -0
  75. package/dist/component/strava/types/stravaApi/client.gen.d.ts.map +1 -0
  76. package/dist/component/strava/types/stravaApi/client.gen.js +4 -0
  77. package/dist/component/strava/types/stravaApi/client.gen.js.map +1 -0
  78. package/dist/component/strava/types/stravaApi/core/auth.gen.d.ts +19 -0
  79. package/dist/component/strava/types/stravaApi/core/auth.gen.d.ts.map +1 -0
  80. package/dist/component/strava/types/stravaApi/core/auth.gen.js +15 -0
  81. package/dist/component/strava/types/stravaApi/core/auth.gen.js.map +1 -0
  82. package/dist/component/strava/types/stravaApi/core/bodySerializer.gen.d.ts +26 -0
  83. package/dist/component/strava/types/stravaApi/core/bodySerializer.gen.d.ts.map +1 -0
  84. package/dist/component/strava/types/stravaApi/core/bodySerializer.gen.js +58 -0
  85. package/dist/component/strava/types/stravaApi/core/bodySerializer.gen.js.map +1 -0
  86. package/dist/component/strava/types/stravaApi/core/params.gen.d.ts +44 -0
  87. package/dist/component/strava/types/stravaApi/core/params.gen.d.ts.map +1 -0
  88. package/dist/component/strava/types/stravaApi/core/params.gen.js +101 -0
  89. package/dist/component/strava/types/stravaApi/core/params.gen.js.map +1 -0
  90. package/dist/component/strava/types/stravaApi/core/pathSerializer.gen.d.ts +34 -0
  91. package/dist/component/strava/types/stravaApi/core/pathSerializer.gen.d.ts.map +1 -0
  92. package/dist/component/strava/types/stravaApi/core/pathSerializer.gen.js +107 -0
  93. package/dist/component/strava/types/stravaApi/core/pathSerializer.gen.js.map +1 -0
  94. package/dist/component/strava/types/stravaApi/core/queryKeySerializer.gen.d.ts +19 -0
  95. package/dist/component/strava/types/stravaApi/core/queryKeySerializer.gen.d.ts.map +1 -0
  96. package/dist/component/strava/types/stravaApi/core/queryKeySerializer.gen.js +93 -0
  97. package/dist/component/strava/types/stravaApi/core/queryKeySerializer.gen.js.map +1 -0
  98. package/dist/component/strava/types/stravaApi/core/serverSentEvents.gen.d.ts +72 -0
  99. package/dist/component/strava/types/stravaApi/core/serverSentEvents.gen.d.ts.map +1 -0
  100. package/dist/component/strava/types/stravaApi/core/serverSentEvents.gen.js +134 -0
  101. package/dist/component/strava/types/stravaApi/core/serverSentEvents.gen.js.map +1 -0
  102. package/dist/component/strava/types/stravaApi/core/types.gen.d.ts +79 -0
  103. package/dist/component/strava/types/stravaApi/core/types.gen.d.ts.map +1 -0
  104. package/dist/component/strava/types/stravaApi/core/types.gen.js +3 -0
  105. package/dist/component/strava/types/stravaApi/core/types.gen.js.map +1 -0
  106. package/dist/component/strava/types/stravaApi/core/utils.gen.d.ts +20 -0
  107. package/dist/component/strava/types/stravaApi/core/utils.gen.d.ts.map +1 -0
  108. package/dist/component/strava/types/stravaApi/core/utils.gen.js +88 -0
  109. package/dist/component/strava/types/stravaApi/core/utils.gen.js.map +1 -0
  110. package/dist/component/strava/types/stravaApi/index.d.ts +3 -0
  111. package/dist/component/strava/types/stravaApi/index.d.ts.map +1 -0
  112. package/dist/component/strava/types/stravaApi/index.js +3 -0
  113. package/dist/component/strava/types/stravaApi/index.js.map +1 -0
  114. package/dist/component/strava/types/stravaApi/sdk.gen.d.ts +224 -0
  115. package/dist/component/strava/types/stravaApi/sdk.gen.d.ts.map +1 -0
  116. package/dist/component/strava/types/stravaApi/sdk.gen.js +361 -0
  117. package/dist/component/strava/types/stravaApi/sdk.gen.js.map +1 -0
  118. package/dist/component/strava/types/stravaApi/types.gen.d.ts +2209 -0
  119. package/dist/component/strava/types/stravaApi/types.gen.d.ts.map +1 -0
  120. package/dist/component/strava/types/stravaApi/types.gen.js +3 -0
  121. package/dist/component/strava/types/stravaApi/types.gen.js.map +1 -0
  122. package/dist/component/strava/types/stravaApi/zod.gen.d.ts +5332 -0
  123. package/dist/component/strava/types/stravaApi/zod.gen.d.ts.map +1 -0
  124. package/dist/component/strava/types/stravaApi/zod.gen.js +1009 -0
  125. package/dist/component/strava/types/stravaApi/zod.gen.js.map +1 -0
  126. package/dist/component/strava/utils.d.ts +15 -0
  127. package/dist/component/strava/utils.d.ts.map +1 -0
  128. package/dist/component/strava/utils.js +36 -0
  129. package/dist/component/strava/utils.js.map +1 -0
  130. package/dist/component/utils.d.ts +5 -0
  131. package/dist/component/utils.d.ts.map +1 -0
  132. package/dist/component/utils.js +11 -0
  133. package/dist/component/utils.js.map +1 -0
  134. package/package.json +131 -130
  135. package/src/client/index.ts +285 -164
  136. package/src/component/_generated/api.ts +18 -0
  137. package/src/component/_generated/component.ts +191 -24
  138. package/src/component/garmin/auth.ts +0 -9
  139. package/src/component/garmin/private.ts +84 -12
  140. package/src/component/garmin/public.ts +812 -348
  141. package/src/component/garmin/utils.ts +17 -0
  142. package/src/component/schema.ts +5 -3
  143. package/src/{strava → component/strava}/auth.ts +143 -185
  144. package/src/component/strava/client.ts +20 -0
  145. package/src/component/strava/private.ts +147 -89
  146. package/src/component/strava/public.ts +191 -139
  147. package/src/{strava → component/strava/transform}/activity.ts +256 -276
  148. package/src/{strava → component/strava/transform}/athlete.ts +41 -47
  149. package/src/{strava/maps/sport-type.ts → component/strava/transform/maps/sportType.ts} +100 -99
  150. package/src/component/strava/types/specs/strava-api.json +4796 -0
  151. package/src/component/strava/types/stravaApi/client/client.gen.ts +290 -0
  152. package/src/component/strava/types/stravaApi/client/index.ts +25 -0
  153. package/src/component/strava/types/stravaApi/client/types.gen.ts +214 -0
  154. package/src/component/strava/types/stravaApi/client/utils.gen.ts +316 -0
  155. package/src/component/strava/types/stravaApi/client.gen.ts +16 -0
  156. package/src/component/strava/types/stravaApi/core/auth.gen.ts +41 -0
  157. package/src/component/strava/types/stravaApi/core/bodySerializer.gen.ts +82 -0
  158. package/src/component/strava/types/stravaApi/core/params.gen.ts +169 -0
  159. package/src/component/strava/types/stravaApi/core/pathSerializer.gen.ts +171 -0
  160. package/src/component/strava/types/stravaApi/core/queryKeySerializer.gen.ts +117 -0
  161. package/src/component/strava/types/stravaApi/core/serverSentEvents.gen.ts +243 -0
  162. package/src/component/strava/types/stravaApi/core/types.gen.ts +104 -0
  163. package/src/component/strava/types/stravaApi/core/utils.gen.ts +140 -0
  164. package/src/component/strava/types/stravaApi/index.ts +4 -0
  165. package/src/component/strava/types/stravaApi/sdk.gen.ts +410 -0
  166. package/src/component/strava/types/stravaApi/types.gen.ts +2435 -0
  167. package/src/component/strava/types/stravaApi/zod.gen.ts +1132 -0
  168. package/src/component/strava/utils.ts +52 -0
  169. package/src/component/utils.ts +11 -0
  170. package/dist/strava/activity.d.ts +0 -121
  171. package/dist/strava/activity.d.ts.map +0 -1
  172. package/dist/strava/activity.js.map +0 -1
  173. package/dist/strava/athlete.d.ts.map +0 -1
  174. package/dist/strava/athlete.js.map +0 -1
  175. package/dist/strava/auth.d.ts.map +0 -1
  176. package/dist/strava/auth.js.map +0 -1
  177. package/dist/strava/client.d.ts +0 -93
  178. package/dist/strava/client.d.ts.map +0 -1
  179. package/dist/strava/client.js +0 -158
  180. package/dist/strava/client.js.map +0 -1
  181. package/dist/strava/index.d.ts +0 -13
  182. package/dist/strava/index.d.ts.map +0 -1
  183. package/dist/strava/index.js +0 -17
  184. package/dist/strava/index.js.map +0 -1
  185. package/dist/strava/maps/sport-type.d.ts +0 -7
  186. package/dist/strava/maps/sport-type.d.ts.map +0 -1
  187. package/dist/strava/maps/sport-type.js.map +0 -1
  188. package/dist/strava/sync.d.ts +0 -104
  189. package/dist/strava/sync.d.ts.map +0 -1
  190. package/dist/strava/sync.js +0 -87
  191. package/dist/strava/sync.js.map +0 -1
  192. package/dist/strava/types.d.ts +0 -266
  193. package/dist/strava/types.d.ts.map +0 -1
  194. package/dist/strava/types.js +0 -8
  195. package/dist/strava/types.js.map +0 -1
  196. package/src/strava/activity.test.ts +0 -415
  197. package/src/strava/athlete.test.ts +0 -139
  198. package/src/strava/auth.test.ts +0 -78
  199. package/src/strava/client.ts +0 -212
  200. package/src/strava/index.ts +0 -54
  201. package/src/strava/maps/sport-type.test.ts +0 -69
  202. package/src/strava/sync.ts +0 -168
  203. package/src/strava/types.ts +0 -361
@@ -0,0 +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
+ }
@@ -0,0 +1,11 @@
1
+ // ─── Shared Helpers ─────────────────────────────────────────────────────────
2
+ // Provider-agnostic utilities shared across providers (Strava, Garmin, etc.).
3
+
4
+ /**
5
+ * Generate a random state parameter for CSRF protection.
6
+ */
7
+ export function generateState(): string {
8
+ const bytes = new Uint8Array(32);
9
+ crypto.getRandomValues(bytes);
10
+ return Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
11
+ }
@@ -1,121 +0,0 @@
1
- import type { DetailedActivity, SummaryActivity, StreamSet, Lap } from "./types.js";
2
- /**
3
- * The output shape of {@link transformActivity}, matching the Soma Activity
4
- * validator minus `connectionId` and `userId` (added at ingestion time).
5
- */
6
- export type ActivityData = ReturnType<typeof transformActivity>;
7
- /**
8
- * Transform a Strava activity into a Soma Activity document shape.
9
- *
10
- * The returned object is ready to be spread into an `ingestActivity` call
11
- * alongside `connectionId` and `userId`.
12
- *
13
- * Accepts either a DetailedActivity (from `GET /activities/{id}`) or a
14
- * SummaryActivity (from `GET /athlete/activities`). When a DetailedActivity
15
- * is provided, additional fields like `calories`, `segment_efforts`, and
16
- * embedded `laps` are mapped. Optional streams and laps can also be supplied
17
- * for time-series data (heart rate, power, position, etc.).
18
- *
19
- * @param activity - The Strava activity (summary or detailed)
20
- * @param opts - Optional streams and laps data
21
- * @returns Soma Activity fields (without connectionId/userId)
22
- *
23
- * @example
24
- * ```ts
25
- * const data = transformActivity(stravaActivity, { streams, laps });
26
- * await soma.ingestActivity(ctx, { connectionId, userId, ...data });
27
- * ```
28
- */
29
- export declare function transformActivity(activity: DetailedActivity | SummaryActivity, opts?: {
30
- streams?: StreamSet;
31
- laps?: Lap[];
32
- }): {
33
- metadata: {
34
- summary_id: string;
35
- start_time: string;
36
- end_time: string;
37
- type: number;
38
- upload_type: number;
39
- name: string;
40
- city: string | undefined;
41
- state: string | undefined;
42
- country: string | undefined;
43
- };
44
- active_durations_data: {
45
- activity_seconds: number;
46
- };
47
- calories_data: {
48
- total_burned_calories: number;
49
- } | undefined;
50
- device_data: {
51
- name: string;
52
- } | undefined;
53
- distance_data: {
54
- summary: {
55
- distance_meters: number;
56
- elevation: {
57
- gain_actual_meters: number;
58
- max_meters: number | undefined;
59
- min_meters: number | undefined;
60
- } | undefined;
61
- };
62
- } | undefined;
63
- energy_data: {
64
- energy_kilojoules: number;
65
- } | undefined;
66
- heart_rate_data: {
67
- summary: {
68
- avg_hr_bpm: number | undefined;
69
- max_hr_bpm: number | undefined;
70
- } | undefined;
71
- detailed: {
72
- hr_samples: {
73
- timestamp: string;
74
- bpm: number;
75
- }[];
76
- } | undefined;
77
- } | undefined;
78
- lap_data: {
79
- laps: {
80
- start_time: string;
81
- end_time: string;
82
- distance_meters: number;
83
- calories: number | undefined;
84
- avg_speed_meters_per_second: number;
85
- avg_hr_bpm: number | undefined;
86
- }[];
87
- } | undefined;
88
- movement_data: {
89
- avg_speed_meters_per_second: number;
90
- max_speed_meters_per_second: number;
91
- avg_cadence_rpm: number | undefined;
92
- speed_samples: {
93
- timestamp: string;
94
- speed_meters_per_second: number;
95
- }[] | undefined;
96
- cadence_samples: {
97
- timestamp: string;
98
- cadence_rpm: number;
99
- }[] | undefined;
100
- } | undefined;
101
- polyline_map_data: {
102
- summary_polyline: string;
103
- } | undefined;
104
- position_data: {
105
- start_pos_lat_lng_deg: [number, number] | undefined;
106
- end_pos_lat_lng_deg: [number, number] | undefined;
107
- position_samples: {
108
- timestamp: string;
109
- coords_lat_lng_deg: [number, number];
110
- }[] | undefined;
111
- } | undefined;
112
- power_data: {
113
- avg_watts: number | undefined;
114
- max_watts: number | undefined;
115
- power_samples: {
116
- timestamp: string;
117
- watts: number;
118
- }[] | undefined;
119
- } | undefined;
120
- };
121
- //# sourceMappingURL=activity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/strava/activity.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAGpF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,gBAAgB,GAAG,eAAe,EAC5C,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA6IjB,MAAM,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAzF9C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/strava/activity.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"athlete.d.ts","sourceRoot":"","sources":["../../src/strava/athlete.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE9D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe;;;;;;;;;;;;EAqBxD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"athlete.js","sourceRoot":"","sources":["../../src/strava/athlete.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAS1E;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAwB;IACvD,MAAM,MAAM,GAA2B;QACrC,CAAC,EAAE,MAAM;QACT,CAAC,EAAE,QAAQ;KACZ,CAAC;IAEF,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;QAC1C,SAAS,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS;QACxC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,SAAS;QAC/B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;QACjC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,SAAS;QACrC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QAClD,eAAe,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS;QAChD,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK;YACrC,CAAC,CAAC;gBACA,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzD,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;aAC1D;YACD,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/strava/auth.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAMrD,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAe9D;AAID,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAuB7B;AAID,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAuB7B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/strava/auth.ts"],"names":[],"mappings":"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"}
@@ -1,93 +0,0 @@
1
- import type { DetailedActivity, DetailedAthlete, Lap, StreamSet, SummaryActivity } from "./types.js";
2
- export interface StravaClientOptions {
3
- /** OAuth access token for the authenticated athlete. */
4
- accessToken: string;
5
- /**
6
- * Base URL of the Strava API (without `/api/v3` suffix).
7
- * Defaults to `https://www.strava.com`.
8
- * Override to point at a mock server during development.
9
- */
10
- baseUrl?: string;
11
- }
12
- /**
13
- * A lightweight client for the Strava API v3.
14
- *
15
- * @example
16
- * ```ts
17
- * const client = new StravaClient({
18
- * accessToken: "tok_xxx",
19
- * baseUrl: "https://strava-mock-server.onrender.com", // optional
20
- * });
21
- *
22
- * const athlete = await client.getAthlete();
23
- * const activities = await client.listActivities({ per_page: 50 });
24
- * ```
25
- */
26
- export declare class StravaClient {
27
- private readonly accessToken;
28
- private readonly baseUrl;
29
- constructor(opts: StravaClientOptions);
30
- /**
31
- * Get the authenticated athlete's profile.
32
- *
33
- * Strava API: `GET /athlete`
34
- */
35
- getAthlete(): Promise<DetailedAthlete>;
36
- /**
37
- * List the authenticated athlete's activities.
38
- *
39
- * Strava API: `GET /athlete/activities`
40
- *
41
- * @param params.before - Only return activities before this Unix epoch timestamp
42
- * @param params.after - Only return activities after this Unix epoch timestamp
43
- * @param params.page - Page number (defaults to 1)
44
- * @param params.per_page - Items per page (defaults to 30, max 200)
45
- */
46
- listActivities(params?: {
47
- before?: number;
48
- after?: number;
49
- page?: number;
50
- per_page?: number;
51
- }): Promise<SummaryActivity[]>;
52
- /**
53
- * List ALL activities for the authenticated athlete, automatically
54
- * paginating through all pages.
55
- *
56
- * @param params.after - Only return activities after this Unix epoch timestamp
57
- * @param params.before - Only return activities before this Unix epoch timestamp
58
- * @param params.per_page - Items per page (defaults to 200)
59
- */
60
- listAllActivities(params?: {
61
- after?: number;
62
- before?: number;
63
- per_page?: number;
64
- }): Promise<SummaryActivity[]>;
65
- /**
66
- * Get a detailed activity by ID.
67
- *
68
- * Strava API: `GET /activities/{id}`
69
- */
70
- getActivity(id: number): Promise<DetailedActivity>;
71
- /**
72
- * Get time-series streams for an activity.
73
- *
74
- * Strava API: `GET /activities/{id}/streams`
75
- *
76
- * @param id - Activity ID
77
- * @param keys - Stream types to request (e.g. `["heartrate", "watts", "latlng", "altitude", "time"]`)
78
- */
79
- getActivityStreams(id: number, keys?: string[]): Promise<StreamSet>;
80
- /**
81
- * Get laps for an activity.
82
- *
83
- * Strava API: `GET /activities/{id}/laps`
84
- */
85
- getActivityLaps(id: number): Promise<Lap[]>;
86
- private get;
87
- }
88
- export declare class StravaApiError extends Error {
89
- readonly status: number;
90
- readonly body: string;
91
- constructor(message: string, status: number, body: string);
92
- }
93
- //# sourceMappingURL=client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/strava/client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,GAAG,EACH,SAAS,EAET,eAAe,EAChB,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,IAAI,EAAE,mBAAmB;IAOrC;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC;IAM5C;;;;;;;;;OASG;IACG,cAAc,CAAC,MAAM,CAAC,EAAE;QAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAa9B;;;;;;;OAOG;IACG,iBAAiB,CAAC,MAAM,CAAC,EAAE;QAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAoB9B;;;;OAIG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIxD;;;;;;;OAOG;IACG,kBAAkB,CACtB,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,MAAM,EAWX,GACA,OAAO,CAAC,SAAS,CAAC;IAWrB;;;;OAIG;IACG,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAMnC,GAAG;CAqBlB;AAID,qBAAa,cAAe,SAAQ,KAAK;aAGrB,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,MAAM;gBAF5B,OAAO,EAAE,MAAM,EACC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM;CAK/B"}
@@ -1,158 +0,0 @@
1
- // ─── Strava API Client ───────────────────────────────────────────────────────
2
- // Lightweight, fetch-based client for the Strava API v3.
3
- // No external dependencies — uses the global `fetch` available in Convex
4
- // actions and modern runtimes.
5
- const DEFAULT_BASE_URL = "https://www.strava.com";
6
- const API_PREFIX = "/api/v3";
7
- /**
8
- * A lightweight client for the Strava API v3.
9
- *
10
- * @example
11
- * ```ts
12
- * const client = new StravaClient({
13
- * accessToken: "tok_xxx",
14
- * baseUrl: "https://strava-mock-server.onrender.com", // optional
15
- * });
16
- *
17
- * const athlete = await client.getAthlete();
18
- * const activities = await client.listActivities({ per_page: 50 });
19
- * ```
20
- */
21
- export class StravaClient {
22
- accessToken;
23
- baseUrl;
24
- constructor(opts) {
25
- this.accessToken = opts.accessToken;
26
- this.baseUrl = (opts.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, "");
27
- }
28
- // ─── Athlete ─────────────────────────────────────────────────────────────
29
- /**
30
- * Get the authenticated athlete's profile.
31
- *
32
- * Strava API: `GET /athlete`
33
- */
34
- async getAthlete() {
35
- return this.get("/athlete");
36
- }
37
- // ─── Activities ──────────────────────────────────────────────────────────
38
- /**
39
- * List the authenticated athlete's activities.
40
- *
41
- * Strava API: `GET /athlete/activities`
42
- *
43
- * @param params.before - Only return activities before this Unix epoch timestamp
44
- * @param params.after - Only return activities after this Unix epoch timestamp
45
- * @param params.page - Page number (defaults to 1)
46
- * @param params.per_page - Items per page (defaults to 30, max 200)
47
- */
48
- async listActivities(params) {
49
- const query = new URLSearchParams();
50
- if (params?.before != null)
51
- query.set("before", String(params.before));
52
- if (params?.after != null)
53
- query.set("after", String(params.after));
54
- if (params?.page != null)
55
- query.set("page", String(params.page));
56
- if (params?.per_page != null)
57
- query.set("per_page", String(params.per_page));
58
- const qs = query.toString();
59
- return this.get(`/athlete/activities${qs ? `?${qs}` : ""}`);
60
- }
61
- /**
62
- * List ALL activities for the authenticated athlete, automatically
63
- * paginating through all pages.
64
- *
65
- * @param params.after - Only return activities after this Unix epoch timestamp
66
- * @param params.before - Only return activities before this Unix epoch timestamp
67
- * @param params.per_page - Items per page (defaults to 200)
68
- */
69
- async listAllActivities(params) {
70
- const perPage = params?.per_page ?? 200;
71
- const all = [];
72
- let page = 1;
73
- while (true) {
74
- const batch = await this.listActivities({
75
- after: params?.after,
76
- before: params?.before,
77
- page,
78
- per_page: perPage,
79
- });
80
- all.push(...batch);
81
- if (batch.length < perPage)
82
- break;
83
- page++;
84
- }
85
- return all;
86
- }
87
- /**
88
- * Get a detailed activity by ID.
89
- *
90
- * Strava API: `GET /activities/{id}`
91
- */
92
- async getActivity(id) {
93
- return this.get(`/activities/${id}`);
94
- }
95
- /**
96
- * Get time-series streams for an activity.
97
- *
98
- * Strava API: `GET /activities/{id}/streams`
99
- *
100
- * @param id - Activity ID
101
- * @param keys - Stream types to request (e.g. `["heartrate", "watts", "latlng", "altitude", "time"]`)
102
- */
103
- async getActivityStreams(id, keys = [
104
- "time",
105
- "heartrate",
106
- "watts",
107
- "cadence",
108
- "latlng",
109
- "altitude",
110
- "velocity_smooth",
111
- "grade_smooth",
112
- "distance",
113
- "temp",
114
- ]) {
115
- const query = new URLSearchParams({
116
- keys: keys.join(","),
117
- key_by_type: "true",
118
- });
119
- const streams = await this.get(`/activities/${id}/streams?${query.toString()}`);
120
- return streams;
121
- }
122
- /**
123
- * Get laps for an activity.
124
- *
125
- * Strava API: `GET /activities/{id}/laps`
126
- */
127
- async getActivityLaps(id) {
128
- return this.get(`/activities/${id}/laps`);
129
- }
130
- // ─── Internal ────────────────────────────────────────────────────────────
131
- async get(path) {
132
- const url = `${this.baseUrl}${API_PREFIX}${path}`;
133
- const response = await fetch(url, {
134
- method: "GET",
135
- headers: {
136
- Authorization: `Bearer ${this.accessToken}`,
137
- Accept: "application/json",
138
- },
139
- });
140
- if (!response.ok) {
141
- const body = await response.text().catch(() => "");
142
- throw new StravaApiError(`Strava API error: ${response.status} ${response.statusText}`, response.status, body);
143
- }
144
- return (await response.json());
145
- }
146
- }
147
- // ─── Error ───────────────────────────────────────────────────────────────────
148
- export class StravaApiError extends Error {
149
- status;
150
- body;
151
- constructor(message, status, body) {
152
- super(message);
153
- this.status = status;
154
- this.body = body;
155
- this.name = "StravaApiError";
156
- }
157
- }
158
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/strava/client.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- export { transformActivity } from "./activity.js";
2
- export type { ActivityData } from "./activity.js";
3
- export { transformAthlete } from "./athlete.js";
4
- export type { AthleteData } from "./athlete.js";
5
- export { mapSportType } from "./maps/sport-type.js";
6
- export { StravaClient, StravaApiError } from "./client.js";
7
- export type { StravaClientOptions } from "./client.js";
8
- export { buildAuthUrl, exchangeCode, refreshToken } from "./auth.js";
9
- export type { BuildAuthUrlOptions, ExchangeCodeOptions, RefreshTokenOptions, } from "./auth.js";
10
- export { syncActivities, syncAthlete } from "./sync.js";
11
- export type { SyncActivitiesOptions, SyncActivitiesResult, SyncAthleteOptions, } from "./sync.js";
12
- export type { DetailedActivity, DetailedAthlete, Lap, OAuthTokenResponse, PolylineMap, SegmentEffort, Split, Stream, StreamSet, StravaSportType, SummaryActivity, SummaryAthlete, SummaryClub, SummaryGear, SummarySegment, } from "./types.js";
13
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/strava/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACrE,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxD,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,GAAG,EACH,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,KAAK,EACL,MAAM,EACN,SAAS,EACT,eAAe,EACf,eAAe,EACf,cAAc,EACd,WAAW,EACX,WAAW,EACX,cAAc,GACf,MAAM,YAAY,CAAC"}
@@ -1,17 +0,0 @@
1
- // ─── @nativesquare/soma/strava ───────────────────────────────────────────────
2
- // Strava API → Soma schema transformers, API client, OAuth helpers, and sync.
3
- //
4
- // Pure TypeScript with zero runtime dependencies (uses global `fetch`).
5
- // Compatible with Convex actions and any modern runtime.
6
- // ── Transformers ─────────────────────────────────────────────────────────────
7
- export { transformActivity } from "./activity.js";
8
- export { transformAthlete } from "./athlete.js";
9
- // ── Enum Maps ────────────────────────────────────────────────────────────────
10
- export { mapSportType } from "./maps/sport-type.js";
11
- // ── API Client ───────────────────────────────────────────────────────────────
12
- export { StravaClient, StravaApiError } from "./client.js";
13
- // ── OAuth Helpers ────────────────────────────────────────────────────────────
14
- export { buildAuthUrl, exchangeCode, refreshToken } from "./auth.js";
15
- // ── Sync Helpers ─────────────────────────────────────────────────────────────
16
- export { syncActivities, syncAthlete } from "./sync.js";
17
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/strava/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,8EAA8E;AAC9E,EAAE;AACF,wEAAwE;AACxE,yDAAyD;AAEzD,gFAAgF;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhD,gFAAgF;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,gFAAgF;AAChF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG3D,gFAAgF;AAChF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAOrE,gFAAgF;AAChF,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
@@ -1,7 +0,0 @@
1
- import type { StravaSportType } from "../types.js";
2
- /**
3
- * Map a Strava sport_type string to the Terra ActivityType enum.
4
- * Returns Terra "Other" (108) for unknown types.
5
- */
6
- export declare function mapSportType(sportType: StravaSportType): number;
7
- //# sourceMappingURL=sport-type.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sport-type.d.ts","sourceRoot":"","sources":["../../../src/strava/maps/sport-type.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAqFnD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,CAE/D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sport-type.js","sourceRoot":"","sources":["../../../src/strava/maps/sport-type.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,sEAAsE;AACtE,2BAA2B;AAC3B,EAAE;AACF,oFAAoF;AACpF,oGAAoG;AAIpG,MAAM,YAAY,GAA2B;IAC3C,8EAA8E;IAC9E,mBAAmB;IACnB,IAAI,EAAE,CAAC;IACP,gBAAgB,EAAE,CAAC;IACnB,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,CAAC;IACZ,iBAAiB,EAAE,CAAC;IACpB,WAAW,EAAE,CAAC;IACd,UAAU,EAAE,CAAC;IAEb,8EAA8E;IAC9E,oBAAoB;IACpB,GAAG,EAAE,CAAC;IACN,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,CAAC;IAEb,8EAA8E;IAC9E,oBAAoB;IACpB,IAAI,EAAE,CAAC;IAEP,8EAA8E;IAC9E,sBAAsB;IACtB,IAAI,EAAE,EAAE;IAER,8EAA8E;IAC9E,oBAAoB;IACpB,IAAI,EAAE,EAAE;IAER,8EAA8E;IAC9E,SAAS,EAAE,EAAE,EAAW,sBAAsB;IAC9C,cAAc,EAAE,EAAE,EAAM,sBAAsB;IAC9C,SAAS,EAAE,EAAE,EAAW,6BAA6B;IACrD,SAAS,EAAE,EAAE,EAAW,qBAAqB;IAC7C,QAAQ,EAAE,EAAE,EAAY,oBAAoB;IAE5C,8EAA8E;IAC9E,MAAM,EAAE,EAAE,EAAc,eAAe;IACvC,UAAU,EAAE,EAAE,EAAU,eAAe;IACvC,QAAQ,EAAE,EAAE,EAAY,iBAAiB;IACzC,QAAQ,EAAE,EAAE,EAAY,iBAAiB;IACzC,IAAI,EAAE,EAAE,EAAgB,gBAAgB;IACxC,OAAO,EAAE,EAAE,EAAa,gBAAgB;IACxC,QAAQ,EAAE,EAAE,EAAY,oBAAoB;IAC5C,QAAQ,EAAE,EAAE,EAAY,oBAAoB;IAC5C,eAAe,EAAE,GAAG,EAAI,iBAAiB;IAEzC,8EAA8E;IAC9E,QAAQ,EAAE,EAAE,EAAY,gBAAgB;IACxC,WAAW,EAAE,EAAE,EAAS,gBAAgB;IACxC,UAAU,EAAE,EAAE,EAAU,gBAAgB;IACxC,SAAS,EAAE,EAAE,EAAW,gBAAgB;IAExC,8EAA8E;IAC9E,MAAM,EAAE,EAAE,EAAc,eAAe;IACvC,WAAW,EAAE,EAAE,EAAS,qBAAqB;IAC7C,SAAS,EAAE,EAAE,EAAW,kBAAkB;IAC1C,WAAW,EAAE,EAAE,EAAS,oBAAoB;IAC5C,MAAM,EAAE,EAAE,EAAc,eAAe;IACvC,UAAU,EAAE,GAAG,EAAS,kCAAkC;IAE1D,8EAA8E;IAC9E,cAAc,EAAE,EAAE,EAAM,0BAA0B;IAClD,QAAQ,EAAE,GAAG,EAAW,iBAAiB;IACzC,UAAU,EAAE,EAAE,EAAU,mBAAmB;IAC3C,YAAY,EAAE,EAAE,EAAQ,+BAA+B;IACvD,IAAI,EAAE,GAAG,EAAe,aAAa;IACrC,OAAO,EAAE,EAAE,EAAa,gBAAgB;IACxC,6BAA6B,EAAE,GAAG,EAAE,aAAa;IAEjD,8EAA8E;IAC9E,YAAY,EAAE,EAAE,EAAQ,sBAAsB;IAE9C,8EAA8E;IAC9E,MAAM,EAAE,EAAE,EAAc,yBAAyB;IAEjD,8EAA8E;IAC9E,IAAI,EAAE,EAAE,EAAgB,aAAa;IACrC,SAAS,EAAE,EAAE,EAAW,mBAAmB;IAC3C,UAAU,EAAE,EAAE,EAAU,mBAAmB;IAC3C,OAAO,EAAE,GAAG,EAAY,cAAc;CACvC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,SAA0B;IACrD,OAAO,YAAY,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC;AACxC,CAAC"}
@@ -1,104 +0,0 @@
1
- import type { Soma } from "../client/index.js";
2
- import type { ActionCtx } from "../client/types.js";
3
- import type { StravaClient } from "./client.js";
4
- export interface SyncActivitiesOptions {
5
- /** Authenticated Strava API client. */
6
- client: StravaClient;
7
- /** Soma component instance. */
8
- soma: Soma;
9
- /** Convex action context (has runMutation for ingestion). */
10
- ctx: ActionCtx;
11
- /** The Soma connection ID for this user–Strava link. */
12
- connectionId: string;
13
- /** The host app's user identifier (e.g., Clerk user ID). */
14
- userId: string;
15
- /**
16
- * Only sync activities after this Unix epoch timestamp (seconds).
17
- * Useful for incremental sync — pass the `lastDataUpdate` timestamp.
18
- */
19
- after?: number;
20
- /**
21
- * Only sync activities before this Unix epoch timestamp (seconds).
22
- */
23
- before?: number;
24
- /**
25
- * Fetch detailed streams (heart rate, power, position, etc.) for each
26
- * activity. Adds one API call per activity.
27
- * @default false
28
- */
29
- includeStreams?: boolean;
30
- /**
31
- * Fetch lap data for each activity. Adds one API call per activity
32
- * (unless the detailed activity already contains laps).
33
- * @default false
34
- */
35
- includeLaps?: boolean;
36
- }
37
- export interface SyncActivitiesResult {
38
- /** Number of activities successfully synced. */
39
- synced: number;
40
- /** Activity IDs that failed to sync (non-fatal). */
41
- errors: Array<{
42
- activityId: number;
43
- error: string;
44
- }>;
45
- }
46
- /**
47
- * Sync activities from Strava into Soma.
48
- *
49
- * This function handles the full flow:
50
- * 1. Lists activities from the Strava API (with auto-pagination)
51
- * 2. Optionally fetches detailed data, streams, and laps per activity
52
- * 3. Transforms each activity into the Soma schema
53
- * 4. Ingests each activity into Soma (with automatic deduplication)
54
- *
55
- * Designed to be called from a Convex action.
56
- *
57
- * @example
58
- * ```ts
59
- * import { StravaClient, syncActivities } from "@nativesquare/soma/strava";
60
- * import { Soma } from "@nativesquare/soma";
61
- *
62
- * export const syncStrava = internalAction({
63
- * args: { userId: v.string(), connectionId: v.string(), accessToken: v.string() },
64
- * handler: async (ctx, { userId, connectionId, accessToken }) => {
65
- * const client = new StravaClient({ accessToken });
66
- * const soma = new Soma(components.soma);
67
- *
68
- * const result = await syncActivities({
69
- * client,
70
- * soma,
71
- * ctx,
72
- * connectionId,
73
- * userId,
74
- * includeStreams: true,
75
- * });
76
- *
77
- * console.log(`Synced ${result.synced} activities`);
78
- * },
79
- * });
80
- * ```
81
- */
82
- export declare function syncActivities(opts: SyncActivitiesOptions): Promise<SyncActivitiesResult>;
83
- export interface SyncAthleteOptions {
84
- /** Authenticated Strava API client. */
85
- client: StravaClient;
86
- /** Soma component instance. */
87
- soma: Soma;
88
- /** Convex action context. */
89
- ctx: ActionCtx;
90
- /** The Soma connection ID for this user–Strava link. */
91
- connectionId: string;
92
- /** The host app's user identifier. */
93
- userId: string;
94
- }
95
- /**
96
- * Sync the authenticated athlete's profile from Strava into Soma.
97
- *
98
- * @example
99
- * ```ts
100
- * await syncAthlete({ client, soma, ctx, connectionId, userId });
101
- * ```
102
- */
103
- export declare function syncAthlete(opts: SyncAthleteOptions): Promise<void>;
104
- //# sourceMappingURL=sync.d.ts.map