react-native-spike-sdk 4.6.13 → 4.7.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.
Files changed (183) hide show
  1. package/android/build.gradle +1 -1
  2. package/android/src/main/java/com/spikesdk/SpikeMappers.kt +0 -46
  3. package/android/src/main/java/com/spikesdk/SpikeSdkModule.kt +1 -476
  4. package/ios/SpikeExceptionMapper.swift +4 -12
  5. package/ios/SpikeSdk.m +0 -79
  6. package/ios/SpikeSdk.swift +7 -417
  7. package/lib/commonjs/Spike.js +1 -57
  8. package/lib/commonjs/Spike.js.map +1 -1
  9. package/lib/commonjs/SpikeException.js +15 -94
  10. package/lib/commonjs/SpikeException.js.map +1 -1
  11. package/lib/commonjs/index.js +0 -71
  12. package/lib/commonjs/index.js.map +1 -1
  13. package/lib/commonjs/version.js +1 -1
  14. package/lib/module/Spike.js +1 -55
  15. package/lib/module/Spike.js.map +1 -1
  16. package/lib/module/SpikeException.js +14 -83
  17. package/lib/module/SpikeException.js.map +1 -1
  18. package/lib/module/index.js +3 -8
  19. package/lib/module/index.js.map +1 -1
  20. package/lib/module/version.js +1 -1
  21. package/lib/typescript/Spike.d.ts +2 -29
  22. package/lib/typescript/Spike.d.ts.map +1 -1
  23. package/lib/typescript/SpikeException.d.ts +5 -30
  24. package/lib/typescript/SpikeException.d.ts.map +1 -1
  25. package/lib/typescript/index.d.ts +4 -24
  26. package/lib/typescript/index.d.ts.map +1 -1
  27. package/lib/typescript/version.d.ts +1 -1
  28. package/package.json +2 -2
  29. package/src/Spike.ts +4 -89
  30. package/src/SpikeException.ts +13 -96
  31. package/src/index.ts +0 -61
  32. package/src/version.ts +1 -1
  33. package/android/src/main/java/com/spikesdk/SpikeConnectionLogger.kt +0 -37
  34. package/ios/SpikeConnectionListener.swift +0 -17
  35. package/ios/SpikeConnectionLogger.swift +0 -43
  36. package/ios/SpikeDataTypeMapper.swift +0 -255
  37. package/lib/commonjs/DataModels/SpikeActivitiesStreamDataEntry.js +0 -2
  38. package/lib/commonjs/DataModels/SpikeActivitiesStreamDataEntry.js.map +0 -1
  39. package/lib/commonjs/DataModels/SpikeActivitiesSummaryDataEntry.js +0 -2
  40. package/lib/commonjs/DataModels/SpikeActivitiesSummaryDataEntry.js.map +0 -1
  41. package/lib/commonjs/DataModels/SpikeBodyDataEntry.js +0 -2
  42. package/lib/commonjs/DataModels/SpikeBodyDataEntry.js.map +0 -1
  43. package/lib/commonjs/DataModels/SpikeBreathingDataEntry.js +0 -2
  44. package/lib/commonjs/DataModels/SpikeBreathingDataEntry.js.map +0 -1
  45. package/lib/commonjs/DataModels/SpikeCaloriesDataEntry.js +0 -2
  46. package/lib/commonjs/DataModels/SpikeCaloriesDataEntry.js.map +0 -1
  47. package/lib/commonjs/DataModels/SpikeData.js +0 -6
  48. package/lib/commonjs/DataModels/SpikeData.js.map +0 -1
  49. package/lib/commonjs/DataModels/SpikeDataTypes.js +0 -23
  50. package/lib/commonjs/DataModels/SpikeDataTypes.js.map +0 -1
  51. package/lib/commonjs/DataModels/SpikeDistanceDataEntry.js +0 -2
  52. package/lib/commonjs/DataModels/SpikeDistanceDataEntry.js.map +0 -1
  53. package/lib/commonjs/DataModels/SpikeEcgDataEntry.js +0 -2
  54. package/lib/commonjs/DataModels/SpikeEcgDataEntry.js.map +0 -1
  55. package/lib/commonjs/DataModels/SpikeGlucoseDataEntry.js +0 -2
  56. package/lib/commonjs/DataModels/SpikeGlucoseDataEntry.js.map +0 -1
  57. package/lib/commonjs/DataModels/SpikeHeartDataEntry.js +0 -2
  58. package/lib/commonjs/DataModels/SpikeHeartDataEntry.js.map +0 -1
  59. package/lib/commonjs/DataModels/SpikeOxygenSaturationDataEntry.js +0 -2
  60. package/lib/commonjs/DataModels/SpikeOxygenSaturationDataEntry.js.map +0 -1
  61. package/lib/commonjs/DataModels/SpikeSleepDataEntry.js +0 -2
  62. package/lib/commonjs/DataModels/SpikeSleepDataEntry.js.map +0 -1
  63. package/lib/commonjs/DataModels/SpikeStepsDataEntry.js +0 -2
  64. package/lib/commonjs/DataModels/SpikeStepsDataEntry.js.map +0 -1
  65. package/lib/commonjs/DataModels/SpikeStepsIntradayDataEntry.js +0 -2
  66. package/lib/commonjs/DataModels/SpikeStepsIntradayDataEntry.js.map +0 -1
  67. package/lib/commonjs/DataModels/SpikeWebhookJob.js +0 -2
  68. package/lib/commonjs/DataModels/SpikeWebhookJob.js.map +0 -1
  69. package/lib/commonjs/DataTypes/SpikeDataType.js +0 -59
  70. package/lib/commonjs/DataTypes/SpikeDataType.js.map +0 -1
  71. package/lib/commonjs/SpikeBackgroundDeliveriesLogger.js +0 -2
  72. package/lib/commonjs/SpikeBackgroundDeliveriesLogger.js.map +0 -1
  73. package/lib/commonjs/SpikeConnection.js +0 -301
  74. package/lib/commonjs/SpikeConnection.js.map +0 -1
  75. package/lib/commonjs/SpikeConnectionTypes.js +0 -6
  76. package/lib/commonjs/SpikeConnectionTypes.js.map +0 -1
  77. package/lib/commonjs/SpikeLogger.js +0 -6
  78. package/lib/commonjs/SpikeLogger.js.map +0 -1
  79. package/lib/module/DataModels/SpikeActivitiesStreamDataEntry.js +0 -2
  80. package/lib/module/DataModels/SpikeActivitiesStreamDataEntry.js.map +0 -1
  81. package/lib/module/DataModels/SpikeActivitiesSummaryDataEntry.js +0 -2
  82. package/lib/module/DataModels/SpikeActivitiesSummaryDataEntry.js.map +0 -1
  83. package/lib/module/DataModels/SpikeBodyDataEntry.js +0 -2
  84. package/lib/module/DataModels/SpikeBodyDataEntry.js.map +0 -1
  85. package/lib/module/DataModels/SpikeBreathingDataEntry.js +0 -2
  86. package/lib/module/DataModels/SpikeBreathingDataEntry.js.map +0 -1
  87. package/lib/module/DataModels/SpikeCaloriesDataEntry.js +0 -2
  88. package/lib/module/DataModels/SpikeCaloriesDataEntry.js.map +0 -1
  89. package/lib/module/DataModels/SpikeData.js +0 -4
  90. package/lib/module/DataModels/SpikeData.js.map +0 -1
  91. package/lib/module/DataModels/SpikeDataTypes.js +0 -19
  92. package/lib/module/DataModels/SpikeDataTypes.js.map +0 -1
  93. package/lib/module/DataModels/SpikeDistanceDataEntry.js +0 -2
  94. package/lib/module/DataModels/SpikeDistanceDataEntry.js.map +0 -1
  95. package/lib/module/DataModels/SpikeEcgDataEntry.js +0 -2
  96. package/lib/module/DataModels/SpikeEcgDataEntry.js.map +0 -1
  97. package/lib/module/DataModels/SpikeGlucoseDataEntry.js +0 -2
  98. package/lib/module/DataModels/SpikeGlucoseDataEntry.js.map +0 -1
  99. package/lib/module/DataModels/SpikeHeartDataEntry.js +0 -2
  100. package/lib/module/DataModels/SpikeHeartDataEntry.js.map +0 -1
  101. package/lib/module/DataModels/SpikeOxygenSaturationDataEntry.js +0 -2
  102. package/lib/module/DataModels/SpikeOxygenSaturationDataEntry.js.map +0 -1
  103. package/lib/module/DataModels/SpikeSleepDataEntry.js +0 -2
  104. package/lib/module/DataModels/SpikeSleepDataEntry.js.map +0 -1
  105. package/lib/module/DataModels/SpikeStepsDataEntry.js +0 -2
  106. package/lib/module/DataModels/SpikeStepsDataEntry.js.map +0 -1
  107. package/lib/module/DataModels/SpikeStepsIntradayDataEntry.js +0 -2
  108. package/lib/module/DataModels/SpikeStepsIntradayDataEntry.js.map +0 -1
  109. package/lib/module/DataModels/SpikeWebhookJob.js +0 -2
  110. package/lib/module/DataModels/SpikeWebhookJob.js.map +0 -1
  111. package/lib/module/DataTypes/SpikeDataType.js +0 -42
  112. package/lib/module/DataTypes/SpikeDataType.js.map +0 -1
  113. package/lib/module/SpikeBackgroundDeliveriesLogger.js +0 -2
  114. package/lib/module/SpikeBackgroundDeliveriesLogger.js.map +0 -1
  115. package/lib/module/SpikeConnection.js +0 -296
  116. package/lib/module/SpikeConnection.js.map +0 -1
  117. package/lib/module/SpikeConnectionTypes.js +0 -4
  118. package/lib/module/SpikeConnectionTypes.js.map +0 -1
  119. package/lib/module/SpikeLogger.js +0 -4
  120. package/lib/module/SpikeLogger.js.map +0 -1
  121. package/lib/typescript/DataModels/SpikeActivitiesStreamDataEntry.d.ts +0 -66
  122. package/lib/typescript/DataModels/SpikeActivitiesStreamDataEntry.d.ts.map +0 -1
  123. package/lib/typescript/DataModels/SpikeActivitiesSummaryDataEntry.d.ts +0 -29
  124. package/lib/typescript/DataModels/SpikeActivitiesSummaryDataEntry.d.ts.map +0 -1
  125. package/lib/typescript/DataModels/SpikeBodyDataEntry.d.ts +0 -54
  126. package/lib/typescript/DataModels/SpikeBodyDataEntry.d.ts.map +0 -1
  127. package/lib/typescript/DataModels/SpikeBreathingDataEntry.d.ts +0 -13
  128. package/lib/typescript/DataModels/SpikeBreathingDataEntry.d.ts.map +0 -1
  129. package/lib/typescript/DataModels/SpikeCaloriesDataEntry.d.ts +0 -15
  130. package/lib/typescript/DataModels/SpikeCaloriesDataEntry.d.ts.map +0 -1
  131. package/lib/typescript/DataModels/SpikeData.d.ts +0 -27
  132. package/lib/typescript/DataModels/SpikeData.d.ts.map +0 -1
  133. package/lib/typescript/DataModels/SpikeDataTypes.d.ts +0 -17
  134. package/lib/typescript/DataModels/SpikeDataTypes.d.ts.map +0 -1
  135. package/lib/typescript/DataModels/SpikeDistanceDataEntry.d.ts +0 -13
  136. package/lib/typescript/DataModels/SpikeDistanceDataEntry.d.ts.map +0 -1
  137. package/lib/typescript/DataModels/SpikeEcgDataEntry.d.ts +0 -13
  138. package/lib/typescript/DataModels/SpikeEcgDataEntry.d.ts.map +0 -1
  139. package/lib/typescript/DataModels/SpikeGlucoseDataEntry.d.ts +0 -21
  140. package/lib/typescript/DataModels/SpikeGlucoseDataEntry.d.ts.map +0 -1
  141. package/lib/typescript/DataModels/SpikeHeartDataEntry.d.ts +0 -32
  142. package/lib/typescript/DataModels/SpikeHeartDataEntry.d.ts.map +0 -1
  143. package/lib/typescript/DataModels/SpikeOxygenSaturationDataEntry.d.ts +0 -15
  144. package/lib/typescript/DataModels/SpikeOxygenSaturationDataEntry.d.ts.map +0 -1
  145. package/lib/typescript/DataModels/SpikeSleepDataEntry.d.ts +0 -30
  146. package/lib/typescript/DataModels/SpikeSleepDataEntry.d.ts.map +0 -1
  147. package/lib/typescript/DataModels/SpikeStepsDataEntry.d.ts +0 -13
  148. package/lib/typescript/DataModels/SpikeStepsDataEntry.d.ts.map +0 -1
  149. package/lib/typescript/DataModels/SpikeStepsIntradayDataEntry.d.ts +0 -17
  150. package/lib/typescript/DataModels/SpikeStepsIntradayDataEntry.d.ts.map +0 -1
  151. package/lib/typescript/DataModels/SpikeWebhookJob.d.ts +0 -11
  152. package/lib/typescript/DataModels/SpikeWebhookJob.d.ts.map +0 -1
  153. package/lib/typescript/DataTypes/SpikeDataType.d.ts +0 -68
  154. package/lib/typescript/DataTypes/SpikeDataType.d.ts.map +0 -1
  155. package/lib/typescript/SpikeBackgroundDeliveriesLogger.d.ts +0 -4
  156. package/lib/typescript/SpikeBackgroundDeliveriesLogger.d.ts.map +0 -1
  157. package/lib/typescript/SpikeConnection.d.ts +0 -63
  158. package/lib/typescript/SpikeConnection.d.ts.map +0 -1
  159. package/lib/typescript/SpikeConnectionTypes.d.ts +0 -102
  160. package/lib/typescript/SpikeConnectionTypes.d.ts.map +0 -1
  161. package/lib/typescript/SpikeLogger.d.ts +0 -13
  162. package/lib/typescript/SpikeLogger.d.ts.map +0 -1
  163. package/src/DataModels/SpikeActivitiesStreamDataEntry.ts +0 -67
  164. package/src/DataModels/SpikeActivitiesSummaryDataEntry.ts +0 -28
  165. package/src/DataModels/SpikeBodyDataEntry.ts +0 -61
  166. package/src/DataModels/SpikeBreathingDataEntry.ts +0 -12
  167. package/src/DataModels/SpikeCaloriesDataEntry.ts +0 -13
  168. package/src/DataModels/SpikeData.ts +0 -38
  169. package/src/DataModels/SpikeDataTypes.ts +0 -31
  170. package/src/DataModels/SpikeDistanceDataEntry.ts +0 -12
  171. package/src/DataModels/SpikeEcgDataEntry.ts +0 -12
  172. package/src/DataModels/SpikeGlucoseDataEntry.ts +0 -20
  173. package/src/DataModels/SpikeHeartDataEntry.ts +0 -34
  174. package/src/DataModels/SpikeOxygenSaturationDataEntry.ts +0 -14
  175. package/src/DataModels/SpikeSleepDataEntry.ts +0 -29
  176. package/src/DataModels/SpikeStepsDataEntry.ts +0 -12
  177. package/src/DataModels/SpikeStepsIntradayDataEntry.ts +0 -16
  178. package/src/DataModels/SpikeWebhookJob.ts +0 -10
  179. package/src/DataTypes/SpikeDataType.ts +0 -93
  180. package/src/SpikeBackgroundDeliveriesLogger.ts +0 -3
  181. package/src/SpikeConnection.ts +0 -495
  182. package/src/SpikeConnectionTypes.ts +0 -124
  183. package/src/SpikeLogger.ts +0 -14
