react-native-spike-sdk 4.0.13-beta.1 → 4.0.13-beta.11

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 (267) hide show
  1. package/android/build.gradle +1 -1
  2. package/android/src/main/java/com/spikesdk/SpikeSdkModule.kt +585 -0
  3. package/ios/SpikeExceptionMapper.swift +35 -31
  4. package/ios/SpikeSdk.m +27 -4
  5. package/ios/SpikeSdk.swift +180 -14
  6. package/ios/SpikeSdk.xcodeproj/project.xcworkspace/xcuserdata/jaroslav.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  7. package/lib/commonjs/Spike.js +7 -3
  8. package/lib/commonjs/Spike.js.map +1 -1
  9. package/lib/commonjs/SpikeException.js +5 -3
  10. package/lib/commonjs/SpikeException.js.map +1 -1
  11. package/lib/commonjs/index.js +76 -0
  12. package/lib/commonjs/index.js.map +1 -1
  13. package/lib/commonjs/v3/DataModels/ActivityAdditionalData.js +18 -0
  14. package/lib/commonjs/v3/DataModels/ActivityAdditionalData.js.map +1 -0
  15. package/lib/commonjs/v3/DataModels/ActivityConfig.js +17 -0
  16. package/lib/commonjs/v3/DataModels/ActivityConfig.js.map +1 -0
  17. package/lib/commonjs/v3/DataModels/ActivityEntry.js +2 -0
  18. package/lib/commonjs/v3/DataModels/ActivityEntry.js.map +1 -0
  19. package/lib/commonjs/v3/DataModels/ActivitySamples.js +2 -0
  20. package/lib/commonjs/v3/DataModels/ActivitySamples.js.map +1 -0
  21. package/lib/commonjs/v3/DataModels/ActivityTag.js +5 -1
  22. package/lib/commonjs/v3/DataModels/ActivityTag.js.map +1 -1
  23. package/lib/commonjs/v3/DataModels/ActivityType.js +2 -1
  24. package/lib/commonjs/v3/DataModels/ActivityType.js.map +1 -1
  25. package/lib/commonjs/v3/DataModels/HealthConnectAvailabilityStatus.js +13 -0
  26. package/lib/commonjs/v3/DataModels/HealthConnectAvailabilityStatus.js.map +1 -0
  27. package/lib/commonjs/v3/DataModels/InputMethod.js +2 -1
  28. package/lib/commonjs/v3/DataModels/InputMethod.js.map +1 -1
  29. package/lib/commonjs/v3/DataModels/MetricType.js +36 -2
  30. package/lib/commonjs/v3/DataModels/MetricType.js.map +1 -1
  31. package/lib/commonjs/v3/DataModels/Provider.js +2 -13
  32. package/lib/commonjs/v3/DataModels/Provider.js.map +1 -1
  33. package/lib/commonjs/v3/DataModels/ProviderSource.js +7 -1
  34. package/lib/commonjs/v3/DataModels/ProviderSource.js.map +1 -1
  35. package/lib/commonjs/v3/DataModels/RecordSource.js +2 -0
  36. package/lib/commonjs/v3/DataModels/RecordSource.js.map +1 -0
  37. package/lib/commonjs/v3/DataModels/SleepConfig.js +15 -0
  38. package/lib/commonjs/v3/DataModels/SleepConfig.js.map +1 -0
  39. package/lib/commonjs/v3/DataModels/StatisticsInterval.js +3 -3
  40. package/lib/commonjs/v3/DataModels/StatisticsInterval.js.map +1 -1
  41. package/lib/commonjs/v3/DataModels/StatisticsType.js +2 -1
  42. package/lib/commonjs/v3/DataModels/StatisticsType.js.map +1 -1
  43. package/lib/commonjs/v3/DataModels/Unit.js +2 -1
  44. package/lib/commonjs/v3/DataModels/Unit.js.map +1 -1
  45. package/lib/commonjs/v3/DataModels/UserInfoResponse.js +6 -0
  46. package/lib/commonjs/v3/DataModels/UserInfoResponse.js.map +1 -0
  47. package/lib/commonjs/v3/SpikeRNConnectionAPIv3.js +199 -29
  48. package/lib/commonjs/v3/SpikeRNConnectionAPIv3.js.map +1 -1
  49. package/lib/commonjs/v3/StatisticsFilter.js +6 -1
  50. package/lib/commonjs/v3/StatisticsFilter.js.map +1 -1
  51. package/lib/commonjs/version.js +9 -0
  52. package/lib/commonjs/version.js.map +1 -0
  53. package/lib/module/Spike.js +7 -3
  54. package/lib/module/Spike.js.map +1 -1
  55. package/lib/module/SpikeException.js +5 -3
  56. package/lib/module/SpikeException.js.map +1 -1
  57. package/lib/module/index.js +7 -3
  58. package/lib/module/index.js.map +1 -1
  59. package/lib/module/v3/DataModels/ActivityAdditionalData.js +12 -0
  60. package/lib/module/v3/DataModels/ActivityAdditionalData.js.map +1 -0
  61. package/lib/module/v3/DataModels/ActivityConfig.js +10 -0
  62. package/lib/module/v3/DataModels/ActivityConfig.js.map +1 -0
  63. package/lib/module/v3/DataModels/ActivityEntry.js +2 -0
  64. package/lib/module/v3/DataModels/ActivityEntry.js.map +1 -0
  65. package/lib/module/v3/DataModels/ActivitySamples.js +2 -0
  66. package/lib/module/v3/DataModels/ActivitySamples.js.map +1 -0
  67. package/lib/module/v3/DataModels/ActivityTag.js +5 -2
  68. package/lib/module/v3/DataModels/ActivityTag.js.map +1 -1
  69. package/lib/module/v3/DataModels/ActivityType.js +2 -2
  70. package/lib/module/v3/DataModels/ActivityType.js.map +1 -1
  71. package/lib/module/v3/DataModels/HealthConnectAvailabilityStatus.js +7 -0
  72. package/lib/module/v3/DataModels/HealthConnectAvailabilityStatus.js.map +1 -0
  73. package/lib/module/v3/DataModels/InputMethod.js +2 -2
  74. package/lib/module/v3/DataModels/InputMethod.js.map +1 -1
  75. package/lib/module/v3/DataModels/MetricType.js +36 -3
  76. package/lib/module/v3/DataModels/MetricType.js.map +1 -1
  77. package/lib/module/v3/DataModels/Provider.js +2 -14
  78. package/lib/module/v3/DataModels/Provider.js.map +1 -1
  79. package/lib/module/v3/DataModels/ProviderSource.js +7 -2
  80. package/lib/module/v3/DataModels/ProviderSource.js.map +1 -1
  81. package/lib/module/v3/DataModels/RecordSource.js +2 -0
  82. package/lib/module/v3/DataModels/RecordSource.js.map +1 -0
  83. package/lib/module/v3/DataModels/SleepConfig.js +8 -0
  84. package/lib/module/v3/DataModels/SleepConfig.js.map +1 -0
  85. package/lib/module/v3/DataModels/StatisticsInterval.js +3 -4
  86. package/lib/module/v3/DataModels/StatisticsInterval.js.map +1 -1
  87. package/lib/module/v3/DataModels/StatisticsType.js +2 -2
  88. package/lib/module/v3/DataModels/StatisticsType.js.map +1 -1
  89. package/lib/module/v3/DataModels/Unit.js +2 -2
  90. package/lib/module/v3/DataModels/Unit.js.map +1 -1
  91. package/lib/module/v3/DataModels/UserInfoResponse.js +2 -0
  92. package/lib/module/v3/DataModels/UserInfoResponse.js.map +1 -0
  93. package/lib/module/v3/SpikeRNConnectionAPIv3.js +199 -29
  94. package/lib/module/v3/SpikeRNConnectionAPIv3.js.map +1 -1
  95. package/lib/module/v3/StatisticsFilter.js +6 -1
  96. package/lib/module/v3/StatisticsFilter.js.map +1 -1
  97. package/lib/module/version.js +3 -0
  98. package/lib/module/version.js.map +1 -0
  99. package/lib/typescript/DataModels/SpikeActivitiesStreamDataEntry.d.ts.map +1 -0
  100. package/lib/typescript/DataModels/SpikeActivitiesSummaryDataEntry.d.ts.map +1 -0
  101. package/lib/typescript/DataModels/SpikeBodyDataEntry.d.ts.map +1 -0
  102. package/lib/typescript/DataModels/SpikeBreathingDataEntry.d.ts.map +1 -0
  103. package/lib/typescript/DataModels/SpikeCaloriesDataEntry.d.ts.map +1 -0
  104. package/lib/typescript/DataModels/SpikeData.d.ts.map +1 -0
  105. package/lib/typescript/DataModels/SpikeDataTypes.d.ts.map +1 -0
  106. package/lib/typescript/DataModels/SpikeDistanceDataEntry.d.ts.map +1 -0
  107. package/lib/typescript/DataModels/SpikeEcgDataEntry.d.ts.map +1 -0
  108. package/lib/typescript/DataModels/SpikeGlucoseDataEntry.d.ts.map +1 -0
  109. package/lib/typescript/DataModels/SpikeHeartDataEntry.d.ts.map +1 -0
  110. package/lib/typescript/DataModels/SpikeOxygenSaturationDataEntry.d.ts.map +1 -0
  111. package/lib/typescript/DataModels/SpikeSleepDataEntry.d.ts.map +1 -0
  112. package/lib/typescript/DataModels/SpikeStepsDataEntry.d.ts.map +1 -0
  113. package/lib/typescript/DataModels/SpikeStepsIntradayDataEntry.d.ts.map +1 -0
  114. package/lib/typescript/DataModels/SpikeWebhookJob.d.ts.map +1 -0
  115. package/lib/typescript/DataTypes/SpikeDataType.d.ts.map +1 -0
  116. package/lib/typescript/{src/Spike.d.ts → Spike.d.ts} +7 -2
  117. package/lib/typescript/Spike.d.ts.map +1 -0
  118. package/lib/typescript/SpikeBackgroundDeliveriesLogger.d.ts.map +1 -0
  119. package/lib/typescript/SpikeConnection.d.ts.map +1 -0
  120. package/lib/typescript/SpikeConnectionTypes.d.ts.map +1 -0
  121. package/lib/typescript/SpikeException.d.ts.map +1 -0
  122. package/lib/typescript/SpikeLogger.d.ts.map +1 -0
  123. package/lib/typescript/SpikeSdk.d.ts.map +1 -0
  124. package/lib/typescript/{src/index.d.ts → index.d.ts} +15 -4
  125. package/lib/typescript/index.d.ts.map +1 -0
  126. package/lib/typescript/v3/Conversion.d.ts.map +1 -0
  127. package/lib/typescript/v3/DataModels/ActivityAdditionalData.d.ts +9 -0
  128. package/lib/typescript/v3/DataModels/ActivityAdditionalData.d.ts.map +1 -0
  129. package/lib/typescript/v3/DataModels/ActivityConfig.d.ts +12 -0
  130. package/lib/typescript/v3/DataModels/ActivityConfig.d.ts.map +1 -0
  131. package/lib/typescript/v3/DataModels/ActivityEntry.d.ts +11 -0
  132. package/lib/typescript/v3/DataModels/ActivityEntry.d.ts.map +1 -0
  133. package/lib/typescript/v3/DataModels/ActivitySamples.d.ts +8 -0
  134. package/lib/typescript/v3/DataModels/ActivitySamples.d.ts.map +1 -0
  135. package/lib/typescript/{src/v3 → v3}/DataModels/ActivityTag.d.ts +3 -0
  136. package/lib/typescript/v3/DataModels/ActivityTag.d.ts.map +1 -0
  137. package/lib/typescript/v3/DataModels/ActivityType.d.ts.map +1 -0
  138. package/lib/typescript/v3/DataModels/HealthConnectAvailabilityStatus.d.ts +6 -0
  139. package/lib/typescript/v3/DataModels/HealthConnectAvailabilityStatus.d.ts.map +1 -0
  140. package/lib/typescript/v3/DataModels/InputMethod.d.ts.map +1 -0
  141. package/lib/typescript/v3/DataModels/MetricType.d.ts +45 -0
  142. package/lib/typescript/v3/DataModels/MetricType.d.ts.map +1 -0
  143. package/lib/typescript/v3/DataModels/Provider.d.ts +14 -0
  144. package/lib/typescript/v3/DataModels/Provider.d.ts.map +1 -0
  145. package/lib/typescript/{src/v3 → v3}/DataModels/ProviderSource.d.ts +5 -0
  146. package/lib/typescript/v3/DataModels/ProviderSource.d.ts.map +1 -0
  147. package/lib/typescript/v3/DataModels/RecordSource.d.ts +11 -0
  148. package/lib/typescript/v3/DataModels/RecordSource.d.ts.map +1 -0
  149. package/lib/typescript/v3/DataModels/SleepConfig.d.ts +9 -0
  150. package/lib/typescript/v3/DataModels/SleepConfig.d.ts.map +1 -0
  151. package/lib/typescript/v3/DataModels/SpikeRecord.d.ts +33 -0
  152. package/lib/typescript/v3/DataModels/SpikeRecord.d.ts.map +1 -0
  153. package/lib/typescript/{src/v3 → v3}/DataModels/Statistic.d.ts +2 -2
  154. package/lib/typescript/v3/DataModels/Statistic.d.ts.map +1 -0
  155. package/lib/typescript/v3/DataModels/StatisticsInterval.d.ts.map +1 -0
  156. package/lib/typescript/v3/DataModels/StatisticsType.d.ts.map +1 -0
  157. package/lib/typescript/v3/DataModels/UUID.d.ts.map +1 -0
  158. package/lib/typescript/v3/DataModels/Unit.d.ts.map +1 -0
  159. package/lib/typescript/v3/DataModels/UserInfoResponse.d.ts +12 -0
  160. package/lib/typescript/v3/DataModels/UserInfoResponse.d.ts.map +1 -0
  161. package/lib/typescript/v3/SpikeRNConnectionAPIv3.d.ts +133 -0
  162. package/lib/typescript/v3/SpikeRNConnectionAPIv3.d.ts.map +1 -0
  163. package/lib/typescript/v3/StatisticsFilter.d.ts +14 -0
  164. package/lib/typescript/v3/StatisticsFilter.d.ts.map +1 -0
  165. package/lib/typescript/version.d.ts +2 -0
  166. package/lib/typescript/version.d.ts.map +1 -0
  167. package/package.json +12 -7
  168. package/src/Spike.ts +12 -5
  169. package/src/SpikeException.ts +18 -3
  170. package/src/index.ts +33 -2
  171. package/src/v3/DataModels/ActivityAdditionalData.ts +11 -0
  172. package/src/v3/DataModels/ActivityConfig.ts +20 -0
  173. package/src/v3/DataModels/ActivityEntry.ts +11 -0
  174. package/src/v3/DataModels/ActivitySamples.ts +10 -0
  175. package/src/v3/DataModels/ActivityTag.ts +6 -2
  176. package/src/v3/DataModels/ActivityType.ts +3 -2
  177. package/src/v3/DataModels/HealthConnectAvailabilityStatus.ts +6 -0
  178. package/src/v3/DataModels/InputMethod.ts +3 -2
  179. package/src/v3/DataModels/MetricType.ts +37 -3
  180. package/src/v3/DataModels/Provider.ts +3 -14
  181. package/src/v3/DataModels/ProviderSource.ts +8 -2
  182. package/src/v3/DataModels/RecordSource.ts +13 -0
  183. package/src/v3/DataModels/SleepConfig.ts +18 -0
  184. package/src/v3/DataModels/SpikeRecord.ts +25 -23
  185. package/src/v3/DataModels/Statistic.ts +12 -10
  186. package/src/v3/DataModels/StatisticsInterval.ts +3 -7
  187. package/src/v3/DataModels/StatisticsType.ts +3 -2
  188. package/src/v3/DataModels/Unit.ts +3 -2
  189. package/src/v3/DataModels/UserInfoResponse.ts +13 -0
  190. package/src/v3/SpikeRNConnectionAPIv3.ts +314 -51
  191. package/src/v3/StatisticsFilter.ts +14 -1
  192. package/src/version.ts +3 -0
  193. package/lib/typescript/src/DataModels/SpikeActivitiesStreamDataEntry.d.ts.map +0 -1
  194. package/lib/typescript/src/DataModels/SpikeActivitiesSummaryDataEntry.d.ts.map +0 -1
  195. package/lib/typescript/src/DataModels/SpikeBodyDataEntry.d.ts.map +0 -1
  196. package/lib/typescript/src/DataModels/SpikeBreathingDataEntry.d.ts.map +0 -1
  197. package/lib/typescript/src/DataModels/SpikeCaloriesDataEntry.d.ts.map +0 -1
  198. package/lib/typescript/src/DataModels/SpikeData.d.ts.map +0 -1
  199. package/lib/typescript/src/DataModels/SpikeDataTypes.d.ts.map +0 -1
  200. package/lib/typescript/src/DataModels/SpikeDistanceDataEntry.d.ts.map +0 -1
  201. package/lib/typescript/src/DataModels/SpikeEcgDataEntry.d.ts.map +0 -1
  202. package/lib/typescript/src/DataModels/SpikeGlucoseDataEntry.d.ts.map +0 -1
  203. package/lib/typescript/src/DataModels/SpikeHeartDataEntry.d.ts.map +0 -1
  204. package/lib/typescript/src/DataModels/SpikeOxygenSaturationDataEntry.d.ts.map +0 -1
  205. package/lib/typescript/src/DataModels/SpikeSleepDataEntry.d.ts.map +0 -1
  206. package/lib/typescript/src/DataModels/SpikeStepsDataEntry.d.ts.map +0 -1
  207. package/lib/typescript/src/DataModels/SpikeStepsIntradayDataEntry.d.ts.map +0 -1
  208. package/lib/typescript/src/DataModels/SpikeWebhookJob.d.ts.map +0 -1
  209. package/lib/typescript/src/DataTypes/SpikeDataType.d.ts.map +0 -1
  210. package/lib/typescript/src/Spike.d.ts.map +0 -1
  211. package/lib/typescript/src/SpikeBackgroundDeliveriesLogger.d.ts.map +0 -1
  212. package/lib/typescript/src/SpikeConnection.d.ts.map +0 -1
  213. package/lib/typescript/src/SpikeConnectionTypes.d.ts.map +0 -1
  214. package/lib/typescript/src/SpikeException.d.ts.map +0 -1
  215. package/lib/typescript/src/SpikeLogger.d.ts.map +0 -1
  216. package/lib/typescript/src/SpikeSdk.d.ts.map +0 -1
  217. package/lib/typescript/src/index.d.ts.map +0 -1
  218. package/lib/typescript/src/v3/Conversion.d.ts.map +0 -1
  219. package/lib/typescript/src/v3/DataModels/ActivityTag.d.ts.map +0 -1
  220. package/lib/typescript/src/v3/DataModels/ActivityType.d.ts.map +0 -1
  221. package/lib/typescript/src/v3/DataModels/InputMethod.d.ts.map +0 -1
  222. package/lib/typescript/src/v3/DataModels/MetricType.d.ts +0 -12
  223. package/lib/typescript/src/v3/DataModels/MetricType.d.ts.map +0 -1
  224. package/lib/typescript/src/v3/DataModels/Provider.d.ts +0 -26
  225. package/lib/typescript/src/v3/DataModels/Provider.d.ts.map +0 -1
  226. package/lib/typescript/src/v3/DataModels/ProviderSource.d.ts.map +0 -1
  227. package/lib/typescript/src/v3/DataModels/SpikeRecord.d.ts +0 -30
  228. package/lib/typescript/src/v3/DataModels/SpikeRecord.d.ts.map +0 -1
  229. package/lib/typescript/src/v3/DataModels/Statistic.d.ts.map +0 -1
  230. package/lib/typescript/src/v3/DataModels/StatisticsInterval.d.ts.map +0 -1
  231. package/lib/typescript/src/v3/DataModels/StatisticsType.d.ts.map +0 -1
  232. package/lib/typescript/src/v3/DataModels/UUID.d.ts.map +0 -1
  233. package/lib/typescript/src/v3/DataModels/Unit.d.ts.map +0 -1
  234. package/lib/typescript/src/v3/SpikeRNConnectionAPIv3.d.ts +0 -14
  235. package/lib/typescript/src/v3/SpikeRNConnectionAPIv3.d.ts.map +0 -1
  236. package/lib/typescript/src/v3/StatisticsFilter.d.ts +0 -7
  237. package/lib/typescript/src/v3/StatisticsFilter.d.ts.map +0 -1
  238. /package/lib/typescript/{src/DataModels → DataModels}/SpikeActivitiesStreamDataEntry.d.ts +0 -0
  239. /package/lib/typescript/{src/DataModels → DataModels}/SpikeActivitiesSummaryDataEntry.d.ts +0 -0
  240. /package/lib/typescript/{src/DataModels → DataModels}/SpikeBodyDataEntry.d.ts +0 -0
  241. /package/lib/typescript/{src/DataModels → DataModels}/SpikeBreathingDataEntry.d.ts +0 -0
  242. /package/lib/typescript/{src/DataModels → DataModels}/SpikeCaloriesDataEntry.d.ts +0 -0
  243. /package/lib/typescript/{src/DataModels → DataModels}/SpikeData.d.ts +0 -0
  244. /package/lib/typescript/{src/DataModels → DataModels}/SpikeDataTypes.d.ts +0 -0
  245. /package/lib/typescript/{src/DataModels → DataModels}/SpikeDistanceDataEntry.d.ts +0 -0
  246. /package/lib/typescript/{src/DataModels → DataModels}/SpikeEcgDataEntry.d.ts +0 -0
  247. /package/lib/typescript/{src/DataModels → DataModels}/SpikeGlucoseDataEntry.d.ts +0 -0
  248. /package/lib/typescript/{src/DataModels → DataModels}/SpikeHeartDataEntry.d.ts +0 -0
  249. /package/lib/typescript/{src/DataModels → DataModels}/SpikeOxygenSaturationDataEntry.d.ts +0 -0
  250. /package/lib/typescript/{src/DataModels → DataModels}/SpikeSleepDataEntry.d.ts +0 -0
  251. /package/lib/typescript/{src/DataModels → DataModels}/SpikeStepsDataEntry.d.ts +0 -0
  252. /package/lib/typescript/{src/DataModels → DataModels}/SpikeStepsIntradayDataEntry.d.ts +0 -0
  253. /package/lib/typescript/{src/DataModels → DataModels}/SpikeWebhookJob.d.ts +0 -0
  254. /package/lib/typescript/{src/DataTypes → DataTypes}/SpikeDataType.d.ts +0 -0
  255. /package/lib/typescript/{src/SpikeBackgroundDeliveriesLogger.d.ts → SpikeBackgroundDeliveriesLogger.d.ts} +0 -0
  256. /package/lib/typescript/{src/SpikeConnection.d.ts → SpikeConnection.d.ts} +0 -0
  257. /package/lib/typescript/{src/SpikeConnectionTypes.d.ts → SpikeConnectionTypes.d.ts} +0 -0
  258. /package/lib/typescript/{src/SpikeException.d.ts → SpikeException.d.ts} +0 -0
  259. /package/lib/typescript/{src/SpikeLogger.d.ts → SpikeLogger.d.ts} +0 -0
  260. /package/lib/typescript/{src/SpikeSdk.d.ts → SpikeSdk.d.ts} +0 -0
  261. /package/lib/typescript/{src/v3 → v3}/Conversion.d.ts +0 -0
  262. /package/lib/typescript/{src/v3 → v3}/DataModels/ActivityType.d.ts +0 -0
  263. /package/lib/typescript/{src/v3 → v3}/DataModels/InputMethod.d.ts +0 -0
  264. /package/lib/typescript/{src/v3 → v3}/DataModels/StatisticsInterval.d.ts +0 -0
  265. /package/lib/typescript/{src/v3 → v3}/DataModels/StatisticsType.d.ts +0 -0
  266. /package/lib/typescript/{src/v3 → v3}/DataModels/UUID.d.ts +0 -0
  267. /package/lib/typescript/{src/v3 → v3}/DataModels/Unit.d.ts +0 -0
