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.
Files changed (70) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/CONTRIBUTING.md +1 -1
  3. package/README.md +2 -2
  4. package/android/build.gradle +5 -1
  5. package/android/gradle.properties +1 -1
  6. package/android/src/main/java/com/reactnativehypertracksdk/HyperTrackReactNativePlugin.kt +80 -115
  7. package/android/src/main/java/com/reactnativehypertracksdk/ReactNativeSerialization.kt +23 -3
  8. package/android/src/main/java/com/reactnativehypertracksdk/common/HyperTrackSdkWrapper.kt +87 -220
  9. package/android/src/main/java/com/reactnativehypertracksdk/common/SdkMethod.kt +11 -9
  10. package/android/src/main/java/com/reactnativehypertracksdk/common/Serialization.kt +216 -132
  11. package/android/src/main/java/com/reactnativehypertracksdk/common/{Result.kt → WrapperResult.kt} +9 -7
  12. package/hypertrack-sdk-react-native.podspec +1 -1
  13. package/ios/HyperTrackReactNativePlugin.m +13 -11
  14. package/ios/HyperTrackReactNativePlugin.swift +141 -114
  15. package/ios/common/DictionaryDecoder.swift +5 -5
  16. package/ios/common/HyperTrackSDKWrapper.swift +46 -80
  17. package/ios/common/SDKMethod.swift +13 -12
  18. package/ios/common/Serialization.swift +200 -245
  19. package/lib/commonjs/HyperTrack/HyperTrack.js +224 -124
  20. package/lib/commonjs/HyperTrack/HyperTrack.js.map +1 -1
  21. package/lib/commonjs/HyperTrack/data_types/HyperTrackError.js +13 -17
  22. package/lib/commonjs/HyperTrack/data_types/HyperTrackError.js.map +1 -1
  23. package/lib/commonjs/HyperTrack/data_types/internal/HyperTrackErrorInternal.js.map +1 -1
  24. package/lib/commonjs/HyperTrack/data_types/internal/Metadata.js +2 -0
  25. package/lib/commonjs/HyperTrack/data_types/internal/Metadata.js.map +1 -0
  26. package/lib/commonjs/HyperTrack/data_types/internal/Name.js +2 -0
  27. package/lib/commonjs/HyperTrack/data_types/internal/Name.js.map +1 -0
  28. package/lib/commonjs/index.js +0 -7
  29. package/lib/commonjs/index.js.map +1 -1
  30. package/lib/module/HyperTrack/HyperTrack.js +224 -124
  31. package/lib/module/HyperTrack/HyperTrack.js.map +1 -1
  32. package/lib/module/HyperTrack/data_types/HyperTrackError.js +13 -17
  33. package/lib/module/HyperTrack/data_types/HyperTrackError.js.map +1 -1
  34. package/lib/module/HyperTrack/data_types/internal/HyperTrackErrorInternal.js.map +1 -1
  35. package/lib/module/HyperTrack/data_types/internal/Metadata.js +2 -0
  36. package/lib/module/HyperTrack/data_types/internal/Metadata.js.map +1 -0
  37. package/lib/module/HyperTrack/data_types/internal/Name.js +2 -0
  38. package/lib/module/HyperTrack/data_types/internal/Name.js.map +1 -0
  39. package/lib/module/index.js +0 -1
  40. package/lib/module/index.js.map +1 -1
  41. package/lib/typescript/HyperTrack/HyperTrack.d.ts +106 -54
  42. package/lib/typescript/HyperTrack/data_types/HyperTrackError.d.ts +59 -17
  43. package/lib/typescript/HyperTrack/data_types/internal/HyperTrackErrorInternal.d.ts +1 -1
  44. package/lib/typescript/HyperTrack/data_types/internal/Metadata.d.ts +4 -0
  45. package/lib/typescript/HyperTrack/data_types/internal/Name.d.ts +7 -0
  46. package/lib/typescript/index.d.ts +0 -1
  47. package/package.json +1 -1
  48. package/src/HyperTrack/HyperTrack.ts +281 -161
  49. package/src/HyperTrack/data_types/HyperTrackError.ts +73 -18
  50. package/src/HyperTrack/data_types/internal/HyperTrackErrorInternal.ts +3 -3
  51. package/src/HyperTrack/data_types/internal/Metadata.ts +4 -0
  52. package/src/HyperTrack/data_types/internal/Name.ts +7 -0
  53. package/src/index.tsx +0 -1
  54. package/android/src/main/java/com/reactnativehypertracksdk/common/HyperTrackError.kt +0 -28
  55. package/android/src/main/java/com/reactnativehypertracksdk/common/LocationError.kt +0 -9
  56. package/android/src/main/java/com/reactnativehypertracksdk/common/SdkInitParams.kt +0 -44
  57. package/ios/common/HyperTrackError.swift +0 -20
  58. package/ios/common/SDKInitParams.swift +0 -13
  59. package/lib/commonjs/HyperTrack/data_types/SdkInitParams.js +0 -2
  60. package/lib/commonjs/HyperTrack/data_types/SdkInitParams.js.map +0 -1
  61. package/lib/commonjs/HyperTrack/data_types/internal/DeviceName.js +0 -2
  62. package/lib/commonjs/HyperTrack/data_types/internal/DeviceName.js.map +0 -1
  63. package/lib/module/HyperTrack/data_types/SdkInitParams.js +0 -2
  64. package/lib/module/HyperTrack/data_types/SdkInitParams.js.map +0 -1
  65. package/lib/module/HyperTrack/data_types/internal/DeviceName.js +0 -2
  66. package/lib/module/HyperTrack/data_types/internal/DeviceName.js.map +0 -1
  67. package/lib/typescript/HyperTrack/data_types/SdkInitParams.d.ts +0 -25
  68. package/lib/typescript/HyperTrack/data_types/internal/DeviceName.d.ts +0 -4
  69. package/src/HyperTrack/data_types/SdkInitParams.ts +0 -28
  70. 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 eventTracking = "onTrackingChanged"
