hypertrack-sdk-react-native 10.0.3 → 11.0.1
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/CHANGELOG.md +54 -0
- package/CONTRIBUTING.md +1 -1
- package/README.md +2 -2
- package/android/build.gradle +5 -1
- package/android/gradle.properties +1 -1
- package/android/src/main/java/com/reactnativehypertracksdk/HyperTrackReactNativePlugin.kt +80 -115
- package/android/src/main/java/com/reactnativehypertracksdk/ReactNativeSerialization.kt +23 -3
- package/android/src/main/java/com/reactnativehypertracksdk/common/HyperTrackSdkWrapper.kt +87 -220
- package/android/src/main/java/com/reactnativehypertracksdk/common/SdkMethod.kt +11 -9
- package/android/src/main/java/com/reactnativehypertracksdk/common/Serialization.kt +216 -132
- package/android/src/main/java/com/reactnativehypertracksdk/common/{Result.kt → WrapperResult.kt} +9 -7
- package/hypertrack-sdk-react-native.podspec +1 -1
- package/ios/HyperTrackReactNativePlugin.m +13 -11
- package/ios/HyperTrackReactNativePlugin.swift +141 -114
- package/ios/common/DictionaryDecoder.swift +5 -5
- package/ios/common/HyperTrackSDKWrapper.swift +46 -80
- package/ios/common/SDKMethod.swift +13 -12
- package/ios/common/Serialization.swift +200 -245
- package/lib/commonjs/HyperTrack/HyperTrack.js +224 -124
- package/lib/commonjs/HyperTrack/HyperTrack.js.map +1 -1
- package/lib/commonjs/HyperTrack/data_types/HyperTrackError.js +13 -17
- package/lib/commonjs/HyperTrack/data_types/HyperTrackError.js.map +1 -1
- package/lib/commonjs/HyperTrack/data_types/internal/HyperTrackErrorInternal.js.map +1 -1
- package/lib/commonjs/HyperTrack/data_types/internal/Metadata.js +2 -0
- package/lib/commonjs/HyperTrack/data_types/internal/Metadata.js.map +1 -0
- package/lib/commonjs/HyperTrack/data_types/internal/Name.js +2 -0
- package/lib/commonjs/HyperTrack/data_types/internal/Name.js.map +1 -0
- package/lib/commonjs/index.js +0 -7
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/HyperTrack/HyperTrack.js +224 -124
- package/lib/module/HyperTrack/HyperTrack.js.map +1 -1
- package/lib/module/HyperTrack/data_types/HyperTrackError.js +13 -17
- package/lib/module/HyperTrack/data_types/HyperTrackError.js.map +1 -1
- package/lib/module/HyperTrack/data_types/internal/HyperTrackErrorInternal.js.map +1 -1
- package/lib/module/HyperTrack/data_types/internal/Metadata.js +2 -0
- package/lib/module/HyperTrack/data_types/internal/Metadata.js.map +1 -0
- package/lib/module/HyperTrack/data_types/internal/Name.js +2 -0
- package/lib/module/HyperTrack/data_types/internal/Name.js.map +1 -0
- package/lib/module/index.js +0 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/HyperTrack/HyperTrack.d.ts +106 -54
- package/lib/typescript/HyperTrack/data_types/HyperTrackError.d.ts +59 -17
- package/lib/typescript/HyperTrack/data_types/internal/HyperTrackErrorInternal.d.ts +1 -1
- package/lib/typescript/HyperTrack/data_types/internal/Metadata.d.ts +4 -0
- package/lib/typescript/HyperTrack/data_types/internal/Name.d.ts +7 -0
- package/lib/typescript/index.d.ts +0 -1
- package/package.json +1 -1
- package/src/HyperTrack/HyperTrack.ts +281 -161
- package/src/HyperTrack/data_types/HyperTrackError.ts +73 -18
- package/src/HyperTrack/data_types/internal/HyperTrackErrorInternal.ts +3 -3
- package/src/HyperTrack/data_types/internal/Metadata.ts +4 -0
- package/src/HyperTrack/data_types/internal/Name.ts +7 -0
- package/src/index.tsx +0 -1
- package/android/src/main/java/com/reactnativehypertracksdk/common/HyperTrackError.kt +0 -28
- package/android/src/main/java/com/reactnativehypertracksdk/common/LocationError.kt +0 -9
- package/android/src/main/java/com/reactnativehypertracksdk/common/SdkInitParams.kt +0 -44
- package/ios/common/HyperTrackError.swift +0 -20
- package/ios/common/SDKInitParams.swift +0 -13
- package/lib/commonjs/HyperTrack/data_types/SdkInitParams.js +0 -2
- package/lib/commonjs/HyperTrack/data_types/SdkInitParams.js.map +0 -1
- package/lib/commonjs/HyperTrack/data_types/internal/DeviceName.js +0 -2
- package/lib/commonjs/HyperTrack/data_types/internal/DeviceName.js.map +0 -1
- package/lib/module/HyperTrack/data_types/SdkInitParams.js +0 -2
- package/lib/module/HyperTrack/data_types/SdkInitParams.js.map +0 -1
- package/lib/module/HyperTrack/data_types/internal/DeviceName.js +0 -2
- package/lib/module/HyperTrack/data_types/internal/DeviceName.js.map +0 -1
- package/lib/typescript/HyperTrack/data_types/SdkInitParams.d.ts +0 -25
- package/lib/typescript/HyperTrack/data_types/internal/DeviceName.d.ts +0 -4
- package/src/HyperTrack/data_types/SdkInitParams.ts +0 -28
- package/src/HyperTrack/data_types/internal/DeviceName.ts +0 -4
|
@@ -1,62 +1,77 @@
|
|
|
1
1
|
import HyperTrack
|
|
2
2
|
|
|
3
|
+
struct Subscriptions {
|
|
4
|
+
let locationSubscription: HyperTrack.Cancellable
|
|
5
|
+
let isAvailableSubscription: HyperTrack.Cancellable
|
|
6
|
+
let isTrackingSubscription: HyperTrack.Cancellable
|
|
7
|
+
let errorsSubscription: HyperTrack.Cancellable
|
|
8
|
+
}
|
|
9
|
+
|
|
3
10
|
@objc(HyperTrackReactNativePlugin)
|
|
4
11
|
class HyperTrackReactNativePlugin: RCTEventEmitter {
|
|
5
|
-
|
|
6
|
-
private let
|
|
7
|
-
private let
|
|
8
|
-
private let
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
private var
|
|
12
|
-
private var
|
|
13
|
-
|
|
12
|
+
private let eventErrors = "errors"
|
|
13
|
+
private let eventIsAvailable = "isAvailable"
|
|
14
|
+
private let eventIsTracking = "isTracking"
|
|
15
|
+
private let eventLocate = "locate"
|
|
16
|
+
private let eventLocation = "location"
|
|
17
|
+
|
|
18
|
+
private var subscriptions: Subscriptions? = nil
|
|
19
|
+
private var locateSubscription: HyperTrack.Cancellable? = nil
|
|
20
|
+
|
|
14
21
|
@objc override static func requiresMainQueueSetup() -> Bool {
|
|
15
22
|
return false
|
|
16
23
|
}
|
|
17
|
-
|
|
24
|
+
|
|
18
25
|
@objc override func supportedEvents() -> [String] {
|
|
19
26
|
return [
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
27
|
+
eventErrors,
|
|
28
|
+
eventIsAvailable,
|
|
29
|
+
eventIsTracking,
|
|
30
|
+
eventLocate,
|
|
31
|
+
eventLocation,
|
|
23
32
|
]
|
|
24
33
|
}
|
|
25
|
-
|
|
34
|
+
|
|
26
35
|
@objc override func addListener(_ eventName: String) {
|
|
36
|
+
// Called when any listener is added.
|
|
27
37
|
super.addListener(eventName)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
38
|
+
/*
|
|
39
|
+
Due to the issue in RN (probably related to the fact that the SDK calls the subscription
|
|
40
|
+
callback too fast) we can't init listener in init() anymore.
|
|
41
|
+
So we init them lazily here.
|
|
42
|
+
*/
|
|
43
|
+
if subscriptions == nil {
|
|
44
|
+
subscriptions = initListeners()
|
|
45
|
+
}
|
|
46
|
+
switch eventName {
|
|
47
|
+
case eventIsTracking:
|
|
48
|
+
sendEvent(withName: eventIsTracking, body: serializeIsTracking(HyperTrack.isTracking))
|
|
49
|
+
case eventIsAvailable:
|
|
50
|
+
sendEvent(withName: eventIsAvailable, body: serializeIsAvailable(HyperTrack.isAvailable))
|
|
33
51
|
case eventErrors:
|
|
34
|
-
sendEvent(withName: eventErrors, body: serializeErrors(
|
|
52
|
+
sendEvent(withName: eventErrors, body: serializeErrors(HyperTrack.errors))
|
|
53
|
+
case eventLocation:
|
|
54
|
+
sendEvent(withName: eventLocation, body: serializeLocationResult(HyperTrack.location))
|
|
35
55
|
default:
|
|
36
56
|
return
|
|
37
57
|
}
|
|
38
58
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
@objc func initializeSdk(
|
|
59
|
+
|
|
60
|
+
@objc func addGeotag(
|
|
42
61
|
_ args: NSDictionary,
|
|
43
62
|
resolver resolve: RCTPromiseResolveBlock,
|
|
44
63
|
rejecter reject: RCTPromiseRejectBlock
|
|
45
64
|
) {
|
|
46
65
|
sendAsPromise(
|
|
47
|
-
hypertrack_sdk_react_native.
|
|
48
|
-
args as!
|
|
49
|
-
)
|
|
50
|
-
|
|
51
|
-
return result
|
|
52
|
-
}),
|
|
53
|
-
method: .initialize,
|
|
66
|
+
hypertrack_sdk_react_native.addGeotag(
|
|
67
|
+
args as! [String: Any]
|
|
68
|
+
),
|
|
69
|
+
method: .addGeotag,
|
|
54
70
|
resolve,
|
|
55
71
|
reject
|
|
56
72
|
)
|
|
57
|
-
|
|
58
73
|
}
|
|
59
|
-
|
|
74
|
+
|
|
60
75
|
@objc func getDeviceId(
|
|
61
76
|
_ resolve: RCTPromiseResolveBlock,
|
|
62
77
|
rejecter reject: RCTPromiseRejectBlock
|
|
@@ -68,35 +83,43 @@ class HyperTrackReactNativePlugin: RCTEventEmitter {
|
|
|
68
83
|
reject
|
|
69
84
|
)
|
|
70
85
|
}
|
|
71
|
-
|
|
72
|
-
@objc func
|
|
73
|
-
_
|
|
74
|
-
resolver resolve: RCTPromiseResolveBlock,
|
|
86
|
+
|
|
87
|
+
@objc func getErrors(
|
|
88
|
+
_ resolve: RCTPromiseResolveBlock,
|
|
75
89
|
rejecter reject: RCTPromiseRejectBlock
|
|
76
90
|
) {
|
|
77
91
|
sendAsPromise(
|
|
78
|
-
hypertrack_sdk_react_native.
|
|
79
|
-
method: .
|
|
92
|
+
hypertrack_sdk_react_native.getErrors(),
|
|
93
|
+
method: .getErrors,
|
|
80
94
|
resolve,
|
|
81
95
|
reject
|
|
82
96
|
)
|
|
83
97
|
}
|
|
84
|
-
|
|
85
|
-
@objc func
|
|
86
|
-
_
|
|
87
|
-
resolver resolve: RCTPromiseResolveBlock,
|
|
98
|
+
|
|
99
|
+
@objc func getIsAvailable(
|
|
100
|
+
_ resolve: RCTPromiseResolveBlock,
|
|
88
101
|
rejecter reject: RCTPromiseRejectBlock
|
|
89
102
|
) {
|
|
90
103
|
sendAsPromise(
|
|
91
|
-
hypertrack_sdk_react_native.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
104
|
+
hypertrack_sdk_react_native.getIsAvailable(),
|
|
105
|
+
method: .getIsAvailable,
|
|
106
|
+
resolve,
|
|
107
|
+
reject
|
|
108
|
+
)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
@objc func getIsTracking(
|
|
112
|
+
_ resolve: RCTPromiseResolveBlock,
|
|
113
|
+
rejecter reject: RCTPromiseRejectBlock
|
|
114
|
+
) {
|
|
115
|
+
sendAsPromise(
|
|
116
|
+
hypertrack_sdk_react_native.getIsTracking(),
|
|
117
|
+
method: .getIsTracking,
|
|
95
118
|
resolve,
|
|
96
119
|
reject
|
|
97
120
|
)
|
|
98
121
|
}
|
|
99
|
-
|
|
122
|
+
|
|
100
123
|
@objc func getLocation(
|
|
101
124
|
_ resolve: RCTPromiseResolveBlock,
|
|
102
125
|
rejecter reject: RCTPromiseRejectBlock
|
|
@@ -108,120 +131,122 @@ class HyperTrackReactNativePlugin: RCTEventEmitter {
|
|
|
108
131
|
reject
|
|
109
132
|
)
|
|
110
133
|
}
|
|
111
|
-
|
|
112
|
-
@objc func
|
|
134
|
+
|
|
135
|
+
@objc func getMetadata(
|
|
113
136
|
_ resolve: RCTPromiseResolveBlock,
|
|
114
137
|
rejecter reject: RCTPromiseRejectBlock
|
|
115
138
|
) {
|
|
116
139
|
sendAsPromise(
|
|
117
|
-
hypertrack_sdk_react_native.
|
|
118
|
-
method: .
|
|
140
|
+
hypertrack_sdk_react_native.getMetadata(),
|
|
141
|
+
method: .getMetadata,
|
|
119
142
|
resolve,
|
|
120
143
|
reject
|
|
121
144
|
)
|
|
122
145
|
}
|
|
123
|
-
|
|
124
|
-
@objc func
|
|
146
|
+
|
|
147
|
+
@objc func getName(
|
|
125
148
|
_ resolve: RCTPromiseResolveBlock,
|
|
126
149
|
rejecter reject: RCTPromiseRejectBlock
|
|
127
150
|
) {
|
|
128
151
|
sendAsPromise(
|
|
129
|
-
hypertrack_sdk_react_native.
|
|
130
|
-
method: .
|
|
152
|
+
hypertrack_sdk_react_native.getName(),
|
|
153
|
+
method: .getName,
|
|
131
154
|
resolve,
|
|
132
155
|
reject
|
|
133
156
|
)
|
|
134
157
|
}
|
|
135
|
-
|
|
136
|
-
@objc func
|
|
137
|
-
_
|
|
138
|
-
resolver resolve: RCTPromiseResolveBlock,
|
|
158
|
+
|
|
159
|
+
@objc func locate(
|
|
160
|
+
_ resolve: RCTPromiseResolveBlock,
|
|
139
161
|
rejecter reject: RCTPromiseRejectBlock
|
|
140
162
|
) {
|
|
163
|
+
if let locateSubscription = locateSubscription {
|
|
164
|
+
locateSubscription.cancel()
|
|
165
|
+
}
|
|
166
|
+
locateSubscription = HyperTrack.locate { locateResult in
|
|
167
|
+
self.sendEvent(withName: self.eventLocate, body: serializeLocateResult(locateResult))
|
|
168
|
+
}
|
|
141
169
|
sendAsPromise(
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
),
|
|
145
|
-
method: .setAvailability,
|
|
170
|
+
.success(.void),
|
|
171
|
+
method: .locate,
|
|
146
172
|
resolve,
|
|
147
173
|
reject
|
|
148
174
|
)
|
|
149
175
|
}
|
|
150
|
-
|
|
151
|
-
@objc func
|
|
152
|
-
_
|
|
176
|
+
|
|
177
|
+
@objc func setIsAvailable(
|
|
178
|
+
_ args: NSDictionary,
|
|
179
|
+
resolver resolve: RCTPromiseResolveBlock,
|
|
153
180
|
rejecter reject: RCTPromiseRejectBlock
|
|
154
181
|
) {
|
|
155
182
|
sendAsPromise(
|
|
156
|
-
hypertrack_sdk_react_native.
|
|
157
|
-
|
|
183
|
+
hypertrack_sdk_react_native.setIsAvailable(
|
|
184
|
+
args as! [String: Any]
|
|
185
|
+
),
|
|
186
|
+
method: .setIsAvailable,
|
|
158
187
|
resolve,
|
|
159
188
|
reject
|
|
160
189
|
)
|
|
161
190
|
}
|
|
162
|
-
|
|
163
|
-
@objc func
|
|
164
|
-
_
|
|
191
|
+
|
|
192
|
+
@objc func setMetadata(
|
|
193
|
+
_ args: NSDictionary,
|
|
194
|
+
resolver resolve: RCTPromiseResolveBlock,
|
|
165
195
|
rejecter reject: RCTPromiseRejectBlock
|
|
166
196
|
) {
|
|
167
197
|
sendAsPromise(
|
|
168
|
-
hypertrack_sdk_react_native.
|
|
169
|
-
|
|
198
|
+
hypertrack_sdk_react_native.setMetadata(
|
|
199
|
+
args as! [String: Any]
|
|
200
|
+
),
|
|
201
|
+
method: .setMetadata,
|
|
170
202
|
resolve,
|
|
171
203
|
reject
|
|
172
204
|
)
|
|
173
205
|
}
|
|
174
|
-
|
|
175
|
-
@objc func
|
|
206
|
+
|
|
207
|
+
@objc func setName(
|
|
176
208
|
_ args: NSDictionary,
|
|
177
209
|
resolver resolve: RCTPromiseResolveBlock,
|
|
178
210
|
rejecter reject: RCTPromiseRejectBlock
|
|
179
211
|
) {
|
|
180
212
|
sendAsPromise(
|
|
181
|
-
hypertrack_sdk_react_native.
|
|
182
|
-
|
|
183
|
-
),
|
|
184
|
-
method: .addGeotag,
|
|
213
|
+
hypertrack_sdk_react_native.setName(args as! [String: Any]),
|
|
214
|
+
method: .setName,
|
|
185
215
|
resolve,
|
|
186
216
|
reject
|
|
187
217
|
)
|
|
188
218
|
}
|
|
189
|
-
|
|
190
|
-
@objc func
|
|
191
|
-
_
|
|
219
|
+
|
|
220
|
+
@objc func setIsTracking(
|
|
221
|
+
_ args: NSDictionary,
|
|
222
|
+
resolver resolve: RCTPromiseResolveBlock,
|
|
192
223
|
rejecter reject: RCTPromiseRejectBlock
|
|
193
224
|
) {
|
|
194
225
|
sendAsPromise(
|
|
195
|
-
hypertrack_sdk_react_native.
|
|
196
|
-
|
|
226
|
+
hypertrack_sdk_react_native.setIsTracking(
|
|
227
|
+
args as! [String: Any]
|
|
228
|
+
),
|
|
229
|
+
method: .setIsTracking,
|
|
197
230
|
resolve,
|
|
198
231
|
reject
|
|
199
232
|
)
|
|
200
233
|
}
|
|
201
|
-
|
|
202
|
-
private func initListeners() {
|
|
203
|
-
|
|
204
|
-
self.
|
|
205
|
-
})
|
|
206
|
-
availabilitySubscription = sdkInstance.subscribeToAvailability(callback: { availability in
|
|
207
|
-
self.sendAvailabilityEvent(availability: availability)
|
|
208
|
-
})
|
|
209
|
-
errorsSubscription = sdkInstance.subscribeToErrors { errors in
|
|
210
|
-
self.sendErrorsEvent(errors)
|
|
234
|
+
|
|
235
|
+
private func initListeners() -> Subscriptions {
|
|
236
|
+
let errorsSubscription = HyperTrack.subscribeToErrors { errors in
|
|
237
|
+
self.sendEvent(withName: self.eventErrors, body: serializeErrors(errors))
|
|
211
238
|
}
|
|
239
|
+
let isAvailableSubscription = HyperTrack.subscribeToIsAvailable { [self] isAvailable in
|
|
240
|
+
self.sendEvent(withName: self.eventIsAvailable, body: serializeIsAvailable(isAvailable))
|
|
241
|
+
}
|
|
242
|
+
let isTrackingSubscription = HyperTrack.subscribeToIsTracking { isTracking in
|
|
243
|
+
self.sendEvent(withName: self.eventIsTracking, body: serializeIsTracking(isTracking))
|
|
244
|
+
}
|
|
245
|
+
let locationSubscription = HyperTrack.subscribeToLocation { locationResult in
|
|
246
|
+
self.sendEvent(withName: self.eventLocation, body: serializeLocationResult(locationResult))
|
|
247
|
+
}
|
|
248
|
+
return Subscriptions(locationSubscription: locationSubscription, isAvailableSubscription: isAvailableSubscription, isTrackingSubscription: isTrackingSubscription, errorsSubscription: errorsSubscription)
|
|
212
249
|
}
|
|
213
|
-
|
|
214
|
-
private func sendTrackingEvent(isTracking: Bool) {
|
|
215
|
-
sendEvent(withName: eventTracking, body: serializeIsTracking(isTracking))
|
|
216
|
-
}
|
|
217
|
-
private func sendAvailabilityEvent(availability: HyperTrack.Availability) {
|
|
218
|
-
sendEvent(withName: eventAvailability, body: serializeIsAvailable(availability))
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
private func sendErrorsEvent(_ errors: Set<HyperTrack.HyperTrackError>) {
|
|
222
|
-
sendEvent(withName: eventErrors, body: serializeErrors(errors))
|
|
223
|
-
}
|
|
224
|
-
|
|
225
250
|
}
|
|
226
251
|
|
|
227
252
|
private func sendAsPromise(
|
|
@@ -231,22 +256,24 @@ private func sendAsPromise(
|
|
|
231
256
|
_ reject: RCTPromiseRejectBlock
|
|
232
257
|
) {
|
|
233
258
|
switch result {
|
|
234
|
-
case .success(
|
|
235
|
-
switch
|
|
259
|
+
case let .success(success):
|
|
260
|
+
switch success {
|
|
236
261
|
case .void:
|
|
237
262
|
resolve(nil)
|
|
238
|
-
case .dict(
|
|
263
|
+
case let .dict(value):
|
|
264
|
+
resolve(value)
|
|
265
|
+
case let .array(value):
|
|
239
266
|
resolve(value)
|
|
240
267
|
}
|
|
241
|
-
case .failure(
|
|
242
|
-
switch
|
|
243
|
-
case .error(
|
|
268
|
+
case let .failure(failure):
|
|
269
|
+
switch failure {
|
|
270
|
+
case let .error(message):
|
|
244
271
|
reject(
|
|
245
272
|
"method_call_error",
|
|
246
273
|
"\(method.rawValue): \(message)",
|
|
247
|
-
NSError
|
|
274
|
+
NSError(domain: "com.hypertrack.sdk.reactnative.ios", code: 0, userInfo: nil)
|
|
248
275
|
)
|
|
249
|
-
case .fatalError(
|
|
276
|
+
case let .fatalError(message):
|
|
250
277
|
preconditionFailure(message)
|
|
251
278
|
}
|
|
252
279
|
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
class DictionaryDecoder {
|
|
2
2
|
private let decoder = JSONDecoder()
|
|
3
|
-
|
|
3
|
+
|
|
4
4
|
var dateDecodingStrategy: JSONDecoder.DateDecodingStrategy {
|
|
5
5
|
set { decoder.dateDecodingStrategy = newValue }
|
|
6
6
|
get { decoder.dateDecodingStrategy }
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
var dataDecodingStrategy: JSONDecoder.DataDecodingStrategy {
|
|
10
10
|
set { decoder.dataDecodingStrategy = newValue }
|
|
11
11
|
get { decoder.dataDecodingStrategy }
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
|
|
14
14
|
var nonConformingFloatDecodingStrategy: JSONDecoder.NonConformingFloatDecodingStrategy {
|
|
15
15
|
set { decoder.nonConformingFloatDecodingStrategy = newValue }
|
|
16
16
|
get { decoder.nonConformingFloatDecodingStrategy }
|
|
17
17
|
}
|
|
18
|
-
|
|
18
|
+
|
|
19
19
|
var keyDecodingStrategy: JSONDecoder.KeyDecodingStrategy {
|
|
20
20
|
set { decoder.keyDecodingStrategy = newValue }
|
|
21
21
|
get { decoder.keyDecodingStrategy }
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
func decode<T>(_ type: T.Type, from dictionary: [String: Any]) throws -> T where T: Decodable {
|
|
25
25
|
let data = try JSONSerialization.data(withJSONObject: dictionary, options: [])
|
|
26
26
|
return try decoder.decode(type, from: data)
|
|
@@ -2,7 +2,8 @@ import HyperTrack
|
|
|
2
2
|
|
|
3
3
|
enum SuccessResult {
|
|
4
4
|
case void
|
|
5
|
-
case dict(
|
|
5
|
+
case dict([String: Any])
|
|
6
|
+
case array([Any])
|
|
6
7
|
}
|
|
7
8
|
|
|
8
9
|
enum FailureResult: Error {
|
|
@@ -10,116 +11,81 @@ enum FailureResult: Error {
|
|
|
10
11
|
case error(_ message: String)
|
|
11
12
|
}
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
switch HyperTrack.makeSDK(
|
|
23
|
-
publishableKey: publishableKey,
|
|
24
|
-
automaticallyRequestPermissions: sdkInitParams.automaticallyRequestPermissions,
|
|
25
|
-
mockLocationsAllowed: sdkInitParams.allowMockLocations
|
|
26
|
-
) {
|
|
27
|
-
case let .success(hyperTrack):
|
|
28
|
-
sdkInstance = hyperTrack
|
|
29
|
-
HyperTrack.isLoggingEnabled = sdkInitParams.loggingEnabled
|
|
30
|
-
return .success(.void)
|
|
31
|
-
case let .failure(fatalError):
|
|
32
|
-
return .failure(mapFatalError(fatalError: fatalError))
|
|
14
|
+
func addGeotag(_ args: [String: Any]) -> Result<SuccessResult, FailureResult> {
|
|
15
|
+
return deserializeGeotagData(args).flatMap { geotagData in
|
|
16
|
+
if let metadata: HyperTrack.JSON.Object = toJSON(geotagData.data) {
|
|
17
|
+
if let expectedLocation = geotagData.expectedLocation {
|
|
18
|
+
let result = HyperTrack.addGeotag(metadata, expectedLocation: expectedLocation)
|
|
19
|
+
return .success(.dict(serializeLocationWithDeviationResult(result)))
|
|
20
|
+
} else {
|
|
21
|
+
let result = HyperTrack.addGeotag(metadata)
|
|
22
|
+
return .success(.dict(serializeLocationResult(result)))
|
|
33
23
|
}
|
|
34
24
|
} else {
|
|
35
|
-
return .failure(.
|
|
25
|
+
return .failure(.error("Failed to deserialize geotag metadata"))
|
|
36
26
|
}
|
|
37
|
-
} else {
|
|
38
|
-
return .failure(.error("Invalid SDK init parameters \(params)"))
|
|
39
27
|
}
|
|
40
28
|
}
|
|
41
29
|
|
|
42
30
|
func getDeviceID() -> Result<SuccessResult, FailureResult> {
|
|
43
|
-
.success(.dict(serializeDeviceID(
|
|
31
|
+
.success(.dict(serializeDeviceID(HyperTrack.deviceID)))
|
|
44
32
|
}
|
|
45
33
|
|
|
46
|
-
func
|
|
47
|
-
.success(.
|
|
34
|
+
func getErrors() -> Result<SuccessResult, FailureResult> {
|
|
35
|
+
.success(.array(serializeErrors(HyperTrack.errors)))
|
|
48
36
|
}
|
|
49
37
|
|
|
50
|
-
func
|
|
51
|
-
.success(
|
|
38
|
+
func getMetadata() -> Result<SuccessResult, FailureResult> {
|
|
39
|
+
.success(.dict(serializeMetadata(HyperTrack.metadata)))
|
|
52
40
|
}
|
|
53
41
|
|
|
54
|
-
func
|
|
55
|
-
.success(
|
|
42
|
+
func getName() -> Result<SuccessResult, FailureResult> {
|
|
43
|
+
.success(.dict(serializeName(HyperTrack.name)))
|
|
56
44
|
}
|
|
57
45
|
|
|
58
|
-
func
|
|
59
|
-
|
|
60
|
-
) -> Result<SuccessResult, FailureResult> {
|
|
61
|
-
deserializeAvailability(availability).flatMap { (isAvailable:Bool) in
|
|
62
|
-
if(isAvailable) {
|
|
63
|
-
sdkInstance.availability = .available
|
|
64
|
-
} else {
|
|
65
|
-
sdkInstance.availability = .unavailable
|
|
66
|
-
}
|
|
67
|
-
return .success(.void)
|
|
68
|
-
}
|
|
46
|
+
func getLocation() -> Result<SuccessResult, FailureResult> {
|
|
47
|
+
.success(.dict(serializeLocationResult(HyperTrack.location)))
|
|
69
48
|
}
|
|
70
49
|
|
|
71
|
-
func
|
|
72
|
-
|
|
73
|
-
.success(asVoid(sdkInstance.setDeviceName(name)))
|
|
74
|
-
})
|
|
50
|
+
func getIsAvailable() -> Result<SuccessResult, FailureResult> {
|
|
51
|
+
.success(.dict(serializeIsAvailable(HyperTrack.isAvailable)))
|
|
75
52
|
}
|
|
76
53
|
|
|
77
|
-
func
|
|
78
|
-
|
|
79
|
-
|
|
54
|
+
func setIsAvailable(_ args: [String: Any]) -> Result<SuccessResult, FailureResult> {
|
|
55
|
+
deserializeIsAvailable(args).flatMap { (isAvailable: Bool) in
|
|
56
|
+
HyperTrack.isAvailable = isAvailable
|
|
57
|
+
return .success(.void)
|
|
58
|
+
}
|
|
80
59
|
}
|
|
81
60
|
|
|
82
|
-
func
|
|
83
|
-
.success(.dict(serializeIsTracking(
|
|
61
|
+
func getIsTracking() -> Result<SuccessResult, FailureResult> {
|
|
62
|
+
.success(.dict(serializeIsTracking(HyperTrack.isTracking)))
|
|
84
63
|
}
|
|
85
64
|
|
|
86
|
-
func
|
|
87
|
-
|
|
65
|
+
func setIsTracking(_ args: [String: Any]) -> Result<SuccessResult, FailureResult> {
|
|
66
|
+
deserializeIsTracking(args).flatMap { (isTracking: Bool) in
|
|
67
|
+
HyperTrack.isTracking = isTracking
|
|
68
|
+
return .success(.void)
|
|
69
|
+
}
|
|
88
70
|
}
|
|
89
71
|
|
|
90
|
-
func
|
|
91
|
-
|
|
92
|
-
let metadata
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
return .success(.dict(serializeExpectedLocationResult(result)))
|
|
72
|
+
func setMetadata(_ args: [String: Any]) -> Result<SuccessResult, FailureResult> {
|
|
73
|
+
deserializeMetadata(args).flatMap { map in
|
|
74
|
+
if let metadata = toJSON(map) {
|
|
75
|
+
HyperTrack.metadata = metadata
|
|
76
|
+
return .success(.void)
|
|
96
77
|
} else {
|
|
97
|
-
|
|
98
|
-
return .success(.dict(serializeLocationResult(result)))
|
|
78
|
+
return .failure(.error("Failed to deserialize metadata"))
|
|
99
79
|
}
|
|
100
80
|
}
|
|
101
81
|
}
|
|
102
82
|
|
|
103
|
-
func
|
|
104
|
-
|
|
83
|
+
func setName(_ args: [String: Any]) -> Result<SuccessResult, FailureResult> {
|
|
84
|
+
deserializeName(args).flatMap { name in
|
|
85
|
+
.success(asVoid(HyperTrack.name = name))
|
|
86
|
+
}
|
|
105
87
|
}
|
|
106
88
|
|
|
107
|
-
func asVoid(_
|
|
89
|
+
func asVoid(_: Void) -> SuccessResult {
|
|
108
90
|
.void
|
|
109
91
|
}
|
|
110
|
-
|
|
111
|
-
private func mapFatalError(fatalError: HyperTrack.FatalError) -> FailureResult {
|
|
112
|
-
switch fatalError {
|
|
113
|
-
case .developmentError(.missingLocationUpdatesBackgroundModeCapability):
|
|
114
|
-
return .fatalError("missingLocationUpdatesBackgroundModeCapability")
|
|
115
|
-
case .developmentError(.runningOnSimulatorUnsupported):
|
|
116
|
-
return .fatalError("runningOnSimulatorUnsupported")
|
|
117
|
-
// typo is in the HyperTrack SDK itself, no need to fix (it will be deleted in the next major update)
|
|
118
|
-
case .productionError(.locationServicesUnavalible):
|
|
119
|
-
return .error("locationServicesUnavalible")
|
|
120
|
-
case .productionError(.motionActivityServicesUnavalible):
|
|
121
|
-
return .error("motionActivityServicesUnavalible")
|
|
122
|
-
case .productionError(.motionActivityPermissionsDenied):
|
|
123
|
-
return .fatalError("motionActivityPermissionsDenied")
|
|
124
|
-
}
|
|
125
|
-
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
enum SDKMethod: String {
|
|
2
|
-
case
|
|
3
|
-
case getDeviceID
|
|
4
|
-
case
|
|
5
|
-
case
|
|
6
|
-
case
|
|
7
|
-
case
|
|
8
|
-
case
|
|
9
|
-
case
|
|
10
|
-
case
|
|
11
|
-
case
|
|
12
|
-
case
|
|
13
|
-
case
|
|
2
|
+
case addGeotag
|
|
3
|
+
case getDeviceID
|
|
4
|
+
case getErrors
|
|
5
|
+
case getIsAvailable
|
|
6
|
+
case getIsTracking
|
|
7
|
+
case getLocation
|
|
8
|
+
case getMetadata
|
|
9
|
+
case getName
|
|
10
|
+
case locate
|
|
11
|
+
case setIsAvailable
|
|
12
|
+
case setIsTracking
|
|
13
|
+
case setMetadata
|
|
14
|
+
case setName
|
|
14
15
|
}
|