@@ -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:3.1.6'
79
+ implementation 'com.spikeapi.sdk:spike-sdk:4.0.12-beta.6'
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'
@@ -14,6 +14,19 @@ import com.spikeapi.SpikeExceptions
14
14
  import com.spikeapi.SpikeLogger
15
15
  import com.spikeapi.SpikePackageChecker
16
16
  import com.spikeapi.healthconnect.HealthConnectAvailability
17
+ import com.spikeapi.apiv3.SpikeConnectionAPIv3
18
+ import com.spikeapi.apiv3.datamodels.MetricType
19
+ import com.spikeapi.apiv3.datamodels.ActivityConfig
20
+ import com.spikeapi.apiv3.datamodels.SleepConfig
21
+ import com.spikeapi.apiv3.datamodels.StatisticsType
22
+ import com.spikeapi.apiv3.datamodels.utils.ActivityConfigUtils
23
+ import com.spikeapi.apiv3.datamodels.utils.SleepConfigUtils
24
+ import com.spikeapi.apiv3.datamodels.utils.StatisticsTypeUtils
25
+ import com.spikeapi.apiv3.datamodels.utils.StatisticsIntervalUtils
26
+ import com.spikeapi.apiv3.datamodels.utils.MetricTypeUtils
27
+ import com.spikeapi.apiv3.datamodels.StatisticsInterval
28
+ import com.spikeapi.apiv3.datamodels.StatisticsFilter
29
+ import com.spikeapi.apiv3.healthconnect.HealthConnectPermissionManager
17
30
  import kotlinx.coroutines.CoroutineScope
