react-native-spike-sdk 1.0.22 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +243 -185
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/spikesdk/SpikeMappers.kt +9 -3
- package/android/src/main/java/com/spikesdk/SpikeSdkModule.kt +54 -98
- package/ios/SpikeConnectionListener.swift +1 -1
- package/ios/SpikeDataTypeMapper.swift +2 -2
- package/ios/SpikeExceptionMapper.swift +2 -0
- package/ios/SpikeSdk.m +1 -24
- package/ios/SpikeSdk.swift +15 -110
- package/lib/commonjs/Spike.js +4 -39
- package/lib/commonjs/Spike.js.map +1 -1
- package/lib/commonjs/SpikeBackgroundDeliveriesLogger.js +2 -0
- package/lib/{module/SpikeWebhookConnectionListener.js.map → commonjs/SpikeBackgroundDeliveriesLogger.js.map} +1 -1
- package/lib/commonjs/SpikeConnection.js +82 -8
- package/lib/commonjs/SpikeConnection.js.map +1 -1
- package/lib/commonjs/SpikeException.js +3 -1
- package/lib/commonjs/SpikeException.js.map +1 -1
- package/lib/commonjs/index.js +9 -8
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/Spike.js +4 -35
- package/lib/module/Spike.js.map +1 -1
- package/lib/module/SpikeBackgroundDeliveriesLogger.js +2 -0
- package/lib/{commonjs/SpikeWebhookConnectionListener.js.map → module/SpikeBackgroundDeliveriesLogger.js.map} +1 -1
- package/lib/module/SpikeConnection.js +82 -8
- package/lib/module/SpikeConnection.js.map +1 -1
- package/lib/module/SpikeException.js +1 -0
- package/lib/module/SpikeException.js.map +1 -1
- package/lib/module/index.js +4 -9
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/DataModels/SpikeActivitiesStreamDataEntry.d.ts +40 -40
- package/lib/typescript/DataModels/SpikeActivitiesStreamDataEntry.d.ts.map +1 -1
- package/lib/typescript/DataModels/SpikeActivitiesSummaryDataEntry.d.ts +16 -16
- package/lib/typescript/DataModels/SpikeActivitiesSummaryDataEntry.d.ts.map +1 -1
- package/lib/typescript/DataModels/SpikeBodyDataEntry.d.ts +21 -22
- package/lib/typescript/DataModels/SpikeBodyDataEntry.d.ts.map +1 -1
- package/lib/typescript/DataModels/SpikeBreathingDataEntry.d.ts +3 -3
- package/lib/typescript/DataModels/SpikeBreathingDataEntry.d.ts.map +1 -1
- package/lib/typescript/DataModels/SpikeCaloriesDataEntry.d.ts +2 -2
- package/lib/typescript/DataModels/SpikeCaloriesDataEntry.d.ts.map +1 -1
- package/lib/typescript/DataModels/SpikeDistanceDataEntry.d.ts +2 -2
- package/lib/typescript/DataModels/SpikeDistanceDataEntry.d.ts.map +1 -1
- package/lib/typescript/DataModels/SpikeGlucoseDataEntry.d.ts +8 -8
- package/lib/typescript/DataModels/SpikeGlucoseDataEntry.d.ts.map +1 -1
- package/lib/typescript/DataModels/SpikeHeartDataEntry.d.ts +10 -10
- package/lib/typescript/DataModels/SpikeHeartDataEntry.d.ts.map +1 -1
- package/lib/typescript/DataModels/SpikeOxygenSaturationDataEntry.d.ts +2 -2
- package/lib/typescript/DataModels/SpikeOxygenSaturationDataEntry.d.ts.map +1 -1
- package/lib/typescript/DataModels/SpikeSleepDataEntry.d.ts +13 -13
- package/lib/typescript/DataModels/SpikeSleepDataEntry.d.ts.map +1 -1
- package/lib/typescript/DataModels/SpikeStepsDataEntry.d.ts +2 -2
- package/lib/typescript/DataModels/SpikeStepsDataEntry.d.ts.map +1 -1
- package/lib/typescript/Spike.d.ts +10 -8
- package/lib/typescript/Spike.d.ts.map +1 -1
- package/lib/typescript/SpikeBackgroundDeliveriesLogger.d.ts +4 -0
- package/lib/typescript/SpikeBackgroundDeliveriesLogger.d.ts.map +1 -0
- package/lib/typescript/SpikeConnection.d.ts +21 -4
- package/lib/typescript/SpikeConnection.d.ts.map +1 -1
- package/lib/typescript/SpikeException.d.ts +2 -0
- package/lib/typescript/SpikeException.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +6 -10
- package/lib/typescript/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/react-native-spike-sdk.podspec +2 -2
- package/src/DataModels/SpikeActivitiesStreamDataEntry.ts +40 -40
- package/src/DataModels/SpikeActivitiesSummaryDataEntry.ts +16 -16
- package/src/DataModels/SpikeBodyDataEntry.ts +21 -22
- package/src/DataModels/SpikeBreathingDataEntry.ts +3 -3
- package/src/DataModels/SpikeCaloriesDataEntry.ts +2 -2
- package/src/DataModels/SpikeDistanceDataEntry.ts +2 -2
- package/src/DataModels/SpikeGlucoseDataEntry.ts +8 -8
- package/src/DataModels/SpikeHeartDataEntry.ts +10 -10
- package/src/DataModels/SpikeOxygenSaturationDataEntry.ts +2 -2
- package/src/DataModels/SpikeSleepDataEntry.ts +13 -13
- package/src/DataModels/SpikeStepsDataEntry.ts +2 -2
- package/src/Spike.ts +16 -71
- package/src/SpikeBackgroundDeliveriesLogger.ts +3 -0
- package/src/SpikeConnection.ts +157 -21
- package/src/SpikeException.ts +1 -0
- package/src/index.ts +6 -13
- package/lib/commonjs/SpikeWebhookConnection.js +0 -111
- package/lib/commonjs/SpikeWebhookConnection.js.map +0 -1
- package/lib/commonjs/SpikeWebhookConnectionListener.js +0 -2
- package/lib/module/SpikeWebhookConnection.js +0 -104
- package/lib/module/SpikeWebhookConnection.js.map +0 -1
- package/lib/module/SpikeWebhookConnectionListener.js +0 -2
- package/lib/typescript/SpikeWebhookConnection.d.ts +0 -22
- package/lib/typescript/SpikeWebhookConnection.d.ts.map +0 -1
- package/lib/typescript/SpikeWebhookConnectionListener.d.ts +0 -4
- package/lib/typescript/SpikeWebhookConnectionListener.d.ts.map +0 -1
- package/src/SpikeWebhookConnection.ts +0 -173
- package/src/SpikeWebhookConnectionListener.ts +0 -3
package/android/build.gradle
CHANGED
|
@@ -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:
|
|
79
|
+
implementation 'com.spikeapi.sdk:spike-sdk:2.1.0'
|
|
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,6 +1,7 @@
|
|
|
1
1
|
package com.spikesdk
|
|
2
2
|
|
|
3
3
|
import com.spikeapi.SpikeDataTypes
|
|
4
|
+
import com.spikeapi.SpikeEnvironment
|
|
4
5
|
import com.spikeapi.SpikeExceptions
|
|
5
6
|
import com.spikeapi.healthconnect.HealthConnectAvailability
|
|
6
7
|
import com.spikeapi.model.SpikeData
|
|
@@ -14,11 +15,10 @@ fun SpikeExceptions.mapException(): String {
|
|
|
14
15
|
SpikeExceptions.SpikeConnectionIsClosedException -> "SpikeConnectionIsClosedException"
|
|
15
16
|
SpikeExceptions.SpikeInvalidCredentialsException -> "SpikeInvalidCredentialsException"
|
|
16
17
|
SpikeExceptions.SpikeInvalidDateRangeException -> "SpikeInvalidDateRangeException"
|
|
17
|
-
SpikeExceptions.
|
|
18
|
-
SpikeExceptions.SpikePackException -> "SpikePackException"
|
|
18
|
+
SpikeExceptions.SpikeInvalidCallbackUrlException -> "SpikeInvalidCallbackUrlException"
|
|
19
19
|
SpikeExceptions.SpikePermissionsNotGrantedException -> "SpikePermissionsNotGrantedException"
|
|
20
20
|
is SpikeExceptions.SpikeServerException -> "SpikeServerException"
|
|
21
|
-
|
|
21
|
+
else -> "SpikeException"
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -59,3 +59,9 @@ fun HealthConnectAvailability.toStringType(): String = when (this) {
|
|
|
59
59
|
HealthConnectAvailability.INSTALLED -> "installed"
|
|
60
60
|
HealthConnectAvailability.NOT_INSTALLED -> "notInstalled"
|
|
61
61
|
}
|
|
62
|
+
|
|
63
|
+
fun String.toSpikeEnvironment(): SpikeEnvironment = when (this) {
|
|
64
|
+
"PROD" -> SpikeEnvironment.PROD
|
|
65
|
+
"DEV" -> SpikeEnvironment.DEV
|
|
66
|
+
else -> SpikeEnvironment.PROD
|
|
67
|
+
}
|
|
@@ -8,13 +8,10 @@ import com.facebook.react.bridge.ReactMethod
|
|
|
8
8
|
import com.facebook.react.bridge.WritableMap
|
|
9
9
|
import com.facebook.react.bridge.WritableNativeMap
|
|
10
10
|
import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
11
|
-
import com.google.gson.FieldNamingPolicy
|
|
12
11
|
import com.google.gson.GsonBuilder
|
|
13
|
-
import com.google.gson.JsonDeserializer
|
|
14
12
|
import com.spikeapi.SpikeConnection
|
|
15
13
|
import com.spikeapi.SpikeExceptions
|
|
16
14
|
import com.spikeapi.SpikeLogger
|
|
17
|
-
import com.spikeapi.SpikeWebhookConnection
|
|
18
15
|
import kotlinx.coroutines.CoroutineScope
|
|
19
16
|
import kotlinx.coroutines.Dispatchers
|
|
20
17
|
import kotlinx.coroutines.SupervisorJob
|
|
@@ -45,6 +42,8 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
|
|
|
45
42
|
appId: String,
|
|
46
43
|
authToken: String,
|
|
47
44
|
customerEndUserId: String,
|
|
45
|
+
callbackUrl: String,
|
|
46
|
+
env: String,
|
|
48
47
|
useLogger: Boolean,
|
|
49
48
|
promise: Promise
|
|
50
49
|
) {
|
|
@@ -60,6 +59,8 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
|
|
|
60
59
|
authToken = authToken,
|
|
61
60
|
customerEndUserId = customerEndUserId,
|
|
62
61
|
appId = appId,
|
|
62
|
+
callbackUrl = callbackUrl,
|
|
63
|
+
env = env.toSpikeEnvironment(),
|
|
63
64
|
logger = logger,
|
|
64
65
|
)
|
|
65
66
|
promise.resolve(uuid)
|
|
@@ -118,7 +119,7 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
|
|
|
118
119
|
fun getCallbackUrl(uuid: String, promise: Promise) {
|
|
119
120
|
try {
|
|
120
121
|
val connection =
|
|
121
|
-
|
|
122
|
+
connections[uuid] ?: return promise.reject(
|
|
122
123
|
SpikeExceptions.SpikeException(
|
|
123
124
|
"Connection not found"
|
|
124
125
|
).mapException(), "Connection not found"
|
|
@@ -148,50 +149,6 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
|
|
|
148
149
|
}
|
|
149
150
|
}
|
|
150
151
|
|
|
151
|
-
@ReactMethod
|
|
152
|
-
fun pack(uuid: String, promise: Promise) {
|
|
153
|
-
scope.launch {
|
|
154
|
-
try {
|
|
155
|
-
val connection = connections[uuid] ?: return@launch promise.reject(
|
|
156
|
-
SpikeExceptions.SpikeException(
|
|
157
|
-
"Connection not found"
|
|
158
|
-
).mapException(), "Connection not found"
|
|
159
|
-
)
|
|
160
|
-
val serializedConnection = connection.pack()
|
|
161
|
-
promise.resolve(serializedConnection)
|
|
162
|
-
} catch (e: SpikeExceptions) {
|
|
163
|
-
promise.reject(e.mapException(), e.message)
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
@ReactMethod
|
|
169
|
-
fun unpackConnection(
|
|
170
|
-
uuid: String,
|
|
171
|
-
connection: String,
|
|
172
|
-
useLogger: Boolean,
|
|
173
|
-
promise: Promise
|
|
174
|
-
) {
|
|
175
|
-
scope.launch {
|
|
176
|
-
try {
|
|
177
|
-
val logger = if (useLogger) {
|
|
178
|
-
createLogger(uuid)
|
|
179
|
-
} else {
|
|
180
|
-
null
|
|
181
|
-
}
|
|
182
|
-
connections[uuid] =
|
|
183
|
-
SpikeConnection.unpackConnection(
|
|
184
|
-
context = reactApplicationContext,
|
|
185
|
-
connection = connection,
|
|
186
|
-
logger = logger
|
|
187
|
-
)
|
|
188
|
-
promise.resolve(uuid)
|
|
189
|
-
} catch (e: SpikeExceptions) {
|
|
190
|
-
promise.reject(e.mapException(), e.message)
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
152
|
@ReactMethod
|
|
196
153
|
fun extractDataInRange(
|
|
197
154
|
connectionUUID: String,
|
|
@@ -202,7 +159,12 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
|
|
|
202
159
|
) {
|
|
203
160
|
scope.launch {
|
|
204
161
|
try {
|
|
205
|
-
val
|
|
162
|
+
val connection = connections[connectionUUID] ?: return@launch promise.reject(
|
|
163
|
+
SpikeExceptions.SpikeException(
|
|
164
|
+
"Connection not found"
|
|
165
|
+
).mapException(), "Connection not found"
|
|
166
|
+
)
|
|
167
|
+
val result = connection.extractData(
|
|
206
168
|
dataType = dataType.toSpikeDataType(),
|
|
207
169
|
from = fromDateMillis.toLong().millisToOffsetDataTime(),
|
|
208
170
|
to = toDateMillis.toLong().millisToOffsetDataTime()
|
|
@@ -224,12 +186,16 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
|
|
|
224
186
|
) {
|
|
225
187
|
scope.launch {
|
|
226
188
|
try {
|
|
227
|
-
val
|
|
228
|
-
(
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
189
|
+
val connection = connections[connectionUUID] ?: return@launch promise.reject(
|
|
190
|
+
SpikeExceptions.SpikeException(
|
|
191
|
+
"Connection not found"
|
|
192
|
+
).mapException(), "Connection not found"
|
|
193
|
+
)
|
|
194
|
+
val result = connection.extractAndPostData(
|
|
195
|
+
dataType = dataType.toSpikeDataType(),
|
|
196
|
+
from = fromDateMillis.toLong().millisToOffsetDataTime(),
|
|
197
|
+
to = toDateMillis.toLong().millisToOffsetDataTime()
|
|
198
|
+
)
|
|
233
199
|
promise.resolve(gson.toJson(result))
|
|
234
200
|
} catch (e: SpikeExceptions) {
|
|
235
201
|
promise.reject(e.mapException(), e.message)
|
|
@@ -245,7 +211,12 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
|
|
|
245
211
|
) {
|
|
246
212
|
scope.launch {
|
|
247
213
|
try {
|
|
248
|
-
val
|
|
214
|
+
val connection = connections[connectionUUID] ?: return@launch promise.reject(
|
|
215
|
+
SpikeExceptions.SpikeException(
|
|
216
|
+
"Connection not found"
|
|
217
|
+
).mapException(), "Connection not found"
|
|
218
|
+
)
|
|
219
|
+
val result = connection.extractData(
|
|
249
220
|
dataType = dataType.toSpikeDataType()
|
|
250
221
|
)
|
|
251
222
|
promise.resolve(gson.toJson(result))
|
|
@@ -263,43 +234,15 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
|
|
|
263
234
|
) {
|
|
264
235
|
scope.launch {
|
|
265
236
|
try {
|
|
266
|
-
val
|
|
267
|
-
(
|
|
268
|
-
|
|
269
|
-
)
|
|
270
|
-
promise.resolve(gson.toJson(result))
|
|
271
|
-
} catch (e: SpikeExceptions) {
|
|
272
|
-
promise.reject(e.mapException(), e.message)
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
@ReactMethod
|
|
278
|
-
fun createWebhookConnection(
|
|
279
|
-
uuid: String,
|
|
280
|
-
appId: String,
|
|
281
|
-
authToken: String,
|
|
282
|
-
customerEndUserId: String,
|
|
283
|
-
callbackUrl: String,
|
|
284
|
-
useLogger: Boolean,
|
|
285
|
-
promise: Promise
|
|
286
|
-
) {
|
|
287
|
-
scope.launch {
|
|
288
|
-
try {
|
|
289
|
-
val logger = if (useLogger) {
|
|
290
|
-
createLogger(uuid)
|
|
291
|
-
} else {
|
|
292
|
-
null
|
|
293
|
-
}
|
|
294
|
-
connections[uuid] = SpikeWebhookConnection.createConnection(
|
|
295
|
-
context = reactApplicationContext,
|
|
296
|
-
authToken = authToken,
|
|
297
|
-
customerEndUserId = customerEndUserId,
|
|
298
|
-
appId = appId,
|
|
299
|
-
logger = logger,
|
|
300
|
-
callbackUrl = callbackUrl
|
|
237
|
+
val connection = connections[connectionUUID] ?: return@launch promise.reject(
|
|
238
|
+
SpikeExceptions.SpikeException(
|
|
239
|
+
"Connection not found"
|
|
240
|
+
).mapException(), "Connection not found"
|
|
301
241
|
)
|
|
302
|
-
|
|
242
|
+
val result = connection.extractAndPostData(
|
|
243
|
+
dataType = dataType.toSpikeDataType()
|
|
244
|
+
)
|
|
245
|
+
promise.resolve(gson.toJson(result))
|
|
303
246
|
} catch (e: SpikeExceptions) {
|
|
304
247
|
promise.reject(e.mapException(), e.message)
|
|
305
248
|
}
|
|
@@ -325,9 +268,13 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
|
|
|
325
268
|
fun checkPermissionsGranted(connectionUUID: String, promise: Promise) {
|
|
326
269
|
scope.launch {
|
|
327
270
|
try {
|
|
271
|
+
val connection = connections[connectionUUID] ?: return@launch promise.reject(
|
|
272
|
+
SpikeExceptions.SpikeException(
|
|
273
|
+
"Connection not found"
|
|
274
|
+
).mapException(), "Connection not found"
|
|
275
|
+
)
|
|
328
276
|
val permissionsGranted: Boolean =
|
|
329
|
-
|
|
330
|
-
?: return@launch promise.resolve(true)
|
|
277
|
+
connection.hasHealthPermissionsGranted()
|
|
331
278
|
promise.resolve(permissionsGranted)
|
|
332
279
|
} catch (e: SpikeExceptions) {
|
|
333
280
|
promise.reject(e.mapException(), e.message)
|
|
@@ -339,8 +286,12 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
|
|
|
339
286
|
fun getHealthConnectAvailability(connectionUUID: String, promise: Promise) {
|
|
340
287
|
scope.launch {
|
|
341
288
|
try {
|
|
342
|
-
val
|
|
343
|
-
|
|
289
|
+
val connection = connections[connectionUUID] ?: return@launch promise.reject(
|
|
290
|
+
SpikeExceptions.SpikeException(
|
|
291
|
+
"Connection not found"
|
|
292
|
+
).mapException(), "Connection not found"
|
|
293
|
+
)
|
|
294
|
+
val availability = connection.getHealthConnectAvailability()
|
|
344
295
|
promise.resolve(availability.toStringType())
|
|
345
296
|
} catch (e: SpikeExceptions) {
|
|
346
297
|
promise.reject(e.mapException(), e.message)
|
|
@@ -352,7 +303,12 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
|
|
|
352
303
|
fun revokeAllPermissions(connectionUUID: String, promise: Promise) {
|
|
353
304
|
scope.launch {
|
|
354
305
|
try {
|
|
355
|
-
connections[connectionUUID]
|
|
306
|
+
val connection = connections[connectionUUID] ?: return@launch promise.reject(
|
|
307
|
+
SpikeExceptions.SpikeException(
|
|
308
|
+
"Connection not found"
|
|
309
|
+
).mapException(), "Connection not found"
|
|
310
|
+
)
|
|
311
|
+
connection.revokeAllPermissions()
|
|
356
312
|
promise.resolve(true)
|
|
357
313
|
} catch (e: SpikeExceptions) {
|
|
358
314
|
promise.reject(e.mapException(), e.message)
|
|
@@ -371,7 +327,7 @@ class SpikeSdkModule(reactContext: ReactApplicationContext) :
|
|
|
371
327
|
val permissions = connection.getRequiredHealthPermissionsMetadata()
|
|
372
328
|
|
|
373
329
|
val intent = connection.requestReadAuthorization().createIntent(
|
|
374
|
-
|
|
330
|
+
reactApplicationContext, permissions
|
|
375
331
|
)
|
|
376
332
|
|
|
377
333
|
reactApplicationContext.currentActivity?.startActivityForResult(
|
|
@@ -141,7 +141,7 @@ class SpikeDataTypeMapper {
|
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
-
static func extractAndPostData(_ dataType: String, connection:
|
|
144
|
+
static func extractAndPostData(_ dataType: String, connection: SpikeConnection) async throws -> String? {
|
|
145
145
|
switch dataType {
|
|
146
146
|
case "activities_summary":
|
|
147
147
|
let value = try await connection.extractAndPostData(SpikeDataTypes.activitiesSummary)
|
|
@@ -181,7 +181,7 @@ class SpikeDataTypeMapper {
|
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
-
static func extractAndPostDataInRange(_ dataType: String, connection:
|
|
184
|
+
static func extractAndPostDataInRange(_ dataType: String, connection: SpikeConnection, from: Date, to: Date) async throws -> String? {
|
|
185
185
|
switch dataType {
|
|
186
186
|
case "activities_summary":
|
|
187
187
|
let value = try await connection.extractAndPostData(SpikeDataTypes.activitiesSummary, from: from, to: to)
|
|
@@ -23,6 +23,8 @@ class SpikeExceptionMapper {
|
|
|
23
23
|
return "SpikeServerException"
|
|
24
24
|
case is SpikeUnpackException:
|
|
25
25
|
return "SpikeUnpackException"
|
|
26
|
+
case is SpikeCallbackURLNotProvidedException:
|
|
27
|
+
return "SpikeCallbackURLNotProvidedException"
|
|
26
28
|
case is SpikeWrapperException:
|
|
27
29
|
return "SpikeException"
|
|
28
30
|
default:
|
package/ios/SpikeSdk.m
CHANGED
|
@@ -5,29 +5,12 @@
|
|
|
5
5
|
|
|
6
6
|
// MARK: Spike SDK level
|
|
7
7
|
|
|
8
|
-
RCT_EXTERN_METHOD(setEnvironment: (NSString)env
|
|
9
|
-
withResolver: (RCTPromiseResolveBlock)resolve
|
|
10
|
-
withRejecter: (RCTPromiseRejectBlock)reject)
|
|
11
|
-
|
|
12
8
|
RCT_EXTERN_METHOD(createConnection: (NSString)uuid
|
|
13
|
-
withAppId: (NSString)appId
|
|
14
|
-
withAuthToken: (NSString)authToken
|
|
15
|
-
withCustomerEndUserId: (NSString)customerEndUserId
|
|
16
|
-
withUseLogger: (BOOL)useLogger
|
|
17
|
-
withResolver: (RCTPromiseResolveBlock)resolve
|
|
18
|
-
withRejecter: (RCTPromiseRejectBlock)reject)
|
|
19
|
-
|
|
20
|
-
RCT_EXTERN_METHOD(createWebhookConnection: (NSString)uuid
|
|
21
9
|
withAppId: (NSString)appId
|
|
22
10
|
withAuthToken: (NSString)authToken
|
|
23
11
|
withCustomerEndUserId: (NSString)customerEndUserId
|
|
24
12
|
withCallbackUrl: (NSString)callbackUrl
|
|
25
|
-
|
|
26
|
-
withResolver: (RCTPromiseResolveBlock)resolve
|
|
27
|
-
withRejecter: (RCTPromiseRejectBlock)reject)
|
|
28
|
-
|
|
29
|
-
RCT_EXTERN_METHOD(unpackConnection: (NSString)uuid
|
|
30
|
-
withConnection: (NSString)connection
|
|
13
|
+
withEnv: (NSString)env
|
|
31
14
|
withUseLogger: (BOOL)useLogger
|
|
32
15
|
withResolver: (RCTPromiseResolveBlock)resolve
|
|
33
16
|
withRejecter: (RCTPromiseRejectBlock)reject)
|
|
@@ -39,8 +22,6 @@ RCT_EXTERN_METHOD(ensurePermissionsAreGranted: (NSArray<NSString>)permissions
|
|
|
39
22
|
withResolver: (RCTPromiseResolveBlock)resolve
|
|
40
23
|
withRejecter: (RCTPromiseRejectBlock)reject)
|
|
41
24
|
|
|
42
|
-
RCT_EXTERN_METHOD(initialize)
|
|
43
|
-
|
|
44
25
|
// MARK: SpikeConnection level
|
|
45
26
|
|
|
46
27
|
RCT_EXTERN_METHOD(getAppId: (NSString)connectionUUID
|
|
@@ -59,10 +40,6 @@ RCT_EXTERN_METHOD(close: (NSString)connectionUUID
|
|
|
59
40
|
withResolver: (RCTPromiseResolveBlock)resolve
|
|
60
41
|
withRejecter: (RCTPromiseRejectBlock)reject)
|
|
61
42
|
|
|
62
|
-
RCT_EXTERN_METHOD(pack: (NSString)connectionUUID
|
|
63
|
-
withResolver: (RCTPromiseResolveBlock)resolve
|
|
64
|
-
withRejecter: (RCTPromiseRejectBlock)reject)
|
|
65
|
-
|
|
66
43
|
RCT_EXTERN_METHOD(extractData: (NSString)connectionUUID
|
|
67
44
|
withDataType: (NSString)dataType
|
|
68
45
|
withResolver: (RCTPromiseResolveBlock)resolve
|
package/ios/SpikeSdk.swift
CHANGED
|
@@ -16,44 +16,33 @@ class SpikeSdk: RCTEventEmitter {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
// MARK: Spike SDK level
|
|
19
|
-
|
|
20
|
-
@objc(setEnvironment:
|
|
21
|
-
withResolver:
|
|
22
|
-
withRejecter:)
|
|
23
|
-
func setEnvironment(env: String,
|
|
24
|
-
resolve: @escaping RCTPromiseResolveBlock,
|
|
25
|
-
reject: @escaping RCTPromiseRejectBlock) {
|
|
26
|
-
switch (env) {
|
|
27
|
-
case "DEV":
|
|
28
|
-
Spike.setEnvironment(env: .DEV)
|
|
29
|
-
case "PROD":
|
|
30
|
-
Spike.setEnvironment(env: .PROD)
|
|
31
|
-
default:
|
|
32
|
-
break
|
|
33
|
-
}
|
|
34
|
-
resolve(Void())
|
|
35
|
-
}
|
|
36
|
-
|
|
19
|
+
|
|
37
20
|
@objc(createConnection:
|
|
38
21
|
withAppId:
|
|
39
22
|
withAuthToken:
|
|
40
23
|
withCustomerEndUserId:
|
|
24
|
+
withCallbackUrl:
|
|
25
|
+
withEnv:
|
|
41
26
|
withUseLogger:
|
|
42
27
|
withResolver:withRejecter:)
|
|
43
28
|
func createConnection(uuid: String,
|
|
44
29
|
appId: String,
|
|
45
30
|
authToken: String,
|
|
46
31
|
customerEndUserId: String,
|
|
32
|
+
callbackUrl: String?,
|
|
33
|
+
env: String?,
|
|
47
34
|
useLogger: Bool,
|
|
48
35
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
49
36
|
reject: @escaping RCTPromiseRejectBlock) {
|
|
50
37
|
Task {
|
|
51
38
|
do {
|
|
52
|
-
let logger = useLogger ? createLogger(connectionUUID: uuid) : nil
|
|
39
|
+
let logger = useLogger ? self.createLogger(connectionUUID: uuid) : nil
|
|
53
40
|
let spikeConnection = try await Spike.createConnection(
|
|
54
41
|
appId: appId,
|
|
55
42
|
authToken: authToken,
|
|
56
43
|
customerEndUserId: customerEndUserId,
|
|
44
|
+
callbackUrl: callbackUrl != nil ? URL(string: callbackUrl!) : nil,
|
|
45
|
+
env: env == "DEV" ? .DEV : .PROD,
|
|
57
46
|
logger: logger)
|
|
58
47
|
connections[uuid] = spikeConnection
|
|
59
48
|
resolve(Void())
|
|
@@ -63,66 +52,6 @@ class SpikeSdk: RCTEventEmitter {
|
|
|
63
52
|
}
|
|
64
53
|
}
|
|
65
54
|
|
|
66
|
-
@objc(createWebhookConnection:
|
|
67
|
-
withAppId:
|
|
68
|
-
withAuthToken:
|
|
69
|
-
withCustomerEndUserId:
|
|
70
|
-
withCallbackUrl:
|
|
71
|
-
withUseLogger:
|
|
72
|
-
withResolver:
|
|
73
|
-
withRejecter:)
|
|
74
|
-
func createWebhookConnection(uuid: String,
|
|
75
|
-
appId: String,
|
|
76
|
-
authToken: String,
|
|
77
|
-
customerEndUserId: String,
|
|
78
|
-
callbackUrl: String,
|
|
79
|
-
useLogger: Bool,
|
|
80
|
-
resolve: @escaping RCTPromiseResolveBlock,
|
|
81
|
-
reject: @escaping RCTPromiseRejectBlock) {
|
|
82
|
-
guard let url = URL(string: callbackUrl) else {
|
|
83
|
-
spikeReject(with: SpikeWrapperException(), reject: reject)
|
|
84
|
-
return
|
|
85
|
-
}
|
|
86
|
-
Task {
|
|
87
|
-
do {
|
|
88
|
-
let logger = useLogger ? createLogger(connectionUUID: uuid) : nil
|
|
89
|
-
let spikeConnection = try await Spike.createConnection(
|
|
90
|
-
appId: appId,
|
|
91
|
-
authToken: authToken,
|
|
92
|
-
customerEndUserId: customerEndUserId,
|
|
93
|
-
callbackUrl: url,
|
|
94
|
-
logger: logger)
|
|
95
|
-
connections[uuid] = spikeConnection
|
|
96
|
-
resolve(uuid)
|
|
97
|
-
} catch let error {
|
|
98
|
-
spikeReject(with: error, reject: reject)
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
@objc(unpackConnection:
|
|
104
|
-
withConnection:
|
|
105
|
-
withUseLogger:
|
|
106
|
-
withResolver:
|
|
107
|
-
withRejecter:)
|
|
108
|
-
func unpackConnection(uuid: String,
|
|
109
|
-
connection: String,
|
|
110
|
-
useLogger: Bool,
|
|
111
|
-
resolve: @escaping RCTPromiseResolveBlock,
|
|
112
|
-
reject: @escaping RCTPromiseRejectBlock) {
|
|
113
|
-
Task {
|
|
114
|
-
do {
|
|
115
|
-
let logger = useLogger ? createLogger(connectionUUID: uuid) : nil
|
|
116
|
-
let spikeConnection = try await Spike.unpackConnection(connection: connection,
|
|
117
|
-
logger: logger)
|
|
118
|
-
connections[uuid] = spikeConnection
|
|
119
|
-
resolve(uuid)
|
|
120
|
-
} catch let error {
|
|
121
|
-
spikeReject(with: error, reject: reject)
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
55
|
@objc(getBackgroundConnections:
|
|
127
56
|
withRejecter:)
|
|
128
57
|
func getBackgroundConnections(resolve: @escaping RCTPromiseResolveBlock,
|
|
@@ -160,11 +89,6 @@ class SpikeSdk: RCTEventEmitter {
|
|
|
160
89
|
}
|
|
161
90
|
}
|
|
162
91
|
|
|
163
|
-
@objc(initialize)
|
|
164
|
-
func initialize() {
|
|
165
|
-
// Spike.configure()
|
|
166
|
-
}
|
|
167
|
-
|
|
168
92
|
// MARK: SpikeConnection level
|
|
169
93
|
|
|
170
94
|
@objc(getAppId:
|
|
@@ -243,25 +167,6 @@ class SpikeSdk: RCTEventEmitter {
|
|
|
243
167
|
}
|
|
244
168
|
}
|
|
245
169
|
|
|
246
|
-
@objc(pack:
|
|
247
|
-
withResolver:
|
|
248
|
-
withRejecter:)
|
|
249
|
-
func pack(connectionUUID: String,
|
|
250
|
-
resolve: @escaping RCTPromiseResolveBlock,
|
|
251
|
-
reject: @escaping RCTPromiseRejectBlock) {
|
|
252
|
-
guard let connection = connections[connectionUUID] else {
|
|
253
|
-
spikeReject(with: SpikeWrapperException(), reject: reject)
|
|
254
|
-
return
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
do {
|
|
258
|
-
let value = try connection.pack()
|
|
259
|
-
resolve(value)
|
|
260
|
-
} catch let error {
|
|
261
|
-
spikeReject(with: error, reject: reject)
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
|
|
265
170
|
@objc(extractData:
|
|
266
171
|
withDataType:
|
|
267
172
|
withResolver:
|
|
@@ -334,7 +239,7 @@ class SpikeSdk: RCTEventEmitter {
|
|
|
334
239
|
func getCallbackUrl(connectionUUID: String,
|
|
335
240
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
336
241
|
reject: @escaping RCTPromiseRejectBlock) {
|
|
337
|
-
guard let connection = connections[connectionUUID]
|
|
242
|
+
guard let connection = connections[connectionUUID] else {
|
|
338
243
|
spikeReject(with: SpikeWrapperException(), reject: reject)
|
|
339
244
|
return
|
|
340
245
|
}
|
|
@@ -355,7 +260,7 @@ class SpikeSdk: RCTEventEmitter {
|
|
|
355
260
|
dataType: String,
|
|
356
261
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
357
262
|
reject: @escaping RCTPromiseRejectBlock) {
|
|
358
|
-
guard let connection = connections[connectionUUID]
|
|
263
|
+
guard let connection = connections[connectionUUID] else {
|
|
359
264
|
spikeReject(with: SpikeWrapperException(), reject: reject)
|
|
360
265
|
return
|
|
361
266
|
}
|
|
@@ -387,7 +292,7 @@ class SpikeSdk: RCTEventEmitter {
|
|
|
387
292
|
toDateMillis: Double,
|
|
388
293
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
389
294
|
reject: @escaping RCTPromiseRejectBlock) {
|
|
390
|
-
guard let connection = connections[connectionUUID]
|
|
295
|
+
guard let connection = connections[connectionUUID] else {
|
|
391
296
|
spikeReject(with: SpikeWrapperException(), reject: reject)
|
|
392
297
|
return
|
|
393
298
|
}
|
|
@@ -419,7 +324,7 @@ class SpikeSdk: RCTEventEmitter {
|
|
|
419
324
|
dataTypes: [String],
|
|
420
325
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
421
326
|
reject: @escaping RCTPromiseRejectBlock) {
|
|
422
|
-
guard let connection = connections[connectionUUID]
|
|
327
|
+
guard let connection = connections[connectionUUID] else {
|
|
423
328
|
spikeReject(with: SpikeWrapperException(), reject: reject)
|
|
424
329
|
return
|
|
425
330
|
}
|
|
@@ -441,7 +346,7 @@ class SpikeSdk: RCTEventEmitter {
|
|
|
441
346
|
func getBackgroundDeliveryDataTypes(connectionUUID: String,
|
|
442
347
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
443
348
|
reject: @escaping RCTPromiseRejectBlock) {
|
|
444
|
-
guard let connection = connections[connectionUUID]
|
|
349
|
+
guard let connection = connections[connectionUUID] else {
|
|
445
350
|
spikeReject(with: SpikeWrapperException(), reject: reject)
|
|
446
351
|
return
|
|
447
352
|
}
|
|
@@ -463,7 +368,7 @@ class SpikeSdk: RCTEventEmitter {
|
|
|
463
368
|
func setListener(connectionUUID: String,
|
|
464
369
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
465
370
|
reject: @escaping RCTPromiseRejectBlock) {
|
|
466
|
-
guard let connection = connections[connectionUUID]
|
|
371
|
+
guard let connection = connections[connectionUUID] else {
|
|
467
372
|
spikeReject(with: SpikeWrapperException(), reject: reject)
|
|
468
373
|
return
|
|
469
374
|
}
|
|
@@ -507,7 +412,7 @@ class SpikeSdk: RCTEventEmitter {
|
|
|
507
412
|
}
|
|
508
413
|
}
|
|
509
414
|
|
|
510
|
-
private func createListener(connectionUUID: String) ->
|
|
415
|
+
private func createListener(connectionUUID: String) -> SpikeBackgroundDeliveriesLogger {
|
|
511
416
|
return SpikeConnectionListener(connectionUUID: connectionUUID) { [weak self] connectionUUID, log in
|
|
512
417
|
let body = [
|
|
513
418
|
"connectionUUID": connectionUUID,
|
package/lib/commonjs/Spike.js
CHANGED
|
@@ -3,53 +3,23 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.getBackgroundConnections = exports.ensurePermissionsAreGranted = exports.createConnection = void 0;
|
|
7
7
|
var _reactNative = require("react-native");
|
|
8
8
|
var _SpikeConnection = require("./SpikeConnection");
|
|
9
9
|
var _SpikeException = require("./SpikeException");
|
|
10
10
|
var _SpikeSdk = require("./SpikeSdk");
|
|
11
|
-
|
|
12
|
-
const setEnvironment = async env => {
|
|
13
|
-
if (!_SpikeSdk.SpikeSdk) throw new _SpikeException.SpikeException();
|
|
14
|
-
await _SpikeSdk.SpikeSdk.setEnvironment(env);
|
|
15
|
-
};
|
|
16
|
-
exports.setEnvironment = setEnvironment;
|
|
17
|
-
const createConnection = async function (appId, authToken, customerEndUserId) {
|
|
18
|
-
let logger = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
|
11
|
+
const createConnection = async (config, logger) => {
|
|
19
12
|
if (!_SpikeSdk.SpikeSdk) throw new _SpikeException.SpikeException();
|
|
20
13
|
const connectionUUID = generateUUID();
|
|
21
14
|
const spikeConnection = new _SpikeConnection.SpikeConnection(connectionUUID, logger);
|
|
22
|
-
await _SpikeSdk.SpikeSdk.createConnection(connectionUUID, appId, authToken, customerEndUserId, !!logger);
|
|
15
|
+
await _SpikeSdk.SpikeSdk.createConnection(connectionUUID, config.appId, config.authToken, config.customerEndUserId, config.callbackUrl ?? null, config.env ?? 'PROD', !!logger);
|
|
23
16
|
return spikeConnection;
|
|
24
17
|
};
|
|
25
18
|
exports.createConnection = createConnection;
|
|
26
|
-
const createWebhookConnection = async function (appId, authToken, customerEndUserId, callbackUrl) {
|
|
27
|
-
let logger = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
|
|
28
|
-
if (!_SpikeSdk.SpikeSdk) throw new _SpikeException.SpikeException();
|
|
29
|
-
const connectionUUID = generateUUID();
|
|
30
|
-
const spikeConnection = new _SpikeWebhookConnection.SpikeWebhookConnection(connectionUUID, logger);
|
|
31
|
-
await _SpikeSdk.SpikeSdk.createWebhookConnection(connectionUUID, appId, authToken, customerEndUserId, callbackUrl, !!logger);
|
|
32
|
-
return spikeConnection;
|
|
33
|
-
};
|
|
34
|
-
exports.createWebhookConnection = createWebhookConnection;
|
|
35
|
-
const unpackConnection = async function (connection) {
|
|
36
|
-
let logger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
37
|
-
if (!_SpikeSdk.SpikeSdk) throw new _SpikeException.SpikeException();
|
|
38
|
-
const connectionUUID = generateUUID();
|
|
39
|
-
const webhookConnection = new _SpikeWebhookConnection.SpikeWebhookConnection(connectionUUID, logger);
|
|
40
|
-
await _SpikeSdk.SpikeSdk.unpackConnection(connectionUUID, connection, !!logger);
|
|
41
|
-
try {
|
|
42
|
-
await webhookConnection.getCallbackUrl();
|
|
43
|
-
return webhookConnection;
|
|
44
|
-
} catch (error) {
|
|
45
|
-
return webhookConnection;
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
exports.unpackConnection = unpackConnection;
|
|
49
19
|
const getBackgroundConnections = async () => {
|
|
50
20
|
if (!_SpikeSdk.SpikeSdk) throw new _SpikeException.SpikeException();
|
|
51
21
|
const connectionUUIDs = await _SpikeSdk.SpikeSdk.getBackgroundConnections();
|
|
52
|
-
const connections = connectionUUIDs.map(uuid => new
|
|
22
|
+
const connections = connectionUUIDs.map(uuid => new _SpikeConnection.SpikeConnection(uuid));
|
|
53
23
|
return connections;
|
|
54
24
|
};
|
|
55
25
|
exports.getBackgroundConnections = getBackgroundConnections;
|
|
@@ -59,11 +29,6 @@ const ensurePermissionsAreGranted = async permissions => {
|
|
|
59
29
|
await _SpikeSdk.SpikeSdk.ensurePermissionsAreGranted(permissions.map(permissionType => permissionType.rawValue));
|
|
60
30
|
};
|
|
61
31
|
exports.ensurePermissionsAreGranted = ensurePermissionsAreGranted;
|
|
62
|
-
const initialize = () => {
|
|
63
|
-
if (!_SpikeSdk.SpikeSdk) throw new _SpikeException.SpikeException();
|
|
64
|
-
_SpikeSdk.SpikeSdk.initialize();
|
|
65
|
-
};
|
|
66
|
-
exports.initialize = initialize;
|
|
67
32
|
function generateUUID() {
|
|
68
33
|
const S4 = function () {
|
|
69
34
|
let str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXZ';
|