@multiplayer-app/session-recorder-react-native 0.0.1-beta.9 → 1.0.0-beta.1

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 (178) hide show
  1. package/README.md +708 -83
  2. package/SessionRecorderNative.podspec +26 -0
  3. package/android/build.gradle +2 -0
  4. package/copy-react-native-dist.sh +33 -9
  5. package/dist/components/ScreenRecorderView/ScreenRecorderView.js +1 -1
  6. package/dist/components/ScreenRecorderView/ScreenRecorderView.js.map +1 -1
  7. package/dist/components/SessionRecorderWidget/ErrorBanner.d.ts +7 -0
  8. package/dist/components/SessionRecorderWidget/ErrorBanner.js +1 -0
  9. package/dist/components/SessionRecorderWidget/ErrorBanner.js.map +1 -0
  10. package/dist/components/SessionRecorderWidget/FinalPopover.d.ts +4 -3
  11. package/dist/components/SessionRecorderWidget/FinalPopover.js +1 -1
  12. package/dist/components/SessionRecorderWidget/FinalPopover.js.map +1 -1
  13. package/dist/components/SessionRecorderWidget/InitialPopover.d.ts +6 -3
  14. package/dist/components/SessionRecorderWidget/InitialPopover.js +1 -1
  15. package/dist/components/SessionRecorderWidget/InitialPopover.js.map +1 -1
  16. package/dist/components/SessionRecorderWidget/ModalContainer.js +1 -1
  17. package/dist/components/SessionRecorderWidget/ModalContainer.js.map +1 -1
  18. package/dist/components/SessionRecorderWidget/SessionRecorderWidget.js +1 -1
  19. package/dist/components/SessionRecorderWidget/SessionRecorderWidget.js.map +1 -1
  20. package/dist/components/SessionRecorderWidget/styles.d.ts +27 -7
  21. package/dist/components/SessionRecorderWidget/styles.js +1 -1
  22. package/dist/components/SessionRecorderWidget/styles.js.map +1 -1
  23. package/dist/components/index.d.ts +0 -1
  24. package/dist/components/index.js +1 -1
  25. package/dist/components/index.js.map +1 -1
  26. package/dist/config/constants.js +1 -1
  27. package/dist/config/constants.js.map +1 -1
  28. package/dist/config/defaults.d.ts +4 -4
  29. package/dist/config/defaults.js +1 -1
  30. package/dist/config/defaults.js.map +1 -1
  31. package/dist/config/masking.d.ts +2 -2
  32. package/dist/config/masking.js +1 -1
  33. package/dist/config/masking.js.map +1 -1
  34. package/dist/config/session-recorder.js +1 -1
  35. package/dist/config/session-recorder.js.map +1 -1
  36. package/dist/config/validators.d.ts +1 -1
  37. package/dist/config/validators.js +1 -1
  38. package/dist/config/validators.js.map +1 -1
  39. package/dist/config/widget.d.ts +9 -0
  40. package/dist/config/widget.js +1 -0
  41. package/dist/config/widget.js.map +1 -0
  42. package/dist/context/SessionRecorderContext.d.ts +11 -4
  43. package/dist/context/SessionRecorderContext.js +1 -1
  44. package/dist/context/SessionRecorderContext.js.map +1 -1
  45. package/dist/context/SessionRecorderStore.d.ts +12 -0
  46. package/dist/context/SessionRecorderStore.js +1 -0
  47. package/dist/context/SessionRecorderStore.js.map +1 -0
  48. package/dist/context/useSessionRecorderStore.d.ts +8 -0
  49. package/dist/context/useSessionRecorderStore.js +1 -0
  50. package/dist/context/useSessionRecorderStore.js.map +1 -0
  51. package/dist/context/useStoreSelector.d.ts +4 -0
  52. package/dist/context/useStoreSelector.js +1 -0
  53. package/dist/context/useStoreSelector.js.map +1 -0
  54. package/dist/index.d.ts +1 -0
  55. package/dist/index.js +1 -1
  56. package/dist/index.js.map +1 -1
  57. package/dist/native/GestureRecorderNative.d.ts +57 -0
  58. package/dist/native/GestureRecorderNative.js +1 -0
  59. package/dist/native/GestureRecorderNative.js.map +1 -0
  60. package/dist/native/SessionRecorderNative.d.ts +17 -5
  61. package/dist/native/SessionRecorderNative.js +1 -1
  62. package/dist/native/SessionRecorderNative.js.map +1 -1
  63. package/dist/native/index.d.ts +2 -0
  64. package/dist/native/index.js +1 -0
  65. package/dist/native/index.js.map +1 -0
  66. package/dist/otel/index.js +1 -1
  67. package/dist/otel/index.js.map +1 -1
  68. package/dist/patch/xhr.js +1 -1
  69. package/dist/patch/xhr.js.map +1 -1
  70. package/dist/recorder/eventExporter.d.ts +4 -1
  71. package/dist/recorder/eventExporter.js +1 -1
  72. package/dist/recorder/eventExporter.js.map +1 -1
  73. package/dist/recorder/gestureRecorder.d.ts +28 -62
  74. package/dist/recorder/gestureRecorder.js +1 -1
  75. package/dist/recorder/gestureRecorder.js.map +1 -1
  76. package/dist/recorder/index.d.ts +2 -0
  77. package/dist/recorder/index.js +1 -1
  78. package/dist/recorder/index.js.map +1 -1
  79. package/dist/recorder/navigationTracker.d.ts +4 -19
  80. package/dist/recorder/navigationTracker.js +1 -1
  81. package/dist/recorder/navigationTracker.js.map +1 -1
  82. package/dist/recorder/screenRecorder.d.ts +10 -5
  83. package/dist/recorder/screenRecorder.js +1 -1
  84. package/dist/recorder/screenRecorder.js.map +1 -1
  85. package/dist/services/api.service.d.ts +12 -3
  86. package/dist/services/api.service.js +1 -1
  87. package/dist/services/api.service.js.map +1 -1
  88. package/dist/services/network.service.d.ts +46 -0
  89. package/dist/services/network.service.js +1 -0
  90. package/dist/services/network.service.js.map +1 -0
  91. package/dist/services/screenMaskingService.d.ts +13 -5
  92. package/dist/services/screenMaskingService.js +1 -1
  93. package/dist/services/screenMaskingService.js.map +1 -1
  94. package/dist/services/storage.service.js +1 -1
  95. package/dist/services/storage.service.js.map +1 -1
  96. package/dist/session-recorder.d.ts +17 -33
  97. package/dist/session-recorder.js +1 -1
  98. package/dist/session-recorder.js.map +1 -1
  99. package/dist/types/configs.d.ts +85 -0
  100. package/dist/types/configs.js +1 -0
  101. package/dist/types/configs.js.map +1 -0
  102. package/dist/types/index.d.ts +1 -0
  103. package/dist/types/index.js +1 -1
  104. package/dist/types/index.js.map +1 -1
  105. package/dist/types/session-recorder.d.ts +105 -138
  106. package/dist/types/session-recorder.js +1 -1
  107. package/dist/types/session-recorder.js.map +1 -1
  108. package/dist/utils/constants.optional.d.ts +21 -0
  109. package/dist/utils/constants.optional.expo.d.ts +3 -0
  110. package/dist/utils/constants.optional.expo.js +1 -0
  111. package/dist/utils/constants.optional.expo.js.map +1 -0
  112. package/dist/utils/constants.optional.js +1 -0
  113. package/dist/utils/constants.optional.js.map +1 -0
  114. package/dist/utils/createStore.d.ts +8 -0
  115. package/dist/utils/createStore.js +1 -0
  116. package/dist/utils/createStore.js.map +1 -0
  117. package/dist/utils/logger.d.ts +2 -7
  118. package/dist/utils/logger.js +1 -1
  119. package/dist/utils/logger.js.map +1 -1
  120. package/dist/utils/platform.d.ts +8 -0
  121. package/dist/utils/platform.js +1 -1
  122. package/dist/utils/platform.js.map +1 -1
  123. package/dist/utils/rrweb-events.d.ts +4 -3
  124. package/dist/utils/rrweb-events.js +1 -1
  125. package/dist/utils/rrweb-events.js.map +1 -1
  126. package/dist/utils/session.d.ts +2 -1
  127. package/dist/utils/session.js +1 -1
  128. package/dist/utils/session.js.map +1 -1
  129. package/dist/utils/shallowEqual.d.ts +1 -0
  130. package/dist/utils/shallowEqual.js +1 -0
  131. package/dist/utils/shallowEqual.js.map +1 -0
  132. package/dist/version.d.ts +1 -1
  133. package/dist/version.js +1 -1
  134. package/dist/version.js.map +1 -1
  135. package/docs/AUTO_METADATA_DETECTION.md +108 -0
  136. package/ios/GestureRecorderNative.m +21 -0
  137. package/ios/GestureRecorderNative.swift +316 -0
  138. package/ios/SessionRecorderNative.m +5 -0
  139. package/ios/SessionRecorderNative.swift +478 -84
  140. package/package.json +13 -27
  141. package/react-native.config.js +7 -10
  142. package/app.plugin.js +0 -42
  143. package/dist/components/GestureCaptureWrapper/GestureCaptureWrapper.d.ts +0 -6
  144. package/dist/components/GestureCaptureWrapper/GestureCaptureWrapper.js +0 -1
  145. package/dist/components/GestureCaptureWrapper/GestureCaptureWrapper.js.map +0 -1
  146. package/dist/components/GestureCaptureWrapper/index.d.ts +0 -1
  147. package/dist/components/GestureCaptureWrapper/index.js +0 -1
  148. package/dist/components/GestureCaptureWrapper/index.js.map +0 -1
  149. package/dist/components/MaskableComponent.d.ts +0 -22
  150. package/dist/components/MaskableComponent.js +0 -1
  151. package/dist/components/MaskableComponent.js.map +0 -1
  152. package/dist/components/MaskableTextInput.d.ts +0 -14
  153. package/dist/components/MaskableTextInput.js +0 -1
  154. package/dist/components/MaskableTextInput.js.map +0 -1
  155. package/dist/native/ScreenMasking.d.ts +0 -21
  156. package/dist/native/ScreenMasking.js +0 -1
  157. package/dist/native/ScreenMasking.js.map +0 -1
  158. package/dist/recorder/screenshotManager.d.ts +0 -10
  159. package/dist/recorder/screenshotManager.js +0 -1
  160. package/dist/recorder/screenshotManager.js.map +0 -1
  161. package/dist/utils/componentRegistry.d.ts +0 -64
  162. package/dist/utils/componentRegistry.js +0 -1
  163. package/dist/utils/componentRegistry.js.map +0 -1
  164. package/dist/utils/nativeModuleTest.d.ts +0 -8
  165. package/dist/utils/nativeModuleTest.js +0 -1
  166. package/dist/utils/nativeModuleTest.js.map +0 -1
  167. package/dist/utils/reactNativeHierarchyExtractor.d.ts +0 -38
  168. package/dist/utils/reactNativeHierarchyExtractor.js +0 -1
  169. package/dist/utils/reactNativeHierarchyExtractor.js.map +0 -1
  170. package/dist/utils/screenshotMasker.d.ts +0 -96
  171. package/dist/utils/screenshotMasker.js +0 -1
  172. package/dist/utils/screenshotMasker.js.map +0 -1
  173. package/dist/utils/viewHierarchyTracker.d.ts +0 -89
  174. package/dist/utils/viewHierarchyTracker.js +0 -1
  175. package/dist/utils/viewHierarchyTracker.js.map +0 -1
  176. package/docs/NATIVE_MODULE_SETUP.md +0 -177
  177. package/plugin/package.json +0 -20
  178. package/plugin/src/index.js +0 -42
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplayer-app/session-recorder-react-native",
3
- "version": "0.0.1-beta.9",
3
+ "version": "1.0.0-beta.1",
4
4
  "description": "Multiplayer Fullstack Session Recorder for React Native",