18
31
  import kotlinx.coroutines.Dispatchers
19
32
  import kotlinx.coroutines.SupervisorJob
@@ -22,6 +35,10 @@ import kotlinx.coroutines.sync.Mutex
22
35
  import kotlinx.coroutines.sync.withLock
23
36
  import java.time.OffsetDateTime
24
37
  import java.util.UUID
38
+ import android.util.Log
39
+ import java.time.Instant
40
+ import java.time.format.DateTimeParseException
41
+
25
42
 
26
43
  fun <I, O> ComponentActivity.registerActivityResultLauncher(
27
44
  contract: ActivityResultContract<I, O>,
@@ -513,7 +530,9 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
513
530
  .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
514
531
  .emit(eventName, params)
515
532
  }
533
+
516
534
  override fun onHostResume() {
535
+ // Old SDK
517
536
  checkPermissionsFor?.let {
518
537
  it.second.forEach { permission ->
519
538
  checkPermissionsGranted(
@@ -524,6 +543,12 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
524
543
  }
525
544
  }
526
545
  checkPermissionsFor = null
546
+
547
+ // New SDK V3
548
+ checkPermissionsForV3?.let {
549
+ areAllPermissionsGranted(it.first, it.second, it.third)
550
+ }
551
+ checkPermissionsForV3 = null
527
552
  }
528
553
 
529
554
  override fun onHostPause() {
@@ -554,4 +579,564 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
554
579
  }
555
580
  }
