react-native-rook-sdk 4.0.0-beta.2 → 5.0.0-beta.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/RNRookSdk.podspec +1 -1
- package/android/build.gradle +6 -0
- package/android/src/main/java/com/rooksdk/RookSdkModule.kt +1850 -6
- package/android/src/main/java/com/rooksdk/broadcasts/AndroidPermissionsReceiverTransmitter.kt +62 -0
- package/android/src/main/java/com/rooksdk/broadcasts/HealthConnectPermissionsReceiverTransmitter.kt +64 -0
- package/android/src/main/java/com/rooksdk/broadcasts/SamsungHealthPermissionsReceiverTransmitter.kt +44 -0
- package/android/src/main/java/com/rooksdk/utils/DatasourceUtils.kt +35 -0
- package/android/src/main/java/com/rooksdk/utils/PermissionConvertions.kt +21 -0
- package/android/src/main/java/com/rooksdk/utils/ReadableToWritable.kt +144 -0
- package/android/src/main/java/com/rooksdk/utils/RookDateTime.kt +26 -0
- package/android/src/main/java/com/rooksdk/utils/RookGsonBuilder.kt +20 -0
- package/android/src/main/java/com/rooksdk/utils/SamsungAvailability.kt +22 -0
- package/android/src/main/java/com/rooksdk/utils/Source.kt +6 -0
- package/android/src/main/java/com/rooksdk/utils/StringToSyncType.kt +41 -0
- package/android/src/main/java/com/rooksdk/utils/serializers/InstantSerializer.kt +18 -0
- package/android/src/main/java/com/rooksdk/utils/serializers/LocalDateSerializer.kt +21 -0
- package/android/src/main/java/com/rooksdk/utils/serializers/ZoneDateTimeSerializer.kt +18 -0
- package/ios/EncodableSDKState.swift +95 -0
- package/ios/NutritionMapper.swift +114 -0
- package/ios/RookConfiguration.swift +13 -0
- package/ios/RookData.swift +29 -0
- package/ios/RookEntry.swift +5 -4
- package/ios/RookPermissions.swift +33 -9
- package/ios/RookSdk.h +1 -13
- package/ios/RookSdk.mm +44 -237
- package/lib/module/NativeRookSdk.js +98 -10
- package/lib/module/NativeRookSdk.js.map +1 -1
- package/lib/module/context/RookSyncGateProvider.js +29 -21
- package/lib/module/context/RookSyncGateProvider.js.map +1 -1
- package/lib/module/context/RookSyncGateReducer.js +12 -2
- package/lib/module/context/RookSyncGateReducer.js.map +1 -1
- package/lib/module/hooks/useRookConfiguration.js +20 -1
- package/lib/module/hooks/useRookConfiguration.js.map +1 -1
- package/lib/module/hooks/useRookData.js +13 -4
- package/lib/module/hooks/useRookData.js.map +1 -1
- package/lib/module/hooks/useRookPermissions.js +13 -1
- package/lib/module/hooks/useRookPermissions.js.map +1 -1
- package/lib/module/hooks/useRookSync.js +1 -1
- package/lib/module/hooks/useRookSync.js.map +1 -1
- package/lib/module/hooks/useRookVariables.js +16 -1
- package/lib/module/hooks/useRookVariables.js.map +1 -1
- package/lib/module/modules/components/RookStateManager.js +31 -0
- package/lib/module/modules/components/RookStateManager.js.map +1 -0
- package/lib/module/modules/hook/useRookAutoSync.js +5 -4
- package/lib/module/modules/hook/useRookAutoSync.js.map +1 -1
- package/lib/module/modules/hook/useRookEmitter.js +61 -0
- package/lib/module/modules/hook/useRookEmitter.js.map +1 -0
- package/lib/module/types/AppleHealthNutritionEvent.js +72 -0
- package/lib/module/types/AppleHealthNutritionEvent.js.map +1 -0
- package/lib/module/types/HCMealData.js +61 -0
- package/lib/module/types/HCMealData.js.map +1 -0
- package/lib/module/types/WriteNutrition.js +14 -0
- package/lib/module/types/WriteNutrition.js.map +1 -0
- package/lib/module/utils/isValidDate.js +20 -0
- package/lib/module/utils/isValidDate.js.map +1 -1
- package/lib/typescript/src/NativeRookSdk.d.ts +622 -33
- package/lib/typescript/src/NativeRookSdk.d.ts.map +1 -1
- package/lib/typescript/src/context/RookSyncGateProvider.d.ts.map +1 -1
- package/lib/typescript/src/context/RookSyncGateReducer.d.ts.map +1 -1
- package/lib/typescript/src/context/RookSyncGateTypes.d.ts +14 -4
- package/lib/typescript/src/context/RookSyncGateTypes.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookConfiguration.d.ts +3 -1
- package/lib/typescript/src/hooks/useRookConfiguration.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookData.d.ts +2 -2
- package/lib/typescript/src/hooks/useRookData.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookPermissions.d.ts +2 -0
- package/lib/typescript/src/hooks/useRookPermissions.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookVariables.d.ts +2 -0
- package/lib/typescript/src/hooks/useRookVariables.d.ts.map +1 -1
- package/lib/typescript/src/modules/components/RookStateManager.d.ts +10 -0
- package/lib/typescript/src/modules/components/RookStateManager.d.ts.map +1 -0
- package/lib/typescript/src/modules/hook/useRookAutoSync.d.ts.map +1 -1
- package/lib/typescript/src/modules/hook/useRookEmitter.d.ts +4 -0
- package/lib/typescript/src/modules/hook/useRookEmitter.d.ts.map +1 -0
- package/lib/typescript/src/types/AppleHealthNutritionEvent.d.ts +76 -0
- package/lib/typescript/src/types/AppleHealthNutritionEvent.d.ts.map +1 -0
- package/lib/typescript/src/types/HCMealData.d.ts +60 -0
- package/lib/typescript/src/types/HCMealData.d.ts.map +1 -0
- package/lib/typescript/src/types/WriteNutrition.d.ts +61 -0
- package/lib/typescript/src/types/WriteNutrition.d.ts.map +1 -0
- package/lib/typescript/src/utils/isValidDate.d.ts +8 -0
- package/lib/typescript/src/utils/isValidDate.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/NativeRookSdk.ts +682 -117
- package/src/context/RookSyncGateProvider.tsx +20 -16
- package/src/context/RookSyncGateReducer.ts +6 -2
- package/src/context/RookSyncGateTypes.ts +9 -3
- package/src/hooks/useRookConfiguration.ts +26 -2
- package/src/hooks/useRookData.ts +18 -7
- package/src/hooks/useRookPermissions.ts +16 -0
- package/src/hooks/useRookSync.ts +1 -1
- package/src/hooks/useRookVariables.ts +22 -1
- package/src/modules/components/RookStateManager.tsx +41 -0
- package/src/modules/hook/useRookAutoSync.ts +6 -4
- package/src/modules/hook/useRookEmitter.ts +94 -0
- package/src/types/AppleHealthNutritionEvent.ts +142 -0
- package/src/types/HCMealData.ts +114 -0
- package/src/types/WriteNutrition.ts +66 -0
- package/src/utils/isValidDate.ts +24 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { type WriteNutrition, MealDataType } from './WriteNutrition';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Interface representing nutrition and meal data for Health Connect.
|
|
5
|
+
* * Note: All gram values have a range of [0.0 - 100.0] unless specified otherwise.
|
|
6
|
+
* Energy and macro values have a range of [0.0 - 100,000.0].
|
|
7
|
+
*/
|
|
8
|
+
export interface HCMealData {
|
|
9
|
+
/** ISO-8601 formatted string (e.g., new Date().toISOString()) */
|
|
10
|
+
startDateTime: string;
|
|
11
|
+
/** ISO-8601 formatted string (e.g., new Date().toISOString()) */
|
|
12
|
+
endDateTime: string;
|
|
13
|
+
/** Name of the meal or food item */
|
|
14
|
+
name: string;
|
|
15
|
+
/** Category of the meal */
|
|
16
|
+
type: MealDataType;
|
|
17
|
+
|
|
18
|
+
// Macros & Energy (Range: 0.0 to 100,000.0)
|
|
19
|
+
energyKcal?: number;
|
|
20
|
+
energyFromFatKcal?: number;
|
|
21
|
+
dietaryFiberGrams?: number;
|
|
22
|
+
monounsaturatedFatGrams?: number;
|
|
23
|
+
polyunsaturatedFatGrams?: number;
|
|
24
|
+
proteinGrams?: number;
|
|
25
|
+
saturatedFatGrams?: number;
|
|
26
|
+
sugarGrams?: number;
|
|
27
|
+
totalCarbohydrateGrams?: number;
|
|
28
|
+
totalFatGrams?: number;
|
|
29
|
+
transFatGrams?: number;
|
|
30
|
+
unsaturatedFatGrams?: number;
|
|
31
|
+
|
|
32
|
+
// Micro-nutrients & Minerals (Range: 0.0 to 100.0)
|
|
33
|
+
biotinGrams?: number;
|
|
34
|
+
caffeineGrams?: number;
|
|
35
|
+
calciumGrams?: number;
|
|
36
|
+
chlorideGrams?: number;
|
|
37
|
+
cholesterolGrams?: number;
|
|
38
|
+
chromiumGrams?: number;
|
|
39
|
+
copperGrams?: number;
|
|
40
|
+
folateGrams?: number;
|
|
41
|
+
folicAcidGrams?: number;
|
|
42
|
+
iodineGrams?: number;
|
|
43
|
+
ironGrams?: number;
|
|
44
|
+
magnesiumGrams?: number;
|
|
45
|
+
manganeseGrams?: number;
|
|
46
|
+
molybdenumGrams?: number;
|
|
47
|
+
niacinGrams?: number;
|
|
48
|
+
pantothenicAcidGrams?: number;
|
|
49
|
+
phosphorusGrams?: number;
|
|
50
|
+
potassiumGrams?: number;
|
|
51
|
+
riboflavinGrams?: number;
|
|
52
|
+
seleniumGrams?: number;
|
|
53
|
+
sodiumGrams?: number;
|
|
54
|
+
thiaminGrams?: number;
|
|
55
|
+
vitaminAGrams?: number;
|
|
56
|
+
vitaminB12Grams?: number;
|
|
57
|
+
vitaminB6Grams?: number;
|
|
58
|
+
vitaminCGrams?: number;
|
|
59
|
+
vitaminDGrams?: number;
|
|
60
|
+
vitaminEGrams?: number;
|
|
61
|
+
vitaminKGrams?: number;
|
|
62
|
+
zincGrams?: number;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export const parseWriteNutritionToHC = (data: WriteNutrition): HCMealData => {
|
|
66
|
+
return {
|
|
67
|
+
name: data.name,
|
|
68
|
+
startDateTime: data.date,
|
|
69
|
+
endDateTime: data.date,
|
|
70
|
+
type: data.mealType ?? MealDataType.SNACK,
|
|
71
|
+
biotinGrams: data.biotin,
|
|
72
|
+
caffeineGrams: data.caffeine,
|
|
73
|
+
calciumGrams: data.calcium,
|
|
74
|
+
energyKcal: data.calories,
|
|
75
|
+
energyFromFatKcal: data.caloriesFromFat,
|
|
76
|
+
chlorideGrams: data.chloride,
|
|
77
|
+
cholesterolGrams: data.cholesterol,
|
|
78
|
+
chromiumGrams: data.chromium,
|
|
79
|
+
copperGrams: data.copper,
|
|
80
|
+
dietaryFiberGrams: data.dietaryFiber,
|
|
81
|
+
folateGrams: data.folate,
|
|
82
|
+
folicAcidGrams: data.folicAcid,
|
|
83
|
+
iodineGrams: data.iodine,
|
|
84
|
+
ironGrams: data.iron,
|
|
85
|
+
magnesiumGrams: data.magnesium,
|
|
86
|
+
manganeseGrams: data.manganese,
|
|
87
|
+
molybdenumGrams: data.molybdenum,
|
|
88
|
+
monounsaturatedFatGrams: data.monounsaturatedFat,
|
|
89
|
+
niacinGrams: data.niacin,
|
|
90
|
+
pantothenicAcidGrams: data.pantothenicAcid,
|
|
91
|
+
phosphorusGrams: data.phosphorus,
|
|
92
|
+
polyunsaturatedFatGrams: data.polyunsaturatedFat,
|
|
93
|
+
potassiumGrams: data.potassium,
|
|
94
|
+
proteinGrams: data.protein,
|
|
95
|
+
riboflavinGrams: data.riboflavin,
|
|
96
|
+
saturatedFatGrams: data.saturatedFat,
|
|
97
|
+
seleniumGrams: data.selenium,
|
|
98
|
+
sodiumGrams: data.sodium,
|
|
99
|
+
sugarGrams: data.sugar,
|
|
100
|
+
thiaminGrams: data.thiamin,
|
|
101
|
+
totalCarbohydrateGrams: data.totalCarbohydrates,
|
|
102
|
+
totalFatGrams: data.totalFat,
|
|
103
|
+
transFatGrams: data.transFat,
|
|
104
|
+
unsaturatedFatGrams: data.unsaturatedFat,
|
|
105
|
+
vitaminAGrams: data.vitaminA,
|
|
106
|
+
vitaminB12Grams: data.vitaminB12,
|
|
107
|
+
vitaminB6Grams: data.vitaminB6,
|
|
108
|
+
vitaminCGrams: data.vitaminC,
|
|
109
|
+
vitaminDGrams: data.vitaminD,
|
|
110
|
+
vitaminEGrams: data.vitaminE,
|
|
111
|
+
vitaminKGrams: data.vitaminK,
|
|
112
|
+
zincGrams: data.zinc,
|
|
113
|
+
};
|
|
114
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents the type of meal consumed.
|
|
3
|
+
* These strings must match the Kotlin HCMealDataType enum.
|
|
4
|
+
*/
|
|
5
|
+
export enum MealDataType {
|
|
6
|
+
BREAKFAST = 'BREAKFAST',
|
|
7
|
+
LUNCH = 'LUNCH',
|
|
8
|
+
DINNER = 'DINNER',
|
|
9
|
+
SNACK = 'SNACK',
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface WriteNutrition {
|
|
13
|
+
// Metadata
|
|
14
|
+
name: string;
|
|
15
|
+
date: string; // Must be ISO-8601
|
|
16
|
+
mealType?: MealDataType;
|
|
17
|
+
|
|
18
|
+
// Apple Health specific root values
|
|
19
|
+
amount?: number;
|
|
20
|
+
unit?: number;
|
|
21
|
+
|
|
22
|
+
// Unified Nutrients (Flat list)
|
|
23
|
+
biotin?: number;
|
|
24
|
+
caffeine?: number;
|
|
25
|
+
calcium?: number;
|
|
26
|
+
calories?: number;
|
|
27
|
+
caloriesFromFat?: number;
|
|
28
|
+
chloride?: number;
|
|
29
|
+
cholesterol?: number;
|
|
30
|
+
chromium?: number;
|
|
31
|
+
copper?: number;
|
|
32
|
+
dietaryFiber?: number;
|
|
33
|
+
folate?: number;
|
|
34
|
+
folicAcid?: number;
|
|
35
|
+
iodine?: number;
|
|
36
|
+
iron?: number;
|
|
37
|
+
magnesium?: number;
|
|
38
|
+
manganese?: number;
|
|
39
|
+
molybdenum?: number;
|
|
40
|
+
monounsaturatedFat?: number;
|
|
41
|
+
niacin?: number;
|
|
42
|
+
pantothenicAcid?: number;
|
|
43
|
+
phosphorus?: number;
|
|
44
|
+
polyunsaturatedFat?: number;
|
|
45
|
+
potassium?: number;
|
|
46
|
+
protein?: number;
|
|
47
|
+
riboflavin?: number;
|
|
48
|
+
saturatedFat?: number;
|
|
49
|
+
selenium?: number;
|
|
50
|
+
sodium?: number;
|
|
51
|
+
sugar?: number;
|
|
52
|
+
thiamin?: number;
|
|
53
|
+
totalCarbohydrates?: number;
|
|
54
|
+
totalFat?: number;
|
|
55
|
+
transFat?: number;
|
|
56
|
+
unsaturatedFat?: number;
|
|
57
|
+
vitaminA?: number;
|
|
58
|
+
vitaminB12?: number;
|
|
59
|
+
vitaminB6?: number;
|
|
60
|
+
vitaminC?: number;
|
|
61
|
+
vitaminD?: number;
|
|
62
|
+
vitaminE?: number;
|
|
63
|
+
vitaminK?: number;
|
|
64
|
+
water?: number; // iOS specific
|
|
65
|
+
zinc?: number;
|
|
66
|
+
}
|
package/src/utils/isValidDate.ts
CHANGED
|
@@ -13,3 +13,27 @@ export const isValidDate = (date: string) => {
|
|
|
13
13
|
);
|
|
14
14
|
}
|
|
15
15
|
};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Validates that a string is a full ISO-8601 date-time with a timezone.
|
|
19
|
+
* Examples of valid formats:
|
|
20
|
+
* - 2026-02-23T12:00:00Z
|
|
21
|
+
* - 2026-02-23T12:00:00+01:00
|
|
22
|
+
* - 2026-02-23T12:00:00.000-06:00
|
|
23
|
+
*/
|
|
24
|
+
export const isValidZonedDateTime = (date: string) => {
|
|
25
|
+
// Regex for ISO 8601 with Timezone
|
|
26
|
+
const isoRegex =
|
|
27
|
+
/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})$/;
|
|
28
|
+
|
|
29
|
+
if (!isoRegex.test(date)) {
|
|
30
|
+
throw new Error(
|
|
31
|
+
`Invalid format: ${date}. Expected ISO-8601 with Timezone (e.g., YYYY-MM-DDTHH:mm:ssZ or YYYY-MM-DDTHH:mm:ss+HH:mm)`
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Also verify it's a valid calendar date
|
|
36
|
+
if (isNaN(Date.parse(date))) {
|
|
37
|
+
throw new Error(`Invalid date value: ${date}`);
|
|
38
|
+
}
|
|
39
|
+
};
|