thryve-mcp-server 0.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.
Files changed (197) hide show
  1. package/Overview.csv +351 -0
  2. package/README.md +229 -0
  3. package/dist/category-mappings.d.ts +34 -0
  4. package/dist/category-mappings.d.ts.map +1 -0
  5. package/dist/category-mappings.js +146 -0
  6. package/dist/category-mappings.js.map +1 -0
  7. package/dist/data-enrichment.d.ts +19 -0
  8. package/dist/data-enrichment.d.ts.map +1 -0
  9. package/dist/data-enrichment.js +105 -0
  10. package/dist/data-enrichment.js.map +1 -0
  11. package/dist/data-types-generated.d.ts +70 -0
  12. package/dist/data-types-generated.d.ts.map +1 -0
  13. package/dist/data-types-generated.js +2597 -0
  14. package/dist/data-types-generated.js.map +1 -0
  15. package/dist/data-types.d.ts +53 -0
  16. package/dist/data-types.d.ts.map +1 -0
  17. package/dist/data-types.js +138 -0
  18. package/dist/data-types.js.map +1 -0
  19. package/dist/debug-logger.d.ts +17 -0
  20. package/dist/debug-logger.d.ts.map +1 -0
  21. package/dist/debug-logger.js +35 -0
  22. package/dist/debug-logger.js.map +1 -0
  23. package/dist/debug-middleware.d.ts +12 -0
  24. package/dist/debug-middleware.d.ts.map +1 -0
  25. package/dist/debug-middleware.js +36 -0
  26. package/dist/debug-middleware.js.map +1 -0
  27. package/dist/helpers.d.ts +19 -0
  28. package/dist/helpers.d.ts.map +1 -0
  29. package/dist/helpers.js +166 -0
  30. package/dist/helpers.js.map +1 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +754 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/schemas.d.ts +557 -0
  36. package/dist/schemas.d.ts.map +1 -0
  37. package/dist/schemas.js +338 -0
  38. package/dist/schemas.js.map +1 -0
  39. package/dist/tool-loader.d.ts +34 -0
  40. package/dist/tool-loader.d.ts.map +1 -0
  41. package/dist/tool-loader.js +108 -0
  42. package/dist/tool-loader.js.map +1 -0
  43. package/dist/tool-registry.d.ts +44 -0
  44. package/dist/tool-registry.d.ts.map +1 -0
  45. package/dist/tool-registry.js +54 -0
  46. package/dist/tool-registry.js.map +1 -0
  47. package/dist/tools/baseCategoryHandler.d.ts +28 -0
  48. package/dist/tools/baseCategoryHandler.d.ts.map +1 -0
  49. package/dist/tools/baseCategoryHandler.js +184 -0
  50. package/dist/tools/baseCategoryHandler.js.map +1 -0
  51. package/dist/tools/categories/getActivity.d.ts +10 -0
  52. package/dist/tools/categories/getActivity.d.ts.map +1 -0
  53. package/dist/tools/categories/getActivity.js +5 -0
  54. package/dist/tools/categories/getActivity.js.map +1 -0
  55. package/dist/tools/categories/getAudioAndHearing.d.ts +10 -0
  56. package/dist/tools/categories/getAudioAndHearing.d.ts.map +1 -0
  57. package/dist/tools/categories/getAudioAndHearing.js +5 -0
  58. package/dist/tools/categories/getAudioAndHearing.js.map +1 -0
  59. package/dist/tools/categories/getBloodGlucose.d.ts +10 -0
  60. package/dist/tools/categories/getBloodGlucose.d.ts.map +1 -0
  61. package/dist/tools/categories/getBloodGlucose.js +5 -0
  62. package/dist/tools/categories/getBloodGlucose.js.map +1 -0
  63. package/dist/tools/categories/getBodyComposition.d.ts +10 -0
  64. package/dist/tools/categories/getBodyComposition.d.ts.map +1 -0
  65. package/dist/tools/categories/getBodyComposition.js +5 -0
  66. package/dist/tools/categories/getBodyComposition.js.map +1 -0
  67. package/dist/tools/categories/getCardiovascular.d.ts +10 -0
  68. package/dist/tools/categories/getCardiovascular.d.ts.map +1 -0
  69. package/dist/tools/categories/getCardiovascular.js +5 -0
  70. package/dist/tools/categories/getCardiovascular.js.map +1 -0
  71. package/dist/tools/categories/getHeartRate.d.ts +10 -0
  72. package/dist/tools/categories/getHeartRate.d.ts.map +1 -0
  73. package/dist/tools/categories/getHeartRate.js +5 -0
  74. package/dist/tools/categories/getHeartRate.js.map +1 -0
  75. package/dist/tools/categories/getLocation.d.ts +10 -0
  76. package/dist/tools/categories/getLocation.d.ts.map +1 -0
  77. package/dist/tools/categories/getLocation.js +5 -0
  78. package/dist/tools/categories/getLocation.js.map +1 -0
  79. package/dist/tools/categories/getMicrobiome.d.ts +10 -0
  80. package/dist/tools/categories/getMicrobiome.d.ts.map +1 -0
  81. package/dist/tools/categories/getMicrobiome.js +5 -0
  82. package/dist/tools/categories/getMicrobiome.js.map +1 -0
  83. package/dist/tools/categories/getMovementAnalysis.d.ts +10 -0
  84. package/dist/tools/categories/getMovementAnalysis.d.ts.map +1 -0
  85. package/dist/tools/categories/getMovementAnalysis.js +5 -0
  86. package/dist/tools/categories/getMovementAnalysis.js.map +1 -0
  87. package/dist/tools/categories/getNutrition.d.ts +10 -0
  88. package/dist/tools/categories/getNutrition.d.ts.map +1 -0
  89. package/dist/tools/categories/getNutrition.js +5 -0
  90. package/dist/tools/categories/getNutrition.js.map +1 -0
  91. package/dist/tools/categories/getRespiratory.d.ts +10 -0
  92. package/dist/tools/categories/getRespiratory.d.ts.map +1 -0
  93. package/dist/tools/categories/getRespiratory.js +5 -0
  94. package/dist/tools/categories/getRespiratory.js.map +1 -0
  95. package/dist/tools/categories/getSleep.d.ts +10 -0
  96. package/dist/tools/categories/getSleep.d.ts.map +1 -0
  97. package/dist/tools/categories/getSleep.js +5 -0
  98. package/dist/tools/categories/getSleep.js.map +1 -0
  99. package/dist/tools/categories/getStressAndHRV.d.ts +10 -0
  100. package/dist/tools/categories/getStressAndHRV.d.ts.map +1 -0
  101. package/dist/tools/categories/getStressAndHRV.js +5 -0
  102. package/dist/tools/categories/getStressAndHRV.js.map +1 -0
  103. package/dist/tools/categories/getWellness.d.ts +10 -0
  104. package/dist/tools/categories/getWellness.d.ts.map +1 -0
  105. package/dist/tools/categories/getWellness.js +5 -0
  106. package/dist/tools/categories/getWellness.js.map +1 -0
  107. package/dist/tools/categories/getWomensHealth.d.ts +10 -0
  108. package/dist/tools/categories/getWomensHealth.d.ts.map +1 -0
  109. package/dist/tools/categories/getWomensHealth.js +5 -0
  110. package/dist/tools/categories/getWomensHealth.js.map +1 -0
  111. package/dist/tools/categories/getWorkouts.d.ts +10 -0
  112. package/dist/tools/categories/getWorkouts.d.ts.map +1 -0
  113. package/dist/tools/categories/getWorkouts.js +5 -0
  114. package/dist/tools/categories/getWorkouts.js.map +1 -0
  115. package/dist/tools/categoryTools.d.ts +100 -0
  116. package/dist/tools/categoryTools.d.ts.map +1 -0
  117. package/dist/tools/categoryTools.js +66 -0
  118. package/dist/tools/categoryTools.js.map +1 -0
  119. package/dist/tools/get.d.ts +39 -0
  120. package/dist/tools/get.d.ts.map +1 -0
  121. package/dist/tools/get.js +118 -0
  122. package/dist/tools/get.js.map +1 -0
  123. package/dist/tools/getAvailableDataTypes.d.ts +101 -0
  124. package/dist/tools/getAvailableDataTypes.d.ts.map +1 -0
  125. package/dist/tools/getAvailableDataTypes.js +120 -0
  126. package/dist/tools/getAvailableDataTypes.js.map +1 -0
  127. package/dist/tools/getConnectionWidgetUrl.d.ts +12 -0
  128. package/dist/tools/getConnectionWidgetUrl.d.ts.map +1 -0
  129. package/dist/tools/getConnectionWidgetUrl.js +26 -0
  130. package/dist/tools/getConnectionWidgetUrl.js.map +1 -0
  131. package/dist/tools/getDailyData.d.ts +30 -0
  132. package/dist/tools/getDailyData.d.ts.map +1 -0
  133. package/dist/tools/getDailyData.js +114 -0
  134. package/dist/tools/getDailyData.js.map +1 -0
  135. package/dist/tools/getEpochData.d.ts +30 -0
  136. package/dist/tools/getEpochData.d.ts.map +1 -0
  137. package/dist/tools/getEpochData.js +111 -0
  138. package/dist/tools/getEpochData.js.map +1 -0
  139. package/dist/tools/getHealthDataByCategory.d.ts +38 -0
  140. package/dist/tools/getHealthDataByCategory.d.ts.map +1 -0
  141. package/dist/tools/getHealthDataByCategory.js +231 -0
  142. package/dist/tools/getHealthDataByCategory.js.map +1 -0
  143. package/dist/tools/getUserInformation.d.ts +8 -0
  144. package/dist/tools/getUserInformation.d.ts.map +1 -0
  145. package/dist/tools/getUserInformation.js +24 -0
  146. package/dist/tools/getUserInformation.js.map +1 -0
  147. package/dist/tools/index.d.ts +7 -0
  148. package/dist/tools/index.d.ts.map +1 -0
  149. package/dist/tools/index.js +12 -0
  150. package/dist/tools/index.js.map +1 -0
  151. package/dist/tools/legacy.d.ts +37 -0
  152. package/dist/tools/legacy.d.ts.map +1 -0
  153. package/dist/tools/legacy.js +105 -0
  154. package/dist/tools/legacy.js.map +1 -0
  155. package/dist/tools/listConnectedSources.d.ts +11 -0
  156. package/dist/tools/listConnectedSources.d.ts.map +1 -0
  157. package/dist/tools/listConnectedSources.js +29 -0
  158. package/dist/tools/listConnectedSources.js.map +1 -0
  159. package/dist/tools/listDevices.d.ts +11 -0
  160. package/dist/tools/listDevices.d.ts.map +1 -0
  161. package/dist/tools/listDevices.js +29 -0
  162. package/dist/tools/listDevices.js.map +1 -0
  163. package/dist/tools/search-filters.d.ts +42 -0
  164. package/dist/tools/search-filters.d.ts.map +1 -0
  165. package/dist/tools/search-filters.js +210 -0
  166. package/dist/tools/search-filters.js.map +1 -0
  167. package/dist/tools/search-keyword.d.ts +32 -0
  168. package/dist/tools/search-keyword.d.ts.map +1 -0
  169. package/dist/tools/search-keyword.js +122 -0
  170. package/dist/tools/search-keyword.js.map +1 -0
  171. package/dist/tools/search-tools.d.ts +8 -0
  172. package/dist/tools/search-tools.d.ts.map +1 -0
  173. package/dist/tools/search-tools.js +273 -0
  174. package/dist/tools/search-tools.js.map +1 -0
  175. package/dist/types.d.ts +37 -0
  176. package/dist/types.d.ts.map +1 -0
  177. package/dist/types.js +2 -0
  178. package/dist/types.js.map +1 -0
  179. package/package.json +30 -0
  180. package/parse-csv.py +152 -0
  181. package/src/category-mappings.ts +181 -0
  182. package/src/data-enrichment.ts +125 -0
  183. package/src/data-types-generated.ts +2652 -0
  184. package/src/helpers.ts +198 -0
  185. package/src/index.ts +859 -0
  186. package/src/schemas.ts +372 -0
  187. package/src/tools/baseCategoryHandler.ts +243 -0
  188. package/src/tools/categoryTools.ts +101 -0
  189. package/src/tools/get.ts +147 -0
  190. package/src/tools/getAvailableDataTypes.ts +148 -0
  191. package/src/tools/index.ts +32 -0
  192. package/src/tools/listConnectedSources.ts +45 -0
  193. package/src/tools/listDevices.ts +45 -0
  194. package/src/tools/search-filters.ts +253 -0
  195. package/src/tools/search-keyword.ts +162 -0
  196. package/src/types.ts +44 -0
  197. package/tsconfig.json +20 -0
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Category mappings for LLM-friendly health data access
3
+ * Maps high-level categories to Thryve data type IDs
4
+ */
5
+ export type HealthCategory = "Activity" | "Heart Rate" | "Sleep" | "Workouts" | "Stress & HRV" | "Respiratory" | "Blood Glucose" | "Body Composition" | "Womens Health" | "Nutrition" | "Cardiovascular" | "Wellness" | "Audio & Hearing" | "Microbiome" | "Location" | "Movement Analysis";
6
+ interface CategoryMapping {
7
+ thryveCategories: string[];
8
+ description: string;
9
+ dataTypeIds: number[];
10
+ }
11
+ export declare const CATEGORY_MAPPINGS: Record<HealthCategory, CategoryMapping>;
12
+ /**
13
+ * Get all data type IDs for given categories
14
+ */
15
+ export declare function getDataTypeIdsForCategories(categories: HealthCategory[]): number[];
16
+ /**
17
+ * Get category information for display
18
+ */
19
+ export declare function getCategoryInfo(category: HealthCategory): CategoryMapping | undefined;
20
+ /**
21
+ * Get all available categories
22
+ */
23
+ export declare function getAllCategories(): HealthCategory[];
24
+ /**
25
+ * Get category statistics
26
+ */
27
+ export declare function getCategoryStats(): {
28
+ category: string;
29
+ description: string;
30
+ dataTypeCount: number;
31
+ thryveCategories: string[];
32
+ }[];
33
+ export {};
34
+ //# sourceMappingURL=category-mappings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"category-mappings.d.ts","sourceRoot":"","sources":["../src/category-mappings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,cAAc,GACtB,UAAU,GACV,YAAY,GACZ,OAAO,GACP,UAAU,GACV,cAAc,GACd,aAAa,GACb,eAAe,GACf,kBAAkB,GAClB,eAAe,GACf,WAAW,GACX,gBAAgB,GAChB,UAAU,GACV,iBAAiB,GACjB,YAAY,GACZ,UAAU,GACV,mBAAmB,CAAC;AAExB,UAAU,eAAe;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AA6GD,eAAO,MAAM,iBAAiB,yCAA0B,CAAC;AAEzD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE,CAWlF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,eAAe,GAAG,SAAS,CAErF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,EAAE,CAEnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB;;;;;IAO/B"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Category mappings for LLM-friendly health data access
3
+ * Maps high-level categories to Thryve data type IDs
4
+ */
5
+ import { ALL_DATA_TYPES } from "./data-types-generated.js";
6
+ /**
7
+ * Build category mappings dynamically from data types
8
+ */
9
+ function buildCategoryMappings() {
10
+ const mappings = {
11
+ "Activity": {
12
+ thryveCategories: ["Activity"],
13
+ description: "Steps, distance, floors climbed, elevation, calories burned, and general activity metrics",
14
+ dataTypeIds: [],
15
+ },
16
+ "Heart Rate": {
17
+ thryveCategories: ["Heart Rate"],
18
+ description: "Heart rate measurements including resting, average, min, max, and variability",
19
+ dataTypeIds: [],
20
+ },
21
+ "Sleep": {
22
+ thryveCategories: ["Sleep"],
23
+ description: "Sleep duration, stages, quality, and sleep-related metrics",
24
+ dataTypeIds: [],
25
+ },
26
+ "Workouts": {
27
+ thryveCategories: ["Workouts"],
28
+ description: "Exercise sessions, workout types, duration, and performance metrics",
29
+ dataTypeIds: [],
30
+ },
31
+ "Stress & HRV": {
32
+ thryveCategories: ["Stress & HRV"],
33
+ description: "Stress levels, heart rate variability, and recovery metrics",
34
+ dataTypeIds: [],
35
+ },
36
+ "Respiratory": {
37
+ thryveCategories: ["Respiratory & Breathing"],
38
+ description: "Breathing rate, SpO2, respiratory patterns, and lung function",
39
+ dataTypeIds: [],
40
+ },
41
+ "Blood Glucose": {
42
+ thryveCategories: ["Blood Glucose"],
43
+ description: "Blood glucose levels and continuous glucose monitoring (CGM) data",
44
+ dataTypeIds: [],
45
+ },
46
+ "Body Composition": {
47
+ thryveCategories: ["Body Composition & Measurements"],
48
+ description: "Weight, BMI, body fat percentage, muscle mass, and body measurements",
49
+ dataTypeIds: [],
50
+ },
51
+ "Womens Health": {
52
+ thryveCategories: ["Women's Health"],
53
+ description: "Menstrual cycle tracking, ovulation, symptoms, and reproductive health",
54
+ dataTypeIds: [],
55
+ },
56
+ "Nutrition": {
57
+ thryveCategories: ["Detailed Nutrition"],
58
+ description: "Nutritional intake including calories, macros, micros, hydration, and meal data",
59
+ dataTypeIds: [],
60
+ },
61
+ "Cardiovascular": {
62
+ thryveCategories: ["Cardiovascular Health", "Advanced Cardiac Analysis"],
63
+ description: "Blood pressure, VO2 max, cardiac analysis, and cardiovascular health metrics",
64
+ dataTypeIds: [],
65
+ },
66
+ "Wellness": {
67
+ thryveCategories: ["Self-Reported Wellness"],
68
+ description: "General wellness, mood, energy levels, and self-reported health data",
69
+ dataTypeIds: [],
70
+ },
71
+ "Audio & Hearing": {
72
+ thryveCategories: ["Audio & Hearing Health"],
73
+ description: "Hearing health, audio exposure, and environmental sound levels",
74
+ dataTypeIds: [],
75
+ },
76
+ "Microbiome": {
77
+ thryveCategories: ["Microbiome & Gut Health"],
78
+ description: "Gut health, microbiome composition, and digestive metrics",
79
+ dataTypeIds: [],
80
+ },
81
+ "Location": {
82
+ thryveCategories: ["Location & GPS"],
83
+ description: "GPS coordinates, routes, and location tracking data",
84
+ dataTypeIds: [],
85
+ },
86
+ "Movement Analysis": {
87
+ thryveCategories: ["Movement Analysis"],
88
+ description: "Movement patterns, gait analysis, and biomechanics",
89
+ dataTypeIds: [],
90
+ },
91
+ };
92
+ // Build data type ID lists by matching categories
93
+ for (const dataType of ALL_DATA_TYPES) {
94
+ for (const [category, mapping] of Object.entries(mappings)) {
95
+ // Check if this data type's category matches any of the mapping's Thryve categories
96
+ const matches = mapping.thryveCategories.some((thryveCategory) => {
97
+ // Handle compound categories like "Activity,Workouts"
98
+ const dataTypeCategories = dataType.category.split(",").map((c) => c.trim());
99
+ return dataTypeCategories.includes(thryveCategory);
100
+ });
101
+ if (matches) {
102
+ mapping.dataTypeIds.push(dataType.id);
103
+ }
104
+ }
105
+ }
106
+ return mappings;
107
+ }
108
+ // Build mappings once at module load time
109
+ export const CATEGORY_MAPPINGS = buildCategoryMappings();
110
+ /**
111
+ * Get all data type IDs for given categories
112
+ */
113
+ export function getDataTypeIdsForCategories(categories) {
114
+ const allIds = new Set();
115
+ for (const category of categories) {
116
+ const mapping = CATEGORY_MAPPINGS[category];
117
+ if (mapping) {
118
+ mapping.dataTypeIds.forEach((id) => allIds.add(id));
119
+ }
120
+ }
121
+ return Array.from(allIds);
122
+ }
123
+ /**
124
+ * Get category information for display
125
+ */
126
+ export function getCategoryInfo(category) {
127
+ return CATEGORY_MAPPINGS[category];
128
+ }
129
+ /**
130
+ * Get all available categories
131
+ */
132
+ export function getAllCategories() {
133
+ return Object.keys(CATEGORY_MAPPINGS);
134
+ }
135
+ /**
136
+ * Get category statistics
137
+ */
138
+ export function getCategoryStats() {
139
+ return Object.entries(CATEGORY_MAPPINGS).map(([category, mapping]) => ({
140
+ category,
141
+ description: mapping.description,
142
+ dataTypeCount: mapping.dataTypeIds.length,
143
+ thryveCategories: mapping.thryveCategories,
144
+ }));
145
+ }
146
+ //# sourceMappingURL=category-mappings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"category-mappings.js","sourceRoot":"","sources":["../src/category-mappings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Shared data enrichment utilities for health data
3
+ * Used by getDailyData, getEpochData, and getHealthDataByCategory
4
+ */
5
+ import type { HealthDataRecord } from "./types.js";
6
+ /**
7
+ * Flatten Thryve API response structure into flat array of records
8
+ */
9
+ export declare function flattenThryveResponse(data: any): HealthDataRecord[];
10
+ /**
11
+ * Enrich records with data type metadata (name, category, unit)
12
+ */
13
+ export declare function enrichWithDataTypes(records: HealthDataRecord[]): void;
14
+ /**
15
+ * Rebuild Thryve API response structure from flattened records
16
+ * Groups records by dataSource
17
+ */
18
+ export declare function rebuildThryveResponse(records: HealthDataRecord[]): any[];
19
+ //# sourceMappingURL=data-enrichment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-enrichment.d.ts","sourceRoot":"","sources":["../src/data-enrichment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAInD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,GAAG,GAAG,gBAAgB,EAAE,CAyBnE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAyBrE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,GAAG,EAAE,CAmDxE"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Shared data enrichment utilities for health data
3
+ * Used by getDailyData, getEpochData, and getHealthDataByCategory
4
+ */
5
+ import { getDataTypeById } from "./data-types-generated.js";
6
+ import { generateRecordId } from "./helpers.js";
7
+ /**
8
+ * Flatten Thryve API response structure into flat array of records
9
+ */
10
+ export function flattenThryveResponse(data) {
11
+ const records = [];
12
+ if (!Array.isArray(data)) {
13
+ return records;
14
+ }
15
+ for (const item of data) {
16
+ if (item.dataSources && Array.isArray(item.dataSources)) {
17
+ for (const dataSource of item.dataSources) {
18
+ if (dataSource.data && Array.isArray(dataSource.data)) {
19
+ for (const record of dataSource.data) {
20
+ records.push({
21
+ ...record,
22
+ dataSource: dataSource.dataSource,
23
+ dataSourceName: dataSource.dataSourceName,
24
+ _recordId: generateRecordId({ ...record, dataSource: dataSource.dataSource }),
25
+ });
26
+ }
27
+ }
28
+ }
29
+ }
30
+ }
31
+ return records;
32
+ }
33
+ /**
34
+ * Enrich records with data type metadata (name, category, unit)
35
+ */
36
+ export function enrichWithDataTypes(records) {
37
+ for (const record of records) {
38
+ const typeId = record.dailyDynamicValueType ||
39
+ record.dynamicValueType ||
40
+ record.dynamicEpochValueType;
41
+ if (typeId) {
42
+ const dataType = getDataTypeById(typeId);
43
+ if (dataType) {
44
+ // Set appropriate type name based on the type ID field
45
+ if (record.dailyDynamicValueType) {
46
+ record.dailyDynamicValueTypeName = dataType.name;
47
+ }
48
+ if (record.dynamicValueType || record.dynamicEpochValueType) {
49
+ record.dynamicValueTypeName = dataType.name;
50
+ record.dynamicEpochValueTypeName = dataType.name;
51
+ }
52
+ record.category = dataType.category;
53
+ record.unit = dataType.unit;
54
+ record.dataType = typeId;
55
+ }
56
+ }
57
+ }
58
+ }
59
+ /**
60
+ * Rebuild Thryve API response structure from flattened records
61
+ * Groups records by dataSource
62
+ */
63
+ export function rebuildThryveResponse(records) {
64
+ if (records.length === 0) {
65
+ return [];
66
+ }
67
+ // Group records by data source
68
+ const groupedBySource = new Map();
69
+ for (const record of records) {
70
+ const sourceId = record.dataSource || 0;
71
+ if (!groupedBySource.has(sourceId)) {
72
+ groupedBySource.set(sourceId, []);
73
+ }
74
+ groupedBySource.get(sourceId).push(record);
75
+ }
76
+ // Rebuild structure
77
+ const result = [];
78
+ for (const [dataSource, sourceRecords] of groupedBySource) {
79
+ // Extract first record to get authToken (if present)
80
+ const firstRecord = sourceRecords[0];
81
+ const authToken = firstRecord.authenticationToken;
82
+ const dataSourceObj = {
83
+ dataSource,
84
+ data: sourceRecords.map((record) => {
85
+ // Remove internal fields
86
+ const { dataSource: _ds, dataSourceName: _dsName, _recordId, ...cleanRecord } = record;
87
+ return cleanRecord;
88
+ }),
89
+ };
90
+ // Add dataSourceName if available
91
+ if (sourceRecords[0].dataSourceName) {
92
+ dataSourceObj.dataSourceName = sourceRecords[0].dataSourceName;
93
+ }
94
+ const responseItem = {
95
+ dataSources: [dataSourceObj],
96
+ };
97
+ // Add authToken if present
98
+ if (authToken) {
99
+ responseItem.authenticationToken = authToken;
100
+ }
101
+ result.push(responseItem);
102
+ }
103
+ return result;
104
+ }
105
+ //# sourceMappingURL=data-enrichment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-enrichment.js","sourceRoot":"","sources":["../src/data-enrichment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Thryve Data Types - Auto-generated from Overview.csv
3
+ * DO NOT EDIT MANUALLY - Regenerate using parse-csv.py
4
+ */
5
+ export interface DataTypeSources {
6
+ Fitbit?: boolean;
7
+ Garmin?: boolean;
8
+ Polar?: boolean;
9
+ AppleHealth?: boolean;
10
+ SamsungHealth?: boolean;
11
+ Withings?: boolean;
12
+ Strava?: boolean;
13
+ GoogleFitREST?: boolean;
14
+ OmronConnect?: boolean;
15
+ Suunto?: boolean;
16
+ Oura?: boolean;
17
+ iHealth?: boolean;
18
+ Beurer?: boolean;
19
+ HuaweiHealth?: boolean;
20
+ GoogleFitNative?: boolean;
21
+ Dexcom?: boolean;
22
+ Whoop?: boolean;
23
+ Decathlon?: boolean;
24
+ HealthConnect?: boolean;
25
+ Komoot?: boolean;
26
+ }
27
+ export interface DataType {
28
+ id: number;
29
+ name: string;
30
+ category: string;
31
+ temporalResolution: "Daily" | "Epoch" | "Both";
32
+ description: string;
33
+ unit: string;
34
+ valueType: string;
35
+ supportedSources: string[];
36
+ }
37
+ export declare const ALL_DATA_TYPES: DataType[];
38
+ /**
39
+ * Get unique list of all categories
40
+ */
41
+ export declare function getAllCategories(): string[];
42
+ /**
43
+ * Get data type by ID
44
+ */
45
+ export declare function getDataTypeById(id: number): DataType | undefined;
46
+ /**
47
+ * Get data types by category name
48
+ */
49
+ export declare function getDataTypesByCategory(categoryName: string): DataType[];
50
+ /**
51
+ * Search data types by keyword (searches name, category, description)
52
+ */
53
+ export declare function searchDataTypes(keyword: string): DataType[];
54
+ /**
55
+ * Get data types available for a specific data source
56
+ */
57
+ export declare function getDataTypesForSource(sourceName: string): DataType[];
58
+ /**
59
+ * Get summary of all categories for LLM context
60
+ */
61
+ export declare function getCategorySummary(): {
62
+ totalCategories: number;
63
+ totalDataTypes: number;
64
+ categories: Array<{
65
+ name: string;
66
+ count: number;
67
+ examples: string[];
68
+ }>;
69
+ };
70
+ //# sourceMappingURL=data-types-generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-types-generated.d.ts","sourceRoot":"","sources":["../src/data-types-generated.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,cAAc,EAAE,QAAQ,EAy9EpC,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAM3C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAEhE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,EAAE,CAIvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAQ3D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,EAAE,CAMpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACxE,CA+BA"}