@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.
- package/android/build.gradle.kts +135 -0
- package/android/consumer-rules.pro +10 -0
- package/android/proguard-rules.pro +1 -0
- package/android/src/main/AndroidManifest.xml +15 -0
- package/android/src/main/java/com/rejourney/RejourneyModuleImpl.kt +2981 -0
- package/android/src/main/java/com/rejourney/capture/ANRHandler.kt +206 -0
- package/android/src/main/java/com/rejourney/capture/ActivityTracker.kt +98 -0
- package/android/src/main/java/com/rejourney/capture/CaptureEngine.kt +1553 -0
- package/android/src/main/java/com/rejourney/capture/CaptureHeuristics.kt +375 -0
- package/android/src/main/java/com/rejourney/capture/CrashHandler.kt +153 -0
- package/android/src/main/java/com/rejourney/capture/MotionEvent.kt +215 -0
- package/android/src/main/java/com/rejourney/capture/SegmentUploader.kt +512 -0
- package/android/src/main/java/com/rejourney/capture/VideoEncoder.kt +773 -0
- package/android/src/main/java/com/rejourney/capture/ViewHierarchyScanner.kt +633 -0
- package/android/src/main/java/com/rejourney/capture/ViewSerializer.kt +286 -0
- package/android/src/main/java/com/rejourney/core/Constants.kt +117 -0
- package/android/src/main/java/com/rejourney/core/Logger.kt +93 -0
- package/android/src/main/java/com/rejourney/core/Types.kt +124 -0
- package/android/src/main/java/com/rejourney/lifecycle/SessionLifecycleService.kt +162 -0
- package/android/src/main/java/com/rejourney/network/DeviceAuthManager.kt +747 -0
- package/android/src/main/java/com/rejourney/network/HttpClientProvider.kt +16 -0
- package/android/src/main/java/com/rejourney/network/NetworkMonitor.kt +272 -0
- package/android/src/main/java/com/rejourney/network/UploadManager.kt +1363 -0
- package/android/src/main/java/com/rejourney/network/UploadWorker.kt +492 -0
- package/android/src/main/java/com/rejourney/privacy/PrivacyMask.kt +645 -0
- package/android/src/main/java/com/rejourney/touch/GestureClassifier.kt +233 -0
- package/android/src/main/java/com/rejourney/touch/KeyboardTracker.kt +158 -0
- package/android/src/main/java/com/rejourney/touch/TextInputTracker.kt +181 -0
- package/android/src/main/java/com/rejourney/touch/TouchInterceptor.kt +591 -0
- package/android/src/main/java/com/rejourney/utils/EventBuffer.kt +284 -0
- package/android/src/main/java/com/rejourney/utils/OEMDetector.kt +154 -0
- package/android/src/main/java/com/rejourney/utils/PerfTiming.kt +235 -0
- package/android/src/main/java/com/rejourney/utils/Telemetry.kt +297 -0
- package/android/src/main/java/com/rejourney/utils/WindowUtils.kt +84 -0
- package/android/src/newarch/java/com/rejourney/RejourneyModule.kt +187 -0
- package/android/src/newarch/java/com/rejourney/RejourneyPackage.kt +40 -0
- package/android/src/oldarch/java/com/rejourney/RejourneyModule.kt +218 -0
- package/android/src/oldarch/java/com/rejourney/RejourneyPackage.kt +23 -0
- package/ios/Capture/RJANRHandler.h +42 -0
- package/ios/Capture/RJANRHandler.m +328 -0
- package/ios/Capture/RJCaptureEngine.h +275 -0
- package/ios/Capture/RJCaptureEngine.m +2062 -0
- package/ios/Capture/RJCaptureHeuristics.h +80 -0
- package/ios/Capture/RJCaptureHeuristics.m +903 -0
- package/ios/Capture/RJCrashHandler.h +46 -0
- package/ios/Capture/RJCrashHandler.m +313 -0
- package/ios/Capture/RJMotionEvent.h +183 -0
- package/ios/Capture/RJMotionEvent.m +183 -0
- package/ios/Capture/RJPerformanceManager.h +100 -0
- package/ios/Capture/RJPerformanceManager.m +373 -0
- package/ios/Capture/RJPixelBufferDownscaler.h +42 -0
- package/ios/Capture/RJPixelBufferDownscaler.m +85 -0
- package/ios/Capture/RJSegmentUploader.h +146 -0
- package/ios/Capture/RJSegmentUploader.m +778 -0
- package/ios/Capture/RJVideoEncoder.h +247 -0
- package/ios/Capture/RJVideoEncoder.m +1036 -0
- package/ios/Capture/RJViewControllerTracker.h +73 -0
- package/ios/Capture/RJViewControllerTracker.m +508 -0
- package/ios/Capture/RJViewHierarchyScanner.h +215 -0
- package/ios/Capture/RJViewHierarchyScanner.m +1464 -0
- package/ios/Capture/RJViewSerializer.h +119 -0
- package/ios/Capture/RJViewSerializer.m +498 -0
- package/ios/Core/RJConstants.h +124 -0
- package/ios/Core/RJConstants.m +88 -0
- package/ios/Core/RJLifecycleManager.h +85 -0
- package/ios/Core/RJLifecycleManager.m +308 -0
- package/ios/Core/RJLogger.h +61 -0
- package/ios/Core/RJLogger.m +211 -0
- package/ios/Core/RJTypes.h +176 -0
- package/ios/Core/RJTypes.m +66 -0
- package/ios/Core/Rejourney.h +64 -0
- package/ios/Core/Rejourney.mm +2495 -0
- package/ios/Network/RJDeviceAuthManager.h +94 -0
- package/ios/Network/RJDeviceAuthManager.m +967 -0
- package/ios/Network/RJNetworkMonitor.h +68 -0
- package/ios/Network/RJNetworkMonitor.m +267 -0
- package/ios/Network/RJRetryManager.h +73 -0
- package/ios/Network/RJRetryManager.m +325 -0
- package/ios/Network/RJUploadManager.h +267 -0
- package/ios/Network/RJUploadManager.m +2296 -0
- package/ios/Privacy/RJPrivacyMask.h +163 -0
- package/ios/Privacy/RJPrivacyMask.m +922 -0
- package/ios/Rejourney.h +63 -0
- package/ios/Touch/RJGestureClassifier.h +130 -0
- package/ios/Touch/RJGestureClassifier.m +333 -0
- package/ios/Touch/RJTouchInterceptor.h +169 -0
- package/ios/Touch/RJTouchInterceptor.m +772 -0
- package/ios/Utils/RJEventBuffer.h +112 -0
- package/ios/Utils/RJEventBuffer.m +358 -0
- package/ios/Utils/RJGzipUtils.h +33 -0
- package/ios/Utils/RJGzipUtils.m +89 -0
- package/ios/Utils/RJKeychainManager.h +48 -0
- package/ios/Utils/RJKeychainManager.m +111 -0
- package/ios/Utils/RJPerfTiming.h +209 -0
- package/ios/Utils/RJPerfTiming.m +264 -0
- package/ios/Utils/RJTelemetry.h +92 -0
- package/ios/Utils/RJTelemetry.m +320 -0
- package/ios/Utils/RJWindowUtils.h +66 -0
- package/ios/Utils/RJWindowUtils.m +133 -0
- package/lib/commonjs/NativeRejourney.js +40 -0
- package/lib/commonjs/components/Mask.js +79 -0
- package/lib/commonjs/index.js +1381 -0
- package/lib/commonjs/sdk/autoTracking.js +1259 -0
- package/lib/commonjs/sdk/constants.js +151 -0
- package/lib/commonjs/sdk/errorTracking.js +199 -0
- package/lib/commonjs/sdk/index.js +50 -0
- package/lib/commonjs/sdk/metricsTracking.js +204 -0
- package/lib/commonjs/sdk/navigation.js +151 -0
- package/lib/commonjs/sdk/networkInterceptor.js +412 -0
- package/lib/commonjs/sdk/utils.js +363 -0
- package/lib/commonjs/types/expo-router.d.js +2 -0
- package/lib/commonjs/types/index.js +2 -0
- package/lib/module/NativeRejourney.js +38 -0
- package/lib/module/components/Mask.js +72 -0
- package/lib/module/index.js +1284 -0
- package/lib/module/sdk/autoTracking.js +1233 -0
- package/lib/module/sdk/constants.js +145 -0
- package/lib/module/sdk/errorTracking.js +189 -0
- package/lib/module/sdk/index.js +12 -0
- package/lib/module/sdk/metricsTracking.js +187 -0
- package/lib/module/sdk/navigation.js +143 -0
- package/lib/module/sdk/networkInterceptor.js +401 -0
- package/lib/module/sdk/utils.js +342 -0
- package/lib/module/types/expo-router.d.js +2 -0
- package/lib/module/types/index.js +2 -0
- package/lib/typescript/NativeRejourney.d.ts +147 -0
- package/lib/typescript/components/Mask.d.ts +39 -0
- package/lib/typescript/index.d.ts +117 -0
- package/lib/typescript/sdk/autoTracking.d.ts +204 -0
- package/lib/typescript/sdk/constants.d.ts +120 -0
- package/lib/typescript/sdk/errorTracking.d.ts +32 -0
- package/lib/typescript/sdk/index.d.ts +9 -0
- package/lib/typescript/sdk/metricsTracking.d.ts +58 -0
- package/lib/typescript/sdk/navigation.d.ts +33 -0
- package/lib/typescript/sdk/networkInterceptor.d.ts +47 -0
- package/lib/typescript/sdk/utils.d.ts +148 -0
- package/lib/typescript/types/index.d.ts +624 -0
- package/package.json +102 -0
- package/rejourney.podspec +21 -0
- package/src/NativeRejourney.ts +165 -0
- package/src/components/Mask.tsx +80 -0
- package/src/index.ts +1459 -0
- package/src/sdk/autoTracking.ts +1373 -0
- package/src/sdk/constants.ts +134 -0
- package/src/sdk/errorTracking.ts +231 -0
- package/src/sdk/index.ts +11 -0
- package/src/sdk/metricsTracking.ts +232 -0
- package/src/sdk/navigation.ts +157 -0
- package/src/sdk/networkInterceptor.ts +440 -0
- package/src/sdk/utils.ts +369 -0
- package/src/types/expo-router.d.ts +7 -0
- 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
|
+
}
|