@clipin/convex-wearables 0.0.2 → 0.1.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.
Files changed (104) hide show
  1. package/README.md +395 -0
  2. package/dist/client/index.d.ts +47 -6
  3. package/dist/client/index.d.ts.map +1 -1
  4. package/dist/client/index.js +30 -0
  5. package/dist/client/index.js.map +1 -1
  6. package/dist/client/types.d.ts +83 -0
  7. package/dist/client/types.d.ts.map +1 -1
  8. package/dist/client/types.js.map +1 -1
  9. package/dist/component/_generated/component.d.ts +50 -0
  10. package/dist/component/_generated/component.d.ts.map +1 -0
  11. package/dist/component/_generated/component.js +11 -0
  12. package/dist/component/_generated/component.js.map +1 -0
  13. package/dist/component/backfillJobs.d.ts +11 -11
  14. package/dist/component/connections.d.ts +9 -9
  15. package/dist/component/connections.d.ts.map +1 -1
  16. package/dist/component/connections.js +2 -0
  17. package/dist/component/connections.js.map +1 -1
  18. package/dist/component/dataPoints.d.ts +153 -39
  19. package/dist/component/dataPoints.d.ts.map +1 -1
  20. package/dist/component/dataPoints.js +1048 -139
  21. package/dist/component/dataPoints.js.map +1 -1
  22. package/dist/component/events.d.ts +13 -13
  23. package/dist/component/garminBackfill.d.ts +2 -2
  24. package/dist/component/garminWebhooks.d.ts +2 -2
  25. package/dist/component/garminWebhooks.d.ts.map +1 -1
  26. package/dist/component/garminWebhooks.js +2 -0
  27. package/dist/component/garminWebhooks.js.map +1 -1
  28. package/dist/component/lifecycle.d.ts +1 -1
  29. package/dist/component/lifecycle.d.ts.map +1 -1
  30. package/dist/component/lifecycle.js +39 -1
  31. package/dist/component/lifecycle.js.map +1 -1
  32. package/dist/component/oauthStates.d.ts +3 -3
  33. package/dist/component/schema.d.ts +192 -28
  34. package/dist/component/schema.d.ts.map +1 -1
  35. package/dist/component/schema.js +89 -0
  36. package/dist/component/schema.js.map +1 -1
  37. package/dist/component/sdkPush.d.ts +11 -11
  38. package/dist/component/summaries.d.ts +4 -4
  39. package/dist/component/syncJobs.d.ts +23 -23
  40. package/dist/component/syncWorkflow.d.ts +2 -2
  41. package/dist/component/timeSeriesPolicyUtils.d.ts +97 -0
  42. package/dist/component/timeSeriesPolicyUtils.d.ts.map +1 -0
  43. package/dist/component/timeSeriesPolicyUtils.js +163 -0
  44. package/dist/component/timeSeriesPolicyUtils.js.map +1 -0
  45. package/dist/test.d.ts +581 -0
  46. package/dist/test.d.ts.map +1 -0
  47. package/dist/test.js +17 -0
  48. package/dist/test.js.map +1 -0
  49. package/package.json +12 -2
  50. package/src/client/_generated/_ignore.ts +2 -0
  51. package/src/client/index.test.ts +149 -0
  52. package/src/client/index.ts +859 -0
  53. package/src/client/types.ts +632 -0
  54. package/src/component/_generated/_ignore.ts +2 -0
  55. package/src/component/_generated/api.ts +16 -0
  56. package/src/component/_generated/component.ts +74 -0
  57. package/src/component/_generated/dataModel.ts +40 -0
  58. package/src/component/_generated/server.ts +48 -0
  59. package/src/component/backfillJobs.test.ts +47 -0
  60. package/src/component/backfillJobs.ts +245 -0
  61. package/src/component/connections.test.ts +297 -0
  62. package/src/component/connections.ts +329 -0
  63. package/src/component/convex.config.ts +7 -0
  64. package/src/component/dataPoints.test.ts +827 -0
  65. package/src/component/dataPoints.ts +1676 -0
  66. package/src/component/dataSources.test.ts +247 -0
  67. package/src/component/dataSources.ts +109 -0
  68. package/src/component/events.test.ts +380 -0
  69. package/src/component/events.ts +288 -0
  70. package/src/component/garminBackfill.ts +343 -0
  71. package/src/component/garminWebhooks.test.ts +609 -0
  72. package/src/component/garminWebhooks.ts +656 -0
  73. package/src/component/httpHandlers.ts +153 -0
  74. package/src/component/lifecycle.test.ts +179 -0
  75. package/src/component/lifecycle.ts +128 -0
  76. package/src/component/menstrualCycles.ts +124 -0
  77. package/src/component/oauthActions.ts +261 -0
  78. package/src/component/oauthStates.test.ts +170 -0
  79. package/src/component/oauthStates.ts +85 -0
  80. package/src/component/providerSettings.ts +66 -0
  81. package/src/component/providers/additionalProviders.test.ts +401 -0
  82. package/src/component/providers/garmin.ts +1169 -0
  83. package/src/component/providers/oauth.test.ts +174 -0
  84. package/src/component/providers/oauth.ts +246 -0
  85. package/src/component/providers/polar.ts +220 -0
  86. package/src/component/providers/registry.ts +37 -0
  87. package/src/component/providers/strava.test.ts +195 -0
  88. package/src/component/providers/strava.ts +253 -0
  89. package/src/component/providers/suunto.ts +592 -0
  90. package/src/component/providers/types.ts +189 -0
  91. package/src/component/providers/whoop.ts +600 -0
  92. package/src/component/schema.ts +445 -0
  93. package/src/component/sdkPush.test.ts +367 -0
  94. package/src/component/sdkPush.ts +440 -0
  95. package/src/component/summaries.test.ts +201 -0
  96. package/src/component/summaries.ts +143 -0
  97. package/src/component/syncJobs.test.ts +254 -0
  98. package/src/component/syncJobs.ts +140 -0
  99. package/src/component/syncWorkflow.test.ts +87 -0
  100. package/src/component/syncWorkflow.ts +739 -0
  101. package/src/component/test.setup.ts +6 -0
  102. package/src/component/timeSeriesPolicyUtils.ts +243 -0
  103. package/src/component/workflowManager.ts +19 -0
  104. package/src/test.ts +25 -0