7
- private let eventAvailability = "onAvailabilityChanged"
8
- private let eventErrors = "onError"
9
-
10
- private var isTrackingSubscription: HyperTrack.Cancellable!
11
- private var availabilitySubscription: HyperTrack.Cancellable!
12
- private var errorsSubscription: HyperTrack.Cancellable!
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
- eventTracking,
21
- eventAvailability,
22
- eventErrors
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
- switch(eventName) {
29
- case eventTracking:
30
- sendEvent(withName: eventTracking, body: serializeIsTracking(sdkInstance.isTracking))
31
- case eventAvailability:
32
- sendEvent(withName: eventAvailability, body: serializeIsAvailable(sdkInstance.availability))
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(sdkInstance.errors))
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
- /// Method name is changed from 'initialize' because RCTEventEmitter has a method with the same name
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.initializeSDK(
48
- args as! Dictionary<String, Any>
49
- ).map({ (result:SuccessResult) in
50
- initListeners()
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 setName(
73
- _ args: NSDictionary,
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.setName(args as! Dictionary<String, Any>),
79
- method: .setName,
92
+ hypertrack_sdk_react_native.getErrors(),
93
+ method: .getErrors,
80
94
  resolve,
81
95
  reject
82
96
  )
83
97
  }
84
-
85
- @objc func setMetadata(
86
- _ args: NSDictionary,
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.setMetadata(
92
- args as! Dictionary<String, Any>
93
- ),
94
- method: .setMetadata,
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 startTracking(
134
+
135
+ @objc func getMetadata(
113
136
  _ resolve: RCTPromiseResolveBlock,
114
137
  rejecter reject: RCTPromiseRejectBlock
115
138
  ) {
116
139
  sendAsPromise(
117
- hypertrack_sdk_react_native.startTracking(),
118
- method: .startTracking,
140
+ hypertrack_sdk_react_native.getMetadata(),
141
+ method: .getMetadata,
119
142
  resolve,
120
143
  reject
121
144
  )
122
145
  }
123
-
124
- @objc func stopTracking(
146
+
147
+ @objc func getName(
125
148
  _ resolve: RCTPromiseResolveBlock,
126
149
  rejecter reject: RCTPromiseRejectBlock
127
150
  ) {
128
151
  sendAsPromise(
129
- hypertrack_sdk_react_native.stopTracking(),
130
- method: .stopTracking,
152
+ hypertrack_sdk_react_native.getName(),
153
+ method: .getName,
131
154
  resolve,
132
155
  reject
133
156
  )
134
157
  }
135
-
136
- @objc func setAvailability(
137
- _ args: NSDictionary,
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
- hypertrack_sdk_react_native.setAvailability(
143
- args as! Dictionary<String, Any>
144
- ),
145
- method: .setAvailability,
170
+ .success(.void),
171
+ method: .locate,
146
172
  resolve,
147
173
  reject
148
174
  )
149
175
  }
150
-
151
- @objc func isTracking(
152
- _ resolve: RCTPromiseResolveBlock,
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.isTracking(),
157
- method: .isTracking,
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 isAvailable(
164
- _ resolve: RCTPromiseResolveBlock,
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.isAvailable(),
169
- method: .isAvailable,
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 addGeotag(
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.addGeotag(
182
- args as! Dictionary<String, Any>
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 sync(
191
- _ resolve: RCTPromiseResolveBlock,
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.sync(),
196
- method: .sync,
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
- isTrackingSubscription = sdkInstance.subscribeToIsTracking(callback: { isTracking in
204
- self.sendTrackingEvent(isTracking: isTracking)
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(let success):
235
- switch (success) {
259
+ case let .success(success):
260
+ switch success {
236
261
  case .void:
237
262
  resolve(nil)
238
- case .dict(let value):
263
+ case let .dict(value):
264
+ resolve(value)
265
+ case let .array(value):
239
266
  resolve(value)
240
267
  }
241
- case .failure(let failure):
242
- switch(failure) {
243
- case .error(let message):
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.init(domain: "com.hypertrack.sdk.reactnative.ios", code: 0, userInfo: nil)
274
+ NSError(domain: "com.hypertrack.sdk.reactnative.ios", code: 0, userInfo: nil)
248
275
  )
249
- case .fatalError(let message):
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(Dictionary<String, Any>)
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
- var sdkInstance: HyperTrack! // initialize method is guaranteed to be called (by non-native side) prior to any access to the SDK instance
14
-
15
- // method is named 'initializeSDK' to avoid conflict with React Native plugin 'initialize' method
16
- func initializeSDK(
17
- _ params: Dictionary<String, Any>
18
- ) -> Result<SuccessResult, FailureResult> {
19
- if let sdkInitParams = SDKInitParams(params) {
20
- let publishableKey = HyperTrack.PublishableKey(params["publishableKey"] as! String)
21
- if let publishableKey = publishableKey {
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(.fatalError("Invalid publishable key"))
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(sdkInstance.deviceID)))
31
+ .success(.dict(serializeDeviceID(HyperTrack.deviceID)))
44
32
  }
45
33
 
46
- func getLocation() -> Result<SuccessResult, FailureResult> {
47
- .success(.dict(serializeLocationResult(sdkInstance.location)))
34
+ func getErrors() -> Result<SuccessResult, FailureResult> {
35
+ .success(.array(serializeErrors(HyperTrack.errors)))
48
36
  }
49
37
 
50
- func startTracking() -> Result<SuccessResult, FailureResult> {
51
- .success(asVoid(sdkInstance.start()))
38
+ func getMetadata() -> Result<SuccessResult, FailureResult> {
39
+ .success(.dict(serializeMetadata(HyperTrack.metadata)))
52
40
  }
53
41
 
54
- func stopTracking() -> Result<SuccessResult, FailureResult> {
55
- .success(asVoid(sdkInstance.stop()))
42
+ func getName() -> Result<SuccessResult, FailureResult> {
43
+ .success(.dict(serializeName(HyperTrack.name)))
56
44
  }
57
45
 
58
- func setAvailability(
59
- _ availability: Dictionary<String, Any>
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 setName(_ args: Dictionary<String, Any>) -> Result<SuccessResult, FailureResult> {
72
- deserializeDeviceName(args).flatMap({ (name: String) in
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 setMetadata(_ map: Dictionary<String, Any>) -> Result<SuccessResult, FailureResult> {
78
- sdkInstance.metadata = getJSON(map)
79
- return .success(.void)
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 isTracking() -> Result<SuccessResult, FailureResult> {
83
- .success(.dict(serializeIsTracking(sdkInstance.isTracking)))
61
+ func getIsTracking() -> Result<SuccessResult, FailureResult> {
62
+ .success(.dict(serializeIsTracking(HyperTrack.isTracking)))
84
63
  }
85
64
 
86
- func isAvailable() -> Result<SuccessResult, FailureResult> {
87
- .success(.dict(serializeIsAvailable(sdkInstance.availability)))
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 addGeotag(_ args: Dictionary<String, Any>) -> Result<SuccessResult, FailureResult> {
91
- return deserializeGeotagData(args).flatMap { geotagData in
92
- let metadata: HyperTrack.JSON.Object = getJSON(geotagData.data)
93
- if let expectedLocation = geotagData.expectedLocation {
94
- let result = sdkInstance.addGeotag(metadata, expectedLocation: expectedLocation)
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
- let result = sdkInstance.addGeotag(metadata)
98
- return .success(.dict(serializeLocationResult(result)))
78
+ return .failure(.error("Failed to deserialize metadata"))
99
79
  }
100
80
  }
101
81
  }
102
82
 
103
- func sync() -> Result<SuccessResult, FailureResult> {
104
- .success(asVoid(sdkInstance.syncDeviceSettings()))
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(_ void: Void) -> SuccessResult {
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 initialize = "initialize"
3
- case getDeviceID = "getDeviceID"
4
- case getLocation = "getLocation"
5
- case startTracking = "startTracking"
6
- case stopTracking = "stopTracking"
7
- case setAvailability = "setAvailability"
8
- case setName = "setName"
9
- case setMetadata = "setMetadata"
10
- case isTracking = "isTracking"
11
- case isAvailable = "isAvailable"
12
- case addGeotag = "addGeotag"
13
- case sync = "sync"
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
  }