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.
Files changed (99) hide show
  1. package/RNRookSdk.podspec +1 -1
  2. package/android/build.gradle +6 -0
  3. package/android/src/main/java/com/rooksdk/RookSdkModule.kt +1850 -6
  4. package/android/src/main/java/com/rooksdk/broadcasts/AndroidPermissionsReceiverTransmitter.kt +62 -0
  5. package/android/src/main/java/com/rooksdk/broadcasts/HealthConnectPermissionsReceiverTransmitter.kt +64 -0
  6. package/android/src/main/java/com/rooksdk/broadcasts/SamsungHealthPermissionsReceiverTransmitter.kt +44 -0
  7. package/android/src/main/java/com/rooksdk/utils/DatasourceUtils.kt +35 -0
  8. package/android/src/main/java/com/rooksdk/utils/PermissionConvertions.kt +21 -0
  9. package/android/src/main/java/com/rooksdk/utils/ReadableToWritable.kt +144 -0
  10. package/android/src/main/java/com/rooksdk/utils/RookDateTime.kt +26 -0
  11. package/android/src/main/java/com/rooksdk/utils/RookGsonBuilder.kt +20 -0
  12. package/android/src/main/java/com/rooksdk/utils/SamsungAvailability.kt +22 -0
  13. package/android/src/main/java/com/rooksdk/utils/Source.kt +6 -0
  14. package/android/src/main/java/com/rooksdk/utils/StringToSyncType.kt +41 -0
  15. package/android/src/main/java/com/rooksdk/utils/serializers/InstantSerializer.kt +18 -0
  16. package/android/src/main/java/com/rooksdk/utils/serializers/LocalDateSerializer.kt +21 -0
  17. package/android/src/main/java/com/rooksdk/utils/serializers/ZoneDateTimeSerializer.kt +18 -0
  18. package/ios/EncodableSDKState.swift +95 -0
  19. package/ios/NutritionMapper.swift +114 -0
  20. package/ios/RookConfiguration.swift +13 -0
  21. package/ios/RookData.swift +29 -0
  22. package/ios/RookEntry.swift +5 -4
  23. package/ios/RookPermissions.swift +33 -9
  24. package/ios/RookSdk.h +1 -13
  25. package/ios/RookSdk.mm +44 -237
  26. package/lib/module/NativeRookSdk.js +98 -10
  27. package/lib/module/NativeRookSdk.js.map +1 -1
  28. package/lib/module/context/RookSyncGateProvider.js +29 -21
  29. package/lib/module/context/RookSyncGateProvider.js.map +1 -1
  30. package/lib/module/context/RookSyncGateReducer.js +12 -2
  31. package/lib/module/context/RookSyncGateReducer.js.map +1 -1
  32. package/lib/module/hooks/useRookConfiguration.js +20 -1
  33. package/lib/module/hooks/useRookConfiguration.js.map +1 -1
  34. package/lib/module/hooks/useRookData.js +13 -4
  35. package/lib/module/hooks/useRookData.js.map +1 -1
  36. package/lib/module/hooks/useRookPermissions.js +13 -1
  37. package/lib/module/hooks/useRookPermissions.js.map +1 -1
  38. package/lib/module/hooks/useRookSync.js +1 -1
  39. package/lib/module/hooks/useRookSync.js.map +1 -1
  40. package/lib/module/hooks/useRookVariables.js +16 -1
  41. package/lib/module/hooks/useRookVariables.js.map +1 -1
  42. package/lib/module/modules/components/RookStateManager.js +31 -0
  43. package/lib/module/modules/components/RookStateManager.js.map +1 -0
  44. package/lib/module/modules/hook/useRookAutoSync.js +5 -4
  45. package/lib/module/modules/hook/useRookAutoSync.js.map +1 -1
  46. package/lib/module/modules/hook/useRookEmitter.js +61 -0
  47. package/lib/module/modules/hook/useRookEmitter.js.map +1 -0
  48. package/lib/module/types/AppleHealthNutritionEvent.js +72 -0
  49. package/lib/module/types/AppleHealthNutritionEvent.js.map +1 -0
  50. package/lib/module/types/HCMealData.js +61 -0
  51. package/lib/module/types/HCMealData.js.map +1 -0
  52. package/lib/module/types/WriteNutrition.js +14 -0
  53. package/lib/module/types/WriteNutrition.js.map +1 -0
  54. package/lib/module/utils/isValidDate.js +20 -0
  55. package/lib/module/utils/isValidDate.js.map +1 -1
  56. package/lib/typescript/src/NativeRookSdk.d.ts +622 -33
  57. package/lib/typescript/src/NativeRookSdk.d.ts.map +1 -1
  58. package/lib/typescript/src/context/RookSyncGateProvider.d.ts.map +1 -1
  59. package/lib/typescript/src/context/RookSyncGateReducer.d.ts.map +1 -1
  60. package/lib/typescript/src/context/RookSyncGateTypes.d.ts +14 -4
  61. package/lib/typescript/src/context/RookSyncGateTypes.d.ts.map +1 -1
  62. package/lib/typescript/src/hooks/useRookConfiguration.d.ts +3 -1
  63. package/lib/typescript/src/hooks/useRookConfiguration.d.ts.map +1 -1
  64. package/lib/typescript/src/hooks/useRookData.d.ts +2 -2
  65. package/lib/typescript/src/hooks/useRookData.d.ts.map +1 -1
  66. package/lib/typescript/src/hooks/useRookPermissions.d.ts +2 -0
  67. package/lib/typescript/src/hooks/useRookPermissions.d.ts.map +1 -1
  68. package/lib/typescript/src/hooks/useRookVariables.d.ts +2 -0
  69. package/lib/typescript/src/hooks/useRookVariables.d.ts.map +1 -1
  70. package/lib/typescript/src/modules/components/RookStateManager.d.ts +10 -0
  71. package/lib/typescript/src/modules/components/RookStateManager.d.ts.map +1 -0
  72. package/lib/typescript/src/modules/hook/useRookAutoSync.d.ts.map +1 -1
  73. package/lib/typescript/src/modules/hook/useRookEmitter.d.ts +4 -0
  74. package/lib/typescript/src/modules/hook/useRookEmitter.d.ts.map +1 -0
  75. package/lib/typescript/src/types/AppleHealthNutritionEvent.d.ts +76 -0
  76. package/lib/typescript/src/types/AppleHealthNutritionEvent.d.ts.map +1 -0
  77. package/lib/typescript/src/types/HCMealData.d.ts +60 -0
  78. package/lib/typescript/src/types/HCMealData.d.ts.map +1 -0
  79. package/lib/typescript/src/types/WriteNutrition.d.ts +61 -0
  80. package/lib/typescript/src/types/WriteNutrition.d.ts.map +1 -0
  81. package/lib/typescript/src/utils/isValidDate.d.ts +8 -0
  82. package/lib/typescript/src/utils/isValidDate.d.ts.map +1 -1
  83. package/package.json +1 -1
  84. package/src/NativeRookSdk.ts +682 -117
  85. package/src/context/RookSyncGateProvider.tsx +20 -16
  86. package/src/context/RookSyncGateReducer.ts +6 -2
  87. package/src/context/RookSyncGateTypes.ts +9 -3
  88. package/src/hooks/useRookConfiguration.ts +26 -2
  89. package/src/hooks/useRookData.ts +18 -7
  90. package/src/hooks/useRookPermissions.ts +16 -0
  91. package/src/hooks/useRookSync.ts +1 -1
  92. package/src/hooks/useRookVariables.ts +22 -1
  93. package/src/modules/components/RookStateManager.tsx +41 -0
  94. package/src/modules/hook/useRookAutoSync.ts +6 -4
  95. package/src/modules/hook/useRookEmitter.ts +94 -0
  96. package/src/types/AppleHealthNutritionEvent.ts +142 -0
  97. package/src/types/HCMealData.ts +114 -0
  98. package/src/types/WriteNutrition.ts +66 -0
  99. 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
+ }
@@ -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
+ };