@@ -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.6.12'
79
+ implementation 'com.spikeapi.sdk:spike-sdk:4.7.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'
@@ -1,12 +1,6 @@
1
1
  package com.spikesdk
2
2
 
3
- import com.spikeapi.SpikeDataTypes
4
3
  import com.spikeapi.SpikeExceptions
5
- import com.spikeapi.healthconnect.HealthConnectAvailability
6
- import com.spikeapi.model.SpikeData
7
- import com.spikeapi.model.SpikeDataType
8
- import java.time.Instant
9
- import java.time.OffsetDateTime
10
4
 
11
5
  fun SpikeExceptions.mapException(): String {
12
6
  return when (this) {
@@ -20,43 +14,3 @@ fun SpikeExceptions.mapException(): String {
20
14
  else -> "SpikeException"
21
15
  }
22
16
  }
23
-
24
- fun SpikeDataType<out SpikeData>.toStringType(): String = when (this) {
25
- SpikeDataTypes.GLUCOSE -> "glucose"
26
- SpikeDataTypes.HEART_RATE -> "heart"
27
- SpikeDataTypes.SLEEP -> "sleep"
28
- SpikeDataTypes.STEPS -> "steps"
29
- SpikeDataTypes.STEPS_INTRADAY -> "steps_intraday"
30
- SpikeDataTypes.ACTIVITIES_STREAM -> "activities_stream"
31
- SpikeDataTypes.ACTIVITIES_SUMMARY -> "activities_summary"
32
- SpikeDataTypes.BREATHING -> "breathing"
33
- SpikeDataTypes.CALORIES -> "calories"
34
- SpikeDataTypes.DISTANCE -> "distance"
35
- SpikeDataTypes.OXYGEN_SATURATION -> "oxygen_saturation"
36
- SpikeDataTypes.BODY -> "body"
37
- else -> "activities_summary"
38
- }
39
-
40
- fun String.toSpikeDataType(): SpikeDataType<out SpikeData> = when (this) {
41
- "glucose" -> SpikeDataTypes.GLUCOSE
42
- "heart" -> SpikeDataTypes.HEART_RATE
43
- "sleep" -> SpikeDataTypes.SLEEP
44
- "steps" -> SpikeDataTypes.STEPS
45
- "steps_intraday" -> SpikeDataTypes.STEPS_INTRADAY
46
- "activities_stream" -> SpikeDataTypes.ACTIVITIES_STREAM
47
- "activities_summary" -> SpikeDataTypes.ACTIVITIES_SUMMARY
48
- "breathing" -> SpikeDataTypes.BREATHING
49
- "calories" -> SpikeDataTypes.CALORIES
50
- "distance" -> SpikeDataTypes.DISTANCE
51
- "oxygen_saturation" -> SpikeDataTypes.OXYGEN_SATURATION
52
- "body" -> SpikeDataTypes.BODY
53
- else -> SpikeDataTypes.ACTIVITIES_SUMMARY
54
- }
55
-
56
- fun Long.millisToOffsetDataTime(): OffsetDateTime =
57
- OffsetDateTime.ofInstant(Instant.ofEpochMilli(this), java.time.ZoneId.systemDefault())
58
-
59
- fun HealthConnectAvailability.toStringType(): String = when (this) {
60
- HealthConnectAvailability.INSTALLED -> "installed"
61
- HealthConnectAvailability.NOT_INSTALLED -> "notInstalled"
62
- }
@@ -8,12 +8,8 @@ import androidx.activity.result.contract.ActivityResultContract
8
8
  import com.facebook.react.bridge.*
9
9
  import com.facebook.react.modules.core.DeviceEventManagerModule
10
10
  import com.google.gson.GsonBuilder
11
- import com.spikeapi.SpikeConnection
12
- import com.spikeapi.SpikeEnvironment
13
11
  import com.spikeapi.SpikeExceptions
14
- import com.spikeapi.SpikeLogger
15
12
  import com.spikeapi.SpikePackageChecker
16
- import com.spikeapi.healthconnect.HealthConnectAvailability
17
13
  import com.spikeapi.apiv3.SpikeConnectionAPIv3
18
14
  import com.spikeapi.apiv3.datamodels.MetricType
19
15
  import com.spikeapi.apiv3.datamodels.ActivityConfig
@@ -62,9 +58,6 @@ fun <I, O> ComponentActivity.registerActivityResultLauncher(
62
58
  class SpikeSdkModule(reactContext: ReactApplicationContext) :
63
59
  ReactContextBaseJavaModule(reactContext), LifecycleEventListener {
64
60
 
65
- // Do not use this directly, use `addConnection` and `getConnection` instead
66
- private val _connections = mutableMapOf<String, SpikeConnection>()
67
-
68
61
  private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main.immediate)
69
62
 
70
63
  private val gson = GsonBuilder()
@@ -73,8 +66,6 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
73
66
  OffsetDateTime::class.java,
74
67
  OffsetDateTimeSerializer()
75
68
  ).create()
76
- private var checkPermissionsFor: Triple<String, Set<String>, Promise>? = null
77
-
78
69
  override fun getName(): String {
79
70
  return NAME
80
71
  }
@@ -99,443 +90,6 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
99
90
  }
