react-native-spike-sdk 4.5.23-beta.1 → 4.6.13

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.
@@ -76,7 +76,7 @@ dependencies {
76
76
  //noinspection GradleDynamicVersion
77
77
  implementation "com.facebook.react:react-android:0.71.3"
78
78
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
79
- implementation 'com.spikeapi.sdk:spike-sdk:4.5.22-beta.1'
79
+ implementation 'com.spikeapi.sdk:spike-sdk:4.6.12'
80
80
  implementation 'androidx.core:core-ktx:1.9.0'
81
81
  implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
82
82
  implementation 'com.google.code.gson:gson:2.10.1'
@@ -21,10 +21,10 @@ import com.spikeapi.apiv3.datamodels.RecordConfig
21
21
  import com.spikeapi.apiv3.datamodels.SleepConfig
22
22
  import com.spikeapi.apiv3.datamodels.StatisticsType
23
23
  import com.spikeapi.apiv3.datamodels.NutritionRecord
24
+ import com.spikeapi.apiv3.datamodels.NutritionalField
24
25
  import com.spikeapi.apiv3.datamodels.NutritionalAnalysisConfig
25
26
  import com.spikeapi.apiv3.datamodels.NutritionFactsLabelRecognitionConfig
26
27
  import com.spikeapi.apiv3.datamodels.NutritionRecordAnalysisMode
27
- import com.spikeapi.apiv3.datamodels.NutritionalField
28
28
  import com.spikeapi.apiv3.datamodels.utils.ActivityConfigUtils
29
29
  import com.spikeapi.apiv3.datamodels.utils.SleepConfigUtils
30
30
  import com.spikeapi.apiv3.datamodels.utils.StatisticsTypeUtils
@@ -675,6 +675,17 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
675
675
  }
676
676
  }
677
677
 
678
+ @ReactMethod
679
+ fun closeV3(connectionUUID: String, promise: Promise) {
680
+ executeV3MethodWithConnection("closeV3", connectionUUID, promise) { connection ->
681
+ connection.close()
682
+ mutex.withLock {
683
+ _connectionsV3.remove(connectionUUID)
684
+ }
685
+ promise.resolve(true)
686
+ }
687
+ }
688
+
678
689
  /// --- Read user info ---
679
690
 
680
691
  @ReactMethod
@@ -915,6 +926,7 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
915
926
  metricTypes: ReadableArray,
916
927
  activityConfigs: ReadableArray,
917
928
  sleepConfigs: ReadableArray,
929
+ nutritionalFields: ReadableArray,
918
930
  includeEnhancedPermissions: Boolean,
919
931
  includeBackgroundDelivery: Boolean,
920
932
  promise: Promise
@@ -941,12 +953,15 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
941
953
  SleepConfigUtils.fromValue(it as String)
942
954
  }.toSet()
943
955
 
956
+ val nFields = makeNutritionalFields(nutritionalFields)
957
+
944
958
  val permissions = permissionManager
945
959
  .getPermissions(
946
960
  statisticsTypes = statTypes,
947
961
  metricTypes = mTypes,
948
962
  activityConfigs = aConfigs,
949
963
  sleepConfigs = sConfigs,
964
+ nutritionalFields = nFields,
950
965
  includeEnhancedPermissions = includeEnhancedPermissions,
951
966
  includeBackgroundDelivery = includeBackgroundDelivery
952
967
  )
@@ -1090,6 +1105,7 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
1090
1105
  metricTypes: ReadableArray,
1091
1106
  activityConfigs: ReadableArray,
1092
1107
  sleepConfigs: ReadableArray,
1108
+ nutritionalFields: ReadableArray,
1093
1109
  promise: Promise
1094
1110
  ) {
1095
1111
  executeV3MethodWithConnection("enableBackgroundDelivery", connectionUUID, promise) { connection ->
@@ -1116,11 +1132,14 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
1116
1132
  SleepConfigUtils.fromValue(it as String)
1117
1133
  }.toSet()
1118
1134
 
1135
+ val nFields = makeNutritionalFields(nutritionalFields)
1136
+
1119
1137
  connection.enableBackgroundDelivery(
1120
1138
  statisticsTypes = statTypes,
1121
1139
  metricTypes = mTypes,
1122
1140
  activityConfigs = aConfigs,
1123
- sleepConfigs = sConfigs
1141
+ sleepConfigs = sConfigs,
1142
+ nutritionalFields = nFields
1124
1143
  )
1125
1144
 
1126
1145
  promise.resolve(true)
@@ -1130,11 +1149,12 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
1130
1149
  @ReactMethod
1131
1150
  fun backfill(
1132
1151
  connectionUUID: String,
1133
- days: String?,
1134
1152
  statisticTypes: ReadableArray,
1135
1153
  metricTypes: ReadableArray,
1136
1154
  activityConfigs: ReadableArray,
1137
1155
  sleepConfigs: ReadableArray,
1156
+ nutritionalFields: ReadableArray,
1157
+ days: String?,
1138
1158
  promise: Promise
1139
1159
  ) {
1140
1160
  executeV3MethodWithConnection("backfill", connectionUUID, promise) { connection ->
@@ -1154,12 +1174,15 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
1154
1174
  SleepConfigUtils.fromValue(it as String)
1155
1175
  }.toSet()
1156
1176
 
1177
+ val nFields = makeNutritionalFields(nutritionalFields)
1178
+
1157
1179
  connection.backfill(
1158
1180
  days = days?.toIntOrNull(),
1159
1181
  statisticsTypes = statTypes,
1160
1182
  metricTypes = mTypes,
1161
1183
  activityConfigs = aConfigs,
1162
- sleepConfigs = sConfigs
1184
+ sleepConfigs = sConfigs,
1185
+ nutritionalFields = nFields
1163
1186
  )
1164
1187
 
1165
1188
  promise.resolve(true)
@@ -1204,6 +1227,13 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
1204
1227
  }
1205
1228
  }
