@rejourneyco/react-native 1.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 (152) hide show
  1. package/android/build.gradle.kts +135 -0
  2. package/android/consumer-rules.pro +10 -0
  3. package/android/proguard-rules.pro +1 -0
  4. package/android/src/main/AndroidManifest.xml +15 -0
  5. package/android/src/main/java/com/rejourney/RejourneyModuleImpl.kt +2981 -0
  6. package/android/src/main/java/com/rejourney/capture/ANRHandler.kt +206 -0
  7. package/android/src/main/java/com/rejourney/capture/ActivityTracker.kt +98 -0
  8. package/android/src/main/java/com/rejourney/capture/CaptureEngine.kt +1553 -0
  9. package/android/src/main/java/com/rejourney/capture/CaptureHeuristics.kt +375 -0
  10. package/android/src/main/java/com/rejourney/capture/CrashHandler.kt +153 -0
  11. package/android/src/main/java/com/rejourney/capture/MotionEvent.kt +215 -0
  12. package/android/src/main/java/com/rejourney/capture/SegmentUploader.kt +512 -0
  13. package/android/src/main/java/com/rejourney/capture/VideoEncoder.kt +773 -0
  14. package/android/src/main/java/com/rejourney/capture/ViewHierarchyScanner.kt +633 -0
  15. package/android/src/main/java/com/rejourney/capture/ViewSerializer.kt +286 -0
  16. package/android/src/main/java/com/rejourney/core/Constants.kt +117 -0
  17. package/android/src/main/java/com/rejourney/core/Logger.kt +93 -0
  18. package/android/src/main/java/com/rejourney/core/Types.kt +124 -0
  19. package/android/src/main/java/com/rejourney/lifecycle/SessionLifecycleService.kt +162 -0
  20. package/android/src/main/java/com/rejourney/network/DeviceAuthManager.kt +747 -0
  21. package/android/src/main/java/com/rejourney/network/HttpClientProvider.kt +16 -0
  22. package/android/src/main/java/com/rejourney/network/NetworkMonitor.kt +272 -0
  23. package/android/src/main/java/com/rejourney/network/UploadManager.kt +1363 -0
  24. package/android/src/main/java/com/rejourney/network/UploadWorker.kt +492 -0
  25. package/android/src/main/java/com/rejourney/privacy/PrivacyMask.kt +645 -0
  26. package/android/src/main/java/com/rejourney/touch/GestureClassifier.kt +233 -0
  27. package/android/src/main/java/com/rejourney/touch/KeyboardTracker.kt +158 -0
  28. package/android/src/main/java/com/rejourney/touch/TextInputTracker.kt +181 -0
  29. package/android/src/main/java/com/rejourney/touch/TouchInterceptor.kt +591 -0
  30. package/android/src/main/java/com/rejourney/utils/EventBuffer.kt +284 -0
  31. package/android/src/main/java/com/rejourney/utils/OEMDetector.kt +154 -0
  32. package/android/src/main/java/com/rejourney/utils/PerfTiming.kt +235 -0
  33. package/android/src/main/java/com/rejourney/utils/Telemetry.kt +297 -0
  34. package/android/src/main/java/com/rejourney/utils/WindowUtils.kt +84 -0
  35. package/android/src/newarch/java/com/rejourney/RejourneyModule.kt +187 -0
  36. package/android/src/newarch/java/com/rejourney/RejourneyPackage.kt +40 -0
  37. package/android/src/oldarch/java/com/rejourney/RejourneyModule.kt +218 -0
  38. package/android/src/oldarch/java/com/rejourney/RejourneyPackage.kt +23 -0
  39. package/ios/Capture/RJANRHandler.h +42 -0
  40. package/ios/Capture/RJANRHandler.m +328 -0
  41. package/ios/Capture/RJCaptureEngine.h +275 -0
  42. package/ios/Capture/RJCaptureEngine.m +2062 -0
  43. package/ios/Capture/RJCaptureHeuristics.h +80 -0
  44. package/ios/Capture/RJCaptureHeuristics.m +903 -0
  45. package/ios/Capture/RJCrashHandler.h +46 -0
  46. package/ios/Capture/RJCrashHandler.m +313 -0
  47. package/ios/Capture/RJMotionEvent.h +183 -0
  48. package/ios/Capture/RJMotionEvent.m +183 -0
  49. package/ios/Capture/RJPerformanceManager.h +100 -0
  50. package/ios/Capture/RJPerformanceManager.m +373 -0
  51. package/ios/Capture/RJPixelBufferDownscaler.h +42 -0
  52. package/ios/Capture/RJPixelBufferDownscaler.m +85 -0
  53. package/ios/Capture/RJSegmentUploader.h +146 -0
  54. package/ios/Capture/RJSegmentUploader.m +778 -0
  55. package/ios/Capture/RJVideoEncoder.h +247 -0
  56. package/ios/Capture/RJVideoEncoder.m +1036 -0
  57. package/ios/Capture/RJViewControllerTracker.h +73 -0
  58. package/ios/Capture/RJViewControllerTracker.m +508 -0
  59. package/ios/Capture/RJViewHierarchyScanner.h +215 -0
  60. package/ios/Capture/RJViewHierarchyScanner.m +1464 -0
  61. package/ios/Capture/RJViewSerializer.h +119 -0
  62. package/ios/Capture/RJViewSerializer.m +498 -0
  63. package/ios/Core/RJConstants.h +124 -0
  64. package/ios/Core/RJConstants.m +88 -0
  65. package/ios/Core/RJLifecycleManager.h +85 -0
  66. package/ios/Core/RJLifecycleManager.m +308 -0
  67. package/ios/Core/RJLogger.h +61 -0
  68. package/ios/Core/RJLogger.m +211 -0
  69. package/ios/Core/RJTypes.h +176 -0
  70. package/ios/Core/RJTypes.m +66 -0
  71. package/ios/Core/Rejourney.h +64 -0
  72. package/ios/Core/Rejourney.mm +2495 -0
  73. package/ios/Network/RJDeviceAuthManager.h +94 -0
  74. package/ios/Network/RJDeviceAuthManager.m +967 -0
  75. package/ios/Network/RJNetworkMonitor.h +68 -0
  76. package/ios/Network/RJNetworkMonitor.m +267 -0
  77. package/ios/Network/RJRetryManager.h +73 -0
  78. package/ios/Network/RJRetryManager.m +325 -0
  79. package/ios/Network/RJUploadManager.h +267 -0
  80. package/ios/Network/RJUploadManager.m +2296 -0
  81. package/ios/Privacy/RJPrivacyMask.h +163 -0
  82. package/ios/Privacy/RJPrivacyMask.m +922 -0
  83. package/ios/Rejourney.h +63 -0
  84. package/ios/Touch/RJGestureClassifier.h +130 -0
  85. package/ios/Touch/RJGestureClassifier.m +333 -0
  86. package/ios/Touch/RJTouchInterceptor.h +169 -0
  87. package/ios/Touch/RJTouchInterceptor.m +772 -0
  88. package/ios/Utils/RJEventBuffer.h +112 -0
  89. package/ios/Utils/RJEventBuffer.m +358 -0
  90. package/ios/Utils/RJGzipUtils.h +33 -0
  91. package/ios/Utils/RJGzipUtils.m +89 -0
  92. package/ios/Utils/RJKeychainManager.h +48 -0
  93. package/ios/Utils/RJKeychainManager.m +111 -0
  94. package/ios/Utils/RJPerfTiming.h +209 -0
  95. package/ios/Utils/RJPerfTiming.m +264 -0
  96. package/ios/Utils/RJTelemetry.h +92 -0
  97. package/ios/Utils/RJTelemetry.m +320 -0
  98. package/ios/Utils/RJWindowUtils.h +66 -0
  99. package/ios/Utils/RJWindowUtils.m +133 -0
  100. package/lib/commonjs/NativeRejourney.js +40 -0
  101. package/lib/commonjs/components/Mask.js +79 -0
  102. package/lib/commonjs/index.js +1381 -0
  103. package/lib/commonjs/sdk/autoTracking.js +1259 -0
  104. package/lib/commonjs/sdk/constants.js +151 -0
  105. package/lib/commonjs/sdk/errorTracking.js +199 -0
  106. package/lib/commonjs/sdk/index.js +50 -0
  107. package/lib/commonjs/sdk/metricsTracking.js +204 -0
  108. package/lib/commonjs/sdk/navigation.js +151 -0
  109. package/lib/commonjs/sdk/networkInterceptor.js +412 -0
  110. package/lib/commonjs/sdk/utils.js +363 -0
  111. package/lib/commonjs/types/expo-router.d.js +2 -0
  112. package/lib/commonjs/types/index.js +2 -0
  113. package/lib/module/NativeRejourney.js +38 -0
  114. package/lib/module/components/Mask.js +72 -0
  115. package/lib/module/index.js +1284 -0
  116. package/lib/module/sdk/autoTracking.js +1233 -0
  117. package/lib/module/sdk/constants.js +145 -0
  118. package/lib/module/sdk/errorTracking.js +189 -0
  119. package/lib/module/sdk/index.js +12 -0
  120. package/lib/module/sdk/metricsTracking.js +187 -0
  121. package/lib/module/sdk/navigation.js +143 -0
  122. package/lib/module/sdk/networkInterceptor.js +401 -0
  123. package/lib/module/sdk/utils.js +342 -0
  124. package/lib/module/types/expo-router.d.js +2 -0
  125. package/lib/module/types/index.js +2 -0
  126. package/lib/typescript/NativeRejourney.d.ts +147 -0
  127. package/lib/typescript/components/Mask.d.ts +39 -0
  128. package/lib/typescript/index.d.ts +117 -0
  129. package/lib/typescript/sdk/autoTracking.d.ts +204 -0
  130. package/lib/typescript/sdk/constants.d.ts +120 -0
  131. package/lib/typescript/sdk/errorTracking.d.ts +32 -0
  132. package/lib/typescript/sdk/index.d.ts +9 -0
  133. package/lib/typescript/sdk/metricsTracking.d.ts +58 -0
  134. package/lib/typescript/sdk/navigation.d.ts +33 -0
  135. package/lib/typescript/sdk/networkInterceptor.d.ts +47 -0
  136. package/lib/typescript/sdk/utils.d.ts +148 -0
  137. package/lib/typescript/types/index.d.ts +624 -0
  138. package/package.json +102 -0
  139. package/rejourney.podspec +21 -0
  140. package/src/NativeRejourney.ts +165 -0
  141. package/src/components/Mask.tsx +80 -0
  142. package/src/index.ts +1459 -0
  143. package/src/sdk/autoTracking.ts +1373 -0
  144. package/src/sdk/constants.ts +134 -0
  145. package/src/sdk/errorTracking.ts +231 -0
  146. package/src/sdk/index.ts +11 -0
  147. package/src/sdk/metricsTracking.ts +232 -0
  148. package/src/sdk/navigation.ts +157 -0
  149. package/src/sdk/networkInterceptor.ts +440 -0
  150. package/src/sdk/utils.ts +369 -0
  151. package/src/types/expo-router.d.ts +7 -0
  152. package/src/types/index.ts +739 -0