100
91
  }
101
92
 
102
- @ReactMethod
103
- fun createConnection(
104
- uuid: String,
105
- appId: String,
106
- authToken: String,
107
- customerEndUserId: String,
108
- callbackUrl: String?,
109
- useLogger: Boolean,
110
- promise: Promise
111
- ) {
112
- scope.launch {
113
- try {
114
- val logger = if (useLogger) {
115
- createLogger(uuid)
116
- } else {
117
- null
118
- }
119
- addConnection(connection = SpikeConnection.createConnection(
120
- context = reactApplicationContext,
121
- authToken = authToken,
122
- customerEndUserId = customerEndUserId,
123
- appId = appId,
124
- callbackUrl = callbackUrl,
125
- env = SpikeEnvironment.PROD,
126
- logger = logger,
127
- ), uuid = uuid)
128
- promise.resolve(uuid)
129
- } catch (e: SpikeExceptions) {
130
- promise.reject(e.mapException(), e.message)
131
- }
132
- }
133
- }
134
-
135
- @ReactMethod
136
- fun getAppId(uuid: String, promise: Promise) {
137
- scope.launch {
138
- try {
139
- val connection = getConnection(uuid) ?: return@launch promise.reject(
140
- SpikeExceptions.SpikeException(
141
- "Connection not found"
142
- ).mapException(), "Connection not found"
143
- )
144
- val appId = connection.getAppId()
145
- promise.resolve(appId)
146
- } catch (e: SpikeExceptions) {
147
- promise.reject(e.mapException(), e.message)
148
- }
149
- }
150
- }
151
-
152
- @ReactMethod
153
- fun getSpikeEndUserId(uuid: String, promise: Promise) {
154
- scope.launch {
155
- try {
156
- val connection = getConnection(uuid) ?: return@launch promise.reject(
157
- SpikeExceptions.SpikeException(
158
- "Connection not found"
159
- ).mapException(), "Connection not found"
160
- )
161
- val spikeEndUserId = connection.getSpikeUserId()
162
- promise.resolve(spikeEndUserId)
163
- } catch (e: SpikeExceptions) {
164
- promise.reject(e.mapException(), e.message)
165
- }
166
- }
167
- }
168
-
169
- @ReactMethod
170
- fun getCustomerEndUserId(uuid: String, promise: Promise) {
171
- scope.launch {
172
- try {
173
- val connection = getConnection(uuid) ?: return@launch promise.reject(
174
- SpikeExceptions.SpikeException(
175
- "Connection not found"
176
- ).mapException(), "Connection not found"
177
- )
178
- val customerEndUserId = connection.getCustomerUserId()
179
- promise.resolve(customerEndUserId)
180
- } catch (e: SpikeExceptions) {
181
- promise.reject(e.mapException(), e.message)
182
- }
183
- }
184
- }
185
-
186
- @ReactMethod
187
- fun getCallbackUrl(uuid: String, promise: Promise) {
188
- scope.launch {
189
- try {
190
- val connection = getConnection(uuid) ?: return@launch promise.reject(
191
- SpikeExceptions.SpikeException(
192
- "Connection not found"
193
- ).mapException(), "Connection not found"
194
- )
195
- val callbackUrl = connection.getPostbackUrl()
196
- promise.resolve(callbackUrl)
197
- } catch (e: SpikeExceptions) {
198
- promise.reject(e.mapException(), e.message)
199
- }
200
- }
201
- }
202
-
203
-
204
- @ReactMethod
205
- fun close(uuid: String, promise: Promise) {
206
- scope.launch {
207
- try {
208
- val connection = getConnection(uuid) ?: return@launch promise.reject(
209
- SpikeExceptions.SpikeException(
210
- "Connection not found"
211
- ).mapException(), "Connection not found"
212
- )
213
- connection.close()
214
- promise.resolve(true)
215
- } catch (e: SpikeExceptions) {
216
- promise.reject(e.mapException(), e.message)
217
- }
218
- }
219
- }
220
-
221
- @ReactMethod
222
- fun extractDataInRange(
223
- connectionUUID: String,
224
- dataType: String,
225
- fromDateMillis: Double,
226
- toDateMillis: Double,
227
- promise: Promise
228
- ) {
229
- scope.launch {
230
- try {
231
- val connection = getConnection(connectionUUID) ?: return@launch promise.reject(
232
- SpikeExceptions.SpikeException(
233
- "Connection not found"
234
- ).mapException(), "Connection not found"
235
- )
236
- val result = connection.extractData(
237
- dataType = dataType.toSpikeDataType(),
238
- from = fromDateMillis.toLong().millisToOffsetDataTime(),
239
- to = toDateMillis.toLong().millisToOffsetDataTime()
240
- )
241
- promise.resolve(gson.toJson(result))
242
- } catch (e: SpikeExceptions) {
243
- promise.reject(e.mapException(), e.message)
244
- }
245
- }
246
- }
247
-
248
- @ReactMethod
249
- fun extractAndPostDataInRange(
250
- connectionUUID: String,
251
- dataType: String,
252
- fromDateMillis: Double,
253
- toDateMillis: Double,
254
- promise: Promise
255
- ) {
256
- scope.launch {
257
- try {
258
- val connection = getConnection(connectionUUID) ?: return@launch promise.reject(
259
- SpikeExceptions.SpikeException(
260
- "Connection not found"
261
- ).mapException(), "Connection not found"
262
- )
263
- val result = connection.extractAndPostData(
264
- dataType = dataType.toSpikeDataType(),
265
- from = fromDateMillis.toLong().millisToOffsetDataTime(),
266
- to = toDateMillis.toLong().millisToOffsetDataTime()
267
- )
268
- promise.resolve(gson.toJson(result))
269
- } catch (e: SpikeExceptions) {
270
- promise.reject(e.mapException(), e.message)
271
- }
272
- }
273
- }
274
-
275
- @ReactMethod
276
- fun extractData(
277
- connectionUUID: String,
278
- dataType: String,
279
- promise: Promise
280
- ) {
281
- scope.launch {
282
- try {
283
- val connection = getConnection(connectionUUID) ?: return@launch promise.reject(
284
- SpikeExceptions.SpikeException(
285
- "Connection not found"
286
- ).mapException(), "Connection not found"
287
- )
288
- val result = connection.extractData(
289
- dataType = dataType.toSpikeDataType()
290
- )
291
- promise.resolve(gson.toJson(result))
292
- } catch (e: SpikeExceptions) {
293
- promise.reject(e.mapException(), e.message)
294
- }
295
- }
296
- }
297
-
298
- @ReactMethod
299
- fun extractAndPostData(
300
- connectionUUID: String,
301
- dataType: String,
302
- promise: Promise
303
- ) {
304
- scope.launch {
305
- try {
306
- val connection = getConnection(connectionUUID) ?: return@launch promise.reject(
307
- SpikeExceptions.SpikeException(
308
- "Connection not found"
309
- ).mapException(), "Connection not found"
310
- )
311
- val result = connection.extractAndPostData(
312
- dataType = dataType.toSpikeDataType()
313
- )
314
- promise.resolve(gson.toJson(result))
315
- } catch (e: SpikeExceptions) {
316
- promise.reject(e.mapException(), e.message)
317
- }
318
- }
319
- }
320
-
321
- @ReactMethod
322
- fun manageHealthConnect(connectionUUID: String, promise: Promise) {
323
- scope.launch {
324
- try {
325
- val connection = getConnection(connectionUUID) ?: return@launch promise.reject(
326
- SpikeExceptions.SpikeException(
327
- "Connection not found"
328
- ).mapException(), "Connection not found"
329
- )
330
- connection.manageHealthConnect()
331
- promise.resolve(true)
332
- } catch (e: SpikeExceptions) {
333
- promise.reject(e.mapException(), e.message)
334
- }
335
- }
336
- }
337
-
338
- @ReactMethod
339
- fun checkPermissionsGranted(connectionUUID: String, dataType: String, promise: Promise) {
340
- scope.launch {
341
- try {
342
- val connection = getConnection(connectionUUID) ?: return@launch promise.reject(
343
- SpikeExceptions.SpikeException(
344
- "Connection not found"
345
- ).mapException(), "Connection not found"
346
- )
347
- val requiredPermissions = connection.getRequiredHealthPermissionsMetadata(
348
- dataType.toSpikeDataType()
349
- )
350
- val permissionsGranted: Boolean =
351
- connection.hasHealthPermissionsGranted(requiredPermissions)
352
- promise.resolve(permissionsGranted)
353
- } catch (e: SpikeExceptions) {
354
- promise.reject(e.mapException(), e.message)
355
- }
356
- }
357
- }
358
-
359
- @ReactMethod
360
- fun getHealthConnectAvailability(connectionUUID: String, promise: Promise) {
361
- scope.launch {
362
- try {
363
- val connection = getConnection(connectionUUID) ?: return@launch promise.reject(
364
- SpikeExceptions.SpikeException(
365
- "Connection not found"
366
- ).mapException(), "Connection not found"
367
- )
368
- val availability = connection.getHealthConnectAvailability()
369
- promise.resolve(availability.toStringType())
370
- } catch (e: SpikeExceptions) {
371
- promise.reject(e.mapException(), e.message)
372
- }
373
- }
374
- }
375
-
376
- @ReactMethod
377
- fun revokeAllPermissions(connectionUUID: String, promise: Promise) {
378
- scope.launch {
379
- try {
380
- val connection = getConnection(connectionUUID) ?: return@launch promise.reject(
381
- SpikeExceptions.SpikeException(
382
- "Connection not found"
383
- ).mapException(), "Connection not found"
384
- )
385
- connection.revokeAllPermissions()
386
- promise.resolve(true)
387
- } catch (e: SpikeExceptions) {
388
- promise.reject(e.mapException(), e.message)
389
- }
390
- }
391
- }
392
-
393
- @ReactMethod
394
- fun requestHealthPermissions(connectionUUID: String, dataType: String, promise: Promise) {
395
- scope.launch {
396
- val connection = getConnection(connectionUUID) ?: return@launch promise.reject(
397
- SpikeExceptions.SpikeException(
398
- "Connection not found"
399
- ).mapException(), "Connection not found"
400
- )
401
-
402
- val permissions =
403
- connection.getRequiredHealthPermissionsMetadata(dataType.toSpikeDataType())
404
-
405
- if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.TIRAMISU) {
406
- val intent = SpikeConnection.requestReadAuthorization().createIntent(
407
- reactApplicationContext, permissions
408
- )
409
-
410
- val availability = connection.getHealthConnectAvailability()
411
- if (availability == HealthConnectAvailability.INSTALLED) {
412
- reactApplicationContext.currentActivity?.startActivityForResult(
413
- intent,
414
- REQUEST_CODE
415
- )
416
- promise.resolve(true)
417
- } else {
418
- promise.reject(
419
- SpikeExceptions.SpikeException().mapException(),
420
- SpikeExceptions.SpikeException().message
421
- )
422
- }
423
- } else {
424
- val activity = reactApplicationContext.currentActivity
425
- if (activity is ComponentActivity) {
426
- checkPermissionsFor = Triple(connectionUUID, setOf(dataType), promise)
427
- val launcher =
428
- activity.registerActivityResultLauncher(
429
- SpikeConnection.requestReadAuthorization()
430
- ) {
431
-
432
- }
433
-
434
- if (permissions.isNotEmpty()) {
435
- launcher.launch(permissions)
436
- } else {
437
- promise.resolve(false)
438
- }
439
- } else {
440
- promise.resolve(false)
441
- }
442
- }
443
- }
444
- }
445
-
446
- @ReactMethod
447
- fun requestMultipleHealthPermissions(connectionUUID: String, dataTypes: ReadableArray, promise: Promise) {
448
- scope.launch {
449
- val connection = getConnection(connectionUUID) ?: return@launch promise.reject(
450
- SpikeExceptions.SpikeException(
451
- "Connection not found"
452
- ).mapException(), "Connection not found"
453
- )
454
-
455
- val permissions = mutableSetOf<String>()
456
- dataTypes.toArrayList().forEach {
457
- connection.getRequiredHealthPermissionsMetadata((it as String).toSpikeDataType())
458
- .forEach {
459
- permissions.add(it)
460
- }
461
- }
462
-
463
- if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.TIRAMISU) {
464
- val availability = connection.getHealthConnectAvailability()
465
- if (permissions.isNotEmpty() && availability == HealthConnectAvailability.INSTALLED) {
466
- val intent = SpikeConnection.requestReadAuthorization().createIntent(
467
- reactApplicationContext, permissions
468
- )
469
-
470
- reactApplicationContext.currentActivity?.startActivityForResult(
471
- intent,
472
- REQUEST_CODE
473
- )
474
- promise.resolve(true)
475
- } else {
476
- promise.reject(
477
- SpikeExceptions.SpikeException().mapException(),
478
- SpikeExceptions.SpikeException().message
479
- )
480
- }
481
- } else {
482
- val activity = reactApplicationContext.currentActivity
483
- if (activity is ComponentActivity) {
484
- checkPermissionsFor = Triple(
485
- connectionUUID,
486
- dataTypes.toArrayList().toSet() as Set<String>,
487
- promise
488
- )
489
- val launcher =
490
- activity.registerActivityResultLauncher(
491
- SpikeConnection.requestReadAuthorization()
492
- ) {
493
-
494
- }
495
- if (permissions.isNotEmpty()) {
496
- launcher.launch(permissions)
497
- } else {
498
- promise.reject(
499
- SpikeExceptions.SpikeException().mapException(),
500
- SpikeExceptions.SpikeException().message
501
- )
502
- }
503
- } else {
504
- promise.resolve(false)
505
- }
506
- }
507
- }
508
- }
509
-
510
- private fun createLogger(connectionUUID: String): SpikeLogger {
511
- return SpikeConnectionLogger(connectionUUID) { _, logLevel, message ->
512
- val body = WritableNativeMap().apply {
513
- putString("connectionUUID", connectionUUID)
514
- putString("message", message)
515
- }
516
-
517
- when (logLevel) {
518
- SpikeLogLevel.DEBUG -> sendEvent(
519
- reactContext = reactApplicationContext,
520
- eventName = logLevel.jsEventName,
521
- params = body
522
- )
523
-
524
- SpikeLogLevel.ERROR -> sendEvent(
525
- reactContext = reactApplicationContext,
526
- eventName = logLevel.jsEventName,
527
- params = body
528
- )
529
-
530
- SpikeLogLevel.INFO -> sendEvent(
531
- reactContext = reactApplicationContext,
532
- eventName = logLevel.jsEventName,
533
- params = body
534
- )
535
- }
536
- }
537
- }
538
-
539
93
  private fun sendEvent(reactContext: ReactContext, eventName: String, params: WritableMap?) {
540
94
  reactContext
541
95
  .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
@@ -543,19 +97,6 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
543
97
  }
