hypertrack-sdk-react-native 7.19.1 → 8.0.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.
Files changed (40) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/CONTRIBUTING.md +154 -0
  3. package/README.md +25 -16
  4. package/android/build.gradle +140 -41
  5. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  6. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  7. package/android/gradle.properties +6 -0
  8. package/android/gradlew +185 -0
  9. package/android/gradlew.bat +89 -0
  10. package/android/src/main/AndroidManifest.xml +2 -3
  11. package/android/src/main/java/com/reactnativehypertracksdk/HyperTrackModule.kt +284 -0
  12. package/android/src/main/java/com/reactnativehypertracksdk/HyperTrackSdkPackage.kt +17 -0
  13. package/hypertrack-sdk-react-native.podspec +34 -15
  14. package/ios/{RNHyperTrack/RNHyperTrack.h → HyperTrack.h} +1 -2
  15. package/ios/HyperTrack.m +384 -0
  16. package/ios/{RNHyperTrack.xcodeproj → HyperTrackSdk.xcodeproj}/project.pbxproj +70 -99
  17. package/lib/commonjs/HyperTrack/HyperTrack.js +244 -0
  18. package/lib/commonjs/HyperTrack/HyperTrack.js.map +1 -0
  19. package/lib/commonjs/index.js +52 -0
  20. package/lib/commonjs/index.js.map +1 -0
  21. package/lib/module/HyperTrack/HyperTrack.js +230 -0
  22. package/lib/module/HyperTrack/HyperTrack.js.map +1 -0
  23. package/lib/module/index.js +5 -0
  24. package/lib/module/index.js.map +1 -0
  25. package/lib/typescript/HyperTrack/HyperTrack.d.ts +161 -0
  26. package/lib/typescript/index.d.ts +4 -0
  27. package/package.json +145 -47
  28. package/src/HyperTrack/HyperTrack.ts +273 -0
  29. package/src/index.tsx +11 -0
  30. package/android/src/main/java/com/hypertrack/reactnative/androidsdk/HTSDKModule.java +0 -301
  31. package/android/src/main/java/com/hypertrack/reactnative/androidsdk/HTSDKPackage.java +0 -29
  32. package/ios/RNHyperTrack/RNHyperTrack.m +0 -312
  33. package/ios/RNHyperTrack.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  34. package/ios/RNHyperTrack.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  35. package/ios/RNHyperTrack.xcodeproj/project.xcworkspace/xcuserdata/tulushev.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  36. package/ios/RNHyperTrack.xcodeproj/xcuserdata/tulushev.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
  37. package/js/CriticalErrors.js +0 -97
  38. package/js/EventEmitter.js +0 -11
  39. package/js/HyperTrack.js +0 -130
  40. package/js/index.js +0 -13
@@ -0,0 +1,89 @@
1
+ @rem
2
+ @rem Copyright 2015 the original author or authors.
3
+ @rem
4
+ @rem Licensed under the Apache License, Version 2.0 (the "License");
5
+ @rem you may not use this file except in compliance with the License.
6
+ @rem You may obtain a copy of the License at
7
+ @rem
8
+ @rem https://www.apache.org/licenses/LICENSE-2.0
9
+ @rem
10
+ @rem Unless required by applicable law or agreed to in writing, software
11
+ @rem distributed under the License is distributed on an "AS IS" BASIS,
12
+ @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ @rem See the License for the specific language governing permissions and
14
+ @rem limitations under the License.
15
+ @rem
16
+
17
+ @if "%DEBUG%" == "" @echo off
18
+ @rem ##########################################################################
19
+ @rem
20
+ @rem Gradle startup script for Windows
21
+ @rem
22
+ @rem ##########################################################################
23
+
24
+ @rem Set local scope for the variables with windows NT shell
25
+ if "%OS%"=="Windows_NT" setlocal
26
+
27
+ set DIRNAME=%~dp0
28
+ if "%DIRNAME%" == "" set DIRNAME=.
29
+ set APP_BASE_NAME=%~n0
30
+ set APP_HOME=%DIRNAME%
31
+
32
+ @rem Resolve any "." and ".." in APP_HOME to make it shorter.
33
+ for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
34
+
35
+ @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
36
+ set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
37
+
38
+ @rem Find java.exe
39
+ if defined JAVA_HOME goto findJavaFromJavaHome
40
+
41
+ set JAVA_EXE=java.exe
42
+ %JAVA_EXE% -version >NUL 2>&1
43
+ if "%ERRORLEVEL%" == "0" goto execute
44
+
45
+ echo.
46
+ echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
47
+ echo.
48
+ echo Please set the JAVA_HOME variable in your environment to match the
49
+ echo location of your Java installation.
50
+
51
+ goto fail
52
+
53
+ :findJavaFromJavaHome
54
+ set JAVA_HOME=%JAVA_HOME:"=%
55
+ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
56
+
57
+ if exist "%JAVA_EXE%" goto execute
58
+
59
+ echo.
60
+ echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
61
+ echo.
62
+ echo Please set the JAVA_HOME variable in your environment to match the
63
+ echo location of your Java installation.
64
+
65
+ goto fail
66
+
67
+ :execute
68
+ @rem Setup the command line
69
+
70
+ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
71
+
72
+
73
+ @rem Execute Gradle
74
+ "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
75
+
76
+ :end
77
+ @rem End local scope for the variables with windows NT shell
78
+ if "%ERRORLEVEL%"=="0" goto mainEnd
79
+
80
+ :fail
81
+ rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
82
+ rem the _cmd.exe /c_ return code!
83
+ if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
84
+ exit /b 1
85
+
86
+ :mainEnd
87
+ if "%OS%"=="Windows_NT" endlocal
88
+
89
+ :omega
@@ -1,5 +1,4 @@
1
-
2
1
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
- package="com.hypertrack.reactnative.androidsdk">
4
- <application />
2
+ package="com.reactnativehypertracksdk">
3
+
5
4
  </manifest>
