thryve-mcp-server 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.
- package/README.md +42 -16
- package/dist/category-data-types.d.ts +18 -0
- package/dist/category-data-types.d.ts.map +1 -0
- package/dist/category-data-types.js +74 -0
- package/dist/category-data-types.js.map +1 -0
- package/dist/category-mappings.d.ts +0 -13
- package/dist/category-mappings.d.ts.map +1 -1
- package/dist/category-mappings.js +0 -17
- package/dist/category-mappings.js.map +1 -1
- package/dist/data-enrichment.d.ts +1 -6
- package/dist/data-enrichment.d.ts.map +1 -1
- package/dist/data-enrichment.js +10 -51
- package/dist/data-enrichment.js.map +1 -1
- package/dist/data-source-mappings.d.ts +12 -0
- package/dist/data-source-mappings.d.ts.map +1 -0
- package/dist/data-source-mappings.js +47 -0
- package/dist/data-source-mappings.js.map +1 -0
- package/dist/helpers.d.ts +1 -4
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +0 -64
- package/dist/helpers.js.map +1 -1
- package/dist/index.js +142 -143
- package/dist/index.js.map +1 -1
- package/dist/schemas.d.ts +192 -300
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +39 -135
- package/dist/schemas.js.map +1 -1
- package/dist/tools/baseCategoryHandler.d.ts +5 -11
- package/dist/tools/baseCategoryHandler.d.ts.map +1 -1
- package/dist/tools/baseCategoryHandler.js +41 -67
- package/dist/tools/baseCategoryHandler.js.map +1 -1
- package/dist/tools/categoryTools.d.ts +16 -16
- package/dist/tools/search-filters.d.ts +4 -6
- package/dist/tools/search-filters.d.ts.map +1 -1
- package/dist/tools/search-filters.js +17 -21
- package/dist/tools/search-filters.js.map +1 -1
- package/dist/tools/search-keyword.d.ts +1 -1
- package/dist/tools/search-keyword.d.ts.map +1 -1
- package/dist/tools/search-keyword.js +46 -12
- package/dist/tools/search-keyword.js.map +1 -1
- package/dist/types.d.ts +2 -7
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -55,13 +55,12 @@ Each tool retrieves data for one health category. All support daily/epoch resolu
|
|
|
55
55
|
- `GetMovementAnalysisData` – Gait, posture, biomechanics
|
|
56
56
|
|
|
57
57
|
**Parameters (all tools):**
|
|
58
|
-
- `
|
|
58
|
+
- `timeSeries` – "daily" | "epoch" (default: "daily")
|
|
59
59
|
- `startTimestamp` – ISO 8601 (defaults to 7 days ago)
|
|
60
60
|
- `endTimestamp` – ISO 8601 (defaults to now)
|
|
61
|
-
- `dataSources` – Array of data source
|
|
61
|
+
- `dataSources` – Array of data source identifiers (e.g., ["Fitbit", "Garmin", "AppleHealth"])
|
|
62
62
|
- `limit` – Max records to return
|
|
63
|
-
- `
|
|
64
|
-
- `excludeFields` – Sub-categories to exclude
|
|
63
|
+
- `includedData` – Array of category-specific data type names to return (falls back to all data types when omitted)
|
|
65
64
|
|
|
66
65
|
**Example:**
|
|
67
66
|
```bash
|
|
@@ -77,14 +76,35 @@ curl -X POST http://localhost:30000/mcp \
|
|
|
77
76
|
"params": {
|
|
78
77
|
"name": "GetActivityData",
|
|
79
78
|
"arguments": {
|
|
80
|
-
"
|
|
79
|
+
"timeSeries": "daily",
|
|
81
80
|
"startTimestamp": "2025-10-21T00:00:00Z",
|
|
82
|
-
"endTimestamp": "2025-10-28T23:59:59Z"
|
|
81
|
+
"endTimestamp": "2025-10-28T23:59:59Z",
|
|
82
|
+
"dataSources": ["Fitbit"],
|
|
83
|
+
"includedData": ["Steps", "BurnedCalories"]
|
|
83
84
|
}
|
|
84
85
|
}
|
|
85
86
|
}'
|
|
86
87
|
```
|
|
87
88
|
|
|
89
|
+
#### Data source identifiers
|
|
90
|
+
|
|
91
|
+
Category tools, `searchKeyword`, and `searchFilters` now accept friendly source names instead of numeric IDs. Use `listConnectedSources` to discover what each user has linked, or pick from common values:
|
|
92
|
+
|
|
93
|
+
- `Fitbit`
|
|
94
|
+
- `Garmin`
|
|
95
|
+
- `Polar`
|
|
96
|
+
- `AppleHealth`
|
|
97
|
+
- `SamsungHealth`
|
|
98
|
+
- `Withings`
|
|
99
|
+
- `Strava`
|
|
100
|
+
- `Oura`
|
|
101
|
+
- `Whoop`
|
|
102
|
+
- `GoogleFitREST`
|
|
103
|
+
- `GoogleFitNative`
|
|
104
|
+
- `HealthConnect`
|
|
105
|
+
- `Dexcom`
|
|
106
|
+
- `Suunto`
|
|
107
|
+
|
|
88
108
|
### Search and Retrieval Tools
|
|
89
109
|
|
|
90
110
|
#### `searchKeyword`
|
|
@@ -96,7 +116,7 @@ Search for health data by property name (e.g., "SleepBinary", "Steps", "HeartRat
|
|
|
96
116
|
- `startDate` – YYYY-MM-DD
|
|
97
117
|
- `endDate` – YYYY-MM-DD
|
|
98
118
|
- `dataType` – Filter by category
|
|
99
|
-
- `dataSource` – Filter by source
|
|
119
|
+
- `dataSource` – Filter by source identifier (e.g., "Fitbit")
|
|
100
120
|
- `page` – Page number (default: 1)
|
|
101
121
|
- `pageSize` – Results per page (default: 50, max: 200)
|
|
102
122
|
- `sortBy` – "timestamp" | "day" | "value" | "dataType" | "dataSource"
|
|
@@ -107,9 +127,9 @@ Search for health data by property name (e.g., "SleepBinary", "Steps", "HeartRat
|
|
|
107
127
|
Advanced search with comprehensive filtering. Replaces legacy getDailyData/getEpochData.
|
|
108
128
|
|
|
109
129
|
**Parameters:**
|
|
110
|
-
- `
|
|
130
|
+
- `timeSeries` – "daily" | "epoch" | "both" (default: "both")
|
|
111
131
|
- `dataTypes` – Array of data type IDs
|
|
112
|
-
- `dataSources` – Array of source
|
|
132
|
+
- `dataSources` – Array of source identifiers
|
|
113
133
|
- `categories` – Array of category names
|
|
114
134
|
- `groupByCategory` – Boolean (default: false)
|
|
115
135
|
- `limit` – Max records
|
|
@@ -124,7 +144,7 @@ Advanced search with comprehensive filtering. Replaces legacy getDailyData/getEp
|
|
|
124
144
|
{
|
|
125
145
|
"name": "searchFilters",
|
|
126
146
|
"arguments": {
|
|
127
|
-
"
|
|
147
|
+
"timeSeries": "daily",
|
|
128
148
|
"categories": ["Activity", "Heart Rate"],
|
|
129
149
|
"groupByCategory": true
|
|
130
150
|
}
|
|
@@ -215,12 +235,18 @@ Catalog of 250+ data types organized by 16 categories.
|
|
|
215
235
|
}
|
|
216
236
|
```
|
|
217
237
|
|
|
218
|
-
## Common Data Source
|
|
219
|
-
|
|
220
|
-
- `
|
|
221
|
-
- `
|
|
222
|
-
- `
|
|
223
|
-
- `
|
|
238
|
+
## Common Data Source Identifiers
|
|
239
|
+
|
|
240
|
+
- `Fitbit`
|
|
241
|
+
- `Garmin`
|
|
242
|
+
- `Polar`
|
|
243
|
+
- `AppleHealth`
|
|
244
|
+
- `SamsungHealth`
|
|
245
|
+
- `Withings`
|
|
246
|
+
- `Strava`
|
|
247
|
+
- `Oura`
|
|
248
|
+
- `Whoop`
|
|
249
|
+
- `Dexcom`
|
|
224
250
|
|
|
225
251
|
## Error Handling
|
|
226
252
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Category-specific data type enumerations for LLM-friendly access
|
|
3
|
+
* Automatically generated from ALL_DATA_TYPES
|
|
4
|
+
*/
|
|
5
|
+
import type { HealthCategory } from "./category-mappings.js";
|
|
6
|
+
/**
|
|
7
|
+
* Get available data type names for a specific category
|
|
8
|
+
*/
|
|
9
|
+
export declare function getDataTypeNamesForCategory(category: HealthCategory): string[];
|
|
10
|
+
/**
|
|
11
|
+
* Pre-computed data type names for each category (for schema generation)
|
|
12
|
+
*/
|
|
13
|
+
export declare const CATEGORY_DATA_TYPE_NAMES: Record<HealthCategory, string[]>;
|
|
14
|
+
/**
|
|
15
|
+
* Convert data type names to IDs for API calls
|
|
16
|
+
*/
|
|
17
|
+
export declare function dataTypeNamesToIds(names: string[]): number[];
|
|
18
|
+
//# sourceMappingURL=category-data-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"category-data-types.d.ts","sourceRoot":"","sources":["../src/category-data-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,EAAE,CAmC9E;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,CAiBrE,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAS5D"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Category-specific data type enumerations for LLM-friendly access
|
|
3
|
+
* Automatically generated from ALL_DATA_TYPES
|
|
4
|
+
*/
|
|
5
|
+
import { ALL_DATA_TYPES } from "./data-types-generated.js";
|
|
6
|
+
/**
|
|
7
|
+
* Get available data type names for a specific category
|
|
8
|
+
*/
|
|
9
|
+
export function getDataTypeNamesForCategory(category) {
|
|
10
|
+
// Map our HealthCategory to Thryve categories
|
|
11
|
+
const categoryMap = {
|
|
12
|
+
"Activity": ["Activity"],
|
|
13
|
+
"Heart Rate": ["Heart Rate"],
|
|
14
|
+
"Sleep": ["Sleep"],
|
|
15
|
+
"Workouts": ["Workouts"],
|
|
16
|
+
"Stress & HRV": ["Stress & HRV"],
|
|
17
|
+
"Respiratory": ["Respiratory & Breathing"],
|
|
18
|
+
"Blood Glucose": ["Blood Glucose"],
|
|
19
|
+
"Body Composition": ["Body Composition & Measurements"],
|
|
20
|
+
"Womens Health": ["Women's Health"],
|
|
21
|
+
"Nutrition": ["Detailed Nutrition"],
|
|
22
|
+
"Cardiovascular": ["Cardiovascular Health", "Advanced Cardiac Analysis"],
|
|
23
|
+
"Wellness": ["Self-Reported Wellness"],
|
|
24
|
+
"Audio & Hearing": ["Audio & Hearing Health"],
|
|
25
|
+
"Microbiome": ["Microbiome & Gut Health"],
|
|
26
|
+
"Location": ["Location & GPS"],
|
|
27
|
+
"Movement Analysis": ["Movement Analysis"],
|
|
28
|
+
};
|
|
29
|
+
const thryveCategories = categoryMap[category] || [];
|
|
30
|
+
const dataTypeNames = new Set();
|
|
31
|
+
for (const dataType of ALL_DATA_TYPES) {
|
|
32
|
+
// Handle compound categories like "Activity,Workouts"
|
|
33
|
+
const categories = dataType.category.split(",").map((c) => c.trim());
|
|
34
|
+
// Check if any of this data type's categories match our target categories
|
|
35
|
+
if (categories.some(cat => thryveCategories.includes(cat))) {
|
|
36
|
+
dataTypeNames.add(dataType.name);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return Array.from(dataTypeNames).sort();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Pre-computed data type names for each category (for schema generation)
|
|
43
|
+
*/
|
|
44
|
+
export const CATEGORY_DATA_TYPE_NAMES = {
|
|
45
|
+
"Activity": getDataTypeNamesForCategory("Activity"),
|
|
46
|
+
"Heart Rate": getDataTypeNamesForCategory("Heart Rate"),
|
|
47
|
+
"Sleep": getDataTypeNamesForCategory("Sleep"),
|
|
48
|
+
"Workouts": getDataTypeNamesForCategory("Workouts"),
|
|
49
|
+
"Stress & HRV": getDataTypeNamesForCategory("Stress & HRV"),
|
|
50
|
+
"Respiratory": getDataTypeNamesForCategory("Respiratory"),
|
|
51
|
+
"Blood Glucose": getDataTypeNamesForCategory("Blood Glucose"),
|
|
52
|
+
"Body Composition": getDataTypeNamesForCategory("Body Composition"),
|
|
53
|
+
"Womens Health": getDataTypeNamesForCategory("Womens Health"),
|
|
54
|
+
"Nutrition": getDataTypeNamesForCategory("Nutrition"),
|
|
55
|
+
"Cardiovascular": getDataTypeNamesForCategory("Cardiovascular"),
|
|
56
|
+
"Wellness": getDataTypeNamesForCategory("Wellness"),
|
|
57
|
+
"Audio & Hearing": getDataTypeNamesForCategory("Audio & Hearing"),
|
|
58
|
+
"Microbiome": getDataTypeNamesForCategory("Microbiome"),
|
|
59
|
+
"Location": getDataTypeNamesForCategory("Location"),
|
|
60
|
+
"Movement Analysis": getDataTypeNamesForCategory("Movement Analysis"),
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Convert data type names to IDs for API calls
|
|
64
|
+
*/
|
|
65
|
+
export function dataTypeNamesToIds(names) {
|
|
66
|
+
const nameToIdMap = ALL_DATA_TYPES.reduce((acc, dt) => {
|
|
67
|
+
acc[dt.name] = dt.id;
|
|
68
|
+
return acc;
|
|
69
|
+
}, {});
|
|
70
|
+
return names
|
|
71
|
+
.map(name => nameToIdMap[name])
|
|
72
|
+
.filter(id => id !== undefined);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=category-data-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"category-data-types.js","sourceRoot":"","sources":["../src/category-data-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,18 +17,5 @@ export declare function getDataTypeIdsForCategories(categories: HealthCategory[]
|
|
|
17
17
|
* Get category information for display
|
|
18
18
|
*/
|
|
19
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
20
|
export {};
|
|
34
21
|
//# sourceMappingURL=category-mappings.d.ts.map
|
|
@@ -1 +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
|
|
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"}
|
|
@@ -126,21 +126,4 @@ export function getDataTypeIdsForCategories(categories) {
|
|
|
126
126
|
export function getCategoryInfo(category) {
|
|
127
127
|
return CATEGORY_MAPPINGS[category];
|
|
128
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
129
|
//# sourceMappingURL=category-mappings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"category-mappings.js","sourceRoot":"","sources":["../src/category-mappings.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"category-mappings.js","sourceRoot":"","sources":["../src/category-mappings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared data enrichment utilities for health data
|
|
3
|
-
* Used by
|
|
3
|
+
* Used by search tools and category handlers to enrich API responses
|
|
4
4
|
*/
|
|
5
5
|
import type { HealthDataRecord } from "./types.js";
|
|
6
6
|
/**
|
|
@@ -11,9 +11,4 @@ export declare function flattenThryveResponse(data: any): HealthDataRecord[];
|
|
|
11
11
|
* Enrich records with data type metadata (name, category, unit)
|
|
12
12
|
*/
|
|
13
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
14
|
//# sourceMappingURL=data-enrichment.d.ts.map
|
|
@@ -1 +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,
|
|
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,CA+BnE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAyBrE"}
|
package/dist/data-enrichment.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared data enrichment utilities for health data
|
|
3
|
-
* Used by
|
|
3
|
+
* Used by search tools and category handlers to enrich API responses
|
|
4
4
|
*/
|
|
5
5
|
import { getDataTypeById } from "./data-types-generated.js";
|
|
6
|
-
import {
|
|
6
|
+
import { DATA_SOURCE_MAPPINGS } from "./data-source-mappings.js";
|
|
7
7
|
/**
|
|
8
8
|
* Flatten Thryve API response structure into flat array of records
|
|
9
9
|
*/
|
|
@@ -17,11 +17,16 @@ export function flattenThryveResponse(data) {
|
|
|
17
17
|
for (const dataSource of item.dataSources) {
|
|
18
18
|
if (dataSource.data && Array.isArray(dataSource.data)) {
|
|
19
19
|
for (const record of dataSource.data) {
|
|
20
|
+
// Convert numeric data source ID to friendly name if needed
|
|
21
|
+
let dataSourceName = dataSource.dataSourceName;
|
|
22
|
+
if (!dataSourceName && typeof dataSource.dataSource === 'number') {
|
|
23
|
+
dataSourceName = DATA_SOURCE_MAPPINGS[dataSource.dataSource] || `Unknown (${dataSource.dataSource})`;
|
|
24
|
+
}
|
|
20
25
|
records.push({
|
|
21
26
|
...record,
|
|
22
|
-
dataSource: dataSource.dataSource,
|
|
23
|
-
dataSourceName:
|
|
24
|
-
|
|
27
|
+
dataSource: dataSourceName || dataSource.dataSource, // Use friendly name as primary
|
|
28
|
+
dataSourceName: dataSourceName, // Keep for backward compatibility
|
|
29
|
+
dataSourceId: typeof dataSource.dataSource === 'number' ? dataSource.dataSource : undefined, // Preserve numeric ID
|
|
25
30
|
});
|
|
26
31
|
}
|
|
27
32
|
}
|
|
@@ -56,50 +61,4 @@ export function enrichWithDataTypes(records) {
|
|
|
56
61
|
}
|
|
57
62
|
}
|
|
58
63
|
}
|
|
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
64
|
//# sourceMappingURL=data-enrichment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-enrichment.js","sourceRoot":"","sources":["../src/data-enrichment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"data-enrichment.js","sourceRoot":"","sources":["../src/data-enrichment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAS;IAC7C,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACxD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC1C,IAAI,UAAU,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtD,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;wBACrC,4DAA4D;wBAC5D,IAAI,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC;wBAC/C,IAAI,CAAC,cAAc,IAAI,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;4BACjE,cAAc,GAAG,oBAAoB,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,YAAY,UAAU,CAAC,UAAU,GAAG,CAAC;wBACvG,CAAC;wBAED,OAAO,CAAC,IAAI,CAAC;4BACX,GAAG,MAAM;4BACT,UAAU,EAAE,cAAc,IAAI,UAAU,CAAC,UAAU,EAAE,+BAA+B;4BACpF,cAAc,EAAE,cAAc,EAAE,kCAAkC;4BAClE,YAAY,EAAE,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,sBAAsB;yBACpH,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA2B;IAC7D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GACV,MAAM,CAAC,qBAAqB;YAC5B,MAAM,CAAC,gBAAgB;YACvB,MAAM,CAAC,qBAAqB,CAAC;QAE/B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,QAAQ,EAAE,CAAC;gBACb,uDAAuD;gBACvD,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;oBACjC,MAAM,CAAC,yBAAyB,GAAG,QAAQ,CAAC,IAAI,CAAC;gBACnD,CAAC;gBACD,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;oBAC5D,MAAM,CAAC,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC;oBAC5C,MAAM,CAAC,yBAAyB,GAAG,QAAQ,CAAC,IAAI,CAAC;gBACnD,CAAC;gBAED,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;gBACpC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;gBAC5B,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data source mappings for LLM-friendly access
|
|
3
|
+
* Maps data source IDs to friendly names based on Thryve API documentation
|
|
4
|
+
* Source: https://docs.thryve.health/thryve-data-sources/overview
|
|
5
|
+
*/
|
|
6
|
+
export declare const DATA_SOURCE_MAPPINGS: Record<number, string>;
|
|
7
|
+
export type DataSourceName = typeof DATA_SOURCE_MAPPINGS[keyof typeof DATA_SOURCE_MAPPINGS];
|
|
8
|
+
/**
|
|
9
|
+
* Convert data source names to IDs
|
|
10
|
+
*/
|
|
11
|
+
export declare function dataSourceNamesToIds(names: string[]): number[];
|
|
12
|
+
//# sourceMappingURL=data-source-mappings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-source-mappings.d.ts","sourceRoot":"","sources":["../src/data-source-mappings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAuB9C,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,OAAO,oBAAoB,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAE5F;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAe9D"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data source mappings for LLM-friendly access
|
|
3
|
+
* Maps data source IDs to friendly names based on Thryve API documentation
|
|
4
|
+
* Source: https://docs.thryve.health/thryve-data-sources/overview
|
|
5
|
+
*/
|
|
6
|
+
export const DATA_SOURCE_MAPPINGS = {
|
|
7
|
+
1: "Fitbit",
|
|
8
|
+
2: "Garmin",
|
|
9
|
+
3: "Polar",
|
|
10
|
+
5: "AppleHealth",
|
|
11
|
+
6: "SamsungHealth",
|
|
12
|
+
8: "Withings",
|
|
13
|
+
11: "Strava",
|
|
14
|
+
12: "GoogleFitREST",
|
|
15
|
+
16: "OmronConnect",
|
|
16
|
+
17: "Suunto",
|
|
17
|
+
18: "Oura",
|
|
18
|
+
21: "iHealth",
|
|
19
|
+
27: "Beurer",
|
|
20
|
+
38: "HuaweiHealth",
|
|
21
|
+
40: "GoogleFitNative",
|
|
22
|
+
41: "Dexcom",
|
|
23
|
+
42: "Whoop",
|
|
24
|
+
43: "Decathlon",
|
|
25
|
+
44: "HealthConnect",
|
|
26
|
+
45: "Komoot",
|
|
27
|
+
46: "FreeStyleLibre",
|
|
28
|
+
47: "ShenAI",
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Convert data source names to IDs
|
|
32
|
+
*/
|
|
33
|
+
export function dataSourceNamesToIds(names) {
|
|
34
|
+
const ids = [];
|
|
35
|
+
const nameToIdMap = Object.entries(DATA_SOURCE_MAPPINGS).reduce((acc, [id, name]) => {
|
|
36
|
+
acc[name.toLowerCase()] = parseInt(id);
|
|
37
|
+
return acc;
|
|
38
|
+
}, {});
|
|
39
|
+
for (const name of names) {
|
|
40
|
+
const id = nameToIdMap[name.toLowerCase()];
|
|
41
|
+
if (id !== undefined) {
|
|
42
|
+
ids.push(id);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return ids;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data-source-mappings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-source-mappings.js","sourceRoot":"","sources":["../src/data-source-mappings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,aAAa;IAChB,CAAC,EAAE,eAAe;IAClB,CAAC,EAAE,UAAU;IACb,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,eAAe;IACnB,EAAE,EAAE,cAAc;IAClB,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,SAAS;IACb,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,cAAc;IAClB,EAAE,EAAE,iBAAiB;IACrB,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,eAAe;IACnB,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,gBAAgB;IACpB,EAAE,EAAE,QAAQ;CACJ,CAAC;AAIX;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAe;IAClD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE;QAClF,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvC,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAA4B,CAAC,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3C,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/helpers.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Request } from "express";
|
|
2
|
-
import type { HealthDataRecord, ThryveHeaders, PaginatedResult
|
|
2
|
+
import type { HealthDataRecord, ThryveHeaders, PaginatedResult } from "./types.js";
|
|
3
3
|
export declare const THRYVE_API_BASE_URL = "https://api.und-gesund.de";
|
|
4
4
|
export declare function extractThryveHeaders(req: Request): ThryveHeaders;
|
|
5
5
|
export declare function buildUrlEncodedBody(params: Record<string, string | boolean | undefined>): string;
|
|
@@ -13,7 +13,4 @@ export declare function getDefaultTimestampRange(): {
|
|
|
13
13
|
};
|
|
14
14
|
export declare function sortHealthData(data: HealthDataRecord[], sortBy: string, sortOrder: "asc" | "desc"): HealthDataRecord[];
|
|
15
15
|
export declare function paginateResults<T>(data: T[], page: number, pageSize: number): PaginatedResult<T>;
|
|
16
|
-
export declare function filterByKeyword(data: HealthDataRecord[], query: string): HealthDataRecord[];
|
|
17
|
-
export declare function generateRecordId(record: HealthDataRecord): string;
|
|
18
|
-
export declare function parseRecordId(id: string): ParsedRecordId | null;
|
|
19
16
|
//# sourceMappingURL=helpers.d.ts.map
|
package/dist/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGnF,eAAO,MAAM,mBAAmB,8BAA8B,CAAC;AAG/D,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAqBhE;AAGD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG,MAAM,CAOhG;AAGD,wBAAgB,mBAAmB,IAAI;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAS1E;AAGD,wBAAgB,wBAAwB,IAAI;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAS3F;AAGD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,gBAAgB,EAAE,EACxB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,KAAK,GAAG,MAAM,GACxB,gBAAgB,EAAE,CAqCpB;AAGD,wBAAgB,eAAe,CAAC,CAAC,EAC/B,IAAI,EAAE,CAAC,EAAE,EACT,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,eAAe,CAAC,CAAC,CAAC,CAgBpB"}
|
package/dist/helpers.js
CHANGED
|
@@ -99,68 +99,4 @@ export function paginateResults(data, page, pageSize) {
|
|
|
99
99
|
},
|
|
100
100
|
};
|
|
101
101
|
}
|
|
102
|
-
// Helper function to filter health data by keyword
|
|
103
|
-
export function filterByKeyword(data, query) {
|
|
104
|
-
const lowerQuery = query.toLowerCase();
|
|
105
|
-
return data.filter((record) => {
|
|
106
|
-
// Search in data type name
|
|
107
|
-
if (record.dataTypeName && record.dataTypeName.toLowerCase().includes(lowerQuery)) {
|
|
108
|
-
return true;
|
|
109
|
-
}
|
|
110
|
-
// Search in data source name
|
|
111
|
-
if (record.dataSourceName && record.dataSourceName.toLowerCase().includes(lowerQuery)) {
|
|
112
|
-
return true;
|
|
113
|
-
}
|
|
114
|
-
// Search in category
|
|
115
|
-
if (record.category && record.category.toLowerCase().includes(lowerQuery)) {
|
|
116
|
-
return true;
|
|
117
|
-
}
|
|
118
|
-
// Search in daily dynamic value type name
|
|
119
|
-
if (record.dailyDynamicValueTypeName &&
|
|
120
|
-
record.dailyDynamicValueTypeName.toLowerCase().includes(lowerQuery)) {
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
// Search in dynamic epoch value type name
|
|
124
|
-
if (record.dynamicEpochValueTypeName &&
|
|
125
|
-
record.dynamicEpochValueTypeName.toLowerCase().includes(lowerQuery)) {
|
|
126
|
-
return true;
|
|
127
|
-
}
|
|
128
|
-
return false;
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
// Helper function to generate a unique ID for a health record
|
|
132
|
-
export function generateRecordId(record) {
|
|
133
|
-
if (record.day) {
|
|
134
|
-
// Daily record: daily:{dataType}:{day}:{dataSource}
|
|
135
|
-
const dataType = record.dataType || record.dailyDynamicValueType || 'unknown';
|
|
136
|
-
const day = record.day;
|
|
137
|
-
const dataSource = record.dataSource || 'unknown';
|
|
138
|
-
return `daily:${dataType}:${day}:${dataSource}`;
|
|
139
|
-
}
|
|
140
|
-
else if (record.timestamp) {
|
|
141
|
-
// Epoch record: epoch:{dataType}:{timestamp}:{dataSource}
|
|
142
|
-
const dataType = record.dataType || record.dynamicEpochValueType || 'unknown';
|
|
143
|
-
const timestamp = record.timestamp;
|
|
144
|
-
const dataSource = record.dataSource || 'unknown';
|
|
145
|
-
return `epoch:${dataType}:${timestamp}:${dataSource}`;
|
|
146
|
-
}
|
|
147
|
-
return 'unknown';
|
|
148
|
-
}
|
|
149
|
-
// Helper function to parse a record ID
|
|
150
|
-
export function parseRecordId(id) {
|
|
151
|
-
const parts = id.split(':');
|
|
152
|
-
if (parts.length !== 4) {
|
|
153
|
-
return null;
|
|
154
|
-
}
|
|
155
|
-
const [type, dataType, timeKey, dataSource] = parts;
|
|
156
|
-
if (type !== 'daily' && type !== 'epoch') {
|
|
157
|
-
return null;
|
|
158
|
-
}
|
|
159
|
-
return {
|
|
160
|
-
type: type,
|
|
161
|
-
dataType,
|
|
162
|
-
timeKey,
|
|
163
|
-
dataSource,
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
102
|
//# sourceMappingURL=helpers.js.map
|
package/dist/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
|