544
98
 
545
99
  override fun onHostResume() {
546
- // Old SDK
547
- checkPermissionsFor?.let {
548
- it.second.forEach { permission ->
549
- checkPermissionsGranted(
550
- it.first,
551
- permission,
552
- it.third
553
- )
554
- }
555
- }
556
- checkPermissionsFor = null
557
-
558
- // New SDK V3
559
100
  checkPermissionsForV3?.let {
560
101
  areAllPermissionsGranted(it.first, it.second, it.third)
561
102
  }
@@ -572,25 +113,9 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
572
113
  const val REQUEST_CODE = 4200
573
114
  }
574
115
 
575
- // Connections
116
+ // ------------------------- V3 -------------------------
576
117
 
577
118
  private val mutex = Mutex()
578
-
579
- // Add new connection to the dictionary in a thread-safe manner
580
- private suspend fun addConnection(connection: SpikeConnection, uuid: String) {
581
- mutex.withLock {
582
- _connections[uuid] = connection
583
- }
584
- }
585
-
586
- // Synchronised read for safe multithreaded usage
587
- private suspend fun getConnection(uuid: String): SpikeConnection? {
588
- mutex.withLock {
589
- return _connections[uuid]
590
- }
591
- }
592
-
593
- // ------------------------- V3 -------------------------
594
119
 
