import { type HostBridgeRequest } from '../../../../packages/shared/src/contracts/hostBridge'; import { getMobileHostBridgeAppearanceColorScheme } from './appearance'; import { setMobileAppBadgeCount } from './badge'; import { readMobileHostBridgeClipboardText, writeMobileHostBridgeClipboardText, } from './clipboard'; import { captureMobileHostBridgeImageFile, exportMobileHostBridgeAudioFile, exportMobileHostBridgeImageFile, exportMobileHostBridgeTextFile, importMobileHostBridgeAudioFile, importMobileHostBridgeDocumentFile, importMobileHostBridgeImageFile, importMobileHostBridgeTextFile, } from './files'; import { runMobileHostBridgeHapticsImpact } from './haptics'; import { openMobileHostBridgeExternalUrl, openMobileHostBridgeNativePage, reloadMobileHostBridgeWebView, } from './navigation'; import { getMobileHostBridgeNetworkStatus } from './network'; import { showMobileHostBridgeLocalNotification } from './notifications'; import { failure, type MobileHostBridgeNavigation, unsupported, } from './protocol'; import { getMobileHostBridgeRuntimeResponse } from './runtime'; import { resetQrScannerForTest, scanMobileHostBridgeQrCode } from './scanner'; import { openShare, resetMobileHostBridgeShareTargetForTest, setMobileHostBridgeShareTarget, } from './share'; let navigation: MobileHostBridgeNavigation | null = null; export function configureMobileHostBridgeNavigation( nextNavigation: MobileHostBridgeNavigation | null, ) { navigation = nextNavigation; } export async function dispatchMobileHostBridgeRequest( request: HostBridgeRequest, ) { switch (request.method) { case 'host.getRuntime': return getMobileHostBridgeRuntimeResponse(request); case 'appearance.getColorScheme': return getMobileHostBridgeAppearanceColorScheme(request); case 'app.openExternalUrl': return openMobileHostBridgeExternalUrl(request); case 'app.reloadWebView': return reloadMobileHostBridgeWebView(request, navigation); case 'network.status': return getMobileHostBridgeNetworkStatus(request); case 'clipboard.writeText': return writeMobileHostBridgeClipboardText(request); case 'clipboard.readText': return readMobileHostBridgeClipboardText(request); case 'file.exportText': return exportMobileHostBridgeTextFile(request); case 'file.importText': return importMobileHostBridgeTextFile(request); case 'file.importDocument': return importMobileHostBridgeDocumentFile(request); case 'file.exportImage': return exportMobileHostBridgeImageFile(request); case 'file.importImage': return importMobileHostBridgeImageFile(request); case 'file.captureImage': return captureMobileHostBridgeImageFile(request); case 'scanner.scanQrCode': return scanMobileHostBridgeQrCode(request); case 'file.importAudio': return importMobileHostBridgeAudioFile(request); case 'file.exportAudio': return exportMobileHostBridgeAudioFile(request); case 'haptics.impact': return runMobileHostBridgeHapticsImpact(request); case 'notification.showLocal': return showMobileHostBridgeLocalNotification(request); case 'app.setBadgeCount': return setMobileAppBadgeCount(request); case 'share.open': return openShare(request); case 'share.setTarget': return setMobileHostBridgeShareTarget(request); case 'navigation.openNativePage': return openMobileHostBridgeNativePage(request, navigation); case 'auth.requestLogin': case 'payment.request': return failure(request, unsupported(request.method)); default: return failure(request, unsupported(request.method)); } } export function resetMobileHostBridgeDispatchForTest() { navigation = null; resetMobileHostBridgeShareTargetForTest(); resetQrScannerForTest(); }