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.
- package/babel.native.config.cjs +8 -0
- package/bin/catalyst.js +49 -105
- package/changelog.md +8 -0
- package/dist/caching.js +1 -1
- package/dist/index.jsx +8 -0
- package/dist/logger.js +74 -3
- package/dist/native/androidSetup.js +300 -8
- package/dist/native/bridge/WebBridge.js +481 -59
- package/dist/native/bridge/constants/NativeInterfaces.js +290 -45
- package/dist/native/bridge/errors.js +250 -26
- package/dist/native/bridge/hooks/index.js +125 -1
- package/dist/native/bridge/hooks/useCamera.js +347 -9
- package/dist/native/bridge/hooks/useDataProtection.js +200 -2
- package/dist/native/bridge/hooks/useDeviceInfo.js +71 -2
- package/dist/native/bridge/hooks/useFilePicker.js +429 -2
- package/dist/native/bridge/hooks/useGoogleSignIn.js +81 -1
- package/dist/native/bridge/hooks/useHapticFeedback.js +196 -1
- package/dist/native/bridge/hooks/useIntent.js +95 -1
- package/dist/native/bridge/hooks/useNativeTransition.js +202 -27
- package/dist/native/bridge/hooks/useNetworkStatus.js +84 -3
- package/dist/native/bridge/hooks/useNotification.js +318 -2
- package/dist/native/bridge/hooks/useSafeArea.js +84 -2
- package/dist/native/bridge/hooks/useVideoStream.js +434 -6
- package/dist/native/bridge/hooks/utils.js +27 -1
- package/dist/native/bridge/hooks.js +16 -1
- package/dist/native/bridge/perf/collectors/ApiCollector.js +66 -3
- package/dist/native/bridge/perf/collectors/CacheCollector.js +186 -11
- package/dist/native/bridge/perf/collectors/HookCollector.js +141 -19
- package/dist/native/bridge/perf/collectors/InsightsCollector.js +481 -23
- package/dist/native/bridge/perf/collectors/InteractionCollector.js +245 -10
- package/dist/native/bridge/perf/collectors/KeyboardCollector.js +107 -8
- package/dist/native/bridge/perf/collectors/NavigationCollector.js +273 -32
- package/dist/native/bridge/perf/collectors/NetworkTimingCollector.js +178 -2
- package/dist/native/bridge/perf/collectors/RenderCollector.js +258 -14
- package/dist/native/bridge/perf/collectors/ScrollCollector.js +95 -9
- package/dist/native/bridge/perf/collectors/ThreadCollector.js +90 -6
- package/dist/native/bridge/perf/core/constants.js +103 -20
- package/dist/native/bridge/perf/core/measure.js +179 -30
- package/dist/native/bridge/perf/core/session.js +89 -23
- package/dist/native/bridge/perf/core/store.js +554 -1
- package/dist/native/bridge/perf/core/summary.js +174 -1
- package/dist/native/bridge/perf/core/traceExport.js +240 -1
- package/dist/native/bridge/perf/core/waterfalls.js +146 -1
- package/dist/native/bridge/perf/index.js +359 -38
- package/dist/native/bridge/safeArea.js +53 -5
- package/dist/native/bridge/standardizedHooks.js +595 -82
- package/dist/native/bridge/useBaseHook.js +274 -38
- package/dist/native/bridge/utils/CameraUtils.js +201 -56
- package/dist/native/bridge/utils/FileObjectConverter.js +129 -18
- package/dist/native/bridge/utils/NativeBridge.js +425 -141
- package/dist/native/buildAndroid/assets.js +510 -13
- package/dist/native/buildAndroid/build.js +296 -19
- package/dist/native/buildAndroid/config.js +87 -1
- package/dist/native/buildAndroid/index.js +374 -1
- package/dist/native/buildAppAndroid.js +34 -2
- package/dist/native/buildAppIos.js +62 -2
- package/dist/native/buildIos/assets.js +609 -8
- package/dist/native/buildIos/build.js +639 -20
- package/dist/native/buildIos/config.js +294 -12
- package/dist/native/buildIos/index.js +343 -6
- package/dist/native/buildIos/plugins.js +343 -16
- package/dist/native/internal-plugins/device-info-plugin/android/DeviceInfoPlugin.kt +43 -0
- package/dist/native/internal-plugins/device-info-plugin/ios/DeviceInfoPlugin.swift +28 -0
- package/dist/native/internal-plugins/device-info-plugin/manifest.json +19 -0
- package/dist/native/internalPluginUtils.js +232 -7
- package/dist/native/package.json +3 -0
- package/dist/native/plugin-bridge/PluginBridge.js +227 -1
- package/dist/native/pluginComposerAndroid.js +407 -23
- package/dist/native/pluginComposerIos.js +435 -11
- package/dist/native/renameAndroidProject.js +1094 -88
- package/dist/native/setupEmulatorIos.js +289 -22
- package/dist/native/setupServer.js +160 -19
- package/dist/native/terminalProgress.js +199 -11
- package/dist/native/utils.js +193 -15
- package/dist/offline/catalyst-sw.js +145 -1
- package/dist/offline/registerServiceWorker.js +33 -1
- package/dist/otel.js +375 -46
- package/dist/router/ClientRouter.js +14 -2
- package/dist/router/ServerRouter.js +9 -1
- package/dist/router.js +1 -1
- package/dist/scripts/build.js +112 -3
- package/dist/scripts/checkVersion.js +3 -1
- package/dist/scripts/cleanCache.js +30 -1
- package/dist/scripts/generateOfflineManifest.js +116 -1
- package/dist/scripts/loadEnvironmentVariables.js +32 -6
- package/dist/scripts/plugins.js +309 -1
- package/dist/scripts/preServerInit.js +13 -0
- package/dist/scripts/scriptUtils.js +54 -3
- package/dist/scripts/serve.js +51 -4
- package/dist/scripts/start.js +47 -10
- package/dist/scripts/validator.js +149 -1
- package/dist/sentry.cjs +127 -0
- package/dist/sentry.js +125 -5
- package/dist/server/expressServer.js +250 -5
- package/dist/server/manifestCache.js +36 -0
- package/dist/server/renderer/ChunkExtractor.js +144 -0
- package/dist/server/renderer/document/Body.jsx +59 -0
- package/dist/server/renderer/document/FastRefresh.jsx +20 -0
- package/dist/server/renderer/document/Head.jsx +60 -0
- package/dist/server/renderer/document/index.jsx +2 -0
- package/dist/server/renderer/extract.js +149 -31
- package/dist/server/renderer/handler.jsx +433 -0
- package/dist/server/renderer/index.js +8 -1
- package/dist/server/renderer/render.js +47 -0
- package/dist/server/utils/botDetectionMiddleware.js +29 -0
- package/dist/server/utils/cjsRequire.js +10 -0
- package/dist/server/utils/userAgentUtil.js +87 -9
- package/dist/server/utils/validator.js +164 -1
- package/dist/vite/FastRefresh.jsx +20 -0
- package/dist/vite/inject-cache-key-plugin.js +276 -0
- package/dist/vite/loadCustomViteConfig.js +22 -0
- package/dist/vite/manifest-categorization-plugin.js +455 -0
- package/dist/vite/node-loader.mjs +458 -0
- package/dist/vite/scssParams.js +21 -0
- package/dist/vite/vite.config.client.js +130 -0
- package/dist/vite/vite.config.js +422 -0
- package/dist/vite/vite.config.server.js +84 -0
- package/dist/web-router/components/MetaTag.jsx +34 -0
- package/dist/web-router/components/RouterDataProvider.jsx +332 -0
- package/dist/web-router/components/Split.jsx +200 -0
- package/dist/web-router/components/SplitInview.jsx +106 -0
- package/dist/web-router/components/SsrRequestContext.jsx +14 -0
- package/dist/web-router/context.jsx +12 -0
- package/dist/web-router/hooks.jsx +72 -0
- package/dist/web-router/types/components/MetaTag.d.ts +2 -0
- package/dist/web-router/types/components/RouterDataProvider.d.ts +95 -0
- package/dist/web-router/types/context.d.ts +14 -0
- package/dist/web-router/types/hooks.d.ts +1 -0
- package/dist/web-router/types/index.d.ts +3 -0
- package/dist/web-router/types/utils/metaDataUtils.d.ts +24 -0
- package/dist/web-router/utils/metaDataUtils.jsx +119 -0
- package/mcp_v2/conversion-tasks.json +35 -17
- package/mcp_v2/knowledge-base.json +124 -13
- package/mcp_v2/lib/helpers.js +10 -0
- package/mcp_v2/mcp.js +4 -4
- package/mcp_v2/package.json +1 -0
- package/mcp_v2/tools/build.js +116 -20
- package/mcp_v2/tools/conversion.js +106 -5
- package/mcp_v2/tools/tasks.js +18 -14
- package/package.json +35 -68
- package/babel.config.js +0 -32
- package/dist/index.js +0 -1
- package/dist/scripts/devBuild.js +0 -3
- package/dist/scripts/devServe.js +0 -3
- package/dist/scripts/loadScriptsBeforeServerStarts.js +0 -4
- package/dist/scripts/registerAliases.js +0 -6
- package/dist/server/renderer/document/Body.js +0 -11
- package/dist/server/renderer/document/Head.js +0 -9
- package/dist/server/renderer/document/index.js +0 -1
- package/dist/server/renderer/handler.js +0 -47
- package/dist/server/startServer.js +0 -57
- package/dist/webpack/babel-plugins/remove-client.plugin.js +0 -5
- package/dist/webpack/babel-plugins/remove-ssr.plugin.js +0 -5
- package/dist/webpack/babel.config.client.js +0 -1
- package/dist/webpack/babel.config.ssr.js +0 -1
- package/dist/webpack/base.babel.js +0 -7
- package/dist/webpack/development.client.babel.js +0 -10
- package/dist/webpack/production.client.babel.js +0 -4
- package/dist/webpack/production.ssr.babel.js +0 -8
- package/dist/webpack/scssParams.js +0 -9
|
@@ -1,47 +1,292 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isValidInterface = exports.isValidCommand = exports.isValidCallback = exports.getInterfacesByCategory = exports.default = exports.debugInterfaces = exports.TRANSPORT_TYPES = exports.RESPONSE_STATUS = exports.PERMISSION_STATUS = exports.NATIVE_COMMANDS = exports.NATIVE_CALLBACKS = exports.INTERFACE_CATEGORIES = exports.INTENT_STATES = exports.HAPTIC_FEEDBACK_TYPES = exports.FILE_PICKER_STATES = exports.CAMERA_SOURCE = exports.CAMERA_QUALITY = exports.CAMERA_FORMAT = exports.CAMERA_FLASH_MODE = exports.CAMERA_DEVICE = exports.ALL_INTERFACES = exports.ALL_COMMANDS = exports.ALL_CALLBACKS = void 0;
|
|
7
|
+
// Native Bridge Interface Constants
|
|
2
8
|
// Centralized definitions for all native interface communications
|
|
9
|
+
|
|
3
10
|
// Command Interfaces: Web → Native (outgoing commands)
|
|
4
|
-
const NATIVE_COMMANDS=exports.NATIVE_COMMANDS={
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
11
|
+
const NATIVE_COMMANDS = exports.NATIVE_COMMANDS = {
|
|
12
|
+
// Camera commands
|
|
13
|
+
OPEN_CAMERA: "openCamera",
|
|
14
|
+
REQUEST_CAMERA_PERMISSION: "requestCameraPermission",
|
|
15
|
+
// Video stream commands
|
|
16
|
+
START_VIDEO_STREAM: "startVideoStream",
|
|
17
|
+
STOP_VIDEO_STREAM: "stopVideoStream",
|
|
18
|
+
SET_VIDEO_STREAM_ZOOM: "setVideoStreamZoom",
|
|
19
|
+
SET_VIDEO_STREAM_TORCH: "setVideoStreamTorch",
|
|
20
|
+
SET_VIDEO_STREAM_FPS: "setVideoStreamFps",
|
|
21
|
+
FLIP_VIDEO_STREAM: "flipVideoStream",
|
|
22
|
+
// File commands
|
|
23
|
+
PICK_FILE: "pickFile",
|
|
24
|
+
OPEN_FILE_WITH_INTENT: "openFileWithIntent",
|
|
25
|
+
// Haptic feedback commands
|
|
26
|
+
REQUEST_HAPTIC_FEEDBACK: "requestHapticFeedback",
|
|
27
|
+
// Notification commands
|
|
28
|
+
SCHEDULE_LOCAL_NOTIFICATION: "scheduleLocalNotification",
|
|
29
|
+
CANCEL_LOCAL_NOTIFICATION: "cancelLocalNotification",
|
|
30
|
+
REQUEST_NOTIFICATION_PERMISSION: "requestNotificationPermission",
|
|
31
|
+
REGISTER_FOR_PUSH_NOTIFICATIONS: "registerForPushNotifications",
|
|
32
|
+
UPDATE_BADGE_COUNT: "updateBadgeCount",
|
|
33
|
+
SUBSCRIBE_TO_TOPIC: "subscribeToTopic",
|
|
34
|
+
UNSUBSCRIBE_FROM_TOPIC: "unsubscribeFromTopic",
|
|
35
|
+
GET_SUBSCRIBED_TOPICS: "getSubscribedTopics",
|
|
36
|
+
// Device info commands
|
|
37
|
+
GET_DEVICE_INFO: "getDeviceInfo",
|
|
38
|
+
// Network commands
|
|
39
|
+
GET_NETWORK_STATUS: "getNetworkStatus",
|
|
40
|
+
// Auth commands
|
|
41
|
+
GOOGLE_SIGN_IN: "googleSignIn",
|
|
42
|
+
// Transition commands
|
|
43
|
+
START_TRANSITION: "startTransition",
|
|
44
|
+
COMMIT_TRANSITION: "commitTransition",
|
|
45
|
+
CANCEL_TRANSITION: "cancelTransition",
|
|
46
|
+
// Safe area commands
|
|
47
|
+
GET_SAFE_AREA: "getSafeArea",
|
|
48
|
+
// Security commands
|
|
49
|
+
SET_SCREEN_SECURE: "setScreenSecure",
|
|
50
|
+
GET_SCREEN_SECURE: "getScreenSecure",
|
|
51
|
+
CLEAR_WEB_DATA: "clearWebData"
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// Callback Interfaces: Native → Web (incoming events/callbacks)
|
|
55
|
+
const NATIVE_CALLBACKS = exports.NATIVE_CALLBACKS = {
|
|
56
|
+
// Camera callbacks
|
|
57
|
+
CAMERA_PERMISSION_STATUS: "CAMERA_PERMISSION_STATUS",
|
|
58
|
+
ON_CAMERA_CAPTURE: "ON_CAMERA_CAPTURE",
|
|
59
|
+
ON_CAMERA_ERROR: "ON_CAMERA_ERROR",
|
|
60
|
+
// Video stream callbacks
|
|
61
|
+
ON_VIDEO_STREAM_READY: "ON_VIDEO_STREAM_READY",
|
|
62
|
+
ON_VIDEO_STREAM_STOPPED: "ON_VIDEO_STREAM_STOPPED",
|
|
63
|
+
ON_QR_DETECTED: "ON_QR_DETECTED",
|
|
64
|
+
ON_TORCH_CHANGED: "ON_TORCH_CHANGED",
|
|
65
|
+
ON_ZOOM_CHANGED: "ON_ZOOM_CHANGED",
|
|
66
|
+
// File picker callbacks
|
|
67
|
+
ON_FILE_PICKED: "ON_FILE_PICKED",
|
|
68
|
+
ON_FILE_PICK_ERROR: "ON_FILE_PICK_ERROR",
|
|
69
|
+
ON_FILE_PICK_CANCELLED: "ON_FILE_PICK_CANCELLED",
|
|
70
|
+
ON_FILE_PICK_STATE_UPDATE: "ON_FILE_PICK_STATE_UPDATE",
|
|
71
|
+
// Intent callbacks
|
|
72
|
+
ON_INTENT_SUCCESS: "ON_INTENT_SUCCESS",
|
|
73
|
+
ON_INTENT_ERROR: "ON_INTENT_ERROR",
|
|
74
|
+
ON_INTENT_CANCELLED: "ON_INTENT_CANCELLED",
|
|
75
|
+
// Haptic feedback callbacks
|
|
76
|
+
HAPTIC_FEEDBACK: "HAPTIC_FEEDBACK",
|
|
77
|
+
// Notification callbacks
|
|
78
|
+
NOTIFICATION_PERMISSION_STATUS: "NOTIFICATION_PERMISSION_STATUS",
|
|
79
|
+
LOCAL_NOTIFICATION_SCHEDULED: "LOCAL_NOTIFICATION_SCHEDULED",
|
|
80
|
+
LOCAL_NOTIFICATION_CANCELLED: "LOCAL_NOTIFICATION_CANCELLED",
|
|
81
|
+
PUSH_NOTIFICATION_TOKEN: "PUSH_NOTIFICATION_TOKEN",
|
|
82
|
+
NOTIFICATION_RECEIVED: "NOTIFICATION_RECEIVED",
|
|
83
|
+
NOTIFICATION_ACTION_PERFORMED: "NOTIFICATION_ACTION_PERFORMED",
|
|
84
|
+
NOTIFICATION_TAPPED: "NOTIFICATION_TAPPED",
|
|
85
|
+
TOPIC_SUBSCRIPTION_RESULT: "TOPIC_SUBSCRIPTION_RESULT",
|
|
86
|
+
SUBSCRIBED_TOPICS_RESULT: "SUBSCRIBED_TOPICS_RESULT",
|
|
87
|
+
// Device info callbacks
|
|
88
|
+
ON_DEVICE_INFO_SUCCESS: "ON_DEVICE_INFO_SUCCESS",
|
|
89
|
+
ON_DEVICE_INFO_ERROR: "ON_DEVICE_INFO_ERROR",
|
|
90
|
+
// Auth callbacks
|
|
91
|
+
ON_GOOGLE_SIGN_IN_SUCCESS: "ON_GOOGLE_SIGN_IN_SUCCESS",
|
|
92
|
+
ON_GOOGLE_SIGN_IN_ERROR: "ON_GOOGLE_SIGN_IN_ERROR",
|
|
93
|
+
ON_GOOGLE_SIGN_IN_CANCELLED: "ON_GOOGLE_SIGN_IN_CANCELLED",
|
|
94
|
+
// Network callbacks
|
|
95
|
+
NETWORK_STATUS_CHANGED: "NETWORK_STATUS_CHANGED",
|
|
96
|
+
// Safe area callbacks
|
|
97
|
+
ON_SAFE_AREA_INSETS_UPDATED: "ON_SAFE_AREA_INSETS_UPDATED",
|
|
98
|
+
// Transition callbacks
|
|
99
|
+
ON_TRANSITION_COMMITTED: "ON_TRANSITION_COMMITTED",
|
|
100
|
+
ON_TRANSITION_CANCELLED: "ON_TRANSITION_CANCELLED",
|
|
101
|
+
ON_TRANSITION_TIMEOUT: "ON_TRANSITION_TIMEOUT",
|
|
102
|
+
// Security callbacks
|
|
103
|
+
ON_SCREEN_SECURE_SET: "ON_SCREEN_SECURE_SET",
|
|
104
|
+
ON_SCREEN_SECURE_STATUS: "ON_SCREEN_SECURE_STATUS",
|
|
105
|
+
ON_SCREEN_SECURE_ERROR: "ON_SCREEN_SECURE_ERROR",
|
|
106
|
+
ON_WEB_DATA_CLEARED: "ON_WEB_DATA_CLEARED",
|
|
107
|
+
ON_WEB_DATA_CLEAR_ERROR: "ON_WEB_DATA_CLEAR_ERROR",
|
|
108
|
+
// Perf telemetry callbacks (native → web)
|
|
109
|
+
CATALYST_PERF_EVENT: "CATALYST_PERF_EVENT"
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
// Interface Categories for easier management
|
|
113
|
+
const INTERFACE_CATEGORIES = exports.INTERFACE_CATEGORIES = {
|
|
114
|
+
CAMERA: {
|
|
115
|
+
commands: [NATIVE_COMMANDS.OPEN_CAMERA, NATIVE_COMMANDS.REQUEST_CAMERA_PERMISSION],
|
|
116
|
+
callbacks: [NATIVE_CALLBACKS.CAMERA_PERMISSION_STATUS, NATIVE_CALLBACKS.ON_CAMERA_CAPTURE, NATIVE_CALLBACKS.ON_CAMERA_ERROR]
|
|
117
|
+
},
|
|
118
|
+
FILE: {
|
|
119
|
+
commands: [NATIVE_COMMANDS.PICK_FILE, NATIVE_COMMANDS.OPEN_FILE_WITH_INTENT],
|
|
120
|
+
callbacks: [NATIVE_CALLBACKS.ON_FILE_PICKED, NATIVE_CALLBACKS.ON_FILE_PICK_ERROR, NATIVE_CALLBACKS.ON_FILE_PICK_CANCELLED, NATIVE_CALLBACKS.ON_FILE_PICK_STATE_UPDATE]
|
|
121
|
+
},
|
|
122
|
+
INTENT: {
|
|
123
|
+
commands: [NATIVE_COMMANDS.OPEN_FILE_WITH_INTENT],
|
|
124
|
+
callbacks: [NATIVE_CALLBACKS.ON_INTENT_SUCCESS, NATIVE_CALLBACKS.ON_INTENT_ERROR, NATIVE_CALLBACKS.ON_INTENT_CANCELLED]
|
|
125
|
+
},
|
|
126
|
+
HAPTIC: {
|
|
127
|
+
commands: [NATIVE_COMMANDS.REQUEST_HAPTIC_FEEDBACK],
|
|
128
|
+
callbacks: [NATIVE_CALLBACKS.HAPTIC_FEEDBACK]
|
|
129
|
+
},
|
|
130
|
+
NOTIFICATION: {
|
|
131
|
+
commands: [NATIVE_COMMANDS.SCHEDULE_LOCAL_NOTIFICATION, NATIVE_COMMANDS.CANCEL_LOCAL_NOTIFICATION, NATIVE_COMMANDS.REQUEST_NOTIFICATION_PERMISSION, NATIVE_COMMANDS.REGISTER_FOR_PUSH_NOTIFICATIONS, NATIVE_COMMANDS.UPDATE_BADGE_COUNT, NATIVE_COMMANDS.SUBSCRIBE_TO_TOPIC, NATIVE_COMMANDS.UNSUBSCRIBE_FROM_TOPIC, NATIVE_COMMANDS.GET_SUBSCRIBED_TOPICS],
|
|
132
|
+
callbacks: [NATIVE_CALLBACKS.NOTIFICATION_PERMISSION_STATUS, NATIVE_CALLBACKS.LOCAL_NOTIFICATION_SCHEDULED, NATIVE_CALLBACKS.LOCAL_NOTIFICATION_CANCELLED, NATIVE_CALLBACKS.PUSH_NOTIFICATION_TOKEN, NATIVE_CALLBACKS.NOTIFICATION_RECEIVED, NATIVE_CALLBACKS.NOTIFICATION_ACTION_PERFORMED, NATIVE_CALLBACKS.NOTIFICATION_TAPPED, NATIVE_CALLBACKS.TOPIC_SUBSCRIPTION_RESULT, NATIVE_CALLBACKS.SUBSCRIBED_TOPICS_RESULT]
|
|
133
|
+
},
|
|
134
|
+
DEVICE_INFO: {
|
|
135
|
+
commands: [NATIVE_COMMANDS.GET_DEVICE_INFO],
|
|
136
|
+
callbacks: [NATIVE_CALLBACKS.ON_DEVICE_INFO_SUCCESS, NATIVE_CALLBACKS.ON_DEVICE_INFO_ERROR]
|
|
137
|
+
},
|
|
138
|
+
AUTH: {
|
|
139
|
+
commands: [NATIVE_COMMANDS.GOOGLE_SIGN_IN],
|
|
140
|
+
callbacks: [NATIVE_CALLBACKS.ON_GOOGLE_SIGN_IN_SUCCESS, NATIVE_CALLBACKS.ON_GOOGLE_SIGN_IN_ERROR, NATIVE_CALLBACKS.ON_GOOGLE_SIGN_IN_CANCELLED]
|
|
141
|
+
},
|
|
142
|
+
NETWORK: {
|
|
143
|
+
commands: [NATIVE_COMMANDS.GET_NETWORK_STATUS],
|
|
144
|
+
callbacks: [NATIVE_CALLBACKS.NETWORK_STATUS_CHANGED]
|
|
145
|
+
},
|
|
146
|
+
SECURITY: {
|
|
147
|
+
commands: [NATIVE_COMMANDS.SET_SCREEN_SECURE, NATIVE_COMMANDS.GET_SCREEN_SECURE, NATIVE_COMMANDS.CLEAR_WEB_DATA],
|
|
148
|
+
callbacks: [NATIVE_CALLBACKS.ON_SCREEN_SECURE_SET, NATIVE_CALLBACKS.ON_SCREEN_SECURE_ERROR, NATIVE_CALLBACKS.ON_WEB_DATA_CLEARED, NATIVE_CALLBACKS.ON_WEB_DATA_CLEAR_ERROR]
|
|
149
|
+
},
|
|
150
|
+
TRANSITION: {
|
|
151
|
+
commands: [NATIVE_COMMANDS.START_TRANSITION, NATIVE_COMMANDS.COMMIT_TRANSITION, NATIVE_COMMANDS.CANCEL_TRANSITION],
|
|
152
|
+
callbacks: [NATIVE_CALLBACKS.ON_TRANSITION_COMMITTED, NATIVE_CALLBACKS.ON_TRANSITION_CANCELLED, NATIVE_CALLBACKS.ON_TRANSITION_TIMEOUT]
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
// All available interfaces (for validation)
|
|
157
|
+
const ALL_COMMANDS = exports.ALL_COMMANDS = Object.values(NATIVE_COMMANDS);
|
|
158
|
+
const ALL_CALLBACKS = exports.ALL_CALLBACKS = Object.values(NATIVE_CALLBACKS);
|
|
159
|
+
const ALL_INTERFACES = exports.ALL_INTERFACES = [...ALL_COMMANDS, ...ALL_CALLBACKS];
|
|
160
|
+
|
|
161
|
+
// Permission status constants
|
|
162
|
+
const PERMISSION_STATUS = exports.PERMISSION_STATUS = {
|
|
163
|
+
GRANTED: "GRANTED",
|
|
164
|
+
DENIED: "DENIED",
|
|
165
|
+
NOT_DETERMINED: "NOT_DETERMINED",
|
|
166
|
+
RESTRICTED: "RESTRICTED"
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
// Haptic feedback types (matching Android implementation)
|
|
170
|
+
const HAPTIC_FEEDBACK_TYPES = exports.HAPTIC_FEEDBACK_TYPES = {
|
|
171
|
+
VIRTUAL_KEY: "VIRTUAL_KEY",
|
|
172
|
+
LONG_PRESS: "LONG_PRESS",
|
|
173
|
+
DEFAULT: "DEFAULT",
|
|
174
|
+
// Legacy types for backward compatibility
|
|
175
|
+
LIGHT: "VIRTUAL_KEY",
|
|
176
|
+
MEDIUM: "DEFAULT",
|
|
177
|
+
HEAVY: "LONG_PRESS"
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
// File picker state constants
|
|
181
|
+
const FILE_PICKER_STATES = exports.FILE_PICKER_STATES = {
|
|
182
|
+
OPENING: "opening",
|
|
183
|
+
PROCESSING: "processing",
|
|
184
|
+
IDLE: null
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
// Intent processing states
|
|
188
|
+
const INTENT_STATES = exports.INTENT_STATES = {
|
|
189
|
+
PROCESSING: "processing",
|
|
190
|
+
DOWNLOADING: "downloading",
|
|
191
|
+
OPENING: "opening",
|
|
192
|
+
IDLE: null
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
// Camera quality constants
|
|
196
|
+
const CAMERA_QUALITY = exports.CAMERA_QUALITY = {
|
|
197
|
+
HIGH: "high",
|
|
198
|
+
MEDIUM: "medium",
|
|
199
|
+
LOW: "low"
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
// Camera format constants
|
|
203
|
+
const CAMERA_FORMAT = exports.CAMERA_FORMAT = {
|
|
204
|
+
JPEG: "jpeg",
|
|
205
|
+
PNG: "png"
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
// Camera device constants
|
|
209
|
+
const CAMERA_DEVICE = exports.CAMERA_DEVICE = {
|
|
210
|
+
FRONT: "front",
|
|
211
|
+
REAR: "rear",
|
|
212
|
+
BACK: "rear" // Alias for rear
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
// Camera flash mode constants
|
|
216
|
+
const CAMERA_FLASH_MODE = exports.CAMERA_FLASH_MODE = {
|
|
217
|
+
AUTO: "auto",
|
|
218
|
+
ON: "on",
|
|
219
|
+
OFF: "off"
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
// Transport type constants (matching native implementation)
|
|
223
|
+
const TRANSPORT_TYPES = exports.TRANSPORT_TYPES = {
|
|
224
|
+
BASE64: "BASE64",
|
|
225
|
+
FILE_URL: "FILE_URL",
|
|
226
|
+
FRAMEWORK_SERVER: "FRAMEWORK_SERVER"
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
// Camera source constants
|
|
230
|
+
const CAMERA_SOURCE = exports.CAMERA_SOURCE = {
|
|
231
|
+
CAMERA: "camera",
|
|
232
|
+
FILE_PICKER: "file_picker"
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
// Response status constants
|
|
236
|
+
const RESPONSE_STATUS = exports.RESPONSE_STATUS = {
|
|
237
|
+
SUCCESS: "SUCCESS",
|
|
238
|
+
ERROR: "ERROR",
|
|
239
|
+
CANCELLED: "CANCELLED"
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
// Utility functions for interface validation
|
|
243
|
+
const isValidCommand = command => ALL_COMMANDS.includes(command);
|
|
244
|
+
exports.isValidCommand = isValidCommand;
|
|
245
|
+
const isValidCallback = callback => ALL_CALLBACKS.includes(callback);
|
|
246
|
+
exports.isValidCallback = isValidCallback;
|
|
247
|
+
const isValidInterface = interfaceName => ALL_INTERFACES.includes(interfaceName);
|
|
248
|
+
|
|
249
|
+
// Get interfaces by category
|
|
250
|
+
exports.isValidInterface = isValidInterface;
|
|
251
|
+
const getInterfacesByCategory = category => {
|
|
252
|
+
const categoryData = INTERFACE_CATEGORIES[category.toUpperCase()];
|
|
253
|
+
if (!categoryData) {
|
|
254
|
+
throw new Error(`Invalid category: ${category}`);
|
|
255
|
+
}
|
|
256
|
+
return categoryData;
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
// Debug helper to list all interfaces
|
|
260
|
+
exports.getInterfacesByCategory = getInterfacesByCategory;
|
|
261
|
+
const debugInterfaces = () => {
|
|
262
|
+
console.group("🌉 Native Bridge Interfaces");
|
|
263
|
+
console.log("Commands:", ALL_COMMANDS);
|
|
264
|
+
console.log("Callbacks:", ALL_CALLBACKS);
|
|
265
|
+
console.log("Categories:", Object.keys(INTERFACE_CATEGORIES));
|
|
266
|
+
console.groupEnd();
|
|
267
|
+
};
|
|
268
|
+
exports.debugInterfaces = debugInterfaces;
|
|
269
|
+
var _default = exports.default = {
|
|
270
|
+
NATIVE_COMMANDS,
|
|
271
|
+
NATIVE_CALLBACKS,
|
|
272
|
+
INTERFACE_CATEGORIES,
|
|
273
|
+
ALL_COMMANDS,
|
|
274
|
+
ALL_CALLBACKS,
|
|
275
|
+
ALL_INTERFACES,
|
|
276
|
+
PERMISSION_STATUS,
|
|
277
|
+
HAPTIC_FEEDBACK_TYPES,
|
|
278
|
+
FILE_PICKER_STATES,
|
|
279
|
+
INTENT_STATES,
|
|
280
|
+
CAMERA_QUALITY,
|
|
281
|
+
CAMERA_FORMAT,
|
|
282
|
+
CAMERA_DEVICE,
|
|
283
|
+
CAMERA_FLASH_MODE,
|
|
284
|
+
TRANSPORT_TYPES,
|
|
285
|
+
CAMERA_SOURCE,
|
|
286
|
+
RESPONSE_STATUS,
|
|
287
|
+
isValidCommand,
|
|
288
|
+
isValidCallback,
|
|
289
|
+
isValidInterface,
|
|
290
|
+
getInterfacesByCategory,
|
|
291
|
+
debugInterfaces
|
|
292
|
+
};
|
|
@@ -1,39 +1,263 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.translateError = exports.isDevelopment = exports.createStandardError = exports.ERROR_DEFINITIONS = exports.ERROR_CODES = exports.ERROR_CATEGORIES = void 0;
|
|
7
|
+
/**
|
|
2
8
|
* Standardized Error System for Catalyst Framework
|
|
3
9
|
* Translates native errors into web developer-friendly messages
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
// Error categories for logical grouping
|
|
13
|
+
const ERROR_CATEGORIES = exports.ERROR_CATEGORIES = {
|
|
14
|
+
PERMISSION: "PERMISSION",
|
|
15
|
+
NETWORK: "NETWORK",
|
|
16
|
+
FILE_SYSTEM: "FILE_SYSTEM",
|
|
17
|
+
USER_ACTION: "USER_ACTION",
|
|
18
|
+
VALIDATION: "VALIDATION",
|
|
19
|
+
SYSTEM: "SYSTEM",
|
|
20
|
+
UNKNOWN: "UNKNOWN"
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// Standardized error codes
|
|
24
|
+
const ERROR_CODES = exports.ERROR_CODES = {
|
|
25
|
+
// Permission errors
|
|
26
|
+
PERMISSION_DENIED: "PERMISSION_DENIED",
|
|
27
|
+
PERMISSION_REQUIRED: "PERMISSION_REQUIRED",
|
|
28
|
+
// Network errors
|
|
29
|
+
NETWORK_UNAVAILABLE: "NETWORK_UNAVAILABLE",
|
|
30
|
+
DOWNLOAD_FAILED: "DOWNLOAD_FAILED",
|
|
31
|
+
// File system errors
|
|
32
|
+
FILE_NOT_FOUND: "FILE_NOT_FOUND",
|
|
33
|
+
FILE_TOO_LARGE: "FILE_TOO_LARGE",
|
|
34
|
+
STORAGE_FULL: "STORAGE_FULL",
|
|
35
|
+
FILE_CORRUPTED: "FILE_CORRUPTED",
|
|
36
|
+
// User action errors
|
|
37
|
+
OPERATION_CANCELLED: "OPERATION_CANCELLED",
|
|
38
|
+
NO_FILE_SELECTED: "NO_FILE_SELECTED",
|
|
39
|
+
// Validation errors
|
|
40
|
+
INVALID_FILE_TYPE: "INVALID_FILE_TYPE",
|
|
41
|
+
INVALID_PARAMETERS: "INVALID_PARAMETERS",
|
|
42
|
+
// System errors
|
|
43
|
+
BRIDGE_UNAVAILABLE: "BRIDGE_UNAVAILABLE",
|
|
44
|
+
FEATURE_UNSUPPORTED: "FEATURE_UNSUPPORTED",
|
|
45
|
+
INTERNAL_ERROR: "INTERNAL_ERROR",
|
|
46
|
+
// Camera specific errors
|
|
47
|
+
CAMERA_UNAVAILABLE: "CAMERA_UNAVAILABLE",
|
|
48
|
+
CAMERA_IN_USE: "CAMERA_IN_USE"
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
// Error definitions with user-friendly messages and recovery actions
|
|
52
|
+
const ERROR_DEFINITIONS = exports.ERROR_DEFINITIONS = {
|
|
53
|
+
[ERROR_CODES.PERMISSION_DENIED]: {
|
|
54
|
+
category: ERROR_CATEGORIES.PERMISSION,
|
|
55
|
+
defaultMessage: "Permission denied",
|
|
56
|
+
defaultDetails: "Required permission was not granted by the user",
|
|
57
|
+
recoverable: true,
|
|
58
|
+
suggestedAction: "Grant permission in device settings and try again"
|
|
59
|
+
},
|
|
60
|
+
[ERROR_CODES.PERMISSION_REQUIRED]: {
|
|
61
|
+
category: ERROR_CATEGORIES.PERMISSION,
|
|
62
|
+
defaultMessage: "Permission required",
|
|
63
|
+
defaultDetails: "This operation requires additional permissions",
|
|
64
|
+
recoverable: true,
|
|
65
|
+
suggestedAction: "Grant the required permission to continue"
|
|
66
|
+
},
|
|
67
|
+
[ERROR_CODES.NETWORK_UNAVAILABLE]: {
|
|
68
|
+
category: ERROR_CATEGORIES.NETWORK,
|
|
69
|
+
defaultMessage: "No internet connection",
|
|
70
|
+
defaultDetails: "Network connection is required for this operation",
|
|
71
|
+
recoverable: true,
|
|
72
|
+
suggestedAction: "Check your internet connection and try again"
|
|
73
|
+
},
|
|
74
|
+
[ERROR_CODES.FILE_NOT_FOUND]: {
|
|
75
|
+
category: ERROR_CATEGORIES.FILE_SYSTEM,
|
|
76
|
+
defaultMessage: "File not found",
|
|
77
|
+
defaultDetails: "The requested file could not be located",
|
|
78
|
+
recoverable: false,
|
|
79
|
+
suggestedAction: "The file may have been moved or deleted"
|
|
80
|
+
},
|
|
81
|
+
[ERROR_CODES.FILE_TOO_LARGE]: {
|
|
82
|
+
category: ERROR_CATEGORIES.VALIDATION,
|
|
83
|
+
defaultMessage: "File too large",
|
|
84
|
+
defaultDetails: "File exceeds the maximum size limit",
|
|
85
|
+
recoverable: true,
|
|
86
|
+
suggestedAction: "Choose a smaller file or compress the current file"
|
|
87
|
+
},
|
|
88
|
+
[ERROR_CODES.STORAGE_FULL]: {
|
|
89
|
+
category: ERROR_CATEGORIES.FILE_SYSTEM,
|
|
90
|
+
defaultMessage: "Storage full",
|
|
91
|
+
defaultDetails: "Device storage is full and cannot save the file",
|
|
92
|
+
recoverable: true,
|
|
93
|
+
suggestedAction: "Free up some storage space and try again"
|
|
94
|
+
},
|
|
95
|
+
[ERROR_CODES.OPERATION_CANCELLED]: {
|
|
96
|
+
category: ERROR_CATEGORIES.USER_ACTION,
|
|
97
|
+
defaultMessage: "Operation cancelled",
|
|
98
|
+
defaultDetails: "The operation was cancelled by the user",
|
|
99
|
+
recoverable: true,
|
|
100
|
+
suggestedAction: "Try again if you want to complete the operation"
|
|
101
|
+
},
|
|
102
|
+
[ERROR_CODES.INVALID_FILE_TYPE]: {
|
|
103
|
+
category: ERROR_CATEGORIES.VALIDATION,
|
|
104
|
+
defaultMessage: "Invalid file type",
|
|
105
|
+
defaultDetails: "The selected file type is not supported",
|
|
106
|
+
recoverable: true,
|
|
107
|
+
suggestedAction: "Choose a file with a supported format"
|
|
108
|
+
},
|
|
109
|
+
[ERROR_CODES.BRIDGE_UNAVAILABLE]: {
|
|
110
|
+
category: ERROR_CATEGORIES.SYSTEM,
|
|
111
|
+
defaultMessage: "Native feature unavailable",
|
|
112
|
+
defaultDetails: "The native bridge is not available or not initialized",
|
|
113
|
+
recoverable: false,
|
|
114
|
+
suggestedAction: "Use web fallback if available"
|
|
115
|
+
},
|
|
116
|
+
[ERROR_CODES.FEATURE_UNSUPPORTED]: {
|
|
117
|
+
category: ERROR_CATEGORIES.SYSTEM,
|
|
118
|
+
defaultMessage: "Feature not supported",
|
|
119
|
+
defaultDetails: "This feature is not supported on the current platform",
|
|
120
|
+
recoverable: false,
|
|
121
|
+
suggestedAction: "Try using an alternative method or device"
|
|
122
|
+
},
|
|
123
|
+
[ERROR_CODES.CAMERA_UNAVAILABLE]: {
|
|
124
|
+
category: ERROR_CATEGORIES.SYSTEM,
|
|
125
|
+
defaultMessage: "Camera unavailable",
|
|
126
|
+
defaultDetails: "Camera hardware is not available or accessible",
|
|
127
|
+
recoverable: false,
|
|
128
|
+
suggestedAction: "Check if your device has a camera and try again"
|
|
129
|
+
},
|
|
130
|
+
[ERROR_CODES.CAMERA_IN_USE]: {
|
|
131
|
+
category: ERROR_CATEGORIES.SYSTEM,
|
|
132
|
+
defaultMessage: "Camera in use",
|
|
133
|
+
defaultDetails: "Camera is being used by another application",
|
|
134
|
+
recoverable: true,
|
|
135
|
+
suggestedAction: "Close other camera apps and try again"
|
|
136
|
+
},
|
|
137
|
+
[ERROR_CODES.INTERNAL_ERROR]: {
|
|
138
|
+
category: ERROR_CATEGORIES.UNKNOWN,
|
|
139
|
+
defaultMessage: "An unexpected error occurred",
|
|
140
|
+
defaultDetails: "An internal error occurred while processing the request",
|
|
141
|
+
recoverable: true,
|
|
142
|
+
suggestedAction: "Try again or contact support if the problem persists"
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
/**
|
|
15
147
|
* Create a standardized error object
|
|
16
148
|
* @param {string} code - Error code from ERROR_CODES
|
|
17
149
|
* @param {string} userMessage - Custom user-friendly message (optional)
|
|
18
150
|
* @param {any} nativeError - Original native error for debugging
|
|
19
151
|
* @param {string} customDetails - Custom details (optional)
|
|
20
152
|
* @returns {Object} Standardized error object
|
|
21
|
-
*/
|
|
153
|
+
*/
|
|
154
|
+
const createStandardError = (code, userMessage = null, nativeError = null, customDetails = null) => {
|
|
155
|
+
const errorInfo = ERROR_DEFINITIONS[code] || ERROR_DEFINITIONS[ERROR_CODES.INTERNAL_ERROR];
|
|
156
|
+
return {
|
|
157
|
+
code,
|
|
158
|
+
category: errorInfo.category,
|
|
159
|
+
message: userMessage || errorInfo.defaultMessage,
|
|
160
|
+
details: customDetails || errorInfo.defaultDetails,
|
|
161
|
+
recoverable: errorInfo.recoverable,
|
|
162
|
+
action: errorInfo.suggestedAction,
|
|
163
|
+
nativeError: nativeError,
|
|
164
|
+
timestamp: new Date().toISOString()
|
|
165
|
+
};
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
/**
|
|
22
169
|
* Translate native error to standardized error
|
|
23
170
|
* @param {any} nativeError - Native error from Android/iOS
|
|
24
171
|
* @returns {Object} Standardized error object
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
172
|
+
*/
|
|
173
|
+
exports.createStandardError = createStandardError;
|
|
174
|
+
const translateError = nativeError => {
|
|
175
|
+
if (!nativeError) {
|
|
176
|
+
return createStandardError(ERROR_CODES.INTERNAL_ERROR, null, nativeError);
|
|
177
|
+
}
|
|
178
|
+
const errorString = nativeError.toString().toLowerCase();
|
|
179
|
+
if (errorString.includes("disabled") && errorString.includes("config")) {
|
|
180
|
+
return createStandardError(ERROR_CODES.FEATURE_UNSUPPORTED, nativeError.toString(), nativeError);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Permission errors
|
|
184
|
+
if (errorString.includes("permission") && errorString.includes("denied")) {
|
|
185
|
+
if (errorString.includes("camera")) {
|
|
186
|
+
return createStandardError(ERROR_CODES.PERMISSION_DENIED, "Camera permission denied", nativeError);
|
|
187
|
+
}
|
|
188
|
+
if (errorString.includes("storage") || errorString.includes("external_storage")) {
|
|
189
|
+
return createStandardError(ERROR_CODES.PERMISSION_DENIED, "Storage permission denied", nativeError);
|
|
190
|
+
}
|
|
191
|
+
return createStandardError(ERROR_CODES.PERMISSION_DENIED, null, nativeError);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// File system errors
|
|
195
|
+
if (errorString.includes("filenotfound") || errorString.includes("file not found")) {
|
|
196
|
+
return createStandardError(ERROR_CODES.FILE_NOT_FOUND, null, nativeError);
|
|
197
|
+
}
|
|
198
|
+
if (errorString.includes("storage") && errorString.includes("full")) {
|
|
199
|
+
return createStandardError(ERROR_CODES.STORAGE_FULL, null, nativeError);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Network errors
|
|
203
|
+
if (errorString.includes("network") || errorString.includes("connection") || errorString.includes("internet")) {
|
|
204
|
+
return createStandardError(ERROR_CODES.NETWORK_UNAVAILABLE, null, nativeError);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// User cancellation
|
|
208
|
+
if (errorString.includes("cancel") || errorString.includes("abort")) {
|
|
209
|
+
return createStandardError(ERROR_CODES.OPERATION_CANCELLED, null, nativeError);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// Camera specific errors
|
|
213
|
+
if (errorString.includes("camera")) {
|
|
214
|
+
if (errorString.includes("unavailable") || errorString.includes("not available")) {
|
|
215
|
+
return createStandardError(ERROR_CODES.CAMERA_UNAVAILABLE, null, nativeError);
|
|
216
|
+
}
|
|
217
|
+
if (errorString.includes("in use") || errorString.includes("busy")) {
|
|
218
|
+
return createStandardError(ERROR_CODES.CAMERA_IN_USE, null, nativeError);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Activity/Intent errors (Android)
|
|
223
|
+
if (errorString.includes("activitynotfound")) {
|
|
224
|
+
return createStandardError(ERROR_CODES.FEATURE_UNSUPPORTED, "No app available to handle this request", nativeError);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// iOS specific error codes
|
|
228
|
+
if (typeof nativeError === "object" && nativeError.code && nativeError.domain) {
|
|
229
|
+
// Camera errors (iOS)
|
|
230
|
+
if (nativeError.domain === "AVCaptureSessionErrorDomain") {
|
|
231
|
+
if (nativeError.code === -11814) {
|
|
232
|
+
return createStandardError(ERROR_CODES.PERMISSION_DENIED, "Camera access denied", nativeError);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Network errors (iOS)
|
|
237
|
+
if (nativeError.domain === "NSURLErrorDomain") {
|
|
238
|
+
if (nativeError.code === -1009) {
|
|
239
|
+
return createStandardError(ERROR_CODES.NETWORK_UNAVAILABLE, null, nativeError);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// File system errors (iOS)
|
|
244
|
+
if (nativeError.domain === "NSCocoaErrorDomain") {
|
|
245
|
+
if (nativeError.code === 260) {
|
|
246
|
+
return createStandardError(ERROR_CODES.FILE_NOT_FOUND, null, nativeError);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Default to internal error
|
|
252
|
+
return createStandardError(ERROR_CODES.INTERNAL_ERROR, null, nativeError);
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
/**
|
|
37
256
|
* Check if development mode is enabled
|
|
38
257
|
* @returns {boolean} True if in development mode
|
|
39
|
-
*/
|
|
258
|
+
*/
|
|
259
|
+
exports.translateError = translateError;
|
|
260
|
+
const isDevelopment = () => {
|
|
261
|
+
return typeof process !== "undefined" && process.env && process.env.NODE_ENV === "development";
|
|
262
|
+
};
|
|
263
|
+
exports.isDevelopment = isDevelopment;
|