catalyst-core 0.2.0-beta.2 → 0.3.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 (184) hide show
  1. package/babel.native.config.cjs +8 -0
  2. package/bin/catalyst.js +49 -105
  3. package/changelog.md +8 -0
  4. package/dist/caching.js +1 -1
  5. package/dist/index.jsx +8 -0
  6. package/dist/logger.js +74 -3
  7. package/dist/native/androidProject/app/build.gradle.kts +1 -0
  8. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/CustomWebview.kt +143 -4
  9. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/MainActivity.kt +26 -6
  10. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/MetricsMonitor.kt +143 -17
  11. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/NativeBridge.kt +6 -0
  12. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/WebCacheManager.kt +26 -0
  13. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/utils/BridgeUtils.kt +56 -1
  14. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/utils/KeyboardUtil.kt +48 -8
  15. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/utils/PerfDeliveryState.kt +36 -0
  16. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/utils/PerfEventBuffer.kt +289 -0
  17. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/utils/ProfilerNavigationState.kt +13 -0
  18. package/dist/native/androidProject/app/src/test/java/io/yourname/androidproject/ProfilerLifecycleTest.kt +51 -0
  19. package/dist/native/androidSetup.js +300 -8
  20. package/dist/native/bridge/WebBridge.js +481 -59
  21. package/dist/native/bridge/constants/NativeInterfaces.js +290 -44
  22. package/dist/native/bridge/errors.js +250 -26
  23. package/dist/native/bridge/hooks/index.js +125 -1
  24. package/dist/native/bridge/hooks/useCamera.js +347 -9
  25. package/dist/native/bridge/hooks/useDataProtection.js +200 -2
  26. package/dist/native/bridge/hooks/useDeviceInfo.js +71 -2
  27. package/dist/native/bridge/hooks/useFilePicker.js +429 -2
  28. package/dist/native/bridge/hooks/useGoogleSignIn.js +81 -1
  29. package/dist/native/bridge/hooks/useHapticFeedback.js +196 -1
  30. package/dist/native/bridge/hooks/useIntent.js +95 -1
  31. package/dist/native/bridge/hooks/useNativeTransition.js +202 -27
  32. package/dist/native/bridge/hooks/useNetworkStatus.js +84 -3
  33. package/dist/native/bridge/hooks/useNotification.js +318 -2
  34. package/dist/native/bridge/hooks/useSafeArea.js +84 -2
  35. package/dist/native/bridge/hooks/useVideoStream.js +434 -6
  36. package/dist/native/bridge/hooks/utils.js +27 -1
  37. package/dist/native/bridge/hooks.js +16 -1
  38. package/dist/native/bridge/perf/collectors/ApiCollector.js +85 -0
  39. package/dist/native/bridge/perf/collectors/CacheCollector.js +215 -0
  40. package/dist/native/bridge/perf/collectors/HookCollector.js +165 -0
  41. package/dist/native/bridge/perf/collectors/InsightsCollector.js +505 -0
  42. package/dist/native/bridge/perf/collectors/InteractionCollector.js +273 -0
  43. package/dist/native/bridge/perf/collectors/KeyboardCollector.js +124 -0
  44. package/dist/native/bridge/perf/collectors/NavigationCollector.js +294 -0
  45. package/dist/native/bridge/perf/collectors/NetworkTimingCollector.js +183 -0
  46. package/dist/native/bridge/perf/collectors/RenderCollector.js +284 -0
  47. package/dist/native/bridge/perf/collectors/ScrollCollector.js +111 -0
  48. package/dist/native/bridge/perf/collectors/ThreadCollector.js +111 -0
  49. package/dist/native/bridge/perf/core/constants.js +126 -0
  50. package/dist/native/bridge/perf/core/measure.js +189 -0
  51. package/dist/native/bridge/perf/core/session.js +100 -0
  52. package/dist/native/bridge/perf/core/store.js +554 -0
  53. package/dist/native/bridge/perf/core/summary.js +174 -0
  54. package/dist/native/bridge/perf/core/traceExport.js +240 -0
  55. package/dist/native/bridge/perf/core/waterfalls.js +146 -0
  56. package/dist/native/bridge/perf/index.js +402 -0
  57. package/dist/native/bridge/safeArea.js +53 -5
  58. package/dist/native/bridge/standardizedHooks.js +595 -82
  59. package/dist/native/bridge/useBaseHook.js +274 -38
  60. package/dist/native/bridge/utils/CameraUtils.js +201 -56
  61. package/dist/native/bridge/utils/FileObjectConverter.js +129 -18
  62. package/dist/native/bridge/utils/NativeBridge.js +425 -141
  63. package/dist/native/buildAndroid/assets.js +510 -13
  64. package/dist/native/buildAndroid/build.js +296 -19
  65. package/dist/native/buildAndroid/config.js +87 -1
  66. package/dist/native/buildAndroid/index.js +374 -1
  67. package/dist/native/buildAppAndroid.js +34 -2
  68. package/dist/native/buildAppIos.js +62 -2
  69. package/dist/native/buildIos/assets.js +609 -8
  70. package/dist/native/buildIos/build.js +639 -20
  71. package/dist/native/buildIos/config.js +294 -12
  72. package/dist/native/buildIos/index.js +343 -6
  73. package/dist/native/buildIos/plugins.js +343 -16
  74. package/dist/native/internal-plugins/device-info-plugin/android/DeviceInfoPlugin.kt +43 -0
  75. package/dist/native/internal-plugins/device-info-plugin/ios/DeviceInfoPlugin.swift +28 -0
  76. package/dist/native/internal-plugins/device-info-plugin/manifest.json +19 -0
  77. package/dist/native/internalPluginUtils.js +232 -7
  78. package/dist/native/iosnativeWebView/Sources/Core/Constants/CatalystConstants.swift +19 -0
  79. package/dist/native/iosnativeWebView/Sources/Core/Constants/ConfigConstants.swift +4 -0
  80. package/dist/native/iosnativeWebView/Sources/Core/Utils/BootTimingUtility.swift +5 -1
  81. package/dist/native/iosnativeWebView/Sources/Core/Utils/CacheManager.swift +10 -0
  82. package/dist/native/iosnativeWebView/Sources/Core/Utils/DisplayLinkPerfMonitor.swift +89 -0
  83. package/dist/native/iosnativeWebView/Sources/Core/Utils/PerfEventBuffer.swift +373 -0
  84. package/dist/native/iosnativeWebView/Sources/Core/WebView/BridgeFileHandler.swift +35 -1
  85. package/dist/native/iosnativeWebView/Sources/Core/WebView/BridgeMessageValidator.swift +24 -11
  86. package/dist/native/iosnativeWebView/Sources/Core/WebView/NativeBridge.swift +9 -0
  87. package/dist/native/iosnativeWebView/Sources/Core/WebView/WebView.swift +126 -0
  88. package/dist/native/iosnativeWebView/Sources/Core/WebView/WebViewNavigationDelegate.swift +75 -1
  89. package/dist/native/iosnativeWebView/iosnativeWebViewTests/BridgeMessageValidatorTests.swift +13 -0
  90. package/dist/native/package.json +3 -0
  91. package/dist/native/plugin-bridge/PluginBridge.js +227 -1
  92. package/dist/native/pluginComposerAndroid.js +407 -23
  93. package/dist/native/pluginComposerIos.js +435 -11
  94. package/dist/native/renameAndroidProject.js +1094 -88
  95. package/dist/native/setupEmulatorIos.js +289 -22
  96. package/dist/native/setupServer.js +160 -19
  97. package/dist/native/terminalProgress.js +199 -11
  98. package/dist/native/utils.js +193 -15
  99. package/dist/offline/catalyst-sw.js +145 -1
  100. package/dist/offline/registerServiceWorker.js +33 -1
  101. package/dist/otel.js +375 -46
  102. package/dist/router/ClientRouter.js +14 -2
  103. package/dist/router/ServerRouter.js +9 -1
  104. package/dist/router.js +1 -1
  105. package/dist/scripts/build.js +112 -3
  106. package/dist/scripts/checkVersion.js +3 -1
  107. package/dist/scripts/cleanCache.js +30 -1
  108. package/dist/scripts/generateOfflineManifest.js +116 -1
  109. package/dist/scripts/loadEnvironmentVariables.js +32 -6
  110. package/dist/scripts/plugins.js +309 -1
  111. package/dist/scripts/preServerInit.js +13 -0
  112. package/dist/scripts/scriptUtils.js +54 -3
  113. package/dist/scripts/serve.js +51 -4
  114. package/dist/scripts/start.js +47 -10
  115. package/dist/scripts/validator.js +149 -1
  116. package/dist/sentry.cjs +127 -0
  117. package/dist/sentry.js +125 -5
  118. package/dist/server/expressServer.js +250 -5
  119. package/dist/server/manifestCache.js +36 -0
  120. package/dist/server/renderer/ChunkExtractor.js +144 -0
  121. package/dist/server/renderer/document/Body.jsx +59 -0
  122. package/dist/server/renderer/document/FastRefresh.jsx +20 -0
  123. package/dist/server/renderer/document/Head.jsx +60 -0
  124. package/dist/server/renderer/document/index.jsx +2 -0
  125. package/dist/server/renderer/extract.js +149 -31
  126. package/dist/server/renderer/handler.jsx +433 -0
  127. package/dist/server/renderer/index.js +8 -1
  128. package/dist/server/renderer/render.js +47 -0
  129. package/dist/server/utils/botDetectionMiddleware.js +29 -0
  130. package/dist/server/utils/cjsRequire.js +10 -0
  131. package/dist/server/utils/userAgentUtil.js +87 -9
  132. package/dist/server/utils/validator.js +164 -1
  133. package/dist/vite/FastRefresh.jsx +20 -0
  134. package/dist/vite/inject-cache-key-plugin.js +276 -0
  135. package/dist/vite/loadCustomViteConfig.js +22 -0
  136. package/dist/vite/manifest-categorization-plugin.js +455 -0
  137. package/dist/vite/node-loader.mjs +458 -0
  138. package/dist/vite/scssParams.js +21 -0
  139. package/dist/vite/vite.config.client.js +130 -0
  140. package/dist/vite/vite.config.js +422 -0
  141. package/dist/vite/vite.config.server.js +84 -0
  142. package/dist/web-router/components/MetaTag.jsx +34 -0
  143. package/dist/web-router/components/RouterDataProvider.jsx +332 -0
  144. package/dist/web-router/components/Split.jsx +200 -0
  145. package/dist/web-router/components/SplitInview.jsx +106 -0
  146. package/dist/web-router/components/SsrRequestContext.jsx +14 -0
  147. package/dist/web-router/context.jsx +12 -0
  148. package/dist/web-router/hooks.jsx +72 -0
  149. package/dist/web-router/types/components/MetaTag.d.ts +2 -0
  150. package/dist/web-router/types/components/RouterDataProvider.d.ts +95 -0
  151. package/dist/web-router/types/context.d.ts +14 -0
  152. package/dist/web-router/types/hooks.d.ts +1 -0
  153. package/dist/web-router/types/index.d.ts +3 -0
  154. package/dist/web-router/types/utils/metaDataUtils.d.ts +24 -0
  155. package/dist/web-router/utils/metaDataUtils.jsx +119 -0
  156. package/mcp_v2/conversion-tasks.json +35 -17
  157. package/mcp_v2/knowledge-base.json +124 -13
  158. package/mcp_v2/lib/helpers.js +10 -0
  159. package/mcp_v2/mcp.js +4 -4
  160. package/mcp_v2/package.json +1 -0
  161. package/mcp_v2/tools/build.js +116 -20
  162. package/mcp_v2/tools/conversion.js +106 -5
  163. package/mcp_v2/tools/tasks.js +18 -14
  164. package/package.json +35 -68
  165. package/babel.config.js +0 -32
  166. package/dist/index.js +0 -1
  167. package/dist/scripts/devBuild.js +0 -3
  168. package/dist/scripts/devServe.js +0 -3
  169. package/dist/scripts/loadScriptsBeforeServerStarts.js +0 -4
  170. package/dist/scripts/registerAliases.js +0 -6
  171. package/dist/server/renderer/document/Body.js +0 -11
  172. package/dist/server/renderer/document/Head.js +0 -9
  173. package/dist/server/renderer/document/index.js +0 -1
  174. package/dist/server/renderer/handler.js +0 -47
  175. package/dist/server/startServer.js +0 -57
  176. package/dist/webpack/babel-plugins/remove-client.plugin.js +0 -5
  177. package/dist/webpack/babel-plugins/remove-ssr.plugin.js +0 -5
  178. package/dist/webpack/babel.config.client.js +0 -1
  179. package/dist/webpack/babel.config.ssr.js +0 -1
  180. package/dist/webpack/base.babel.js +0 -7
  181. package/dist/webpack/development.client.babel.js +0 -10
  182. package/dist/webpack/production.client.babel.js +0 -4
  183. package/dist/webpack/production.ssr.babel.js +0 -8
  184. package/dist/webpack/scssParams.js +0 -9
