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,30 @@
1
+ import type { Request } from "express";
2
+ import type { z } from "zod";
3
+ import type { GetDailyDataSchema } from "../schemas.js";
4
+ import type { HealthDataRecord } from "../types.js";
5
+ export declare function getDailyData(req: Request, args: z.infer<typeof GetDailyDataSchema>): Promise<{
6
+ results: {};
7
+ metadata: {
8
+ categories: ("Activity" | "Sleep" | "Workouts" | "Movement Analysis" | "Heart Rate" | "Stress & HRV" | "Blood Glucose" | "Respiratory" | "Body Composition" | "Womens Health" | "Nutrition" | "Cardiovascular" | "Wellness" | "Audio & Hearing" | "Microbiome" | "Location")[];
9
+ timeRange: {
10
+ start: string;
11
+ end: string;
12
+ };
13
+ totalRecords: number;
14
+ message: string;
15
+ };
16
+ } | {
17
+ results: Record<string, HealthDataRecord[]>;
18
+ metadata: {
19
+ categories: ("Activity" | "Sleep" | "Workouts" | "Movement Analysis" | "Heart Rate" | "Stress & HRV" | "Blood Glucose" | "Respiratory" | "Body Composition" | "Womens Health" | "Nutrition" | "Cardiovascular" | "Wellness" | "Audio & Hearing" | "Microbiome" | "Location")[];
20
+ timeRange: {
21
+ start: string;
22
+ end: string;
23
+ };
24
+ totalRecords: number;
25
+ dataTypesFound: string[];
26
+ dataSources: number[] | undefined;
27
+ limitApplied: number | undefined;
28
+ };
29
+ }>;
30
+ //# sourceMappingURL=getDailyData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDailyData.d.ts","sourceRoot":"","sources":["../../src/tools/getDailyData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAUpD,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;GA0FxF"}
@@ -0,0 +1,114 @@
1
+ import { extractThryveHeaders, buildUrlEncodedBody, getDefaultTimestampRange, THRYVE_API_BASE_URL, } from "../helpers.js";
2
+ import { getDataTypeIdsForCategories, CATEGORY_MAPPINGS } from "../category-mappings.js";
3
+ import { flattenThryveResponse, enrichWithDataTypes } from "../data-enrichment.js";
4
+ export async function getDailyData(req, args) {
5
+ const { headers, authToken } = extractThryveHeaders(req);
6
+ // Apply default timestamp range if not provided and extract dates
7
+ const defaults = getDefaultTimestampRange();
8
+ const startTimestamp = args.startTimestamp || defaults.startTimestamp;
9
+ const endTimestamp = args.endTimestamp || defaults.endTimestamp;
10
+ // Extract dates from timestamps for daily API
11
+ const startDay = startTimestamp.split('T')[0];
12
+ const endDay = endTimestamp.split('T')[0];
13
+ // Get data type IDs for requested categories
14
+ const dataTypeIds = getDataTypeIdsForCategories(args.categories);
15
+ if (dataTypeIds.length === 0) {
16
+ return {
17
+ results: {},
18
+ metadata: {
19
+ categories: args.categories,
20
+ timeRange: { start: startTimestamp, end: endTimestamp },
21
+ totalRecords: 0,
22
+ message: "No data types found for requested categories",
23
+ },
24
+ };
25
+ }
26
+ // Convert dataSources array to comma-separated string if provided
27
+ const dataSourcesParam = args.dataSources?.join(',');
28
+ const body = buildUrlEncodedBody({
29
+ authenticationToken: authToken,
30
+ startDay,
31
+ endDay,
32
+ dataSources: dataSourcesParam,
33
+ displayTypeName: "true",
34
+ });
35
+ const response = await fetch(`${THRYVE_API_BASE_URL}/v5/dailyDynamicValues`, {
36
+ method: "POST",
37
+ headers,
38
+ body,
39
+ });
40
+ if (!response.ok) {
41
+ throw new Error(`Thryve API error: ${response.status} ${response.statusText}`);
42
+ }
43
+ const data = await response.json();
44
+ // Flatten and enrich data
45
+ const flattenedData = flattenThryveResponse(data);
46
+ enrichWithDataTypes(flattenedData);
47
+ // Filter by requested data type IDs
48
+ const dataTypeIdSet = new Set(dataTypeIds);
49
+ const filteredData = flattenedData.filter((record) => {
50
+ const typeId = record.dataType || record.dailyDynamicValueType;
51
+ return typeId && dataTypeIdSet.has(typeId);
52
+ });
53
+ // Apply limit if specified
54
+ const limitedData = args.limit ? filteredData.slice(0, args.limit) : filteredData;
55
+ // Group results by category
56
+ const groupedResults = groupByCategory(limitedData, args.categories);
57
+ // Build metadata
58
+ const dataTypesFound = new Set();
59
+ limitedData.forEach((record) => {
60
+ const typeName = record.dailyDynamicValueTypeName;
61
+ if (typeName)
62
+ dataTypesFound.add(typeName);
63
+ });
64
+ const metadata = {
65
+ categories: args.categories,
66
+ timeRange: {
67
+ start: startTimestamp,
68
+ end: endTimestamp,
69
+ },
70
+ totalRecords: limitedData.length,
71
+ dataTypesFound: Array.from(dataTypesFound).sort(),
72
+ dataSources: args.dataSources,
73
+ limitApplied: args.limit,
74
+ };
75
+ return {
76
+ results: groupedResults,
77
+ metadata,
78
+ };
79
+ }
80
+ /**
81
+ * Group records by requested categories
82
+ */
83
+ function groupByCategory(records, requestedCategories) {
84
+ const grouped = {};
85
+ // Initialize structure for requested categories
86
+ for (const category of requestedCategories) {
87
+ grouped[category] = [];
88
+ }
89
+ // Get category data type IDs for matching
90
+ const categoryDataTypes = new Map();
91
+ for (const category of requestedCategories) {
92
+ const mapping = CATEGORY_MAPPINGS[category];
93
+ if (mapping) {
94
+ for (const dataTypeId of mapping.dataTypeIds) {
95
+ if (!categoryDataTypes.has(dataTypeId)) {
96
+ categoryDataTypes.set(dataTypeId, []);
97
+ }
98
+ categoryDataTypes.get(dataTypeId).push(category);
99
+ }
100
+ }
101
+ }
102
+ // Group records
103
+ for (const record of records) {
104
+ const typeId = record.dataType || record.dailyDynamicValueType;
105
+ if (typeId && categoryDataTypes.has(typeId)) {
106
+ const categories = categoryDataTypes.get(typeId);
107
+ for (const category of categories) {
108
+ grouped[category].push(record);
109
+ }
110
+ }
111
+ }
112
+ return grouped;
113
+ }
114
+ //# sourceMappingURL=getDailyData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDailyData.js","sourceRoot":"","sources":["../../src/tools/getDailyData.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { Request } from "express";
2
+ import type { z } from "zod";
3
+ import type { GetEpochDataSchema } from "../schemas.js";
4
+ import type { HealthDataRecord } from "../types.js";
5
+ export declare function getEpochData(req: Request, args: z.infer<typeof GetEpochDataSchema>): Promise<{
6
+ results: {};
7
+ metadata: {
8
+ categories: ("Activity" | "Sleep" | "Workouts" | "Movement Analysis" | "Heart Rate" | "Stress & HRV" | "Blood Glucose" | "Respiratory" | "Body Composition" | "Womens Health" | "Nutrition" | "Cardiovascular" | "Wellness" | "Audio & Hearing" | "Microbiome" | "Location")[];
9
+ timeRange: {
10
+ start: string;
11
+ end: string;
12
+ };
13
+ totalRecords: number;
14
+ message: string;
15
+ };
16
+ } | {
17
+ results: Record<string, HealthDataRecord[]>;
18
+ metadata: {
19
+ categories: ("Activity" | "Sleep" | "Workouts" | "Movement Analysis" | "Heart Rate" | "Stress & HRV" | "Blood Glucose" | "Respiratory" | "Body Composition" | "Womens Health" | "Nutrition" | "Cardiovascular" | "Wellness" | "Audio & Hearing" | "Microbiome" | "Location")[];
20
+ timeRange: {
21
+ start: string;
22
+ end: string;
23
+ };
24
+ totalRecords: number;
25
+ dataTypesFound: string[];
26
+ dataSources: number[] | undefined;
27
+ limitApplied: number | undefined;
28
+ };
29
+ }>;
30
+ //# sourceMappingURL=getEpochData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getEpochData.d.ts","sourceRoot":"","sources":["../../src/tools/getEpochData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAUpD,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;GAsFxF"}
@@ -0,0 +1,111 @@
1
+ import { extractThryveHeaders, buildUrlEncodedBody, getDefaultTimestampRange, THRYVE_API_BASE_URL, } from "../helpers.js";
2
+ import { getDataTypeIdsForCategories, CATEGORY_MAPPINGS } from "../category-mappings.js";
3
+ import { flattenThryveResponse, enrichWithDataTypes } from "../data-enrichment.js";
4
+ export async function getEpochData(req, args) {
5
+ const { headers, authToken } = extractThryveHeaders(req);
6
+ // Apply default timestamp range if not provided
7
+ const defaults = getDefaultTimestampRange();
8
+ const startTimestamp = args.startTimestamp || defaults.startTimestamp;
9
+ const endTimestamp = args.endTimestamp || defaults.endTimestamp;
10
+ // Get data type IDs for requested categories
11
+ const dataTypeIds = getDataTypeIdsForCategories(args.categories);
12
+ if (dataTypeIds.length === 0) {
13
+ return {
14
+ results: {},
15
+ metadata: {
16
+ categories: args.categories,
17
+ timeRange: { start: startTimestamp, end: endTimestamp },
18
+ totalRecords: 0,
19
+ message: "No data types found for requested categories",
20
+ },
21
+ };
22
+ }
23
+ // Convert dataSources array to comma-separated string if provided
24
+ const dataSourcesParam = args.dataSources?.join(',');
25
+ const body = buildUrlEncodedBody({
26
+ authenticationToken: authToken,
27
+ startTimestamp,
28
+ endTimestamp,
29
+ dataSources: dataSourcesParam,
30
+ displayTypeName: "true",
31
+ });
32
+ const response = await fetch(`${THRYVE_API_BASE_URL}/v5/dynamicEpochValues`, {
33
+ method: "POST",
34
+ headers,
35
+ body,
36
+ });
37
+ if (!response.ok) {
38
+ throw new Error(`Thryve API error: ${response.status} ${response.statusText}`);
39
+ }
40
+ const data = await response.json();
41
+ // Flatten and enrich data
42
+ const flattenedData = flattenThryveResponse(data);
43
+ enrichWithDataTypes(flattenedData);
44
+ // Filter by requested data type IDs
45
+ const dataTypeIdSet = new Set(dataTypeIds);
46
+ const filteredData = flattenedData.filter((record) => {
47
+ const typeId = record.dataType || record.dynamicEpochValueType || record.dynamicValueType;
48
+ return typeId && dataTypeIdSet.has(typeId);
49
+ });
50
+ // Apply limit if specified
51
+ const limitedData = args.limit ? filteredData.slice(0, args.limit) : filteredData;
52
+ // Group results by category
53
+ const groupedResults = groupByCategory(limitedData, args.categories);
54
+ // Build metadata
55
+ const dataTypesFound = new Set();
56
+ limitedData.forEach((record) => {
57
+ const typeName = record.dynamicValueTypeName || record.dynamicEpochValueTypeName;
58
+ if (typeName)
59
+ dataTypesFound.add(typeName);
60
+ });
61
+ const metadata = {
62
+ categories: args.categories,
63
+ timeRange: {
64
+ start: startTimestamp,
65
+ end: endTimestamp,
66
+ },
67
+ totalRecords: limitedData.length,
68
+ dataTypesFound: Array.from(dataTypesFound).sort(),
69
+ dataSources: args.dataSources,
70
+ limitApplied: args.limit,
71
+ };
72
+ return {
73
+ results: groupedResults,
74
+ metadata,
75
+ };
76
+ }
77
+ /**
78
+ * Group records by requested categories
79
+ */
80
+ function groupByCategory(records, requestedCategories) {
81
+ const grouped = {};
82
+ // Initialize structure for requested categories
83
+ for (const category of requestedCategories) {
84
+ grouped[category] = [];
85
+ }
86
+ // Get category data type IDs for matching
87
+ const categoryDataTypes = new Map();
88
+ for (const category of requestedCategories) {
89
+ const mapping = CATEGORY_MAPPINGS[category];
90
+ if (mapping) {
91
+ for (const dataTypeId of mapping.dataTypeIds) {
92
+ if (!categoryDataTypes.has(dataTypeId)) {
93
+ categoryDataTypes.set(dataTypeId, []);
94
+ }
95
+ categoryDataTypes.get(dataTypeId).push(category);
96
+ }
97
+ }
98
+ }
99
+ // Group records
100
+ for (const record of records) {
101
+ const typeId = record.dataType || record.dynamicEpochValueType || record.dynamicValueType;
102
+ if (typeId && categoryDataTypes.has(typeId)) {
103
+ const categories = categoryDataTypes.get(typeId);
104
+ for (const category of categories) {
105
+ grouped[category].push(record);
106
+ }
107
+ }
108
+ }
109
+ return grouped;
110
+ }
111
+ //# sourceMappingURL=getEpochData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getEpochData.js","sourceRoot":"","sources":["../../src/tools/getEpochData.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { Request } from "express";
2
+ import type { z } from "zod";
3
+ import type { GetHealthDataByCategorySchema } from "../schemas.js";
4
+ import type { HealthDataRecord } from "../types.js";
5
+ interface GroupedResults {
6
+ [category: string]: {
7
+ daily?: HealthDataRecord[];
8
+ intraday?: HealthDataRecord[];
9
+ };
10
+ }
11
+ export declare function getHealthDataByCategory(req: Request, args: z.infer<typeof GetHealthDataByCategorySchema>): Promise<{
12
+ results: {};
13
+ metadata: {
14
+ categories: any;
15
+ timeRange: {
16
+ start: any;
17
+ end: any;
18
+ };
19
+ totalRecords: number;
20
+ message: string;
21
+ };
22
+ } | {
23
+ results: GroupedResults;
24
+ metadata: {
25
+ categories: any;
26
+ timeRange: {
27
+ start: any;
28
+ end: any;
29
+ };
30
+ granularity: any;
31
+ totalRecords: number;
32
+ dataTypesFound: string[];
33
+ dataSources: any;
34
+ limitApplied: any;
35
+ };
36
+ }>;
37
+ export {};
38
+ //# sourceMappingURL=getHealthDataByCategory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getHealthDataByCategory.d.ts","sourceRoot":"","sources":["../../src/tools/getHealthDataByCategory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAWpD,UAAU,cAAc;IACtB,CAAC,QAAQ,EAAE,MAAM,GAAG;QAClB,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;QAC3B,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;KAC/B,CAAC;CACH;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;GA8JpD"}
@@ -0,0 +1,231 @@
1
+ import { extractThryveHeaders, buildUrlEncodedBody, getDefaultTimestampRange, THRYVE_API_BASE_URL, generateRecordId, } from "../helpers.js";
2
+ import { getDataTypeIdsForCategories, CATEGORY_MAPPINGS } from "../category-mappings.js";
3
+ import { getDataTypeById } from "../data-types-generated.js";
4
+ export async function getHealthDataByCategory(req, args) {
5
+ const { headers, authToken } = extractThryveHeaders(req);
6
+ // Apply default timestamp range if not provided
7
+ const defaults = getDefaultTimestampRange();
8
+ const startTimestamp = args.startTimestamp || defaults.startTimestamp;
9
+ const endTimestamp = args.endTimestamp || defaults.endTimestamp;
10
+ // Extract dates for daily data API
11
+ const startDay = startTimestamp.split("T")[0];
12
+ const endDay = endTimestamp.split("T")[0];
13
+ // Get data type IDs for requested categories
14
+ const dataTypeIds = getDataTypeIdsForCategories(args.categories);
15
+ if (dataTypeIds.length === 0) {
16
+ return {
17
+ results: {},
18
+ metadata: {
19
+ categories: args.categories,
20
+ timeRange: { start: startTimestamp, end: endTimestamp },
21
+ totalRecords: 0,
22
+ message: "No data types found for requested categories",
23
+ },
24
+ };
25
+ }
26
+ // Determine which APIs to call based on granularity
27
+ const fetchDaily = args.granularity === "daily" || args.granularity === "both";
28
+ const fetchIntraday = args.granularity === "intraday" || args.granularity === "both";
29
+ const requests = [];
30
+ // Fetch daily data
31
+ if (fetchDaily) {
32
+ const dailyBody = buildUrlEncodedBody({
33
+ authenticationToken: authToken,
34
+ startDay,
35
+ endDay,
36
+ dataSources: args.dataSources?.join(","),
37
+ displayTypeName: "true",
38
+ });
39
+ requests.push(fetch(`${THRYVE_API_BASE_URL}/v5/dailyDynamicValues`, {
40
+ method: "POST",
41
+ headers,
42
+ body: dailyBody,
43
+ }));
44
+ }
45
+ // Fetch intraday/epoch data
46
+ if (fetchIntraday) {
47
+ const epochBody = buildUrlEncodedBody({
48
+ authenticationToken: authToken,
49
+ startTimestamp,
50
+ endTimestamp,
51
+ dataSources: args.dataSources?.join(","),
52
+ displayTypeName: "true",
53
+ });
54
+ requests.push(fetch(`${THRYVE_API_BASE_URL}/v5/dynamicEpochValues`, {
55
+ method: "POST",
56
+ headers,
57
+ body: epochBody,
58
+ }));
59
+ }
60
+ // Execute requests in parallel
61
+ const responses = await Promise.all(requests);
62
+ // Check for errors
63
+ for (const response of responses) {
64
+ if (!response.ok) {
65
+ throw new Error(`Thryve API error: ${response.status} ${response.statusText}`);
66
+ }
67
+ }
68
+ // Parse responses
69
+ const data = await Promise.all(responses.map((r) => r.json()));
70
+ let dailyData = [];
71
+ let epochData = [];
72
+ if (fetchDaily && !fetchIntraday) {
73
+ dailyData = Array.isArray(data[0]) ? data[0] : [];
74
+ }
75
+ else if (!fetchDaily && fetchIntraday) {
76
+ epochData = Array.isArray(data[0]) ? data[0] : [];
77
+ }
78
+ else {
79
+ dailyData = Array.isArray(data[0]) ? data[0] : [];
80
+ epochData = Array.isArray(data[1]) ? data[1] : [];
81
+ }
82
+ // Flatten and enrich data structures
83
+ const flattenedDaily = flattenThryveResponse(dailyData);
84
+ const flattenedEpoch = flattenThryveResponse(epochData);
85
+ // Enrich with data type metadata
86
+ enrichWithDataTypes(flattenedDaily);
87
+ enrichWithDataTypes(flattenedEpoch);
88
+ // Filter by requested data type IDs
89
+ const dataTypeIdSet = new Set(dataTypeIds);
90
+ const filteredDaily = flattenedDaily.filter((record) => {
91
+ const typeId = record.dataType || record.dailyDynamicValueType;
92
+ return typeId && dataTypeIdSet.has(typeId);
93
+ });
94
+ const filteredEpoch = flattenedEpoch.filter((record) => {
95
+ const typeId = record.dataType || record.dynamicEpochValueType || record.dynamicValueType;
96
+ return typeId && dataTypeIdSet.has(typeId);
97
+ });
98
+ // Apply limit if specified
99
+ let limitedDaily = filteredDaily;
100
+ let limitedEpoch = filteredEpoch;
101
+ if (args.limit) {
102
+ const limitPerCategory = Math.ceil(args.limit / args.categories.length);
103
+ limitedDaily = filteredDaily.slice(0, limitPerCategory);
104
+ limitedEpoch = filteredEpoch.slice(0, limitPerCategory);
105
+ }
106
+ // Group results by category
107
+ const groupedResults = groupByCategory(limitedDaily, limitedEpoch, args.categories);
108
+ // Build metadata
109
+ const dataTypesFound = new Set();
110
+ [...limitedDaily, ...limitedEpoch].forEach((record) => {
111
+ const typeName = record.dailyDynamicValueTypeName || record.dynamicValueTypeName || record.dynamicEpochValueTypeName;
112
+ if (typeName)
113
+ dataTypesFound.add(typeName);
114
+ });
115
+ const metadata = {
116
+ categories: args.categories,
117
+ timeRange: {
118
+ start: startTimestamp,
119
+ end: endTimestamp,
120
+ },
121
+ granularity: args.granularity,
122
+ totalRecords: limitedDaily.length + limitedEpoch.length,
123
+ dataTypesFound: Array.from(dataTypesFound).sort(),
124
+ dataSources: args.dataSources,
125
+ limitApplied: args.limit,
126
+ };
127
+ return {
128
+ results: groupedResults,
129
+ metadata,
130
+ };
131
+ }
132
+ /**
133
+ * Flatten Thryve API response structure
134
+ */
135
+ function flattenThryveResponse(data) {
136
+ const records = [];
137
+ if (!Array.isArray(data)) {
138
+ return records;
139
+ }
140
+ for (const item of data) {
141
+ if (item.dataSources && Array.isArray(item.dataSources)) {
142
+ for (const dataSource of item.dataSources) {
143
+ if (dataSource.data && Array.isArray(dataSource.data)) {
144
+ for (const record of dataSource.data) {
145
+ records.push({
146
+ ...record,
147
+ dataSource: dataSource.dataSource,
148
+ dataSourceName: dataSource.dataSourceName,
149
+ _recordId: generateRecordId({ ...record, dataSource: dataSource.dataSource }),
150
+ });
151
+ }
152
+ }
153
+ }
154
+ }
155
+ }
156
+ return records;
157
+ }
158
+ /**
159
+ * Enrich records with data type metadata
160
+ */
161
+ function enrichWithDataTypes(records) {
162
+ for (const record of records) {
163
+ const typeId = record.dailyDynamicValueType || record.dynamicValueType || record.dynamicEpochValueType;
164
+ if (typeId) {
165
+ const dataType = getDataTypeById(typeId);
166
+ if (dataType) {
167
+ if (record.dailyDynamicValueType) {
168
+ record.dailyDynamicValueTypeName = dataType.name;
169
+ }
170
+ else if (record.dynamicValueType || record.dynamicEpochValueType) {
171
+ record.dynamicValueTypeName = dataType.name;
172
+ record.dynamicEpochValueTypeName = dataType.name;
173
+ }
174
+ record.category = dataType.category;
175
+ record.unit = dataType.unit;
176
+ record.dataType = typeId;
177
+ }
178
+ }
179
+ }
180
+ }
181
+ /**
182
+ * Group records by requested categories
183
+ */
184
+ function groupByCategory(dailyRecords, epochRecords, requestedCategories) {
185
+ const grouped = {};
186
+ // Initialize structure for requested categories
187
+ for (const category of requestedCategories) {
188
+ grouped[category] = {};
189
+ }
190
+ // Get category data type IDs for matching
191
+ const categoryDataTypes = new Map();
192
+ for (const category of requestedCategories) {
193
+ const mapping = CATEGORY_MAPPINGS[category];
194
+ if (mapping) {
195
+ for (const dataTypeId of mapping.dataTypeIds) {
196
+ if (!categoryDataTypes.has(dataTypeId)) {
197
+ categoryDataTypes.set(dataTypeId, []);
198
+ }
199
+ categoryDataTypes.get(dataTypeId).push(category);
200
+ }
201
+ }
202
+ }
203
+ // Group daily records
204
+ for (const record of dailyRecords) {
205
+ const typeId = record.dataType || record.dailyDynamicValueType;
206
+ if (typeId && categoryDataTypes.has(typeId)) {
207
+ const categories = categoryDataTypes.get(typeId);
208
+ for (const category of categories) {
209
+ if (!grouped[category].daily) {
210
+ grouped[category].daily = [];
211
+ }
212
+ grouped[category].daily.push(record);
213
+ }
214
+ }
215
+ }
216
+ // Group epoch records
217
+ for (const record of epochRecords) {
218
+ const typeId = record.dataType || record.dynamicEpochValueType || record.dynamicValueType;
219
+ if (typeId && categoryDataTypes.has(typeId)) {
220
+ const categories = categoryDataTypes.get(typeId);
221
+ for (const category of categories) {
222
+ if (!grouped[category].intraday) {
223
+ grouped[category].intraday = [];
224
+ }
225
+ grouped[category].intraday.push(record);
226
+ }
227
+ }
228
+ }
229
+ return grouped;
230
+ }
231
+ //# sourceMappingURL=getHealthDataByCategory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getHealthDataByCategory.js","sourceRoot":"","sources":["../../src/tools/getHealthDataByCategory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Request } from "express";
2
+ import type { z } from "zod";
3
+ import type { GetUserInformationSchema } from "../schemas.js";
4
+ export declare function getUserInformation(req: Request, _args: z.infer<typeof GetUserInformationSchema>): Promise<{
5
+ connectedSources: any;
6
+ devices: any;
7
+ }>;
8
+ //# sourceMappingURL=getUserInformation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUserInformation.d.ts","sourceRoot":"","sources":["../../src/tools/getUserInformation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAO9D,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC;;;GA0BrG"}
@@ -0,0 +1,24 @@
1
+ import { extractThryveHeaders, buildUrlEncodedBody, THRYVE_API_BASE_URL, } from "../helpers.js";
2
+ export async function getUserInformation(req, _args) {
3
+ const { headers, authToken } = extractThryveHeaders(req);
4
+ const body = buildUrlEncodedBody({ authenticationToken: authToken });
5
+ const response = await fetch(`${THRYVE_API_BASE_URL}/v5/userInformation`, {
6
+ method: "POST",
7
+ headers,
8
+ body,
9
+ });
10
+ if (!response.ok) {
11
+ throw new Error(`Thryve API error: ${response.status} ${response.statusText}`);
12
+ }
13
+ const data = await response.json();
14
+ // Filter out sensitive personal information - only return connected sources
15
+ if (Array.isArray(data) && data.length > 0) {
16
+ const userData = data[0];
17
+ return {
18
+ connectedSources: userData.connectedSources || [],
19
+ devices: userData.devices || [],
20
+ };
21
+ }
22
+ return { connectedSources: [], devices: [] };
23
+ }
24
+ //# sourceMappingURL=getUserInformation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUserInformation.js","sourceRoot":"","sources":["../../src/tools/getUserInformation.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAY,EAAE,KAA+C;IACpG,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,mBAAmB,CAAC,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC,CAAC;IAErE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,mBAAmB,qBAAqB,EAAE;QACxE,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI;KACL,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEnC,4EAA4E;IAC5E,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO;YACL,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,IAAI,EAAE;YACjD,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE;SAChC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { getActivity, getHeartRate, getSleep, getWorkouts, getStressAndHRV, getRespiratory, getBloodGlucose, getBodyComposition, getWomensHealth, getNutrition, getCardiovascular, getWellness, getAudioAndHearing, getMicrobiome, getLocation, getMovementAnalysis, } from "./categoryTools.js";
2
+ export { searchKeyword } from "./search-keyword.js";
3
+ export { searchFilters } from "./search-filters.js";
4
+ export { listConnectedSources } from "./listConnectedSources.js";
5
+ export { listDevices } from "./listDevices.js";
6
+ export { getAvailableDataTypes } from "./getAvailableDataTypes.js";
7
+ //# sourceMappingURL=index.d.ts.map