595
120
  @ReactMethod
596
121
  fun setWrapper(type: String, version: String) {
@@ -1,5 +1,7 @@
1
1
  import Foundation
2
+ import BackgroundTasks
2
3
  import SpikeSDK
4
+ import SwiftUI
3
5
 
4
6
  class SpikeConnectionNotFoundException: Error, Codable {}
5
7
  class SpikeDataExtractionException: Error, Codable {}
@@ -11,26 +13,16 @@ class SpikeExceptionMapper {
11
13
  /// in `src/SpikeException.ts`
12
14
  static func extractErrorCode(_ error: Error) -> String {
13
15
  switch error {
14
- case is SpikeConnectionIsClosedException:
15
- return "SpikeConnectionIsClosedException"
16
16
  case is SpikeInvalidCredentialsException:
17
17
  return "SpikeInvalidCredentialsException"
18
- case is SpikeInvalidDateRangeException:
19
- return "SpikeInvalidDateRangeException"
20
- case is SpikeInvalidCallbackUrlException:
21
- return "SpikeInvalidCallbackUrlException"
22
- case is SpikePackException:
23
- return "SpikePackException"
24
18
  case is SpikePermissionsNotGrantedException:
25
19
  return "SpikePermissionsNotGrantedException"
26
20
  case is SpikeServerException:
27
21
  return "SpikeServerException"
28
- case is SpikeUnpackException:
29
- return "SpikeUnpackException"
30
- case is SpikeCallbackURLNotProvidedException:
31
- return "SpikeCallbackURLNotProvidedException"
32
22
  case is SpikeHealthDataNotAvailableException:
33
23
  return "SpikeHealthDataNotAvailableException"
24
+ case is SpikeIntegrationDeletedException:
25
+ return "SpikeIntegrationDeletedException"
34
26
  case is SpikeConnectionNotFoundException:
35
27
  return "SpikeConnectionNotFoundException"
36
28
  case is SpikeDataExtractionException: