catalyst-core 0.2.0-beta.3 → 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 (160) 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/androidSetup.js +300 -8
  8. package/dist/native/bridge/WebBridge.js +481 -59
  9. package/dist/native/bridge/constants/NativeInterfaces.js +290 -45
  10. package/dist/native/bridge/errors.js +250 -26
  11. package/dist/native/bridge/hooks/index.js +125 -1
  12. package/dist/native/bridge/hooks/useCamera.js +347 -9
  13. package/dist/native/bridge/hooks/useDataProtection.js +200 -2
  14. package/dist/native/bridge/hooks/useDeviceInfo.js +71 -2
  15. package/dist/native/bridge/hooks/useFilePicker.js +429 -2
  16. package/dist/native/bridge/hooks/useGoogleSignIn.js +81 -1
  17. package/dist/native/bridge/hooks/useHapticFeedback.js +196 -1
  18. package/dist/native/bridge/hooks/useIntent.js +95 -1
  19. package/dist/native/bridge/hooks/useNativeTransition.js +202 -27
  20. package/dist/native/bridge/hooks/useNetworkStatus.js +84 -3
  21. package/dist/native/bridge/hooks/useNotification.js +318 -2
  22. package/dist/native/bridge/hooks/useSafeArea.js +84 -2
  23. package/dist/native/bridge/hooks/useVideoStream.js +434 -6
  24. package/dist/native/bridge/hooks/utils.js +27 -1
  25. package/dist/native/bridge/hooks.js +16 -1
  26. package/dist/native/bridge/perf/collectors/ApiCollector.js +66 -3
  27. package/dist/native/bridge/perf/collectors/CacheCollector.js +186 -11
  28. package/dist/native/bridge/perf/collectors/HookCollector.js +141 -19
  29. package/dist/native/bridge/perf/collectors/InsightsCollector.js +481 -23
  30. package/dist/native/bridge/perf/collectors/InteractionCollector.js +245 -10
  31. package/dist/native/bridge/perf/collectors/KeyboardCollector.js +107 -8
  32. package/dist/native/bridge/perf/collectors/NavigationCollector.js +273 -32
  33. package/dist/native/bridge/perf/collectors/NetworkTimingCollector.js +178 -2
  34. package/dist/native/bridge/perf/collectors/RenderCollector.js +258 -14
  35. package/dist/native/bridge/perf/collectors/ScrollCollector.js +95 -9
  36. package/dist/native/bridge/perf/collectors/ThreadCollector.js +90 -6
  37. package/dist/native/bridge/perf/core/constants.js +103 -20
  38. package/dist/native/bridge/perf/core/measure.js +179 -30
  39. package/dist/native/bridge/perf/core/session.js +89 -23
  40. package/dist/native/bridge/perf/core/store.js +554 -1
  41. package/dist/native/bridge/perf/core/summary.js +174 -1
  42. package/dist/native/bridge/perf/core/traceExport.js +240 -1
  43. package/dist/native/bridge/perf/core/waterfalls.js +146 -1
  44. package/dist/native/bridge/perf/index.js +359 -38
  45. package/dist/native/bridge/safeArea.js +53 -5
  46. package/dist/native/bridge/standardizedHooks.js +595 -82
  47. package/dist/native/bridge/useBaseHook.js +274 -38
  48. package/dist/native/bridge/utils/CameraUtils.js +201 -56
  49. package/dist/native/bridge/utils/FileObjectConverter.js +129 -18
  50. package/dist/native/bridge/utils/NativeBridge.js +425 -141
  51. package/dist/native/buildAndroid/assets.js +510 -13
  52. package/dist/native/buildAndroid/build.js +296 -19
  53. package/dist/native/buildAndroid/config.js +87 -1
  54. package/dist/native/buildAndroid/index.js +374 -1
  55. package/dist/native/buildAppAndroid.js +34 -2
  56. package/dist/native/buildAppIos.js +62 -2
  57. package/dist/native/buildIos/assets.js +609 -8
  58. package/dist/native/buildIos/build.js +639 -20
  59. package/dist/native/buildIos/config.js +294 -12
  60. package/dist/native/buildIos/index.js +343 -6
  61. package/dist/native/buildIos/plugins.js +343 -16
  62. package/dist/native/internal-plugins/device-info-plugin/android/DeviceInfoPlugin.kt +43 -0
  63. package/dist/native/internal-plugins/device-info-plugin/ios/DeviceInfoPlugin.swift +28 -0
  64. package/dist/native/internal-plugins/device-info-plugin/manifest.json +19 -0
  65. package/dist/native/internalPluginUtils.js +232 -7
  66. package/dist/native/package.json +3 -0
  67. package/dist/native/plugin-bridge/PluginBridge.js +227 -1
  68. package/dist/native/pluginComposerAndroid.js +407 -23
  69. package/dist/native/pluginComposerIos.js +435 -11
  70. package/dist/native/renameAndroidProject.js +1094 -88
  71. package/dist/native/setupEmulatorIos.js +289 -22
  72. package/dist/native/setupServer.js +160 -19
  73. package/dist/native/terminalProgress.js +199 -11
  74. package/dist/native/utils.js +193 -15
  75. package/dist/offline/catalyst-sw.js +145 -1
  76. package/dist/offline/registerServiceWorker.js +33 -1
  77. package/dist/otel.js +375 -46
  78. package/dist/router/ClientRouter.js +14 -2
  79. package/dist/router/ServerRouter.js +9 -1
  80. package/dist/router.js +1 -1
  81. package/dist/scripts/build.js +112 -3
  82. package/dist/scripts/checkVersion.js +3 -1
  83. package/dist/scripts/cleanCache.js +30 -1
  84. package/dist/scripts/generateOfflineManifest.js +116 -1
  85. package/dist/scripts/loadEnvironmentVariables.js +32 -6
  86. package/dist/scripts/plugins.js +309 -1
  87. package/dist/scripts/preServerInit.js +13 -0
  88. package/dist/scripts/scriptUtils.js +54 -3
  89. package/dist/scripts/serve.js +51 -4
  90. package/dist/scripts/start.js +47 -10
  91. package/dist/scripts/validator.js +149 -1
  92. package/dist/sentry.cjs +127 -0
  93. package/dist/sentry.js +125 -5
  94. package/dist/server/expressServer.js +250 -5
  95. package/dist/server/manifestCache.js +36 -0
  96. package/dist/server/renderer/ChunkExtractor.js +144 -0
  97. package/dist/server/renderer/document/Body.jsx +59 -0
  98. package/dist/server/renderer/document/FastRefresh.jsx +20 -0
  99. package/dist/server/renderer/document/Head.jsx +60 -0
  100. package/dist/server/renderer/document/index.jsx +2 -0
  101. package/dist/server/renderer/extract.js +149 -31
  102. package/dist/server/renderer/handler.jsx +433 -0
  103. package/dist/server/renderer/index.js +8 -1
  104. package/dist/server/renderer/render.js +47 -0
  105. package/dist/server/utils/botDetectionMiddleware.js +29 -0
  106. package/dist/server/utils/cjsRequire.js +10 -0
  107. package/dist/server/utils/userAgentUtil.js +87 -9
  108. package/dist/server/utils/validator.js +164 -1
  109. package/dist/vite/FastRefresh.jsx +20 -0
  110. package/dist/vite/inject-cache-key-plugin.js +276 -0
  111. package/dist/vite/loadCustomViteConfig.js +22 -0
  112. package/dist/vite/manifest-categorization-plugin.js +455 -0
  113. package/dist/vite/node-loader.mjs +458 -0
  114. package/dist/vite/scssParams.js +21 -0
  115. package/dist/vite/vite.config.client.js +130 -0
  116. package/dist/vite/vite.config.js +422 -0
  117. package/dist/vite/vite.config.server.js +84 -0
  118. package/dist/web-router/components/MetaTag.jsx +34 -0
  119. package/dist/web-router/components/RouterDataProvider.jsx +332 -0
  120. package/dist/web-router/components/Split.jsx +200 -0
  121. package/dist/web-router/components/SplitInview.jsx +106 -0
  122. package/dist/web-router/components/SsrRequestContext.jsx +14 -0
  123. package/dist/web-router/context.jsx +12 -0
  124. package/dist/web-router/hooks.jsx +72 -0
  125. package/dist/web-router/types/components/MetaTag.d.ts +2 -0
  126. package/dist/web-router/types/components/RouterDataProvider.d.ts +95 -0
  127. package/dist/web-router/types/context.d.ts +14 -0
  128. package/dist/web-router/types/hooks.d.ts +1 -0
  129. package/dist/web-router/types/index.d.ts +3 -0
  130. package/dist/web-router/types/utils/metaDataUtils.d.ts +24 -0
  131. package/dist/web-router/utils/metaDataUtils.jsx +119 -0
  132. package/mcp_v2/conversion-tasks.json +35 -17
  133. package/mcp_v2/knowledge-base.json +124 -13
  134. package/mcp_v2/lib/helpers.js +10 -0
  135. package/mcp_v2/mcp.js +4 -4
  136. package/mcp_v2/package.json +1 -0
  137. package/mcp_v2/tools/build.js +116 -20
  138. package/mcp_v2/tools/conversion.js +106 -5
  139. package/mcp_v2/tools/tasks.js +18 -14
  140. package/package.json +35 -68
  141. package/babel.config.js +0 -32
  142. package/dist/index.js +0 -1
  143. package/dist/scripts/devBuild.js +0 -3
  144. package/dist/scripts/devServe.js +0 -3
  145. package/dist/scripts/loadScriptsBeforeServerStarts.js +0 -4
  146. package/dist/scripts/registerAliases.js +0 -6
  147. package/dist/server/renderer/document/Body.js +0 -11
  148. package/dist/server/renderer/document/Head.js +0 -9
  149. package/dist/server/renderer/document/index.js +0 -1
  150. package/dist/server/renderer/handler.js +0 -47
  151. package/dist/server/startServer.js +0 -57
  152. package/dist/webpack/babel-plugins/remove-client.plugin.js +0 -5
  153. package/dist/webpack/babel-plugins/remove-ssr.plugin.js +0 -5
  154. package/dist/webpack/babel.config.client.js +0 -1
  155. package/dist/webpack/babel.config.ssr.js +0 -1
  156. package/dist/webpack/base.babel.js +0 -7
  157. package/dist/webpack/development.client.babel.js +0 -10
  158. package/dist/webpack/production.client.babel.js +0 -4
  159. package/dist/webpack/production.ssr.babel.js +0 -8
  160. 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;