5
5
  "author": {
6
6
  "name": "Multiplayer Software, Inc.",
@@ -39,9 +39,9 @@
39
39
  ],
40
40
  "scripts": {
41
41
  "clean": "rimraf dist",
42
+ "prebuild": "node -p \"'export const version = ' + JSON.stringify(require('./package.json').version)\" > src/version.ts",
42
43
  "prepublishOnly": "npm run build",
43
- "build": "tsc && babel ./dist --out-dir dist --extensions '.js' && ./copy-react-native-dist.sh",
44
- "generate-metadata": "node scripts/generate-app-metadata.js"
44
+ "build": "tsc && babel ./dist --out-dir dist --extensions '.js' && ./copy-react-native-dist.sh"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@babel/cli": "^7.19.3",
@@ -55,6 +55,8 @@
55
55
  "@types/react": "^18.2.0",
56
56
  "@types/react-native": "^0.72.0",
57
57
  "eslint": "8.48.0",
58
+ "react-native-safe-area-context": "^5.6.0",
59
+ "react-native-svg": "^15.12.0",
58
60
  "rimraf": "^5.0.5",
59
61
  "typescript": "5.7.3"
60
62
  },
@@ -74,37 +76,21 @@
74
76
  "@react-native-community/netinfo": "^11.1.0",
75
77
  "@rrweb/types": "^2.0.0-alpha.18",
76
78
  "lib0": "0.2.82",
77
- "react-native-gesture-handler": "^2.14.0",
78
- "react-native-mmkv": "^2.11.0",
79
- "react-native-reanimated": "^3.6.0",
79
+ "react-native-reanimated": "^4.1.1",
80
80
  "react-native-view-shot": "^4.0.3",
81
81
  "socket.io-client": "4.7.5"
82
82
  },
83
83
  "peerDependencies": {
84
84
  "@opentelemetry/api": "^1.9.0",
85
+ "expo-constants": "*",
85
86
  "react": ">=18.0.0 <20.0.0",
86
- "react-native": ">=0.72.0 <0.82.0",
87
- "react-native-svg": "^15.13.0"
87
+ "react-native": ">=0.72.0 <0.83.0",
88
+ "react-native-safe-area-context": ">=4.0.0 <6.0.0 || ^5.0.0",
89
+ "react-native-svg": ">=15.12.0 <16.0.0"
88
90
  },