556
581
 
582
+ // ------------------------- V3 -------------------------
583
+
584
+ @ReactMethod
585
+ fun setWrapper(type: String, version: String) {
586
+ SpikeConnectionAPIv3.setWrapper(type, version)
587
+ }
588
+
589
+ @ReactMethod
590
+ fun createConnectionAPIv3(
591
+ uuid: String,
592
+ appId: String,
593
+ authToken: String,
594
+ customerEndUserId: String,
595
+ promise: Promise
596
+ ) {
597
+ scope.launch {
598
+ try {
599
+ val connection = SpikeConnectionAPIv3.createConnection(
600
+ appId = appId,
601
+ authToken = authToken,
602
+ customerEndUserId = customerEndUserId,
603
+ context = reactApplicationContext
604
+ )
605
+
606
+ addConnectionV3(connection, uuid)
607
+ promise.resolve(uuid)
608
+
609
+ } catch (e: SpikeExceptions) {
610
+ promise.reject(e.mapException(), e.message)
611
+ }
612
+ }
613
+ }
614
+
615
+ /// --- Read user info ---
616
+
617
+ @ReactMethod
618
+ fun getUserInfo(
619
+ connectionUUID: String,
620
+ promise: Promise
621
+ ) {
622
+ scope.launch {
623
+ try {
624
+ val connection = getConnectionV3(connectionUUID) ?: return@launch promise.reject(
625
+ SpikeExceptions.SpikeException("Connection not found").mapException(),
626
+ "Connection not found (getUserInfo)"
627
+ )
628
+
629
+ val result = connection.getUserInfo()
630
+
631
+ promise.resolve(SpikeConnectionAPIv3.convertToJson(result))
632
+
633
+ } catch (e: SpikeExceptions) {
634
+ promise.reject(e.mapException(), e.message)
635
+ }
636
+ }
637
+ }
638
+
639
+ /// --- Read Health connect data ---
640
+
641
+ @ReactMethod
642
+ fun getStatistics(
643
+ connectionUUID: String,
644
+ types: ReadableArray, // [StatisticsType]
645
+ from: String, // Instant
646
+ to: String, // Instant
647
+ interval: String, // StatisticsInterval
648
+ filter: String?, // StatisticsFilter?
649
+ promise: Promise
650
+ ) {
651
+ scope.launch {
652
+ try {
653
+ val connection = getConnectionV3(connectionUUID) ?: return@launch promise.reject(
654
+ SpikeExceptions.SpikeException("Connection not found").mapException(),
655
+ "Connection not found (getStatistics)"
656
+ )
657
+ val statTypes = types.toArrayList().mapNotNull {
658
+ StatisticsTypeUtils.fromValue(it as String)
659
+ }.toSet()
660
+ val dateFrom = convertIsoStringToInstant(from)
661
+ val dateTo = convertIsoStringToInstant(to)
662
+ val statsInterval = StatisticsIntervalUtils.fromValue(interval)
663
+ val statsFilter = StatisticsFilter.fromValue(filter)
664
+
665
+ val result = connection.getStatistics(
666
+ types = statTypes,
667
+ from = dateFrom,
668
+ to = dateTo,
669
+ interval = statsInterval,
670
+ filter = statsFilter
671
+ )
672
+
673
+ promise.resolve(SpikeConnectionAPIv3.convertToJson(result))
674
+
675
+ } catch (e: SpikeExceptions) {
676
+ promise.reject(e.mapException(), e.message)
677
+ }
678
+ }
679
+ }
680
+
681
+ @ReactMethod
682
+ fun getRecords(
683
+ connectionUUID: String,
684
+ types: ReadableArray, // [MetricType]
685
+ from: String, // Instant
686
+ to: String, // Instant
687
+ filter: String?, // StatisticsFilter?
688
+ promise: Promise
689
+ ) {
690
+ scope.launch {
691
+ try {
692
+ val connection = getConnectionV3(connectionUUID) ?: return@launch promise.reject(
693
+ SpikeExceptions.SpikeException("Connection not found").mapException(),
694
+ "Connection not found (getRecords)"
695
+ )
696
+ val statTypes = types.toArrayList().mapNotNull {
697
+ MetricTypeUtils.fromValue(it as String)
698
+ }.toSet()
699
+ val dateFrom = convertIsoStringToInstant(from)
700
+ val dateTo = convertIsoStringToInstant(to)
701
+ val statsFilter = StatisticsFilter.fromValue(filter)
702
+
703
+ val result = connection.getRecords(
704
+ types = statTypes,
705
+ from = dateFrom,
706
+ to = dateTo,
707
+ filter = statsFilter
708
+ )
709
+
710
+ promise.resolve(SpikeConnectionAPIv3.convertToJson(result))
711
+
712
+ } catch (e: SpikeExceptions) {
713
+ promise.reject(e.mapException(), e.message)
714
+ }
715
+ }
716
+ }
717
+
718
+ @ReactMethod
719
+ fun getActivities(
720
+ connectionUUID: String,
721
+ configJson: String, // ActivityConfig
722
+ from: String, // Instant
723
+ to: String, // Instant
724
+ filter: String?, // StatisticsFilter?
725
+ promise: Promise
726
+ ) {
727
+ scope.launch {
728
+ try {
729
+ val connection = getConnectionV3(connectionUUID) ?: return@launch promise.reject(
730
+ SpikeExceptions.SpikeException("Connection not found").mapException(),
731
+ "Connection not found (getActivities)"
732
+ )
733
+ val dateFrom = convertIsoStringToInstant(from)
734
+ val dateTo = convertIsoStringToInstant(to)
735
+ val statsFilter = StatisticsFilter.fromValue(filter)
736
+ val configObject = ActivityConfigUtils.fromValue(configJson) ?: ActivityConfig()
737
+
738
+ val result = connection.getActivities(
739
+ config = configObject,
740
+ from = dateFrom,
741
+ to = dateTo,
742
+ filter = statsFilter
743
+ )
744
+
745
+ promise.resolve(SpikeConnectionAPIv3.convertToJson(result))
746
+
747
+ } catch (e: SpikeExceptions) {
748
+ promise.reject(e.mapException(), e.message)
749
+ }
750
+ }
751
+ }
752
+
753
+ @ReactMethod
754
+ fun getSleep(
755
+ connectionUUID: String,
756
+ configJson: String, // SleepConfig
757
+ from: String, // Instant
758
+ to: String, // Instant
759
+ filter: String?, // StatisticsFilter?
760
+ promise: Promise
761
+ ) {
762
+ scope.launch {
763
+ try {
764
+ val connection = getConnectionV3(connectionUUID) ?: return@launch promise.reject(
765
+ SpikeExceptions.SpikeException("Connection not found").mapException(),
766
+ "Connection not found (getSleep)"
767
+ )
768
+ val dateFrom = convertIsoStringToInstant(from)
769
+ val dateTo = convertIsoStringToInstant(to)
770
+ val statsFilter = StatisticsFilter.fromValue(filter)
771
+ val configObject = SleepConfigUtils.fromValue(configJson) ?: SleepConfig()
772
+
773
+ val result = connection.getSleep(
774
+ config = configObject,
775
+ from = dateFrom,
776
+ to = dateTo,
777
+ filter = statsFilter
778
+ )
779
+
780
+ promise.resolve(SpikeConnectionAPIv3.convertToJson(result))
781
+
782
+ } catch (e: SpikeExceptions) {
783
+ promise.reject(e.mapException(), e.message)
784
+ }
785
+ }
786
+ }
787
+
788
+ /// --- Health connect permissions ---
789
+
790
+ @ReactMethod
791
+ fun checkHealthConnectAvailability(connectionUUID: String, promise: Promise) {
792
+ scope.launch {
793
+ try {
794
+ val connection = getConnectionV3(connectionUUID) ?: return@launch promise.reject(
795
+ SpikeExceptions.SpikeException("Connection not found").mapException(),
796
+ "Connection not found (checkHealthConnectAvailability)"
797
+ )
798
+
799
+ val result = connection.checkHealthConnectAvailability()
800
+ promise.resolve(result.value)
801
+
802
+ } catch (e: SpikeExceptions) {
803
+ promise.reject(e.mapException(), e.message)
804
+ }
805
+ }
806
+ }
807
+
808
+ @ReactMethod
809
+ fun openHealthConnectInstallation(connectionUUID: String, promise: Promise) {
810
+ scope.launch {
811
+ try {
812
+ val connection = getConnectionV3(connectionUUID) ?: return@launch promise.reject(
813
+ SpikeExceptions.SpikeException("Connection not found").mapException(),
814
+ "Connection not found (openHealthConnectInstallation)"
815
+ )
816
+
817
+ connection.openHealthConnectInstallation()
818
+ promise.resolve(true)
819
+
820
+ } catch (e: SpikeExceptions) {
821
+ promise.reject(e.mapException(), e.message)
822
+ }
823
+ }
824
+ }
825
+
826
+ @ReactMethod
827
+ fun enableHealthConnectIntegration(connectionUUID: String, promise: Promise) {
828
+ scope.launch {
829
+ try {
830
+ val connection = getConnectionV3(connectionUUID) ?: return@launch promise.reject(
831
+ SpikeExceptions.SpikeException("Connection not found").mapException(),
832
+ "Connection not found (enableHealthConnectIntegration)"
833
+ )
834
+
835
+ connection.enableHealthConnectIntegration()
836
+ Log.d("SpikeSdkModule", "Health Connect integration enabled")
837
+ promise.resolve(true)
838
+ } catch (e: SpikeExceptions) {
839
+ promise.reject(e.mapException(), e.message)
840
+ }
841
+ }
842
+ }
843
+
844
+ @ReactMethod
845
+ fun disableHealthConnectIntegration(connectionUUID: String, promise: Promise) {
846
+ scope.launch {
847
+ try {
848
+ val connection = getConnectionV3(connectionUUID) ?: return@launch promise.reject(
849
+ SpikeExceptions.SpikeException("Connection not found").mapException(),
850
+ "Connection not found (enableHealthConnectIntegration)"
851
+ )
852
+
853
+ connection.disableHealthConnectIntegration()
854
+ Log.d("SpikeSdkModule", "Health Connect integration disabled")
855
+ promise.resolve(true)
856
+
857
+ } catch (e: SpikeExceptions) {
858
+ promise.reject(e.mapException(), e.message)
859
+ }
860
+ }
861
+ }
862
+
863
+ @ReactMethod
864
+ fun isHealthConnectIntegrationEnabled(connectionUUID: String, promise: Promise) {
865
+ scope.launch {
866
+ try {
867
+ val connection = getConnectionV3(connectionUUID) ?: return@launch promise.reject(
868
+ SpikeExceptions.SpikeException("Connection not found").mapException(),
869
+ "Connection not found (enableHealthConnectIntegration)"
870
+ )
871
+
872
+ val result = connection.isHealthConnectIntegrationEnabled()
873
+ Log.d("SpikeSdkModule", "Health Connect integration is " + if (result) { "enabled" } else ( "disabled" ))
874
+ promise.resolve(result)
875
+
876
+ } catch (e: SpikeExceptions) {
877
+ promise.reject(e.mapException(), e.message)
878
+ }
879
+ }
880
+ }
881
+
882
+ @ReactMethod
883
+ fun getGrantedHealthKitPermissions(connectionUUID: String, promise: Promise) {
884
+ scope.launch {
885
+ try {
886
+ val connection = getConnectionV3(connectionUUID) ?: return@launch promise.reject(
887
+ SpikeExceptions.SpikeException("Connection not found").mapException(),
888
+ "Connection not found (getGrantedHealthKitPermissions)"
889
+ )
890
+ if (!connection.isHealthConnectIntegrationEnabled()) {
891
+ return@launch promise.reject(
892
+ SpikeExceptions.SpikeException("Health Connect is disabled").mapException(),
893
+ "Health Connect should be enabled before calling getGrantedHealthKitPermissions"
894
+ )
895
+ }
896
+
897
+ val permissions = connection
898
+ .getHealthConnectPermissionManager()
899
+ .getGrantedPermissions()
900
+
901
+ val result = Arguments.createArray()
902
+ permissions.forEach {
903
+ result.pushString(it)
904
+ }
905
+
906
+ Log.w("SpikeSdkModule", "$permissions")
907
+ promise.resolve(result)
908
+
909
+ } catch (e: SpikeExceptions) {
910
+ promise.reject(e.mapException(), e.message)
911
+ }
912
+ }
913
+ }
914
+
915
+ @ReactMethod
916
+ fun getHealthConnectPermissions(
917
+ connectionUUID: String,
918
+ statisticTypes: ReadableArray,
919
+ metricTypes: ReadableArray,
920
+ activityConfigs: ReadableArray,
921
+ sleepConfigs: ReadableArray,
922
+ includeEnhancedPermissions: Boolean,
923
+ promise: Promise
924
+ ) {
925
+ scope.launch {
926
+ try {
927
+ val connection = getConnectionV3(connectionUUID) ?: return@launch promise.reject(
928
+ SpikeExceptions.SpikeException("Connection not found").mapException(),
929
+ "Connection not found (getHealthConnectPermissions)"
930
+ )
931
+ if (!connection.isHealthConnectIntegrationEnabled()) {
932
+ return@launch promise.reject(
933
+ SpikeExceptions.SpikeException("Health Connect is disabled").mapException(),
934
+ "Health Connect should be enabled before calling getHealthConnectPermissionsForStatisticTypes"
935
+ )
936
+ }
937
+ val permissionManager = connection.getHealthConnectPermissionManager()
938
+
939
+ val statTypes = statisticTypes.toArrayList().mapNotNull {
940
+ StatisticsTypeUtils.fromValue(it as String)
941
+ }.toSet()
942
+
943
+ val mTypes = metricTypes.toArrayList().mapNotNull {
944
+ MetricTypeUtils.fromValue(it as String)
945
+ }.toSet()
946
+
947
+ val aConfigs = activityConfigs.toArrayList().mapNotNull {
948
+ ActivityConfigUtils.fromValue(it as String)
949
+ }.toSet()
950
+
951
+ val sConfigs = sleepConfigs.toArrayList().mapNotNull {
952
+ SleepConfigUtils.fromValue(it as String)
953
+ }.toSet()
954
+
955
+ val permissions = permissionManager
956
+ .getPermissions(
957
+ statisticsTypes = statTypes,
958
+ metricTypes = mTypes,
959
+ activityConfigs = aConfigs,
960
+ sleepConfigs = sConfigs,
961
+ includeEnhancedPermissions = includeEnhancedPermissions
962
+ )
963
+
964
+ val result = Arguments.createArray()
965
+ permissions.forEach {
966
+ result.pushString(it)
967
+ }
968
+
969
+ // Log.w("SpikeSdkModule", "$permissions")
970
+ promise.resolve(result)
971
+
972
+ } catch (e: SpikeExceptions) {
973
+ promise.reject(e.mapException(), e.message)
974
+ }
975
+ }
976
+ }
977
+
978
+ @ReactMethod
979
+ fun revokeAllHealthConnectPermissions(connectionUUID: String, promise: Promise) {
980
+ scope.launch {
981
+ try {
982
+ val connection = getConnectionV3(connectionUUID) ?: return@launch promise.reject(
983
+ SpikeExceptions.SpikeException("Connection not found").mapException(),
984
+ "Connection not found (revokeAllHealthConnectPermissions)"
985
+ )
986
+ if (!connection.isHealthConnectIntegrationEnabled()) {
987
+ return@launch promise.reject(
988
+ SpikeExceptions.SpikeException("Health Connect is disabled").mapException(),
989
+ "Health Connect should be enabled before calling revokeAllHealthConnectPermissions"
990
+ )
991
+ }
992
+
993
+ connection
994
+ .getHealthConnectPermissionManager()
995
+ .revokeAllPermissions()
996
+
997
+ promise.resolve(true)
998
+
999
+ } catch (e: SpikeExceptions) {
1000
+ promise.reject(e.mapException(), e.message)
1001
+ }
1002
+ }
1003
+ }
1004
+
1005
+ @ReactMethod
1006
+ fun requestPermissionsFromHealthConnect(connectionUUID: String, permissions: ReadableArray, promise: Promise) {
1007
+ scope.launch {
1008
+ try {
1009
+ val connection = getConnectionV3(connectionUUID) ?: return@launch promise.reject(
1010
+ SpikeExceptions.SpikeException(
1011
+ "Connection not found"
1012
+ ).mapException(), "Connection not found"
1013
+ )
1014
+ if (!connection.isHealthConnectIntegrationEnabled()) {
1015
+ return@launch promise.reject(
1016
+ SpikeExceptions.SpikeException("Health Connect is disabled").mapException(),
1017
+ "Health Connect should be enabled before calling requestPermissionsFromHealthConnect"
1018
+ )
1019
+ }
1020
+
1021
+ val permissionManager = connection.getHealthConnectPermissionManager()
1022
+ val permissionsStrings = permissions.toArrayList().map{ it as String }.toSet()
1023
+
1024
+ if (checkIfAllPermissionsAreGranted(permissionManager, permissionsStrings)) {
1025
+ // All permissions granted, nothing to do here
1026
+ promise.resolve(true)
1027
+ return@launch
1028
+ }
1029
+
1030
+ Log.d("SpikeSdkModule", "Will ask for following Health Connect permissions: $permissions")
1031
+
1032
+ if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.TIRAMISU) {
1033
+ startHealthConnectRequest_oldAndroid(connectionUUID, permissionManager, permissionsStrings, promise)
1034
+ } else {
1035
+ startHealthConnectRequest(connectionUUID, permissionManager, permissionsStrings, promise)
1036
+ }
1037
+
1038
+ } catch (e: SpikeExceptions) {
1039
+ promise.reject(e.mapException(), e.message)
1040
+ }
1041
+ }
1042
+ }
1043
+
1044
+ private fun startHealthConnectRequest_oldAndroid(connectionUUID: String, permissionManager: HealthConnectPermissionManager, permissions: Set<String>, promise: Promise) {
1045
+ // val availability = connection.getHealthConnectAvailability()
1046
+ // && availability == HealthConnectAvailability.INSTALLED
1047
+ try {
1048
+ val intent = permissionManager.getRequestPermissionResultContract().createIntent(
1049
+ reactApplicationContext, permissions
1050
+ )
1051
+
1052
+ reactApplicationContext.currentActivity?.startActivityForResult(
1053
+ intent,
1054
+ REQUEST_CODE
1055
+ )
1056
+ promise.resolve(true)
1057
+
1058
+ } catch (e: SpikeExceptions) {
1059
+ promise.reject(e.mapException(), e.message)
1060
+ }
1061
+ }
1062
+
1063
+ private var checkPermissionsForV3: Triple<String, Set<String>, Promise>? = null
1064
+
1065
+ private fun startHealthConnectRequest(connectionUUID: String, permissionManager: HealthConnectPermissionManager, permissions: Set<String>, promise: Promise) {
1066
+ try {
1067
+ val activity = reactApplicationContext.currentActivity
1068
+ if (!(activity is ComponentActivity)) {
1069
+ promise.resolve(false)
1070
+ return
1071
+ }
1072
+ checkPermissionsForV3 = Triple(
1073
+ connectionUUID,
1074
+ permissions,
1075
+ promise
1076
+ )
1077
+ val launcher = activity.registerActivityResultLauncher(permissionManager.getRequestPermissionResultContract()) {
1078
+
1079
+ }
1080
+ launcher.launch(permissions)
1081
+
1082
+ } catch (e: SpikeExceptions) {
1083
+ promise.reject(e.mapException(), e.message)
1084
+ }
1085
+ }
1086
+
1087
+ @ReactMethod
1088
+ fun areAllPermissionsGranted(connectionUUID: String, permissions: Set<String>, promise: Promise) {
1089
+ scope.launch {
1090
+ try {
1091
+ val connection = getConnectionV3(connectionUUID) ?: return@launch promise.reject(
1092
+ SpikeExceptions.SpikeException(
1093
+ "Connection not found"
1094
+ ).mapException(), "Connection not found"
1095
+ )
1096
+ if (!connection.isHealthConnectIntegrationEnabled()) {
1097
+ return@launch promise.reject(
1098
+ SpikeExceptions.SpikeException("Health Connect is disabled").mapException(),
1099
+ "Health Connect should be enabled before calling areAllPermissionsGranted"
1100
+ )
1101
+ }
1102
+ val permissionManager = connection.getHealthConnectPermissionManager()
1103
+
1104
+ val permissionsGranted: Boolean = checkIfAllPermissionsAreGranted(permissionManager, permissions)
1105
+ promise.resolve(permissionsGranted)
1106
+
1107
+ } catch (e: SpikeExceptions) {
1108
+ promise.reject(e.mapException(), e.message)
1109
+ }
1110
+ }
1111
+ }
1112
+
1113
+ private suspend fun checkIfAllPermissionsAreGranted(permissionManager: HealthConnectPermissionManager, permissions: Set<String>): Boolean {
1114
+ return permissionManager.getGrantedPermissions().containsAll(permissions)
1115
+ }
1116
+
1117
+ /// --- Private stuff ---
1118
+
1119
+ // Do not use this directly, use `addConnection` and `getConnection` instead
1120
+ private val _connectionsV3 = mutableMapOf<String, SpikeConnectionAPIv3>()
1121
+
1122
+ private val mutexV3 = Mutex()
1123
+
1124
+ // Add new connection to the dictionary in a thread-safe manner
1125
+ private suspend fun addConnectionV3(connection: SpikeConnectionAPIv3, uuid: String) {
1126
+ mutex.withLock {
1127
+ _connectionsV3[uuid] = connection
1128
+ }
1129
+ }
1130
+
1131
+ // Synchronised read for safe multithreaded usage
1132
+ private suspend fun getConnectionV3(uuid: String): SpikeConnectionAPIv3? {
1133
+ mutex.withLock {
1134
+ return _connectionsV3[uuid]
1135
+ }
1136
+ }
1137
+
557
1138
  }
1139
+
1140
+ private fun convertIsoStringToInstant(isoString: String): Instant {
1141
+ return Instant.parse(isoString)
1142
+ }