@clipin/convex-wearables 0.0.2 → 0.0.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.
Files changed (88) hide show
  1. package/dist/client/index.d.ts +9 -4
  2. package/dist/client/index.d.ts.map +1 -1
  3. package/dist/client/index.js.map +1 -1
  4. package/dist/component/_generated/component.d.ts +50 -0
  5. package/dist/component/_generated/component.d.ts.map +1 -0
  6. package/dist/component/_generated/component.js +11 -0
  7. package/dist/component/_generated/component.js.map +1 -0
  8. package/dist/component/backfillJobs.d.ts +11 -11
  9. package/dist/component/connections.d.ts +9 -9
  10. package/dist/component/connections.d.ts.map +1 -1
  11. package/dist/component/connections.js +2 -0
  12. package/dist/component/connections.js.map +1 -1
  13. package/dist/component/dataPoints.d.ts +5 -5
  14. package/dist/component/events.d.ts +13 -13
  15. package/dist/component/garminBackfill.d.ts +2 -2
  16. package/dist/component/garminWebhooks.d.ts +2 -2
  17. package/dist/component/garminWebhooks.d.ts.map +1 -1
  18. package/dist/component/garminWebhooks.js +2 -0
  19. package/dist/component/garminWebhooks.js.map +1 -1
  20. package/dist/component/lifecycle.d.ts +1 -1
  21. package/dist/component/lifecycle.d.ts.map +1 -1
  22. package/dist/component/lifecycle.js +2 -0
  23. package/dist/component/lifecycle.js.map +1 -1
  24. package/dist/component/oauthStates.d.ts +3 -3
  25. package/dist/component/schema.d.ts +26 -26
  26. package/dist/component/sdkPush.d.ts +11 -11
  27. package/dist/component/summaries.d.ts +4 -4
  28. package/dist/component/syncJobs.d.ts +23 -23
  29. package/dist/component/syncWorkflow.d.ts +2 -2
  30. package/dist/test.d.ts +421 -0
  31. package/dist/test.d.ts.map +1 -0
  32. package/dist/test.js +17 -0
  33. package/dist/test.js.map +1 -0
  34. package/package.json +12 -2
  35. package/src/client/_generated/_ignore.ts +2 -0
  36. package/src/client/index.test.ts +52 -0
  37. package/src/client/index.ts +784 -0
  38. package/src/client/types.ts +533 -0
  39. package/src/component/_generated/_ignore.ts +2 -0
  40. package/src/component/_generated/api.ts +16 -0
  41. package/src/component/_generated/component.ts +74 -0
  42. package/src/component/_generated/dataModel.ts +40 -0
  43. package/src/component/_generated/server.ts +48 -0
  44. package/src/component/backfillJobs.test.ts +47 -0
  45. package/src/component/backfillJobs.ts +245 -0
  46. package/src/component/connections.test.ts +297 -0
  47. package/src/component/connections.ts +329 -0
  48. package/src/component/convex.config.ts +7 -0
  49. package/src/component/dataPoints.test.ts +282 -0
  50. package/src/component/dataPoints.ts +305 -0
  51. package/src/component/dataSources.test.ts +247 -0
  52. package/src/component/dataSources.ts +109 -0
  53. package/src/component/events.test.ts +380 -0
  54. package/src/component/events.ts +288 -0
  55. package/src/component/garminBackfill.ts +343 -0
  56. package/src/component/garminWebhooks.test.ts +609 -0
  57. package/src/component/garminWebhooks.ts +656 -0
  58. package/src/component/httpHandlers.ts +153 -0
  59. package/src/component/lifecycle.test.ts +179 -0
  60. package/src/component/lifecycle.ts +87 -0
  61. package/src/component/menstrualCycles.ts +124 -0
  62. package/src/component/oauthActions.ts +261 -0
  63. package/src/component/oauthStates.test.ts +170 -0
  64. package/src/component/oauthStates.ts +85 -0
  65. package/src/component/providerSettings.ts +66 -0
  66. package/src/component/providers/additionalProviders.test.ts +401 -0
  67. package/src/component/providers/garmin.ts +1169 -0
  68. package/src/component/providers/oauth.test.ts +174 -0
  69. package/src/component/providers/oauth.ts +246 -0
  70. package/src/component/providers/polar.ts +220 -0
  71. package/src/component/providers/registry.ts +37 -0
  72. package/src/component/providers/strava.test.ts +195 -0
  73. package/src/component/providers/strava.ts +253 -0
  74. package/src/component/providers/suunto.ts +592 -0
  75. package/src/component/providers/types.ts +189 -0
  76. package/src/component/providers/whoop.ts +600 -0
  77. package/src/component/schema.ts +339 -0
  78. package/src/component/sdkPush.test.ts +367 -0
  79. package/src/component/sdkPush.ts +440 -0
  80. package/src/component/summaries.test.ts +201 -0
  81. package/src/component/summaries.ts +143 -0
  82. package/src/component/syncJobs.test.ts +254 -0
  83. package/src/component/syncJobs.ts +140 -0
  84. package/src/component/syncWorkflow.test.ts +87 -0
  85. package/src/component/syncWorkflow.ts +739 -0
  86. package/src/component/test.setup.ts +6 -0
  87. package/src/component/workflowManager.ts +19 -0
  88. package/src/test.ts +25 -0
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Provider-level types shared across all provider implementations.
3
+ */
4
+
5
+ // ---------------------------------------------------------------------------
6
+ // OAuth configuration per provider
7
+ // ---------------------------------------------------------------------------
8
+
9
+ export interface OAuthEndpoints {
10
+ authorizeUrl: string;
11
+ tokenUrl: string;
12
+ apiBaseUrl: string;
13
+ }
14
+
15
+ export type AuthMethod = "body" | "basic";
16
+
17
+ export interface OAuthProviderConfig {
18
+ endpoints: OAuthEndpoints;
19
+ clientId: string;
20
+ clientSecret: string;
21
+ defaultScope: string;
22
+ usePkce: boolean;
23
+ authMethod: AuthMethod;
24
+ /** Extra query params on the authorize URL (e.g. Suunto subscription key). */
25
+ extraAuthorizeParams?: Record<string, string>;
26
+ /** Extra headers to attach to provider API requests. */
27
+ defaultHeaders?: Record<string, string>;
28
+ }
29
+
30
+ // ---------------------------------------------------------------------------
31
+ // Token types
32
+ // ---------------------------------------------------------------------------
33
+
34
+ export interface OAuthTokenResponse {
35
+ access_token: string;
36
+ refresh_token?: string;
37
+ expires_in?: number;
38
+ token_type?: string;
39
+ scope?: string;
40
+ x_user_id?: number;
41
+ [key: string]: unknown;
42
+ }
43
+
44
+ export interface ProviderUserInfo {
45
+ providerUserId: string | null;
46
+ username: string | null;
47
+ }
48
+
49
+ export interface ProviderCredentials {
50
+ clientId: string;
51
+ clientSecret: string;
52
+ subscriptionKey?: string;
53
+ }
54
+
55
+ // ---------------------------------------------------------------------------
56
+ // Normalized workout / event data from providers
57
+ // ---------------------------------------------------------------------------
58
+
59
+ export interface NormalizedEvent {
60
+ category: "workout" | "sleep";
61
+ type?: string;
62
+ sourceName?: string;
63
+ deviceModel?: string;
64
+ softwareVersion?: string;
65
+ source?: string;
66
+ deviceType?: string;
67
+ originalSourceName?: string;
68
+ durationSeconds?: number;
69
+ startDatetime: number; // unix ms
70
+ endDatetime?: number; // unix ms
71
+ externalId?: string;
72
+
73
+ // Workout fields
74
+ heartRateMin?: number;
75
+ heartRateMax?: number;
76
+ heartRateAvg?: number;
77
+ energyBurned?: number;
78
+ distance?: number;
79
+ stepsCount?: number;
80
+ maxSpeed?: number;
81
+ maxWatts?: number;
82
+ movingTimeSeconds?: number;
83
+ totalElevationGain?: number;
84
+ averageSpeed?: number;
85
+ averageWatts?: number;
86
+ elevHigh?: number;
87
+ elevLow?: number;
88
+
89
+ // Sleep fields
90
+ sleepTotalDurationMinutes?: number;
91
+ sleepTimeInBedMinutes?: number;
92
+ sleepEfficiencyScore?: number;
93
+ sleepDeepMinutes?: number;
94
+ sleepRemMinutes?: number;
95
+ sleepLightMinutes?: number;
96
+ sleepAwakeMinutes?: number;
97
+ isNap?: boolean;
98
+ sleepStages?: { stage: string; startTime: number; endTime: number }[];
99
+ }
100
+
101
+ export interface NormalizedDataPoint {
102
+ seriesType: string;
103
+ recordedAt: number;
104
+ value: number;
105
+ externalId?: string;
106
+ deviceModel?: string;
107
+ softwareVersion?: string;
108
+ source?: string;
109
+ deviceType?: string;
110
+ originalSourceName?: string;
111
+ }
112
+
113
+ export interface NormalizedDailySummary {
114
+ date: string;
115
+ category: string;
116
+ totalSteps?: number;
117
+ totalCalories?: number;
118
+ activeCalories?: number;
119
+ activeMinutes?: number;
120
+ totalDistance?: number;
121
+ floorsClimbed?: number;
122
+ avgHeartRate?: number;
123
+ maxHeartRate?: number;
124
+ minHeartRate?: number;
125
+ sleepDurationMinutes?: number;
126
+ sleepEfficiency?: number;
127
+ deepSleepMinutes?: number;
128
+ remSleepMinutes?: number;
129
+ lightSleepMinutes?: number;
130
+ awakeDuringMinutes?: number;
131
+ timeInBedMinutes?: number;
132
+ hrvAvg?: number;
133
+ hrvRmssd?: number;
134
+ restingHeartRate?: number;
135
+ recoveryScore?: number;
136
+ weight?: number;
137
+ bodyFatPercentage?: number;
138
+ bodyMassIndex?: number;
139
+ leanBodyMass?: number;
140
+ bodyTemperature?: number;
141
+ avgStressLevel?: number;
142
+ bodyBattery?: number;
143
+ spo2Avg?: number;
144
+ }
145
+
146
+ // ---------------------------------------------------------------------------
147
+ // Provider interface
148
+ // ---------------------------------------------------------------------------
149
+
150
+ export interface ProviderAdapter {
151
+ name: string;
152
+ /** Build the OAuth config from provider credentials. */
153
+ oauthConfig(credentials: ProviderCredentials): OAuthProviderConfig;
154
+ /** Resolve the authenticated provider user. */
155
+ getUserInfo(
156
+ accessToken: string,
157
+ tokenResponse?: OAuthTokenResponse,
158
+ appUserId?: string,
159
+ credentials?: ProviderCredentials,
160
+ ): Promise<ProviderUserInfo>;
161
+ /** Optional provider-specific action after token exchange. */
162
+ postConnect?(
163
+ accessToken: string,
164
+ tokenResponse: OAuthTokenResponse,
165
+ appUserId: string,
166
+ credentials?: ProviderCredentials,
167
+ ): Promise<void>;
168
+ /** Fetch provider events (workouts, sleep). */
169
+ fetchEvents?(
170
+ accessToken: string,
171
+ startDate: number,
172
+ endDate: number,
173
+ credentials?: ProviderCredentials,
174
+ ): Promise<NormalizedEvent[]>;
175
+ /** Fetch time-series provider data. */
176
+ fetchDataPoints?(
177
+ accessToken: string,
178
+ startDate: number,
179
+ endDate: number,
180
+ credentials?: ProviderCredentials,
181
+ ): Promise<NormalizedDataPoint[]>;
182
+ /** Fetch daily summary provider data. */
183
+ fetchDailySummaries?(
184
+ accessToken: string,
185
+ startDate: number,
186
+ endDate: number,
187
+ credentials?: ProviderCredentials,
188
+ ): Promise<NormalizedDailySummary[]>;
189
+ }