@tryterra/react-native 2.1.0 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +31 -0
  2. package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/Conversions.kt +103 -14
  3. package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/ReadConversions.kt +250 -0
  4. package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/TerraBridgeOpsImpl.kt +47 -5
  5. package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/TerraBridgeStreamsImpl.kt +1 -3
  6. package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/generated/BridgeOps.kt +89 -0
  7. package/android/src/bridgeCore/kotlin/co/tryterra/sdk/bridge/generated/BridgeTypes.kt +672 -0
  8. package/docs/availability.md +154 -4
  9. package/frameworks/TerraSDK.xcframework/Info.plist +5 -5
  10. package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Info.plist +0 -0
  11. package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.abi.json +1385 -226
  12. package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.package.swiftinterface +37 -1
  13. package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.private.swiftinterface +37 -1
  14. package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  15. package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios.swiftinterface +37 -1
  16. package/frameworks/TerraSDK.xcframework/ios-arm64/TerraSDK.framework/TerraSDK +0 -0
  17. package/frameworks/TerraSDK.xcframework/ios-arm64/dSYMs/TerraSDK.framework.dSYM/Contents/Info.plist +2 -2
  18. package/frameworks/TerraSDK.xcframework/ios-arm64/dSYMs/TerraSDK.framework.dSYM/Contents/Resources/DWARF/TerraSDK +0 -0
  19. package/frameworks/TerraSDK.xcframework/ios-arm64/dSYMs/TerraSDK.framework.dSYM/Contents/Resources/Relocations/aarch64/TerraSDK.yml +6589 -6468
  20. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Info.plist +0 -0
  21. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.abi.json +1385 -226
  22. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.package.swiftinterface +37 -1
  23. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +37 -1
  24. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  25. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/arm64-apple-ios-simulator.swiftinterface +37 -1
  26. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.abi.json +1385 -226
  27. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.package.swiftinterface +37 -1
  28. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +37 -1
  29. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  30. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/Modules/TerraSDK.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +37 -1
  31. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/TerraSDK +0 -0
  32. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/TerraSDK.framework/_CodeSignature/CodeResources +21 -21
  33. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/TerraSDK.framework.dSYM/Contents/Info.plist +2 -2
  34. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/TerraSDK.framework.dSYM/Contents/Resources/DWARF/TerraSDK +0 -0
  35. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/TerraSDK.framework.dSYM/Contents/Resources/Relocations/aarch64/TerraSDK.yml +6590 -6469
  36. package/frameworks/TerraSDK.xcframework/ios-arm64_x86_64-simulator/dSYMs/TerraSDK.framework.dSYM/Contents/Resources/Relocations/x86_64/TerraSDK.yml +6508 -6387
  37. package/ios/TerraBridgeCore/Conversions+Reads.swift +259 -0
  38. package/ios/TerraBridgeCore/Conversions.swift +129 -2
  39. package/ios/TerraBridgeCore/Generated/BridgeOps.swift +172 -0
  40. package/ios/TerraBridgeCore/Generated/BridgeTypes.swift +734 -1
  41. package/ios/TerraBridgeCore/TerraBridgeOpsImpl.swift +64 -0
  42. package/lib/Terra.d.ts +74 -5
  43. package/lib/Terra.js +69 -13
  44. package/lib/generated/client.d.ts +37 -1
  45. package/lib/generated/client.js +60 -0
  46. package/lib/generated/codecs.d.ts +85 -1
  47. package/lib/generated/codecs.js +710 -2
  48. package/lib/generated/ops.d.ts +1 -1
  49. package/lib/generated/ops.js +24 -0
  50. package/lib/generated/types.d.ts +314 -1
  51. package/lib/generated/types.js +133 -1
  52. package/lib/index.d.ts +1 -1
  53. package/package.json +3 -3
  54. package/src/Terra.ts +146 -16
  55. package/src/generated/client.ts +74 -2
  56. package/src/generated/codecs.ts +705 -3
  57. package/src/generated/ops.ts +36 -0
  58. package/src/generated/types.ts +556 -1
  59. package/src/index.ts +2 -0
@@ -4,7 +4,7 @@
4
4
  * `availableOn` is read by the availability test and by the facade, which is what makes an op
5
5
  * missing from a platform a typed absence rather than a runtime surprise.
6
6
  */