@@ -1,81 +1,195 @@
1
- /**
2
- * Get time-series data points with cursor-based pagination.
3
- * Uses the by_source_type_time index for efficient range queries.
4
- */
1
+ import type { Id } from "./_generated/dataModel";
2
+ type TimeSeriesPoint = {
3
+ timestamp: number;
4
+ value: number;
5
+ resolution?: "raw" | "rollup";
6
+ bucketMinutes?: number;
7
+ avg?: number;
8
+ min?: number;
9
+ max?: number;
10
+ last?: number;
11
+ count?: number;
12
+ };
5
13
  export declare const getTimeSeries: import("convex/server").RegisteredQuery<"public", {
6
14
  cursor?: string | undefined;
7
15
  limit?: number | undefined;
8
16
  order?: "asc" | "desc" | undefined;
9
- seriesType: string;
10
17
  dataSourceId: import("convex/values").GenericId<"dataSources">;
18
+ seriesType: string;
11
19
  startDate: number;
12
20
  endDate: number;
13
21
  }, Promise<{
14
- points: {
15
- timestamp: number;
16
- value: number;
17
- }[];
22
+ points: TimeSeriesPoint[];
18
23
  nextCursor: string | null;
19
24
  hasMore: boolean;
20
25
  }>>;
21
- /**
22
- * Get time-series data for a user across all their data sources for a given series type.
23
- * This is a user-facing query that resolves data sources internally.
24
- */
25
26
  export declare const getTimeSeriesForUser: import("convex/server").RegisteredQuery<"public", {
26
27
  limit?: number | undefined;
27
- seriesType: string;
28
28
  userId: string;
29
+ seriesType: string;
29
30
  startDate: number;
30
31
  endDate: number;
31
- }, Promise<{
32
- timestamp: number;
33
- value: number;
34
- }[]>>;
35
- /**
36
- * Get the latest data point for a user and series type.
37
- */
32
+ }, Promise<TimeSeriesPoint[]>>;
38
33
  export declare const getLatestDataPoint: import("convex/server").RegisteredQuery<"public", {
39
- seriesType: string;
40
34
  userId: string;
35
+ seriesType: string;
41
36
  }, Promise<{
42
37
  timestamp: number;
43
38
  value: number;
44
39
  provider: string;
45
40
  } | null>>;
46
- /**
47
- * Get all available series types for a user (i.e., types that have at least one data point).
48
- */
49
41
  export declare const getAvailableSeriesTypes: import("convex/server").RegisteredQuery<"public", {
50
42
  userId: string;
51
43
  }, Promise<string[]>>;
