react-native-mytatva-rn-sdk 1.2.73 → 1.2.74

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.
Binary file
@@ -359,21 +359,25 @@ public class BleGattCallback extends BluetoothGattCallback {
359
359
  if (period > 3000 || period < 800) {
360
360
  period = 800;
361
361
  }
362
+ // Capture current characteristic to avoid null races inside the async lambda
363
+ final BluetoothGattCharacteristic characteristic = mCharacteristic;
364
+
362
365
  mDisposable = Observable.intervalRange(1, count, initialDelay, period, TimeUnit.MILLISECONDS)
363
366
  .observeOn(Schedulers.io())
364
367
  .subscribe(aLong -> {
365
- if (mBluetoothGatt != null && mCharacteristic != null) {
366
- MyLog.d("intervalRange循环 发送数据 次数 " + aLong + "数据 " + HexadecimalTools.ByteArrayToStrs16(mCharacteristic.getValue()));
368
+ if (mBluetoothGatt != null && characteristic != null) {
369
+ byte[] value = characteristic.getValue();
370
+ MyLog.d("intervalRange循环 发送数据 次数 " + aLong + "数据 " + HexadecimalTools.ByteArrayToStrs16(value));
367
371
  mBluetoothGatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_BALANCED);
368
- mBluetoothGatt.writeCharacteristic(mCharacteristic);
372
+ mBluetoothGatt.writeCharacteristic(characteristic);
373
+ if (aLong >= 5 && value != null && value.length > 0 && value[0] != 0x17) {
374
+ MyLog.e("超出命令发送的最大限制 关闭连接");
375
+ closeGatt();
376
+ }
369
377
  } else {
370
378
  MyLog.w("intervalRange 循环没有数据发送 " + aLong);
371
379
  dispose();
372
380
  }
373
- if (aLong >= 5 && mCharacteristic.getValue()[0] != 0x17) {
374
- MyLog.e("超出命令发送的最大限制 关闭连接");
375
- closeGatt();
376
- }
377
381
  }, throwable -> {
378
382
  MyLog.w("intervalRange 异常 " + throwable.getMessage());
379
383
  dispose();
@@ -23,13 +23,19 @@ import com.facebook.react.bridge.Promise
23
23
  import com.facebook.react.bridge.ReactApplicationContext
24
24
  import com.facebook.react.bridge.ReactContextBaseJavaModule
25
25
  import com.facebook.react.bridge.ReactMethod
26
+ import com.facebook.react.bridge.ReadableMap
26
27
  import com.facebook.react.bridge.WritableMap
27
28
  import com.facebook.react.module.annotations.ReactModule
28
29
  import com.facebook.react.modules.core.DeviceEventManagerModule
29
30
  import com.google.gson.Gson
30
31
  import com.google.gson.GsonBuilder
31
- import io.sentry.Sentry
32
+ import io.sentry.IScope
33
+ import io.sentry.IHub
32
34
  import io.sentry.android.core.SentryAndroid
35
+ import io.sentry.android.core.SentryAndroidOptions
36
+ import io.sentry.Hub
37
+ import io.sentry.SentryLevel
38
+ import io.sentry.SentryEvent
33
39
  import com.mytatvarnsdk.activity.HelpActivity
34
40
  import com.mytatvarnsdk.activity.StartCGMActivity
35
41
  import com.mytatvarnsdk.model.AllCGMLogRequest
@@ -85,6 +91,7 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
85
91
  private val pendingDataQueue = ConcurrentLinkedQueue<PocGlucose>()
86
92
  private val metadataLock = Mutex()
87
93
  private var uploadJob: Job? = null
94
+ private var currentUserData: ReadableMap? = null
88
95
 
89
96
  init {
90
97
  mReactContext = reactContext
@@ -99,13 +106,141 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
99
106
  }
100
107
 
101
108
  private fun initSentryIfNeeded(context: ReactApplicationContext) {
109
+ // Create a separate Sentry Hub with SDK's own DSN
110
+ // This ensures we don't interfere with RN app's Sentry instance
111
+ // We create our own Hub WITHOUT calling SentryAndroid.init() to avoid overriding global Sentry
102
112
  if (sentryInitialized.compareAndSet(false, true)) {
103
- SentryAndroid.init(context.applicationContext) { options ->
104
- options.dsn = "https://8c1585c04b41a8bdf3271d89c7361530@o4509755819294720.ingest.us.sentry.io/4510520864735232"
105
- options.isDebug = true // remove or toggle for production
106
- options.tracesSampleRate = 1.0
113
+ try {
114
+ Log.d("Sentry", "Initializing SDK Sentry with separate Hub and DSN (not affecting global Sentry)")
115
+
116
+ // Create SentryOptions with SDK's DSN
117
+ // Use SentryAndroidOptions for Android-specific configuration
118
+ val options = SentryAndroidOptions().apply {
119
+ dsn = "https://8c1585c04b41a8bdf3271d89c7361530@o4509755819294720.ingest.us.sentry.io/4510520864735232"
120
+ isDebug = true // remove or toggle for production
121
+ tracesSampleRate = 1.0
122
+ environment = env.ifEmpty { "development" }
123
+ // Configure Android-specific options
124
+ setAttachScreenshot(false)
125
+ setAttachViewHierarchy(false)
126
+ }
127
+
128
+ // Set Android context - this is needed for Android integrations
129
+ // But we DON'T call SentryAndroid.init() to avoid overriding global Sentry
130
+ val androidContext = context.applicationContext
131
+
132
+ // Manually configure Android-specific settings if needed
133
+ // Note: Some Android integrations might not work without init(), but core functionality will
134
+
135
+ // Create a separate Hub for SDK use (doesn't affect global Sentry)
136
+ sdkSentryHub = Hub(options)
137
+
138
+ // Capture initial message after a brief delay to ensure Sentry is ready
139
+ Handler(Looper.getMainLooper()).postDelayed({
140
+ try {
141
+ val sentryMessage = io.sentry.protocol.Message().apply {
142
+ formatted = "Goodflip SDK started"
143
+ }
144
+ val event = SentryEvent().apply {
145
+ setMessage(sentryMessage)
146
+ level = SentryLevel.INFO
147
+ }
148
+ sdkSentryHub?.captureEvent(event)
149
+ Log.d("Sentry", "Goodflip SDK started message sent to SDK Sentry")
150
+ } catch (e: Exception) {
151
+ Log.e("Sentry", "Error sending initial message: ${e.message}", e)
152
+ }
153
+ }, 200)
154
+ } catch (e: Exception) {
155
+ Log.e("Sentry", "Error initializing SDK Sentry: ${e.message}", e)
156
+ sentryInitialized.set(false) // Reset on error so we can try again
157
+ }
158
+ }
159
+ }
160
+
161
+ private fun captureSentryMessage(message: String, extras: Map<String, String> = emptyMap()) {
162
+ try {
163
+ // Always try to use Sentry - it might be initialized by RN app even if our flag is false
164
+ // Ensure we're on main thread for Sentry operations
165
+ if (Looper.myLooper() == Looper.getMainLooper()) {
166
+ captureSentryMessageInternal(message, extras)
167
+ } else {
168
+ Handler(Looper.getMainLooper()).post {
169
+ captureSentryMessageInternal(message, extras)
170
+ }
171
+ }
172
+ } catch (e: Exception) {
173
+ Log.e("Sentry", "Error capturing Sentry message: ${e.message}", e)
174
+ }
175
+ }
176
+
177
+ private fun captureSentryMessageInternal(message: String, extras: Map<String, String> = emptyMap()) {
178
+ try {
179
+ val hub = sdkSentryHub
180
+ if (hub == null) {
181
+ Log.w("Sentry", "SDK Sentry Hub not initialized, skipping message: $message")
182
+ return
183
+ }
184
+
185
+ hub.withScope { scope ->
186
+ addContact(scope)
187
+ extras.forEach { (key, value) ->
188
+ scope.setExtra(key, value)
189
+ }
190
+ val msgText = message
191
+ val sentryMessage = io.sentry.protocol.Message().apply {
192
+ formatted = msgText
193
+ }
194
+ val event = SentryEvent().apply {
195
+ setMessage(sentryMessage)
196
+ level = SentryLevel.INFO
197
+ }
198
+ hub.captureEvent(event)
199
+ Log.d("Sentry", "Message captured to SDK Sentry: $msgText")
200
+ }
201
+ } catch (e: Exception) {
202
+ Log.e("Sentry", "Error in captureSentryMessageInternal: ${e.message}", e)
203
+ }
204
+ }
205
+
206
+ private fun captureSentryException(exception: Throwable, extras: Map<String, String> = emptyMap()) {
207
+ try {
208
+ // Always try to use Sentry - it might be initialized by RN app even if our flag is false
209
+ // Ensure we're on main thread for Sentry operations
210
+ if (Looper.myLooper() == Looper.getMainLooper()) {
211
+ captureSentryExceptionInternal(exception, extras)
212
+ } else {
213
+ Handler(Looper.getMainLooper()).post {
214
+ captureSentryExceptionInternal(exception, extras)
215
+ }
216
+ }
217
+ } catch (e: Exception) {
218
+ Log.e("Sentry", "Error capturing Sentry exception: ${e.message}", e)
219
+ }
220
+ }
221
+
222
+ private fun captureSentryExceptionInternal(exception: Throwable, extras: Map<String, String> = emptyMap()) {
223
+ try {
224
+ val hub = sdkSentryHub
225
+ if (hub == null) {
226
+ Log.w("Sentry", "SDK Sentry Hub not initialized, skipping exception: ${exception.message}")
227
+ return
228
+ }
229
+
230
+ hub.withScope { scope ->
231
+ addContact(scope)
232
+ extras.forEach { (key, value) ->
233
+ scope.setExtra(key, value)
234
+ }
235
+ val event = SentryEvent().apply {
236
+ throwable = exception
237
+ level = SentryLevel.ERROR
238
+ }
239
+ hub.captureEvent(event)
240
+ Log.d("Sentry", "Exception captured to SDK Sentry: ${exception.message}")
107
241
  }
108
- Sentry.captureMessage("Goodflip SDK started")
242
+ } catch (e: Exception) {
243
+ Log.e("Sentry", "Error in captureSentryExceptionInternal: ${e.message}", e)
109
244
  }
110
245
  }
111
246
 
@@ -115,12 +250,22 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
115
250
  var userToken: String = ""
116
251
  var env: String = ""
117
252
  private val sentryInitialized = AtomicBoolean(false)
253
+ private var sdkSentryHub: IHub? = null
118
254
  }
119
255
 
120
256
  override fun getName(): String {
121
257
  return "CgmTrackyLib"
122
258
  }
123
259
 
260
+ private fun updateUserData(data: ReadableMap?) {
261
+ currentUserData = data
262
+ }
263
+
264
+ private fun addContact(scope: IScope) {
265
+ val contact = currentUserData?.getString("contact_no") ?: "unknown"
266
+ scope.setExtra("contact_no", contact)
267
+ }
268
+
124
269
  @ReactMethod
125
270
  fun observeDeviceStatus(token: String, envType: String) {
126
271
  try {
@@ -149,9 +294,11 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
149
294
  token: String,
150
295
  apiResponse: String?,
151
296
  patientId: String,
152
- envType: String
297
+ envType: String,
298
+ userData: ReadableMap? = null
153
299
  ) {
154
300
  try {
301
+ updateUserData(userData)
155
302
  if (apiResponse != null && apiResponse.isNotEmpty()) {
156
303
  env = envType
157
304
  userToken = token
@@ -376,8 +523,9 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
376
523
  }
377
524
 
378
525
  @ReactMethod
379
- fun startCgmTracky(token: String, envType: String) {
526
+ fun startCgmTracky(token: String, envType: String, userData: ReadableMap? = null) {
380
527
  try {
528
+ updateUserData(userData)
381
529
  userToken = token
382
530
  env = envType.lowercase()
383
531
  val intent = Intent(currentActivity, StartCGMActivity::class.java)
@@ -400,8 +548,9 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
400
548
  }
401
549
 
402
550
  @ReactMethod
403
- fun reconnectCgmTracky(token: String, envType: String) {
551
+ fun reconnectCgmTracky(token: String, envType: String, userData: ReadableMap? = null) {
404
552
  try {
553
+ updateUserData(userData)
405
554
  userToken = token
406
555
  env = envType.lowercase()
407
556
  currentActivity?.startActivity(
@@ -427,8 +576,14 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
427
576
 
428
577
 
429
578
  @ReactMethod
430
- fun observeGlucoseData(token: String, isForClear: Boolean = false, envType: String) {
579
+ fun observeGlucoseData(
580
+ token: String,
581
+ isForClear: Boolean = false,
582
+ envType: String,
583
+ userData: ReadableMap? = null
584
+ ) {
431
585
  try {
586
+ updateUserData(userData)
432
587
  userToken = token
433
588
  env = envType
434
589
 
@@ -555,6 +710,15 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
555
710
  try {
556
711
  // Additional safety check
557
712
  if (pocGlucose.glucoseId == null) {
713
+ val timeInMillis = pocGlucose.timeInMillis?.let { it.toString() } ?: "null"
714
+ captureSentryMessage(
715
+ "handleGlucoseData: glucoseId null, skipping",
716
+ mapOf(
717
+ "envType" to envType,
718
+ "glucoseId" to "null",
719
+ "timeInMillis" to timeInMillis
720
+ )
721
+ )
558
722
  Log.w("handleGlucoseData", "Glucose ID is null, skipping processing")
559
723
  return
560
724
  }
@@ -573,6 +737,16 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
573
737
  val json = gson.toJson(request)
574
738
 
575
739
  Log.d("Glucose data 3 min==> ", "Glucose data 3 min==> final Json: $json")
740
+ val glucoseId = pocGlucose.glucoseId?.let { it.toString() } ?: "null"
741
+ val timeInMillis = pocGlucose.timeInMillis?.let { it.toString() } ?: "null"
742
+ captureSentryMessage(
743
+ "handleGlucoseData: single upload start",
744
+ mapOf(
745
+ "glucoseId" to glucoseId,
746
+ "timeInMillis" to timeInMillis,
747
+ "envType" to envType
748
+ )
749
+ )
576
750
 
577
751
  authenticateSDKService.postCGMData(
578
752
  environment = if (envType.lowercase() == "uat") TATVA_ENVIRONMENT.STAGE else TATVA_ENVIRONMENT.PROD,
@@ -580,11 +754,27 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
580
754
  token = userToken,
581
755
  responseListener = object : AuthenticateSDKService.ResponseListener {
582
756
  override fun onResponseSuccess(response: String) {
757
+ val glucoseId = pocGlucose.glucoseId?.let { it.toString() } ?: "null"
758
+ captureSentryMessage(
759
+ "handleGlucoseData: single upload success",
760
+ mapOf(
761
+ "glucoseId" to glucoseId,
762
+ "envType" to envType
763
+ )
764
+ )
583
765
  updateSyncMetadata(pocGlucose)
584
766
  Log.d("CGM Data", "Single glucose data uploaded successfully")
585
767
  }
586
768
 
587
769
  override fun onResponseFail() {
770
+ val glucoseId = pocGlucose.glucoseId?.let { it.toString() } ?: "null"
771
+ captureSentryMessage(
772
+ "handleGlucoseData: single upload fail",
773
+ mapOf(
774
+ "glucoseId" to glucoseId,
775
+ "envType" to envType
776
+ )
777
+ )
588
778
  Log.e("CGM Data", "Failed to upload single glucose data")
589
779
  }
590
780
  }
@@ -597,10 +787,26 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
597
787
  )
598
788
  } */
599
789
  } else {
790
+ val glucoseId = pocGlucose.glucoseId?.let { it.toString() } ?: "null"
791
+ captureSentryMessage(
792
+ "handleGlucoseData: glucose error ${pocGlucose.errorCode}",
793
+ mapOf(
794
+ "envType" to envType,
795
+ "glucoseId" to glucoseId
796
+ )
797
+ )
600
798
  Log.d("handleGlucoseData", "Glucose data has error: ${pocGlucose.errorCode}")
601
799
  handleGlucoseError(pocGlucose, envType)
602
800
  }
603
801
  } catch (e: Exception) {
802
+ val glucoseId = pocGlucose.glucoseId?.let { it.toString() } ?: "null"
803
+ captureSentryException(
804
+ e,
805
+ mapOf(
806
+ "glucoseId" to glucoseId,
807
+ "envType" to envType
808
+ )
809
+ )
604
810
  Log.e("handleGlucoseData", "Error handling glucose data: ${e.message}")
605
811
  e.printStackTrace()
606
812
  }
@@ -653,9 +859,17 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
653
859
  }
654
860
 
655
861
  @ReactMethod
656
- fun observeAllGlucoseData(token: String, isForClear: Boolean = false, envType: String) {
862
+ fun observeAllGlucoseData(
863
+ token: String,
864
+ isForClear: Boolean = false,
865
+ envType: String,
866
+ userData: ReadableMap? = null
867
+ ) {
657
868
  Log.d("function call", "observeAllGlucoseData")
658
869
 
870
+ // Ensure Sentry is initialized
871
+ mReactContext?.let { initSentryIfNeeded(it) }
872
+
659
873
  // Use atomic compareAndSet to prevent concurrent batch processing
660
874
  if (!isBatchProcessing.compareAndSet(false, true)) {
661
875
  Log.d("observeAllGlucoseData", "Batch processing already in progress, skipping duplicate call")
@@ -663,6 +877,7 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
663
877
  }
664
878
 
665
879
  userToken = token
880
+ updateUserData(userData)
666
881
  env = envType
667
882
 
668
883
  CoroutineScope(Dispatchers.IO).launch {
@@ -678,15 +893,43 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
678
893
  }
679
894
 
680
895
  val lastSyncData = prefsHelper?.lastSyncData
681
- Log.d("lastSyncData: ", Gson().toJson(lastSyncData).toString())
896
+
897
+ val lastSyncDataJson = Gson().toJson(lastSyncData).toString()
898
+ captureSentryMessage(
899
+ "observeAllGlucoseData method =====",
900
+ mapOf("lastSyncData" to lastSyncDataJson)
901
+ )
902
+ Log.d("lastSyncData: ", lastSyncDataJson)
682
903
 
683
904
  val currentTime = System.currentTimeMillis()
684
905
  val dataAge = if (lastSyncData != null) currentTime - lastSyncData.timeInMillis else 0L
685
906
 
907
+ captureSentryMessage(
908
+ "observeAllGlucoseData method",
909
+ mapOf(
910
+ "currentTime" to currentTime.toString(),
911
+ "dataAge" to dataAge.toString(),
912
+ "lastSyncData" to Gson().toJson(lastSyncData).toString()
913
+ )
914
+ )
915
+
686
916
  if (lastSyncData != null && dataAge > 3 * 60 * 1000L) {
687
917
  val glucoseData = mModel.getGlucoseBetweenTime(lastSyncData.timeInMillis)
688
918
 
689
- Log.d("observeAllGlucoseData", "Retrieved ${glucoseData?.size ?: 0} records from DB")
919
+ val glucoseCount = glucoseData?.size ?: 0
920
+ val lastEntry = glucoseData?.lastOrNull()
921
+ val lastEntryGlucoseId = lastEntry?.glucoseId?.let { it.toString() } ?: "null"
922
+ val lastEntryTimeInMillis = lastEntry?.timeInMillis?.let { it.toString() } ?: "null"
923
+ captureSentryMessage(
924
+ "observeAllGlucoseData batch fetch",
925
+ mapOf(
926
+ "glucoseCount" to glucoseCount.toString(),
927
+ "lastEntry_glucoseId" to lastEntryGlucoseId,
928
+ "lastEntry_timeInMillis" to lastEntryTimeInMillis
929
+ )
930
+ )
931
+
932
+ Log.d("observeAllGlucoseData", "Retrieved ${glucoseCount} records from DB")
690
933
 
691
934
  // Combine database data with pending queue data
692
935
  val allData = mutableListOf<PocGlucose>()
@@ -714,12 +957,30 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
714
957
  }
715
958
 
716
959
  if (sortedGlucoseData.isNotEmpty()) {
960
+ captureSentryMessage(
961
+ "observeAllGlucoseData: got data",
962
+ mapOf(
963
+ "sortedCount" to sortedGlucoseData.size.toString(),
964
+ "oldestTime" to sortedGlucoseData.first().timeInMillis.toString(),
965
+ "newestTime" to sortedGlucoseData.last().timeInMillis.toString()
966
+ )
967
+ )
968
+
717
969
  processBatchDataAndStartObserver(
718
970
  sortedGlucoseData,
719
971
  isForClear,
720
972
  envType
721
973
  )
722
974
  } else {
975
+ val lastSyncTime = lastSyncData?.timeInMillis?.let { it.toString() } ?: "null"
976
+ captureSentryMessage(
977
+ "observeAllGlucoseData: No historical data found, starting live observation",
978
+ mapOf(
979
+ "pendingCount" to pendingData.size.toString(),
980
+ "lastSyncTime" to lastSyncTime
981
+ )
982
+ )
983
+
723
984
  Log.d(
724
985
  "observeAllGlucoseData",
725
986
  "No historical data found, starting live observation"
@@ -733,6 +994,18 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
733
994
  } else {
734
995
  // No batch needed, but process pending data if any
735
996
  if (pendingData.isNotEmpty()) {
997
+ val lastPending = pendingData.lastOrNull()
998
+ val lastPendingGlucoseId = lastPending?.glucoseId?.let { it.toString() } ?: "null"
999
+ val lastPendingTime = lastPending?.timeInMillis?.let { it.toString() } ?: "null"
1000
+ captureSentryMessage(
1001
+ "observeAllGlucoseData: no btach process, processing pending items",
1002
+ mapOf(
1003
+ "pendingCount" to pendingData.size.toString(),
1004
+ "lastPendingGlucoseId" to lastPendingGlucoseId,
1005
+ "lastPendingTime" to lastPendingTime
1006
+ )
1007
+ )
1008
+
736
1009
  Log.d("observeAllGlucoseData", "Processing ${pendingData.size} pending items")
737
1010
  pendingData.forEach { data ->
738
1011
  val glucoseId = data.glucoseId
@@ -749,6 +1022,10 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
749
1022
  }
750
1023
  }
751
1024
  } catch (e: Exception) {
1025
+ captureSentryException(
1026
+ e,
1027
+ mapOf("errorMessage" to "observeAllGlucoseData, Error in batch processing: ${e.message}")
1028
+ )
752
1029
  Log.e("observeAllGlucoseData", "Error in batch processing: ${e.message}", e)
753
1030
  } finally {
754
1031
  // Always reset the flag
@@ -774,8 +1051,16 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
774
1051
 
775
1052
  if (success) {
776
1053
  Log.d("processBatchDataAndStartObserver", "Batch processing completed successfully")
1054
+ captureSentryMessage(
1055
+ "processBatchDataAndStartObserver: batch success",
1056
+ mapOf("dataListSize" to dataList.size.toString())
1057
+ )
777
1058
  } else {
778
1059
  Log.w("processBatchDataAndStartObserver", "Batch processing had failures")
1060
+ captureSentryMessage(
1061
+ "processBatchDataAndStartObserver: batch failures",
1062
+ mapOf("dataListSize" to dataList.size.toString())
1063
+ )
779
1064
  }
780
1065
 
781
1066
  // Don't reset flag here - it's reset in observeAllGlucoseData's finally block
@@ -797,6 +1082,10 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
797
1082
  }
798
1083
 
799
1084
  } catch (e: Exception) {
1085
+ captureSentryException(
1086
+ e,
1087
+ mapOf("dataListSize" to dataList.size.toString())
1088
+ )
800
1089
  Log.e("processBatchDataAndStartObserver", "Error in batch processing: ${e.message}")
801
1090
  // Start live observation even on error
802
1091
  withContext(Dispatchers.Main) {
@@ -1016,9 +1305,23 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
1016
1305
  if (uploadSuccessful) {
1017
1306
  lastSyncedRecord = batch.lastOrNull()
1018
1307
  // Update sync metadata after each successful batch
1308
+ captureSentryMessage(
1309
+ "Batch Upload: ✅ Batch $index uploaded and synced successfully",
1310
+ mapOf(
1311
+ "envType" to env,
1312
+ "lastSyncedRecord" to Gson().toJson(lastSyncedRecord ?: "null")
1313
+ )
1314
+ )
1019
1315
  updateSyncMetadata(lastSyncedRecord)
1020
1316
  Log.d("Batch Upload", "✅ Batch $index uploaded and synced successfully")
1021
1317
  } else {
1318
+ captureSentryMessage(
1319
+ "Batch Upload: ❌ Batch $index failed",
1320
+ mapOf(
1321
+ "envType" to env,
1322
+ "lastSyncedRecord" to Gson().toJson(lastSyncedRecord ?: "null")
1323
+ )
1324
+ )
1022
1325
  allBatchesSuccessful = false
1023
1326
  Log.e("Batch Upload", "❌ Batch $index failed")
1024
1327
  // Continue with next batch instead of breaking (optional based on your needs)
@@ -1029,6 +1332,15 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
1029
1332
  delay(500L)
1030
1333
 
1031
1334
  } catch (e: Exception) {
1335
+ captureSentryException(
1336
+ e,
1337
+ mapOf(
1338
+ "batchIndex" to index.toString(),
1339
+ "batchSize" to batch.size.toString(),
1340
+ "envType" to env,
1341
+ "lastSyncedRecord" to Gson().toJson(lastSyncedRecord ?: "null")
1342
+ )
1343
+ )
1032
1344
  Log.e("Batch Upload", "❌ Batch $index exception: ${e.message}")
1033
1345
  allBatchesSuccessful = false
1034
1346
  // Continue processing other batches
@@ -1102,15 +1414,36 @@ class CgmTrackyLibModule(reactContext: ReactApplicationContext) :
1102
1414
  token = userToken,
1103
1415
  responseListener = object : AuthenticateSDKService.ResponseListener {
1104
1416
  override fun onResponseSuccess(response: String) {
1417
+ captureSentryMessage(
1418
+ "uploadBatchSynchronously: success",
1419
+ mapOf(
1420
+ "batchIndex" to batchIndex.toString(),
1421
+ "envType" to envType
1422
+ )
1423
+ )
1105
1424
  continuation.resume(true)
1106
1425
  }
1107
1426
 
1108
1427
  override fun onResponseFail() {
1428
+ captureSentryMessage(
1429
+ "uploadBatchSynchronously: fail",
1430
+ mapOf(
1431
+ "batchIndex" to batchIndex.toString(),
1432
+ "envType" to envType
1433
+ )
1434
+ )
1109
1435
  continuation.resume(false)
1110
1436
  }
1111
1437
  }
1112
1438
  )
1113
1439
  } catch (e: Exception) {
1440
+ captureSentryException(
1441
+ e,
1442
+ mapOf(
1443
+ "batchIndex" to batchIndex.toString(),
1444
+ "envType" to envType
1445
+ )
1446
+ )
1114
1447
  Log.e("uploadBatchSynchronously", "Exception in batch $batchIndex: ${e.message}")
1115
1448
  continuation.resume(false)
1116
1449
  }
@@ -31,9 +31,23 @@
31
31
  + (KLTDatabaseHandler *)shared {
32
32
  static KLTDatabaseHandler *handler;
33
33
  static dispatch_once_t onceToken;
34
- dispatch_once(&onceToken, ^{
35
- handler = [[self alloc] init];
36
- });
34
+
35
+ // IMPORTANT:
36
+ // CoreData context in this SDK is NSMainQueueConcurrencyType.
37
+ // If `shared` is first initialized from a background queue, CoreBluetooth can later call
38
+ // `willRestoreState` on the main queue and block waiting on dispatch_once, producing an ANR.
39
+ // Force initialization to happen on the main thread to avoid dispatch_once contention/deadlock.
40
+ if ([NSThread isMainThread]) {
41
+ dispatch_once(&onceToken, ^{
42
+ handler = [[self alloc] init];
43
+ });
44
+ } else {
45
+ dispatch_sync(dispatch_get_main_queue(), ^{
46
+ dispatch_once(&onceToken, ^{
47
+ handler = [[self alloc] init];
48
+ });
49
+ });
50
+ }
37
51
  return handler;
38
52
  }
39
53
 
@@ -69,7 +69,6 @@ class AttachTransmitterViewController: UIViewController {
69
69
 
70
70
 
71
71
  let data = KLTDatabaseHandler.shared().queryAllReceiveData() as! [ReceiveData]
72
- print(data)
73
72
  print("===> all data count: ", data.count)
74
73
  // KLTDatabaseHandler.shared().reloadQueryHistoryData()
75
74
 
@@ -485,8 +485,6 @@ class FinalViewModel: NSObject {
485
485
  print("⚠️ Failed to cast queryAllReceiveData() to [ReceiveData]")
486
486
  return
487
487
  }
488
-
489
- print(data)
490
488
  print("===> all data count: \(data.count)")
491
489
 
492
490
  // Ensure device exists
@@ -54,31 +54,31 @@ function removeCGMEventListener() {
54
54
  eventSubscription = null;
55
55
  }
56
56
  }
57
- const startCGM = async (token, envType) => {
57
+ const startCGM = async (token, envType, userData) => {
58
58
  console.log('startCGM===');
59
59
  try {
60
- const result = await cgmLib.startCgmTracky(token, envType);
60
+ const result = _reactNative.Platform.OS === 'android' ? await cgmLib.startCgmTracky(token, envType, userData) : await cgmLib.startCgmTracky(token, envType);
61
61
  console.log(result);
62
62
  } catch (error) {
63
63
  console.error(error);
64
64
  }
65
65
  };
66
66
  exports.startCGM = startCGM;
67
- const reconnectCGM = async (token, envType) => {
67
+ const reconnectCGM = async (token, envType, userData) => {
68
68
  console.log('reconnectCGM====');
69
69
  try {
70
- const result = await cgmLib.reconnectCgmTracky(token, envType);
70
+ const result = _reactNative.Platform.OS === 'android' ? await cgmLib.reconnectCgmTracky(token, envType, userData) : await cgmLib.reconnectCgmTracky(token, envType);
71
71
  console.log(result);
72
72
  } catch (error) {
73
73
  console.error(error);
74
74
  }
75
75
  };
76
76
  exports.reconnectCGM = reconnectCGM;
77
- const observeAllGlucoseDataHandler = async (token, isCleanData, envType) => {
77
+ const observeAllGlucoseDataHandler = async (token, isCleanData, envType, userData) => {
78
78
  console.log('observeAllGlucoseDataHandler====');
79
79
  try {
80
80
  if (_reactNative.Platform.OS === 'android') {
81
- const result = await cgmLib.observeAllGlucoseData(token, isCleanData, envType);
81
+ const result = await cgmLib.observeAllGlucoseData(token, isCleanData, envType, userData);
82
82
  const deviceStatus = await cgmLib.observeDeviceStatus(token, envType);
83
83
  console.log(result);
84
84
  console.log(deviceStatus);
@@ -102,10 +102,10 @@ const helpCGM = async (token, envType) => {
102
102
  }
103
103
  };
104
104
  exports.helpCGM = helpCGM;
105
- const observeTransmitterUnbindStatusHandler = async (token, apiResponse, patientId, envType) => {
105
+ const observeTransmitterUnbindStatusHandler = async (token, apiResponse, patientId, envType, userData) => {
106
106
  console.log('observeTransmitterUnbindStatusHandler====');
107
107
  try {
108
- const result = await cgmLib.observeTransmitterUnbindStatus(token, apiResponse, patientId, envType);
108
+ const result = _reactNative.Platform.OS === 'android' ? await cgmLib.observeTransmitterUnbindStatus(token, apiResponse, patientId, envType, userData) : await cgmLib.observeTransmitterUnbindStatus(token, apiResponse, patientId, envType);
109
109
  console.log(result);
110
110
  } catch (error) {
111
111
  console.error(error);
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","eventSubscription","LINKING_ERROR","Platform","select","ios","default","cgmLib","NativeModules","CgmTrackyLib","Proxy","get","Error","initializeCGMEventListener","callback","iosEventEmitter","NativeEventEmitter","remove","OS","DeviceEventEmitter","addListener","eventData","status","removeCGMEventListener","startCGM","token","envType","console","log","result","startCgmTracky","error","exports","reconnectCGM","reconnectCgmTracky","observeAllGlucoseDataHandler","isCleanData","observeAllGlucoseData","deviceStatus","observeDeviceStatus","helpCGM","openHelpSupport","observeTransmitterUnbindStatusHandler","apiResponse","patientId","observeTransmitterUnbindStatus","observeResetLogoutHandler","resetCgmState","getSqliteDBPath","getTrackLibDbPath","stopCGM","getCgmLogFilePaths","getCgmLogFiles","length"],"sources":["CGMConnect.ts"],"sourcesContent":["import {\n DeviceEventEmitter,\n EmitterSubscription,\n NativeEventEmitter,\n NativeModules,\n Platform,\n} from 'react-native';\n\nlet eventSubscription: EmitterSubscription | null = null;\n\nconst LINKING_ERROR =\n `The package 'react-native-mytatva-rn-sdk' doesn't seem to be linked. Make sure: \\n\\n` +\n Platform.select({ ios: \"- You have run 'pod install'\\n\", default: '' }) +\n '- You rebuilt the app after installing the package\\n' +\n '- You are not using Expo Go\\n';\n\nconst cgmLib = NativeModules.CgmTrackyLib\n ? NativeModules.CgmTrackyLib\n : new Proxy(\n {},\n {\n get() {\n throw new Error(LINKING_ERROR);\n },\n }\n );\n\nfunction initializeCGMEventListener(callback: (eventData: any) => void) {\n const iosEventEmitter = new NativeEventEmitter(cgmLib);\n if (eventSubscription) {\n eventSubscription.remove();\n }\n\n if (Platform.OS === 'android') {\n eventSubscription = DeviceEventEmitter.addListener(\n 'cgmDeviceEvent',\n (eventData: any) => {\n const { status } = eventData;\n if (status === 'WARM_PERIOD_STARTED') {\n callback(eventData);\n } else {\n callback(eventData);\n }\n }\n );\n } else if (Platform.OS === 'ios' && iosEventEmitter) {\n eventSubscription = iosEventEmitter.addListener(\n 'cgmDeviceEvent',\n (eventData: any) => {\n const { status } = eventData;\n if (status === 'WARM_PERIOD_STARTED') {\n callback(eventData);\n } else {\n callback(eventData);\n }\n }\n );\n }\n}\n\nfunction removeCGMEventListener() {\n if (eventSubscription) {\n eventSubscription.remove();\n eventSubscription = null;\n }\n}\n\nconst startCGM = async (token: string, envType: string) => {\n console.log('startCGM===');\n try {\n const result = await cgmLib.startCgmTracky(token, envType);\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst reconnectCGM = async (token: string, envType: string) => {\n console.log('reconnectCGM====');\n try {\n const result = await cgmLib.reconnectCgmTracky(token, envType);\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst observeAllGlucoseDataHandler = async (\n token: string,\n isCleanData: boolean,\n envType: string\n) => {\n console.log('observeAllGlucoseDataHandler====');\n try {\n if (Platform.OS === 'android') {\n const result = await cgmLib.observeAllGlucoseData(\n token,\n isCleanData,\n envType\n );\n const deviceStatus = await cgmLib.observeDeviceStatus(token, envType);\n console.log(result);\n console.log(deviceStatus);\n } else if (Platform.OS === 'ios') {\n const result = await cgmLib.observeAllGlucoseData(\n token,\n isCleanData,\n envType\n );\n console.log(result);\n }\n } catch (error) {\n console.log('error====', error);\n console.error(error);\n }\n};\n\nconst helpCGM = async (token: string, envType: string) => {\n console.log('helpCGM====');\n try {\n const result = await cgmLib.openHelpSupport();\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst observeTransmitterUnbindStatusHandler = async (\n token: string,\n apiResponse: string,\n patientId: string,\n envType: string\n) => {\n console.log('observeTransmitterUnbindStatusHandler====');\n try {\n const result = await cgmLib.observeTransmitterUnbindStatus(\n token,\n apiResponse,\n patientId,\n envType\n );\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst observeResetLogoutHandler = async () => {\n console.log('observeResetLogoutHandler====');\n try {\n const result = await cgmLib.resetCgmState();\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst getSqliteDBPath = async (): Promise<string> => {\n const result = await cgmLib.getTrackLibDbPath();\n return result;\n};\n\nconst stopCGM = async () => {\n // Implementation\n};\n\n/**\n * Get all CGM log file paths\n * Returns array of absolute file paths to CGM log files (CSV format)\n * Use react-native-fs or similar in your main app to read these files\n *\n * @returns Promise<string[]> - Array of absolute file paths\n *\n * @example\n * const logPaths = await getCgmLogFilePaths();\n * // Android: ['/storage/emulated/0/Android/data/.../Documents/12345_POCTech.csv']\n * // iOS: ['/var/mobile/Containers/Data/Application/.../Documents/runLog/1_SensorID.csv']\n */\nconst getCgmLogFilePaths = async (): Promise<string[]> => {\n try {\n const result = await cgmLib.getCgmLogFiles();\n console.log(`CGM Log Files: ${result.length} files found`);\n return result;\n } catch (error) {\n console.error('Error getting CGM log file paths:', error);\n throw error;\n }\n};\n\nexport {\n startCGM,\n stopCGM,\n initializeCGMEventListener,\n removeCGMEventListener,\n observeAllGlucoseDataHandler,\n reconnectCGM,\n helpCGM,\n observeTransmitterUnbindStatusHandler,\n observeResetLogoutHandler,\n getSqliteDBPath,\n getCgmLogFilePaths,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","eventSubscription","LINKING_ERROR","Platform","select","ios","default","cgmLib","NativeModules","CgmTrackyLib","Proxy","get","Error","initializeCGMEventListener","callback","iosEventEmitter","NativeEventEmitter","remove","OS","DeviceEventEmitter","addListener","eventData","status","removeCGMEventListener","startCGM","token","envType","userData","console","log","result","startCgmTracky","error","exports","reconnectCGM","reconnectCgmTracky","observeAllGlucoseDataHandler","isCleanData","observeAllGlucoseData","deviceStatus","observeDeviceStatus","helpCGM","openHelpSupport","observeTransmitterUnbindStatusHandler","apiResponse","patientId","observeTransmitterUnbindStatus","observeResetLogoutHandler","resetCgmState","getSqliteDBPath","getTrackLibDbPath","stopCGM","getCgmLogFilePaths","getCgmLogFiles","length"],"sources":["CGMConnect.ts"],"sourcesContent":["import {\n DeviceEventEmitter,\n EmitterSubscription,\n NativeEventEmitter,\n NativeModules,\n Platform,\n} from 'react-native';\n\nlet eventSubscription: EmitterSubscription | null = null;\n\nconst LINKING_ERROR =\n `The package 'react-native-mytatva-rn-sdk' doesn't seem to be linked. Make sure: \\n\\n` +\n Platform.select({ ios: \"- You have run 'pod install'\\n\", default: '' }) +\n '- You rebuilt the app after installing the package\\n' +\n '- You are not using Expo Go\\n';\n\nconst cgmLib = NativeModules.CgmTrackyLib\n ? NativeModules.CgmTrackyLib\n : new Proxy(\n {},\n {\n get() {\n throw new Error(LINKING_ERROR);\n },\n }\n );\n\nfunction initializeCGMEventListener(callback: (eventData: any) => void) {\n const iosEventEmitter = new NativeEventEmitter(cgmLib);\n if (eventSubscription) {\n eventSubscription.remove();\n }\n\n if (Platform.OS === 'android') {\n eventSubscription = DeviceEventEmitter.addListener(\n 'cgmDeviceEvent',\n (eventData: any) => {\n const { status } = eventData;\n if (status === 'WARM_PERIOD_STARTED') {\n callback(eventData);\n } else {\n callback(eventData);\n }\n }\n );\n } else if (Platform.OS === 'ios' && iosEventEmitter) {\n eventSubscription = iosEventEmitter.addListener(\n 'cgmDeviceEvent',\n (eventData: any) => {\n const { status } = eventData;\n if (status === 'WARM_PERIOD_STARTED') {\n callback(eventData);\n } else {\n callback(eventData);\n }\n }\n );\n }\n}\n\nfunction removeCGMEventListener() {\n if (eventSubscription) {\n eventSubscription.remove();\n eventSubscription = null;\n }\n}\n\nconst startCGM = async (token: string, envType: string, userData: any) => {\n console.log('startCGM===');\n try {\n const result =\n Platform.OS === 'android'\n ? await cgmLib.startCgmTracky(token, envType, userData)\n : await cgmLib.startCgmTracky(token, envType);\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst reconnectCGM = async (token: string, envType: string, userData: any) => {\n console.log('reconnectCGM====');\n try {\n const result =\n Platform.OS === 'android'\n ? await cgmLib.reconnectCgmTracky(token, envType, userData)\n : await cgmLib.reconnectCgmTracky(token, envType);\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst observeAllGlucoseDataHandler = async (\n token: string,\n isCleanData: boolean,\n envType: string,\n userData: any\n) => {\n console.log('observeAllGlucoseDataHandler====');\n try {\n if (Platform.OS === 'android') {\n const result = await cgmLib.observeAllGlucoseData(\n token,\n isCleanData,\n envType,\n userData\n );\n const deviceStatus = await cgmLib.observeDeviceStatus(token, envType);\n console.log(result);\n console.log(deviceStatus);\n } else if (Platform.OS === 'ios') {\n const result = await cgmLib.observeAllGlucoseData(\n token,\n isCleanData,\n envType\n );\n console.log(result);\n }\n } catch (error) {\n console.log('error====', error);\n console.error(error);\n }\n};\n\nconst helpCGM = async (token: string, envType: string) => {\n console.log('helpCGM====');\n try {\n const result = await cgmLib.openHelpSupport();\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst observeTransmitterUnbindStatusHandler = async (\n token: string,\n apiResponse: string,\n patientId: string,\n envType: string,\n userData: any\n) => {\n console.log('observeTransmitterUnbindStatusHandler====');\n try {\n const result =\n Platform.OS === 'android'\n ? await cgmLib.observeTransmitterUnbindStatus(\n token,\n apiResponse,\n patientId,\n envType,\n userData\n )\n : await cgmLib.observeTransmitterUnbindStatus(\n token,\n apiResponse,\n patientId,\n envType\n );\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst observeResetLogoutHandler = async () => {\n console.log('observeResetLogoutHandler====');\n try {\n const result = await cgmLib.resetCgmState();\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst getSqliteDBPath = async (): Promise<string> => {\n const result = await cgmLib.getTrackLibDbPath();\n return result;\n};\n\nconst stopCGM = async () => {\n // Implementation\n};\n\n/**\n * Get all CGM log file paths\n * Returns array of absolute file paths to CGM log files (CSV format)\n * Use react-native-fs or similar in your main app to read these files\n *\n * @returns Promise<string[]> - Array of absolute file paths\n *\n * @example\n * const logPaths = await getCgmLogFilePaths();\n * // Android: ['/storage/emulated/0/Android/data/.../Documents/12345_POCTech.csv']\n * // iOS: ['/var/mobile/Containers/Data/Application/.../Documents/runLog/1_SensorID.csv']\n */\nconst getCgmLogFilePaths = async (): Promise<string[]> => {\n try {\n const result = await cgmLib.getCgmLogFiles();\n console.log(`CGM Log Files: ${result.length} files found`);\n return result;\n } catch (error) {\n console.error('Error getting CGM log file paths:', error);\n throw error;\n }\n};\n\nexport {\n startCGM,\n stopCGM,\n initializeCGMEventListener,\n removeCGMEventListener,\n observeAllGlucoseDataHandler,\n reconnectCGM,\n helpCGM,\n observeTransmitterUnbindStatusHandler,\n observeResetLogoutHandler,\n getSqliteDBPath,\n getCgmLogFilePaths,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -44,29 +44,29 @@ function removeCGMEventListener() {
44
44
  eventSubscription = null;
45
45
  }
46
46
  }
47
- const startCGM = async (token, envType) => {
47
+ const startCGM = async (token, envType, userData) => {
48
48
  console.log('startCGM===');
49
49
  try {
50
- const result = await cgmLib.startCgmTracky(token, envType);
50
+ const result = Platform.OS === 'android' ? await cgmLib.startCgmTracky(token, envType, userData) : await cgmLib.startCgmTracky(token, envType);
51
51
  console.log(result);
52
52
  } catch (error) {
53
53
  console.error(error);
54
54
  }
55
55
  };
56
- const reconnectCGM = async (token, envType) => {
56
+ const reconnectCGM = async (token, envType, userData) => {
57
57
  console.log('reconnectCGM====');
58
58
  try {
59
- const result = await cgmLib.reconnectCgmTracky(token, envType);
59
+ const result = Platform.OS === 'android' ? await cgmLib.reconnectCgmTracky(token, envType, userData) : await cgmLib.reconnectCgmTracky(token, envType);
60
60
  console.log(result);
61
61
  } catch (error) {
62
62
  console.error(error);
63
63
  }
64
64
  };
65
- const observeAllGlucoseDataHandler = async (token, isCleanData, envType) => {
65
+ const observeAllGlucoseDataHandler = async (token, isCleanData, envType, userData) => {
66
66
  console.log('observeAllGlucoseDataHandler====');
67
67
  try {
68
68
  if (Platform.OS === 'android') {
69
- const result = await cgmLib.observeAllGlucoseData(token, isCleanData, envType);
69
+ const result = await cgmLib.observeAllGlucoseData(token, isCleanData, envType, userData);
70
70
  const deviceStatus = await cgmLib.observeDeviceStatus(token, envType);
71
71
  console.log(result);
72
72
  console.log(deviceStatus);
@@ -88,10 +88,10 @@ const helpCGM = async (token, envType) => {
88
88
  console.error(error);
89
89
  }
90
90
  };
91
- const observeTransmitterUnbindStatusHandler = async (token, apiResponse, patientId, envType) => {
91
+ const observeTransmitterUnbindStatusHandler = async (token, apiResponse, patientId, envType, userData) => {
92
92
  console.log('observeTransmitterUnbindStatusHandler====');
93
93
  try {
94
- const result = await cgmLib.observeTransmitterUnbindStatus(token, apiResponse, patientId, envType);
94
+ const result = Platform.OS === 'android' ? await cgmLib.observeTransmitterUnbindStatus(token, apiResponse, patientId, envType, userData) : await cgmLib.observeTransmitterUnbindStatus(token, apiResponse, patientId, envType);
95
95
  console.log(result);
96
96
  } catch (error) {
97
97
  console.error(error);
@@ -1 +1 @@
1
- {"version":3,"names":["DeviceEventEmitter","NativeEventEmitter","NativeModules","Platform","eventSubscription","LINKING_ERROR","select","ios","default","cgmLib","CgmTrackyLib","Proxy","get","Error","initializeCGMEventListener","callback","iosEventEmitter","remove","OS","addListener","eventData","status","removeCGMEventListener","startCGM","token","envType","console","log","result","startCgmTracky","error","reconnectCGM","reconnectCgmTracky","observeAllGlucoseDataHandler","isCleanData","observeAllGlucoseData","deviceStatus","observeDeviceStatus","helpCGM","openHelpSupport","observeTransmitterUnbindStatusHandler","apiResponse","patientId","observeTransmitterUnbindStatus","observeResetLogoutHandler","resetCgmState","getSqliteDBPath","getTrackLibDbPath","stopCGM","getCgmLogFilePaths","getCgmLogFiles","length"],"sources":["CGMConnect.ts"],"sourcesContent":["import {\n DeviceEventEmitter,\n EmitterSubscription,\n NativeEventEmitter,\n NativeModules,\n Platform,\n} from 'react-native';\n\nlet eventSubscription: EmitterSubscription | null = null;\n\nconst LINKING_ERROR =\n `The package 'react-native-mytatva-rn-sdk' doesn't seem to be linked. Make sure: \\n\\n` +\n Platform.select({ ios: \"- You have run 'pod install'\\n\", default: '' }) +\n '- You rebuilt the app after installing the package\\n' +\n '- You are not using Expo Go\\n';\n\nconst cgmLib = NativeModules.CgmTrackyLib\n ? NativeModules.CgmTrackyLib\n : new Proxy(\n {},\n {\n get() {\n throw new Error(LINKING_ERROR);\n },\n }\n );\n\nfunction initializeCGMEventListener(callback: (eventData: any) => void) {\n const iosEventEmitter = new NativeEventEmitter(cgmLib);\n if (eventSubscription) {\n eventSubscription.remove();\n }\n\n if (Platform.OS === 'android') {\n eventSubscription = DeviceEventEmitter.addListener(\n 'cgmDeviceEvent',\n (eventData: any) => {\n const { status } = eventData;\n if (status === 'WARM_PERIOD_STARTED') {\n callback(eventData);\n } else {\n callback(eventData);\n }\n }\n );\n } else if (Platform.OS === 'ios' && iosEventEmitter) {\n eventSubscription = iosEventEmitter.addListener(\n 'cgmDeviceEvent',\n (eventData: any) => {\n const { status } = eventData;\n if (status === 'WARM_PERIOD_STARTED') {\n callback(eventData);\n } else {\n callback(eventData);\n }\n }\n );\n }\n}\n\nfunction removeCGMEventListener() {\n if (eventSubscription) {\n eventSubscription.remove();\n eventSubscription = null;\n }\n}\n\nconst startCGM = async (token: string, envType: string) => {\n console.log('startCGM===');\n try {\n const result = await cgmLib.startCgmTracky(token, envType);\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst reconnectCGM = async (token: string, envType: string) => {\n console.log('reconnectCGM====');\n try {\n const result = await cgmLib.reconnectCgmTracky(token, envType);\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst observeAllGlucoseDataHandler = async (\n token: string,\n isCleanData: boolean,\n envType: string\n) => {\n console.log('observeAllGlucoseDataHandler====');\n try {\n if (Platform.OS === 'android') {\n const result = await cgmLib.observeAllGlucoseData(\n token,\n isCleanData,\n envType\n );\n const deviceStatus = await cgmLib.observeDeviceStatus(token, envType);\n console.log(result);\n console.log(deviceStatus);\n } else if (Platform.OS === 'ios') {\n const result = await cgmLib.observeAllGlucoseData(\n token,\n isCleanData,\n envType\n );\n console.log(result);\n }\n } catch (error) {\n console.log('error====', error);\n console.error(error);\n }\n};\n\nconst helpCGM = async (token: string, envType: string) => {\n console.log('helpCGM====');\n try {\n const result = await cgmLib.openHelpSupport();\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst observeTransmitterUnbindStatusHandler = async (\n token: string,\n apiResponse: string,\n patientId: string,\n envType: string\n) => {\n console.log('observeTransmitterUnbindStatusHandler====');\n try {\n const result = await cgmLib.observeTransmitterUnbindStatus(\n token,\n apiResponse,\n patientId,\n envType\n );\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst observeResetLogoutHandler = async () => {\n console.log('observeResetLogoutHandler====');\n try {\n const result = await cgmLib.resetCgmState();\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst getSqliteDBPath = async (): Promise<string> => {\n const result = await cgmLib.getTrackLibDbPath();\n return result;\n};\n\nconst stopCGM = async () => {\n // Implementation\n};\n\n/**\n * Get all CGM log file paths\n * Returns array of absolute file paths to CGM log files (CSV format)\n * Use react-native-fs or similar in your main app to read these files\n *\n * @returns Promise<string[]> - Array of absolute file paths\n *\n * @example\n * const logPaths = await getCgmLogFilePaths();\n * // Android: ['/storage/emulated/0/Android/data/.../Documents/12345_POCTech.csv']\n * // iOS: ['/var/mobile/Containers/Data/Application/.../Documents/runLog/1_SensorID.csv']\n */\nconst getCgmLogFilePaths = async (): Promise<string[]> => {\n try {\n const result = await cgmLib.getCgmLogFiles();\n console.log(`CGM Log Files: ${result.length} files found`);\n return result;\n } catch (error) {\n console.error('Error getting CGM log file paths:', error);\n throw error;\n }\n};\n\nexport {\n startCGM,\n stopCGM,\n initializeCGMEventListener,\n removeCGMEventListener,\n observeAllGlucoseDataHandler,\n reconnectCGM,\n helpCGM,\n observeTransmitterUnbindStatusHandler,\n observeResetLogoutHandler,\n getSqliteDBPath,\n getCgmLogFilePaths,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["DeviceEventEmitter","NativeEventEmitter","NativeModules","Platform","eventSubscription","LINKING_ERROR","select","ios","default","cgmLib","CgmTrackyLib","Proxy","get","Error","initializeCGMEventListener","callback","iosEventEmitter","remove","OS","addListener","eventData","status","removeCGMEventListener","startCGM","token","envType","userData","console","log","result","startCgmTracky","error","reconnectCGM","reconnectCgmTracky","observeAllGlucoseDataHandler","isCleanData","observeAllGlucoseData","deviceStatus","observeDeviceStatus","helpCGM","openHelpSupport","observeTransmitterUnbindStatusHandler","apiResponse","patientId","observeTransmitterUnbindStatus","observeResetLogoutHandler","resetCgmState","getSqliteDBPath","getTrackLibDbPath","stopCGM","getCgmLogFilePaths","getCgmLogFiles","length"],"sources":["CGMConnect.ts"],"sourcesContent":["import {\n DeviceEventEmitter,\n EmitterSubscription,\n NativeEventEmitter,\n NativeModules,\n Platform,\n} from 'react-native';\n\nlet eventSubscription: EmitterSubscription | null = null;\n\nconst LINKING_ERROR =\n `The package 'react-native-mytatva-rn-sdk' doesn't seem to be linked. Make sure: \\n\\n` +\n Platform.select({ ios: \"- You have run 'pod install'\\n\", default: '' }) +\n '- You rebuilt the app after installing the package\\n' +\n '- You are not using Expo Go\\n';\n\nconst cgmLib = NativeModules.CgmTrackyLib\n ? NativeModules.CgmTrackyLib\n : new Proxy(\n {},\n {\n get() {\n throw new Error(LINKING_ERROR);\n },\n }\n );\n\nfunction initializeCGMEventListener(callback: (eventData: any) => void) {\n const iosEventEmitter = new NativeEventEmitter(cgmLib);\n if (eventSubscription) {\n eventSubscription.remove();\n }\n\n if (Platform.OS === 'android') {\n eventSubscription = DeviceEventEmitter.addListener(\n 'cgmDeviceEvent',\n (eventData: any) => {\n const { status } = eventData;\n if (status === 'WARM_PERIOD_STARTED') {\n callback(eventData);\n } else {\n callback(eventData);\n }\n }\n );\n } else if (Platform.OS === 'ios' && iosEventEmitter) {\n eventSubscription = iosEventEmitter.addListener(\n 'cgmDeviceEvent',\n (eventData: any) => {\n const { status } = eventData;\n if (status === 'WARM_PERIOD_STARTED') {\n callback(eventData);\n } else {\n callback(eventData);\n }\n }\n );\n }\n}\n\nfunction removeCGMEventListener() {\n if (eventSubscription) {\n eventSubscription.remove();\n eventSubscription = null;\n }\n}\n\nconst startCGM = async (token: string, envType: string, userData: any) => {\n console.log('startCGM===');\n try {\n const result =\n Platform.OS === 'android'\n ? await cgmLib.startCgmTracky(token, envType, userData)\n : await cgmLib.startCgmTracky(token, envType);\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst reconnectCGM = async (token: string, envType: string, userData: any) => {\n console.log('reconnectCGM====');\n try {\n const result =\n Platform.OS === 'android'\n ? await cgmLib.reconnectCgmTracky(token, envType, userData)\n : await cgmLib.reconnectCgmTracky(token, envType);\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst observeAllGlucoseDataHandler = async (\n token: string,\n isCleanData: boolean,\n envType: string,\n userData: any\n) => {\n console.log('observeAllGlucoseDataHandler====');\n try {\n if (Platform.OS === 'android') {\n const result = await cgmLib.observeAllGlucoseData(\n token,\n isCleanData,\n envType,\n userData\n );\n const deviceStatus = await cgmLib.observeDeviceStatus(token, envType);\n console.log(result);\n console.log(deviceStatus);\n } else if (Platform.OS === 'ios') {\n const result = await cgmLib.observeAllGlucoseData(\n token,\n isCleanData,\n envType\n );\n console.log(result);\n }\n } catch (error) {\n console.log('error====', error);\n console.error(error);\n }\n};\n\nconst helpCGM = async (token: string, envType: string) => {\n console.log('helpCGM====');\n try {\n const result = await cgmLib.openHelpSupport();\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst observeTransmitterUnbindStatusHandler = async (\n token: string,\n apiResponse: string,\n patientId: string,\n envType: string,\n userData: any\n) => {\n console.log('observeTransmitterUnbindStatusHandler====');\n try {\n const result =\n Platform.OS === 'android'\n ? await cgmLib.observeTransmitterUnbindStatus(\n token,\n apiResponse,\n patientId,\n envType,\n userData\n )\n : await cgmLib.observeTransmitterUnbindStatus(\n token,\n apiResponse,\n patientId,\n envType\n );\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst observeResetLogoutHandler = async () => {\n console.log('observeResetLogoutHandler====');\n try {\n const result = await cgmLib.resetCgmState();\n console.log(result);\n } catch (error) {\n console.error(error);\n }\n};\n\nconst getSqliteDBPath = async (): Promise<string> => {\n const result = await cgmLib.getTrackLibDbPath();\n return result;\n};\n\nconst stopCGM = async () => {\n // Implementation\n};\n\n/**\n * Get all CGM log file paths\n * Returns array of absolute file paths to CGM log files (CSV format)\n * Use react-native-fs or similar in your main app to read these files\n *\n * @returns Promise<string[]> - Array of absolute file paths\n *\n * @example\n * const logPaths = await getCgmLogFilePaths();\n * // Android: ['/storage/emulated/0/Android/data/.../Documents/12345_POCTech.csv']\n * // iOS: ['/var/mobile/Containers/Data/Application/.../Documents/runLog/1_SensorID.csv']\n */\nconst getCgmLogFilePaths = async (): Promise<string[]> => {\n try {\n const result = await cgmLib.getCgmLogFiles();\n console.log(`CGM Log Files: ${result.length} files found`);\n return result;\n } catch (error) {\n console.error('Error getting CGM log file paths:', error);\n throw error;\n }\n};\n\nexport {\n startCGM,\n stopCGM,\n initializeCGMEventListener,\n removeCGMEventListener,\n observeAllGlucoseDataHandler,\n reconnectCGM,\n helpCGM,\n observeTransmitterUnbindStatusHandler,\n observeResetLogoutHandler,\n getSqliteDBPath,\n getCgmLogFilePaths,\n};\n"],"mappings":"AAAA,SACEA,kBAAkB,EAElBC,kBAAkB,EAClBC,aAAa,EACbC,QAAQ,QACH,cAAc;AAErB,IAAIC,iBAA6C,GAAG,IAAI;AAExD,MAAMC,aAAa,GACjB,sFAAsF,GACtFF,QAAQ,CAACG,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,MAAM,GAAGP,aAAa,CAACQ,YAAY,GACrCR,aAAa,CAACQ,YAAY,GAC1B,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACR,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAEL,SAASS,0BAA0BA,CAACC,QAAkC,EAAE;EACtE,MAAMC,eAAe,GAAG,IAAIf,kBAAkB,CAACQ,MAAM,CAAC;EACtD,IAAIL,iBAAiB,EAAE;IACrBA,iBAAiB,CAACa,MAAM,CAAC,CAAC;EAC5B;EAEA,IAAId,QAAQ,CAACe,EAAE,KAAK,SAAS,EAAE;IAC7Bd,iBAAiB,GAAGJ,kBAAkB,CAACmB,WAAW,CAChD,gBAAgB,EACfC,SAAc,IAAK;MAClB,MAAM;QAAEC;MAAO,CAAC,GAAGD,SAAS;MAC5B,IAAIC,MAAM,KAAK,qBAAqB,EAAE;QACpCN,QAAQ,CAACK,SAAS,CAAC;MACrB,CAAC,MAAM;QACLL,QAAQ,CAACK,SAAS,CAAC;MACrB;IACF,CACF,CAAC;EACH,CAAC,MAAM,IAAIjB,QAAQ,CAACe,EAAE,KAAK,KAAK,IAAIF,eAAe,EAAE;IACnDZ,iBAAiB,GAAGY,eAAe,CAACG,WAAW,CAC7C,gBAAgB,EACfC,SAAc,IAAK;MAClB,MAAM;QAAEC;MAAO,CAAC,GAAGD,SAAS;MAC5B,IAAIC,MAAM,KAAK,qBAAqB,EAAE;QACpCN,QAAQ,CAACK,SAAS,CAAC;MACrB,CAAC,MAAM;QACLL,QAAQ,CAACK,SAAS,CAAC;MACrB;IACF,CACF,CAAC;EACH;AACF;AAEA,SAASE,sBAAsBA,CAAA,EAAG;EAChC,IAAIlB,iBAAiB,EAAE;IACrBA,iBAAiB,CAACa,MAAM,CAAC,CAAC;IAC1Bb,iBAAiB,GAAG,IAAI;EAC1B;AACF;AAEA,MAAMmB,QAAQ,GAAG,MAAAA,CAAOC,KAAa,EAAEC,OAAe,EAAEC,QAAa,KAAK;EACxEC,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;EAC1B,IAAI;IACF,MAAMC,MAAM,GACV1B,QAAQ,CAACe,EAAE,KAAK,SAAS,GACrB,MAAMT,MAAM,CAACqB,cAAc,CAACN,KAAK,EAAEC,OAAO,EAAEC,QAAQ,CAAC,GACrD,MAAMjB,MAAM,CAACqB,cAAc,CAACN,KAAK,EAAEC,OAAO,CAAC;IACjDE,OAAO,CAACC,GAAG,CAACC,MAAM,CAAC;EACrB,CAAC,CAAC,OAAOE,KAAK,EAAE;IACdJ,OAAO,CAACI,KAAK,CAACA,KAAK,CAAC;EACtB;AACF,CAAC;AAED,MAAMC,YAAY,GAAG,MAAAA,CAAOR,KAAa,EAAEC,OAAe,EAAEC,QAAa,KAAK;EAC5EC,OAAO,CAACC,GAAG,CAAC,kBAAkB,CAAC;EAC/B,IAAI;IACF,MAAMC,MAAM,GACV1B,QAAQ,CAACe,EAAE,KAAK,SAAS,GACrB,MAAMT,MAAM,CAACwB,kBAAkB,CAACT,KAAK,EAAEC,OAAO,EAAEC,QAAQ,CAAC,GACzD,MAAMjB,MAAM,CAACwB,kBAAkB,CAACT,KAAK,EAAEC,OAAO,CAAC;IACrDE,OAAO,CAACC,GAAG,CAACC,MAAM,CAAC;EACrB,CAAC,CAAC,OAAOE,KAAK,EAAE;IACdJ,OAAO,CAACI,KAAK,CAACA,KAAK,CAAC;EACtB;AACF,CAAC;AAED,MAAMG,4BAA4B,GAAG,MAAAA,CACnCV,KAAa,EACbW,WAAoB,EACpBV,OAAe,EACfC,QAAa,KACV;EACHC,OAAO,CAACC,GAAG,CAAC,kCAAkC,CAAC;EAC/C,IAAI;IACF,IAAIzB,QAAQ,CAACe,EAAE,KAAK,SAAS,EAAE;MAC7B,MAAMW,MAAM,GAAG,MAAMpB,MAAM,CAAC2B,qBAAqB,CAC/CZ,KAAK,EACLW,WAAW,EACXV,OAAO,EACPC,QACF,CAAC;MACD,MAAMW,YAAY,GAAG,MAAM5B,MAAM,CAAC6B,mBAAmB,CAACd,KAAK,EAAEC,OAAO,CAAC;MACrEE,OAAO,CAACC,GAAG,CAACC,MAAM,CAAC;MACnBF,OAAO,CAACC,GAAG,CAACS,YAAY,CAAC;IAC3B,CAAC,MAAM,IAAIlC,QAAQ,CAACe,EAAE,KAAK,KAAK,EAAE;MAChC,MAAMW,MAAM,GAAG,MAAMpB,MAAM,CAAC2B,qBAAqB,CAC/CZ,KAAK,EACLW,WAAW,EACXV,OACF,CAAC;MACDE,OAAO,CAACC,GAAG,CAACC,MAAM,CAAC;IACrB;EACF,CAAC,CAAC,OAAOE,KAAK,EAAE;IACdJ,OAAO,CAACC,GAAG,CAAC,WAAW,EAAEG,KAAK,CAAC;IAC/BJ,OAAO,CAACI,KAAK,CAACA,KAAK,CAAC;EACtB;AACF,CAAC;AAED,MAAMQ,OAAO,GAAG,MAAAA,CAAOf,KAAa,EAAEC,OAAe,KAAK;EACxDE,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;EAC1B,IAAI;IACF,MAAMC,MAAM,GAAG,MAAMpB,MAAM,CAAC+B,eAAe,CAAC,CAAC;IAC7Cb,OAAO,CAACC,GAAG,CAACC,MAAM,CAAC;EACrB,CAAC,CAAC,OAAOE,KAAK,EAAE;IACdJ,OAAO,CAACI,KAAK,CAACA,KAAK,CAAC;EACtB;AACF,CAAC;AAED,MAAMU,qCAAqC,GAAG,MAAAA,CAC5CjB,KAAa,EACbkB,WAAmB,EACnBC,SAAiB,EACjBlB,OAAe,EACfC,QAAa,KACV;EACHC,OAAO,CAACC,GAAG,CAAC,2CAA2C,CAAC;EACxD,IAAI;IACF,MAAMC,MAAM,GACV1B,QAAQ,CAACe,EAAE,KAAK,SAAS,GACrB,MAAMT,MAAM,CAACmC,8BAA8B,CACzCpB,KAAK,EACLkB,WAAW,EACXC,SAAS,EACTlB,OAAO,EACPC,QACF,CAAC,GACD,MAAMjB,MAAM,CAACmC,8BAA8B,CACzCpB,KAAK,EACLkB,WAAW,EACXC,SAAS,EACTlB,OACF,CAAC;IACPE,OAAO,CAACC,GAAG,CAACC,MAAM,CAAC;EACrB,CAAC,CAAC,OAAOE,KAAK,EAAE;IACdJ,OAAO,CAACI,KAAK,CAACA,KAAK,CAAC;EACtB;AACF,CAAC;AAED,MAAMc,yBAAyB,GAAG,MAAAA,CAAA,KAAY;EAC5ClB,OAAO,CAACC,GAAG,CAAC,+BAA+B,CAAC;EAC5C,IAAI;IACF,MAAMC,MAAM,GAAG,MAAMpB,MAAM,CAACqC,aAAa,CAAC,CAAC;IAC3CnB,OAAO,CAACC,GAAG,CAACC,MAAM,CAAC;EACrB,CAAC,CAAC,OAAOE,KAAK,EAAE;IACdJ,OAAO,CAACI,KAAK,CAACA,KAAK,CAAC;EACtB;AACF,CAAC;AAED,MAAMgB,eAAe,GAAG,MAAAA,CAAA,KAA6B;EACnD,MAAMlB,MAAM,GAAG,MAAMpB,MAAM,CAACuC,iBAAiB,CAAC,CAAC;EAC/C,OAAOnB,MAAM;AACf,CAAC;AAED,MAAMoB,OAAO,GAAG,MAAAA,CAAA,KAAY;EAC1B;AAAA,CACD;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,kBAAkB,GAAG,MAAAA,CAAA,KAA+B;EACxD,IAAI;IACF,MAAMrB,MAAM,GAAG,MAAMpB,MAAM,CAAC0C,cAAc,CAAC,CAAC;IAC5CxB,OAAO,CAACC,GAAG,CAAC,kBAAkBC,MAAM,CAACuB,MAAM,cAAc,CAAC;IAC1D,OAAOvB,MAAM;EACf,CAAC,CAAC,OAAOE,KAAK,EAAE;IACdJ,OAAO,CAACI,KAAK,CAAC,mCAAmC,EAAEA,KAAK,CAAC;IACzD,MAAMA,KAAK;EACb;AACF,CAAC;AAED,SACER,QAAQ,EACR0B,OAAO,EACPnC,0BAA0B,EAC1BQ,sBAAsB,EACtBY,4BAA4B,EAC5BF,YAAY,EACZO,OAAO,EACPE,qCAAqC,EACrCI,yBAAyB,EACzBE,eAAe,EACfG,kBAAkB","ignoreList":[]}
@@ -1,10 +1,10 @@
1
1
  declare function initializeCGMEventListener(callback: (eventData: any) => void): void;
2
2
  declare function removeCGMEventListener(): void;
3
- declare const startCGM: (token: string, envType: string) => Promise<void>;
4
- declare const reconnectCGM: (token: string, envType: string) => Promise<void>;
5
- declare const observeAllGlucoseDataHandler: (token: string, isCleanData: boolean, envType: string) => Promise<void>;
3
+ declare const startCGM: (token: string, envType: string, userData: any) => Promise<void>;
4
+ declare const reconnectCGM: (token: string, envType: string, userData: any) => Promise<void>;
5
+ declare const observeAllGlucoseDataHandler: (token: string, isCleanData: boolean, envType: string, userData: any) => Promise<void>;
6
6
  declare const helpCGM: (token: string, envType: string) => Promise<void>;
7
- declare const observeTransmitterUnbindStatusHandler: (token: string, apiResponse: string, patientId: string, envType: string) => Promise<void>;
7
+ declare const observeTransmitterUnbindStatusHandler: (token: string, apiResponse: string, patientId: string, envType: string, userData: any) => Promise<void>;
8
8
  declare const observeResetLogoutHandler: () => Promise<void>;
9
9
  declare const getSqliteDBPath: () => Promise<string>;
10
10
  declare const stopCGM: () => Promise<void>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-mytatva-rn-sdk",
3
- "version": "1.2.73",
3
+ "version": "1.2.74",
4
4
  "description": "a package to inject data into visit health pwa",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
package/src/CGMConnect.ts CHANGED
@@ -65,20 +65,26 @@ function removeCGMEventListener() {
65
65
  }
66
66
  }
67
67
 
68
- const startCGM = async (token: string, envType: string) => {
68
+ const startCGM = async (token: string, envType: string, userData: any) => {
69
69
  console.log('startCGM===');
70
70
  try {
71
- const result = await cgmLib.startCgmTracky(token, envType);
71
+ const result =
72
+ Platform.OS === 'android'
73
+ ? await cgmLib.startCgmTracky(token, envType, userData)
74
+ : await cgmLib.startCgmTracky(token, envType);
72
75
  console.log(result);
73
76
  } catch (error) {
74
77
  console.error(error);
75
78
  }
76
79
  };
77
80
 
78
- const reconnectCGM = async (token: string, envType: string) => {
81
+ const reconnectCGM = async (token: string, envType: string, userData: any) => {
79
82
  console.log('reconnectCGM====');
80
83
  try {
81
- const result = await cgmLib.reconnectCgmTracky(token, envType);
84
+ const result =
85
+ Platform.OS === 'android'
86
+ ? await cgmLib.reconnectCgmTracky(token, envType, userData)
87
+ : await cgmLib.reconnectCgmTracky(token, envType);
82
88
  console.log(result);
83
89
  } catch (error) {
84
90
  console.error(error);
@@ -88,7 +94,8 @@ const reconnectCGM = async (token: string, envType: string) => {
88
94
  const observeAllGlucoseDataHandler = async (
89
95
  token: string,
90
96
  isCleanData: boolean,
91
- envType: string
97
+ envType: string,
98
+ userData: any
92
99
  ) => {
93
100
  console.log('observeAllGlucoseDataHandler====');
94
101
  try {
@@ -96,7 +103,8 @@ const observeAllGlucoseDataHandler = async (
96
103
  const result = await cgmLib.observeAllGlucoseData(
97
104
  token,
98
105
  isCleanData,
99
- envType
106
+ envType,
107
+ userData
100
108
  );
101
109
  const deviceStatus = await cgmLib.observeDeviceStatus(token, envType);
102
110
  console.log(result);
@@ -129,16 +137,26 @@ const observeTransmitterUnbindStatusHandler = async (
129
137
  token: string,
130
138
  apiResponse: string,
131
139
  patientId: string,
132
- envType: string
140
+ envType: string,
141
+ userData: any
133
142
  ) => {
134
143
  console.log('observeTransmitterUnbindStatusHandler====');
135
144
  try {
136
- const result = await cgmLib.observeTransmitterUnbindStatus(
137
- token,
138
- apiResponse,
139
- patientId,
140
- envType
141
- );
145
+ const result =
146
+ Platform.OS === 'android'
147
+ ? await cgmLib.observeTransmitterUnbindStatus(
148
+ token,
149
+ apiResponse,
150
+ patientId,
151
+ envType,
152
+ userData
153
+ )
154
+ : await cgmLib.observeTransmitterUnbindStatus(
155
+ token,
156
+ apiResponse,
157
+ patientId,
158
+ envType
159
+ );
142
160
  console.log(result);
143
161
  } catch (error) {
144
162
  console.error(error);