7
- export type OpId = "client.attach" | "client.connect" | "client.connections" | "client.disconnect" | "token.setProviderPresent" | "token.resolve" | "token.reject" | "permissions.request" | "permissions.status" | "permissions.writeStatus" | "permissions.requested" | "permissions.statuses" | "permissions.backgroundReadStatus" | "permissions.historyReadStatus" | "diagnostics.state" | "diagnostics.lastDelivery" | "diagnostics.report" | "diagnostics.send" | "background.isRegistered" | "background.cancel" | "body.heartRate" | "body.logHeartRate" | "body.log" | "body.delete" | "daily.steps" | "daily.log" | "daily.delete" | "sleep.segments" | "sleep.log" | "sleep.delete" | "activity.workouts" | "activity.log" | "activity.delete" | "nutrition.log" | "nutrition.delete" | "plannedWorkouts.planned" | "plannedWorkouts.markComplete" | "plannedWorkouts.delete" | "plannedWorkouts.schedulingStatus" | "plannedWorkouts.requestScheduling";
7
+ export type OpId = "client.attach" | "client.connect" | "client.connections" | "client.availability" | "client.disconnect" | "token.setProviderPresent" | "token.resolve" | "token.reject" | "permissions.request" | "permissions.status" | "permissions.writeStatus" | "permissions.requested" | "permissions.statuses" | "permissions.backgroundReadStatus" | "permissions.historyReadStatus" | "diagnostics.state" | "diagnostics.lastDelivery" | "diagnostics.report" | "diagnostics.send" | "background.isRegistered" | "background.cancel" | "body.heartRate" | "body.restingHeartRate" | "body.readings" | "body.logHeartRate" | "body.log" | "body.delete" | "daily.steps" | "daily.totals" | "daily.intraday" | "daily.log" | "daily.delete" | "sleep.segments" | "sleep.log" | "sleep.delete" | "activity.workouts" | "activity.routes" | "activity.intensity" | "activity.log" | "activity.delete" | "nutrition.quantities" | "nutrition.log" | "nutrition.delete" | "nutrition.hydration" | "menstruation.flow" | "menstruation.events" | "athlete.profile" | "plannedWorkouts.planned" | "plannedWorkouts.markComplete" | "plannedWorkouts.delete" | "plannedWorkouts.schedulingStatus" | "plannedWorkouts.requestScheduling";
8
8
  export declare const opIds: readonly OpId[];
9
9
  export declare const availableOn: Readonly<Record<OpId, readonly string[]>>;
10
10
  export type StreamId = "diagnostics.events" | "body.changes" | "daily.changes" | "sleep.changes" | "activity.changes" | "bridge.tokenRequest";
