@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,163 @@
1
+ //
2
+ // RJPrivacyMask.h
3
+ // Rejourney
4
+ //
5
+ // Privacy masking for sensitive UI elements during screen capture.
6
+ // Uses Core Graphics to draw blur overlays directly into the captured image,
7
+ // avoiding any visual flashing for the user.
8
+ //
9
+ // Licensed under the Apache License, Version 2.0 (the "License").
10
+ // Copyright (c) 2026 Rejourney
11
+ //
12
+
13
+ #import <CoreGraphics/CoreGraphics.h>
14
+ #import <Foundation/Foundation.h>
15
+ #import <UIKit/UIKit.h>
16
+
17
+ @class RJViewHierarchyScanResult;
18
+
19
+ NS_ASSUME_NONNULL_BEGIN
20
+
21
+ /**
22
+ * Privacy mask that draws blur overlays directly into captured images.
23
+ *
24
+ * Unlike overlay-based approaches, this class:
25
+ * - Does NOT add any views to the window (no user-visible flashing)
26
+ * - Draws blur rectangles directly into the graphics context
27
+ * - Detects ONLY actual text input fields (not display text)
28
+ * - Detects camera preview layers
29
+ * - Handles background state with full-screen blur
30
+ */
31
+ @interface RJPrivacyMask : NSObject
32
+
33
+ #pragma mark - Configuration
34
+
35
+ /// Whether text input masking is enabled. Default: YES
36
+ @property(nonatomic, assign) BOOL maskTextInputs;
37
+
38
+ /// Whether camera preview masking is enabled. Default: YES
39
+ @property(nonatomic, assign) BOOL maskCameraViews;
40
+
41
+ /// Whether web view masking is enabled. Default: YES
42
+ @property(nonatomic, assign) BOOL maskWebViews;
43
+
44
+ /// Whether video layer masking is enabled. Default: YES
45
+ @property(nonatomic, assign) BOOL maskVideoLayers;
46
+
47
+ /// Corner radius for blur rectangles. Default: 8.0
48
+ @property(nonatomic, assign) CGFloat blurCornerRadius;
49
+
50
+ /// Padding around masked views. Default: 4.0
51
+ @property(nonatomic, assign) CGFloat maskPadding;
52
+
53
+ #pragma mark - Background State
54
+
55
+ /// Whether the app is currently in background
56
+ @property(nonatomic, readonly) BOOL isInBackground;
57
+
58
+ #pragma mark - Core Methods
59
+
60
+ /**
61
+ * Draws privacy masks directly into the current graphics context.
62
+ * Call this AFTER drawing the window hierarchy but BEFORE getting the image.
63
+ *
64
+ * @param window The window that was drawn (to find sensitive views)
65
+ * @param bounds The bounds of the drawing context
66
+ * @param scale The scale factor of the drawing context
67
+ */
68
+ - (void)drawMasksForWindow:(UIWindow *)window
69
+ bounds:(CGRect)bounds
70
+ scale:(CGFloat)scale;
71
+
72
+ /**
73
+ * Draws privacy masks using pre-computed scan result.
74
+ *
75
+ * Use this when RJViewHierarchyScanner has already scanned the window
76
+ * to avoid redundant view tree traversal.
77
+ *
78
+ * @param scanResult The pre-computed scan result containing sensitive frames.
79
+ * @param bounds The bounds of the drawing context.
80
+ * @param scale The scale factor of the drawing context.
81
+ */
82
+ - (void)drawMasksWithScanResult:(RJViewHierarchyScanResult *)scanResult
83
+ bounds:(CGRect)bounds
84
+ scale:(CGFloat)scale;
85
+
86
+ /**
87
+ * Applies privacy masks directly to a CVPixelBuffer using Core Graphics.
88
+ * Thread-safe: Designed to be called from a background thread.
89
+ *
90
+ * @param pixelBuffer The CVPixelBufferRef to draw masks onto.
91
+ * @param scanResult The scan result containing mask frames.
92
+ * @param scale The total scale factor (screen scale * capture scale) to
93
+ * transform points to pixels.
94
+ */
95
+ - (void)applyToPixelBuffer:(CVPixelBufferRef)pixelBuffer
96
+ withScanResult:(RJViewHierarchyScanResult *)scanResult
97
+ scale:(CGFloat)scale;
98
+
99
+ /**
100
+ * Applies privacy masks to an existing image and returns a new masked image.
101
+ * Thread-safe: Can be called from any thread (designed for background
102
+ * processing).
103
+ *
104
+ * @param image The source image to apply masks to.
105
+ * @param scanResult The pre-computed scan result containing sensitive frames.
106
+ * @param isInBackground Whether the app is in background (full screen mask).
107
+ * @return A new UIImage with privacy masks applied, or the original image if no
108
+ * masking needed.
109
+ */
110
+ - (UIImage *)applyMasksToImage:(UIImage *)image
111
+ scanResult:(RJViewHierarchyScanResult *)scanResult
112
+ isInBackground:(BOOL)isInBackground;
113
+
114
+ /**
115
+ * Finds all sensitive view frames in the window.
116
+ * Returns array of NSValue-wrapped CGRects in window coordinates.
117
+ */
118
+ - (NSArray<NSValue *> *)findSensitiveFramesInWindow:(UIWindow *)window;
119
+
120
+ /**
121
+ * Returns YES if the last drawMasksForWindow call masked a camera view.
122
+ * Use this to add metadata to frames for dashboard display.
123
+ */
124
+ @property(nonatomic, readonly) BOOL lastFrameHadCamera;
125
+
126
+ /**
127
+ * Returns YES if the last drawMasksForWindow call masked a text input.
128
+ */
129
+ @property(nonatomic, readonly) BOOL lastFrameHadTextInput;
130
+
131
+ /**
132
+ * Returns YES if the last drawMasksForWindow call masked a web view.
133
+ */
134
+ @property(nonatomic, readonly) BOOL lastFrameHadWebView;
135
+
136
+ /**
137
+ * Cleanup method - no-op for this implementation since we don't add overlays.
138
+ */
139
+ - (void)forceCleanup;
140
+
141
+ #pragma mark - Manual nativeID Masking
142
+
143
+ /**
144
+ * Set of nativeID strings that should be manually masked.
145
+ * Views with matching accessibilityIdentifier will be masked.
146
+ */
147
+ @property(nonatomic, strong, readonly)
148
+ NSMutableSet<NSString *> *maskedNativeIDs;
149
+
150
+ /**
151
+ * Add a nativeID to the manually masked set.
152
+ * The view with this nativeID will be masked in recordings.
153
+ */
154
+ - (void)addMaskedNativeID:(NSString *)nativeID;
155
+
156
+ /**
157
+ * Remove a nativeID from the manually masked set.
158
+ */
159
+ - (void)removeMaskedNativeID:(NSString *)nativeID;
160
+
161
+ @end
162
+
163
+ NS_ASSUME_NONNULL_END