52
- /**
53
- * Store a single data point. Deduplicates by (source, type, time).
54
- */
44
+ export declare const getTimeSeriesPolicyConfiguration: import("convex/server").RegisteredQuery<"public", {}, Promise<{
45
+ maintenance: {
46
+ enabled: boolean;
47
+ intervalMs: number;
48
+ };
49
+ defaultRules: {
50
+ _id: import("convex/values").GenericId<"timeSeriesPolicyRules">;
51
+ provider: "garmin" | "suunto" | "polar" | "whoop" | "strava" | "apple" | "samsung" | "google" | undefined;
52
+ seriesType: string | undefined;
53
+ scope: "provider" | "provider_series" | "series" | "global";
54
+ policySetKind: "default" | "preset";
55
+ policySetKey: string;
56
+ tiers: ({
57
+ kind: string;
58
+ fromAgeMs: number;
59
+ toAgeMs: number | null;
60
+ bucketMs?: undefined;
61
+ aggregations?: undefined;
62
+ } | {
63
+ kind: string;
64
+ fromAgeMs: number;
65
+ toAgeMs: number | null;
66
+ bucketMs: number;
67
+ aggregations: ("avg" | "min" | "max" | "last" | "count")[];
68
+ })[];
69
+ updatedAt: number;
70
+ }[];
71
+ presets: {
72
+ key: string;
73
+ rules: {
74
+ _id: import("convex/values").GenericId<"timeSeriesPolicyRules">;
75
+ provider: "garmin" | "suunto" | "polar" | "whoop" | "strava" | "apple" | "samsung" | "google" | undefined;
76
+ seriesType: string | undefined;
77
+ scope: "provider" | "provider_series" | "series" | "global";
78
+ policySetKind: "default" | "preset";
79
+ policySetKey: string;
80
+ tiers: ({
81
+ kind: string;
82
+ fromAgeMs: number;
83
+ toAgeMs: number | null;
84
+ bucketMs?: undefined;
85
+ aggregations?: undefined;
86
+ } | {
87
+ kind: string;
88
+ fromAgeMs: number;
89
+ toAgeMs: number | null;
90
+ bucketMs: number;
91
+ aggregations: ("avg" | "min" | "max" | "last" | "count")[];
92
+ })[];
93
+ updatedAt: number;
94
+ }[];
95
+ }[];
96
+ }>>;
97
+ export declare const getUserTimeSeriesPolicyPreset: import("convex/server").RegisteredQuery<"public", {
98
+ userId: string;
99
+ }, Promise<{
100
+ userId: string;
101
+ presetKey: string;
102
+ updatedAt: number;
103
+ } | null>>;
104
+ export declare const getEffectiveTimeSeriesPolicy: import("convex/server").RegisteredQuery<"public", {
105
+ provider: "garmin" | "suunto" | "polar" | "whoop" | "strava" | "apple" | "samsung" | "google";
106
+ userId: string;
107
+ seriesType: string;
108
+ }, Promise<{
109
+ provider: "garmin" | "suunto" | "polar" | "whoop" | "strava" | "apple" | "samsung" | "google";
110
+ seriesType: string;
111
+ sourceKind: "default" | "preset" | "builtin";
112
+ sourceKey: string | null;
113
+ matchedScope: "provider" | "default" | "provider_series" | "series" | "global";
114
+ tiers: ({
115
+ kind: string;
116
+ fromAgeMs: number;
117
+ toAgeMs: number | null;
118
+ bucketMs?: undefined;
119
+ aggregations?: undefined;
120
+ } | {
121
+ kind: string;
122
+ fromAgeMs: number;
123
+ toAgeMs: number | null;
124
+ bucketMs: number;
125
+ aggregations: ("avg" | "min" | "max" | "last" | "count")[];
126
+ })[];
127
+ }>>;
128
+ export declare const replaceTimeSeriesPolicyConfiguration: import("convex/server").RegisteredMutation<"public", {
129
+ maintenance?: {
130
+ enabled?: boolean | undefined;
131
+ interval?: string | number | undefined;
132
+ } | undefined;
133
+ presets?: {
134
+ key: string;
135
+ rules: {
136
+ provider?: "garmin" | "suunto" | "polar" | "whoop" | "strava" | "apple" | "samsung" | "google" | undefined;
137
+ seriesType?: string | undefined;
138
+ tiers: ({
139
+ kind: "raw";
140
+ fromAge: string | number;
141
+ toAge: string | number | null;
142
+ } | {
143
+ aggregations?: ("avg" | "min" | "max" | "last" | "count")[] | undefined;
144
+ kind: "rollup";
145
+ fromAge: string | number;
146
+ toAge: string | number | null;
147
+ bucket: string | number;
148
+ })[];
149
+ }[];
150
+ }[] | undefined;
151
+ defaultRules: {
152
+ provider?: "garmin" | "suunto" | "polar" | "whoop" | "strava" | "apple" | "samsung" | "google" | undefined;
153
+ seriesType?: string | undefined;
154
+ tiers: ({
155
+ kind: "raw";
156
+ fromAge: string | number;
157
+ toAge: string | number | null;
158
+ } | {
159
+ aggregations?: ("avg" | "min" | "max" | "last" | "count")[] | undefined;
160
+ kind: "rollup";
161
+ fromAge: string | number;
162
+ toAge: string | number | null;
163
+ bucket: string | number;
164
+ })[];
165
+ }[];
166
+ }, Promise<{
167
+ defaultRulesStored: number;
168
+ presetsStored: number;
169
+ }>>;
170
+ export declare const setUserTimeSeriesPolicyPreset: import("convex/server").RegisteredMutation<"public", {
171
+ userId: string;
172
+ presetKey: string | null;
173
+ }, Promise<null>>;
55
174
  export declare const storeDataPoint: import("convex/server").RegisteredMutation<"internal", {
56
175
  externalId?: string | undefined;
176
+ dataSourceId: import("convex/values").GenericId<"dataSources">;
57
177
  seriesType: string;
58
178
  recordedAt: number;
59
179
  value: number;
60
- dataSourceId: import("convex/values").GenericId<"dataSources">;
61
- }, Promise<import("convex/values").GenericId<"dataPoints">>>;
62
- /**
63
- * Store a batch of data points. Used by sync workflows.
64
- * Must complete within 1 second — caller is responsible for batch sizing.
65
- */
180
+ }, Promise<Id<"dataPoints"> | null>>;
66
181
  export declare const storeBatch: import("convex/server").RegisteredMutation<"internal", {
67
- seriesType: string;
68
182
  dataSourceId: import("convex/values").GenericId<"dataSources">;
183
+ seriesType: string;
69
184
  points: {
70
185
  externalId?: string | undefined;
71
186
  recordedAt: number;
72
187
  value: number;
73
188
  }[];
74
189
  }, Promise<number>>;