@@ -1,2 +1,200 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.useDataProtection=void 0;var _react=require("react");var _NativeBridge=_interopRequireDefault(require("../utils/NativeBridge.js"));var _NativeInterfaces=require("../constants/NativeInterfaces.js");var _useBaseHook=require("../useBaseHook.js");var _utils=require("./utils.js");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}/* eslint-disable react-compiler/react-compiler, react-hooks/exhaustive-deps */const useDataProtection=({webFallback}={})=>{const base=(0,_useBaseHook.useBaseHook)("useDataProtection",{hasWebFallback:true,webFallback});const[screenSecure,setScreenSecureState]=(0,_react.useState)(false);// Web fallback state — always declared (Rules of Hooks)
2
- const[screenSecureWeb,setScreenSecureWeb]=(0,_react.useState)(false);const secureOverlayRef=(0,_react.useRef)(null);(0,_react.useEffect)(()=>{if(!base.webFallbackActive||!screenSecureWeb)return;const overlay=document.createElement("div");overlay.style.cssText="position:fixed;inset:0;background:#000;z-index:2147483647;display:none";document.body.appendChild(overlay);secureOverlayRef.current=overlay;const onVisibilityChange=()=>{overlay.style.display=document.hidden?"block":"none";};document.addEventListener("visibilitychange",onVisibilityChange);return()=>{document.removeEventListener("visibilitychange",onVisibilityChange);overlay.remove();secureOverlayRef.current=null;};},[base.webFallbackActive,screenSecureWeb]);const webSetScreenSecure=(0,_react.useCallback)(enable=>{setScreenSecureWeb(Boolean(enable));},[]);const webClearWebData=(0,_react.useCallback)(async()=>{try{localStorage.clear();sessionStorage.clear();}catch(_){/* storage may be unavailable in restricted contexts */}document.cookie.split(";").forEach(c=>{document.cookie=c.trim().split("=")[0]+"=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/";});if(window.indexedDB?.databases){const dbs=await window.indexedDB.databases().catch(()=>[]);await Promise.all(dbs.map(db=>new Promise(res=>{const req=window.indexedDB.deleteDatabase(db.name);req.onsuccess=req.onerror=res;})));}},[]);if(typeof window==="undefined"){return{screenSecure:false,setScreenSecure:()=>{},clearWebData:()=>{},data:null,loading:false,progress:null,error:null,isWeb:true,isNative:false,webFallbackActive:false,webFallbackDisabled:false,setWebFallback:()=>{},clear:()=>{},clearError:()=>{}};}if(base.webFallbackDisabled){return{screenSecure:false,setScreenSecure:()=>{},clearWebData:()=>{},data:null,loading:false,progress:null,error:null,isWeb:true,isNative:false,webFallbackActive:false,webFallbackDisabled:true,setWebFallback:base.setWebFallback,clear:()=>{},clearError:()=>{}};}if(base.webFallbackActive){return{screenSecure:screenSecureWeb,setScreenSecure:webSetScreenSecure,clearWebData:webClearWebData,data:null,loading:false,progress:null,error:null,isWeb:true,isNative:false,webFallbackActive:true,webFallbackDisabled:false,setWebFallback:base.setWebFallback,clear:()=>{},clearError:()=>{}};}(0,_react.useEffect)(()=>{if(!_NativeBridge.default.isAvailable())return;const handleScreenSecureSet=data=>{try{const result=typeof data==="string"?JSON.parse(data):data;if(result?.error){base.handleNativeError(result.error);return;}setScreenSecureState(Boolean(result?.secure));base.setDataAndComplete(result);}catch(error){base.handleNativeError(error);}};const handleScreenSecureError=data=>{try{const result=typeof data==="string"?JSON.parse(data):data;base.handleNativeError(result?.error||"setScreenSecure failed");}catch(error){base.handleNativeError(error);}};const handleWebDataCleared=data=>{try{const result=typeof data==="string"?JSON.parse(data):data;if(result?.error){base.handleNativeError(result.error);return;}base.setDataAndComplete(result);}catch(error){base.handleNativeError(error);}};const handleWebDataClearError=data=>{try{const result=typeof data==="string"?JSON.parse(data):data;base.handleNativeError(result?.error||"clearWebData failed");}catch(error){base.handleNativeError(error);}};const handleScreenSecureStatus=data=>{try{const result=typeof data==="string"?JSON.parse(data):data;if(result?.error){base.handleNativeError(result.error);return;}setScreenSecureState(Boolean(result?.secure));}catch(error){base.handleNativeError(error);}};const cleanup=(0,_utils.registerNativeHandlers)([[_NativeInterfaces.NATIVE_CALLBACKS.ON_SCREEN_SECURE_SET,handleScreenSecureSet],[_NativeInterfaces.NATIVE_CALLBACKS.ON_SCREEN_SECURE_STATUS,handleScreenSecureStatus],[_NativeInterfaces.NATIVE_CALLBACKS.ON_SCREEN_SECURE_ERROR,handleScreenSecureError],[_NativeInterfaces.NATIVE_CALLBACKS.ON_WEB_DATA_CLEARED,handleWebDataCleared],[_NativeInterfaces.NATIVE_CALLBACKS.ON_WEB_DATA_CLEAR_ERROR,handleWebDataClearError]]);base.callNative(()=>_NativeBridge.default.security.getScreenSecure());return cleanup;},[base.setDataAndComplete,base.handleNativeError]);const setScreenSecure=(0,_react.useCallback)(enable=>{base.callNative(()=>_NativeBridge.default.security.setScreenSecure(enable));},[base.callNative]);const clearWebData=(0,_react.useCallback)(()=>{base.callNative(()=>_NativeBridge.default.security.clearWebData());},[base.callNative]);return{data:base.data,loading:base.loading,progress:base.progress,error:base.error,isWeb:base.isWeb,isNative:base.isNative,webFallbackActive:false,webFallbackDisabled:false,setWebFallback:base.setWebFallback,clear:base.clear,clearError:base.clearError,screenSecure,setScreenSecure,clearWebData};};exports.useDataProtection=useDataProtection;
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useDataProtection = void 0;
7
+ var _react = require("react");
8
+ var _NativeBridge = _interopRequireDefault(require("../utils/NativeBridge.js"));
9
+ var _NativeInterfaces = require("../constants/NativeInterfaces.js");
10
+ var _useBaseHook = require("../useBaseHook.js");
11
+ var _utils = require("./utils.js");
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ /* eslint-disable react-compiler/react-compiler, react-hooks/exhaustive-deps */
14
+
15
+ const useDataProtection = ({
16
+ webFallback
17
+ } = {}) => {
18
+ const base = (0, _useBaseHook.useBaseHook)("useDataProtection", {
19
+ hasWebFallback: true,
20
+ webFallback
21
+ });
22
+ const [screenSecure, setScreenSecureState] = (0, _react.useState)(false);
23
+
24
+ // Web fallback state — always declared (Rules of Hooks)
25
+ const [screenSecureWeb, setScreenSecureWeb] = (0, _react.useState)(false);
26
+ const secureOverlayRef = (0, _react.useRef)(null);
27
+ (0, _react.useEffect)(() => {
28
+ if (!base.webFallbackActive || !screenSecureWeb) return;
29
+ const overlay = document.createElement("div");
30
+ overlay.style.cssText = "position:fixed;inset:0;background:#000;z-index:2147483647;display:none";
31
+ document.body.appendChild(overlay);
32
+ secureOverlayRef.current = overlay;
33
+ const onVisibilityChange = () => {
34
+ overlay.style.display = document.hidden ? "block" : "none";
35
+ };
36
+ document.addEventListener("visibilitychange", onVisibilityChange);
37
+ return () => {
38
+ document.removeEventListener("visibilitychange", onVisibilityChange);
39
+ overlay.remove();
40
+ secureOverlayRef.current = null;
41
+ };
42
+ }, [base.webFallbackActive, screenSecureWeb]);
43
+ const webSetScreenSecure = (0, _react.useCallback)(enable => {
44
+ setScreenSecureWeb(Boolean(enable));
45
+ }, []);
46
+ const webClearWebData = (0, _react.useCallback)(async () => {
47
+ try {
48
+ localStorage.clear();
49
+ sessionStorage.clear();
50
+ } catch (_) {
51
+ /* storage may be unavailable in restricted contexts */
52
+ }
53
+ document.cookie.split(";").forEach(c => {
54
+ document.cookie = c.trim().split("=")[0] + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/";
55
+ });
56
+ if (window.indexedDB?.databases) {
57
+ const dbs = await window.indexedDB.databases().catch(() => []);
58
+ await Promise.all(dbs.map(db => new Promise(res => {
59
+ const req = window.indexedDB.deleteDatabase(db.name);
60
+ req.onsuccess = req.onerror = res;
61
+ })));
62
+ }
63
+ }, []);
64
+ if (typeof window === "undefined") {
65
+ return {
66
+ screenSecure: false,
67
+ setScreenSecure: () => {},
68
+ clearWebData: () => {},
69
+ data: null,
70
+ loading: false,
71
+ progress: null,
72
+ error: null,
73
+ isWeb: true,
74
+ isNative: false,
75
+ webFallbackActive: false,
76
+ webFallbackDisabled: false,
77
+ setWebFallback: () => {},
78
+ clear: () => {},
79
+ clearError: () => {}
80
+ };
81
+ }
82
+ if (base.webFallbackDisabled) {
83
+ return {
84
+ screenSecure: false,
85
+ setScreenSecure: () => {},
86
+ clearWebData: () => {},
87
+ data: null,
88
+ loading: false,
89
+ progress: null,
90
+ error: null,
91
+ isWeb: true,
92
+ isNative: false,
93
+ webFallbackActive: false,
94
+ webFallbackDisabled: true,
95
+ setWebFallback: base.setWebFallback,
96
+ clear: () => {},
97
+ clearError: () => {}
98
+ };
99
+ }
100
+ if (base.webFallbackActive) {
101
+ return {
102
+ screenSecure: screenSecureWeb,
103
+ setScreenSecure: webSetScreenSecure,
104
+ clearWebData: webClearWebData,
105
+ data: null,
106
+ loading: false,
107
+ progress: null,
108
+ error: null,
109
+ isWeb: true,
110
+ isNative: false,
111
+ webFallbackActive: true,
112
+ webFallbackDisabled: false,
113
+ setWebFallback: base.setWebFallback,
114
+ clear: () => {},
115
+ clearError: () => {}
116
+ };
117
+ }
118
+ (0, _react.useEffect)(() => {
119
+ if (!_NativeBridge.default.isAvailable()) return;
120
+ const handleScreenSecureSet = data => {
121
+ try {
122
+ const result = typeof data === "string" ? JSON.parse(data) : data;
123
+ if (result?.error) {
124
+ base.handleNativeError(result.error);
125
+ return;
126
+ }
127
+ setScreenSecureState(Boolean(result?.secure));
128
+ base.setDataAndComplete(result);
129
+ } catch (error) {
130
+ base.handleNativeError(error);
131
+ }
132
+ };
133
+ const handleScreenSecureError = data => {
134
+ try {
135
+ const result = typeof data === "string" ? JSON.parse(data) : data;
136
+ base.handleNativeError(result?.error || "setScreenSecure failed");
137
+ } catch (error) {
138
+ base.handleNativeError(error);
139
+ }
140
+ };
141
+ const handleWebDataCleared = data => {
142
+ try {
143
+ const result = typeof data === "string" ? JSON.parse(data) : data;
144
+ if (result?.error) {
145
+ base.handleNativeError(result.error);
146
+ return;
147
+ }
148
+ base.setDataAndComplete(result);
149
+ } catch (error) {
150
+ base.handleNativeError(error);
151
+ }
152
+ };
153
+ const handleWebDataClearError = data => {
154
+ try {
155
+ const result = typeof data === "string" ? JSON.parse(data) : data;
156
+ base.handleNativeError(result?.error || "clearWebData failed");
157
+ } catch (error) {
158
+ base.handleNativeError(error);
159
+ }
160
+ };
161
+ const handleScreenSecureStatus = data => {
162
+ try {
163
+ const result = typeof data === "string" ? JSON.parse(data) : data;
164
+ if (result?.error) {
165
+ base.handleNativeError(result.error);
166
+ return;
167
+ }
168
+ setScreenSecureState(Boolean(result?.secure));
169
+ } catch (error) {
170
+ base.handleNativeError(error);
171
+ }
172
+ };
173
+ const cleanup = (0, _utils.registerNativeHandlers)([[_NativeInterfaces.NATIVE_CALLBACKS.ON_SCREEN_SECURE_SET, handleScreenSecureSet], [_NativeInterfaces.NATIVE_CALLBACKS.ON_SCREEN_SECURE_STATUS, handleScreenSecureStatus], [_NativeInterfaces.NATIVE_CALLBACKS.ON_SCREEN_SECURE_ERROR, handleScreenSecureError], [_NativeInterfaces.NATIVE_CALLBACKS.ON_WEB_DATA_CLEARED, handleWebDataCleared], [_NativeInterfaces.NATIVE_CALLBACKS.ON_WEB_DATA_CLEAR_ERROR, handleWebDataClearError]]);
174
+ base.callNative(() => _NativeBridge.default.security.getScreenSecure());
175
+ return cleanup;
176
+ }, [base.setDataAndComplete, base.handleNativeError]);
177
+ const setScreenSecure = (0, _react.useCallback)(enable => {
178
+ base.callNative(() => _NativeBridge.default.security.setScreenSecure(enable));
179
+ }, [base.callNative]);
180
+ const clearWebData = (0, _react.useCallback)(() => {
181
+ base.callNative(() => _NativeBridge.default.security.clearWebData());
182
+ }, [base.callNative]);
183
+ return {
184
+ data: base.data,
185
+ loading: base.loading,
186
+ progress: base.progress,
187
+ error: base.error,
188
+ isWeb: base.isWeb,
189
+ isNative: base.isNative,
190
+ webFallbackActive: false,
191
+ webFallbackDisabled: false,
192
+ setWebFallback: base.setWebFallback,
193
+ clear: base.clear,
194
+ clearError: base.clearError,
195
+ screenSecure,
196
+ setScreenSecure,
197
+ clearWebData
198
+ };
199
+ };
200
+ exports.useDataProtection = useDataProtection;
@@ -1,2 +1,71 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.useDeviceInfo=void 0;var _react=require("react");var _NativeBridge=_interopRequireDefault(require("../utils/NativeBridge.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e};}/* eslint-disable react-compiler/react-compiler, react-hooks/exhaustive-deps */const useDeviceInfo=({webFallback}={})=>{const[deviceInfo,setDeviceInfo]=(0,_react.useState)(null);const[loading,setLoading]=(0,_react.useState)(true);const[error,setError]=(0,_react.useState)(null);const isNative=_NativeBridge.default.isAvailable();const[webFallbackState,setWebFallback]=(0,_react.useState)(true);const webFallbackResolved=webFallback!==undefined?webFallback!==false:webFallbackState;const webFallbackActive=!isNative&&webFallbackResolved;const webFallbackDisabled=!isNative&&!webFallbackResolved;(0,_react.useEffect)(()=>{if(typeof window==="undefined"){setLoading(false);return;}if(!_NativeBridge.default.isAvailable()){if(webFallbackDisabled){setLoading(false);return;}// Web fallback: derive info from browser APIs
2
- const ua=navigator.userAgent||"";setDeviceInfo({model:ua,manufacturer:"browser",platform:"web",screenWidth:screen.width*(window.devicePixelRatio||1),screenHeight:screen.height*(window.devicePixelRatio||1),screenDensity:window.devicePixelRatio||1,appInfo:null});setLoading(false);return;}if(!window.WebBridge){setError("WebBridge not initialized");setLoading(false);return;}window.WebBridge.getDeviceInfo().then(info=>{setDeviceInfo(info);setLoading(false);}).catch(err=>{setError(err.message||"Failed to get device info");setLoading(false);});},[webFallbackDisabled]);return{deviceInfo,loading,error,isNative,isWeb:!isNative,webFallbackActive,webFallbackDisabled,setWebFallback};};exports.useDeviceInfo=useDeviceInfo;
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useDeviceInfo = void 0;
7
+ var _react = require("react");
8
+ var _NativeBridge = _interopRequireDefault(require("../utils/NativeBridge.js"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ /* eslint-disable react-compiler/react-compiler, react-hooks/exhaustive-deps */
11
+
12
+ const useDeviceInfo = ({
13
+ webFallback
14
+ } = {}) => {
15
+ const [deviceInfo, setDeviceInfo] = (0, _react.useState)(null);
16
+ const [loading, setLoading] = (0, _react.useState)(true);
17
+ const [error, setError] = (0, _react.useState)(null);
18
+ const isNative = _NativeBridge.default.isAvailable();
19
+ const [webFallbackState, setWebFallback] = (0, _react.useState)(true);
20
+ const webFallbackResolved = webFallback !== undefined ? webFallback !== false : webFallbackState;
21
+ const webFallbackActive = !isNative && webFallbackResolved;
22
+ const webFallbackDisabled = !isNative && !webFallbackResolved;
23
+ (0, _react.useEffect)(() => {
24
+ if (typeof window === "undefined") {
25
+ setLoading(false);
26
+ return;
27
+ }
28
+ if (!_NativeBridge.default.isAvailable()) {
29
+ if (webFallbackDisabled) {
30
+ setLoading(false);
31
+ return;
32
+ }
33
+ // Web fallback: derive info from browser APIs
34
+ const ua = navigator.userAgent || "";
35
+ setDeviceInfo({
36
+ model: ua,
37
+ manufacturer: "browser",
38
+ platform: "web",
39
+ screenWidth: screen.width * (window.devicePixelRatio || 1),
40
+ screenHeight: screen.height * (window.devicePixelRatio || 1),
41
+ screenDensity: window.devicePixelRatio || 1,
42
+ appInfo: null
43
+ });
44
+ setLoading(false);
45
+ return;
46
+ }
47
+ if (!window.WebBridge) {
48
+ setError("WebBridge not initialized");
49
+ setLoading(false);
50
+ return;
51
+ }
52
+ window.WebBridge.getDeviceInfo().then(info => {
53
+ setDeviceInfo(info);
54
+ setLoading(false);
55
+ }).catch(err => {
56
+ setError(err.message || "Failed to get device info");
57
+ setLoading(false);
58
+ });
59
+ }, [webFallbackDisabled]);
60
+ return {
61
+ deviceInfo,
62
+ loading,
63
+ error,
64
+ isNative,
65
+ isWeb: !isNative,
66
+ webFallbackActive,
67
+ webFallbackDisabled,
68
+ setWebFallback
69
+ };
70
+ };
71
+ exports.useDeviceInfo = useDeviceInfo;