@@ -0,0 +1,284 @@
1
+ package com.hypertrack.reactnative.androidsdk
2
+
3
+ import android.location.Location
4
+ import android.util.Log
5
+ import com.facebook.react.bridge.*
6
+ import com.facebook.react.module.annotations.ReactModule
7
+ import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter
8
+ import com.hypertrack.sdk.*
9
+ import com.hypertrack.sdk.TrackingStateObserver.OnTrackingStateChangeListener
10
+ import java.util.*
11
+
12
+ @ReactModule(name = HTSDKModule.NAME)
13
+ class HTSDKModule(reactContext: ReactApplicationContext?) :
14
+ ReactContextBaseJavaModule(reactContext) {
15
+ var trackingStateChangeListener: OnTrackingStateChangeListener? = null
16
+ var sdkInstance: HyperTrack? = null
17
+ override fun getName(): String {
18
+ return NAME
19
+ }
20
+
21
+ @ReactMethod
22
+ fun addListener(type: String?) {
23
+ // Keep: Required for RN built in Event Emitter Calls.
24
+ }
25
+
26
+ @ReactMethod
27
+ fun removeListeners(type: Int?) {
28
+ // Keep: Required for RN built in Event Emitter Calls.
29
+ }
30
+
31
+ @ReactMethod
32
+ fun initialize(
33
+ publishableKey: String?,
34
+ startsTracking: Boolean,
35
+ automaticallyRequestPermissions: Boolean?,
36
+ promise: Promise
37
+ ) {
38
+ try {
39
+ sdkInstance = HyperTrack.getInstance(
40
+ publishableKey!!
41
+ ).backgroundTrackingRequirement(false)
42
+ subscribeToTracking()
43
+ if (startsTracking) {
44
+ sdkInstance!!.start()
45
+ }
46
+ promise.resolve(true)
47
+ } catch (exception: Exception) {
48
+ Log.e(TAG, "Hypertrack SDK initialization failed.", exception)
49
+ val error = String.format(Locale.ENGLISH, "%d", RN_ERROR_INVALID_PUBLISHABLE_KEY)
50
+ promise.reject(error, Exception("Hypertrack SDK initialization failed."))
51
+ }
52
+ }
53
+
54
+ fun subscribeToTracking() {
55
+ if (trackingStateChangeListener != null) {
56
+ sdkInstance!!.removeTrackingListener(trackingStateChangeListener)
57
+ trackingStateChangeListener = null
58
+ }
59
+ trackingStateChangeListener = object : OnTrackingStateChangeListener {
60
+ override fun onError(trackingError: TrackingError) {
61
+
62
+ val params = Arguments.createMap()
63
+ params.putInt("code", convertToRNErrorsCode(trackingError.code))
64
+ params.putString("message", trackingError.message)
65
+ reactApplicationContext
66
+ .getJSModule(RCTDeviceEventEmitter::class.java)
67
+ .emit("onTrackingErrorHyperTrack", params)
68
+ }
69
+
70
+ override fun onTrackingStart() {
71
+ reactApplicationContext
72
+ .getJSModule(RCTDeviceEventEmitter::class.java)
73
+ .emit("onTrackingStateChanged", sdkInstance!!.isTracking)
74
+ }
75
+
76
+ override fun onTrackingStop() {
77
+ reactApplicationContext
78
+ .getJSModule(RCTDeviceEventEmitter::class.java)
79
+ .emit("onTrackingStateChanged", sdkInstance!!.isTracking)
80
+ }
81
+ }
82
+ sdkInstance!!.addTrackingListener(trackingStateChangeListener)
83
+ }
84
+
85
+ @ReactMethod
86
+ fun getDeviceID(promise: Promise) {
87
+ promise.resolve(sdkInstance!!.deviceID)
88
+ }
89
+
90
+ @ReactMethod
91
+ fun isTracking(promise: Promise) {
92
+ promise.resolve(sdkInstance!!.isTracking)
93
+ }
94
+
95
+ @ReactMethod
96
+ fun startTracking() {
97
+ sdkInstance!!.start()
98
+ }
99
+
100
+ @ReactMethod
101
+ fun stopTracking() {
102
+ sdkInstance!!.stop()
103
+ }
104
+
105
+ @ReactMethod
106
+ fun syncDeviceSettings() {
107
+ sdkInstance!!.syncDeviceSettings()
108
+ }
109
+
110
+ @ReactMethod
111
+ fun addGeotag(rMap: ReadableMap, promise: Promise) {
112
+ try {
113
+ sdkInstance!!.addGeotag(rMap.toHashMap())
114
+ promise.resolve(locationResultToMap(sdkInstance!!.latestLocation))
115
+ } catch (e: Exception) {
116
+ val error = String.format(Locale.ENGLISH, "%d", RN_ERROR_GENERAL)
117
+ promise.reject(error, e)
118
+ }
119
+ }
120
+
121
+ @ReactMethod
122
+ fun isAvailable(promise: Promise) {
123
+ promise.resolve(sdkInstance!!.availability.equals(Availability.AVAILABLE))
124
+ }
125
+
126
+
127
+ @ReactMethod
128
+ fun setAvailability(availability: Boolean, promise: Promise) {
129
+ if (availability) {
130
+ sdkInstance!!.availability = Availability.AVAILABLE
131
+ } else {
132
+ sdkInstance!!.availability = Availability.UNAVAILABLE
133
+ }
134
+ promise.resolve(sdkInstance!!.availability.equals(Availability.AVAILABLE))
135
+ }
136
+
137
+ // @ReactMethod
138
+ // fun addGeotag(rMap: ReadableMap, expectedLocation: ReadableMap, promise: Promise) {
139
+ // try {
140
+ // val expected = expectedLocationFromMap(expectedLocation)
141
+ // val result = sdkInstance!!.addGeotag(rMap.toHashMap(), expected)
142
+ // if (result is GeotagResult.Success) {
143
+ // val deviceLocation = result.deviceLocation
144
+ // val map = Arguments.createMap()
145
+ // map.putDouble("latitude", deviceLocation.latitude)
146
+ // map.putDouble("longitude", deviceLocation.longitude)
147
+ // promise.resolve(map)
148
+ // } else {
149
+ // val error = String.format(Locale.ENGLISH, "%d", RN_ERROR_GENERAL)
150
+ // promise.reject(error)
151
+ // }
152
+ // } catch (e: Exception) {
153
+ // val error = String.format(Locale.ENGLISH, "%d", RN_ERROR_GENERAL)
154
+ // promise.reject(error, e)
155
+ // }
156
+ // }
157
+
158
+ private fun expectedLocationFromMap(expectedLocation: ReadableMap): Location? {
159
+ return if (!expectedLocation.hasKey(LATITUDE) || !expectedLocation.hasKey(LONGITUDE)) null else try {
160
+ val latitude = expectedLocation.getDouble(LATITUDE)
161
+ val longitude = expectedLocation.getDouble(LONGITUDE)
162
+ if (longitude > 180.0 || longitude < -180.0) return null
163
+ if (latitude > 90.0 || latitude < -90.0) return null
164
+ val expected = Location("any")
165
+ expected.latitude = latitude
166
+ expected.longitude = longitude
167
+ expected
168
+ } catch (ignored: Throwable) {
169
+ null
170
+ }
171
+ }
172
+
173
+ private fun fail(error: Int, promise: Promise) {
174
+ val map = Arguments.createMap()
175
+ map.putInt("code", error)
176
+ promise.resolve(map)
177
+ }
178
+
179
+ @ReactMethod
180
+ fun setDeviceName(name: String?, promise: Promise) {
181
+ try {
182
+ sdkInstance!!.setDeviceName(name)
183
+ promise.resolve(true)
184
+ } catch (e: Exception) {
185
+ val error = String.format(Locale.ENGLISH, "%d", RN_ERROR_GENERAL)
186
+ promise.reject(error, e)
187
+ }
188
+ }
189
+
190
+ @ReactMethod
191
+ fun setMetadata(rMap: ReadableMap, promise: Promise) {
192
+ try {
193
+ sdkInstance!!.setDeviceMetadata(rMap.toHashMap())
194
+ promise.resolve(true)
195
+ } catch (e: Exception) {
196
+ val error = String.format(Locale.ENGLISH, "%d", RN_ERROR_GENERAL)
197
+ promise.reject(error, e)
198
+ }
199
+ }
200
+
201
+ @ReactMethod
202
+ fun enableDebugLogging(enable: Boolean) {
203
+ if (enable) {
204
+ HyperTrack.enableDebugLogging()
205
+ }
206
+ }
207
+
208
+ @ReactMethod
209
+ fun enableMockLocation(enable: Boolean) {
210
+ if (enable) {
211
+ sdkInstance!!.allowMockLocations()
212
+ }
213
+ }
214
+
215
+ @ReactMethod
216
+ fun getLocation(promise: Promise) {
217
+ promise.resolve(locationResultToMap(sdkInstance!!.latestLocation))
218
+ }
219
+
220
+ @ReactMethod
221
+ fun getCurrentLocation(promise: Promise) {
222
+ sdkInstance!!.getCurrentLocation { result -> promise.resolve(locationResultToMap(result)) }
223
+ }
224
+
225
+ private fun locationResultToMap(result: Result<Location, OutageReason>): WritableMap {
226
+ val resultMap = Arguments.createMap()
227
+ if (result.isSuccess) {
228
+ val location = result.value
229
+ val locationMap = Arguments.createMap()
230
+ locationMap.putDouble(LATITUDE, location.latitude)
231
+ locationMap.putDouble(LONGITUDE, location.longitude)
232
+ resultMap.putMap(KEY_LOCATION, locationMap)
233
+ } else {
234
+ val outage = result.error
235
+ val errorMap = Arguments.createMap()
236
+ errorMap.putString(KEY_OUTAGE_CODE, getOutageName(outage))
237
+ resultMap.putMap(KEY_ERROR, errorMap)
238
+ }
239
+ return resultMap
240
+ }
241
+
242
+ private fun getOutageName(outageReason: OutageReason): String {
243
+ return when (outageReason) {
244
+ OutageReason.MISSING_LOCATION_PERMISSION -> OUTAGE_CODE_LOCATION_PERMISSIONS_DENIED
245
+ OutageReason.MISSING_ACTIVITY_PERMISSION -> OUTAGE_CODE_MOTION_ACTIVITY_PERMISSIONS_DENIED
246
+ OutageReason.LOCATION_SERVICE_DISABLED -> OUTAGE_CODE_LOCATION_SERVICES_DISABLED
247
+ OutageReason.NOT_TRACKING -> OUTAGE_CODE_NOT_RUNNING
248
+ OutageReason.START_HAS_NOT_FINISHED -> OUTAGE_CODE_STARTING
249
+ OutageReason.NO_GPS_SIGNAL, OutageReason.RESTART_REQUIRED -> OUTAGE_CODE_GPS_SIGNAL_LOST
250
+ else -> OUTAGE_CODE_GPS_SIGNAL_LOST
251
+ }
252
+ }
253
+
254
+ private fun convertToRNErrorsCode(androidSdkCode: Int): Int {
255
+ return when (androidSdkCode) {
256
+ TrackingError.INVALID_PUBLISHABLE_KEY_ERROR -> RN_ERROR_INVALID_PUBLISHABLE_KEY
257
+ TrackingError.AUTHORIZATION_ERROR -> RN_ERROR_AUTHORIZATION_FAILED
258
+ TrackingError.PERMISSION_DENIED_ERROR -> RN_ERROR_PERMISSION_DENIED
259
+ else -> RN_ERROR_GENERAL
260
+ }
261
+ }
262
+
263
+ companion object {
264
+ private const val TAG = "HTSDKModule"
265
+ private const val KEY_LOCATION = "location"
266
+ private const val KEY_ERROR = "error"
267
+ private const val KEY_OUTAGE_CODE = "code"
268
+ const val NAME = "HyperTrack"
269
+ const val LATITUDE = "latitude"
270
+ const val LONGITUDE = "longitude"
271
+ const val ACCURACY = "accuracy"
272
+ private const val OUTAGE_CODE_LOCATION_PERMISSIONS_DENIED = "location_permissions_denied"
273
+ private const val OUTAGE_CODE_LOCATION_SERVICES_DISABLED = "location_services_disabled"
274
+ private const val OUTAGE_CODE_MOTION_ACTIVITY_PERMISSIONS_DENIED =
275
+ "motion_activity_permissions_denied"
276
+ private const val OUTAGE_CODE_NOT_RUNNING = "not_running"
277
+ private const val OUTAGE_CODE_GPS_SIGNAL_LOST = "gps_signal_lost"
278
+ private const val OUTAGE_CODE_STARTING = "starting"
279
+ private const val RN_ERROR_GENERAL = 0
280
+ private const val RN_ERROR_INVALID_PUBLISHABLE_KEY = 1
281
+ private const val RN_ERROR_AUTHORIZATION_FAILED = 2
282
+ private const val RN_ERROR_PERMISSION_DENIED = 3
283
+ }
284
+ }
@@ -0,0 +1,17 @@
1
+ package com.reactnativehypertracksdk
2
+ import com.facebook.react.ReactPackage
3
+ import com.facebook.react.bridge.NativeModule
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.facebook.react.uimanager.ViewManager
6
+ import com.hypertrack.reactnative.androidsdk.HTSDKModule
7
+
8
+
9
+ class HyperTrackSdkPackage : ReactPackage {
10
+ override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
11
+ return listOf(HTSDKModule(reactContext))
12
+ }
13
+
14
+ override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
15
+ return emptyList()
16
+ }
17
+ }
@@ -1,18 +1,37 @@
1
- require 'json'
2
- package = JSON.parse(File.read(File.join(__dir__, './', 'package.json')))
1
+ require "json"
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
+ folly_version = '2021.06.28.00-v2'
5
+ folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
3
6
 