@@ -7,6 +7,7 @@ exports.opIds = [
7
7
  "client.attach",
8
8
  "client.connect",
9
9
  "client.connections",
10
+ "client.availability",
10
11
  "client.disconnect",
11
12
  "token.setProviderPresent",
12
13
  "token.resolve",
@@ -25,20 +26,31 @@ exports.opIds = [
25
26
  "background.isRegistered",
26
27
  "background.cancel",
27
28
  "body.heartRate",
29
+ "body.restingHeartRate",
30
+ "body.readings",
28
31
  "body.logHeartRate",
29
32
  "body.log",
30
33
  "body.delete",
31
34
  "daily.steps",
35
+ "daily.totals",
36
+ "daily.intraday",
32
37
  "daily.log",
33
38
  "daily.delete",
34
39
  "sleep.segments",
35
40
  "sleep.log",
36
41
  "sleep.delete",
37
42
  "activity.workouts",
43
+ "activity.routes",
44
+ "activity.intensity",
38
45
  "activity.log",
39
46
  "activity.delete",
47
+ "nutrition.quantities",
40
48
  "nutrition.log",
41
49
  "nutrition.delete",
50
+ "nutrition.hydration",
51
+ "menstruation.flow",
52
+ "menstruation.events",
53
+ "athlete.profile",
42
54
  "plannedWorkouts.planned",
43
55
  "plannedWorkouts.markComplete",
44
56
  "plannedWorkouts.delete",
@@ -49,6 +61,7 @@ exports.availableOn = {
49
61
  "client.attach": ["ios", "android"],
50
62
  "client.connect": ["ios", "android"],
51
63
  "client.connections": ["ios", "android"],
64
+ "client.availability": ["ios", "android"],
52
65
  "client.disconnect": ["ios", "android"],
53
66
  "token.setProviderPresent": ["ios", "android"],
54
67
  "token.resolve": ["ios", "android"],
@@ -67,20 +80,31 @@ exports.availableOn = {
67
80
  "background.isRegistered": ["ios", "android"],
68
81
  "background.cancel": ["android"],
69
82
  "body.heartRate": ["ios", "android"],
83
+ "body.restingHeartRate": ["ios", "android"],
84
+ "body.readings": ["ios", "android"],
70
85
  "body.logHeartRate": ["ios", "android"],
71
86
  "body.log": ["ios", "android"],
72
87
  "body.delete": ["ios", "android"],
73
88
  "daily.steps": ["ios", "android"],
89
+ "daily.totals": ["ios", "android"],
90
+ "daily.intraday": ["ios", "android"],
74
91
  "daily.log": ["ios", "android"],
75
92
  "daily.delete": ["ios", "android"],
76
93
  "sleep.segments": ["ios", "android"],
77
94
  "sleep.log": ["ios", "android"],
78
95
  "sleep.delete": ["ios", "android"],
79
96
  "activity.workouts": ["ios", "android"],
97
+ "activity.routes": ["ios", "android"],
98
+ "activity.intensity": ["ios", "android"],
80
99
  "activity.log": ["ios", "android"],
81
100
  "activity.delete": ["ios", "android"],
101
+ "nutrition.quantities": ["ios", "android"],
82
102
  "nutrition.log": ["ios", "android"],
83
103
  "nutrition.delete": ["ios", "android"],
104
+ "nutrition.hydration": ["ios", "android"],
105
+ "menstruation.flow": ["ios", "android"],
106
+ "menstruation.events": ["ios", "android"],
107
+ "athlete.profile": ["ios"],
84
108
  "plannedWorkouts.planned": ["ios"],
85
109
  "plannedWorkouts.markComplete": ["ios"],
86
110
  "plannedWorkouts.delete": ["ios"],
@@ -2,12 +2,39 @@
2
2
  export type Source = "health" | "samsungHealth";
3
3
  export declare const SourceValues: readonly Source[];
4
4
  /** The unit permissions are asked for and changes are reported against. */
5
- export type DataCategory = "activity" | "body" | "daily" | "sleep" | "nutrition";
5
+ export type DataCategory = "activity" | "body" | "daily" | "sleep" | "nutrition" | "menstruation" | "athlete";
6
6
  export declare const DataCategoryValues: readonly DataCategory[];
7
7
  export type PermissionStatus = "granted" | "denied" | "notDetermined" | "notDisclosed" | "unsupported" | "unavailable";
8
8
  export declare const PermissionStatusValues: readonly PermissionStatus[];
9
9
  export type MotionContext = "unknown" | "sedentary" | "active";
10
10
  export declare const MotionContextValues: readonly MotionContext[];
11
+ /**
12
+ * On both platforms, wire names strip HKQuantityTypeIdentifierDietary from HealthKit
13
+ * identifiers and lowercase the first letter. Units: kcal for energyConsumed; grams for
14
+ * protein, carbohydrates, the four fats, sugar and fiber; milligrams for everything else,
15
+ * never micrograms.
16
+ */
17
+ export type Nutrient = "energyConsumed" | "protein" | "carbohydrates" | "fatTotal" | "fatSaturated" | "fatMonounsaturated" | "fatPolyunsaturated" | "sugar" | "fiber" | "cholesterol" | "sodium" | "potassium" | "calcium" | "iron" | "magnesium" | "zinc" | "phosphorus" | "iodine" | "manganese" | "molybdenum" | "selenium" | "copper" | "chromium" | "chloride" | "caffeine" | "vitaminA" | "vitaminC" | "vitaminD" | "vitaminE" | "vitaminK" | "vitaminB6" | "vitaminB12" | "thiamin" | "riboflavin" | "niacin" | "folate" | "biotin" | "pantothenicAcid";
18
+ export declare const NutrientValues: readonly Nutrient[];
19
+ /**
20
+ * Which meal a quantity was logged against. unknown is the store's explicit answer, not an
21
+ * absence: HealthKit has no meal type at all, so every iOS quantity is unknown.
22
+ */
23
+ export type MealType = "breakfast" | "lunch" | "dinner" | "snack" | "unknown";
24
+ export declare const MealTypeValues: readonly MealType[];
25
+ /** How heavy a logged day's flow was. */
26
+ export type MenstruationFlow = "unspecified" | "light" | "medium" | "heavy" | "none";
27
+ export declare const MenstruationFlowValues: readonly MenstruationFlow[];
28
+ /** Available on ios only. */
29
+ export type BiologicalSex = "female" | "male" | "other" | "notSet";
30
+ export declare const BiologicalSexValues: readonly BiologicalSex[];
31
+ /**
32
+ * A move-time user's daily totals are minutes rather than active energy.
33
+ *
34
+ * Available on ios only.
35
+ */
36
+ export type ActivityMoveMode = "activeEnergy" | "appleMoveTime";
37
+ export declare const ActivityMoveModeValues: readonly ActivityMoveMode[];
11
38
  /**
12
39
  * Why background delivery is restricted. Android discloses which; Apple reports the state
13
40
  * without a reason.
@@ -34,6 +61,46 @@ export declare const FailureCodeValues: readonly FailureCode[];
34
61
  */
35
62
  export type WorkoutSchedulingStatus = "unsupported" | "notDetermined" | "denied" | "authorized";
36
63
  export declare const WorkoutSchedulingStatusValues: readonly WorkoutSchedulingStatus[];
64
+ /**
65
+ * distance* are metres, *EnergyBurned kilocalories, flightsClimbed a count, and
66
+ * appleExerciseTime minutes.
67
+ */
68
+ export type DayTotalMetric = "distanceWalkingRunning" | "distanceCycling" | "distanceSwimming" | "distanceWheelchair" | "activeEnergyBurned" | "basalEnergyBurned" | "flightsClimbed" | "appleExerciseTime";
69
+ export declare const DayTotalMetricValues: readonly DayTotalMetric[];
70
+ /** activeEnergy and basalEnergy are kilocalories, distance metres, floorsClimbed a count. */
71
+ export type IntradayMetric = "activeEnergy" | "basalEnergy" | "distance" | "floorsClimbed";
72
+ export declare const IntradayMetricValues: readonly IntradayMetric[];
73
+ /** speed is metres per second, power watts, cadence pedal revolutions per minute. */
74
+ export type WorkoutIntensityMetric = "speed" | "power" | "cadence";
75
+ export declare const WorkoutIntensityMetricValues: readonly WorkoutIntensityMetric[];
76
+ /**
77
+ * The body composition figure a measurement carries. weight and leanBodyMass are kilograms,
78
+ * height centimetres, bodyFatPercentage a fraction in 0..1, bmi dimensionless.
79
+ */
80
+ export type BodyMetric = "weight" | "height" | "bodyFatPercentage" | "leanBodyMass" | "bmi";
81
+ export declare const BodyMetricValues: readonly BodyMetric[];
82
+ /** The unit the writing app chose. Never converted on the device. */
83
+ export type BloodGlucoseUnit = "mg/dL" | "mmol/L";
84
+ export declare const BloodGlucoseUnitValues: readonly BloodGlucoseUnit[];
85
+ /** unknown is the store saying nothing about the meal, distinct from absent. */
86
+ export type GlucoseMealTime = "preprandial" | "postprandial" | "unknown";
87
+ export declare const GlucoseMealTimeValues: readonly GlucoseMealTime[];
88
+ /** interstitial is a continuous monitor. */
89
+ export type GlucoseSpecimen = "capillary" | "interstitial" | "plasma" | "serum" | "tears" | "wholeBlood" | "unknown";
90
+ export declare const GlucoseSpecimenValues: readonly GlucoseSpecimen[];
91
+ /**
92
+ * body and basal are absolute; wrist and skin are deltas from a baseline and routinely
93
+ * negative.
94
+ */
95
+ export type BodyTemperatureMetric = "body" | "basal" | "wrist" | "skin";
96
+ export declare const BodyTemperatureMetricValues: readonly BodyTemperatureMetric[];
97
+ /** HealthKit records SDNN only and Health Connect RMSSD only; they are never one series. */
98
+ export type HeartRateVariabilityMetric = "sdnn" | "rmssd";
99
+ export declare const HeartRateVariabilityMetricValues: readonly HeartRateVariabilityMetric[];
100
+ export type VO2MaxTestType = "maxExercise" | "predictedSubMaxExercise" | "predictedNonExercise";
101
+ export declare const VO2MaxTestTypeValues: readonly VO2MaxTestType[];
102
+ export type MenstrualEventKind = "intermenstrualBleeding" | "ovulationTest" | "cervicalMucus";
103
+ export declare const MenstrualEventKindValues: readonly MenstrualEventKind[];
37
104
  /**
38
105
  * The person a connect is for. A stored link is restored only for the person it was made for;
39
106
  * anybody else gets a fresh link. Never sent to Terra as identity.
@@ -123,6 +190,63 @@ export type StreamMessage = {
123
190
  } | {
124
191
  kind: "complete";
125
192
  };
193
+ /**
194
+ * What a BodyReading measured, with the unit fixed by the variant. Blood glucose alone keeps
195
+ * the writer's unit.
196
+ */
197
+ export type BodyReadingKind = {
198
+ type: "measurement";
199
+ metric: BodyMetric;
200
+ value: number;
201
+ } | {
202
+ type: "bloodPressure";
203
+ systolic: number;
204
+ diastolic: number;
205
+ } | {
206
+ type: "bloodGlucose";
207
+ value: number;
208
+ unit: BloodGlucoseUnit;
209
+ mealTime?: GlucoseMealTime | undefined;
210
+ specimen?: GlucoseSpecimen | undefined;
211
+ } | {
212
+ type: "oxygenSaturation";
213
+ fraction: number;
214
+ } | {
215
+ type: "temperature";
216
+ metric: BodyTemperatureMetric;
217
+ celsius: number;
218
+ } | {
219
+ type: "heartRateVariability";
220
+ metric: HeartRateVariabilityMetric;
221
+ milliseconds: number;
222
+ } | {
223
+ type: "respiratoryRate";
224
+ breathsPerMinute: number;
225
+ } | {
226
+ type: "vo2Max";
227
+ millilitresPerKilogramMinute: number;
228
+ testType?: VO2MaxTestType | undefined;
229
+ };
230
+ /**
231
+ * Apple's store is part of the OS, so it is there or the device cannot have it; Health Connect
232
+ * is an app a person can lack.
233
+ */
234
+ export type StoreAvailability = {
235
+ kind: "available";
236
+ } | {
237
+ kind: "unsupportedDevice";
238
+ } | {
239
+ kind: "providerAppMissing";
240
+ } | {
241
+ kind: "providerAppTooOld";
242
+ installed: string;
243
+ } | {
244
+ kind: "moduleMissing";
245
+ } | {
246
+ kind: "partnerPolicyMissing";
247
+ } | {
248
+ kind: "featureUnavailable";
249
+ };
126
250
  /** Who recorded a sample. The only stable handle an app has for filtering by app or device. */
127
251
  export interface SampleSource {
128
252
  readonly name: string;
@@ -192,6 +316,48 @@ export interface Workout {
192
316
  readonly source: SampleSource;
193
317
  readonly userEntered: boolean;
194
318
  readonly timeZone?: string | undefined;
319
+ /**
320
+ * ExerciseSessionRecord.title on Android; HKMetadataKeyWorkoutBrandName on Apple, which has no
321
+ * title field.
322
+ */
323
+ readonly title?: string | undefined;
324
+ }
325
+ /** Quantities of one meal share foodCorrelationId. */
326
+ export interface DietaryQuantity {
327
+ readonly id: string;
328
+ readonly nutrient: Nutrient;
329
+ readonly value: number;
330
+ readonly start: Date;
331
+ readonly end: Date;
332
+ readonly mealType: MealType;
333
+ readonly name?: string | undefined;
334
+ /**
335
+ * HealthKit's food correlation, absent for a loose quantity. Always set on Android, where it
336
+ * is the NutritionRecord's id - the id nutrition.delete takes for a meal this app logged.
337
+ */
338
+ readonly foodCorrelationId?: string | undefined;
339
+ readonly source: SampleSource;
340
+ readonly userEntered: boolean;
341
+ readonly timeZone?: string | undefined;
342
+ }
343
+ /** start and end are the local midnights of that day in timeZone. */
344
+ export interface MenstruationFlowDay {
345
+ readonly id: string;
346
+ readonly start: Date;
347
+ readonly end: Date;
348
+ readonly flow: MenstruationFlow;
349
+ readonly cycleStart: boolean;
350
+ readonly source: SampleSource;
351
+ readonly userEntered: boolean;
352
+ readonly timeZone?: string | undefined;
353
+ }
354
+ /** Available on ios only. */
355
+ export interface AthleteProfile {
356
+ readonly biologicalSex: BiologicalSex;
357
+ /** A calendar day, as HealthKit stores it, never an instant. */
358
+ readonly dateOfBirth?: string | undefined;
359
+ readonly wheelchairUse?: boolean | undefined;
360
+ readonly activityMoveMode?: ActivityMoveMode | undefined;
195
361
  }
196
362
  /** A day whose data changed. Carries no health value by construction. */
197
363
  export interface HealthChange {
@@ -446,6 +612,39 @@ export interface SleepSegmentList {
446
612
  export interface WorkoutList {
447
613
  readonly samples: readonly Workout[];
448
614
  }
615
+ export interface DietaryQuantityList {
616
+ readonly samples: readonly DietaryQuantity[];
617
+ }
618
+ export interface MenstruationFlowDayList {
619
+ readonly samples: readonly MenstruationFlowDay[];
620
+ }
621
+ /** A cycle event logged at an instant. */
622
+ export interface MenstrualEvent {
623
+ readonly id: string;
624
+ readonly kind: MenstrualEventKind;
625
+ readonly time: Date;
626
+ /**
627
+ * ovulationTest: negative, positive, high, indeterminate or luteinizingHormoneSurge.
628
+ * cervicalMucus: dry, sticky, creamy, watery, eggWhite or unusual. Absent for
629
+ * intermenstrualBleeding, which is a flag.
630
+ */
631
+ readonly value?: string | undefined;
632
+ /**
633
+ * The store's own record type, passed through: OvulationTestRecord on Android,
634
+ * HKCategoryTypeIdentifierOvulationTestResult on Apple.
635
+ */
636
+ readonly storeIdentifier: string;
637
+ readonly source: SampleSource;
638
+ readonly userEntered: boolean;
639
+ readonly timeZone?: string | undefined;
640
+ }
641
+ export interface MenstrualEventList {
642
+ readonly samples: readonly MenstrualEvent[];
643
+ }
644
+ /** Available on ios only. */
645
+ export interface AthleteProfileResult {
646
+ readonly profile?: AthleteProfile | undefined;
647
+ }
449
648
  /** Available on ios only. */
450
649
  export interface PlannedWorkoutList {
451
650
  readonly workouts: readonly PlannedWorkout[];
@@ -479,3 +678,117 @@ export interface WorkoutEntryList {
479
678
  export interface NutritionEntryList {
480
679
  readonly entries: readonly NutritionEntry[];
481
680
  }
681
+ /**
682
+ * The store's own total for one local day, from its statistics engine. start and end are that
683
+ * day's midnights.
684
+ */
685
+ export interface DayTotal {
686
+ readonly metric: DayTotalMetric;
687
+ readonly start: Date;
688
+ readonly end: Date;
689
+ readonly value: number;
690
+ readonly unit: string;
691
+ readonly timeZone?: string | undefined;
692
+ }
693
+ /**
694
+ * One record a day total is made of, as the store holds it. A record crossing midnight is
695
+ * whole.
696
+ */
697
+ export interface IntradaySample {
698
+ readonly id: string;
699
+ readonly metric: IntradayMetric;
700
+ readonly start: Date;
701
+ readonly end: Date;
702
+ readonly value: number;
703
+ readonly source: SampleSource;
704
+ readonly userEntered: boolean;
705
+ readonly timeZone?: string | undefined;
706
+ }
707
+ /** The store's own resting heart rate for a day, never derived from heart rate readings. */
708
+ export interface RestingHeartRateSample {
709
+ readonly id: string;
710
+ readonly start: Date;
711
+ readonly end: Date;
712
+ readonly beatsPerMinute: number;
713
+ readonly source: SampleSource;
714
+ readonly userEntered: boolean;
715
+ readonly timeZone?: string | undefined;
716
+ }
717
+ /** A point reading has start equal to end; skin and wrist temperature span a stretch. */
718
+ export interface BodyReading {
719
+ readonly id: string;
720
+ readonly kind: BodyReadingKind;
721
+ readonly start: Date;
722
+ readonly end: Date;
723
+ readonly source: SampleSource;
724
+ readonly userEntered: boolean;
725
+ readonly timeZone?: string | undefined;
726
+ }
727
+ export interface RoutePoint {
728
+ readonly time: Date;
729
+ readonly latitude: number;
730
+ readonly longitude: number;
731
+ }
732
+ /**
733
+ * The GPS track a workout left, thinned to one point a second and at most 5,000 points. start
734
+ * and end are the first and last point.
735
+ */
736
+ export interface WorkoutRoute {
737
+ readonly id: string;
738
+ readonly workoutId: string;
739
+ readonly start: Date;
740
+ readonly end: Date;
741
+ readonly points: readonly RoutePoint[];
742
+ readonly source: SampleSource;
743
+ readonly timeZone?: string | undefined;
744
+ }
745
+ /** One speed, power or cadence reading. Android's are instants, so start equals end there. */
746
+ export interface WorkoutIntensitySample {
747
+ readonly id: string;
748
+ readonly metric: WorkoutIntensityMetric;
749
+ /**
750
+ * Set on Apple, where HealthKit stores a reading inside its workout. Health Connect stores
751
+ * them free-standing, so Android leaves it absent rather than guessing by time.
752
+ */
753
+ readonly workoutId?: string | undefined;
754
+ readonly start: Date;
755
+ readonly end: Date;
756
+ readonly value: number;
757
+ readonly source: SampleSource;
758
+ readonly userEntered: boolean;
759
+ readonly timeZone?: string | undefined;
760
+ }
761
+ /** One drink, in millilitres. */
762
+ export interface HydrationSample {
763
+ readonly id: string;
764
+ readonly start: Date;
765
+ readonly end: Date;
766
+ readonly millilitres: number;
767
+ readonly source: SampleSource;
768
+ readonly userEntered: boolean;
769
+ readonly timeZone?: string | undefined;
770
+ }
771
+ export interface DayTotalList {
772
+ readonly totals: readonly DayTotal[];
773
+ }
774
+ export interface IntradaySampleList {
775
+ readonly samples: readonly IntradaySample[];
776
+ }
777
+ export interface RestingHeartRateList {
778
+ readonly samples: readonly RestingHeartRateSample[];
779
+ }
780
+ export interface BodyReadingList {
781
+ readonly samples: readonly BodyReading[];
782
+ }
783
+ export interface WorkoutRouteList {
784
+ readonly routes: readonly WorkoutRoute[];
785
+ }
786
+ export interface WorkoutIntensityList {
787
+ readonly samples: readonly WorkoutIntensitySample[];
788
+ }
789
+ export interface HydrationList {
790
+ readonly samples: readonly HydrationSample[];
791
+ }
792
+ export interface AvailabilityResult {
793
+ readonly availability: StoreAvailability;
794
+ }
@@ -2,7 +2,7 @@
2
2
  // Generated from surface/terra-surface.json by surface/gen. Do not edit by hand.
3
3
  // Regenerate with: node surface/gen/src/cli.ts generate
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.WorkoutSchedulingStatusValues = exports.FailureCodeValues = exports.DeviceKeyRevokeOutcomeValues = exports.DiagnosticsReasonValues = exports.BackgroundRestrictionReasonValues = exports.MotionContextValues = exports.PermissionStatusValues = exports.DataCategoryValues = exports.SourceValues = void 0;
5
+ exports.MenstrualEventKindValues = exports.VO2MaxTestTypeValues = exports.HeartRateVariabilityMetricValues = exports.BodyTemperatureMetricValues = exports.GlucoseSpecimenValues = exports.GlucoseMealTimeValues = exports.BloodGlucoseUnitValues = exports.BodyMetricValues = exports.WorkoutIntensityMetricValues = exports.IntradayMetricValues = exports.DayTotalMetricValues = exports.WorkoutSchedulingStatusValues = exports.FailureCodeValues = exports.DeviceKeyRevokeOutcomeValues = exports.DiagnosticsReasonValues = exports.BackgroundRestrictionReasonValues = exports.ActivityMoveModeValues = exports.BiologicalSexValues = exports.MenstruationFlowValues = exports.MealTypeValues = exports.NutrientValues = exports.MotionContextValues = exports.PermissionStatusValues = exports.DataCategoryValues = exports.SourceValues = void 0;
6
6
  exports.SourceValues = [
7
7
  "health",
8
8
  "samsungHealth",
@@ -13,6 +13,8 @@ exports.DataCategoryValues = [
13
13
  "daily",
14
14
  "sleep",
15
15
  "nutrition",
16
+ "menstruation",
17
+ "athlete",
16
18
  ];
17
19
  exports.PermissionStatusValues = [
18
20
  "granted",
@@ -27,6 +29,70 @@ exports.MotionContextValues = [
27
29
  "sedentary",
28
30
  "active",
29
31
  ];
32
+ exports.NutrientValues = [
33
+ "energyConsumed",
34
+ "protein",
35
+ "carbohydrates",
36
+ "fatTotal",
37
+ "fatSaturated",
38
+ "fatMonounsaturated",
39
+ "fatPolyunsaturated",
40
+ "sugar",
41
+ "fiber",
42
+ "cholesterol",
43
+ "sodium",
44
+ "potassium",
45
+ "calcium",
46
+ "iron",
47
+ "magnesium",
48
+ "zinc",
49
+ "phosphorus",
50
+ "iodine",
51
+ "manganese",
52
+ "molybdenum",
53
+ "selenium",
54
+ "copper",
55
+ "chromium",
56
+ "chloride",
57
+ "caffeine",
58
+ "vitaminA",
59
+ "vitaminC",
60
+ "vitaminD",
61
+ "vitaminE",
62
+ "vitaminK",
63
+ "vitaminB6",
64
+ "vitaminB12",
65
+ "thiamin",
66
+ "riboflavin",
67
+ "niacin",
68
+ "folate",
69
+ "biotin",
70
+ "pantothenicAcid",
71
+ ];
72
+ exports.MealTypeValues = [
73
+ "breakfast",
74
+ "lunch",
75
+ "dinner",
76
+ "snack",
77
+ "unknown",
78
+ ];
79
+ exports.MenstruationFlowValues = [
80
+ "unspecified",
81
+ "light",
82
+ "medium",
83
+ "heavy",
84
+ "none",
85
+ ];
86
+ exports.BiologicalSexValues = [
87
+ "female",
88
+ "male",
89
+ "other",
90
+ "notSet",
91
+ ];
92
+ exports.ActivityMoveModeValues = [
93
+ "activeEnergy",
94
+ "appleMoveTime",
95
+ ];
30
96
  exports.BackgroundRestrictionReasonValues = [
31
97
  "oemRestricted",
32
98
  "backgroundReadDenied",
@@ -90,3 +156,69 @@ exports.WorkoutSchedulingStatusValues = [
90
156
  "denied",
91
157
  "authorized",
92
158
  ];
159
+ exports.DayTotalMetricValues = [
160
+ "distanceWalkingRunning",
161
+ "distanceCycling",
162
+ "distanceSwimming",
163
+ "distanceWheelchair",
164
+ "activeEnergyBurned",
165
+ "basalEnergyBurned",
166
+ "flightsClimbed",
167
+ "appleExerciseTime",
168
+ ];
169
+ exports.IntradayMetricValues = [
170
+ "activeEnergy",
171
+ "basalEnergy",
172
+ "distance",
173
+ "floorsClimbed",
174
+ ];
175
+ exports.WorkoutIntensityMetricValues = [
176
+ "speed",
177
+ "power",
178
+ "cadence",
179
+ ];
180
+ exports.BodyMetricValues = [
181
+ "weight",
182
+ "height",
183
+ "bodyFatPercentage",
184
+ "leanBodyMass",
185
+ "bmi",
186
+ ];
187
+ exports.BloodGlucoseUnitValues = [
188
+ "mg/dL",
189
+ "mmol/L",
190
+ ];
191
+ exports.GlucoseMealTimeValues = [
192
+ "preprandial",
193
+ "postprandial",
194
+ "unknown",
195
+ ];
196
+ exports.GlucoseSpecimenValues = [
197
+ "capillary",
198
+ "interstitial",
199
+ "plasma",
200
+ "serum",
201
+ "tears",
202
+ "wholeBlood",
203
+ "unknown",
204
+ ];
205
+ exports.BodyTemperatureMetricValues = [
206
+ "body",
207
+ "basal",
208
+ "wrist",
209
+ "skin",
210
+ ];
211
+ exports.HeartRateVariabilityMetricValues = [
212
+ "sdnn",
213
+ "rmssd",
214
+ ];
215
+ exports.VO2MaxTestTypeValues = [
216
+ "maxExercise",
217
+ "predictedSubMaxExercise",
218
+ "predictedNonExercise",
219
+ ];
220
+ exports.MenstrualEventKindValues = [
221
+ "intermenstrualBleeding",
222
+ "ovulationTest",
223
+ "cervicalMucus",
224
+ ];
package/lib/index.d.ts CHANGED
@@ -14,7 +14,7 @@
14
14
  */
15
15
  export { createTerra } from "./createTerra";
16
16
  export { Terra } from "./Terra";
17
- export type { ActivityMetrics, Background, BodyMetrics, DailyMetrics, Diagnostics, NativeBridge, NutritionMetrics, Permissions, PlannedWorkouts, SleepMetrics, StreamListener, TerraOptions, TokenProvider, Unsubscribe, } from "./Terra";
17
+ export type { ActivityMetrics, AthleteMetrics, Background, BodyMetrics, DailyMetrics, Diagnostics, MenstruationMetrics, NativeBridge, NutritionMetrics, Permissions, PlannedWorkouts, SleepMetrics, StreamListener, TerraOptions, TokenProvider, Unsubscribe, } from "./Terra";
18
18
  export { TerraError } from "./TerraError";
19
19
  export type { TerraErrorJSON } from "./TerraError";
20
20
  export { EndUser } from "./EndUser";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tryterra/react-native",
3
- "version": "2.1.0",
3
+ "version": "2.2.1",
4
4
  "description": "Terra's health SDK for React Native",
5
5
  "license": "MIT",
6
6
  "homepage": "https://docs.tryterra.co",
@@ -29,8 +29,8 @@
29
29
  "!docs/distribution.md"
30
30
  ],
31
31
  "terraNative": {
32
- "ios": "2.1.0",
33
- "android": "2.1.0"
32
+ "ios": "2.2.1",
33
+ "android": "2.2.1"
34
34
  },
35
35
  "scripts": {
36
36
  "typecheck": "tsc --noEmit",