@appeeky/expo-healthkit 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # [0.2.0](https://github.com/appeeky/expo-healthkit/compare/v0.1.1...v0.2.0) (2026-09-09)
2
+
3
+
4
+ ### Features
5
+
6
+ * **ios:** deliver HealthKit background updates before JS starts and hold the completion handler ([6ac0e6f](https://github.com/appeeky/expo-healthkit/commit/6ac0e6fde217940f3e89a7cd5ff64c68a12a0b2b))
7
+
1
8
  ## [0.1.1](https://github.com/appeeky/expo-healthkit/compare/v0.1.0...v0.1.1) (2026-09-05)
2
9
 
3
10
 
package/README.md CHANGED
@@ -252,8 +252,10 @@ await HealthKit.deleteObjects({
252
252
  ```ts
253
253
  await HealthKit.observe([HealthKit.QuantityType.stepCount]);
254
254
 
255
- const subscription = HealthKit.addUpdateListener(({ type }) => {
256
- // Re-query that type
255
+ const subscription = HealthKit.addUpdateListener(async ({ type }) => {
256
+ // Re-query that type. Return a promise: iOS keeps the app alive and holds
257
+ // the HealthKit completion handler until it settles (~25s cap).
258
+ await syncSteps();
257
259
  });
258
260
 
259
261
  await HealthKit.enableBackgroundDelivery(
@@ -266,6 +268,12 @@ await HealthKit.enableBackgroundDelivery(
266
268
 
267
269
  Background delivery needs `isBackgroundDeliveryEnabled: true` on the config plugin and the HealthKit background mode.
268
270
 
271
+ **Killed-app relaunch.** Types passed to `observe` are persisted natively. When iOS relaunches the app in the background for a HealthKit delivery, the observer queries are re-registered in `didFinishLaunching` (via an Expo AppDelegate subscriber), before the JS runtime boots. The delivery is queued until JS calls `addUpdateListener`, then dispatched. Register your listener at module scope (or early in the root component) so it exists on cold start; `getObservedTypes()` tells you what is already being observed. `clearObservers()` stops and forgets them.
272
+
273
+ **Apple limits.** Step count, distance, energy, exercise/stand time and similar activity types are delivered at most **once per hour** regardless of `UpdateFrequency`; heart rate, sleep, workouts and body measurements are not capped. Each delivery gets ~30 s of background time; the library completes at 25 s if your listener hasn't. The Simulator never relaunches a killed app for HealthKit — test on a device.
274
+
275
+ **Debugging.** Native logs are under the `expo-healthkit` `os_log` subsystem (`restore`, `delivery`, `complete reason=js|timeout`). Full guide with a device test recipe: [`.cursor/skills/expo-healthkit/background-delivery.md`](.cursor/skills/expo-healthkit/background-delivery.md).
276
+
269
277
  ## 🏷️ Identifiers
270
278
 
271
279
  Pass Apple's raw identifier strings. Named constants are provided for autocomplete; unknown identifiers still work if HealthKit knows them.
@@ -335,7 +343,7 @@ These throw `ERR_HEALTH_CONNECT_UNSUPPORTED` on Android. Health Connect has no e
335
343
  | `queryWorkoutRoute` | Workout GPS polylines |
336
344
  | `queryHeartbeatSeries` | Beat-to-beat series |
337
345
  | `getBiologicalSex`, `getBloodType`, `getDateOfBirth`, `getFitzpatrickSkinType`, `getWheelchairUse` | HealthKit characteristics |
338
- | `observe`, `enableBackgroundDelivery` | HealthKit observer queries / background delivery |
346
+ | `observe`, `getObservedTypes`, `enableBackgroundDelivery` | HealthKit observer queries / background delivery |
339
347
 
340
348
  ### Behavioral differences
341
349
 
@@ -169,6 +169,14 @@ class ExpoHealthKitModule : Module() {
169
169
  AsyncFunction("clearObserverQueries") {
170
170
  Unit
171
171
  }
172
+
173
+ AsyncFunction("getObservedTypes") {
174
+ emptyList<String>()
175
+ }
176
+
177
+ AsyncFunction("completeUpdate") { _: String ->
178
+ Unit
179
+ }
172
180
  }
173
181
 
174
182
  private suspend fun requestHealthPermissions(permissions: Set<String>): Set<String> {
@@ -125,7 +125,7 @@ internal class HealthConnectService(
125
125
  HealthConnectMapping.SLEEP -> {
126
126
  val sessions = readAll(SleepSessionRecord::class, filter, ascending, 0)
127
127
  val samples = sessions.flatMap { session -> sleepSamples(session) }
128
- applyLimit(if (ascending) samples else samples.reversed(), limit)
128
+ applyLimit(sortSamples(samples, ascending), limit)
129
129
  }
130
130
  else -> throw HealthConnectUnsupportedException(type)
131
131
  }
@@ -492,8 +492,16 @@ internal class HealthConnectService(
492
492
  }
493
493
  }
494
494
  }
495
- val ordered = if (ascending) samples else samples.reversed()
496
- return applyLimit(ordered, limit)
495
+ // `readAll` already honours `ascending` at the record level, but flattened
496
+ // records (heart rate series) can interleave, so sort explicitly by start date.
497
+ return applyLimit(sortSamples(samples, ascending), limit)
498
+ }
499
+
500
+ private fun sortSamples(samples: List<Map<String, Any?>>, ascending: Boolean): List<Map<String, Any?>> {
501
+ val sorted = samples.sortedBy { sample ->
502
+ (sample["startDate"] as? String)?.let { runCatching { Instant.parse(it) }.getOrNull() } ?: Instant.EPOCH
503
+ }
504
+ return if (ascending) sorted else sorted.reversed()
497
505
  }
498
506
 
499
507
  private fun quantitySamplesFromRecord(type: String, unit: String, record: Record): List<Map<String, Any?>> {
@@ -33,6 +33,8 @@ declare class ExpoHealthKitModule extends NativeModule<ExpoHealthKitModuleEvents
33
33
  disableAllBackgroundDelivery(): Promise<boolean>;
34
34
  observeTypes(types: string[]): Promise<void>;
35
35
  clearObserverQueries(): Promise<void>;
36
+ getObservedTypes(): Promise<string[]>;
37
+ completeUpdate(token: string): Promise<void>;
36
38
  }
37
39
  declare const _default: ExpoHealthKitModule;
38
40
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoHealthKitModule.d.ts","sourceRoot":"","sources":["../src/ExpoHealthKitModule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExpoHealthKitModule.d.ts","sourceRoot":"","sources":["../src/ExpoHealthKitModule.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoHealthKitModule.js","sourceRoot":"","sources":["../src/ExpoHealthKitModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAgF1C,MAAM,YAAY,GAAG,mBAAmB,CAAsB,eAAe,CAAC,CAAC;AAE/E,SAAS,uBAAuB,CAAC,KAAc;IAC7C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,IAAI,GACR,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK;QACnD,CAAC,CAAC,MAAM,CAAE,KAA2B,CAAC,IAAI,CAAC;QAC3C,CAAC,CAAC,eAAe,CAAC;IACtB,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,OAAO,CAAC;AAChB,CAAC;AAED,eAAe,IAAI,KAAK,CAAC,YAAY,EAAE;IACrC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAY,CAAC;QACjE,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;YAC5B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAI,KAA0C,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC/E,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;oBAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBAC/C,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;CACF,CAAwB,CAAC","sourcesContent":["import { NativeModule, requireNativeModule } from 'expo';\n\nimport { HealthKitError } from './errors';\n\nimport type {\n ExpoHealthKitModuleEvents,\n NativeActivitySummary,\n NativeActivitySummaryQueryOptions,\n NativeAnchoredQueryOptions,\n NativeAnchoredQueryResult,\n NativeAudiogramSample,\n NativeAuthorizationOptions,\n NativeCategoryQueryOptions,\n NativeCategorySample,\n NativeCategorySampleInput,\n NativeClinicalRecord,\n NativeClinicalRecordQueryOptions,\n NativeCorrelation,\n NativeCorrelationInput,\n NativeCorrelationQueryOptions,\n NativeDateRangeQueryOptions,\n NativeDeleteObjectsOptions,\n NativeElectrocardiogramQueryOptions,\n NativeElectrocardiogramSample,\n NativeHeartbeatSeriesQueryOptions,\n NativeHeartbeatSeriesSample,\n NativeQuantityQueryOptions,\n NativeQuantitySample,\n NativeQuantitySampleInput,\n NativeStatistics,\n NativeStatisticsCollectionQueryOptions,\n NativeStatisticsQueryOptions,\n NativeWorkoutInput,\n NativeWorkoutQueryOptions,\n NativeWorkoutRoute,\n NativeWorkoutRouteQueryOptions,\n NativeWorkoutSample,\n} from './types';\n\ndeclare class ExpoHealthKitModule extends NativeModule<ExpoHealthKitModuleEvents> {\n isHealthDataAvailable(): boolean;\n requestAuthorization(options: NativeAuthorizationOptions): Promise<boolean>;\n getAuthorizationStatus(identifier: string): Promise<number>;\n getRequestStatusForAuthorization(options: NativeAuthorizationOptions): Promise<number>;\n queryQuantitySamples(options: NativeQuantityQueryOptions): Promise<NativeQuantitySample[]>;\n queryCategorySamples(options: NativeCategoryQueryOptions): Promise<NativeCategorySample[]>;\n queryWorkouts(options: NativeWorkoutQueryOptions): Promise<NativeWorkoutSample[]>;\n queryElectrocardiograms(\n options: NativeElectrocardiogramQueryOptions\n ): Promise<NativeElectrocardiogramSample[]>;\n queryActivitySummaries(\n options: NativeActivitySummaryQueryOptions\n ): Promise<NativeActivitySummary[]>;\n queryClinicalRecords(options: NativeClinicalRecordQueryOptions): Promise<NativeClinicalRecord[]>;\n queryAudiograms(options: NativeDateRangeQueryOptions): Promise<NativeAudiogramSample[]>;\n queryWorkoutRoute(options: NativeWorkoutRouteQueryOptions): Promise<NativeWorkoutRoute[]>;\n queryCorrelations(options: NativeCorrelationQueryOptions): Promise<NativeCorrelation[]>;\n queryHeartbeatSeries(\n options: NativeHeartbeatSeriesQueryOptions\n ): Promise<NativeHeartbeatSeriesSample[]>;\n queryStatistics(options: NativeStatisticsQueryOptions): Promise<NativeStatistics>;\n queryStatisticsCollection(\n options: NativeStatisticsCollectionQueryOptions\n ): Promise<NativeStatistics[]>;\n queryAnchored(options: NativeAnchoredQueryOptions): Promise<NativeAnchoredQueryResult>;\n saveQuantitySample(sample: NativeQuantitySampleInput): Promise<string>;\n saveCategorySample(sample: NativeCategorySampleInput): Promise<string>;\n saveWorkout(workout: NativeWorkoutInput): Promise<string>;\n saveCorrelation(correlation: NativeCorrelationInput): Promise<string>;\n deleteObjects(options: NativeDeleteObjectsOptions): Promise<number>;\n getBiologicalSex(): Promise<number>;\n getBloodType(): Promise<number>;\n getDateOfBirth(): Promise<string | null>;\n getFitzpatrickSkinType(): Promise<number>;\n getWheelchairUse(): Promise<number>;\n enableBackgroundDelivery(type: string, frequency: number): Promise<boolean>;\n disableBackgroundDelivery(type: string): Promise<boolean>;\n disableAllBackgroundDelivery(): Promise<boolean>;\n observeTypes(types: string[]): Promise<void>;\n clearObserverQueries(): Promise<void>;\n}\n\nconst nativeModule = requireNativeModule<ExpoHealthKitModule>('ExpoHealthKit');\n\nfunction rethrowAsHealthKitError(error: unknown): never {\n const message = error instanceof Error ? error.message : String(error);\n const code =\n error && typeof error === 'object' && 'code' in error\n ? String((error as { code: unknown }).code)\n : 'ERR_HEALTHKIT';\n const wrapped = new HealthKitError(message, code);\n if (__DEV__) {\n console.warn(`[expo-healthkit] ${code}: ${message}`);\n }\n throw wrapped;\n}\n\nexport default new Proxy(nativeModule, {\n get(target, property, receiver) {\n const value = Reflect.get(target, property, receiver) as unknown;\n if (typeof value !== 'function') {\n return value;\n }\n return (...args: unknown[]) => {\n try {\n const result = (value as (...inner: unknown[]) => unknown).apply(target, args);\n if (result instanceof Promise) {\n return result.catch(rethrowAsHealthKitError);\n }\n return result;\n } catch (error) {\n rethrowAsHealthKitError(error);\n }\n };\n },\n}) as ExpoHealthKitModule;\n"]}
1
+ {"version":3,"file":"ExpoHealthKitModule.js","sourceRoot":"","sources":["../src/ExpoHealthKitModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAiF1C,MAAM,YAAY,GAAG,mBAAmB,CAAsB,eAAe,CAAC,CAAC;AAE/E,SAAS,uBAAuB,CAAC,KAAc;IAC7C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,IAAI,GACR,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK;QACnD,CAAC,CAAC,MAAM,CAAE,KAA2B,CAAC,IAAI,CAAC;QAC3C,CAAC,CAAC,eAAe,CAAC;IACtB,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,OAAO,CAAC;AAChB,CAAC;AAED,eAAe,IAAI,KAAK,CAAC,YAAY,EAAE;IACrC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAY,CAAC;QACjE,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;YAC5B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAI,KAA0C,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC/E,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;oBAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBAC/C,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;CACF,CAAwB,CAAC","sourcesContent":["import { NativeModule, requireNativeModule } from 'expo';\n\nimport { HealthKitError } from './errors';\nimport type {\n ExpoHealthKitModuleEvents,\n NativeActivitySummary,\n NativeActivitySummaryQueryOptions,\n NativeAnchoredQueryOptions,\n NativeAnchoredQueryResult,\n NativeAudiogramSample,\n NativeAuthorizationOptions,\n NativeCategoryQueryOptions,\n NativeCategorySample,\n NativeCategorySampleInput,\n NativeClinicalRecord,\n NativeClinicalRecordQueryOptions,\n NativeCorrelation,\n NativeCorrelationInput,\n NativeCorrelationQueryOptions,\n NativeDateRangeQueryOptions,\n NativeDeleteObjectsOptions,\n NativeElectrocardiogramQueryOptions,\n NativeElectrocardiogramSample,\n NativeHeartbeatSeriesQueryOptions,\n NativeHeartbeatSeriesSample,\n NativeQuantityQueryOptions,\n NativeQuantitySample,\n NativeQuantitySampleInput,\n NativeStatistics,\n NativeStatisticsCollectionQueryOptions,\n NativeStatisticsQueryOptions,\n NativeWorkoutInput,\n NativeWorkoutQueryOptions,\n NativeWorkoutRoute,\n NativeWorkoutRouteQueryOptions,\n NativeWorkoutSample,\n} from './types';\n\ndeclare class ExpoHealthKitModule extends NativeModule<ExpoHealthKitModuleEvents> {\n isHealthDataAvailable(): boolean;\n requestAuthorization(options: NativeAuthorizationOptions): Promise<boolean>;\n getAuthorizationStatus(identifier: string): Promise<number>;\n getRequestStatusForAuthorization(options: NativeAuthorizationOptions): Promise<number>;\n queryQuantitySamples(options: NativeQuantityQueryOptions): Promise<NativeQuantitySample[]>;\n queryCategorySamples(options: NativeCategoryQueryOptions): Promise<NativeCategorySample[]>;\n queryWorkouts(options: NativeWorkoutQueryOptions): Promise<NativeWorkoutSample[]>;\n queryElectrocardiograms(\n options: NativeElectrocardiogramQueryOptions\n ): Promise<NativeElectrocardiogramSample[]>;\n queryActivitySummaries(\n options: NativeActivitySummaryQueryOptions\n ): Promise<NativeActivitySummary[]>;\n queryClinicalRecords(options: NativeClinicalRecordQueryOptions): Promise<NativeClinicalRecord[]>;\n queryAudiograms(options: NativeDateRangeQueryOptions): Promise<NativeAudiogramSample[]>;\n queryWorkoutRoute(options: NativeWorkoutRouteQueryOptions): Promise<NativeWorkoutRoute[]>;\n queryCorrelations(options: NativeCorrelationQueryOptions): Promise<NativeCorrelation[]>;\n queryHeartbeatSeries(\n options: NativeHeartbeatSeriesQueryOptions\n ): Promise<NativeHeartbeatSeriesSample[]>;\n queryStatistics(options: NativeStatisticsQueryOptions): Promise<NativeStatistics>;\n queryStatisticsCollection(\n options: NativeStatisticsCollectionQueryOptions\n ): Promise<NativeStatistics[]>;\n queryAnchored(options: NativeAnchoredQueryOptions): Promise<NativeAnchoredQueryResult>;\n saveQuantitySample(sample: NativeQuantitySampleInput): Promise<string>;\n saveCategorySample(sample: NativeCategorySampleInput): Promise<string>;\n saveWorkout(workout: NativeWorkoutInput): Promise<string>;\n saveCorrelation(correlation: NativeCorrelationInput): Promise<string>;\n deleteObjects(options: NativeDeleteObjectsOptions): Promise<number>;\n getBiologicalSex(): Promise<number>;\n getBloodType(): Promise<number>;\n getDateOfBirth(): Promise<string | null>;\n getFitzpatrickSkinType(): Promise<number>;\n getWheelchairUse(): Promise<number>;\n enableBackgroundDelivery(type: string, frequency: number): Promise<boolean>;\n disableBackgroundDelivery(type: string): Promise<boolean>;\n disableAllBackgroundDelivery(): Promise<boolean>;\n observeTypes(types: string[]): Promise<void>;\n clearObserverQueries(): Promise<void>;\n getObservedTypes(): Promise<string[]>;\n completeUpdate(token: string): Promise<void>;\n}\n\nconst nativeModule = requireNativeModule<ExpoHealthKitModule>('ExpoHealthKit');\n\nfunction rethrowAsHealthKitError(error: unknown): never {\n const message = error instanceof Error ? error.message : String(error);\n const code =\n error && typeof error === 'object' && 'code' in error\n ? String((error as { code: unknown }).code)\n : 'ERR_HEALTHKIT';\n const wrapped = new HealthKitError(message, code);\n if (__DEV__) {\n console.warn(`[expo-healthkit] ${code}: ${message}`);\n }\n throw wrapped;\n}\n\nexport default new Proxy(nativeModule, {\n get(target, property, receiver) {\n const value = Reflect.get(target, property, receiver) as unknown;\n if (typeof value !== 'function') {\n return value;\n }\n return (...args: unknown[]) => {\n try {\n const result = (value as (...inner: unknown[]) => unknown).apply(target, args);\n if (result instanceof Promise) {\n return result.catch(rethrowAsHealthKitError);\n }\n return result;\n } catch (error) {\n rethrowAsHealthKitError(error);\n }\n };\n },\n}) as ExpoHealthKitModule;\n"]}
@@ -33,6 +33,8 @@ declare class ExpoHealthKitModule extends NativeModule<ExpoHealthKitModuleEvents
33
33
  disableAllBackgroundDelivery(): Promise<boolean>;
34
34
  observeTypes(): Promise<void>;
35
35
  clearObserverQueries(): Promise<void>;
36
+ getObservedTypes(): Promise<string[]>;
37
+ completeUpdate(): Promise<void>;
36
38
  }
37
39
  declare const _default: typeof ExpoHealthKitModule;
38
40
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoHealthKitModule.web.d.ts","sourceRoot":"","sources":["../src/ExpoHealthKitModule.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAqB,MAAM,MAAM,CAAC;AAGvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAMzD,cAAM,mBAAoB,SAAQ,YAAY,CAAC,yBAAyB,CAAC;IACvE,qBAAqB,IAAI,OAAO;IAI1B,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IAIxC,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIzC,gCAAgC,IAAI,OAAO,CAAC,MAAM,CAAC;IAInD,oBAAoB,IAAI,OAAO,CAAC,KAAK,CAAC;IAItC,oBAAoB,IAAI,OAAO,CAAC,KAAK,CAAC;IAItC,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC;IAI/B,uBAAuB,IAAI,OAAO,CAAC,KAAK,CAAC;IAIzC,sBAAsB,IAAI,OAAO,CAAC,KAAK,CAAC;IAIxC,oBAAoB,IAAI,OAAO,CAAC,KAAK,CAAC;IAItC,eAAe,IAAI,OAAO,CAAC,KAAK,CAAC;IAIjC,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC;IAInC,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC;IAInC,oBAAoB,IAAI,OAAO,CAAC,KAAK,CAAC;IAItC,eAAe,IAAI,OAAO,CAAC,KAAK,CAAC;IAIjC,yBAAyB,IAAI,OAAO,CAAC,KAAK,CAAC;IAI3C,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC;IAI/B,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIrC,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIrC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAI9B,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAIlC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAIhC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIxC,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIzC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,wBAAwB,IAAI,OAAO,CAAC,OAAO,CAAC;IAI5C,yBAAyB,IAAI,OAAO,CAAC,OAAO,CAAC;IAI7C,4BAA4B,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5C;;AAED,wBAA6E"}
1
+ {"version":3,"file":"ExpoHealthKitModule.web.d.ts","sourceRoot":"","sources":["../src/ExpoHealthKitModule.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAqB,MAAM,MAAM,CAAC;AAGvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAMzD,cAAM,mBAAoB,SAAQ,YAAY,CAAC,yBAAyB,CAAC;IACvE,qBAAqB,IAAI,OAAO;IAI1B,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IAIxC,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIzC,gCAAgC,IAAI,OAAO,CAAC,MAAM,CAAC;IAInD,oBAAoB,IAAI,OAAO,CAAC,KAAK,CAAC;IAItC,oBAAoB,IAAI,OAAO,CAAC,KAAK,CAAC;IAItC,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC;IAI/B,uBAAuB,IAAI,OAAO,CAAC,KAAK,CAAC;IAIzC,sBAAsB,IAAI,OAAO,CAAC,KAAK,CAAC;IAIxC,oBAAoB,IAAI,OAAO,CAAC,KAAK,CAAC;IAItC,eAAe,IAAI,OAAO,CAAC,KAAK,CAAC;IAIjC,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC;IAInC,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC;IAInC,oBAAoB,IAAI,OAAO,CAAC,KAAK,CAAC;IAItC,eAAe,IAAI,OAAO,CAAC,KAAK,CAAC;IAIjC,yBAAyB,IAAI,OAAO,CAAC,KAAK,CAAC;IAI3C,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC;IAI/B,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIrC,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIrC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAI9B,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAIlC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAIhC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIxC,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIzC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,wBAAwB,IAAI,OAAO,CAAC,OAAO,CAAC;IAI5C,yBAAyB,IAAI,OAAO,CAAC,OAAO,CAAC;IAI7C,4BAA4B,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIrC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CACtC;;AAED,wBAA6E"}
@@ -100,6 +100,10 @@ class ExpoHealthKitModule extends NativeModule {
100
100
  async clearObserverQueries() {
101
101
  return unavailable();
102
102
  }
103
+ async getObservedTypes() {
104
+ return [];
105
+ }
106
+ async completeUpdate() { }
103
107
  }
104
108
  export default registerWebModule(ExpoHealthKitModule, 'ExpoHealthKitModule');
105
109
  //# sourceMappingURL=ExpoHealthKitModule.web.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoHealthKitModule.web.js","sourceRoot":"","sources":["../src/ExpoHealthKitModule.web.ts"],"names":[],"mappings":"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","sourcesContent":["import { NativeModule, registerWebModule } from 'expo';\n\nimport { HealthKitUnavailableError } from './errors';\nimport type { ExpoHealthKitModuleEvents } from './types';\n\nfunction unavailable(): never {\n throw new HealthKitUnavailableError();\n}\n\nclass ExpoHealthKitModule extends NativeModule<ExpoHealthKitModuleEvents> {\n isHealthDataAvailable(): boolean {\n return false;\n }\n\n async requestAuthorization(): Promise<boolean> {\n return unavailable();\n }\n\n async getAuthorizationStatus(): Promise<number> {\n return unavailable();\n }\n\n async getRequestStatusForAuthorization(): Promise<number> {\n return unavailable();\n }\n\n async queryQuantitySamples(): Promise<never> {\n return unavailable();\n }\n\n async queryCategorySamples(): Promise<never> {\n return unavailable();\n }\n\n async queryWorkouts(): Promise<never> {\n return unavailable();\n }\n\n async queryElectrocardiograms(): Promise<never> {\n return unavailable();\n }\n\n async queryActivitySummaries(): Promise<never> {\n return unavailable();\n }\n\n async queryClinicalRecords(): Promise<never> {\n return unavailable();\n }\n\n async queryAudiograms(): Promise<never> {\n return unavailable();\n }\n\n async queryWorkoutRoute(): Promise<never> {\n return unavailable();\n }\n\n async queryCorrelations(): Promise<never> {\n return unavailable();\n }\n\n async queryHeartbeatSeries(): Promise<never> {\n return unavailable();\n }\n\n async queryStatistics(): Promise<never> {\n return unavailable();\n }\n\n async queryStatisticsCollection(): Promise<never> {\n return unavailable();\n }\n\n async queryAnchored(): Promise<never> {\n return unavailable();\n }\n\n async saveQuantitySample(): Promise<string> {\n return unavailable();\n }\n\n async saveCategorySample(): Promise<string> {\n return unavailable();\n }\n\n async saveWorkout(): Promise<string> {\n return unavailable();\n }\n\n async saveCorrelation(): Promise<string> {\n return unavailable();\n }\n\n async deleteObjects(): Promise<number> {\n return unavailable();\n }\n\n async getBiologicalSex(): Promise<number> {\n return unavailable();\n }\n\n async getBloodType(): Promise<number> {\n return unavailable();\n }\n\n async getDateOfBirth(): Promise<string | null> {\n return unavailable();\n }\n\n async getFitzpatrickSkinType(): Promise<number> {\n return unavailable();\n }\n\n async getWheelchairUse(): Promise<number> {\n return unavailable();\n }\n\n async enableBackgroundDelivery(): Promise<boolean> {\n return unavailable();\n }\n\n async disableBackgroundDelivery(): Promise<boolean> {\n return unavailable();\n }\n\n async disableAllBackgroundDelivery(): Promise<boolean> {\n return unavailable();\n }\n\n async observeTypes(): Promise<void> {\n return unavailable();\n }\n\n async clearObserverQueries(): Promise<void> {\n return unavailable();\n }\n}\n\nexport default registerWebModule(ExpoHealthKitModule, 'ExpoHealthKitModule');\n"]}
1
+ {"version":3,"file":"ExpoHealthKitModule.web.js","sourceRoot":"","sources":["../src/ExpoHealthKitModule.web.ts"],"names":[],"mappings":"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","sourcesContent":["import { NativeModule, registerWebModule } from 'expo';\n\nimport { HealthKitUnavailableError } from './errors';\nimport type { ExpoHealthKitModuleEvents } from './types';\n\nfunction unavailable(): never {\n throw new HealthKitUnavailableError();\n}\n\nclass ExpoHealthKitModule extends NativeModule<ExpoHealthKitModuleEvents> {\n isHealthDataAvailable(): boolean {\n return false;\n }\n\n async requestAuthorization(): Promise<boolean> {\n return unavailable();\n }\n\n async getAuthorizationStatus(): Promise<number> {\n return unavailable();\n }\n\n async getRequestStatusForAuthorization(): Promise<number> {\n return unavailable();\n }\n\n async queryQuantitySamples(): Promise<never> {\n return unavailable();\n }\n\n async queryCategorySamples(): Promise<never> {\n return unavailable();\n }\n\n async queryWorkouts(): Promise<never> {\n return unavailable();\n }\n\n async queryElectrocardiograms(): Promise<never> {\n return unavailable();\n }\n\n async queryActivitySummaries(): Promise<never> {\n return unavailable();\n }\n\n async queryClinicalRecords(): Promise<never> {\n return unavailable();\n }\n\n async queryAudiograms(): Promise<never> {\n return unavailable();\n }\n\n async queryWorkoutRoute(): Promise<never> {\n return unavailable();\n }\n\n async queryCorrelations(): Promise<never> {\n return unavailable();\n }\n\n async queryHeartbeatSeries(): Promise<never> {\n return unavailable();\n }\n\n async queryStatistics(): Promise<never> {\n return unavailable();\n }\n\n async queryStatisticsCollection(): Promise<never> {\n return unavailable();\n }\n\n async queryAnchored(): Promise<never> {\n return unavailable();\n }\n\n async saveQuantitySample(): Promise<string> {\n return unavailable();\n }\n\n async saveCategorySample(): Promise<string> {\n return unavailable();\n }\n\n async saveWorkout(): Promise<string> {\n return unavailable();\n }\n\n async saveCorrelation(): Promise<string> {\n return unavailable();\n }\n\n async deleteObjects(): Promise<number> {\n return unavailable();\n }\n\n async getBiologicalSex(): Promise<number> {\n return unavailable();\n }\n\n async getBloodType(): Promise<number> {\n return unavailable();\n }\n\n async getDateOfBirth(): Promise<string | null> {\n return unavailable();\n }\n\n async getFitzpatrickSkinType(): Promise<number> {\n return unavailable();\n }\n\n async getWheelchairUse(): Promise<number> {\n return unavailable();\n }\n\n async enableBackgroundDelivery(): Promise<boolean> {\n return unavailable();\n }\n\n async disableBackgroundDelivery(): Promise<boolean> {\n return unavailable();\n }\n\n async disableAllBackgroundDelivery(): Promise<boolean> {\n return unavailable();\n }\n\n async observeTypes(): Promise<void> {\n return unavailable();\n }\n\n async clearObserverQueries(): Promise<void> {\n return unavailable();\n }\n\n async getObservedTypes(): Promise<string[]> {\n return [];\n }\n\n async completeUpdate(): Promise<void> {}\n}\n\nexport default registerWebModule(ExpoHealthKitModule, 'ExpoHealthKitModule');\n"]}
package/build/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { AuthorizationRequestStatus, AuthorizationStatus, BiologicalSex, BloodType, FitzpatrickSkinType, UpdateFrequency, WheelchairUse } from './identifiers';
2
- import type { AnchoredQueryOptions, AnchoredQueryResult, AuthorizationOptions, CategorySample, CategorySampleInput, ClinicalRecord, ClinicalRecordQueryOptions, Correlation, CorrelationInput, CorrelationQueryOptions, DeleteObjectsOptions, ElectrocardiogramQueryOptions, ElectrocardiogramSample, ActivitySummary, ActivitySummaryQueryOptions, AudiogramSample, DateRangeQueryOptions, HeartbeatSeriesQueryOptions, HeartbeatSeriesSample, QuantityQueryOptions, QuantitySample, SampleQueryOptions, QuantitySampleInput, Statistics, StatisticsCollectionQueryOptions, StatisticsQueryOptions, WorkoutInput, WorkoutQueryOptions, WorkoutRoute, WorkoutRouteQueryOptions, WorkoutSample } from './types';
2
+ import type { AnchoredQueryOptions, AnchoredQueryResult, AuthorizationOptions, CategorySample, CategorySampleInput, ClinicalRecord, ClinicalRecordQueryOptions, Correlation, CorrelationInput, CorrelationQueryOptions, DeleteObjectsOptions, ElectrocardiogramQueryOptions, ElectrocardiogramSample, ActivitySummary, ActivitySummaryQueryOptions, AudiogramSample, DateRangeQueryOptions, HealthUpdateEvent, HealthUpdateListener, HeartbeatSeriesQueryOptions, HeartbeatSeriesSample, QuantityQueryOptions, QuantitySample, SampleQueryOptions, QuantitySampleInput, Statistics, StatisticsCollectionQueryOptions, StatisticsQueryOptions, WorkoutInput, WorkoutQueryOptions, WorkoutRoute, WorkoutRouteQueryOptions, WorkoutSample } from './types';
3
3
  export * from './identifiers';
4
4
  export * from './errors';
5
5
  export type * from './types';
@@ -35,12 +35,19 @@ export declare function disableBackgroundDelivery(type: string): Promise<boolean
35
35
  export declare function disableAllBackgroundDelivery(): Promise<boolean>;
36
36
  export declare function observe(types: readonly string[]): Promise<void>;
37
37
  export declare function clearObservers(): Promise<void>;
38
- export declare function addUpdateListener(listener: (event: {
39
- type: string;
40
- }) => void): {
38
+ /**
39
+ * Types currently registered with `observe`. Persisted natively on iOS, so it
40
+ * reflects observers re-registered at cold launch too.
41
+ */
42
+ export declare function getObservedTypes(): Promise<string[]>;
43
+ /**
44
+ * Subscribe to observer / background-delivery updates. Return a promise from the
45
+ * listener to hold the iOS completion handler until your async work is done.
46
+ */
47
+ export declare function addUpdateListener(listener: HealthUpdateListener): {
41
48
  remove(): void;
42
49
  };
43
- export declare function useHealthKitUpdates(): import("./types").HealthUpdateEvent | null;
50
+ export declare function useHealthKitUpdates(): HealthUpdateEvent | null;
44
51
  declare const HealthKit: {
45
52
  isAvailable: typeof isAvailable;
46
53
  requestAuthorization: typeof requestAuthorization;
@@ -74,6 +81,7 @@ declare const HealthKit: {
74
81
  disableAllBackgroundDelivery: typeof disableAllBackgroundDelivery;
75
82
  observe: typeof observe;
76
83
  clearObservers: typeof clearObservers;
84
+ getObservedTypes: typeof getObservedTypes;
77
85
  addUpdateListener: typeof addUpdateListener;
78
86
  useHealthKitUpdates: typeof useHealthKitUpdates;
79
87
  QuantityType: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/build/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { useEvent } from 'expo';
1
+ import { useEffect, useState } from 'react';
2
2
  import { Platform } from 'react-native';
3
3
  import ExpoHealthKitModule from './ExpoHealthKitModule';
4
4
  import { fromIso, resolveEndDate, toIso, toOptionalIso } from './dates';
@@ -349,11 +349,68 @@ export async function clearObservers() {
349
349
  assertAvailable();
350
350
  await ExpoHealthKitModule.clearObserverQueries();
351
351
  }
352
+ /**
353
+ * Types currently registered with `observe`. Persisted natively on iOS, so it
354
+ * reflects observers re-registered at cold launch too.
355
+ */
356
+ export async function getObservedTypes() {
357
+ if (!isAvailable())
358
+ return [];
359
+ return ExpoHealthKitModule.getObservedTypes();
360
+ }
361
+ const updateListeners = new Set();
362
+ let nativeUpdateSubscription = null;
363
+ function runListener(listener, event) {
364
+ try {
365
+ return Promise.resolve(listener(event));
366
+ }
367
+ catch (error) {
368
+ return Promise.reject(error);
369
+ }
370
+ }
371
+ function handleNativeUpdate(nativeEvent) {
372
+ const { token, type } = nativeEvent;
373
+ const event = { type };
374
+ const results = [...updateListeners].map((listener) => runListener(listener, event));
375
+ Promise.allSettled(results).then((settled) => {
376
+ if (__DEV__) {
377
+ for (const result of settled) {
378
+ if (result.status === 'rejected') {
379
+ console.warn('[expo-healthkit] update listener threw', result.reason);
380
+ }
381
+ }
382
+ }
383
+ if (token) {
384
+ ExpoHealthKitModule.completeUpdate(token).catch(() => { });
385
+ }
386
+ });
387
+ }
388
+ /**
389
+ * Subscribe to observer / background-delivery updates. Return a promise from the
390
+ * listener to hold the iOS completion handler until your async work is done.
391
+ */
352
392
  export function addUpdateListener(listener) {
353
- return ExpoHealthKitModule.addListener('onUpdate', listener);
393
+ updateListeners.add(listener);
394
+ if (!nativeUpdateSubscription) {
395
+ nativeUpdateSubscription = ExpoHealthKitModule.addListener('onUpdate', handleNativeUpdate);
396
+ }
397
+ return {
398
+ remove() {
399
+ updateListeners.delete(listener);
400
+ if (updateListeners.size === 0 && nativeUpdateSubscription) {
401
+ nativeUpdateSubscription.remove();
402
+ nativeUpdateSubscription = null;
403
+ }
404
+ },
405
+ };
354
406
  }
355
407
  export function useHealthKitUpdates() {
356
- return useEvent(ExpoHealthKitModule, 'onUpdate');
408
+ const [event, setEvent] = useState(null);
409
+ useEffect(() => {
410
+ const subscription = addUpdateListener((next) => setEvent(next));
411
+ return () => subscription.remove();
412
+ }, []);
413
+ return event;
357
414
  }
358
415
  const HealthKit = {
359
416
  isAvailable,
@@ -388,6 +445,7 @@ const HealthKit = {
388
445
  disableAllBackgroundDelivery,
389
446
  observe,
390
447
  clearObservers,
448
+ getObservedTypes,
391
449
  addUpdateListener,
392
450
  useHealthKitUpdates,
393
451
  QuantityType,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEvent } from 'expo';\nimport { Platform } from 'react-native';\n\nimport ExpoHealthKitModule from './ExpoHealthKitModule';\nimport { fromIso, resolveEndDate, toIso, toOptionalIso } from './dates';\nimport { HealthKitUnavailableError } from './errors';\nimport {\n AuthorizationRequestStatus,\n AuthorizationStatus,\n BiologicalSex,\n BloodType,\n CategoryType,\n CharacteristicType,\n ClinicalType,\n CorrelationType,\n ElectrocardiogramClassification,\n ElectrocardiogramSymptomsStatus,\n ElectrocardiogramType,\n AudiogramType,\n ActivitySummaryType,\n SeriesType,\n FitzpatrickSkinType,\n QuantityType,\n SleepAnalysisValue,\n StatisticsOption,\n Unit,\n UpdateFrequency,\n WheelchairUse,\n WorkoutActivityType,\n WorkoutType,\n} from './identifiers';\nimport type {\n AnchoredQueryOptions,\n AnchoredQueryResult,\n AuthorizationOptions,\n CategorySample,\n CategorySampleInput,\n ClinicalRecord,\n ClinicalRecordQueryOptions,\n Correlation,\n CorrelationInput,\n CorrelationQueryOptions,\n DeleteObjectsOptions,\n ElectrocardiogramQueryOptions,\n ElectrocardiogramSample,\n ActivitySummary,\n ActivitySummaryQueryOptions,\n AudiogramSample,\n DateRangeQueryOptions,\n HeartbeatSeriesQueryOptions,\n HeartbeatSeriesSample,\n QuantityQueryOptions,\n QuantitySample,\n SampleQueryOptions,\n QuantitySampleInput,\n Statistics,\n StatisticsCollectionQueryOptions,\n StatisticsQueryOptions,\n WorkoutInput,\n WorkoutQueryOptions,\n WorkoutRoute,\n WorkoutRouteQueryOptions,\n WorkoutSample,\n} from './types';\n\nexport * from './identifiers';\nexport * from './errors';\nexport type * from './types';\n\nconst HK_UNLIMITED = 0;\n\nfunction isHealthPlatform(): boolean {\n return Platform.OS === 'ios' || Platform.OS === 'android';\n}\n\nfunction assertAvailable(): void {\n if (!isHealthPlatform() || !ExpoHealthKitModule.isHealthDataAvailable()) {\n throw new HealthKitUnavailableError();\n }\n}\n\nexport function isAvailable(): boolean {\n return isHealthPlatform() && ExpoHealthKitModule.isHealthDataAvailable();\n}\n\nexport async function requestAuthorization(options: AuthorizationOptions = {}): Promise<boolean> {\n assertAvailable();\n return ExpoHealthKitModule.requestAuthorization({\n toRead: [...(options.toRead ?? [])],\n toShare: [...(options.toShare ?? [])],\n });\n}\n\nexport async function getAuthorizationStatus(type: string): Promise<AuthorizationStatus> {\n assertAvailable();\n return (await ExpoHealthKitModule.getAuthorizationStatus(type)) as AuthorizationStatus;\n}\n\nexport async function getRequestStatusForAuthorization(\n options: AuthorizationOptions = {}\n): Promise<AuthorizationRequestStatus> {\n assertAvailable();\n return (await ExpoHealthKitModule.getRequestStatusForAuthorization({\n toRead: [...(options.toRead ?? [])],\n toShare: [...(options.toShare ?? [])],\n })) as AuthorizationRequestStatus;\n}\n\nexport async function queryQuantitySamples(\n options: QuantityQueryOptions\n): Promise<QuantitySample[]> {\n assertAvailable();\n const samples = await ExpoHealthKitModule.queryQuantitySamples({\n type: options.type,\n unit: options.unit,\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n ascending: options.ascending ?? false,\n });\n\n return samples.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n }));\n}\n\nexport async function queryCategorySamples(options: SampleQueryOptions): Promise<CategorySample[]> {\n assertAvailable();\n const samples = await ExpoHealthKitModule.queryCategorySamples({\n type: options.type,\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n ascending: options.ascending ?? false,\n });\n\n return samples.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n }));\n}\n\nexport async function queryWorkouts(options: WorkoutQueryOptions = {}): Promise<WorkoutSample[]> {\n assertAvailable();\n const samples = await ExpoHealthKitModule.queryWorkouts({\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n ascending: options.ascending ?? false,\n activityType: options.activityType,\n });\n\n return samples.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n workoutActivityType: sample.workoutActivityType as WorkoutSample['workoutActivityType'],\n }));\n}\n\nexport async function queryElectrocardiograms(\n options: ElectrocardiogramQueryOptions = {}\n): Promise<ElectrocardiogramSample[]> {\n assertAvailable();\n const samples = await ExpoHealthKitModule.queryElectrocardiograms({\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n ascending: options.ascending ?? false,\n includeVoltage: options.includeVoltage ?? false,\n });\n\n return samples.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n classification: sample.classification as ElectrocardiogramSample['classification'],\n symptomsStatus: sample.symptomsStatus as ElectrocardiogramSample['symptomsStatus'],\n }));\n}\n\nexport async function queryActivitySummaries(\n options: ActivitySummaryQueryOptions = {}\n): Promise<ActivitySummary[]> {\n assertAvailable();\n return ExpoHealthKitModule.queryActivitySummaries({\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n });\n}\n\nexport async function queryClinicalRecords(\n options: ClinicalRecordQueryOptions\n): Promise<ClinicalRecord[]> {\n assertAvailable();\n const samples = await ExpoHealthKitModule.queryClinicalRecords({\n type: options.type,\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n ascending: options.ascending ?? false,\n });\n\n return samples.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n }));\n}\n\nexport async function queryAudiograms(\n options: DateRangeQueryOptions = {}\n): Promise<AudiogramSample[]> {\n assertAvailable();\n const samples = await ExpoHealthKitModule.queryAudiograms({\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n ascending: options.ascending ?? false,\n });\n\n return samples.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n }));\n}\n\nexport async function queryWorkoutRoute(\n options: WorkoutRouteQueryOptions\n): Promise<WorkoutRoute[]> {\n assertAvailable();\n const routes = await ExpoHealthKitModule.queryWorkoutRoute({\n workoutUUID: options.workoutUUID,\n });\n\n return routes.map((route) => ({\n ...route,\n startDate: fromIso(route.startDate),\n endDate: fromIso(route.endDate),\n locations: route.locations.map((location) => ({\n ...location,\n timestamp: fromIso(location.timestamp),\n })),\n }));\n}\n\nfunction mapQuantitySample(sample: {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n value: number;\n unit: string;\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}) {\n return {\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n };\n}\n\nexport async function queryCorrelations(options: CorrelationQueryOptions): Promise<Correlation[]> {\n assertAvailable();\n const samples = await ExpoHealthKitModule.queryCorrelations({\n type: options.type,\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n ascending: options.ascending ?? false,\n });\n\n return samples.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n objects: sample.objects.map(mapQuantitySample),\n }));\n}\n\nexport async function queryHeartbeatSeries(\n options: HeartbeatSeriesQueryOptions = {}\n): Promise<HeartbeatSeriesSample[]> {\n assertAvailable();\n const samples = await ExpoHealthKitModule.queryHeartbeatSeries({\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n ascending: options.ascending ?? false,\n includeBeats: options.includeBeats ?? true,\n });\n\n return samples.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n }));\n}\n\nexport async function queryStatistics(options: StatisticsQueryOptions): Promise<Statistics> {\n assertAvailable();\n const stats = await ExpoHealthKitModule.queryStatistics({\n type: options.type,\n unit: options.unit,\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n options: options.options ?? 0,\n });\n\n return {\n ...stats,\n startDate: fromIso(stats.startDate),\n endDate: fromIso(stats.endDate),\n };\n}\n\nexport async function queryStatisticsCollection(\n options: StatisticsCollectionQueryOptions\n): Promise<Statistics[]> {\n assertAvailable();\n const interval = options.interval ?? { day: 1 };\n const results = await ExpoHealthKitModule.queryStatisticsCollection({\n type: options.type,\n unit: options.unit,\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n options: options.options ?? 0,\n year: interval.year ?? 0,\n month: interval.month ?? 0,\n day: interval.day ?? 0,\n hour: interval.hour ?? 0,\n minute: interval.minute ?? 0,\n second: interval.second ?? 0,\n });\n\n return results.map((stats) => ({\n ...stats,\n startDate: fromIso(stats.startDate),\n endDate: fromIso(stats.endDate),\n }));\n}\n\nexport async function queryAnchored(options: AnchoredQueryOptions): Promise<AnchoredQueryResult> {\n assertAvailable();\n const result = await ExpoHealthKitModule.queryAnchored({\n type: options.type,\n unit: options.unit,\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n anchor: options.anchor ?? undefined,\n });\n\n return {\n added: result.added.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n })),\n deleted: result.deleted,\n anchor: result.anchor ?? null,\n };\n}\n\nexport async function saveQuantitySample(sample: QuantitySampleInput): Promise<string> {\n assertAvailable();\n return ExpoHealthKitModule.saveQuantitySample({\n type: sample.type,\n unit: sample.unit,\n value: sample.value,\n startDate: toIso(sample.startDate),\n endDate: resolveEndDate(sample.startDate, sample.endDate),\n metadata: sample.metadata,\n });\n}\n\nexport async function saveCategorySample(sample: CategorySampleInput): Promise<string> {\n assertAvailable();\n return ExpoHealthKitModule.saveCategorySample({\n type: sample.type,\n value: sample.value,\n startDate: toIso(sample.startDate),\n endDate: resolveEndDate(sample.startDate, sample.endDate),\n metadata: sample.metadata,\n });\n}\n\nexport async function saveWorkout(workout: WorkoutInput): Promise<string> {\n assertAvailable();\n return ExpoHealthKitModule.saveWorkout({\n activityType: workout.activityType,\n startDate: toIso(workout.startDate),\n endDate: toIso(workout.endDate),\n energyBurned: workout.energyBurned,\n energyBurnedUnit: workout.energyBurnedUnit,\n distance: workout.distance,\n distanceUnit: workout.distanceUnit,\n metadata: workout.metadata,\n });\n}\n\nexport async function saveCorrelation(correlation: CorrelationInput): Promise<string> {\n assertAvailable();\n const startDate = toIso(correlation.startDate);\n const endDate = resolveEndDate(correlation.startDate, correlation.endDate);\n return ExpoHealthKitModule.saveCorrelation({\n type: correlation.type,\n startDate,\n endDate,\n objects: correlation.objects.map((object) => ({\n type: object.type,\n unit: object.unit,\n value: object.value,\n startDate: toIso(object.startDate ?? correlation.startDate),\n endDate: resolveEndDate(\n object.endDate ?? object.startDate ?? correlation.startDate,\n object.endDate ?? correlation.endDate\n ),\n metadata: object.metadata,\n })),\n metadata: correlation.metadata,\n });\n}\n\nexport async function deleteObjects(options: DeleteObjectsOptions): Promise<number> {\n assertAvailable();\n return ExpoHealthKitModule.deleteObjects({\n uuid: options.uuid,\n type: options.type,\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n });\n}\n\nexport async function getBiologicalSex(): Promise<BiologicalSex> {\n assertAvailable();\n return (await ExpoHealthKitModule.getBiologicalSex()) as BiologicalSex;\n}\n\nexport async function getBloodType(): Promise<BloodType> {\n assertAvailable();\n return (await ExpoHealthKitModule.getBloodType()) as BloodType;\n}\n\nexport async function getDateOfBirth(): Promise<Date | null> {\n assertAvailable();\n const value = await ExpoHealthKitModule.getDateOfBirth();\n return value ? fromIso(value) : null;\n}\n\nexport async function getFitzpatrickSkinType(): Promise<FitzpatrickSkinType> {\n assertAvailable();\n return (await ExpoHealthKitModule.getFitzpatrickSkinType()) as FitzpatrickSkinType;\n}\n\nexport async function getWheelchairUse(): Promise<WheelchairUse> {\n assertAvailable();\n return (await ExpoHealthKitModule.getWheelchairUse()) as WheelchairUse;\n}\n\nexport async function enableBackgroundDelivery(\n type: string,\n frequency: UpdateFrequency\n): Promise<boolean> {\n assertAvailable();\n return ExpoHealthKitModule.enableBackgroundDelivery(type, frequency);\n}\n\nexport async function disableBackgroundDelivery(type: string): Promise<boolean> {\n assertAvailable();\n return ExpoHealthKitModule.disableBackgroundDelivery(type);\n}\n\nexport async function disableAllBackgroundDelivery(): Promise<boolean> {\n assertAvailable();\n return ExpoHealthKitModule.disableAllBackgroundDelivery();\n}\n\nexport async function observe(types: readonly string[]): Promise<void> {\n assertAvailable();\n await ExpoHealthKitModule.observeTypes([...types]);\n}\n\nexport async function clearObservers(): Promise<void> {\n assertAvailable();\n await ExpoHealthKitModule.clearObserverQueries();\n}\n\nexport function addUpdateListener(listener: (event: { type: string }) => void): { remove(): void } {\n return ExpoHealthKitModule.addListener('onUpdate', listener);\n}\n\nexport function useHealthKitUpdates() {\n return useEvent(ExpoHealthKitModule, 'onUpdate');\n}\n\nconst HealthKit = {\n isAvailable,\n requestAuthorization,\n getAuthorizationStatus,\n getRequestStatusForAuthorization,\n queryQuantitySamples,\n queryCategorySamples,\n queryWorkouts,\n queryElectrocardiograms,\n queryActivitySummaries,\n queryClinicalRecords,\n queryAudiograms,\n queryWorkoutRoute,\n queryCorrelations,\n queryHeartbeatSeries,\n queryStatistics,\n queryStatisticsCollection,\n queryAnchored,\n saveQuantitySample,\n saveCategorySample,\n saveWorkout,\n saveCorrelation,\n deleteObjects,\n getBiologicalSex,\n getBloodType,\n getDateOfBirth,\n getFitzpatrickSkinType,\n getWheelchairUse,\n enableBackgroundDelivery,\n disableBackgroundDelivery,\n disableAllBackgroundDelivery,\n observe,\n clearObservers,\n addUpdateListener,\n useHealthKitUpdates,\n QuantityType,\n CategoryType,\n CharacteristicType,\n CorrelationType,\n WorkoutType,\n ElectrocardiogramType,\n AudiogramType,\n SeriesType,\n ActivitySummaryType,\n ClinicalType,\n Unit,\n WorkoutActivityType,\n SleepAnalysisValue,\n UpdateFrequency,\n StatisticsOption,\n AuthorizationStatus,\n AuthorizationRequestStatus,\n BiologicalSex,\n BloodType,\n FitzpatrickSkinType,\n WheelchairUse,\n ElectrocardiogramClassification,\n ElectrocardiogramSymptomsStatus,\n};\n\nexport default HealthKit;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\nimport { Platform } from 'react-native';\n\nimport ExpoHealthKitModule from './ExpoHealthKitModule';\nimport { fromIso, resolveEndDate, toIso, toOptionalIso } from './dates';\nimport { HealthKitUnavailableError } from './errors';\nimport {\n AuthorizationRequestStatus,\n AuthorizationStatus,\n BiologicalSex,\n BloodType,\n CategoryType,\n CharacteristicType,\n ClinicalType,\n CorrelationType,\n ElectrocardiogramClassification,\n ElectrocardiogramSymptomsStatus,\n ElectrocardiogramType,\n AudiogramType,\n ActivitySummaryType,\n SeriesType,\n FitzpatrickSkinType,\n QuantityType,\n SleepAnalysisValue,\n StatisticsOption,\n Unit,\n UpdateFrequency,\n WheelchairUse,\n WorkoutActivityType,\n WorkoutType,\n} from './identifiers';\nimport type {\n AnchoredQueryOptions,\n AnchoredQueryResult,\n AuthorizationOptions,\n CategorySample,\n CategorySampleInput,\n ClinicalRecord,\n ClinicalRecordQueryOptions,\n Correlation,\n CorrelationInput,\n CorrelationQueryOptions,\n DeleteObjectsOptions,\n ElectrocardiogramQueryOptions,\n ElectrocardiogramSample,\n ActivitySummary,\n ActivitySummaryQueryOptions,\n AudiogramSample,\n DateRangeQueryOptions,\n HealthUpdateEvent,\n HealthUpdateListener,\n HeartbeatSeriesQueryOptions,\n HeartbeatSeriesSample,\n NativeHealthUpdateEvent,\n QuantityQueryOptions,\n QuantitySample,\n SampleQueryOptions,\n QuantitySampleInput,\n Statistics,\n StatisticsCollectionQueryOptions,\n StatisticsQueryOptions,\n WorkoutInput,\n WorkoutQueryOptions,\n WorkoutRoute,\n WorkoutRouteQueryOptions,\n WorkoutSample,\n} from './types';\n\nexport * from './identifiers';\nexport * from './errors';\nexport type * from './types';\n\nconst HK_UNLIMITED = 0;\n\nfunction isHealthPlatform(): boolean {\n return Platform.OS === 'ios' || Platform.OS === 'android';\n}\n\nfunction assertAvailable(): void {\n if (!isHealthPlatform() || !ExpoHealthKitModule.isHealthDataAvailable()) {\n throw new HealthKitUnavailableError();\n }\n}\n\nexport function isAvailable(): boolean {\n return isHealthPlatform() && ExpoHealthKitModule.isHealthDataAvailable();\n}\n\nexport async function requestAuthorization(options: AuthorizationOptions = {}): Promise<boolean> {\n assertAvailable();\n return ExpoHealthKitModule.requestAuthorization({\n toRead: [...(options.toRead ?? [])],\n toShare: [...(options.toShare ?? [])],\n });\n}\n\nexport async function getAuthorizationStatus(type: string): Promise<AuthorizationStatus> {\n assertAvailable();\n return (await ExpoHealthKitModule.getAuthorizationStatus(type)) as AuthorizationStatus;\n}\n\nexport async function getRequestStatusForAuthorization(\n options: AuthorizationOptions = {}\n): Promise<AuthorizationRequestStatus> {\n assertAvailable();\n return (await ExpoHealthKitModule.getRequestStatusForAuthorization({\n toRead: [...(options.toRead ?? [])],\n toShare: [...(options.toShare ?? [])],\n })) as AuthorizationRequestStatus;\n}\n\nexport async function queryQuantitySamples(\n options: QuantityQueryOptions\n): Promise<QuantitySample[]> {\n assertAvailable();\n const samples = await ExpoHealthKitModule.queryQuantitySamples({\n type: options.type,\n unit: options.unit,\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n ascending: options.ascending ?? false,\n });\n\n return samples.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n }));\n}\n\nexport async function queryCategorySamples(options: SampleQueryOptions): Promise<CategorySample[]> {\n assertAvailable();\n const samples = await ExpoHealthKitModule.queryCategorySamples({\n type: options.type,\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n ascending: options.ascending ?? false,\n });\n\n return samples.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n }));\n}\n\nexport async function queryWorkouts(options: WorkoutQueryOptions = {}): Promise<WorkoutSample[]> {\n assertAvailable();\n const samples = await ExpoHealthKitModule.queryWorkouts({\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n ascending: options.ascending ?? false,\n activityType: options.activityType,\n });\n\n return samples.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n workoutActivityType: sample.workoutActivityType as WorkoutSample['workoutActivityType'],\n }));\n}\n\nexport async function queryElectrocardiograms(\n options: ElectrocardiogramQueryOptions = {}\n): Promise<ElectrocardiogramSample[]> {\n assertAvailable();\n const samples = await ExpoHealthKitModule.queryElectrocardiograms({\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n ascending: options.ascending ?? false,\n includeVoltage: options.includeVoltage ?? false,\n });\n\n return samples.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n classification: sample.classification as ElectrocardiogramSample['classification'],\n symptomsStatus: sample.symptomsStatus as ElectrocardiogramSample['symptomsStatus'],\n }));\n}\n\nexport async function queryActivitySummaries(\n options: ActivitySummaryQueryOptions = {}\n): Promise<ActivitySummary[]> {\n assertAvailable();\n return ExpoHealthKitModule.queryActivitySummaries({\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n });\n}\n\nexport async function queryClinicalRecords(\n options: ClinicalRecordQueryOptions\n): Promise<ClinicalRecord[]> {\n assertAvailable();\n const samples = await ExpoHealthKitModule.queryClinicalRecords({\n type: options.type,\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n ascending: options.ascending ?? false,\n });\n\n return samples.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n }));\n}\n\nexport async function queryAudiograms(\n options: DateRangeQueryOptions = {}\n): Promise<AudiogramSample[]> {\n assertAvailable();\n const samples = await ExpoHealthKitModule.queryAudiograms({\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n ascending: options.ascending ?? false,\n });\n\n return samples.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n }));\n}\n\nexport async function queryWorkoutRoute(\n options: WorkoutRouteQueryOptions\n): Promise<WorkoutRoute[]> {\n assertAvailable();\n const routes = await ExpoHealthKitModule.queryWorkoutRoute({\n workoutUUID: options.workoutUUID,\n });\n\n return routes.map((route) => ({\n ...route,\n startDate: fromIso(route.startDate),\n endDate: fromIso(route.endDate),\n locations: route.locations.map((location) => ({\n ...location,\n timestamp: fromIso(location.timestamp),\n })),\n }));\n}\n\nfunction mapQuantitySample(sample: {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n value: number;\n unit: string;\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}) {\n return {\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n };\n}\n\nexport async function queryCorrelations(options: CorrelationQueryOptions): Promise<Correlation[]> {\n assertAvailable();\n const samples = await ExpoHealthKitModule.queryCorrelations({\n type: options.type,\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n ascending: options.ascending ?? false,\n });\n\n return samples.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n objects: sample.objects.map(mapQuantitySample),\n }));\n}\n\nexport async function queryHeartbeatSeries(\n options: HeartbeatSeriesQueryOptions = {}\n): Promise<HeartbeatSeriesSample[]> {\n assertAvailable();\n const samples = await ExpoHealthKitModule.queryHeartbeatSeries({\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n ascending: options.ascending ?? false,\n includeBeats: options.includeBeats ?? true,\n });\n\n return samples.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n }));\n}\n\nexport async function queryStatistics(options: StatisticsQueryOptions): Promise<Statistics> {\n assertAvailable();\n const stats = await ExpoHealthKitModule.queryStatistics({\n type: options.type,\n unit: options.unit,\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n options: options.options ?? 0,\n });\n\n return {\n ...stats,\n startDate: fromIso(stats.startDate),\n endDate: fromIso(stats.endDate),\n };\n}\n\nexport async function queryStatisticsCollection(\n options: StatisticsCollectionQueryOptions\n): Promise<Statistics[]> {\n assertAvailable();\n const interval = options.interval ?? { day: 1 };\n const results = await ExpoHealthKitModule.queryStatisticsCollection({\n type: options.type,\n unit: options.unit,\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n options: options.options ?? 0,\n year: interval.year ?? 0,\n month: interval.month ?? 0,\n day: interval.day ?? 0,\n hour: interval.hour ?? 0,\n minute: interval.minute ?? 0,\n second: interval.second ?? 0,\n });\n\n return results.map((stats) => ({\n ...stats,\n startDate: fromIso(stats.startDate),\n endDate: fromIso(stats.endDate),\n }));\n}\n\nexport async function queryAnchored(options: AnchoredQueryOptions): Promise<AnchoredQueryResult> {\n assertAvailable();\n const result = await ExpoHealthKitModule.queryAnchored({\n type: options.type,\n unit: options.unit,\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n limit: options.limit ?? HK_UNLIMITED,\n anchor: options.anchor ?? undefined,\n });\n\n return {\n added: result.added.map((sample) => ({\n ...sample,\n startDate: fromIso(sample.startDate),\n endDate: fromIso(sample.endDate),\n })),\n deleted: result.deleted,\n anchor: result.anchor ?? null,\n };\n}\n\nexport async function saveQuantitySample(sample: QuantitySampleInput): Promise<string> {\n assertAvailable();\n return ExpoHealthKitModule.saveQuantitySample({\n type: sample.type,\n unit: sample.unit,\n value: sample.value,\n startDate: toIso(sample.startDate),\n endDate: resolveEndDate(sample.startDate, sample.endDate),\n metadata: sample.metadata,\n });\n}\n\nexport async function saveCategorySample(sample: CategorySampleInput): Promise<string> {\n assertAvailable();\n return ExpoHealthKitModule.saveCategorySample({\n type: sample.type,\n value: sample.value,\n startDate: toIso(sample.startDate),\n endDate: resolveEndDate(sample.startDate, sample.endDate),\n metadata: sample.metadata,\n });\n}\n\nexport async function saveWorkout(workout: WorkoutInput): Promise<string> {\n assertAvailable();\n return ExpoHealthKitModule.saveWorkout({\n activityType: workout.activityType,\n startDate: toIso(workout.startDate),\n endDate: toIso(workout.endDate),\n energyBurned: workout.energyBurned,\n energyBurnedUnit: workout.energyBurnedUnit,\n distance: workout.distance,\n distanceUnit: workout.distanceUnit,\n metadata: workout.metadata,\n });\n}\n\nexport async function saveCorrelation(correlation: CorrelationInput): Promise<string> {\n assertAvailable();\n const startDate = toIso(correlation.startDate);\n const endDate = resolveEndDate(correlation.startDate, correlation.endDate);\n return ExpoHealthKitModule.saveCorrelation({\n type: correlation.type,\n startDate,\n endDate,\n objects: correlation.objects.map((object) => ({\n type: object.type,\n unit: object.unit,\n value: object.value,\n startDate: toIso(object.startDate ?? correlation.startDate),\n endDate: resolveEndDate(\n object.endDate ?? object.startDate ?? correlation.startDate,\n object.endDate ?? correlation.endDate\n ),\n metadata: object.metadata,\n })),\n metadata: correlation.metadata,\n });\n}\n\nexport async function deleteObjects(options: DeleteObjectsOptions): Promise<number> {\n assertAvailable();\n return ExpoHealthKitModule.deleteObjects({\n uuid: options.uuid,\n type: options.type,\n from: toOptionalIso(options.from),\n to: toOptionalIso(options.to),\n });\n}\n\nexport async function getBiologicalSex(): Promise<BiologicalSex> {\n assertAvailable();\n return (await ExpoHealthKitModule.getBiologicalSex()) as BiologicalSex;\n}\n\nexport async function getBloodType(): Promise<BloodType> {\n assertAvailable();\n return (await ExpoHealthKitModule.getBloodType()) as BloodType;\n}\n\nexport async function getDateOfBirth(): Promise<Date | null> {\n assertAvailable();\n const value = await ExpoHealthKitModule.getDateOfBirth();\n return value ? fromIso(value) : null;\n}\n\nexport async function getFitzpatrickSkinType(): Promise<FitzpatrickSkinType> {\n assertAvailable();\n return (await ExpoHealthKitModule.getFitzpatrickSkinType()) as FitzpatrickSkinType;\n}\n\nexport async function getWheelchairUse(): Promise<WheelchairUse> {\n assertAvailable();\n return (await ExpoHealthKitModule.getWheelchairUse()) as WheelchairUse;\n}\n\nexport async function enableBackgroundDelivery(\n type: string,\n frequency: UpdateFrequency\n): Promise<boolean> {\n assertAvailable();\n return ExpoHealthKitModule.enableBackgroundDelivery(type, frequency);\n}\n\nexport async function disableBackgroundDelivery(type: string): Promise<boolean> {\n assertAvailable();\n return ExpoHealthKitModule.disableBackgroundDelivery(type);\n}\n\nexport async function disableAllBackgroundDelivery(): Promise<boolean> {\n assertAvailable();\n return ExpoHealthKitModule.disableAllBackgroundDelivery();\n}\n\nexport async function observe(types: readonly string[]): Promise<void> {\n assertAvailable();\n await ExpoHealthKitModule.observeTypes([...types]);\n}\n\nexport async function clearObservers(): Promise<void> {\n assertAvailable();\n await ExpoHealthKitModule.clearObserverQueries();\n}\n\n/**\n * Types currently registered with `observe`. Persisted natively on iOS, so it\n * reflects observers re-registered at cold launch too.\n */\nexport async function getObservedTypes(): Promise<string[]> {\n if (!isAvailable()) return [];\n return ExpoHealthKitModule.getObservedTypes();\n}\n\nconst updateListeners = new Set<HealthUpdateListener>();\nlet nativeUpdateSubscription: { remove(): void } | null = null;\n\nfunction runListener(listener: HealthUpdateListener, event: HealthUpdateEvent): Promise<void> {\n try {\n return Promise.resolve(listener(event));\n } catch (error) {\n return Promise.reject(error);\n }\n}\n\nfunction handleNativeUpdate(nativeEvent: NativeHealthUpdateEvent): void {\n const { token, type } = nativeEvent;\n const event: HealthUpdateEvent = { type };\n const results = [...updateListeners].map((listener) => runListener(listener, event));\n\n Promise.allSettled(results).then((settled) => {\n if (__DEV__) {\n for (const result of settled) {\n if (result.status === 'rejected') {\n console.warn('[expo-healthkit] update listener threw', result.reason);\n }\n }\n }\n if (token) {\n ExpoHealthKitModule.completeUpdate(token).catch(() => {});\n }\n });\n}\n\n/**\n * Subscribe to observer / background-delivery updates. Return a promise from the\n * listener to hold the iOS completion handler until your async work is done.\n */\nexport function addUpdateListener(listener: HealthUpdateListener): { remove(): void } {\n updateListeners.add(listener);\n if (!nativeUpdateSubscription) {\n nativeUpdateSubscription = ExpoHealthKitModule.addListener('onUpdate', handleNativeUpdate);\n }\n\n return {\n remove() {\n updateListeners.delete(listener);\n if (updateListeners.size === 0 && nativeUpdateSubscription) {\n nativeUpdateSubscription.remove();\n nativeUpdateSubscription = null;\n }\n },\n };\n}\n\nexport function useHealthKitUpdates(): HealthUpdateEvent | null {\n const [event, setEvent] = useState<HealthUpdateEvent | null>(null);\n\n useEffect(() => {\n const subscription = addUpdateListener((next) => setEvent(next));\n return () => subscription.remove();\n }, []);\n\n return event;\n}\n\nconst HealthKit = {\n isAvailable,\n requestAuthorization,\n getAuthorizationStatus,\n getRequestStatusForAuthorization,\n queryQuantitySamples,\n queryCategorySamples,\n queryWorkouts,\n queryElectrocardiograms,\n queryActivitySummaries,\n queryClinicalRecords,\n queryAudiograms,\n queryWorkoutRoute,\n queryCorrelations,\n queryHeartbeatSeries,\n queryStatistics,\n queryStatisticsCollection,\n queryAnchored,\n saveQuantitySample,\n saveCategorySample,\n saveWorkout,\n saveCorrelation,\n deleteObjects,\n getBiologicalSex,\n getBloodType,\n getDateOfBirth,\n getFitzpatrickSkinType,\n getWheelchairUse,\n enableBackgroundDelivery,\n disableBackgroundDelivery,\n disableAllBackgroundDelivery,\n observe,\n clearObservers,\n getObservedTypes,\n addUpdateListener,\n useHealthKitUpdates,\n QuantityType,\n CategoryType,\n CharacteristicType,\n CorrelationType,\n WorkoutType,\n ElectrocardiogramType,\n AudiogramType,\n SeriesType,\n ActivitySummaryType,\n ClinicalType,\n Unit,\n WorkoutActivityType,\n SleepAnalysisValue,\n UpdateFrequency,\n StatisticsOption,\n AuthorizationStatus,\n AuthorizationRequestStatus,\n BiologicalSex,\n BloodType,\n FitzpatrickSkinType,\n WheelchairUse,\n ElectrocardiogramClassification,\n ElectrocardiogramSymptomsStatus,\n};\n\nexport default HealthKit;\n"]}
package/build/types.d.ts CHANGED
@@ -272,8 +272,18 @@ export interface AnchoredQueryResult {
272
272
  export interface HealthUpdateEvent {
273
273
  type: string;
274
274
  }
275
+ /**
276
+ * Return a promise to keep the app alive (and the HealthKit completion handler
277
+ * pending) until your async work finishes. Resolves are awaited across all
278
+ * listeners; native times out after ~25s regardless.
279
+ */
280
+ export type HealthUpdateListener = (event: HealthUpdateEvent) => void | Promise<void>;
281
+ export interface NativeHealthUpdateEvent extends HealthUpdateEvent {
282
+ /** Present on iOS. Passed back via `completeUpdate` once listeners finish. */
283
+ token?: string;
284
+ }
275
285
  export type ExpoHealthKitModuleEvents = {
276
- onUpdate: (event: HealthUpdateEvent) => void;
286
+ onUpdate: (event: NativeHealthUpdateEvent) => void;
277
287
  };
278
288
  export interface NativeAuthorizationOptions {
279
289
  toRead: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,+BAA+B,EAC/B,+BAA+B,EAC/B,UAAU,EACV,mBAAmB,EACpB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;IAC9D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gCAAiC,SAAQ,sBAAsB;IAC9E,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,mBAAmB,CAAC;IAClC,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,EAAE,CAAC,EAAE,SAAS,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,6BAA8B,SAAQ,qBAAqB;IAC1E,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,EAAE,CAAC,EAAE,SAAS,CAAC;CAChB;AAED,MAAM,WAAW,0BAA2B,SAAQ,qBAAqB;IACvE,IAAI,EAAE,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB;IACpE,IAAI,EAAE,eAAe,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACtC,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,2BAA4B,SAAQ,qBAAqB;IACxE,+EAA+E;IAC/E,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,SAAS;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,mCAAmC;IAClD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,cAAc,EAAE,+BAA+B,CAAC;IAChD,cAAc,EAAE,+BAA+B,CAAC;IAChD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2BAA2B,EAAE,MAAM,CAAC;IACpC,mBAAmB,CAAC,EAAE,mCAAmC,EAAE,CAAC;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,iBAAiB,EAAE,yBAAyB,EAAE,CAAC;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,SAAS,EAAE,oBAAoB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC9C,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sCAAuC,SAAQ,4BAA4B;IAC1F,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mCAAoC,SAAQ,2BAA2B;IACtF,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,iCAAiC;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gCAAiC,SAAQ,2BAA2B;IACnF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,8BAA8B;IAC7C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yCAAyC;IACxD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2BAA2B,EAAE,MAAM,CAAC;IACpC,mBAAmB,CAAC,EAAE,yCAAyC,EAAE,CAAC;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,+BAA+B;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,+BAA+B,EAAE,CAAC;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,0BAA0B,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,6BAA8B,SAAQ,2BAA2B;IAChF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,yBAAyB,EAAE,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,iCAAkC,SAAQ,2BAA2B;IACpF,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ClinicalType,\n CorrelationType,\n ElectrocardiogramClassification,\n ElectrocardiogramSymptomsStatus,\n ObjectType,\n WorkoutActivityType,\n} from './identifiers';\n\nexport type DateInput = Date | string;\n\nexport interface AuthorizationOptions {\n toRead?: readonly ObjectType[];\n toShare?: readonly ObjectType[];\n}\n\nexport interface SampleQueryOptions {\n type: ObjectType;\n from?: DateInput;\n to?: DateInput;\n limit?: number;\n ascending?: boolean;\n}\n\nexport interface QuantityQueryOptions extends SampleQueryOptions {\n unit: string;\n}\n\nexport interface WorkoutQueryOptions {\n from?: DateInput;\n to?: DateInput;\n limit?: number;\n ascending?: boolean;\n activityType?: WorkoutActivityType;\n}\n\nexport interface StatisticsQueryOptions {\n type: ObjectType;\n unit: string;\n from?: DateInput;\n to?: DateInput;\n /** Bitmask of `StatisticsOption` values. Combine with bitwise OR. */\n options?: number;\n}\n\nexport interface DateInterval {\n year?: number;\n month?: number;\n day?: number;\n hour?: number;\n minute?: number;\n second?: number;\n}\n\nexport interface StatisticsCollectionQueryOptions extends StatisticsQueryOptions {\n interval?: DateInterval;\n}\n\nexport interface AnchoredQueryOptions extends SampleQueryOptions {\n unit?: string;\n /** Opaque token returned by a previous anchored query. */\n anchor?: string | null;\n}\n\nexport interface QuantitySampleInput {\n type: ObjectType;\n unit: string;\n value: number;\n startDate: DateInput;\n endDate?: DateInput;\n metadata?: Record<string, string>;\n}\n\nexport interface CategorySampleInput {\n type: ObjectType;\n value: number;\n startDate: DateInput;\n endDate?: DateInput;\n metadata?: Record<string, string>;\n}\n\nexport interface WorkoutInput {\n activityType: WorkoutActivityType;\n startDate: DateInput;\n endDate: DateInput;\n energyBurned?: number;\n energyBurnedUnit?: string;\n distance?: number;\n distanceUnit?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface DeleteObjectsOptions {\n uuid?: string;\n type?: ObjectType;\n from?: DateInput;\n to?: DateInput;\n}\n\nexport interface DateRangeQueryOptions {\n from?: DateInput;\n to?: DateInput;\n limit?: number;\n ascending?: boolean;\n}\n\nexport interface ElectrocardiogramQueryOptions extends DateRangeQueryOptions {\n includeVoltage?: boolean;\n}\n\nexport interface ActivitySummaryQueryOptions {\n from?: DateInput;\n to?: DateInput;\n}\n\nexport interface ClinicalRecordQueryOptions extends DateRangeQueryOptions {\n type: ClinicalType | (string & {});\n}\n\nexport interface WorkoutRouteQueryOptions {\n workoutUUID: string;\n}\n\nexport interface CorrelationQueryOptions extends DateRangeQueryOptions {\n type: CorrelationType | (string & {});\n}\n\nexport interface CorrelationObjectInput {\n type: ObjectType;\n unit: string;\n value: number;\n startDate?: DateInput;\n endDate?: DateInput;\n metadata?: Record<string, string>;\n}\n\nexport interface CorrelationInput {\n type: CorrelationType | (string & {});\n startDate: DateInput;\n endDate?: DateInput;\n objects: readonly CorrelationObjectInput[];\n metadata?: Record<string, string>;\n}\n\nexport interface HeartbeatSeriesQueryOptions extends DateRangeQueryOptions {\n /** Default `true`. `false` returns series metadata without beat timestamps. */\n includeBeats?: boolean;\n}\n\nexport interface Correlation {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n objects: QuantitySample[];\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface Heartbeat {\n timeSinceSeriesStart: number;\n precededByGap: boolean;\n}\n\nexport interface HeartbeatSeriesSample {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n count: number;\n beats?: Heartbeat[];\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface QuantitySample {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n value: number;\n unit: string;\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface CategorySample {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n value: number;\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface WorkoutSample {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n duration: number;\n workoutActivityType: WorkoutActivityType;\n totalEnergyBurned?: number;\n totalEnergyBurnedUnit?: string;\n totalDistance?: number;\n totalDistanceUnit?: string;\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface ElectrocardiogramVoltageMeasurement {\n timeSinceSampleStart: number;\n voltage: number;\n unit: string;\n}\n\nexport interface ElectrocardiogramSample {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n classification: ElectrocardiogramClassification;\n symptomsStatus: ElectrocardiogramSymptomsStatus;\n averageHeartRate?: number;\n samplingFrequency?: number;\n numberOfVoltageMeasurements: number;\n voltageMeasurements?: ElectrocardiogramVoltageMeasurement[];\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface AudiogramSensitivityPoint {\n frequency: number;\n leftEarSensitivity?: number;\n rightEarSensitivity?: number;\n}\n\nexport interface AudiogramSample {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n sensitivityPoints: AudiogramSensitivityPoint[];\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface ActivitySummary {\n date: string;\n activeEnergyBurned: number;\n appleExerciseTime: number;\n appleStandHours: number;\n activeEnergyBurnedGoal: number;\n appleExerciseTimeGoal: number;\n appleStandHoursGoal: number;\n appleMoveTime?: number;\n appleMoveTimeGoal?: number;\n}\n\nexport interface ClinicalRecord {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n displayName: string;\n fhirResourceType?: string;\n fhirJson?: string;\n sourceName?: string;\n sourceId?: string;\n}\n\nexport interface WorkoutRouteLocation {\n latitude: number;\n longitude: number;\n altitude?: number;\n timestamp: Date;\n speed?: number;\n course?: number;\n}\n\nexport interface WorkoutRoute {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n locations: WorkoutRouteLocation[];\n}\n\nexport interface DeletedSample {\n uuid: string;\n type?: string;\n}\n\nexport interface Statistics {\n startDate: Date;\n endDate: Date;\n unit: string;\n sum?: number;\n min?: number;\n max?: number;\n average?: number;\n mostRecent?: number;\n}\n\nexport interface AnchoredQueryResult {\n added: QuantitySample[];\n deleted: DeletedSample[];\n anchor: string | null;\n}\n\nexport interface HealthUpdateEvent {\n type: string;\n}\n\nexport type ExpoHealthKitModuleEvents = {\n onUpdate: (event: HealthUpdateEvent) => void;\n};\n\nexport interface NativeAuthorizationOptions {\n toRead: string[];\n toShare: string[];\n}\n\nexport interface NativeQuantityQueryOptions {\n type: string;\n unit: string;\n from?: string;\n to?: string;\n limit: number;\n ascending: boolean;\n}\n\nexport interface NativeCategoryQueryOptions {\n type: string;\n from?: string;\n to?: string;\n limit: number;\n ascending: boolean;\n}\n\nexport interface NativeWorkoutQueryOptions {\n from?: string;\n to?: string;\n limit: number;\n ascending: boolean;\n activityType?: number;\n}\n\nexport interface NativeStatisticsQueryOptions {\n type: string;\n unit: string;\n from?: string;\n to?: string;\n options: number;\n}\n\nexport interface NativeStatisticsCollectionQueryOptions extends NativeStatisticsQueryOptions {\n year: number;\n month: number;\n day: number;\n hour: number;\n minute: number;\n second: number;\n}\n\nexport interface NativeAnchoredQueryOptions {\n type: string;\n unit?: string;\n from?: string;\n to?: string;\n limit: number;\n anchor?: string;\n}\n\nexport interface NativeQuantitySampleInput {\n type: string;\n unit: string;\n value: number;\n startDate: string;\n endDate: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeCategorySampleInput {\n type: string;\n value: number;\n startDate: string;\n endDate: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeWorkoutInput {\n activityType: number;\n startDate: string;\n endDate: string;\n energyBurned?: number;\n energyBurnedUnit?: string;\n distance?: number;\n distanceUnit?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeDeleteObjectsOptions {\n uuid?: string;\n type?: string;\n from?: string;\n to?: string;\n}\n\nexport interface NativeQuantitySample {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n value: number;\n unit: string;\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeCategorySample {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n value: number;\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeWorkoutSample {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n duration: number;\n workoutActivityType: number;\n totalEnergyBurned?: number;\n totalEnergyBurnedUnit?: string;\n totalDistance?: number;\n totalDistanceUnit?: string;\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeDeletedSample {\n uuid: string;\n type?: string;\n}\n\nexport interface NativeStatistics {\n startDate: string;\n endDate: string;\n unit: string;\n sum?: number;\n min?: number;\n max?: number;\n average?: number;\n mostRecent?: number;\n}\n\nexport interface NativeAnchoredQueryResult {\n added: NativeQuantitySample[];\n deleted: NativeDeletedSample[];\n anchor?: string;\n}\n\nexport interface NativeDateRangeQueryOptions {\n from?: string;\n to?: string;\n limit: number;\n ascending: boolean;\n}\n\nexport interface NativeElectrocardiogramQueryOptions extends NativeDateRangeQueryOptions {\n includeVoltage: boolean;\n}\n\nexport interface NativeActivitySummaryQueryOptions {\n from?: string;\n to?: string;\n}\n\nexport interface NativeClinicalRecordQueryOptions extends NativeDateRangeQueryOptions {\n type: string;\n}\n\nexport interface NativeWorkoutRouteQueryOptions {\n workoutUUID: string;\n}\n\nexport interface NativeElectrocardiogramVoltageMeasurement {\n timeSinceSampleStart: number;\n voltage: number;\n unit: string;\n}\n\nexport interface NativeElectrocardiogramSample {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n classification: number;\n symptomsStatus: number;\n averageHeartRate?: number;\n samplingFrequency?: number;\n numberOfVoltageMeasurements: number;\n voltageMeasurements?: NativeElectrocardiogramVoltageMeasurement[];\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeAudiogramSensitivityPoint {\n frequency: number;\n leftEarSensitivity?: number;\n rightEarSensitivity?: number;\n}\n\nexport interface NativeAudiogramSample {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n sensitivityPoints: NativeAudiogramSensitivityPoint[];\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeActivitySummary {\n date: string;\n activeEnergyBurned: number;\n appleExerciseTime: number;\n appleStandHours: number;\n activeEnergyBurnedGoal: number;\n appleExerciseTimeGoal: number;\n appleStandHoursGoal: number;\n appleMoveTime?: number;\n appleMoveTimeGoal?: number;\n}\n\nexport interface NativeClinicalRecord {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n displayName: string;\n fhirResourceType?: string;\n fhirJson?: string;\n sourceName?: string;\n sourceId?: string;\n}\n\nexport interface NativeWorkoutRouteLocation {\n latitude: number;\n longitude: number;\n altitude?: number;\n timestamp: string;\n speed?: number;\n course?: number;\n}\n\nexport interface NativeWorkoutRoute {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n locations: NativeWorkoutRouteLocation[];\n}\n\nexport interface NativeCorrelationQueryOptions extends NativeDateRangeQueryOptions {\n type: string;\n}\n\nexport interface NativeCorrelationInput {\n type: string;\n startDate: string;\n endDate: string;\n objects: NativeQuantitySampleInput[];\n metadata?: Record<string, string>;\n}\n\nexport interface NativeHeartbeatSeriesQueryOptions extends NativeDateRangeQueryOptions {\n includeBeats: boolean;\n}\n\nexport interface NativeCorrelation {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n objects: NativeQuantitySample[];\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeHeartbeat {\n timeSinceSeriesStart: number;\n precededByGap: boolean;\n}\n\nexport interface NativeHeartbeatSeriesSample {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n count: number;\n beats?: NativeHeartbeat[];\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ClinicalType,\n CorrelationType,\n ElectrocardiogramClassification,\n ElectrocardiogramSymptomsStatus,\n ObjectType,\n WorkoutActivityType,\n} from './identifiers';\n\nexport type DateInput = Date | string;\n\nexport interface AuthorizationOptions {\n toRead?: readonly ObjectType[];\n toShare?: readonly ObjectType[];\n}\n\nexport interface SampleQueryOptions {\n type: ObjectType;\n from?: DateInput;\n to?: DateInput;\n limit?: number;\n ascending?: boolean;\n}\n\nexport interface QuantityQueryOptions extends SampleQueryOptions {\n unit: string;\n}\n\nexport interface WorkoutQueryOptions {\n from?: DateInput;\n to?: DateInput;\n limit?: number;\n ascending?: boolean;\n activityType?: WorkoutActivityType;\n}\n\nexport interface StatisticsQueryOptions {\n type: ObjectType;\n unit: string;\n from?: DateInput;\n to?: DateInput;\n /** Bitmask of `StatisticsOption` values. Combine with bitwise OR. */\n options?: number;\n}\n\nexport interface DateInterval {\n year?: number;\n month?: number;\n day?: number;\n hour?: number;\n minute?: number;\n second?: number;\n}\n\nexport interface StatisticsCollectionQueryOptions extends StatisticsQueryOptions {\n interval?: DateInterval;\n}\n\nexport interface AnchoredQueryOptions extends SampleQueryOptions {\n unit?: string;\n /** Opaque token returned by a previous anchored query. */\n anchor?: string | null;\n}\n\nexport interface QuantitySampleInput {\n type: ObjectType;\n unit: string;\n value: number;\n startDate: DateInput;\n endDate?: DateInput;\n metadata?: Record<string, string>;\n}\n\nexport interface CategorySampleInput {\n type: ObjectType;\n value: number;\n startDate: DateInput;\n endDate?: DateInput;\n metadata?: Record<string, string>;\n}\n\nexport interface WorkoutInput {\n activityType: WorkoutActivityType;\n startDate: DateInput;\n endDate: DateInput;\n energyBurned?: number;\n energyBurnedUnit?: string;\n distance?: number;\n distanceUnit?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface DeleteObjectsOptions {\n uuid?: string;\n type?: ObjectType;\n from?: DateInput;\n to?: DateInput;\n}\n\nexport interface DateRangeQueryOptions {\n from?: DateInput;\n to?: DateInput;\n limit?: number;\n ascending?: boolean;\n}\n\nexport interface ElectrocardiogramQueryOptions extends DateRangeQueryOptions {\n includeVoltage?: boolean;\n}\n\nexport interface ActivitySummaryQueryOptions {\n from?: DateInput;\n to?: DateInput;\n}\n\nexport interface ClinicalRecordQueryOptions extends DateRangeQueryOptions {\n type: ClinicalType | (string & {});\n}\n\nexport interface WorkoutRouteQueryOptions {\n workoutUUID: string;\n}\n\nexport interface CorrelationQueryOptions extends DateRangeQueryOptions {\n type: CorrelationType | (string & {});\n}\n\nexport interface CorrelationObjectInput {\n type: ObjectType;\n unit: string;\n value: number;\n startDate?: DateInput;\n endDate?: DateInput;\n metadata?: Record<string, string>;\n}\n\nexport interface CorrelationInput {\n type: CorrelationType | (string & {});\n startDate: DateInput;\n endDate?: DateInput;\n objects: readonly CorrelationObjectInput[];\n metadata?: Record<string, string>;\n}\n\nexport interface HeartbeatSeriesQueryOptions extends DateRangeQueryOptions {\n /** Default `true`. `false` returns series metadata without beat timestamps. */\n includeBeats?: boolean;\n}\n\nexport interface Correlation {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n objects: QuantitySample[];\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface Heartbeat {\n timeSinceSeriesStart: number;\n precededByGap: boolean;\n}\n\nexport interface HeartbeatSeriesSample {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n count: number;\n beats?: Heartbeat[];\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface QuantitySample {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n value: number;\n unit: string;\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface CategorySample {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n value: number;\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface WorkoutSample {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n duration: number;\n workoutActivityType: WorkoutActivityType;\n totalEnergyBurned?: number;\n totalEnergyBurnedUnit?: string;\n totalDistance?: number;\n totalDistanceUnit?: string;\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface ElectrocardiogramVoltageMeasurement {\n timeSinceSampleStart: number;\n voltage: number;\n unit: string;\n}\n\nexport interface ElectrocardiogramSample {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n classification: ElectrocardiogramClassification;\n symptomsStatus: ElectrocardiogramSymptomsStatus;\n averageHeartRate?: number;\n samplingFrequency?: number;\n numberOfVoltageMeasurements: number;\n voltageMeasurements?: ElectrocardiogramVoltageMeasurement[];\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface AudiogramSensitivityPoint {\n frequency: number;\n leftEarSensitivity?: number;\n rightEarSensitivity?: number;\n}\n\nexport interface AudiogramSample {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n sensitivityPoints: AudiogramSensitivityPoint[];\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface ActivitySummary {\n date: string;\n activeEnergyBurned: number;\n appleExerciseTime: number;\n appleStandHours: number;\n activeEnergyBurnedGoal: number;\n appleExerciseTimeGoal: number;\n appleStandHoursGoal: number;\n appleMoveTime?: number;\n appleMoveTimeGoal?: number;\n}\n\nexport interface ClinicalRecord {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n displayName: string;\n fhirResourceType?: string;\n fhirJson?: string;\n sourceName?: string;\n sourceId?: string;\n}\n\nexport interface WorkoutRouteLocation {\n latitude: number;\n longitude: number;\n altitude?: number;\n timestamp: Date;\n speed?: number;\n course?: number;\n}\n\nexport interface WorkoutRoute {\n uuid: string;\n type: string;\n startDate: Date;\n endDate: Date;\n locations: WorkoutRouteLocation[];\n}\n\nexport interface DeletedSample {\n uuid: string;\n type?: string;\n}\n\nexport interface Statistics {\n startDate: Date;\n endDate: Date;\n unit: string;\n sum?: number;\n min?: number;\n max?: number;\n average?: number;\n mostRecent?: number;\n}\n\nexport interface AnchoredQueryResult {\n added: QuantitySample[];\n deleted: DeletedSample[];\n anchor: string | null;\n}\n\nexport interface HealthUpdateEvent {\n type: string;\n}\n\n/**\n * Return a promise to keep the app alive (and the HealthKit completion handler\n * pending) until your async work finishes. Resolves are awaited across all\n * listeners; native times out after ~25s regardless.\n */\nexport type HealthUpdateListener = (event: HealthUpdateEvent) => void | Promise<void>;\n\nexport interface NativeHealthUpdateEvent extends HealthUpdateEvent {\n /** Present on iOS. Passed back via `completeUpdate` once listeners finish. */\n token?: string;\n}\n\nexport type ExpoHealthKitModuleEvents = {\n onUpdate: (event: NativeHealthUpdateEvent) => void;\n};\n\nexport interface NativeAuthorizationOptions {\n toRead: string[];\n toShare: string[];\n}\n\nexport interface NativeQuantityQueryOptions {\n type: string;\n unit: string;\n from?: string;\n to?: string;\n limit: number;\n ascending: boolean;\n}\n\nexport interface NativeCategoryQueryOptions {\n type: string;\n from?: string;\n to?: string;\n limit: number;\n ascending: boolean;\n}\n\nexport interface NativeWorkoutQueryOptions {\n from?: string;\n to?: string;\n limit: number;\n ascending: boolean;\n activityType?: number;\n}\n\nexport interface NativeStatisticsQueryOptions {\n type: string;\n unit: string;\n from?: string;\n to?: string;\n options: number;\n}\n\nexport interface NativeStatisticsCollectionQueryOptions extends NativeStatisticsQueryOptions {\n year: number;\n month: number;\n day: number;\n hour: number;\n minute: number;\n second: number;\n}\n\nexport interface NativeAnchoredQueryOptions {\n type: string;\n unit?: string;\n from?: string;\n to?: string;\n limit: number;\n anchor?: string;\n}\n\nexport interface NativeQuantitySampleInput {\n type: string;\n unit: string;\n value: number;\n startDate: string;\n endDate: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeCategorySampleInput {\n type: string;\n value: number;\n startDate: string;\n endDate: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeWorkoutInput {\n activityType: number;\n startDate: string;\n endDate: string;\n energyBurned?: number;\n energyBurnedUnit?: string;\n distance?: number;\n distanceUnit?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeDeleteObjectsOptions {\n uuid?: string;\n type?: string;\n from?: string;\n to?: string;\n}\n\nexport interface NativeQuantitySample {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n value: number;\n unit: string;\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeCategorySample {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n value: number;\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeWorkoutSample {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n duration: number;\n workoutActivityType: number;\n totalEnergyBurned?: number;\n totalEnergyBurnedUnit?: string;\n totalDistance?: number;\n totalDistanceUnit?: string;\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeDeletedSample {\n uuid: string;\n type?: string;\n}\n\nexport interface NativeStatistics {\n startDate: string;\n endDate: string;\n unit: string;\n sum?: number;\n min?: number;\n max?: number;\n average?: number;\n mostRecent?: number;\n}\n\nexport interface NativeAnchoredQueryResult {\n added: NativeQuantitySample[];\n deleted: NativeDeletedSample[];\n anchor?: string;\n}\n\nexport interface NativeDateRangeQueryOptions {\n from?: string;\n to?: string;\n limit: number;\n ascending: boolean;\n}\n\nexport interface NativeElectrocardiogramQueryOptions extends NativeDateRangeQueryOptions {\n includeVoltage: boolean;\n}\n\nexport interface NativeActivitySummaryQueryOptions {\n from?: string;\n to?: string;\n}\n\nexport interface NativeClinicalRecordQueryOptions extends NativeDateRangeQueryOptions {\n type: string;\n}\n\nexport interface NativeWorkoutRouteQueryOptions {\n workoutUUID: string;\n}\n\nexport interface NativeElectrocardiogramVoltageMeasurement {\n timeSinceSampleStart: number;\n voltage: number;\n unit: string;\n}\n\nexport interface NativeElectrocardiogramSample {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n classification: number;\n symptomsStatus: number;\n averageHeartRate?: number;\n samplingFrequency?: number;\n numberOfVoltageMeasurements: number;\n voltageMeasurements?: NativeElectrocardiogramVoltageMeasurement[];\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeAudiogramSensitivityPoint {\n frequency: number;\n leftEarSensitivity?: number;\n rightEarSensitivity?: number;\n}\n\nexport interface NativeAudiogramSample {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n sensitivityPoints: NativeAudiogramSensitivityPoint[];\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeActivitySummary {\n date: string;\n activeEnergyBurned: number;\n appleExerciseTime: number;\n appleStandHours: number;\n activeEnergyBurnedGoal: number;\n appleExerciseTimeGoal: number;\n appleStandHoursGoal: number;\n appleMoveTime?: number;\n appleMoveTimeGoal?: number;\n}\n\nexport interface NativeClinicalRecord {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n displayName: string;\n fhirResourceType?: string;\n fhirJson?: string;\n sourceName?: string;\n sourceId?: string;\n}\n\nexport interface NativeWorkoutRouteLocation {\n latitude: number;\n longitude: number;\n altitude?: number;\n timestamp: string;\n speed?: number;\n course?: number;\n}\n\nexport interface NativeWorkoutRoute {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n locations: NativeWorkoutRouteLocation[];\n}\n\nexport interface NativeCorrelationQueryOptions extends NativeDateRangeQueryOptions {\n type: string;\n}\n\nexport interface NativeCorrelationInput {\n type: string;\n startDate: string;\n endDate: string;\n objects: NativeQuantitySampleInput[];\n metadata?: Record<string, string>;\n}\n\nexport interface NativeHeartbeatSeriesQueryOptions extends NativeDateRangeQueryOptions {\n includeBeats: boolean;\n}\n\nexport interface NativeCorrelation {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n objects: NativeQuantitySample[];\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface NativeHeartbeat {\n timeSinceSeriesStart: number;\n precededByGap: boolean;\n}\n\nexport interface NativeHeartbeatSeriesSample {\n uuid: string;\n type: string;\n startDate: string;\n endDate: string;\n count: number;\n beats?: NativeHeartbeat[];\n sourceName?: string;\n sourceId?: string;\n metadata?: Record<string, string>;\n}\n"]}
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "platforms": ["apple", "android"],
3
3
  "apple": {
4
- "modules": ["ExpoHealthKitModule"]
4
+ "modules": ["ExpoHealthKitModule"],
5
+ "appDelegateSubscribers": ["HealthKitAppDelegateSubscriber"]
5
6
  },
6
7
  "android": {
7
8
  "modules": ["expo.modules.healthkit.ExpoHealthKitModule"]
@@ -9,15 +9,13 @@ public class ExpoHealthKitModule: Module {
9
9
  Events("onUpdate")
10
10
 
11
11
  OnCreate {
12
- self.service.onUpdate = { type in
13
- self.sendEvent("onUpdate", [
14
- "type": type
15
- ])
16
- }
12
+ // Fallback for apps that don't run the Expo AppDelegate subscriber.
13
+ HealthKitObserverCenter.shared.restore()
17
14
  }
18
15
 
19
16
  OnDestroy {
20
- self.service.stopObserving()
17
+ // Observer queries intentionally survive module teardown (JS reload).
18
+ HealthKitObserverCenter.shared.setEmitter(nil)
21
19
  }
22
20
 
23
21
  Function("isHealthDataAvailable") {
@@ -141,15 +139,30 @@ public class ExpoHealthKitModule: Module {
141
139
  }
142
140
 
143
141
  AsyncFunction("observeTypes") { (types: [String]) in
144
- try self.service.startObserving(types)
142
+ try HealthKitObserverCenter.shared.observe(types)
145
143
  }
146
144
 
147
145
  AsyncFunction("clearObserverQueries") {
148
- self.service.stopObserving()
146
+ HealthKitObserverCenter.shared.clear()
147
+ }
148
+
149
+ AsyncFunction("getObservedTypes") {
150
+ HealthKitObserverCenter.shared.observedTypes()
151
+ }
152
+
153
+ AsyncFunction("completeUpdate") { (token: String) in
154
+ HealthKitObserverCenter.shared.completeUpdate(token: token)
155
+ }
156
+
157
+ OnStartObserving("onUpdate") {
158
+ HealthKitObserverCenter.shared.setEmitter { [weak self] event in
159
+ self?.sendEvent("onUpdate", event)
160
+ }
149
161
  }
150
162
 
151
163
  OnStopObserving("onUpdate") {
152
- self.service.stopObserving()
164
+ // Keep queries alive; only detach the JS sink so deliveries queue again.
165
+ HealthKitObserverCenter.shared.setEmitter(nil)
153
166
  }
154
167
  }
155
168
  }
@@ -0,0 +1,14 @@
1
+ import ExpoModulesCore
2
+
3
+ /// Re-registers persisted HealthKit observer queries as soon as the app process
4
+ /// starts, before the JS runtime boots. Required for background delivery to work
5
+ /// when iOS relaunches a killed app.
6
+ public final class HealthKitAppDelegateSubscriber: ExpoAppDelegateSubscriber {
7
+ public func application(
8
+ _ application: UIApplication,
9
+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
10
+ ) -> Bool {
11
+ HealthKitObserverCenter.shared.restore()
12
+ return true
13
+ }
14
+ }
@@ -0,0 +1,199 @@
1
+ import HealthKit
2
+ import OSLog
3
+ import UIKit
4
+
5
+ private let observerLog = Logger(subsystem: "expo-healthkit", category: "observer")
6
+
7
+ /// Process-wide owner of `HKObserverQuery`s.
8
+ ///
9
+ /// Lives outside the Expo module instance so observers survive JS reloads and can be
10
+ /// re-registered from `application(_:didFinishLaunchingWithOptions:)` before the
11
+ /// JS runtime exists. Apple requires observer queries to be running at launch for
12
+ /// background delivery to wake a killed app.
13
+ ///
14
+ /// Each delivery is handed to JS as `{ type, token }`. The HealthKit completion handler
15
+ /// (plus a `UIBackgroundTask`) is held until JS calls `completeUpdate(token)` or the
16
+ /// timeout fires. Events that arrive before JS subscribes are queued and flushed when
17
+ /// the module starts observing `onUpdate`.
18
+ internal final class HealthKitObserverCenter {
19
+ static let shared = HealthKitObserverCenter()
20
+
21
+ private static let observedTypesKey = "expo.healthkit.observedTypes"
22
+ /// iOS grants roughly 30 seconds of background execution per delivery.
23
+ private static let completionTimeout: TimeInterval = 25
24
+ private static let maxQueuedEvents = 64
25
+
26
+ private struct PendingUpdate {
27
+ let handler: HKObserverQueryCompletionHandler
28
+ let backgroundTask: UIBackgroundTaskIdentifier
29
+ let timeout: DispatchWorkItem
30
+ }
31
+
32
+ private let store = HKHealthStore()
33
+ private let queue = DispatchQueue(label: "expo.healthkit.observer-center")
34
+
35
+ private var queries: [String: HKObserverQuery] = [:]
36
+ private var pending: [String: PendingUpdate] = [:]
37
+ private var queuedEvents: [[String: Any]] = []
38
+ private var emitter: (([String: Any]) -> Void)?
39
+
40
+ private init() {}
41
+
42
+ // MARK: - Public API
43
+
44
+ /// Replaces the observed set, persists it, and (re)starts queries.
45
+ func observe(_ identifiers: [String]) throws {
46
+ guard HKHealthStore.isHealthDataAvailable() else {
47
+ throw HealthUnavailableException()
48
+ }
49
+ let sampleTypes = try identifiers.map { ($0, try HealthKitIdentifiers.sampleType(for: $0)) }
50
+
51
+ queue.sync {
52
+ UserDefaults.standard.set(identifiers, forKey: Self.observedTypesKey)
53
+ // Same set already running (e.g. restored at launch): don't tear down and
54
+ // re-execute, which would make HealthKit fire every observer again.
55
+ if Set(identifiers) == Set(queries.keys) {
56
+ observerLog.notice("observe: \(identifiers.count) type(s) already running, skipping restart")
57
+ return
58
+ }
59
+ stopAllQueriesLocked()
60
+ for (identifier, sampleType) in sampleTypes {
61
+ startQueryLocked(identifier: identifier, sampleType: sampleType)
62
+ }
63
+ }
64
+ }
65
+
66
+ /// Stops all queries and forgets the persisted set.
67
+ func clear() {
68
+ queue.sync {
69
+ stopAllQueriesLocked()
70
+ UserDefaults.standard.removeObject(forKey: Self.observedTypesKey)
71
+ }
72
+ }
73
+
74
+ func observedTypes() -> [String] {
75
+ UserDefaults.standard.stringArray(forKey: Self.observedTypesKey) ?? []
76
+ }
77
+
78
+ /// Re-registers persisted observers. Safe to call repeatedly; already-running
79
+ /// queries are left alone. Called from the AppDelegate subscriber at launch and
80
+ /// from the module's `OnCreate` as a fallback.
81
+ func restore() {
82
+ guard HKHealthStore.isHealthDataAvailable() else {
83
+ return
84
+ }
85
+ let identifiers = observedTypes()
86
+ guard !identifiers.isEmpty else {
87
+ return
88
+ }
89
+
90
+ queue.sync {
91
+ var restored = 0
92
+ for identifier in identifiers where queries[identifier] == nil {
93
+ guard let sampleType = try? HealthKitIdentifiers.sampleType(for: identifier) else {
94
+ continue
95
+ }
96
+ startQueryLocked(identifier: identifier, sampleType: sampleType)
97
+ restored += 1
98
+ }
99
+ observerLog.notice("restore: re-registered \(restored) observer(s), emitter=\(self.emitter != nil)")
100
+ }
101
+ }
102
+
103
+ /// Called by JS once its listeners have finished processing a delivery.
104
+ /// Unknown or already-completed tokens are ignored.
105
+ func completeUpdate(token: String) {
106
+ queue.sync {
107
+ finishLocked(token: token, reason: "js")
108
+ }
109
+ }
110
+
111
+ /// Wires (or unwires) the JS event sink. Setting a non-nil emitter flushes
112
+ /// any deliveries queued while JS was not listening.
113
+ func setEmitter(_ emitter: (([String: Any]) -> Void)?) {
114
+ queue.sync {
115
+ self.emitter = emitter
116
+ guard let emitter else {
117
+ return
118
+ }
119
+ let events = queuedEvents
120
+ queuedEvents.removeAll()
121
+ observerLog.notice("emitter attached, flushing \(events.count) queued event(s)")
122
+ for event in events {
123
+ emitter(event)
124
+ }
125
+ }
126
+ }
127
+
128
+ // MARK: - Internals (must run on `queue`)
129
+
130
+ private func startQueryLocked(identifier: String, sampleType: HKSampleType) {
131
+ let query = HKObserverQuery(sampleType: sampleType, predicate: nil) { [weak self] _, completionHandler, error in
132
+ guard let self else {
133
+ completionHandler()
134
+ return
135
+ }
136
+ if error != nil {
137
+ completionHandler()
138
+ return
139
+ }
140
+ self.handleDelivery(identifier: identifier, completionHandler: completionHandler)
141
+ }
142
+ queries[identifier] = query
143
+ store.execute(query)
144
+ }
145
+
146
+ private func stopAllQueriesLocked() {
147
+ for query in queries.values {
148
+ store.stop(query)
149
+ }
150
+ queries.removeAll()
151
+ }
152
+
153
+ private func handleDelivery(identifier: String, completionHandler: @escaping HKObserverQueryCompletionHandler) {
154
+ let token = UUID().uuidString
155
+
156
+ let backgroundTask = UIApplication.shared.beginBackgroundTask(withName: "expo-healthkit.\(identifier)") { [weak self] in
157
+ self?.queue.async {
158
+ self?.finishLocked(token: token, reason: "background-task-expired")
159
+ }
160
+ }
161
+
162
+ let timeout = DispatchWorkItem { [weak self] in
163
+ self?.finishLocked(token: token, reason: "timeout")
164
+ }
165
+
166
+ queue.async {
167
+ self.pending[token] = PendingUpdate(
168
+ handler: completionHandler,
169
+ backgroundTask: backgroundTask,
170
+ timeout: timeout
171
+ )
172
+ self.queue.asyncAfter(deadline: .now() + Self.completionTimeout, execute: timeout)
173
+
174
+ let event: [String: Any] = ["type": identifier, "token": token]
175
+ let appState = UIApplication.shared.applicationState.rawValue
176
+ observerLog.notice("delivery \(token, privacy: .public) for \(identifier, privacy: .public) appState=\(appState) emitter=\(self.emitter != nil)")
177
+ if let emitter = self.emitter {
178
+ emitter(event)
179
+ } else {
180
+ if self.queuedEvents.count >= Self.maxQueuedEvents {
181
+ self.queuedEvents.removeFirst()
182
+ }
183
+ self.queuedEvents.append(event)
184
+ }
185
+ }
186
+ }
187
+
188
+ private func finishLocked(token: String, reason: String) {
189
+ guard let update = pending.removeValue(forKey: token) else {
190
+ return
191
+ }
192
+ observerLog.notice("complete \(token, privacy: .public) reason=\(reason, privacy: .public)")
193
+ update.timeout.cancel()
194
+ update.handler()
195
+ if update.backgroundTask != .invalid {
196
+ UIApplication.shared.endBackgroundTask(update.backgroundTask)
197
+ }
198
+ }
199
+ }
@@ -2,9 +2,6 @@ import HealthKit
2
2
 
3
3
  internal final class HealthKitService {
4
4
  let store = HKHealthStore()
5
- var onUpdate: ((String) -> Void)?
6
-
7
- private var observerQueries: [String: HKObserverQuery] = [:]
8
5
 
9
6
  func executeQuery(_ query: HKQuery) throws {
10
7
  try catchingHealthKit {
@@ -432,31 +429,6 @@ internal final class HealthKitService {
432
429
  }
433
430
  }
434
431
 
435
- func startObserving(_ identifiers: [String]) throws {
436
- try ensureAvailable()
437
- stopObserving()
438
-
439
- for identifier in identifiers {
440
- let sampleType = try HealthKitIdentifiers.sampleType(for: identifier)
441
- let query = HKObserverQuery(sampleType: sampleType, predicate: nil) { [weak self] _, completionHandler, error in
442
- defer { completionHandler() }
443
- guard error == nil else {
444
- return
445
- }
446
- self?.onUpdate?(identifier)
447
- }
448
- observerQueries[identifier] = query
449
- try executeQuery(query)
450
- }
451
- }
452
-
453
- func stopObserving() {
454
- for query in observerQueries.values {
455
- store.stop(query)
456
- }
457
- observerQueries.removeAll()
458
- }
459
-
460
432
  func ensureAvailable() throws {
461
433
  if !isAvailable() {
462
434
  throw HealthUnavailableException()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appeeky/expo-healthkit",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Apple HealthKit and Android Health Connect for Expo. One identifier-based JavaScript API on iOS and Android.",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -1,7 +1,6 @@
1
1
  import { NativeModule, requireNativeModule } from 'expo';
2
2
 
3
3
  import { HealthKitError } from './errors';
4
-
5
4
  import type {
6
5
  ExpoHealthKitModuleEvents,
7
6
  NativeActivitySummary,
@@ -78,6 +77,8 @@ declare class ExpoHealthKitModule extends NativeModule<ExpoHealthKitModuleEvents
78
77
  disableAllBackgroundDelivery(): Promise<boolean>;
79
78
  observeTypes(types: string[]): Promise<void>;
80
79
  clearObserverQueries(): Promise<void>;
80
+ getObservedTypes(): Promise<string[]>;
81
+ completeUpdate(token: string): Promise<void>;
81
82
  }
82
83
 
83
84
  const nativeModule = requireNativeModule<ExpoHealthKitModule>('ExpoHealthKit');
@@ -135,6 +135,12 @@ class ExpoHealthKitModule extends NativeModule<ExpoHealthKitModuleEvents> {
135
135
  async clearObserverQueries(): Promise<void> {
136
136
  return unavailable();
137
137
  }
138
+
139
+ async getObservedTypes(): Promise<string[]> {
140
+ return [];
141
+ }
142
+
143
+ async completeUpdate(): Promise<void> {}
138
144
  }
139
145
 
140
146
  export default registerWebModule(ExpoHealthKitModule, 'ExpoHealthKitModule');
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { useEvent } from 'expo';
1
+ import { useEffect, useState } from 'react';
2
2
  import { Platform } from 'react-native';
3
3
 
4
4
  import ExpoHealthKitModule from './ExpoHealthKitModule';
@@ -47,8 +47,11 @@ import type {
47
47
  ActivitySummaryQueryOptions,
48
48
  AudiogramSample,
49
49
  DateRangeQueryOptions,
50
+ HealthUpdateEvent,
51
+ HealthUpdateListener,
50
52
  HeartbeatSeriesQueryOptions,
51
53
  HeartbeatSeriesSample,
54
+ NativeHealthUpdateEvent,
52
55
  QuantityQueryOptions,
53
56
  QuantitySample,
54
57
  SampleQueryOptions,
@@ -492,12 +495,75 @@ export async function clearObservers(): Promise<void> {
492
495
  await ExpoHealthKitModule.clearObserverQueries();
493
496
  }
494
497
 
495
- export function addUpdateListener(listener: (event: { type: string }) => void): { remove(): void } {
496
- return ExpoHealthKitModule.addListener('onUpdate', listener);
498
+ /**
499
+ * Types currently registered with `observe`. Persisted natively on iOS, so it
500
+ * reflects observers re-registered at cold launch too.
501
+ */
502
+ export async function getObservedTypes(): Promise<string[]> {
503
+ if (!isAvailable()) return [];
504
+ return ExpoHealthKitModule.getObservedTypes();
497
505
  }
498
506
 
499
- export function useHealthKitUpdates() {
500
- return useEvent(ExpoHealthKitModule, 'onUpdate');
507
+ const updateListeners = new Set<HealthUpdateListener>();
508
+ let nativeUpdateSubscription: { remove(): void } | null = null;
509
+
510
+ function runListener(listener: HealthUpdateListener, event: HealthUpdateEvent): Promise<void> {
511
+ try {
512
+ return Promise.resolve(listener(event));
513
+ } catch (error) {
514
+ return Promise.reject(error);
515
+ }
516
+ }
517
+
518
+ function handleNativeUpdate(nativeEvent: NativeHealthUpdateEvent): void {
519
+ const { token, type } = nativeEvent;
520
+ const event: HealthUpdateEvent = { type };
521
+ const results = [...updateListeners].map((listener) => runListener(listener, event));
522
+
523
+ Promise.allSettled(results).then((settled) => {
524
+ if (__DEV__) {
525
+ for (const result of settled) {
526
+ if (result.status === 'rejected') {
527
+ console.warn('[expo-healthkit] update listener threw', result.reason);
528
+ }
529
+ }
530
+ }
531
+ if (token) {
532
+ ExpoHealthKitModule.completeUpdate(token).catch(() => {});
533
+ }
534
+ });
535
+ }
536
+
537
+ /**
538
+ * Subscribe to observer / background-delivery updates. Return a promise from the
539
+ * listener to hold the iOS completion handler until your async work is done.
540
+ */
541
+ export function addUpdateListener(listener: HealthUpdateListener): { remove(): void } {
542
+ updateListeners.add(listener);
543
+ if (!nativeUpdateSubscription) {
544
+ nativeUpdateSubscription = ExpoHealthKitModule.addListener('onUpdate', handleNativeUpdate);
545
+ }
546
+
547
+ return {
548
+ remove() {
549
+ updateListeners.delete(listener);
550
+ if (updateListeners.size === 0 && nativeUpdateSubscription) {
551
+ nativeUpdateSubscription.remove();
552
+ nativeUpdateSubscription = null;
553
+ }
554
+ },
555
+ };
556
+ }
557
+
558
+ export function useHealthKitUpdates(): HealthUpdateEvent | null {
559
+ const [event, setEvent] = useState<HealthUpdateEvent | null>(null);
560
+
561
+ useEffect(() => {
562
+ const subscription = addUpdateListener((next) => setEvent(next));
563
+ return () => subscription.remove();
564
+ }, []);
565
+
566
+ return event;
501
567
  }
502
568
 
503
569
  const HealthKit = {
@@ -533,6 +599,7 @@ const HealthKit = {
533
599
  disableAllBackgroundDelivery,
534
600
  observe,
535
601
  clearObservers,
602
+ getObservedTypes,
536
603
  addUpdateListener,
537
604
  useHealthKitUpdates,
538
605
  QuantityType,
package/src/types.ts CHANGED
@@ -320,8 +320,20 @@ export interface HealthUpdateEvent {
320
320
  type: string;
321
321
  }
322
322
 
323
+ /**
324
+ * Return a promise to keep the app alive (and the HealthKit completion handler
325
+ * pending) until your async work finishes. Resolves are awaited across all
326
+ * listeners; native times out after ~25s regardless.
327
+ */
328
+ export type HealthUpdateListener = (event: HealthUpdateEvent) => void | Promise<void>;
329
+
330
+ export interface NativeHealthUpdateEvent extends HealthUpdateEvent {
331
+ /** Present on iOS. Passed back via `completeUpdate` once listeners finish. */
332
+ token?: string;
333
+ }
334
+
323
335
  export type ExpoHealthKitModuleEvents = {
324
- onUpdate: (event: HealthUpdateEvent) => void;
336
+ onUpdate: (event: NativeHealthUpdateEvent) => void;
325
337
  };
326
338
 
327
339
  export interface NativeAuthorizationOptions {