@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,215 @@
1
+ /**
2
+ * Motion event tracking for scroll/pan reconstruction.
3
+ * Ported from iOS RJMotionEvent.
4
+ *
5
+ * Provides full motion event data matching iOS:
6
+ * - Start/end timestamps (t0, t1)
7
+ * - Displacement (dx, dy)
8
+ * - Velocity (v0, v1)
9
+ * - Animation curve type
10
+ * - Computed properties (duration, distance, direction)
11
+ */
12
+ package com.rejourney.capture
13
+
14
+ import com.rejourney.core.Constants
15
+ import kotlin.math.atan2
16
+ import kotlin.math.sqrt
17
+
18
+ /**
19
+ * Motion curve types matching iOS RJMotionCurve.
20
+ */
21
+ object MotionCurve {
22
+ const val LINEAR = "linear"
23
+ const val EXPONENTIAL_DECAY = "exponential_decay"
24
+ const val EASE_OUT = "ease_out"
25
+ const val BOUNCE = "bounce"
26
+ const val SPRING = "spring"
27
+ }
28
+
29
+ /**
30
+ * Motion types matching iOS RJMotionType.
31
+ */
32
+ object MotionType {
33
+ const val SCROLL = "scroll"
34
+ const val PAN = "pan"
35
+ const val SWIPE = "swipe"
36
+ const val FLING = "fling"
37
+ }
38
+
39
+ /**
40
+ * Full motion event data matching iOS RJMotionEvent.
41
+ */
42
+ data class MotionEventData(
43
+ val type: String, // MotionType constant
44
+ val t0: Long, // Start timestamp (ms)
45
+ val t1: Long, // End timestamp (ms)
46
+ val dx: Float, // Delta X (dp)
47
+ val dy: Float, // Delta Y (dp)
48
+ val v0: Float, // Initial velocity
49
+ val v1: Float = 0f, // Final velocity (usually 0 for ended gestures)
50
+ val curve: String = MotionCurve.LINEAR, // Animation curve
51
+ val targetId: String? = null // Target element ID
52
+ ) {
53
+ /** Duration in milliseconds */
54
+ val duration: Long
55
+ get() = t1 - t0
56
+
57
+ /** Total distance traveled (dp) */
58
+ val distance: Float
59
+ get() = sqrt(dx * dx + dy * dy)
60
+
61
+ /** Average velocity (dp/s) */
62
+ val averageVelocity: Float
63
+ get() = if (duration > 0) distance / (duration / 1000f) else 0f
64
+
65
+ /** Direction in radians */
66
+ val direction: Float
67
+ get() = atan2(dy, dx)
68
+
69
+ /** Convert to dictionary matching iOS toDictionary format */
70
+ fun toDictionary(): Map<String, Any?> = mapOf(
71
+ "type" to type,
72
+ "t0" to t0,
73
+ "t1" to t1,
74
+ "dx" to dx,
75
+ "dy" to dy,
76
+ "v0" to v0,
77
+ "v1" to v1,
78
+ "curve" to curve,
79
+ "duration" to duration,
80
+ "distance" to distance,
81
+ "targetId" to targetId
82
+ )
83
+ }
84
+
85
+ /**
86
+ * Tracks motion events and calculates velocities.
87
+ * Used for scroll event tracking and threshold-based emission.
88
+ */
89
+ class MotionTracker {
90
+ private var lastOffsetX: Float = 0f
91
+ private var lastOffsetY: Float = 0f
92
+ private var lastTimestamp: Long = 0
93
+ private var accumulatedScrollDistance: Float = 0f
94
+
95
+ // Start position for motion event creation
96
+ private var scrollStartX: Float = 0f
97
+ private var scrollStartY: Float = 0f
98
+ private var scrollStartTime: Long = 0
99
+ private var isScrolling: Boolean = false
100
+
101
+ /**
102
+ * Record a scroll offset and compute velocity.
103
+ * @return MotionEventData if threshold exceeded, null otherwise
104
+ */
105
+ fun recordScrollOffset(offsetX: Float = 0f, offsetY: Float): MotionEventData? {
106
+ val now = System.currentTimeMillis()
107
+ val deltaTime = (now - lastTimestamp) / 1000f
108
+
109
+ if (lastTimestamp == 0L) {
110
+ lastOffsetX = offsetX
111
+ lastOffsetY = offsetY
112
+ lastTimestamp = now
113
+ scrollStartX = offsetX
114
+ scrollStartY = offsetY
115
+ scrollStartTime = now
116
+ isScrolling = true
117
+ return null
118
+ }
119
+
120
+ val deltaX = offsetX - lastOffsetX
121
+ val deltaY = offsetY - lastOffsetY
122
+ val distance = sqrt(deltaX * deltaX + deltaY * deltaY)
123
+ accumulatedScrollDistance += distance
124
+
125
+ // Check if we should emit an event
126
+ if (accumulatedScrollDistance >= Constants.DEFAULT_SCROLL_THRESHOLD) {
127
+ val velocityX = if (deltaTime > 0) deltaX / deltaTime else 0f
128
+ val velocityY = if (deltaTime > 0) deltaY / deltaTime else 0f
129
+ val velocity = sqrt(velocityX * velocityX + velocityY * velocityY)
130
+
131
+ // Determine scroll direction for type
132
+ val scrollType = when {
133
+ kotlin.math.abs(deltaY) > kotlin.math.abs(deltaX) ->
134
+ if (deltaY > 0) "scroll_down" else "scroll_up"
135
+ else ->
136
+ if (deltaX > 0) "scroll_right" else "scroll_left"
137
+ }
138
+
139
+ val event = MotionEventData(
140
+ type = scrollType,
141
+ t0 = scrollStartTime,
142
+ t1 = now,
143
+ dx = offsetX - scrollStartX,
144
+ dy = offsetY - scrollStartY,
145
+ v0 = velocity,
146
+ v1 = 0f,
147
+ curve = MotionCurve.EXPONENTIAL_DECAY
148
+ )
149
+
150
+ accumulatedScrollDistance = 0f
151
+ lastOffsetX = offsetX
152
+ lastOffsetY = offsetY
153
+ lastTimestamp = now
154
+ scrollStartX = offsetX
155
+ scrollStartY = offsetY
156
+ scrollStartTime = now
157
+
158
+ return event
159
+ }
160
+
161
+ lastOffsetX = offsetX
162
+ lastOffsetY = offsetY
163
+ lastTimestamp = now
164
+ return null
165
+ }
166
+
167
+ /**
168
+ * Reset tracking state (e.g., on new session).
169
+ */
170
+ fun reset() {
171
+ lastOffsetX = 0f
172
+ lastOffsetY = 0f
173
+ lastTimestamp = 0
174
+ accumulatedScrollDistance = 0f
175
+ scrollStartX = 0f
176
+ scrollStartY = 0f
177
+ scrollStartTime = 0
178
+ isScrolling = false
179
+ }
180
+
181
+ /**
182
+ * Check if scroll has recently ended (no updates in SCROLL_END_DELAY).
183
+ */
184
+ fun isScrollEnded(): Boolean {
185
+ if (lastTimestamp == 0L) return true
186
+ val elapsed = (System.currentTimeMillis() - lastTimestamp) / 1000.0
187
+ return elapsed > Constants.SCROLL_END_DELAY
188
+ }
189
+
190
+ /**
191
+ * Create a motion event for the current scroll (used when scroll ends).
192
+ */
193
+ fun createScrollEndEvent(): MotionEventData? {
194
+ if (!isScrolling) return null
195
+
196
+ val now = System.currentTimeMillis()
197
+ val dx = lastOffsetX - scrollStartX
198
+ val dy = lastOffsetY - scrollStartY
199
+
200
+ if (dx == 0f && dy == 0f) return null
201
+
202
+ isScrolling = false
203
+
204
+ return MotionEventData(
205
+ type = MotionType.SCROLL,
206
+ t0 = scrollStartTime,
207
+ t1 = now,
208
+ dx = dx,
209
+ dy = dy,
210
+ v0 = 0f,
211
+ v1 = 0f,
212
+ curve = MotionCurve.EXPONENTIAL_DECAY
213
+ )
214
+ }
215
+ }