75
- /**
76
- * Delete all data points for a data source. Used during user/connection cleanup.
77
- */
190
+ export declare const runTimeSeriesMaintenance: import("convex/server").RegisteredMutation<"internal", {}, Promise<null>>;
78
191
  export declare const deleteByDataSource: import("convex/server").RegisteredMutation<"internal", {
79
192
  dataSourceId: import("convex/values").GenericId<"dataSources">;
80
- }, Promise<void>>;
193
+ }, Promise<null>>;
194
+ export {};
81
195
  //# sourceMappingURL=dataPoints.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataPoints.d.ts","sourceRoot":"","sources":["../../src/component/dataPoints.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;GAuDxB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;eAwBC,MAAM;WAAS,MAAM;KAsBrD,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;eAmBF,MAAM;WAAS,MAAM;cAAY,MAAM;UAsBlE,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB;;qBA0BlC,CAAC;AAMH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;4DA4BzB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;;mBA0CrB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;iBAmB7B,CAAC"}
1
+ {"version":3,"file":"dataPoints.d.ts","sourceRoot":"","sources":["../../src/component/dataPoints.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAO,EAAE,EAAE,MAAM,wBAAwB,CAAC;AA6CtD,KAAK,eAAe,GAAG;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAwFF,eAAO,MAAM,aAAa;;;;;;;;;;;;GAsDxB,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;8BAoC/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;eAmBF,MAAM;WAAS,MAAM;cAAY,MAAM;UAiDlE,CAAC;AAEH,eAAO,MAAM,uBAAuB;;qBAWlC,CAAC;AAEH,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqB3C,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;UA4BxC,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;GAwBvC,CAAC;AAMH,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0E/C,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;iBA8CxC,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;oCAwBzB,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;mBAiBrB,CAAC;AAEH,eAAO,MAAM,wBAAwB,2EAuDnC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;iBA4C7B,CAAC"}