@@ -0,0 +1,16 @@
1
+ package com.rejourney.network
2
+
3
+ import okhttp3.OkHttpClient
4
+ import java.util.concurrent.TimeUnit
5
+
6
+ /**
7
+ * Central provider for OkHttpClient instances.
8
+ * SSL pinning has been removed — use the shared client below.
9
+ */
10
+ object HttpClientProvider {
11
+ val shared: OkHttpClient = OkHttpClient.Builder()
12
+ .connectTimeout(15, TimeUnit.SECONDS)
13
+ .readTimeout(30, TimeUnit.SECONDS)
14
+ .writeTimeout(30, TimeUnit.SECONDS)
15
+ .build()
16
+ }
@@ -0,0 +1,272 @@
1
+ /**
2
+ * Network state monitoring.
3
+ * Ported from iOS RJNetworkMonitor.
4
+ */
5
+ package com.rejourney.network
6
+
7
+ import android.content.Context
8
+ import android.net.ConnectivityManager
9
+ import android.net.Network
10
+ import android.net.NetworkCapabilities
11
+ import android.net.NetworkRequest
12
+ import android.os.Build
13
+ import android.telephony.TelephonyManager
14
+ import com.rejourney.core.Logger
15
+
16
+ /**
17
+ * Callback interface for network state changes.
18
+ */
19
+ interface NetworkMonitorListener {
20
+ fun onNetworkChanged(quality: NetworkQuality)
21
+ }
22
+
23
+ enum class NetworkType {
24
+ NONE,
25
+ WIFI,
26
+ CELLULAR,
27
+ WIRED,
28
+ OTHER
29
+ }
30
+
31
+ enum class CellularGeneration {
32
+ UNKNOWN,
33
+ G2,
34
+ G3,
35
+ G4,
36
+ G5
37
+ }
38
+
39
+ data class NetworkQuality(
40
+ val networkType: NetworkType = NetworkType.NONE,
41
+ val cellularGeneration: CellularGeneration = CellularGeneration.UNKNOWN,
42
+ val isConstrained: Boolean = false,
43
+ val isExpensive: Boolean = false,
44
+ val timestamp: Long = System.currentTimeMillis()
45
+ ) {
46
+ fun toMap(): Map<String, Any> {
47
+ val networkTypeString = when (networkType) {
48
+ NetworkType.WIFI -> "wifi"
49
+ NetworkType.CELLULAR -> "cellular"
50
+ NetworkType.WIRED -> "wired"
51
+ NetworkType.OTHER -> "other"
52
+ NetworkType.NONE -> "none"
53
+ }
54
+
55
+ val cellularString = when (cellularGeneration) {
56
+ CellularGeneration.G2 -> "2G"
57
+ CellularGeneration.G3 -> "3G"
58
+ CellularGeneration.G4 -> "4G"
59
+ CellularGeneration.G5 -> "5G"
60
+ CellularGeneration.UNKNOWN -> "unknown"
61
+ }
62
+
63
+ return mapOf(
64
+ "networkType" to networkTypeString,
65
+ "cellularGeneration" to cellularString,
66
+ "isConstrained" to isConstrained,
67
+ "isExpensive" to isExpensive,
68
+ "timestamp" to timestamp
69
+ )
70
+ }
71
+ }
72
+
73
+ class NetworkMonitor private constructor(private val context: Context) {
74
+
75
+ companion object {
76
+ @Volatile
77
+ private var instance: NetworkMonitor? = null
78
+
79
+ fun getInstance(context: Context): NetworkMonitor {
80
+ return instance ?: synchronized(this) {
81
+ instance ?: NetworkMonitor(context.applicationContext).also { instance = it }
82
+ }
83
+ }
84
+ }
85
+
86
+ var listener: NetworkMonitorListener? = null
87
+ private var connectivityManager: ConnectivityManager? = null
88
+ private var networkCallback: ConnectivityManager.NetworkCallback? = null
89
+ private var telephonyManager: TelephonyManager? = null
90
+ @Volatile
91
+ var currentQuality: NetworkQuality = NetworkQuality()
92
+ private set
93
+
94
+ @Volatile
95
+ var isConnected: Boolean = false
96
+ private set
97
+
98
+ @Volatile
99
+ var isWifi: Boolean = false
100
+ private set
101
+
102
+ @Volatile
103
+ var isCellular: Boolean = false
104
+ private set
105
+
106
+ fun startMonitoring() {
107
+ try {
108
+ connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
109
+ telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as? TelephonyManager
110
+
111
+ // Check initial state
112
+ updateCurrentNetworkState()
113
+ listener?.onNetworkChanged(currentQuality)
114
+
115
+ // Register for updates
116
+ networkCallback = object : ConnectivityManager.NetworkCallback() {
117
+ override fun onAvailable(network: Network) {
118
+ updateCurrentNetworkState()
119
+ listener?.onNetworkChanged(currentQuality)
120
+ Logger.debug("Network changed: ${currentQuality.toMap()}")
121
+ }
122
+
123
+ override fun onLost(network: Network) {
124
+ updateQuality(
125
+ NetworkType.NONE,
126
+ CellularGeneration.UNKNOWN,
127
+ isConstrained = false,
128
+ isExpensive = false
129
+ )
130
+ listener?.onNetworkChanged(currentQuality)
131
+ Logger.debug("Network lost")
132
+ }
133
+
134
+ override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
135
+ updateNetworkCapabilities(networkCapabilities)
136
+ listener?.onNetworkChanged(currentQuality)
137
+ }
138
+ }
139
+
140
+ val request = NetworkRequest.Builder()
141
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
142
+ .build()
143
+
144
+ connectivityManager?.registerNetworkCallback(request, networkCallback!!)
145
+ Logger.debug("Network monitoring started")
146
+ } catch (e: Exception) {
147
+ Logger.error("Failed to start network monitoring", e)
148
+ }
149
+ }
150
+
151
+ fun stopMonitoring() {
152
+ try {
153
+ networkCallback?.let { callback ->
154
+ connectivityManager?.unregisterNetworkCallback(callback)
155
+ }
156
+ networkCallback = null
157
+ Logger.debug("Network monitoring stopped")
158
+ } catch (e: Exception) {
159
+ Logger.error("Failed to stop network monitoring", e)
160
+ }
161
+ }
162
+
163
+ private fun updateCurrentNetworkState() {
164
+ try {
165
+ val activeNetwork = connectivityManager?.activeNetwork
166
+ if (activeNetwork != null) {
167
+ val capabilities = connectivityManager?.getNetworkCapabilities(activeNetwork)
168
+ if (capabilities != null) {
169
+ updateNetworkCapabilities(capabilities)
170
+ return
171
+ }
172
+ }
173
+ updateQuality(NetworkType.NONE, CellularGeneration.UNKNOWN, false, false)
174
+ } catch (e: Exception) {
175
+ Logger.error("Failed to update network state", e)
176
+ }
177
+ }
178
+
179
+ private fun updateNetworkCapabilities(capabilities: NetworkCapabilities) {
180
+ val networkType = when {
181
+ capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> NetworkType.WIFI
182
+ capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> NetworkType.CELLULAR
183
+ capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> NetworkType.WIRED
184
+ capabilities.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH) ||
185
+ capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN) -> NetworkType.OTHER
186
+ capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) -> NetworkType.OTHER
187
+ else -> NetworkType.NONE
188
+ }
189
+
190
+ val cellularGeneration = if (networkType == NetworkType.CELLULAR) {
191
+ mapCellularGeneration(telephonyManager?.dataNetworkType)
192
+ } else {
193
+ CellularGeneration.UNKNOWN
194
+ }
195
+
196
+ val temporarilyNotMetered = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
197
+ capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED)
198
+ } else {
199
+ false
200
+ }
201
+ val isExpensive = !capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) &&
202
+ !temporarilyNotMetered
203
+
204
+ val restricted = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
205
+ !capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
206
+ } else {
207
+ false
208
+ }
209
+
210
+ val backgroundRestricted = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
211
+ connectivityManager?.restrictBackgroundStatus ==
212
+ ConnectivityManager.RESTRICT_BACKGROUND_STATUS_ENABLED
213
+ } else {
214
+ false
215
+ }
216
+
217
+ updateQuality(networkType, cellularGeneration, restricted || backgroundRestricted, isExpensive)
218
+ }
219
+
220
+ fun captureNetworkQuality(): NetworkQuality = currentQuality
221
+
222
+ /**
223
+ * Check if network is suitable for uploads (connected and preferably on wifi).
224
+ */
225
+ fun isSuitableForUpload(): Boolean = isConnected
226
+
227
+ /**
228
+ * Check if network is suitable for large uploads (wifi preferred).
229
+ */
230
+ fun isSuitableForLargeUpload(): Boolean = isConnected && isWifi
231
+
232
+ private fun updateQuality(
233
+ networkType: NetworkType,
234
+ cellularGeneration: CellularGeneration,
235
+ isConstrained: Boolean,
236
+ isExpensive: Boolean
237
+ ) {
238
+ currentQuality = NetworkQuality(
239
+ networkType = networkType,
240
+ cellularGeneration = cellularGeneration,
241
+ isConstrained = isConstrained,
242
+ isExpensive = isExpensive,
243
+ timestamp = System.currentTimeMillis()
244
+ )
245
+ isConnected = networkType != NetworkType.NONE
246
+ isWifi = networkType == NetworkType.WIFI
247
+ isCellular = networkType == NetworkType.CELLULAR
248
+ }
249
+
250
+ private fun mapCellularGeneration(networkType: Int?): CellularGeneration {
251
+ return when (networkType) {
252
+ TelephonyManager.NETWORK_TYPE_GPRS,
253
+ TelephonyManager.NETWORK_TYPE_EDGE,
254
+ TelephonyManager.NETWORK_TYPE_CDMA,
255
+ TelephonyManager.NETWORK_TYPE_1xRTT,
256
+ TelephonyManager.NETWORK_TYPE_IDEN -> CellularGeneration.G2
257
+ TelephonyManager.NETWORK_TYPE_UMTS,
258
+ TelephonyManager.NETWORK_TYPE_EVDO_0,
259
+ TelephonyManager.NETWORK_TYPE_EVDO_A,
260
+ TelephonyManager.NETWORK_TYPE_HSDPA,
261
+ TelephonyManager.NETWORK_TYPE_HSUPA,
262
+ TelephonyManager.NETWORK_TYPE_HSPA,
263
+ TelephonyManager.NETWORK_TYPE_EVDO_B,
264
+ TelephonyManager.NETWORK_TYPE_EHRPD,
265
+ TelephonyManager.NETWORK_TYPE_HSPAP -> CellularGeneration.G3
266
+ TelephonyManager.NETWORK_TYPE_LTE,
267
+ TelephonyManager.NETWORK_TYPE_LTE -> CellularGeneration.G4
268
+ TelephonyManager.NETWORK_TYPE_NR -> CellularGeneration.G5
269
+ else -> CellularGeneration.UNKNOWN
270
+ }
271
+ }
272
+ }