89
- "optionalDependencies": {
90
- "expo-constants": "^15.0.0"
91
- },
92
- "react-native": {
93
- "ios": {
94
- "podspecPath": "./ios/SessionRecorderNative.podspec"
95
- },
96
- "android": {
97
- "sourceDir": "./android",
98
- "packageImportPath": "import com.multiplayer.sessionrecorder.SessionRecorderPackage;"
99
- }
100
- },
101
- "expo": {
102
- "ios": {
103
- "podspecPath": "./ios/SessionRecorderNative.podspec"
104
- },
105
- "android": {
106
- "sourceDir": "./android",
107
- "packageImportPath": "import com.multiplayer.sessionrecorder.SessionRecorderPackage;"
91
+ "peerDependenciesMeta": {
92
+ "expo-constants": {
93
+ "optional": true
108
94
  }
109
95
  }
110
96
  }
@@ -1,14 +1,11 @@
1
1
  module.exports = {
2
- dependencies: {
3
- '@multiplayer-app/session-recorder-react-native': {
4
- platforms: {
5
- android: {
6
- sourceDir: '../android',
7
- packageImportPath: 'import com.multiplayer.sessionrecorder.SessionRecorderPackage;'
8
- },
9
- ios: {
10
- podspecPath: '../ios/SessionRecorderNative.podspec'
11
- }
2
+ dependency: {
3
+ platforms: {
4
+ android: {
5
+ sourceDir: './android'
6
+ },
7
+ ios: {
8
+ podspecPath: './ios/SessionRecorderNative.podspec'
12
9
  }
13
10
  }
14
11
  }
package/app.plugin.js DELETED
@@ -1,42 +0,0 @@
1
- const { withDangerousMod } = require('@expo/config-plugins')
2
- const fs = require('fs')
3
- const path = require('path')
4
-
5
- const withSessionRecorder = (config) => {
6
- return withDangerousMod(config, [
7
- 'ios',
8
- async (config) => {
9
- const projectRoot = config.modRequest.projectRoot
10
- const platformRoot = config.modRequest.platformProjectRoot
11
-
12
- // Ensure the Podfile includes our native module
13
- const podfilePath = path.join(platformRoot, 'Podfile')
14
-
15
- if (fs.existsSync(podfilePath)) {
16
- let podfileContent = fs.readFileSync(podfilePath, 'utf8')
17
-
18
- // Check if our pod is already included
19
- if (!podfileContent.includes('SessionRecorderNative')) {
20
- // Add our pod to the Podfile
21
- const podEntry = ` pod 'SessionRecorderNative', :path => '../node_modules/@multiplayer-app/session-recorder-react-native/ios'\n`
22
-
23
- // Find the target section and add our pod
24
- const targetRegex = /(target ['"][^'"]+['"] do)/
25
- if (targetRegex.test(podfileContent)) {
26
- podfileContent = podfileContent.replace(targetRegex, `$1\n${podEntry}`)
27
- } else {
28
- // If no target found, add at the end before the end statement
29
- podfileContent = podfileContent.replace(/(end\s*$)/, `${podEntry}$1`)
30
- }
31
-
32
- fs.writeFileSync(podfilePath, podfileContent)
33
- console.log('✅ Added SessionRecorderNative to Podfile')
34
- }
35
- }
36
-
37
- return config
38
- }
39
- ])
40
- }
41
-
42
- module.exports = withSessionRecorder
@@ -1,6 +0,0 @@
1
- import React, { ReactNode } from 'react';
2
- export interface GestureCaptureWrapperProps {
3
- children: ReactNode;
4
- onGestureRecord: (gestureType: string, data: any) => void;
5
- }
6
- export declare const GestureCaptureWrapper: React.FC<GestureCaptureWrapperProps>;
@@ -1 +0,0 @@
1
- "use strict";var _typeof=require("@babel/runtime/helpers/typeof");Object.defineProperty(exports,"__esModule",{value:true});exports.GestureCaptureWrapper=void 0;var _react=_interopRequireWildcard(require("react"));var _reactNativeGestureHandler=require("react-native-gesture-handler");var _jsxRuntime=require("react/jsx-runtime");var _this=void 0,_jsxFileName="/Users/gegham/www/multiplayer-debugger-javascript/packages/session-recorder-react-native/dist/components/GestureCaptureWrapper/GestureCaptureWrapper.js";function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap(),n=new WeakMap();return(_interopRequireWildcard=function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;var o,i,f={__proto__:null,"default":e};if(null===e||"object"!=_typeof(e)&&"function"!=typeof e)return f;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,f);}for(var _t2 in e)"default"!==_t2&&{}.hasOwnProperty.call(e,_t2)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,_t2))&&(i.get||i.set)?o(f,_t2,i):f[_t2]=e[_t2]);return f;})(e,t);}var GestureCaptureWrapper=exports.GestureCaptureWrapper=function GestureCaptureWrapper(_ref){var children=_ref.children,onGestureRecord=_ref.onGestureRecord;var recordGesture=(0,_react.useCallback)(function(gestureType,data){onGestureRecord(gestureType,data);},[onGestureRecord]);var tapGesture=(0,_react.useMemo)(function(){return _reactNativeGestureHandler.Gesture.Tap().runOnJS(true).onStart(function(event){recordGesture('tap',{x:event.x,y:event.y,timestamp:Date.now()});});},[recordGesture]);var panGesture=(0,_react.useMemo)(function(){return _reactNativeGestureHandler.Gesture.Pan().runOnJS(true).onStart(function(event){recordGesture('pan_start',{x:event.x,y:event.y,timestamp:Date.now()});}).onUpdate(function(event){recordGesture('pan_update',{x:event.x,y:event.y,translationX:event.translationX,translationY:event.translationY,velocityX:event.velocityX,velocityY:event.velocityY,timestamp:Date.now()});}).onEnd(function(event){recordGesture('pan_end',{x:event.x,y:event.y,translationX:event.translationX,translationY:event.translationY,velocityX:event.velocityX,velocityY:event.velocityY,timestamp:Date.now()});});},[recordGesture]);var longPressGesture=(0,_react.useMemo)(function(){return _reactNativeGestureHandler.Gesture.LongPress().runOnJS(true).minDuration(500).onStart(function(event){recordGesture('long_press',{x:event.x,y:event.y,duration:500,timestamp:Date.now()});});},[recordGesture]);return(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureHandlerRootView,{style:{flex:1},children:(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:_reactNativeGestureHandler.Gesture.Simultaneous(tapGesture,panGesture,longPressGesture),children:children})});};
@@ -1 +0,0 @@
1
- {"version":3,"file":"GestureCaptureWrapper.js","sourceRoot":"","sources":["../../../src/components/GestureCaptureWrapper/GestureCaptureWrapper.tsx"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export * from "./GestureCaptureWrapper";
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});var _GestureCaptureWrapper=require("./GestureCaptureWrapper");Object.keys(_GestureCaptureWrapper).forEach(function(key){if(key==="default"||key==="__esModule")return;if(key in exports&&exports[key]===_GestureCaptureWrapper[key])return;Object.defineProperty(exports,key,{enumerable:true,get:function get(){return _GestureCaptureWrapper[key];}});});
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/GestureCaptureWrapper/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
@@ -1,22 +0,0 @@
1
- import React from 'react';
2
- import { ViewProps } from 'react-native';
3
- interface MaskableComponentProps extends ViewProps {
4
- /** Whether this component should be masked in screenshots */
5
- maskInScreenshots?: boolean;
6
- /** Custom mask type for this component */
7
- maskType?: 'blur' | 'blackout' | 'pixelate';
8
- /** Element identifier for hierarchy tracking */
9
- elementId?: string;
10
- /** Whether this is a sensitive input field */
11
- isSensitive?: boolean;
12
- /** Accessibility label for masking detection */
13
- accessibilityLabel?: string;
14
- /** Children components */
15
- children?: React.ReactNode;
16
- }
17
- /**
18
- * A wrapper component that provides masking control for its children
19
- * Similar to PostHog's ph-no-capture functionality
20
- */
21
- export declare const MaskableComponent: React.FC<MaskableComponentProps>;
22
- export default MaskableComponent;
@@ -1 +0,0 @@
1
- "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _typeof=require("@babel/runtime/helpers/typeof");Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=exports.MaskableComponent=void 0;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _jsxRuntime=require("react/jsx-runtime");var _excluded=["maskInScreenshots","maskType","elementId","isSensitive","accessibilityLabel","children"];var _this=void 0,_jsxFileName="/Users/gegham/www/multiplayer-debugger-javascript/packages/session-recorder-react-native/dist/components/MaskableComponent.js";function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap(),n=new WeakMap();return(_interopRequireWildcard=function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;var o,i,f={__proto__:null,"default":e};if(null===e||"object"!=_typeof(e)&&"function"!=typeof e)return f;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,f);}for(var _t2 in e)"default"!==_t2&&{}.hasOwnProperty.call(e,_t2)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,_t2))&&(i.get||i.set)?o(f,_t2,i):f[_t2]=e[_t2]);return f;})(e,t);}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){(0,_defineProperty2["default"])(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}var MaskableComponent=exports.MaskableComponent=function MaskableComponent(_ref){var _ref$maskInScreenshot=_ref.maskInScreenshots,maskInScreenshots=_ref$maskInScreenshot===void 0?false:_ref$maskInScreenshot,_ref$maskType=_ref.maskType,maskType=_ref$maskType===void 0?'blackout':_ref$maskType,elementId=_ref.elementId,_ref$isSensitive=_ref.isSensitive,isSensitive=_ref$isSensitive===void 0?false:_ref$isSensitive,accessibilityLabel=_ref.accessibilityLabel,children=_ref.children,viewProps=(0,_objectWithoutProperties2["default"])(_ref,_excluded);var viewRef=(0,_react.useRef)(null);(0,_react.useEffect)(function(){if(maskInScreenshots||isSensitive){registerMaskableComponent({elementId:elementId,maskType:maskType,isSensitive:isSensitive,bounds:getElementBounds(viewRef.current)});}return function(){if(elementId){unregisterMaskableComponent(elementId);}};},[maskInScreenshots,maskType,elementId,isSensitive]);var finalAccessibilityLabel=accessibilityLabel||(maskInScreenshots?'ph-no-capture':undefined)||(isSensitive?'mask-input':undefined);return(0,_jsxRuntime.jsx)(_reactNative.View,_objectSpread(_objectSpread({ref:viewRef,accessibilityLabel:finalAccessibilityLabel},viewProps),{},{children:children}));};function registerMaskableComponent(component){console.log('Registering maskable component:',component);}function unregisterMaskableComponent(elementId){console.log('Unregistering maskable component:',elementId);}function getElementBounds(view){if(!view)return undefined;return undefined;}var _default=exports["default"]=MaskableComponent;
@@ -1 +0,0 @@
1
- {"version":3,"file":"MaskableComponent.js","sourceRoot":"","sources":["../../src/components/MaskableComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAChD,OAAO,EAAE,IAAI,EAAa,MAAM,cAAc,CAAA;AAiB9C;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAqC,CAAC,EAClE,iBAAiB,GAAG,KAAK,EACzB,QAAQ,GAAG,UAAU,EACrB,SAAS,EACT,WAAW,GAAG,KAAK,EACnB,kBAAkB,EAClB,QAAQ,EACR,GAAG,SAAS,EACb,EAAE,EAAE;IACH,MAAM,OAAO,GAAG,MAAM,CAAO,IAAI,CAAC,CAAA;IAElC,SAAS,CAAC,GAAG,EAAE;QACb,6DAA6D;QAC7D,IAAI,iBAAiB,IAAI,WAAW,EAAE,CAAC;YACrC,yEAAyE;YACzE,wCAAwC;YACxC,yBAAyB,CAAC;gBACxB,SAAS;gBACT,QAAQ;gBACR,WAAW;gBACX,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC;aAC1C,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,GAAG,EAAE;YACV,kCAAkC;YAClC,IAAI,SAAS,EAAE,CAAC;gBACd,2BAA2B,CAAC,SAAS,CAAC,CAAA;YACxC,CAAC;QACH,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAA;IAEzD,oCAAoC;IACpC,MAAM,uBAAuB,GAC3B,kBAAkB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAErH,OAAO,CACL,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,uBAAuB,CAAC,CAAC,IAAI,SAAS,CAAC,CAC7E;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,IAAI,CAAC,CACR,CAAA;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,SAAS,yBAAyB,CAAC,SAKlC;IACC,wDAAwD;IACxD,gDAAgD;IAChD,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,SAAS,CAAC,CAAA;AAC3D,CAAC;AAED;;GAEG;AACH,SAAS,2BAA2B,CAAC,SAAiB;IACpD,wDAAwD;IACxD,gDAAgD;IAChD,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAA;AAC7D,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,IAAiB;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAA;IAE3B,oDAAoD;IACpD,6CAA6C;IAC7C,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,eAAe,iBAAiB,CAAA"}
@@ -1,14 +0,0 @@
1
- import React from 'react';
2
- import { TextInputProps } from 'react-native';
3
- interface MaskableTextInputProps extends TextInputProps {
4
- /** Unique identifier for this input */
5
- maskId: string;
6
- /** Whether this input should be masked (default: true) */
7
- shouldMask?: boolean;
8
- }
9
- /**
10
- * A TextInput component that automatically registers itself for masking
11
- * This is the practical solution for React Native input masking
12
- */
13
- export declare const MaskableTextInput: React.FC<MaskableTextInputProps>;
14
- export default MaskableTextInput;
@@ -1 +0,0 @@
1
- "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _typeof=require("@babel/runtime/helpers/typeof");Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=exports.MaskableTextInput=void 0;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _componentRegistry=require("../utils/componentRegistry");var _jsxRuntime=require("react/jsx-runtime");var _excluded=["maskId","shouldMask"];var _this=void 0,_jsxFileName="/Users/gegham/www/multiplayer-debugger-javascript/packages/session-recorder-react-native/dist/components/MaskableTextInput.js";function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap(),n=new WeakMap();return(_interopRequireWildcard=function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;var o,i,f={__proto__:null,"default":e};if(null===e||"object"!=_typeof(e)&&"function"!=typeof e)return f;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,f);}for(var _t2 in e)"default"!==_t2&&{}.hasOwnProperty.call(e,_t2)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,_t2))&&(i.get||i.set)?o(f,_t2,i):f[_t2]=e[_t2]);return f;})(e,t);}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){(0,_defineProperty2["default"])(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}var MaskableTextInput=exports.MaskableTextInput=function MaskableTextInput(_ref){var maskId=_ref.maskId,_ref$shouldMask=_ref.shouldMask,shouldMask=_ref$shouldMask===void 0?true:_ref$shouldMask,textInputProps=(0,_objectWithoutProperties2["default"])(_ref,_excluded);var textInputRef=(0,_react.useRef)(null);(0,_react.useEffect)(function(){if(shouldMask&&textInputRef.current){(0,_componentRegistry.registerTextInput)(maskId,textInputRef.current,textInputProps);}return function(){(0,_componentRegistry.unregisterComponent)(maskId);};},[maskId,shouldMask,textInputProps]);return(0,_jsxRuntime.jsx)(_reactNative.TextInput,_objectSpread({ref:textInputRef},textInputProps));};var _default=exports["default"]=MaskableTextInput;
@@ -1 +0,0 @@
1
- {"version":3,"file":"MaskableTextInput.js","sourceRoot":"","sources":["../../src/components/MaskableTextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAChD,OAAO,EAAE,SAAS,EAAkB,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AASnF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAqC,CAAC,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,cAAc,EAAE,EAAE,EAAE;IACtH,MAAM,YAAY,GAAG,MAAM,CAAY,IAAI,CAAC,CAAA;IAE5C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACvC,sCAAsC;YACtC,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;QACjE,CAAC;QAED,qBAAqB;QACrB,OAAO,GAAG,EAAE;YACV,mBAAmB,CAAC,MAAM,CAAC,CAAA;QAC7B,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC,CAAA;IAExC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,cAAc,CAAC,EAAG,CAAA;AAC7D,CAAC,CAAA;AAED,eAAe,iBAAiB,CAAA"}
@@ -1,21 +0,0 @@
1
- export interface MaskingOptions {
2
- /** Quality of the captured image (0.1 to 1.0) */
3
- quality?: number;
4
- /** Whether to mask all input fields automatically */
5
- inputMasking?: boolean;
6
- }
7
- export interface SessionRecorderNativeModule {
8
- /**
9
- * Capture the current screen and apply masking to sensitive elements
10
- * @returns Promise that resolves to base64 encoded image
11
- */
12
- captureAndMask(): Promise<string>;
13
- /**
14
- * Capture the current screen and apply masking with custom options
15
- * @param options Custom masking options
16
- * @returns Promise that resolves to base64 encoded image
17
- */
18
- captureAndMaskWithOptions(options: MaskingOptions): Promise<string>;
19
- }
20
- declare const _default: SessionRecorderNativeModule;
21
- export default _default;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _reactNative=require("react-native");var SessionRecorder=_reactNative.NativeModules.SessionRecorder;if(!SessionRecorder){console.warn('SessionRecorder native module is not available. Auto-linking may not have completed yet.');}var _default=exports["default"]=SessionRecorder;
@@ -1 +0,0 @@
1
- {"version":3,"file":"ScreenMasking.js","sourceRoot":"","sources":["../../src/native/ScreenMasking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAyB5C,wBAAwB;AACxB,MAAM,EAAE,eAAe,EAAE,GAAG,aAAa,CAAA;AAEzC,+CAA+C;AAC/C,IAAI,CAAC,eAAe,EAAE,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,0FAA0F,CAAC,CAAA;AAC1G,CAAC;AAED,eAAe,eAA8C,CAAA"}
@@ -1,10 +0,0 @@
1
- import { Observable } from "lib0/observable";
2
- export declare class ScreenshotManager extends Observable<'maskingChanged'> {
3
- private static instance;
4
- private static masking;
5
- constructor();
6
- static getInstance(): ScreenshotManager;
7
- static enableMasking(): void;
8
- static disableMasking(): void;
9
- static isMasking(): boolean;
10
- }
@@ -1 +0,0 @@
1
- "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.ScreenshotManager=void 0;var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _possibleConstructorReturn2=_interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));var _getPrototypeOf2=_interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _inherits2=_interopRequireDefault(require("@babel/runtime/helpers/inherits"));var _observable=require("lib0/observable");function _callSuper(t,o,e){return o=(0,_getPrototypeOf2["default"])(o),(0,_possibleConstructorReturn2["default"])(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],(0,_getPrototypeOf2["default"])(t).constructor):o.apply(t,e));}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}var ScreenshotManager=exports.ScreenshotManager=function(_Observable){function ScreenshotManager(){(0,_classCallCheck2["default"])(this,ScreenshotManager);return _callSuper(this,ScreenshotManager);}(0,_inherits2["default"])(ScreenshotManager,_Observable);return(0,_createClass2["default"])(ScreenshotManager,null,[{key:"getInstance",value:function getInstance(){if(!ScreenshotManager.instance){ScreenshotManager.instance=new ScreenshotManager();}return ScreenshotManager.instance;}},{key:"enableMasking",value:function enableMasking(){ScreenshotManager.masking=true;ScreenshotManager.getInstance().emit('maskingChanged',[true]);}},{key:"disableMasking",value:function disableMasking(){ScreenshotManager.masking=false;ScreenshotManager.getInstance().emit('maskingChanged',[false]);}},{key:"isMasking",value:function isMasking(){return ScreenshotManager.masking;}}]);}(_observable.Observable);ScreenshotManager.masking=false;
@@ -1 +0,0 @@
1
- {"version":3,"file":"screenshotManager.js","sourceRoot":"","sources":["../../src/recorder/screenshotManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,OAAO,iBAAkB,SAAQ,UAA4B;IAIjE;QACE,KAAK,EAAE,CAAA;IACT,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;YAChC,iBAAiB,CAAC,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAA;QACtD,CAAC;QACD,OAAO,iBAAiB,CAAC,QAAQ,CAAA;IACnC,CAAC;IAED,MAAM,CAAC,aAAa;QAClB,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAA;QAChC,iBAAiB,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,CAAC,cAAc;QACnB,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAA;QACjC,iBAAiB,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IACjE,CAAC;IAED,MAAM,CAAC,SAAS;QACd,OAAO,iBAAiB,CAAC,OAAO,CAAA;IAClC,CAAC;;AAzBc,yBAAO,GAAG,KAAK,CAAA"}
@@ -1,64 +0,0 @@
1
- import { ViewHierarchyNode } from '../types';
2
- /**
3
- * Global registry for components that should be masked
4
- * This is a practical solution for React Native input masking
5
- */
6
- declare class ComponentRegistry {
7
- private components;
8
- private static instance;
9
- static getInstance(): ComponentRegistry;
10
- /**
11
- * Register a component for masking
12
- * @param id - Unique identifier for the component
13
- * @param component - Component information
14
- */
15
- registerComponent(id: string, component: ViewHierarchyNode): void;
16
- /**
17
- * Unregister a component
18
- * @param id - Component identifier
19
- */
20
- unregisterComponent(id: string): void;
21
- /**
22
- * Get all registered components
23
- * @returns Array of registered components
24
- */
25
- getAllComponents(): ViewHierarchyNode[];
26
- /**
27
- * Get a specific component
28
- * @param id - Component identifier
29
- * @returns Component or undefined
30
- */
31
- getComponent(id: string): ViewHierarchyNode | undefined;
32
- /**
33
- * Clear all registered components
34
- */
35
- clearAll(): void;
36
- /**
37
- * Get components that should be masked
38
- * @returns Array of components that need masking
39
- */
40
- getMaskableComponents(): ViewHierarchyNode[];
41
- }
42
- export declare const componentRegistry: ComponentRegistry;
43
- /**
44
- * Helper function to register a TextInput for masking
45
- * @param id - Unique identifier
46
- * @param ref - React Native ref
47
- * @param props - Component props
48
- */
49
- export declare function registerTextInput(id: string, ref: any, props?: any): void;
50
- /**
51
- * Helper function to register any component for masking
52
- * @param id - Unique identifier
53
- * @param type - Component type
54
- * @param ref - React Native ref
55
- * @param props - Component props
56
- * @param shouldMask - Whether this component should be masked
57
- */
58
- export declare function registerComponent(id: string, type: string, ref: any, props?: any, shouldMask?: boolean): void;
59
- /**
60
- * Unregister a component
61
- * @param id - Component identifier
62
- */
63
- export declare function unregisterComponent(id: string): void;
64
- export default componentRegistry;
@@ -1 +0,0 @@
1
- "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=exports.componentRegistry=void 0;exports.registerComponent=registerComponent;exports.registerTextInput=registerTextInput;exports.unregisterComponent=unregisterComponent;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _index=require("./index");function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){(0,_defineProperty2["default"])(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}var ComponentRegistry=function(){function ComponentRegistry(){(0,_classCallCheck2["default"])(this,ComponentRegistry);this.components=new Map();}return(0,_createClass2["default"])(ComponentRegistry,[{key:"registerComponent",value:function registerComponent(id,component){this.components.set(id,component);_index.logger.debug('ComponentRegistry',"Registered component: ".concat(id));}},{key:"unregisterComponent",value:function unregisterComponent(id){this.components["delete"](id);_index.logger.debug('ComponentRegistry',"Unregistered component: ".concat(id));}},{key:"getAllComponents",value:function getAllComponents(){return Array.from(this.components.values());}},{key:"getComponent",value:function getComponent(id){return this.components.get(id);}},{key:"clearAll",value:function clearAll(){this.components.clear();_index.logger.debug('ComponentRegistry','Cleared all components');}},{key:"getMaskableComponents",value:function getMaskableComponents(){return this.getAllComponents().filter(function(component){return component.masked;});}}],[{key:"getInstance",value:function getInstance(){if(!ComponentRegistry.instance){ComponentRegistry.instance=new ComponentRegistry();}return ComponentRegistry.instance;}}]);}();var componentRegistry=exports.componentRegistry=ComponentRegistry.getInstance();function registerTextInput(id,ref){var props=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};if(!ref){_index.logger.warn('ComponentRegistry',"Cannot register TextInput ".concat(id,": ref is null"));return;}ref.measure(function(x,y,width,height,pageX,pageY){var component={type:'TextInput',props:_objectSpread(_objectSpread({},props),{},{accessibilityLabel:props.accessibilityLabel||id}),bounds:{x:pageX,y:pageY,width:width,height:height},id:id,masked:true};componentRegistry.registerComponent(id,component);});}function registerComponent(id,type,ref){var props=arguments.length>3&&arguments[3]!==undefined?arguments[3]:{};var shouldMask=arguments.length>4&&arguments[4]!==undefined?arguments[4]:true;if(!ref){_index.logger.warn('ComponentRegistry',"Cannot register ".concat(type," ").concat(id,": ref is null"));return;}ref.measure(function(x,y,width,height,pageX,pageY){var component={type:type,props:_objectSpread(_objectSpread({},props),{},{accessibilityLabel:props.accessibilityLabel||id}),bounds:{x:pageX,y:pageY,width:width,height:height},id:id,masked:shouldMask};componentRegistry.registerComponent(id,component);});}function unregisterComponent(id){componentRegistry.unregisterComponent(id);}var _default=exports["default"]=componentRegistry;
@@ -1 +0,0 @@
1
- {"version":3,"file":"componentRegistry.js","sourceRoot":"","sources":["../../src/utils/componentRegistry.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Test function to verify native module availability
3
- */
4
- export declare function testNativeModuleAvailability(): void;
5
- /**
6
- * Test function to verify auto-linking configuration
7
- */
8
- export declare function testAutoLinkingConfig(): void;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.testAutoLinkingConfig=testAutoLinkingConfig;exports.testNativeModuleAvailability=testNativeModuleAvailability;var _reactNative=require("react-native");var _logger=require("./logger");function testNativeModuleAvailability(){_logger.logger.info('NativeModuleTest','Testing native module availability...');var availableModules=Object.keys(_reactNative.NativeModules);_logger.logger.info('NativeModuleTest',"Available native modules: ".concat(availableModules.join(', ')));var SessionRecorderNative=_reactNative.NativeModules.SessionRecorderNative;if(SessionRecorderNative){_logger.logger.info('NativeModuleTest','✅ SessionRecorderNative module is available!');if(typeof SessionRecorderNative.captureAndMask==='function'){_logger.logger.info('NativeModuleTest','✅ captureAndMask method is available!');}else{_logger.logger.warn('NativeModuleTest','❌ captureAndMask method is not available');}if(typeof SessionRecorderNative.captureAndMaskWithOptions==='function'){_logger.logger.info('NativeModuleTest','✅ captureAndMaskWithOptions method is available!');}else{_logger.logger.warn('NativeModuleTest','❌ captureAndMaskWithOptions method is not available');}}else{_logger.logger.error('NativeModuleTest','❌ SessionRecorderNative module is not available');_logger.logger.info('NativeModuleTest','This could mean:');_logger.logger.info('NativeModuleTest','1. Auto-linking has not completed yet');_logger.logger.info('NativeModuleTest','2. The native module was not properly built');_logger.logger.info('NativeModuleTest','3. The module name does not match');}}function testAutoLinkingConfig(){_logger.logger.info('NativeModuleTest','Testing auto-linking configuration...');try{var config=require('../../react-native.config.js');_logger.logger.info('NativeModuleTest','✅ react-native.config.js found');if(config.dependencies&&config.dependencies['react-native-session-recorder']){_logger.logger.info('NativeModuleTest','✅ Auto-linking configuration found for react-native-session-recorder');}else{_logger.logger.warn('NativeModuleTest','❌ Auto-linking configuration not found for react-native-session-recorder');}}catch(error){_logger.logger.warn('NativeModuleTest','❌ react-native.config.js not found or invalid');}}
@@ -1 +0,0 @@
1
- {"version":3,"file":"nativeModuleTest.js","sourceRoot":"","sources":["../../src/utils/nativeModuleTest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC;;GAEG;AACH,MAAM,UAAU,4BAA4B;IAC1C,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,uCAAuC,CAAC,CAAA;IAExE,mCAAmC;IACnC,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IACnD,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,6BAA6B,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAE3F,+CAA+C;IAC/C,MAAM,EAAE,qBAAqB,EAAE,GAAG,aAAa,CAAA;IAE/C,IAAI,qBAAqB,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,8CAA8C,CAAC,CAAA;QAE/E,4BAA4B;QAC5B,IAAI,OAAO,qBAAqB,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;YAC/D,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,uCAAuC,CAAC,CAAA;QAC1E,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,0CAA0C,CAAC,CAAA;QAC7E,CAAC;QAED,IAAI,OAAO,qBAAqB,CAAC,yBAAyB,KAAK,UAAU,EAAE,CAAC;YAC1E,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,kDAAkD,CAAC,CAAA;QACrF,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,qDAAqD,CAAC,CAAA;QACxF,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,iDAAiD,CAAC,CAAA;QACnF,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAA;QACnD,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,uCAAuC,CAAC,CAAA;QACxE,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,6CAA6C,CAAC,CAAA;QAC9E,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,mCAAmC,CAAC,CAAA;IACtE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,uCAAuC,CAAC,CAAA;IAExE,oEAAoE;IACpE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAA;QACtD,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,gCAAgC,CAAC,CAAA;QAEjE,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,+BAA+B,CAAC,EAAE,CAAC;YAChF,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,sEAAsE,CAAC,CAAA;QACzG,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,0EAA0E,CAAC,CAAA;QAC7G,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,+CAA+C,CAAC,CAAA;IAClF,CAAC;AACH,CAAC"}
@@ -1,38 +0,0 @@
1
- import { ViewHierarchyNode } from '../types';
2
- /**
3
- * Utility for extracting React Native component hierarchy
4
- * This is a simplified implementation - in production you'd need more sophisticated methods
5
- */
6
- export declare class ReactNativeHierarchyExtractor {
7
- private screenDimensions;
8
- constructor(screenDimensions?: {
9
- width: number;
10
- height: number;
11
- });
12
- /**
13
- * Extract component hierarchy from a React Native view
14
- * Note: React Native doesn't expose the component tree directly.
15
- * This implementation focuses on finding actual TextInput components.
16
- */
17
- extractHierarchy(viewRef: any): Promise<ViewHierarchyNode[]>;
18
- /**
19
- * Try to get component information from the view ref
20
- */
21
- private _getComponentInfo;
22
- /**
23
- * Try to get accessibility information
24
- */
25
- private _getAccessibilityInfo;
26
- /**
27
- * Try to find TextInput components using native methods
28
- * This uses the component registry for registered components
29
- */
30
- private _findTextInputComponents;
31
- /**
32
- * Update screen dimensions
33
- */
34
- updateScreenDimensions(dimensions: {
35
- width: number;
36
- height: number;
37
- }): void;
38
- }
@@ -1 +0,0 @@
1
- "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.ReactNativeHierarchyExtractor=void 0;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator"));var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _index=require("./index");var _componentRegistry=require("./componentRegistry");var ReactNativeHierarchyExtractor=exports.ReactNativeHierarchyExtractor=function(){function ReactNativeHierarchyExtractor(screenDimensions){(0,_classCallCheck2["default"])(this,ReactNativeHierarchyExtractor);this.screenDimensions=null;this.screenDimensions=screenDimensions||null;}return(0,_createClass2["default"])(ReactNativeHierarchyExtractor,[{key:"extractHierarchy",value:function(){var _extractHierarchy=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee(viewRef){var hierarchy,componentInfo,accessibilityInfo,textInputs,_t;return _regenerator["default"].wrap(function(_context){while(1)switch(_context.prev=_context.next){case 0:hierarchy=[];_context.prev=1;_context.next=2;return this._getComponentInfo(viewRef);case 2:componentInfo=_context.sent;if(componentInfo){hierarchy.push(componentInfo);}_context.next=3;return this._getAccessibilityInfo(viewRef);case 3:accessibilityInfo=_context.sent;hierarchy.push.apply(hierarchy,(0,_toConsumableArray2["default"])(accessibilityInfo));_context.next=4;return this._findTextInputComponents(viewRef);case 4:textInputs=_context.sent;hierarchy.push.apply(hierarchy,(0,_toConsumableArray2["default"])(textInputs));_index.logger.debug('ReactNativeHierarchyExtractor',"Extracted ".concat(hierarchy.length," components"));return _context.abrupt("return",hierarchy);case 5:_context.prev=5;_t=_context["catch"](1);_index.logger.error('ReactNativeHierarchyExtractor','Failed to extract hierarchy:',_t);return _context.abrupt("return",[]);case 6:case"end":return _context.stop();}},_callee,this,[[1,5]]);}));function extractHierarchy(_x){return _extractHierarchy.apply(this,arguments);}return extractHierarchy;}()},{key:"_getComponentInfo",value:function(){var _getComponentInfo2=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2(viewRef){var componentInfo,_t2;return _regenerator["default"].wrap(function(_context2){while(1)switch(_context2.prev=_context2.next){case 0:_context2.prev=0;if(!(!viewRef||!viewRef._nativeTag)){_context2.next=1;break;}return _context2.abrupt("return",null);case 1:componentInfo={type:'View',props:{},bounds:{x:0,y:0,width:0,height:0},id:"component-".concat(viewRef._nativeTag),masked:false};if(!viewRef.measure){_context2.next=2;break;}_context2.next=2;return new Promise(function(resolve){viewRef.measure(function(x,y,width,height,pageX,pageY){componentInfo.bounds={x:pageX,y:pageY,width:width,height:height};resolve();});});case 2:return _context2.abrupt("return",componentInfo);case 3:_context2.prev=3;_t2=_context2["catch"](0);_index.logger.debug('ReactNativeHierarchyExtractor','Failed to get component info:',_t2);return _context2.abrupt("return",null);case 4:case"end":return _context2.stop();}},_callee2,null,[[0,3]]);}));function _getComponentInfo(_x2){return _getComponentInfo2.apply(this,arguments);}return _getComponentInfo;}()},{key:"_getAccessibilityInfo",value:function(){var _getAccessibilityInfo2=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee3(viewRef){var components;return _regenerator["default"].wrap(function(_context3){while(1)switch(_context3.prev=_context3.next){case 0:components=[];try{_index.logger.debug('ReactNativeHierarchyExtractor','Accessibility info extraction not implemented');}catch(error){_index.logger.debug('ReactNativeHierarchyExtractor','Failed to get accessibility info:',error);}return _context3.abrupt("return",components);case 1:case"end":return _context3.stop();}},_callee3);}));function _getAccessibilityInfo(_x3){return _getAccessibilityInfo2.apply(this,arguments);}return _getAccessibilityInfo;}()},{key:"_findTextInputComponents",value:function(){var _findTextInputComponents2=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee4(viewRef){var registeredComponents,_t3;return _regenerator["default"].wrap(function(_context4){while(1)switch(_context4.prev=_context4.next){case 0:_context4.prev=0;registeredComponents=_componentRegistry.componentRegistry.getMaskableComponents();_index.logger.debug('ReactNativeHierarchyExtractor',"Found ".concat(registeredComponents.length," registered components"));return _context4.abrupt("return",registeredComponents);case 1:_context4.prev=1;_t3=_context4["catch"](0);_index.logger.error('ReactNativeHierarchyExtractor','Failed to find TextInput components:',_t3);return _context4.abrupt("return",[]);case 2:case"end":return _context4.stop();}},_callee4,null,[[0,1]]);}));function _findTextInputComponents(_x4){return _findTextInputComponents2.apply(this,arguments);}return _findTextInputComponents;}()},{key:"updateScreenDimensions",value:function updateScreenDimensions(dimensions){this.screenDimensions=dimensions;}}]);}();
@@ -1 +0,0 @@
1
- {"version":3,"file":"reactNativeHierarchyExtractor.js","sourceRoot":"","sources":["../../src/utils/reactNativeHierarchyExtractor.ts"],"names":[],"mappings":"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"}
@@ -1,96 +0,0 @@
1
- import { MaskRegion, ScreenshotMaskingConfig } from '../types';
2
- /**
3
- * Class for applying masking to screenshots
4
- */
5
- export declare class ScreenshotMasker {
6
- private config;
7
- private screenDimensions;
8
- constructor(config: ScreenshotMaskingConfig, screenDimensions?: {
9
- width: number;
10
- height: number;
11
- });
12
- /**
13
- * Apply masking to a base64 screenshot
14
- * @param base64Image - Base64 encoded image
15
- * @param regions - Regions to mask
16
- * @returns Masked base64 image
17
- */
18
- maskScreenshot(base64Image: string, regions: MaskRegion[]): Promise<string>;
19
- /**
20
- * Apply default masking to the image
21
- * @param base64Image - Base64 encoded image
22
- * @param regions - Regions to mask
23
- * @returns Masked base64 image
24
- */
25
- private applyDefaultMasking;
26
- /**
27
- * Apply blackout masking (solid color overlay)
28
- * @param base64Image - Base64 encoded image
29
- * @param regions - Regions to mask
30
- * @returns Masked base64 image
31
- */
32
- private applyBlackoutMasking;
33
- /**
34
- * Apply blur masking
35
- * @param base64Image - Base64 encoded image
36
- * @param regions - Regions to mask
37
- * @returns Masked base64 image
38
- */
39
- private applyBlurMasking;
40
- /**
41
- * Apply pixelate masking
42
- * @param base64Image - Base64 encoded image
43
- * @param regions - Regions to mask
44
- * @returns Masked base64 image
45
- */
46
- private applyPixelateMasking;
47
- /**
48
- * Convert base64 to image data
49
- * @param base64Image - Base64 encoded image
50
- * @returns Image data object
51
- */
52
- private base64ToImageData;
53
- /**
54
- * Convert image data to base64
55
- * @param imageData - Image data object
56
- * @returns Base64 encoded image
57
- */
58
- private imageDataToBase64;
59
- /**
60
- * Apply blackout to a specific region
61
- * @param imageData - Image data
62
- * @param region - Region to blackout
63
- */
64
- private blackoutRegion;
65
- /**
66
- * Detect input fields using heuristics
67
- * @param base64Image - Base64 encoded image
68
- * @returns Array of detected mask regions
69
- */
70
- detectInputFields(base64Image: string): Promise<MaskRegion[]>;
71
- /**
72
- * Find rectangular regions in the image
73
- * @param imageData - Image data
74
- * @returns Array of rectangular regions
75
- */
76
- private findRectangularRegions;
77
- /**
78
- * Check if a region is likely an input field
79
- * @param region - Region to check
80
- * @returns true if likely an input field
81
- */
82
- private isLikelyInputField;
83
- /**
84
- * Update configuration
85
- * @param config - New configuration
86
- */
87
- updateConfig(config: ScreenshotMaskingConfig): void;
88
- /**
89
- * Update screen dimensions
90
- * @param dimensions - Screen dimensions
91
- */
92
- updateScreenDimensions(dimensions: {
93
- width: number;
94
- height: number;
95
- }): void;
96
- }
@@ -1 +0,0 @@
1
- "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.ScreenshotMasker=void 0;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator"));var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _index=require("./index");function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){(0,_defineProperty2["default"])(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]};},e:function e(r){throw r;},f:F};}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var o,a=!0,u=!1;return{s:function s(){t=t.call(r);},n:function n(){var r=t.next();return a=r.done,r;},e:function e(r){u=!0,o=r;},f:function f(){try{a||null==t["return"]||t["return"]();}finally{if(u)throw o;}}};}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0;}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n;}var ScreenshotMasker=exports.ScreenshotMasker=function(){function ScreenshotMasker(config,screenDimensions){(0,_classCallCheck2["default"])(this,ScreenshotMasker);this.screenDimensions=null;this.config=config;this.screenDimensions=screenDimensions||null;}return(0,_createClass2["default"])(ScreenshotMasker,[{key:"maskScreenshot",value:function(){var _maskScreenshot=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee(base64Image,regions){var _t;return _regenerator["default"].wrap(function(_context){while(1)switch(_context.prev=_context.next){case 0:if(!(!this.config.enabled||regions.length===0)){_context.next=1;break;}return _context.abrupt("return",base64Image);case 1:_context.prev=1;if(!this.config.maskScreenshot){_context.next=3;break;}_context.next=2;return this.config.maskScreenshot(base64Image,regions);case 2:return _context.abrupt("return",_context.sent);case 3:_context.next=4;return this.applyDefaultMasking(base64Image,regions);case 4:return _context.abrupt("return",_context.sent);case 5:_context.prev=5;_t=_context["catch"](1);_index.logger.error('ScreenshotMasker','Failed to mask screenshot:',_t);return _context.abrupt("return",base64Image);case 6:case"end":return _context.stop();}},_callee,this,[[1,5]]);}));function maskScreenshot(_x,_x2){return _maskScreenshot.apply(this,arguments);}return maskScreenshot;}()},{key:"applyDefaultMasking",value:function(){var _applyDefaultMasking=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2(base64Image,regions){var maskType,_t2;return _regenerator["default"].wrap(function(_context2){while(1)switch(_context2.prev=_context2.next){case 0:maskType=this.config.maskType||'blackout';_t2=maskType;_context2.next=_t2==='blur'?1:_t2==='pixelate'?3:_t2==='blackout'?5:5;break;case 1:_context2.next=2;return this.applyBlurMasking(base64Image,regions);case 2:return _context2.abrupt("return",_context2.sent);case 3:_context2.next=4;return this.applyPixelateMasking(base64Image,regions);case 4:return _context2.abrupt("return",_context2.sent);case 5:_context2.next=6;return this.applyBlackoutMasking(base64Image,regions);case 6:return _context2.abrupt("return",_context2.sent);case 7:case"end":return _context2.stop();}},_callee2,this);}));function applyDefaultMasking(_x3,_x4){return _applyDefaultMasking.apply(this,arguments);}return applyDefaultMasking;}()},{key:"applyBlackoutMasking",value:function(){var _applyBlackoutMasking=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee3(base64Image,regions){var imageData,_iterator,_step,region;return _regenerator["default"].wrap(function(_context3){while(1)switch(_context3.prev=_context3.next){case 0:_context3.next=1;return this.base64ToImageData(base64Image);case 1:imageData=_context3.sent;_iterator=_createForOfIteratorHelper(regions);try{for(_iterator.s();!(_step=_iterator.n()).done;){region=_step.value;this.blackoutRegion(imageData,region);}}catch(err){_iterator.e(err);}finally{_iterator.f();}_context3.next=2;return this.imageDataToBase64(imageData);case 2:return _context3.abrupt("return",_context3.sent);case 3:case"end":return _context3.stop();}},_callee3,this);}));function applyBlackoutMasking(_x5,_x6){return _applyBlackoutMasking.apply(this,arguments);}return applyBlackoutMasking;}()},{key:"applyBlurMasking",value:function(){var _applyBlurMasking=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee4(base64Image,regions){return _regenerator["default"].wrap(function(_context4){while(1)switch(_context4.prev=_context4.next){case 0:_index.logger.warn('ScreenshotMasker','Blur masking not implemented, using blackout');_context4.next=1;return this.applyBlackoutMasking(base64Image,regions);case 1:return _context4.abrupt("return",_context4.sent);case 2:case"end":return _context4.stop();}},_callee4,this);}));function applyBlurMasking(_x7,_x8){return _applyBlurMasking.apply(this,arguments);}return applyBlurMasking;}()},{key:"applyPixelateMasking",value:function(){var _applyPixelateMasking=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee5(base64Image,regions){return _regenerator["default"].wrap(function(_context5){while(1)switch(_context5.prev=_context5.next){case 0:_index.logger.warn('ScreenshotMasker','Pixelate masking not implemented, using blackout');_context5.next=1;return this.applyBlackoutMasking(base64Image,regions);case 1:return _context5.abrupt("return",_context5.sent);case 2:case"end":return _context5.stop();}},_callee5,this);}));function applyPixelateMasking(_x9,_x0){return _applyPixelateMasking.apply(this,arguments);}return applyPixelateMasking;}()},{key:"base64ToImageData",value:function(){var _base64ToImageData=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee6(base64Image){var _a,_b;return _regenerator["default"].wrap(function(_context6){while(1)switch(_context6.prev=_context6.next){case 0:return _context6.abrupt("return",{data:base64Image,width:((_a=this.screenDimensions)===null||_a===void 0?void 0:_a.width)||400,height:((_b=this.screenDimensions)===null||_b===void 0?void 0:_b.height)||800});case 1:case"end":return _context6.stop();}},_callee6,this);}));function base64ToImageData(_x1){return _base64ToImageData.apply(this,arguments);}return base64ToImageData;}()},{key:"imageDataToBase64",value:function(){var _imageDataToBase=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee7(imageData){return _regenerator["default"].wrap(function(_context7){while(1)switch(_context7.prev=_context7.next){case 0:return _context7.abrupt("return",imageData.data);case 1:case"end":return _context7.stop();}},_callee7);}));function imageDataToBase64(_x10){return _imageDataToBase.apply(this,arguments);}return imageDataToBase64;}()},{key:"blackoutRegion",value:function blackoutRegion(imageData,region){_index.logger.debug('ScreenshotMasker',"Blacking out region: ".concat(region.x,", ").concat(region.y,", ").concat(region.width,"x").concat(region.height));}},{key:"detectInputFields",value:function(){var _detectInputFields=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee8(base64Image){var imageData,regions,candidates,_iterator2,_step2,candidate,_t3;return _regenerator["default"].wrap(function(_context8){while(1)switch(_context8.prev=_context8.next){case 0:if(!(!this.config.maskAllInputs&&this.config.detectionMethod!=='heuristic')){_context8.next=1;break;}return _context8.abrupt("return",[]);case 1:_context8.prev=1;_context8.next=2;return this.base64ToImageData(base64Image);case 2:imageData=_context8.sent;regions=[];_context8.next=3;return this.findRectangularRegions(imageData);case 3:candidates=_context8.sent;_iterator2=_createForOfIteratorHelper(candidates);try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){candidate=_step2.value;if(this.isLikelyInputField(candidate)){regions.push({x:candidate.x,y:candidate.y,width:candidate.width,height:candidate.height,type:this.config.maskType||'blackout',confidence:candidate.confidence});}}}catch(err){_iterator2.e(err);}finally{_iterator2.f();}_index.logger.debug('ScreenshotMasker',"Detected ".concat(regions.length," input fields"));return _context8.abrupt("return",regions);case 4:_context8.prev=4;_t3=_context8["catch"](1);_index.logger.error('ScreenshotMasker','Failed to detect input fields:',_t3);return _context8.abrupt("return",[]);case 5:case"end":return _context8.stop();}},_callee8,this,[[1,4]]);}));function detectInputFields(_x11){return _detectInputFields.apply(this,arguments);}return detectInputFields;}()},{key:"findRectangularRegions",value:function(){var _findRectangularRegions=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee9(imageData){var regions,_this$screenDimension,width,height,commonPositions,_i,_commonPositions,pos;return _regenerator["default"].wrap(function(_context9){while(1)switch(_context9.prev=_context9.next){case 0:regions=[];if(this.screenDimensions){_this$screenDimension=this.screenDimensions,width=_this$screenDimension.width,height=_this$screenDimension.height;commonPositions=[{x:width*0.1,y:height*0.3,width:width*0.8,height:40},{x:width*0.1,y:height*0.4,width:width*0.8,height:40},{x:width*0.1,y:height*0.5,width:width*0.8,height:40},{x:width*0.1,y:height*0.6,width:width*0.8,height:40}];for(_i=0,_commonPositions=commonPositions;_i<_commonPositions.length;_i++){pos=_commonPositions[_i];regions.push(_objectSpread(_objectSpread({},pos),{},{confidence:0.7}));}}return _context9.abrupt("return",regions);case 1:case"end":return _context9.stop();}},_callee9,this);}));function findRectangularRegions(_x12){return _findRectangularRegions.apply(this,arguments);}return findRectangularRegions;}()},{key:"isLikelyInputField",value:function isLikelyInputField(region){if(region.width<80||region.width>400)return false;if(region.height<20||region.height>60)return false;var aspectRatio=region.width/region.height;if(aspectRatio<2||aspectRatio>10)return false;if(this.screenDimensions){var height=this.screenDimensions.height;var isInCommonArea=region.y>height*0.2&&region.y<height*0.8;if(!isInCommonArea)return false;}var confidence=this.config.confidence||0.5;if(region.confidence<confidence)return false;return true;}},{key:"updateConfig",value:function updateConfig(config){this.config=config;}},{key:"updateScreenDimensions",value:function updateScreenDimensions(dimensions){this.screenDimensions=dimensions;}}]);}();
@@ -1 +0,0 @@
1
- {"version":3,"file":"screenshotMasker.js","sourceRoot":"","sources":["../../src/utils/screenshotMasker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAI3B,YACE,MAA+B,EAC/B,gBAAoD;QAJ9C,qBAAgB,GAA6C,IAAI,CAAA;QAMvE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,IAAI,IAAI,CAAA;IAClD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,WAAmB,EAAE,OAAqB;QAC7D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjD,OAAO,WAAW,CAAA;QACpB,CAAC;QAED,IAAI,CAAC;YACH,0CAA0C;YAC1C,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC/B,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;YAC/D,CAAC;YAED,wBAAwB;YACxB,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,4BAA4B,EAAE,KAAK,CAAC,CAAA;YACrE,OAAO,WAAW,CAAA,CAAC,iCAAiC;QACtD,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,mBAAmB,CAAC,WAAmB,EAAE,OAAqB;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,UAAU,CAAA;QAEnD,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,MAAM;gBACT,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;YAC1D,KAAK,UAAU;gBACb,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;YAC9D,KAAK,UAAU,CAAC;YAChB;gBACE,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAChE,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,oBAAoB,CAAC,WAAmB,EAAE,OAAqB;QAC3E,mEAAmE;QACnE,gFAAgF;QAEhF,+BAA+B;QAC/B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAA;QAE3D,4BAA4B;QAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QACxC,CAAC;QAED,yBAAyB;QACzB,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;IAChD,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,gBAAgB,CAAC,WAAmB,EAAE,OAAqB;QACvE,oDAAoD;QACpD,gCAAgC;QAChC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,8CAA8C,CAAC,CAAA;QAC/E,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAC9D,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,oBAAoB,CAAC,WAAmB,EAAE,OAAqB;QAC3E,oDAAoD;QACpD,gCAAgC;QAChC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,kDAAkD,CAAC,CAAA;QACnF,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAC9D,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,iBAAiB,CAAC,WAAmB;;QACjD,sCAAsC;QACtC,8DAA8D;QAC9D,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,CAAA,MAAA,IAAI,CAAC,gBAAgB,0CAAE,KAAK,KAAI,GAAG;YAC1C,MAAM,EAAE,CAAA,MAAA,IAAI,CAAC,gBAAgB,0CAAE,MAAM,KAAI,GAAG;SAC7C,CAAA;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,iBAAiB,CAAC,SAAc;QAC5C,sCAAsC;QACtC,8DAA8D;QAC9D,OAAO,SAAS,CAAC,IAAI,CAAA;IACvB,CAAC;IAED;;;;OAIG;IACK,cAAc,CAAC,SAAc,EAAE,MAAkB;QACvD,sCAAsC;QACtC,wDAAwD;QACxD,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,wBAAwB,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IACrH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACzC,2FAA2F;QAC3F,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,WAAW,EAAE,CAAC;YAC9E,OAAO,EAAE,CAAA;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAA;YAC3D,MAAM,OAAO,GAAiB,EAAE,CAAA;YAEhC,6BAA6B;YAC7B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAA;YAE/D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;oBACvC,OAAO,CAAC,IAAI,CAAC;wBACX,CAAC,EAAE,SAAS,CAAC,CAAC;wBACd,CAAC,EAAE,SAAS,CAAC,CAAC;wBACd,KAAK,EAAE,SAAS,CAAC,KAAK;wBACtB,MAAM,EAAE,SAAS,CAAC,MAAM;wBACxB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,UAAU;wBACxC,UAAU,EAAE,SAAS,CAAC,UAAU;qBACjC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,YAAY,OAAO,CAAC,MAAM,eAAe,CAAC,CAAA;YAC3E,OAAO,OAAO,CAAA;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,gCAAgC,EAAE,KAAK,CAAC,CAAA;YACzE,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,sBAAsB,CAAC,SAAc;QACjD,sCAAsC;QACtC,gEAAgE;QAChE,MAAM,OAAO,GAAG,EAAE,CAAA;QAElB,yCAAyC;QACzC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;YAE/C,+BAA+B;YAC/B,MAAM,eAAe,GAAG;gBACtB,EAAE,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;gBACnE,EAAE,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;gBACnE,EAAE,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;gBACnE,EAAE,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;aACpE,CAAA;YAED,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC;oBACX,GAAG,GAAG;oBACN,UAAU,EAAE,GAAG,CAAC,kBAAkB;iBACnC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;;;OAIG;IACK,kBAAkB,CAAC,MAAW;QACpC,yBAAyB;QACzB,IAAI,MAAM,CAAC,KAAK,GAAG,EAAE,IAAI,MAAM,CAAC,KAAK,GAAG,GAAG;YAAE,OAAO,KAAK,CAAA;QACzD,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,KAAK,CAAA;QAE1D,qBAAqB;QACrB,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAA;QAChD,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,EAAE;YAAE,OAAO,KAAK,CAAA;QAErD,4CAA4C;QAC5C,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAA;YACxC,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,CAAA;YACzE,IAAI,CAAC,cAAc;gBAAE,OAAO,KAAK,CAAA;QACnC,CAAC;QAED,6BAA6B;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,GAAG,CAAA;QAChD,IAAI,MAAM,CAAC,UAAU,GAAG,UAAU;YAAE,OAAO,KAAK,CAAA;QAEhD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,MAA+B;QAC1C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED;;;OAGG;IACH,sBAAsB,CAAC,UAA6C;QAClE,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAA;IACpC,CAAC;CACF"}