1206
1229
 
1230
+ private fun makeNutritionalFields(nutritionalFields: ReadableArray): Set<NutritionalField> {
1231
+ return nutritionalFields.toArrayList().mapNotNull { item ->
1232
+ val value = item as? String ?: return@mapNotNull null
1233
+ NutritionalField.values().find { it.value == value }
1234
+ }.toSet()
1235
+ }
1236
+
1207
1237
  /// --- Private stuff ---
1208
1238
 
1209
1239
  // Do not use this directly, use `addConnection` and `getConnection` instead
@@ -1336,6 +1366,7 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
1336
1366
  metricTypes: ReadableArray,
1337
1367
  activityConfigs: ReadableArray,
1338
1368
  sleepConfigs: ReadableArray,
1369
+ nutritionalFields: ReadableArray,
1339
1370
  promise: Promise
1340
1371
  ) {
1341
1372
  executeV3MethodWithConnection("getSamsungHealthDataPermissions", connectionUUID, promise) { connection ->
@@ -1360,12 +1391,15 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
1360
1391
  SleepConfigUtils.fromValue(it as String)
1361
1392
  }.toSet()
1362
1393
 
1394
+ val nFields = makeNutritionalFields(nutritionalFields)
1395
+
1363
1396
  val permissions = permissionManager
1364
1397
  .getPermissions(
1365
1398
  statisticsTypes = statTypes,
1366
1399
  metricTypes = mTypes,
1367
1400
  activityConfigs = aConfigs,
1368
- sleepConfigs = sConfigs
1401
+ sleepConfigs = sConfigs,
1402
+ nutritionalFields = nFields
1369
1403
  )
1370
1404
 
1371
1405
  val result = Arguments.createArray()
@@ -1384,6 +1418,7 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
1384
1418
  metricTypes: ReadableArray,
1385
1419
  activityConfigs: ReadableArray,
1386
1420
  sleepConfigs: ReadableArray,
1421
+ nutritionalFields: ReadableArray,
1387
1422
  promise: Promise
1388
1423
  ) {
1389
1424
  executeV3MethodWithConnection("requestPermissionsFromSamsungHealthData", connectionUUID, promise) { connection ->
@@ -1408,8 +1443,10 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
1408
1443
  val sConfigs = sleepConfigs.toArrayList().mapNotNull {
1409
1444
  SleepConfigUtils.fromValue(it as String)
1410
1445
  }.toSet()
1411
-
1412
- Log.d("SpikeSdkModule", "Will ask for Samsung Health Data permissions with: statTypes=$statTypes, metricTypes=$mTypes, activityConfigs=$aConfigs, sleepConfigs=$sConfigs")
1446
+
1447
+ val nFields = makeNutritionalFields(nutritionalFields)
1448
+
1449
+ Log.d("SpikeSdkModule", "Will ask for Samsung Health Data permissions with: statTypes=$statTypes, metricTypes=$mTypes, activityConfigs=$aConfigs, sleepConfigs=$sConfigs, nutritionalFields=$nFields")
1413
1450
 
1414
1451
  val activity = reactApplicationContext.currentActivity
1415
1452
  if (activity == null) {
@@ -1421,7 +1458,8 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
1421
1458
  statisticsTypes = statTypes,
1422
1459
  metricTypes = mTypes,
1423
1460
  activityConfigs = aConfigs,
1424
- sleepConfigs = sConfigs
1461
+ sleepConfigs = sConfigs,
1462
+ nutritionalFields = nFields
1425
1463
  )
1426
1464
 
1427
1465
  val result = Arguments.createArray()
@@ -1437,16 +1475,17 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
1437
1475
  }
1438
1476
 
1439
1477
  @ReactMethod
1440
- fun requestSamsungPermissionsAndBackfill(
1478
+ fun requestPermissionsFromSamsungHealthDataAndBackfill(
1441
1479
  connectionUUID: String,
1442
1480
  statisticTypes: ReadableArray,
1443
1481
  metricTypes: ReadableArray,
1444
1482
  activityConfigs: ReadableArray,
1445
1483
  sleepConfigs: ReadableArray,
1484
+ nutritionalFields: ReadableArray,
1446
1485
  days: String?,
1447
1486
  promise: Promise
1448
1487
  ) {
1449
- executeV3MethodWithConnection("requestSamsungPermissionsAndBackfill", connectionUUID, promise) { connection ->
1488
+ executeV3MethodWithConnection("requestPermissionsFromSamsungHealthDataAndBackfill", connectionUUID, promise) { connection ->
1450
1489
  val activity = reactApplicationContext.currentActivity
1451
1490
  if (activity == null) {
1452
1491
  throw SpikeExceptions.SpikeException("Activity is required to request Samsung Health Data permissions and backfill")
@@ -1468,12 +1507,15 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
1468
1507
  SleepConfigUtils.fromValue(it as String)
1469
1508
  }.toSet()
1470
1509
 
1471
- connection.requestSamsungPermissionsAndBackfill(
1510
+ val nFields = makeNutritionalFields(nutritionalFields)
1511
+
1512
+ connection.requestPermissionsFromSamsungHealthDataAndBackfill(
1472
1513
  activity = activity,
1473
1514
  statisticsTypes = statTypes,
1474
1515
  metricTypes = mTypes,
1475
1516
  activityConfigs = aConfigs,
1476
1517
  sleepConfigs = sConfigs,
1518
+ nutritionalFields = nFields,
1477
1519
  backfillDays = days?.toIntOrNull()
1478
1520
  )
1479
1521
 
package/ios/SpikeSdk.m CHANGED
@@ -96,6 +96,10 @@ RCT_EXTERN_METHOD(createConnectionAPIv3: (NSString)uuid
96
96
  withResolver: (RCTPromiseResolveBlock)resolve
97
97
  withRejecter: (RCTPromiseRejectBlock)reject)
98
98
 
99
+ RCT_EXTERN_METHOD(closeV3: (NSString)connectionUUID
100
+ withResolver: (RCTPromiseResolveBlock)resolve
101
+ withRejecter: (RCTPromiseRejectBlock)reject)
102
+
99
103
  RCT_EXTERN_METHOD(createConnectionAPIv3Legacy: (NSString)uuid
100
104
  withAppId: (NSString)appId
101
105
  withAuthToken: (NSString)authToken
@@ -119,6 +123,7 @@ RCT_EXTERN_METHOD(requestPermissionsFromHealthKit: (NSString)connectionUUID
119
123
  metrics: (NSArray<NSString>)metrics
120
124
  activityConfigs: (NSArray<NSString>)activityConfigs
121
125
  sleepConfigs: (NSArray<NSString>)sleepConfigs
126
+ nutritionalFields: (NSArray<NSString>)nutritionalFields
122
127
  withResolver: (RCTPromiseResolveBlock)resolve
123
128
  withRejecter: (RCTPromiseRejectBlock)reject)
124
129
 
@@ -127,6 +132,7 @@ RCT_EXTERN_METHOD(requestPermissionsFromHealthKitAndBackfill: (NSString)connecti
127
132
  metrics: (NSArray<NSString>)metrics
128
133
  activityConfigs: (NSArray<NSString>)activityConfigs
129
134
  sleepConfigs: (NSArray<NSString>)sleepConfigs
135
+ nutritionalFields: (NSArray<NSString>)nutritionalFields
130
136
  days: (NSString)days
131
137
  withResolver: (RCTPromiseResolveBlock)resolve
132
138
  withRejecter: (RCTPromiseRejectBlock)reject)
@@ -187,15 +193,17 @@ RCT_EXTERN_METHOD(enableBackgroundDeliveryV3: (NSString)connectionUUID
187
193
  metrics: (NSArray<NSString>)metrics
188
194
  activityConfigs: (NSArray<NSString>)activityConfigs
189
195
  sleepConfigs: (NSArray<NSString>)sleepConfigs
196
+ nutritionalFields: (NSArray<NSString>)nutritionalFields
190
197
  withResolver: (RCTPromiseResolveBlock)resolve
191
198
  withRejecter: (RCTPromiseRejectBlock)reject)
192
199
 
193
200
  RCT_EXTERN_METHOD(backfill: (NSString)connectionUUID
194
- days: (NSString)days
195
201
  withStatistics: (NSArray<NSString>)statistics
196
202
  metrics: (NSArray<NSString>)metrics
197
203
  activityConfigs: (NSArray<NSString>)activityConfigs
198
204
  sleepConfigs: (NSArray<NSString>)sleepConfigs
205
+ nutritionalFields: (NSArray<NSString>)nutritionalFields
206
+ days: (NSString)days
199
207
  withResolver: (RCTPromiseResolveBlock)resolve
200
208
  withRejecter: (RCTPromiseRejectBlock)reject)
201
209
 
@@ -476,6 +476,12 @@ class SpikeSdk: RCTEventEmitter {
476
476
  _connectionsV3[uuid]
477
477
  }
478
478
  }
479
+
480
+ private func removeConnectionV3(withUUID uuid: String) {
481
+ queue.sync {
482
+ _connectionsV3.removeValue(forKey: uuid)
483
+ }
484
+ }
479
485
 
480
486
  // SpikeSDK level
481
487
 
@@ -505,6 +511,29 @@ class SpikeSdk: RCTEventEmitter {
505
511
  }
506
512
  }
507
513
  }
514
+
515
+ @objc(closeV3:
516
+ withResolver:
517
+ withRejecter:)
518
+ func closeV3(
519
+ connectionUUID: String,
520
+ resolve: @escaping RCTPromiseResolveBlock,
521
+ reject: @escaping RCTPromiseRejectBlock
522
+ ) {
523
+ Task {
524
+ do {
525
+ guard let connection = getConnectionV3(withUUID: connectionUUID) else {
526
+ spikeReject(with: SpikeConnectionNotFoundException(), reject: reject)
527
+ return
528
+ }
529
+ try await connection.close()
530
+ removeConnectionV3(withUUID: connectionUUID)
531
+ resolve(Void())
532
+ } catch let error {
533
+ spikeReject(with: error, reject: reject)
534
+ }
535
+ }
536
+ }
508
537
 
509
538
  @objc(createConnectionAPIv3Legacy:
510
539
  withAppId:
@@ -567,6 +596,7 @@ class SpikeSdk: RCTEventEmitter {
567
596
  metrics:
568
597
  activityConfigs:
569
598
  sleepConfigs:
599
+ nutritionalFields:
570
600
  withResolver:
571
601
  withRejecter:)
572
602
  func requestPermissionsFromHealthKit(
@@ -575,6 +605,7 @@ class SpikeSdk: RCTEventEmitter {
575
605
  forMetrics metrics: [String],
576
606
  forActivityConfigs activityConfigs: [String],
577
607
  forSleepConfigs sleepConfigs: [String],
608
+ nutritionalFields: [String],
578
609
  resolve: @escaping RCTPromiseResolveBlock,
579
610
  reject: @escaping RCTPromiseRejectBlock
580
611
  ) {
@@ -596,12 +627,16 @@ class SpikeSdk: RCTEventEmitter {
596
627
  let sleepConfigsObjects = sleepConfigs.compactMap {
597
628
  try? makeSleepConfig(fromString: $0)
598
629
  }
630
+ let nutritionFieldsObjects = nutritionalFields.compactMap {
631
+ NutritionalField(rawValue: $0)
632
+ }
599
633
 
600
634
  try await connection.requestPermissionsFromHealthKit(
601
635
  forStatistics: stats,
602
636
  forMetrics: metricsObjects,
603
637
  forActivities: activityConfigsObjects,
604
- forSleep: sleepConfigsObjects
638
+ forSleep: sleepConfigsObjects,
639
+ forNutrition: nutritionFieldsObjects
605
640
  )
606
641
 
607
642
  resolve(Void())
@@ -616,6 +651,7 @@ class SpikeSdk: RCTEventEmitter {
616
651
  metrics:
617
652
  activityConfigs:
618
653
  sleepConfigs:
654
+ nutritionalFields:
619
655
  days:
620
656
  withResolver:
621
657
  withRejecter:)
@@ -625,6 +661,7 @@ class SpikeSdk: RCTEventEmitter {
625
661
  metrics: [String],
626
662
  activityConfigs: [String],
627
663
  sleepConfigs: [String],
664
+ nutritionalFields: [String],
628
665
  days: String?,
629
666
  resolve: @escaping RCTPromiseResolveBlock,
630
667
  reject: @escaping RCTPromiseRejectBlock
@@ -647,6 +684,9 @@ class SpikeSdk: RCTEventEmitter {
647
684
  let sleepConfigsObjects = sleepConfigs.compactMap {
648
685
  try? makeSleepConfig(fromString: $0)
649
686
  }
687
+ let nutritionFieldsObjects = nutritionalFields.compactMap {
688
+ NutritionalField(rawValue: $0)
689
+ }
650
690
 
651
691
  let daysValue: Int? = days != nil ? Int(days!) : nil
652
692
  try await connection.requestPermissionsFromHealthKitAndBackfill(
@@ -654,6 +694,7 @@ class SpikeSdk: RCTEventEmitter {
654
694
  forMetrics: metricsObjects,
655
695
  forActivities: activityConfigsObjects,
656
696
  forSleep: sleepConfigsObjects,
697
+ forNutrition: nutritionFieldsObjects,
657
698
  backfillDays: daysValue
658
699
  )
659
700
 
@@ -916,6 +957,7 @@ class SpikeSdk: RCTEventEmitter {
916
957
  metrics:
917
958
  activityConfigs:
918
959
  sleepConfigs:
960
+ nutritionalFields:
919
961
  withResolver:
920
962
  withRejecter:)
921
963
  func enableBackgroundDeliveryV3(
@@ -924,6 +966,7 @@ class SpikeSdk: RCTEventEmitter {
924
966
  metrics: [String],
925
967
  activityConfigs: [String],
926
968
  sleepConfigs: [String],
969
+ nutritionalFields: [String],
927
970
  resolve: @escaping RCTPromiseResolveBlock,
928
971
  reject: @escaping RCTPromiseRejectBlock
929
972
  ) {
@@ -946,12 +989,16 @@ class SpikeSdk: RCTEventEmitter {
946
989
  let sleepConfigsObjects = sleepConfigs.compactMap {
947
990
  try? makeSleepConfig(fromString: $0)
948
991
  }
992
+ let nutritionFieldsObjects = nutritionalFields.compactMap {
993
+ NutritionalField(rawValue: $0)
994
+ }
949
995
 
950
996
  try await connection.enableBackgroundDelivery(
951
997
  forStatistics: stats,
952
998
  forMetrics: metricsObjects,
953
999
  forActivities: activityConfigsObjects,
954
- forSleep: sleepConfigsObjects
1000
+ forSleep: sleepConfigsObjects,
1001
+ forNutrition: nutritionFieldsObjects
955
1002
  )
956
1003
 
957
1004
  resolve(true)
@@ -962,20 +1009,22 @@ class SpikeSdk: RCTEventEmitter {
962
1009
  }
963
1010
 
964
1011
  @objc(backfill:
965
- days:
966
1012
  withStatistics:
967
1013
  metrics:
968
1014
  activityConfigs:
969
1015
  sleepConfigs:
1016
+ nutritionalFields:
1017
+ days:
970
1018
  withResolver:
971
1019
  withRejecter:)
972
1020
  func backfill(
973
1021
  connectionUUID: String,
974
- days: String?,
975
1022
  withStatistics statistics: [String],
976
1023
  metrics: [String],
977
1024
  activityConfigs: [String],
978
1025
  sleepConfigs: [String],
1026
+ nutritionalFields: [String],
1027
+ days: String?,
979
1028
  resolve: @escaping RCTPromiseResolveBlock,
980
1029
  reject: @escaping RCTPromiseRejectBlock
981
1030
  ) {
@@ -997,14 +1046,18 @@ class SpikeSdk: RCTEventEmitter {
997
1046
  let sleepConfigsObjects = sleepConfigs.compactMap {
998
1047
  try? makeSleepConfig(fromString: $0)
999
1048
  }
1049
+ let nutritionFieldsObjects = nutritionalFields.compactMap {
1050
+ NutritionalField(rawValue: $0)
1051
+ }
1000
1052
 
1001
1053
  let daysValue: Int? = days != nil ? Int(days!) : nil
1002
1054
  try await connection.backfill(
1003
- days: daysValue,
1004
1055
  forStatistics: stats,
1005
1056
  forMetrics: metricsObjects,
1006
1057
  forActivities: activityConfigsObjects,
1007
- forSleep: sleepConfigsObjects
1058
+ forSleep: sleepConfigsObjects,
1059
+ forNutrition: nutritionFieldsObjects,
1060
+ days: daysValue
1008
1061
  )
1009
1062
 
1010
1063
  resolve(true)
@@ -1 +1 @@
1
- {"version":3,"names":["_SpikeDataTypes","require","_Spike","_SpikeConnection","_SpikeException","_SpikeRNConnectionAPIv","_ActivityTag","_ActivityType","_ActivityCategory","_InputMethod","_MetricType","_Provider","_ProviderSource","_StatisticsType","_StatisticsInterval","_Unit","_StatisticsFilter","_HealthConnectAvailabilityStatus","_HealthConnectFeature","_SamsungHealthDataAvailabilityStatus","_ActivityAdditionalData","_ActivityConfig","_SleepConfig","_RecordConfig","_LogLevel","_NutritionRecordStatus","_NutritionRecordAnalysisMode","_NutritionalField","_NutritionalUnit","_NutritionRecordUtils","_NutritionRecordIngredientUtils","_default","exports","default","createConnection","getBackgroundConnections","ensurePermissionsAreGranted","isPackageInstalled","isHealthDataAvailable","createConnectionAPIv3","createConnectionAPIv3Legacy","setLogCallback"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAYA,IAAAE,gBAAA,GAAAF,OAAA;AAIA,IAAAG,eAAA,GAAAH,OAAA;AAuEA,IAAAI,sBAAA,GAAAJ,OAAA;AACA,IAAAK,YAAA,GAAAL,OAAA;AACA,IAAAM,aAAA,GAAAN,OAAA;AACA,IAAAO,iBAAA,GAAAP,OAAA;AACA,IAAAQ,YAAA,GAAAR,OAAA;AACA,IAAAS,WAAA,GAAAT,OAAA;AACA,IAAAU,SAAA,GAAAV,OAAA;AACA,IAAAW,eAAA,GAAAX,OAAA;AACA,IAAAY,eAAA,GAAAZ,OAAA;AACA,IAAAa,mBAAA,GAAAb,OAAA;AACA,IAAAc,KAAA,GAAAd,OAAA;AACA,IAAAe,iBAAA,GAAAf,OAAA;AACA,IAAAgB,gCAAA,GAAAhB,OAAA;AACA,IAAAiB,qBAAA,GAAAjB,OAAA;AACA,IAAAkB,oCAAA,GAAAlB,OAAA;AACA,IAAAmB,uBAAA,GAAAnB,OAAA;AACA,IAAAoB,eAAA,GAAApB,OAAA;AAIA,IAAAqB,YAAA,GAAArB,OAAA;AACA,IAAAsB,aAAA,GAAAtB,OAAA;AAQA,IAAAuB,SAAA,GAAAvB,OAAA;AAIA,IAAAwB,sBAAA,GAAAxB,OAAA;AACA,IAAAyB,4BAAA,GAAAzB,OAAA;AAEA,IAAA0B,iBAAA,GAAA1B,OAAA;AACA,IAAA2B,gBAAA,GAAA3B,OAAA;AAGA,IAAA4B,qBAAA,GAAA5B,OAAA;AAIA,IAAA6B,+BAAA,GAAA7B,OAAA;AAGmD,IAAA8B,QAAA,GAAAC,OAAA,CAAAC,OAAA,GA9FpC;EACbC,gBAAgB,EAAhBA,uBAAgB;EAChBC,wBAAwB,EAAxBA,+BAAwB;EACxBC,2BAA2B,EAA3BA,kCAA2B;EAC3BC,kBAAkB,EAAlBA,yBAAkB;EAClBC,qBAAqB,EAArBA,4BAAqB;EACrB;EACAC,qBAAqB,EAArBA,4BAAqB;EACrBC,2BAA2B,EAA3BA,kCAA2B;EAC3BC,cAAc,EAAdA;AACF,CAAC,EAoCD","ignoreList":[]}
1
+ {"version":3,"names":["_SpikeDataTypes","require","_Spike","_SpikeConnection","_SpikeException","_SpikeRNConnectionAPIv","_ActivityTag","_ActivityType","_ActivityCategory","_InputMethod","_MetricType","_Provider","_ProviderSource","_StatisticsType","_StatisticsInterval","_Unit","_StatisticsFilter","_HealthConnectAvailabilityStatus","_HealthConnectFeature","_SamsungHealthDataAvailabilityStatus","_ActivityAdditionalData","_ActivityConfig","_SleepConfig","_RecordConfig","_LogLevel","_NutritionRecordStatus","_NutritionRecordAnalysisMode","_NutritionalField","_NutritionalUnit","_NutritionRecordUtils","_NutritionRecordIngredientUtils","_default","exports","default","createConnection","getBackgroundConnections","ensurePermissionsAreGranted","isPackageInstalled","isHealthDataAvailable","createConnectionAPIv3","createConnectionAPIv3Legacy","setLogCallback"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAYA,IAAAE,gBAAA,GAAAF,OAAA;AAIA,IAAAG,eAAA,GAAAH,OAAA;AAuEA,IAAAI,sBAAA,GAAAJ,OAAA;AACA,IAAAK,YAAA,GAAAL,OAAA;AACA,IAAAM,aAAA,GAAAN,OAAA;AACA,IAAAO,iBAAA,GAAAP,OAAA;AACA,IAAAQ,YAAA,GAAAR,OAAA;AACA,IAAAS,WAAA,GAAAT,OAAA;AACA,IAAAU,SAAA,GAAAV,OAAA;AACA,IAAAW,eAAA,GAAAX,OAAA;AACA,IAAAY,eAAA,GAAAZ,OAAA;AACA,IAAAa,mBAAA,GAAAb,OAAA;AACA,IAAAc,KAAA,GAAAd,OAAA;AACA,IAAAe,iBAAA,GAAAf,OAAA;AACA,IAAAgB,gCAAA,GAAAhB,OAAA;AACA,IAAAiB,qBAAA,GAAAjB,OAAA;AACA,IAAAkB,oCAAA,GAAAlB,OAAA;AACA,IAAAmB,uBAAA,GAAAnB,OAAA;AACA,IAAAoB,eAAA,GAAApB,OAAA;AAIA,IAAAqB,YAAA,GAAArB,OAAA;AACA,IAAAsB,aAAA,GAAAtB,OAAA;AASA,IAAAuB,SAAA,GAAAvB,OAAA;AAIA,IAAAwB,sBAAA,GAAAxB,OAAA;AACA,IAAAyB,4BAAA,GAAAzB,OAAA;AAEA,IAAA0B,iBAAA,GAAA1B,OAAA;AACA,IAAA2B,gBAAA,GAAA3B,OAAA;AAGA,IAAA4B,qBAAA,GAAA5B,OAAA;AAIA,IAAA6B,+BAAA,GAAA7B,OAAA;AAGmD,IAAA8B,QAAA,GAAAC,OAAA,CAAAC,OAAA,GA/FpC;EACbC,gBAAgB,EAAhBA,uBAAgB;EAChBC,wBAAwB,EAAxBA,+BAAwB;EACxBC,2BAA2B,EAA3BA,kCAA2B;EAC3BC,kBAAkB,EAAlBA,yBAAkB;EAClBC,qBAAqB,EAArBA,4BAAqB;EACrB;EACAC,qBAAqB,EAArBA,4BAAqB;EACrBC,2BAA2B,EAA3BA,kCAA2B;EAC3BC,cAAc,EAAdA;AACF,CAAC,EAoCD","ignoreList":[]}
@@ -22,6 +22,14 @@ class SpikeRNConnectionAPIv3 {
22
22
  this.connectionUUID = connectionUUID;
23
23
  }
24
24
 
25
+ /**
26
+ * Closes the SDK connection and releases the native connection handle.
27
+ */
28
+ async close() {
29
+ if (!_SpikeSdk.SpikeSdk) throw new _SpikeException.SpikeException();
30
+ await _SpikeSdk.SpikeSdk.closeV3(this.connectionUUID);
31
+ }
32
+
25
33
  /**
26
34
  * Get information about current user, the most important of which is the list of provider
27
35
  * integrations.
@@ -164,16 +172,17 @@ class SpikeRNConnectionAPIv3 {
164
172
  metricTypes = [],
165
173
  activityConfigs = [],
166
174
  sleepConfigs = [],
175
+ nutritionalFields = [],
167
176
  includeEnhancedPermissions = false,
168
177
  includeBackgroundDelivery = false
169
178
  }) {
170
179
  if (!_SpikeSdk.SpikeSdk) throw new _SpikeException.SpikeException();
171
180
  if (_reactNative.Platform.OS == 'ios') {
172
- await _SpikeSdk.SpikeSdk.requestPermissionsFromHealthKit(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)));
181
+ await _SpikeSdk.SpikeSdk.requestPermissionsFromHealthKit(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)), nutritionalFields);
173
182
  }
174
183
  if (_reactNative.Platform.OS == 'android') {
175
184
  await this.enableHealthConnectIntegration();
176
- const permissions = await _SpikeSdk.SpikeSdk.getHealthConnectPermissions(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)), includeEnhancedPermissions, includeBackgroundDelivery);
185
+ const permissions = await _SpikeSdk.SpikeSdk.getHealthConnectPermissions(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)), nutritionalFields, includeEnhancedPermissions, includeBackgroundDelivery);
177
186
  const result = await _SpikeSdk.SpikeSdk.requestPermissionsFromHealthConnect(this.connectionUUID, permissions);
178
187
  console.log("requestPermissionsFromHealthConnect result: " + result);
179
188
  }
@@ -207,15 +216,16 @@ class SpikeRNConnectionAPIv3 {
207
216
  statisticTypes = [],
208
217
  metricTypes = [],
209
218
  activityConfigs = [],
210
- sleepConfigs = []
219
+ sleepConfigs = [],
220
+ nutritionalFields = []
211
221
  }) {
212
222
  if (!_SpikeSdk.SpikeSdk) throw new _SpikeException.SpikeException();
213
223
  if (_reactNative.Platform.OS == 'ios') {
214
224
  // V3 has to be added because "enableBackgroundDelivery"
215
225
  // method from old sdk is still present.
216
- await _SpikeSdk.SpikeSdk.enableBackgroundDeliveryV3(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)));
226
+ await _SpikeSdk.SpikeSdk.enableBackgroundDeliveryV3(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)), nutritionalFields);
217
227
  } else {
218
- await _SpikeSdk.SpikeSdk.enableBackgroundDelivery(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)));
228
+ await _SpikeSdk.SpikeSdk.enableBackgroundDelivery(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)), nutritionalFields);
219
229
  }
220
230
  }
221
231
 
@@ -236,10 +246,15 @@ class SpikeRNConnectionAPIv3 {
236
246
  statisticTypes = [],
237
247
  metricTypes = [],
238
248
  activityConfigs = [],
239
- sleepConfigs = []
249
+ sleepConfigs = [],
250
+ nutritionalFields = []
240
251
  }) {
241
252
  if (!_SpikeSdk.SpikeSdk) throw new _SpikeException.SpikeException();
242
- await _SpikeSdk.SpikeSdk.backfill(this.connectionUUID, days !== undefined ? String(days) : null, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)));
253
+ if (_reactNative.Platform.OS == 'ios') {
254
+ await _SpikeSdk.SpikeSdk.backfill(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)), nutritionalFields, days !== undefined ? String(days) : null);
255
+ } else {
256
+ await _SpikeSdk.SpikeSdk.backfill(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)), nutritionalFields, days !== undefined ? String(days) : null);
257
+ }
243
258
  }
244
259
 
245
260
  /**
@@ -310,11 +325,12 @@ class SpikeRNConnectionAPIv3 {
310
325
  statisticTypes = [],
311
326
  metricTypes = [],
312
327
  activityConfigs = [],
313
- sleepConfigs = []
328
+ sleepConfigs = [],
329
+ nutritionalFields = []
314
330
  }) {
315
331
  if (_reactNative.Platform.OS !== 'ios') return;
316
332
  if (!_SpikeSdk.SpikeSdk) throw new _SpikeException.SpikeException();
317
- await _SpikeSdk.SpikeSdk.requestPermissionsFromHealthKitAndBackfill(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)), days !== undefined ? String(days) : null);
333
+ await _SpikeSdk.SpikeSdk.requestPermissionsFromHealthKitAndBackfill(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)), nutritionalFields, days !== undefined ? String(days) : null);
318
334
  }
319
335
 
320
336
  // ------------------------- Android specific Health Connect permissions -------------------------
@@ -425,12 +441,13 @@ class SpikeRNConnectionAPIv3 {
425
441
  metricTypes = [],
426
442
  activityConfigs = [],
427
443
  sleepConfigs = [],
444
+ nutritionalFields = [],
428
445
  includeEnhancedPermissions = false,
429
446
  includeBackgroundDelivery = false
430
447
  }) {
431
448
  if (_reactNative.Platform.OS !== 'android') return [];
432
449
  if (!_SpikeSdk.SpikeSdk) throw new _SpikeException.SpikeException();
433
- return await _SpikeSdk.SpikeSdk.getHealthConnectPermissions(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)), includeEnhancedPermissions, includeBackgroundDelivery);
450
+ return await _SpikeSdk.SpikeSdk.getHealthConnectPermissions(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)), nutritionalFields, includeEnhancedPermissions, includeBackgroundDelivery);
434
451
  }
435
452
 
436
453
  /**
@@ -466,7 +483,7 @@ class SpikeRNConnectionAPIv3 {
466
483
  * Enables Health Connect integration, requests permissions for the given categories, then starts a backfill.
467
484
  * Data for today and yesterday is pushed before this method resolves; older days continue in the background.
468
485
  *
469
- * This mirrors the native {@link requestSamsungPermissionsAndBackfill} flow: enable integration,
486
+ * This mirrors the native {@link requestPermissionsFromSamsungHealthDataAndBackfill} flow: enable integration,
470
487
  * request permissions, then run backfill (implemented by composing existing Health Connect APIs).
471
488
  *
472
489
  * For manual control, use {@link enableHealthConnectIntegration}, {@link getHealthConnectPermissions},
@@ -475,12 +492,13 @@ class SpikeRNConnectionAPIv3 {
475
492
  * @category Android Health Connect
476
493
  * @category Backfill
477
494
  */
478
- async requestHealthConnectPermissionsAndBackfill({
495
+ async requestPermissionsFromHealthConnectAndBackfill({
479
496
  days = undefined,
480
497
  statisticTypes = [],
481
498
  metricTypes = [],
482
499
  activityConfigs = [],
483
500
  sleepConfigs = [],
501
+ nutritionalFields = [],
484
502
  includeEnhancedPermissions = false,
485
503
  includeBackgroundDelivery = false
486
504
  }) {
@@ -492,6 +510,7 @@ class SpikeRNConnectionAPIv3 {
492
510
  metricTypes,
493
511
  activityConfigs,
494
512
  sleepConfigs,
513
+ nutritionalFields,
495
514
  includeEnhancedPermissions,
496
515
  includeBackgroundDelivery
497
516
  });
@@ -503,7 +522,8 @@ class SpikeRNConnectionAPIv3 {
503
522
  statisticTypes,
504
523
  metricTypes,
505
524
  activityConfigs,
506
- sleepConfigs
525
+ sleepConfigs,
526
+ nutritionalFields
507
527
  });
508
528
  }
509
529
 
@@ -593,11 +613,12 @@ class SpikeRNConnectionAPIv3 {
593
613
  statisticTypes = [],
594
614
  metricTypes = [],
595
615
  activityConfigs = [],
596
- sleepConfigs = []
616
+ sleepConfigs = [],
617
+ nutritionalFields = []
597
618
  }) {
598
619
  if (_reactNative.Platform.OS !== 'android') return [];
599
620
  if (!_SpikeSdk.SpikeSdk) throw new _SpikeException.SpikeException();
600
- return await _SpikeSdk.SpikeSdk.getSamsungHealthDataPermissions(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)));
621
+ return await _SpikeSdk.SpikeSdk.getSamsungHealthDataPermissions(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)), nutritionalFields);
601
622
  }
602
623
 
603
624
  /**
@@ -613,11 +634,12 @@ class SpikeRNConnectionAPIv3 {
613
634
  statisticTypes = [],
614
635
  metricTypes = [],
615
636
  activityConfigs = [],
616
- sleepConfigs = []
637
+ sleepConfigs = [],
638
+ nutritionalFields = []
617
639
  }) {
618
640
  if (_reactNative.Platform.OS !== 'android') return [];
619
641
  if (!_SpikeSdk.SpikeSdk) throw new _SpikeException.SpikeException();
620
- return await _SpikeSdk.SpikeSdk.requestPermissionsFromSamsungHealthData(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)));
642
+ return await _SpikeSdk.SpikeSdk.requestPermissionsFromSamsungHealthData(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)), nutritionalFields);
621
643
  }
622
644
 
623
645
  /**
@@ -629,16 +651,17 @@ class SpikeRNConnectionAPIv3 {
629
651
  * @category Samsung Health Data
630
652
  * @category Backfill
631
653
  */
632
- async requestSamsungPermissionsAndBackfill({
654
+ async requestPermissionsFromSamsungHealthDataAndBackfill({
633
655
  days = undefined,
634
656
  statisticTypes = [],
635
657
  metricTypes = [],
636
658
  activityConfigs = [],
637
- sleepConfigs = []
659
+ sleepConfigs = [],
660
+ nutritionalFields = []
638
661
  }) {
639
662
  if (_reactNative.Platform.OS !== 'android') return;
640
663
  if (!_SpikeSdk.SpikeSdk) throw new _SpikeException.SpikeException();
641
- await _SpikeSdk.SpikeSdk.requestSamsungPermissionsAndBackfill(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)), days !== undefined ? String(days) : null);
664
+ await _SpikeSdk.SpikeSdk.requestPermissionsFromSamsungHealthDataAndBackfill(this.connectionUUID, statisticTypes, metricTypes, activityConfigs.map(object => JSON.stringify(object)), sleepConfigs.map(object => JSON.stringify(object)), nutritionalFields, days !== undefined ? String(days) : null);
642
665
  }
643
666
 
644
667
  // ------------------------- Nutrition AI -------------------------