@robinhealth/health-sdk 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.
@@ -0,0 +1,601 @@
1
+ import { initialize, getSdkStatus, requestPermission, getGrantedPermissions, readRecords, aggregateRecord, SdkAvailabilityStatus, } from 'react-native-health-connect';
2
+ import { HealthDataType, WorkoutActivityType, PermissionStatus, SleepStage, } from '../types';
3
+ import { getPermissionsRequested, setPermissionsRequested } from '../storage';
4
+ const TYPE_MAP = {
5
+ [HealthDataType.Steps]: {
6
+ recordType: 'Steps',
7
+ unit: 'count',
8
+ supportsAggregation: true,
9
+ },
10
+ [HealthDataType.DistanceWalkingRunning]: {
11
+ recordType: 'Distance',
12
+ unit: 'm',
13
+ supportsAggregation: true,
14
+ },
15
+ [HealthDataType.ActiveEnergyBurned]: {
16
+ recordType: 'ActiveCaloriesBurned',
17
+ unit: 'kcal',
18
+ supportsAggregation: true,
19
+ },
20
+ [HealthDataType.FlightsClimbed]: {
21
+ recordType: 'FloorsClimbed',
22
+ unit: 'count',
23
+ supportsAggregation: true,
24
+ },
25
+ [HealthDataType.HeartRate]: {
26
+ recordType: 'HeartRate',
27
+ unit: 'bpm',
28
+ supportsAggregation: true,
29
+ },
30
+ [HealthDataType.RestingHeartRate]: {
31
+ recordType: 'RestingHeartRate',
32
+ unit: 'bpm',
33
+ supportsAggregation: false,
34
+ },
35
+ [HealthDataType.BloodPressureSystolic]: {
36
+ recordType: 'BloodPressure',
37
+ unit: 'mmHg',
38
+ supportsAggregation: false,
39
+ field: 'systolic',
40
+ },
41
+ [HealthDataType.BloodPressureDiastolic]: {
42
+ recordType: 'BloodPressure',
43
+ unit: 'mmHg',
44
+ supportsAggregation: false,
45
+ field: 'diastolic',
46
+ },
47
+ [HealthDataType.BloodOxygen]: {
48
+ recordType: 'OxygenSaturation',
49
+ unit: '%',
50
+ supportsAggregation: false,
51
+ },
52
+ [HealthDataType.RespiratoryRate]: {
53
+ recordType: 'RespiratoryRate',
54
+ unit: 'breaths/min',
55
+ supportsAggregation: false,
56
+ },
57
+ [HealthDataType.SleepAnalysis]: {
58
+ recordType: 'SleepSession',
59
+ unit: 'hr',
60
+ supportsAggregation: false,
61
+ isSession: true,
62
+ },
63
+ [HealthDataType.BodyFatPercentage]: {
64
+ recordType: 'BodyFat',
65
+ unit: '%',
66
+ supportsAggregation: false,
67
+ },
68
+ [HealthDataType.BasalEnergyBurned]: {
69
+ recordType: 'BasalMetabolicRate',
70
+ unit: 'kcal/day',
71
+ supportsAggregation: false,
72
+ },
73
+ [HealthDataType.Water]: {
74
+ recordType: 'Hydration',
75
+ unit: 'mL',
76
+ supportsAggregation: false,
77
+ },
78
+ };
79
+ const HC_SLEEP_STAGE_MAP = {
80
+ 0: SleepStage.Unknown, // STAGE_TYPE_UNKNOWN
81
+ 1: SleepStage.Awake, // STAGE_TYPE_AWAKE
82
+ 2: SleepStage.Unknown, // STAGE_TYPE_SLEEPING (generic)
83
+ 3: SleepStage.Unknown, // STAGE_TYPE_OUT_OF_BED
84
+ 4: SleepStage.Light, // STAGE_TYPE_LIGHT
85
+ 5: SleepStage.Deep, // STAGE_TYPE_DEEP
86
+ 6: SleepStage.REM, // STAGE_TYPE_REM
87
+ };
88
+ // Health Connect ExerciseType numeric constants → SDK WorkoutActivityType
89
+ const EXERCISE_TYPE_MAP = {
90
+ 2: WorkoutActivityType.badminton,
91
+ 4: WorkoutActivityType.baseball,
92
+ 5: WorkoutActivityType.basketball,
93
+ 8: WorkoutActivityType.cycling,
94
+ 11: WorkoutActivityType.boxing,
95
+ 14: WorkoutActivityType.cricket,
96
+ 16: WorkoutActivityType.dance,
97
+ 25: WorkoutActivityType.elliptical,
98
+ 27: WorkoutActivityType.fencing,
99
+ 28: WorkoutActivityType.americanFootball,
100
+ 29: WorkoutActivityType.australianFootball,
101
+ 32: WorkoutActivityType.golf,
102
+ 34: WorkoutActivityType.gymnastics,
103
+ 35: WorkoutActivityType.handball,
104
+ 36: WorkoutActivityType.highIntensityIntervalTraining,
105
+ 37: WorkoutActivityType.hiking,
106
+ 38: WorkoutActivityType.hockey,
107
+ 41: WorkoutActivityType.jumpRope,
108
+ 44: WorkoutActivityType.martialArts,
109
+ 48: WorkoutActivityType.pilates,
110
+ 50: WorkoutActivityType.racquetball,
111
+ 51: WorkoutActivityType.climbing,
112
+ 53: WorkoutActivityType.rowing,
113
+ 54: WorkoutActivityType.rowing,
114
+ 55: WorkoutActivityType.rugby,
115
+ 56: WorkoutActivityType.running,
116
+ 58: WorkoutActivityType.sailing,
117
+ 59: WorkoutActivityType.underwaterDiving,
118
+ 60: WorkoutActivityType.skatingSports,
119
+ 61: WorkoutActivityType.snowSports,
120
+ 62: WorkoutActivityType.snowboarding,
121
+ 64: WorkoutActivityType.soccer,
122
+ 65: WorkoutActivityType.softball,
123
+ 66: WorkoutActivityType.squash,
124
+ 68: WorkoutActivityType.stairClimbing,
125
+ 70: WorkoutActivityType.traditionalStrengthTraining,
126
+ 71: WorkoutActivityType.flexibility,
127
+ 72: WorkoutActivityType.surfingSports,
128
+ 73: WorkoutActivityType.swimming,
129
+ 74: WorkoutActivityType.swimming,
130
+ 75: WorkoutActivityType.tableTennis,
131
+ 76: WorkoutActivityType.tennis,
132
+ 78: WorkoutActivityType.volleyball,
133
+ 79: WorkoutActivityType.walking,
134
+ 80: WorkoutActivityType.waterPolo,
135
+ 81: WorkoutActivityType.traditionalStrengthTraining,
136
+ 82: WorkoutActivityType.wheelchairWalkPace,
137
+ 83: WorkoutActivityType.yoga,
138
+ };
139
+ export class HealthConnectProvider {
140
+ constructor() {
141
+ this.initPromise = null;
142
+ }
143
+ async ensureInitialized() {
144
+ if (!this.initPromise) {
145
+ this.initPromise = initialize().catch((e) => {
146
+ this.initPromise = null;
147
+ throw e;
148
+ });
149
+ }
150
+ await this.initPromise;
151
+ }
152
+ async isAvailable() {
153
+ try {
154
+ await this.ensureInitialized();
155
+ const status = await getSdkStatus();
156
+ return status === SdkAvailabilityStatus.SDK_AVAILABLE;
157
+ }
158
+ catch {
159
+ return false;
160
+ }
161
+ }
162
+ async shouldRequestAuthorization(dataTypes) {
163
+ try {
164
+ await this.ensureInitialized();
165
+ const granted = await getGrantedPermissions();
166
+ const grantedSet = new Set(granted
167
+ .filter((p) => p.accessType === 'read')
168
+ .map((p) => p.recordType));
169
+ const requiredRecordTypes = new Set();
170
+ for (const dt of dataTypes) {
171
+ const mapping = TYPE_MAP[dt];
172
+ if (mapping) {
173
+ requiredRecordTypes.add(mapping.recordType);
174
+ }
175
+ }
176
+ if (dataTypes.includes(HealthDataType.BodyMassIndex)) {
177
+ requiredRecordTypes.add('Height');
178
+ requiredRecordTypes.add('Weight');
179
+ }
180
+ requiredRecordTypes.add('ExerciseSession');
181
+ requiredRecordTypes.add('TotalCaloriesBurned');
182
+ for (const rt of requiredRecordTypes) {
183
+ if (!grantedSet.has(rt)) {
184
+ return true;
185
+ }
186
+ }
187
+ return false;
188
+ }
189
+ catch {
190
+ return true;
191
+ }
192
+ }
193
+ async requestAuthorization(dataTypes) {
194
+ try {
195
+ await this.ensureInitialized();
196
+ const recordTypes = new Set();
197
+ for (const dt of dataTypes) {
198
+ const mapping = TYPE_MAP[dt];
199
+ if (mapping) {
200
+ recordTypes.add(mapping.recordType);
201
+ }
202
+ }
203
+ recordTypes.add('ExerciseSession');
204
+ recordTypes.add('TotalCaloriesBurned');
205
+ const permissions = Array.from(recordTypes).map((rt) => ({
206
+ accessType: 'read',
207
+ recordType: rt,
208
+ }));
209
+ // When BodyMassIndex is requested, also request Height and Weight permissions
210
+ if (dataTypes.includes(HealthDataType.BodyMassIndex)) {
211
+ permissions.push({ accessType: 'read', recordType: 'Height' }, { accessType: 'read', recordType: 'Weight' });
212
+ }
213
+ const granted = await requestPermission(permissions);
214
+ return granted.length > 0;
215
+ }
216
+ catch {
217
+ return false;
218
+ }
219
+ finally {
220
+ await setPermissionsRequested();
221
+ }
222
+ }
223
+ async getPermissionStatus() {
224
+ try {
225
+ const wasRequested = await getPermissionsRequested();
226
+ if (!wasRequested)
227
+ return PermissionStatus.UNKNOWN;
228
+ await this.ensureInitialized();
229
+ const granted = await getGrantedPermissions();
230
+ return granted.length > 0 ? PermissionStatus.GRANTED : PermissionStatus.DECLINED;
231
+ }
232
+ catch {
233
+ return PermissionStatus.UNKNOWN;
234
+ }
235
+ }
236
+ async querySamples(type, startDate, endDate) {
237
+ await this.ensureInitialized();
238
+ // BMI has no native Health Connect record type — derive from Height + Weight
239
+ if (type === HealthDataType.BodyMassIndex) {
240
+ return this.deriveBMISamples(startDate, endDate);
241
+ }
242
+ const mapping = TYPE_MAP[type];
243
+ if (!mapping)
244
+ return [];
245
+ const timeRangeFilter = {
246
+ operator: 'between',
247
+ startTime: startDate.toISOString(),
248
+ endTime: endDate.toISOString(),
249
+ };
250
+ const { records } = await readRecords(mapping.recordType, { timeRangeFilter });
251
+ // HeartRate: flatten nested samples
252
+ if (mapping.recordType === 'HeartRate') {
253
+ const samples = [];
254
+ for (const record of records) {
255
+ for (const s of record.samples) {
256
+ samples.push({
257
+ type,
258
+ value: s.beatsPerMinute,
259
+ unit: mapping.unit,
260
+ startDate: new Date(s.time),
261
+ endDate: new Date(s.time),
262
+ sourceName: record.metadata?.dataOrigin ?? undefined,
263
+ });
264
+ }
265
+ }
266
+ return samples;
267
+ }
268
+ // BloodPressure: extract systolic or diastolic field
269
+ if (mapping.recordType === 'BloodPressure') {
270
+ const field = mapping.field;
271
+ return records.map((record) => ({
272
+ type,
273
+ value: record[field].value,
274
+ unit: mapping.unit,
275
+ startDate: new Date(record.time),
276
+ endDate: new Date(record.time),
277
+ sourceName: record.metadata?.dataOrigin ?? undefined,
278
+ }));
279
+ }
280
+ // SleepSession: calculate duration in hours, with per-stage samples when available
281
+ if (mapping.recordType === 'SleepSession') {
282
+ const sleepSamples = [];
283
+ for (const record of records) {
284
+ const stages = record.stages;
285
+ if (stages && stages.length > 0) {
286
+ for (const stage of stages) {
287
+ const start = new Date(stage.startTime);
288
+ const end = new Date(stage.endTime);
289
+ const durationHours = (end.getTime() - start.getTime()) / (1000 * 60 * 60);
290
+ sleepSamples.push({
291
+ type,
292
+ value: durationHours,
293
+ unit: mapping.unit,
294
+ startDate: start,
295
+ endDate: end,
296
+ sourceName: record.metadata?.dataOrigin ?? undefined,
297
+ stage: HC_SLEEP_STAGE_MAP[stage.type] ?? SleepStage.Unknown,
298
+ });
299
+ }
300
+ }
301
+ else {
302
+ const start = new Date(record.startTime);
303
+ const end = new Date(record.endTime);
304
+ const durationHours = (end.getTime() - start.getTime()) / (1000 * 60 * 60);
305
+ sleepSamples.push({
306
+ type,
307
+ value: durationHours,
308
+ unit: mapping.unit,
309
+ startDate: start,
310
+ endDate: end,
311
+ sourceName: record.metadata?.dataOrigin ?? undefined,
312
+ stage: SleepStage.Unknown,
313
+ });
314
+ }
315
+ }
316
+ return sleepSamples;
317
+ }
318
+ // BasalMetabolicRate: rate stored as kcal/day
319
+ if (mapping.recordType === 'BasalMetabolicRate') {
320
+ return records.map((record) => ({
321
+ type,
322
+ value: record.basalMetabolicRate?.inKilocaloriesPerDay ?? 0,
323
+ unit: mapping.unit,
324
+ startDate: new Date(record.time),
325
+ endDate: new Date(record.time),
326
+ sourceName: record.metadata?.dataOrigin ?? undefined,
327
+ }));
328
+ }
329
+ // BodyFat: percentage value
330
+ if (mapping.recordType === 'BodyFat') {
331
+ return records.map((record) => ({
332
+ type,
333
+ value: record.percentage ?? 0,
334
+ unit: mapping.unit,
335
+ startDate: new Date(record.time),
336
+ endDate: new Date(record.time),
337
+ sourceName: record.metadata?.dataOrigin ?? undefined,
338
+ }));
339
+ }
340
+ // Hydration: volume stored as volume.inMilliliters
341
+ if (mapping.recordType === 'Hydration') {
342
+ return records.map((record) => ({
343
+ type,
344
+ value: record.volume?.inMilliliters ?? 0,
345
+ unit: mapping.unit,
346
+ startDate: new Date(record.startTime),
347
+ endDate: new Date(record.endTime),
348
+ sourceName: record.metadata?.dataOrigin ?? undefined,
349
+ }));
350
+ }
351
+ // Default: single-value records with known shapes
352
+ return records.map((record) => {
353
+ let value = 0;
354
+ switch (mapping.recordType) {
355
+ case 'Steps':
356
+ value = record.count;
357
+ break;
358
+ case 'Distance':
359
+ value = record.distance.inMeters;
360
+ break;
361
+ case 'ActiveCaloriesBurned':
362
+ value = record.energy.inKilocalories;
363
+ break;
364
+ case 'FloorsClimbed':
365
+ value = record.floors;
366
+ break;
367
+ case 'RestingHeartRate':
368
+ value = record.beatsPerMinute;
369
+ break;
370
+ case 'OxygenSaturation':
371
+ value = record.percentage;
372
+ break;
373
+ case 'RespiratoryRate':
374
+ value = record.rate;
375
+ break;
376
+ }
377
+ const isInterval = 'startTime' in record;
378
+ const startTime = isInterval ? record.startTime : record.time;
379
+ const endTime = isInterval ? record.endTime : record.time;
380
+ return {
381
+ type,
382
+ value,
383
+ unit: mapping.unit,
384
+ startDate: new Date(startTime),
385
+ endDate: new Date(endTime),
386
+ sourceName: record.metadata?.dataOrigin ?? undefined,
387
+ };
388
+ });
389
+ }
390
+ async queryAggregated(type, startDate, endDate) {
391
+ await this.ensureInitialized();
392
+ const mapping = TYPE_MAP[type];
393
+ if (!mapping) {
394
+ return { type, unit: '', startDate, endDate };
395
+ }
396
+ // Manual aggregation path for types that don't support aggregateRecord
397
+ if (!mapping.supportsAggregation) {
398
+ return this.manualAggregate(type, startDate, endDate);
399
+ }
400
+ const timeRangeFilter = {
401
+ operator: 'between',
402
+ startTime: startDate.toISOString(),
403
+ endTime: endDate.toISOString(),
404
+ };
405
+ let sum;
406
+ let avg;
407
+ let min;
408
+ let max;
409
+ switch (mapping.recordType) {
410
+ case 'Steps': {
411
+ const result = await aggregateRecord({ recordType: 'Steps', timeRangeFilter });
412
+ sum = result.COUNT_TOTAL;
413
+ break;
414
+ }
415
+ case 'FloorsClimbed': {
416
+ const result = await aggregateRecord({ recordType: 'FloorsClimbed', timeRangeFilter });
417
+ sum = result.FLOORS_CLIMBED_TOTAL;
418
+ break;
419
+ }
420
+ case 'Distance': {
421
+ const result = await aggregateRecord({ recordType: 'Distance', timeRangeFilter });
422
+ sum = result.DISTANCE.inMeters;
423
+ break;
424
+ }
425
+ case 'ActiveCaloriesBurned': {
426
+ const result = await aggregateRecord({ recordType: 'ActiveCaloriesBurned', timeRangeFilter });
427
+ sum = result.ACTIVE_CALORIES_TOTAL.inKilocalories;
428
+ break;
429
+ }
430
+ case 'HeartRate': {
431
+ const result = await aggregateRecord({ recordType: 'HeartRate', timeRangeFilter });
432
+ avg = result.BPM_AVG;
433
+ min = result.BPM_MIN;
434
+ max = result.BPM_MAX;
435
+ break;
436
+ }
437
+ }
438
+ return { type, sum, avg, min, max, unit: mapping.unit, startDate, endDate };
439
+ }
440
+ async querySleepSessions(startDate, endDate) {
441
+ await this.ensureInitialized();
442
+ const timeRangeFilter = {
443
+ operator: 'between',
444
+ startTime: startDate.toISOString(),
445
+ endTime: endDate.toISOString(),
446
+ };
447
+ const { records } = await readRecords('SleepSession', { timeRangeFilter });
448
+ return records.map((record) => {
449
+ const stages = {
450
+ awake: 0,
451
+ light: 0,
452
+ deep: 0,
453
+ rem: 0,
454
+ unknown: 0,
455
+ };
456
+ const recordStages = record.stages;
457
+ if (recordStages) {
458
+ for (const stage of recordStages) {
459
+ const start = new Date(stage.startTime);
460
+ const end = new Date(stage.endTime);
461
+ const hours = (end.getTime() - start.getTime()) / (1000 * 60 * 60);
462
+ const mapped = HC_SLEEP_STAGE_MAP[stage.type] ?? SleepStage.Unknown;
463
+ switch (mapped) {
464
+ case SleepStage.Awake:
465
+ stages.awake += hours;
466
+ break;
467
+ case SleepStage.Light:
468
+ stages.light += hours;
469
+ break;
470
+ case SleepStage.Deep:
471
+ stages.deep += hours;
472
+ break;
473
+ case SleepStage.REM:
474
+ stages.rem += hours;
475
+ break;
476
+ default:
477
+ stages.unknown += hours;
478
+ break;
479
+ }
480
+ }
481
+ }
482
+ else {
483
+ const start = new Date(record.startTime);
484
+ const end = new Date(record.endTime);
485
+ stages.unknown =
486
+ (end.getTime() - start.getTime()) / (1000 * 60 * 60);
487
+ }
488
+ const totalDuration = stages.light + stages.deep + stages.rem + stages.unknown;
489
+ return {
490
+ startDate: new Date(record.startTime),
491
+ endDate: new Date(record.endTime),
492
+ totalDuration,
493
+ stages,
494
+ sourceName: record.metadata?.dataOrigin ?? 'Unknown',
495
+ };
496
+ });
497
+ }
498
+ async queryWorkouts(startDate, endDate) {
499
+ await this.ensureInitialized();
500
+ const timeRangeFilter = {
501
+ operator: 'between',
502
+ startTime: startDate.toISOString(),
503
+ endTime: endDate.toISOString(),
504
+ };
505
+ const { records } = await readRecords('ExerciseSession', { timeRangeFilter });
506
+ const workouts = await Promise.all(records.map(async (session) => {
507
+ const workoutType = EXERCISE_TYPE_MAP[session.exerciseType] ?? WorkoutActivityType.other;
508
+ const sessionStart = new Date(session.startTime);
509
+ const sessionEnd = new Date(session.endTime);
510
+ const duration = (sessionEnd.getTime() - sessionStart.getTime()) / 1000;
511
+ const sessionTimeRange = {
512
+ operator: 'between',
513
+ startTime: session.startTime,
514
+ endTime: session.endTime,
515
+ };
516
+ // Scope enrichment to the same app that created the session
517
+ const dataOriginFilter = session.metadata?.dataOrigin
518
+ ? [session.metadata.dataOrigin]
519
+ : undefined;
520
+ // Parallel enrichment queries using aggregation
521
+ const [caloriesAgg, distanceAgg, hrAgg] = await Promise.all([
522
+ aggregateRecord({ recordType: 'TotalCaloriesBurned', timeRangeFilter: sessionTimeRange, dataOriginFilter }).catch(() => null),
523
+ aggregateRecord({ recordType: 'Distance', timeRangeFilter: sessionTimeRange, dataOriginFilter }).catch(() => null),
524
+ aggregateRecord({ recordType: 'HeartRate', timeRangeFilter: sessionTimeRange, dataOriginFilter }).catch(() => null),
525
+ ]);
526
+ // Extract aggregated calories
527
+ const energyBurned = caloriesAgg?.ENERGY_TOTAL?.inKilocalories ?? null;
528
+ // Extract aggregated distance
529
+ const distance = distanceAgg?.DISTANCE?.inMeters ?? null;
530
+ // Extract HR avg/max from aggregation
531
+ const heartRateAvg = hrAgg?.BPM_AVG ?? null;
532
+ const heartRateMax = hrAgg?.BPM_MAX ?? null;
533
+ return {
534
+ workoutType,
535
+ duration,
536
+ energyBurned,
537
+ distance,
538
+ heartRateAvg,
539
+ heartRateMax,
540
+ startDate: sessionStart,
541
+ endDate: sessionEnd,
542
+ sourceName: session.metadata?.dataOrigin ?? 'Unknown',
543
+ };
544
+ }));
545
+ // Sort by start time descending (most recent first)
546
+ workouts.sort((a, b) => b.startDate.getTime() - a.startDate.getTime());
547
+ return workouts;
548
+ }
549
+ async deriveBMISamples(startDate, endDate) {
550
+ const timeRangeFilter = {
551
+ operator: 'between',
552
+ startTime: startDate.toISOString(),
553
+ endTime: endDate.toISOString(),
554
+ };
555
+ const { records: heightRecords } = await readRecords('Height', {
556
+ timeRangeFilter,
557
+ });
558
+ if (heightRecords.length === 0)
559
+ return [];
560
+ const latestHeight = heightRecords.sort((a, b) => new Date(b.time).getTime() - new Date(a.time).getTime())[0];
561
+ const heightMeters = latestHeight.height?.inMeters ?? 0;
562
+ if (heightMeters === 0)
563
+ return [];
564
+ const { records: weightRecords } = await readRecords('Weight', {
565
+ timeRangeFilter,
566
+ });
567
+ return weightRecords.map((record) => {
568
+ const weightKg = record.weight?.inKilograms ?? 0;
569
+ const bmi = weightKg / (heightMeters * heightMeters);
570
+ return {
571
+ type: HealthDataType.BodyMassIndex,
572
+ value: Math.round(bmi * 10) / 10,
573
+ unit: 'kg/m²',
574
+ startDate: new Date(record.time),
575
+ endDate: new Date(record.time),
576
+ sourceName: record.metadata?.dataOrigin ?? undefined,
577
+ };
578
+ });
579
+ }
580
+ async manualAggregate(type, startDate, endDate) {
581
+ const mapping = TYPE_MAP[type];
582
+ const samples = await this.querySamples(type, startDate, endDate);
583
+ const values = samples.map((s) => s.value);
584
+ const unit = mapping?.unit ?? '';
585
+ if (values.length === 0) {
586
+ return { type, unit, startDate, endDate };
587
+ }
588
+ const sum = values.reduce((a, b) => a + b, 0);
589
+ return {
590
+ type,
591
+ sum,
592
+ avg: sum / values.length,
593
+ min: values.reduce((a, b) => a < b ? a : b),
594
+ max: values.reduce((a, b) => a > b ? a : b),
595
+ unit,
596
+ startDate,
597
+ endDate,
598
+ };
599
+ }
600
+ }
601
+ //# sourceMappingURL=healthconnect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthconnect.js","sourceRoot":"","sources":["../../src/providers/healthconnect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { HealthDataType, PermissionStatus, type HealthProvider, type HealthSample, type HealthAggregate, type Workout, type SleepSession } from '../types';
2
+ export declare class HealthKitProvider implements HealthProvider {
3
+ isAvailable(): Promise<boolean>;
4
+ shouldRequestAuthorization(dataTypes: HealthDataType[]): Promise<boolean>;
5
+ requestAuthorization(dataTypes: HealthDataType[]): Promise<boolean>;
6
+ getPermissionStatus(): Promise<PermissionStatus>;
7
+ querySamples(type: HealthDataType, startDate: Date, endDate: Date): Promise<HealthSample[]>;
8
+ queryAggregated(type: HealthDataType, startDate: Date, endDate: Date): Promise<HealthAggregate>;
9
+ queryWorkouts(startDate: Date, endDate: Date): Promise<Workout[]>;
10
+ private queryCategorySamples;
11
+ querySleepSessions(startDate: Date, endDate: Date): Promise<SleepSession[]>;
12
+ private buildSleepSession;
13
+ private aggregateCategorySamples;
14
+ }
15
+ //# sourceMappingURL=healthkit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthkit.d.ts","sourceRoot":"","sources":["../../src/providers/healthkit.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,cAAc,EAEd,gBAAgB,EAEhB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,OAAO,EAEZ,KAAK,YAAY,EAClB,MAAM,UAAU,CAAC;AA+KlB,qBAAa,iBAAkB,YAAW,cAAc;IAChD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,0BAA0B,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAWzE,oBAAoB,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAcnE,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAkBhD,YAAY,CAChB,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,IAAI,GACZ,OAAO,CAAC,YAAY,EAAE,CAAC;IAuBpB,eAAe,CACnB,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,IAAI,GACZ,OAAO,CAAC,eAAe,CAAC;IAkCrB,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YAgDzD,oBAAoB;IA6B5B,kBAAkB,CACtB,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,IAAI,GACZ,OAAO,CAAC,YAAY,EAAE,CAAC;IA8C1B,OAAO,CAAC,iBAAiB;YAyCX,wBAAwB;CA0BvC"}