4
7
  Pod::Spec.new do |s|
5
- s.name = package['name']
6
- s.version = package['version']
7
- s.summary = package['description']
8
- s.requires_arc = true
9
- s.author = "HyperTrack Inc."
10
- s.license = package['license']
11
- s.homepage = package['homepage']
12
- s.source = { :git => 'https://github.com/hypertrack/sdk-react-native.git' }
13
- s.platform = :ios, '11.0'
14
- s.dependency 'React-Core'
15
- s.dependency 'HyperTrack/Objective-C', '4.12.4'
16
- s.source_files = "ios/*.{xcodeproj}", "ios/RNHyperTrack/*.{h,m}"
17
- s.cocoapods_version = '>= 1.10.0'
8
+ s.name = "hypertrack-sdk-react-native"
9
+ s.version = package["version"]
10
+ s.summary = package["description"]
11
+ s.homepage = package["homepage"]
12
+ s.license = package["license"]
13
+ s.authors = package["author"]
14
+
15
+ s.platforms = { :ios => "10.0" }
16
+ s.source = { :git => "https://github.com/hypertrack/sdk-react-native.git", :tag => "#{s.version}" }
17
+
18
+ s.source_files = "ios/**/*.{h,m,mm,swift}"
19
+
20
+ s.dependency "React-Core"
21
+ s.dependency 'HyperTrack/Objective-C', '4.12.4'
22
+
23
+ # Don't install the dependencies when we run `pod install` in the old architecture.
24
+ if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then
25
+ s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1"
26
+ s.pod_target_xcconfig = {
27
+ "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"",
28
+ "CLANG_CXX_LANGUAGE_STANDARD" => "c++17"
29
+ }
30
+
31
+ s.dependency "React-Codegen"
32
+ s.dependency "RCT-Folly", folly_version
33
+ s.dependency "RCTRequired"
34
+ s.dependency "RCTTypeSafety"
35
+ s.dependency "ReactCommon/turbomodule/core"
36
+ end
18
37
  end
@@ -1,8 +1,7 @@
1
1
  #import <React/RCTEventEmitter.h>
2
2
  #import <React/RCTBridgeModule.h>
3
-
4
3
  @import HyperTrack;
5
4
 
6
5
  @interface HyperTrack : RCTEventEmitter <RCTBridgeModule>
7
-
6
+
8
7
  @end