@rn-bridge-tools/expo 0.0.5 → 0.0.7

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/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import * as react_native_webview_lib_WebViewTypes_js from 'react-native-webview/lib/WebViewTypes.js';
2
+ import * as _webview_bridge_react_native from '@webview-bridge/react-native';
1
3
  import React from 'react';
2
4
  import { WebViewProps } from 'react-native-webview';
3
5
  import { HandlerOptions, BridgeToolsAction, BridgeToolsEvent, BridgeToolsEvents, CameraNamespace, LocationNamespace, FileNamespace, ShareNamespace, DeviceNamespace, StatusBarNamespace, KeyboardNamespace, HapticNamespace, ClipboardNamespace, ScannerNamespace, AuthNamespace, IAPNamespace, PushNamespace, PermissionNamespace, PreferenceNamespace, NavigationNamespace, BrowserNamespace } from '@rn-bridge-tools/core';
@@ -13,6 +15,15 @@ interface WebViewBridgeProps extends Omit<WebViewProps, 'ref'> {
13
15
  interface WebViewBridgeRef {
14
16
  emit: <E extends BridgeToolsEvent>(event: E, data: BridgeToolsEvents[E]) => void;
15
17
  }
18
+ declare function createBridgeWebView(handlers: HandlerMap, customHandlers?: Partial<Record<BridgeToolsAction, HandlerFn>>): {
19
+ postMessage: <EventName extends string | number | symbol, Args extends EventName extends string | number | symbol ? _webview_bridge_react_native.ParserSchema<any>[EventName]["validate"] extends (data: unknown) => unknown ? ReturnType<_webview_bridge_react_native.ParserSchema<any>[EventName]["validate"]> : _webview_bridge_react_native.Primitive | Record<string, _webview_bridge_react_native.Primitive> : never>(eventName: EventName, args: Args, options?: {
20
+ broadcast: boolean;
21
+ }) => void;
22
+ WebView: React.ForwardRefExoticComponent<react_native_webview_lib_WebViewTypes_js.IOSWebViewProps & react_native_webview_lib_WebViewTypes_js.AndroidWebViewProps & react_native_webview_lib_WebViewTypes_js.WindowsWebViewProps & React.RefAttributes<_webview_bridge_react_native.BridgeWebView>>;
23
+ linkWebMethod<T>(): {
24
+ current: _webview_bridge_react_native.WebMethod<T>;
25
+ };
26
+ };
16
27
  declare const WebViewBridge: React.ForwardRefExoticComponent<WebViewBridgeProps & React.RefAttributes<WebViewBridgeRef>>;
17
28
 
18
29
  declare const cameraHandlers: {
@@ -110,4 +121,4 @@ declare const browserHandlers: {
110
121
  'browser.openInternal': (payload: BrowserNamespace["browser.openInternal"]["request"]) => Promise<BrowserNamespace["browser.openInternal"]["response"]>;
111
122
  };
112
123
 
113
- export { type HandlerFn, type HandlerMap, WebViewBridge, type WebViewBridgeProps, type WebViewBridgeRef, authHandlers, browserHandlers, cameraHandlers, clipboardHandlers, createDefaultHandlers, deviceHandlers, fileHandlers, hapticHandlers, iapHandlers, keyboardHandlers, locationHandlers, navigationHandlers, permissionHandlers, preferenceHandlers, pushHandlers, scannerHandlers, shareHandlers, statusbarHandlers };
124
+ export { type HandlerFn, type HandlerMap, WebViewBridge, type WebViewBridgeProps, type WebViewBridgeRef, authHandlers, browserHandlers, cameraHandlers, clipboardHandlers, createBridgeWebView, createDefaultHandlers, deviceHandlers, fileHandlers, hapticHandlers, iapHandlers, keyboardHandlers, locationHandlers, navigationHandlers, permissionHandlers, preferenceHandlers, pushHandlers, scannerHandlers, shareHandlers, statusbarHandlers };
package/dist/index.js CHANGED
@@ -25,6 +25,7 @@ __export(index_exports, {
25
25
  browserHandlers: () => browserHandlers,
26
26
  cameraHandlers: () => cameraHandlers,
27
27
  clipboardHandlers: () => clipboardHandlers,
28
+ createBridgeWebView: () => createBridgeWebView,
28
29
  createDefaultHandlers: () => createDefaultHandlers,
29
30
  deviceHandlers: () => deviceHandlers,
30
31
  fileHandlers: () => fileHandlers,
@@ -46,28 +47,27 @@ module.exports = __toCommonJS(index_exports);
46
47
  var import_react = require("react");
47
48
  var import_react_native = require("@webview-bridge/react-native");
48
49
  var import_jsx_runtime = require("react/jsx-runtime");
50
+ function createBridgeWebView(handlers, customHandlers) {
51
+ const allHandlers = {};
52
+ const merged = { ...handlers, ...customHandlers };
53
+ for (const [key, handler] of Object.entries(merged)) {
54
+ if (handler) {
55
+ allHandlers[key] = async (...args) => {
56
+ const payload = args[0] ?? {};
57
+ return handler(payload);
58
+ };
59
+ }
60
+ }
61
+ const appBridge = (0, import_react_native.bridge)(allHandlers);
62
+ return (0, import_react_native.createWebView)({ bridge: appBridge });
63
+ }
49
64
  var WebViewBridge = (0, import_react.forwardRef)(
50
65
  function WebViewBridge2({ handlers, customHandlers, ...webViewProps }, ref) {
51
- const handlersRef = (0, import_react.useRef)(handlers);
52
- const customRef = (0, import_react.useRef)(customHandlers);
53
- const { InternalWebView, postMessage } = (0, import_react.useMemo)(() => {
54
- const allHandlers = {};
55
- const mergedHandlers = { ...handlersRef.current, ...customRef.current };
56
- for (const [key, handler] of Object.entries(mergedHandlers)) {
57
- if (handler) {
58
- allHandlers[key] = async (...args) => {
59
- const payload = args[0] ?? {};
60
- return handler(payload);
61
- };
62
- }
63
- }
64
- const appBridge = (0, import_react_native.bridge)(allHandlers);
65
- const result = (0, import_react_native.createWebView)({
66
- bridge: appBridge,
67
- debug: __DEV__ ?? false
68
- });
69
- return { InternalWebView: result.WebView, postMessage: result.postMessage };
70
- }, []);
66
+ const setupRef = (0, import_react.useRef)(null);
67
+ if (!setupRef.current) {
68
+ setupRef.current = createBridgeWebView(handlers, customHandlers);
69
+ }
70
+ const { WebView: InternalWebView, postMessage } = setupRef.current;
71
71
  (0, import_react.useImperativeHandle)(
72
72
  ref,
73
73
  () => ({
@@ -827,6 +827,7 @@ function createDefaultHandlers(options = {}) {
827
827
  browserHandlers,
828
828
  cameraHandlers,
829
829
  clipboardHandlers,
830
+ createBridgeWebView,
830
831
  createDefaultHandlers,
831
832
  deviceHandlers,
832
833
  fileHandlers,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/WebViewBridge.tsx","../src/handlers/camera.ts","../src/handlers/location.ts","../src/handlers/file.ts","../src/handlers/share.ts","../src/handlers/device.ts","../src/handlers/statusbar.ts","../src/handlers/keyboard.ts","../src/handlers/haptic.ts","../src/handlers/clipboard.ts","../src/handlers/scanner.ts","../src/handlers/auth.ts","../src/handlers/iap.ts","../src/handlers/push.ts","../src/handlers/permission.ts","../src/handlers/preference.ts","../src/handlers/navigation.ts","../src/handlers/browser.ts","../src/createHandlers.ts"],"sourcesContent":["export { WebViewBridge } from './WebViewBridge.js';\nexport type { WebViewBridgeProps, WebViewBridgeRef } from './WebViewBridge.js';\nexport { createDefaultHandlers } from './createHandlers.js';\nexport type { HandlerFn, HandlerMap } from './createHandlers.js';\n\n// Re-export handler maps for advanced usage\nexport { cameraHandlers } from './handlers/camera.js';\nexport { locationHandlers } from './handlers/location.js';\nexport { fileHandlers } from './handlers/file.js';\nexport { shareHandlers } from './handlers/share.js';\nexport { deviceHandlers } from './handlers/device.js';\nexport { statusbarHandlers } from './handlers/statusbar.js';\nexport { keyboardHandlers } from './handlers/keyboard.js';\nexport { hapticHandlers } from './handlers/haptic.js';\nexport { clipboardHandlers } from './handlers/clipboard.js';\nexport { scannerHandlers } from './handlers/scanner.js';\nexport { authHandlers } from './handlers/auth.js';\nexport { iapHandlers } from './handlers/iap.js';\nexport { pushHandlers } from './handlers/push.js';\nexport { permissionHandlers } from './handlers/permission.js';\nexport { preferenceHandlers } from './handlers/preference.js';\nexport { navigationHandlers } from './handlers/navigation.js';\nexport { browserHandlers } from './handlers/browser.js';\n","import React, { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';\nimport { bridge, createWebView } from '@webview-bridge/react-native';\nimport type { WebViewProps } from 'react-native-webview';\nimport type { BridgeToolsAction, BridgeToolsEvents, BridgeToolsEvent } from '@rn-bridge-tools/core';\n\ndeclare const __DEV__: boolean | undefined;\n\nimport type { HandlerFn, HandlerMap } from './createHandlers.js';\n\nexport interface WebViewBridgeProps extends Omit<WebViewProps, 'ref'> {\n handlers: HandlerMap;\n customHandlers?: Partial<Record<BridgeToolsAction, HandlerFn>>;\n}\n\nexport interface WebViewBridgeRef {\n emit: <E extends BridgeToolsEvent>(event: E, data: BridgeToolsEvents[E]) => void;\n}\n\nexport const WebViewBridge = forwardRef<WebViewBridgeRef, WebViewBridgeProps>(\n function WebViewBridge({ handlers, customHandlers, ...webViewProps }, ref) {\n const handlersRef = useRef(handlers);\n const customRef = useRef(customHandlers);\n\n const { InternalWebView, postMessage } = useMemo(() => {\n const allHandlers: Record<string, (...args: unknown[]) => Promise<unknown>> = {};\n\n const mergedHandlers = { ...handlersRef.current, ...customRef.current };\n for (const [key, handler] of Object.entries(mergedHandlers)) {\n if (handler) {\n allHandlers[key] = async (...args: unknown[]) => {\n const payload = args[0] ?? {};\n return (handler as (p: unknown) => Promise<unknown>)(payload);\n };\n }\n }\n\n const appBridge = bridge(allHandlers);\n const result = createWebView({\n bridge: appBridge,\n debug: __DEV__ ?? false,\n });\n return { InternalWebView: result.WebView, postMessage: result.postMessage };\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n emit: <E extends BridgeToolsEvent>(event: E, data: BridgeToolsEvents[E]) => {\n postMessage(event, data as never);\n },\n }),\n [postMessage],\n );\n\n return <InternalWebView {...webViewProps} />;\n },\n);\n","import type { CameraNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ninterface ImagePickerModule {\n launchCameraAsync: (opts: {\n quality?: number;\n cameraType?: unknown;\n allowsEditing?: boolean;\n }) => Promise<{\n canceled: boolean;\n assets: Array<{\n uri: string;\n width: number;\n height: number;\n fileSize?: number;\n mimeType?: string | null;\n }>;\n }>;\n launchImageLibraryAsync: (opts: {\n allowsMultipleSelection?: boolean;\n quality?: number;\n selectionLimit?: number;\n }) => Promise<{\n canceled: boolean;\n assets: Array<{\n uri: string;\n width: number;\n height: number;\n fileSize?: number;\n mimeType?: string | null;\n }>;\n }>;\n CameraType: { front: unknown; back: unknown };\n}\n\nexport const cameraHandlers = {\n 'camera.take': async (\n payload: CameraNamespace['camera.take']['request'],\n ): Promise<CameraNamespace['camera.take']['response']> => {\n let ImagePicker: ImagePickerModule | null = null;\n try { ImagePicker = require('expo-image-picker') as ImagePickerModule; } catch {}\n if (!ImagePicker) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-image-picker' } as never;\n\n const result = await ImagePicker.launchCameraAsync({\n quality: payload.quality ?? 0.8,\n cameraType:\n payload.facing === 'front'\n ? ImagePicker.CameraType.front\n : ImagePicker.CameraType.back,\n allowsEditing: payload.allowsEditing ?? false,\n });\n\n if (result.canceled) {\n return { success: false, assets: [] } as never;\n }\n\n const asset = result.assets[0];\n return {\n success: true,\n uri: asset.uri,\n width: asset.width,\n height: asset.height,\n fileSize: asset.fileSize,\n mimeType: asset.mimeType ?? undefined,\n };\n },\n\n 'camera.pickImage': async (\n payload: CameraNamespace['camera.pickImage']['request'],\n ): Promise<CameraNamespace['camera.pickImage']['response']> => {\n let ImagePicker: ImagePickerModule | null = null;\n try { ImagePicker = require('expo-image-picker') as ImagePickerModule; } catch {}\n if (!ImagePicker) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-image-picker' } as never;\n\n const result = await ImagePicker.launchImageLibraryAsync({\n allowsMultipleSelection: payload.allowsMultipleSelection ?? false,\n quality: payload.quality ?? 0.8,\n selectionLimit: payload.maxCount ?? 0,\n });\n\n if (result.canceled) {\n return { success: false, assets: [] };\n }\n\n return {\n success: true,\n assets: result.assets.map((a) => ({\n uri: a.uri,\n width: a.width,\n height: a.height,\n fileSize: a.fileSize,\n mimeType: a.mimeType ?? undefined,\n })),\n };\n },\n};\n","import type { LocationNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ninterface ExpoLocationModule {\n Accuracy: {\n Lowest: number;\n Low: number;\n Balanced: number;\n High: number;\n Highest: number;\n };\n getCurrentPositionAsync: (opts: {\n accuracy?: number;\n }) => Promise<{\n coords: {\n latitude: number;\n longitude: number;\n altitude: number | null;\n accuracy: number | null;\n };\n timestamp: number;\n }>;\n watchPositionAsync: (\n opts: { accuracy?: number; distanceInterval?: number; timeInterval?: number },\n callback: (location: unknown) => void,\n ) => Promise<{ remove: () => void }>;\n}\n\nconst watchSubscriptions = new Map<string, { remove: () => void }>();\nlet watchCounter = 0;\n\nexport const locationHandlers = {\n 'location.getCurrent': async (\n payload: LocationNamespace['location.getCurrent']['request'],\n ): Promise<LocationNamespace['location.getCurrent']['response']> => {\n let Location: ExpoLocationModule | null = null;\n try { Location = require('expo-location') as ExpoLocationModule; } catch {}\n if (!Location) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-location' } as never;\n\n const accuracyMap: Record<string, number> = {\n lowest: Location.Accuracy.Lowest,\n low: Location.Accuracy.Low,\n balanced: Location.Accuracy.Balanced,\n high: Location.Accuracy.High,\n highest: Location.Accuracy.Highest,\n };\n\n const result = await Location.getCurrentPositionAsync({\n accuracy: accuracyMap[payload.accuracy ?? 'balanced'] ?? Location.Accuracy.Balanced,\n });\n\n return {\n lat: result.coords.latitude,\n lng: result.coords.longitude,\n altitude: result.coords.altitude ?? undefined,\n accuracy: result.coords.accuracy ?? undefined,\n timestamp: result.timestamp,\n };\n },\n\n 'location.watchStart': async (\n payload: LocationNamespace['location.watchStart']['request'],\n ): Promise<LocationNamespace['location.watchStart']['response']> => {\n let Location: ExpoLocationModule | null = null;\n try { Location = require('expo-location') as ExpoLocationModule; } catch {}\n if (!Location) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-location' } as never;\n\n watchCounter += 1;\n const watchId = `watch_${watchCounter}`;\n\n const accuracyMap: Record<string, number> = {\n low: Location.Accuracy.Low,\n balanced: Location.Accuracy.Balanced,\n high: Location.Accuracy.High,\n };\n\n const subscription = await Location.watchPositionAsync(\n {\n accuracy: accuracyMap[payload.accuracy ?? 'balanced'] ?? Location.Accuracy.Balanced,\n distanceInterval: payload.distanceInterval,\n timeInterval: payload.timeInterval,\n },\n (_location) => {\n // Event push is handled by the WebViewBridge component via emit\n },\n );\n\n watchSubscriptions.set(watchId, subscription);\n return { watchId };\n },\n\n 'location.watchStop': async (\n payload: LocationNamespace['location.watchStop']['request'],\n ): Promise<LocationNamespace['location.watchStop']['response']> => {\n const subscription = watchSubscriptions.get(payload.watchId);\n if (subscription) {\n subscription.remove();\n watchSubscriptions.delete(payload.watchId);\n return { success: true };\n }\n return { success: false };\n },\n};\n","import type { FileNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ninterface FileSystemModule {\n Paths: {\n document: { uri: string };\n cache: { uri: string };\n };\n File: new (...uris: (string | { uri: string })[]) => {\n uri: string;\n text: () => Promise<string>;\n write: (content: string) => void;\n create: () => void;\n exists: boolean;\n };\n Directory: new (...uris: (string | { uri: string })[]) => {\n uri: string;\n create: () => void;\n exists: boolean;\n };\n}\n\ninterface DocumentPickerModule {\n getDocumentAsync: (opts: {\n type?: string[];\n multiple?: boolean;\n }) => Promise<{\n canceled: boolean;\n assets: Array<{\n uri: string;\n name: string;\n size?: number;\n mimeType?: string;\n }>;\n }>;\n}\n\nexport const fileHandlers = {\n 'file.download': async (\n payload: FileNamespace['file.download']['request'],\n ): Promise<FileNamespace['file.download']['response']> => {\n let FS: FileSystemModule | null = null;\n try { FS = require('expo-file-system') as FileSystemModule; } catch {}\n if (!FS) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-file-system' } as never;\n\n try {\n const response = await fetch(payload.url);\n const text = await response.text();\n const file = new FS.File(FS.Paths.document, payload.filename);\n file.write(text);\n return { success: true, localUri: file.uri };\n } catch (err) {\n return { success: false, error: String(err) };\n }\n },\n\n 'file.read': async (\n payload: FileNamespace['file.read']['request'],\n ): Promise<FileNamespace['file.read']['response']> => {\n let FS: FileSystemModule | null = null;\n try { FS = require('expo-file-system') as FileSystemModule; } catch {}\n if (!FS) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-file-system' } as never;\n\n try {\n const file = new FS.File(payload.uri);\n const content = await file.text();\n return { success: true, content };\n } catch (err) {\n return { success: false, error: String(err) };\n }\n },\n\n 'file.write': async (\n payload: FileNamespace['file.write']['request'],\n ): Promise<FileNamespace['file.write']['response']> => {\n let FS: FileSystemModule | null = null;\n try { FS = require('expo-file-system') as FileSystemModule; } catch {}\n if (!FS) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-file-system' } as never;\n\n try {\n const dirMap = {\n document: FS.Paths.document,\n cache: FS.Paths.cache,\n temp: FS.Paths.cache,\n };\n const baseDir = dirMap[payload.directory ?? 'document'];\n const file = new FS.File(baseDir, payload.filename);\n file.write(payload.content);\n return { success: true, uri: file.uri };\n } catch (err) {\n return { success: false, error: String(err) };\n }\n },\n\n 'file.pick': async (\n payload: FileNamespace['file.pick']['request'],\n ): Promise<FileNamespace['file.pick']['response']> => {\n let DocumentPicker: DocumentPickerModule | null = null;\n try { DocumentPicker = require('expo-document-picker') as DocumentPickerModule; } catch {}\n if (!DocumentPicker) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-document-picker' } as never;\n\n try {\n const result = await DocumentPicker.getDocumentAsync({\n type: payload.type ?? ['*/*'],\n multiple: payload.multiple ?? false,\n });\n\n if (result.canceled) {\n return { success: false, files: [] };\n }\n\n return {\n success: true,\n files: result.assets.map((a) => ({\n uri: a.uri,\n name: a.name,\n size: a.size ?? 0,\n mimeType: a.mimeType ?? 'application/octet-stream',\n })),\n };\n } catch {\n return { success: false, files: [] };\n }\n },\n};\n","import type { ShareNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ninterface SharingModule {\n isAvailableAsync: () => Promise<boolean>;\n shareAsync: (url: string, opts?: { dialogTitle?: string }) => Promise<void>;\n}\n\nexport const shareHandlers = {\n 'share.open': async (\n payload: ShareNamespace['share.open']['request'],\n ): Promise<ShareNamespace['share.open']['response']> => {\n let Sharing: SharingModule | null = null;\n try { Sharing = require('expo-sharing') as SharingModule; } catch {}\n if (!Sharing) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-sharing' } as never;\n\n try {\n const isAvailable = await Sharing.isAvailableAsync();\n if (!isAvailable) {\n return { success: false };\n }\n await Sharing.shareAsync(payload.url ?? '', {\n dialogTitle: payload.title,\n });\n return { success: true };\n } catch {\n return { success: false };\n }\n },\n};\n","import type { DeviceNamespace } from '@rn-bridge-tools/core';\nimport { Platform } from 'react-native';\n\ndeclare const require: (id: string) => unknown;\n\ninterface DeviceModule {\n modelName: string | null;\n brand: string | null;\n deviceType: number | null;\n DeviceType: { TABLET: number };\n}\n\nexport const deviceHandlers = {\n 'device.getInfo': async (\n _payload: DeviceNamespace['device.getInfo']['request'],\n ): Promise<DeviceNamespace['device.getInfo']['response']> => {\n let Device: DeviceModule | null = null;\n try { Device = require('expo-device') as DeviceModule; } catch {}\n if (!Device) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-device' } as never;\n\n return {\n os: Platform.OS as 'ios' | 'android',\n osVersion: Platform.Version?.toString() ?? '',\n model: Device.modelName ?? '',\n brand: Device.brand ?? '',\n isTablet: Device.deviceType === Device.DeviceType.TABLET,\n appVersion: '1.0.0',\n buildNumber: '1',\n bundleId: '',\n };\n },\n\n 'device.getBattery': async (\n _payload: DeviceNamespace['device.getBattery']['request'],\n ): Promise<DeviceNamespace['device.getBattery']['response']> => {\n try {\n let Battery: { getBatteryLevelAsync: () => Promise<number>; getBatteryStateAsync: () => Promise<number>; BatteryState: { CHARGING: number } } | null = null;\n try { Battery = require('expo-battery') as { getBatteryLevelAsync: () => Promise<number>; getBatteryStateAsync: () => Promise<number>; BatteryState: { CHARGING: number } }; } catch {}\n if (!Battery) {\n return { level: -1, isCharging: false };\n }\n const level = await Battery.getBatteryLevelAsync();\n const state = await Battery.getBatteryStateAsync();\n return {\n level,\n isCharging: state === Battery.BatteryState.CHARGING,\n };\n } catch {\n return { level: -1, isCharging: false };\n }\n },\n\n 'device.getNetwork': async (\n _payload: DeviceNamespace['device.getNetwork']['request'],\n ): Promise<DeviceNamespace['device.getNetwork']['response']> => {\n try {\n let NetInfo: { fetch: () => Promise<{ type: string; isConnected: boolean | null }> } | null = null;\n try { NetInfo = require('@react-native-community/netinfo') as { fetch: () => Promise<{ type: string; isConnected: boolean | null }> }; } catch {}\n if (!NetInfo) {\n return { type: 'unknown', isConnected: true };\n }\n const state = await NetInfo.fetch();\n return {\n type: (state.type as 'wifi' | 'cellular' | 'none' | 'unknown') ?? 'unknown',\n isConnected: state.isConnected ?? false,\n };\n } catch {\n return { type: 'unknown', isConnected: true };\n }\n },\n};\n","import type { StatusBarNamespace } from '@rn-bridge-tools/core';\nimport { StatusBar } from 'react-native';\n\nexport const statusbarHandlers = {\n 'statusbar.setStyle': async (\n payload: StatusBarNamespace['statusbar.setStyle']['request'],\n ): Promise<StatusBarNamespace['statusbar.setStyle']['response']> => {\n const styleMap: Record<string, 'default' | 'light-content' | 'dark-content'> = {\n light: 'light-content',\n dark: 'dark-content',\n auto: 'default',\n };\n StatusBar.setBarStyle(styleMap[payload.style] ?? 'default');\n return { success: true };\n },\n\n 'statusbar.setBackgroundColor': async (\n payload: StatusBarNamespace['statusbar.setBackgroundColor']['request'],\n ): Promise<StatusBarNamespace['statusbar.setBackgroundColor']['response']> => {\n StatusBar.setBackgroundColor(payload.color, payload.animated ?? false);\n return { success: true };\n },\n\n 'statusbar.setHidden': async (\n payload: StatusBarNamespace['statusbar.setHidden']['request'],\n ): Promise<StatusBarNamespace['statusbar.setHidden']['response']> => {\n const animationMap: Record<string, 'fade' | 'slide' | 'none'> = {\n fade: 'fade',\n slide: 'slide',\n none: 'none',\n };\n StatusBar.setHidden(payload.hidden, animationMap[payload.animation ?? 'none']);\n return { success: true };\n },\n};\n","import type { KeyboardNamespace } from '@rn-bridge-tools/core';\nimport { Keyboard } from 'react-native';\n\nexport const keyboardHandlers = {\n 'keyboard.dismiss': async (\n _payload: KeyboardNamespace['keyboard.dismiss']['request'],\n ): Promise<KeyboardNamespace['keyboard.dismiss']['response']> => {\n Keyboard.dismiss();\n return { success: true };\n },\n\n 'keyboard.getState': async (\n _payload: KeyboardNamespace['keyboard.getState']['request'],\n ): Promise<KeyboardNamespace['keyboard.getState']['response']> => {\n return {\n visible: false,\n height: 0,\n };\n },\n};\n","import type { HapticNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ninterface HapticsModule {\n ImpactFeedbackStyle: { Light: unknown; Medium: unknown; Heavy: unknown };\n NotificationFeedbackType: { Success: unknown; Warning: unknown; Error: unknown };\n impactAsync: (style: never) => Promise<void>;\n notificationAsync: (type: never) => Promise<void>;\n selectionAsync: () => Promise<void>;\n}\n\nexport const hapticHandlers = {\n 'haptic.impact': async (\n payload: HapticNamespace['haptic.impact']['request'],\n ): Promise<void> => {\n let Haptics: HapticsModule | null = null;\n try { Haptics = require('expo-haptics') as HapticsModule; } catch {}\n if (!Haptics) {\n return;\n }\n\n const styleMap: Record<string, unknown> = {\n light: Haptics.ImpactFeedbackStyle.Light,\n medium: Haptics.ImpactFeedbackStyle.Medium,\n heavy: Haptics.ImpactFeedbackStyle.Heavy,\n };\n await Haptics.impactAsync(styleMap[payload.style] as never);\n },\n\n 'haptic.notification': async (\n payload: HapticNamespace['haptic.notification']['request'],\n ): Promise<void> => {\n let Haptics: HapticsModule | null = null;\n try { Haptics = require('expo-haptics') as HapticsModule; } catch {}\n if (!Haptics) {\n return;\n }\n\n const typeMap: Record<string, unknown> = {\n success: Haptics.NotificationFeedbackType.Success,\n warning: Haptics.NotificationFeedbackType.Warning,\n error: Haptics.NotificationFeedbackType.Error,\n };\n await Haptics.notificationAsync(typeMap[payload.type] as never);\n },\n\n 'haptic.selection': async (): Promise<void> => {\n let Haptics: HapticsModule | null = null;\n try { Haptics = require('expo-haptics') as HapticsModule; } catch {}\n if (!Haptics) {\n return;\n }\n await Haptics.selectionAsync();\n },\n};\n","import type { ClipboardNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ninterface ClipboardModule {\n setStringAsync: (text: string) => Promise<void>;\n getStringAsync: () => Promise<string>;\n}\n\nexport const clipboardHandlers = {\n 'clipboard.copy': async (\n payload: ClipboardNamespace['clipboard.copy']['request'],\n ): Promise<ClipboardNamespace['clipboard.copy']['response']> => {\n let Clipboard: ClipboardModule | null = null;\n try { Clipboard = require('expo-clipboard') as ClipboardModule; } catch {}\n if (!Clipboard) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-clipboard' } as never;\n\n await Clipboard.setStringAsync(payload.text);\n return { success: true };\n },\n\n 'clipboard.paste': async (\n _payload: ClipboardNamespace['clipboard.paste']['request'],\n ): Promise<ClipboardNamespace['clipboard.paste']['response']> => {\n let Clipboard: ClipboardModule | null = null;\n try { Clipboard = require('expo-clipboard') as ClipboardModule; } catch {}\n if (!Clipboard) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-clipboard' } as never;\n\n const text = await Clipboard.getStringAsync();\n return { text, hasContent: text.length > 0 };\n },\n};\n","import type { ScannerNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ninterface CameraModule {\n Camera: {\n requestCameraPermissionsAsync: () => Promise<{ status: string }>;\n };\n}\n\nexport const scannerHandlers = {\n 'scanner.scanQR': async (\n _payload: ScannerNamespace['scanner.scanQR']['request'],\n ): Promise<ScannerNamespace['scanner.scanQR']['response']> => {\n let Camera: CameraModule | null = null;\n try { Camera = require('expo-camera') as CameraModule; } catch {}\n if (!Camera) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-camera' } as never;\n\n try {\n const { status } = await Camera.Camera.requestCameraPermissionsAsync();\n if (status !== 'granted') {\n return { success: false, cancelled: true };\n }\n // QR scanning is typically handled via a component, not a direct call.\n // Return a placeholder indicating the scanner should be opened.\n return { success: false, error: 'Use Camera component for QR scanning' } as never;\n } catch {\n return { success: false };\n }\n },\n};\n","import type { AuthNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ninterface LocalAuthModule {\n authenticateAsync: (opts: {\n promptMessage?: string;\n cancelLabel?: string;\n fallbackLabel?: string;\n }) => Promise<{ success: boolean; error?: string }>;\n hasHardwareAsync: () => Promise<boolean>;\n supportedAuthenticationTypesAsync: () => Promise<number[]>;\n AuthenticationType: {\n FACIAL_RECOGNITION: number;\n FINGERPRINT: number;\n IRIS: number;\n };\n}\n\nexport const authHandlers = {\n 'auth.biometric': async (\n payload: AuthNamespace['auth.biometric']['request'],\n ): Promise<AuthNamespace['auth.biometric']['response']> => {\n let LocalAuth: LocalAuthModule | null = null;\n try { LocalAuth = require('expo-local-authentication') as LocalAuthModule; } catch {}\n if (!LocalAuth) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-local-authentication' } as never;\n\n try {\n const result = await LocalAuth.authenticateAsync({\n promptMessage: payload.promptMessage ?? 'Authenticate',\n cancelLabel: payload.cancelLabel,\n fallbackLabel: payload.fallbackLabel,\n });\n\n if (result.success) {\n return { success: true };\n }\n return { success: false, error: result.error };\n } catch (err) {\n return { success: false, error: String(err) };\n }\n },\n\n 'auth.isBiometricAvailable': async (\n _payload: AuthNamespace['auth.isBiometricAvailable']['request'],\n ): Promise<AuthNamespace['auth.isBiometricAvailable']['response']> => {\n let LocalAuth: LocalAuthModule | null = null;\n try { LocalAuth = require('expo-local-authentication') as LocalAuthModule; } catch {}\n if (!LocalAuth) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-local-authentication' } as never;\n\n try {\n const available = await LocalAuth.hasHardwareAsync();\n const types = await LocalAuth.supportedAuthenticationTypesAsync();\n\n let biometryType: 'fingerprint' | 'facial' | 'iris' | undefined;\n if (types.includes(LocalAuth.AuthenticationType.FACIAL_RECOGNITION)) {\n biometryType = 'facial';\n } else if (types.includes(LocalAuth.AuthenticationType.FINGERPRINT)) {\n biometryType = 'fingerprint';\n } else if (types.includes(LocalAuth.AuthenticationType.IRIS)) {\n biometryType = 'iris';\n }\n\n return { available, biometryType };\n } catch {\n return { available: false };\n }\n },\n};\n","import type { IAPNamespace } from '@rn-bridge-tools/core';\n\nexport const iapHandlers = {\n 'iap.getProducts': async (\n _payload: IAPNamespace['iap.getProducts']['request'],\n ): Promise<IAPNamespace['iap.getProducts']['response']> => {\n // IAP requires react-native-iap or expo-in-app-purchases\n // Placeholder implementation\n return { products: [] };\n },\n\n 'iap.purchase': async (\n _payload: IAPNamespace['iap.purchase']['request'],\n ): Promise<IAPNamespace['iap.purchase']['response']> => {\n return { success: false, error: 'IAP not configured' };\n },\n\n 'iap.restore': async (\n _payload: IAPNamespace['iap.restore']['request'],\n ): Promise<IAPNamespace['iap.restore']['response']> => {\n return { purchases: [] };\n },\n};\n","import type { PushNamespace } from '@rn-bridge-tools/core';\nimport { Platform } from 'react-native';\n\ndeclare const require: (id: string) => unknown;\n\ninterface NotificationsModule {\n getExpoPushTokenAsync: () => Promise<{ data: string }>;\n requestPermissionsAsync: () => Promise<{ status: string }>;\n}\n\nexport const pushHandlers = {\n 'push.getToken': async (\n _payload: PushNamespace['push.getToken']['request'],\n ): Promise<PushNamespace['push.getToken']['response']> => {\n let Notifications: NotificationsModule | null = null;\n try { Notifications = require('expo-notifications') as NotificationsModule; } catch {}\n if (!Notifications) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-notifications' } as never;\n\n try {\n const token = await Notifications.getExpoPushTokenAsync();\n return {\n token: token.data,\n platform: Platform.OS === 'ios' ? 'apns' : 'fcm',\n };\n } catch {\n return { token: '', platform: Platform.OS === 'ios' ? 'apns' : 'fcm' };\n }\n },\n\n 'push.requestPermission': async (\n _payload: PushNamespace['push.requestPermission']['request'],\n ): Promise<PushNamespace['push.requestPermission']['response']> => {\n let Notifications: NotificationsModule | null = null;\n try { Notifications = require('expo-notifications') as NotificationsModule; } catch {}\n if (!Notifications) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-notifications' } as never;\n\n try {\n const { status } = await Notifications.requestPermissionsAsync();\n return {\n granted: status === 'granted',\n status: status as 'granted' | 'denied' | 'undetermined',\n };\n } catch {\n return { granted: false, status: 'denied' };\n }\n },\n};\n","import type { PermissionNamespace, PermissionType } from '@rn-bridge-tools/core';\nimport { Linking } from 'react-native';\n\ndeclare const require: (id: string) => unknown;\n\ninterface PermissionCameraModule {\n Camera: {\n getCameraPermissionsAsync: () => Promise<{ status: string; canAskAgain?: boolean }>;\n requestCameraPermissionsAsync: () => Promise<{ status: string; canAskAgain?: boolean }>;\n };\n}\n\ninterface PermissionLocationModule {\n getForegroundPermissionsAsync: () => Promise<{ status: string; canAskAgain?: boolean }>;\n requestForegroundPermissionsAsync: () => Promise<{ status: string; canAskAgain?: boolean }>;\n}\n\ninterface PermissionNotificationsModule {\n getPermissionsAsync: () => Promise<{ status: string; canAskAgain?: boolean }>;\n requestPermissionsAsync: () => Promise<{ status: string; canAskAgain?: boolean }>;\n}\n\nfunction getPermissionModule(permission: PermissionType) {\n switch (permission) {\n case 'camera': {\n let mod: PermissionCameraModule | null = null;\n try { mod = require('expo-camera') as PermissionCameraModule; } catch {}\n return mod\n ? {\n check: () => mod.Camera.getCameraPermissionsAsync(),\n request: () => mod.Camera.requestCameraPermissionsAsync(),\n }\n : null;\n }\n case 'location': {\n let mod: PermissionLocationModule | null = null;\n try { mod = require('expo-location') as PermissionLocationModule; } catch {}\n return mod\n ? {\n check: () => mod.getForegroundPermissionsAsync(),\n request: () => mod.requestForegroundPermissionsAsync(),\n }\n : null;\n }\n case 'notifications': {\n let mod: PermissionNotificationsModule | null = null;\n try { mod = require('expo-notifications') as PermissionNotificationsModule; } catch {}\n return mod\n ? {\n check: () => mod.getPermissionsAsync(),\n request: () => mod.requestPermissionsAsync(),\n }\n : null;\n }\n default:\n return null;\n }\n}\n\nexport const permissionHandlers = {\n 'permission.check': async (\n payload: PermissionNamespace['permission.check']['request'],\n ): Promise<PermissionNamespace['permission.check']['response']> => {\n const mod = getPermissionModule(payload.permission);\n if (!mod) {\n return { status: 'undetermined', canAskAgain: true };\n }\n try {\n const result = await mod.check();\n return {\n status: result.status as 'granted' | 'denied' | 'undetermined',\n canAskAgain: result.canAskAgain ?? true,\n };\n } catch {\n return { status: 'undetermined', canAskAgain: true };\n }\n },\n\n 'permission.request': async (\n payload: PermissionNamespace['permission.request']['request'],\n ): Promise<PermissionNamespace['permission.request']['response']> => {\n const mod = getPermissionModule(payload.permission);\n if (!mod) {\n return { status: 'undetermined', canAskAgain: true };\n }\n try {\n const result = await mod.request();\n return {\n status: result.status as 'granted' | 'denied' | 'undetermined',\n canAskAgain: result.canAskAgain ?? true,\n };\n } catch {\n return { status: 'undetermined', canAskAgain: true };\n }\n },\n\n 'permission.openSettings': async (\n _payload: PermissionNamespace['permission.openSettings']['request'],\n ): Promise<PermissionNamespace['permission.openSettings']['response']> => {\n try {\n await Linking.openSettings();\n return { success: true };\n } catch {\n return { success: false };\n }\n },\n};\n","import type { PreferenceNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ntype AsyncStorage = {\n default: {\n getItem: (key: string) => Promise<string | null>;\n setItem: (key: string, value: string) => Promise<void>;\n removeItem: (key: string) => Promise<void>;\n clear: () => Promise<void>;\n };\n};\n\nexport const preferenceHandlers = {\n 'preference.get': async (\n payload: PreferenceNamespace['preference.get']['request'],\n ): Promise<PreferenceNamespace['preference.get']['response']> => {\n let mod: AsyncStorage | null = null;\n try { mod = require('@react-native-async-storage/async-storage') as AsyncStorage; } catch {}\n if (!mod) return { value: null };\n\n const value = await mod.default.getItem(payload.key);\n return { value };\n },\n\n 'preference.set': async (\n payload: PreferenceNamespace['preference.set']['request'],\n ): Promise<PreferenceNamespace['preference.set']['response']> => {\n let mod: AsyncStorage | null = null;\n try { mod = require('@react-native-async-storage/async-storage') as AsyncStorage; } catch {}\n if (!mod) return { success: false };\n\n await mod.default.setItem(payload.key, payload.value);\n return { success: true };\n },\n\n 'preference.remove': async (\n payload: PreferenceNamespace['preference.remove']['request'],\n ): Promise<PreferenceNamespace['preference.remove']['response']> => {\n let mod: AsyncStorage | null = null;\n try { mod = require('@react-native-async-storage/async-storage') as AsyncStorage; } catch {}\n if (!mod) return { success: false };\n\n await mod.default.removeItem(payload.key);\n return { success: true };\n },\n\n 'preference.clear': async (\n _payload: PreferenceNamespace['preference.clear']['request'],\n ): Promise<PreferenceNamespace['preference.clear']['response']> => {\n let mod: AsyncStorage | null = null;\n try { mod = require('@react-native-async-storage/async-storage') as AsyncStorage; } catch {}\n if (!mod) return { success: false };\n\n await mod.default.clear();\n return { success: true };\n },\n};\n","import type { NavigationNamespace } from '@rn-bridge-tools/core';\n\nexport const navigationHandlers = {\n 'navigation.goBack': async (\n _payload: NavigationNamespace['navigation.goBack']['request'],\n ): Promise<NavigationNamespace['navigation.goBack']['response']> => {\n // WebView goBack is handled by the WebViewBridge component\n return { success: true };\n },\n\n 'navigation.push': async (\n _payload: NavigationNamespace['navigation.push']['request'],\n ): Promise<NavigationNamespace['navigation.push']['response']> => {\n // Navigation push requires access to the navigation context\n return { success: true };\n },\n\n 'navigation.close': async (\n _payload: NavigationNamespace['navigation.close']['request'],\n ): Promise<NavigationNamespace['navigation.close']['response']> => {\n return { success: true };\n },\n\n 'navigation.setSwipeBack': async (\n _payload: NavigationNamespace['navigation.setSwipeBack']['request'],\n ): Promise<NavigationNamespace['navigation.setSwipeBack']['response']> => {\n return { success: true };\n },\n};\n","import type { BrowserNamespace } from '@rn-bridge-tools/core';\nimport { Linking } from 'react-native';\n\ndeclare const require: (id: string) => unknown;\n\ninterface WebBrowserModule {\n openBrowserAsync: (\n url: string,\n opts?: { showTitle?: boolean; toolbarColor?: string },\n ) => Promise<void>;\n}\n\nexport const browserHandlers = {\n 'browser.openExternal': async (\n payload: BrowserNamespace['browser.openExternal']['request'],\n ): Promise<BrowserNamespace['browser.openExternal']['response']> => {\n try {\n await Linking.openURL(payload.url);\n return { success: true };\n } catch {\n return { success: false };\n }\n },\n\n 'browser.openInternal': async (\n payload: BrowserNamespace['browser.openInternal']['request'],\n ): Promise<BrowserNamespace['browser.openInternal']['response']> => {\n let WebBrowser: WebBrowserModule | null = null;\n try { WebBrowser = require('expo-web-browser') as WebBrowserModule; } catch {}\n if (!WebBrowser) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-web-browser' } as never;\n\n try {\n await WebBrowser.openBrowserAsync(payload.url, {\n showTitle: payload.showTitle,\n toolbarColor: payload.toolbarColor,\n });\n return { success: true };\n } catch {\n return { success: false };\n }\n },\n};\n","import type { HandlerOptions } from '@rn-bridge-tools/core';\nimport { cameraHandlers } from './handlers/camera.js';\nimport { locationHandlers } from './handlers/location.js';\nimport { fileHandlers } from './handlers/file.js';\nimport { shareHandlers } from './handlers/share.js';\nimport { deviceHandlers } from './handlers/device.js';\nimport { statusbarHandlers } from './handlers/statusbar.js';\nimport { keyboardHandlers } from './handlers/keyboard.js';\nimport { hapticHandlers } from './handlers/haptic.js';\nimport { clipboardHandlers } from './handlers/clipboard.js';\nimport { scannerHandlers } from './handlers/scanner.js';\nimport { authHandlers } from './handlers/auth.js';\nimport { iapHandlers } from './handlers/iap.js';\nimport { pushHandlers } from './handlers/push.js';\nimport { permissionHandlers } from './handlers/permission.js';\nimport { preferenceHandlers } from './handlers/preference.js';\nimport { navigationHandlers } from './handlers/navigation.js';\nimport { browserHandlers } from './handlers/browser.js';\n\nexport type HandlerFn = (payload: never) => Promise<unknown> | unknown;\nexport type HandlerMap = Record<string, HandlerFn>;\n\nconst handlerRegistry: Record<string, Record<string, (payload: never) => Promise<unknown> | unknown>> = {\n camera: cameraHandlers as Record<string, (payload: never) => Promise<unknown>>,\n location: locationHandlers as Record<string, (payload: never) => Promise<unknown>>,\n file: fileHandlers as Record<string, (payload: never) => Promise<unknown>>,\n share: shareHandlers as Record<string, (payload: never) => Promise<unknown>>,\n device: deviceHandlers as Record<string, (payload: never) => Promise<unknown>>,\n statusbar: statusbarHandlers as Record<string, (payload: never) => Promise<unknown>>,\n keyboard: keyboardHandlers as Record<string, (payload: never) => Promise<unknown>>,\n haptic: hapticHandlers as Record<string, (payload: never) => Promise<unknown>>,\n clipboard: clipboardHandlers as Record<string, (payload: never) => Promise<unknown>>,\n scanner: scannerHandlers as Record<string, (payload: never) => Promise<unknown>>,\n auth: authHandlers as Record<string, (payload: never) => Promise<unknown>>,\n iap: iapHandlers as Record<string, (payload: never) => Promise<unknown>>,\n push: pushHandlers as Record<string, (payload: never) => Promise<unknown>>,\n permission: permissionHandlers as Record<string, (payload: never) => Promise<unknown>>,\n preference: preferenceHandlers as Record<string, (payload: never) => Promise<unknown>>,\n navigation: navigationHandlers as Record<string, (payload: never) => Promise<unknown>>,\n browser: browserHandlers as Record<string, (payload: never) => Promise<unknown>>,\n};\n\nfunction createDisabledHandler(_namespace: string, _action: string): HandlerFn {\n return async () => ({\n success: false,\n error: `not_enabled: ${_namespace}.${_action}`,\n });\n}\n\nexport function createDefaultHandlers(options: HandlerOptions = {}): HandlerMap {\n const result: HandlerMap = {};\n\n for (const [namespace, handlers] of Object.entries(handlerRegistry)) {\n const enabled = options[namespace as keyof HandlerOptions] ?? false;\n\n for (const [action, handler] of Object.entries(handlers)) {\n if (enabled) {\n result[action] = handler as HandlerFn;\n } else {\n const actionName = action.split('.')[1] ?? action;\n result[action] = createDisabledHandler(namespace, actionName);\n }\n }\n }\n\n return result;\n}\n"],"mappings":"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","names":["WebViewBridge","import_react_native","import_react_native","import_react_native","import_react_native","import_react_native","import_react_native"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/WebViewBridge.tsx","../src/handlers/camera.ts","../src/handlers/location.ts","../src/handlers/file.ts","../src/handlers/share.ts","../src/handlers/device.ts","../src/handlers/statusbar.ts","../src/handlers/keyboard.ts","../src/handlers/haptic.ts","../src/handlers/clipboard.ts","../src/handlers/scanner.ts","../src/handlers/auth.ts","../src/handlers/iap.ts","../src/handlers/push.ts","../src/handlers/permission.ts","../src/handlers/preference.ts","../src/handlers/navigation.ts","../src/handlers/browser.ts","../src/createHandlers.ts"],"sourcesContent":["export { WebViewBridge, createBridgeWebView } from './WebViewBridge.js';\nexport type { WebViewBridgeProps, WebViewBridgeRef } from './WebViewBridge.js';\nexport { createDefaultHandlers } from './createHandlers.js';\nexport type { HandlerFn, HandlerMap } from './createHandlers.js';\n\n// Re-export handler maps for advanced usage\nexport { cameraHandlers } from './handlers/camera.js';\nexport { locationHandlers } from './handlers/location.js';\nexport { fileHandlers } from './handlers/file.js';\nexport { shareHandlers } from './handlers/share.js';\nexport { deviceHandlers } from './handlers/device.js';\nexport { statusbarHandlers } from './handlers/statusbar.js';\nexport { keyboardHandlers } from './handlers/keyboard.js';\nexport { hapticHandlers } from './handlers/haptic.js';\nexport { clipboardHandlers } from './handlers/clipboard.js';\nexport { scannerHandlers } from './handlers/scanner.js';\nexport { authHandlers } from './handlers/auth.js';\nexport { iapHandlers } from './handlers/iap.js';\nexport { pushHandlers } from './handlers/push.js';\nexport { permissionHandlers } from './handlers/permission.js';\nexport { preferenceHandlers } from './handlers/preference.js';\nexport { navigationHandlers } from './handlers/navigation.js';\nexport { browserHandlers } from './handlers/browser.js';\n","import React, { forwardRef, useImperativeHandle, useRef } from 'react';\nimport { bridge, createWebView } from '@webview-bridge/react-native';\nimport type { WebViewProps } from 'react-native-webview';\nimport type { BridgeToolsAction, BridgeToolsEvents, BridgeToolsEvent } from '@rn-bridge-tools/core';\n\nimport type { HandlerFn, HandlerMap } from './createHandlers.js';\n\nexport interface WebViewBridgeProps extends Omit<WebViewProps, 'ref'> {\n handlers: HandlerMap;\n customHandlers?: Partial<Record<BridgeToolsAction, HandlerFn>>;\n}\n\nexport interface WebViewBridgeRef {\n emit: <E extends BridgeToolsEvent>(event: E, data: BridgeToolsEvents[E]) => void;\n}\n\nexport function createBridgeWebView(\n handlers: HandlerMap,\n customHandlers?: Partial<Record<BridgeToolsAction, HandlerFn>>,\n) {\n const allHandlers: Record<string, (...args: unknown[]) => Promise<unknown>> = {};\n\n const merged = { ...handlers, ...customHandlers };\n for (const [key, handler] of Object.entries(merged)) {\n if (handler) {\n allHandlers[key] = async (...args: unknown[]) => {\n const payload = args[0] ?? {};\n return (handler as (p: unknown) => Promise<unknown>)(payload);\n };\n }\n }\n\n const appBridge = bridge(allHandlers);\n return createWebView({ bridge: appBridge });\n}\n\nexport const WebViewBridge = forwardRef<WebViewBridgeRef, WebViewBridgeProps>(\n function WebViewBridge({ handlers, customHandlers, ...webViewProps }, ref) {\n const setupRef = useRef<ReturnType<typeof createBridgeWebView> | null>(null);\n if (!setupRef.current) {\n setupRef.current = createBridgeWebView(handlers, customHandlers);\n }\n\n const { WebView: InternalWebView, postMessage } = setupRef.current;\n\n useImperativeHandle(\n ref,\n () => ({\n emit: <E extends BridgeToolsEvent>(event: E, data: BridgeToolsEvents[E]) => {\n postMessage(event, data as never);\n },\n }),\n [postMessage],\n );\n\n return <InternalWebView {...webViewProps} />;\n },\n);\n","import type { CameraNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ninterface ImagePickerModule {\n launchCameraAsync: (opts: {\n quality?: number;\n cameraType?: unknown;\n allowsEditing?: boolean;\n }) => Promise<{\n canceled: boolean;\n assets: Array<{\n uri: string;\n width: number;\n height: number;\n fileSize?: number;\n mimeType?: string | null;\n }>;\n }>;\n launchImageLibraryAsync: (opts: {\n allowsMultipleSelection?: boolean;\n quality?: number;\n selectionLimit?: number;\n }) => Promise<{\n canceled: boolean;\n assets: Array<{\n uri: string;\n width: number;\n height: number;\n fileSize?: number;\n mimeType?: string | null;\n }>;\n }>;\n CameraType: { front: unknown; back: unknown };\n}\n\nexport const cameraHandlers = {\n 'camera.take': async (\n payload: CameraNamespace['camera.take']['request'],\n ): Promise<CameraNamespace['camera.take']['response']> => {\n let ImagePicker: ImagePickerModule | null = null;\n try { ImagePicker = require('expo-image-picker') as ImagePickerModule; } catch {}\n if (!ImagePicker) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-image-picker' } as never;\n\n const result = await ImagePicker.launchCameraAsync({\n quality: payload.quality ?? 0.8,\n cameraType:\n payload.facing === 'front'\n ? ImagePicker.CameraType.front\n : ImagePicker.CameraType.back,\n allowsEditing: payload.allowsEditing ?? false,\n });\n\n if (result.canceled) {\n return { success: false, assets: [] } as never;\n }\n\n const asset = result.assets[0];\n return {\n success: true,\n uri: asset.uri,\n width: asset.width,\n height: asset.height,\n fileSize: asset.fileSize,\n mimeType: asset.mimeType ?? undefined,\n };\n },\n\n 'camera.pickImage': async (\n payload: CameraNamespace['camera.pickImage']['request'],\n ): Promise<CameraNamespace['camera.pickImage']['response']> => {\n let ImagePicker: ImagePickerModule | null = null;\n try { ImagePicker = require('expo-image-picker') as ImagePickerModule; } catch {}\n if (!ImagePicker) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-image-picker' } as never;\n\n const result = await ImagePicker.launchImageLibraryAsync({\n allowsMultipleSelection: payload.allowsMultipleSelection ?? false,\n quality: payload.quality ?? 0.8,\n selectionLimit: payload.maxCount ?? 0,\n });\n\n if (result.canceled) {\n return { success: false, assets: [] };\n }\n\n return {\n success: true,\n assets: result.assets.map((a) => ({\n uri: a.uri,\n width: a.width,\n height: a.height,\n fileSize: a.fileSize,\n mimeType: a.mimeType ?? undefined,\n })),\n };\n },\n};\n","import type { LocationNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ninterface ExpoLocationModule {\n Accuracy: {\n Lowest: number;\n Low: number;\n Balanced: number;\n High: number;\n Highest: number;\n };\n getCurrentPositionAsync: (opts: {\n accuracy?: number;\n }) => Promise<{\n coords: {\n latitude: number;\n longitude: number;\n altitude: number | null;\n accuracy: number | null;\n };\n timestamp: number;\n }>;\n watchPositionAsync: (\n opts: { accuracy?: number; distanceInterval?: number; timeInterval?: number },\n callback: (location: unknown) => void,\n ) => Promise<{ remove: () => void }>;\n}\n\nconst watchSubscriptions = new Map<string, { remove: () => void }>();\nlet watchCounter = 0;\n\nexport const locationHandlers = {\n 'location.getCurrent': async (\n payload: LocationNamespace['location.getCurrent']['request'],\n ): Promise<LocationNamespace['location.getCurrent']['response']> => {\n let Location: ExpoLocationModule | null = null;\n try { Location = require('expo-location') as ExpoLocationModule; } catch {}\n if (!Location) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-location' } as never;\n\n const accuracyMap: Record<string, number> = {\n lowest: Location.Accuracy.Lowest,\n low: Location.Accuracy.Low,\n balanced: Location.Accuracy.Balanced,\n high: Location.Accuracy.High,\n highest: Location.Accuracy.Highest,\n };\n\n const result = await Location.getCurrentPositionAsync({\n accuracy: accuracyMap[payload.accuracy ?? 'balanced'] ?? Location.Accuracy.Balanced,\n });\n\n return {\n lat: result.coords.latitude,\n lng: result.coords.longitude,\n altitude: result.coords.altitude ?? undefined,\n accuracy: result.coords.accuracy ?? undefined,\n timestamp: result.timestamp,\n };\n },\n\n 'location.watchStart': async (\n payload: LocationNamespace['location.watchStart']['request'],\n ): Promise<LocationNamespace['location.watchStart']['response']> => {\n let Location: ExpoLocationModule | null = null;\n try { Location = require('expo-location') as ExpoLocationModule; } catch {}\n if (!Location) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-location' } as never;\n\n watchCounter += 1;\n const watchId = `watch_${watchCounter}`;\n\n const accuracyMap: Record<string, number> = {\n low: Location.Accuracy.Low,\n balanced: Location.Accuracy.Balanced,\n high: Location.Accuracy.High,\n };\n\n const subscription = await Location.watchPositionAsync(\n {\n accuracy: accuracyMap[payload.accuracy ?? 'balanced'] ?? Location.Accuracy.Balanced,\n distanceInterval: payload.distanceInterval,\n timeInterval: payload.timeInterval,\n },\n (_location) => {\n // Event push is handled by the WebViewBridge component via emit\n },\n );\n\n watchSubscriptions.set(watchId, subscription);\n return { watchId };\n },\n\n 'location.watchStop': async (\n payload: LocationNamespace['location.watchStop']['request'],\n ): Promise<LocationNamespace['location.watchStop']['response']> => {\n const subscription = watchSubscriptions.get(payload.watchId);\n if (subscription) {\n subscription.remove();\n watchSubscriptions.delete(payload.watchId);\n return { success: true };\n }\n return { success: false };\n },\n};\n","import type { FileNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ninterface FileSystemModule {\n Paths: {\n document: { uri: string };\n cache: { uri: string };\n };\n File: new (...uris: (string | { uri: string })[]) => {\n uri: string;\n text: () => Promise<string>;\n write: (content: string) => void;\n create: () => void;\n exists: boolean;\n };\n Directory: new (...uris: (string | { uri: string })[]) => {\n uri: string;\n create: () => void;\n exists: boolean;\n };\n}\n\ninterface DocumentPickerModule {\n getDocumentAsync: (opts: {\n type?: string[];\n multiple?: boolean;\n }) => Promise<{\n canceled: boolean;\n assets: Array<{\n uri: string;\n name: string;\n size?: number;\n mimeType?: string;\n }>;\n }>;\n}\n\nexport const fileHandlers = {\n 'file.download': async (\n payload: FileNamespace['file.download']['request'],\n ): Promise<FileNamespace['file.download']['response']> => {\n let FS: FileSystemModule | null = null;\n try { FS = require('expo-file-system') as FileSystemModule; } catch {}\n if (!FS) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-file-system' } as never;\n\n try {\n const response = await fetch(payload.url);\n const text = await response.text();\n const file = new FS.File(FS.Paths.document, payload.filename);\n file.write(text);\n return { success: true, localUri: file.uri };\n } catch (err) {\n return { success: false, error: String(err) };\n }\n },\n\n 'file.read': async (\n payload: FileNamespace['file.read']['request'],\n ): Promise<FileNamespace['file.read']['response']> => {\n let FS: FileSystemModule | null = null;\n try { FS = require('expo-file-system') as FileSystemModule; } catch {}\n if (!FS) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-file-system' } as never;\n\n try {\n const file = new FS.File(payload.uri);\n const content = await file.text();\n return { success: true, content };\n } catch (err) {\n return { success: false, error: String(err) };\n }\n },\n\n 'file.write': async (\n payload: FileNamespace['file.write']['request'],\n ): Promise<FileNamespace['file.write']['response']> => {\n let FS: FileSystemModule | null = null;\n try { FS = require('expo-file-system') as FileSystemModule; } catch {}\n if (!FS) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-file-system' } as never;\n\n try {\n const dirMap = {\n document: FS.Paths.document,\n cache: FS.Paths.cache,\n temp: FS.Paths.cache,\n };\n const baseDir = dirMap[payload.directory ?? 'document'];\n const file = new FS.File(baseDir, payload.filename);\n file.write(payload.content);\n return { success: true, uri: file.uri };\n } catch (err) {\n return { success: false, error: String(err) };\n }\n },\n\n 'file.pick': async (\n payload: FileNamespace['file.pick']['request'],\n ): Promise<FileNamespace['file.pick']['response']> => {\n let DocumentPicker: DocumentPickerModule | null = null;\n try { DocumentPicker = require('expo-document-picker') as DocumentPickerModule; } catch {}\n if (!DocumentPicker) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-document-picker' } as never;\n\n try {\n const result = await DocumentPicker.getDocumentAsync({\n type: payload.type ?? ['*/*'],\n multiple: payload.multiple ?? false,\n });\n\n if (result.canceled) {\n return { success: false, files: [] };\n }\n\n return {\n success: true,\n files: result.assets.map((a) => ({\n uri: a.uri,\n name: a.name,\n size: a.size ?? 0,\n mimeType: a.mimeType ?? 'application/octet-stream',\n })),\n };\n } catch {\n return { success: false, files: [] };\n }\n },\n};\n","import type { ShareNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ninterface SharingModule {\n isAvailableAsync: () => Promise<boolean>;\n shareAsync: (url: string, opts?: { dialogTitle?: string }) => Promise<void>;\n}\n\nexport const shareHandlers = {\n 'share.open': async (\n payload: ShareNamespace['share.open']['request'],\n ): Promise<ShareNamespace['share.open']['response']> => {\n let Sharing: SharingModule | null = null;\n try { Sharing = require('expo-sharing') as SharingModule; } catch {}\n if (!Sharing) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-sharing' } as never;\n\n try {\n const isAvailable = await Sharing.isAvailableAsync();\n if (!isAvailable) {\n return { success: false };\n }\n await Sharing.shareAsync(payload.url ?? '', {\n dialogTitle: payload.title,\n });\n return { success: true };\n } catch {\n return { success: false };\n }\n },\n};\n","import type { DeviceNamespace } from '@rn-bridge-tools/core';\nimport { Platform } from 'react-native';\n\ndeclare const require: (id: string) => unknown;\n\ninterface DeviceModule {\n modelName: string | null;\n brand: string | null;\n deviceType: number | null;\n DeviceType: { TABLET: number };\n}\n\nexport const deviceHandlers = {\n 'device.getInfo': async (\n _payload: DeviceNamespace['device.getInfo']['request'],\n ): Promise<DeviceNamespace['device.getInfo']['response']> => {\n let Device: DeviceModule | null = null;\n try { Device = require('expo-device') as DeviceModule; } catch {}\n if (!Device) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-device' } as never;\n\n return {\n os: Platform.OS as 'ios' | 'android',\n osVersion: Platform.Version?.toString() ?? '',\n model: Device.modelName ?? '',\n brand: Device.brand ?? '',\n isTablet: Device.deviceType === Device.DeviceType.TABLET,\n appVersion: '1.0.0',\n buildNumber: '1',\n bundleId: '',\n };\n },\n\n 'device.getBattery': async (\n _payload: DeviceNamespace['device.getBattery']['request'],\n ): Promise<DeviceNamespace['device.getBattery']['response']> => {\n try {\n let Battery: { getBatteryLevelAsync: () => Promise<number>; getBatteryStateAsync: () => Promise<number>; BatteryState: { CHARGING: number } } | null = null;\n try { Battery = require('expo-battery') as { getBatteryLevelAsync: () => Promise<number>; getBatteryStateAsync: () => Promise<number>; BatteryState: { CHARGING: number } }; } catch {}\n if (!Battery) {\n return { level: -1, isCharging: false };\n }\n const level = await Battery.getBatteryLevelAsync();\n const state = await Battery.getBatteryStateAsync();\n return {\n level,\n isCharging: state === Battery.BatteryState.CHARGING,\n };\n } catch {\n return { level: -1, isCharging: false };\n }\n },\n\n 'device.getNetwork': async (\n _payload: DeviceNamespace['device.getNetwork']['request'],\n ): Promise<DeviceNamespace['device.getNetwork']['response']> => {\n try {\n let NetInfo: { fetch: () => Promise<{ type: string; isConnected: boolean | null }> } | null = null;\n try { NetInfo = require('@react-native-community/netinfo') as { fetch: () => Promise<{ type: string; isConnected: boolean | null }> }; } catch {}\n if (!NetInfo) {\n return { type: 'unknown', isConnected: true };\n }\n const state = await NetInfo.fetch();\n return {\n type: (state.type as 'wifi' | 'cellular' | 'none' | 'unknown') ?? 'unknown',\n isConnected: state.isConnected ?? false,\n };\n } catch {\n return { type: 'unknown', isConnected: true };\n }\n },\n};\n","import type { StatusBarNamespace } from '@rn-bridge-tools/core';\nimport { StatusBar } from 'react-native';\n\nexport const statusbarHandlers = {\n 'statusbar.setStyle': async (\n payload: StatusBarNamespace['statusbar.setStyle']['request'],\n ): Promise<StatusBarNamespace['statusbar.setStyle']['response']> => {\n const styleMap: Record<string, 'default' | 'light-content' | 'dark-content'> = {\n light: 'light-content',\n dark: 'dark-content',\n auto: 'default',\n };\n StatusBar.setBarStyle(styleMap[payload.style] ?? 'default');\n return { success: true };\n },\n\n 'statusbar.setBackgroundColor': async (\n payload: StatusBarNamespace['statusbar.setBackgroundColor']['request'],\n ): Promise<StatusBarNamespace['statusbar.setBackgroundColor']['response']> => {\n StatusBar.setBackgroundColor(payload.color, payload.animated ?? false);\n return { success: true };\n },\n\n 'statusbar.setHidden': async (\n payload: StatusBarNamespace['statusbar.setHidden']['request'],\n ): Promise<StatusBarNamespace['statusbar.setHidden']['response']> => {\n const animationMap: Record<string, 'fade' | 'slide' | 'none'> = {\n fade: 'fade',\n slide: 'slide',\n none: 'none',\n };\n StatusBar.setHidden(payload.hidden, animationMap[payload.animation ?? 'none']);\n return { success: true };\n },\n};\n","import type { KeyboardNamespace } from '@rn-bridge-tools/core';\nimport { Keyboard } from 'react-native';\n\nexport const keyboardHandlers = {\n 'keyboard.dismiss': async (\n _payload: KeyboardNamespace['keyboard.dismiss']['request'],\n ): Promise<KeyboardNamespace['keyboard.dismiss']['response']> => {\n Keyboard.dismiss();\n return { success: true };\n },\n\n 'keyboard.getState': async (\n _payload: KeyboardNamespace['keyboard.getState']['request'],\n ): Promise<KeyboardNamespace['keyboard.getState']['response']> => {\n return {\n visible: false,\n height: 0,\n };\n },\n};\n","import type { HapticNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ninterface HapticsModule {\n ImpactFeedbackStyle: { Light: unknown; Medium: unknown; Heavy: unknown };\n NotificationFeedbackType: { Success: unknown; Warning: unknown; Error: unknown };\n impactAsync: (style: never) => Promise<void>;\n notificationAsync: (type: never) => Promise<void>;\n selectionAsync: () => Promise<void>;\n}\n\nexport const hapticHandlers = {\n 'haptic.impact': async (\n payload: HapticNamespace['haptic.impact']['request'],\n ): Promise<void> => {\n let Haptics: HapticsModule | null = null;\n try { Haptics = require('expo-haptics') as HapticsModule; } catch {}\n if (!Haptics) {\n return;\n }\n\n const styleMap: Record<string, unknown> = {\n light: Haptics.ImpactFeedbackStyle.Light,\n medium: Haptics.ImpactFeedbackStyle.Medium,\n heavy: Haptics.ImpactFeedbackStyle.Heavy,\n };\n await Haptics.impactAsync(styleMap[payload.style] as never);\n },\n\n 'haptic.notification': async (\n payload: HapticNamespace['haptic.notification']['request'],\n ): Promise<void> => {\n let Haptics: HapticsModule | null = null;\n try { Haptics = require('expo-haptics') as HapticsModule; } catch {}\n if (!Haptics) {\n return;\n }\n\n const typeMap: Record<string, unknown> = {\n success: Haptics.NotificationFeedbackType.Success,\n warning: Haptics.NotificationFeedbackType.Warning,\n error: Haptics.NotificationFeedbackType.Error,\n };\n await Haptics.notificationAsync(typeMap[payload.type] as never);\n },\n\n 'haptic.selection': async (): Promise<void> => {\n let Haptics: HapticsModule | null = null;\n try { Haptics = require('expo-haptics') as HapticsModule; } catch {}\n if (!Haptics) {\n return;\n }\n await Haptics.selectionAsync();\n },\n};\n","import type { ClipboardNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ninterface ClipboardModule {\n setStringAsync: (text: string) => Promise<void>;\n getStringAsync: () => Promise<string>;\n}\n\nexport const clipboardHandlers = {\n 'clipboard.copy': async (\n payload: ClipboardNamespace['clipboard.copy']['request'],\n ): Promise<ClipboardNamespace['clipboard.copy']['response']> => {\n let Clipboard: ClipboardModule | null = null;\n try { Clipboard = require('expo-clipboard') as ClipboardModule; } catch {}\n if (!Clipboard) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-clipboard' } as never;\n\n await Clipboard.setStringAsync(payload.text);\n return { success: true };\n },\n\n 'clipboard.paste': async (\n _payload: ClipboardNamespace['clipboard.paste']['request'],\n ): Promise<ClipboardNamespace['clipboard.paste']['response']> => {\n let Clipboard: ClipboardModule | null = null;\n try { Clipboard = require('expo-clipboard') as ClipboardModule; } catch {}\n if (!Clipboard) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-clipboard' } as never;\n\n const text = await Clipboard.getStringAsync();\n return { text, hasContent: text.length > 0 };\n },\n};\n","import type { ScannerNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ninterface CameraModule {\n Camera: {\n requestCameraPermissionsAsync: () => Promise<{ status: string }>;\n };\n}\n\nexport const scannerHandlers = {\n 'scanner.scanQR': async (\n _payload: ScannerNamespace['scanner.scanQR']['request'],\n ): Promise<ScannerNamespace['scanner.scanQR']['response']> => {\n let Camera: CameraModule | null = null;\n try { Camera = require('expo-camera') as CameraModule; } catch {}\n if (!Camera) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-camera' } as never;\n\n try {\n const { status } = await Camera.Camera.requestCameraPermissionsAsync();\n if (status !== 'granted') {\n return { success: false, cancelled: true };\n }\n // QR scanning is typically handled via a component, not a direct call.\n // Return a placeholder indicating the scanner should be opened.\n return { success: false, error: 'Use Camera component for QR scanning' } as never;\n } catch {\n return { success: false };\n }\n },\n};\n","import type { AuthNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ninterface LocalAuthModule {\n authenticateAsync: (opts: {\n promptMessage?: string;\n cancelLabel?: string;\n fallbackLabel?: string;\n }) => Promise<{ success: boolean; error?: string }>;\n hasHardwareAsync: () => Promise<boolean>;\n supportedAuthenticationTypesAsync: () => Promise<number[]>;\n AuthenticationType: {\n FACIAL_RECOGNITION: number;\n FINGERPRINT: number;\n IRIS: number;\n };\n}\n\nexport const authHandlers = {\n 'auth.biometric': async (\n payload: AuthNamespace['auth.biometric']['request'],\n ): Promise<AuthNamespace['auth.biometric']['response']> => {\n let LocalAuth: LocalAuthModule | null = null;\n try { LocalAuth = require('expo-local-authentication') as LocalAuthModule; } catch {}\n if (!LocalAuth) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-local-authentication' } as never;\n\n try {\n const result = await LocalAuth.authenticateAsync({\n promptMessage: payload.promptMessage ?? 'Authenticate',\n cancelLabel: payload.cancelLabel,\n fallbackLabel: payload.fallbackLabel,\n });\n\n if (result.success) {\n return { success: true };\n }\n return { success: false, error: result.error };\n } catch (err) {\n return { success: false, error: String(err) };\n }\n },\n\n 'auth.isBiometricAvailable': async (\n _payload: AuthNamespace['auth.isBiometricAvailable']['request'],\n ): Promise<AuthNamespace['auth.isBiometricAvailable']['response']> => {\n let LocalAuth: LocalAuthModule | null = null;\n try { LocalAuth = require('expo-local-authentication') as LocalAuthModule; } catch {}\n if (!LocalAuth) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-local-authentication' } as never;\n\n try {\n const available = await LocalAuth.hasHardwareAsync();\n const types = await LocalAuth.supportedAuthenticationTypesAsync();\n\n let biometryType: 'fingerprint' | 'facial' | 'iris' | undefined;\n if (types.includes(LocalAuth.AuthenticationType.FACIAL_RECOGNITION)) {\n biometryType = 'facial';\n } else if (types.includes(LocalAuth.AuthenticationType.FINGERPRINT)) {\n biometryType = 'fingerprint';\n } else if (types.includes(LocalAuth.AuthenticationType.IRIS)) {\n biometryType = 'iris';\n }\n\n return { available, biometryType };\n } catch {\n return { available: false };\n }\n },\n};\n","import type { IAPNamespace } from '@rn-bridge-tools/core';\n\nexport const iapHandlers = {\n 'iap.getProducts': async (\n _payload: IAPNamespace['iap.getProducts']['request'],\n ): Promise<IAPNamespace['iap.getProducts']['response']> => {\n // IAP requires react-native-iap or expo-in-app-purchases\n // Placeholder implementation\n return { products: [] };\n },\n\n 'iap.purchase': async (\n _payload: IAPNamespace['iap.purchase']['request'],\n ): Promise<IAPNamespace['iap.purchase']['response']> => {\n return { success: false, error: 'IAP not configured' };\n },\n\n 'iap.restore': async (\n _payload: IAPNamespace['iap.restore']['request'],\n ): Promise<IAPNamespace['iap.restore']['response']> => {\n return { purchases: [] };\n },\n};\n","import type { PushNamespace } from '@rn-bridge-tools/core';\nimport { Platform } from 'react-native';\n\ndeclare const require: (id: string) => unknown;\n\ninterface NotificationsModule {\n getExpoPushTokenAsync: () => Promise<{ data: string }>;\n requestPermissionsAsync: () => Promise<{ status: string }>;\n}\n\nexport const pushHandlers = {\n 'push.getToken': async (\n _payload: PushNamespace['push.getToken']['request'],\n ): Promise<PushNamespace['push.getToken']['response']> => {\n let Notifications: NotificationsModule | null = null;\n try { Notifications = require('expo-notifications') as NotificationsModule; } catch {}\n if (!Notifications) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-notifications' } as never;\n\n try {\n const token = await Notifications.getExpoPushTokenAsync();\n return {\n token: token.data,\n platform: Platform.OS === 'ios' ? 'apns' : 'fcm',\n };\n } catch {\n return { token: '', platform: Platform.OS === 'ios' ? 'apns' : 'fcm' };\n }\n },\n\n 'push.requestPermission': async (\n _payload: PushNamespace['push.requestPermission']['request'],\n ): Promise<PushNamespace['push.requestPermission']['response']> => {\n let Notifications: NotificationsModule | null = null;\n try { Notifications = require('expo-notifications') as NotificationsModule; } catch {}\n if (!Notifications) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-notifications' } as never;\n\n try {\n const { status } = await Notifications.requestPermissionsAsync();\n return {\n granted: status === 'granted',\n status: status as 'granted' | 'denied' | 'undetermined',\n };\n } catch {\n return { granted: false, status: 'denied' };\n }\n },\n};\n","import type { PermissionNamespace, PermissionType } from '@rn-bridge-tools/core';\nimport { Linking } from 'react-native';\n\ndeclare const require: (id: string) => unknown;\n\ninterface PermissionCameraModule {\n Camera: {\n getCameraPermissionsAsync: () => Promise<{ status: string; canAskAgain?: boolean }>;\n requestCameraPermissionsAsync: () => Promise<{ status: string; canAskAgain?: boolean }>;\n };\n}\n\ninterface PermissionLocationModule {\n getForegroundPermissionsAsync: () => Promise<{ status: string; canAskAgain?: boolean }>;\n requestForegroundPermissionsAsync: () => Promise<{ status: string; canAskAgain?: boolean }>;\n}\n\ninterface PermissionNotificationsModule {\n getPermissionsAsync: () => Promise<{ status: string; canAskAgain?: boolean }>;\n requestPermissionsAsync: () => Promise<{ status: string; canAskAgain?: boolean }>;\n}\n\nfunction getPermissionModule(permission: PermissionType) {\n switch (permission) {\n case 'camera': {\n let mod: PermissionCameraModule | null = null;\n try { mod = require('expo-camera') as PermissionCameraModule; } catch {}\n return mod\n ? {\n check: () => mod.Camera.getCameraPermissionsAsync(),\n request: () => mod.Camera.requestCameraPermissionsAsync(),\n }\n : null;\n }\n case 'location': {\n let mod: PermissionLocationModule | null = null;\n try { mod = require('expo-location') as PermissionLocationModule; } catch {}\n return mod\n ? {\n check: () => mod.getForegroundPermissionsAsync(),\n request: () => mod.requestForegroundPermissionsAsync(),\n }\n : null;\n }\n case 'notifications': {\n let mod: PermissionNotificationsModule | null = null;\n try { mod = require('expo-notifications') as PermissionNotificationsModule; } catch {}\n return mod\n ? {\n check: () => mod.getPermissionsAsync(),\n request: () => mod.requestPermissionsAsync(),\n }\n : null;\n }\n default:\n return null;\n }\n}\n\nexport const permissionHandlers = {\n 'permission.check': async (\n payload: PermissionNamespace['permission.check']['request'],\n ): Promise<PermissionNamespace['permission.check']['response']> => {\n const mod = getPermissionModule(payload.permission);\n if (!mod) {\n return { status: 'undetermined', canAskAgain: true };\n }\n try {\n const result = await mod.check();\n return {\n status: result.status as 'granted' | 'denied' | 'undetermined',\n canAskAgain: result.canAskAgain ?? true,\n };\n } catch {\n return { status: 'undetermined', canAskAgain: true };\n }\n },\n\n 'permission.request': async (\n payload: PermissionNamespace['permission.request']['request'],\n ): Promise<PermissionNamespace['permission.request']['response']> => {\n const mod = getPermissionModule(payload.permission);\n if (!mod) {\n return { status: 'undetermined', canAskAgain: true };\n }\n try {\n const result = await mod.request();\n return {\n status: result.status as 'granted' | 'denied' | 'undetermined',\n canAskAgain: result.canAskAgain ?? true,\n };\n } catch {\n return { status: 'undetermined', canAskAgain: true };\n }\n },\n\n 'permission.openSettings': async (\n _payload: PermissionNamespace['permission.openSettings']['request'],\n ): Promise<PermissionNamespace['permission.openSettings']['response']> => {\n try {\n await Linking.openSettings();\n return { success: true };\n } catch {\n return { success: false };\n }\n },\n};\n","import type { PreferenceNamespace } from '@rn-bridge-tools/core';\n\ndeclare const require: (id: string) => unknown;\n\ntype AsyncStorage = {\n default: {\n getItem: (key: string) => Promise<string | null>;\n setItem: (key: string, value: string) => Promise<void>;\n removeItem: (key: string) => Promise<void>;\n clear: () => Promise<void>;\n };\n};\n\nexport const preferenceHandlers = {\n 'preference.get': async (\n payload: PreferenceNamespace['preference.get']['request'],\n ): Promise<PreferenceNamespace['preference.get']['response']> => {\n let mod: AsyncStorage | null = null;\n try { mod = require('@react-native-async-storage/async-storage') as AsyncStorage; } catch {}\n if (!mod) return { value: null };\n\n const value = await mod.default.getItem(payload.key);\n return { value };\n },\n\n 'preference.set': async (\n payload: PreferenceNamespace['preference.set']['request'],\n ): Promise<PreferenceNamespace['preference.set']['response']> => {\n let mod: AsyncStorage | null = null;\n try { mod = require('@react-native-async-storage/async-storage') as AsyncStorage; } catch {}\n if (!mod) return { success: false };\n\n await mod.default.setItem(payload.key, payload.value);\n return { success: true };\n },\n\n 'preference.remove': async (\n payload: PreferenceNamespace['preference.remove']['request'],\n ): Promise<PreferenceNamespace['preference.remove']['response']> => {\n let mod: AsyncStorage | null = null;\n try { mod = require('@react-native-async-storage/async-storage') as AsyncStorage; } catch {}\n if (!mod) return { success: false };\n\n await mod.default.removeItem(payload.key);\n return { success: true };\n },\n\n 'preference.clear': async (\n _payload: PreferenceNamespace['preference.clear']['request'],\n ): Promise<PreferenceNamespace['preference.clear']['response']> => {\n let mod: AsyncStorage | null = null;\n try { mod = require('@react-native-async-storage/async-storage') as AsyncStorage; } catch {}\n if (!mod) return { success: false };\n\n await mod.default.clear();\n return { success: true };\n },\n};\n","import type { NavigationNamespace } from '@rn-bridge-tools/core';\n\nexport const navigationHandlers = {\n 'navigation.goBack': async (\n _payload: NavigationNamespace['navigation.goBack']['request'],\n ): Promise<NavigationNamespace['navigation.goBack']['response']> => {\n // WebView goBack is handled by the WebViewBridge component\n return { success: true };\n },\n\n 'navigation.push': async (\n _payload: NavigationNamespace['navigation.push']['request'],\n ): Promise<NavigationNamespace['navigation.push']['response']> => {\n // Navigation push requires access to the navigation context\n return { success: true };\n },\n\n 'navigation.close': async (\n _payload: NavigationNamespace['navigation.close']['request'],\n ): Promise<NavigationNamespace['navigation.close']['response']> => {\n return { success: true };\n },\n\n 'navigation.setSwipeBack': async (\n _payload: NavigationNamespace['navigation.setSwipeBack']['request'],\n ): Promise<NavigationNamespace['navigation.setSwipeBack']['response']> => {\n return { success: true };\n },\n};\n","import type { BrowserNamespace } from '@rn-bridge-tools/core';\nimport { Linking } from 'react-native';\n\ndeclare const require: (id: string) => unknown;\n\ninterface WebBrowserModule {\n openBrowserAsync: (\n url: string,\n opts?: { showTitle?: boolean; toolbarColor?: string },\n ) => Promise<void>;\n}\n\nexport const browserHandlers = {\n 'browser.openExternal': async (\n payload: BrowserNamespace['browser.openExternal']['request'],\n ): Promise<BrowserNamespace['browser.openExternal']['response']> => {\n try {\n await Linking.openURL(payload.url);\n return { success: true };\n } catch {\n return { success: false };\n }\n },\n\n 'browser.openInternal': async (\n payload: BrowserNamespace['browser.openInternal']['request'],\n ): Promise<BrowserNamespace['browser.openInternal']['response']> => {\n let WebBrowser: WebBrowserModule | null = null;\n try { WebBrowser = require('expo-web-browser') as WebBrowserModule; } catch {}\n if (!WebBrowser) return { success: false, error: 'MODULE_NOT_INSTALLED: expo-web-browser' } as never;\n\n try {\n await WebBrowser.openBrowserAsync(payload.url, {\n showTitle: payload.showTitle,\n toolbarColor: payload.toolbarColor,\n });\n return { success: true };\n } catch {\n return { success: false };\n }\n },\n};\n","import type { HandlerOptions } from '@rn-bridge-tools/core';\nimport { cameraHandlers } from './handlers/camera.js';\nimport { locationHandlers } from './handlers/location.js';\nimport { fileHandlers } from './handlers/file.js';\nimport { shareHandlers } from './handlers/share.js';\nimport { deviceHandlers } from './handlers/device.js';\nimport { statusbarHandlers } from './handlers/statusbar.js';\nimport { keyboardHandlers } from './handlers/keyboard.js';\nimport { hapticHandlers } from './handlers/haptic.js';\nimport { clipboardHandlers } from './handlers/clipboard.js';\nimport { scannerHandlers } from './handlers/scanner.js';\nimport { authHandlers } from './handlers/auth.js';\nimport { iapHandlers } from './handlers/iap.js';\nimport { pushHandlers } from './handlers/push.js';\nimport { permissionHandlers } from './handlers/permission.js';\nimport { preferenceHandlers } from './handlers/preference.js';\nimport { navigationHandlers } from './handlers/navigation.js';\nimport { browserHandlers } from './handlers/browser.js';\n\nexport type HandlerFn = (payload: never) => Promise<unknown> | unknown;\nexport type HandlerMap = Record<string, HandlerFn>;\n\nconst handlerRegistry: Record<string, Record<string, (payload: never) => Promise<unknown> | unknown>> = {\n camera: cameraHandlers as Record<string, (payload: never) => Promise<unknown>>,\n location: locationHandlers as Record<string, (payload: never) => Promise<unknown>>,\n file: fileHandlers as Record<string, (payload: never) => Promise<unknown>>,\n share: shareHandlers as Record<string, (payload: never) => Promise<unknown>>,\n device: deviceHandlers as Record<string, (payload: never) => Promise<unknown>>,\n statusbar: statusbarHandlers as Record<string, (payload: never) => Promise<unknown>>,\n keyboard: keyboardHandlers as Record<string, (payload: never) => Promise<unknown>>,\n haptic: hapticHandlers as Record<string, (payload: never) => Promise<unknown>>,\n clipboard: clipboardHandlers as Record<string, (payload: never) => Promise<unknown>>,\n scanner: scannerHandlers as Record<string, (payload: never) => Promise<unknown>>,\n auth: authHandlers as Record<string, (payload: never) => Promise<unknown>>,\n iap: iapHandlers as Record<string, (payload: never) => Promise<unknown>>,\n push: pushHandlers as Record<string, (payload: never) => Promise<unknown>>,\n permission: permissionHandlers as Record<string, (payload: never) => Promise<unknown>>,\n preference: preferenceHandlers as Record<string, (payload: never) => Promise<unknown>>,\n navigation: navigationHandlers as Record<string, (payload: never) => Promise<unknown>>,\n browser: browserHandlers as Record<string, (payload: never) => Promise<unknown>>,\n};\n\nfunction createDisabledHandler(_namespace: string, _action: string): HandlerFn {\n return async () => ({\n success: false,\n error: `not_enabled: ${_namespace}.${_action}`,\n });\n}\n\nexport function createDefaultHandlers(options: HandlerOptions = {}): HandlerMap {\n const result: HandlerMap = {};\n\n for (const [namespace, handlers] of Object.entries(handlerRegistry)) {\n const enabled = options[namespace as keyof HandlerOptions] ?? false;\n\n for (const [action, handler] of Object.entries(handlers)) {\n if (enabled) {\n result[action] = handler as HandlerFn;\n } else {\n const actionName = action.split('.')[1] ?? action;\n result[action] = createDisabledHandler(namespace, actionName);\n }\n }\n }\n\n return result;\n}\n"],"mappings":"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","names":["WebViewBridge","import_react_native","import_react_native","import_react_native","import_react_native","import_react_native","import_react_native"]}
package/package.json CHANGED
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "name": "@rn-bridge-tools/expo",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "description": "Expo/React Native WebView bridge component and handlers for bridge-tools",
5
- "main": "./dist/index.cjs",
6
- "types": "./dist/index.d.cts",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
7
  "exports": {
8
8
  ".": {
9
- "types": "./dist/index.d.cts",
10
- "default": "./dist/index.cjs"
9
+ "types": "./dist/index.d.ts",
10
+ "default": "./dist/index.js"
11
11
  }
12
12
  },
13
13
  "files": [
14
14
  "dist"
15
15
  ],
16
16
  "dependencies": {
17
- "@rn-bridge-tools/core": "0.0.5"
17
+ "@rn-bridge-tools/core": "0.0.7"
18
18
  },
19
19
  "peerDependencies": {
20
20
  "@react-native-async-storage/async-storage": "*",